@steerable/agent-shell 0.6.15

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 (204) hide show
  1. package/LICENSE +91 -0
  2. package/contracts/tool-contract.json +326 -0
  3. package/dist/attachments.d.ts +41 -0
  4. package/dist/attachments.js +147 -0
  5. package/dist/brand.d.ts +24 -0
  6. package/dist/brand.js +92 -0
  7. package/dist/host/http-routes.d.ts +21 -0
  8. package/dist/host/http-routes.js +55 -0
  9. package/dist/host/ipc.d.ts +11 -0
  10. package/dist/host/ipc.js +20 -0
  11. package/dist/host/pack-assembly.d.ts +86 -0
  12. package/dist/host/pack-assembly.js +32 -0
  13. package/dist/host/runtime.d.ts +69 -0
  14. package/dist/host/runtime.js +207 -0
  15. package/dist/host/visible-terminal-exec.d.ts +21 -0
  16. package/dist/host/visible-terminal-exec.js +151 -0
  17. package/dist/hosted-web-search.d.ts +13 -0
  18. package/dist/hosted-web-search.js +82 -0
  19. package/dist/image-attachment.d.ts +39 -0
  20. package/dist/image-attachment.js +133 -0
  21. package/dist/insights/flush.d.ts +10 -0
  22. package/dist/insights/flush.js +139 -0
  23. package/dist/insights/record.d.ts +17 -0
  24. package/dist/insights/record.js +44 -0
  25. package/dist/json-store.d.ts +9 -0
  26. package/dist/json-store.js +22 -0
  27. package/dist/llm/index.d.ts +23 -0
  28. package/dist/llm/index.js +105 -0
  29. package/dist/llm/ollama.d.ts +23 -0
  30. package/dist/llm/ollama.js +242 -0
  31. package/dist/llm/openai-compat.d.ts +20 -0
  32. package/dist/llm/openai-compat.js +199 -0
  33. package/dist/llm/sidecar-provider.d.ts +37 -0
  34. package/dist/llm/sidecar-provider.js +163 -0
  35. package/dist/llm/tool-choice.d.ts +35 -0
  36. package/dist/llm/tool-choice.js +85 -0
  37. package/dist/llm/types.d.ts +122 -0
  38. package/dist/llm/types.js +1 -0
  39. package/dist/local-backend/agent-capability.d.ts +101 -0
  40. package/dist/local-backend/agent-capability.js +174 -0
  41. package/dist/local-backend/ai-title.d.ts +43 -0
  42. package/dist/local-backend/ai-title.js +173 -0
  43. package/dist/local-backend/auto-continue-helper.d.ts +80 -0
  44. package/dist/local-backend/auto-continue-helper.js +83 -0
  45. package/dist/local-backend/branch-helper.d.ts +24 -0
  46. package/dist/local-backend/branch-helper.js +27 -0
  47. package/dist/local-backend/context-compactor.d.ts +81 -0
  48. package/dist/local-backend/context-compactor.js +213 -0
  49. package/dist/local-backend/coreloop-stream.d.ts +245 -0
  50. package/dist/local-backend/coreloop-stream.js +277 -0
  51. package/dist/local-backend/deferred-detector.d.ts +15 -0
  52. package/dist/local-backend/deferred-detector.js +124 -0
  53. package/dist/local-backend/history-helper.d.ts +30 -0
  54. package/dist/local-backend/history-helper.js +34 -0
  55. package/dist/local-backend/interrupted-helper.d.ts +29 -0
  56. package/dist/local-backend/interrupted-helper.js +25 -0
  57. package/dist/local-backend/live-stream.d.ts +36 -0
  58. package/dist/local-backend/live-stream.js +23 -0
  59. package/dist/local-backend/llm-diagnose.d.ts +37 -0
  60. package/dist/local-backend/llm-diagnose.js +284 -0
  61. package/dist/local-backend/message-triggers.d.ts +27 -0
  62. package/dist/local-backend/message-triggers.js +67 -0
  63. package/dist/local-backend/pack-backend-routes.d.ts +31 -0
  64. package/dist/local-backend/pack-backend-routes.js +62 -0
  65. package/dist/local-backend/pack-turn-hooks.d.ts +37 -0
  66. package/dist/local-backend/pack-turn-hooks.js +67 -0
  67. package/dist/local-backend/prompt-builder.d.ts +101 -0
  68. package/dist/local-backend/prompt-builder.js +246 -0
  69. package/dist/local-backend/regenerate-helper.d.ts +62 -0
  70. package/dist/local-backend/regenerate-helper.js +75 -0
  71. package/dist/local-backend/router.d.ts +175 -0
  72. package/dist/local-backend/router.js +3139 -0
  73. package/dist/local-backend/skill-install.d.ts +19 -0
  74. package/dist/local-backend/skill-install.js +71 -0
  75. package/dist/local-backend/skill-loader.d.ts +92 -0
  76. package/dist/local-backend/skill-loader.js +146 -0
  77. package/dist/local-backend/skills/00-identity/SKILL.md +32 -0
  78. package/dist/local-backend/skills/10-goal/SKILL.md +59 -0
  79. package/dist/local-backend/skills/11-loop/SKILL.md +71 -0
  80. package/dist/local-backend/skills/12-create-skill/SKILL.md +88 -0
  81. package/dist/local-backend/skills/70-plan-mode/SKILL.md +58 -0
  82. package/dist/local-backend/skills/80-tool-usage/SKILL.md +70 -0
  83. package/dist/local-backend/skills/81-anti-deferred/SKILL.md +53 -0
  84. package/dist/local-backend/skills/82-data-grounding/SKILL.md +56 -0
  85. package/dist/local-backend/skills/85-local-exec/SKILL.md +86 -0
  86. package/dist/local-backend/skills/86-proactive-coding/SKILL.md +51 -0
  87. package/dist/local-backend/subagent-profiles.d.ts +30 -0
  88. package/dist/local-backend/subagent-profiles.js +74 -0
  89. package/dist/local-backend/task-process.d.ts +12 -0
  90. package/dist/local-backend/task-process.js +176 -0
  91. package/dist/local-backend/task-service.d.ts +135 -0
  92. package/dist/local-backend/task-service.js +565 -0
  93. package/dist/local-backend/turn-duration.d.ts +2 -0
  94. package/dist/local-backend/turn-duration.js +9 -0
  95. package/dist/local-backend/turn-timeline.d.ts +16 -0
  96. package/dist/local-backend/turn-timeline.js +42 -0
  97. package/dist/local-backend/worktree-service.d.ts +84 -0
  98. package/dist/local-backend/worktree-service.js +243 -0
  99. package/dist/local-edit.d.ts +48 -0
  100. package/dist/local-edit.js +44 -0
  101. package/dist/local-executor.d.ts +255 -0
  102. package/dist/local-executor.js +881 -0
  103. package/dist/local-script-registry.d.ts +28 -0
  104. package/dist/local-script-registry.js +63 -0
  105. package/dist/log.d.ts +13 -0
  106. package/dist/log.js +12 -0
  107. package/dist/main.d.ts +1 -0
  108. package/dist/main.js +855 -0
  109. package/dist/mcp-executor.d.ts +45 -0
  110. package/dist/mcp-executor.js +241 -0
  111. package/dist/mcp-server-registry.d.ts +104 -0
  112. package/dist/mcp-server-registry.js +234 -0
  113. package/dist/preload-default.d.ts +1 -0
  114. package/dist/preload-default.js +9 -0
  115. package/dist/preload.cjs +395 -0
  116. package/dist/preload.d.ts +20 -0
  117. package/dist/preload.js +411 -0
  118. package/dist/product-config.d.ts +43 -0
  119. package/dist/product-config.js +26 -0
  120. package/dist/project-registry.d.ts +55 -0
  121. package/dist/project-registry.js +106 -0
  122. package/dist/project-rules.d.ts +15 -0
  123. package/dist/project-rules.js +102 -0
  124. package/dist/runtime.d.ts +62 -0
  125. package/dist/runtime.js +217 -0
  126. package/dist/scenario/pack.d.ts +8 -0
  127. package/dist/scenario/pack.js +1 -0
  128. package/dist/scenario/registry.d.ts +24 -0
  129. package/dist/scenario/registry.js +31 -0
  130. package/dist/server/http-server.d.ts +39 -0
  131. package/dist/server/http-server.js +361 -0
  132. package/dist/server/index.d.ts +1 -0
  133. package/dist/server/index.js +107 -0
  134. package/dist/server/sse-bus.d.ts +14 -0
  135. package/dist/server/sse-bus.js +31 -0
  136. package/dist/shell-adapt.d.ts +21 -0
  137. package/dist/shell-adapt.js +104 -0
  138. package/dist/sidecar/boot.d.ts +36 -0
  139. package/dist/sidecar/boot.js +343 -0
  140. package/dist/sidecar/egress-hint.d.ts +15 -0
  141. package/dist/sidecar/egress-hint.js +46 -0
  142. package/dist/sidecar/egress-proxy.d.ts +183 -0
  143. package/dist/sidecar/egress-proxy.js +419 -0
  144. package/dist/sidecar/errors.d.ts +22 -0
  145. package/dist/sidecar/errors.js +38 -0
  146. package/dist/sidecar/exec-sandbox.d.ts +48 -0
  147. package/dist/sidecar/exec-sandbox.js +94 -0
  148. package/dist/sidecar/handle.d.ts +32 -0
  149. package/dist/sidecar/handle.js +53 -0
  150. package/dist/sidecar/index.d.ts +14 -0
  151. package/dist/sidecar/index.js +13 -0
  152. package/dist/sidecar/proxy-detect.d.ts +50 -0
  153. package/dist/sidecar/proxy-detect.js +182 -0
  154. package/dist/sidecar/reverse-approval.d.ts +55 -0
  155. package/dist/sidecar/reverse-approval.js +86 -0
  156. package/dist/sidecar/reverse-ask-user.d.ts +34 -0
  157. package/dist/sidecar/reverse-ask-user.js +59 -0
  158. package/dist/sidecar/reverse-spawn.d.ts +19 -0
  159. package/dist/sidecar/reverse-spawn.js +161 -0
  160. package/dist/sidecar/reverse-tools.d.ts +29 -0
  161. package/dist/sidecar/reverse-tools.js +106 -0
  162. package/dist/sidecar/safety-patterns.d.ts +41 -0
  163. package/dist/sidecar/safety-patterns.js +157 -0
  164. package/dist/sidecar/storage-path.d.ts +14 -0
  165. package/dist/sidecar/storage-path.js +35 -0
  166. package/dist/sidecar/supervisor.d.ts +218 -0
  167. package/dist/sidecar/supervisor.js +932 -0
  168. package/dist/sidecar/types.d.ts +601 -0
  169. package/dist/sidecar/types.js +1 -0
  170. package/dist/single-instance.d.ts +11 -0
  171. package/dist/single-instance.js +21 -0
  172. package/dist/storage/empty-chats.d.ts +9 -0
  173. package/dist/storage/empty-chats.js +16 -0
  174. package/dist/storage/index.d.ts +373 -0
  175. package/dist/storage/index.js +1158 -0
  176. package/dist/storage/insights-redact.d.ts +2 -0
  177. package/dist/storage/insights-redact.js +30 -0
  178. package/dist/storage/insights-settings.d.ts +53 -0
  179. package/dist/storage/insights-settings.js +92 -0
  180. package/dist/storage/llm-settings.d.ts +120 -0
  181. package/dist/storage/llm-settings.js +233 -0
  182. package/dist/storage/local-store-singleton.d.ts +28 -0
  183. package/dist/storage/local-store-singleton.js +38 -0
  184. package/dist/storage/message-order.d.ts +25 -0
  185. package/dist/storage/message-order.js +27 -0
  186. package/dist/storage/pack-migrations.d.ts +22 -0
  187. package/dist/storage/pack-migrations.js +24 -0
  188. package/dist/storage/pack-seeds.d.ts +36 -0
  189. package/dist/storage/pack-seeds.js +42 -0
  190. package/dist/storage/telemetry-settings.d.ts +38 -0
  191. package/dist/storage/telemetry-settings.js +59 -0
  192. package/dist/storage/usage-summary.d.ts +55 -0
  193. package/dist/storage/usage-summary.js +38 -0
  194. package/dist/storage/web-search-settings.d.ts +38 -0
  195. package/dist/storage/web-search-settings.js +74 -0
  196. package/dist/storage/write-lease.d.ts +26 -0
  197. package/dist/storage/write-lease.js +74 -0
  198. package/dist/terminal-manager.d.ts +83 -0
  199. package/dist/terminal-manager.js +506 -0
  200. package/dist/tool-router.d.ts +228 -0
  201. package/dist/tool-router.js +930 -0
  202. package/dist/tool-search-rank.d.ts +42 -0
  203. package/dist/tool-search-rank.js +96 -0
  204. package/package.json +67 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * 4.6a Task(跨 turn 后台任务)+ 4.6c Task×Worktree 组合。
