@namzu/sdk 38.0.0 → 38.2.1

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.
Files changed (157) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  3. package/dist/agents/ReactiveAgent.js +1 -0
  4. package/dist/agents/ReactiveAgent.js.map +1 -1
  5. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  6. package/dist/bridge/sse/mapper.js +2 -0
  7. package/dist/bridge/sse/mapper.js.map +1 -1
  8. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  9. package/dist/manager/agent/lifecycle.js +4 -0
  10. package/dist/manager/agent/lifecycle.js.map +1 -1
  11. package/dist/manager/plan/lifecycle.d.ts +1 -1
  12. package/dist/manager/plan/lifecycle.d.ts.map +1 -1
  13. package/dist/manager/plan/lifecycle.js +14 -12
  14. package/dist/manager/plan/lifecycle.js.map +1 -1
  15. package/dist/manager/resident/agenda.d.ts +125 -0
  16. package/dist/manager/resident/agenda.d.ts.map +1 -0
  17. package/dist/manager/resident/agenda.js +551 -0
  18. package/dist/manager/resident/agenda.js.map +1 -0
  19. package/dist/manager/resident/delivery-window.d.ts +22 -0
  20. package/dist/manager/resident/delivery-window.d.ts.map +1 -0
  21. package/dist/manager/resident/delivery-window.js +78 -0
  22. package/dist/manager/resident/delivery-window.js.map +1 -0
  23. package/dist/manager/resident/host.d.ts +78 -0
  24. package/dist/manager/resident/host.d.ts.map +1 -0
  25. package/dist/manager/resident/host.js +252 -0
  26. package/dist/manager/resident/host.js.map +1 -0
  27. package/dist/manager/resident/initiative.d.ts +111 -0
  28. package/dist/manager/resident/initiative.d.ts.map +1 -0
  29. package/dist/manager/resident/initiative.js +121 -0
  30. package/dist/manager/resident/initiative.js.map +1 -0
  31. package/dist/manager/resident/learning.d.ts +483 -0
  32. package/dist/manager/resident/learning.d.ts.map +1 -0
  33. package/dist/manager/resident/learning.js +263 -0
  34. package/dist/manager/resident/learning.js.map +1 -0
  35. package/dist/manager/resident/loop.d.ts +31 -0
  36. package/dist/manager/resident/loop.d.ts.map +1 -0
  37. package/dist/manager/resident/loop.js +69 -0
  38. package/dist/manager/resident/loop.js.map +1 -0
  39. package/dist/manager/resident/outbox.d.ts +180 -0
  40. package/dist/manager/resident/outbox.d.ts.map +1 -0
  41. package/dist/manager/resident/outbox.js +214 -0
  42. package/dist/manager/resident/outbox.js.map +1 -0
  43. package/dist/manager/resident/proposal.d.ts +91 -0
  44. package/dist/manager/resident/proposal.d.ts.map +1 -0
  45. package/dist/manager/resident/proposal.js +75 -0
  46. package/dist/manager/resident/proposal.js.map +1 -0
  47. package/dist/manager/resident/store.d.ts +149 -0
  48. package/dist/manager/resident/store.d.ts.map +1 -0
  49. package/dist/manager/resident/store.js +175 -0
  50. package/dist/manager/resident/store.js.map +1 -0
  51. package/dist/prompt/contributions.d.ts +5 -2
  52. package/dist/prompt/contributions.d.ts.map +1 -1
  53. package/dist/prompt/contributions.js.map +1 -1
  54. package/dist/prompt/index.d.ts +2 -0
  55. package/dist/prompt/index.d.ts.map +1 -1
  56. package/dist/prompt/index.js +1 -0
  57. package/dist/prompt/index.js.map +1 -1
  58. package/dist/prompt/resident-step.d.ts +29 -0
  59. package/dist/prompt/resident-step.d.ts.map +1 -0
  60. package/dist/prompt/resident-step.js +74 -0
  61. package/dist/prompt/resident-step.js.map +1 -0
  62. package/dist/provider/capabilities.d.ts +1 -1
  63. package/dist/provider/capabilities.d.ts.map +1 -1
  64. package/dist/provider/capabilities.js +4 -1
  65. package/dist/provider/capabilities.js.map +1 -1
  66. package/dist/provider/fallback.d.ts.map +1 -1
  67. package/dist/provider/fallback.js +2 -0
  68. package/dist/provider/fallback.js.map +1 -1
  69. package/dist/provider/idle-timeout.d.ts.map +1 -1
  70. package/dist/provider/idle-timeout.js +5 -0
  71. package/dist/provider/idle-timeout.js.map +1 -1
  72. package/dist/provider/retry.d.ts.map +1 -1
  73. package/dist/provider/retry.js +5 -0
  74. package/dist/provider/retry.js.map +1 -1
  75. package/dist/public-runtime.d.ts +10 -1
  76. package/dist/public-runtime.d.ts.map +1 -1
  77. package/dist/public-runtime.js +10 -1
  78. package/dist/public-runtime.js.map +1 -1
  79. package/dist/public-types.d.ts +16 -2
  80. package/dist/public-types.d.ts.map +1 -1
  81. package/dist/registry/index.d.ts +1 -1
  82. package/dist/registry/index.d.ts.map +1 -1
  83. package/dist/registry/tool/execute.d.ts +18 -0
  84. package/dist/registry/tool/execute.d.ts.map +1 -1
  85. package/dist/registry/tool/execute.js +43 -6
  86. package/dist/registry/tool/execute.js.map +1 -1
  87. package/dist/runtime/query/events.d.ts +6 -1
  88. package/dist/runtime/query/events.d.ts.map +1 -1
  89. package/dist/runtime/query/events.js +21 -12
  90. package/dist/runtime/query/events.js.map +1 -1
  91. package/dist/runtime/query/index.d.ts.map +1 -1
  92. package/dist/runtime/query/index.js +1 -1
  93. package/dist/runtime/query/index.js.map +1 -1
  94. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  95. package/dist/runtime/query/prompt-cache.js +21 -42
  96. package/dist/runtime/query/prompt-cache.js.map +1 -1
  97. package/dist/scheduler/local.d.ts.map +1 -1
  98. package/dist/scheduler/local.js +2 -0
  99. package/dist/scheduler/local.js.map +1 -1
  100. package/dist/testing.d.ts +1 -0
  101. package/dist/testing.d.ts.map +1 -1
  102. package/dist/testing.js +1 -0
  103. package/dist/testing.js.map +1 -1
  104. package/dist/tools/coordinator/index.d.ts.map +1 -1
  105. package/dist/tools/coordinator/index.js +3 -0
  106. package/dist/tools/coordinator/index.js.map +1 -1
  107. package/dist/types/agent/reactive.d.ts +4 -0
  108. package/dist/types/agent/reactive.d.ts.map +1 -1
  109. package/dist/types/agent/scheduler.d.ts +3 -0
  110. package/dist/types/agent/scheduler.d.ts.map +1 -1
  111. package/dist/types/agent/task.d.ts +3 -0
  112. package/dist/types/agent/task.d.ts.map +1 -1
  113. package/dist/types/provider/interface.d.ts +2 -0
  114. package/dist/types/provider/interface.d.ts.map +1 -1
  115. package/dist/types/run/events.d.ts +3 -0
  116. package/dist/types/run/events.d.ts.map +1 -1
  117. package/dist/types/run/events.js.map +1 -1
  118. package/dist/types/sandbox/index.d.ts +36 -3
  119. package/dist/types/sandbox/index.d.ts.map +1 -1
  120. package/dist/types/sandbox/index.js.map +1 -1
  121. package/package.json +1 -1
  122. package/src/agents/ReactiveAgent.ts +1 -0
  123. package/src/bridge/sse/mapper.ts +2 -0
  124. package/src/manager/agent/lifecycle.ts +4 -0
  125. package/src/manager/plan/lifecycle.ts +15 -13
  126. package/src/manager/resident/agenda.ts +853 -0
  127. package/src/manager/resident/delivery-window.ts +93 -0
  128. package/src/manager/resident/host.ts +356 -0
  129. package/src/manager/resident/initiative.ts +195 -0
  130. package/src/manager/resident/learning.ts +369 -0
  131. package/src/manager/resident/loop.ts +101 -0
  132. package/src/manager/resident/outbox.ts +307 -0
  133. package/src/manager/resident/proposal.ts +105 -0
  134. package/src/manager/resident/store.ts +229 -0
  135. package/src/prompt/contributions.ts +5 -2
  136. package/src/prompt/index.ts +2 -0
  137. package/src/prompt/resident-step.ts +96 -0
  138. package/src/provider/capabilities.ts +8 -3
  139. package/src/provider/fallback.ts +6 -0
  140. package/src/provider/idle-timeout.ts +6 -0
  141. package/src/provider/retry.ts +6 -0
  142. package/src/public-runtime.ts +14 -0
  143. package/src/public-types.ts +67 -0
  144. package/src/registry/index.ts +1 -1
  145. package/src/registry/tool/execute.ts +56 -9
  146. package/src/runtime/query/events.ts +24 -14
  147. package/src/runtime/query/index.ts +1 -2
  148. package/src/runtime/query/prompt-cache.ts +24 -47
  149. package/src/scheduler/local.ts +2 -0
  150. package/src/testing.ts +2 -0
  151. package/src/tools/coordinator/index.ts +3 -0
  152. package/src/types/agent/reactive.ts +2 -0
  153. package/src/types/agent/scheduler.ts +4 -0
  154. package/src/types/agent/task.ts +4 -0
  155. package/src/types/provider/interface.ts +3 -0
  156. package/src/types/run/events.ts +3 -0
  157. package/src/types/sandbox/index.ts +42 -4
