@f5-sales-demo/xcsh 19.51.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (899) hide show
  1. package/CHANGELOG.md +7073 -0
  2. package/README.md +14 -0
  3. package/examples/README.md +21 -0
  4. package/examples/custom-tools/README.md +109 -0
  5. package/examples/custom-tools/hello/index.ts +20 -0
  6. package/examples/custom-tools/todo/index.ts +206 -0
  7. package/examples/extensions/README.md +143 -0
  8. package/examples/extensions/api-demo.ts +89 -0
  9. package/examples/extensions/chalk-logger.ts +25 -0
  10. package/examples/extensions/hello.ts +32 -0
  11. package/examples/extensions/pirate.ts +43 -0
  12. package/examples/extensions/plan-mode.ts +551 -0
  13. package/examples/extensions/reload-runtime.ts +37 -0
  14. package/examples/extensions/todo.ts +296 -0
  15. package/examples/extensions/tools.ts +145 -0
  16. package/examples/extensions/with-deps/index.ts +36 -0
  17. package/examples/extensions/with-deps/package-lock.json +31 -0
  18. package/examples/extensions/with-deps/package.json +16 -0
  19. package/examples/hooks/README.md +56 -0
  20. package/examples/hooks/auto-commit-on-exit.ts +48 -0
  21. package/examples/hooks/confirm-destructive.ts +58 -0
  22. package/examples/hooks/custom-compaction.ts +115 -0
  23. package/examples/hooks/dirty-repo-guard.ts +51 -0
  24. package/examples/hooks/file-trigger.ts +40 -0
  25. package/examples/hooks/git-checkpoint.ts +52 -0
  26. package/examples/hooks/handoff.ts +149 -0
  27. package/examples/hooks/permission-gate.ts +33 -0
  28. package/examples/hooks/protected-paths.ts +29 -0
  29. package/examples/hooks/qna.ts +118 -0
  30. package/examples/hooks/status-line.ts +39 -0
  31. package/examples/sdk/01-minimal.ts +21 -0
  32. package/examples/sdk/02-custom-model.ts +49 -0
  33. package/examples/sdk/03-custom-prompt.ts +43 -0
  34. package/examples/sdk/04-skills.ts +43 -0
  35. package/examples/sdk/06-extensions.ts +80 -0
  36. package/examples/sdk/06-hooks.ts +61 -0
  37. package/examples/sdk/07-context-files.ts +35 -0
  38. package/examples/sdk/08-prompt-templates.ts +41 -0
  39. package/examples/sdk/08-slash-commands.ts +46 -0
  40. package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
  41. package/examples/sdk/11-sessions.ts +47 -0
  42. package/examples/sdk/README.md +172 -0
  43. package/package.json +539 -0
  44. package/scripts/build-info/resolvers.ts +51 -0
  45. package/scripts/capture-ax-fixture.ts +84 -0
  46. package/scripts/capture-login-fixture.ts +30 -0
  47. package/scripts/check-workflow-field-coverage.ts +101 -0
  48. package/scripts/extension-uat-harness.ts +340 -0
  49. package/scripts/format-prompts.ts +68 -0
  50. package/scripts/generate-api-spec-index.ts +580 -0
  51. package/scripts/generate-branding-index.ts +81 -0
  52. package/scripts/generate-build-info.ts +106 -0
  53. package/scripts/generate-console-catalog.ts +88 -0
  54. package/scripts/generate-console-field-metadata.ts +74 -0
  55. package/scripts/generate-docs-index.ts +40 -0
  56. package/scripts/generate-template.ts +32 -0
  57. package/scripts/generate-terraform-index.ts +81 -0
  58. package/scripts/mermaid-gallery.ts +132 -0
  59. package/scripts/uat-matrix-modalities.ts +451 -0
  60. package/scripts/uat-matrix-report.ts +175 -0
  61. package/scripts/uat-matrix.ts +353 -0
  62. package/src/async/index.ts +2 -0
  63. package/src/async/job-manager.ts +416 -0
  64. package/src/async/support.ts +5 -0
  65. package/src/autoresearch/apply-contract-to-state.ts +1 -0
  66. package/src/autoresearch/command-resume.md +17 -0
  67. package/src/autoresearch/contract.ts +205 -0
  68. package/src/autoresearch/dashboard.ts +374 -0
  69. package/src/autoresearch/git.ts +191 -0
  70. package/src/autoresearch/helpers.ts +328 -0
  71. package/src/autoresearch/index.ts +402 -0
  72. package/src/autoresearch/prompt.md +236 -0
  73. package/src/autoresearch/resume-message.md +16 -0
  74. package/src/autoresearch/state.ts +303 -0
  75. package/src/autoresearch/tools/init-experiment.ts +400 -0
  76. package/src/autoresearch/tools/log-experiment.ts +793 -0
  77. package/src/autoresearch/tools/run-experiment.ts +679 -0
  78. package/src/autoresearch/types.ts +114 -0
  79. package/src/browser/acquire.ts +249 -0
  80. package/src/browser/actions.ts +126 -0
  81. package/src/browser/auth.ts +176 -0
  82. package/src/browser/ax.ts +134 -0
  83. package/src/browser/cdp-core.ts +45 -0
  84. package/src/browser/cdp-page-actions.ts +51 -0
  85. package/src/browser/chrome-locate.ts +66 -0
  86. package/src/browser/dom-context.ts +89 -0
  87. package/src/browser/dt-context.ts +100 -0
  88. package/src/browser/extension-bridge.ts +182 -0
  89. package/src/browser/extension-page-actions.ts +397 -0
  90. package/src/browser/extension-provider.ts +373 -0
  91. package/src/browser/index.ts +17 -0
  92. package/src/browser/input-commit.ts +74 -0
  93. package/src/browser/native-messaging.ts +20 -0
  94. package/src/browser/page-actions.ts +18 -0
  95. package/src/browser/provider.ts +155 -0
  96. package/src/browser/resolver.ts +126 -0
  97. package/src/browser/selector.ts +40 -0
  98. package/src/bun-imports.d.ts +22 -0
  99. package/src/capability/context-file.ts +43 -0
  100. package/src/capability/extension-module.ts +34 -0
  101. package/src/capability/extension.ts +47 -0
  102. package/src/capability/fs.ts +107 -0
  103. package/src/capability/hook.ts +40 -0
  104. package/src/capability/index.ts +438 -0
  105. package/src/capability/instruction.ts +37 -0
  106. package/src/capability/mcp.ts +74 -0
  107. package/src/capability/prompt.ts +35 -0
  108. package/src/capability/rule.ts +224 -0
  109. package/src/capability/settings.ts +34 -0
  110. package/src/capability/skill.ts +50 -0
  111. package/src/capability/slash-command.ts +40 -0
  112. package/src/capability/ssh.ts +41 -0
  113. package/src/capability/system-prompt.ts +34 -0
  114. package/src/capability/tool.ts +38 -0
  115. package/src/capability/types.ts +168 -0
  116. package/src/cli/agents-cli.ts +138 -0
  117. package/src/cli/args.ts +286 -0
  118. package/src/cli/chrome-cli.ts +88 -0
  119. package/src/cli/classify-install-target.ts +50 -0
  120. package/src/cli/commands/init-xdg.ts +27 -0
  121. package/src/cli/config-cli.ts +418 -0
  122. package/src/cli/file-processor.ts +121 -0
  123. package/src/cli/grep-cli.ts +160 -0
  124. package/src/cli/grievances-cli.ts +78 -0
  125. package/src/cli/initial-message.ts +58 -0
  126. package/src/cli/jupyter-cli.ts +106 -0
  127. package/src/cli/list-models.ts +128 -0
  128. package/src/cli/plugin-cli.ts +964 -0
  129. package/src/cli/read-cli.ts +68 -0
  130. package/src/cli/session-picker.ts +52 -0
  131. package/src/cli/setup-cli.ts +479 -0
  132. package/src/cli/shell-cli.ts +174 -0
  133. package/src/cli/ssh-cli.ts +179 -0
  134. package/src/cli/stats-cli.ts +182 -0
  135. package/src/cli/update-cli.ts +446 -0
  136. package/src/cli/web-search-cli.ts +203 -0
  137. package/src/cli.ts +123 -0
  138. package/src/commands/agents.ts +57 -0
  139. package/src/commands/chrome-host.ts +71 -0
  140. package/src/commands/chrome.ts +28 -0
  141. package/src/commands/commit.ts +36 -0
  142. package/src/commands/config.ts +51 -0
  143. package/src/commands/grep.ts +48 -0
  144. package/src/commands/grievances.ts +20 -0
  145. package/src/commands/jupyter.ts +32 -0
  146. package/src/commands/launch.ts +144 -0
  147. package/src/commands/plugin.ts +78 -0
  148. package/src/commands/read.ts +33 -0
  149. package/src/commands/setup.ts +42 -0
  150. package/src/commands/shell.ts +29 -0
  151. package/src/commands/ssh.ts +60 -0
  152. package/src/commands/stats.ts +29 -0
  153. package/src/commands/update.ts +21 -0
  154. package/src/commands/web-search.ts +46 -0
  155. package/src/commit/agentic/agent.ts +314 -0
  156. package/src/commit/agentic/fallback.ts +96 -0
  157. package/src/commit/agentic/index.ts +354 -0
  158. package/src/commit/agentic/prompts/analyze-file.md +22 -0
  159. package/src/commit/agentic/prompts/session-user.md +25 -0
  160. package/src/commit/agentic/prompts/split-confirm.md +1 -0
  161. package/src/commit/agentic/prompts/system.md +38 -0
  162. package/src/commit/agentic/state.ts +60 -0
  163. package/src/commit/agentic/tools/analyze-file.ts +127 -0
  164. package/src/commit/agentic/tools/git-file-diff.ts +191 -0
  165. package/src/commit/agentic/tools/git-hunk.ts +50 -0
  166. package/src/commit/agentic/tools/git-overview.ts +81 -0
  167. package/src/commit/agentic/tools/index.ts +54 -0
  168. package/src/commit/agentic/tools/propose-changelog.ts +139 -0
  169. package/src/commit/agentic/tools/propose-commit.ts +122 -0
  170. package/src/commit/agentic/tools/recent-commits.ts +81 -0
  171. package/src/commit/agentic/tools/schemas.ts +31 -0
  172. package/src/commit/agentic/tools/split-commit.ts +251 -0
  173. package/src/commit/agentic/topo-sort.ts +44 -0
  174. package/src/commit/agentic/trivial.ts +51 -0
  175. package/src/commit/agentic/validation.ts +183 -0
  176. package/src/commit/analysis/conventional.ts +122 -0
  177. package/src/commit/analysis/index.ts +4 -0
  178. package/src/commit/analysis/scope.ts +242 -0
  179. package/src/commit/analysis/summary.ts +105 -0
  180. package/src/commit/analysis/validation.ts +66 -0
  181. package/src/commit/changelog/detect.ts +40 -0
  182. package/src/commit/changelog/generate.ts +101 -0
  183. package/src/commit/changelog/index.ts +234 -0
  184. package/src/commit/changelog/parse.ts +44 -0
  185. package/src/commit/cli.ts +85 -0
  186. package/src/commit/git/diff.ts +148 -0
  187. package/src/commit/index.ts +5 -0
  188. package/src/commit/map-reduce/index.ts +69 -0
  189. package/src/commit/map-reduce/map-phase.ts +193 -0
  190. package/src/commit/map-reduce/reduce-phase.ts +108 -0
  191. package/src/commit/map-reduce/utils.ts +9 -0
  192. package/src/commit/message.ts +11 -0
  193. package/src/commit/model-selection.ts +66 -0
  194. package/src/commit/pipeline.ts +242 -0
  195. package/src/commit/prompts/analysis-system.md +148 -0
  196. package/src/commit/prompts/analysis-user.md +38 -0
  197. package/src/commit/prompts/changelog-system.md +50 -0
  198. package/src/commit/prompts/changelog-user.md +18 -0
  199. package/src/commit/prompts/file-observer-system.md +24 -0
  200. package/src/commit/prompts/file-observer-user.md +8 -0
  201. package/src/commit/prompts/reduce-system.md +50 -0
  202. package/src/commit/prompts/reduce-user.md +17 -0
  203. package/src/commit/prompts/summary-retry.md +3 -0
  204. package/src/commit/prompts/summary-system.md +38 -0
  205. package/src/commit/prompts/summary-user.md +13 -0
  206. package/src/commit/prompts/types-description.md +2 -0
  207. package/src/commit/types.ts +118 -0
  208. package/src/commit/utils/exclusions.ts +42 -0
  209. package/src/commit/utils.ts +44 -0
  210. package/src/config/auto-config.ts +698 -0
  211. package/src/config/context-schema.json +115 -0
  212. package/src/config/file-lock.ts +121 -0
  213. package/src/config/keybindings.ts +493 -0
  214. package/src/config/mcp-schema.json +230 -0
  215. package/src/config/model-equivalence.ts +675 -0
  216. package/src/config/model-registry.ts +2265 -0
  217. package/src/config/model-resolver.ts +1289 -0
  218. package/src/config/prompt-templates.ts +271 -0
  219. package/src/config/resolve-config-value.ts +110 -0
  220. package/src/config/settings-schema.ts +2155 -0
  221. package/src/config/settings.ts +730 -0
  222. package/src/config.ts +418 -0
  223. package/src/cursor.ts +323 -0
  224. package/src/dap/client.ts +674 -0
  225. package/src/dap/config.ts +150 -0
  226. package/src/dap/defaults.json +211 -0
  227. package/src/dap/index.ts +4 -0
  228. package/src/dap/session.ts +1255 -0
  229. package/src/dap/types.ts +600 -0
  230. package/src/debug/index.ts +440 -0
  231. package/src/debug/log-formatting.ts +58 -0
  232. package/src/debug/log-viewer.ts +908 -0
  233. package/src/debug/profiler.ts +158 -0
  234. package/src/debug/report-bundle.ts +365 -0
  235. package/src/debug/system-info.ts +107 -0
  236. package/src/discovery/agents-md.ts +67 -0
  237. package/src/discovery/agents.ts +219 -0
  238. package/src/discovery/builtin.ts +851 -0
  239. package/src/discovery/claude-plugins.ts +297 -0
  240. package/src/discovery/claude.ts +543 -0
  241. package/src/discovery/cline.ts +83 -0
  242. package/src/discovery/codex.ts +535 -0
  243. package/src/discovery/cursor.ts +220 -0
  244. package/src/discovery/gemini.ts +396 -0
  245. package/src/discovery/github.ts +118 -0
  246. package/src/discovery/helpers.ts +934 -0
  247. package/src/discovery/index.ts +79 -0
  248. package/src/discovery/language.ts +46 -0
  249. package/src/discovery/mcp-json.ts +171 -0
  250. package/src/discovery/opencode.ts +393 -0
  251. package/src/discovery/plugin-dir-roots.ts +28 -0
  252. package/src/discovery/ssh.ts +153 -0
  253. package/src/discovery/substitute-plugin-root.ts +29 -0
  254. package/src/discovery/vscode.ts +105 -0
  255. package/src/discovery/windsurf.ts +147 -0
  256. package/src/edit/diff.ts +818 -0
  257. package/src/edit/index.ts +481 -0
  258. package/src/edit/line-hash.ts +67 -0
  259. package/src/edit/modes/chunk.ts +762 -0
  260. package/src/edit/modes/hashline.ts +1366 -0
  261. package/src/edit/modes/patch.ts +1791 -0
  262. package/src/edit/modes/replace.ts +1115 -0
  263. package/src/edit/normalize.ts +375 -0
  264. package/src/edit/renderer.ts +627 -0
  265. package/src/exa/factory.ts +61 -0
  266. package/src/exa/index.ts +27 -0
  267. package/src/exa/mcp-client.ts +293 -0
  268. package/src/exa/render.ts +232 -0
  269. package/src/exa/researcher.ts +47 -0
  270. package/src/exa/search.ts +86 -0
  271. package/src/exa/types.ts +166 -0
  272. package/src/exa/websets.ts +247 -0
  273. package/src/exec/bash-executor.ts +332 -0
  274. package/src/exec/exec.ts +53 -0
  275. package/src/exec/idle-timeout-watchdog.ts +126 -0
  276. package/src/exec/non-interactive-env.ts +48 -0
  277. package/src/export/custom-share.ts +65 -0
  278. package/src/export/html/index.ts +161 -0
  279. package/src/export/html/template.css +1001 -0
  280. package/src/export/html/template.generated.ts +2 -0
  281. package/src/export/html/template.html +46 -0
  282. package/src/export/html/template.js +1950 -0
  283. package/src/export/html/template.macro.ts +24 -0
  284. package/src/export/html/vendor/highlight.min.js +1213 -0
  285. package/src/export/html/vendor/marked.min.js +6 -0
  286. package/src/export/ttsr.ts +434 -0
  287. package/src/extensibility/custom-commands/bundled/ci-green/index.ts +25 -0
  288. package/src/extensibility/custom-commands/bundled/review/index.ts +456 -0
  289. package/src/extensibility/custom-commands/index.ts +2 -0
  290. package/src/extensibility/custom-commands/loader.ts +236 -0
  291. package/src/extensibility/custom-commands/types.ts +111 -0
  292. package/src/extensibility/custom-tools/index.ts +7 -0
  293. package/src/extensibility/custom-tools/loader.ts +238 -0
  294. package/src/extensibility/custom-tools/types.ts +251 -0
  295. package/src/extensibility/custom-tools/wrapper.ts +47 -0
  296. package/src/extensibility/extensions/index.ts +15 -0
  297. package/src/extensibility/extensions/loader.ts +572 -0
  298. package/src/extensibility/extensions/runner.ts +848 -0
  299. package/src/extensibility/extensions/types.ts +1394 -0
  300. package/src/extensibility/extensions/wrapper.ts +191 -0
  301. package/src/extensibility/hooks/index.ts +5 -0
  302. package/src/extensibility/hooks/loader.ts +255 -0
  303. package/src/extensibility/hooks/runner.ts +425 -0
  304. package/src/extensibility/hooks/tool-wrapper.ts +108 -0
  305. package/src/extensibility/hooks/types.ts +826 -0
  306. package/src/extensibility/plugins/doctor.ts +66 -0
  307. package/src/extensibility/plugins/git-url.ts +281 -0
  308. package/src/extensibility/plugins/index.ts +9 -0
  309. package/src/extensibility/plugins/installer.ts +192 -0
  310. package/src/extensibility/plugins/loader.ts +267 -0
  311. package/src/extensibility/plugins/manager.ts +731 -0
  312. package/src/extensibility/plugins/marketplace/cache.ts +136 -0
  313. package/src/extensibility/plugins/marketplace/fetcher.ts +318 -0
  314. package/src/extensibility/plugins/marketplace/index.ts +6 -0
  315. package/src/extensibility/plugins/marketplace/manager.ts +781 -0
  316. package/src/extensibility/plugins/marketplace/prerequisites.ts +255 -0
  317. package/src/extensibility/plugins/marketplace/registry.ts +196 -0
  318. package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
  319. package/src/extensibility/plugins/marketplace/types.ts +201 -0
  320. package/src/extensibility/plugins/parser.ts +105 -0
  321. package/src/extensibility/plugins/types.ts +194 -0
  322. package/src/extensibility/skills.ts +269 -0
  323. package/src/extensibility/slash-commands.ts +246 -0
  324. package/src/extensibility/tool-proxy.ts +25 -0
  325. package/src/extensibility/utils.ts +38 -0
  326. package/src/index.ts +61 -0
  327. package/src/internal-urls/agent-protocol.ts +136 -0
  328. package/src/internal-urls/api-catalog-resolve.ts +495 -0
  329. package/src/internal-urls/api-catalog-types.ts +94 -0
  330. package/src/internal-urls/api-spec-resolve.ts +1036 -0
  331. package/src/internal-urls/api-spec-types.ts +239 -0
  332. package/src/internal-urls/artifact-protocol.ts +97 -0
  333. package/src/internal-urls/branding-index.generated.ts +88 -0
  334. package/src/internal-urls/build-info-runtime.ts +302 -0
  335. package/src/internal-urls/build-info.generated.ts +33 -0
  336. package/src/internal-urls/computer-profile.ts +692 -0
  337. package/src/internal-urls/console-catalog-types.ts +21 -0
  338. package/src/internal-urls/console-catalog.generated.ts +532 -0
  339. package/src/internal-urls/console-field-metadata-types.ts +59 -0
  340. package/src/internal-urls/console-field-metadata.generated.ts +4841 -0
  341. package/src/internal-urls/console-resolve.ts +178 -0
  342. package/src/internal-urls/docs-index.generated.ts +698 -0
  343. package/src/internal-urls/extension-api.md +147 -0
  344. package/src/internal-urls/index.ts +46 -0
  345. package/src/internal-urls/jobs-protocol.ts +119 -0
  346. package/src/internal-urls/json-query.ts +126 -0
  347. package/src/internal-urls/local-protocol.ts +206 -0
  348. package/src/internal-urls/mcp-protocol.ts +156 -0
  349. package/src/internal-urls/memory-protocol.ts +133 -0
  350. package/src/internal-urls/parse.ts +72 -0
  351. package/src/internal-urls/profile-collectors.ts +106 -0
  352. package/src/internal-urls/router.ts +55 -0
  353. package/src/internal-urls/rule-protocol.ts +55 -0
  354. package/src/internal-urls/skill-protocol.ts +111 -0
  355. package/src/internal-urls/terraform-index.generated.ts +1852 -0
  356. package/src/internal-urls/terraform-resolve.ts +184 -0
  357. package/src/internal-urls/terraform-types.ts +45 -0
  358. package/src/internal-urls/types.ts +52 -0
  359. package/src/internal-urls/user-profile.ts +363 -0
  360. package/src/internal-urls/xcsh-protocol.ts +644 -0
  361. package/src/ipy/cancellation.ts +28 -0
  362. package/src/ipy/executor.ts +1155 -0
  363. package/src/ipy/gateway-coordinator.ts +424 -0
  364. package/src/ipy/kernel.ts +1091 -0
  365. package/src/ipy/modules.ts +144 -0
  366. package/src/ipy/prelude.py +849 -0
  367. package/src/ipy/prelude.ts +3 -0
  368. package/src/ipy/runtime.ts +221 -0
  369. package/src/locales/ar.json +512 -0
  370. package/src/locales/de.json +512 -0
  371. package/src/locales/en.json +549 -0
  372. package/src/locales/es.json +512 -0
  373. package/src/locales/fr.json +512 -0
  374. package/src/locales/hi.json +512 -0
  375. package/src/locales/index.ts +29 -0
  376. package/src/locales/it.json +512 -0
  377. package/src/locales/ja.json +512 -0
  378. package/src/locales/ko.json +512 -0
  379. package/src/locales/pt-br.json +512 -0
  380. package/src/locales/th.json +512 -0
  381. package/src/locales/zh-cn.json +512 -0
  382. package/src/locales/zh-tw.json +512 -0
  383. package/src/lsp/client.ts +941 -0
  384. package/src/lsp/clients/biome-client.ts +202 -0
  385. package/src/lsp/clients/index.ts +50 -0
  386. package/src/lsp/clients/lsp-linter-client.ts +93 -0
  387. package/src/lsp/clients/swiftlint-client.ts +120 -0
  388. package/src/lsp/config.ts +418 -0
  389. package/src/lsp/defaults.json +999 -0
  390. package/src/lsp/edits.ts +109 -0
  391. package/src/lsp/index.ts +1746 -0
  392. package/src/lsp/lspmux.ts +233 -0
  393. package/src/lsp/render.ts +692 -0
  394. package/src/lsp/startup-events.ts +13 -0
  395. package/src/lsp/types.ts +444 -0
  396. package/src/lsp/utils.ts +691 -0
  397. package/src/main.ts +944 -0
  398. package/src/mcp/client.ts +482 -0
  399. package/src/mcp/config-writer.ts +225 -0
  400. package/src/mcp/config.ts +365 -0
  401. package/src/mcp/discoverable-tool-metadata.ts +202 -0
  402. package/src/mcp/index.ts +29 -0
  403. package/src/mcp/json-rpc.ts +84 -0
  404. package/src/mcp/loader.ts +124 -0
  405. package/src/mcp/manager.ts +1152 -0
  406. package/src/mcp/oauth-discovery.ts +349 -0
  407. package/src/mcp/oauth-flow.ts +387 -0
  408. package/src/mcp/render.ts +157 -0
  409. package/src/mcp/smithery-auth.ts +104 -0
  410. package/src/mcp/smithery-connect.ts +145 -0
  411. package/src/mcp/smithery-registry.ts +477 -0
  412. package/src/mcp/tool-bridge.ts +417 -0
  413. package/src/mcp/tool-cache.ts +117 -0
  414. package/src/mcp/transports/http.ts +475 -0
  415. package/src/mcp/transports/index.ts +6 -0
  416. package/src/mcp/transports/stdio.ts +325 -0
  417. package/src/mcp/types.ts +423 -0
  418. package/src/memories/index.ts +1115 -0
  419. package/src/memories/storage.ts +577 -0
  420. package/src/modes/acp/acp-agent.ts +1361 -0
  421. package/src/modes/acp/acp-event-mapper.ts +538 -0
  422. package/src/modes/acp/acp-mode.ts +15 -0
  423. package/src/modes/acp/index.ts +2 -0
  424. package/src/modes/components/agent-dashboard.ts +1124 -0
  425. package/src/modes/components/assistant-message.ts +213 -0
  426. package/src/modes/components/bash-execution.ts +345 -0
  427. package/src/modes/components/bordered-loader.ts +41 -0
  428. package/src/modes/components/branch-summary-message.ts +45 -0
  429. package/src/modes/components/btw-panel.ts +103 -0
  430. package/src/modes/components/compaction-summary-message.ts +51 -0
  431. package/src/modes/components/context-add-wizard.ts +534 -0
  432. package/src/modes/components/countdown-timer.ts +75 -0
  433. package/src/modes/components/custom-editor.ts +238 -0
  434. package/src/modes/components/custom-message.ts +91 -0
  435. package/src/modes/components/diff.ts +210 -0
  436. package/src/modes/components/dynamic-border.ts +25 -0
  437. package/src/modes/components/extensions/extension-dashboard.ts +326 -0
  438. package/src/modes/components/extensions/extension-list.ts +492 -0
  439. package/src/modes/components/extensions/index.ts +9 -0
  440. package/src/modes/components/extensions/inspector-panel.ts +317 -0
  441. package/src/modes/components/extensions/state-manager.ts +587 -0
  442. package/src/modes/components/extensions/types.ts +191 -0
  443. package/src/modes/components/footer.ts +262 -0
  444. package/src/modes/components/gutter-block.ts +315 -0
  445. package/src/modes/components/history-search.ts +158 -0
  446. package/src/modes/components/hook-editor.ts +151 -0
  447. package/src/modes/components/hook-input.ts +81 -0
  448. package/src/modes/components/hook-message.ts +100 -0
  449. package/src/modes/components/hook-selector.ts +192 -0
  450. package/src/modes/components/index.ts +36 -0
  451. package/src/modes/components/keybinding-hints.ts +65 -0
  452. package/src/modes/components/login-dialog.ts +164 -0
  453. package/src/modes/components/mcp-add-wizard.ts +1314 -0
  454. package/src/modes/components/model-selector.ts +946 -0
  455. package/src/modes/components/oauth-selector.ts +211 -0
  456. package/src/modes/components/plugin-selector.ts +95 -0
  457. package/src/modes/components/plugin-settings.ts +477 -0
  458. package/src/modes/components/plugins/index.ts +5 -0
  459. package/src/modes/components/plugins/plugin-dashboard.ts +523 -0
  460. package/src/modes/components/plugins/plugin-inspector-pane.ts +84 -0
  461. package/src/modes/components/plugins/plugin-list-pane.ts +109 -0
  462. package/src/modes/components/plugins/state-manager.ts +229 -0
  463. package/src/modes/components/plugins/types.ts +51 -0
  464. package/src/modes/components/plugins/utils.ts +6 -0
  465. package/src/modes/components/python-execution.ts +244 -0
  466. package/src/modes/components/queue-mode-selector.ts +56 -0
  467. package/src/modes/components/read-tool-group.ts +137 -0
  468. package/src/modes/components/session-observer-overlay.ts +483 -0
  469. package/src/modes/components/session-selector.ts +343 -0
  470. package/src/modes/components/settings-defs.ts +568 -0
  471. package/src/modes/components/settings-selector.ts +641 -0
  472. package/src/modes/components/show-images-selector.ts +45 -0
  473. package/src/modes/components/skill-message.ts +90 -0
  474. package/src/modes/components/status-line/context-gradient.ts +64 -0
  475. package/src/modes/components/status-line/git-utils.ts +42 -0
  476. package/src/modes/components/status-line/hex-ansi.ts +29 -0
  477. package/src/modes/components/status-line/index.ts +4 -0
  478. package/src/modes/components/status-line/presets.ts +174 -0
  479. package/src/modes/components/status-line/segments.ts +494 -0
  480. package/src/modes/components/status-line/separators.ts +55 -0
  481. package/src/modes/components/status-line/token-rate.ts +66 -0
  482. package/src/modes/components/status-line/types.ts +96 -0
  483. package/src/modes/components/status-line-segment-editor.ts +361 -0
  484. package/src/modes/components/status-line.ts +729 -0
  485. package/src/modes/components/theme-selector.ts +63 -0
  486. package/src/modes/components/thinking-selector.ts +52 -0
  487. package/src/modes/components/todo-reminder.ts +54 -0
  488. package/src/modes/components/tool-execution.ts +781 -0
  489. package/src/modes/components/tree-selector.ts +908 -0
  490. package/src/modes/components/ttsr-notification.ts +80 -0
  491. package/src/modes/components/user-message-selector.ts +141 -0
  492. package/src/modes/components/user-message.ts +100 -0
  493. package/src/modes/components/visual-truncate.ts +63 -0
  494. package/src/modes/components/welcome-checks.ts +313 -0
  495. package/src/modes/components/welcome.ts +270 -0
  496. package/src/modes/controllers/btw-controller.ts +193 -0
  497. package/src/modes/controllers/chord-routing.ts +37 -0
  498. package/src/modes/controllers/command-controller.ts +1293 -0
  499. package/src/modes/controllers/context-command-controller.ts +61 -0
  500. package/src/modes/controllers/event-controller.ts +743 -0
  501. package/src/modes/controllers/extension-ui-controller.ts +983 -0
  502. package/src/modes/controllers/input-controller.ts +877 -0
  503. package/src/modes/controllers/mcp-command-controller.ts +1940 -0
  504. package/src/modes/controllers/selector-controller.ts +1292 -0
  505. package/src/modes/controllers/ssh-command-controller.ts +421 -0
  506. package/src/modes/index.ts +34 -0
  507. package/src/modes/interactive-mode.ts +1781 -0
  508. package/src/modes/oauth-manual-input.ts +42 -0
  509. package/src/modes/print-mode.ts +196 -0
  510. package/src/modes/prompt-action-autocomplete.ts +231 -0
  511. package/src/modes/rpc/host-tools.ts +186 -0
  512. package/src/modes/rpc/rpc-client.ts +762 -0
  513. package/src/modes/rpc/rpc-mode.ts +877 -0
  514. package/src/modes/rpc/rpc-types.ts +322 -0
  515. package/src/modes/session-observer-registry.ts +146 -0
  516. package/src/modes/shared.ts +30 -0
  517. package/src/modes/theme/defaults/index.ts +7 -0
  518. package/src/modes/theme/defaults/xcsh-dark.json +113 -0
  519. package/src/modes/theme/defaults/xcsh-light.json +115 -0
  520. package/src/modes/theme/mermaid-cache.ts +151 -0
  521. package/src/modes/theme/mermaid-palette.ts +39 -0
  522. package/src/modes/theme/theme-schema.json +553 -0
  523. package/src/modes/theme/theme.ts +2563 -0
  524. package/src/modes/types.ts +273 -0
  525. package/src/modes/utils/hotkeys-markdown.ts +60 -0
  526. package/src/modes/utils/keybinding-matchers.ts +30 -0
  527. package/src/modes/utils/read-group-outcome-aggregator.ts +55 -0
  528. package/src/modes/utils/sanitize-error-message.ts +60 -0
  529. package/src/modes/utils/tools-markdown.ts +28 -0
  530. package/src/modes/utils/ui-helpers.ts +734 -0
  531. package/src/plan-mode/approved-plan.ts +55 -0
  532. package/src/plan-mode/state.ts +6 -0
  533. package/src/priority.json +37 -0
  534. package/src/prompts/agents/designer.md +67 -0
  535. package/src/prompts/agents/explore.md +61 -0
  536. package/src/prompts/agents/frontmatter.md +10 -0
  537. package/src/prompts/agents/init.md +36 -0
  538. package/src/prompts/agents/librarian.md +121 -0
  539. package/src/prompts/agents/plan.md +49 -0
  540. package/src/prompts/agents/reviewer.md +127 -0
  541. package/src/prompts/agents/task.md +16 -0
  542. package/src/prompts/ci-green-request.md +35 -0
  543. package/src/prompts/compaction/branch-summary-context.md +5 -0
  544. package/src/prompts/compaction/branch-summary-preamble.md +2 -0
  545. package/src/prompts/compaction/branch-summary.md +30 -0
  546. package/src/prompts/compaction/compaction-short-summary.md +9 -0
  547. package/src/prompts/compaction/compaction-summary-context.md +5 -0
  548. package/src/prompts/compaction/compaction-summary.md +38 -0
  549. package/src/prompts/compaction/compaction-turn-prefix.md +17 -0
  550. package/src/prompts/compaction/compaction-update-summary.md +45 -0
  551. package/src/prompts/memories/consolidation.md +30 -0
  552. package/src/prompts/memories/read-path.md +11 -0
  553. package/src/prompts/memories/stage_one_input.md +6 -0
  554. package/src/prompts/memories/stage_one_system.md +21 -0
  555. package/src/prompts/review-request.md +70 -0
  556. package/src/prompts/system/agent-creation-architect.md +65 -0
  557. package/src/prompts/system/agent-creation-user.md +6 -0
  558. package/src/prompts/system/auto-handoff-threshold-focus.md +1 -0
  559. package/src/prompts/system/btw-user.md +8 -0
  560. package/src/prompts/system/commit-message-system.md +2 -0
  561. package/src/prompts/system/custom-system-prompt.md +82 -0
  562. package/src/prompts/system/eager-todo.md +13 -0
  563. package/src/prompts/system/file-operations.md +10 -0
  564. package/src/prompts/system/handoff-document.md +48 -0
  565. package/src/prompts/system/plan-mode-active.md +114 -0
  566. package/src/prompts/system/plan-mode-approved.md +23 -0
  567. package/src/prompts/system/plan-mode-reference.md +14 -0
  568. package/src/prompts/system/plan-mode-subagent.md +34 -0
  569. package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
  570. package/src/prompts/system/subagent-submit-reminder.md +7 -0
  571. package/src/prompts/system/subagent-system-prompt.md +36 -0
  572. package/src/prompts/system/subagent-user-prompt.md +12 -0
  573. package/src/prompts/system/summarization-system.md +3 -0
  574. package/src/prompts/system/system-prompt.md +698 -0
  575. package/src/prompts/system/title-system.md +2 -0
  576. package/src/prompts/system/ttsr-interrupt.md +7 -0
  577. package/src/prompts/system/web-search.md +28 -0
  578. package/src/prompts/tools/ask.md +28 -0
  579. package/src/prompts/tools/ast-edit.md +48 -0
  580. package/src/prompts/tools/ast-grep.md +54 -0
  581. package/src/prompts/tools/async-result.md +5 -0
  582. package/src/prompts/tools/bash.md +67 -0
  583. package/src/prompts/tools/browser.md +26 -0
  584. package/src/prompts/tools/calculator.md +10 -0
  585. package/src/prompts/tools/cancel-job.md +5 -0
  586. package/src/prompts/tools/catalog-workflow-runner.md +13 -0
  587. package/src/prompts/tools/checkpoint.md +16 -0
  588. package/src/prompts/tools/chunk-edit.md +279 -0
  589. package/src/prompts/tools/debug.md +43 -0
  590. package/src/prompts/tools/display-image.md +23 -0
  591. package/src/prompts/tools/exit-plan-mode.md +41 -0
  592. package/src/prompts/tools/find.md +26 -0
  593. package/src/prompts/tools/gemini-image.md +7 -0
  594. package/src/prompts/tools/grep.md +29 -0
  595. package/src/prompts/tools/hashline.md +131 -0
  596. package/src/prompts/tools/inspect-image-system.md +20 -0
  597. package/src/prompts/tools/inspect-image.md +32 -0
  598. package/src/prompts/tools/lsp.md +33 -0
  599. package/src/prompts/tools/patch.md +77 -0
  600. package/src/prompts/tools/poll.md +5 -0
  601. package/src/prompts/tools/python.md +60 -0
  602. package/src/prompts/tools/read-chunk.md +35 -0
  603. package/src/prompts/tools/read.md +63 -0
  604. package/src/prompts/tools/render-mermaid.md +9 -0
  605. package/src/prompts/tools/replace.md +36 -0
  606. package/src/prompts/tools/resolve.md +8 -0
  607. package/src/prompts/tools/rewind.md +13 -0
  608. package/src/prompts/tools/search-tool-bm25.md +34 -0
  609. package/src/prompts/tools/ssh.md +44 -0
  610. package/src/prompts/tools/task-summary.md +28 -0
  611. package/src/prompts/tools/task.md +131 -0
  612. package/src/prompts/tools/todo-write.md +89 -0
  613. package/src/prompts/tools/vim.md +98 -0
  614. package/src/prompts/tools/web-search.md +10 -0
  615. package/src/prompts/tools/write.md +14 -0
  616. package/src/prompts/tools/xcsh-api.md +283 -0
  617. package/src/resource-management/index.ts +42 -0
  618. package/src/sdk.ts +2123 -0
  619. package/src/secrets/index.ts +146 -0
  620. package/src/secrets/obfuscator.ts +290 -0
  621. package/src/secrets/regex.ts +21 -0
  622. package/src/services/context-env.ts +102 -0
  623. package/src/services/xcsh-api-client.ts +230 -0
  624. package/src/services/xcsh-context-command.ts +803 -0
  625. package/src/services/xcsh-context-display.ts +49 -0
  626. package/src/services/xcsh-context-indicators.ts +17 -0
  627. package/src/services/xcsh-context-segment.ts +39 -0
  628. package/src/services/xcsh-context.ts +1410 -0
  629. package/src/services/xcsh-env.ts +107 -0
  630. package/src/services/xcsh-knowledge.ts +177 -0
  631. package/src/services/xcsh-table.ts +164 -0
  632. package/src/session/agent-session.ts +6690 -0
  633. package/src/session/agent-storage.ts +451 -0
  634. package/src/session/artifacts.ts +132 -0
  635. package/src/session/auth-storage.ts +17 -0
  636. package/src/session/blob-store.ts +135 -0
  637. package/src/session/compaction/branch-summarization.ts +322 -0
  638. package/src/session/compaction/compaction.ts +1388 -0
  639. package/src/session/compaction/index.ts +7 -0
  640. package/src/session/compaction/pruning.ts +91 -0
  641. package/src/session/compaction/utils.ts +184 -0
  642. package/src/session/history-storage.ts +253 -0
  643. package/src/session/messages.ts +597 -0
  644. package/src/session/session-dump-format.ts +203 -0
  645. package/src/session/session-manager.ts +2816 -0
  646. package/src/session/session-storage.ts +370 -0
  647. package/src/session/streaming-output.ts +770 -0
  648. package/src/session/tool-choice-queue.ts +213 -0
  649. package/src/slash-commands/builtin-registry.ts +1614 -0
  650. package/src/slash-commands/export-command.ts +178 -0
  651. package/src/slash-commands/marketplace-install-parser.ts +99 -0
  652. package/src/slash-commands/resource-commands.ts +250 -0
  653. package/src/ssh/config-writer.ts +183 -0
  654. package/src/ssh/connection-manager.ts +445 -0
  655. package/src/ssh/ssh-executor.ts +131 -0
  656. package/src/ssh/sshfs-mount.ts +137 -0
  657. package/src/ssh/utils.ts +8 -0
  658. package/src/stt/downloader.ts +71 -0
  659. package/src/stt/index.ts +3 -0
  660. package/src/stt/recorder.ts +351 -0
  661. package/src/stt/setup.ts +52 -0
  662. package/src/stt/stt-controller.ts +160 -0
  663. package/src/stt/transcribe.py +70 -0
  664. package/src/stt/transcriber.ts +91 -0
  665. package/src/system-prompt.ts +688 -0
  666. package/src/task/agents.ts +166 -0
  667. package/src/task/commands.ts +131 -0
  668. package/src/task/discovery.ts +126 -0
  669. package/src/task/executor.ts +1324 -0
  670. package/src/task/index.ts +1197 -0
  671. package/src/task/isolation-backend.ts +72 -0
  672. package/src/task/name-generator.ts +1577 -0
  673. package/src/task/output-manager.ts +107 -0
  674. package/src/task/parallel.ts +116 -0
  675. package/src/task/render.ts +1035 -0
  676. package/src/task/subprocess-tool-registry.ts +88 -0
  677. package/src/task/template.ts +33 -0
  678. package/src/task/types.ts +230 -0
  679. package/src/task/worktree.ts +580 -0
  680. package/src/task/xcsh-command.ts +26 -0
  681. package/src/thinking.ts +87 -0
  682. package/src/tools/action-renderer.ts +198 -0
  683. package/src/tools/archive-reader.ts +315 -0
  684. package/src/tools/ask.ts +791 -0
  685. package/src/tools/ast-edit.ts +492 -0
  686. package/src/tools/ast-grep.ts +453 -0
  687. package/src/tools/auto-generated-guard.ts +305 -0
  688. package/src/tools/bash-interactive.ts +383 -0
  689. package/src/tools/bash-interceptor.ts +67 -0
  690. package/src/tools/bash-normalize.ts +107 -0
  691. package/src/tools/bash-skill-urls.ts +246 -0
  692. package/src/tools/bash.ts +878 -0
  693. package/src/tools/browser-renderer.ts +129 -0
  694. package/src/tools/browser.ts +1366 -0
  695. package/src/tools/calculator.ts +543 -0
  696. package/src/tools/cancel-job.ts +100 -0
  697. package/src/tools/catalog-workflow-runner.ts +718 -0
  698. package/src/tools/checkpoint.ts +133 -0
  699. package/src/tools/context.ts +39 -0
  700. package/src/tools/debug.ts +1004 -0
  701. package/src/tools/display-image-renderer.ts +96 -0
  702. package/src/tools/display-image.ts +109 -0
  703. package/src/tools/exit-plan-mode.ts +101 -0
  704. package/src/tools/fetch.ts +1462 -0
  705. package/src/tools/find.ts +437 -0
  706. package/src/tools/fs-cache-invalidation.ts +33 -0
  707. package/src/tools/gemini-image.ts +1004 -0
  708. package/src/tools/grep.ts +705 -0
  709. package/src/tools/index.ts +442 -0
  710. package/src/tools/inspect-image-renderer.ts +101 -0
  711. package/src/tools/inspect-image.ts +176 -0
  712. package/src/tools/json-tree.ts +266 -0
  713. package/src/tools/jtd-to-json-schema.ts +199 -0
  714. package/src/tools/jtd-to-typescript.ts +136 -0
  715. package/src/tools/jtd-utils.ts +102 -0
  716. package/src/tools/list-limit.ts +40 -0
  717. package/src/tools/mermaid-renderer.ts +127 -0
  718. package/src/tools/notebook.ts +288 -0
  719. package/src/tools/output-meta.ts +588 -0
  720. package/src/tools/path-utils.ts +560 -0
  721. package/src/tools/plan-mode-guard.ts +41 -0
  722. package/src/tools/poll-tool.ts +177 -0
  723. package/src/tools/puppeteer/00_stealth_tampering.txt +63 -0
  724. package/src/tools/puppeteer/01_stealth_activity.txt +20 -0
  725. package/src/tools/puppeteer/02_stealth_hairline.txt +11 -0
  726. package/src/tools/puppeteer/03_stealth_botd.txt +384 -0
  727. package/src/tools/puppeteer/04_stealth_iframe.txt +81 -0
  728. package/src/tools/puppeteer/05_stealth_webgl.txt +75 -0
  729. package/src/tools/puppeteer/06_stealth_screen.txt +72 -0
  730. package/src/tools/puppeteer/07_stealth_fonts.txt +97 -0
  731. package/src/tools/puppeteer/08_stealth_audio.txt +51 -0
  732. package/src/tools/puppeteer/09_stealth_locale.txt +46 -0
  733. package/src/tools/puppeteer/10_stealth_plugins.txt +206 -0
  734. package/src/tools/puppeteer/11_stealth_hardware.txt +8 -0
  735. package/src/tools/puppeteer/12_stealth_codecs.txt +40 -0
  736. package/src/tools/puppeteer/13_stealth_worker.txt +74 -0
  737. package/src/tools/python.ts +1184 -0
  738. package/src/tools/read.ts +1591 -0
  739. package/src/tools/render-mermaid.ts +93 -0
  740. package/src/tools/render-utils.ts +677 -0
  741. package/src/tools/renderers.ts +82 -0
  742. package/src/tools/report-tool-issue.ts +80 -0
  743. package/src/tools/resolve.ts +196 -0
  744. package/src/tools/review.ts +238 -0
  745. package/src/tools/search-tool-bm25.ts +288 -0
  746. package/src/tools/sqlite-reader.ts +623 -0
  747. package/src/tools/ssh.ts +322 -0
  748. package/src/tools/submit-result.ts +229 -0
  749. package/src/tools/todo-render.ts +33 -0
  750. package/src/tools/todo-write.ts +440 -0
  751. package/src/tools/tool-errors.ts +62 -0
  752. package/src/tools/tool-result.ts +93 -0
  753. package/src/tools/tool-timeouts.ts +30 -0
  754. package/src/tools/vim.ts +981 -0
  755. package/src/tools/write.ts +671 -0
  756. package/src/tools/xcsh-api-renderer.ts +402 -0
  757. package/src/tools/xcsh-api.ts +887 -0
  758. package/src/tui/code-cell.ts +101 -0
  759. package/src/tui/file-list.ts +47 -0
  760. package/src/tui/index.ts +11 -0
  761. package/src/tui/output-block.ts +175 -0
  762. package/src/tui/status-line.ts +39 -0
  763. package/src/tui/tree-list.ts +84 -0
  764. package/src/tui/types.ts +15 -0
  765. package/src/tui/utils.ts +103 -0
  766. package/src/utils/changelog.ts +98 -0
  767. package/src/utils/clipboard.ts +80 -0
  768. package/src/utils/command-args.ts +76 -0
  769. package/src/utils/commit-message-generator.ts +137 -0
  770. package/src/utils/edit-mode.ts +50 -0
  771. package/src/utils/event-bus.ts +33 -0
  772. package/src/utils/external-editor.ts +65 -0
  773. package/src/utils/file-display-mode.ts +37 -0
  774. package/src/utils/file-mentions.ts +376 -0
  775. package/src/utils/fuzzy.ts +108 -0
  776. package/src/utils/git.ts +1495 -0
  777. package/src/utils/gitstatus.ts +140 -0
  778. package/src/utils/image-convert.ts +27 -0
  779. package/src/utils/image-loading.ts +98 -0
  780. package/src/utils/image-passthrough.ts +118 -0
  781. package/src/utils/image-resize.ts +272 -0
  782. package/src/utils/image-viewer.ts +17 -0
  783. package/src/utils/lang-from-path.ts +239 -0
  784. package/src/utils/markit.ts +81 -0
  785. package/src/utils/open.ts +20 -0
  786. package/src/utils/session-color.ts +55 -0
  787. package/src/utils/shell-snapshot.ts +188 -0
  788. package/src/utils/title-generator.ts +193 -0
  789. package/src/utils/tool-choice.ts +28 -0
  790. package/src/utils/tools-manager.ts +356 -0
  791. package/src/vim/buffer.ts +309 -0
  792. package/src/vim/commands.ts +382 -0
  793. package/src/vim/engine.ts +2426 -0
  794. package/src/vim/parser.ts +151 -0
  795. package/src/vim/render.ts +252 -0
  796. package/src/vim/types.ts +197 -0
  797. package/src/web/kagi.ts +174 -0
  798. package/src/web/parallel.ts +346 -0
  799. package/src/web/scrapers/artifacthub.ts +207 -0
  800. package/src/web/scrapers/arxiv.ts +83 -0
  801. package/src/web/scrapers/aur.ts +162 -0
  802. package/src/web/scrapers/biorxiv.ts +133 -0
  803. package/src/web/scrapers/bluesky.ts +262 -0
  804. package/src/web/scrapers/brew.ts +172 -0
  805. package/src/web/scrapers/cheatsh.ts +68 -0
  806. package/src/web/scrapers/chocolatey.ts +196 -0
  807. package/src/web/scrapers/choosealicense.ts +95 -0
  808. package/src/web/scrapers/cisa-kev.ts +87 -0
  809. package/src/web/scrapers/clojars.ts +154 -0
  810. package/src/web/scrapers/coingecko.ts +177 -0
  811. package/src/web/scrapers/crates-io.ts +110 -0
  812. package/src/web/scrapers/crossref.ts +136 -0
  813. package/src/web/scrapers/devto.ts +147 -0
  814. package/src/web/scrapers/discogs.ts +306 -0
  815. package/src/web/scrapers/discourse.ts +197 -0
  816. package/src/web/scrapers/dockerhub.ts +138 -0
  817. package/src/web/scrapers/docs-rs.ts +653 -0
  818. package/src/web/scrapers/fdroid.ts +134 -0
  819. package/src/web/scrapers/firefox-addons.ts +191 -0
  820. package/src/web/scrapers/flathub.ts +223 -0
  821. package/src/web/scrapers/github-gist.ts +58 -0
  822. package/src/web/scrapers/github.ts +452 -0
  823. package/src/web/scrapers/gitlab.ts +401 -0
  824. package/src/web/scrapers/go-pkg.ts +266 -0
  825. package/src/web/scrapers/hackage.ts +140 -0
  826. package/src/web/scrapers/hackernews.ts +189 -0
  827. package/src/web/scrapers/hex.ts +105 -0
  828. package/src/web/scrapers/huggingface.ts +321 -0
  829. package/src/web/scrapers/iacr.ts +89 -0
  830. package/src/web/scrapers/index.ts +252 -0
  831. package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
  832. package/src/web/scrapers/lemmy.ts +203 -0
  833. package/src/web/scrapers/lobsters.ts +175 -0
  834. package/src/web/scrapers/mastodon.ts +292 -0
  835. package/src/web/scrapers/maven.ts +138 -0
  836. package/src/web/scrapers/mdn.ts +169 -0
  837. package/src/web/scrapers/metacpan.ts +222 -0
  838. package/src/web/scrapers/musicbrainz.ts +250 -0
  839. package/src/web/scrapers/npm.ts +98 -0
  840. package/src/web/scrapers/nuget.ts +183 -0
  841. package/src/web/scrapers/nvd.ts +222 -0
  842. package/src/web/scrapers/ollama.ts +239 -0
  843. package/src/web/scrapers/open-vsx.ts +106 -0
  844. package/src/web/scrapers/opencorporates.ts +292 -0
  845. package/src/web/scrapers/openlibrary.ts +336 -0
  846. package/src/web/scrapers/orcid.ts +286 -0
  847. package/src/web/scrapers/osv.ts +176 -0
  848. package/src/web/scrapers/packagist.ts +160 -0
  849. package/src/web/scrapers/pub-dev.ts +143 -0
  850. package/src/web/scrapers/pubmed.ts +211 -0
  851. package/src/web/scrapers/pypi.ts +112 -0
  852. package/src/web/scrapers/rawg.ts +110 -0
  853. package/src/web/scrapers/readthedocs.ts +120 -0
  854. package/src/web/scrapers/reddit.ts +95 -0
  855. package/src/web/scrapers/repology.ts +251 -0
  856. package/src/web/scrapers/rfc.ts +201 -0
  857. package/src/web/scrapers/rubygems.ts +103 -0
  858. package/src/web/scrapers/searchcode.ts +190 -0
  859. package/src/web/scrapers/sec-edgar.ts +261 -0
  860. package/src/web/scrapers/semantic-scholar.ts +171 -0
  861. package/src/web/scrapers/snapcraft.ts +187 -0
  862. package/src/web/scrapers/sourcegraph.ts +336 -0
  863. package/src/web/scrapers/spdx.ts +108 -0
  864. package/src/web/scrapers/spotify.ts +198 -0
  865. package/src/web/scrapers/stackoverflow.ts +120 -0
  866. package/src/web/scrapers/terraform.ts +277 -0
  867. package/src/web/scrapers/tldr.ts +47 -0
  868. package/src/web/scrapers/twitter.ts +93 -0
  869. package/src/web/scrapers/types.ts +267 -0
  870. package/src/web/scrapers/utils.ts +109 -0
  871. package/src/web/scrapers/vimeo.ts +133 -0
  872. package/src/web/scrapers/vscode-marketplace.ts +187 -0
  873. package/src/web/scrapers/w3c.ts +156 -0
  874. package/src/web/scrapers/wikidata.ts +344 -0
  875. package/src/web/scrapers/wikipedia.ts +84 -0
  876. package/src/web/scrapers/youtube.ts +313 -0
  877. package/src/web/search/errors.ts +120 -0
  878. package/src/web/search/index.ts +346 -0
  879. package/src/web/search/params.ts +129 -0
  880. package/src/web/search/provider.ts +97 -0
  881. package/src/web/search/providers/anthropic.ts +339 -0
  882. package/src/web/search/providers/base.ts +35 -0
  883. package/src/web/search/providers/brave.ts +150 -0
  884. package/src/web/search/providers/codex.ts +402 -0
  885. package/src/web/search/providers/exa.ts +264 -0
  886. package/src/web/search/providers/firecrawl.ts +115 -0
  887. package/src/web/search/providers/gemini.ts +566 -0
  888. package/src/web/search/providers/jina.ts +99 -0
  889. package/src/web/search/providers/kagi.ts +70 -0
  890. package/src/web/search/providers/kimi.ts +157 -0
  891. package/src/web/search/providers/parallel.ts +63 -0
  892. package/src/web/search/providers/perplexity.ts +546 -0
  893. package/src/web/search/providers/synthetic.ts +113 -0
  894. package/src/web/search/providers/tavily.ts +162 -0
  895. package/src/web/search/providers/utils.ts +36 -0
  896. package/src/web/search/providers/zai.ts +311 -0
  897. package/src/web/search/render.ts +348 -0
  898. package/src/web/search/types.ts +438 -0
  899. package/src/web/search/utils.ts +17 -0
