@kumbatio/energy-system 0.5.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,88 @@
1
+ import type { AutonomyConfig } from './strategies.js';
2
+ import type { AdaptationStrategy } from './types.js';
3
+ /**
4
+ * Standing of the originator relative to the user.
5
+ *
6
+ * - `exempt`: the inner circle. Never sees an energy acknowledgment.
7
+ * - `known`: an established correspondent.
8
+ * - `unknown`: no established relationship.
9
+ *
10
+ * Tier assignment is the app's job — a Screener approval, a contacts list, an
11
+ * org chart. The policy only consumes the tier.
12
+ */
13
+ export type OriginatorTier = 'exempt' | 'known' | 'unknown';
14
+ /** Validate that an unknown value is a valid OriginatorTier */
15
+ export declare function isOriginatorTier(value: unknown): value is OriginatorTier;
16
+ /**
17
+ * What happens to a piece of inbound demand.
18
+ *
19
+ * - `live`: reaches the user now, untouched by this policy.
20
+ * - `acknowledge`: the originator is acknowledged and the obligation is
21
+ * captured for later. The two are one act — an acknowledgment without a
22
+ * capture is a promise nobody kept, a capture without an acknowledgment
23
+ * leaves the originator in silence.
24
+ * - `silent`: captured for later with no acknowledgment.
25
+ */
26
+ export type DemandAdmission = 'live' | 'acknowledge' | 'silent';
27
+ /** How much an acknowledgment may say */
28
+ export type AcknowledgmentDetail = 'full' | 'brief' | 'minimal';
29
+ /** Why the policy reached its decision — for audit trails and explanatory UI */
30
+ export type DemandOutcomeReason = 'exempt-originator' | 'tier-admitted' | 'no-obligation' | 'acknowledgment-disabled' | 'below-confidence' | 'acknowledged';
31
+ /**
32
+ * What the acknowledgment is permitted to be. The two axes are independent:
33
+ * how much it may say comes from the level's admission config, whether the
34
+ * wording may be composed at all comes from autonomy.
35
+ */
36
+ export interface DemandAcknowledgment {
37
+ readonly detail: AcknowledgmentDetail;
38
+ /** Whether the wording may be composed, or must come from a fixed template. */
39
+ readonly allowGeneratedContent: boolean;
40
+ }
41
+ /** The policy decision for one piece of demand */
42
+ export interface DemandOutcome {
43
+ readonly admission: DemandAdmission;
44
+ /** The acknowledgment to send. Null unless `admission` is `acknowledge`. */
45
+ readonly acknowledgment: DemandAcknowledgment | null;
46
+ readonly reason: DemandOutcomeReason;
47
+ }
48
+ /** The properties of one piece of demand that the policy reads */
49
+ export interface DemandInput {
50
+ readonly originatorTier: OriginatorTier;
51
+ /**
52
+ * Whether this demand asks something of the user. Informational mail — a
53
+ * receipt, a newsletter, a build notification — is not this policy's
54
+ * business and passes through untouched.
55
+ */
56
+ readonly bearsObligation: boolean;
57
+ /**
58
+ * Confidence (0–1) that the two classifications above are right. A
59
+ * deterministic rule reports `1`; an LLM classifier reports what it reports.
60
+ * Below the level's autonomy threshold, the demand is captured silently
61
+ * rather than risking a wrong automated action on the user's worst day.
62
+ * Defaults to `1`, so a caller with no classifier gets rule-based behavior.
63
+ */
64
+ readonly confidence?: number;
65
+ }
66
+ export interface DemandAdmissionConfig {
67
+ /**
68
+ * Lowest originator tier admitted live. Mirrors the notification gate's
69
+ * `priorityThreshold`: `all` admits everyone, `none` admits no one.
70
+ */
71
+ readonly originatorThreshold: 'all' | 'known' | 'exempt' | 'none';
72
+ /** Whether demand held back from the user is acknowledged to its originator. */
73
+ readonly acknowledge: boolean;
74
+ /** Ceiling on acknowledgment detail at this level. */
75
+ readonly acknowledgmentDetail: AcknowledgmentDetail;
76
+ }
77
+ export declare const demandAdmissionStrategy: AdaptationStrategy<DemandAdmissionConfig>;
78
+ /**
79
+ * The pure gating decision, extracted so apps can unit-test their demand
80
+ * policy without wiring any effects — the counterpart of
81
+ * `resolveNotificationOutcome`.
82
+ *
83
+ * Both configs are required because the two questions are genuinely separate:
84
+ * `admission` says what the app's policy wants done, `autonomy` says how much
85
+ * of it may happen without the user watching.
86
+ */
87
+ export declare function resolveDemandOutcome(config: DemandAdmissionConfig, autonomy: AutonomyConfig, demand: DemandInput): DemandOutcome;
88
+ //# sourceMappingURL=demand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demand.d.ts","sourceRoot":"","sources":["../src/demand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAA;AA+BjE;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;AAI3D,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;AAE/D,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,yBAAyB,GACzB,kBAAkB,GAClB,cAAc,CAAA;AAElB;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,+EAA+E;IAC/E,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;CACxC;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAA;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACpD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CACrC;AAED,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IACjE,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAA;CACpD;AAkCD,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,qBAAqB,CAmB7E,CAAA;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,WAAW,GAClB,aAAa,CAoEf"}
package/dist/demand.js ADDED
@@ -0,0 +1,166 @@
1
+ import { getEnergyLevel } from './levels.js';
2
+ /**
3
+ * Inbound demand — anything arriving from outside that asks for the user's
4
+ * attention or action: an email, a document comment, a review request, a task
5
+ * assignment, a collaboration invite.
6
+ *
7
+ * Email is the only queue in modern life with no backpressure: infinite
8
+ * senders write to a finite human with zero feedback about that human's
9
+ * capacity. Every other triage system is organised around properties of the
10
+ * *message* (sender, urgency, type); this one is organised around the state of
11
+ * the *recipient*.
12
+ *
13
+ * This module is the policy half only, and it is pure. It decides whether a
14
+ * piece of demand reaches the user now, is acknowledged to its originator and
15
+ * captured for later, or is captured silently. It never performs any of those
16
+ * effects: acknowledging an originator means sending mail, posting a comment,
17
+ * or updating a status chip depending on the app, and those effects are
18
+ * irreversible in ways an in-process runtime cannot make transactional. The
19
+ * consuming app owns the orchestration; it owns the ordering, the retries, and
20
+ * the deduplication that go with irreversible outbound effects.
21
+ *
22
+ * Pair the outcome with `deferralStrategy` for the resurface horizon: the
23
+ * acknowledgment states when the user will actually get to the item, and the
24
+ * energy-ordered deferral default is that answer.
25
+ */
26
+ function freezeObject(value) {
27
+ return Object.freeze(value);
28
+ }
29
+ const ORIGINATOR_TIERS = new Set(['exempt', 'known', 'unknown']);
30
+ /** Validate that an unknown value is a valid OriginatorTier */
31
+ export function isOriginatorTier(value) {
32
+ return typeof value === 'string' && ORIGINATOR_TIERS.has(value);
33
+ }
34
+ const ADMISSION_CONFIGS = freezeObject({
35
+ // Full capacity: no policy at all. Everything reaches the user.
36
+ 100: freezeObject({
37
+ originatorThreshold: 'all',
38
+ acknowledge: false,
39
+ acknowledgmentDetail: 'full',
40
+ }),
41
+ 75: freezeObject({
42
+ originatorThreshold: 'known',
43
+ acknowledge: true,
44
+ acknowledgmentDetail: 'full',
45
+ }),
46
+ 50: freezeObject({
47
+ originatorThreshold: 'exempt',
48
+ acknowledge: true,
49
+ acknowledgmentDetail: 'full',
50
+ }),
51
+ 25: freezeObject({
52
+ originatorThreshold: 'exempt',
53
+ acknowledge: true,
54
+ acknowledgmentDetail: 'brief',
55
+ }),
56
+ // Rest: the acknowledgment survives, stripped to a fixed template. The
57
+ // originator's social debt still clears — that is the whole point of the
58
+ // loop — but nothing is composed on the user's behalf.
59
+ 0: freezeObject({
60
+ originatorThreshold: 'exempt',
61
+ acknowledge: true,
62
+ acknowledgmentDetail: 'minimal',
63
+ }),
64
+ });
65
+ export const demandAdmissionStrategy = {
66
+ name: 'demand-admission',
67
+ describe(level) {
68
+ const def = getEnergyLevel(level);
69
+ const config = ADMISSION_CONFIGS[def.value];
70
+ const admitted = config.originatorThreshold === 'all'
71
+ ? 'all originators reach the inbox'
72
+ : config.originatorThreshold === 'none'
73
+ ? 'no originator reaches the inbox'
74
+ : `only ${config.originatorThreshold} originators reach the inbox`;
75
+ if (!config.acknowledge)
76
+ return `${def.label}: ${admitted}`;
77
+ return `${def.label}: ${admitted}, the rest get a ${config.acknowledgmentDetail} acknowledgment and are queued`;
78
+ },
79
+ resolve(level) {
80
+ return ADMISSION_CONFIGS[getEnergyLevel(level).value];
81
+ },
82
+ };
83
+ function isTierAdmitted(threshold, tier) {
84
+ switch (threshold) {
85
+ case 'all':
86
+ return true;
87
+ case 'known':
88
+ return tier !== 'unknown';
89
+ case 'exempt':
90
+ return tier === 'exempt';
91
+ case 'none':
92
+ return false;
93
+ }
94
+ }
95
+ /**
96
+ * The pure gating decision, extracted so apps can unit-test their demand
97
+ * policy without wiring any effects — the counterpart of
98
+ * `resolveNotificationOutcome`.
99
+ *
100
+ * Both configs are required because the two questions are genuinely separate:
101
+ * `admission` says what the app's policy wants done, `autonomy` says how much
102
+ * of it may happen without the user watching.
103
+ */
104
+ export function resolveDemandOutcome(config, autonomy, demand) {
105
+ if (!isOriginatorTier(demand.originatorTier)) {
106
+ throw new Error(`Invalid originator tier: ${String(demand.originatorTier)}`);
107
+ }
108
+ const confidence = demand.confidence ?? 1;
109
+ if (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) {
110
+ throw new Error(`Invalid demand confidence: ${String(demand.confidence)} (expected 0-1)`);
111
+ }
112
+ // The inner circle is never handled by machine. This is also what defuses the
113
+ // gaming risk: an originator who learns that an acknowledgment means
114
+ // "deprioritised" and escalates through another channel only succeeds if
115
+ // their escalation is one the user cannot ignore — which makes them exempt.
116
+ if (demand.originatorTier === 'exempt') {
117
+ return freezeObject({
118
+ admission: 'live',
119
+ acknowledgment: null,
120
+ reason: 'exempt-originator',
121
+ });
122
+ }
123
+ if (isTierAdmitted(config.originatorThreshold, demand.originatorTier)) {
124
+ return freezeObject({
125
+ admission: 'live',
126
+ acknowledgment: null,
127
+ reason: 'tier-admitted',
128
+ });
129
+ }
130
+ // Informational mail asks nothing, so there is nothing to acknowledge or
131
+ // capture. Whether it should *interrupt* is the notification gate's question.
132
+ if (!demand.bearsObligation) {
133
+ return freezeObject({
134
+ admission: 'live',
135
+ acknowledgment: null,
136
+ reason: 'no-obligation',
137
+ });
138
+ }
139
+ if (!config.acknowledge) {
140
+ return freezeObject({
141
+ admission: 'silent',
142
+ acknowledgment: null,
143
+ reason: 'acknowledgment-disabled',
144
+ });
145
+ }
146
+ // Rule 4, the reason this policy needs the autonomy config: an uncertain
147
+ // classification queues silently rather than sending a stranger a wrong
148
+ // acknowledgment on the user's behalf. Silence is recoverable; a sent message
149
+ // is not.
150
+ if (confidence < autonomy.confidenceThreshold) {
151
+ return freezeObject({
152
+ admission: 'silent',
153
+ acknowledgment: null,
154
+ reason: 'below-confidence',
155
+ });
156
+ }
157
+ return freezeObject({
158
+ admission: 'acknowledge',
159
+ acknowledgment: freezeObject({
160
+ detail: config.acknowledgmentDetail,
161
+ allowGeneratedContent: autonomy.allowGeneratedContent,
162
+ }),
163
+ reason: 'acknowledged',
164
+ });
165
+ }
166
+ //# sourceMappingURL=demand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demand.js","sourceRoot":"","sources":["../src/demand.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjE,sDAAsD;IACtD,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,IAAI,IAAI,CAAA;IACb,+BAA+B;IAC/B,QAAQ,IAAI,WAAW,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IACzD,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB;AA2FD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CA0WlF"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjE,sDAAsD;IACtD,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,IAAI,IAAI,CAAA;IACb,+BAA+B;IAC/B,QAAQ,IAAI,WAAW,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IACzD,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB;AAsDD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CA0WlF"}
package/dist/engine.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, isEnergyLevel, isEnergySource, } from './levels.js';
2
+ import { isPreferredEnergyState } from './reconcile.js';
2
3
  function logEngineError(message, err) {
3
4
  console.error(`[energy-system] ${message}`, err);
4
5
  }