@@ -0,0 +1,78 @@
1
+ const minuteMs = 60_000;
2
+ const searchMinutes = 72 * 60;
3
+ /**
4
+ * @experimental Admit delivery within a daily local-time window, without model
5
+ * calls. The start is inclusive and the end exclusive; equal boundaries are
6
+ * rejected. Omit this gate when no time restriction is wanted.
7
+ *
8
+ * Future admission searches actual UTC minute boundaries, so nonexistent local
9
+ * times are skipped and repeated times can open the window twice. The search
10
+ * is bounded to 72 hours and the Date range; no opening returns nextCheckAt:null.
11
+ * Historic time zones with second-based offsets may defer up to one extra minute.
12
+ * This gate does not schedule a timer, authorize a destination or send a message.
13
+ */
14
+ export function createResidentDeliveryWindow(config) {
15
+ if (!config ||
16
+ typeof config.timeZone !== 'string' ||
17
+ config.timeZone.length === 0 ||
18
+ config.timeZone !== config.timeZone.trim() ||
19
+ /^[+-]/.test(config.timeZone) ||
20
+ !Number.isInteger(config.startMinute) ||
21
+ config.startMinute < 0 ||
22
+ config.startMinute > 1439 ||
23
+ !Number.isInteger(config.endMinute) ||
24
+ config.endMinute < 0 ||
25
+ config.endMinute > 1439 ||
26
+ config.startMinute === config.endMinute) {
27
+ throw new TypeError('Delivery window requires a named time zone and distinct minutes 0–1439.');
28
+ }
29
+ let formatter;
30
+ try {
31
+ formatter = new Intl.DateTimeFormat('en-US', {
32
+ timeZone: config.timeZone,
33
+ hour: '2-digit',
34
+ minute: '2-digit',
35
+ hourCycle: 'h23',
36
+ });
37
+ }
38
+ catch {
39
+ throw new TypeError('Delivery window requires a valid named time zone.');
40
+ }
41
+ const { startMinute, endMinute } = config;
42
+ const timeZone = formatter.resolvedOptions().timeZone;
43
+ const allowed = (at) => {
44
+ const parts = formatter.formatToParts(at);
45
+ const hour = Number(parts.find((part) => part.type === 'hour')?.value);
46
+ const minute = Number(parts.find((part) => part.type === 'minute')?.value);
47
+ const localMinute = hour * 60 + minute;
48
+ return startMinute < endMinute
49
+ ? localMinute >= startMinute && localMinute < endMinute
50
+ : localMinute >= startMinute || localMinute < endMinute;
51
+ };
52
+ return (_message, now) => {
53
+ if (!Number.isFinite(now) || !Number.isFinite(new Date(now).getTime())) {
54
+ throw new TypeError('Delivery window requires a finite timestamp within the Date range.');
55
+ }
56
+ if (allowed(now))
57
+ return { allow: true };
58
+ const firstMinute = (Math.floor(now / minuteMs) + 1) * minuteMs;
59
+ for (let offset = 0; offset < searchMinutes; offset++) {
60
+ const candidate = firstMinute + offset * minuteMs;
61
+ if (!Number.isFinite(new Date(candidate).getTime()))
62
+ break;
63
+ if (allowed(candidate)) {
64
+ return {
65
+ allow: false,
66
+ nextCheckAt: candidate,
67
+ reason: `Outside the allowed daily delivery window in ${timeZone}.`,
68
+ };
69
+ }
70
+ }
71
+ return {
72
+ allow: false,
73
+ nextCheckAt: null,
74
+ reason: `No allowed delivery minute found within the next 72 hours and Date range in ${timeZone}.`,
75
+ };
76
+ };
77
+ }
78
+ //# sourceMappingURL=delivery-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-window.js","sourceRoot":"","sources":["../../../src/manager/resident/delivery-window.ts"],"names":[],"mappings":"AAWA,MAAM,QAAQ,GAAG,MAAM,CAAA;AACvB,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA;AAE7B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,4BAA4B,CAC3C,MAAoC;IAEpC,IACC,CAAC,MAAM;QACP,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7B,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;QACrC,MAAM,CAAC,WAAW,GAAG,CAAC;QACtB,MAAM,CAAC,WAAW,GAAG,IAAI;QACzB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,CAAC,SAAS,GAAG,CAAC;QACpB,MAAM,CAAC,SAAS,GAAG,IAAI;QACvB,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,EACtC,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAA;IAC/F,CAAC;IAED,IAAI,SAA8B,CAAA;IAClC,IAAI,CAAC;QACJ,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,KAAK;SAChB,CAAC,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAA;IACrD,MAAM,OAAO,GAAG,CAAC,EAAU,EAAW,EAAE;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,CAAA;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM,CAAA;QACtC,OAAO,WAAW,GAAG,SAAS;YAC7B,CAAC,CAAC,WAAW,IAAI,WAAW,IAAI,WAAW,GAAG,SAAS;YACvD,CAAC,CAAC,WAAW,IAAI,WAAW,IAAI,WAAW,GAAG,SAAS,CAAA;IACzD,CAAC,CAAA;IAED,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,SAAS,CAAC,oEAAoE,CAAC,CAAA;QAC1F,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QAExC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAA;QAC/D,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAA;YACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBAAE,MAAK;YAC1D,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,OAAO;oBACN,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,gDAAgD,QAAQ,GAAG;iBACnE,CAAA;YACF,CAAC;QACF,CAAC;QACD,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,+EAA+E,QAAQ,GAAG;SAClG,CAAA;IACF,CAAC,CAAA;AACF,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { ResidentAgendaStore, ResidentPursuit } from './agenda.js';
2
+ import { type ResidentObservation, type ResidentSelection, type ResidentSelector } from './initiative.js';
3
+ import { type ResidentLearningState } from './learning.js';
4
+ import { type ResidentStep } from './loop.js';
5
+ import { type ResidentMessageInput } from './outbox.js';
6
+ import { type ResidentDecision } from './store.js';
7
+ /** @experimental Host result describes execution, not external-effect rollback. */
8
+ export interface ResidentHostResult {
9
+ readonly status: 'idle' | 'paused' | 'unresolved' | 'cancelled' | 'limit' | 'contended';
10
+ readonly stepsSettled: number;
11
+ readonly nextWakeAt: number | null;
12
+ readonly selection?: ResidentSelection;
13
+ }
14
+ /** @experimental Explicit authorization to drive a finite number of background steps. */
15
+ export interface ResidentHostRunOptions {
16
+ readonly signal: AbortSignal;
17
+ readonly maxSteps: number;
18
+ /** Maximum single idle wait; with keepAlive, also bounds local agenda polling. */
19
+ readonly maxIdleMs?: number;
20
+ /** Keep waiting for useful work within this invocation's finite step cap. Default false. */
21
+ readonly keepAlive?: boolean;
22
+ }
23
+ /** @experimental Immutable context from the agenda snapshot that authorized this admission. */
24
+ export interface ResidentStepContext {
25
+ readonly agendaRevision: number;
26
+ readonly learning?: ResidentLearningState;
27
+ }
28
+ /** @experimental A developer callback may bind a different SDK run for each pursuit. */
29
+ export type ResidentPursuitStep = (pursuit: ResidentPursuit, signal: AbortSignal) => ReturnType<ResidentStep>;
30
+ /** @experimental Context-aware callback; existing two-argument steps remain assignable. */
31
+ export type ResidentContextualStep = (pursuit: ResidentPursuit, signal: AbortSignal, context: ResidentStepContext) => ReturnType<ResidentStep>;
32
+ /** @experimental Inspect actual outcomes and resource receipts independently of model prose. */
33
+ export type ResidentObserver = (pursuit: ResidentPursuit, decision: ResidentDecision, signal: AbortSignal) => Promise<ResidentObservation>;
34
+ /** @experimental Host validates content and destination; null means no communication. */
35
+ export type ResidentMessageFactory = (pursuit: ResidentPursuit, decision: ResidentDecision, signal: AbortSignal) => Promise<ResidentMessageInput | null>;
36
+ /** @experimental Opt-in local selection, observed settlement and atomic outbound intent. */
37
+ export interface ResidentHostOptions {
38
+ readonly select?: ResidentSelector;
39
+ readonly observe?: ResidentObserver;
40
+ readonly prepareMessage?: ResidentMessageFactory;
41
+ /** Bind approved learning to the exact admission snapshot. Default false. */
42
+ readonly learning?: boolean;
43
+ }
44
+ /**
45
+ * @experimental Local driver for one durable agenda. Shared agenda admission
46
+ * prevents overlapping pursuits across processes. Notifications are local;
47
+ * opt-in keepAlive also rereads durable state on bounded idle timers.
48
+ */
49
+ export declare class ResidentHost {
50
+ private readonly agenda;
51
+ private readonly step;
52
+ private controller;
53
+ private active;
54
+ private idle;
55
+ private generation;
56
+ private controls;
57
+ private controlsPending;
58
+ private readonly options;
59
+ constructor(agenda: ResidentAgendaStore, step: ResidentContextualStep, options?: ResidentHostOptions);
60
+ /** Interrupt local idle waiting after the host learns of new durable state. */
61
+ notify(): void;
62
+ private snapshot;
63
+ private paused;
64
+ private control;
65
+ /**
66
+ * Signal current work and durably close future admission. Resolving this method
67
+ * is NOT quiescence: await the run promise before claiming the callback stopped.
68
+ * An interrupted admitted pursuit remains unresolved until reconciled explicitly.
69
+ */
70
+ pause(): Promise<void>;
71
+ /** Reauthorize future work only after this host's previous invocation drained. */
72
+ resume(): Promise<void>;
73
+ /** Persist fresh evidence and interrupt this host's idle timer. */
74
+ wake(id: string, reason: string): Promise<void>;
75
+ run(options: ResidentHostRunOptions): Promise<ResidentHostResult>;
76
+ private drive;
77
+ }
78
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/manager/resident/host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ import { setTimeout as sleep } from 'node:timers/promises';
2
+ import { residentObservationSchema, } from './initiative.js';
3
+ import { freezeResidentLearning } from './learning.js';
4
+ import { stepResident } from './loop.js';
5
+ import { residentMessageInputSchema } from './outbox.js';
6
+ import { ResidentConflictError, residentDecisionSchema } from './store.js';
7
+ /**
8
+ * @experimental Local driver for one durable agenda. Shared agenda admission
9
+ * prevents overlapping pursuits across processes. Notifications are local;
10
+ * opt-in keepAlive also rereads durable state on bounded idle timers.
11
+ */
12
+ export class ResidentHost {
13
+ agenda;
14
+ step;
15
+ controller;
16
+ active;
17
+ idle;
18
+ generation = 0;
19
+ controls = Promise.resolve();
20
+ controlsPending = 0;
21
+ options;
22
+ constructor(agenda, step, options = {}) {
23
+ this.agenda = agenda;
24
+ this.step = step;
25
+ if (options.learning !== undefined && typeof options.learning !== 'boolean')
26
+ throw new TypeError('Resident learning must be explicitly enabled with a boolean.');
27
+ if ((options.select || options.learning) && !agenda.executionAt)
28
+ throw new TypeError('Resident selection or learning requires atomic executionAt support.');
29
+ if (options.observe && !agenda.settleObserved)
30
+ throw new TypeError('Resident observation requires atomic settleObserved support.');
31
+ if (options.prepareMessage && !agenda.settleWithMessage)
32
+ throw new TypeError('Resident messages require atomic settleWithMessage support.');
33
+ this.options = Object.freeze({ ...options });
34
+ }
35
+ /** Interrupt local idle waiting after the host learns of new durable state. */
36
+ notify() {
37
+ this.generation++;
38
+ this.idle?.abort();
39
+ }
40
+ async snapshot() {
41
+ const state = await this.agenda.read();
42
+ if (!state)
43
+ throw new Error('Create the resident agenda before running the host.');
44
+ return state;
45
+ }
46
+ async paused(value) {
47
+ for (let attempt = 0; attempt < 8; attempt++) {
48
+ const state = await this.snapshot();
49
+ if (state.paused === value)
50
+ return;
51
+ try {
52
+ await this.agenda.setPaused(state, value);
53
+ return;
54
+ }
55
+ catch (error) {
56
+ if (!(error instanceof ResidentConflictError) || attempt === 7)
57
+ throw error;
58
+ }
59
+ }
60
+ }
61
+ control(update) {
62
+ this.controlsPending++;
63
+ const pending = this.controls.then(update);
64
+ this.controls = pending.catch(() => { });
65
+ return pending.finally(() => {
66
+ this.controlsPending--;
67
+ });
68
+ }
69
+ /**
70
+ * Signal current work and durably close future admission. Resolving this method
71
+ * is NOT quiescence: await the run promise before claiming the callback stopped.
72
+ * An interrupted admitted pursuit remains unresolved until reconciled explicitly.
73
+ */
74
+ async pause() {
75
+ this.controller?.abort();
76
+ this.notify();
77
+ await this.control(() => this.paused(true));
78
+ }
79
+ /** Reauthorize future work only after this host's previous invocation drained. */
80
+ async resume() {
81
+ if (this.controlsPending)
82
+ throw new Error('Wait for pending resident controls before resuming.');
83
+ if (this.active)
84
+ throw new Error('Wait for the active resident invocation to drain before resuming.');
85
+ await this.control(() => this.paused(false));
86
+ this.notify();
87
+ }
88
+ /** Persist fresh evidence and interrupt this host's idle timer. */
89
+ async wake(id, reason) {
90
+ const state = await this.snapshot();
91
+ const pursuit = state.pursuits.find((p) => p.id === id);
92
+ if (!pursuit)
93
+ throw new Error('Unknown resident pursuit.');
94
+ await this.agenda.wake(id, pursuit.state, reason, Date.now());
95
+ this.notify();
96
+ }
97
+ run(options) {
98
+ if (this.controlsPending)
99
+ throw new Error('Wait for pending resident controls before running.');
100
+ if (this.active)
101
+ throw new Error('A resident host invocation is already active.');
102
+ const maxIdleMs = options.maxIdleMs ?? 60_000;
103
+ const keepAlive = options.keepAlive ?? false;
104
+ if (options.keepAlive !== undefined && typeof options.keepAlive !== 'boolean')
105
+ throw new TypeError('Resident keepAlive must be explicitly enabled with a boolean.');
106
+ if (!Number.isSafeInteger(options.maxSteps) ||
107
+ options.maxSteps < 1 ||
108
+ !Number.isSafeInteger(maxIdleMs) ||
109
+ maxIdleMs < 0 ||
110
+ maxIdleMs > 2_147_483_647 ||
111
+ (keepAlive && maxIdleMs === 0))
112
+ throw new TypeError('Invalid resident host limits.');
113
+ const controller = new AbortController();
114
+ this.controller = controller;
115
+ const signal = AbortSignal.any([controller.signal, options.signal]);
116
+ this.active = this.drive(options.maxSteps, maxIdleMs, keepAlive, signal).finally(() => {
117
+ this.active = undefined;
118
+ this.controller = undefined;
119
+ this.idle = undefined;
120
+ });
121
+ return this.active;
122
+ }
123
+ async drive(maxSteps, maxIdleMs, keepAlive, signal) {
124
+ let stepsSettled = 0;
125
+ try {
126
+ while (true) {
127
+ signal.throwIfAborted();
128
+ const observed = this.generation;
129
+ const state = await this.snapshot();
130
+ signal.throwIfAborted();
131
+ if (state.paused)
132
+ return { status: 'paused', stepsSettled, nextWakeAt: null };
133
+ if (state.pursuits.some((p) => p.state.phase === 'running'))
134
+ return { status: 'unresolved', stepsSettled, nextWakeAt: null };
135
+ const waiting = state.pursuits.filter((p) => p.state.phase === 'waiting' && p.state.wakeAt !== null);
136
+ const now = Date.now();
137
+ // Fair, deterministic baseline; this is not model-authored initiative.
138
+ let due = waiting
139
+ .filter((p) => (p.state.wakeAt ?? 0) <= now)
140
+ .sort((a, b) => a.state.stepsAdmitted - b.state.stepsAdmitted ||
141
+ (a.state.wakeAt ?? 0) - (b.state.wakeAt ?? 0) ||
142
+ a.id.localeCompare(b.id))[0];
143
+ let selection;
144
+ if (due && this.options.select) {
145
+ selection = this.options.select(state, now);
146
+ signal.throwIfAborted();
147
+ if (selection.agendaRevision !== state.revision)
148
+ throw new Error('Resident selector returned a stale agenda revision.');
149
+ if (selection.pursuitId === null)
150
+ due = undefined;
151
+ else {
152
+ const selectedId = selection.pursuitId;
153
+ due = waiting.find((p) => p.id === selectedId && (p.state.wakeAt ?? 0) <= now);
154
+ if (!due)
155
+ throw new Error('Resident selector chose an ineligible pursuit.');
156
+ }
157
+ }
158
+ if (due) {
159
+ const selected = due;
160
+ const context = Object.freeze({
161
+ agendaRevision: state.revision,
162
+ ...(this.options.learning && state.learning
163
+ ? { learning: freezeResidentLearning(state.learning) }
164
+ : {}),
165
+ });
166
+ const execution = this.options.select || this.options.learning
167
+ ? this.agenda.executionAt?.(selected.id, state)
168
+ : this.agenda.execution(selected.id);
169
+ if (!execution)
170
+ throw new Error('Resident executionAt support was removed.');
171
+ const observe = this.options.observe;
172
+ const prepareMessage = this.options.prepareMessage;
173
+ const observedExecution = observe || prepareMessage
174
+ ? {
175
+ read: () => execution.read(),
176
+ claim: (...args) => execution.claim(...args),
177
+ settle: async (current, decision, at) => {
178
+ const disposition = Object.freeze(residentDecisionSchema.parse(decision));
179
+ const observed = await observe?.({ ...selected, state: current }, disposition, signal);
180
+ signal.throwIfAborted();
181
+ const observation = observe
182
+ ? Object.freeze(residentObservationSchema.parse(observed))
183
+ : undefined;
184
+ const prepared = await prepareMessage?.({ ...selected, state: current }, disposition, signal);
185
+ signal.throwIfAborted();
186
+ const message = prepareMessage && prepared !== null
187
+ ? Object.freeze(residentMessageInputSchema.parse(prepared))
188
+ : null;
189
+ if (message !== null) {
190
+ if (!this.agenda.settleWithMessage)
191
+ throw new Error('Resident settleWithMessage support was removed.');
192
+ return this.agenda.settleWithMessage(selected.id, current, disposition, message, at, observation);
193
+ }
194
+ if (observation) {
195
+ if (!this.agenda.settleObserved)
196
+ throw new Error('Resident settleObserved support was removed.');
197
+ return this.agenda.settleObserved(selected.id, current, disposition, observation, at);
198
+ }
199
+ return execution.settle(current, disposition, at);
200
+ },
201
+ }
202
+ : execution;
203
+ const result = await stepResident(observedExecution, (current, abort) => this.step({ ...selected, state: current }, abort, context), signal);
204
+ if (result.status === 'idle')
205
+ return {
206
+ status: result.reason === 'unresolved' ? 'unresolved' : 'contended',
207
+ stepsSettled,
208
+ nextWakeAt: null,
209
+ };
210
+ stepsSettled++;
211
+ if (stepsSettled >= maxSteps)
212
+ return { status: 'limit', stepsSettled, nextWakeAt: null };
213
+ continue;
214
+ }
215
+ const scheduled = selection?.pursuitId === null
216
+ ? waiting.filter((p) => (p.state.wakeAt ?? 0) > now)
217
+ : waiting;
218
+ const nextWakeAt = scheduled.length === 0 ? null : Math.min(...scheduled.map((p) => p.state.wakeAt ?? now));
219
+ if (observed !== this.generation)
220
+ continue;
221
+ if (!keepAlive && (nextWakeAt === null || nextWakeAt - now > maxIdleMs))
222
+ return { status: 'idle', stepsSettled, nextWakeAt, ...(selection ? { selection } : {}) };
223
+ const delay = nextWakeAt === null
224
+ ? maxIdleMs
225
+ : keepAlive
226
+ ? Math.min(maxIdleMs, nextWakeAt - now)
227
+ : nextWakeAt - now;
228
+ const idle = new AbortController();
229
+ this.idle = idle;
230
+ try {
231
+ await sleep(Math.max(1, delay), undefined, {
232
+ signal: AbortSignal.any([signal, idle.signal]),
233
+ });
234
+ }
235
+ catch (error) {
236
+ if (!idle.signal.aborted || signal.aborted)
237
+ throw error;
238
+ }
239
+ finally {
240
+ if (this.idle === idle)
241
+ this.idle = undefined;
242
+ }
243
+ }
244
+ }
245
+ catch (error) {
246
+ if (!signal.aborted)
247
+ throw error;
248
+ return { status: 'cancelled', stepsSettled, nextWakeAt: null };
249
+ }
250
+ }
251
+ }
252
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/manager/resident/host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import { z } from 'zod';
2
+ import type { ResidentAgendaState } from './agenda.js';
3
+ export declare const residentObservationSchema: z.ZodObject<{
4
+ evidenceKey: z.ZodString;
5
+ source: z.ZodString;
6
+ progress: z.ZodNumber;
7
+ /** All observations and policy costs use the same host-defined resource unit. */
8
+ costUnits: z.ZodNullable<z.ZodNumber>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ source: string;
11
+ evidenceKey: string;
12
+ progress: number;
13
+ costUnits: number | null;
14
+ }, {
15
+ source: string;
16
+ evidenceKey: string;
17
+ progress: number;
18
+ costUnits: number | null;
19
+ }>;
20
+ /** @experimental Host-validated outcome and measured resource use, never model self-confidence. */
21
+ export type ResidentObservation = Readonly<z.infer<typeof residentObservationSchema>>;
22
+ export declare const residentFeedbackSchema: z.ZodObject<{
23
+ bestProgress: z.ZodNumber;
24
+ hasUnobservedSteps: z.ZodDefault<z.ZodBoolean>;
25
+ stagnantSteps: z.ZodNumber;
26
+ observations: z.ZodArray<z.ZodObject<{
27
+ evidenceKey: z.ZodString;
28
+ source: z.ZodString;
29
+ progress: z.ZodNumber;
30
+ /** All observations and policy costs use the same host-defined resource unit. */
31
+ costUnits: z.ZodNullable<z.ZodNumber>;
32
+ } & {
33
+ gain: z.ZodNumber;
34
+ step: z.ZodNumber;
35
+ }, "strip", z.ZodTypeAny, {
36
+ source: string;
37
+ evidenceKey: string;
38
+ progress: number;
39
+ costUnits: number | null;
40
+ gain: number;
41
+ step: number;
42
+ }, {
43
+ source: string;
44
+ evidenceKey: string;
45
+ progress: number;
46
+ costUnits: number | null;
47
+ gain: number;
48
+ step: number;
49
+ }>, "many">;
50
+ }, "strip", z.ZodTypeAny, {
51
+ observations: {
52
+ source: string;
53
+ evidenceKey: string;
54
+ progress: number;
55
+ costUnits: number | null;
56
+ gain: number;
57
+ step: number;
58
+ }[];
59
+ bestProgress: number;
60
+ hasUnobservedSteps: boolean;
61
+ stagnantSteps: number;
62
+ }, {
63
+ observations: {
64
+ source: string;
65
+ evidenceKey: string;
66
+ progress: number;
67
+ costUnits: number | null;
68
+ gain: number;
69
+ step: number;
70
+ }[];
71
+ bestProgress: number;
72
+ stagnantSteps: number;
73
+ hasUnobservedSteps?: boolean | undefined;
74
+ }>;
75
+ /** @experimental Last eight observations; best progress and stagnation survive eviction. */
76
+ export type ResidentFeedback = Readonly<Omit<z.infer<typeof residentFeedbackSchema>, 'observations'>> & {
77
+ readonly observations: readonly Readonly<z.infer<typeof residentFeedbackSchema>['observations'][number]>[];
78
+ };
79
+ export declare function observeResidentStep(previous: ResidentFeedback | undefined, input: ResidentObservation, step: number): ResidentFeedback;
80
+ export declare function freezeResidentFeedback(value: ResidentFeedback): ResidentFeedback;
81
+ /** @experimental Policy units are chosen by the host; scores are heuristics, not probabilities. */
82
+ export interface ResidentSelectionConfig {
83
+ readonly progressValue: number;
84
+ readonly initialExpectedProgress: number;
85
+ readonly initialExpectedCost: number;
86
+ readonly maxStagnantSteps?: number;
87
+ }
88
+ /** @experimental Explainable inputs for a single selection; unknown cost is not zero. */
89
+ export interface ResidentCandidate {
90
+ readonly pursuitId: string;
91
+ readonly reason: 'eligible' | 'not-due' | 'missing-observation' | 'stalled' | 'unknown-cost' | 'nonpositive-value';
92
+ readonly expectedGain: number | null;
93
+ readonly expectedCost: number | null;
94
+ readonly score: number | null;
95
+ }
96
+ /** @experimental Choice is bound to the whole agenda revision used to compute it. */
97
+ export interface ResidentSelection {
98
+ readonly agendaRevision: number;
99
+ readonly pursuitId: string | null;
100
+ readonly reason: 'selected' | 'paused' | 'unresolved' | 'no-useful-work';
101
+ readonly candidates: readonly ResidentCandidate[];
102
+ }
103
+ /** @experimental Pure local selection; perform inference inside budgeted steps, not here. */
104
+ export type ResidentSelector = (agenda: ResidentAgendaState, now: number) => ResidentSelection;
105
+ /**
106
+ * @experimental Cost-aware continuation with an explicit abstention choice.
107
+ * This is a measured-progress heuristic, not Bayesian value of computation.
108
+ * A finite bootstrap allowance permits delayed payoffs but may stop too early.
109
+ */
110
+ export declare function createResidentSelector(config: ResidentSelectionConfig): ResidentSelector;
111
+ //# sourceMappingURL=initiative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initiative.d.ts","sourceRoot":"","sources":["../../../src/manager/resident/initiative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAItD,eAAO,MAAM,yBAAyB;;;;IAIrC,iFAAiF;;;;;;;;;;;;EAEhF,CAAA;AAEF,mGAAmG;AACnG,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAA;AAErF,eAAO,MAAM,sBAAsB;;;;;;;;QAPlC,iFAAiF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBhF,CAAA;AAEF,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CACtC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,EAAE,cAAc,CAAC,CAC5D,GAAG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,QAAQ,CACvC,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAC9D,EAAE,CAAA;CACH,CAAA;AAED,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,MAAM,GACV,gBAAgB,CAkBlB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAKhF;AAED,mGAAmG;AACnG,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,yFAAyF;AACzF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EACZ,UAAU,GACV,SAAS,GACT,qBAAqB,GACrB,SAAS,GACT,cAAc,GACd,mBAAmB,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,CAAA;IACxE,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACjD;AAED,6FAA6F;AAC7F,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,KAAK,iBAAiB,CAAA;AAE9F;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,uBAAuB,GAAG,gBAAgB,CAoFxF"}