salmon-loop 0.2.3

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 (655) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -0
  3. package/README.zh-CN.md +144 -0
  4. package/dist/cli/argv/headless-detection.js +60 -0
  5. package/dist/cli/argv/print-mode.js +60 -0
  6. package/dist/cli/authorization/allowlist.js +908 -0
  7. package/dist/cli/authorization/non-interactive.js +166 -0
  8. package/dist/cli/authorization/provider.js +416 -0
  9. package/dist/cli/chat-interface.js +83 -0
  10. package/dist/cli/chat.js +492 -0
  11. package/dist/cli/cli-runtime-context.js +12 -0
  12. package/dist/cli/commander-error-adapter.js +35 -0
  13. package/dist/cli/commander-error-meta.js +13 -0
  14. package/dist/cli/commands/allowlist.js +270 -0
  15. package/dist/cli/commands/chat.js +120 -0
  16. package/dist/cli/commands/config.js +250 -0
  17. package/dist/cli/commands/context.js +57 -0
  18. package/dist/cli/commands/dispatcher.js +53 -0
  19. package/dist/cli/commands/exit.js +9 -0
  20. package/dist/cli/commands/llm-output.js +135 -0
  21. package/dist/cli/commands/log-mode.js +143 -0
  22. package/dist/cli/commands/mode.js +136 -0
  23. package/dist/cli/commands/new.js +18 -0
  24. package/dist/cli/commands/parallel.js +256 -0
  25. package/dist/cli/commands/queue.js +130 -0
  26. package/dist/cli/commands/registry.js +85 -0
  27. package/dist/cli/commands/restore.js +26 -0
  28. package/dist/cli/commands/run/assistant-message.js +14 -0
  29. package/dist/cli/commands/run/config-resolution.js +37 -0
  30. package/dist/cli/commands/run/early-errors.js +108 -0
  31. package/dist/cli/commands/run/execute.js +73 -0
  32. package/dist/cli/commands/run/extensions-resolution.js +22 -0
  33. package/dist/cli/commands/run/handler.js +434 -0
  34. package/dist/cli/commands/run/headless-error-writer.js +182 -0
  35. package/dist/cli/commands/run/instruction-guard.js +24 -0
  36. package/dist/cli/commands/run/loop-params.js +46 -0
  37. package/dist/cli/commands/run/mode.js +8 -0
  38. package/dist/cli/commands/run/parse-options.js +67 -0
  39. package/dist/cli/commands/run/persist-session.js +35 -0
  40. package/dist/cli/commands/run/preflight.js +156 -0
  41. package/dist/cli/commands/run/reporter-factory.js +52 -0
  42. package/dist/cli/commands/run/runtime-llm.js +56 -0
  43. package/dist/cli/commands/run/runtime-options.js +30 -0
  44. package/dist/cli/commands/run/session.js +19 -0
  45. package/dist/cli/commands/run/structured-output.js +106 -0
  46. package/dist/cli/commands/run/types.js +2 -0
  47. package/dist/cli/commands/run/validate-options.js +28 -0
  48. package/dist/cli/commands/run/verbose.js +36 -0
  49. package/dist/cli/commands/run.js +2 -0
  50. package/dist/cli/commands/serve.js +323 -0
  51. package/dist/cli/commands/session.js +77 -0
  52. package/dist/cli/commands/snapshot-interactive.js +165 -0
  53. package/dist/cli/commands/snapshot.js +159 -0
  54. package/dist/cli/commands/status.js +17 -0
  55. package/dist/cli/commands/subagent.js +178 -0
  56. package/dist/cli/commands/subcommand-suggestions.js +63 -0
  57. package/dist/cli/commands/tool-names.js +155 -0
  58. package/dist/cli/commands/types.js +2 -0
  59. package/dist/cli/commands/utils.js +42 -0
  60. package/dist/cli/config.js +16 -0
  61. package/dist/cli/crash-reporter.js +5 -0
  62. package/dist/cli/headless/anthropic-stream-normalized-encoder.js +164 -0
  63. package/dist/cli/headless/anthropic-stream-protocol.js +62 -0
  64. package/dist/cli/headless/json-protocol.js +124 -0
  65. package/dist/cli/headless/native-stream-normalized-encoder.js +206 -0
  66. package/dist/cli/headless/openai-responses-canonical-applier.js +94 -0
  67. package/dist/cli/headless/openai-responses-state.js +294 -0
  68. package/dist/cli/headless/openai-stream-encoder.js +152 -0
  69. package/dist/cli/headless/stdout-writer.js +9 -0
  70. package/dist/cli/headless/stream-json-protocol.js +136 -0
  71. package/dist/cli/index.js +8 -0
  72. package/dist/cli/locales/en.js +409 -0
  73. package/dist/cli/locales/index.js +7 -0
  74. package/dist/cli/program-bootstrap.js +14 -0
  75. package/dist/cli/program-commands.js +106 -0
  76. package/dist/cli/program-options.js +15 -0
  77. package/dist/cli/program-output-mode.js +11 -0
  78. package/dist/cli/program-parse.js +24 -0
  79. package/dist/cli/reporters/anthropic-stream.js +77 -0
  80. package/dist/cli/reporters/base.js +2 -0
  81. package/dist/cli/reporters/json.js +69 -0
  82. package/dist/cli/reporters/openai-stream.js +72 -0
  83. package/dist/cli/reporters/standard.js +226 -0
  84. package/dist/cli/reporters/stderr-log-reporter.js +71 -0
  85. package/dist/cli/reporters/stream-json.js +111 -0
  86. package/dist/cli/run-cli.js +25 -0
  87. package/dist/cli/slash/runtime.js +240 -0
  88. package/dist/cli/ui/App.js +273 -0
  89. package/dist/cli/ui/authorization/bus.js +35 -0
  90. package/dist/cli/ui/components/CommandInput.js +200 -0
  91. package/dist/cli/ui/components/CommandSuggestionList.js +20 -0
  92. package/dist/cli/ui/components/Markdown.js +423 -0
  93. package/dist/cli/ui/components/MessageList.js +34 -0
  94. package/dist/cli/ui/components/StatusBannerLine.js +7 -0
  95. package/dist/cli/ui/components/TodoDrawer.js +60 -0
  96. package/dist/cli/ui/components/WelcomeMessage.js +14 -0
  97. package/dist/cli/ui/components/animations/StretchingThinking.js +51 -0
  98. package/dist/cli/ui/components/animations/ThinkingWave.js +15 -0
  99. package/dist/cli/ui/components/animations/TypeIndicator.js +30 -0
  100. package/dist/cli/ui/components/layout/SplitPane.js +11 -0
  101. package/dist/cli/ui/components/messageList/MessageItem.js +27 -0
  102. package/dist/cli/ui/components/messageList/QueuePreviewList.js +11 -0
  103. package/dist/cli/ui/components/messageList/items/EmphasisMessageItem.js +20 -0
  104. package/dist/cli/ui/components/messageList/items/InterruptMessageItem.js +10 -0
  105. package/dist/cli/ui/components/messageList/items/LightweightMessageItem.js +12 -0
  106. package/dist/cli/ui/components/messageList/items/StandardMessageItem.js +23 -0
  107. package/dist/cli/ui/components/messageList/items/WelcomeMessageItem.js +7 -0
  108. package/dist/cli/ui/components/messageList/messageListLayout.js +27 -0
  109. package/dist/cli/ui/components/messageList/streaming.js +51 -0
  110. package/dist/cli/ui/components/messageList/types.js +2 -0
  111. package/dist/cli/ui/components/messageList/utils.js +7 -0
  112. package/dist/cli/ui/components/sidebar/FileContext.js +8 -0
  113. package/dist/cli/ui/components/sidebar/MissionControl.js +8 -0
  114. package/dist/cli/ui/config.js +59 -0
  115. package/dist/cli/ui/hooks/useCommandLifecycle.js +110 -0
  116. package/dist/cli/ui/hooks/useCommandSuggestions.js +87 -0
  117. package/dist/cli/ui/hooks/useInputHistory.js +57 -0
  118. package/dist/cli/ui/hooks/useLoopEvents.js +382 -0
  119. package/dist/cli/ui/hooks/useLoopState.js +73 -0
  120. package/dist/cli/ui/hooks/useOnionExit.js +31 -0
  121. package/dist/cli/ui/hooks/useTerminalDimensions.js +34 -0
  122. package/dist/cli/ui/index.js +136 -0
  123. package/dist/cli/ui/selection/bus.js +35 -0
  124. package/dist/cli/ui/status/formatStatusBanner.js +8 -0
  125. package/dist/cli/ui/store/context.js +17 -0
  126. package/dist/cli/ui/store/reducer.js +264 -0
  127. package/dist/cli/ui/store/types.js +81 -0
  128. package/dist/cli/ui/styles/theme.js +295 -0
  129. package/dist/cli/ui/types.js +2 -0
  130. package/dist/cli/ui/utils/sanitizer.js +122 -0
  131. package/dist/cli/ui/utils/transcript.js +28 -0
  132. package/dist/cli/utils/asyncQueue.js +125 -0
  133. package/dist/cli/utils/audit-scope.js +10 -0
  134. package/dist/cli/utils/detectors/index.js +38 -0
  135. package/dist/cli/utils/llm-output.js +34 -0
  136. package/dist/cli/utils/outcome-reporter.js +17 -0
  137. package/dist/cli/utils/safe-fs.js +184 -0
  138. package/dist/cli/utils/verify-resolver.js +34 -0
  139. package/dist/cli/utils/worktree-prepare-resolver.js +18 -0
  140. package/dist/core/adapters/fs/atomic-file-writer.js +129 -0
  141. package/dist/core/adapters/fs/file-adapter.js +95 -0
  142. package/dist/core/adapters/fs/filesystem.js +31 -0
  143. package/dist/core/adapters/fs/index.js +5 -0
  144. package/dist/core/adapters/fs/node-fs.js +7 -0
  145. package/dist/core/adapters/fs/readonly-filesystem.js +23 -0
  146. package/dist/core/adapters/git/git-adapter.js +704 -0
  147. package/dist/core/adapters/git/git-runner.js +119 -0
  148. package/dist/core/adapters/git/lock-manager.js +314 -0
  149. package/dist/core/adapters/git/types.js +2 -0
  150. package/dist/core/adapters/path/index.js +2 -0
  151. package/dist/core/adapters/path/path-adapter.js +23 -0
  152. package/dist/core/ast/guard.js +116 -0
  153. package/dist/core/ast/index.js +4 -0
  154. package/dist/core/ast/parser.js +284 -0
  155. package/dist/core/ast/validator.js +46 -0
  156. package/dist/core/backends/salmon-loop/task-executor.js +68 -0
  157. package/dist/core/checkpoint-domain/manifest-store.js +379 -0
  158. package/dist/core/checkpoint-domain/service.js +84 -0
  159. package/dist/core/checkpoint-domain/types.js +2 -0
  160. package/dist/core/config/defaults.js +50 -0
  161. package/dist/core/config/errors.js +11 -0
  162. package/dist/core/config/file-format.js +108 -0
  163. package/dist/core/config/index.js +7 -0
  164. package/dist/core/config/limits.js +77 -0
  165. package/dist/core/config/load.js +34 -0
  166. package/dist/core/config/normalize.js +35 -0
  167. package/dist/core/config/paths.js +20 -0
  168. package/dist/core/config/redact.js +16 -0
  169. package/dist/core/config/resolve-env.js +43 -0
  170. package/dist/core/config/resolve-llm.js +130 -0
  171. package/dist/core/config/resolve.js +68 -0
  172. package/dist/core/config/resolvers/ast-validation.js +8 -0
  173. package/dist/core/config/resolvers/context.js +21 -0
  174. package/dist/core/config/resolvers/observability.js +45 -0
  175. package/dist/core/config/resolvers/output.js +8 -0
  176. package/dist/core/config/resolvers/permission-mode.js +6 -0
  177. package/dist/core/config/resolvers/security.js +14 -0
  178. package/dist/core/config/resolvers/server.js +36 -0
  179. package/dist/core/config/resolvers/tool-authorization.js +39 -0
  180. package/dist/core/config/resolvers/ui.js +26 -0
  181. package/dist/core/config/types/config-file.js +2 -0
  182. package/dist/core/config/types/primitives.js +9 -0
  183. package/dist/core/config/types/resolved.js +2 -0
  184. package/dist/core/config/types.js +4 -0
  185. package/dist/core/config/validate.js +852 -0
  186. package/dist/core/context/assembly/default-prompt-assembler.js +7 -0
  187. package/dist/core/context/assembly/prompt-assembler.js +2 -0
  188. package/dist/core/context/ast/import-extractor.js +28 -0
  189. package/dist/core/context/ast/module-resolver.js +61 -0
  190. package/dist/core/context/ast/source-outline.js +25 -0
  191. package/dist/core/context/audit-constants.js +23 -0
  192. package/dist/core/context/audit.js +54 -0
  193. package/dist/core/context/budget/dynamic-adjuster.js +149 -0
  194. package/dist/core/context/budget/example-integration.js +49 -0
  195. package/dist/core/context/budget/integration.js +93 -0
  196. package/dist/core/context/builder.js +289 -0
  197. package/dist/core/context/cache/errors.js +16 -0
  198. package/dist/core/context/cache/incremental-updater.js +131 -0
  199. package/dist/core/context/cache/index.js +25 -0
  200. package/dist/core/context/cache/path-resolver.js +127 -0
  201. package/dist/core/context/cache/prompt-caching.js +207 -0
  202. package/dist/core/context/cache/store-factory.js +63 -0
  203. package/dist/core/context/cache/store.js +193 -0
  204. package/dist/core/context/cache/types.js +15 -0
  205. package/dist/core/context/compression/js-like-comments.js +139 -0
  206. package/dist/core/context/compression/smart-compress.js +61 -0
  207. package/dist/core/context/compression/whitespace.js +26 -0
  208. package/dist/core/context/dependencies.js +102 -0
  209. package/dist/core/context/effectiveness/index.js +25 -0
  210. package/dist/core/context/effectiveness/tracker.js +253 -0
  211. package/dist/core/context/effectiveness/types.js +15 -0
  212. package/dist/core/context/formatters/index.js +7 -0
  213. package/dist/core/context/formatters/json-converter.js +662 -0
  214. package/dist/core/context/formatters/types.js +6 -0
  215. package/dist/core/context/formatters/xml-context.js +296 -0
  216. package/dist/core/context/gatherers/architecture-gatherer.js +75 -0
  217. package/dist/core/context/gatherers/artifact-gatherer.js +53 -0
  218. package/dist/core/context/gatherers/ast-gatherer.js +370 -0
  219. package/dist/core/context/gatherers/ghost-dependency-gatherer.js +46 -0
  220. package/dist/core/context/gatherers/git-diff-gatherer.js +91 -0
  221. package/dist/core/context/gatherers/git-history-gatherer.js +57 -0
  222. package/dist/core/context/gatherers/knowledge-gatherer.js +101 -0
  223. package/dist/core/context/gatherers/metadata-gatherer.js +59 -0
  224. package/dist/core/context/gatherers/primary-text-gatherer.js +36 -0
  225. package/dist/core/context/gatherers/ripgrep-gatherer.js +104 -0
  226. package/dist/core/context/hash.js +52 -0
  227. package/dist/core/context/index.js +3 -0
  228. package/dist/core/context/keywords.js +179 -0
  229. package/dist/core/context/policies/budget-policy.js +36 -0
  230. package/dist/core/context/policies/pack-until-full.js +419 -0
  231. package/dist/core/context/scoring/relevance.js +191 -0
  232. package/dist/core/context/service-deps.js +32 -0
  233. package/dist/core/context/service-helpers.js +32 -0
  234. package/dist/core/context/service.js +265 -0
  235. package/dist/core/context/steps/context-budget.js +157 -0
  236. package/dist/core/context/steps/context-gather.js +71 -0
  237. package/dist/core/context/steps/context-primary.js +19 -0
  238. package/dist/core/context/steps/context-promotion.js +78 -0
  239. package/dist/core/context/steps/context-targets.js +85 -0
  240. package/dist/core/context/steps/types.js +2 -0
  241. package/dist/core/context/summarization/index.js +27 -0
  242. package/dist/core/context/summarization/prompts.js +80 -0
  243. package/dist/core/context/summarization/summarizer.js +377 -0
  244. package/dist/core/context/summarization/types.js +29 -0
  245. package/dist/core/context/targeting/churn-policy.js +27 -0
  246. package/dist/core/context/targeting/target-resolver.js +491 -0
  247. package/dist/core/context/token/adaptive-budget.js +364 -0
  248. package/dist/core/context/token/cache.js +163 -0
  249. package/dist/core/context/token/counter.js +190 -0
  250. package/dist/core/context/token/encoding-registry.js +173 -0
  251. package/dist/core/context/token/index.js +31 -0
  252. package/dist/core/context/token/token-budget.js +213 -0
  253. package/dist/core/context/token/types.js +10 -0
  254. package/dist/core/context/truncation/index.js +23 -0
  255. package/dist/core/context/truncation/semantic-truncator.js +103 -0
  256. package/dist/core/context/truncation/strategies/error-stack.js +94 -0
  257. package/dist/core/context/truncation/strategies/generic.js +48 -0
  258. package/dist/core/context/truncation/strategies/git-diff.js +99 -0
  259. package/dist/core/context/truncation/strategies/index.js +10 -0
  260. package/dist/core/context/truncation/strategies/json.js +142 -0
  261. package/dist/core/context/truncation/strategies/log.js +131 -0
  262. package/dist/core/context/truncation/strategies/test-result.js +140 -0
  263. package/dist/core/context/truncation/type-detector.js +133 -0
  264. package/dist/core/context/truncation/types.js +16 -0
  265. package/dist/core/context/types.js +2 -0
  266. package/dist/core/extensions/index.js +118 -0
  267. package/dist/core/extensions/load.js +36 -0
  268. package/dist/core/extensions/merge.js +29 -0
  269. package/dist/core/extensions/paths.js +40 -0
  270. package/dist/core/extensions/redact.js +37 -0
  271. package/dist/core/extensions/schemas.js +70 -0
  272. package/dist/core/extensions/types.js +2 -0
  273. package/dist/core/facades/cli-authorization-allowlist.js +3 -0
  274. package/dist/core/facades/cli-authorization-non-interactive.js +3 -0
  275. package/dist/core/facades/cli-authorization-provider.js +2 -0
  276. package/dist/core/facades/cli-chat.js +11 -0
  277. package/dist/core/facades/cli-command-allowlist.js +3 -0
  278. package/dist/core/facades/cli-command-chat.js +8 -0
  279. package/dist/core/facades/cli-command-checkpoint.js +3 -0
  280. package/dist/core/facades/cli-command-config.js +10 -0
  281. package/dist/core/facades/cli-command-dispatcher.js +2 -0
  282. package/dist/core/facades/cli-command-parallel.js +8 -0
  283. package/dist/core/facades/cli-command-session.js +2 -0
  284. package/dist/core/facades/cli-command-tool-names.js +6 -0
  285. package/dist/core/facades/cli-context.js +8 -0
  286. package/dist/core/facades/cli-headless.js +3 -0
  287. package/dist/core/facades/cli-observability.js +3 -0
  288. package/dist/core/facades/cli-program-bootstrap.js +2 -0
  289. package/dist/core/facades/cli-reporters.js +5 -0
  290. package/dist/core/facades/cli-run-execute.js +3 -0
  291. package/dist/core/facades/cli-run-handler.js +7 -0
  292. package/dist/core/facades/cli-run-headless-error-writer.js +2 -0
  293. package/dist/core/facades/cli-run-loop-params.js +2 -0
  294. package/dist/core/facades/cli-run-persist-session.js +2 -0
  295. package/dist/core/facades/cli-run-runtime-llm.js +5 -0
  296. package/dist/core/facades/cli-serve.js +21 -0
  297. package/dist/core/facades/cli-slash-runtime.js +9 -0
  298. package/dist/core/facades/cli-subagent.js +2 -0
  299. package/dist/core/facades/cli-ui.js +5 -0
  300. package/dist/core/facades/cli-utils-llm-output.js +3 -0
  301. package/dist/core/facades/cli-utils-path.js +2 -0
  302. package/dist/core/facades/cli-utils-worktree.js +2 -0
  303. package/dist/core/failure/diagnostics.js +221 -0
  304. package/dist/core/feedback/index.js +28 -0
  305. package/dist/core/feedback/parsers.js +59 -0
  306. package/dist/core/feedback/patterns.js +26 -0
  307. package/dist/core/feedback/types.js +2 -0
  308. package/dist/core/grizzco/domain/grizzco-types.js +41 -0
  309. package/dist/core/grizzco/dsl/DecisionEngine.js +149 -0
  310. package/dist/core/grizzco/dsl/MicroTaskRunner.js +39 -0
  311. package/dist/core/grizzco/dsl/llm-strategy.js +80 -0
  312. package/dist/core/grizzco/dsl/strategies.js +69 -0
  313. package/dist/core/grizzco/dsl/types.js +2 -0
  314. package/dist/core/grizzco/engine/observability/event-adapter.js +41 -0
  315. package/dist/core/grizzco/engine/observability/index.js +3 -0
  316. package/dist/core/grizzco/engine/observability/loop-telemetry.js +51 -0
  317. package/dist/core/grizzco/engine/outcome/index.js +2 -0
  318. package/dist/core/grizzco/engine/outcome/loop-result-mapper.js +167 -0
  319. package/dist/core/grizzco/engine/pipeline/pipeline.js +335 -0
  320. package/dist/core/grizzco/engine/pipeline/types.js +2 -0
  321. package/dist/core/grizzco/engine/transaction/attempt-failure.js +242 -0
  322. package/dist/core/grizzco/engine/transaction/authorization-summary.js +44 -0
  323. package/dist/core/grizzco/engine/transaction/index.js +3 -0
  324. package/dist/core/grizzco/engine/transaction/report-mapper.js +50 -0
  325. package/dist/core/grizzco/engine/transaction/retry-policy.js +19 -0
  326. package/dist/core/grizzco/engine/transaction/runner-builder.js +45 -0
  327. package/dist/core/grizzco/engine/transaction/session.js +58 -0
  328. package/dist/core/grizzco/engine/transaction/transaction-runner.js +193 -0
  329. package/dist/core/grizzco/engine/transaction/types.js +2 -0
  330. package/dist/core/grizzco/execution/Executor.js +58 -0
  331. package/dist/core/grizzco/execution/RejectionManager.js +71 -0
  332. package/dist/core/grizzco/execution/WorkerFactory.js +31 -0
  333. package/dist/core/grizzco/flows/SalmonLoopFlow.js +102 -0
  334. package/dist/core/grizzco/runtime/apply-back-runtime.js +136 -0
  335. package/dist/core/grizzco/runtime/apply-back-utils.js +13 -0
  336. package/dist/core/grizzco/runtime/host/host-runner.js +99 -0
  337. package/dist/core/grizzco/runtime/host/index.js +2 -0
  338. package/dist/core/grizzco/runtime/host/types.js +2 -0
  339. package/dist/core/grizzco/services/CachedService.js +42 -0
  340. package/dist/core/grizzco/services/implementations/default/GitConfigService.js +38 -0
  341. package/dist/core/grizzco/services/implementations/mock/MockLockService.js +11 -0
  342. package/dist/core/grizzco/services/implementations/mock/MockUserQuotaService.js +11 -0
  343. package/dist/core/grizzco/services/registry.js +30 -0
  344. package/dist/core/grizzco/services/types.js +2 -0
  345. package/dist/core/grizzco/steps/answer.js +75 -0
  346. package/dist/core/grizzco/steps/apply-back.js +46 -0
  347. package/dist/core/grizzco/steps/apply.js +136 -0
  348. package/dist/core/grizzco/steps/ast-validate.js +37 -0
  349. package/dist/core/grizzco/steps/audit.js +311 -0
  350. package/dist/core/grizzco/steps/context.js +74 -0
  351. package/dist/core/grizzco/steps/display-answer.js +6 -0
  352. package/dist/core/grizzco/steps/display-report.js +158 -0
  353. package/dist/core/grizzco/steps/display-research.js +6 -0
  354. package/dist/core/grizzco/steps/displayReview.js +6 -0
  355. package/dist/core/grizzco/steps/explore.js +245 -0
  356. package/dist/core/grizzco/steps/extractIssues.js +27 -0
  357. package/dist/core/grizzco/steps/generateFixPlan.js +13 -0
  358. package/dist/core/grizzco/steps/generateReview.js +71 -0
  359. package/dist/core/grizzco/steps/patch.js +220 -0
  360. package/dist/core/grizzco/steps/plan.js +191 -0
  361. package/dist/core/grizzco/steps/preflight.js +93 -0
  362. package/dist/core/grizzco/steps/prepare-deps.js +49 -0
  363. package/dist/core/grizzco/steps/read-only-shrink.js +4 -0
  364. package/dist/core/grizzco/steps/research.js +188 -0
  365. package/dist/core/grizzco/steps/rollback.js +138 -0
  366. package/dist/core/grizzco/steps/shrink.js +64 -0
  367. package/dist/core/grizzco/steps/validate.js +40 -0
  368. package/dist/core/grizzco/steps/verify.js +136 -0
  369. package/dist/core/grizzco/validation/AstValidationService.js +133 -0
  370. package/dist/core/grizzco/validation/ContextValidator.js +17 -0
  371. package/dist/core/grizzco/validation/ast-validation-policy.js +11 -0
  372. package/dist/core/grizzco/workers/direct-write-worker.js +44 -0
  373. package/dist/core/grizzco/workers/git-apply-worker.js +75 -0
  374. package/dist/core/grizzco/workers/i-merge-worker.js +2 -0
  375. package/dist/core/grizzco/workers/mm-three-way-worker.js +117 -0
  376. package/dist/core/grizzco/workers/no-op-worker.js +18 -0
  377. package/dist/core/grizzco/workers/overwrite-binary-worker.js +29 -0
  378. package/dist/core/grizzco/workers/strata-sync-worker.js +69 -0
  379. package/dist/core/grizzco/workers/three-way-merge-worker.js +84 -0
  380. package/dist/core/grizzco/workers/three-way-staged-worker.js +93 -0
  381. package/dist/core/grizzco/workers/union-merge-worker.js +71 -0
  382. package/dist/core/history/input-history.js +55 -0
  383. package/dist/core/intent/chat-intent.js +250 -0
  384. package/dist/core/interaction/events/bus.js +52 -0
  385. package/dist/core/interaction/model/events.js +2 -0
  386. package/dist/core/interaction/model/index.js +3 -0
  387. package/dist/core/interaction/model/task-state.js +9 -0
  388. package/dist/core/interaction/model/transition-policy.js +50 -0
  389. package/dist/core/interaction/model/types.js +2 -0
  390. package/dist/core/interaction/orchestration/facade.js +190 -0
  391. package/dist/core/interaction/orchestration/index.js +2 -0
  392. package/dist/core/interaction/orchestration/store.js +32 -0
  393. package/dist/core/interaction/sync/task-sync-engine.js +57 -0
  394. package/dist/core/interaction/turn-stop-reason.js +27 -0
  395. package/dist/core/language-support/index.js +3 -0
  396. package/dist/core/language-support/orchestrator.js +37 -0
  397. package/dist/core/language-support/strategies/extension-candidate-strategy.js +27 -0
  398. package/dist/core/language-support/strategies/index.js +3 -0
  399. package/dist/core/language-support/strategies/language-query-strategy.js +26 -0
  400. package/dist/core/llm/ai-sdk/chat-executor.js +88 -0
  401. package/dist/core/llm/ai-sdk/langfuse-headers.js +28 -0
  402. package/dist/core/llm/ai-sdk/message-mapper.js +240 -0
  403. package/dist/core/llm/ai-sdk/observation-context.js +16 -0
  404. package/dist/core/llm/ai-sdk/provider-factory.js +29 -0
  405. package/dist/core/llm/ai-sdk/request-params.js +18 -0
  406. package/dist/core/llm/ai-sdk/request-runtime.js +168 -0
  407. package/dist/core/llm/ai-sdk/result-mapper.js +31 -0
  408. package/dist/core/llm/ai-sdk/retry-classifier.js +82 -0
  409. package/dist/core/llm/ai-sdk/retry-executor.js +38 -0
  410. package/dist/core/llm/ai-sdk.js +92 -0
  411. package/dist/core/llm/audit.js +2 -0
  412. package/dist/core/llm/base-url.js +18 -0
  413. package/dist/core/llm/contracts/repair.js +68 -0
  414. package/dist/core/llm/errors.js +172 -0
  415. package/dist/core/llm/factory.js +21 -0
  416. package/dist/core/llm/http/index.js +2 -0
  417. package/dist/core/llm/index.js +6 -0
  418. package/dist/core/llm/message-composition.js +25 -0
  419. package/dist/core/llm/openai.js +69 -0
  420. package/dist/core/llm/output-policy.js +192 -0
  421. package/dist/core/llm/phase-router.js +55 -0
  422. package/dist/core/llm/redact.js +37 -0
  423. package/dist/core/llm/registry.js +81 -0
  424. package/dist/core/llm/retry-utils.js +114 -0
  425. package/dist/core/llm/stream-utils.js +87 -0
  426. package/dist/core/llm/utils.js +82 -0
  427. package/dist/core/observability/audit-file.js +199 -0
  428. package/dist/core/observability/audit-trail.js +125 -0
  429. package/dist/core/observability/authorization-decisions.js +54 -0
  430. package/dist/core/observability/debug-artifacts.js +61 -0
  431. package/dist/core/observability/error-envelope.js +63 -0
  432. package/dist/core/observability/error-mapping.js +271 -0
  433. package/dist/core/observability/ignored-error.js +6 -0
  434. package/dist/core/observability/logger.js +457 -0
  435. package/dist/core/observability/loop-event-reporter.js +46 -0
  436. package/dist/core/observability/monitor.js +240 -0
  437. package/dist/core/observability/run-outcome-reporter.js +15 -0
  438. package/dist/core/observability/token-usage.js +36 -0
  439. package/dist/core/observability/ui-log-sanitize.js +35 -0
  440. package/dist/core/patch/aggregator.js +93 -0
  441. package/dist/core/patch/diff.js +298 -0
  442. package/dist/core/permission-gate/default-gate.js +115 -0
  443. package/dist/core/permission-gate/gate.js +2 -0
  444. package/dist/core/permission-gate/types.js +2 -0
  445. package/dist/core/plan/index.js +2 -0
  446. package/dist/core/plan/manager.js +123 -0
  447. package/dist/core/plan/markdown-editor.js +238 -0
  448. package/dist/core/plan/storage.js +75 -0
  449. package/dist/core/plan/types.js +2 -0
  450. package/dist/core/plugin/interface.js +2 -0
  451. package/dist/core/plugin/loader.js +130 -0
  452. package/dist/core/plugin/registry.js +90 -0
  453. package/dist/core/plugin/validator.js +98 -0
  454. package/dist/core/prompts/registry.js +189 -0
  455. package/dist/core/prompts/runtime.js +69 -0
  456. package/dist/core/prompts/schema.js +2 -0
  457. package/dist/core/prompts/templates/phases/explore_user.hbs +26 -0
  458. package/dist/core/prompts/templates/phases/patch_user.hbs +57 -0
  459. package/dist/core/prompts/templates/phases/plan_user.hbs +33 -0
  460. package/dist/core/prompts/templates/system/_context_json_legend.hbs +21 -0
  461. package/dist/core/prompts/templates/system/_tool_defs.hbs +60 -0
  462. package/dist/core/prompts/templates/system/explore_system.hbs +26 -0
  463. package/dist/core/prompts/templates/system/main_system.hbs +18 -0
  464. package/dist/core/prompts/templates/system/patch_system.hbs +10 -0
  465. package/dist/core/prompts/templates/system/plan_system.hbs +1 -0
  466. package/dist/core/prompts/templates/system/reflection.hbs +39 -0
  467. package/dist/core/protocols/a2a/agent-card.js +30 -0
  468. package/dist/core/protocols/a2a/mapper.js +14 -0
  469. package/dist/core/protocols/a2a/sdk/auth-middleware.js +31 -0
  470. package/dist/core/protocols/a2a/sdk/executor.js +301 -0
  471. package/dist/core/protocols/a2a/sdk/server.js +24 -0
  472. package/dist/core/protocols/a2a/task-projection.js +45 -0
  473. package/dist/core/protocols/acp/acp-command-runner.js +204 -0
  474. package/dist/core/protocols/acp/acp-filesystem.js +43 -0
  475. package/dist/core/protocols/acp/checkpoint-meta.js +2 -0
  476. package/dist/core/protocols/acp/formal-agent.js +1201 -0
  477. package/dist/core/protocols/acp/handlers.js +51 -0
  478. package/dist/core/protocols/acp/permission-provider.js +122 -0
  479. package/dist/core/protocols/acp/stdio-server.js +116 -0
  480. package/dist/core/reflection/engine.js +55 -0
  481. package/dist/core/reflection/types.js +2 -0
  482. package/dist/core/runtime/agent-server-runtime.js +88 -0
  483. package/dist/core/runtime/bun-runtime.js +26 -0
  484. package/dist/core/runtime/command-runner-context.js +16 -0
  485. package/dist/core/runtime/exit-codes.js +11 -0
  486. package/dist/core/runtime/fastify-fetch-bridge.js +51 -0
  487. package/dist/core/runtime/fastify-server-bundle.js +26 -0
  488. package/dist/core/runtime/initialize.js +132 -0
  489. package/dist/core/runtime/loop-finalize.js +71 -0
  490. package/dist/core/runtime/loop-run-lifecycle.js +73 -0
  491. package/dist/core/runtime/loop-run-reporter.js +19 -0
  492. package/dist/core/runtime/loop-runtime-config.js +26 -0
  493. package/dist/core/runtime/loop-session-runner.js +30 -0
  494. package/dist/core/runtime/loop.js +84 -0
  495. package/dist/core/runtime/paths.js +84 -0
  496. package/dist/core/runtime/process-runner.js +16 -0
  497. package/dist/core/runtime/process-types.js +2 -0
  498. package/dist/core/runtime/semaphore.js +41 -0
  499. package/dist/core/runtime/sidecar-fastify-plugin.js +35 -0
  500. package/dist/core/runtime/sidecar-paths.js +47 -0
  501. package/dist/core/runtime/sidecar-route-catalog.js +103 -0
  502. package/dist/core/runtime/spawn-command.js +392 -0
  503. package/dist/core/runtime/spawn-interactive.js +71 -0
  504. package/dist/core/security/redaction.js +160 -0
  505. package/dist/core/session/compression.js +323 -0
  506. package/dist/core/session/flow.js +85 -0
  507. package/dist/core/session/manager.js +313 -0
  508. package/dist/core/session/pruning-strategy.js +153 -0
  509. package/dist/core/session/session-context-builder.js +122 -0
  510. package/dist/core/session/summary-sync.js +82 -0
  511. package/dist/core/session/token-tracker.js +82 -0
  512. package/dist/core/session/types.js +2 -0
  513. package/dist/core/skills/bridge.js +33 -0
  514. package/dist/core/skills/index.js +8 -0
  515. package/dist/core/skills/loader.js +80 -0
  516. package/dist/core/skills/parser.js +66 -0
  517. package/dist/core/skills/runtime/MicroTaskRunner.js +102 -0
  518. package/dist/core/skills/runtime/SkillRunner.js +108 -0
  519. package/dist/core/skills/strategy.js +29 -0
  520. package/dist/core/skills/types.js +2 -0
  521. package/dist/core/slash/index.js +6 -0
  522. package/dist/core/slash/parser.js +33 -0
  523. package/dist/core/slash/registry.js +78 -0
  524. package/dist/core/slash/router.js +76 -0
  525. package/dist/core/slash/steps/slash-decide.js +19 -0
  526. package/dist/core/slash/steps/slash-execute.js +73 -0
  527. package/dist/core/slash/steps/types.js +2 -0
  528. package/dist/core/slash/strategy.js +33 -0
  529. package/dist/core/slash/types.js +2 -0
  530. package/dist/core/strata/checkpoint/manager.js +492 -0
  531. package/dist/core/strata/checkpoint/snapshot-audit.js +88 -0
  532. package/dist/core/strata/checkpoint/snapshot-create.js +79 -0
  533. package/dist/core/strata/checkpoint/snapshot-write-tree.js +72 -0
  534. package/dist/core/strata/engine/shadow-merge-engine.js +394 -0
  535. package/dist/core/strata/index.js +15 -0
  536. package/dist/core/strata/interaction/content-guardian.js +59 -0
  537. package/dist/core/strata/interaction/file-system-provider.js +89 -0
  538. package/dist/core/strata/layers/file-state-resolver.js +157 -0
  539. package/dist/core/strata/layers/immutable-git-layer.js +42 -0
  540. package/dist/core/strata/layers/shadow-driver/copy-backend.js +114 -0
  541. package/dist/core/strata/layers/shadow-driver/env.js +29 -0
  542. package/dist/core/strata/layers/shadow-driver/error-classifier.js +41 -0
  543. package/dist/core/strata/layers/shadow-driver/index.js +17 -0
  544. package/dist/core/strata/layers/shadow-driver/readonly-lock.js +221 -0
  545. package/dist/core/strata/layers/shadow-driver/shadow-driver.js +234 -0
  546. package/dist/core/strata/layers/shadow-driver/strategy.js +86 -0
  547. package/dist/core/strata/layers/sidecar-layer.js +96 -0
  548. package/dist/core/strata/layers/worktree.js +240 -0
  549. package/dist/core/strata/runtime/environment.js +377 -0
  550. package/dist/core/strata/runtime/synchronizer.js +819 -0
  551. package/dist/core/strata/types.js +46 -0
  552. package/dist/core/streaming/canonical/canonical-responses-event-emitter.js +326 -0
  553. package/dist/core/streaming/canonical/function-call-item-id.js +13 -0
  554. package/dist/core/streaming/canonical/parts-from-llm-stream-chunk.js +54 -0
  555. package/dist/core/streaming/canonical/responses-event-emitter.js +127 -0
  556. package/dist/core/streaming/canonical/responses-events.js +2 -0
  557. package/dist/core/streaming/normalized-events.js +9 -0
  558. package/dist/core/streaming/normalized-from-text.js +47 -0
  559. package/dist/core/streaming/stream-assembler.js +347 -0
  560. package/dist/core/structured-output/index.js +3 -0
  561. package/dist/core/structured-output/json-extract.js +70 -0
  562. package/dist/core/structured-output/json-schema-validator.js +90 -0
  563. package/dist/core/structured-output/types.js +2 -0
  564. package/dist/core/sub-agent/artifacts/store.js +141 -0
  565. package/dist/core/sub-agent/artifacts/types.js +2 -0
  566. package/dist/core/sub-agent/controller.js +69 -0
  567. package/dist/core/sub-agent/core/loop.js +79 -0
  568. package/dist/core/sub-agent/core/manager.js +246 -0
  569. package/dist/core/sub-agent/registry-defaults.js +52 -0
  570. package/dist/core/sub-agent/registry.js +35 -0
  571. package/dist/core/sub-agent/tools/task-spawn.js +29 -0
  572. package/dist/core/sub-agent/types.js +23 -0
  573. package/dist/core/target-runtime/command-resolver.js +42 -0
  574. package/dist/core/target-runtime/index.js +3 -0
  575. package/dist/core/target-runtime/profile.js +73 -0
  576. package/dist/core/testgen/detector.js +17 -0
  577. package/dist/core/testgen/index.js +38 -0
  578. package/dist/core/testgen/templates.js +46 -0
  579. package/dist/core/tools/audit.js +140 -0
  580. package/dist/core/tools/authorization/types.js +2 -0
  581. package/dist/core/tools/budget.js +118 -0
  582. package/dist/core/tools/builtin/artifact.js +29 -0
  583. package/dist/core/tools/builtin/ast-grep.js +107 -0
  584. package/dist/core/tools/builtin/ast.js +62 -0
  585. package/dist/core/tools/builtin/code-search/backends/powershell.js +84 -0
  586. package/dist/core/tools/builtin/code-search/backends/rg.js +85 -0
  587. package/dist/core/tools/builtin/code-search/executor.js +87 -0
  588. package/dist/core/tools/builtin/code-search/parse/plain-grep.js +59 -0
  589. package/dist/core/tools/builtin/code-search/parse/rg-json.js +31 -0
  590. package/dist/core/tools/builtin/code-search/spec.js +82 -0
  591. package/dist/core/tools/builtin/fs.js +243 -0
  592. package/dist/core/tools/builtin/git.js +118 -0
  593. package/dist/core/tools/builtin/index.js +80 -0
  594. package/dist/core/tools/builtin/interaction.js +120 -0
  595. package/dist/core/tools/builtin/knowledge.js +98 -0
  596. package/dist/core/tools/builtin/plan.js +148 -0
  597. package/dist/core/tools/builtin/proposal.js +207 -0
  598. package/dist/core/tools/builtin/shell.js +71 -0
  599. package/dist/core/tools/builtin/verify.js +41 -0
  600. package/dist/core/tools/capability/executor.js +84 -0
  601. package/dist/core/tools/capability/runner.js +50 -0
  602. package/dist/core/tools/capability/types.js +2 -0
  603. package/dist/core/tools/dispatcher.js +80 -0
  604. package/dist/core/tools/headless-payload.js +37 -0
  605. package/dist/core/tools/loader.js +100 -0
  606. package/dist/core/tools/mapper.js +142 -0
  607. package/dist/core/tools/mcp/client.js +308 -0
  608. package/dist/core/tools/mcp/loader.js +110 -0
  609. package/dist/core/tools/mcp/schema.js +54 -0
  610. package/dist/core/tools/mcp/streamable-http.js +101 -0
  611. package/dist/core/tools/mcp/types.js +26 -0
  612. package/dist/core/tools/parallel/isolation.js +25 -0
  613. package/dist/core/tools/parallel/lock-manager.js +124 -0
  614. package/dist/core/tools/parallel/persistence.js +126 -0
  615. package/dist/core/tools/parallel/plan-builder.js +66 -0
  616. package/dist/core/tools/parallel/plan.js +2 -0
  617. package/dist/core/tools/parallel/refs.js +7 -0
  618. package/dist/core/tools/parallel/resolve-args.js +50 -0
  619. package/dist/core/tools/parallel/resource-helpers.js +35 -0
  620. package/dist/core/tools/parallel/resources.js +2 -0
  621. package/dist/core/tools/parallel/scheduler.js +372 -0
  622. package/dist/core/tools/parser.js +89 -0
  623. package/dist/core/tools/permissions/permission-rules.js +503 -0
  624. package/dist/core/tools/plugins/loader.js +102 -0
  625. package/dist/core/tools/policy.js +87 -0
  626. package/dist/core/tools/registry.js +29 -0
  627. package/dist/core/tools/router.js +514 -0
  628. package/dist/core/tools/sanitize.js +78 -0
  629. package/dist/core/tools/schema-utils.js +71 -0
  630. package/dist/core/tools/session.js +1105 -0
  631. package/dist/core/tools/streaming/ToolCallAccumulator.js +64 -0
  632. package/dist/core/tools/types.js +2 -0
  633. package/dist/core/types/authorization.js +2 -0
  634. package/dist/core/types/context.js +2 -0
  635. package/dist/core/types/errors.js +29 -0
  636. package/dist/core/types/execution.js +65 -0
  637. package/dist/core/types/index.js +9 -0
  638. package/dist/core/types/llm.js +9 -0
  639. package/dist/core/types/loop.js +2 -0
  640. package/dist/core/types/planning.js +2 -0
  641. package/dist/core/types/runtime.js +2 -0
  642. package/dist/core/types/usage.js +2 -0
  643. package/dist/core/ui/kaomoji.js +5 -0
  644. package/dist/core/utils/path.js +116 -0
  645. package/dist/core/utils/platform-shell.js +10 -0
  646. package/dist/core/utils/sanitizer.js +107 -0
  647. package/dist/core/verification/runner.js +265 -0
  648. package/dist/integrations/langfuse/litellm-langfuse-outcome-reporter.js +272 -0
  649. package/dist/integrations/langfuse/outcome-proxy.js +68 -0
  650. package/dist/interfaces/cli/task-runner.js +11 -0
  651. package/dist/languages/typescript/index.js +178 -0
  652. package/dist/locales/en.js +679 -0
  653. package/dist/locales/index.js +11 -0
  654. package/dist/utils/eol.js +35 -0
  655. package/package.json +153 -0
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Salmon Loop CLI Theme
3
+ * Based on Figma design system from CLI-AI-Assistant-Design
4
+ * Color palette extracted from /home/shangxin/Projects/Cliaiassistantdesign
5
+ */
6
+ import chalk from 'chalk';
7
+ /**
8
+ * Core color palette (hex values from Figma design)
9
+ */
10
+ export const COLORS = {
11
+ // Background layers
12
+ bg: {
13
+ outer: '#0e1117', // Outer background (matched to terminal)
14
+ terminal: '#0e1117', // Terminal main background
15
+ highlight: '#171b22', // Hover/highlight areas
16
+ errorBg: '#1a0f0f', // Error background
17
+ warningBg: '#1a1a0f', // Warning background
18
+ },
19
+ // Text hierarchy
20
+ text: {
21
+ primary: '#c7d1db', // Primary text
22
+ muted: '#6e7681', // Secondary/gray text
23
+ },
24
+ // Borders
25
+ border: {
26
+ main: '#1f2933', // Main borders (thick)
27
+ subtle: '#21262d', // Subtle borders
28
+ },
29
+ // Semantic colors (key brand colors)
30
+ semantic: {
31
+ salmon: '#d95030', // Brand color - AI assistant messages
32
+ cyan: '#30d9b9', // User messages, success states
33
+ blue: '#3095d9', // PLAN type, checkpoint
34
+ orange: '#ff9e64', // TOOL type
35
+ red: '#ff6b6b', // Danger/error
36
+ yellow: '#ffd93d', // Warning
37
+ },
38
+ };
39
+ /**
40
+ * Ink-compatible color names
41
+ * Maps Figma hex colors to Ink's supported color names
42
+ */
43
+ export const INK_COLORS = {
44
+ salmon: 'red', // Closest to #d95030
45
+ cyan: 'cyan', // Matches #30d9b9
46
+ blue: 'blue', // Matches #3095d9
47
+ orange: 'yellow', // Closest to #ff9e64
48
+ red: 'red', // Matches #ff6b6b
49
+ yellow: 'yellow', // Matches #ffd93d
50
+ gray: 'gray',
51
+ green: 'green',
52
+ };
53
+ /**
54
+ * Message style configuration based on Figma design
55
+ * Includes color, label, border, and spacing for each message type
56
+ */
57
+ export const MESSAGE_STYLES = {
58
+ // Level 1 - Emphasis (with border)
59
+ assistant: {
60
+ inkColor: COLORS.semantic.salmon,
61
+ label: '<>< SALMON',
62
+ hasBorder: true,
63
+ marginBottom: 1,
64
+ },
65
+ assistant_stream: {
66
+ inkColor: COLORS.semantic.salmon,
67
+ label: '<>< SALMON',
68
+ hasBorder: true,
69
+ marginBottom: 1,
70
+ },
71
+ todo_card: {
72
+ inkColor: COLORS.semantic.blue,
73
+ label: 'TODO',
74
+ hasBorder: true,
75
+ marginBottom: 1,
76
+ },
77
+ error: {
78
+ inkColor: COLORS.semantic.red,
79
+ label: 'ERROR',
80
+ hasBorder: true,
81
+ marginBottom: 1,
82
+ },
83
+ warning: {
84
+ inkColor: COLORS.semantic.yellow,
85
+ label: 'WARNING',
86
+ hasBorder: true,
87
+ marginBottom: 1,
88
+ },
89
+ // Level 2 - Standard
90
+ user: {
91
+ inkColor: COLORS.semantic.cyan,
92
+ label: 'USER',
93
+ hasBorder: false,
94
+ marginBottom: 1,
95
+ },
96
+ tool_result: {
97
+ inkColor: COLORS.semantic.orange,
98
+ label: 'TOOL',
99
+ hasBorder: false,
100
+ marginBottom: 1,
101
+ },
102
+ checkpoint: {
103
+ inkColor: COLORS.semantic.blue,
104
+ label: 'CHKPT',
105
+ hasBorder: false,
106
+ marginBottom: 1,
107
+ },
108
+ interrupt: {
109
+ inkColor: COLORS.semantic.red,
110
+ label: 'INTR',
111
+ hasBorder: false,
112
+ marginBottom: 1,
113
+ },
114
+ // Level 3 - Lightweight (no label, compact)
115
+ system: {
116
+ inkColor: COLORS.text.muted,
117
+ label: null,
118
+ hasBorder: false,
119
+ marginBottom: 0,
120
+ },
121
+ queue: {
122
+ inkColor: COLORS.text.muted,
123
+ label: null,
124
+ hasBorder: false,
125
+ marginBottom: 0,
126
+ },
127
+ thinking: {
128
+ inkColor: COLORS.text.muted,
129
+ label: 'THNK',
130
+ hasBorder: false,
131
+ marginBottom: 1,
132
+ },
133
+ explore_step: {
134
+ inkColor: COLORS.semantic.blue,
135
+ label: 'EXPL',
136
+ hasBorder: false,
137
+ marginBottom: 1,
138
+ },
139
+ plan_step: {
140
+ inkColor: COLORS.semantic.blue,
141
+ label: 'PLAN',
142
+ hasBorder: false,
143
+ marginBottom: 1,
144
+ },
145
+ patch_step: {
146
+ inkColor: COLORS.semantic.blue,
147
+ label: 'PATCH',
148
+ hasBorder: false,
149
+ marginBottom: 1,
150
+ },
151
+ apply_step: {
152
+ inkColor: COLORS.semantic.blue,
153
+ label: 'APPLY',
154
+ hasBorder: false,
155
+ marginBottom: 1,
156
+ },
157
+ validate_step: {
158
+ inkColor: COLORS.semantic.blue,
159
+ label: 'VLD',
160
+ hasBorder: false,
161
+ marginBottom: 1,
162
+ },
163
+ verify_step: {
164
+ inkColor: COLORS.semantic.blue,
165
+ label: 'VRF',
166
+ hasBorder: false,
167
+ marginBottom: 1,
168
+ },
169
+ preflight_step: {
170
+ inkColor: COLORS.semantic.blue,
171
+ label: 'PRE',
172
+ hasBorder: false,
173
+ marginBottom: 1,
174
+ },
175
+ context_step: {
176
+ inkColor: COLORS.semantic.blue,
177
+ label: 'CTX',
178
+ hasBorder: false,
179
+ marginBottom: 1,
180
+ },
181
+ ast_validate_step: {
182
+ inkColor: COLORS.semantic.blue,
183
+ label: 'AST',
184
+ hasBorder: false,
185
+ marginBottom: 1,
186
+ },
187
+ rollback_step: {
188
+ inkColor: COLORS.semantic.blue,
189
+ label: 'RLBK',
190
+ hasBorder: false,
191
+ marginBottom: 1,
192
+ },
193
+ shrink_step: {
194
+ inkColor: COLORS.semantic.blue,
195
+ label: 'SHRK',
196
+ hasBorder: false,
197
+ marginBottom: 1,
198
+ },
199
+ review_step: {
200
+ inkColor: COLORS.semantic.blue,
201
+ label: 'REVW',
202
+ hasBorder: false,
203
+ marginBottom: 1,
204
+ },
205
+ report_step: {
206
+ inkColor: COLORS.semantic.blue,
207
+ label: 'REPORT',
208
+ hasBorder: false,
209
+ marginBottom: 1,
210
+ },
211
+ analyze_issues_step: {
212
+ inkColor: COLORS.semantic.blue,
213
+ label: 'ANLZ',
214
+ hasBorder: false,
215
+ marginBottom: 1,
216
+ },
217
+ tool_call: {
218
+ inkColor: COLORS.text.muted,
219
+ label: null,
220
+ hasBorder: false,
221
+ marginBottom: 0,
222
+ },
223
+ welcome: {
224
+ inkColor: COLORS.text.muted,
225
+ label: null,
226
+ hasBorder: false,
227
+ marginBottom: 1,
228
+ },
229
+ };
230
+ /**
231
+ * Chalk-based theme for terminal output
232
+ * Uses chalk.hex() for precise color matching
233
+ */
234
+ export const SALMON_THEME = {
235
+ // Message type colors (based on Figma LogStream component)
236
+ messageType: {
237
+ user: chalk.hex(COLORS.semantic.cyan), // Cyan - USER messages
238
+ assistant: chalk.hex(COLORS.semantic.salmon), // Salmon - AI messages
239
+ system: chalk.hex(COLORS.text.muted), // Gray - SYSTEM messages
240
+ tool: chalk.hex(COLORS.semantic.orange), // Orange - TOOL calls
241
+ plan: chalk.hex(COLORS.semantic.blue), // Blue - PLAN/analysis
242
+ error: chalk.hex(COLORS.semantic.red), // Red - errors
243
+ warning: chalk.hex(COLORS.semantic.yellow), // Yellow - warnings
244
+ },
245
+ // Text hierarchy
246
+ text: {
247
+ primary: chalk.hex(COLORS.text.primary),
248
+ muted: chalk.hex(COLORS.text.muted),
249
+ bold: chalk.hex(COLORS.text.primary).bold,
250
+ },
251
+ // Semantic colors for status/feedback
252
+ semantic: {
253
+ success: chalk.hex(COLORS.semantic.cyan),
254
+ warning: chalk.hex(COLORS.semantic.yellow),
255
+ error: chalk.hex(COLORS.semantic.red),
256
+ info: chalk.hex(COLORS.semantic.blue),
257
+ },
258
+ // Brand elements
259
+ brand: {
260
+ salmon: chalk.hex(COLORS.semantic.salmon).bold,
261
+ prompt: chalk.hex(COLORS.semantic.salmon).bold, // For s8p> prompt
262
+ logo: chalk.hex(COLORS.semantic.salmon).bold, // For <><< ASCII salmon
263
+ },
264
+ // Border colors (Ink limitations - using closest named colors)
265
+ border: {
266
+ main: 'gray', // Approximates #1f2933
267
+ subtle: 'gray', // Approximates #21262d
268
+ },
269
+ };
270
+ /**
271
+ * Check if separator should be shown between messages
272
+ * Based on Figma design's smart separator logic
273
+ */
274
+ export function shouldShowSeparator(currentType, nextType) {
275
+ if (!nextType)
276
+ return false;
277
+ // Always separate user/assistant messages
278
+ const emphasisTypes = ['user', 'assistant', 'assistant_stream', 'todo_card'];
279
+ if (emphasisTypes.includes(currentType) || emphasisTypes.includes(nextType)) {
280
+ return true;
281
+ }
282
+ // Get styles for level comparison
283
+ const currentStyle = MESSAGE_STYLES[currentType];
284
+ const nextStyle = MESSAGE_STYLES[nextType];
285
+ if (!currentStyle || !nextStyle) {
286
+ return true; // Default to showing separator if style is missing
287
+ }
288
+ // Keep lightweight messages compact (no separator between them)
289
+ if (!currentStyle.label && !nextStyle.label) {
290
+ return false;
291
+ }
292
+ // Separate on type change
293
+ return currentType !== nextType;
294
+ }
295
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,122 @@
1
+ import { UI_CONFIG } from '../config.js';
2
+ import { normalizeLegacyType } from '../store/types.js';
3
+ /**
4
+ * Sanitizes and truncates messages to prevent technical detail leaks (e.g. 429 errors)
5
+ * and UI breakage from massive strings.
6
+ *
7
+ * Strictly follows functional purity and captures both raw content and messages.
8
+ */
9
+ export function sanitizeMessage(ev) {
10
+ let safeMessage = String(ev.content || ev.message || '');
11
+ // 0. Block massive Zod/Validation JSON dumps immediately
12
+ // Matches "code": "invalid_union", "code": "invalid_type", etc., with flexible quoting/spacing
13
+ // Also catches AI SDK's "Error message: [" prefix for validation errors
14
+ const zodJsonPattern = /['"]?code['"]?\s*:\s*['"]?invalid_(union|type|value|enum|string|date|literal)['"]?/i;
15
+ if (safeMessage.includes('ZodError: [') ||
16
+ safeMessage.startsWith('Error message: [') ||
17
+ zodJsonPattern.test(safeMessage)) {
18
+ return 'Error: Invalid input parameters (Validation failed)';
19
+ }
20
+ // 0.5. Heuristic Block: Massive non-code-block JSON/Object dumps
21
+ // This acts as a safety net for any structural error dumps that bypass specific filters
22
+ const isLong = safeMessage.length > 500;
23
+ const hasCodeBlock = safeMessage.includes('```');
24
+ if (isLong && !hasCodeBlock) {
25
+ // Count JSON/Object structural characters: { } [ ] " : ,
26
+ const structureChars = (safeMessage.match(/[{}[\]":,]/g) || []).length;
27
+ const density = structureChars / safeMessage.length;
28
+ // Threshold > 10% density is extremely high for natural language
29
+ if (density > 0.1) {
30
+ return 'Error: Complex system error (details hidden). See logs.';
31
+ }
32
+ }
33
+ // 1. Block massive SDK error objects/stacks and 429 details
34
+ const isAiError = /RetryError|APICallError|statusCode: 429|Rate limit exceeded|ZodError|ValidationError|TypeError.*at\s+/i.test(safeMessage);
35
+ // 2. Filter out stack traces (security & UX)
36
+ // Enhanced detection: check for any stack trace indicators
37
+ // Also detect JSON fragments mixed with stack traces (e.g., Zod errors)
38
+ const hasStackTrace = /^\s*at\s+/m.test(safeMessage) ||
39
+ /\s+at\s+\w+.*\(/m.test(safeMessage) ||
40
+ safeMessage.includes('node_modules') ||
41
+ safeMessage.includes('file:///') ||
42
+ /:\d+:\d+\)$/m.test(safeMessage) || // matches line:col) at end of lines
43
+ (/^\s*[\]},]/.test(safeMessage) && /\s+at\s+/.test(safeMessage)); // JSON fragments + stack traces
44
+ if (isAiError || hasStackTrace) {
45
+ const lastErrorMatch = safeMessage.match(/Last error:\s*([^\n{]+)/i);
46
+ const jsonMessageMatch = safeMessage.match(/"message"\s*:\s*"([^"]+)"/i);
47
+ const plainMessageMatch = safeMessage.match(/message:\s*'([^']+)'/i);
48
+ // Extract just the error type and message, aggressively filter stack traces
49
+ const errorLines = safeMessage.split('\n').filter((line) => {
50
+ const trimmed = line.trim();
51
+ // Reject empty lines, stack traces, file paths
52
+ if (!trimmed)
53
+ return false;
54
+ if (trimmed.startsWith('at '))
55
+ return false;
56
+ if (trimmed.includes('node_modules'))
57
+ return false;
58
+ if (trimmed.includes('file:///'))
59
+ return false;
60
+ if (/:\d+:\d+\)?$/.test(trimmed))
61
+ return false; // line:col at end
62
+ if (/^\w+Error:/.test(trimmed) && trimmed.length > 200)
63
+ return false; // suspiciously long error line
64
+ return true;
65
+ });
66
+ if (lastErrorMatch) {
67
+ safeMessage = `Error: ${lastErrorMatch[1].trim()}`;
68
+ }
69
+ else if (jsonMessageMatch) {
70
+ safeMessage = `Error: ${jsonMessageMatch[1]}`;
71
+ }
72
+ else if (plainMessageMatch) {
73
+ safeMessage = `Error: ${plainMessageMatch[1]}`;
74
+ }
75
+ else if (errorLines.length > 0) {
76
+ // Use first non-stack-trace line, clean up error type prefix
77
+ const cleanLine = errorLines[0]
78
+ .replace(/^(ZodError|ValidationError|TypeError|Error|APICallError|RetryError):\s*/i, '')
79
+ .trim()
80
+ .substring(0, 150);
81
+ // If line is still too technical or empty, use generic message
82
+ if (!cleanLine || cleanLine.length < 3 || /^[[{]/.test(cleanLine)) {
83
+ safeMessage = 'An error occurred. Please try again or rephrase your request.';
84
+ }
85
+ else {
86
+ safeMessage = cleanLine.toLowerCase().includes('error') ? cleanLine : `Error: ${cleanLine}`;
87
+ }
88
+ }
89
+ else {
90
+ // All lines were stack traces - use generic message
91
+ safeMessage = 'An error occurred. Please try again or rephrase your request.';
92
+ }
93
+ }
94
+ // 2. Strict length limit for UI stability
95
+ const hasStructure = safeMessage.includes('```') || safeMessage.includes('`');
96
+ const isConversation = ev.type === 'ai' || ev.type === 'assistant' || ev.type === 'user';
97
+ const limit = isConversation
98
+ ? UI_CONFIG.CONVERSATION_CONTENT_LIMIT
99
+ : hasStructure
100
+ ? UI_CONFIG.STRUCTURED_CONTENT_LIMIT
101
+ : UI_CONFIG.LOG_CHAR_LIMIT;
102
+ if (safeMessage.length > limit) {
103
+ safeMessage = safeMessage.substring(0, limit - 3) + '...';
104
+ }
105
+ return safeMessage;
106
+ }
107
+ /**
108
+ * Prepares a sanitized message payload for the UI store.
109
+ */
110
+ export function prepareMessagePayload(ev) {
111
+ const sanitizedContent = sanitizeMessage(ev);
112
+ // Normalize legacy types (e.g. 'ai' -> 'assistant')
113
+ const safeType = normalizeLegacyType(ev.type || 'system');
114
+ return {
115
+ ...ev,
116
+ id: ev.id || `sys-${Math.random().toString(36).substring(7)}`,
117
+ type: safeType,
118
+ content: sanitizedContent,
119
+ timestamp: ev.timestamp || new Date(),
120
+ };
121
+ }
122
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1,28 @@
1
+ export function buildTranscriptMessages(messages, options) {
2
+ const limit = Math.max(0, Math.floor(options?.limit ?? 200));
3
+ if (!Array.isArray(messages) || limit === 0)
4
+ return [];
5
+ const filtered = [];
6
+ for (const msg of messages) {
7
+ if (!msg || typeof msg !== 'object')
8
+ continue;
9
+ if (msg.role !== 'user' && msg.role !== 'assistant')
10
+ continue;
11
+ if (typeof msg.content !== 'string')
12
+ continue;
13
+ if (typeof msg.timestamp !== 'number' || !Number.isFinite(msg.timestamp))
14
+ continue;
15
+ const content = msg.content.trimEnd();
16
+ if (!content)
17
+ continue;
18
+ filtered.push({ role: msg.role, content, timestamp: msg.timestamp });
19
+ }
20
+ const slice = limit >= filtered.length ? filtered : filtered.slice(filtered.length - limit);
21
+ return slice.map((m, i) => ({
22
+ id: `transcript-${m.role}-${m.timestamp}-${i}`,
23
+ type: m.role === 'user' ? 'user' : 'assistant',
24
+ content: m.content,
25
+ timestamp: new Date(m.timestamp),
26
+ }));
27
+ }
28
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1,125 @@
1
+ import { logIgnoredError } from '../../core/facades/cli-observability.js';
2
+ export function createAsyncQueue(onStateChange, options = {}) {
3
+ const queue = [];
4
+ let isProcessing = false;
5
+ let isPaused = false;
6
+ const { maxSize, overflowStrategy = 'reject' } = options;
7
+ const emitState = () => {
8
+ onStateChange?.({ pendingCount: queue.length, isProcessing, isPaused });
9
+ };
10
+ const processNext = () => {
11
+ if (isPaused) {
12
+ emitState();
13
+ return;
14
+ }
15
+ if (isProcessing)
16
+ return;
17
+ const next = queue.shift();
18
+ if (!next) {
19
+ emitState();
20
+ return;
21
+ }
22
+ isProcessing = true;
23
+ emitState();
24
+ Promise.resolve(next.task())
25
+ .then((result) => {
26
+ next.resolve(result);
27
+ })
28
+ .catch((error) => {
29
+ next.reject(error);
30
+ })
31
+ .finally(() => {
32
+ isProcessing = false;
33
+ emitState();
34
+ processNext();
35
+ });
36
+ };
37
+ const canAccept = () => {
38
+ if (typeof maxSize !== 'number' || maxSize < 0)
39
+ return true;
40
+ if (queue.length < maxSize)
41
+ return true;
42
+ return false;
43
+ };
44
+ const enforceCapacity = (onDropNewest, onDropOldest) => {
45
+ if (canAccept())
46
+ return true;
47
+ if (overflowStrategy === 'drop_oldest') {
48
+ onDropOldest();
49
+ return true;
50
+ }
51
+ if (overflowStrategy === 'drop_newest') {
52
+ onDropNewest();
53
+ return false;
54
+ }
55
+ onDropNewest();
56
+ return false;
57
+ };
58
+ const enqueue = (task) => {
59
+ const promise = new Promise((resolve, reject) => {
60
+ const dropEntry = (entry) => {
61
+ if (!entry)
62
+ return;
63
+ entry.reject(new Error('AsyncQueue overflow: task dropped'));
64
+ };
65
+ const accepted = enforceCapacity(() => reject(new Error('AsyncQueue overflow: task dropped')), () => dropEntry(queue.shift()));
66
+ if (!accepted)
67
+ return;
68
+ queue.push({ task, resolve, reject });
69
+ emitState();
70
+ queueMicrotask(processNext);
71
+ });
72
+ promise.catch((error) => logIgnoredError('[AsyncQueue] task rejected (enqueue)', error));
73
+ return promise;
74
+ };
75
+ const enqueueFront = (task) => {
76
+ const promise = new Promise((resolve, reject) => {
77
+ const dropEntry = (entry) => {
78
+ if (!entry)
79
+ return;
80
+ entry.reject(new Error('AsyncQueue overflow: task dropped'));
81
+ };
82
+ const accepted = enforceCapacity(() => reject(new Error('AsyncQueue overflow: task dropped')), () => dropEntry(queue.pop()));
83
+ if (!accepted)
84
+ return;
85
+ queue.unshift({ task, resolve, reject });
86
+ emitState();
87
+ queueMicrotask(processNext);
88
+ });
89
+ promise.catch((error) => logIgnoredError('[AsyncQueue] task rejected (enqueueFront)', error));
90
+ return promise;
91
+ };
92
+ const clear = () => {
93
+ let cleared = 0;
94
+ while (queue.length > 0) {
95
+ const entry = queue.shift();
96
+ if (entry) {
97
+ entry.reject(new Error('AsyncQueue cleared'));
98
+ cleared += 1;
99
+ }
100
+ }
101
+ emitState();
102
+ return cleared;
103
+ };
104
+ const pause = () => {
105
+ isPaused = true;
106
+ emitState();
107
+ };
108
+ const resume = () => {
109
+ if (!isPaused)
110
+ return;
111
+ isPaused = false;
112
+ emitState();
113
+ queueMicrotask(processNext);
114
+ };
115
+ const getState = () => ({ pendingCount: queue.length, isProcessing, isPaused });
116
+ return {
117
+ enqueue,
118
+ enqueueFront,
119
+ clear,
120
+ pause,
121
+ resume,
122
+ getState,
123
+ };
124
+ }
125
+ //# sourceMappingURL=asyncQueue.js.map
@@ -0,0 +1,10 @@
1
+ export function resolveAuditScope(params) {
2
+ if (params.cliValue === undefined || params.cliValue === null || params.cliValue === '') {
3
+ return { ok: true, value: params.configValue };
4
+ }
5
+ if (params.cliValue === 'repo' || params.cliValue === 'user') {
6
+ return { ok: true, value: params.cliValue };
7
+ }
8
+ return { ok: false, invalid: String(params.cliValue) };
9
+ }
10
+ //# sourceMappingURL=audit-scope.js.map
@@ -0,0 +1,38 @@
1
+ import { detectNodeRuntimeProfile, resolveNodeWorktreePrepareCommand, resolveNodeVerifyCommand, } from '../../../core/target-runtime/index.js';
2
+ export class NodeDetector {
3
+ async detect(repoPath) {
4
+ const profile = await detectNodeRuntimeProfile(repoPath);
5
+ if (!profile)
6
+ return undefined;
7
+ return resolveNodeVerifyCommand(profile);
8
+ }
9
+ }
10
+ export const detectors = [new NodeDetector()];
11
+ export class NodeWorktreePrepareDetector {
12
+ async detect(repoPath) {
13
+ const profile = await detectNodeRuntimeProfile(repoPath);
14
+ if (!profile)
15
+ return undefined;
16
+ return resolveNodeWorktreePrepareCommand(profile);
17
+ }
18
+ }
19
+ export const worktreePrepareDetectors = [new NodeWorktreePrepareDetector()];
20
+ export async function autoDetectVerifyCommand(repoPath) {
21
+ for (const detector of detectors) {
22
+ const command = await detector.detect(repoPath);
23
+ if (command) {
24
+ return command;
25
+ }
26
+ }
27
+ return undefined;
28
+ }
29
+ export async function autoDetectWorktreePrepareCommand(repoPath) {
30
+ for (const detector of worktreePrepareDetectors) {
31
+ const command = await detector.detect(repoPath);
32
+ if (command) {
33
+ return command;
34
+ }
35
+ }
36
+ return undefined;
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,34 @@
1
+ import { LLM_OUTPUT_KINDS, resolveLlmOutputPolicy, } from '../../core/facades/cli-utils-llm-output.js';
2
+ const ALL_KINDS = [...LLM_OUTPUT_KINDS];
3
+ export function parseLlmOutputKinds(raw) {
4
+ const trimmed = raw.trim().toLowerCase();
5
+ if (!trimmed)
6
+ return { ok: false };
7
+ if (trimmed === 'none')
8
+ return { ok: true, kinds: [] };
9
+ if (trimmed === 'all')
10
+ return { ok: true, kinds: ALL_KINDS };
11
+ const parts = trimmed
12
+ .split(',')
13
+ .map((part) => part.trim())
14
+ .filter(Boolean);
15
+ if (parts.length === 0)
16
+ return { ok: false };
17
+ const kinds = [];
18
+ for (const part of parts) {
19
+ if (!ALL_KINDS.includes(part)) {
20
+ return { ok: false, invalid: part };
21
+ }
22
+ kinds.push(part);
23
+ }
24
+ return { ok: true, kinds };
25
+ }
26
+ export function resolveLlmOutputPolicyFromCli(configPolicy, cliValue) {
27
+ if (!cliValue)
28
+ return { ok: true, policy: configPolicy };
29
+ const parsed = parseLlmOutputKinds(cliValue);
30
+ if (!parsed.ok)
31
+ return { ok: false, invalid: parsed.invalid };
32
+ return { ok: true, policy: resolveLlmOutputPolicy({ kinds: parsed.kinds }) };
33
+ }
34
+ //# sourceMappingURL=llm-output.js.map
@@ -0,0 +1,17 @@
1
+ import { LiteLlmLangfuseOutcomeReporter } from '../../integrations/langfuse/litellm-langfuse-outcome-reporter.js';
2
+ import { resolveLangfuseOutcomeProxyBaseUrl } from '../../integrations/langfuse/outcome-proxy.js';
3
+ export function createOutcomeReporter(params) {
4
+ const resolved = resolveLangfuseOutcomeProxyBaseUrl({
5
+ enabled: params.enabled,
6
+ endpoint: params.endpoint,
7
+ llmBaseUrl: params.llmBaseUrl,
8
+ });
9
+ if (!resolved.enabled || !resolved.proxyBaseUrl)
10
+ return undefined;
11
+ return new LiteLlmLangfuseOutcomeReporter({
12
+ proxyBaseUrl: resolved.proxyBaseUrl,
13
+ proxyPathPrefix: resolved.proxyPathPrefix,
14
+ litellmApiKey: params.langfuseApiKey,
15
+ });
16
+ }
17
+ //# sourceMappingURL=outcome-reporter.js.map