@@ -19,36 +20,6 @@ function isSameState(a, b) {
19
20
  a.revision === b.revision &&
20
21
  a.origin === b.origin);
21
22
  }
22
- function getSourcePriority(source) {
23
- switch (source) {
24
- case 'manual':
25
- return 3;
26
- case 'scheduled':
27
- return 2;
28
- case 'inferred':
29
- return 1;
30
- }
31
- }
32
- function isPreferredExternalState(candidate, current) {
33
- if (candidate.timestamp !== current.timestamp) {
34
- return candidate.timestamp > current.timestamp;
35
- }
36
- if (candidate.revision !== current.revision) {
37
- return candidate.revision > current.revision;
38
- }
39
- if (candidate.source !== current.source) {
40
- return getSourcePriority(candidate.source) > getSourcePriority(current.source);
41
- }
42
- if (candidate.origin !== current.origin) {
43
- return candidate.origin > current.origin;
44
- }
45
- // A producer must not reuse an identity for different state. Keep a final
46
- // deterministic fallback so malformed duplicate identities still converge.
47
- if (candidate.level !== current.level) {
48
- return candidate.level > current.level;
49
- }
50
- return false;
51
- }
52
23
  function normalizeState(candidate, nowMs, maxFutureSkewMs) {
53
24
  if (!isEnergyLevel(candidate.level)) {
54
25
  throw new Error(`Invalid energy level from persistence: ${String(candidate.level)}`);
@@ -239,7 +210,7 @@ export function createEnergyEngine(options = {}) {
239
210
  logEngineError('Ignoring invalid observed energy state', err);
240
211
  return;
241
212
  }
242
- if (!isPreferredExternalState(normalized, state))
213
+ if (!isPreferredEnergyState(normalized, state))
243
214
  return;
244
215
  applyState(normalized);
245
216
  });
