fixo-cli 1.0.3 → 2.0.0

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.

Potentially problematic release.


This version of fixo-cli might be problematic. Click here for more details.

Files changed (222) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +18 -14
  3. package/dist/agent/agent-client.d.ts +28 -6
  4. package/dist/agent/agent-client.d.ts.map +1 -1
  5. package/dist/agent/agent-client.js +118 -39
  6. package/dist/agent/agent-client.js.map +1 -1
  7. package/dist/agent/agent-pool.d.ts +55 -6
  8. package/dist/agent/agent-pool.d.ts.map +1 -1
  9. package/dist/agent/agent-pool.js +120 -20
  10. package/dist/agent/agent-pool.js.map +1 -1
  11. package/dist/agent/auto-verifier.d.ts +55 -0
  12. package/dist/agent/auto-verifier.d.ts.map +1 -0
  13. package/dist/agent/auto-verifier.js +50 -0
  14. package/dist/agent/auto-verifier.js.map +1 -0
  15. package/dist/agent/command-parser.d.ts +37 -0
  16. package/dist/agent/command-parser.d.ts.map +1 -1
  17. package/dist/agent/command-parser.js +473 -1
  18. package/dist/agent/command-parser.js.map +1 -1
  19. package/dist/agent/context-builder.d.ts +24 -0
  20. package/dist/agent/context-builder.d.ts.map +1 -0
  21. package/dist/agent/context-builder.js +197 -0
  22. package/dist/agent/context-builder.js.map +1 -0
  23. package/dist/agent/conversation.d.ts +32 -2
  24. package/dist/agent/conversation.d.ts.map +1 -1
  25. package/dist/agent/conversation.js +84 -9
  26. package/dist/agent/conversation.js.map +1 -1
  27. package/dist/agent/duration.d.ts +24 -0
  28. package/dist/agent/duration.d.ts.map +1 -0
  29. package/dist/agent/duration.js +42 -0
  30. package/dist/agent/duration.js.map +1 -0
  31. package/dist/agent/file-writing-rules.d.ts +19 -0
  32. package/dist/agent/file-writing-rules.d.ts.map +1 -0
  33. package/dist/agent/file-writing-rules.js +31 -0
  34. package/dist/agent/file-writing-rules.js.map +1 -0
  35. package/dist/agent/mcp-bridge.js +1 -1
  36. package/dist/agent/mcp-bridge.js.map +1 -1
  37. package/dist/agent/orchestrator.d.ts +45 -0
  38. package/dist/agent/orchestrator.d.ts.map +1 -1
  39. package/dist/agent/orchestrator.js +140 -3
  40. package/dist/agent/orchestrator.js.map +1 -1
  41. package/dist/agent/parser-adapter.d.ts +17 -0
  42. package/dist/agent/parser-adapter.d.ts.map +1 -1
  43. package/dist/agent/parser-adapter.js +311 -7
  44. package/dist/agent/parser-adapter.js.map +1 -1
  45. package/dist/agent/predictive-gate.d.ts.map +1 -1
  46. package/dist/agent/predictive-gate.js +4 -1
  47. package/dist/agent/predictive-gate.js.map +1 -1
  48. package/dist/agent/provider-cooldown.d.ts.map +1 -1
  49. package/dist/agent/provider-cooldown.js +3 -2
  50. package/dist/agent/provider-cooldown.js.map +1 -1
  51. package/dist/agent/providers-manager.d.ts +5 -0
  52. package/dist/agent/providers-manager.d.ts.map +1 -1
  53. package/dist/agent/providers-manager.js +119 -8
  54. package/dist/agent/providers-manager.js.map +1 -1
  55. package/dist/agent/repo-map.d.ts +18 -1
  56. package/dist/agent/repo-map.d.ts.map +1 -1
  57. package/dist/agent/repo-map.js +144 -54
  58. package/dist/agent/repo-map.js.map +1 -1
  59. package/dist/agent/retry.js +1 -2
  60. package/dist/agent/retry.js.map +1 -1
  61. package/dist/agent/single-agent.d.ts +13 -0
  62. package/dist/agent/single-agent.d.ts.map +1 -1
  63. package/dist/agent/single-agent.js +225 -37
  64. package/dist/agent/single-agent.js.map +1 -1
  65. package/dist/agent/skills.d.ts.map +1 -1
  66. package/dist/agent/skills.js +2 -1
  67. package/dist/agent/skills.js.map +1 -1
  68. package/dist/agent/subagent.js +2 -2
  69. package/dist/agent/subagent.js.map +1 -1
  70. package/dist/agent/task-router.d.ts +46 -0
  71. package/dist/agent/task-router.d.ts.map +1 -0
  72. package/dist/agent/task-router.js +352 -0
  73. package/dist/agent/task-router.js.map +1 -0
  74. package/dist/agent/telemetry.d.ts +29 -1
  75. package/dist/agent/telemetry.d.ts.map +1 -1
  76. package/dist/agent/telemetry.js +29 -11
  77. package/dist/agent/telemetry.js.map +1 -1
  78. package/dist/agent/tool-definitions.d.ts +3 -0
  79. package/dist/agent/tool-definitions.d.ts.map +1 -0
  80. package/dist/agent/tool-definitions.js +519 -0
  81. package/dist/agent/tool-definitions.js.map +1 -0
  82. package/dist/agent/tool-executor.d.ts +6 -1
  83. package/dist/agent/tool-executor.d.ts.map +1 -1
  84. package/dist/agent/tool-executor.js +99 -553
  85. package/dist/agent/tool-executor.js.map +1 -1
  86. package/dist/agent/tools/command-tools.d.ts +6 -0
  87. package/dist/agent/tools/command-tools.d.ts.map +1 -0
  88. package/dist/agent/tools/command-tools.js +104 -0
  89. package/dist/agent/tools/command-tools.js.map +1 -0
  90. package/dist/agent/tools/file-tools.d.ts +15 -0
  91. package/dist/agent/tools/file-tools.d.ts.map +1 -0
  92. package/dist/agent/tools/file-tools.js +551 -0
  93. package/dist/agent/tools/file-tools.js.map +1 -0
  94. package/dist/agent/tools/todo-tools.d.ts +3 -0
  95. package/dist/agent/tools/todo-tools.d.ts.map +1 -0
  96. package/dist/agent/tools/todo-tools.js +70 -0
  97. package/dist/agent/tools/todo-tools.js.map +1 -0
  98. package/dist/agent/web-impl.d.ts.map +1 -1
  99. package/dist/agent/web-impl.js +45 -0
  100. package/dist/agent/web-impl.js.map +1 -1
  101. package/dist/agent/worker-agent.d.ts +3 -1
  102. package/dist/agent/worker-agent.d.ts.map +1 -1
  103. package/dist/agent/worker-agent.js +56 -16
  104. package/dist/agent/worker-agent.js.map +1 -1
  105. package/dist/config.d.ts +253 -1
  106. package/dist/config.d.ts.map +1 -1
  107. package/dist/config.js +81 -1
  108. package/dist/config.js.map +1 -1
  109. package/dist/git/git-manager.d.ts +33 -2
  110. package/dist/git/git-manager.d.ts.map +1 -1
  111. package/dist/git/git-manager.js +111 -15
  112. package/dist/git/git-manager.js.map +1 -1
  113. package/dist/git/git-ops.d.ts.map +1 -1
  114. package/dist/git/git-ops.js +2 -1
  115. package/dist/git/git-ops.js.map +1 -1
  116. package/dist/index.js +89 -8
  117. package/dist/index.js.map +1 -1
  118. package/dist/lsp/lsp-manager.js +1 -1
  119. package/dist/lsp/lsp-manager.js.map +1 -1
  120. package/dist/model-outcomes.d.ts.map +1 -1
  121. package/dist/model-outcomes.js +2 -1
  122. package/dist/model-outcomes.js.map +1 -1
  123. package/dist/planner.d.ts +0 -9
  124. package/dist/planner.d.ts.map +1 -1
  125. package/dist/planner.js +0 -9
  126. package/dist/planner.js.map +1 -1
  127. package/dist/project-memory.d.ts +12 -1
  128. package/dist/project-memory.d.ts.map +1 -1
  129. package/dist/project-memory.js +8 -6
  130. package/dist/project-memory.js.map +1 -1
  131. package/dist/runtime/loop-mitigation.d.ts +119 -0
  132. package/dist/runtime/loop-mitigation.d.ts.map +1 -0
  133. package/dist/runtime/loop-mitigation.js +192 -0
  134. package/dist/runtime/loop-mitigation.js.map +1 -0
  135. package/dist/runtime/os-sandbox.d.ts +100 -0
  136. package/dist/runtime/os-sandbox.d.ts.map +1 -0
  137. package/dist/runtime/os-sandbox.js +246 -0
  138. package/dist/runtime/os-sandbox.js.map +1 -0
  139. package/dist/runtime/run-inventory.d.ts +17 -0
  140. package/dist/runtime/run-inventory.d.ts.map +1 -0
  141. package/dist/runtime/run-inventory.js +49 -0
  142. package/dist/runtime/run-inventory.js.map +1 -0
  143. package/dist/runtime/session-snapshots.d.ts +52 -2
  144. package/dist/runtime/session-snapshots.d.ts.map +1 -1
  145. package/dist/runtime/session-snapshots.js +76 -1
  146. package/dist/runtime/session-snapshots.js.map +1 -1
  147. package/dist/runtime/staging.d.ts.map +1 -1
  148. package/dist/runtime/staging.js +4 -1
  149. package/dist/runtime/staging.js.map +1 -1
  150. package/dist/runtime/task-session.d.ts +14 -0
  151. package/dist/runtime/task-session.d.ts.map +1 -1
  152. package/dist/runtime/task-session.js +26 -0
  153. package/dist/runtime/task-session.js.map +1 -1
  154. package/dist/setup-wizard.d.ts +11 -3
  155. package/dist/setup-wizard.d.ts.map +1 -1
  156. package/dist/setup-wizard.js +113 -15
  157. package/dist/setup-wizard.js.map +1 -1
  158. package/dist/types.d.ts +8 -0
  159. package/dist/types.d.ts.map +1 -1
  160. package/dist/ui/commands/context-commands.d.ts +7 -0
  161. package/dist/ui/commands/context-commands.d.ts.map +1 -0
  162. package/dist/ui/commands/context-commands.js +241 -0
  163. package/dist/ui/commands/context-commands.js.map +1 -0
  164. package/dist/ui/commands/index.d.ts +3 -0
  165. package/dist/ui/commands/index.d.ts.map +1 -0
  166. package/dist/ui/commands/index.js +46 -0
  167. package/dist/ui/commands/index.js.map +1 -0
  168. package/dist/ui/commands/info-commands.d.ts +15 -0
  169. package/dist/ui/commands/info-commands.d.ts.map +1 -0
  170. package/dist/ui/commands/info-commands.js +122 -0
  171. package/dist/ui/commands/info-commands.js.map +1 -0
  172. package/dist/ui/commands/model-commands.d.ts +5 -0
  173. package/dist/ui/commands/model-commands.d.ts.map +1 -0
  174. package/dist/ui/commands/model-commands.js +417 -0
  175. package/dist/ui/commands/model-commands.js.map +1 -0
  176. package/dist/ui/commands/session-commands.d.ts +5 -0
  177. package/dist/ui/commands/session-commands.d.ts.map +1 -0
  178. package/dist/ui/commands/session-commands.js +154 -0
  179. package/dist/ui/commands/session-commands.js.map +1 -0
  180. package/dist/ui/commands/task-commands.d.ts +8 -0
  181. package/dist/ui/commands/task-commands.d.ts.map +1 -0
  182. package/dist/ui/commands/task-commands.js +152 -0
  183. package/dist/ui/commands/task-commands.js.map +1 -0
  184. package/dist/ui/commands/types.d.ts +46 -0
  185. package/dist/ui/commands/types.d.ts.map +1 -0
  186. package/dist/ui/commands/types.js +2 -0
  187. package/dist/ui/commands/types.js.map +1 -0
  188. package/dist/ui/commands/workspace-commands.d.ts +8 -0
  189. package/dist/ui/commands/workspace-commands.d.ts.map +1 -0
  190. package/dist/ui/commands/workspace-commands.js +131 -0
  191. package/dist/ui/commands/workspace-commands.js.map +1 -0
  192. package/dist/ui/loading-animation.d.ts +24 -0
  193. package/dist/ui/loading-animation.d.ts.map +1 -0
  194. package/dist/ui/loading-animation.js +123 -0
  195. package/dist/ui/loading-animation.js.map +1 -0
  196. package/dist/ui/markdown-stream.js +2 -2
  197. package/dist/ui/markdown-stream.js.map +1 -1
  198. package/dist/ui/prompt.d.ts +7 -0
  199. package/dist/ui/prompt.d.ts.map +1 -1
  200. package/dist/ui/prompt.js +461 -1143
  201. package/dist/ui/prompt.js.map +1 -1
  202. package/dist/ui/render-primitives.d.ts +6 -0
  203. package/dist/ui/render-primitives.d.ts.map +1 -1
  204. package/dist/ui/render-primitives.js +30 -13
  205. package/dist/ui/render-primitives.js.map +1 -1
  206. package/dist/ui/render.d.ts.map +1 -1
  207. package/dist/ui/render.js +2 -0
  208. package/dist/ui/render.js.map +1 -1
  209. package/dist/ui/session-header.d.ts +13 -0
  210. package/dist/ui/session-header.d.ts.map +1 -1
  211. package/dist/ui/session-header.js +6 -0
  212. package/dist/ui/session-header.js.map +1 -1
  213. package/package.json +22 -4
  214. package/scripts/check-vendor-wasm.js +55 -0
  215. package/vendor/tree-sitter-bash.wasm +0 -0
  216. package/vendor/tree-sitter-go.wasm +0 -0
  217. package/vendor/tree-sitter-javascript.wasm +0 -0
  218. package/vendor/tree-sitter-python.wasm +0 -0
  219. package/vendor/tree-sitter-rust.wasm +0 -0
  220. package/vendor/tree-sitter-tsx.wasm +0 -0
  221. package/vendor/tree-sitter-typescript.wasm +0 -0
  222. package/vendor/tree-sitter.wasm +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-verifier.js","sourceRoot":"","sources":["../../src/agent/auto-verifier.ts"],"names":[],"mappings":"AA4BA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA0B;IACzD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAKD;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC9E,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,OAAO,CACL,yEAAyE;QACzE,mHAAmH;QACnH,YAAY,CACb,CAAC;AACJ,CAAC"}
