@springbrand/agent-runtime 0.2.0-alpha.72 → 0.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/package.json +3 -3
  2. package/src/{agent-tool-runtime.ts → adapter/cloudflare/agent-tool.ts} +1 -1
  3. package/src/adapter/cloudflare/agent.ts +1539 -0
  4. package/src/{db/index.ts → adapter/cloudflare/database.ts} +18 -55
  5. package/src/{runtime-agent.ts → adapter/cloudflare/define-agent.ts} +25 -35
  6. package/src/adapter/cloudflare/dynamic-worker-observability.ts +1 -1
  7. package/src/adapter/cloudflare/resources/runtime-resources.ts +4 -4
  8. package/src/adapter/cloudflare/sandbox/adapter.ts +1 -1
  9. package/src/{db → adapter/cloudflare}/schema.ts +16 -83
  10. package/src/adapter/cloudflare/subagent/definition.ts +63 -33
  11. package/src/adapter/cloudflare/subagent/runner.ts +174 -120
  12. package/src/adapter/cloudflare/subagent/tools.ts +13 -14
  13. package/src/adapter/cloudflare/universal-agent/preparation.ts +7 -7
  14. package/src/adapter/cloudflare/universal-agent/tools.ts +10 -10
  15. package/src/adapter/cloudflare/workspace/git-fs.ts +1 -1
  16. package/src/adapter/cloudflare/workspace/scoped-workspace.ts +1 -1
  17. package/src/adapter/cloudflare/workspace/version-control.ts +2 -2
  18. package/src/config/activation.ts +140 -0
  19. package/src/{runtime-agent-context.ts → config/agent-context.ts} +3 -3
  20. package/src/{runtime-assembler.ts → config/assembler.ts} +20 -19
  21. package/src/{kernel/runtime-assembly.ts → config/assembly-projection.ts} +4 -4
  22. package/src/{pi/assembly/snapshot.ts → config/assembly-snapshot.ts} +6 -6
  23. package/src/{runtime-definition.ts → config/definition.ts} +13 -13
  24. package/src/config/harness-runtime.ts +182 -0
  25. package/src/config/index.ts +14 -0
  26. package/src/{pi/runtime-adapter/assembly.ts → config/pinning.ts} +38 -16
  27. package/src/{kernel/bindings.ts → config/ports.ts} +9 -13
  28. package/src/{kernel → config}/profile.ts +7 -0
  29. package/src/{kernel → config}/public-contracts.ts +6 -6
  30. package/src/{kernel → config}/runtime-load.ts +1 -1
  31. package/src/{pi/assembly/context.ts → context/assembly.ts} +4 -206
  32. package/src/{pi/assembly/extensions.ts → context/extension/assembly.ts} +5 -5
  33. package/src/context/extension/index.ts +3 -0
  34. package/src/context/index.ts +6 -0
  35. package/src/{layers/context → context/memory}/budget/gate.ts +2 -2
  36. package/src/conversation/harness-resume.ts +288 -0
  37. package/src/conversation/harness-stream.ts +98 -0
  38. package/src/{pi/runtime-adapter/transcript.ts → conversation/history.ts} +206 -233
  39. package/src/conversation/index.ts +6 -0
  40. package/src/{pi → conversation}/message/contract.ts +3 -0
  41. package/src/{pi → conversation}/message/conversion.ts +75 -0
  42. package/src/{pi → conversation}/message/index.ts +1 -0
  43. package/src/{pi → conversation}/message/model-input.ts +1 -1
  44. package/src/{pi → conversation}/message/projection.ts +76 -10
  45. package/src/{db/message-ui.repo.ts → conversation/repository.ts} +4 -0
  46. package/src/conversation/state.ts +175 -0
  47. package/src/harness/index.ts +7 -0
  48. package/src/harness/session-harness.ts +481 -0
  49. package/src/harness/submission-operation.ts +49 -0
  50. package/src/index.ts +38 -43
  51. package/src/lib/mcp.ts +1 -1
  52. package/src/{pi/runtime-adapter/models.ts → models/index.ts} +64 -18
  53. package/src/{pi/turn/tool-recovery.ts → session/cloudflare/legacy-tool-recovery.ts} +33 -525
  54. package/src/{pi/session → session/cloudflare}/migration.ts +334 -8
  55. package/src/{pi/session → session/cloudflare}/storage.ts +8 -36
  56. package/src/session/index.ts +39 -0
  57. package/src/submission/admission.ts +275 -0
  58. package/src/{kernel/receipts.ts → submission/contracts.ts} +14 -0
  59. package/src/submission/delivery.ts +212 -0
  60. package/src/submission/finalization.ts +111 -0
  61. package/src/submission/index.ts +9 -0
  62. package/src/{kernel/submission-lifecycle.ts → submission/lifecycle.ts} +41 -28
  63. package/src/{db/submission.repo.ts → submission/repository.ts} +61 -118
  64. package/src/submission/steer-delivery.ts +167 -0
  65. package/src/{db/steer.repo.ts → submission/steer-repository.ts} +27 -5
  66. package/src/telemetry/contract.ts +12 -0
  67. package/src/telemetry/coordinator.ts +65 -0
  68. package/src/telemetry/delivery.ts +2 -2
  69. package/src/telemetry/index.ts +5 -0
  70. package/src/{model-usage.ts → telemetry/model-usage.ts} +1 -1
  71. package/src/telemetry/recorder.ts +1 -1
  72. package/src/telemetry/runtime-telemetry.ts +12 -0
  73. package/src/{kernel/durable-lifecycle.ts → telemetry/subagent-lifecycle.ts} +1 -1
  74. package/src/telemetry/turn-events.ts +279 -0
  75. package/src/{pi/tool → tools}/ai-adapter.ts +2 -2
  76. package/src/tools/approval/index.ts +1 -0
  77. package/src/{db/approval.repo.ts → tools/approval/repository.ts} +10 -30
  78. package/src/{pi/tool → tools}/base.ts +14 -30
  79. package/src/tools/compiler.ts +327 -0
  80. package/src/{pi/tool → tools}/core-host.ts +3 -3
  81. package/src/{pi/tool → tools}/core.ts +3 -3
  82. package/src/tools/decision-gate.ts +227 -0
  83. package/src/{pi/tool → tools}/gateway.ts +1 -1
  84. package/src/tools/human-decisions.ts +127 -0
  85. package/src/tools/index.ts +30 -0
  86. package/src/tools/interaction/index.ts +1 -0
  87. package/src/{pi/tool → tools}/mcp.ts +1 -1
  88. package/src/{pi/tool → tools}/schedule.ts +3 -3
  89. package/src/{pi/tool → tools}/skill.ts +4 -4
  90. package/src/{kernel → tools}/subagent-runtime.ts +1 -1
  91. package/src/{pi/tool → tools}/subagent.ts +4 -4
  92. package/src/tools/temporary-agent/approvals.ts +126 -0
  93. package/src/{layers/orchestration/temporary-agent/core.ts → tools/temporary-agent/coordinator.ts} +41 -49
  94. package/src/tools/temporary-agent/core.ts +53 -0
  95. package/src/{layers/orchestration → tools}/temporary-agent/runner.ts +1 -1
  96. package/src/{layers/orchestration → tools}/temporary-agent/workspace.ts +1 -1
  97. package/src/{pi/tool → tools}/web-search/api.ts +1 -1
  98. package/src/{pi/tool → tools}/workspace-revision.ts +2 -2
  99. package/src/{pi/tool → tools}/workspace-sandbox.ts +2 -2
  100. package/src/{pi/tool → tools}/workspace-state-connector.ts +1 -1
  101. package/src/db/milestone.repo.ts +0 -104
  102. package/src/db/settlement.repo.ts +0 -104
  103. package/src/kernel/approval-lifecycle.ts +0 -638
  104. package/src/kernel/interaction-lifecycle.ts +0 -433
  105. package/src/kernel/recoverable-chat-agent.ts +0 -1020
  106. package/src/kernel/state.ts +0 -91
  107. package/src/pi/assembly/index.ts +0 -19
  108. package/src/pi/runtime-adapter/execution.ts +0 -1163
  109. package/src/pi/runtime-adapter/index.ts +0 -293
  110. package/src/pi/runtime-adapter/recovery.ts +0 -982
  111. package/src/pi/session/index.ts +0 -24
  112. package/src/pi/tool/compiler.ts +0 -483
  113. package/src/pi/tool/index.ts +0 -38
  114. package/src/pi/turn/approval.ts +0 -181
  115. package/src/pi/turn/index.ts +0 -82
  116. package/src/pi/turn/interaction.ts +0 -181
  117. package/src/runtime.ts +0 -4760
  118. /package/src/{kernel/runtime-assembly-view.ts → config/assembly-view.ts} +0 -0
  119. /package/src/{kernel → config}/degradation.ts +0 -0
  120. /package/src/{kernel → config}/runtime-config.ts +0 -0
  121. /package/src/{kernel/extensions.ts → context/extension/contracts.ts} +0 -0
  122. /package/src/{db/ext-context.repo.ts → context/extension/repository.ts} +0 -0
  123. /package/src/{pi/runtime-adapter/openrouter-messages.ts → models/openrouter/messages.ts} +0 -0
  124. /package/src/{pi/runtime-adapter → models/openrouter}/test-fixtures/openrouter-tool-search.sse +0 -0
  125. /package/src/{db/submission-admission.repo.ts → submission/admission-repository.ts} +0 -0
  126. /package/src/{db/telemetry-outbox.repo.ts → telemetry/repository.ts} +0 -0
  127. /package/src/{db/runtime-event-outbox.repo.ts → telemetry/runtime-event-repository.ts} +0 -0
  128. /package/src/{pi/tool → tools}/declared.ts +0 -0
  129. /package/src/{db/interaction.repo.ts → tools/interaction/repository.ts} +0 -0
  130. /package/src/{pi/tool → tools}/nested-tools.ts +0 -0
  131. /package/src/{kernel/submission-authority.ts → tools/subagent-authority.ts} +0 -0
  132. /package/src/{db/agent-tool.repo.ts → tools/subagent-run-repository.ts} +0 -0
  133. /package/src/{layers/orchestration/subagents/agent-types → tools/subagent-types}/contract.ts +0 -0
  134. /package/src/{layers/orchestration/subagents/agent-types → tools/subagent-types}/extract/index.ts +0 -0
  135. /package/src/{layers/orchestration/subagents/agent-types → tools/subagent-types}/fanout/index.ts +0 -0
  136. /package/src/{layers/orchestration/subagents/agent-types → tools/subagent-types}/registry.ts +0 -0
  137. /package/src/{pi/tool → tools}/time.ts +0 -0
  138. /package/src/{pi/tool → tools}/web-fetch.ts +0 -0
  139. /package/src/{pi/tool → tools}/web-search/index.ts +0 -0
  140. /package/src/{pi/tool → tools}/web-search/web-search.ts +0 -0
  141. /package/src/{workspace-versioning.ts → tools/workspace-versioning.ts} +0 -0