@@ -313,7 +284,7 @@ export function createEnergyEngine(options = {}) {
313
284
  }
314
285
  if (isSameState(normalized, state))
315
286
  return;
316
- if (hydrateStartVersion === stateVersion || isPreferredExternalState(normalized, state)) {
287
+ if (hydrateStartVersion === stateVersion || isPreferredEnergyState(normalized, state)) {
317
288
  applyState(normalized);
318
289
  }
319
290
  },
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,17 +3,20 @@ export { ENERGY_LEVEL_VALUES, ENERGY_PRESENCE_VALUES, ENERGY_SOURCE_VALUES } fro
3
3
  export { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, getEnergyLevel, getEnergyLevels, isEnergyLevel, isEnergySource, isHigherEnergy, isUnproducedState, } from './levels.js';
4
4
  export type { ExternalLevelCompatibility, ExternalLevelCompatibilityOptions } from './compat.js';
5
5
  export { createExternalLevelCompatibility, cycleDiscreteLevel, mapToNearestDiscreteLevel, mapToNearestEnergyLevel, } from './compat.js';
6
+ export { isPreferredEnergyState } from './reconcile.js';
6
7
  export { getEnergyMetrics } from './metrics.js';
7
8
  export type { EnergyEngine, EnergyEngineOptions } from './engine.js';
