framework
Version:
The (AI) Framework: turnkey, zero-config AI orchestration that wraps a coding-agent CLI (Claude Code) as a black box and takes you from an idea to a running app. Vite for AI.
89 lines • 4.59 kB
TypeScript
import type { Preferences } from './registry.js';
/**
* What an unset preference means, and the bounds the controls that write them share.
*
* A leaf module (no `node:*`) so `client.ts` can export it and the dashboard reads the same values
* the daemon acts on. The notification defaults used to be named predicates in the dashboard and
* open-coded at each daemon call site, in three different spellings, with a comment warning the
* reader not to copy the sibling's polarity. That warning is what a default with one home does not
* need.
*
* No cycle: `registry.ts` re-exports the bounds from here, and the `Preferences` import going the
* other way is type-only, so it erases.
*/
/**
* Notifications are a 2×2, and naming the axes is the point (B5).
*
* There are four preference keys and they are not four settings: `notifyBrowser` and
* `notifyDiscord` say *how* a notification reaches you, `notifyHumanIntervention` and
* `notifyNewActivity` say *what it is about*. Nothing in the names said which axis a key belonged
* to, and the composition ("deliver this category by this method") was open-coded per call site —
* which is how one of them got the category's polarity wrong by copying its sibling. The axes are
* named here so a caller asks the one question it actually has.
*
* The stored keys are unchanged: a settings file written before this still reads.
*/
/** How a notification reaches you. */
export type NotifyMethod = 'browser' | 'discord';
/** What a notification is about. */
export type NotifyCategory = 'humanIntervention' | 'newActivity';
/**
* What each cell means when nobody has said.
*
* The polarities are not uniform, and that is the point of writing them down once: the browser
* bell and the "needs you" baseline fire unless you turn them off, while everything that reaches
* outward (Discord) or is loosely informative (plain activity) is opt-in.
*/
export declare const NOTIFICATION_DEFAULTS: {
readonly methods: {
readonly browser: true;
readonly discord: false;
};
readonly categories: {
readonly humanIntervention: true;
readonly newActivity: false;
};
};
/** Whether a delivery method is switched on, with its default applied. */
export declare function notifyMethodEnabled(preferences: Preferences, method: NotifyMethod): boolean;
/** Whether a category is switched on, with its default applied. */
export declare function notifyCategoryEnabled(preferences: Preferences, category: NotifyCategory): boolean;
/**
* Whether this cell of the 2×2 delivers: both the method and the category have to be on.
*
* One function rather than an `&&` at each call site — that open-coding is exactly what let a
* category's polarity be wrong in one place and right in another.
*/
export declare function notifies(preferences: Preferences, method: NotifyMethod, category: NotifyCategory): boolean;
/**
* How far either way the automatic-consumption slider reaches, in percentage points (#960).
*
* Here rather than in `registry.ts` for the reason this module exists: the slider that writes the
* value is in the browser and the sanitizer that clamps it is in the daemon, so the bound has to
* be one number both can import.
*/
export declare const MAX_SPEND_OFFSET = 50;
/**
* Where the slider sits before anyone has touched it, in percentage points (#960 Edit): half a
* day's worth of the week's allowance, ahead of the boundary.
*
* Landing exactly on the boundary reads as generous on paper but stops unattended work the moment
* the account is precisely on pace, which is normal jitter rather than overspending. A half-day
* cushion gives it room to breathe without meaningfully loosening the spend-boundary policy (#879).
*/
export declare const DEFAULT_SPEND_OFFSET: number;
/**
* How many agents the routine keeps going at once when `autoPmConcurrency` is unset (#1204).
*
* Two, not one: the point of the setting is that the routine may overlap work, and a default of
* one would leave the feature invisible until someone finds the control. Two is the smallest
* number that shows it while staying conservative about quota.
*/
export declare const DEFAULT_AUTO_PM_CONCURRENCY = 2;
/**
* The most agents the routine may be asked to keep going at once (#1204). Like
* {@link MAX_SPEND_OFFSET}, the control that writes the value is in the browser and the sanitizer
* that clamps it is in the daemon, so the bound has to be one number both can import.
*/
export declare const MAX_AUTO_PM_CONCURRENCY = 10;
//# sourceMappingURL=preference-defaults.d.ts.map