@@ -1,104 +0,0 @@
1
- import type { SqlTaggedTemplate } from "agents/chat";
2
-
3
- // Recovery Milestone 的统一定义见 ./index.ts。
4
- export interface StoredMilestone {
5
- submissionId: string;
6
- seq: number;
7
- milestoneKey: string;
8
- body: string;
9
- }
10
-
11
- type MilestoneRow = {
12
- submission_id: string;
13
- seq: number;
14
- milestone_key: string;
15
- body: string;
16
- };
17
-
18
- // 把 SQLite 的 snake_case 行转成 Runtime 使用的 Milestone 对象。
19
- // 待确认:当前 Repository 只返回 body,没有任何调用方使用这个映射函数。
20
- // 这个边界可为完整 Milestone 查询隔离表列名,但在确认未来用途前不应继续围绕它增加代码。
21
- function mapRow(row: MilestoneRow): StoredMilestone {
22
- return {
23
- submissionId: row.submission_id,
24
- seq: row.seq,
25
- milestoneKey: row.milestone_key,
26
- body: row.body,
27
- };
28
- }
29
-
30
- export class RecoveryMilestoneRepository {
31
- // 保存当前 Agent SQLite 的查询入口。
32
- // RuntimeDatabase 构造时调用,Runtime 和 ApprovalLifecycle 随后共享这个 Repository。
33
- // 恢复事实必须与 Submission 位于同一 Agent 存储中,不能用另一个 sql 入口拼接。
34
- constructor(private readonly sql: SqlTaggedTemplate) {}
35
-
36
- /** The existing unique index makes active Tool writes independent of Turn history size. */
37
- findBody(submissionId: string, milestoneKey: string): string | null {
38
- return this.sql<{ body: string }>`
39
- SELECT body FROM pi_recovery_milestones
40
- WHERE submission_id = ${submissionId} AND milestone_key = ${milestoneKey}
41
- `[0]?.body ?? null;
42
- }
43
-
44
- // 按写入顺序返回某次 Submission 的全部恢复内容。
45
- // Runtime 和 ApprovalLifecycle 在计算下一个恢复决策前调用,调用方直接把结果交给 Pi 恢复器。
46
- // ORDER BY seq 是重放契约,不能改成 milestoneKey 或无排序查询,否则决策顺序会变。
47
- listBodies(submissionId: string): string[] {
48
- return this.sql<{ body: string }>`
49
- SELECT body
50
- FROM pi_recovery_milestones
51
- WHERE submission_id = ${submissionId}
52
- ORDER BY seq ASC
53
- `.map((row) => row.body);
54
- }
55
-
56
- // 按 milestoneKey 只插入一次恢复事实,并告诉调用方是否真的新增。
57
- // applyPiRecoveryMutations 在事务中调用,false 会让它对 terminal:intent 走定向更新。
58
- // seq 用 MAX + 1 保留插入顺序,UNIQUE 约束是最后的去重防线;不能改成会覆盖任意旧事实的普通 UPSERT。
59
- upsert(
60
- submissionId: string,
61
- milestoneKey: string,
62
- body: string,
63
- ): boolean {
64
- const existing =
65
- this.sql<{ count: number }>`
66
- SELECT COUNT(*) AS count
67
- FROM pi_recovery_milestones
68
- WHERE submission_id = ${submissionId}
69
- AND milestone_key = ${milestoneKey}
70
- `[0]?.count ?? 0;
71
- if (existing > 0) return false;
72
-
73
- const seq =
74
- this.sql<{ next_seq: number }>`
75
- SELECT COALESCE(MAX(seq), 0) + 1 AS next_seq
76
- FROM pi_recovery_milestones
77
- WHERE submission_id = ${submissionId}
78
- `[0]?.next_seq ?? 1;
79
-
80
- this.sql`
81
- INSERT INTO pi_recovery_milestones (
82
- submission_id, seq, milestone_key, body
83
- ) VALUES (
84
- ${submissionId},
85
- ${seq},
86
- ${milestoneKey},
87
- ${body}
88
- )
89
- `;
90
- return true;
91
- }
92
-
93
- // 只替换已有 terminal:intent 的内容,不新建事实。
94
- // applyPiRecoveryMutations 在 upsert 返回 false 且 key 是 terminal:intent 时调用。
95
- // 该例外允许最终失败理由收敛,但不能放宽 WHERE 去改写其他已记录的恢复事实。
96
- updateTerminalIntent(submissionId: string, body: string): void {
97
- this.sql`
98
- UPDATE pi_recovery_milestones
99
- SET body = ${body}
100
- WHERE submission_id = ${submissionId}
101
- AND milestone_key = 'terminal:intent'
102
- `;
103
- }
104
- }
@@ -1,104 +0,0 @@
1
- import type { SqlTaggedTemplate } from "agents/chat";
2
-
3
- // Settlement 的统一定义见 ./index.ts。
4
- export interface StoredToolSettlement {
5
- toolCallId: string;
6
- submissionId: string;
7
- toolName: string;
8
- args: string;
9
- result: string;
10
- isError: boolean;
11
- createdAt: number;
12
- }
13
-
14
- export interface NewToolSettlement {
15
- toolCallId: string;
16
- submissionId: string;
17
- toolName: string;
18
- args: string;
19
- result: string;
20
- isError: boolean;
21
- createdAt: number;
22
- }
23
-
24
- type SettlementRow = {
25
- tool_call_id: string;
26
- submission_id: string;
27
- tool_name: string;
28
- args: string;
29
- result: string;
30
- is_error: number;
31
- created_at: number;
32
- };
33
-
34
- // 把 SQLite 行转成 Runtime 使用的工具结果对象。
35
- // find 查到记录后调用,上层因而只看 camelCase 字段和 boolean。
36
- // SQLite 用 0/1 存 is_error,转换必须留在此边界;增加列时要同步核对类型、SELECT 和映射。
37
- function mapRow(row: SettlementRow): StoredToolSettlement {
38
- return {
39
- toolCallId: row.tool_call_id,
40
- submissionId: row.submission_id,
41
- toolName: row.tool_name,
42
- args: row.args,
43
- result: row.result,
44
- isError: row.is_error === 1,
45
- createdAt: row.created_at,
46
- };
47
- }
48
-
49
- export class ToolSettlementRepository {
50
- // 保存当前 Agent SQLite 的查询入口。
51
- // RuntimeDatabase 构造时调用,工具执行和恢复流程随后共享这个 Repository。
52
- // Settlement 要与所属 Submission 同库持久化,否则重放时无法一致查重。
53
- constructor(private readonly sql: SqlTaggedTemplate) {}
54
-
55
- // 按 Submission 和工具调用 ID 读取已落盘的最终结果。
56
- // settleTool 写入前和 readToolSettlement 恢复时调用,没有记录时返回 null。
57
- // 两列共同定位表的复合主键,不能只按 toolCallId 查询而把其他 Submission 的结果当成当前结果。
58
- find(
59
- submissionId: string,
60
- toolCallId: string,
61
- ): StoredToolSettlement | null {
62
- const row = this.sql<SettlementRow>`
63
- SELECT tool_call_id, submission_id, tool_name, args, result,
64
- is_error, created_at
65
- FROM pi_tool_settlements
66
- WHERE submission_id = ${submissionId}
67
- AND tool_call_id = ${toolCallId}
68
- `[0];
69
- return row ? mapRow(row) : null;
70
- }
71
-
72
- // 持久化一条尚未存在的工具最终结果。
73
- // settleTool 在事务中确认 find 返回 null 后调用,冲突的重复结果由上层拒绝。
74
- // 复合主键会让未经查重的重复写入直接失败,不能用 INSERT OR REPLACE 掩盖不一致的工具结果。
75
- insert(s: NewToolSettlement): void {
76
- this.sql`
77
- INSERT INTO pi_tool_settlements (
78
- tool_call_id, submission_id, tool_name, args, result,
79
- is_error, created_at
80
- ) VALUES (
81
- ${s.toolCallId},
82
- ${s.submissionId},
83
- ${s.toolName},
84
- ${s.args},
85
- ${s.result},
86
- ${s.isError ? 1 : 0},
87
- ${s.createdAt}
88
- )
89
- `;
90
- }
91
-
92
- // 统计某次 Submission 已落盘的工具结果数。
93
- // Runtime 生成恢复快照时调用,没有记录时应得到 0。
94
- // 这里以数据库为真相源,不能改成内存计数,否则 Durable Object 重启后会丢失进度。
95
- countForSubmission(submissionId: string): number {
96
- return (
97
- this.sql<{ count: number }>`
98
- SELECT COUNT(*) AS count
99
- FROM pi_tool_settlements
100
- WHERE submission_id = ${submissionId}
101
- `[0]?.count ?? 0
102
- );
103
- }
104
- }