@loopingai/core 0.3.1 → 0.5.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.
Files changed (110) hide show
  1. package/README.md +83 -28
  2. package/dist/a2a/caller.d.ts +24 -0
  3. package/dist/a2a/caller.d.ts.map +1 -0
  4. package/dist/a2a/caller.js +34 -0
  5. package/dist/a2a/caller.js.map +1 -0
  6. package/dist/a2a/card.d.ts +7 -2
  7. package/dist/a2a/card.d.ts.map +1 -1
  8. package/dist/a2a/card.js +16 -7
  9. package/dist/a2a/card.js.map +1 -1
  10. package/dist/a2a/index.d.ts +15 -0
  11. package/dist/a2a/index.d.ts.map +1 -1
  12. package/dist/a2a/index.js +15 -0
  13. package/dist/a2a/index.js.map +1 -1
  14. package/dist/a2a/notify.d.ts +27 -5
  15. package/dist/a2a/notify.d.ts.map +1 -1
  16. package/dist/a2a/notify.js +18 -8
  17. package/dist/a2a/notify.js.map +1 -1
  18. package/dist/a2a/push.d.ts +71 -0
  19. package/dist/a2a/push.d.ts.map +1 -0
  20. package/dist/a2a/push.js +54 -0
  21. package/dist/a2a/push.js.map +1 -0
  22. package/dist/a2a/verify.d.ts +28 -36
  23. package/dist/a2a/verify.d.ts.map +1 -1
  24. package/dist/a2a/verify.js +20 -25
  25. package/dist/a2a/verify.js.map +1 -1
  26. package/dist/agent/index.d.ts +16 -5
  27. package/dist/agent/index.d.ts.map +1 -1
  28. package/dist/agent/index.js +16 -5
  29. package/dist/agent/index.js.map +1 -1
  30. package/dist/config.d.ts +49 -7
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +25 -3
  33. package/dist/config.js.map +1 -1
  34. package/dist/contract/recipe.d.ts +14 -2
  35. package/dist/contract/recipe.d.ts.map +1 -1
  36. package/dist/contract/validation.d.ts +22 -18
  37. package/dist/contract/validation.d.ts.map +1 -1
  38. package/dist/contract/validation.js +19 -10
  39. package/dist/contract/validation.js.map +1 -1
  40. package/dist/db/models/tasks.d.ts +19 -5
  41. package/dist/db/models/tasks.d.ts.map +1 -1
  42. package/dist/db/models/tasks.js +38 -8
  43. package/dist/db/models/tasks.js.map +1 -1
  44. package/dist/host/agent.d.ts +217 -0
  45. package/dist/host/agent.d.ts.map +1 -0
  46. package/dist/host/agent.js +304 -0
  47. package/dist/host/agent.js.map +1 -0
  48. package/dist/host/index.d.ts +21 -0
  49. package/dist/host/index.d.ts.map +1 -0
  50. package/dist/host/index.js +20 -0
  51. package/dist/host/index.js.map +1 -0
  52. package/dist/host/plugin-host.d.ts +43 -0
  53. package/dist/host/plugin-host.d.ts.map +1 -0
  54. package/dist/host/plugin-host.js +2 -0
  55. package/dist/host/plugin-host.js.map +1 -0
  56. package/dist/round/agent.d.ts +267 -0
  57. package/dist/round/agent.d.ts.map +1 -0
  58. package/dist/round/agent.js +691 -0
  59. package/dist/round/agent.js.map +1 -0
  60. package/dist/round/index.d.ts +25 -0
  61. package/dist/round/index.d.ts.map +1 -0
  62. package/dist/round/index.js +24 -0
  63. package/dist/round/index.js.map +1 -0
  64. package/dist/round/policy.d.ts +99 -0
  65. package/dist/round/policy.d.ts.map +1 -0
  66. package/dist/round/policy.js +2 -0
  67. package/dist/round/policy.js.map +1 -0
  68. package/dist/round/subagent.d.ts +67 -0
  69. package/dist/round/subagent.d.ts.map +1 -0
  70. package/dist/round/subagent.js +89 -0
  71. package/dist/round/subagent.js.map +1 -0
  72. package/dist/round/turn.d.ts +231 -0
  73. package/dist/round/turn.d.ts.map +1 -0
  74. package/dist/round/turn.js +497 -0
  75. package/dist/round/turn.js.map +1 -0
  76. package/dist/round/workflow.d.ts +109 -0
  77. package/dist/round/workflow.d.ts.map +1 -0
  78. package/dist/round/workflow.js +316 -0
  79. package/dist/round/workflow.js.map +1 -0
  80. package/dist/runtime/index.d.ts +5 -1
  81. package/dist/runtime/index.d.ts.map +1 -1
  82. package/dist/runtime/index.js +2 -6
  83. package/dist/runtime/index.js.map +1 -1
  84. package/dist/subagent/fingerprint.d.ts.map +1 -1
  85. package/dist/subagent/fingerprint.js +7 -2
  86. package/dist/subagent/fingerprint.js.map +1 -1
  87. package/dist/testing/auth.d.ts.map +1 -1
  88. package/dist/testing/auth.js +10 -7
  89. package/dist/testing/auth.js.map +1 -1
  90. package/dist/testing/fixtures.d.ts +17 -0
  91. package/dist/testing/fixtures.d.ts.map +1 -1
  92. package/dist/testing/fixtures.js +17 -0
  93. package/dist/testing/fixtures.js.map +1 -1
  94. package/dist/testing/harness.d.ts +98 -0
  95. package/dist/testing/harness.d.ts.map +1 -0
  96. package/dist/testing/harness.js +139 -0
  97. package/dist/testing/harness.js.map +1 -0
  98. package/dist/testing/index.d.ts +2 -1
  99. package/dist/testing/index.d.ts.map +1 -1
  100. package/dist/testing/index.js +2 -1
  101. package/dist/testing/index.js.map +1 -1
  102. package/dist/worker/define-agent.d.ts +124 -0
  103. package/dist/worker/define-agent.d.ts.map +1 -0
  104. package/dist/worker/define-agent.js +21 -0
  105. package/dist/worker/define-agent.js.map +1 -0
  106. package/dist/worker/index.d.ts +29 -4
  107. package/dist/worker/index.d.ts.map +1 -1
  108. package/dist/worker/index.js +70 -12
  109. package/dist/worker/index.js.map +1 -1
  110. package/package.json +12 -3
