@loopingai/core 0.1.0 → 0.1.2
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.
- package/README.md +74 -1
- package/dist/agent/history.d.ts +3 -3
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/model.d.ts +0 -7
- package/dist/agent/model.d.ts.map +1 -1
- package/dist/agent/model.js +0 -13
- package/dist/agent/model.js.map +1 -1
- package/dist/agent/session.d.ts +21 -11
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +13 -10
- package/dist/agent/session.js.map +1 -1
- package/dist/config.d.ts +0 -17
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -6
- package/dist/config.js.map +1 -1
- package/dist/contract/index.d.ts +1 -1
- package/dist/contract/index.d.ts.map +1 -1
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/plugin.d.ts +105 -3
- package/dist/contract/plugin.d.ts.map +1 -1
- package/dist/contract/plugin.js.map +1 -1
- package/dist/contract/validation.d.ts +6 -4
- package/dist/contract/validation.d.ts.map +1 -1
- package/dist/contract/validation.js.map +1 -1
- package/dist/db/db.d.ts +32 -14
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js.map +1 -1
- package/dist/env.d.ts +1 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/index.d.ts +31 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +63 -2
- package/dist/runtime/index.js.map +1 -1
- package/dist/subagent/index.d.ts +3 -3
- package/dist/subagent/index.js +3 -3
- package/dist/subagent/workspace.d.ts +21 -0
- package/dist/subagent/workspace.d.ts.map +1 -1
- package/dist/subagent/workspace.js +80 -5
- package/dist/subagent/workspace.js.map +1 -1
- package/dist/subtasks/catalog.d.ts +5 -4
- package/dist/subtasks/catalog.d.ts.map +1 -1
- package/dist/subtasks/catalog.js +5 -4
- package/dist/subtasks/catalog.js.map +1 -1
- package/dist/subtasks/delegate.d.ts +2 -1
- package/dist/subtasks/delegate.d.ts.map +1 -1
- package/dist/subtasks/delegate.js +2 -1
- package/dist/subtasks/delegate.js.map +1 -1
- package/dist/testing/fake-session.d.ts +1 -1
- package/dist/testing/fake-session.d.ts.map +1 -1
- package/dist/testing/fake-session.js +1 -1
- package/dist/testing/fake-session.js.map +1 -1
- package/dist/testing/node.d.ts +23 -0
- package/dist/testing/node.d.ts.map +1 -1
- package/dist/testing/node.js +23 -0
- package/dist/testing/node.js.map +1 -1
- package/dist/testing/vcr-spec.d.ts +4 -4
- package/dist/testing/vcr-spec.d.ts.map +1 -1
- package/dist/testing/vcr-spec.js +32 -11
- package/dist/testing/vcr-spec.js.map +1 -1
- package/package.json +8 -4
|
@@ -31,10 +31,12 @@ export interface RecipePolicy {
|
|
|
31
31
|
* Tool-family keys the runtime recognizes — derived from the installed
|
|
32
32
|
* plugins, never hardcoded.
|
|
33
33
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* A main-agent-only tool is never a valid family — the Session's
|
|
35
|
+
* `set_context`, or anything a plugin offers only through `mainAgentTools`
|
|
36
|
+
* (an episodic-memory search, say). A subagent has no Session or durable
|
|
37
|
+
* memory to reach, and such a tool's absence from every plugin's
|
|
38
|
+
* `toolFamilies` makes it structurally impossible to enable through recipe
|
|
39
|
+
* data.
|
|
38
40
|
*/
|
|
39
41
|
knownToolFamilies: ReadonlySet<string>;
|
|
40
42
|
/** The baseline a recipe's declared `limits` merge over. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/contract/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,6EAA6E;IAC7E,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;IAC/B
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/contract/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,6EAA6E;IAC7E,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;;OAUG;IACH,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,4DAA4D;IAC5D,cAAc,EAAE,WAAW,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAC5B,QAAQ,EAAE,WAAW,GACpB,WAAW,CAOb;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,GACnB,eAAe,CA+BjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/contract/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/contract/validation.ts"],"names":[],"mappings":"AA8CA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,MAA4B,EAC5B,QAAqB;IAErB,MAAM,WAAW,GAAG,CAAC,CAAqB,EAAE,QAAgB,EAAU,EAAE,CACtE,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvE,OAAO;QACL,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC1D,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAsB,EACtB,MAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAqB,CAC7B,WAAW,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,eAAe,CAC1D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,qBAAqB,CAC7B,WAAW,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,eAAe,CAC1D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,qBAAqB,CAC7B,WAAW,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,gCAAgC;YACxE,QAAQ,MAAM,CAAC,aAAa,gCAAgC,CAC/D,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CACvE,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CACrC,CAAC;IACF,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;YAC9D,CAAC,CAAC,MAAM,CAAC,cAAc;YACvB,CAAC,CAAC,MAAM,CAAC,qBAAqB;QAChC,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC;YAChE,CAAC,CAAC,MAAM,CAAC,eAAe;YACxB,CAAC,CAAC,MAAM,CAAC,sBAAsB;QACjC,YAAY;QACZ,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;KAC5D,CAAC;AACJ,CAAC"}
|
package/dist/db/db.d.ts
CHANGED
|
@@ -4,23 +4,37 @@ export type DB = DrizzleSqliteDODatabase<typeof schema>;
|
|
|
4
4
|
/**
|
|
5
5
|
* A table owner outside core's migration journal.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* diff at all.
|
|
7
|
+
* What a plugin cannot share is the **migrator**. `drizzle-orm/durable-sqlite/
|
|
8
|
+
* migrator` keeps one flat integer journal and one global
|
|
9
|
+
* `__drizzle_migrations` table, and two independently-versioned npm packages
|
|
10
|
+
* cannot share that index space — not hypothetically: the two predecessor
|
|
11
|
+
* agents, both consuming the same `notify_tasks` module, had already forked the
|
|
12
|
+
* journal at index 1 (`0001_unusual_nova` vs `0001_great_goliath`). Worse,
|
|
13
|
+
* `drizzle-kit generate` diffs against a snapshot in one output directory, so a
|
|
14
|
+
* plugin shipping from its own repo cannot produce a correct diff at all.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* **The query builder is a different thing entirely, and a plugin should use
|
|
17
|
+
* it.** `drizzle(storage, { schema })` is a typed wrapper over the same
|
|
18
|
+
* `DurableObjectStorage`; it holds no journal, no connection, and no state that
|
|
19
|
+
* a second handle could disturb. So the rule is narrow — *never import the
|
|
20
|
+
* migrator* — rather than "no drizzle".
|
|
21
|
+
*
|
|
22
|
+
* A plugin therefore does three things: declares its tables with `sqliteTable`
|
|
23
|
+
* as usual, emits idempotent DDL here, and queries through its own drizzle
|
|
24
|
+
* handle. Version bookkeeping lives in the {@link PLUGIN_MIGRATIONS_TABLE} row
|
|
25
|
+
* this class manages for it. Only the DDL is hand-written, and that pattern is
|
|
26
|
+
* not novel here — it is what the subagent facet already does for its own two
|
|
27
|
+
* tables.
|
|
21
28
|
*
|
|
22
29
|
* ```ts
|
|
23
|
-
*
|
|
30
|
+
* // schema.ts — an ordinary drizzle table, under the plugin's own prefix.
|
|
31
|
+
* export const arcScorecards = sqliteTable("arc_scorecards", {
|
|
32
|
+
* cardId: text("card_id").primaryKey(),
|
|
33
|
+
* lastUsedAt: integer("last_used_at").notNull()
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* // The DDL half: idempotent, re-run on every hibernation wake-up.
|
|
37
|
+
* const store: PluginStore = {
|
|
24
38
|
* plugin: "arc-agi",
|
|
25
39
|
* version: 2,
|
|
26
40
|
* ensureTables(sql, from) {
|
|
@@ -28,6 +42,10 @@ export type DB = DrizzleSqliteDODatabase<typeof schema>;
|
|
|
28
42
|
* if (from < 2) sql.exec(`ALTER TABLE arc_scorecards ADD COLUMN …`);
|
|
29
43
|
* }
|
|
30
44
|
* };
|
|
45
|
+
*
|
|
46
|
+
* // The query half: drizzle, over the plugin's own handle.
|
|
47
|
+
* const db = drizzle(storage, { schema: { arcScorecards } });
|
|
48
|
+
* db.select().from(arcScorecards).where(gte(arcScorecards.lastUsedAt, since));
|
|
31
49
|
* ```
|
|
32
50
|
*/
|
|
33
51
|
export interface PluginStore {
|
package/dist/db/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAKtC,MAAM,MAAM,EAAE,GAAG,uBAAuB,CAAC,OAAO,MAAM,CAAC,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAKtC,MAAM,MAAM,EAAE,GAAG,uBAAuB,CAAC,OAAO,MAAM,CAAC,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACnD;AAED,iGAAiG;AACjG,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,OAAO;IAOhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAC,CAA+B;IAC9C,OAAO,CAAC,SAAS,CAAC,CAAkC;gBAGjC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc;IAQ1C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,IAAI,KAAK;;;;;;;;;;;;;;;MAER;IAED,IAAI,QAAQ;;;;;;;;;;;;;;;MAIX;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;CAsDpB"}
|
package/dist/db/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAER,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* insists on; everything else is passed in. `createA2AWorker` lets a consumer
|
|
13
13
|
* rename even these — see {@link file://./worker/index.ts}.
|
|
14
14
|
*/
|
|
15
|
-
/** Workers AI, backing
|
|
15
|
+
/** Workers AI, backing the chat loop (and whatever a plugin runs on it). */
|
|
16
16
|
export interface AiEnv {
|
|
17
17
|
AI: Ai;
|
|
18
18
|
}
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,EAAE,CAAC;CACR;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,kEAAkE;AAClE,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBzD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
* production bundle.
|
|
10
10
|
*/
|
|
11
11
|
export { createAgentRuntime, RuntimeSetupError, buildRecipeTools, collectToolFamilies, type AgentRuntime, type CreateAgentRuntimeOptions } from "./runtime/index.js";
|
|
12
|
-
export { PLUGIN_CONTRACT_VERSION, definePlugin, type AgentPlugin, type EmitProgress, type EnrichResultContext, type PluginRequirements, type RecipeToolSet, type ResolveRuntimeContext, type ToolFamilyBuilder, type ToolFamilyContext } from "./contract/plugin.js";
|
|
12
|
+
export { PLUGIN_CONTRACT_VERSION, definePlugin, type AgentPlugin, type EmitProgress, type EnrichResultContext, type MainAgentToolContext, type PluginRequirements, type RecipeToolSet, type ResolveRuntimeContext, type ToolFamilyBuilder, type ToolFamilyContext, type TurnGateContext } from "./contract/plugin.js";
|
|
13
13
|
export type { DelegationNames, RecipeLimits, ResolvedRecipe, SubtaskParams, SubtaskParamsSchema, SubtaskParamsShape, SubtaskTypeSpec, ValidatedRecipe } from "./contract/recipe.js";
|
|
14
14
|
export { RecipeValidationError, resolveLimits, validateRecipe, type RecipePolicy } from "./contract/validation.js";
|
|
15
|
-
export { ConfigError, DEFAULT_CORE_CONFIG, resolveConfig, type AgentLimits, type CoreConfig, type CoreConfigOverrides, type ModelConfig, type
|
|
15
|
+
export { ConfigError, DEFAULT_CORE_CONFIG, resolveConfig, type AgentLimits, type CoreConfig, type CoreConfigOverrides, type ModelConfig, type SessionConfig } from "./config.js";
|
|
16
16
|
export { parseGatewayOrigins, type A2ASecretsEnv, type AiEnv, type CoreEnv } from "./env.js";
|
|
17
17
|
export { CHUNK_SOFT_MS, MAX_CHUNKS_PER_BRANCH, STEP_TIMEOUT_MS, STEPS_PER_INSTANCE } from "./platform.js";
|
|
18
18
|
export type { PluginStore } from "./db/db.js";
|
|
19
|
-
export { makeWorkspaceHandle, WorkspaceLimitError, WORKSPACE_MAX_FILES, WORKSPACE_MAX_FILE_BYTES, type WorkspaceBacking, type WorkspaceEntry, type WorkspaceHandle } from "./subagent/workspace.js";
|
|
19
|
+
export { makeWorkspaceHandle, memoryWorkspaceBacking, WorkspaceLimitError, WORKSPACE_MAX_FILES, WORKSPACE_MAX_FILE_BYTES, type WorkspaceBacking, type WorkspaceEntry, type WorkspaceHandle } from "./subagent/workspace.js";
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,OAAO,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,5 +14,5 @@ export { RecipeValidationError, resolveLimits, validateRecipe } from "./contract
|
|
|
14
14
|
export { ConfigError, DEFAULT_CORE_CONFIG, resolveConfig } from "./config.js";
|
|
15
15
|
export { parseGatewayOrigins } from "./env.js";
|
|
16
16
|
export { CHUNK_SOFT_MS, MAX_CHUNKS_PER_BRANCH, STEP_TIMEOUT_MS, STEPS_PER_INSTANCE } from "./platform.js";
|
|
17
|
-
export { makeWorkspaceHandle, WorkspaceLimitError, WORKSPACE_MAX_FILES, WORKSPACE_MAX_FILE_BYTES } from "./subagent/workspace.js";
|
|
17
|
+
export { makeWorkspaceHandle, memoryWorkspaceBacking, WorkspaceLimitError, WORKSPACE_MAX_FILES, WORKSPACE_MAX_FILE_BYTES } from "./subagent/workspace.js";
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,YAAY,EAWb,MAAM,sBAAsB,CAAC;AAa9B,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,aAAa,EAMd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EAIpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EAIzB,MAAM,yBAAyB,CAAC"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ToolSet } from "ai";
|
|
2
|
+
import type { SessionMessage } from "agents/experimental/memory/session";
|
|
2
3
|
import { type CoreConfig, type CoreConfigOverrides } from "../config.js";
|
|
3
|
-
import { type AgentPlugin, type EnrichResultContext, type ResolveRuntimeContext, type ToolFamilyBuilder } from "../contract/plugin.js";
|
|
4
|
+
import { type AgentPlugin, type EnrichResultContext, type MainAgentToolContext, type ResolveRuntimeContext, type ToolFamilyBuilder, type TurnGateContext } from "../contract/plugin.js";
|
|
4
5
|
import type { PluginStore } from "../db/db.js";
|
|
6
|
+
import { type WorkspaceBacking } from "../subagent/workspace.js";
|
|
5
7
|
import type { RecipePolicy } from "../contract/validation.js";
|
|
6
8
|
import { type SubtaskTypeRegistry } from "../subtasks/subtask-types.js";
|
|
7
9
|
import type { RecipeExecutionResult, SubtaskRuntime } from "../subtasks/types.js";
|
|
@@ -45,15 +47,42 @@ export interface AgentRuntime {
|
|
|
45
47
|
secrets: string[];
|
|
46
48
|
bindings: string[];
|
|
47
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* The subagent workspace backend — the one plugin that declared it, or an
|
|
52
|
+
* in-memory fallback when none did. Always defined, so a host writes
|
|
53
|
+
* `workspaceBacking: runtime.workspaceBacking` into its `SubagentRuntime`
|
|
54
|
+
* unconditionally.
|
|
55
|
+
*/
|
|
56
|
+
workspaceBacking: (sql: SqlStorage, name: () => string | undefined) => WorkspaceBacking;
|
|
48
57
|
/** The plugin that declared a subtask type, or null. */
|
|
49
58
|
pluginForType(type: string): AgentPlugin | null;
|
|
50
59
|
/** Tools the installed plugins offer the *main* agent, merged. */
|
|
51
|
-
mainAgentTools(): ToolSet
|
|
60
|
+
mainAgentTools(ctx: MainAgentToolContext): Promise<ToolSet>;
|
|
52
61
|
/**
|
|
53
62
|
* Every plugin's `capability` block, for the main agent's soul. Returns `""`
|
|
54
63
|
* when none declares one, so a call site can append unconditionally.
|
|
55
64
|
*/
|
|
56
65
|
renderCapabilities(): string;
|
|
66
|
+
/**
|
|
67
|
+
* Ask every plugin declaring {@link AgentPlugin.shouldHandleTurn} whether this
|
|
68
|
+
* turn should run. `true` when none declares one, and `false` if any single
|
|
69
|
+
* gate declines.
|
|
70
|
+
*
|
|
71
|
+
* Never rejects: a gate that fails is logged against its plugin key and
|
|
72
|
+
* counted as `true`, because the failure mode of a broken gate must be a noisy
|
|
73
|
+
* agent, never a silent one.
|
|
74
|
+
*/
|
|
75
|
+
shouldHandleTurn(ctx: TurnGateContext): Promise<boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Announce the messages a compaction is folding into a summary to every plugin
|
|
78
|
+
* declaring {@link AgentPlugin.onMessagesDisplaced}. Pass it straight to
|
|
79
|
+
* `buildAgentSession`'s option of the same name — it reads no `this`, so the
|
|
80
|
+
* bare reference works.
|
|
81
|
+
*
|
|
82
|
+
* Never rejects: listeners are fanned out with `Promise.allSettled` and each
|
|
83
|
+
* rejection is logged against the plugin key that caused it.
|
|
84
|
+
*/
|
|
85
|
+
onMessagesDisplaced(messages: SessionMessage[]): Promise<void>;
|
|
57
86
|
/**
|
|
58
87
|
* Resolve the session state an execution needs, by asking the plugin that owns
|
|
59
88
|
* its type. Returns `{}` for a type whose plugin declares no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveConfig } from "../config.js";
|
|
2
2
|
import { PLUGIN_CONTRACT_VERSION } from "../contract/plugin.js";
|
|
3
|
+
import { memoryWorkspaceBacking } from "../subagent/workspace.js";
|
|
3
4
|
import { makeSubtaskTypes } from "../subtasks/subtask-types.js";
|
|
4
5
|
import { collectToolFamilies } from "./tool-families.js";
|
|
5
6
|
export { buildRecipeTools, collectToolFamilies } from "./tool-families.js";
|
|
@@ -40,6 +41,17 @@ export function createAgentRuntime(options) {
|
|
|
40
41
|
typeOwner.set(plugin.subtaskType.key, plugin);
|
|
41
42
|
}
|
|
42
43
|
const stores = plugins.flatMap((p) => (p.store ? [p.store] : []));
|
|
44
|
+
const displacementListeners = plugins.flatMap((p) => p.onMessagesDisplaced
|
|
45
|
+
? [{ key: p.key, notify: p.onMessagesDisplaced.bind(p) }]
|
|
46
|
+
: []);
|
|
47
|
+
const turnGates = plugins.flatMap((p) => p.shouldHandleTurn ? [{ key: p.key, gate: p.shouldHandleTurn.bind(p) }] : []);
|
|
48
|
+
// At most one backend: two would mean two answers to "where did that file go".
|
|
49
|
+
const backings = plugins.flatMap((p) => p.workspaceBacking ? [{ key: p.key, make: p.workspaceBacking.bind(p) }] : []);
|
|
50
|
+
if (backings.length > 1) {
|
|
51
|
+
throw new RuntimeSetupError(`plugins ${backings.map((b) => `"${b.key}"`).join(" and ")} both declare a ` +
|
|
52
|
+
"workspaceBacking — an execution has one workspace, so only one plugin may back it");
|
|
53
|
+
}
|
|
54
|
+
const workspaceBacking = backings[0]?.make ?? memoryWorkspaceBacking;
|
|
43
55
|
const secrets = [
|
|
44
56
|
...new Set(plugins.flatMap((p) => [...(p.requires?.secrets ?? [])]))
|
|
45
57
|
];
|
|
@@ -84,12 +96,16 @@ export function createAgentRuntime(options) {
|
|
|
84
96
|
policy,
|
|
85
97
|
stores,
|
|
86
98
|
requirements: { secrets, bindings },
|
|
99
|
+
workspaceBacking,
|
|
87
100
|
pluginForType,
|
|
88
|
-
mainAgentTools() {
|
|
101
|
+
async mainAgentTools(ctx) {
|
|
89
102
|
const tools = {};
|
|
103
|
+
// Sequential rather than fanned out: this is a handful of plugins reading
|
|
104
|
+
// one session, and merging in declaration order is what makes a name
|
|
105
|
+
// collision resolve the same way on every call.
|
|
90
106
|
for (const plugin of plugins) {
|
|
91
107
|
if (plugin.mainAgentTools)
|
|
92
|
-
Object.assign(tools, plugin.mainAgentTools());
|
|
108
|
+
Object.assign(tools, await plugin.mainAgentTools(ctx));
|
|
93
109
|
}
|
|
94
110
|
return tools;
|
|
95
111
|
},
|
|
@@ -101,6 +117,51 @@ export function createAgentRuntime(options) {
|
|
|
101
117
|
}
|
|
102
118
|
return blocks.join("\n\n");
|
|
103
119
|
},
|
|
120
|
+
async shouldHandleTurn(ctx) {
|
|
121
|
+
if (turnGates.length === 0)
|
|
122
|
+
return true;
|
|
123
|
+
// Same `allSettled` + `async`-wrapped-callback discipline as
|
|
124
|
+
// `onMessagesDisplaced` below, and for the same two reasons: every gate is
|
|
125
|
+
// consulted even when one throws, and a gate that throws *synchronously*
|
|
126
|
+
// (reading a binding before its first await) is caught rather than
|
|
127
|
+
// escaping past the aggregation.
|
|
128
|
+
//
|
|
129
|
+
// A rejection resolves to `true`. That is not leniency — it is the only
|
|
130
|
+
// safe default here. A wrong reply is noise the user sees and ignores; a
|
|
131
|
+
// wrong silence is invisible to the person who needed an answer, so a
|
|
132
|
+
// broken gate must degrade to "run the turn" and never to a mute agent.
|
|
133
|
+
const results = await Promise.allSettled(turnGates.map(async (g) => g.gate(ctx)));
|
|
134
|
+
return results.every((result, i) => {
|
|
135
|
+
if (result.status === "rejected") {
|
|
136
|
+
console.warn(`[runtime] plugin "${turnGates[i].key}" turn gate failed, handling the turn`, result.reason);
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
return result.value;
|
|
140
|
+
});
|
|
141
|
+
},
|
|
142
|
+
async onMessagesDisplaced(messages) {
|
|
143
|
+
// allSettled, not all: `all` rejects at the first listener to throw and
|
|
144
|
+
// stops awaiting the rest, so every other plugin's write is still in
|
|
145
|
+
// flight when this returns — and on a Durable Object the isolate can be
|
|
146
|
+
// evicted before it lands. One plugin's outage would silently cost the
|
|
147
|
+
// others their writes. Each rejection is logged against the key that
|
|
148
|
+
// caused it; an anonymous aggregate is not debuggable across plugins.
|
|
149
|
+
//
|
|
150
|
+
// The `async` on the map callback is load-bearing, not style. A listener
|
|
151
|
+
// is typed `(messages) => Promise<void>`, which does not oblige it to be
|
|
152
|
+
// `async` — one that reads a binding before starting its async work can
|
|
153
|
+
// throw *synchronously*, during this very `.map()`. Without the `async`
|
|
154
|
+
// that throw escapes before `Promise.allSettled` exists to catch it: this
|
|
155
|
+
// method rejects despite documenting that it never does, and `.map()`
|
|
156
|
+
// aborts mid-iteration so every listener after the thrower is never even
|
|
157
|
+
// invoked — strictly worse than the `Promise.all` failure mode above.
|
|
158
|
+
const results = await Promise.allSettled(displacementListeners.map(async (l) => l.notify(messages)));
|
|
159
|
+
results.forEach((result, i) => {
|
|
160
|
+
if (result.status === "rejected") {
|
|
161
|
+
console.error(`[runtime] plugin "${displacementListeners[i].key}" failed on displaced messages`, result.reason);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
},
|
|
104
165
|
async resolveRuntime(ctx) {
|
|
105
166
|
const plugin = pluginForType(ctx.type);
|
|
106
167
|
if (!plugin?.resolveRuntime)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EAOxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,gBAAgB,EAEjB,MAAM,8BAA8B,CAAC;AAKtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAyG3E;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAkC;IAElC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,6EAA6E;IAE7E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,iBAAiB,CACzB,yBAAyB,MAAM,CAAC,GAAG,oCAAoC,CACxE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE9B,IAAI,MAAM,CAAC,eAAe,KAAK,uBAAuB,EAAE,CAAC;YACvD,MAAM,IAAI,iBAAiB,CACzB,WAAW,MAAM,CAAC,GAAG,wCAAwC,MAAM,CAAC,eAAe,IAAI;gBACrF,oCAAoC,uBAAuB,IAAI;gBAC/D,6EAA6E;gBAC7E,2CAA2C,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6EAA6E;IAE7E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,WAAW;YAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElE,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,mBAAmB;QACnB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,CAAC,CAAC,EAAE,CACP,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAC7E,CAAC;IAEF,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAC7E,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,iBAAiB,CACzB,WAAW,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB;YAC1E,mFAAmF,CACtF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,sBAAsB,CAAC;IAErE,MAAM,OAAO,GAAG;QACd,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KACrE,CAAC;IACF,MAAM,QAAQ,GAAG;QACf,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KACtE,CAAC;IAEF,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI;gBACjB,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;gBACnC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;aACrC,EAAE,CAAC;gBACF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,kBAAkB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,iBAAiB,CACzB,gCAAgC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpD,iFAAiF;gBACjF,0CAA0C,CAC7C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAiB;QAC3B,cAAc,EAAE,IAAI,GAAG,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,WAAW;YACxB,MAAM,CAAC,KAAK,CAAC,mBAAmB;SACjC,CAAC;QACF,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;QAC/C,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB;QACxD,iBAAiB,EAAE,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC/C,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAsB,EAAE,CACzD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAE9B,OAAO;QACL,MAAM;QACN,OAAO;QACP,KAAK;QACL,YAAY;QACZ,MAAM;QACN,MAAM;QACN,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QACnC,gBAAgB;QAEhB,aAAa;QAEb,KAAK,CAAC,cAAc,CAAC,GAAyB;YAC5C,MAAM,KAAK,GAAY,EAAE,CAAC;YAC1B,0EAA0E;YAC1E,qEAAqE;YACrE,gDAAgD;YAChD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,cAAc;oBACvB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kBAAkB;YAChB,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,UAAU;oBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,GAAoB;YACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxC,6DAA6D;YAC7D,2EAA2E;YAC3E,yEAAyE;YACzE,mEAAmE;YACnE,iCAAiC;YACjC,EAAE;YACF,wEAAwE;YACxE,yEAAyE;YACzE,sEAAsE;YACtE,wEAAwE;YACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxC,CAAC;YACF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,OAAO,CAAC,IAAI,CACV,qBAAqB,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,uCAAuC,EAC5E,MAAM,CAAC,MAAM,CACd,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,mBAAmB,CAAC,QAA0B;YAClD,wEAAwE;YACxE,qEAAqE;YACrE,wEAAwE;YACxE,uEAAuE;YACvE,qEAAqE;YACrE,sEAAsE;YACtE,EAAE;YACF,yEAAyE;YACzE,yEAAyE;YACzE,wEAAwE;YACxE,wEAAwE;YACxE,0EAA0E;YAC1E,sEAAsE;YACtE,yEAAyE;YACzE,sEAAsE;YACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC3D,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,OAAO,CAAC,KAAK,CACX,qBAAqB,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,gCAAgC,EACjF,MAAM,CAAC,MAAM,CACd,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,GAA0B;YAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,cAAc;gBAAE,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAmB,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,YAAY,CAChB,GAAwB,EACxB,MAA6B;YAE7B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,YAAY;gBAAE,OAAO,MAAM,CAAC;YACzC,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAA0B;YACtC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/subagent/index.d.ts
CHANGED
|
@@ -53,9 +53,9 @@ export declare function subagentName(taskId: string, subtaskId: SubtaskId): stri
|
|
|
53
53
|
* worker entry (`src/index.ts`) so `ctx.exports` can resolve it by class name.
|
|
54
54
|
*
|
|
55
55
|
* It never constructs a Session, never reads parent history beyond the
|
|
56
|
-
* references supplied on its request, never
|
|
57
|
-
*
|
|
58
|
-
*
|
|
56
|
+
* references supplied on its request, never reaches durable memory, and never
|
|
57
|
+
* resolves a Recipe itself — it defensively re-validates the resolved Recipe the
|
|
58
|
+
* parent sends and accepts no configuration beyond it.
|
|
59
59
|
*
|
|
60
60
|
* Retry safety: the child persists at most one terminal result in its own
|
|
61
61
|
* SQLite, keyed by the deterministic request fingerprint, plus the rolling
|
package/dist/subagent/index.js
CHANGED
|
@@ -43,9 +43,9 @@ const cachedResultSchema = z.discriminatedUnion("status", [
|
|
|
43
43
|
* worker entry (`src/index.ts`) so `ctx.exports` can resolve it by class name.
|
|
44
44
|
*
|
|
45
45
|
* It never constructs a Session, never reads parent history beyond the
|
|
46
|
-
* references supplied on its request, never
|
|
47
|
-
*
|
|
48
|
-
*
|
|
46
|
+
* references supplied on its request, never reaches durable memory, and never
|
|
47
|
+
* resolves a Recipe itself — it defensively re-validates the resolved Recipe the
|
|
48
|
+
* parent sends and accepts no configuration beyond it.
|
|
49
49
|
*
|
|
50
50
|
* Retry safety: the child persists at most one terminal result in its own
|
|
51
51
|
* SQLite, keyed by the deterministic request fingerprint, plus the rolling
|
|
@@ -48,6 +48,27 @@ export interface WorkspaceBacking {
|
|
|
48
48
|
fileCount: number;
|
|
49
49
|
}>;
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* An in-memory {@link WorkspaceBacking} — the fallback when no installed plugin
|
|
53
|
+
* declares one.
|
|
54
|
+
*
|
|
55
|
+
* Deliberately **not durable**, and that is the honest behaviour rather than a
|
|
56
|
+
* shortcut: a durable stand-in would have to invent a storage layout that a real
|
|
57
|
+
* backend would then have to migrate away from. An agent that delegates file
|
|
58
|
+
* work installs a backend; one that does not never writes a file, and pays
|
|
59
|
+
* nothing for the option. What this buys is that `createAgentRuntime` composes
|
|
60
|
+
* without a workspace plugin at all, so `SubagentRuntime.workspaceBacking` can
|
|
61
|
+
* stay required and a host never writes a null check.
|
|
62
|
+
*
|
|
63
|
+
* Scoped per call, so each execution gets its own map, exactly as a facet's own
|
|
64
|
+
* SQLite would give it its own tables. Contents are lost on isolate eviction —
|
|
65
|
+
* the resumable runner treats a lost workspace as a resumable state everywhere
|
|
66
|
+
* it matters.
|
|
67
|
+
*
|
|
68
|
+
* Signature matches {@link AgentPlugin.workspaceBacking}; both arguments are
|
|
69
|
+
* ignored.
|
|
70
|
+
*/
|
|
71
|
+
export declare function memoryWorkspaceBacking(_sql?: SqlStorage, _name?: () => string | undefined): WorkspaceBacking;
|
|
51
72
|
/** Per-file byte ceiling — safely under the 2 MB Durable Object SQLite row limit. */
|
|
52
73
|
export declare const WORKSPACE_MAX_FILE_BYTES: number;
|
|
53
74
|
/** Max number of files in one workspace — a cheap guard against runaway writes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/subagent/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,+EAA+E;IAC/E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,sDAAsD;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,yDAAyD;IACzD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,8EAA8E;IAC9E,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9C,iFAAiF;IACjF,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7C,yDAAyD;IACzD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAC1D,gBAAgB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,QAAa,CAAC;AACnD,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/subagent/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,+EAA+E;IAC/E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,sDAAsD;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,yDAAyD;IACzD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,8EAA8E;IAC9E,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9C,iFAAiF;IACjF,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7C,yDAAyD;IACzD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAC1D,gBAAgB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,CAAC,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAC/B,gBAAgB,CA2ClB;AAOD,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,QAAa,CAAC;AACnD,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,eAAe,CAsDzE"}
|
|
@@ -1,3 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An in-memory {@link WorkspaceBacking} — the fallback when no installed plugin
|
|
3
|
+
* declares one.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately **not durable**, and that is the honest behaviour rather than a
|
|
6
|
+
* shortcut: a durable stand-in would have to invent a storage layout that a real
|
|
7
|
+
* backend would then have to migrate away from. An agent that delegates file
|
|
8
|
+
* work installs a backend; one that does not never writes a file, and pays
|
|
9
|
+
* nothing for the option. What this buys is that `createAgentRuntime` composes
|
|
10
|
+
* without a workspace plugin at all, so `SubagentRuntime.workspaceBacking` can
|
|
11
|
+
* stay required and a host never writes a null check.
|
|
12
|
+
*
|
|
13
|
+
* Scoped per call, so each execution gets its own map, exactly as a facet's own
|
|
14
|
+
* SQLite would give it its own tables. Contents are lost on isolate eviction —
|
|
15
|
+
* the resumable runner treats a lost workspace as a resumable state everywhere
|
|
16
|
+
* it matters.
|
|
17
|
+
*
|
|
18
|
+
* Signature matches {@link AgentPlugin.workspaceBacking}; both arguments are
|
|
19
|
+
* ignored.
|
|
20
|
+
*/
|
|
21
|
+
export function memoryWorkspaceBacking(_sql, _name) {
|
|
22
|
+
const files = new Map();
|
|
23
|
+
/** Immediate children of `dir`, as `readDir` reports them. */
|
|
24
|
+
const entriesUnder = (dir) => {
|
|
25
|
+
const prefix = dir === "" ? "" : `${dir}/`;
|
|
26
|
+
const seen = new Map();
|
|
27
|
+
for (const [path, content] of files) {
|
|
28
|
+
if (!path.startsWith(prefix))
|
|
29
|
+
continue;
|
|
30
|
+
const rest = path.slice(prefix.length);
|
|
31
|
+
if (rest === "")
|
|
32
|
+
continue;
|
|
33
|
+
const slash = rest.indexOf("/");
|
|
34
|
+
if (slash === -1) {
|
|
35
|
+
seen.set(path, {
|
|
36
|
+
path,
|
|
37
|
+
type: "file",
|
|
38
|
+
size: new TextEncoder().encode(content).length
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// A directory exists only because something under it does, so report it
|
|
43
|
+
// once and say nothing about its size.
|
|
44
|
+
const child = `${prefix}${rest.slice(0, slash)}`;
|
|
45
|
+
seen.set(child, { path: child, type: "directory", size: 0 });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return [...seen.values()];
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
readFile: async (path) => files.get(normalize(path)) ?? null,
|
|
52
|
+
writeFile: async (path, content) => {
|
|
53
|
+
files.set(normalize(path), content);
|
|
54
|
+
},
|
|
55
|
+
// Directories are implied by their contents, so a path with anything under
|
|
56
|
+
// it exists even though nothing ever created it.
|
|
57
|
+
exists: async (path) => {
|
|
58
|
+
const key = normalize(path);
|
|
59
|
+
return files.has(key) || entriesUnder(key).length > 0;
|
|
60
|
+
},
|
|
61
|
+
deleteFile: async (path) => files.delete(normalize(path)),
|
|
62
|
+
readDir: async (dir) => entriesUnder(normalize(dir ?? "")),
|
|
63
|
+
getWorkspaceInfo: async () => ({ fileCount: files.size })
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Strip the leading/trailing slashes that would otherwise key two paths apart. */
|
|
67
|
+
function normalize(path) {
|
|
68
|
+
return path.replace(/^\/+|\/+$/g, "");
|
|
69
|
+
}
|
|
1
70
|
/** Per-file byte ceiling — safely under the 2 MB Durable Object SQLite row limit. */
|
|
2
71
|
export const WORKSPACE_MAX_FILE_BYTES = 512 * 1024;
|
|
3
72
|
/** Max number of files in one workspace — a cheap guard against runaway writes. */
|
|
@@ -23,11 +92,17 @@ export function makeWorkspaceHandle(ws) {
|
|
|
23
92
|
if (bytes > WORKSPACE_MAX_FILE_BYTES) {
|
|
24
93
|
throw new WorkspaceLimitError(`file "${path}" is ${bytes} bytes, over the ${WORKSPACE_MAX_FILE_BYTES}-byte limit`);
|
|
25
94
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
95
|
+
// The cap bounds how many files exist, so it may only refuse a write that
|
|
96
|
+
// *creates* one. `exists` is the wrong question: it is true for a
|
|
97
|
+
// directory too (filesystem semantics, which every real backing has), so
|
|
98
|
+
// at the cap a write to `notes` — with `notes/a.txt` present — read as an
|
|
99
|
+
// overwrite and added a 201st file. `readFile` returning null is the only
|
|
100
|
+
// honest test for "there is no file here", and it runs solely when the
|
|
101
|
+
// workspace is already full, so the ordinary write still costs one call.
|
|
102
|
+
const { fileCount } = await ws.getWorkspaceInfo();
|
|
103
|
+
if (fileCount >= WORKSPACE_MAX_FILES &&
|
|
104
|
+
(await ws.readFile(path)) === null) {
|
|
105
|
+
throw new WorkspaceLimitError(`workspace already holds ${fileCount} files (max ${WORKSPACE_MAX_FILES})`);
|
|
31
106
|
}
|
|
32
107
|
await ws.writeFile(path, content);
|
|
33
108
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/subagent/workspace.ts"],"names":[],"mappings":"AAmDA,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,GAAG,IAAI,CAAC;AACnD,mFAAmF;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAoB;IACtD,MAAM,UAAU,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7E,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAEjC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,KAAK,GAAG,wBAAwB,EAAE,CAAC;gBACrC,MAAM,IAAI,mBAAmB,CAC3B,SAAS,IAAI,QAAQ,KAAK,oBAAoB,wBAAwB,aAAa,CACpF,CAAC;YACJ,CAAC;YACD,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/subagent/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,10 +25,11 @@ export interface ReferenceCatalogEntry extends SubtaskReference {
|
|
|
25
25
|
* predicate, one walk — the marked messages and the catalog indices cannot drift.
|
|
26
26
|
*
|
|
27
27
|
* What that leaves eligible: verbatim `user` and `assistant` turns with content.
|
|
28
|
-
*
|
|
29
|
-
* history messages, so they are excluded structurally. Whitespace-only
|
|
30
|
-
* skipped — there is nothing to reference, and since the model only
|
|
31
|
-
* from the catalog the renderer returns, skipping them cannot
|
|
28
|
+
* System prompts, context blocks, and anything a tool injected never appear as
|
|
29
|
+
* plain history messages, so they are excluded structurally. Whitespace-only
|
|
30
|
+
* turns are skipped — there is nothing to reference, and since the model only
|
|
31
|
+
* ever selects from the catalog the renderer returns, skipping them cannot
|
|
32
|
+
* misalign indices.
|
|
32
33
|
*
|
|
33
34
|
* The inbound user turn is appended to the Session before the round infers, so
|
|
34
35
|
* one catalog covers both the current task input and past turns. The selected
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/subtasks/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;CACf;AAED
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/subtasks/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAIlE"}
|
package/dist/subtasks/catalog.js
CHANGED
|
@@ -15,10 +15,11 @@ import { sessionText } from "../agent/history.js";
|
|
|
15
15
|
* predicate, one walk — the marked messages and the catalog indices cannot drift.
|
|
16
16
|
*
|
|
17
17
|
* What that leaves eligible: verbatim `user` and `assistant` turns with content.
|
|
18
|
-
*
|
|
19
|
-
* history messages, so they are excluded structurally. Whitespace-only
|
|
20
|
-
* skipped — there is nothing to reference, and since the model only
|
|
21
|
-
* from the catalog the renderer returns, skipping them cannot
|
|
18
|
+
* System prompts, context blocks, and anything a tool injected never appear as
|
|
19
|
+
* plain history messages, so they are excluded structurally. Whitespace-only
|
|
20
|
+
* turns are skipped — there is nothing to reference, and since the model only
|
|
21
|
+
* ever selects from the catalog the renderer returns, skipping them cannot
|
|
22
|
+
* misalign indices.
|
|
22
23
|
*
|
|
23
24
|
* The inbound user turn is appended to the Session before the round infers, so
|
|
24
25
|
* one catalog covers both the current task input and past turns. The selected
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/subtasks/catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAclD
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/subtasks/catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAclD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAuB;IACvD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC1E,IAAI,mBAAmB,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,CAAC"}
|