chivgent 1.0.0 → 1.0.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 (177) hide show
  1. package/README.md +136 -907
  2. package/README.zh-CN.md +25 -2
  3. package/dist/agent.d.ts +14 -1
  4. package/dist/agent.d.ts.map +1 -1
  5. package/dist/agent.js +195 -28
  6. package/dist/agent.js.map +1 -1
  7. package/dist/cli-options.d.ts +2 -0
  8. package/dist/cli-options.d.ts.map +1 -1
  9. package/dist/cli-options.js +12 -2
  10. package/dist/cli-options.js.map +1 -1
  11. package/dist/cli-runtime.d.ts +24 -0
  12. package/dist/cli-runtime.d.ts.map +1 -0
  13. package/dist/cli-runtime.js +64 -0
  14. package/dist/cli-runtime.js.map +1 -0
  15. package/dist/cli.js +20 -72
  16. package/dist/cli.js.map +1 -1
  17. package/dist/context/compaction.d.ts +5 -2
  18. package/dist/context/compaction.d.ts.map +1 -1
  19. package/dist/context/compaction.js +58 -32
  20. package/dist/context/compaction.js.map +1 -1
  21. package/dist/context/context-manager.d.ts +2 -0
  22. package/dist/context/context-manager.d.ts.map +1 -1
  23. package/dist/context/context-manager.js +4 -3
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/project-instructions.d.ts +17 -0
  26. package/dist/context/project-instructions.d.ts.map +1 -0
  27. package/dist/context/project-instructions.js +191 -0
  28. package/dist/context/project-instructions.js.map +1 -0
  29. package/dist/evals/baseline.d.ts +41 -0
  30. package/dist/evals/baseline.d.ts.map +1 -0
  31. package/dist/evals/baseline.js +121 -0
  32. package/dist/evals/baseline.js.map +1 -0
  33. package/dist/evals/cli.js +27 -1
  34. package/dist/evals/cli.js.map +1 -1
  35. package/dist/evals/parse-args.d.ts +2 -0
  36. package/dist/evals/parse-args.d.ts.map +1 -1
  37. package/dist/evals/parse-args.js +5 -0
  38. package/dist/evals/parse-args.js.map +1 -1
  39. package/dist/evals/report.d.ts +2 -0
  40. package/dist/evals/report.d.ts.map +1 -1
  41. package/dist/evals/report.js +12 -8
  42. package/dist/evals/report.js.map +1 -1
  43. package/dist/evals/runner.d.ts +3 -0
  44. package/dist/evals/runner.d.ts.map +1 -1
  45. package/dist/evals/runner.js +5 -1
  46. package/dist/evals/runner.js.map +1 -1
  47. package/dist/evals/task.d.ts.map +1 -1
  48. package/dist/evals/task.js +1 -0
  49. package/dist/evals/task.js.map +1 -1
  50. package/dist/evals/tools.d.ts +4 -1
  51. package/dist/evals/tools.d.ts.map +1 -1
  52. package/dist/evals/tools.js +11 -4
  53. package/dist/evals/tools.js.map +1 -1
  54. package/dist/events.d.ts +7 -1
  55. package/dist/events.d.ts.map +1 -1
  56. package/dist/events.js.map +1 -1
  57. package/dist/patch/parse.d.ts +26 -0
  58. package/dist/patch/parse.d.ts.map +1 -0
  59. package/dist/patch/parse.js +117 -0
  60. package/dist/patch/parse.js.map +1 -0
  61. package/dist/prompts.d.ts +2 -2
  62. package/dist/prompts.d.ts.map +1 -1
  63. package/dist/prompts.js +4 -3
  64. package/dist/prompts.js.map +1 -1
  65. package/dist/repl.d.ts +12 -1
  66. package/dist/repl.d.ts.map +1 -1
  67. package/dist/repl.js +305 -4
  68. package/dist/repl.js.map +1 -1
  69. package/dist/session-store.d.ts +6 -2
  70. package/dist/session-store.d.ts.map +1 -1
  71. package/dist/session-store.js +5 -1
  72. package/dist/session-store.js.map +1 -1
  73. package/dist/session.d.ts +1 -0
  74. package/dist/session.d.ts.map +1 -1
  75. package/dist/session.js +38 -12
  76. package/dist/session.js.map +1 -1
  77. package/dist/shell/approval.d.ts +15 -0
  78. package/dist/shell/approval.d.ts.map +1 -0
  79. package/dist/shell/approval.js +25 -0
  80. package/dist/shell/approval.js.map +1 -0
  81. package/dist/shell/docker.d.ts +18 -0
  82. package/dist/shell/docker.d.ts.map +1 -0
  83. package/dist/shell/docker.js +83 -0
  84. package/dist/shell/docker.js.map +1 -0
  85. package/dist/shell/local.d.ts +1 -1
  86. package/dist/shell/local.d.ts.map +1 -1
  87. package/dist/shell/local.js +1 -1
  88. package/dist/shell/local.js.map +1 -1
  89. package/dist/tools/apply-patch.d.ts +18 -0
  90. package/dist/tools/apply-patch.d.ts.map +1 -0
  91. package/dist/tools/apply-patch.js +53 -0
  92. package/dist/tools/apply-patch.js.map +1 -0
  93. package/dist/tools/bash.d.ts +4 -0
  94. package/dist/tools/bash.d.ts.map +1 -1
  95. package/dist/tools/bash.js +28 -3
  96. package/dist/tools/bash.js.map +1 -1
  97. package/dist/tools/parallel.d.ts +14 -0
  98. package/dist/tools/parallel.d.ts.map +1 -0
  99. package/dist/tools/parallel.js +20 -0
  100. package/dist/tools/parallel.js.map +1 -0
  101. package/dist/tools/tool.d.ts +7 -0
  102. package/dist/tools/tool.d.ts.map +1 -1
  103. package/dist/tools/tool.js +7 -1
  104. package/dist/tools/tool.js.map +1 -1
  105. package/dist/tools/update-plan.d.ts +57 -0
  106. package/dist/tools/update-plan.d.ts.map +1 -0
  107. package/dist/tools/update-plan.js +99 -0
  108. package/dist/tools/update-plan.js.map +1 -0
  109. package/dist/tui/activity.d.ts +17 -0
  110. package/dist/tui/activity.d.ts.map +1 -0
  111. package/dist/tui/activity.js +188 -0
  112. package/dist/tui/activity.js.map +1 -0
  113. package/dist/tui/diff.d.ts +14 -0
  114. package/dist/tui/diff.d.ts.map +1 -0
  115. package/dist/tui/diff.js +57 -0
  116. package/dist/tui/diff.js.map +1 -0
  117. package/dist/tui/editor-input.d.ts +53 -0
  118. package/dist/tui/editor-input.d.ts.map +1 -0
  119. package/dist/tui/editor-input.js +353 -0
  120. package/dist/tui/editor-input.js.map +1 -0
  121. package/dist/tui/editor.d.ts +72 -0
  122. package/dist/tui/editor.d.ts.map +1 -0
  123. package/dist/tui/editor.js +321 -0
  124. package/dist/tui/editor.js.map +1 -0
  125. package/dist/tui/git-diff.d.ts +7 -0
  126. package/dist/tui/git-diff.d.ts.map +1 -0
  127. package/dist/tui/git-diff.js +48 -0
  128. package/dist/tui/git-diff.js.map +1 -0
  129. package/dist/tui/input.d.ts +14 -0
  130. package/dist/tui/input.d.ts.map +1 -1
  131. package/dist/tui/input.js +77 -1
  132. package/dist/tui/input.js.map +1 -1
  133. package/dist/tui/live.d.ts +8 -0
  134. package/dist/tui/live.d.ts.map +1 -1
  135. package/dist/tui/live.js +37 -5
  136. package/dist/tui/live.js.map +1 -1
  137. package/dist/tui/markdown.d.ts +7 -0
  138. package/dist/tui/markdown.d.ts.map +1 -0
  139. package/dist/tui/markdown.js +55 -0
  140. package/dist/tui/markdown.js.map +1 -0
  141. package/dist/tui/menu.js +1 -1
  142. package/dist/tui/review.d.ts +27 -0
  143. package/dist/tui/review.d.ts.map +1 -0
  144. package/dist/tui/review.js +114 -0
  145. package/dist/tui/review.js.map +1 -0
  146. package/dist/tui/slash.d.ts +11 -0
  147. package/dist/tui/slash.d.ts.map +1 -0
  148. package/dist/tui/slash.js +13 -0
  149. package/dist/tui/slash.js.map +1 -0
  150. package/dist/tui/state.d.ts +5 -0
  151. package/dist/tui/state.d.ts.map +1 -1
  152. package/dist/tui/state.js +10 -1
  153. package/dist/tui/state.js.map +1 -1
  154. package/dist/tui/syntax.d.ts +6 -0
  155. package/dist/tui/syntax.d.ts.map +1 -0
  156. package/dist/tui/syntax.js +48 -0
  157. package/dist/tui/syntax.js.map +1 -0
  158. package/dist/tui/view.d.ts +1 -1
  159. package/dist/tui/view.d.ts.map +1 -1
  160. package/dist/tui/view.js +21 -9
  161. package/dist/tui/view.js.map +1 -1
  162. package/dist/tui/welcome.d.ts +5 -0
  163. package/dist/tui/welcome.d.ts.map +1 -1
  164. package/dist/tui/welcome.js +35 -20
  165. package/dist/tui/welcome.js.map +1 -1
  166. package/dist/workspace/patch.d.ts +11 -0
  167. package/dist/workspace/patch.d.ts.map +1 -0
  168. package/dist/workspace/patch.js +124 -0
  169. package/dist/workspace/patch.js.map +1 -0
  170. package/dist/workspace/types.d.ts +7 -0
  171. package/dist/workspace/types.d.ts.map +1 -1
  172. package/dist/workspace/types.js.map +1 -1
  173. package/dist/workspace.d.ts +2 -1
  174. package/dist/workspace.d.ts.map +1 -1
  175. package/dist/workspace.js +5 -0
  176. package/dist/workspace.js.map +1 -1
  177. package/package.json +1 -1