3
+ *
4
+ * 核心难点——跨 turn 生命周期:sidecar 的父 turn 结束时会在 finally 里
5
+ * `orchestration.shutdown()` / `subagent_executor.shutdown()`(池寿命 =
6
+ * 父 turn),所以任务**不能**挂在父 turn 的 AgentPool 里。本模块的做法是
7
+ * 让宿主为每个任务起一条**独立的 sidecar chat 流**(复用
8
+ * `streamCoreLoopTurn`,与父 turn 同一 supervisor 进程但 streamId /
9
+ * durable record / CoreLoop / AgentPool 全部独立):
10
+ *
11
+ * - 父 turn 的 `task_run` 工具调用只落任务表 + 点火,立即返回
12
+ * `{taskId, status: "running"}`——任务生命周期由宿主任务表管理;
13
+ * - 父 turn 流 teardown 只 shutdown 它自己的池,任务流照常跑到终态;
14
+ * - 任务流以 `task:<taskId>` 为 chatId/recordId: durable record 独立
15
+ * (trace.fetch 可查),也不与父 chat 的 activeCoreLoopStreams /
16
+ * turn_active 标记冲突。
17
+ *
18
+ * 任务的工具调用照常走反向通道回宿主执行;toolContext 里带
19
+ * `chatId: <父 chat>`(项目围栏照旧解析)与可选 `workspaceRoot:
20
+ * <worktree 路径>`(4.6b:reverse-tools 优先采用,把 cwd/文件围栏钉到
21
+ * 隔离工作区而不是主检出)。
22
+ *
23
+ * 深度约束与 delegate_subagent 一致:depth-1——任务回合的工具列表里
24
+ * 没有 `task_run`,任务不能再派生任务(任务里仍可 delegate_subagent)。
25
+ */
26
+ import { getSidecarSupervisor } from '../llm/index.js';
27
+ import type { TaskRecord } from '../storage/index.js';
28
+ import type { ToolRouter } from '../tool-router.js';
29
+ import { streamCoreLoopTurn } from './coreloop-stream.js';
30
+ import type { WorktreeService } from './worktree-service.js';
31
+ import { type PersistedTurnBlock } from './turn-timeline.js';
32
+ /** 任务表的最小读写面(生产 = localStore;测试注入内存实现)。 */
33
+ export interface TaskStore {
34
+ createTask(input: {
35
+ chatId: string;
36
+ task: string;
37
+ worktreePath?: string | null;
38
+ worktreeBranch?: string | null;
39
+ recordId?: string | null;
40
+ dependsOn?: string[] | null;
41
+ initialStatus?: 'blocked' | 'running';
42
+ }): TaskRecord;
43
+ getTask(taskId: string): TaskRecord | null;
44
+ listTasks(chatId?: string, limit?: number): TaskRecord[];
45
+ updateTask(taskId: string, updates: Partial<Pick<TaskRecord, 'status' | 'answer' | 'error' | 'worktreeState' | 'traceId' | 'recordId'>>): TaskRecord | null;
46
+ /** 回写推理时间线;缺省实现可为空(测试假 store 内存覆盖)。 */
47
+ saveTaskProcess?(taskId: string, processJson: string): void;
48
+ }
49
+ export interface TaskServiceDeps {
50
+ store: TaskStore;
51
+ toolRouter: ToolRouter;
52
+ worktreeService: WorktreeService;
53
+ /** chatId → 绑定项目(无项目对话返回 null)。与 router.resolveChatProject 同源。 */
54
+ resolveChatProject: (chatId: string) => {
55
+ name: string;
56
+ folderPath: string;
57
+ } | null;
58
+ /** 任务终态 / 推理过程广播(renderer 任务面板与右侧过程栏)。 */
59
+ broadcast?: (eventName: 'task-updated' | 'task-process', payload: Record<string, unknown>) => void;
60
+ /** 测试缝:替换真实流驱动(默认 streamCoreLoopTurn)。 */
61
+ runStream?: typeof streamCoreLoopTurn;
62
+ /** 测试缝:sidecar 句柄解析(默认 getSidecarSupervisor)。 */
63
+ getSupervisor?: typeof getSidecarSupervisor;
64
+ /** 测试缝:历史回放(默认读 sidecar sqlite)。 */
65
+ readHistory?: (recordId: string) => unknown[];
66
+ }
67
+ export declare class TaskService {
68
+ private readonly deps;
69
+ private readonly running;
70
+ constructor(deps: TaskServiceDeps);
71
+ /**
72
+ * task_run 工具的实现:落任务表 + 点火独立流,立即返回。
73
+ * 任何同步可知的失败(无 sidecar、worktree 建不起来)都抛给工具层,
74
+ * 让模型本轮就看到错误而不是一个永远 running 的幽灵任务。
75
+ *
76
+ * 编排(dependsOn):依赖必须指向本 chat 已存在的任务——依赖图因此
77
+ * 天然无环(后来的任务不可能被先建的任务依赖)。依赖全部 completed
78
+ * 立即点火;有 running/blocked 依赖则落 blocked,由依赖终态时的
79
+ * maybeUnblock 调度点火;任一依赖已 failed 直接 fail fast。
80
+ */
81
+ runTask(input: {
82
+ chatId: string;
83
+ task: string;
84
+ worktree?: boolean;
85
+ worktreeName?: string;
86
+ dependsOn?: string[];
87
+ }): Promise<{
88
+ taskId: string;
89
+ status: 'blocked' | 'running';
90
+ worktreePath?: string;
91
+ }>;
92
+ /**
93
+ * task_send 工具的实现:向运行中的任务流 steer 一条消息(agent 间
94
+ * 消息)。任务已终态时流已关闭,只能让模型重跑——与框架 pool 的
95
+ * resume 不同,任务流是 fire-and-forget 整流。
96
+ */
97
+ sendMessage(chatId: string, taskId: string, message: string): Promise<Record<string, unknown>>;
98
+ /**
99
+ * 调度器:一个任务到终态后,扫描同 chat 的 blocked 任务——依赖全部
100
+ * completed 的点火;任一依赖 failed 的标 failed(fail fast,错误
101
+ * 指明是哪个依赖挂了)。
102
+ */
103
+ private maybeUnblock;
104
+ /** 点火:独立 sidecar 流跑任务,终态回写任务表。fire-and-forget。 */
105
+ private ignite;
106
+ private readonly processFlush;
107
+ /**
108
+ * 把时间线推给过程栏并回写任务表。整条时间线每次都要重新序列化,
109
+ * 所以文本/推理增量按 250ms 合并(否则每个 token 都发一份全量,长任务
110
+ * 的流量是 O(n²));工具事件与终态立即发,卡片状态不能延迟。
111
+ */
112
+ private publishProcess;
113
+ private cancelProcessFlush;
114
+ private executeTask;
115
+ /** task_status 工具:单任务或本 chat 全部任务的快照。 */
116
+ status(chatId: string, taskId?: string): Record<string, unknown>;
117
+ /** task_result 工具:取终态任务的完整结果。 */
118
+ result(chatId: string, taskId: string): Record<string, unknown>;
119
+ /** 喂给模型的任务视图(完整字段,answer 截断防爆上下文)。 */
120
+ private toModelView;
121
+ /**
122
+ * 右侧过程栏:当前推理时间线。running 且进程内有流 = live;
123
+ * 表上 running 但本进程没流 = 上次崩溃残留(stale)。
124
+ */
125
+ getProcess(taskId: string): {
126
+ task: TaskRecord;
127
+ timeline: PersistedTurnBlock[];
128
+ live: boolean;
129
+ stale: boolean;
130
+ } | null;
131
+ /** 合并任务 worktree 到主仓(UI「合并到主仓」按钮的路由实现)。 */
132
+ mergeTaskWorktree(taskId: string): Promise<TaskRecord>;
133
+ /** 丢弃任务 worktree(UI「丢弃」按钮的路由实现)。 */
134
+ discardTaskWorktree(taskId: string): Promise<TaskRecord>;
135
+ }