@humain/terminal 0.1.1 → 0.2.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.
Files changed (197) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/bundle/chunks/{anthropic-messages-XULXUBIG.js → anthropic-messages-QFCEKGI3.js} +1 -1
  3. package/dist/bundle/chunks/{azure-openai-responses-JEG2XOYC.js → azure-openai-responses-G4ZMHV37.js} +1 -1
  4. package/dist/bundle/chunks/chunk-7T6XCLJF.js +22 -0
  5. package/dist/bundle/chunks/{chunk-LYAMSPR2.js → chunk-ADQYVZ6A.js} +483 -506
  6. package/dist/bundle/chunks/chunk-D6HHRSB5.js +103 -0
  7. package/dist/bundle/chunks/{chunk-JUPSJTFQ.js → chunk-K4JAZYQH.js} +1 -1
  8. package/dist/bundle/chunks/{chunk-HPPQHK3J.js → chunk-KKIB2TVR.js} +1 -1
  9. package/dist/bundle/chunks/chunk-LI2YVPWP.js +2 -0
  10. package/dist/bundle/chunks/chunk-NMPIM7MN.js +2 -0
  11. package/dist/bundle/chunks/{chunk-BZQ53VGE.js → chunk-XSR434CO.js} +1 -1
  12. package/dist/bundle/chunks/compat-CN7WN6DA.js +2 -0
  13. package/dist/bundle/chunks/dist-PRPIUY3U.js +2 -0
  14. package/dist/bundle/chunks/esm-E7UVEYTO.js +4 -0
  15. package/dist/bundle/chunks/{extract-TRW5FBY6.js → extract-CTIFQZDJ.js} +15 -14
  16. package/dist/bundle/chunks/{google-generative-ai-OX6VSCA6.js → google-generative-ai-RSUU4MWO.js} +1 -1
  17. package/dist/bundle/chunks/{google-vertex-GW76GSS2.js → google-vertex-CKQPOITO.js} +1 -1
  18. package/dist/bundle/chunks/host-WP3MVKS2.js +2 -0
  19. package/dist/bundle/chunks/{node-KOIP55YZ.js → node-NF43OPII.js} +1 -1
  20. package/dist/bundle/chunks/{node-XY3CBY3C.js → node-UMFM7CDZ.js} +1 -1
  21. package/dist/bundle/chunks/{openai-codex-responses-NPLWP6ZC.js → openai-codex-responses-S34V5ZSD.js} +1 -1
  22. package/dist/bundle/chunks/{openai-completions-OT2GTJKC.js → openai-completions-T2IGVUEI.js} +1 -1
  23. package/dist/bundle/chunks/{openai-responses-5A6CR7GI.js → openai-responses-GYZODCT3.js} +1 -1
  24. package/dist/bundle/chunks/readability-LAGF34IB.js +3 -0
  25. package/dist/bundle/chunks/turndown.cjs-HRMZVRUL.js +2 -0
  26. package/dist/bundle/cli.js +1 -1
  27. package/dist/bundle/index.js +1 -1
  28. package/dist/bundle/rpc-entry.js +1 -1
  29. package/dist/core/model-runtime.d.ts +21 -0
  30. package/dist/core/model-runtime.d.ts.map +1 -1
  31. package/dist/core/model-runtime.js +34 -4
  32. package/dist/core/model-runtime.js.map +1 -1
  33. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  34. package/dist/core/tools/file-mutation-queue.js +21 -8
  35. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  36. package/dist/core/tools/subagent-env.d.ts +20 -0
  37. package/dist/core/tools/subagent-env.d.ts.map +1 -0
  38. package/dist/core/tools/subagent-env.js +47 -0
  39. package/dist/core/tools/subagent-env.js.map +1 -0
  40. package/dist/core/tools/subagent-scheduler.d.ts +36 -0
  41. package/dist/core/tools/subagent-scheduler.d.ts.map +1 -0
  42. package/dist/core/tools/subagent-scheduler.js +213 -0
  43. package/dist/core/tools/subagent-scheduler.js.map +1 -0
  44. package/dist/core/tools/subagent.d.ts +83 -3
  45. package/dist/core/tools/subagent.d.ts.map +1 -1
  46. package/dist/core/tools/subagent.js +215 -76
  47. package/dist/core/tools/subagent.js.map +1 -1
  48. package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +78 -0
  49. package/dist/humain/mcp-adapter/vendor/README.md +125 -19
  50. package/dist/humain/mcp-adapter/vendor/agent-plugin-loader.ts +69 -30
  51. package/dist/humain/mcp-adapter/vendor/agent-plugin-provenance.ts +36 -0
  52. package/dist/humain/mcp-adapter/vendor/claude-plugin-loader.ts +365 -0
  53. package/dist/humain/mcp-adapter/vendor/commands.ts +13 -15
  54. package/dist/humain/mcp-adapter/vendor/config.ts +198 -30
  55. package/dist/humain/mcp-adapter/vendor/consent-manager.ts +40 -9
  56. package/dist/humain/mcp-adapter/vendor/direct-tool-surface.ts +250 -0
  57. package/dist/humain/mcp-adapter/vendor/direct-tools.ts +9 -228
  58. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js +74 -32
  59. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js.map +1 -1
  60. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.d.ts +1 -0
  61. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.js +31 -0
  62. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.js.map +1 -0
  63. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.d.ts +9 -0
  64. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.js +362 -0
  65. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.js.map +1 -0
  66. package/dist/humain/mcp-adapter/vendor/dist/config.d.ts +3 -1
  67. package/dist/humain/mcp-adapter/vendor/dist/config.js +189 -27
  68. package/dist/humain/mcp-adapter/vendor/dist/config.js.map +1 -1
  69. package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js +7 -16
  70. package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js.map +1 -1
  71. package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js +5 -17
  72. package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js.map +1 -1
  73. package/dist/humain/mcp-adapter/vendor/dist/types.d.ts +30 -4
  74. package/dist/humain/mcp-adapter/vendor/dist/types.js +26 -0
  75. package/dist/humain/mcp-adapter/vendor/dist/types.js.map +1 -1
  76. package/dist/humain/mcp-adapter/vendor/dist/utils.d.ts +6 -0
  77. package/dist/humain/mcp-adapter/vendor/dist/utils.js +65 -6
  78. package/dist/humain/mcp-adapter/vendor/dist/utils.js.map +1 -1
  79. package/dist/humain/mcp-adapter/vendor/host-html-template.ts +20 -19
  80. package/dist/humain/mcp-adapter/vendor/http-ca.ts +84 -0
  81. package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +37102 -15103
  82. package/dist/humain/mcp-adapter/vendor/index.ts +828 -164
  83. package/dist/humain/mcp-adapter/vendor/init.ts +48 -10
  84. package/dist/humain/mcp-adapter/vendor/lazy-loader.ts +7 -0
  85. package/dist/humain/mcp-adapter/vendor/mcp-auth-fetch.ts +113 -0
  86. package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +256 -77
  87. package/dist/humain/mcp-adapter/vendor/mcp-auth.ts +316 -54
  88. package/dist/humain/mcp-adapter/vendor/mcp-code.ts +45 -18
  89. package/dist/humain/mcp-adapter/vendor/mcp-install.ts +60 -0
  90. package/dist/humain/mcp-adapter/vendor/mcp-oauth-provider.ts +70 -6
  91. package/dist/humain/mcp-adapter/vendor/mcp-output-guard.ts +53 -42
  92. package/dist/humain/mcp-adapter/vendor/mcp-panel-theme.ts +105 -0
  93. package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +366 -331
  94. package/dist/humain/mcp-adapter/vendor/mcp-references.ts +9 -14
  95. package/dist/humain/mcp-adapter/vendor/mcp-script-worker.mjs +3 -1
  96. package/dist/humain/mcp-adapter/vendor/mcp-setup-panel.ts +383 -341
  97. package/dist/humain/mcp-adapter/vendor/mcp-status.ts +5 -0
  98. package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +7 -16
  99. package/dist/humain/mcp-adapter/vendor/namespace-tools.ts +61 -3
  100. package/dist/humain/mcp-adapter/vendor/oauth.ts +6 -2
  101. package/dist/humain/mcp-adapter/vendor/package-mcp-loader.ts +5 -17
  102. package/dist/humain/mcp-adapter/vendor/package.json +13 -3
  103. package/dist/humain/mcp-adapter/vendor/prompts.ts +35 -3
  104. package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +108 -7
  105. package/dist/humain/mcp-adapter/vendor/runtime-owner.ts +16 -1
  106. package/dist/humain/mcp-adapter/vendor/sampling-handler.ts +9 -32
  107. package/dist/humain/mcp-adapter/vendor/sandbox-proxy-template.ts +20 -93
  108. package/dist/humain/mcp-adapter/vendor/server-manager.ts +227 -40
  109. package/dist/humain/mcp-adapter/vendor/session-approvals.ts +187 -0
  110. package/dist/humain/mcp-adapter/vendor/skills/mcp-scripting/SKILL.md +9 -1
  111. package/dist/humain/mcp-adapter/vendor/state.ts +10 -1
  112. package/dist/humain/mcp-adapter/vendor/tool-approval.ts +10 -22
  113. package/dist/humain/mcp-adapter/vendor/tool-metadata.ts +14 -0
  114. package/dist/humain/mcp-adapter/vendor/types.ts +57 -4
  115. package/dist/humain/mcp-adapter/vendor/ui-server.ts +36 -28
  116. package/dist/humain/mcp-adapter/vendor/utils.ts +64 -6
  117. package/dist/humain/web-access/vendor/abortable.d.ts +3 -0
  118. package/dist/humain/web-access/vendor/abortable.d.ts.map +1 -0
  119. package/dist/humain/web-access/vendor/abortable.js +22 -0
  120. package/dist/humain/web-access/vendor/abortable.js.map +1 -0
  121. package/dist/humain/web-access/vendor/crawl4ai.d.ts +9 -0
  122. package/dist/humain/web-access/vendor/crawl4ai.d.ts.map +1 -0
  123. package/dist/humain/web-access/vendor/crawl4ai.js +187 -0
  124. package/dist/humain/web-access/vendor/crawl4ai.js.map +1 -0
  125. package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
  126. package/dist/humain/web-access/vendor/credential-source.js +1 -0
  127. package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
  128. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
  129. package/dist/humain/web-access/vendor/curator-page.js +20 -2
  130. package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
  131. package/dist/humain/web-access/vendor/curator-run.d.ts +11 -0
  132. package/dist/humain/web-access/vendor/curator-run.d.ts.map +1 -0
  133. package/dist/humain/web-access/vendor/curator-run.js +38 -0
  134. package/dist/humain/web-access/vendor/curator-run.js.map +1 -0
  135. package/dist/humain/web-access/vendor/curator-server.d.ts +1 -0
  136. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
  137. package/dist/humain/web-access/vendor/curator-server.js +2 -0
  138. package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
  139. package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -1
  140. package/dist/humain/web-access/vendor/duckduckgo.js +1 -1
  141. package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -1
  142. package/dist/humain/web-access/vendor/extract.d.ts +1 -1
  143. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
  144. package/dist/humain/web-access/vendor/extract.js +58 -11
  145. package/dist/humain/web-access/vendor/extract.js.map +1 -1
  146. package/dist/humain/web-access/vendor/fetch-params.js +1 -1
  147. package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
  148. package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
  149. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
  150. package/dist/humain/web-access/vendor/gemini-search.js +12 -5
  151. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
  152. package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
  153. package/dist/humain/web-access/vendor/index.js +23 -19
  154. package/dist/humain/web-access/vendor/index.js.map +1 -1
  155. package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
  156. package/dist/humain/web-access/vendor/openai-search.js +40 -14
  157. package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
  158. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
  159. package/dist/humain/web-access/vendor/page-query.js +6 -2
  160. package/dist/humain/web-access/vendor/page-query.js.map +1 -1
  161. package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -1
  162. package/dist/humain/web-access/vendor/query-rewrite.js +6 -2
  163. package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -1
  164. package/dist/humain/web-access/vendor/serpapi.d.ts +4 -0
  165. package/dist/humain/web-access/vendor/serpapi.d.ts.map +1 -0
  166. package/dist/humain/web-access/vendor/serpapi.js +215 -0
  167. package/dist/humain/web-access/vendor/serpapi.js.map +1 -0
  168. package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -1
  169. package/dist/humain/web-access/vendor/ssrf-protection.js +5 -1
  170. package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
  171. package/dist/humain/web-access/vendor/storage.d.ts.map +1 -1
  172. package/dist/humain/web-access/vendor/storage.js +9 -0
  173. package/dist/humain/web-access/vendor/storage.js.map +1 -1
  174. package/dist/humain/web-access/vendor/summary-review.d.ts +1 -1
  175. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
  176. package/dist/humain/web-access/vendor/summary-review.js +35 -24
  177. package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
  178. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
  179. package/dist/humain/web-access/vendor/utils.js +5 -3
  180. package/dist/humain/web-access/vendor/utils.js.map +1 -1
  181. package/dist/modes/json-event.d.ts +8 -0
  182. package/dist/modes/json-event.d.ts.map +1 -1
  183. package/dist/modes/json-event.js +17 -0
  184. package/dist/modes/json-event.js.map +1 -1
  185. package/dist/modes/print-mode.d.ts.map +1 -1
  186. package/dist/modes/print-mode.js +3 -2
  187. package/dist/modes/print-mode.js.map +1 -1
  188. package/docs/environment-variables.md +9 -0
  189. package/docs/json.md +16 -0
  190. package/npm-shrinkwrap.json +6 -6
  191. package/package.json +2 -2
  192. package/src/humain/mcp-adapter/UPSTREAM.md +56 -7
  193. package/src/humain/mcp-adapter/upstream.json +6 -4
  194. package/src/humain/mcp-adapter/vendor/CHANGELOG.md +78 -0
  195. package/src/humain/web-access/UPSTREAM.md +18 -8
  196. package/src/humain/web-access/upstream.json +6 -5
  197. package/dist/bundle/chunks/chunk-2LC3S3VV.js +0 -105