8
9
  export { createEnergyEngine } from './engine.js';
9
- export type { InteractionForgivenessConfig, NotificationConfig, TaskComplexityConfig, UIVisibilityConfig, } from './strategies.js';
10
- export { interactionForgivenessStrategy, notificationStrategy, taskComplexityStrategy, uiVisibilityStrategy, } from './strategies.js';
10
+ export type { AutonomyConfig, InteractionForgivenessConfig, NotificationConfig, TaskComplexityConfig, UIVisibilityConfig, } from './strategies.js';
11
+ export { autonomyStrategy, interactionForgivenessStrategy, notificationStrategy, taskComplexityStrategy, uiVisibilityStrategy, } from './strategies.js';
11
12
  export type { EnergyPresenceSpec } from './presence.js';
12
13
  export { createPresenceStrategy, defineEnergyPresence, isEnergyPresence, isPresenceVisible, presenceAtOrAbove, presenceAtOrBelow, resolveEnergyPresence, } from './presence.js';
13
14
  export type { FocusSession, FocusSessionController, FocusSessionControllerOptions, FocusSessionEvent, FocusSessionListener, FocusSuppressible, StartFocusSessionOptions, } from './session.js';
14
15
  export { createFocusSessionController, isSessionExpired, sessionRemainingMs } from './session.js';
