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,409 @@
1
+ export const en = {
2
+ // Program description
3
+ programDescription: 'A minimal viable loop for automated code patching',
4
+ runDescription: 'Run the salmon-loop',
5
+ contextDescription: 'Build and print the context prompt (no LLM call)',
6
+ serveDescription: 'Start the A2A + sidecar server',
7
+ serveAcpDescription: 'Start the agent-client-protocol (ACP) stdio server only',
8
+ noColorOption: 'Disable colored output in logs',
9
+ // Chat mode
10
+ chatResumed: (name) => `Resumed: ${name}`,
11
+ chatLastUpdated: (time) => ` Last updated: ${time}`,
12
+ chatIterations: (count) => ` Iterations: ${count}`,
13
+ chatNoPreviousSession: 'No previous session found. Starting new one.',
14
+ chatNewSession: (id) => `New session: ${id}`,
15
+ chatCommands: 'Commands:',
16
+ chatCommandExit: ' /exit, /quit - Exit chat (or Ctrl+C twice)',
17
+ chatCommandStatus: ' /status - Show session info',
18
+ chatCommandClear: ' /new - Start a new session and clear context (clear)',
19
+ chatCommandHistory: ' /history - Show iteration history',
20
+ chatCommandQueue: ' /queue - Manage the chat queue',
21
+ chatCommandAuth: ' /config allowlist - Manage tool allowlist',
22
+ chatCommandMode: ' /mode - Set permission mode (interactive/yolo)',
23
+ chatCommandConfig: ' /config - Settings (log-mode/view/output/allowlist/permission-mode)',
24
+ chatSessionSaved: 'Session saved. Goodbye!',
25
+ chatThinking: 'Thinking...',
26
+ chatSuccess: (files) => `Changes applied successfully.\n\nFiles changed: ${files}`,
27
+ chatNoChanges: 'Completed successfully. No files were changed.',
28
+ chatReviewCompleted: 'Review completed successfully.',
29
+ chatResearchCompleted: 'Research completed successfully.',
30
+ chatFailed: (reason) => `Failed: ${reason}`,
31
+ chatPrompt: 's8p>',
32
+ chatExitHint: 'Press Ctrl+C again to exit',
33
+ chatTaskInterrupted: '[WARN] Task interrupted by user (Ctrl+C)',
34
+ chatIntentRouted: (intent, confidence, reason) => `Intent routed: ${intent} (confidence=${confidence.toFixed(2)}) reason=${reason}`,
35
+ chatAnswerEmpty: 'No answer produced.',
36
+ unknownCommand: (cmd) => `Unknown command: ${cmd}. Type /help for available commands.`,
37
+ helpAvailableCommands: (rows) => `Available Commands:\n${rows}`,
38
+ slashHandlerUnavailable: 'Command handler unavailable',
39
+ slashInternalError: 'Internal error',
40
+ skillNoPrompt: (id) => `Skill ${id} did not produce a prompt`,
41
+ askUserCancelled: 'User cancelled input request',
42
+ gui: {
43
+ title: 'Salmon Loop',
44
+ recentLogs: 'Recent Logs',
45
+ phase: 'Phase',
46
+ status: 'Status',
47
+ initializing: 'Initializing GUI...',
48
+ exitMessage: 'Exiting Salmon Loop...',
49
+ processing: 'Processing flow...',
50
+ inputPlaceholder: 'Type your instruction...',
51
+ backHint: 'Press ESC to back',
52
+ exitConfirmHint: 'Exit Salmonloop? (y/N)',
53
+ renderError: 'Error rendering content',
54
+ scrollHint: (current, total) => `(Scroll for more: ${current}/${total})`,
55
+ confirmationTitle: '[WARN] Action Required',
56
+ confirmationChallenge: (challenge) => `Enter [${challenge}] to confirm (Esc to cancel)`,
57
+ highRiskWarning: 'This operation involves physical code restoration. Please enter the validation code to continue.',
58
+ authorizationTitle: '[WARN] Authorization Required',
59
+ authorizationWarning: 'This tool call has side effects. Enter the authorization code to allow it once.',
60
+ authorizationHint: 'Tip: add "all", "save", or "global" after the code.',
61
+ selectionPlaceholder: 'Use Up/Down to select, Enter to confirm (Esc to cancel)',
62
+ selectionHint: 'Use Up/Down to navigate, Enter to select, Esc to cancel.',
63
+ selectionPlaceholderMulti: 'Use Up/Down, Space to toggle, Enter to confirm (Esc to cancel)',
64
+ selectionHintMulti: 'Use Up/Down to navigate, Space to toggle, Enter to confirm.',
65
+ },
66
+ // Command descriptions
67
+ commandExit: 'Exit the application',
68
+ commandStatus: 'Show current session status',
69
+ commandClear: 'Start a new session and clear context (clear)',
70
+ commandHistory: 'Show session history',
71
+ commandSessions: 'List all chat sessions',
72
+ commandQueue: 'Manage the chat queue',
73
+ commandLlmOutput: 'Set which LLM sections are shown in the UI (advanced)',
74
+ commandMode: 'Set permission mode (interactive|yolo) and save to config',
75
+ commandLogMode: 'Set UI verbosity (quiet|normal|debug) and save to config',
76
+ commandConfig: 'Settings hub (mode, log-mode, view, output, allowlist)',
77
+ commandAuth: 'Manage tool allowlist',
78
+ commandParallel: 'Manage parallel plans',
79
+ commandSubagent: 'Consult or dispatch a Smallfry (sub-agent)',
80
+ subagentUsage: 'Usage: /smallfry <list|info|log|stop> [agentId] [tail=<n>]',
81
+ subagentUnknownVerb: (verb) => `Unknown sub-agent verb: ${verb}.`,
82
+ subagentMissingId: (verb) => `Specify a Smallfry ID for "${verb}".`,
83
+ subagentNotFound: (id) => `Smallfry not found: ${id}.`,
84
+ subagentListHeader: 'Smallfry agents:',
85
+ subagentInfoHeader: (id) => `Smallfry info: ${id}`,
86
+ subagentLogHeader: (id) => `Logs for ${id}:`,
87
+ subagentStopRequested: (id) => `Stop requested for Smallfry ${id}.`,
88
+ queueUsage: 'Usage: /queue <status|pause|resume|retry|clear>',
89
+ queueUnavailable: 'Queue controls are not available in this mode.',
90
+ queuePaused: 'Queue paused. Use /queue resume or /queue retry to continue.',
91
+ queuePausedAfterInterrupt: 'Queue paused after interrupt. Use /queue resume or /queue retry to continue.',
92
+ queueAlreadyPaused: 'Queue is already paused.',
93
+ queueNotPaused: 'Queue is not paused.',
94
+ queueResumed: 'Queue resumed.',
95
+ queueCleared: 'Queue cleared.',
96
+ queueClearedCount: (count) => `Queue cleared. Dropped ${count} pending task(s).`,
97
+ queueRetryQueued: 'Re-queued the interrupted task at the front of the queue.',
98
+ queueRetryMissing: 'No interrupted task to retry.',
99
+ queueInterruptedHint: 'Interrupted task detected. Use /queue retry to re-run it.',
100
+ queueSubcommandHint: (sub) => `Queue ${sub} command`,
101
+ llmOutputSuggestion: (kind) => `Set LLM output to ${kind}`,
102
+ queueStatus: (pending, processing, paused, interrupted) => `Queue status: pending=${pending}, processing=${processing}, paused=${paused}, interrupted=${interrupted}`,
103
+ llmOutputUsage: 'Usage: /output <none|all|review,assistant_message,plan,patch>',
104
+ llmOutputCurrent: (kinds) => `Current LLM output kinds: ${kinds}`,
105
+ llmOutputUpdated: (kinds) => `LLM output kinds updated: ${kinds}`,
106
+ llmOutputUnavailable: 'LLM output configuration is unavailable in this mode.',
107
+ llmOutputPersisted: (path) => `LLM output settings saved to ${path}`,
108
+ llmOutputPersistFailed: (reason) => `Failed to save LLM output settings: ${reason}`,
109
+ modeUsage: 'Usage: /mode <interactive|yolo>',
110
+ modeSuggestion: (mode) => {
111
+ if (mode === 'interactive')
112
+ return 'Interactive permission checks and allowlist rules';
113
+ if (mode === 'yolo')
114
+ return 'Bypass prompts, allowlist, and permission rules';
115
+ return `Set permission mode to ${mode}`;
116
+ },
117
+ modeCurrent: (mode) => `Current permission mode: ${mode}`,
118
+ modeInvalid: (mode) => `Invalid mode: ${mode}. Expected one of: interactive, yolo.`,
119
+ modeUpdated: (mode) => `Permission mode updated: ${mode}`,
120
+ modePersisted: (path) => `Permission mode saved to ${path}`,
121
+ modePersistFailed: (error) => `Failed to save permission mode: ${error}`,
122
+ logModeUsage: 'Usage: /log-mode <quiet|normal|debug>',
123
+ logModeSuggestion: (mode) => {
124
+ if (mode === 'quiet')
125
+ return 'Quiet: show errors only';
126
+ if (mode === 'normal')
127
+ return 'Normal: recommended (key steps + warnings/errors)';
128
+ if (mode === 'debug')
129
+ return 'Debug: verbose (all logs + tool details)';
130
+ return `Set UI verbosity to ${mode}`;
131
+ },
132
+ logModeCurrent: (mode) => `Current UI verbosity: ${mode}`,
133
+ logModeInvalid: (mode) => `Invalid log mode: ${mode}. Expected one of: quiet, normal, debug.`,
134
+ logModeUpdated: (mode) => `UI log mode updated: ${mode}`,
135
+ logModePersisted: (path) => `UI log mode saved to ${path}`,
136
+ logModePersistFailed: (error) => `Failed to save UI log mode: ${error}`,
137
+ configUsage: [
138
+ 'Usage: /config <log-mode|view|output|allowlist|permission-mode>',
139
+ 'Subcommands: log-mode, view, output, allowlist, permission-mode',
140
+ ].join('\n'),
141
+ configUnknownSubcommand: (name) => `Unknown subcommand: ${name}`,
142
+ configLogModeDescription: 'UI verbosity (quiet/normal/debug)',
143
+ configLogModeUsage: 'Usage: /config log-mode <quiet|normal|debug>',
144
+ configPermissionModeDescription: 'Permission mode (interactive/yolo)',
145
+ configPermissionModeUsage: 'Usage: /config permission-mode <interactive|yolo>',
146
+ configViewDescription: 'Set UI density (compact|standard|full) and save to config',
147
+ configViewUsage: 'Usage: /config view <full|standard|compact>',
148
+ configViewSuggestion: (view) => `Set UI density to ${view}`,
149
+ configViewCurrent: (view) => `Current UI density: ${view}`,
150
+ configViewInvalid: (view) => `Invalid UI density: ${view}. Expected one of: full, standard, compact.`,
151
+ configViewUpdated: (view) => `UI density updated: ${view}`,
152
+ configViewPersisted: (path) => `UI density saved to ${path}`,
153
+ configViewPersistFailed: (error) => `Failed to save UI density: ${error}`,
154
+ configOutputDescription: 'Set which LLM sections are shown in the UI (advanced)',
155
+ configOutputUsage: 'Usage: /config output <none|all|review,assistant_message,plan,patch>',
156
+ configAllowlistDescription: 'Manage tool allowlist (repo/user)',
157
+ a2aHostOption: 'A2A listen host (default: 127.0.0.1)',
158
+ a2aPortOption: 'A2A listen port (default: 7431)',
159
+ a2aTokenOption: 'Bearer token for A2A auth (repeatable)',
160
+ acpStdioDisableOption: 'Disable agent-client-protocol (ACP) stdio server',
161
+ sidecarSocketOption: 'UDS path for the sidecar UI server',
162
+ sidecarAllowConditionalOption: 'Expose conditional sidecar routes (use with care)',
163
+ acpStdioStarted: (port) => `ACP (agent-client-protocol) stdio enabled; port ${port}`,
164
+ invalidA2APort: (value) => `Invalid A2A port: ${value}`,
165
+ serveStarted: (host, port, socket) => `A2A listening on ${host}:${port}; sidecar socket at ${socket}`,
166
+ configAllowlistUsage: 'Usage: /config allowlist <list|add|remove|clear|hash|reload> [scope] [tool] [phase] [args=<hash>] [effects=a,b] [deny]',
167
+ authUsage: 'Usage: /allowlist <list|add|remove|clear|hash|reload> [scope] [tool] [phase] [args=<hash>] [effects=a,b] [deny]',
168
+ authSubcommandHint: (sub) => `Allowlist ${sub} command`,
169
+ parallelSubcommandHint: (sub) => `Parallel ${sub} command`,
170
+ subagentDescription: 'Smallfry (sub-agent) commands are still experimental. Use the agent_dispatch tool or the CLI helpers to spawn a sub-agent from your plan.',
171
+ authScopeHint: (scope) => `Use ${scope} allowlist`,
172
+ authPhaseHint: (phase) => `Phase ${phase.toUpperCase()}`,
173
+ authToolNameHint: 'Known tool name',
174
+ authConfigMissing: 'Allowlist config is unavailable.',
175
+ authHashUsage: 'Usage: /allowlist hash <json-or-string>',
176
+ authHashResult: (hash) => `Args hash: ${hash}`,
177
+ authListEmpty: (scope) => `No allowlist entries for ${scope}.`,
178
+ authListEntry: (tool, mode, phase, argsHash, effects) => {
179
+ const phaseText = phase ? ` phase=${phase}` : '';
180
+ const hashText = argsHash ? ` args=${argsHash}` : '';
181
+ const effectsText = effects && effects.length > 0 ? ` effects=${effects.join(',')}` : '';
182
+ return `${tool} mode=${mode}${phaseText}${hashText}${effectsText}`;
183
+ },
184
+ authCleared: (scope) => `Cleared ${scope} allowlist.`,
185
+ authAdded: (tool, scope, mode) => `Added ${tool} to ${scope} allowlist (mode=${mode}).`,
186
+ authRemoved: (tool, scope) => `Removed ${tool} from ${scope} allowlist.`,
187
+ authRemoveMissing: (tool, scope) => `No matching allowlist entry for ${tool} in ${scope}.`,
188
+ authAddUsage: 'Usage: /allowlist add <scope> <tool> [phase] [args=<hash>] [effects=a,b] [deny]',
189
+ authRemoveUsage: 'Usage: /allowlist remove <scope> <tool> [phase] [args=<hash>] [effects=a,b]',
190
+ authCacheCleared: 'Authorization allowlist cache cleared.',
191
+ authCacheInvalidated: (reason, path) => `Authorization allowlist cache invalidated: ${reason} (${path})`,
192
+ authPathBlocked: (path, scope) => `Blocked allowlist path outside ${scope} scope: ${path}`,
193
+ authToolRegistryUnavailable: 'Tool registry is unavailable. Try again later.',
194
+ authInvalidToolName: (tool) => `Unknown tool name: ${tool}.`,
195
+ authInvalidSideEffects: (effects) => `Invalid side effects: ${effects}.`,
196
+ authLockTimeout: (path) => `Authorization allowlist lock timeout: ${path}`,
197
+ authInvalidPhase: (phase) => `Invalid phase: ${phase}.`,
198
+ parallelUsage: 'Usage: /parallel <list|resume|delete> [planId]',
199
+ parallelListEmpty: 'No pending or blocked parallel plans found.',
200
+ parallelSelectTitle: 'Select a parallel plan',
201
+ parallelCanceled: 'Selection canceled.',
202
+ parallelNotFound: (id) => `Parallel plan not found: ${id}.`,
203
+ parallelResumed: (id, blocked, failed) => `Parallel plan resumed: ${id} (blocked=${blocked}, failed=${failed})`,
204
+ parallelDeleted: (id) => `Parallel plan deleted: ${id}.`,
205
+ toolAuthorizationPrompt: (tool, risk, effects, summary) => `Authorize tool call: ${tool} (risk=${risk}, effects=${effects})\nArgs: ${summary}\nUse code alone to allow once, append "all" for this session, "save" to persist in repo, or "global" to persist for this user.`,
206
+ toolAuthorizationMissingUi: 'Authorization UI is unavailable. Tool call denied.',
207
+ toolAuthorizationDenied: 'Tool call denied by user authorization.',
208
+ toolAuthorizationApproved: 'Tool call authorized by user.',
209
+ toolAuthorizationNonInteractiveMisconfigured: (strategy) => `Non-interactive authorization is misconfigured (${strategy}). Tool call denied.`,
210
+ toolAuthorizationNonInteractiveFailed: (code) => `Non-interactive authorization failed (${code}). Tool call denied.`,
211
+ toolAuthorizationNonInteractiveUnsupported: (strategy) => `Non-interactive authorization strategy is unsupported (${strategy}). Tool call denied.`,
212
+ toolAuthorizationTerminalQuestion: 'Authorize this tool call? (y=once, a=session, s=save repo, g=save user, n=deny)',
213
+ toolAuthorizationAutoApproved: (tool, risk) => `Auto-approved tool call: ${tool} (risk=${risk}).`,
214
+ toolAuthorizationAllowlisted: (tool) => `Allowlist approved tool call: ${tool}.`,
215
+ toolAuthorizationDenylisted: (tool) => `Denylist blocked tool call: ${tool}.`,
216
+ // Option descriptions
217
+ printOption: 'Run non-interactively with the given instruction (shorthand for "run --instruction")',
218
+ instructionOption: 'Instruction for code modification (required)',
219
+ verifyOption: 'Verification command to run (e.g., "pytest", "go test ./...", or your project test command) (required)',
220
+ configOption: 'Path to SalmonLoop config file (YAML/JSON). Default lookup: <repo>/.salmonloop/config/config.yaml, config.yml, config.json',
221
+ noConfigFileOption: 'Disable loading config file from the repository',
222
+ printConfigOption: 'Print the resolved config (redacted) and exit',
223
+ repoOption: 'Repository path (default: current directory)',
224
+ continueOption: 'Continue the most recent session in this repository',
225
+ resumeOption: 'Resume a session by ID (supports short prefix)',
226
+ fileOption: 'Target file path (relative to repo)',
227
+ selectionOption: 'Direct text selection (mutually exclusive with --file)',
228
+ allowedToolsOption: 'Allow tool calls by permission rules (comma-separated, repeatable). Example: Bash(pytest *)',
229
+ disallowedToolsOption: 'Deny tool calls by permission rules (comma-separated, repeatable). Example: Bash(rm *)',
230
+ dryRunOption: 'Generate patch without applying',
231
+ verboseOption: 'Enable verbose logging (basic, extended)',
232
+ forceResetOption: 'Force hard reset on failure (use with caution)',
233
+ validateOption: 'Run code quality checks (lint and tests)',
234
+ preflightPolicyOption: 'Preflight policy (lenient: continue on test failure, strict: fail on test failure)',
235
+ checkpointStrategyOption: 'Checkpoint strategy to use (direct, worktree)',
236
+ permissionModeOption: 'Permission mode (interactive, yolo)',
237
+ environmentModeOption: 'Worktree environment mode (strict, parity)',
238
+ applyBackOnDirtyOption: 'Behavior when apply-back detects a dirty workspace (3way, abort)',
239
+ worktreePrepareOption: 'Optional setup command to run inside worktree',
240
+ streamOutputOption: 'Stream LLM responses to the CLI as they arrive (best effort)',
241
+ includePartialMessagesOption: 'Include partial message streaming events in stream-json output (alias for --stream-output).',
242
+ outputFormatOption: 'Output format (text, json, stream-json)',
243
+ outputProfileOption: 'Output profile for stream-json (native, anthropic, openai). Only valid with --output-format stream-json.',
244
+ headlessIncludeToolInputOption: 'Headless only: include (redacted) tool input in stream-json output. Only valid with --output-format stream-json.',
245
+ headlessIncludeToolOutputOption: 'Headless only: include tool output summary in stream-json output. Only valid with --output-format stream-json.',
246
+ headlessIncludeAuthorizationDecisionsOption: 'Headless only: include tool authorization decisions in headless output. Only valid with --output-format json or stream-json.',
247
+ allowOutsideCacheRootOption: 'Allow context cache persistent path outside configured allowed roots for this run only (high risk).',
248
+ jsonSchemaOption: 'JSON Schema for structured_output (file path or JSON string). Only valid with --output-format json.',
249
+ llmOutputOption: 'LLM output visibility (none, all, review, assistant_message, explore, research, plan, patch; comma-separated)',
250
+ auditScopeOption: 'Audit log scope (repo, user)',
251
+ contextDiffScopeOption: 'Diff scope for context (primary, ast_related)',
252
+ contextBudgetCharsOption: 'Context budget in characters (e.g., 30000)',
253
+ actModeOption: 'Flow mode to run (patch, review, debug, research)',
254
+ // Error messages
255
+ fileSelectionConflict: '--file and --selection are mutually exclusive',
256
+ instructionRequired: '--instruction is required',
257
+ verifyRequired: '--verify is required',
258
+ printInstructionConflict: '--print and --instruction are mutually exclusive.',
259
+ printCommandConflict: (cmd) => `--print can only be used with the "run" command (got: ${cmd}).`,
260
+ jsonSchemaRequiresJsonOutput: '--json-schema is only valid when --output-format is set to "json".',
261
+ jsonSchemaLoadFailed: (msg) => `Failed to load JSON schema: ${msg}.`,
262
+ structuredOutputSchemaFailed: 'Structured output failed schema validation.',
263
+ invalidActMode: (mode) => `Invalid --act-mode "${mode}". Expected "patch", "review", "debug", or "research".`,
264
+ invalidEnvironmentMode: (mode) => `Invalid --environment-mode "${mode}". Expected "strict" or "parity".`,
265
+ invalidOutputFormat: (format) => `Invalid --output-format "${format}". Expected "text", "stream-json", or "json".`,
266
+ invalidOutputProfile: (profile) => `Invalid --output-profile "${profile}". Expected "native", "anthropic", or "openai".`,
267
+ invalidAuditScope: (scope) => `Invalid --audit-scope "${scope}". Expected "repo" or "user".`,
268
+ headlessToolPayloadRequiresStreamJson: '--headless-include-tool-input/--headless-include-tool-output are only valid when --output-format is set to "stream-json".',
269
+ headlessToolPayloadNotSupportedWithOpenAiProfile: '--headless-include-tool-input/--headless-include-tool-output are not supported with --output-profile "openai".',
270
+ headlessAuthorizationDecisionsRequireHeadlessOutput: '--headless-include-authorization-decisions is only valid when --output-format is set to "json" or "stream-json".',
271
+ headlessAuthorizationDecisionsNotSupportedWithStrictProfiles: '--headless-include-authorization-decisions is not supported with --output-profile "anthropic" or "openai".',
272
+ outputProfileRequiresStreamJson: '--output-profile is only valid when --output-format is set to "stream-json".',
273
+ outputProfileNotSupportedYet: (profile) => `--output-profile "${profile}" is not supported. Expected "native", "anthropic", or "openai".`,
274
+ continueResumeConflict: '--continue and --resume are mutually exclusive.',
275
+ resumeNotFound: (id) => `Session not found: ${id}.`,
276
+ invalidLlmOutputKind: (kind) => `Invalid --llm-output value${kind ? `: "${kind}"` : ''}. Expected "none", "all", or a comma-separated list of: review, assistant_message, explore, research, plan, patch.`,
277
+ contextInvalidDiffScope: (scope) => `Invalid --diff-scope "${scope}". Expected "primary" or "ast_related".`,
278
+ contextInvalidBudgetChars: (value) => `Invalid --budget-chars "${value}".`,
279
+ apiKeyMissing: '[WARN] SALMONLOOP_API_KEY not found, using StubLLM. Set SALMONLOOP_API_KEY (or legacy S8P_API_KEY) to use a real LLM.',
280
+ providerNotSupported: (type) => `[WARN] Provider "${type}" is not supported yet. Falling back to StubLLM.`,
281
+ clientPackageNotSupported: (pkg) => `[WARN] LLM client.package "${pkg}" is not supported. Falling back to the default client.`,
282
+ // Resource and Workspace messages
283
+ resource: {
284
+ worktreeSkipCleanup: 'workPath equals baseRepoPath; skipping cleanup to avoid data loss',
285
+ lockTimeoutAttemptForce: (path) => `Lock acquisition timeout for ${path}, attempting force cleanup...`,
286
+ lockForceRemoved: (file) => `Forcefully removed stale lock file: ${file}`,
287
+ lockAcquiredAfterForce: (file) => `Lock acquired after force cleanup: ${file}`,
288
+ lockAcquireTimeout: (path) => `Failed to acquire lock for ${path} within timeout`,
289
+ lockReleaseFailed: (path) => `Failed to release lock for ${path}`,
290
+ },
291
+ // Startup information
292
+ starting: 'Starting salmon-loop...',
293
+ runningWith: 'Running salmon-loop with:',
294
+ scope: (scope) => ` Scope: ${scope}`,
295
+ verify: (command) => ` Verify: ${command}`,
296
+ instruction: (instruction) => ` Instruction: ${instruction}`,
297
+ repoPath: (path) => ` Repo path: ${path}`,
298
+ allowedTools: (rules) => ` Allowed tools: ${rules}`,
299
+ disallowedTools: (rules) => ` Disallowed tools: ${rules}`,
300
+ configPath: (path) => ` Config file: ${path}`,
301
+ contextFile: (file) => ` Context file: ${file}`,
302
+ contextSelection: (length) => ` Context selection length: ${length}`,
303
+ dryRunEnabled: ' Dry-run mode enabled',
304
+ target: (path) => ` Target: ${path}`,
305
+ // Result output
306
+ result: 'Result:',
307
+ operationSuccess: '\nOperation completed successfully.',
308
+ operationFailed: '\nOperation failed.',
309
+ success: (success) => ` Success: ${success}`,
310
+ reason: (reason) => ` Reason: ${reason}`,
311
+ attempts: (attempts) => ` Attempts: ${attempts}`,
312
+ errorCode: (code) => ` Error code: ${code}`,
313
+ auditPath: (path) => ` Audit log: ${path}`,
314
+ verifyOutputArtifact: (handle) => ` Verification output saved as ${handle} (use artifact.read to inspect)`,
315
+ authorizationSummary: (summary) => ` Authorization sources: ${summary}`,
316
+ authorizationSummaryRealtime: (summary) => ` Authorization sources (current): ${summary}`,
317
+ budgetSummaryTitle: ' Budget summary:',
318
+ budgetSummaryLine: (attempts, adjustments, alerts, criticalDrops, avgUtilizationPercent, truncationRatePercent, successRatePercent) => ` attempts=${attempts} adjustments=${adjustments} alerts=${alerts} critical_drops=${criticalDrops} avg_utilization=${avgUtilizationPercent}% truncation_rate=${truncationRatePercent}% success_rate=${successRatePercent}%`,
319
+ diffMeta: (files, lines) => ` Diff: ${files} files changed, ${lines} lines.`,
320
+ uiDiffMeta: (files, lines) => `Diff: ${files} file(s), ${lines} line(s) changed.`,
321
+ uiVerifyPassed: 'Verify passed.',
322
+ uiVerifyFailed: 'Verify failed.',
323
+ uiToolFailed: (tool, status) => `Tool failed: ${tool} (${status}).`,
324
+ retry: (from, to, reason) => `\nRetrying (${from} -> ${to}). Reason: ${reason}`,
325
+ contextBuilt: (usedChars, truncated) => `Context built (${usedChars} chars, truncated=${truncated})`,
326
+ // Step logs
327
+ stepLogs: 'Step Logs:',
328
+ stepEntry: (index, step, success) => ` ${index + 1}. ${step}: ${success ? '[ok]' : '[error]'}`,
329
+ stepError: (error) => ` Error: ${error}`,
330
+ stepOutput: (output, maxLen) => {
331
+ const truncated = output.length > maxLen;
332
+ return ` Output: ${output.substring(0, maxLen)}${truncated ? '...' : ''}`;
333
+ },
334
+ rawPatch: (patch) => ` [DEBUG] Raw Patch:\n${patch}`,
335
+ // Patch output
336
+ finalPatch: 'Final Patch:',
337
+ // Errors
338
+ error: (error) => `Error: ${error}`,
339
+ unexpectedError: (error) => `Unexpected error: ${error}`,
340
+ runningValidation: 'Running validation checks...',
341
+ validationUsingPackageManager: (packageManager) => ` Using detected package manager: ${packageManager}`,
342
+ runningScript: (scriptName, command) => ` Running "${scriptName}" script via: ${command}`,
343
+ scriptMissing: (scriptName) => ` Skipping "${scriptName}" because package.json has no "${scriptName}" script.`,
344
+ validationSkippedNoPackageJson: 'Validation skipped: no package.json found in target repository.',
345
+ validationSkippedNoScripts: 'Validation skipped: neither "lint" nor "test" script exists in package.json.',
346
+ runningEslint: ' Running ESLint...',
347
+ runningTests: ' Running Tests...',
348
+ testsFailedContinuing: ' [WARN] Tests failed, but continuing validation...',
349
+ validationCompleted: 'Validation completed.',
350
+ validationFailed: 'Validation failed.',
351
+ validationCommandTimeout: (scriptName, command) => ` ${scriptName} timed out: ${command}`,
352
+ validationCommandNotFound: (scriptName, command) => ` ${scriptName} command not found: ${command}`,
353
+ validationCommandExitCode: (scriptName, command, code) => ` ${scriptName} failed (${code}): ${command}`,
354
+ validationCommandSpawnError: (scriptName, command, reason) => ` ${scriptName} failed to start (${command}): ${reason}`,
355
+ validationCommandOutputExceeded: (scriptName, command) => ` ${scriptName} output exceeded capture limit: ${command}`,
356
+ validationCommandAborted: (scriptName, command) => ` ${scriptName} aborted: ${command}`,
357
+ invalidPreflightPolicy: (policy) => `Invalid --preflight-policy "${policy}". Expected "lenient" or "strict".`,
358
+ optionsRequired: 'Error: --instruction is required. --verify is required unless provided by config, or --validate is used.',
359
+ // Snapshot management
360
+ snapshotManageDescription: 'Manage snapshots',
361
+ restoreDescription: 'Restore the workspace to a specific snapshot',
362
+ restoreForceOption: 'Overwrite uncommitted changes',
363
+ restoreStarting: (hash) => `Restoring snapshot ${hash}...`,
364
+ restoreSuccess: (hash) => `Successfully restored snapshot ${hash}`,
365
+ restoreFailedDirty: 'Restore failed: Workspace has uncommitted changes.',
366
+ restoreFailedDirtyHint: 'Use --force to overwrite them, or commit/stash your changes first.',
367
+ restoreFailed: (error) => `Restore failed: ${error}`,
368
+ listSnapshotsDescription: 'List all available snapshots',
369
+ createSnapshotDescription: 'Create a new snapshot of the current workspace',
370
+ createSnapshotMessageOption: 'Description message for the snapshot',
371
+ createSnapshotIncludeOption: 'Specific files to include in the snapshot',
372
+ showSnapshotDescription: 'Show details and differences of a specific snapshot',
373
+ showSnapshotFilesOption: 'List all files included in the snapshot',
374
+ noSnapshots: 'No snapshots found.',
375
+ availableSnapshots: 'Available Snapshots:',
376
+ noSessionsFound: 'No saved sessions found.',
377
+ sessionsHeader: 'Available Sessions:',
378
+ snapshotTableHead: 'Hash Timestamp Message',
379
+ autoSnapshotMsg: (hash) => `Auto-snapshot (staged: ${hash})`,
380
+ snapshotCreated: (hash) => `Snapshot created: ${hash}`,
381
+ snapshotMessage: (msg) => `Message: ${msg}`,
382
+ snapshotCreateFailed: (error) => `Failed to create snapshot: ${error}`,
383
+ snapshotDetails: (hash) => `Snapshot ${hash} Details:`,
384
+ stagedFiles: 'Staged Files:',
385
+ noStagedFiles: 'No staged files.',
386
+ unstagedChanges: 'Unstaged Changes:',
387
+ noUnstagedChanges: 'No unstaged changes.',
388
+ allFilesInSnapshot: 'All Files in Snapshot:',
389
+ snapshotShowFailed: (error) => `Failed to show snapshot: ${error}`,
390
+ noDifferences: 'No differences found.',
391
+ getDiffFailed: (error) => `Failed to get diff: ${error}`,
392
+ readFileFailed: (error) => `Failed to read file: ${error}`,
393
+ exportStarting: (hash, dir) => `Exporting snapshot ${hash} to ${dir}...`,
394
+ exportSuccess: (hash) => `Successfully exported snapshot ${hash}`,
395
+ exportFailed: (error) => `Failed to export snapshot: ${error}`,
396
+ snapshotDeleted: (hash) => `Snapshot ${hash} deleted.`,
397
+ snapshotDeleteFailed: (error) => `Failed to delete snapshot: ${error}`,
398
+ clearForcePrompt: 'Please use --force to clear all snapshots.',
399
+ allSnapshotsCleared: 'All snapshots cleared.',
400
+ clearSnapshotsFailed: (error) => `Failed to clear snapshots: ${error}`,
401
+ diffSnapshotDescription: 'Show diff between snapshots or workspace',
402
+ diffSnapshotCodeOption: 'Show full code diff instead of summary',
403
+ catSnapshotDescription: 'View file content from a snapshot',
404
+ exportSnapshotDescription: 'Export snapshot content to a directory',
405
+ deleteSnapshotDescription: 'Delete a snapshot',
406
+ clearSnapshotsDescription: 'Clear all snapshots',
407
+ clearSnapshotsForceOption: 'Force clear without confirmation',
408
+ };
409
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1,7 @@
1
+ import { text as coreText } from '../../locales/index.js';
2
+ import { en as cliEn } from './en.js';
3
+ export const text = {
4
+ ...coreText,
5
+ cli: cliEn,
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,14 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import { initializeRuntime } from '../core/facades/cli-program-bootstrap.js';
4
+ import { text } from './locales/index.js';
5
+ export function bootstrapProgram() {
6
+ initializeRuntime();
7
+ // Force global chalk level for all output paths.
8
+ chalk.level = 3;
9
+ const program = new Command();
10
+ program.exitOverride();
11
+ program.name('s8p').alias('salmonloop').description(text.cli.programDescription).version('0.2.0');
12
+ return program;
13
+ }
14
+ //# sourceMappingURL=program-bootstrap.js.map
@@ -0,0 +1,106 @@
1
+ import { handleChatCommand } from './commands/chat.js';
2
+ import { handleContextCommand } from './commands/context.js';
3
+ import { handleRestoreCommand } from './commands/restore.js';
4
+ import { handleRunCommand } from './commands/run.js';
5
+ import { registerServeCommands } from './commands/serve.js';
6
+ import { handleSnapshotCat, handleSnapshotClear, handleSnapshotCreate, handleSnapshotDelete, handleSnapshotDiff, handleSnapshotExport, handleSnapshotList, handleSnapshotShow, } from './commands/snapshot.js';
7
+ import { text } from './locales/index.js';
8
+ export function registerProgramCommands(program) {
9
+ program
10
+ .command('run')
11
+ .description(text.cli.runDescription)
12
+ .option('-i, --instruction <instruction>', text.cli.instructionOption)
13
+ .option('--config <path>', text.cli.configOption)
14
+ .option('--no-config-file', text.cli.noConfigFileOption)
15
+ .option('--print-config', text.cli.printConfigOption)
16
+ .option('-f, --file <path>', text.cli.fileOption)
17
+ .option('-s, --selection <text>', text.cli.selectionOption)
18
+ .option('--allowedTools <rules>', text.cli.allowedToolsOption, (value, previous) => previous.concat([value]), [])
19
+ .option('--disallowedTools <rules>', text.cli.disallowedToolsOption, (value, previous) => previous.concat([value]), [])
20
+ .option('--dry-run', text.cli.dryRunOption)
21
+ .option('--verbose [level]', text.cli.verboseOption)
22
+ .option('--force-reset', text.cli.forceResetOption)
23
+ .option('--validate', text.cli.validateOption)
24
+ .option('--preflight-policy <policy>', text.cli.preflightPolicyOption, 'lenient')
25
+ .option('--act-mode <mode>', text.cli.actModeOption, 'patch')
26
+ .option('--apply-back-on-dirty <mode>', text.cli.applyBackOnDirtyOption, '3way')
27
+ .option('--environment-mode <mode>', text.cli.environmentModeOption, 'strict')
28
+ .option('--worktree-prepare <command>', text.cli.worktreePrepareOption)
29
+ .option('--stream-output', text.cli.streamOutputOption)
30
+ .option('--include-partial-messages', text.cli.includePartialMessagesOption)
31
+ .option('--output-format <format>', text.cli.outputFormatOption, 'text')
32
+ .option('--output-profile <profile>', text.cli.outputProfileOption)
33
+ .option('--headless-include-tool-input', text.cli.headlessIncludeToolInputOption)
34
+ .option('--headless-include-tool-output', text.cli.headlessIncludeToolOutputOption)
35
+ .option('--allow-outside-cache-root', text.cli.allowOutsideCacheRootOption)
36
+ .option('--headless-include-authorization-decisions', text.cli.headlessIncludeAuthorizationDecisionsOption)
37
+ .option('--json-schema <schema>', text.cli.jsonSchemaOption)
38
+ .option('--gui', 'Enable experimental TUI mode (Ink)')
39
+ .action(handleRunCommand);
40
+ program
41
+ .command('restore <hash>')
42
+ .alias('checkout')
43
+ .description(text.cli.restoreDescription)
44
+ .option('--force', text.cli.restoreForceOption)
45
+ .action(handleRestoreCommand);
46
+ const snapshot = program
47
+ .command('snapshot')
48
+ .alias('snap')
49
+ .description(text.cli.snapshotManageDescription);
50
+ snapshot
51
+ .command('list')
52
+ .alias('ls')
53
+ .description(text.cli.listSnapshotsDescription)
54
+ .action(handleSnapshotList);
55
+ snapshot
56
+ .command('create')
57
+ .description(text.cli.createSnapshotDescription)
58
+ .option('-m, --message <text>', text.cli.createSnapshotMessageOption)
59
+ .option('--include <files...>', text.cli.createSnapshotIncludeOption)
60
+ .action(handleSnapshotCreate);
61
+ snapshot
62
+ .command('show <hash>')
63
+ .description(text.cli.showSnapshotDescription)
64
+ .option('--files', text.cli.showSnapshotFilesOption)
65
+ .action(handleSnapshotShow);
66
+ snapshot
67
+ .command('diff <hash> [otherHash]')
68
+ .description(text.cli.diffSnapshotDescription)
69
+ .option('--code', text.cli.diffSnapshotCodeOption)
70
+ .action(handleSnapshotDiff);
71
+ snapshot
72
+ .command('cat <hash> <file>')
73
+ .description(text.cli.catSnapshotDescription)
74
+ .action(handleSnapshotCat);
75
+ snapshot
76
+ .command('export <hash> <directory>')
77
+ .description(text.cli.exportSnapshotDescription)
78
+ .action(handleSnapshotExport);
79
+ snapshot
80
+ .command('delete <hash>')
81
+ .alias('rm')
82
+ .description(text.cli.deleteSnapshotDescription)
83
+ .action(handleSnapshotDelete);
84
+ snapshot
85
+ .command('clear')
86
+ .description(text.cli.clearSnapshotsDescription)
87
+ .option('--force', text.cli.clearSnapshotsForceOption)
88
+ .action(handleSnapshotClear);
89
+ program
90
+ .command('context')
91
+ .description(text.cli.contextDescription)
92
+ .option('-i, --instruction <instruction>', text.cli.instructionOption)
93
+ .option('-f, --file <path>', text.cli.fileOption)
94
+ .option('-s, --selection <text>', text.cli.selectionOption)
95
+ .option('--diff-scope <scope>', text.cli.contextDiffScopeOption, 'primary')
96
+ .option('--budget-chars <n>', text.cli.contextBudgetCharsOption)
97
+ .option('--allow-outside-cache-root', text.cli.allowOutsideCacheRootOption)
98
+ .action(handleContextCommand);
99
+ registerServeCommands(program);
100
+ program
101
+ .command('chat', { isDefault: true })
102
+ .description('Enter interactive chat mode (default)')
103
+ .option('--verbose [level]', text.cli.verboseOption)
104
+ .action(handleChatCommand);
105
+ }
106
+ //# sourceMappingURL=program-commands.js.map
@@ -0,0 +1,15 @@
1
+ import { text } from './locales/index.js';
2
+ export function configureGlobalProgramOptions(program) {
3
+ program
4
+ .option('-r, --repo <path>', text.cli.repoOption, process.cwd())
5
+ .option('-p, --print <instruction>', text.cli.printOption)
6
+ .option('--continue', text.cli.continueOption)
7
+ .option('--resume <sessionId>', text.cli.resumeOption)
8
+ .option('-v, --verify <command>', text.cli.verifyOption)
9
+ .option('--no-verify', 'Disable verification')
10
+ .option('-cs, --checkpoint-strategy <type>', text.cli.checkpointStrategyOption, 'worktree')
11
+ .option('--mode <mode>', text.cli.permissionModeOption, 'interactive')
12
+ .option('--llm-output <kinds>', text.cli.llmOutputOption)
13
+ .option('--audit-scope <scope>', text.cli.auditScopeOption);
14
+ }
15
+ //# sourceMappingURL=program-options.js.map
@@ -0,0 +1,11 @@
1
+ export function configureProgramOutputForHeadless(context) {
2
+ if (!context.headlessDetection.outputFormat)
3
+ return;
4
+ context.program.configureOutput({
5
+ writeOut: () => { },
6
+ writeErr: () => { },
7
+ });
8
+ context.program.showHelpAfterError(false);
9
+ context.program.showSuggestionAfterError(false);
10
+ }
11
+ //# sourceMappingURL=program-output-mode.js.map
@@ -0,0 +1,24 @@
1
+ import { emitHeadlessCommanderUsageError, getCommanderErrorExitCode, isCommanderError, shouldExitCommanderError, } from './commander-error-adapter.js';
2
+ import { reportCliCrash } from './crash-reporter.js';
3
+ export async function parseProgramOrExit(context) {
4
+ try {
5
+ await context.program.parseAsync(context.rewrittenArgv);
6
+ return { status: 'ok' };
7
+ }
8
+ catch (err) {
9
+ if (isCommanderError(err)) {
10
+ emitHeadlessCommanderUsageError({
11
+ err,
12
+ headlessDetection: context.headlessDetection,
13
+ });
14
+ if (shouldExitCommanderError(err)) {
15
+ process.exit(getCommanderErrorExitCode(err));
16
+ return { status: 'exited' };
17
+ }
18
+ return { status: 'ok' };
19
+ }
20
+ reportCliCrash(err);
21
+ return { status: 'crash-reported' };
22
+ }
23
+ }
24
+ //# sourceMappingURL=program-parse.js.map