@@ -1,6 +1,43 @@
1
1
  import { ParserFactory, type ParsedCommand } from './parser-adapter.js';
2
2
  export { ParserFactory };
3
3
  export type { ParsedCommand } from './parser-adapter.js';
4
+ /**
5
+ * Where in a command a write target was discovered. Used so error
6
+ * messages can explain *why* the path was flagged (e.g. "redirect"
7
+ * vs "sed -i" vs "python -c open(...,'w')").
8
+ */
9
+ export type WriteTargetKind = 'redirect' | 'sed-in-place' | 'tee' | 'mv-cp-dest' | 'interpreter-script';
10
+ export interface WriteTarget {
11
+ /** Raw path string as it appeared in the command. */
12
+ path: string;
13
+ /** What surface revealed this as a write target. */
14
+ kind: WriteTargetKind;
15
+ /** Optional binary that owned the write (e.g. "python3", "sed"). */
16
+ via?: string;
17
+ }
18
+ /**
19
+ * Detects file paths that a shell command will write to, even when
20
+ * the write happens via redirects, sed -i, tee, mv/cp, or interpreter
21
+ * `-c`/`-e` payloads.
22
+ *
23
+ * This is the shell-side counterpart to the platform-path lock that
24
+ * the surgical/write/edit tools already enforce. The point is to stop
25
+ * an agent from doing
26
+ * `python3 -c "open('src/foo.ts','w').write(...)"`
27
+ * to side-step `PlatformPathLockedError`.
28
+ *
29
+ * Implementation notes:
30
+ * - Operates on the raw command string (regex), not the parsed AST,
31
+ * because tree-sitter strips redirects from the per-command arg
32
+ * list. We deliberately accept some false positives here — the
33
+ * callsite turns them into a "needs human confirmation" prompt,
34
+ * never a silent allow.
35
+ * - For interpreter `-c`/`-e` payloads we extract quoted-string
36
+ * file targets via a conservative regex. Anything we cannot
37
+ * classify is reported as `interpreter-script` so the caller
38
+ * can decide whether to require confirmation.
39
+ */
40
+ export declare function extractWriteTargets(raw: string): WriteTarget[];
4
41
  /**
5
42
  * Parses a shell command string into individual binary and arguments sets.
6
43
  *
@@ -1 +1 @@
1
- {"version":3,"file":"command-parser.d.ts","sourceRoot":"","sources":["../../src/agent/command-parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAGjF;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoCD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmFxG;AAID;;;;;;GAMG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
1
+ {"version":3,"file":"command-parser.d.ts","sourceRoot":"","sources":["../../src/agent/command-parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,cAAc,GACd,KAAK,GACL,YAAY,GACZ,oBAAoB,CAAC;AAEzB,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,eAAe,CAAC;IACtB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAqF9D;AAqHD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAGjF;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAqLD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoMxG;AAID;;;;;;GAMG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
@@ -1,8 +1,235 @@
1
1
  import path from 'path';
2
2
  import os from 'os';
3
- import { WorkspaceGuard } from '../workspace-guard.js';
3
+ import { WorkspaceGuard, PlatformPathLockedError } from '../workspace-guard.js';
4
4
  import { ParserFactory } from './parser-adapter.js';
5
5
  export { ParserFactory };
6
+ /**
7
+ * Detects file paths that a shell command will write to, even when
8
+ * the write happens via redirects, sed -i, tee, mv/cp, or interpreter
9
+ * `-c`/`-e` payloads.
10
+ *
11
+ * This is the shell-side counterpart to the platform-path lock that
12
+ * the surgical/write/edit tools already enforce. The point is to stop
13
+ * an agent from doing
14
+ * `python3 -c "open('src/foo.ts','w').write(...)"`
15
+ * to side-step `PlatformPathLockedError`.
16
+ *
17
+ * Implementation notes:
18
+ * - Operates on the raw command string (regex), not the parsed AST,
19
+ * because tree-sitter strips redirects from the per-command arg
20
+ * list. We deliberately accept some false positives here — the
21
+ * callsite turns them into a "needs human confirmation" prompt,
22
+ * never a silent allow.
23
+ * - For interpreter `-c`/`-e` payloads we extract quoted-string
24
+ * file targets via a conservative regex. Anything we cannot
25
+ * classify is reported as `interpreter-script` so the caller
26
+ * can decide whether to require confirmation.
27
+ */
28
+ export function extractWriteTargets(raw) {
29
+ const out = [];
30
+ const seen = new Set();
31
+ const push = (t) => {
32
+ const key = `${t.kind}|${t.path}`;
33
+ if (seen.has(key))
34
+ return;
35
+ seen.add(key);
36
+ out.push(t);
37
+ };
38
+ // 1. Redirects: `> file`, `>> file`, `1> file`, `&> file`.
39
+ // Skip `2>&1`, `>&2` etc. by requiring a path-like token after.
40
+ const redirectRe = /(?:^|[\s;&|()])(?:&|\d)?>{1,2}\s*([^\s;&|()<>]+)/g;
41
+ for (const m of raw.matchAll(redirectRe)) {
42
+ const target = stripQuotes(m[1]);
43
+ // `>&1`, `>&2` are fd duplications, not file paths.
44
+ if (/^&\d+$/.test(target))
45
+ continue;
46
+ if (target.startsWith('/dev/'))
47
+ continue;
48
+ push({ path: target, kind: 'redirect' });
49
+ }
50
+ // 2. `tee [-a] file…` writes each non-flag arg.
51
+ const teeRe = /(?:^|[\s;&|()])tee\b([^;&|()]*)/g;
52
+ for (const m of raw.matchAll(teeRe)) {
53
+ for (const arg of splitArgs(m[1])) {
54
+ if (arg.startsWith('-'))
55
+ continue;
56
+ push({ path: stripQuotes(arg), kind: 'tee', via: 'tee' });
57
+ }
58
+ }
59
+ // 3. `sed -i[''] … file…` and `perl -i … file…` (in-place edit).
60
+ const inPlaceRe = /(?:^|[\s;&|()])(sed|perl|gawk|awk)\s+([^;&|()]*?-i\b[^;&|()]*)/g;
61
+ for (const m of raw.matchAll(inPlaceRe)) {
62
+ const bin = m[1];
63
+ const args = splitArgs(m[2]);
64
+ let sawScript = false;
65
+ for (const arg of args) {
66
+ if (arg.startsWith('-'))
67
+ continue;
68
+ // The first non-flag arg is the sed/perl script, not a file.
69
+ // Subsequent non-flag args are file targets.
70
+ if (!sawScript) {
71
+ sawScript = true;
72
+ continue;
73
+ }
74
+ push({ path: stripQuotes(arg), kind: 'sed-in-place', via: bin });
75
+ }
76
+ }
77
+ // 4. `mv SRC DEST` / `cp SRC DEST` — last positional is destination.
78
+ const mvCpRe = /(?:^|[\s;&|()])(mv|cp)\b([^;&|()]*)/g;
79
+ for (const m of raw.matchAll(mvCpRe)) {
80
+ const args = splitArgs(m[2]).filter((a) => !a.startsWith('-'));
81
+ if (args.length >= 2) {
82
+ const dest = stripQuotes(args[args.length - 1]);
83
+ push({ path: dest, kind: 'mv-cp-dest', via: m[1] });
84
+ }
85
+ }
86
+ // 5. Interpreter scripts: `python3 -c "..."`, `node -e "..."`, etc.
87
+ // We can't use the coarse segment splitter here because the
88
+ // script body often contains `(`, `)`, `|`, `&` etc. that the
89
+ // splitter would treat as command boundaries. Instead, find the
90
+ // interpreter+flag, then walk the string capturing the quoted
91
+ // payload that follows.
92
+ const scriptHostRe = /(?:^|[\s;&|()`])(python3?|node|perl|ruby|bash|sh|zsh)\s+(?:[^\s;&|()`]*\s+)?(-[ce])\b\s*/g;
93
+ for (const m of raw.matchAll(scriptHostRe)) {
94
+ const bin = m[1];
95
+ const payloadStart = m.index + m[0].length;
96
+ const payload = readQuotedPayloadAt(raw, payloadStart);
97
+ if (!payload)
98
+ continue;
99
+ for (const p of extractScriptWriteTargets(payload)) {
100
+ push({ path: p, kind: 'interpreter-script', via: bin });
101
+ }
102
+ }
103
+ // 6. Heredoc: `cat > file << EOF … EOF` already caught by #1, but
104
+ // `python3 << 'PYEOF' … PYEOF` smuggles writes inside the body.
105
+ const heredocRe = /<<\s*['"]?(\w+)['"]?\s*\n([\s\S]*?)\n\1\b/g;
106
+ for (const m of raw.matchAll(heredocRe)) {
107
+ for (const p of extractScriptWriteTargets(m[2])) {
108
+ push({ path: p, kind: 'interpreter-script', via: 'heredoc' });
109
+ }
110
+ }
111
+ return out;
112
+ }
113
+ function stripQuotes(s) {
114
+ const t = s.trim();
115
+ if (t.length < 2)
116
+ return t;
117
+ const f = t[0];
118
+ const l = t[t.length - 1];
119
+ if ((f === '"' || f === "'") && f === l)
120
+ return t.slice(1, -1);
121
+ return t;
122
+ }
123
+ function splitArgs(s) {
124
+ // Very small splitter: respects single/double quotes; we do not
125
+ // try to be a full shell lexer — the regexes above already
126
+ // sectioned the command on `;`, `&`, `|`, parens.
127
+ const out = [];
128
+ let buf = '';
129
+ let q = null;
130
+ for (const ch of s) {
131
+ if (q) {
132
+ buf += ch;
133
+ if (ch === q)
134
+ q = null;
135
+ continue;
136
+ }
137
+ if (ch === '"' || ch === "'") {
138
+ q = ch;
139
+ buf += ch;
140
+ continue;
141
+ }
142
+ if (/\s/.test(ch)) {
143
+ if (buf) {
144
+ out.push(buf);
145
+ buf = '';
146
+ }
147
+ continue;
148
+ }
149
+ buf += ch;
150
+ }
151
+ if (buf)
152
+ out.push(buf);
153
+ return out;
154
+ }
155
+ function extractQuotedPayload(s) {
156
+ // Capture the first single- or double-quoted block. Falls back to
157
+ // nothing if the command spans across our coarse splitter and the
158
+ // payload is malformed — that's fine; the heredoc branch handles
159
+ // the remaining cases.
160
+ const dq = s.match(/"([\s\S]*?)"/);
161
+ if (dq)
162
+ return dq[1];
163
+ const sq = s.match(/'([\s\S]*?)'/);
164
+ if (sq)
165
+ return sq[1];
166
+ return null;
167
+ }
168
+ /**
169
+ * Read a single-, double-, or backtick-quoted string starting at
170
+ * `start` (or skip leading whitespace first). Backslash escapes
171
+ * are honoured so that `\"` inside a `"…"` block doesn't terminate
172
+ * the payload. Returns the inner contents on success, `null` if no
173
+ * quoted payload was found.
174
+ */
175
+ function readQuotedPayloadAt(raw, start) {
176
+ let i = start;
177
+ while (i < raw.length && /\s/.test(raw[i]))
178
+ i++;
179
+ if (i >= raw.length)
180
+ return null;
181
+ const q = raw[i];
182
+ if (q !== '"' && q !== "'" && q !== '`')
183
+ return null;
184
+ i++;
185
+ let out = '';
186
+ while (i < raw.length) {
187
+ const ch = raw[i];
188
+ if (ch === '\\' && i + 1 < raw.length) {
189
+ out += raw[i + 1];
190
+ i += 2;
191
+ continue;
192
+ }
193
+ if (ch === q)
194
+ return out;
195
+ out += ch;
196
+ i++;
197
+ }
198
+ return out; // unterminated — be lenient
199
+ }
200
+ function extractScriptWriteTargets(script) {
201
+ const targets = new Set();
202
+ // Python: open('X','w'), open("X", "w"), Path('X').write_text(...)
203
+ const pyOpen = /open\s*\(\s*['"]([^'"]+)['"]\s*,\s*['"][wax][+bt]*['"]/g;
204
+ for (const m of script.matchAll(pyOpen))
205
+ targets.add(m[1]);
206
+ const pyPath = /Path\s*\(\s*['"]([^'"]+)['"]\s*\)\s*\.\s*write_(text|bytes)\b/g;
207
+ for (const m of script.matchAll(pyPath))
208
+ targets.add(m[1]);
209
+ // Node: fs.writeFile(Sync), fs.appendFile(Sync), writeFile(Sync),
210
+ // fs.createWriteStream, fs.promises.writeFile
211
+ const nodeWrite = /(?:fs(?:\.promises)?\.)?(?:writeFile(?:Sync)?|appendFile(?:Sync)?|createWriteStream)\s*\(\s*['"]([^'"]+)['"]/g;
212
+ for (const m of script.matchAll(nodeWrite))
213
+ targets.add(m[1]);
214
+ // Perl: open(FH, '>', 'X') or open(FH, '>X')
215
+ const perl1 = /open\s*\(\s*\w+\s*,\s*['"]>\s*([^'"]+)['"]/g;
216
+ for (const m of script.matchAll(perl1))
217
+ targets.add(m[1]);
218
+ const perl2 = /open\s*\(\s*\w+\s*,\s*['"]>+['"]\s*,\s*['"]([^'"]+)['"]/g;
219
+ for (const m of script.matchAll(perl2))
220
+ targets.add(m[1]);
221
+ // Ruby: File.open('X','w'), File.write('X', ...)
222
+ const ruby = /File\s*\.\s*(?:open\s*\(\s*['"]([^'"]+)['"]\s*,\s*['"][wax][+bt]*['"]|write\s*\(\s*['"]([^'"]+)['"])/g;
223
+ for (const m of script.matchAll(ruby))
224
+ targets.add(m[1] ?? m[2]);
225
+ // Embedded shell redirects inside the script body.
226
+ for (const m of script.matchAll(/(?:^|[\s;&|()])(?:&|\d)?>{1,2}\s*([^\s;&|()<>]+)/g)) {
227
+ const t = stripQuotes(m[1]);
228
+ if (!/^&\d+$/.test(t) && !t.startsWith('/dev/'))
229
+ targets.add(t);
230
+ }
231
+ return [...targets];
232
+ }
6
233
  /**
7
234
  * Parses a shell command string into individual binary and arguments sets.
8
235
  *
@@ -23,6 +250,72 @@ const DANGEROUS_MODIFIERS = new Set([
23
250
  const DANGEROUS_READERS = new Set([
24
251
  'cat', 'less', 'more', 'grep', 'head', 'tail'
25
252
  ]);
253
+ const KNOWN_SCAFFOLDERS = [
254
+ {
255
+ bin: 'npx',
256
+ isScaffolder: (args) => args.length > 0 && args[0].startsWith('create-'),
257
+ extractTargetPath: (args) => {
258
+ const posArgs = args.filter(a => !a.startsWith('-'));
259
+ return posArgs.length > 1 ? posArgs[1] : null;
260
+ }
261
+ },
262
+ {
263
+ bin: 'npm',
264
+ isScaffolder: (args) => args.length > 0 && (args[0] === 'create' || args[0] === 'init'),
265
+ extractTargetPath: (args) => {
266
+ const posArgs = args.filter(a => !a.startsWith('-'));
267
+ return posArgs.length > 2 ? posArgs[2] : null;
268
+ }
269
+ },
270
+ {
271
+ bin: 'yarn',
272
+ isScaffolder: (args) => args.length > 0 && args[0] === 'create',
273
+ extractTargetPath: (args) => {
274
+ const posArgs = args.filter(a => !a.startsWith('-'));
275
+ return posArgs.length > 2 ? posArgs[2] : null;
276
+ }
277
+ },
278
+ {
279
+ bin: 'pnpm',
280
+ isScaffolder: (args) => args.length > 0 && args[0] === 'create',
281
+ extractTargetPath: (args) => {
282
+ const posArgs = args.filter(a => !a.startsWith('-'));
283
+ return posArgs.length > 2 ? posArgs[2] : null;
284
+ }
285
+ },
286
+ {
287
+ bin: 'git',
288
+ isScaffolder: (args) => args.length > 0 && args[0] === 'clone',
289
+ extractTargetPath: (args) => {
290
+ const posArgs = args.filter(a => !a.startsWith('-'));
291
+ if (posArgs.length > 2)
292
+ return posArgs[2];
293
+ if (posArgs.length === 2) {
294
+ const url = posArgs[1];
295
+ let base = url.split('/').pop() || '';
296
+ if (base.endsWith('.git'))
297
+ base = base.slice(0, -4);
298
+ return base || null;
299
+ }
300
+ return null;
301
+ }
302
+ },
303
+ {
304
+ bin: 'degit',
305
+ isScaffolder: () => true,
306
+ extractTargetPath: (args) => {
307
+ const posArgs = args.filter(a => !a.startsWith('-'));
308
+ if (posArgs.length > 1)
309
+ return posArgs[1];
310
+ if (posArgs.length === 1) {
311
+ const repo = posArgs[0];
312
+ const parts = repo.split('/');
313
+ return parts.length > 0 ? parts[parts.length - 1] : null;
314
+ }
315
+ return null;
316
+ }
317
+ }
318
+ ];
26
319
  /**
27
320
  * System binaries that the agent is permitted to invoke even when
28
321
  * referenced via an absolute or workspace-relative path that resolves
@@ -48,6 +341,75 @@ function unquote(str) {
48
341
  }
49
342
  return str;
50
343
  }
344
+ function expandHome(p) {
345
+ if (p === '~')
346
+ return os.homedir();
347
+ if (p.startsWith('~/') || p.startsWith('~\\')) {
348
+ return path.join(os.homedir(), p.slice(2));
349
+ }
350
+ return p;
351
+ }
352
+ /**
353
+ * Phase 1a — value-arg-aware positional extraction.
354
+ *
355
+ * Given the raw arg list of a command, return the positional args
356
+ * (i.e. NOT flags AND NOT the value of a known value-taking flag).
357
+ *
358
+ * Without this, `find . -type f` would expose `f` as a positional —
359
+ * the directory-creation heuristic then mistakes it for a new
360
+ * directory name. The list covers the value-taking flags of the
361
+ * common POSIX inspection tools (`find`, `grep`, `awk`, etc.) that
362
+ * are most often confused.
363
+ */
364
+ const VALUE_TAKING_FLAGS = new Set([
365
+ // `find` predicates that consume the next arg
366
+ '-type', '-name', '-iname', '-path', '-ipath', '-regex', '-iregex',
367
+ '-perm', '-newer', '-mtime', '-atime', '-ctime', '-mmin', '-amin', '-cmin',
368
+ '-size', '-user', '-group', '-uid', '-gid',
369
+ '-maxdepth', '-mindepth', '-depth',
370
+ '-exec', '-execdir', '-ok', '-okdir',
371
+ '-printf', '-fprintf', '-fprint',
372
+ // grep / ripgrep style
373
+ '-e', '-f', '--include', '--exclude', '--include-dir', '--exclude-dir',
374
+ '--max-count', '--max-depth', '--context', '--before-context', '--after-context',
375
+ // common short flags that take a value
376
+ '-A', '-B', '-C', '-o', '-n',
377
+ // sed/awk
378
+ '-F',
379
+ ]);
380
+ function stripFlagValues(args) {
381
+ const out = [];
382
+ for (let i = 0; i < args.length; i++) {
383
+ const a = args[i];
384
+ if (a.startsWith('-')) {
385
+ // If this is a known value-taking flag AND there's a next arg
386
+ // that isn't itself a flag, skip the next arg too.
387
+ if (VALUE_TAKING_FLAGS.has(a) && i + 1 < args.length && !args[i + 1].startsWith('-')) {
388
+ i++; // consume the value
389
+ }
390
+ continue;
391
+ }
392
+ out.push(a);
393
+ }
394
+ return out;
395
+ }
396
+ function describeKind(t) {
397
+ switch (t.kind) {
398
+ case 'redirect': return 'shell redirect (>, >>)';
399
+ case 'sed-in-place': return `${t.via ?? 'sed'} -i in-place edit`;
400
+ case 'tee': return 'tee';
401
+ case 'mv-cp-dest': return `${t.via ?? 'mv/cp'} destination`;
402
+ case 'interpreter-script':
403
+ return `${t.via ?? 'interpreter'} -c/-e script payload`;
404
+ }
405
+ }
406
+ function isSensitiveFilename(filename, fullPath) {
407
+ return (filename === '.env' ||
408
+ filename.includes('.env.') ||
409
+ filename === 'id_rsa' ||
410
+ filename === 'credentials' ||
411
+ (filename === 'config' && fullPath.includes('.aws')));
412
+ }
51
413
  /**
52
414
  * Checks whether a shell command is safe to execute based on active path safety rules.
53
415
  * Flags modifications outside the workspace root and checks for sensitive file access.
@@ -55,6 +417,50 @@ function unquote(str) {
55
417
  export async function isCommandSafe(command, workspaceRoot) {
56
418
  const parsed = await parseShellCommand(command);
57
419
  const guard = new WorkspaceGuard(workspaceRoot);
420
+ // ── Step 0: shell-side write-target scan ─────────────────────────
421
+ // Catch cat > / sed -i / tee / mv / cp / python -c / heredoc smuggling
422
+ // *before* the per-command AST loop, because tree-sitter strips
423
+ // redirects from the per-command arg list. These are the patterns
424
+ // the agent has historically used to bypass PlatformPathLockedError.
425
+ for (const target of extractWriteTargets(command)) {
426
+ const cleaned = expandHome(stripQuotes(target.path));
427
+ const resolved = path.resolve(workspaceRoot, cleaned);
428
+ // a. Outside workspace? Hard reject.
429
+ if (!guard.isInside(resolved)) {
430
+ return {
431
+ safe: false,
432
+ reason: `Shell write blocked: ${describeKind(target)} targets a path outside the workspace (${target.path})`,
433
+ affectedPath: resolved,
434
+ };
435
+ }
436
+ // b. Inside the platform's own runtime? Hard reject with the
437
+ // same message the surgical/write tools surface, so the agent
438
+ // sees an identical signal regardless of which tool it tried.
439
+ try {
440
+ guard.assertNotPlatformPath(resolved);
441
+ }
442
+ catch (err) {
443
+ if (err instanceof PlatformPathLockedError) {
444
+ return {
445
+ safe: false,
446
+ reason: `Shell write blocked: ${describeKind(target)} would modify a Fixo CLI ` +
447
+ `core architecture file (${err.relative}). Use the write_file or ` +
448
+ `surgical_edit tool instead — shell file-writing is sandboxed.`,
449
+ affectedPath: err.resolved,
450
+ };
451
+ }
452
+ throw err;
453
+ }
454
+ // c. Sensitive credential file? Same rules as DANGEROUS_MODIFIERS.
455
+ const filename = path.basename(resolved).toLowerCase();
456
+ if (isSensitiveFilename(filename, resolved)) {
457
+ return {
458
+ safe: false,
459
+ reason: `Shell write blocked: ${describeKind(target)} targets a sensitive credentials file (${filename})`,
460
+ affectedPath: resolved,
461
+ };
462
+ }
463
+ }
58
464
  for (const cmd of parsed) {
59
465
  const binaryLower = cmd.binary.toLowerCase();
60
466
  // Compare per-arg safety checks against the basename so a binary
@@ -76,6 +482,72 @@ export async function isCommandSafe(command, workspaceRoot) {
76
482
  };
77
483
  }
78
484
  }
485
+ // Identify scaffolders and extract target path
486
+ const scaffolder = KNOWN_SCAFFOLDERS.find(s => s.bin === binBasename);
487
+ if (scaffolder && scaffolder.isScaffolder(cmd.arguments)) {
488
+ const targetPath = scaffolder.extractTargetPath(cmd.arguments);
489
+ if (targetPath) {
490
+ const cleanArg = unquote(targetPath);
491
+ // Expand home paths
492
+ let targetFullPath = cleanArg;
493
+ if (cleanArg === '~') {
494
+ targetFullPath = os.homedir();
495
+ }
496
+ else if (cleanArg.startsWith('~/') || cleanArg.startsWith('~\\')) {
497
+ targetFullPath = path.join(os.homedir(), cleanArg.slice(2));
498
+ }
499
+ const resolved = path.resolve(workspaceRoot, targetFullPath);
500
+ if (!guard.isInside(resolved)) {
501
+ return {
502
+ safe: false,
503
+ reason: `Scaffolding command '${cmd.binary}' attempts to create a project outside the workspace root (${targetPath})`,
504
+ affectedPath: resolved
505
+ };
506
+ }
507
+ }
508
+ }
509
+ else {
510
+ // Unknown command that might be directory-creating.
511
+ //
512
+ // Phase 1a — the original heuristic flagged every bare positional
513
+ // arg matching /^[a-zA-Z0-9_-]+$/ as "looks like a new directory".
514
+ // Two bugs:
515
+ // 1. Standard POSIX inspection tools (`find`, `awk`, `sed`, etc.)
516
+ // were not in the non-scaffolder allowlist, so they fell into
517
+ // this branch.
518
+ // 2. Value-args of known flags (`-type f`, `-name foo`) were
519
+ // treated as positional. `find . -type f` flagged `f` as a
520
+ // new directory name. Comically wrong; observed in the
521
+ // June 22, 2026 log session.
522
+ //
523
+ // Fix: extend the allowlist for tools known never to create
524
+ // directories from a bare arg, AND strip value-args of known
525
+ // value-taking flags before computing positionals.
526
+ const COMMON_NON_SCAFFOLDERS = new Set([
527
+ 'echo', 'git', 'node', 'npm', 'npx', 'yarn', 'pnpm', 'bash', 'sh',
528
+ 'cat', 'grep', 'mkdir', 'rm', 'ls', 'cd', 'pwd', 'mv', 'cp', 'touch',
529
+ 'python', 'python3', 'go', 'cargo', 'docker', 'docker-compose',
530
+ // Phase 1a additions — standard POSIX inspection/transform tools
531
+ // that take bare args as filters or input files, never as new
532
+ // directory targets.
533
+ 'find', 'awk', 'sed', 'xargs', 'jq', 'tar', 'head', 'tail', 'sort',
534
+ 'uniq', 'wc', 'tr', 'cut', 'tee', 'less', 'more', 'file', 'stat',
535
+ 'basename', 'dirname', 'readlink', 'which', 'whereis',
536
+ ]);
537
+ if (!COMMON_NON_SCAFFOLDERS.has(binBasename) && !DANGEROUS_MODIFIERS.has(binBasename) && !DANGEROUS_READERS.has(binBasename) && cmd.arguments.length > 0) {
538
+ const positionalArgs = stripFlagValues(cmd.arguments);
539
+ if (positionalArgs.length > 0) {
540
+ const lastArg = unquote(positionalArgs[positionalArgs.length - 1]);
541
+ if (lastArg.match(/^[a-zA-Z0-9_-]+$/) && !lastArg.startsWith('./') && !lastArg.startsWith('/') && !lastArg.startsWith('~')) {
542
+ return {
543
+ safe: false,
544
+ reason: `Command '${cmd.binary}' looks like it might create a new directory ('${lastArg}'). Please confirm execution.`,
545
+ affectedPath: path.resolve(workspaceRoot, lastArg)
546
+ };
547
+ }
548
+ }
549
+ }
550
+ }
79
551
  for (const arg of cmd.arguments) {
80
552
  if (arg.startsWith('-'))
81
553
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"command-parser.js","sourceRoot":"","sources":["../../src/agent/command-parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;IAC/C,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAQD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO;CAC1E,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAC9C,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI;CACxE,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,aAAqB;IACxE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7C,iEAAiE;QACjE,mEAAmE;QACnE,wDAAwD;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAEtE,8DAA8D;QAC9D,mEAAmE;QACnE,oEAAoE;QACpE,sEAAsE;QACtE,2BAA2B;QAC3B,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9E,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,wEAAwE,GAAG,CAAC,MAAM,EAAE;oBAC5F,YAAY,EAAE,WAAW;iBAC1B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC;YACtH,IAAI,CAAC,aAAa;gBAAE,SAAS;YAE7B,oBAAoB;YACpB,IAAI,UAAU,GAAG,QAAQ,CAAC;YAC1B,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrB,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAEzD,+BAA+B;YAC/B,IAAI,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,gEAAgE;wBAC9F,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,uCAAuC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,QAAQ,KAAK,MAAM;gBACnB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC1B,QAAQ,KAAK,QAAQ;gBACrB,QAAQ,KAAK,aAAa;gBAC1B,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAEzE,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBACzC,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,sDAAsD,QAAQ,EAAE;wBAC9F,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;gBACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;oBACjE,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,oDAAoD,QAAQ,EAAE;wBAC5F,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,oEAAoE;AAEpE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"command-parser.js","sourceRoot":"","sources":["../../src/agent/command-parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,CAAC;AAwBzB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAc,EAAQ,EAAE;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,2DAA2D;IAC3D,mEAAmE;IACnE,MAAM,UAAU,GAAG,mDAAmD,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,oDAAoD;QACpD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,SAAS;QACpC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QACzC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,gDAAgD;IAChD,MAAM,KAAK,GAAG,kCAAkC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,MAAM,SAAS,GAAG,iEAAiE,CAAC;IACpF,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,6DAA6D;YAC7D,6CAA6C;YAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,MAAM,MAAM,GAAG,sCAAsC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,+DAA+D;IAC/D,iEAAiE;IACjE,mEAAmE;IACnE,iEAAiE;IACjE,2BAA2B;IAC3B,MAAM,YAAY,GAAG,2FAA2F,CAAC;IACjH,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,YAAY,GAAG,CAAC,CAAC,KAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,KAAK,MAAM,CAAC,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,mEAAmE;IACnE,MAAM,SAAS,GAAG,4CAA4C,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,gEAAgE;IAChE,2DAA2D;IAC3D,kDAAkD;IAClD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAqB,IAAI,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC;YACN,GAAG,IAAI,EAAE,CAAC;YACV,IAAI,EAAE,KAAK,CAAC;gBAAE,CAAC,GAAG,IAAI,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,CAAC,GAAG,EAAE,CAAC;YACP,GAAG,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,GAAG,GAAG,EAAE,CAAC;YACX,CAAC;YACD,SAAS;QACX,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,GAAG;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAS;IACrC,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,uBAAuB;IACvB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAa;IACrD,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,CAAC,EAAE,CAAC;IAChD,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACrD,CAAC,EAAE,CAAC;IACJ,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YACtC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACzB,GAAG,IAAI,EAAE,CAAC;QACV,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,4BAA4B;AAC1C,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,mEAAmE;IACnE,MAAM,MAAM,GAAG,yDAAyD,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,gEAAgE,CAAC;IAChF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,kEAAkE;IAClE,8CAA8C;IAC9C,MAAM,SAAS,GACb,+GAA+G,CAAC;IAClH,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,6CAA6C;IAC7C,MAAM,KAAK,GAAG,6CAA6C,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,0DAA0D,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1D,iDAAiD;IACjD,MAAM,IAAI,GACR,uGAAuG,CAAC;IAC1G,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,mDAAmD;IACnD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,mDAAmD,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;IAC/C,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAQD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO;CAC1E,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAC9C,CAAC,CAAC;AAQH,MAAM,iBAAiB,GAA2B;IAChD;QACE,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;QACxE,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC;KACF;IACD;QACE,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;QACvF,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC;KACF;IACD;QACE,GAAG,EAAE,MAAM;QACX,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC/D,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC;KACF;IACD;QACE,GAAG,EAAE,MAAM;QACX,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC/D,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC;KACF;IACD;QACE,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO;QAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,OAAO,IAAI,IAAI,IAAI,CAAC;YACtB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,GAAG,EAAE,OAAO;QACZ,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;QACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;CACF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI;CACxE,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACtD,8CAA8C;IAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS;IAClE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IAC1E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;IAC1C,WAAW,EAAE,WAAW,EAAE,QAAQ;IAClC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ;IACpC,SAAS,EAAE,UAAU,EAAE,SAAS;IAChC,uBAAuB;IACvB,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe;IACtE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB;IAChF,uCAAuC;IACvC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC5B,UAAU;IACV,IAAI;CACL,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,IAAuB;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,8DAA8D;YAC9D,mDAAmD;YACnD,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrF,CAAC,EAAE,CAAC,CAAC,oBAAoB;YAC3B,CAAC;YACD,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,CAAc;IAClC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,UAAU,CAAC,CAAC,OAAO,wBAAwB,CAAC;QACjD,KAAK,cAAc,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,mBAAmB,CAAC;QACjE,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;QACzB,KAAK,YAAY,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,OAAO,cAAc,CAAC;QAC5D,KAAK,oBAAoB;YACvB,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,aAAa,uBAAuB,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,QAAgB;IAC7D,OAAO,CACL,QAAQ,KAAK,MAAM;QACnB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1B,QAAQ,KAAK,QAAQ;QACrB,QAAQ,KAAK,aAAa;QAC1B,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,aAAqB;IACxE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;IAEhD,oEAAoE;IACpE,uEAAuE;IACvE,gEAAgE;IAChE,kEAAkE;IAClE,qEAAqE;IACrE,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEtD,qCAAqC;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,wBAAwB,YAAY,CAAC,MAAM,CAAC,0CAA0C,MAAM,CAAC,IAAI,GAAG;gBAC5G,YAAY,EAAE,QAAQ;aACvB,CAAC;QACJ,CAAC;QAED,6DAA6D;QAC7D,iEAAiE;QACjE,iEAAiE;QACjE,IAAI,CAAC;YACH,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,MAAM,EACJ,wBAAwB,YAAY,CAAC,MAAM,CAAC,2BAA2B;wBACvE,2BAA2B,GAAG,CAAC,QAAQ,2BAA2B;wBAClE,+DAA+D;oBACjE,YAAY,EAAE,GAAG,CAAC,QAAQ;iBAC3B,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,mEAAmE;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,wBAAwB,YAAY,CAAC,MAAM,CAAC,0CAA0C,QAAQ,GAAG;gBACzG,YAAY,EAAE,QAAQ;aACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7C,iEAAiE;QACjE,mEAAmE;QACnE,wDAAwD;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAEtE,8DAA8D;QAC9D,mEAAmE;QACnE,oEAAoE;QACpE,sEAAsE;QACtE,2BAA2B;QAC3B,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9E,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,wEAAwE,GAAG,CAAC,MAAM,EAAE;oBAC5F,YAAY,EAAE,WAAW;iBAC1B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC;QACtE,IAAI,UAAU,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrC,oBAAoB;gBACpB,IAAI,cAAc,GAAG,QAAQ,CAAC;gBAC9B,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;oBACrB,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gBAChC,CAAC;qBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnE,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;gBAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,wBAAwB,GAAG,CAAC,MAAM,8DAA8D,UAAU,GAAG;wBACrH,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,EAAE;YACF,kEAAkE;YAClE,mEAAmE;YACnE,YAAY;YACZ,oEAAoE;YACpE,mEAAmE;YACnE,oBAAoB;YACpB,+DAA+D;YAC/D,gEAAgE;YAChE,4DAA4D;YAC5D,kCAAkC;YAClC,EAAE;YACF,4DAA4D;YAC5D,6DAA6D;YAC7D,mDAAmD;YACnD,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;gBACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI;gBACjE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO;gBACpE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB;gBAC9D,iEAAiE;gBACjE,8DAA8D;gBAC9D,qBAAqB;gBACrB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;gBAClE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;gBAChE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;aACtD,CAAC,CAAC;YACH,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzJ,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACnE,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3H,OAAO;4BACL,IAAI,EAAE,KAAK;4BACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,kDAAkD,OAAO,+BAA+B;4BACtH,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;yBACnD,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC;YACtH,IAAI,CAAC,aAAa;gBAAE,SAAS;YAE7B,oBAAoB;YACpB,IAAI,UAAU,GAAG,QAAQ,CAAC;YAC1B,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrB,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAEzD,+BAA+B;YAC/B,IAAI,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,gEAAgE;wBAC9F,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,uCAAuC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,QAAQ,KAAK,MAAM;gBACnB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC1B,QAAQ,KAAK,QAAQ;gBACrB,QAAQ,KAAK,aAAa;gBAC1B,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAEzE,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBACzC,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,sDAAsD,QAAQ,EAAE;wBAC9F,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;gBACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;oBACjE,OAAO;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,oDAAoD,QAAQ,EAAE;wBAC5F,YAAY,EAAE,QAAQ;qBACvB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,oEAAoE;AAEpE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { LspManager } from '../lsp/lsp-manager.js';
2
+ /** A file the run intends to mutate; symbols may be left implicit. */
3
+ export interface ReferenceTarget {
4
+ /** Absolute path to the file to inspect. */
5
+ file: string;
6
+ /**
7
+ * Optional explicit list of symbol names to look up. When omitted,
8
+ * the helper extracts top-level exported symbols from the file
9
+ * (capped at {@link MAX_SYMBOLS_PER_FILE}) and uses those.
10
+ */
11
+ symbols?: string[];
12
+ }
13
+ /**
14
+ * Build a markdown block describing cross-file references for the
15
+ * given targets. Returns an empty string when no targets, no LSP
16
+ * support, or no references were found — making this safe to splice
17
+ * unconditionally into a system prompt.
18
+ *
19
+ * `getLspManager` is taken as a callable rather than imported
20
+ * directly so this module stays out of the tool-executor's import
21
+ * cycle and is testable with a stub.
22
+ */
23
+ export declare function gatherReferencesForTargets(cwd: string, targets: ReferenceTarget[], getLspManager: () => LspManager | null): Promise<string>;
24
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/agent/context-builder.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAQD;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,MAAM,UAAU,GAAG,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAmFjB"}