@minpeter/pss-runtime 0.1.0-next.1 → 0.1.0-next.3

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 (133) hide show
  1. package/README.md +290 -61
  2. package/dist/agent-host-session-store.js +10 -0
  3. package/dist/agent-host-session-store.js.map +1 -0
  4. package/dist/agent-loop.js +57 -28
  5. package/dist/agent-loop.js.map +1 -1
  6. package/dist/agent-namespace.js +6 -3
  7. package/dist/agent-namespace.js.map +1 -1
  8. package/dist/agent-options.d.ts +29 -0
  9. package/dist/agent-options.js +16 -0
  10. package/dist/agent-options.js.map +1 -0
  11. package/dist/agent-resume.js +63 -0
  12. package/dist/agent-resume.js.map +1 -0
  13. package/dist/agent-session-entry.d.ts +13 -0
  14. package/dist/agent.d.ts +8 -44
  15. package/dist/agent.js +61 -83
  16. package/dist/agent.js.map +1 -1
  17. package/dist/cloudflare/cloudflare-agent-context.d.ts +40 -0
  18. package/dist/cloudflare/cloudflare-agent-context.js +37 -0
  19. package/dist/cloudflare/cloudflare-agent-context.js.map +1 -0
  20. package/dist/cloudflare/cloudflare-alarm-budget.d.ts +18 -0
  21. package/dist/cloudflare/cloudflare-alarm-budget.js +77 -0
  22. package/dist/cloudflare/cloudflare-alarm-budget.js.map +1 -0
  23. package/dist/cloudflare/cloudflare-alarm-drainer.d.ts +45 -0
  24. package/dist/cloudflare/cloudflare-alarm-drainer.js +103 -0
  25. package/dist/cloudflare/cloudflare-alarm-drainer.js.map +1 -0
  26. package/dist/cloudflare/cloudflare-alarm-run-drain.d.ts +13 -0
  27. package/dist/cloudflare/cloudflare-alarm-run-drain.js +81 -0
  28. package/dist/cloudflare/cloudflare-alarm-run-drain.js.map +1 -0
  29. package/dist/cloudflare/cloudflare-alarm-work.js +110 -0
  30. package/dist/cloudflare/cloudflare-alarm-work.js.map +1 -0
  31. package/dist/cloudflare/cloudflare-checkpoint-store.js +39 -0
  32. package/dist/cloudflare/cloudflare-checkpoint-store.js.map +1 -0
  33. package/dist/cloudflare/cloudflare-durable-object-fetch.d.ts +21 -0
  34. package/dist/cloudflare/cloudflare-durable-object-fetch.js +11 -0
  35. package/dist/cloudflare/cloudflare-durable-object-fetch.js.map +1 -0
  36. package/dist/cloudflare/cloudflare-event-store.js +33 -0
  37. package/dist/cloudflare/cloudflare-event-store.js.map +1 -0
  38. package/dist/cloudflare/cloudflare-execution-session-store.js +40 -0
  39. package/dist/cloudflare/cloudflare-execution-session-store.js.map +1 -0
  40. package/dist/cloudflare/cloudflare-execution-store.js +35 -0
  41. package/dist/cloudflare/cloudflare-execution-store.js.map +1 -0
  42. package/dist/cloudflare/cloudflare-host.d.ts +61 -0
  43. package/dist/cloudflare/cloudflare-host.js +113 -0
  44. package/dist/cloudflare/cloudflare-host.js.map +1 -0
  45. package/dist/cloudflare/cloudflare-notification-store.js +59 -0
  46. package/dist/cloudflare/cloudflare-notification-store.js.map +1 -0
  47. package/dist/cloudflare/cloudflare-run-store.js +81 -0
  48. package/dist/cloudflare/cloudflare-run-store.js.map +1 -0
  49. package/dist/cloudflare/cloudflare-store-utils.js +43 -0
  50. package/dist/cloudflare/cloudflare-store-utils.js.map +1 -0
  51. package/dist/cloudflare/durable-object-storage.d.ts +20 -0
  52. package/dist/cloudflare/durable-object-storage.js +76 -0
  53. package/dist/cloudflare/durable-object-storage.js.map +1 -0
  54. package/dist/cloudflare/index.d.ts +7 -0
  55. package/dist/cloudflare/index.js +6 -0
  56. package/dist/execution/capabilities.d.ts +40 -0
  57. package/dist/execution/host.d.ts +9 -0
  58. package/dist/execution/host.js +62 -0
  59. package/dist/execution/host.js.map +1 -0
  60. package/dist/execution/index.d.ts +6 -0
  61. package/dist/execution/index.js +4 -0
  62. package/dist/execution/memory-notifications.js +54 -0
  63. package/dist/execution/memory-notifications.js.map +1 -0
  64. package/dist/execution/memory-state.js +34 -0
  65. package/dist/execution/memory-state.js.map +1 -0
  66. package/dist/execution/memory-store.js +203 -0
  67. package/dist/execution/memory-store.js.map +1 -0
  68. package/dist/execution/memory.d.ts +7 -0
  69. package/dist/execution/memory.js +28 -0
  70. package/dist/execution/memory.js.map +1 -0
  71. package/dist/execution/types.d.ts +150 -0
  72. package/dist/index.d.ts +13 -6
  73. package/dist/index.js +6 -1
  74. package/dist/llm-tool-execution.d.ts +35 -0
  75. package/dist/llm-tool-execution.js +126 -0
  76. package/dist/llm-tool-execution.js.map +1 -0
  77. package/dist/llm.d.ts +11 -15
  78. package/dist/llm.js +5 -3
  79. package/dist/llm.js.map +1 -1
  80. package/dist/plugins.d.ts +42 -0
  81. package/dist/plugins.js +43 -0
  82. package/dist/plugins.js.map +1 -0
  83. package/dist/session/delegate-input.d.ts +9 -0
  84. package/dist/session/delegate-input.js +16 -0
  85. package/dist/session/delegate-input.js.map +1 -0
  86. package/dist/session/events.d.ts +43 -22
  87. package/dist/session/events.js +41 -0
  88. package/dist/session/events.js.map +1 -0
  89. package/dist/session/input-meta-types.d.ts +10 -0
  90. package/dist/session/input-meta.d.ts +13 -0
  91. package/dist/session/input-meta.js +45 -0
  92. package/dist/session/input-meta.js.map +1 -0
  93. package/dist/session/input.d.ts +4 -0
  94. package/dist/session/mapping.js +4 -2
  95. package/dist/session/mapping.js.map +1 -1
  96. package/dist/session/runtime-input-emit.js +41 -0
  97. package/dist/session/runtime-input-emit.js.map +1 -0
  98. package/dist/session/runtime-input.js +10 -24
  99. package/dist/session/runtime-input.js.map +1 -1
  100. package/dist/session/session-errors.js +1 -6
  101. package/dist/session/session-errors.js.map +1 -1
  102. package/dist/session/session-events.js +73 -0
  103. package/dist/session/session-events.js.map +1 -0
  104. package/dist/session/session-execution.js +88 -0
  105. package/dist/session/session-execution.js.map +1 -0
  106. package/dist/session/session-notification.js +59 -0
  107. package/dist/session/session-notification.js.map +1 -0
  108. package/dist/session/session-runtime-drain.js +3 -9
  109. package/dist/session/session-runtime-drain.js.map +1 -1
  110. package/dist/session/session-turn-processor.js +125 -0
  111. package/dist/session/session-turn-processor.js.map +1 -0
  112. package/dist/session/session.js +81 -102
  113. package/dist/session/session.js.map +1 -1
  114. package/dist/session/snapshot.js.map +1 -1
  115. package/package.json +16 -1
  116. package/dist/agent-validation.js +0 -35
  117. package/dist/agent-validation.js.map +0 -1
  118. package/dist/child-session-cleanups.js +0 -61
  119. package/dist/child-session-cleanups.js.map +0 -1
  120. package/dist/hooks.d.ts +0 -32
  121. package/dist/subagent-job-cancel.js +0 -28
  122. package/dist/subagent-job-cancel.js.map +0 -1
  123. package/dist/subagent-job-output.js +0 -63
  124. package/dist/subagent-job-output.js.map +0 -1
  125. package/dist/subagent-jobs.js +0 -151
  126. package/dist/subagent-jobs.js.map +0 -1
  127. package/dist/subagent-prompt-schema.js +0 -114
  128. package/dist/subagent-prompt-schema.js.map +0 -1
  129. package/dist/subagent-run.js +0 -111
  130. package/dist/subagent-run.js.map +0 -1
  131. package/dist/subagents.js +0 -92
  132. package/dist/subagents.js.map +0 -1
  133. /package/dist/session/{runtime-input.d.ts → session-execution.d.ts} +0 -0