@@ -0,0 +1,213 @@
1
+ export function validateTaskGraph(tasks) {
2
+ const ids = new Set();
3
+ for (const t of tasks) {
4
+ if (ids.has(t.id))
5
+ return `duplicate task id "${t.id}"`;
6
+ ids.add(t.id);
7
+ }
8
+ for (const t of tasks) {
9
+ for (const dep of t.dependsOn ?? []) {
10
+ if (dep === t.id)
11
+ return `task "${t.id}" depends on itself`;
12
+ if (!ids.has(dep))
13
+ return `task "${t.id}" has unknown dependency "${dep}"`;
14
+ }
15
+ }
16
+ // Kahn's algorithm; anything left with in-degree > 0 is on a cycle.
17
+ const indegree = new Map(tasks.map((t) => [t.id, t.dependsOn?.length ?? 0]));
18
+ const dependents = new Map();
19
+ for (const t of tasks)
20
+ for (const dep of t.dependsOn ?? [])
21
+ dependents.set(dep, [...(dependents.get(dep) ?? []), t.id]);
22
+ const queue = tasks.filter((t) => (indegree.get(t.id) ?? 0) === 0).map((t) => t.id);
23
+ let visited = 0;
24
+ while (queue.length) {
25
+ const id = queue.shift();
26
+ visited++;
27
+ for (const next of dependents.get(id) ?? []) {
28
+ const d = (indegree.get(next) ?? 0) - 1;
29
+ indegree.set(next, d);
30
+ if (d === 0)
31
+ queue.push(next);
32
+ }
33
+ }
34
+ if (visited !== tasks.length)
35
+ return "task graph contains a dependency cycle";
36
+ return null;
37
+ }
38
+ function normalizePath(p) {
39
+ return p.replace(/\\/g, "/").replace(/^\.\//, "").replace(/\/+$/, "");
40
+ }
41
+ function pathCovers(a, b) {
42
+ return a === b || b.startsWith(`${a}/`) || a.startsWith(`${b}/`);
43
+ }
44
+ export function ownerPathsOverlap(a, b) {
45
+ if (!a?.length || !b?.length)
46
+ return false;
47
+ const na = a.map(normalizePath);
48
+ const nb = b.map(normalizePath);
49
+ return na.some((x) => nb.some((y) => pathCovers(x, y)));
50
+ }
51
+ export function implicitSerializationEdges(tasks) {
52
+ const edges = new Map();
53
+ for (let i = 0; i < tasks.length; i++) {
54
+ const after = [];
55
+ for (let j = 0; j < i; j++) {
56
+ if (ownerPathsOverlap(tasks[i].ownerPaths, tasks[j].ownerPaths))
57
+ after.push(tasks[j].id);
58
+ }
59
+ edges.set(tasks[i].id, after);
60
+ }
61
+ return edges;
62
+ }
63
+ export async function runDag(tasks, concurrency, run, isFailed, skip, onEvent, signal, onAbort) {
64
+ if (tasks.length === 0)
65
+ return [];
66
+ const graphError = validateTaskGraph(tasks);
67
+ if (graphError)
68
+ return Promise.reject(new Error(graphError));
69
+ const opts = typeof concurrency === "number" ? { concurrency } : concurrency;
70
+ const limit = Math.max(1, Math.min(opts.concurrency, tasks.length));
71
+ const worktreeLimit = Math.max(1, opts.worktrees ?? limit);
72
+ const results = new Array(tasks.length);
73
+ const serialAfter = implicitSerializationEdges(tasks);
74
+ const done = new Set();
75
+ const failed = new Set();
76
+ const started = new Set();
77
+ const waitedOnCap = new Set();
78
+ const serializedAnnounced = new Set();
79
+ let running = 0;
80
+ let runningIsolated = 0;
81
+ const failedExplicitDep = (t) => (t.dependsOn ?? []).find((d) => failed.has(d));
82
+ const blockedBy = (t) => [...(t.dependsOn ?? []), ...(serialAfter.get(t.id) ?? [])].filter((d) => !done.has(d));
83
+ return new Promise((resolve, reject) => {
84
+ let settled = false;
85
+ const settle = (index, result) => {
86
+ results[index] = result;
87
+ const id = tasks[index].id;
88
+ done.add(id);
89
+ if (isFailed(result))
90
+ failed.add(id);
91
+ };
92
+ const safeEvent = (event) => {
93
+ try {
94
+ onEvent?.(event);
95
+ }
96
+ catch {
97
+ /* observer errors never affect scheduling */
98
+ }
99
+ };
100
+ /** Returns false when the promise was rejected and pumping must stop. */
101
+ const safeSettleWith = (index, produce) => {
102
+ try {
103
+ settle(index, produce());
104
+ return true;
105
+ }
106
+ catch (err) {
107
+ if (!settled) {
108
+ settled = true;
109
+ reject(err instanceof Error ? err : new Error(String(err)));
110
+ }
111
+ return false;
112
+ }
113
+ };
114
+ const pump = () => {
115
+ let startedOrSettledThisPass = false;
116
+ let progress = true;
117
+ while (progress) {
118
+ progress = false;
119
+ // 0. Abort short-circuits everything not yet started.
120
+ if (signal?.aborted) {
121
+ for (let i = 0; i < tasks.length; i++) {
122
+ const t = tasks[i];
123
+ if (started.has(t.id) || done.has(t.id))
124
+ continue;
125
+ started.add(t.id);
126
+ if (!safeSettleWith(i, () => (onAbort ? onAbort(t, i) : skip(t, i, "aborted"))))
127
+ return;
128
+ startedOrSettledThisPass = true;
129
+ }
130
+ }
131
+ // 1. Skip dependents of failed tasks, to a fixed point.
132
+ let skipped = true;
133
+ while (skipped) {
134
+ skipped = false;
135
+ for (let i = 0; i < tasks.length; i++) {
136
+ const t = tasks[i];
137
+ if (started.has(t.id) || done.has(t.id))
138
+ continue;
139
+ const dep = failedExplicitDep(t);
140
+ if (dep) {
141
+ safeEvent({ type: "skip", id: t.id, failedDependency: dep });
142
+ started.add(t.id);
143
+ if (!safeSettleWith(i, () => skip(t, i, dep)))
144
+ return;
145
+ startedOrSettledThisPass = true;
146
+ progress = true;
147
+ skipped = true;
148
+ }
149
+ }
150
+ }
151
+ // 2. Start ready tasks up to the cap.
152
+ for (let i = 0; i < tasks.length; i++) {
153
+ const t = tasks[i];
154
+ if (started.has(t.id) || done.has(t.id))
155
+ continue;
156
+ const blockers = blockedBy(t);
157
+ if (blockers.length) {
158
+ const serial = (serialAfter.get(t.id) ?? []).filter((d) => !done.has(d));
159
+ if (serial.length && !serializedAnnounced.has(t.id)) {
160
+ serializedAnnounced.add(t.id);
161
+ safeEvent({ type: "serialize", id: t.id, after: serial });
162
+ }
163
+ continue;
164
+ }
165
+ const isIsolated = t.isolation === "worktree";
166
+ if (running >= limit || (isIsolated && runningIsolated >= worktreeLimit)) {
167
+ if (!waitedOnCap.has(t.id)) {
168
+ waitedOnCap.add(t.id);
169
+ safeEvent({ type: "wait", id: t.id, reason: "concurrency" });
170
+ }
171
+ continue;
172
+ }
173
+ started.add(t.id);
174
+ running++;
175
+ if (isIsolated)
176
+ runningIsolated++;
177
+ startedOrSettledThisPass = true;
178
+ progress = true;
179
+ safeEvent({ type: "start", id: t.id });
180
+ run(t, i).then((r) => {
181
+ running--;
182
+ if (isIsolated)
183
+ runningIsolated--;
184
+ settle(i, r);
185
+ pump();
186
+ }, (err) => {
187
+ running--;
188
+ if (isIsolated)
189
+ runningIsolated--;
190
+ if (!safeSettleWith(i, () => skip(t, i, err instanceof Error ? err.message : String(err))))
191
+ return;
192
+ pump();
193
+ });
194
+ }
195
+ }
196
+ if (done.size === tasks.length) {
197
+ if (!settled) {
198
+ settled = true;
199
+ resolve(results);
200
+ }
201
+ return;
202
+ }
203
+ if (running === 0 && !startedOrSettledThisPass) {
204
+ if (!settled) {
205
+ settled = true;
206
+ reject(new Error("task graph stalled: no runnable task remains"));
207
+ }
208
+ }
209
+ };
210
+ pump();
211
+ });
212
+ }
213
+ //# sourceMappingURL=subagent-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-scheduler.js","sourceRoot":"","sources":["../../../src/core/tools/subagent-scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure scheduling for the subagent tool's parallel mode. No I/O, no spawn.\n * Explicit `dependsOn` edges gate start and propagate failure as a skip.\n * Implicit owner-path edges only order siblings; they never skip.\n */\nexport interface SchedulableTask {\n\tid: string;\n\tdependsOn?: string[];\n\townerPaths?: string[];\n\t/** Only the literal \"worktree\" consumes a worktree slot. */\n\tisolation?: string;\n}\n\nexport type DagEvent =\n\t| { type: \"wait\"; id: string; reason: \"concurrency\" }\n\t| { type: \"serialize\"; id: string; after: string[] }\n\t| { type: \"start\"; id: string }\n\t| { type: \"skip\"; id: string; failedDependency: string };\n\nexport function validateTaskGraph(tasks: SchedulableTask[]): string | null {\n\tconst ids = new Set<string>();\n\tfor (const t of tasks) {\n\t\tif (ids.has(t.id)) return `duplicate task id \"${t.id}\"`;\n\t\tids.add(t.id);\n\t}\n\tfor (const t of tasks) {\n\t\tfor (const dep of t.dependsOn ?? []) {\n\t\t\tif (dep === t.id) return `task \"${t.id}\" depends on itself`;\n\t\t\tif (!ids.has(dep)) return `task \"${t.id}\" has unknown dependency \"${dep}\"`;\n\t\t}\n\t}\n\t// Kahn's algorithm; anything left with in-degree > 0 is on a cycle.\n\tconst indegree = new Map<string, number>(tasks.map((t) => [t.id, t.dependsOn?.length ?? 0]));\n\tconst dependents = new Map<string, string[]>();\n\tfor (const t of tasks)\n\t\tfor (const dep of t.dependsOn ?? []) dependents.set(dep, [...(dependents.get(dep) ?? []), t.id]);\n\tconst queue = tasks.filter((t) => (indegree.get(t.id) ?? 0) === 0).map((t) => t.id);\n\tlet visited = 0;\n\twhile (queue.length) {\n\t\tconst id = queue.shift() as string;\n\t\tvisited++;\n\t\tfor (const next of dependents.get(id) ?? []) {\n\t\t\tconst d = (indegree.get(next) ?? 0) - 1;\n\t\t\tindegree.set(next, d);\n\t\t\tif (d === 0) queue.push(next);\n\t\t}\n\t}\n\tif (visited !== tasks.length) return \"task graph contains a dependency cycle\";\n\treturn null;\n}\n\nfunction normalizePath(p: string): string {\n\treturn p.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/\\/+$/, \"\");\n}\n\nfunction pathCovers(a: string, b: string): boolean {\n\treturn a === b || b.startsWith(`${a}/`) || a.startsWith(`${b}/`);\n}\n\nexport function ownerPathsOverlap(a: string[] | undefined, b: string[] | undefined): boolean {\n\tif (!a?.length || !b?.length) return false;\n\tconst na = a.map(normalizePath);\n\tconst nb = b.map(normalizePath);\n\treturn na.some((x) => nb.some((y) => pathCovers(x, y)));\n}\n\nexport function implicitSerializationEdges(tasks: SchedulableTask[]): Map<string, string[]> {\n\tconst edges = new Map<string, string[]>();\n\tfor (let i = 0; i < tasks.length; i++) {\n\t\tconst after: string[] = [];\n\t\tfor (let j = 0; j < i; j++) {\n\t\t\tif (ownerPathsOverlap(tasks[i].ownerPaths, tasks[j].ownerPaths)) after.push(tasks[j].id);\n\t\t}\n\t\tedges.set(tasks[i].id, after);\n\t}\n\treturn edges;\n}\n\nexport async function runDag<TIn extends SchedulableTask, TOut>(\n\ttasks: TIn[],\n\tconcurrency: number | { concurrency: number; worktrees?: number },\n\trun: (task: TIn, index: number) => Promise<TOut>,\n\tisFailed: (result: TOut) => boolean,\n\tskip: (task: TIn, index: number, failedDependency: string) => TOut,\n\tonEvent?: (event: DagEvent) => void,\n\tsignal?: AbortSignal,\n\tonAbort?: (task: TIn, index: number) => TOut,\n): Promise<TOut[]> {\n\tif (tasks.length === 0) return [];\n\tconst graphError = validateTaskGraph(tasks);\n\tif (graphError) return Promise.reject(new Error(graphError));\n\tconst opts = typeof concurrency === \"number\" ? { concurrency } : concurrency;\n\tconst limit = Math.max(1, Math.min(opts.concurrency, tasks.length));\n\tconst worktreeLimit = Math.max(1, opts.worktrees ?? limit);\n\tconst results: TOut[] = new Array(tasks.length);\n\tconst serialAfter = implicitSerializationEdges(tasks);\n\tconst done = new Set<string>();\n\tconst failed = new Set<string>();\n\tconst started = new Set<string>();\n\tconst waitedOnCap = new Set<string>();\n\tconst serializedAnnounced = new Set<string>();\n\tlet running = 0;\n\tlet runningIsolated = 0;\n\n\tconst failedExplicitDep = (t: TIn): string | undefined => (t.dependsOn ?? []).find((d) => failed.has(d));\n\tconst blockedBy = (t: TIn): string[] =>\n\t\t[...(t.dependsOn ?? []), ...(serialAfter.get(t.id) ?? [])].filter((d) => !done.has(d));\n\n\treturn new Promise<TOut[]>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tconst settle = (index: number, result: TOut) => {\n\t\t\tresults[index] = result;\n\t\t\tconst id = tasks[index].id;\n\t\t\tdone.add(id);\n\t\t\tif (isFailed(result)) failed.add(id);\n\t\t};\n\t\tconst safeEvent = (event: DagEvent) => {\n\t\t\ttry {\n\t\t\t\tonEvent?.(event);\n\t\t\t} catch {\n\t\t\t\t/* observer errors never affect scheduling */\n\t\t\t}\n\t\t};\n\t\t/** Returns false when the promise was rejected and pumping must stop. */\n\t\tconst safeSettleWith = (index: number, produce: () => TOut): boolean => {\n\t\t\ttry {\n\t\t\t\tsettle(index, produce());\n\t\t\t\treturn true;\n\t\t\t} catch (err) {\n\t\t\t\tif (!settled) {\n\t\t\t\t\tsettled = true;\n\t\t\t\t\treject(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tconst pump = () => {\n\t\t\tlet startedOrSettledThisPass = false;\n\t\t\tlet progress = true;\n\t\t\twhile (progress) {\n\t\t\t\tprogress = false;\n\t\t\t\t// 0. Abort short-circuits everything not yet started.\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tfor (let i = 0; i < tasks.length; i++) {\n\t\t\t\t\t\tconst t = tasks[i];\n\t\t\t\t\t\tif (started.has(t.id) || done.has(t.id)) continue;\n\t\t\t\t\t\tstarted.add(t.id);\n\t\t\t\t\t\tif (!safeSettleWith(i, () => (onAbort ? onAbort(t, i) : skip(t, i, \"aborted\")))) return;\n\t\t\t\t\t\tstartedOrSettledThisPass = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 1. Skip dependents of failed tasks, to a fixed point.\n\t\t\t\tlet skipped = true;\n\t\t\t\twhile (skipped) {\n\t\t\t\t\tskipped = false;\n\t\t\t\t\tfor (let i = 0; i < tasks.length; i++) {\n\t\t\t\t\t\tconst t = tasks[i];\n\t\t\t\t\t\tif (started.has(t.id) || done.has(t.id)) continue;\n\t\t\t\t\t\tconst dep = failedExplicitDep(t);\n\t\t\t\t\t\tif (dep) {\n\t\t\t\t\t\t\tsafeEvent({ type: \"skip\", id: t.id, failedDependency: dep });\n\t\t\t\t\t\t\tstarted.add(t.id);\n\t\t\t\t\t\t\tif (!safeSettleWith(i, () => skip(t, i, dep))) return;\n\t\t\t\t\t\t\tstartedOrSettledThisPass = true;\n\t\t\t\t\t\t\tprogress = true;\n\t\t\t\t\t\t\tskipped = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 2. Start ready tasks up to the cap.\n\t\t\t\tfor (let i = 0; i < tasks.length; i++) {\n\t\t\t\t\tconst t = tasks[i];\n\t\t\t\t\tif (started.has(t.id) || done.has(t.id)) continue;\n\t\t\t\t\tconst blockers = blockedBy(t);\n\t\t\t\t\tif (blockers.length) {\n\t\t\t\t\t\tconst serial = (serialAfter.get(t.id) ?? []).filter((d) => !done.has(d));\n\t\t\t\t\t\tif (serial.length && !serializedAnnounced.has(t.id)) {\n\t\t\t\t\t\t\tserializedAnnounced.add(t.id);\n\t\t\t\t\t\t\tsafeEvent({ type: \"serialize\", id: t.id, after: serial });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst isIsolated = t.isolation === \"worktree\";\n\t\t\t\t\tif (running >= limit || (isIsolated && runningIsolated >= worktreeLimit)) {\n\t\t\t\t\t\tif (!waitedOnCap.has(t.id)) {\n\t\t\t\t\t\t\twaitedOnCap.add(t.id);\n\t\t\t\t\t\t\tsafeEvent({ type: \"wait\", id: t.id, reason: \"concurrency\" });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstarted.add(t.id);\n\t\t\t\t\trunning++;\n\t\t\t\t\tif (isIsolated) runningIsolated++;\n\t\t\t\t\tstartedOrSettledThisPass = true;\n\t\t\t\t\tprogress = true;\n\t\t\t\t\tsafeEvent({ type: \"start\", id: t.id });\n\t\t\t\t\trun(t, i).then(\n\t\t\t\t\t\t(r) => {\n\t\t\t\t\t\t\trunning--;\n\t\t\t\t\t\t\tif (isIsolated) runningIsolated--;\n\t\t\t\t\t\t\tsettle(i, r);\n\t\t\t\t\t\t\tpump();\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\trunning--;\n\t\t\t\t\t\t\tif (isIsolated) runningIsolated--;\n\t\t\t\t\t\t\tif (!safeSettleWith(i, () => skip(t, i, err instanceof Error ? err.message : String(err)))) return;\n\t\t\t\t\t\t\tpump();\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (done.size === tasks.length) {\n\t\t\t\tif (!settled) {\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tresolve(results);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (running === 0 && !startedOrSettledThisPass) {\n\t\t\t\tif (!settled) {\n\t\t\t\t\tsettled = true;\n\t\t\t\t\treject(new Error(\"task graph stalled: no runnable task remains\"));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tpump();\n\t});\n}\n"]}
@@ -14,9 +14,8 @@
14
14
  import type { Message } from "@earendil-works/pi-ai";
15
15
  import { Type } from "typebox";
16
16
  import type { ToolDefinition } from "../extensions/types.ts";
17
+ export { SUBAGENT_DEPTH_ENV } from "./subagent-env.ts";
17
18
  import { type SubagentIsolation, type SubagentMergeOutcome } from "./subagent-worktree.ts";
18
- /** Children must not delegate further: depth 0 = top-level agent, depth >= 1 = subagent. */
19
- export declare const SUBAGENT_DEPTH_ENV = "HUMAIN_TERMINAL_SUBAGENT_DEPTH";
20
19
  export type AgentScope = "user" | "project" | "both";
21
20
  export interface AgentConfig {
22
21
  name: string;
@@ -45,6 +44,14 @@ export interface SubagentSingleResult {
45
44
  agent: string;
46
45
  agentSource: "user" | "project" | "unknown";
47
46
  task: string;
47
+ /** Stable id for this child; defaults to `${toolCallId}-${childIndex}`. */
48
+ taskId: string;
49
+ /** The task id of the process that spawned this child, or its tool call id at depth 0. */
50
+ parentTaskId?: string;
51
+ /** Depth the child runs at (parent depth + 1). */
52
+ depth: number;
53
+ thinking?: string;
54
+ attempt?: number;
48
55
  exitCode: number;
49
56
  messages: Message[];
50
57
  stderr: string;
@@ -58,28 +65,102 @@ export interface SubagentSingleResult {
58
65
  mergeOutcome?: SubagentMergeOutcome;
59
66
  changedFiles?: string[];
60
67
  patchPath?: string;
68
+ baseRevision?: string;
61
69
  }
70
+ export type SubagentTaskEvent = {
71
+ type: "schedule";
72
+ taskId: string;
73
+ dependsOn: string[];
74
+ ownerPaths: string[];
75
+ baseRevision?: string;
76
+ at: number;
77
+ } | {
78
+ type: "wait";
79
+ taskId: string;
80
+ reason: "concurrency";
81
+ at: number;
82
+ } | {
83
+ type: "serialize";
84
+ taskId: string;
85
+ after: string[];
86
+ at: number;
87
+ } | {
88
+ type: "start";
89
+ taskId: string;
90
+ attempt: number;
91
+ at: number;
92
+ } | {
93
+ type: "complete";
94
+ taskId: string;
95
+ attempt: number;
96
+ at: number;
97
+ } | {
98
+ type: "fail";
99
+ taskId: string;
100
+ attempt: number;
101
+ reason: string;
102
+ at: number;
103
+ } | {
104
+ type: "escalate";
105
+ taskId: string;
106
+ fromAttempt: number;
107
+ toAttempt: number;
108
+ model?: string;
109
+ thinking?: string;
110
+ at: number;
111
+ } | {
112
+ type: "skip";
113
+ taskId: string;
114
+ failedDependency: string;
115
+ at: number;
116
+ };
62
117
  export interface SubagentDetails {
63
118
  mode: "single" | "parallel" | "chain";
64
119
  agentScope: AgentScope;
65
120
  projectAgentsDir: string | null;
66
121
  results: SubagentSingleResult[];
122
+ taskEvents?: SubagentTaskEvent[];
123
+ }
124
+ export declare function renderTaskWithContext(task: string, context?: TaskContext): string;
125
+ /** Bounded context handed to a child. Strings are rendered verbatim into the child's task text; callers must not pass untrusted multi-line content. */
126
+ export interface TaskContext {
127
+ files?: string[];
128
+ acceptance?: string[];
129
+ baseRevision?: string;
67
130
  }
68
131
  declare const SubagentParams: Type.TObject<{
69
132
  agent: Type.TOptional<Type.TString>;
70
133
  task: Type.TOptional<Type.TString>;
71
134
  model: Type.TOptional<Type.TString>;
135
+ thinking: Type.TOptional<Type.TUnsafe<"high" | "low" | "max" | "medium" | "minimal" | "off" | "xhigh">>;
72
136
  tasks: Type.TOptional<Type.TArray<Type.TObject<{
73
137
  agent: Type.TString;
74
138
  task: Type.TString;
139
+ id: Type.TOptional<Type.TString>;
140
+ thinking: Type.TOptional<Type.TUnsafe<"high" | "low" | "max" | "medium" | "minimal" | "off" | "xhigh">>;
75
141
  model: Type.TOptional<Type.TString>;
76
142
  cwd: Type.TOptional<Type.TString>;
77
143
  isolation: Type.TOptional<Type.TUnsafe<"shared" | "worktree">>;
144
+ dependsOn: Type.TOptional<Type.TArray<Type.TString>>;
145
+ ownerPaths: Type.TOptional<Type.TArray<Type.TString>>;
146
+ onFailure: Type.TOptional<Type.TObject<{
147
+ retryWith: Type.TOptional<Type.TObject<{
148
+ model: Type.TOptional<Type.TString>;
149
+ thinking: Type.TOptional<Type.TUnsafe<"high" | "low" | "max" | "medium" | "minimal" | "off" | "xhigh">>;
150
+ }>>;
151
+ maxAttempts: Type.TOptional<Type.TInteger>;
152
+ }>>;
153
+ context: Type.TOptional<Type.TObject<{
154
+ files: Type.TOptional<Type.TArray<Type.TString>>;
155
+ acceptance: Type.TOptional<Type.TArray<Type.TString>>;
156
+ baseRevision: Type.TOptional<Type.TString>;
157
+ }>>;
78
158
  }>>>;
79
159
  chain: Type.TOptional<Type.TArray<Type.TObject<{
80
160
  agent: Type.TString;
81
161
  task: Type.TString;
82
162
  model: Type.TOptional<Type.TString>;
163
+ thinking: Type.TOptional<Type.TUnsafe<"high" | "low" | "max" | "medium" | "minimal" | "off" | "xhigh">>;
83
164
  cwd: Type.TOptional<Type.TString>;
84
165
  }>>>;
85
166
  agentScope: Type.TOptional<Type.TUnsafe<"both" | "project" | "user">>;
@@ -89,5 +170,4 @@ declare const SubagentParams: Type.TObject<{
89
170
  }>;
90
171
  export declare function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails>;
91
172
  export declare function createSubagentTool(cwd: string): import("@earendil-works/pi-agent-core").AgentTool<any, SubagentDetails>;
92
- export {};
93
173
  //# sourceMappingURL=subagent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAO,OAAO,EAAS,MAAM,uBAAuB,CAAC;AAGjE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAI/B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG/E,OAAO,EAGN,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAEzB,MAAM,wBAAwB,CAAC;AAQhC,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AAUnE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAyED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CAmBnF;AAoGD,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;IAC7B,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;IAC3C,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,oBAAoB,EAAE,CAAC;CAChC;AA0YD,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;EAqBlB,CAAC;AAEH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,cAAc,EAAE,eAAe,CAAC,CAopBhH;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,2EAE7C"}
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"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"}