@@ -0,0 +1,688 @@
1
+ /**
2
+ * System prompt construction and project context loading
3
+ */
4
+
5
+ import * as fs from "node:fs";
6
+ import * as os from "node:os";
7
+ import * as path from "node:path";
8
+ import type { AgentTool } from "@f5xc-salesdemos/pi-agent-core";
9
+ import { $env, getGpuCachePath, getProjectDir, hasFsCode, isEnoent, logger, prompt } from "@f5xc-salesdemos/pi-utils";
10
+ import { $ } from "bun";
11
+ import { contextFileCapability } from "./capability/context-file";
12
+ import { systemPromptCapability } from "./capability/system-prompt";
13
+ import type { SkillsSettings } from "./config/settings";
14
+ import { type ContextFile, loadCapability, type SystemPrompt as SystemPromptFile } from "./discovery";
15
+ import { isApplicableToContext, loadSkills, type Skill } from "./extensibility/skills";
16
+ import customSystemPromptTemplate from "./prompts/system/custom-system-prompt.md" with { type: "text" };
17
+ import systemPromptTemplate from "./prompts/system/system-prompt.md" with { type: "text" };
18
+
19
+ let _buildMeta: { version: string; repoSlug: string } | null = null;
20
+
21
+ function getBuildMeta(): { version: string; repoSlug: string } {
22
+ if (_buildMeta) return _buildMeta;
23
+ try {
24
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
25
+ const mod = require("./internal-urls/build-info.generated");
26
+ _buildMeta = {
27
+ version: mod.BUILD_INFO?.version ?? "unknown",
28
+ repoSlug: mod.BUILD_INFO?.repoSlug ?? "unknown",
29
+ };
30
+ } catch {
31
+ _buildMeta = { version: "unknown", repoSlug: "unknown" };
32
+ }
33
+ return _buildMeta;
34
+ }
35
+ interface AlwaysApplyRule {
36
+ name: string;
37
+ content: string;
38
+ path: string;
39
+ }
40
+
41
+ function normalizePromptBlock(content: string): string {
42
+ return prompt.format(content, { renderPhase: "post-render" }).trim();
43
+ }
44
+
45
+ function splitComparablePromptBlocks(content: string | null | undefined): string[] {
46
+ const normalized = firstNonEmpty(content);
47
+ if (!normalized) return [];
48
+
49
+ return normalizePromptBlock(normalized)
50
+ .split(/\n{2,}/)
51
+ .map(block => block.trim())
52
+ .filter(block => block.length > 0);
53
+ }
54
+
55
+ function promptSourceContainsRule(source: string | null | undefined, ruleContent: string): boolean {
56
+ const sourceBlocks = splitComparablePromptBlocks(source);
57
+ const ruleBlocks = splitComparablePromptBlocks(ruleContent);
58
+ if (sourceBlocks.length === 0 || ruleBlocks.length === 0 || ruleBlocks.length > sourceBlocks.length) return false;
59
+
60
+ for (let start = 0; start <= sourceBlocks.length - ruleBlocks.length; start += 1) {
61
+ if (ruleBlocks.every((block, offset) => sourceBlocks[start + offset] === block)) return true;
62
+ }
63
+
64
+ return false;
65
+ }
66
+
67
+ function dedupeAlwaysApplyRules(
68
+ alwaysApplyRules: AlwaysApplyRule[] | undefined,
69
+ promptSources: Array<string | null | undefined>,
70
+ ): AlwaysApplyRule[] {
71
+ if (!alwaysApplyRules || alwaysApplyRules.length === 0) return [];
72
+
73
+ return alwaysApplyRules.filter(
74
+ rule => !promptSources.some(source => promptSourceContainsRule(source, rule.content)),
75
+ );
76
+ }
77
+
78
+ function dedupePromptSource(source: string | null | undefined, otherSources: Array<string | null | undefined>): string {
79
+ const resolvedSource = firstNonEmpty(source);
80
+ if (!resolvedSource) return "";
81
+
82
+ return otherSources.some(otherSource => promptSourceContainsRule(otherSource, resolvedSource)) ? "" : resolvedSource;
83
+ }
84
+
85
+ function firstNonEmpty(...values: (string | undefined | null)[]): string | null {
86
+ for (const value of values) {
87
+ const trimmed = value?.trim();
88
+ if (trimmed) return trimmed;
89
+ }
90
+ return null;
91
+ }
92
+
93
+ function parseWmicTable(output: string, header: string): string | null {
94
+ const lines = output
95
+ .split("\n")
96
+ .map(line => line.trim())
97
+ .filter(Boolean);
98
+ const filtered = lines.filter(line => line.toLowerCase() !== header.toLowerCase());
99
+ return filtered[0] ?? null;
100
+ }
101
+
102
+ const AGENTS_MD_MIN_DEPTH = 1;
103
+ const AGENTS_MD_MAX_DEPTH = 4;
104
+ const AGENTS_MD_LIMIT = 200;
105
+ const SYSTEM_PROMPT_PREP_TIMEOUT_MS = 5000;
106
+ const AGENTS_MD_EXCLUDED_DIRS = new Set(["node_modules", ".git"]);
107
+
108
+ interface AgentsMdSearch {
109
+ scopePath: string;
110
+ limit: number;
111
+ pattern: string;
112
+ files: string[];
113
+ }
114
+
115
+ function normalizePath(value: string): string {
116
+ return value.replace(/\\/g, "/");
117
+ }
118
+
119
+ function shouldSkipAgentsDir(name: string): boolean {
120
+ if (AGENTS_MD_EXCLUDED_DIRS.has(name)) return true;
121
+ return name.startsWith(".");
122
+ }
123
+
124
+ async function collectAgentsMdFiles(
125
+ root: string,
126
+ dir: string,
127
+ depth: number,
128
+ limit: number,
129
+ discovered: Set<string>,
130
+ ): Promise<void> {
131
+ if (depth > AGENTS_MD_MAX_DEPTH || discovered.size >= limit) {
132
+ return;
133
+ }
134
+
135
+ let entries: fs.Dirent[];
136
+ try {
137
+ entries = await fs.promises.readdir(dir, { withFileTypes: true });
138
+ } catch {
139
+ return;
140
+ }
141
+
142
+ if (depth >= AGENTS_MD_MIN_DEPTH) {
143
+ const hasAgentsMd = entries.some(entry => entry.isFile() && entry.name === "XCSH.md");
144
+ if (hasAgentsMd) {
145
+ const relPath = normalizePath(path.relative(root, path.join(dir, "XCSH.md")));
146
+ if (relPath.length > 0) {
147
+ discovered.add(relPath);
148
+ }
149
+ if (discovered.size >= limit) {
150
+ return;
151
+ }
152
+ }
153
+ }
154
+
155
+ if (depth === AGENTS_MD_MAX_DEPTH) {
156
+ return;
157
+ }
158
+
159
+ const childDirs = entries
160
+ .filter(entry => entry.isDirectory() && !shouldSkipAgentsDir(entry.name))
161
+ .map(entry => entry.name)
162
+ .sort();
163
+
164
+ await Promise.all(
165
+ childDirs.map(async child => {
166
+ if (discovered.size >= limit) return;
167
+ await collectAgentsMdFiles(root, path.join(dir, child), depth + 1, limit, discovered);
168
+ }),
169
+ );
170
+ }
171
+
172
+ async function listAgentsMdFiles(root: string, limit: number): Promise<string[]> {
173
+ try {
174
+ const discovered = new Set<string>();
175
+ await collectAgentsMdFiles(root, root, 0, limit, discovered);
176
+ return Array.from(discovered).sort().slice(0, limit);
177
+ } catch {
178
+ return [];
179
+ }
180
+ }
181
+
182
+ async function buildAgentsMdSearch(cwd: string): Promise<AgentsMdSearch> {
183
+ const files = await listAgentsMdFiles(cwd, AGENTS_MD_LIMIT);
184
+ return {
185
+ scopePath: ".",
186
+ limit: AGENTS_MD_LIMIT,
187
+ pattern: `XCSH.md depth ${AGENTS_MD_MIN_DEPTH}-${AGENTS_MD_MAX_DEPTH}`,
188
+ files,
189
+ };
190
+ }
191
+
192
+ async function getGpuModel(): Promise<string | null> {
193
+ switch (process.platform) {
194
+ case "win32": {
195
+ const output = await $`wmic path win32_VideoController get name`
196
+ .quiet()
197
+ .text()
198
+ .catch(() => null);
199
+ return output ? parseWmicTable(output, "Name") : null;
200
+ }
201
+ case "linux": {
202
+ const output = await $`lspci`
203
+ .quiet()
204
+ .text()
205
+ .catch(() => null);
206
+ if (!output) return null;
207
+ const gpus: Array<{ name: string; priority: number }> = [];
208
+ for (const line of output.split("\n")) {
209
+ if (!/(VGA|3D|Display)/i.test(line)) continue;
210
+ const parts = line.split(":");
211
+ const name = parts.length > 1 ? parts.slice(1).join(":").trim() : line.trim();
212
+ const nameLower = name.toLowerCase();
213
+ // Skip BMC/server management adapters
214
+ if (/aspeed|matrox g200|mgag200/i.test(name)) continue;
215
+ // Prioritize discrete GPUs
216
+ let priority = 0;
217
+ if (
218
+ nameLower.includes("nvidia") ||
219
+ nameLower.includes("geforce") ||
220
+ nameLower.includes("quadro") ||
221
+ nameLower.includes("rtx")
222
+ ) {
223
+ priority = 3;
224
+ } else if (nameLower.includes("amd") || nameLower.includes("radeon") || nameLower.includes("rx ")) {
225
+ priority = 3;
226
+ } else if (nameLower.includes("intel")) {
227
+ priority = 1;
228
+ } else {
229
+ priority = 2;
230
+ }
231
+ gpus.push({ name, priority });
232
+ }
233
+ if (gpus.length === 0) return null;
234
+ gpus.sort((a, b) => b.priority - a.priority);
235
+ return gpus[0].name;
236
+ }
237
+ default:
238
+ return null;
239
+ }
240
+ }
241
+
242
+ function getTerminalName(): string | undefined {
243
+ const termProgram = Bun.env.TERM_PROGRAM;
244
+ const termProgramVersion = Bun.env.TERM_PROGRAM_VERSION;
245
+ if (termProgram) {
246
+ return termProgramVersion ? `${termProgram} ${termProgramVersion}` : termProgram;
247
+ }
248
+
249
+ if (Bun.env.WT_SESSION) return "Windows Terminal";
250
+
251
+ const term = firstNonEmpty(Bun.env.TERM, Bun.env.COLORTERM, Bun.env.TERMINAL_EMULATOR);
252
+ return term ?? undefined;
253
+ }
254
+
255
+ /** Cached system info structure */
256
+ interface GpuCache {
257
+ gpu: string;
258
+ }
259
+
260
+ function getSystemInfoCachePath(): string {
261
+ return getGpuCachePath();
262
+ }
263
+
264
+ async function loadGpuCache(): Promise<GpuCache | null> {
265
+ try {
266
+ const cachePath = getSystemInfoCachePath();
267
+ const content = await Bun.file(cachePath).json();
268
+ return content as GpuCache;
269
+ } catch {
270
+ return null;
271
+ }
272
+ }
273
+
274
+ async function saveGpuCache(info: GpuCache): Promise<void> {
275
+ try {
276
+ const cachePath = getSystemInfoCachePath();
277
+ await Bun.write(cachePath, JSON.stringify(info, null, "\t"));
278
+ } catch {
279
+ // Silently ignore cache write failures
280
+ }
281
+ }
282
+
283
+ async function getCachedGpu(): Promise<string | undefined> {
284
+ const cached = await logger.time("getCachedGpu:loadGpuCache", loadGpuCache);
285
+ if (cached) return cached.gpu;
286
+ const gpu = await logger.time("getCachedGpu:getGpuModel", getGpuModel);
287
+ if (gpu) {
288
+ await logger.time("getCachedGpu:saveGpuCache", saveGpuCache, { gpu });
289
+ }
290
+ return gpu ?? undefined;
291
+ }
292
+ async function getEnvironmentInfo(): Promise<Array<{ label: string; value: string }>> {
293
+ const gpu = await getCachedGpu();
294
+ const cpus = os.cpus();
295
+ const build = getBuildMeta();
296
+ const entries: Array<{ label: string; value: string | undefined }> = [
297
+ { label: "xcsh", value: `v${build.version} (${build.repoSlug})` },
298
+ { label: "OS", value: `${os.platform()} ${os.release()}` },
299
+ { label: "Distro", value: os.type() },
300
+ { label: "Kernel", value: os.version() },
301
+ { label: "Arch", value: os.arch() },
302
+ { label: "CPU", value: `${cpus[0]?.model}` },
303
+ { label: "GPU", value: gpu },
304
+ { label: "Terminal", value: getTerminalName() },
305
+ ];
306
+ return entries.filter((e): e is { label: string; value: string } => !!e.value);
307
+ }
308
+
309
+ /** Resolve input as file path or literal string */
310
+ export async function resolvePromptInput(input: string | undefined, description: string): Promise<string | undefined> {
311
+ if (!input) {
312
+ return undefined;
313
+ } else if (input.includes("\n")) {
314
+ return input;
315
+ }
316
+
317
+ try {
318
+ return await Bun.file(input).text();
319
+ } catch (error) {
320
+ if (!hasFsCode(error, "ENAMETOOLONG") && !isEnoent(error)) {
321
+ logger.warn(`Could not read ${description} file`, { path: input, error: String(error) });
322
+ }
323
+ return input;
324
+ }
325
+ }
326
+
327
+ export interface LoadContextFilesOptions {
328
+ /** Working directory to start walking up from. Default: getProjectDir() */
329
+ cwd?: string;
330
+ }
331
+
332
+ function dedupeExactContextFiles(
333
+ contextFiles: Array<{ path: string; content: string; depth?: number }>,
334
+ ): Array<{ path: string; content: string; depth?: number }> {
335
+ const lastIndexByContent = new Map<string, number>();
336
+ for (const [index, file] of contextFiles.entries()) {
337
+ // Keep the closest matching context entry when content is byte-for-byte identical.
338
+ lastIndexByContent.set(file.content, index);
339
+ }
340
+
341
+ return contextFiles.filter((file, index) => lastIndexByContent.get(file.content) === index);
342
+ }
343
+
344
+ /**
345
+ * Load all project context files using the capability API.
346
+ * Returns {path, content, depth} entries for all discovered context files.
347
+ * Files are sorted by depth (descending) so files closer to cwd appear last/more prominent.
348
+ */
349
+ export async function loadProjectContextFiles(
350
+ options: LoadContextFilesOptions = {},
351
+ ): Promise<Array<{ path: string; content: string; depth?: number }>> {
352
+ const resolvedCwd = options.cwd ?? getProjectDir();
353
+
354
+ const result = await loadCapability(contextFileCapability.id, { cwd: resolvedCwd });
355
+
356
+ // Convert ContextFile items and preserve depth info
357
+ const files = result.items.map(item => {
358
+ const contextFile = item as ContextFile;
359
+ return {
360
+ path: contextFile.path,
361
+ content: contextFile.content,
362
+ depth: contextFile.depth,
363
+ };
364
+ });
365
+
366
+ // Sort by depth (descending): higher depth (farther from cwd) comes first,
367
+ // so files closer to cwd appear later and are more prominent
368
+ files.sort((a, b) => {
369
+ const depthA = a.depth ?? -1;
370
+ const depthB = b.depth ?? -1;
371
+ return depthB - depthA;
372
+ });
373
+
374
+ return dedupeExactContextFiles(files);
375
+ }
376
+
377
+ /**
378
+ * Load the effective system prompt customization from SYSTEM.md.
379
+ * Project-level SYSTEM.md overrides user-level SYSTEM.md.
380
+ */
381
+ export async function loadSystemPromptFiles(options: LoadContextFilesOptions = {}): Promise<string | null> {
382
+ const resolvedCwd = options.cwd ?? getProjectDir();
383
+
384
+ const result = await loadCapability<SystemPromptFile>(systemPromptCapability.id, { cwd: resolvedCwd });
385
+
386
+ if (result.items.length === 0) return null;
387
+
388
+ const projectLevel = result.items.find(item => item.level === "project");
389
+ if (projectLevel) {
390
+ return projectLevel.content;
391
+ }
392
+
393
+ const userLevel = result.items.find(item => item.level === "user");
394
+ return userLevel?.content ?? null;
395
+ }
396
+
397
+ export interface SystemPromptToolMetadata {
398
+ label: string;
399
+ description: string;
400
+ }
401
+
402
+ export function buildSystemPromptToolMetadata(
403
+ tools: Map<string, AgentTool>,
404
+ overrides: Partial<Record<string, Partial<SystemPromptToolMetadata>>> = {},
405
+ ): Map<string, SystemPromptToolMetadata> {
406
+ return new Map(
407
+ Array.from(tools.entries(), ([name, tool]) => {
408
+ const toolRecord = tool as AgentTool & { label?: string; description?: string };
409
+ const override = overrides[name];
410
+ return [
411
+ name,
412
+ {
413
+ label: override?.label ?? (typeof toolRecord.label === "string" ? toolRecord.label : ""),
414
+ description:
415
+ override?.description ?? (typeof toolRecord.description === "string" ? toolRecord.description : ""),
416
+ },
417
+ ] as const;
418
+ }),
419
+ );
420
+ }
421
+
422
+ export interface BuildSystemPromptOptions {
423
+ /** Custom system prompt (replaces default). */
424
+ customPrompt?: string;
425
+ /** Tools to include in prompt. */
426
+ tools?: Map<string, SystemPromptToolMetadata>;
427
+ /** Tool names to include in prompt. */
428
+ toolNames?: string[];
429
+ /** Text to append to system prompt. */
430
+ appendSystemPrompt?: string;
431
+ /** Repeat full tool descriptions in system prompt. Default: false */
432
+ repeatToolDescriptions?: boolean;
433
+ /** Skills settings for discovery. */
434
+ skillsSettings?: SkillsSettings;
435
+ /** Working directory. Default: getProjectDir() */
436
+ cwd?: string;
437
+ /** Pre-loaded context files (skips discovery if provided). */
438
+ contextFiles?: Array<{ path: string; content: string; depth?: number }>;
439
+ /** Skills provided directly to system prompt construction. */
440
+ skills?: Skill[];
441
+ /** Pre-loaded rulebook rules (descriptions, excluding TTSR and always-apply). */
442
+ rules?: Array<{ name: string; description?: string; path: string; globs?: string[] }>;
443
+ /** Intent field name injected into every tool schema. If set, explains the field in the prompt. */
444
+ intentField?: string;
445
+ /** Whether MCP tool discovery is active for this prompt build. */
446
+ mcpDiscoveryMode?: boolean;
447
+ /** Discoverable MCP server summaries to advertise when discovery mode is active. */
448
+ mcpDiscoveryServerSummaries?: string[];
449
+ /** Encourage the agent to delegate via tasks unless changes are trivial. */
450
+ eagerTasks?: boolean;
451
+ /** Rules with alwaysApply=true — their full content is injected into the prompt. */
452
+ alwaysApplyRules?: AlwaysApplyRule[];
453
+ /** Whether secret obfuscation is active. When true, explains the redaction format in the prompt. */
454
+ secretsEnabled?: boolean;
455
+ /** Active F5 XC context for the `{{#if context}}` template block. Omit when no context is active. */
456
+ context?: {
457
+ tenant: string;
458
+ namespace: string;
459
+ credentialSource: string;
460
+ authStatus: string;
461
+ };
462
+ /** Locale for LLM response language. When set and non-English, a `<language>` block is injected into the system prompt. */
463
+ locale?: { code: string; name: string };
464
+ /** Compact user profile hint injected into Workspace section. Omit when no profile exists. */
465
+ userProfile?: {
466
+ name: string;
467
+ role: string;
468
+ org: string;
469
+ };
470
+ /** Compact computer profile hint for the workstation section. Omit when no profile is cached. */
471
+ computerProfile?: {
472
+ ramGB: number;
473
+ cpu: string;
474
+ os: string;
475
+ cores?: number;
476
+ shell?: string;
477
+ diskFree?: string;
478
+ model?: string;
479
+ managed?: boolean;
480
+ admin?: boolean;
481
+ endpointAgentCount?: number;
482
+ };
483
+ knowledgeTopics?: string;
484
+ contextSkillDirs?: string[];
485
+ contextIncludeSkills?: string[];
486
+ contextExcludeSkills?: string[];
487
+ }
488
+
489
+ /** Build the system prompt with tools, guidelines, and context */
490
+ export async function buildSystemPrompt(options: BuildSystemPromptOptions = {}): Promise<string> {
491
+ if ($env.NULL_PROMPT === "true") {
492
+ return "";
493
+ }
494
+
495
+ const {
496
+ customPrompt,
497
+ tools,
498
+ appendSystemPrompt,
499
+ repeatToolDescriptions = false,
500
+ skillsSettings,
501
+ toolNames: providedToolNames,
502
+ cwd,
503
+ contextFiles: providedContextFiles,
504
+ skills: providedSkills,
505
+ rules,
506
+ alwaysApplyRules,
507
+ intentField,
508
+ mcpDiscoveryMode = false,
509
+ mcpDiscoveryServerSummaries = [],
510
+ eagerTasks = false,
511
+ secretsEnabled = false,
512
+ context,
513
+ } = options;
514
+ const resolvedCwd = cwd ?? getProjectDir();
515
+
516
+ const prepPromise = (() => {
517
+ const systemPromptCustomizationPromise = logger.time("loadSystemPromptFiles", loadSystemPromptFiles, {
518
+ cwd: resolvedCwd,
519
+ });
520
+ const contextFilesPromise = providedContextFiles
521
+ ? Promise.resolve(providedContextFiles)
522
+ : logger.time("loadProjectContextFiles", loadProjectContextFiles, { cwd: resolvedCwd });
523
+ const agentsMdSearchPromise = logger.time("buildAgentsMdSearch", buildAgentsMdSearch, resolvedCwd);
524
+ const mergedSkillsSettings = {
525
+ ...skillsSettings,
526
+ customDirectories: [...(skillsSettings?.customDirectories ?? []), ...(options.contextSkillDirs ?? [])],
527
+ includeSkills: [...(skillsSettings?.includeSkills ?? []), ...(options.contextIncludeSkills ?? [])],
528
+ // XCSHContext uses "excludeSkills"; SkillsSettings uses "ignoredSkills" — same semantics, different name.
529
+ ignoredSkills: [...(skillsSettings?.ignoredSkills ?? []), ...(options.contextExcludeSkills ?? [])],
530
+ };
531
+ const skillsPromise: Promise<Skill[]> =
532
+ providedSkills !== undefined
533
+ ? Promise.resolve(providedSkills)
534
+ : mergedSkillsSettings?.enabled !== false
535
+ ? loadSkills({ ...mergedSkillsSettings, cwd: resolvedCwd }).then(result => result.skills)
536
+ : Promise.resolve([]);
537
+
538
+ return Promise.all([
539
+ resolvePromptInput(customPrompt, "system prompt"),
540
+ resolvePromptInput(appendSystemPrompt, "append system prompt"),
541
+ systemPromptCustomizationPromise,
542
+ contextFilesPromise,
543
+ agentsMdSearchPromise,
544
+ skillsPromise,
545
+ ]).then(
546
+ ([
547
+ resolvedCustomPrompt,
548
+ resolvedAppendPrompt,
549
+ systemPromptCustomization,
550
+ contextFiles,
551
+ agentsMdSearch,
552
+ skills,
553
+ ]) => ({
554
+ resolvedCustomPrompt,
555
+ resolvedAppendPrompt,
556
+ systemPromptCustomization,
557
+ contextFiles,
558
+ agentsMdSearch,
559
+ skills,
560
+ }),
561
+ );
562
+ })();
563
+
564
+ const prepResult = await Promise.race([
565
+ prepPromise
566
+ .then(value => ({ type: "ready" as const, value }))
567
+ .catch(error => ({ type: "error" as const, error })),
568
+ Bun.sleep(SYSTEM_PROMPT_PREP_TIMEOUT_MS).then(() => ({ type: "timeout" as const })),
569
+ ]);
570
+
571
+ let resolvedCustomPrompt: string | undefined;
572
+ let resolvedAppendPrompt: string | undefined;
573
+ let systemPromptCustomization: string | null = null;
574
+ let contextFiles: Array<{ path: string; content: string; depth?: number }> = dedupeExactContextFiles(
575
+ providedContextFiles ?? [],
576
+ );
577
+ let agentsMdSearch: AgentsMdSearch = {
578
+ scopePath: ".",
579
+ limit: AGENTS_MD_LIMIT,
580
+ pattern: `XCSH.md depth ${AGENTS_MD_MIN_DEPTH}-${AGENTS_MD_MAX_DEPTH}`,
581
+ files: [],
582
+ };
583
+ let skills: Skill[] = providedSkills ?? [];
584
+
585
+ if (prepResult.type === "timeout") {
586
+ logger.warn("System prompt preparation timed out; using minimal startup context", {
587
+ cwd: resolvedCwd,
588
+ timeoutMs: SYSTEM_PROMPT_PREP_TIMEOUT_MS,
589
+ });
590
+ process.stderr.write(
591
+ `Warning: system prompt preparation timed out after ${SYSTEM_PROMPT_PREP_TIMEOUT_MS}ms; using minimal startup context.\n`,
592
+ );
593
+ } else if (prepResult.type === "error") {
594
+ logger.warn("System prompt preparation failed; using minimal startup context", {
595
+ cwd: resolvedCwd,
596
+ error: String(prepResult.error),
597
+ });
598
+ process.stderr.write("Warning: system prompt preparation failed; using minimal startup context.\n");
599
+ } else {
600
+ resolvedCustomPrompt = prepResult.value.resolvedCustomPrompt;
601
+ resolvedAppendPrompt = prepResult.value.resolvedAppendPrompt;
602
+ systemPromptCustomization = prepResult.value.systemPromptCustomization;
603
+ contextFiles = dedupeExactContextFiles(prepResult.value.contextFiles);
604
+ agentsMdSearch = prepResult.value.agentsMdSearch;
605
+ skills = prepResult.value.skills;
606
+ }
607
+
608
+ const date = new Date().toISOString().slice(0, 10);
609
+ const dateTime = date;
610
+ const promptCwd = resolvedCwd.replace(/\\/g, "/");
611
+
612
+ // Build tool metadata for system prompt rendering
613
+ // Priority: explicit list > tools map > defaults
614
+ // Default includes both bash and python; actual availability determined by settings in createTools
615
+ let toolNames = providedToolNames;
616
+ if (!toolNames) {
617
+ if (tools) {
618
+ // Tools map provided
619
+ toolNames = Array.from(tools.keys());
620
+ } else {
621
+ // Use defaults
622
+ toolNames = ["read", "bash", "python", "edit", "write"]; // TODO: Why?
623
+ }
624
+ }
625
+
626
+ // Build tool descriptions for system prompt rendering
627
+ const toolInfo = toolNames.map(name => ({
628
+ name,
629
+ label: tools?.get(name)?.label ?? "",
630
+ description: tools?.get(name)?.description ?? "",
631
+ }));
632
+
633
+ // Filter skills to only include those with read tool
634
+ const hasRead = tools?.has("read");
635
+ const filteredSkills = hasRead ? skills : [];
636
+
637
+ // contexts values match the tenant label derived from the API URL hostname (first DNS label).
638
+ // Example: https://acme.console.ves.volterra.io → tenant "acme" → contexts: ["acme"]
639
+ const contextName = context?.tenant;
640
+ const contextFilteredSkills = filteredSkills.filter(s => isApplicableToContext(s, contextName));
641
+
642
+ const effectiveSystemPromptCustomization = dedupePromptSource(systemPromptCustomization, [
643
+ resolvedCustomPrompt,
644
+ resolvedAppendPrompt,
645
+ ]);
646
+ const promptSources = [effectiveSystemPromptCustomization, resolvedCustomPrompt, resolvedAppendPrompt];
647
+ const injectedAlwaysApplyRules = dedupeAlwaysApplyRules(alwaysApplyRules, promptSources);
648
+
649
+ const environment = await logger.time("getEnvironmentInfo", getEnvironmentInfo);
650
+ const data = {
651
+ systemPromptCustomization: effectiveSystemPromptCustomization,
652
+ customPrompt: resolvedCustomPrompt,
653
+ appendPrompt: resolvedAppendPrompt ?? "",
654
+ tools: toolNames,
655
+ toolInfo,
656
+ repeatToolDescriptions,
657
+ environment,
658
+ contextFiles,
659
+ agentsMdSearch,
660
+ skills: contextFilteredSkills,
661
+ rules: rules ?? [],
662
+ alwaysApplyRules: injectedAlwaysApplyRules,
663
+ date,
664
+ dateTime,
665
+ cwd: promptCwd,
666
+ intentTracing: !!intentField,
667
+ intentField: intentField ?? "",
668
+ mcpDiscoveryMode,
669
+ hasMCPDiscoveryServers: mcpDiscoveryServerSummaries.length > 0,
670
+ mcpDiscoveryServerSummaries,
671
+ eagerTasks,
672
+ secretsEnabled,
673
+ context,
674
+ locale: options.locale,
675
+ userProfile: options.userProfile,
676
+ computerProfile: options.computerProfile,
677
+ knowledgeTopics: options.knowledgeTopics,
678
+ };
679
+ let rendered = prompt.render(resolvedCustomPrompt ? customSystemPromptTemplate : systemPromptTemplate, data);
680
+
681
+ // When autoqa is active the report_tool_issue tool is in the tool set — nudge the agent.
682
+ if (toolNames.includes("report_tool_issue")) {
683
+ rendered +=
684
+ "\n\n<critical>\nThe `report_tool_issue` tool is available for automated QA. If ANY tool you call returns output that is unexpected, incorrect, malformed, or otherwise inconsistent with what you anticipated given the tool's described behavior and your parameters, call `report_tool_issue` with the tool name and a concise description of the discrepancy. Do not hesitate to report — false positives are acceptable.\n</critical>";
685
+ }
686
+
687
+ return rendered;
688
+ }