package/dist/session.js CHANGED
@@ -17,6 +17,7 @@ export class AgentSession {
17
17
  transcript;
18
18
  headerWritten;
19
19
  promptCount = 0;
20
+ promptInProgress = false;
20
21
  usageTotal;
21
22
  constructor(options) {
22
23
  this.id = options.id ?? createSessionId();
@@ -53,22 +54,35 @@ export class AgentSession {
53
54
  }
54
55
  /** Drops the transcript but keeps the session id and its log. */
55
56
  clear() {
57
+ if (this.promptInProgress) {
58
+ throw new Error("Cannot clear a session while a prompt is running.");
59
+ }
56
60
  this.transcript = [];
61
+ this.record({ type: "session_clear" });
57
62
  }
58
63
  async prompt(text, options = {}) {
59
- await this.writeHeader();
60
- this.promptCount += 1;
61
- const result = await this.agent.run(text, {
62
- history: this.transcript,
63
- ...(options.signal === undefined ? {} : { signal: options.signal }),
64
- });
65
- this.transcript = result.messages;
66
- this.usageTotal = addUsage(this.usageTotal, result.usage?.usage);
67
- if (result.usage?.complete === false) {
68
- this.usageTotal = { usage: this.usageTotal.usage, complete: false };
64
+ if (this.promptInProgress) {
65
+ throw new Error("This session is already running a prompt.");
66
+ }
67
+ this.promptInProgress = true;
68
+ try {
69
+ await this.writeHeader();
70
+ this.promptCount += 1;
71
+ try {
72
+ return await this.agent.run(text, {
73
+ history: this.transcript,
74
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
75
+ });
76
+ }
77
+ finally {
78
+ // A Provider error still emits agent_end; flush that authoritative
79
+ // snapshot so a restart restores the same transcript as this process.
80
+ await this.flush();
81
+ }
82
+ }
83
+ finally {
84
+ this.promptInProgress = false;
69
85
  }
70
- await this.flush();
71
- return result;
72
86
  }
73
87
  header() {
74
88
  return {
@@ -80,6 +94,18 @@ export class AgentSession {
80
94
  };
81
95
  }
82
96
  dispatch(event) {
97
+ // agent_end is authoritative even for an error (where agent.run throws).
98
+ // Keep in-memory state and the persisted event snapshot identical.
99
+ if (event.type === "agent_end") {
100
+ this.transcript = structuredClone(event.messages);
101
+ this.usageTotal = addUsage(this.usageTotal, event.usage?.usage);
102
+ if (event.usage?.complete === false) {
103
+ this.usageTotal = {
104
+ usage: this.usageTotal.usage,
105
+ complete: false,
106
+ };
107
+ }
108
+ }
83
109
  for (const listener of this.listeners) {
84
110
  try {
85
111
  listener(event);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA0C,MAAM,YAAY,CAAC;AAG3E,OAAO,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,eAAe,EACf,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAe5B;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACd,EAAE,CAAS;IACX,GAAG,CAAS;IAEJ,KAAK,CAAQ;IACb,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,CAA2B;IAChC,GAAG,CAAa;IACzB,UAAU,CAAqB;IAC/B,aAAa,CAAU;IACvB,WAAW,GAAG,CAAC,CAAC;IAChB,gBAAgB,GAAG,KAAK,CAAC;IACzB,UAAU,CAAyB;IAE3C,YAAY,OAA4B;QACtC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,GAAG,OAAO,CAAC,KAAK;YAChB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,8DAA8D;IAC9D,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,KAAK;QACH,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,OAAO,GAAsC,EAAE;QAE/C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;oBAChC,OAAO,EAAE,IAAI,CAAC,UAAU;oBACxB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;iBACpE,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,mEAAmE;gBACnE,sEAAsE;gBACtE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,sBAAsB;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,KAAiB;QAChC,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,GAAG;oBAChB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;oBAC5B,QAAQ,EAAE,KAAK;iBAChB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,KAAoB;QACjC,IACE,IAAI,CAAC,KAAK,KAAK,SAAS;YACxB,CAAC,IAAI,CAAC,aAAa;YACnB,KAAK,CAAC,IAAI,KAAK,gBAAgB;YAC/B,KAAK,CAAC,IAAI,KAAK,uBAAuB,EACtC,CAAC;YACD,OAAO;QACT,CAAC;QACD,qEAAqE;QACrE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChD,gEAAgE;QAClE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /** Every shell call requires a positive user decision. */
2
+ export type ShellApproval = (command: string, signal?: AbortSignal) => Promise<boolean>;
3
+ /**
4
+ * Shell permission is scoped to the current CLI process. Interactive sessions
5
+ * install a per-command prompt; headless sessions deny unless the user passes
6
+ * the explicit session-wide approval flag.
7
+ */
8
+ export declare class ShellApprovalGate {
9
+ private readonly approveAll;
10
+ private handler;
11
+ constructor(approveAll?: boolean);
12
+ setHandler(handler: ShellApproval | undefined): void;
13
+ approve(command: string, signal?: AbortSignal): Promise<boolean>;
14
+ }
15
+ //# sourceMappingURL=approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/shell/approval.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF;;;;GAIG;AACH,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,OAAO,CAA4B;IAE3C,YAA6B,UAAU,UAAQ,EAAI;IAEnD,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAEnD;IAEK,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAKrE;CACF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shell permission is scoped to the current CLI process. Interactive sessions
3
+ * install a per-command prompt; headless sessions deny unless the user passes
4
+ * the explicit session-wide approval flag.
5
+ */
6
+ export class ShellApprovalGate {
7
+ approveAll;
8
+ handler;
9
+ constructor(approveAll = false) {
10
+ this.approveAll = approveAll;
11
+ }
12
+ setHandler(handler) {
13
+ this.handler = handler;
14
+ }
15
+ async approve(command, signal) {
16
+ if (signal?.aborted)
17
+ return false;
18
+ if (this.approveAll)
19
+ return true;
20
+ if (this.handler === undefined)
21
+ return false;
22
+ return (await this.handler(command, signal)) && signal?.aborted !== true;
23
+ }
24
+ }
25
+ //# sourceMappingURL=approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/shell/approval.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAGC,UAAU;IAF/B,OAAO,CAA4B;IAE3C,YAA6B,UAAU,GAAG,KAAK;0BAAlB,UAAU;IAAW,CAAC;IAEnD,UAAU,CAAC,OAAkC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,MAAoB;QACjD,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7C,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { ShellConfig } from "./config.js";
2
+ import type { ShellOperations } from "./types.js";
3
+ /**
4
+ * A deliberately constrained Docker invocation. The only host mount is the
5
+ * working directory; no home, Docker socket, API credentials or host network
6
+ * are made available to commands.
7
+ */
8
+ export declare const DEFAULT_SHELL_IMAGE = "node:22-alpine";
9
+ export interface DockerShellOptions {
10
+ readonly image?: string;
11
+ readonly dockerExecutable?: string;
12
+ readonly containerName?: string;
13
+ }
14
+ export declare function dockerShellConfig(cwd: string, options?: DockerShellOptions): ShellConfig;
15
+ /** Synchronous best-effort cleanup for normal process exit and signal handlers. */
16
+ export declare function killTrackedDockerContainers(docker?: string): void;
17
+ export declare function createDockerShellOperations(options?: DockerShellOptions): ShellOperations;
18
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/shell/docker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,WAAW,CA+B5F;AASD,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,MAAM,SAAW,GAAG,IAAI,CAQnE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,kBAAuB,GAAG,eAAe,CAsB7F"}
@@ -0,0 +1,83 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { spawnSync } from "node:child_process";
4
+ import { createLocalShellOperations } from "./local.js";
5
+ /**
6
+ * A deliberately constrained Docker invocation. The only host mount is the
7
+ * working directory; no home, Docker socket, API credentials or host network
8
+ * are made available to commands.
9
+ */
10
+ export const DEFAULT_SHELL_IMAGE = "node:22-alpine";
11
+ export function dockerShellConfig(cwd, options = {}) {
12
+ const workspace = realpathSync(cwd);
13
+ const image = options.image ?? DEFAULT_SHELL_IMAGE;
14
+ const docker = options.dockerExecutable ?? "docker";
15
+ if (!image || image.startsWith("-")) {
16
+ throw new TypeError("Invalid Docker image.");
17
+ }
18
+ const user = typeof process.getuid === "function"
19
+ ? `${process.getuid()}:${process.getgid?.() ?? process.getuid()}`
20
+ : "1000:1000";
21
+ return {
22
+ shell: docker,
23
+ args: [
24
+ "run", "--rm",
25
+ ...(options.containerName === undefined ? [] : ["--name", options.containerName]),
26
+ "--network", "none",
27
+ "--read-only",
28
+ "--cap-drop", "ALL",
29
+ "--security-opt", "no-new-privileges",
30
+ "--pids-limit", "64",
31
+ "--memory", "512m",
32
+ "--cpus", "2",
33
+ "--user", user,
34
+ "--tmpfs", "/tmp:rw,nosuid,nodev,size=64m",
35
+ "--mount", `type=bind,source=${workspace},target=/workspace`,
36
+ "--workdir", "/workspace",
37
+ "--env", "HOME=/tmp",
38
+ image, "sh", "-c",
39
+ ],
40
+ };
41
+ }
42
+ /**
43
+ * Reuse the existing streaming, timeout and process-tree cancellation logic.
44
+ * A missing Docker binary or daemon fails the command; there is never a host
45
+ * shell fallback.
46
+ */
47
+ const activeContainers = new Set();
48
+ /** Synchronous best-effort cleanup for normal process exit and signal handlers. */
49
+ export function killTrackedDockerContainers(docker = "docker") {
50
+ if (activeContainers.size === 0)
51
+ return;
52
+ const names = [...activeContainers];
53
+ activeContainers.clear();
54
+ spawnSync(docker, ["rm", "--force", ...names], {
55
+ stdio: "ignore",
56
+ timeout: 3_000,
57
+ });
58
+ }
59
+ export function createDockerShellOperations(options = {}) {
60
+ const docker = options.dockerExecutable ?? "docker";
61
+ return {
62
+ async exec(command, cwd, execOptions) {
63
+ const containerName = `chivgent-${randomUUID()}`;
64
+ activeContainers.add(containerName);
65
+ const runner = createLocalShellOperations({
66
+ resolveConfig: () => dockerShellConfig(cwd, { ...options, containerName }),
67
+ });
68
+ try {
69
+ return await runner.exec(command, cwd, execOptions);
70
+ }
71
+ finally {
72
+ activeContainers.delete(containerName);
73
+ // Stopping the docker CLI does not always stop its daemon-managed
74
+ // container. Force-remove by a unique name on every exit path.
75
+ spawnSync(docker, ["rm", "--force", containerName], {
76
+ stdio: "ignore",
77
+ timeout: 3_000,
78
+ });
79
+ }
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/shell/docker.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { type ShellOperations } from "./types.js";
3
3
  export declare function validateTimeoutSeconds(value: number): number;
4
4
  export interface LocalShellOptions {
5
5
  /** Resolved once per command so a shell installed mid-session is picked up. */
6
- readonly resolveConfig?: () => ShellConfig;
6
+ readonly resolveConfig?: (cwd: string) => ShellConfig;
7
7
  }
8
8
  /** Runs commands as child processes of this one. */
9
9
  export declare function createLocalShellOperations(options?: LocalShellOptions): ShellOperations;
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/shell/local.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAOnE,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AASpB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,WAAW,CAAC;CAC5C;AAED,oDAAoD;AACpD,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iBAAsB,GAC9B,eAAe,CA+EjB"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/shell/local.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAOnE,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AASpB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,CAAC;CACvD;AAED,oDAAoD;AACpD,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iBAAsB,GAC9B,eAAe,CA+EjB"}
@@ -29,7 +29,7 @@ export function createLocalShellOperations(options = {}) {
29
29
  if (!existsSync(cwd)) {
30
30
  throw new ShellUnavailableError(`Working directory does not exist: ${cwd}`);
31
31
  }
32
- const config = resolveConfig();
32
+ const config = resolveConfig(cwd);
33
33
  // detached makes the child a process group leader, which is what lets a
34
34
  // cancel kill its descendants too.
35
35
  const child = spawn(config.shell, [...config.args, command], {
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/shell/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/shell/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Tool, ToolContext, ToolOutput } from "./tool.js";
2
+ export declare class ApplyPatchTool implements Tool {
3
+ readonly name = "apply_patch";
4
+ readonly description: string;
5
+ readonly inputSchema: {
6
+ readonly type: "object";
7
+ readonly properties: {
8
+ readonly patch: {
9
+ readonly type: "string";
10
+ readonly description: "Complete Codex-style text patch. Use exact lines from read_file; keep enough context to uniquely locate each hunk.";
11
+ };
12
+ };
13
+ readonly required: readonly ["patch"];
14
+ readonly additionalProperties: false;
15
+ };
16
+ execute(input: unknown, context: ToolContext): Promise<ToolOutput>;
17
+ }
18
+ //# sourceMappingURL=apply-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patch.d.ts","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D,qBAAa,cAAe,YAAW,IAAI;IACzC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,SAG6G;IACjI,QAAQ,CAAC,WAAW;iBAClB,IAAI,EAAE,QAAQ;iBACd,UAAU;qBACR,KAAK;yBACH,IAAI,EAAE,QAAQ;yBACd,WAAW,EACT,oHAAoH;;;iBAG1H,QAAQ,YAAG,OAAO;iBAClB,oBAAoB;MACX;IAEL,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BvE;CACF"}
@@ -0,0 +1,53 @@
1
+ import { PatchError, parsePatch } from "../patch/parse.js";
2
+ import { WorkspaceError } from "../workspace.js";
3
+ export class ApplyPatchTool {
4
+ name = "apply_patch";
5
+ description = "Apply a multi-file text patch using *** Begin Patch / *** Add File:, *** Update File:, *** Delete File:, @@, and *** End Patch. " +
6
+ "Update hunks use a leading space for context, - for removed lines and + for added lines. " +
7
+ "Each context must match exactly once; all changes are checked before writing. No Move to, fuzzy matching, or binary patches.";
8
+ inputSchema = {
9
+ type: "object",
10
+ properties: {
11
+ patch: {
12
+ type: "string",
13
+ description: "Complete Codex-style text patch. Use exact lines from read_file; keep enough context to uniquely locate each hunk.",
14
+ },
15
+ },
16
+ required: ["patch"],
17
+ additionalProperties: false,
18
+ };
19
+ async execute(input, context) {
20
+ if (typeof input !== "object" || input === null || Array.isArray(input)) {
21
+ return { content: 'Invalid arguments. Expected {"patch":"*** Begin Patch\\n...\\n*** End Patch"}.', isError: true };
22
+ }
23
+ const record = input;
24
+ if (Object.keys(record).length !== 1 || typeof record.patch !== "string") {
25
+ return { content: 'Invalid arguments. Expected {"patch":"*** Begin Patch\\n...\\n*** End Patch"}.', isError: true };
26
+ }
27
+ if (context.workspace.applyPatch === undefined) {
28
+ return { content: "This workspace does not support apply_patch.", isError: true };
29
+ }
30
+ try {
31
+ const result = await context.workspace.applyPatch(record.patch, context.signal);
32
+ const summary = parsePatch(record.patch).map(change => {
33
+ if (change.kind === "add")
34
+ return `A ${change.path} (+${change.lines.length})`;
35
+ if (change.kind === "delete")
36
+ return `D ${change.path}`;
37
+ const plus = change.hunks.reduce((sum, hunk) => sum + hunk.added, 0);
38
+ const minus = change.hunks.reduce((sum, hunk) => sum + hunk.removed, 0);
39
+ return `M ${change.path} (+${plus}/-${minus}, ${change.hunks.length} hunk(s))`;
40
+ });
41
+ // The engine returns canonical file paths; the summary follows the
42
+ // validated patch's original file ordering for readable diff feedback.
43
+ return { content: `Patch applied (${summary.length} ${summary.length === 1 ? "file" : "files"}):\n${summary.join("\n")}`, isError: false };
44
+ }
45
+ catch (error) {
46
+ if (error instanceof PatchError || error instanceof WorkspaceError || error instanceof TypeError) {
47
+ return { content: error.message, isError: true };
48
+ }
49
+ throw error;
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=apply-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAClB,kIAAkI;QAClI,2FAA2F;QAC3F,8HAA8H,CAAC;IACxH,WAAW,GAAG;QACrB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,oHAAoH;aACvH;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,oBAAoB,EAAE,KAAK;KACnB,CAAC;IAEX,KAAK,CAAC,OAAO,CAAC,KAAc,EAAE,OAAoB;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,gFAAgF,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtH,CAAC;QACD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,EAAE,OAAO,EAAE,gFAAgF,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtH,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,8CAA8C,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACpD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;oBAAE,OAAO,KAAK,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAC/E,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACxE,OAAO,KAAK,MAAM,CAAC,IAAI,MAAM,IAAI,KAAK,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC;YACjF,CAAC,CAAC,CAAC;YACH,mEAAmE;YACnE,uEAAuE;YACvE,OAAO,EAAE,OAAO,EAAE,kBAAkB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC7I,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;gBACjG,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACnD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import type { Tool, ToolContext, ToolOutput } from "./tool.js";
2
+ import type { ShellApproval } from "../shell/approval.js";
2
3
  import { type ShellOperations } from "../shell/types.js";
3
4
  /** How often a running command may push an output snapshot. */
4
5
  export declare const OUTPUT_UPDATE_THROTTLE_MS = 100;
@@ -6,6 +7,8 @@ export interface BashToolOptions {
6
7
  readonly cwd: string;
7
8
  /** Swap in a container or SSH backend without touching the tool. */
8
9
  readonly operations?: ShellOperations;
10
+ /** A human decision (or explicit session-wide approval). Absent means deny. */
11
+ readonly approve?: ShellApproval;
9
12
  readonly maxLines?: number;
10
13
  readonly maxBytes?: number;
11
14
  readonly tempDirectory?: string;
@@ -31,6 +34,7 @@ export declare class BashTool implements Tool {
31
34
  };
32
35
  private readonly cwd;
33
36
  private readonly operations;
37
+ private readonly approve;
34
38
  private readonly maxLines?;
35
39
  private readonly maxBytes?;
36
40
  private readonly tempDirectory?;
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI/D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAyB7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,QAAS,YAAW,IAAI;IACnC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,gPAC2N;IAC/O,QAAQ,CAAC,WAAW;uBApCd,QAAQ;;qBAEZ,OAAO;yBACL,IAAI,EAAE,QAAQ;yBACd,WAAW,EACT,+EAA+E;;qBAEnF,OAAO;yBACL,IAAI,EAAE,QAAQ;yBACd,WAAW,EACT,uFAAuF;;;qCAGlF,SAAS;;MAuBe;IAEnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YAAY,OAAO,EAAE,eAAe,EAanC;IAEK,OAAO,CACX,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAmFrB;YAEa,MAAM;CAWrB"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAyB7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,QAAS,YAAW,IAAI;IACnC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,gPAC2N;IAC/O,QAAQ,CAAC,WAAW;uBAtCd,QAAQ;;qBAEZ,OAAO;yBACL,IAAI,EAAE,QAAQ;yBACd,WAAW,EACT,+EAA+E;;qBAEnF,OAAO;yBACL,IAAI,EAAE,QAAQ;yBACd,WAAW,EACT,uFAAuF;;;qCAGlF,SAAS;;MAyBe;IAEnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YAAY,OAAO,EAAE,eAAe,EAcnC;IAEK,OAAO,CACX,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAuGrB;YAEa,MAAM;CAWrB"}
@@ -1,7 +1,8 @@
1
- import { createLocalShellOperations, validateTimeoutSeconds } from "../shell/local.js";
1
+ import { validateTimeoutSeconds } from "../shell/local.js";
2
+ import { createDockerShellOperations } from "../shell/docker.js";
2
3
  import { OutputAccumulator } from "../shell/output.js";
3
4
  import { formatSize } from "../shell/truncate.js";
4
- import { ShellTimeoutError, ShellUnavailableError, } from "../shell/types.js";
5
+ import { ShellAbortError, ShellTimeoutError, ShellUnavailableError, } from "../shell/types.js";
5
6
  /** How often a running command may push an output snapshot. */
6
7
  export const OUTPUT_UPDATE_THROTTLE_MS = 100;
7
8
  const inputSchema = {
@@ -25,13 +26,15 @@ export class BashTool {
25
26
  inputSchema = inputSchema;
26
27
  cwd;
27
28
  operations;
29
+ approve;
28
30
  maxLines;
29
31
  maxBytes;
30
32
  tempDirectory;
31
33
  throttleMs;
32
34
  constructor(options) {
33
35
  this.cwd = options.cwd;
34
- this.operations = options.operations ?? createLocalShellOperations();
36
+ this.operations = options.operations ?? createDockerShellOperations();
37
+ this.approve = options.approve;
35
38
  if (options.maxLines !== undefined) {
36
39
  this.maxLines = options.maxLines;
37
40
  }
@@ -60,6 +63,28 @@ export class BashTool {
60
63
  isError: true,
61
64
  };
62
65
  }
66
+ if (context.signal?.aborted) {
67
+ throw new ShellAbortError();
68
+ }
69
+ // Approval is required even if the caller already exposed the bash tool.
70
+ // Non-interactive/remote callers have no implicit approval channel.
71
+ if (this.approve === undefined) {
72
+ return { content: "Shell command denied: explicit approval is required.", isError: true };
73
+ }
74
+ let approved;
75
+ try {
76
+ approved = await this.approve(parsed.command, context.signal);
77
+ }
78
+ catch (error) {
79
+ if (isAbortError(error) || context.signal?.aborted)
80
+ throw new ShellAbortError();
81
+ return { content: "Shell command denied: approval failed.", isError: true };
82
+ }
83
+ if (context.signal?.aborted)
84
+ throw new ShellAbortError();
85
+ if (!approved) {
86
+ return { content: "Shell command denied by user.", isError: true };
87
+ }
63
88
  const output = new OutputAccumulator({
64
89
  ...(this.maxLines === undefined ? {} : { maxLines: this.maxLines }),
65
90
  ...(this.maxBytes === undefined ? {} : { maxBytes: this.maxBytes }),
@@ -1 +1 @@
1
- {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Tool } from "./tool.js";
2
+ /**
3
+ * Keep the concurrency cap small. A model may request dozens of repo-wide
4
+ * searches, so Promise.all(all calls) would otherwise create unbounded work.
5
+ */
6
+ export declare const MAX_PARALLEL_READS = 4;
7
+ /**
8
+ * Only exact, built-in read tool implementations may run concurrently.
9
+ * Names and custom metadata are not sufficient evidence that an extension
10
+ * is free of side effects. Subclasses also remain exclusive, since they may
11
+ * override execute() to mutate state.
12
+ */
13
+ export declare function isParallelReadTool(tool: Tool | undefined): boolean;
14
+ //# sourceMappingURL=parallel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../src/tools/parallel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAMlE"}
@@ -0,0 +1,20 @@
1
+ import { ReadFileTool } from "./read-file.js";
2
+ import { ListFilesTool } from "./list-files.js";
3
+ import { SearchTextTool } from "./search-text.js";
4
+ /**
5
+ * Keep the concurrency cap small. A model may request dozens of repo-wide
6
+ * searches, so Promise.all(all calls) would otherwise create unbounded work.
7
+ */
8
+ export const MAX_PARALLEL_READS = 4;
9
+ /**
10
+ * Only exact, built-in read tool implementations may run concurrently.
11
+ * Names and custom metadata are not sufficient evidence that an extension
12
+ * is free of side effects. Subclasses also remain exclusive, since they may
13
+ * override execute() to mutate state.
14
+ */
15
+ export function isParallelReadTool(tool) {
16
+ return tool !== undefined && (tool.constructor === ReadFileTool ||
17
+ tool.constructor === ListFilesTool ||
18
+ tool.constructor === SearchTextTool);
19
+ }
20
+ //# sourceMappingURL=parallel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../src/tools/parallel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACvD,OAAO,IAAI,KAAK,SAAS,IAAI,CAC3B,IAAI,CAAC,WAAW,KAAK,YAAY;QACjC,IAAI,CAAC,WAAW,KAAK,aAAa;QAClC,IAAI,CAAC,WAAW,KAAK,cAAc,CACpC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Workspace } from "../workspace.js";
2
+ import type { PlanUpdate } from "./update-plan.js";
2
3
  export interface ToolDefinition {
3
4
  readonly name: string;
4
5
  readonly description: string;
@@ -16,11 +17,17 @@ export interface ToolContext {
16
17
  * the output so far, not a delta. Ignoring it is always valid.
17
18
  */
18
19
  readonly onUpdate?: (content: string) => void;
20
+ /** Successful control-tool plans reach the event stream, not the filesystem. */
21
+ readonly onPlanUpdate?: (update: PlanUpdate) => void;
19
22
  }
20
23
  export interface ToolOutput {
21
24
  readonly content: string;
22
25
  readonly isError: boolean;
23
26
  }
27
+ /** An intentional, user-safe failure message from a tool (including extensions). */
28
+ export declare class ToolExecutionError extends Error {
29
+ constructor(message: string);
30
+ }
24
31
  export interface Tool extends ToolDefinition {
25
32
  execute(argumentsValue: unknown, context: ToolContext): Promise<ToolOutput>;
26
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,IAAK,SAAQ,cAAc;IAC1C,OAAO,CACL,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,oFAAoF;AACpF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,MAAM,WAAW,IAAK,SAAQ,cAAc;IAC1C,OAAO,CACL,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB"}
@@ -1,2 +1,8 @@
1
- export {};
1
+ /** An intentional, user-safe failure message from a tool (including extensions). */
2
+ export class ToolExecutionError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "ToolExecutionError";
6
+ }
7
+ }
2
8
  //# sourceMappingURL=tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AA8BA,oFAAoF;AACpF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}