15
16
  export type { DeferralConfig, DeferralPreset, DeferralPresetOptions } from './defer.js';
16
17
  export { DEFERRAL_PRESET_IDS, createDeferralPresets, deferralStrategy, resolveDeferral, } from './defer.js';
18
+ export type { AcknowledgmentDetail, DemandAcknowledgment, DemandAdmission, DemandAdmissionConfig, DemandInput, DemandOutcome, DemandOutcomeReason, OriginatorTier, } from './demand.js';
19
+ export { demandAdmissionStrategy, isOriginatorTier, resolveDemandOutcome } from './demand.js';
17
20
  export type { EnergyNotification, GateScheduler, NotificationChannels, NotificationDelivery, NotificationDeliveryReason, NotificationGate, NotificationGateOptions, NotificationPriority, PublishOutcome, } from './gate.js';
18
21
  export { createNotificationGate, isNotificationPriority, resolveNotificationOutcome, } from './gate.js';
19
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAG9F,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,0BAA0B,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAA;AAChG,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAG/C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,6BAA6B,EAC7B,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjG,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAG9F,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,0BAA0B,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAA;AAChG,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAG/C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY,EACV,cAAc,EACd,4BAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,6BAA6B,EAC7B,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjG,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAG7F,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -2,12 +2,15 @@ export { ENERGY_LEVEL_VALUES, ENERGY_PRESENCE_VALUES, ENERGY_SOURCE_VALUES } fro
2
2
  // Level definitions and pure functions
3
3
  export { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, getEnergyLevel, getEnergyLevels, isEnergyLevel, isEnergySource, isHigherEnergy, isUnproducedState, } from './levels.js';
4
4
  export { createExternalLevelCompatibility, cycleDiscreteLevel, mapToNearestDiscreteLevel, mapToNearestEnergyLevel, } from './compat.js';
5
+ // State reconciliation (which of two states for the same user wins)
6
+ export { isPreferredEnergyState } from './reconcile.js';
5
7
  // Derived metrics
6
8
  export { getEnergyMetrics } from './metrics.js';
7
9
  export { createEnergyEngine } from './engine.js';
8
- export { interactionForgivenessStrategy, notificationStrategy, taskComplexityStrategy, uiVisibilityStrategy, } from './strategies.js';
10
+ export { autonomyStrategy, interactionForgivenessStrategy, notificationStrategy, taskComplexityStrategy, uiVisibilityStrategy, } from './strategies.js';
9
11
  export { createPresenceStrategy, defineEnergyPresence, isEnergyPresence, isPresenceVisible, presenceAtOrAbove, presenceAtOrBelow, resolveEnergyPresence, } from './presence.js';
10
12
  export { createFocusSessionController, isSessionExpired, sessionRemainingMs } from './session.js';
11
13
  export { DEFERRAL_PRESET_IDS, createDeferralPresets, deferralStrategy, resolveDeferral, } from './defer.js';
14
+ export { demandAdmissionStrategy, isOriginatorTier, resolveDemandOutcome } from './demand.js';
12
15
  export { createNotificationGate, isNotificationPriority, resolveNotificationOutcome, } from './gate.js';