@@ -0,0 +1,62 @@
1
+ //#region src/execution/host.ts
2
+ function sessionHost(host) {
3
+ const durableHost = durableBackgroundHost(host);
4
+ if (durableHost?.sessionStore) return durableHost;
5
+ const hostExecution = executionHost(host);
6
+ if (hostExecution) return {
7
+ capabilities: hostExecution.capabilities,
8
+ sessionStore: hostExecution.store.sessions
9
+ };
10
+ return host;
11
+ }
12
+ function executionHost(host) {
13
+ if (isExecutionHost(host)) return host;
14
+ if (isDurableBackgroundHost(host)) return executionHostFromDurableBackgroundHost(host);
15
+ }
16
+ function durableBackgroundHost(host) {
17
+ if (isDurableBackgroundHost(host)) return host;
18
+ const hostExecution = executionHost(host);
19
+ if (hostExecution) return durableBackgroundHostFromExecutionHost(hostExecution);
20
+ }
21
+ function isExecutionHost(host) {
22
+ return "scheduler" in host && "store" in host && isExecutionStore(host.store);
23
+ }
24
+ function isExecutionStore(store) {
25
+ return typeof store === "object" && store !== null && "checkpoints" in store && "events" in store && "notifications" in store && "runs" in store && "sessions" in store;
26
+ }
27
+ function durableBackgroundHostFromExecutionHost(host) {
28
+ return {
29
+ backgroundScheduler: host.scheduler,
30
+ capabilities: host.capabilities,
31
+ checkpointStore: host.store.checkpoints,
32
+ eventStore: host.store.events,
33
+ notificationInbox: host.store.notifications,
34
+ runStore: host.store.runs,
35
+ sessionStore: host.store.sessions,
36
+ transaction: transactionForStore(host.store)
37
+ };
38
+ }
39
+ function executionHostFromDurableBackgroundHost(host) {
40
+ return {
41
+ capabilities: host.capabilities ?? {},
42
+ scheduler: host.backgroundScheduler,
43
+ store: {
44
+ checkpoints: host.checkpointStore,
45
+ events: host.eventStore,
46
+ notifications: host.notificationInbox,
47
+ runs: host.runStore,
48
+ sessions: host.sessionStore,
49
+ transaction: host.transaction
50
+ }
51
+ };
52
+ }
53
+ function isDurableBackgroundHost(host) {
54
+ return "backgroundScheduler" in host && "checkpointStore" in host && "eventStore" in host && "notificationInbox" in host && "runStore" in host && "sessionStore" in host && "transaction" in host;
55
+ }
56
+ function transactionForStore(store) {
57
+ return (fn) => store.transaction(fn);
58
+ }
59
+ //#endregion
60
+ export { executionHost, sessionHost };
61
+
62
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","names":[],"sources":["../../src/execution/host.ts"],"sourcesContent":["import type {\n DurableBackgroundHost,\n DurableNotificationResumeHost,\n SessionHost,\n} from \"./capabilities\";\nimport type { AgentHost, ExecutionHost } from \"./types\";\n\ntype Transaction = ExecutionHost[\"store\"][\"transaction\"];\n\nexport function sessionHost(host: AgentHost): SessionHost {\n const durableHost = durableBackgroundHost(host);\n if (durableHost?.sessionStore) {\n return durableHost;\n }\n\n const hostExecution = executionHost(host);\n if (hostExecution) {\n return {\n capabilities: hostExecution.capabilities,\n sessionStore: hostExecution.store.sessions,\n };\n }\n\n return host;\n}\n\nexport function executionHost(host: AgentHost): ExecutionHost | undefined {\n if (isExecutionHost(host)) {\n return host;\n }\n\n if (isDurableBackgroundHost(host)) {\n return executionHostFromDurableBackgroundHost(host);\n }\n\n return;\n}\n\nexport function durableBackgroundHost(\n host: AgentHost\n): DurableBackgroundHost | undefined {\n if (isDurableBackgroundHost(host)) {\n return host;\n }\n\n const hostExecution = executionHost(host);\n if (hostExecution) {\n return durableBackgroundHostFromExecutionHost(hostExecution);\n }\n\n return;\n}\n\nexport function durableNotificationResumeHost(\n host: AgentHost\n): DurableNotificationResumeHost | undefined {\n const backgroundHost = durableBackgroundHost(host);\n if (backgroundHost) {\n return backgroundHost;\n }\n\n return;\n}\n\nfunction isExecutionHost(host: AgentHost): host is ExecutionHost {\n return \"scheduler\" in host && \"store\" in host && isExecutionStore(host.store);\n}\n\nfunction isExecutionStore(store: unknown): store is ExecutionHost[\"store\"] {\n return (\n typeof store === \"object\" &&\n store !== null &&\n \"checkpoints\" in store &&\n \"events\" in store &&\n \"notifications\" in store &&\n \"runs\" in store &&\n \"sessions\" in store\n );\n}\n\nfunction durableBackgroundHostFromExecutionHost(\n host: ExecutionHost\n): DurableBackgroundHost {\n return {\n backgroundScheduler: host.scheduler,\n capabilities: host.capabilities,\n checkpointStore: host.store.checkpoints,\n eventStore: host.store.events,\n notificationInbox: host.store.notifications,\n runStore: host.store.runs,\n sessionStore: host.store.sessions,\n transaction: transactionForStore(host.store),\n };\n}\n\nfunction executionHostFromDurableBackgroundHost(\n host: DurableBackgroundHost\n): ExecutionHost {\n return {\n capabilities: host.capabilities ?? {},\n scheduler: host.backgroundScheduler,\n store: {\n checkpoints: host.checkpointStore,\n events: host.eventStore,\n notifications: host.notificationInbox,\n runs: host.runStore,\n sessions: host.sessionStore,\n transaction: host.transaction,\n },\n };\n}\n\nfunction isDurableBackgroundHost(\n host: AgentHost\n): host is DurableBackgroundHost {\n return (\n \"backgroundScheduler\" in host &&\n \"checkpointStore\" in host &&\n \"eventStore\" in host &&\n \"notificationInbox\" in host &&\n \"runStore\" in host &&\n \"sessionStore\" in host &&\n \"transaction\" in host\n );\n}\n\nfunction transactionForStore(store: ExecutionHost[\"store\"]): Transaction {\n return (fn) => store.transaction(fn);\n}\n"],"mappings":";AASA,SAAgB,YAAY,MAA8B;CACxD,MAAM,cAAc,sBAAsB,IAAI;CAC9C,IAAI,aAAa,cACf,OAAO;CAGT,MAAM,gBAAgB,cAAc,IAAI;CACxC,IAAI,eACF,OAAO;EACL,cAAc,cAAc;EAC5B,cAAc,cAAc,MAAM;CACpC;CAGF,OAAO;AACT;AAEA,SAAgB,cAAc,MAA4C;CACxE,IAAI,gBAAgB,IAAI,GACtB,OAAO;CAGT,IAAI,wBAAwB,IAAI,GAC9B,OAAO,uCAAuC,IAAI;AAItD;AAEA,SAAgB,sBACd,MACmC;CACnC,IAAI,wBAAwB,IAAI,GAC9B,OAAO;CAGT,MAAM,gBAAgB,cAAc,IAAI;CACxC,IAAI,eACF,OAAO,uCAAuC,aAAa;AAI/D;AAaA,SAAS,gBAAgB,MAAwC;CAC/D,OAAO,eAAe,QAAQ,WAAW,QAAQ,iBAAiB,KAAK,KAAK;AAC9E;AAEA,SAAS,iBAAiB,OAAiD;CACzE,OACE,OAAO,UAAU,YACjB,UAAU,QACV,iBAAiB,SACjB,YAAY,SACZ,mBAAmB,SACnB,UAAU,SACV,cAAc;AAElB;AAEA,SAAS,uCACP,MACuB;CACvB,OAAO;EACL,qBAAqB,KAAK;EAC1B,cAAc,KAAK;EACnB,iBAAiB,KAAK,MAAM;EAC5B,YAAY,KAAK,MAAM;EACvB,mBAAmB,KAAK,MAAM;EAC9B,UAAU,KAAK,MAAM;EACrB,cAAc,KAAK,MAAM;EACzB,aAAa,oBAAoB,KAAK,KAAK;CAC7C;AACF;AAEA,SAAS,uCACP,MACe;CACf,OAAO;EACL,cAAc,KAAK,gBAAgB,CAAC;EACpC,WAAW,KAAK;EAChB,OAAO;GACL,aAAa,KAAK;GAClB,QAAQ,KAAK;GACb,eAAe,KAAK;GACpB,MAAM,KAAK;GACX,UAAU,KAAK;GACf,aAAa,KAAK;EACpB;CACF;AACF;AAEA,SAAS,wBACP,MAC+B;CAC/B,OACE,yBAAyB,QACzB,qBAAqB,QACrB,gBAAgB,QAChB,uBAAuB,QACvB,cAAc,QACd,kBAAkB,QAClB,iBAAiB;AAErB;AAEA,SAAS,oBAAoB,OAA4C;CACvE,QAAQ,OAAO,MAAM,YAAY,EAAE;AACrC"}
@@ -0,0 +1,6 @@
1
+ import { RuntimeToolExecutionCheckpoint, RuntimeToolExecutionContext, RuntimeToolExecutionDecision, RuntimeToolRetryPolicy, ToolExecutionNeedsRecoveryError } from "../llm-tool-execution.js";
2
+ import { AgentHostCapabilities, CheckpointPhase, CheckpointStore, CheckpointWriteResult, ClaimRunOptions, ClaimRunResult, EventCursor, EventStore, ExecutionHost, ExecutionScheduler, ExecutionStore, ExecutionStoreTransaction, NotificationClaimResult, NotificationInbox, NotificationRecord, NotificationStatus, NotificationWriteResult, ResumeSessionOptions, RunCheckpoint, RunKind, RunLease, RunRecord, RunStatus, RunStore, StoredAgentEvent } from "./types.js";
3
+ import { BackgroundScheduler, BackgroundSchedulerHost, CheckpointHost, DurableBackgroundHost, DurableNotificationResumeHost, EventHost, ExecutionTransactionHost, NotificationHost, RunHost, SessionHost } from "./capabilities.js";
4
+ import { executionHost, sessionHost } from "./host.js";
5
+ import { createInMemoryExecutionHost } from "./memory.js";
6
+ export { type AgentHostCapabilities, type BackgroundScheduler, type BackgroundSchedulerHost, type CheckpointHost, type CheckpointPhase, type CheckpointStore, type CheckpointWriteResult, type ClaimRunOptions, type ClaimRunResult, type DurableBackgroundHost, type DurableNotificationResumeHost, type EventCursor, type EventHost, type EventStore, type ExecutionHost, type ExecutionScheduler, type ExecutionStore, type ExecutionStoreTransaction, type ExecutionTransactionHost, type NotificationClaimResult, type NotificationHost, type NotificationInbox, type NotificationRecord, type NotificationStatus, type NotificationWriteResult, type ResumeSessionOptions, type RunCheckpoint, type RunHost, type RunKind, type RunLease, type RunRecord, type RunStatus, type RunStore, type RuntimeToolExecutionCheckpoint, type RuntimeToolExecutionContext, type RuntimeToolExecutionDecision, type RuntimeToolRetryPolicy, type SessionHost, type StoredAgentEvent, ToolExecutionNeedsRecoveryError, createInMemoryExecutionHost, executionHost, sessionHost };
@@ -0,0 +1,4 @@
1
+ import { executionHost, sessionHost } from "./host.js";
2
+ import { createInMemoryExecutionHost } from "./memory.js";
3
+ import { ToolExecutionNeedsRecoveryError } from "../llm-tool-execution.js";
4
+ export { ToolExecutionNeedsRecoveryError, createInMemoryExecutionHost, executionHost, sessionHost };
@@ -0,0 +1,54 @@
1
+ //#region src/execution/memory-notifications.ts
2
+ var InMemoryNotificationInbox = class {
3
+ #state;
4
+ constructor(state) {
5
+ this.#state = state;
6
+ }
7
+ claimByIdempotencyKey(idempotencyKey) {
8
+ const record = this.#state().notificationsByKey.get(idempotencyKey);
9
+ if (!record) return Promise.resolve({
10
+ ok: false,
11
+ reason: "not-found"
12
+ });
13
+ if (record.status !== "pending") return Promise.resolve({
14
+ ok: false,
15
+ reason: "already-claimed",
16
+ record: structuredClone(record)
17
+ });
18
+ this.#state().notificationsByKey.set(idempotencyKey, {
19
+ ...record,
20
+ status: "acked"
21
+ });
22
+ return Promise.resolve({
23
+ ok: true,
24
+ record: structuredClone(record)
25
+ });
26
+ }
27
+ enqueue(record) {
28
+ const existing = this.#state().notificationsByKey.get(record.idempotencyKey);
29
+ if (existing) return Promise.resolve({
30
+ existingNotificationId: existing.notificationId,
31
+ ok: false,
32
+ reason: "duplicate"
33
+ });
34
+ this.#state().notificationsByKey.set(record.idempotencyKey, structuredClone(record));
35
+ return Promise.resolve({ ok: true });
36
+ }
37
+ getByIdempotencyKey(idempotencyKey) {
38
+ const record = this.#state().notificationsByKey.get(idempotencyKey);
39
+ return Promise.resolve(record ? structuredClone(record) : null);
40
+ }
41
+ releaseByIdempotencyKey(idempotencyKey) {
42
+ const record = this.#state().notificationsByKey.get(idempotencyKey);
43
+ if (record?.status !== "acked") return Promise.resolve();
44
+ this.#state().notificationsByKey.set(idempotencyKey, {
45
+ ...record,
46
+ status: "pending"
47
+ });
48
+ return Promise.resolve();
49
+ }
50
+ };
51
+ //#endregion
52
+ export { InMemoryNotificationInbox };
53
+
54
+ //# sourceMappingURL=memory-notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-notifications.js","names":["#state"],"sources":["../../src/execution/memory-notifications.ts"],"sourcesContent":["import type { ExecutionState } from \"./memory-state\";\nimport type {\n NotificationClaimResult,\n NotificationInbox,\n NotificationRecord,\n NotificationWriteResult,\n} from \"./types\";\n\nexport class InMemoryNotificationInbox implements NotificationInbox {\n readonly #state: () => ExecutionState;\n\n constructor(state: () => ExecutionState) {\n this.#state = state;\n }\n\n claimByIdempotencyKey(\n idempotencyKey: string\n ): Promise<NotificationClaimResult> {\n const record = this.#state().notificationsByKey.get(idempotencyKey);\n if (!record) {\n return Promise.resolve({ ok: false, reason: \"not-found\" });\n }\n\n if (record.status !== \"pending\") {\n return Promise.resolve({\n ok: false,\n reason: \"already-claimed\",\n record: structuredClone(record),\n });\n }\n\n this.#state().notificationsByKey.set(idempotencyKey, {\n ...record,\n status: \"acked\",\n });\n return Promise.resolve({\n ok: true,\n record: structuredClone(record),\n });\n }\n\n enqueue(record: NotificationRecord): Promise<NotificationWriteResult> {\n const existing = this.#state().notificationsByKey.get(\n record.idempotencyKey\n );\n if (existing) {\n return Promise.resolve({\n existingNotificationId: existing.notificationId,\n ok: false,\n reason: \"duplicate\",\n });\n }\n\n this.#state().notificationsByKey.set(\n record.idempotencyKey,\n structuredClone(record)\n );\n return Promise.resolve({ ok: true });\n }\n\n getByIdempotencyKey(\n idempotencyKey: string\n ): Promise<NotificationRecord | null> {\n const record = this.#state().notificationsByKey.get(idempotencyKey);\n return Promise.resolve(record ? structuredClone(record) : null);\n }\n\n releaseByIdempotencyKey(idempotencyKey: string): Promise<void> {\n const record = this.#state().notificationsByKey.get(idempotencyKey);\n if (record?.status !== \"acked\") {\n return Promise.resolve();\n }\n\n this.#state().notificationsByKey.set(idempotencyKey, {\n ...record,\n status: \"pending\",\n });\n return Promise.resolve();\n }\n}\n"],"mappings":";AAQA,IAAa,4BAAb,MAAoE;CAClE;CAEA,YAAY,OAA6B;EACvC,KAAKA,SAAS;CAChB;CAEA,sBACE,gBACkC;EAClC,MAAM,SAAS,KAAKA,OAAO,EAAE,mBAAmB,IAAI,cAAc;EAClE,IAAI,CAAC,QACH,OAAO,QAAQ,QAAQ;GAAE,IAAI;GAAO,QAAQ;EAAY,CAAC;EAG3D,IAAI,OAAO,WAAW,WACpB,OAAO,QAAQ,QAAQ;GACrB,IAAI;GACJ,QAAQ;GACR,QAAQ,gBAAgB,MAAM;EAChC,CAAC;EAGH,KAAKA,OAAO,EAAE,mBAAmB,IAAI,gBAAgB;GACnD,GAAG;GACH,QAAQ;EACV,CAAC;EACD,OAAO,QAAQ,QAAQ;GACrB,IAAI;GACJ,QAAQ,gBAAgB,MAAM;EAChC,CAAC;CACH;CAEA,QAAQ,QAA8D;EACpE,MAAM,WAAW,KAAKA,OAAO,EAAE,mBAAmB,IAChD,OAAO,cACT;EACA,IAAI,UACF,OAAO,QAAQ,QAAQ;GACrB,wBAAwB,SAAS;GACjC,IAAI;GACJ,QAAQ;EACV,CAAC;EAGH,KAAKA,OAAO,EAAE,mBAAmB,IAC/B,OAAO,gBACP,gBAAgB,MAAM,CACxB;EACA,OAAO,QAAQ,QAAQ,EAAE,IAAI,KAAK,CAAC;CACrC;CAEA,oBACE,gBACoC;EACpC,MAAM,SAAS,KAAKA,OAAO,EAAE,mBAAmB,IAAI,cAAc;EAClE,OAAO,QAAQ,QAAQ,SAAS,gBAAgB,MAAM,IAAI,IAAI;CAChE;CAEA,wBAAwB,gBAAuC;EAC7D,MAAM,SAAS,KAAKA,OAAO,EAAE,mBAAmB,IAAI,cAAc;EAClE,IAAI,QAAQ,WAAW,SACrB,OAAO,QAAQ,QAAQ;EAGzB,KAAKA,OAAO,EAAE,mBAAmB,IAAI,gBAAgB;GACnD,GAAG;GACH,QAAQ;EACV,CAAC;EACD,OAAO,QAAQ,QAAQ;CACzB;AACF"}
@@ -0,0 +1,34 @@
1
+ //#region src/execution/memory-state.ts
2
+ function createEmptyState() {
3
+ return {
4
+ checkpoints: /* @__PURE__ */ new Map(),
5
+ events: /* @__PURE__ */ new Map(),
6
+ notificationsByKey: /* @__PURE__ */ new Map(),
7
+ runs: /* @__PURE__ */ new Map(),
8
+ sessionVersions: /* @__PURE__ */ new Map(),
9
+ sessions: /* @__PURE__ */ new Map()
10
+ };
11
+ }
12
+ function cloneState(state) {
13
+ return {
14
+ checkpoints: cloneCheckpointMap(state.checkpoints),
15
+ events: cloneEventMap(state.events),
16
+ notificationsByKey: cloneRecordMap(state.notificationsByKey),
17
+ runs: cloneRecordMap(state.runs),
18
+ sessionVersions: cloneRecordMap(state.sessionVersions),
19
+ sessions: cloneRecordMap(state.sessions)
20
+ };
21
+ }
22
+ function cloneCheckpointMap(map) {
23
+ return new Map([...map.entries()].map(([key, value]) => [key, value.map((checkpoint) => structuredClone(checkpoint))]));
24
+ }
25
+ function cloneEventMap(map) {
26
+ return new Map([...map.entries()].map(([key, value]) => [key, value.map((event) => structuredClone(event))]));
27
+ }
28
+ function cloneRecordMap(map) {
29
+ return new Map([...map.entries()].map(([key, value]) => [key, structuredClone(value)]));
30
+ }
31
+ //#endregion
32
+ export { cloneState, createEmptyState };
33
+
34
+ //# sourceMappingURL=memory-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-state.js","names":[],"sources":["../../src/execution/memory-state.ts"],"sourcesContent":["import type { StoredSession } from \"../session/store/types\";\nimport type {\n NotificationRecord,\n RunCheckpoint,\n RunRecord,\n StoredAgentEvent,\n} from \"./types\";\n\nexport interface ExecutionState {\n readonly checkpoints: Map<string, RunCheckpoint[]>;\n readonly events: Map<string, StoredAgentEvent[]>;\n readonly notificationsByKey: Map<string, NotificationRecord>;\n readonly runs: Map<string, RunRecord>;\n readonly sessions: Map<string, StoredSession>;\n readonly sessionVersions: Map<string, number>;\n}\n\nexport function createEmptyState(): ExecutionState {\n return {\n checkpoints: new Map(),\n events: new Map(),\n notificationsByKey: new Map(),\n runs: new Map(),\n sessionVersions: new Map(),\n sessions: new Map(),\n };\n}\n\nexport function cloneState(state: ExecutionState): ExecutionState {\n return {\n checkpoints: cloneCheckpointMap(state.checkpoints),\n events: cloneEventMap(state.events),\n notificationsByKey: cloneRecordMap(state.notificationsByKey),\n runs: cloneRecordMap(state.runs),\n sessionVersions: cloneRecordMap(state.sessionVersions),\n sessions: cloneRecordMap(state.sessions),\n };\n}\n\nfunction cloneCheckpointMap(\n map: ReadonlyMap<string, readonly RunCheckpoint[]>\n): Map<string, RunCheckpoint[]> {\n return new Map(\n [...map.entries()].map(([key, value]) => [\n key,\n value.map((checkpoint) => structuredClone(checkpoint)),\n ])\n );\n}\n\nfunction cloneEventMap(\n map: ReadonlyMap<string, readonly StoredAgentEvent[]>\n): Map<string, StoredAgentEvent[]> {\n return new Map(\n [...map.entries()].map(([key, value]) => [\n key,\n value.map((event) => structuredClone(event)),\n ])\n );\n}\n\nfunction cloneRecordMap<T>(map: ReadonlyMap<string, T>): Map<string, T> {\n return new Map(\n [...map.entries()].map(([key, value]) => [key, structuredClone(value)])\n );\n}\n"],"mappings":";AAiBA,SAAgB,mBAAmC;CACjD,OAAO;EACL,6BAAa,IAAI,IAAI;EACrB,wBAAQ,IAAI,IAAI;EAChB,oCAAoB,IAAI,IAAI;EAC5B,sBAAM,IAAI,IAAI;EACd,iCAAiB,IAAI,IAAI;EACzB,0BAAU,IAAI,IAAI;CACpB;AACF;AAEA,SAAgB,WAAW,OAAuC;CAChE,OAAO;EACL,aAAa,mBAAmB,MAAM,WAAW;EACjD,QAAQ,cAAc,MAAM,MAAM;EAClC,oBAAoB,eAAe,MAAM,kBAAkB;EAC3D,MAAM,eAAe,MAAM,IAAI;EAC/B,iBAAiB,eAAe,MAAM,eAAe;EACrD,UAAU,eAAe,MAAM,QAAQ;CACzC;AACF;AAEA,SAAS,mBACP,KAC8B;CAC9B,OAAO,IAAI,IACT,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,WAAW,CACvC,KACA,MAAM,KAAK,eAAe,gBAAgB,UAAU,CAAC,CACvD,CAAC,CACH;AACF;AAEA,SAAS,cACP,KACiC;CACjC,OAAO,IAAI,IACT,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,WAAW,CACvC,KACA,MAAM,KAAK,UAAU,gBAAgB,KAAK,CAAC,CAC7C,CAAC,CACH;AACF;AAEA,SAAS,eAAkB,KAA6C;CACtE,OAAO,IAAI,IACT,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,gBAAgB,KAAK,CAAC,CAAC,CACxE;AACF"}
@@ -0,0 +1,203 @@
1
+ import { InMemoryNotificationInbox } from "./memory-notifications.js";
2
+ import { cloneState, createEmptyState } from "./memory-state.js";
3
+ //#region src/execution/memory-store.ts
4
+ const claimableStatuses = new Set([
5
+ "leased",
6
+ "queued",
7
+ "running",
8
+ "suspended"
9
+ ]);
10
+ var InMemoryExecutionStore = class {
11
+ #state = createEmptyState();
12
+ #transactionChain = Promise.resolve();
13
+ checkpoints = new InMemoryCheckpointStore(() => this.#state);
14
+ events = new InMemoryEventStore(() => this.#state);
15
+ notifications = new InMemoryNotificationInbox(() => this.#state);
16
+ runs = new InMemoryRunStore(() => this.#state);
17
+ sessions = new InMemoryExecutionSessionStore(() => this.#state);
18
+ async transaction(fn) {
19
+ const previousTransaction = this.#transactionChain;
20
+ let releaseTransaction = () => void 0;
21
+ this.#transactionChain = new Promise((resolve) => {
22
+ releaseTransaction = resolve;
23
+ });
24
+ await previousTransaction;
25
+ const transactionState = cloneState(this.#state);
26
+ const transactionStore = new InMemoryTransactionStore(transactionState);
27
+ try {
28
+ const result = await fn(transactionStore);
29
+ this.#state = transactionState;
30
+ return result;
31
+ } finally {
32
+ releaseTransaction();
33
+ }
34
+ }
35
+ };
36
+ var InMemoryTransactionStore = class {
37
+ checkpoints;
38
+ events;
39
+ notifications;
40
+ runs;
41
+ sessions;
42
+ #state;
43
+ constructor(state) {
44
+ this.#state = state;
45
+ this.checkpoints = new InMemoryCheckpointStore(() => this.#state);
46
+ this.events = new InMemoryEventStore(() => this.#state);
47
+ this.notifications = new InMemoryNotificationInbox(() => this.#state);
48
+ this.runs = new InMemoryRunStore(() => this.#state);
49
+ this.sessions = new InMemoryExecutionSessionStore(() => this.#state);
50
+ }
51
+ };
52
+ var InMemoryExecutionSessionStore = class {
53
+ #state;
54
+ constructor(state) {
55
+ this.#state = state;
56
+ }
57
+ commit(key, next, options) {
58
+ const state = this.#state();
59
+ const currentVersion = state.sessions.get(key)?.version ?? null;
60
+ if (options.expectedVersion !== currentVersion) return Promise.resolve({
61
+ ok: false,
62
+ reason: "conflict"
63
+ });
64
+ const versionNumber = (state.sessionVersions.get(key) ?? 0) + 1;
65
+ const version = String(versionNumber);
66
+ state.sessionVersions.set(key, versionNumber);
67
+ state.sessions.set(key, structuredClone({
68
+ state: next.state,
69
+ version
70
+ }));
71
+ return Promise.resolve({
72
+ ok: true,
73
+ version
74
+ });
75
+ }
76
+ delete(key) {
77
+ const state = this.#state();
78
+ state.sessions.delete(key);
79
+ state.sessionVersions.delete(key);
80
+ return Promise.resolve();
81
+ }
82
+ load(key) {
83
+ const stored = this.#state().sessions.get(key);
84
+ return Promise.resolve(stored ? structuredClone(stored) : null);
85
+ }
86
+ };
87
+ var InMemoryRunStore = class {
88
+ #state;
89
+ constructor(state) {
90
+ this.#state = state;
91
+ }
92
+ create(record) {
93
+ const stored = structuredClone(record);
94
+ this.#state().runs.set(record.runId, stored);
95
+ return Promise.resolve(structuredClone(stored));
96
+ }
97
+ get(runId) {
98
+ const record = this.#state().runs.get(runId);
99
+ return Promise.resolve(record ? structuredClone(record) : null);
100
+ }
101
+ getByDedupeKey(dedupeKey) {
102
+ const record = [...this.#state().runs.values()].find((candidate) => candidate.dedupeKey === dedupeKey);
103
+ return Promise.resolve(record ? structuredClone(record) : null);
104
+ }
105
+ listByParentRunId(parentRunId) {
106
+ const records = [...this.#state().runs.values()].filter((candidate) => candidate.parentRunId === parentRunId);
107
+ return Promise.resolve(records.map((record) => structuredClone(record)));
108
+ }
109
+ update(record) {
110
+ const stored = structuredClone(record);
111
+ this.#state().runs.set(record.runId, stored);
112
+ return Promise.resolve(structuredClone(stored));
113
+ }
114
+ claim(runId, options) {
115
+ const record = this.#state().runs.get(runId);
116
+ if (!record) return Promise.resolve({
117
+ ok: false,
118
+ reason: "not-found"
119
+ });
120
+ if (!claimableStatuses.has(record.status)) return Promise.resolve({
121
+ ok: false,
122
+ reason: "not-claimable"
123
+ });
124
+ if (record.lease && record.lease.leaseUntilMs > options.nowMs) return Promise.resolve({
125
+ ok: false,
126
+ reason: "leased"
127
+ });
128
+ const lease = {
129
+ attempt: options.attempt,
130
+ leaseId: options.leaseId,
131
+ leaseUntilMs: options.nowMs + options.leaseMs
132
+ };
133
+ const claimed = {
134
+ ...record,
135
+ lease,
136
+ status: "leased"
137
+ };
138
+ this.#state().runs.set(runId, claimed);
139
+ return Promise.resolve({
140
+ lease,
141
+ ok: true,
142
+ record: structuredClone(claimed)
143
+ });
144
+ }
145
+ };
146
+ var InMemoryCheckpointStore = class {
147
+ #state;
148
+ constructor(state) {
149
+ this.#state = state;
150
+ }
151
+ append(checkpoint, options) {
152
+ const run = this.#state().runs.get(checkpoint.runId);
153
+ const currentVersion = run?.checkpointVersion ?? 0;
154
+ if (currentVersion !== options.expectedVersion) return Promise.resolve({
155
+ currentVersion,
156
+ ok: false,
157
+ reason: "stale-version"
158
+ });
159
+ const stored = structuredClone(checkpoint);
160
+ const checkpoints = this.#state().checkpoints.get(checkpoint.runId) ?? [];
161
+ checkpoints.push(stored);
162
+ this.#state().checkpoints.set(checkpoint.runId, checkpoints);
163
+ if (run) this.#state().runs.set(checkpoint.runId, {
164
+ ...run,
165
+ checkpointVersion: checkpoint.version
166
+ });
167
+ return Promise.resolve({
168
+ ok: true,
169
+ version: checkpoint.version
170
+ });
171
+ }
172
+ latest(runId) {
173
+ const checkpoint = (this.#state().checkpoints.get(runId) ?? []).at(-1);
174
+ return Promise.resolve(checkpoint ? structuredClone(checkpoint) : null);
175
+ }
176
+ };
177
+ var InMemoryEventStore = class {
178
+ #state;
179
+ constructor(state) {
180
+ this.#state = state;
181
+ }
182
+ append(runId, event) {
183
+ const events = this.#state().events.get(runId) ?? [];
184
+ const cursor = { offset: events.length + 1 };
185
+ events.push({
186
+ cursor,
187
+ event: structuredClone(event),
188
+ runId
189
+ });
190
+ this.#state().events.set(runId, events);
191
+ return Promise.resolve(cursor);
192
+ }
193
+ async *read(runId, cursor) {
194
+ await Promise.resolve();
195
+ const events = this.#state().events.get(runId) ?? [];
196
+ const start = cursor?.offset ?? 0;
197
+ for (const event of events.slice(start)) yield structuredClone(event);
198
+ }
199
+ };
200
+ //#endregion
201
+ export { InMemoryExecutionStore };
202
+
203
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","names":["#state","#transactionChain"],"sources":["../../src/execution/memory-store.ts"],"sourcesContent":["import type { AgentEvent } from \"../session/events\";\nimport type {\n CommitResult,\n ExpectedSessionVersion,\n SessionStore,\n SessionStoreCommit,\n StoredSession,\n} from \"../session/store/types\";\nimport { InMemoryNotificationInbox } from \"./memory-notifications\";\nimport type { ExecutionState } from \"./memory-state\";\nimport { cloneState, createEmptyState } from \"./memory-state\";\nimport type {\n CheckpointStore,\n CheckpointWriteResult,\n ClaimRunOptions,\n ClaimRunResult,\n EventCursor,\n EventStore,\n ExecutionStore,\n ExecutionStoreTransaction,\n NotificationInbox,\n RunCheckpoint,\n RunRecord,\n RunStatus,\n RunStore,\n StoredAgentEvent,\n} from \"./types\";\n\nconst claimableStatuses = new Set<RunStatus>([\n \"leased\",\n \"queued\",\n \"running\",\n \"suspended\",\n]);\n\nexport class InMemoryExecutionStore implements ExecutionStore {\n #state = createEmptyState();\n #transactionChain: Promise<void> = Promise.resolve();\n readonly checkpoints: CheckpointStore = new InMemoryCheckpointStore(\n () => this.#state\n );\n readonly events: EventStore = new InMemoryEventStore(() => this.#state);\n readonly notifications: NotificationInbox = new InMemoryNotificationInbox(\n () => this.#state\n );\n readonly runs: RunStore = new InMemoryRunStore(() => this.#state);\n readonly sessions: SessionStore = new InMemoryExecutionSessionStore(\n () => this.#state\n );\n\n async transaction<T>(\n fn: (tx: ExecutionStoreTransaction) => Promise<T>\n ): Promise<T> {\n const previousTransaction = this.#transactionChain;\n let releaseTransaction: () => void = () => undefined;\n this.#transactionChain = new Promise<void>((resolve) => {\n releaseTransaction = resolve;\n });\n await previousTransaction;\n const transactionState = cloneState(this.#state);\n const transactionStore = new InMemoryTransactionStore(transactionState);\n try {\n const result = await fn(transactionStore);\n this.#state = transactionState;\n return result;\n } finally {\n releaseTransaction();\n }\n }\n}\n\nclass InMemoryTransactionStore implements ExecutionStoreTransaction {\n readonly checkpoints: CheckpointStore;\n readonly events: EventStore;\n readonly notifications: NotificationInbox;\n readonly runs: RunStore;\n readonly sessions: SessionStore;\n readonly #state: ExecutionState;\n\n constructor(state: ExecutionState) {\n this.#state = state;\n this.checkpoints = new InMemoryCheckpointStore(() => this.#state);\n this.events = new InMemoryEventStore(() => this.#state);\n this.notifications = new InMemoryNotificationInbox(() => this.#state);\n this.runs = new InMemoryRunStore(() => this.#state);\n this.sessions = new InMemoryExecutionSessionStore(() => this.#state);\n }\n}\n\nclass InMemoryExecutionSessionStore implements SessionStore {\n readonly #state: () => ExecutionState;\n\n constructor(state: () => ExecutionState) {\n this.#state = state;\n }\n\n commit(\n key: string,\n next: SessionStoreCommit,\n options: { readonly expectedVersion: ExpectedSessionVersion }\n ): Promise<CommitResult> {\n const state = this.#state();\n const current = state.sessions.get(key);\n const currentVersion = current?.version ?? null;\n\n if (options.expectedVersion !== currentVersion) {\n return Promise.resolve({ ok: false, reason: \"conflict\" });\n }\n\n const versionNumber = (state.sessionVersions.get(key) ?? 0) + 1;\n const version = String(versionNumber);\n state.sessionVersions.set(key, versionNumber);\n state.sessions.set(key, structuredClone({ state: next.state, version }));\n return Promise.resolve({ ok: true, version });\n }\n\n delete(key: string): Promise<void> {\n const state = this.#state();\n state.sessions.delete(key);\n state.sessionVersions.delete(key);\n return Promise.resolve();\n }\n\n load(key: string): Promise<StoredSession | null> {\n const stored = this.#state().sessions.get(key);\n return Promise.resolve(stored ? structuredClone(stored) : null);\n }\n}\n\nclass InMemoryRunStore implements RunStore {\n readonly #state: () => ExecutionState;\n\n constructor(state: () => ExecutionState) {\n this.#state = state;\n }\n\n create(record: RunRecord): Promise<RunRecord> {\n const stored = structuredClone(record);\n this.#state().runs.set(record.runId, stored);\n return Promise.resolve(structuredClone(stored));\n }\n\n get(runId: string): Promise<RunRecord | null> {\n const record = this.#state().runs.get(runId);\n return Promise.resolve(record ? structuredClone(record) : null);\n }\n\n getByDedupeKey(dedupeKey: string): Promise<RunRecord | null> {\n const record = [...this.#state().runs.values()].find(\n (candidate) => candidate.dedupeKey === dedupeKey\n );\n return Promise.resolve(record ? structuredClone(record) : null);\n }\n\n listByParentRunId(parentRunId: string): Promise<readonly RunRecord[]> {\n const records = [...this.#state().runs.values()].filter(\n (candidate) => candidate.parentRunId === parentRunId\n );\n return Promise.resolve(records.map((record) => structuredClone(record)));\n }\n\n update(record: RunRecord): Promise<RunRecord> {\n const stored = structuredClone(record);\n this.#state().runs.set(record.runId, stored);\n return Promise.resolve(structuredClone(stored));\n }\n\n claim(runId: string, options: ClaimRunOptions): Promise<ClaimRunResult> {\n const record = this.#state().runs.get(runId);\n if (!record) {\n return Promise.resolve({ ok: false, reason: \"not-found\" });\n }\n\n if (!claimableStatuses.has(record.status)) {\n return Promise.resolve({ ok: false, reason: \"not-claimable\" });\n }\n\n if (record.lease && record.lease.leaseUntilMs > options.nowMs) {\n return Promise.resolve({ ok: false, reason: \"leased\" });\n }\n\n const lease = {\n attempt: options.attempt,\n leaseId: options.leaseId,\n leaseUntilMs: options.nowMs + options.leaseMs,\n };\n const claimed: RunRecord = {\n ...record,\n lease,\n status: \"leased\",\n };\n this.#state().runs.set(runId, claimed);\n return Promise.resolve({\n lease,\n ok: true,\n record: structuredClone(claimed),\n });\n }\n}\n\nclass InMemoryCheckpointStore implements CheckpointStore {\n readonly #state: () => ExecutionState;\n\n constructor(state: () => ExecutionState) {\n this.#state = state;\n }\n\n append(\n checkpoint: RunCheckpoint,\n options: { readonly expectedVersion: number }\n ): Promise<CheckpointWriteResult> {\n const run = this.#state().runs.get(checkpoint.runId);\n const currentVersion = run?.checkpointVersion ?? 0;\n if (currentVersion !== options.expectedVersion) {\n return Promise.resolve({\n currentVersion,\n ok: false,\n reason: \"stale-version\",\n });\n }\n\n const stored = structuredClone(checkpoint);\n const checkpoints = this.#state().checkpoints.get(checkpoint.runId) ?? [];\n checkpoints.push(stored);\n this.#state().checkpoints.set(checkpoint.runId, checkpoints);\n if (run) {\n this.#state().runs.set(checkpoint.runId, {\n ...run,\n checkpointVersion: checkpoint.version,\n });\n }\n\n return Promise.resolve({ ok: true, version: checkpoint.version });\n }\n\n latest(runId: string): Promise<RunCheckpoint | null> {\n const checkpoints = this.#state().checkpoints.get(runId) ?? [];\n const checkpoint = checkpoints.at(-1);\n return Promise.resolve(checkpoint ? structuredClone(checkpoint) : null);\n }\n}\n\nclass InMemoryEventStore implements EventStore {\n readonly #state: () => ExecutionState;\n\n constructor(state: () => ExecutionState) {\n this.#state = state;\n }\n\n append(runId: string, event: AgentEvent): Promise<EventCursor> {\n const events = this.#state().events.get(runId) ?? [];\n const cursor = { offset: events.length + 1 };\n events.push({\n cursor,\n event: structuredClone(event),\n runId,\n });\n this.#state().events.set(runId, events);\n return Promise.resolve(cursor);\n }\n\n async *read(\n runId: string,\n cursor?: EventCursor\n ): AsyncIterable<StoredAgentEvent> {\n await Promise.resolve();\n const events = this.#state().events.get(runId) ?? [];\n const start = cursor?.offset ?? 0;\n for (const event of events.slice(start)) {\n yield structuredClone(event);\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ExecutionHost } from "./types.js";
2
+
3
+ //#region src/execution/memory.d.ts
4
+ declare function createInMemoryExecutionHost(): ExecutionHost;
5
+ //#endregion
6
+ export { createInMemoryExecutionHost };
7
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { InMemoryExecutionStore } from "./memory-store.js";
2
+ //#region src/execution/memory.ts
3
+ function createInMemoryExecutionHost() {
4
+ return {
5
+ capabilities: {},
6
+ store: new InMemoryExecutionStore(),
7
+ scheduler: new InMemoryExecutionScheduler()
8
+ };
9
+ }
10
+ var InMemoryExecutionScheduler = class {
11
+ #queuedRunIds = [];
12
+ #resumedSessions = [];
13
+ enqueueRun(runId) {
14
+ this.#queuedRunIds.push(runId);
15
+ return Promise.resolve();
16
+ }
17
+ resumeSession(sessionKey, options) {
18
+ this.#resumedSessions.push({
19
+ options,
20
+ sessionKey
21
+ });
22
+ return Promise.resolve();
23
+ }
24
+ };
25
+ //#endregion
26
+ export { createInMemoryExecutionHost };
27
+
28
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","names":["#queuedRunIds","#resumedSessions"],"sources":["../../src/execution/memory.ts"],"sourcesContent":["import { InMemoryExecutionStore } from \"./memory-store\";\nimport type {\n ExecutionHost,\n ExecutionScheduler,\n ResumeSessionOptions,\n} from \"./types\";\n\nexport function createInMemoryExecutionHost(): ExecutionHost {\n return {\n capabilities: {},\n store: new InMemoryExecutionStore(),\n scheduler: new InMemoryExecutionScheduler(),\n };\n}\n\nclass InMemoryExecutionScheduler implements ExecutionScheduler {\n readonly #queuedRunIds: string[] = [];\n readonly #resumedSessions: {\n readonly options: ResumeSessionOptions;\n readonly sessionKey: string;\n }[] = [];\n\n enqueueRun(runId: string): Promise<void> {\n this.#queuedRunIds.push(runId);\n return Promise.resolve();\n }\n\n resumeSession(\n sessionKey: string,\n options: ResumeSessionOptions\n ): Promise<void> {\n this.#resumedSessions.push({ options, sessionKey });\n return Promise.resolve();\n }\n}\n"],"mappings":";;AAOA,SAAgB,8BAA6C;CAC3D,OAAO;EACL,cAAc,CAAC;EACf,OAAO,IAAI,uBAAuB;EAClC,WAAW,IAAI,2BAA2B;CAC5C;AACF;AAEA,IAAM,6BAAN,MAA+D;CAC7D,gBAAmC,CAAC;CACpC,mBAGM,CAAC;CAEP,WAAW,OAA8B;EACvC,KAAKA,cAAc,KAAK,KAAK;EAC7B,OAAO,QAAQ,QAAQ;CACzB;CAEA,cACE,YACA,SACe;EACf,KAAKC,iBAAiB,KAAK;GAAE;GAAS;EAAW,CAAC;EAClD,OAAO,QAAQ,QAAQ;CACzB;AACF"}
@@ -0,0 +1,150 @@
1
+ import { SessionStore } from "../session/store/types.js";
2
+ import { UserInput } from "../session/input.js";
3
+ import { AgentEvent } from "../session/events.js";
4
+ import { DurableBackgroundHost, SessionHost } from "./capabilities.js";
5
+
6
+ //#region src/execution/types.d.ts
7
+ type AgentHost = DurableBackgroundHost | ExecutionHost | SessionHost;
8
+ interface ExecutionHost {
9
+ readonly capabilities: AgentHostCapabilities;
10
+ readonly scheduler: ExecutionScheduler;
11
+ readonly store: ExecutionStore;
12
+ }
13
+ type AgentHostCapabilities = Record<string, never>;
14
+ interface ExecutionScheduler {
15
+ enqueueRun(runId: string, options?: {
16
+ readonly runAfterMs?: number;
17
+ }): Promise<void>;
18
+ resumeSession(sessionKey: string, options: ResumeSessionOptions): Promise<void>;
19
+ }
20
+ interface ResumeSessionOptions {
21
+ readonly idempotencyKey?: string;
22
+ readonly notificationId?: string;
23
+ readonly runId: string;
24
+ }
25
+ type RunKind = "notification" | "tool-recovery" | "user-turn";
26
+ type RunStatus = "cancelled" | "completed" | "error" | "leased" | "needs-recovery" | "queued" | "running" | "suspended";
27
+ interface RunLease {
28
+ readonly attempt: number;
29
+ readonly leaseId: string;
30
+ readonly leaseUntilMs: number;
31
+ }
32
+ interface RunRecord {
33
+ readonly checkpointVersion: number;
34
+ readonly dedupeKey?: string;
35
+ readonly kind: RunKind;
36
+ readonly lease?: RunLease;
37
+ readonly output?: unknown;
38
+ readonly ownerNamespace?: string;
39
+ readonly parentRunId?: string;
40
+ readonly publicTaskId?: string;
41
+ readonly rootRunId: string;
42
+ readonly runId: string;
43
+ readonly sessionKey: string;
44
+ readonly status: RunStatus;
45
+ }
46
+ type ClaimRunResult = {
47
+ readonly lease: RunLease;
48
+ readonly ok: true;
49
+ readonly record: RunRecord;
50
+ } | {
51
+ readonly ok: false;
52
+ readonly reason: "leased" | "not-claimable" | "not-found";
53
+ };
54
+ interface ClaimRunOptions {
55
+ readonly attempt: number;
56
+ readonly leaseId: string;
57
+ readonly leaseMs: number;
58
+ readonly nowMs: number;
59
+ }
60
+ type CheckpointPhase = "after-model" | "after-notification" | "after-tool" | "before-child-run" | "before-model" | "before-notification" | "before-tool" | "child-linked" | "suspended";
61
+ interface RunCheckpoint {
62
+ readonly checkpointId: string;
63
+ readonly childRunId?: string;
64
+ readonly pendingToolCall?: unknown;
65
+ readonly phase: CheckpointPhase;
66
+ readonly runId: string;
67
+ readonly runtimeState: unknown;
68
+ readonly sessionSnapshot: unknown;
69
+ readonly version: number;
70
+ }
71
+ type CheckpointWriteResult = {
72
+ readonly ok: true;
73
+ readonly version: number;
74
+ } | {
75
+ readonly currentVersion: number;
76
+ readonly ok: false;
77
+ readonly reason: "stale-version";
78
+ };
79
+ interface EventCursor {
80
+ readonly offset: number;
81
+ }
82
+ interface StoredAgentEvent {
83
+ readonly cursor: EventCursor;
84
+ readonly event: AgentEvent;
85
+ readonly runId: string;
86
+ }
87
+ type NotificationStatus = "acked" | "cancelled" | "pending";
88
+ interface NotificationRecord {
89
+ readonly idempotencyKey: string;
90
+ readonly input: UserInput;
91
+ readonly notificationId: string;
92
+ readonly observerEvents?: readonly AgentEvent[];
93
+ readonly ownerNamespace?: string;
94
+ readonly runId: string;
95
+ readonly sessionKey: string;
96
+ readonly status: NotificationStatus;
97
+ }
98
+ type NotificationWriteResult = {
99
+ readonly ok: true;
100
+ } | {
101
+ readonly existingNotificationId: string;
102
+ readonly ok: false;
103
+ readonly reason: "duplicate";
104
+ };
105
+ type NotificationClaimResult = {
106
+ readonly ok: true;
107
+ readonly record: NotificationRecord;
108
+ } | {
109
+ readonly ok: false;
110
+ readonly reason: "already-claimed" | "not-found";
111
+ readonly record?: NotificationRecord;
112
+ };
113
+ interface RunStore {
114
+ claim(runId: string, options: ClaimRunOptions): Promise<ClaimRunResult>;
115
+ create(record: RunRecord): Promise<RunRecord>;
116
+ get(runId: string): Promise<RunRecord | null>;
117
+ getByDedupeKey(dedupeKey: string): Promise<RunRecord | null>;
118
+ listByParentRunId(parentRunId: string): Promise<readonly RunRecord[]>;
119
+ update(record: RunRecord): Promise<RunRecord>;
120
+ }
121
+ interface CheckpointStore {
122
+ append(checkpoint: RunCheckpoint, options: {
123
+ readonly expectedVersion: number;
124
+ }): Promise<CheckpointWriteResult>;
125
+ latest(runId: string): Promise<RunCheckpoint | null>;
126
+ }
127
+ interface EventStore {
128
+ append(runId: string, event: AgentEvent): Promise<EventCursor>;
129
+ read(runId: string, cursor?: EventCursor): AsyncIterable<StoredAgentEvent>;
130
+ }
131
+ interface NotificationInbox {
132
+ claimByIdempotencyKey(idempotencyKey: string): Promise<NotificationClaimResult>;
133
+ enqueue(record: NotificationRecord): Promise<NotificationWriteResult>;
134
+ getByIdempotencyKey(idempotencyKey: string): Promise<NotificationRecord | null>;
135
+ releaseByIdempotencyKey(idempotencyKey: string): Promise<void>;
136
+ }
137
+ interface ExecutionStorePorts {
138
+ readonly checkpoints: CheckpointStore;
139
+ readonly events: EventStore;
140
+ readonly notifications: NotificationInbox;
141
+ readonly runs: RunStore;
142
+ readonly sessions: SessionStore;
143
+ }
144
+ interface ExecutionStoreTransaction extends ExecutionStorePorts {}
145
+ interface ExecutionStore extends ExecutionStorePorts {
146
+ transaction<T>(fn: (tx: ExecutionStoreTransaction) => Promise<T>): Promise<T>;
147
+ }
148
+ //#endregion
149
+ export { AgentHost, AgentHostCapabilities, CheckpointPhase, CheckpointStore, CheckpointWriteResult, ClaimRunOptions, ClaimRunResult, EventCursor, EventStore, ExecutionHost, ExecutionScheduler, ExecutionStore, ExecutionStoreTransaction, NotificationClaimResult, NotificationInbox, NotificationRecord, NotificationStatus, NotificationWriteResult, ResumeSessionOptions, RunCheckpoint, RunKind, RunLease, RunRecord, RunStatus, RunStore, StoredAgentEvent };
150
+ //# sourceMappingURL=types.d.ts.map
package/dist/index.d.ts CHANGED
@@ -1,8 +1,15 @@
1
- import { AgentToolChoice, AgentToolExecute, AgentToolExecutionOptions, LlmOutputPart, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, createLlm } from "./llm.js";
1
+ import { AgentToolChoice, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, RuntimeLlmOutputPart, createLlm } from "./llm.js";
2
+ import { CommitResult, ExpectedSessionVersion, SessionStore, SessionStoreCommit, StoredSession } from "./session/store/types.js";
3
+ import { InputEventMeta, InputSource } from "./session/input-meta-types.js";
2
4
  import { AgentInput, SessionInput, UserInput, UserMessage, UserMessageContent, UserMessageContentPart, UserMessageFileData, UserMessageFilePart, UserMessageImagePart, UserMessageTextPart, UserText, UserTextContent } from "./session/input.js";
3
- import { AgentAfterStepContext, AgentAfterTurnContext, AgentBeforeStepContext, AgentBeforeTurnContext, AgentHooks, AgentStepResult, AgentTurnResult } from "./hooks.js";
4
- import { AgentEvent, AgentEventListener, AssistantReasoning, AssistantText, RuntimeInput, ToolCall, ToolResult } from "./session/events.js";
5
+ import { AgentEvent, AgentEventListener, AssistantReasoning, AssistantText, ControlAgentEvent, LifecycleAgentEvent, RuntimeInput, TelemetryAgentEvent, ToolAgentEvent, ToolCall, ToolResult, VisibleAgentEvent, isControlAgentEvent, isLifecycleAgentEvent, isTelemetryAgentEvent, isToolAgentEvent, isVisibleAgentEvent } from "./session/events.js";
6
+ import { AgentHost } from "./execution/types.js";
7
+ import { executionHost } from "./execution/host.js";
8
+ import { AgentEventContext, AgentPlugin, AgentPluginInterceptResult, AgentPluginResult, InterceptableAgentEvent, PluginPipelineResult, runPluginsForEvent } from "./plugins.js";
9
+ import { AgentOptions } from "./agent-options.js";
5
10
  import { AgentRun } from "./session/run.js";
6
- import { CommitResult, ExpectedSessionVersion, SessionStore, SessionStoreCommit, StoredSession } from "./session/store/types.js";
7
- import { Agent, AgentOptions, AgentSessionOptions, SessionHandle } from "./agent.js";
8
- export { Agent, type AgentAfterStepContext, type AgentAfterTurnContext, type AgentBeforeStepContext, type AgentBeforeTurnContext, type AgentEvent, type AgentEventListener, type AgentHooks, type AgentInput, type AgentOptions, type AgentRun, type AgentSessionOptions, type AgentStepResult, type AgentToolChoice, type AgentToolExecute, type AgentToolExecutionOptions, type AgentTurnResult, type AssistantReasoning, type AssistantText, type CommitResult, type ExpectedSessionVersion, type LlmOutputPart, type RuntimeCreateLlmOptions, type RuntimeInput, type RuntimeLlm, type RuntimeLlmContext, type RuntimeLlmOutput, type SessionHandle, type SessionInput, type SessionStore, type SessionStoreCommit, type StoredSession, type ToolCall, type ToolResult, type UserInput, type UserMessage, type UserMessageContent, type UserMessageContentPart, type UserMessageFileData, type UserMessageFilePart, type UserMessageImagePart, type UserMessageTextPart, type UserText, type UserTextContent, createLlm };
11
+ import { SessionHandle } from "./agent-session-entry.js";
12
+ import { Agent } from "./agent.js";
13
+ import { delegateUserInput } from "./session/delegate-input.js";
14
+ import { attachInputMeta, attachRuntimeInputMeta, stripEventMeta, stripInputMeta, userInputFromEvent } from "./session/input-meta.js";
15
+ export { Agent, type AgentEvent, type AgentEventContext, type AgentEventListener, type AgentHost, type AgentInput, type AgentOptions, type AgentPlugin, type AgentPluginInterceptResult, type AgentPluginResult, type AgentRun, type AgentToolChoice, type AssistantReasoning, type AssistantText, type CommitResult, type ControlAgentEvent, type ExpectedSessionVersion, type InputEventMeta, type InputSource, type InterceptableAgentEvent, type LifecycleAgentEvent, type PluginPipelineResult, type RuntimeCreateLlmOptions, type RuntimeInput, type RuntimeLlm, type RuntimeLlmContext, type RuntimeLlmOutput, type RuntimeLlmOutputPart, type SessionHandle, type SessionInput, type SessionStore, type SessionStoreCommit, type StoredSession, type TelemetryAgentEvent, type ToolAgentEvent, type ToolCall, type ToolResult, type UserInput, type UserMessage, type UserMessageContent, type UserMessageContentPart, type UserMessageFileData, type UserMessageFilePart, type UserMessageImagePart, type UserMessageTextPart, type UserText, type UserTextContent, type VisibleAgentEvent, attachInputMeta, attachRuntimeInputMeta, createLlm, delegateUserInput, executionHost, isControlAgentEvent, isLifecycleAgentEvent, isTelemetryAgentEvent, isToolAgentEvent, isVisibleAgentEvent, runPluginsForEvent, stripEventMeta, stripInputMeta, userInputFromEvent };