@@ -68,8 +68,16 @@ export declare function makeTasks(db: DB): {
68
68
  * it. That closes the window between a workflow's terminal build and its
69
69
  * callback — the read-check-write is synchronous here, so a `CancelTask`
70
70
  * landing mid-delivery makes this return `false` and the notify never fires.
71
- * Writing `canceled` onto a live row stays allowed: that is how the a2a-js
72
- * handler's own cancel branch records the cancellation.
71
+ *
72
+ * The reverse direction is guarded too: writing `canceled` over an already
73
+ * `completed`/`failed` row is refused, mirroring {@link cancel}'s own source
74
+ * guard. Without it, a cancellation landing between the Workflow's `complete`
75
+ * and `notify` steps — separate, independently-retried steps — could flip
76
+ * storage to canceled while `deliver()` still posts the cached completed
77
+ * task it already built, the exact race this guard exists to close. Writing
78
+ * `canceled` onto a `submitted`/`working` row, or re-writing it onto an
79
+ * already-`canceled` one, stays allowed: that is how the a2a-js handler's own
80
+ * cancel branch records the cancellation.
73
81
  */
74
82
  save(task: Task): boolean;
75
83
  /**
@@ -81,9 +89,15 @@ export declare function makeTasks(db: DB): {
81
89
  */
82
90
  markWorking(taskId: string): "ok" | "canceled";
83
91
  /**
84
- * Flip the task to `canceled` and return it. Terminal: once this lands,
85
- * {@link save} refuses every non-canceled write, so no completed or failed
86
- * callback can be built from this row afterwards.
92
+ * Flip the task to `canceled` and return it, or `null` if the row is not
93
+ * eligible unknown, or already past `submitted`/`working`. Guarding the
94
+ * source state (not just the destination, as {@link save} does) matters
95
+ * because `complete`/`notify` are separate Workflow steps: without this, a
96
+ * cancellation landing between them would flip an already-`completed` or
97
+ * `failed` row to `canceled` right as `deliver()` posts the terminal
98
+ * callback it had already built, silently rewriting a delivered result.
99
+ * Terminal: once this lands, {@link save} refuses every non-canceled write,
100
+ * so no completed or failed callback can be built from this row afterwards.
87
101
  */
88
102
  cancel(taskId: string): PlainTask | null;
89
103
  /** Delete all tasks older than 30 days (called by the maintenance cron). */
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/db/models/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAMnC,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAE7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE;IAiC5B;;;;OAIG;iBACU;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,SAAS;IAwBb,6EAA6E;gBACjE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC;;;OAGG;gBACS,aAAa,GAAG;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAiCrE;;;;;;;;;;;OAWG;eACQ,IAAI,GAAG,OAAO;IAazB;;;;;;OAMG;wBACiB,MAAM,GAAG,IAAI,GAAG,UAAU;IAe9C;;;;OAIG;mBACY,MAAM,GAAG,SAAS,GAAG,IAAI;IAaxC,4EAA4E;eACjE,IAAI;EAKlB"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/db/models/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAMnC,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAE7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE;IAiC5B;;;;OAIG;iBACU;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,SAAS;IAwBb,6EAA6E;gBACjE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC;;;OAGG;gBACS,aAAa,GAAG;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAiCrE;;;;;;;;;;;;;;;;;;;OAmBG;eACQ,IAAI,GAAG,OAAO;IA0BzB;;;;;;OAMG;wBACiB,MAAM,GAAG,IAAI,GAAG,UAAU;IAe9C;;;;;;;;;;OAUG;mBACY,MAAM,GAAG,SAAS,GAAG,IAAI;IAoBxC,4EAA4E;eACjE,IAAI;EAKlB"}
@@ -133,14 +133,33 @@ export function makeTasks(db) {
133
133
  * it. That closes the window between a workflow's terminal build and its
134
134
  * callback — the read-check-write is synchronous here, so a `CancelTask`
135
135
  * landing mid-delivery makes this return `false` and the notify never fires.
136
- * Writing `canceled` onto a live row stays allowed: that is how the a2a-js
137
- * handler's own cancel branch records the cancellation.
136
+ *
137
+ * The reverse direction is guarded too: writing `canceled` over an already
138
+ * `completed`/`failed` row is refused, mirroring {@link cancel}'s own source
139
+ * guard. Without it, a cancellation landing between the Workflow's `complete`
140
+ * and `notify` steps — separate, independently-retried steps — could flip
141
+ * storage to canceled while `deliver()` still posts the cached completed
142
+ * task it already built, the exact race this guard exists to close. Writing
143
+ * `canceled` onto a `submitted`/`working` row, or re-writing it onto an
144
+ * already-`canceled` one, stays allowed: that is how the a2a-js handler's own
145
+ * cancel branch records the cancellation.
138
146
  */
139
147
  save(task) {
140
148
  const existing = readOne(task.id);
141
- if (existing !== null &&
142
- stateOf(existing) === TaskState.TASK_STATE_CANCELED &&
143
- stateOf(task) !== TaskState.TASK_STATE_CANCELED) {
149
+ if (existing === null) {
150
+ upsert(task);
151
+ return true;
152
+ }
153
+ const existingState = stateOf(existing);
154
+ const incomingState = stateOf(task);
155
+ if (existingState === TaskState.TASK_STATE_CANCELED &&
156
+ incomingState !== TaskState.TASK_STATE_CANCELED) {
157
+ return false;
158
+ }
159
+ if (incomingState === TaskState.TASK_STATE_CANCELED &&
160
+ existingState !== TaskState.TASK_STATE_SUBMITTED &&
161
+ existingState !== TaskState.TASK_STATE_WORKING &&
162
+ existingState !== TaskState.TASK_STATE_CANCELED) {
144
163
  return false;
145
164
  }
146
165
  upsert(task);
@@ -171,14 +190,25 @@ export function makeTasks(db) {
171
190
  return "ok";
172
191
  },
173
192
  /**
174
- * Flip the task to `canceled` and return it. Terminal: once this lands,
175
- * {@link save} refuses every non-canceled write, so no completed or failed
176
- * callback can be built from this row afterwards.
193
+ * Flip the task to `canceled` and return it, or `null` if the row is not
194
+ * eligible unknown, or already past `submitted`/`working`. Guarding the
195
+ * source state (not just the destination, as {@link save} does) matters
196
+ * because `complete`/`notify` are separate Workflow steps: without this, a
197
+ * cancellation landing between them would flip an already-`completed` or
198
+ * `failed` row to `canceled` right as `deliver()` posts the terminal
199
+ * callback it had already built, silently rewriting a delivered result.
200
+ * Terminal: once this lands, {@link save} refuses every non-canceled write,
201
+ * so no completed or failed callback can be built from this row afterwards.
177
202
  */
178
203
  cancel(taskId) {
179
204
  const task = readOne(taskId);
180
205
  if (!task)
181
206
  return null;
207
+ const state = stateOf(task);
208
+ if (state !== TaskState.TASK_STATE_SUBMITTED &&
209
+ state !== TaskState.TASK_STATE_WORKING) {
210
+ return null;
211
+ }
182
212
  task.status = {
183
213
  ...task.status,
184
214
  state: TaskState.TASK_STATE_CANCELED,
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/db/models/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/db/models/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ import { Agent, type Schedule } from "agents";
2
+ import { type Task } from "@a2a-js/sdk";
3
+ import { type AgentRuntime } from "../runtime/index.js";
4
+ import type { AgentPlugin } from "../contract/plugin.js";
5
+ import { type CoreConfig, type CoreConfigOverrides } from "../config.js";
6
+ import type { A2ASecretsEnv, AiEnv } from "../env.js";
7
+ import { AgentDB } from "../db/index.js";
8
+ import type { GatewayIdentity } from "../a2a/verify.js";
9
+ import type { PlainTask } from "../a2a/task.js";
10
+ import type { TaskListQuery } from "../a2a/agent-stub.js";
11
+ import { type PushChannel, type TurnPushContext } from "../a2a/push.js";
12
+ import { type SessionLike } from "../agent/session.js";
13
+ import { type GatewayMetadata, type ModelPair, type ModelRuntime } from "../agent/model.js";
14
+ import type { PluginHost } from "./plugin-host.js";
15
+ /**
16
+ * The Durable Object body every Looping agent has, whatever loop it runs.
17
+ *
18
+ * ## Why this is core's and not the app's
19
+ *
20
+ * It was the app's, in the starter, and it was written twice — once for the
21
+ * delegating round agent, once for the single-turn proactive one. The two copies
22
+ * were identical for ~180 lines: the memoized runtime/db/models getters, the
23
+ * `onStart` that must await migrations before the SDK dispatches any RPC, the
24
+ * cron registration guard, the session with its displacement fan-out, the
25
+ * `identityKey` timing, and the task RPC surface.
26
+ *
27
+ * They did not stay identical. The second copy dropped `markWorking`'s
28
+ * cancellation verdict on the floor and probed with a separate `getTask` before
29
+ * writing a terminal Task — so a canceled task still burned a model call, and the
30
+ * gateway could still receive a `completed` callback for a task the caller had
31
+ * abandoned. Both are lifecycle invariants, both were documented in the first
32
+ * copy, and neither is visible to a type checker or a linter.
33
+ *
34
+ * That is the argument for this class. **None of it is policy.** How a turn is
35
+ * shaped, what ends it, what the model is told — all of that stays with the
36
+ * agent, and an agent that wants a different loop simply does not extend
37
+ * {@link file://../round/agent.ts RoundAgentBase}. What is here is the part where
38
+ * being different is only ever a bug.
39
+ *
40
+ * ## The three seams
41
+ *
42
+ * ```ts
43
+ * export class MyAgent extends LoopingAgent<Env> {
44
+ * protected agentConfig() { return MY_CONFIG; }
45
+ * protected agentPlugins(host: PluginHost<Env>) { return plugins(host); }
46
+ * protected agentSoul(capabilities: string) { return soulPrompt(capabilities); }
47
+ * }
48
+ * ```
49
+ *
50
+ * One Durable Object instance per verified caller (keyed by the gateway JWT's
51
+ * `identity.key`), each owning **one continuous Session** — durable history plus
52
+ * a self-edited `memory` block, backed by `this.sql`. All of a caller's turns, in
53
+ * any channel or thread, accumulate into that one conversation.
54
+ */
55
+ export declare abstract class LoopingAgent<TEnv extends Cloudflare.Env & AiEnv & A2ASecretsEnv = Cloudflare.Env & AiEnv & A2ASecretsEnv> extends Agent<TEnv> {
56
+ private session?;
57
+ private _runtime?;
58
+ private _models?;
59
+ private _pair?;
60
+ private _db?;
61
+ /**
62
+ * The verified caller this instance belongs to, set on the first turn.
63
+ *
64
+ * `onStart` runs before any request, so it is not known when `agentPlugins()`
65
+ * is built — which is why anything per-caller takes a thunk. The DO is keyed
66
+ * 1:1 by this value, so it is constant once set.
67
+ */
68
+ private identityKey?;
69
+ /**
70
+ * Test-only model injection. A **field**, not a constructor argument or an RPC
71
+ * parameter, so it never appears on the generated DO stub: production callers
72
+ * cannot reach it, and no model configuration crosses the RPC boundary.
73
+ */
74
+ modelsOverride?: ModelPair;
75
+ /** This agent's config overrides. Merged onto core's baseline once, at start. */
76
+ protected abstract agentConfig(): CoreConfigOverrides;
77
+ /** This agent's installed capabilities. Conventionally its `./plugins.ts`. */
78
+ protected abstract agentPlugins(host: PluginHost<TEnv>): AgentPlugin[];
79
+ /**
80
+ * This agent's identity, with the installed plugins' capability blocks already
81
+ * rendered in. Core ships no prompt copy — this is yours to write.
82
+ */
83
+ protected abstract agentSoul(capabilities: string): string;
84
+ /**
85
+ * Everything that would otherwise be a module-level constant, resolved once
86
+ * per DO instance from this agent's config and its installed plugins.
87
+ *
88
+ * Resolving a registry at *import* time is the one thing the package split
89
+ * exists to prevent: it freezes the registry before `env` exists (which on
90
+ * Workers is always), defeats tree-shaking, and makes per-agent plugin
91
+ * selection impossible.
92
+ */
93
+ protected get runtime(): AgentRuntime;
94
+ /** The resolved config. */
95
+ protected get config(): CoreConfig;
96
+ /** The agent's database (drizzle + migrations), built once per DO instance. */
97
+ protected get db(): AgentDB;
98
+ /** The model runtime for this instance, built lazily over the `AI` binding. */
99
+ protected get models(): ModelRuntime;
100
+ /**
101
+ * What this agent's plugins are handed. Built from
102
+ * {@link resolvedModelIds} rather than `this.config`, which would be a cycle —
103
+ * building the runtime is what needs these.
104
+ */
105
+ protected pluginHost(): PluginHost<TEnv>;
106
+ /**
107
+ * The model settings a locally-declared recipe runs on, resolved *before* the
108
+ * runtime exists.
109
+ *
110
+ * Deliberately not `this.config` — that would be a cycle. `resolveConfig` is
111
+ * cheap and pure and fills in core's baseline, so this is the same result the
112
+ * runtime lands on; that matters because every recipe runs on exactly this
113
+ * pair — `RecipePolicy` carries it and `validateRecipe` stamps it on.
114
+ */
115
+ private resolvedModelIds;
116
+ onStart(): Promise<void>;
117
+ /**
118
+ * Cron handler: delete task rows older than 30 days. Runs Sunday 01:00 UTC.
119
+ *
120
+ * A plugin's own tables are its business — core's journal does not reach them,
121
+ * and neither does this sweep. A subclass with more durable state of its own
122
+ * overrides {@link cleanupAgentState}.
123
+ */
124
+ cleanupOldTasks(_payload: Record<string, never>, _schedule: Schedule): Promise<void>;
125
+ /** Extra durable state to age out alongside the task rows. Default: none. */
126
+ protected cleanupAgentState(): void;
127
+ /**
128
+ * The main agent's primary/fallback pair. With `metadata` it builds a fresh
129
+ * pair carrying that AI Gateway correlation tag (so a gateway log ties the call
130
+ * to its task and round); without it — the Session's own compaction model — it
131
+ * reuses a memoized default. A test `modelsOverride` always wins.
132
+ */
133
+ protected modelPair(metadata?: GatewayMetadata): ModelPair;
134
+ /**
135
+ * The one continuous Session for this caller (rebuilt from `this.sql` after
136
+ * eviction). Memoized — `identity` is constant for the DO's life, since the DO
137
+ * is keyed 1:1 by `identity.key`.
138
+ *
139
+ * `onMessagesDisplaced` is the whole integration for anything that wants the
140
+ * messages a compaction folds away: core performs the compaction, so core
141
+ * announces the loss, and the runtime fans it out to every plugin that asked.
142
+ */
143
+ getSession(identity: GatewayIdentity): SessionLike;
144
+ /** The caller key, which is present on every path that can reach a plugin. */
145
+ protected requireIdentityKey(): string;
146
+ /** The gateway callback channel for one turn. See {@link PushChannel}. */
147
+ protected push(context: TurnPushContext): PushChannel;
148
+ /**
149
+ * The per-request system-prompt suffix describing the verified caller.
150
+ *
151
+ * A rendering of a protocol fact rather than prompt copy, so core supplies one
152
+ * — see {@link callerContext}. Override it to name what a workspace id means in
153
+ * your deployment; do not use it to say who the *user* is, which this is not.
154
+ */
155
+ protected callerContext(identity: GatewayIdentity): string;
156
+ beginTask(input: {
157
+ messageId: string;
158
+ taskId: string;
159
+ contextId: string;
160
+ }): Promise<PlainTask>;
161
+ getTask(taskId: string): Promise<PlainTask | null>;
162
+ listTasks(query: TaskListQuery): Promise<{
163
+ tasks: PlainTask[];
164
+ totalSize: number;
165
+ }>;
166
+ /**
167
+ * Persist a Task, returning **whether the guarded write applied**.
168
+ *
169
+ * That boolean is the cancellation check, and a caller must key its callback on
170
+ * it: `AgentDB` refuses to write a terminal state over a `canceled` row and
171
+ * does that read and write in one synchronous pass inside the DO. Probing with
172
+ * {@link getTask} first and saving second leaves a window — between the two
173
+ * calls, and again between the save and the notify — in which a cancel lands
174
+ * and the gateway still receives a `completed` callback.
175
+ *
176
+ * A `canceled` state routes to {@link markCanceled} instead of a plain write,
177
+ * so a `tasks/cancel` arriving through the a2a-js TaskStore and one arriving
178
+ * through {@link cancelTask} converge on the same interruption path.
179
+ */
180
+ saveTask(task: Task): Promise<boolean>;
181
+ /**
182
+ * Move the Task to `working`. Returns `"canceled"` when the caller cancelled
183
+ * first — read it and stop, rather than probing with a separate
184
+ * {@link getTask}, which reopens the gap between asking and acting.
185
+ *
186
+ * Anything else is `"ok"`, including an unknown row and a row already `working`
187
+ * (a replayed step): only an actual cancellation stops the pipeline.
188
+ */
189
+ markWorking(taskId: string): Promise<"ok" | "canceled">;
190
+ cancelTask(taskId: string): Promise<PlainTask | null>;
191
+ /**
192
+ * The one place a Task becomes canceled: flip the row — terminal, so every
193
+ * non-canceled write is refused afterwards — then interrupt whatever is still
194
+ * running for it.
195
+ *
196
+ * `task` is supplied when the caller already built the canceled Task (the
197
+ * a2a-js cancel branch attaches its own status message); otherwise the row's
198
+ * own guarded flip produces it. Both paths are guarded against the same race:
199
+ * a task that already reached `completed`/`failed` refuses the write, and its
200
+ * verdict — not a `get` read straight after, which would return that
201
+ * unchanged terminal row and be mistaken for a successful cancellation — is
202
+ * what decides whether {@link onTaskCanceled} runs at all.
203
+ */
204
+ private markCanceled;
205
+ /**
206
+ * Interrupt work still in flight for a task that has just been canceled.
207
+ *
208
+ * Default: nothing, which is right for an agent whose turn is a single
209
+ * inference — the row is terminal and the next guarded write refuses. An agent
210
+ * with children overrides this to abort them.
211
+ *
212
+ * **Must be best-effort.** Cancellation has already been recorded by the time
213
+ * this runs, and it must not fail because cleanup did.
214
+ */
215
+ protected onTaskCanceled(_taskId: string): Promise<void>;
216
+ }
217
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/host/agent.ts"],"names":[],"mappings":"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"}