13
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE9F,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAEpB,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAI/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAShD,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAYtB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAIjG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAcnB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE9F,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAEpB,oEAAoE;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAI/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAUhD,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAYtB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAIjG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAanB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAc7F,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { EnergyState } from './types.js';
2
+ /**
3
+ * Should `candidate` replace `current`?
4
+ *
5
+ * The comparison walks four keys in order, stopping at the first that differs:
6
+ *
7
+ * 1. **`timestamp`** — later wins. The ordinary case, and the only one most
8
+ * states ever reach.
9
+ * 2. **`revision`** — higher wins. Two writes inside one clock tick are not
10
+ * simultaneous; the producer numbers them so they still order.
11
+ * 3. **`source`** — `manual` > `scheduled` > `inferred`. See `sourcePriority`.
12
+ * 4. **`origin`** — higher string wins. Not meaningful, and deliberately so:
13
+ * when two producers write the same instant, the same revision, and the same
14
+ * kind of source, there is no principled winner, and an arbitrary rule every
15
+ * context computes identically beats a coin flip each context tosses
16
+ * separately. Convergence is the property that matters.
17
+ *
18
+ * A final `level` comparison exists below the four keys as a backstop for
19
+ * producers that reuse one identity for different state, which is a contract
20
+ * violation but should still converge rather than oscillate.
21
+ *
22
+ * Equal on every key means equal: `false`, so an identical state never counts
23
+ * as a change and never fires a notification.
24
+ */
25
+ export declare function isPreferredEnergyState(candidate: EnergyState, current: EnergyState): boolean;
26
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAA;AAqC3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAsB5F"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * State reconciliation — how two `EnergyState` values that describe the same
3
+ * user are ordered when they meet.
4
+ *
5
+ * They meet constantly: a second browser tab writes the shared store, a desktop
6
+ * window and its detached child both hold an engine, a sync layer hands back
7
+ * what another device recorded. Every one of those paths needs the same answer
8
+ * to "which of these two is the current state?", and the answer has to be
9
+ * *deterministic* — not "last write wins by arrival order", which converges on
10
+ * different values depending on network timing.
11
+ *
12
+ * This is the rule, extracted from the engine so it can be read, tested, and
13
+ * ported on its own. It is the single hardest thing to reimplement correctly in
14
+ * another language, and the conformance vectors exercise it directly.
15
+ */
16
+ /**
17
+ * How much authority each source carries when everything else ties.
18
+ *
19
+ * A level the user set by hand outranks one a schedule applied, which outranks
20
+ * one inferred from behaviour. This is the library's central stance in numeric
21
+ * form: the dial is the trust anchor, and nothing the system worked out on its
22
+ * own may quietly overwrite what the person said about themselves.
23
+ */
24
+ function sourcePriority(source) {
25
+ switch (source) {
26
+ case 'manual':
27
+ return 3;
28
+ case 'scheduled':
29
+ return 2;
30
+ case 'inferred':
31
+ return 1;
32
+ }
33
+ }
34
+ /**
35
+ * Should `candidate` replace `current`?
36
+ *
37
+ * The comparison walks four keys in order, stopping at the first that differs:
38
+ *
39
+ * 1. **`timestamp`** — later wins. The ordinary case, and the only one most
40
+ * states ever reach.
41
+ * 2. **`revision`** — higher wins. Two writes inside one clock tick are not
42
+ * simultaneous; the producer numbers them so they still order.
43
+ * 3. **`source`** — `manual` > `scheduled` > `inferred`. See `sourcePriority`.
44
+ * 4. **`origin`** — higher string wins. Not meaningful, and deliberately so:
45
+ * when two producers write the same instant, the same revision, and the same
46
+ * kind of source, there is no principled winner, and an arbitrary rule every
47
+ * context computes identically beats a coin flip each context tosses
48
+ * separately. Convergence is the property that matters.
49
+ *
50
+ * A final `level` comparison exists below the four keys as a backstop for
51
+ * producers that reuse one identity for different state, which is a contract
52
+ * violation but should still converge rather than oscillate.
53
+ *
54
+ * Equal on every key means equal: `false`, so an identical state never counts
55
+ * as a change and never fires a notification.
56
+ */
57
+ export function isPreferredEnergyState(candidate, current) {
58
+ if (candidate.timestamp !== current.timestamp) {
59
+ return candidate.timestamp > current.timestamp;
60
+ }
61
+ if (candidate.revision !== current.revision) {
62
+ return candidate.revision > current.revision;
63
+ }
64
+ if (candidate.source !== current.source) {
65
+ return sourcePriority(candidate.source) > sourcePriority(current.source);
66
+ }
67
+ if (candidate.origin !== current.origin) {
68
+ return candidate.origin > current.origin;
69
+ }
70
+ if (candidate.level !== current.level) {
71
+ return candidate.level > current.level;
72
+ }
73
+ return false;
74
+ }
75
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,MAAoB;IAC1C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,CAAC,CAAA;QACV,KAAK,WAAW;YACd,OAAO,CAAC,CAAA;QACV,KAAK,UAAU;YACb,OAAO,CAAC,CAAA;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAsB,EAAE,OAAoB;IACjF,IAAI,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAChD,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAC9C,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1E,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC1C,CAAC;IAED,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IACxC,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -48,4 +48,30 @@ export interface InteractionForgivenessConfig {
48
48
  readonly autosaveIntervalMs: number;
49
49
  }
50
50
  export declare const interactionForgivenessStrategy: AdaptationStrategy<InteractionForgivenessConfig>;
51
+ /**
52
+ * How much latitude automation has to act for the user without asking.
53
+ *
54
+ * The mirror of `interactionForgivenessStrategy`: forgiveness protects against
55
+ * the *user's* mistakes at low energy, autonomy against the *agent's*. The
56
+ * system acts on the user's behalf precisely when they are least able to
57
+ * supervise it, so the worst day is the wrong day for it to improvise.
58
+ *
59
+ * What narrows as energy falls is *discretion*, not action. At rest the
60
+ * automation may still take a single, certain, template-only step — an
61
+ * out-of-office reply is exactly that shape — but it may not chain steps,
62
+ * compose novel wording, or act on a judgment call.
63
+ */
64
+ export interface AutonomyConfig {
65
+ /**
66
+ * Minimum confidence (0–1) an automated decision needs before acting
67
+ * unattended. `1` admits only certainty, which in practice means rule-based
68
+ * actions and never a judgment call.
69
+ */
70
+ readonly confidenceThreshold: number;
71
+ /** Whether automation may compose novel wording, or only fill fixed templates. */
72
+ readonly allowGeneratedContent: boolean;
73
+ /** How many automated steps may chain before control returns to the user. */
74
+ readonly maxUnattendedSteps: number;
75
+ }
76
+ export declare const autonomyStrategy: AdaptationStrategy<AutonomyConfig>;
51
77
  //# sourceMappingURL=strategies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../src/strategies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAe,cAAc,EAAE,MAAM,YAAY,CAAA;AAQjF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;CACjC;AA4DD,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB,CAoBvE,CAAA;AAID,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;CACjE;AAwCD,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB,CAgBvE,CAAA;AAID,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAA;IACtC,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;CACtC;AAgCD,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,oBAAoB,CAY3E,CAAA;AAID;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,sDAAsD;IACtD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AA8BD,eAAO,MAAM,8BAA8B,EAAE,kBAAkB,CAAC,4BAA4B,CAa3F,CAAA"}
1
+ {"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../src/strategies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAe,cAAc,EAAE,MAAM,YAAY,CAAA;AAQjF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;CACjC;AA4DD,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB,CAoBvE,CAAA;AAID,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;CACjE;AAwCD,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB,CAgBvE,CAAA;AAID,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAA;IACtC,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;CACtC;AAgCD,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,oBAAoB,CAY3E,CAAA;AAID;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,sDAAsD;IACtD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AA8BD,eAAO,MAAM,8BAA8B,EAAE,kBAAkB,CAAC,4BAA4B,CAa3F,CAAA;AAID;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,kFAAkF;IAClF,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AAiCD,eAAO,MAAM,gBAAgB,EAAE,kBAAkB,CAAC,cAAc,CAW/D,CAAA"}