@pugi/cli 0.1.0-beta.99 → 1.0.0-alpha.10

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 (448) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +11 -191
  3. package/bin/pugi +8 -0
  4. package/package.json +15 -71
  5. package/postinstall.mjs +31 -0
  6. package/CHANGELOG.md +0 -132
  7. package/THIRD_PARTY_NOTICES.md +0 -40
  8. package/assets/pugi-mascot.ansi +0 -16
  9. package/assets/pugi-prozr2-mascot.ansi +0 -9
  10. package/bin/run.js +0 -34
  11. package/dist/commands/deploy.js +0 -439
  12. package/dist/commands/flatten.js +0 -191
  13. package/dist/commands/jobs-watch.js +0 -201
  14. package/dist/commands/jobs.js +0 -260
  15. package/dist/commands/retro.js +0 -210
  16. package/dist/commands/smoke.js +0 -133
  17. package/dist/core/agent-progress/cleanup.js +0 -134
  18. package/dist/core/agent-progress/schema.js +0 -144
  19. package/dist/core/agent-progress/writer.js +0 -101
  20. package/dist/core/agents/adaptive-router.js +0 -330
  21. package/dist/core/agents/loader.js +0 -104
  22. package/dist/core/agents/query-decomposer.js +0 -297
  23. package/dist/core/agents/registry.js +0 -69
  24. package/dist/core/approvals/shortcut-resolver.js +0 -98
  25. package/dist/core/artifact-chain/dispatcher.js +0 -148
  26. package/dist/core/artifact-chain/exporter.js +0 -164
  27. package/dist/core/artifact-chain/state.js +0 -243
  28. package/dist/core/artifact-chain/steps.js +0 -169
  29. package/dist/core/ask-user/question.js +0 -92
  30. package/dist/core/audit/audit-trail.js +0 -275
  31. package/dist/core/auth/ensure-authenticated.js +0 -129
  32. package/dist/core/auth/env-provider.js +0 -238
  33. package/dist/core/auto-open-browser.js +0 -128
  34. package/dist/core/auto-update/channels.js +0 -122
  35. package/dist/core/auto-update/checker.js +0 -241
  36. package/dist/core/auto-update/state.js +0 -235
  37. package/dist/core/bare-mode/index.js +0 -107
  38. package/dist/core/bash/redirect.js +0 -281
  39. package/dist/core/bash-classifier.js +0 -1397
  40. package/dist/core/checkpoint/resumer.js +0 -149
  41. package/dist/core/checkpoint/rewinder.js +0 -291
  42. package/dist/core/checkpoints/shadow-git.js +0 -670
  43. package/dist/core/citations/parser.js +0 -109
  44. package/dist/core/classifier/yolo-classifier.js +0 -88
  45. package/dist/core/clipboard.js +0 -70
  46. package/dist/core/codegraph/decision-store.js +0 -248
  47. package/dist/core/codegraph/detect-repo.js +0 -459
  48. package/dist/core/codegraph/install.js +0 -134
  49. package/dist/core/codegraph/offer-hook.js +0 -220
  50. package/dist/core/compact/auto-trigger.js +0 -96
  51. package/dist/core/compact/buffer-rewriter.js +0 -115
  52. package/dist/core/compact/summarizer.js +0 -208
  53. package/dist/core/compact/token-counter.js +0 -108
  54. package/dist/core/consensus/anvil-fanout.js +0 -276
  55. package/dist/core/consensus/diff-capture.js +0 -491
  56. package/dist/core/consensus/rubric.js +0 -233
  57. package/dist/core/context/builder.js +0 -114
  58. package/dist/core/context/compaction-events.js +0 -99
  59. package/dist/core/context/compaction.js +0 -602
  60. package/dist/core/context/index.js +0 -28
  61. package/dist/core/context/invariants.js +0 -250
  62. package/dist/core/context/markdown-loader.js +0 -288
  63. package/dist/core/context/markdown-traverse.js +0 -255
  64. package/dist/core/context/pugiignore.js +0 -316
  65. package/dist/core/context/repo-skeleton.js +0 -533
  66. package/dist/core/context/tool-eviction.js +0 -55
  67. package/dist/core/context/watcher.js +0 -342
  68. package/dist/core/context/working-set.js +0 -165
  69. package/dist/core/coordinator/agent-tools.js +0 -77
  70. package/dist/core/coordinator/agent-toolset.js +0 -65
  71. package/dist/core/coordinator/fsm.js +0 -73
  72. package/dist/core/coordinator/mode-fsm.js +0 -70
  73. package/dist/core/cost/rate-card.js +0 -129
  74. package/dist/core/cost/tracker.js +0 -221
  75. package/dist/core/credentials.js +0 -355
  76. package/dist/core/cron/scheduler.js +0 -138
  77. package/dist/core/denial-tracking/index.js +0 -8
  78. package/dist/core/denial-tracking/state.js +0 -264
  79. package/dist/core/diagnostics/probe-runner.js +0 -93
  80. package/dist/core/diagnostics/probes/api.js +0 -46
  81. package/dist/core/diagnostics/probes/auth.js +0 -93
  82. package/dist/core/diagnostics/probes/bare-mode.js +0 -42
  83. package/dist/core/diagnostics/probes/cli-version.js +0 -127
  84. package/dist/core/diagnostics/probes/config.js +0 -72
  85. package/dist/core/diagnostics/probes/denial-tracking.js +0 -57
  86. package/dist/core/diagnostics/probes/disk.js +0 -81
  87. package/dist/core/diagnostics/probes/engine-live.js +0 -46
  88. package/dist/core/diagnostics/probes/git.js +0 -65
  89. package/dist/core/diagnostics/probes/hooks.js +0 -118
  90. package/dist/core/diagnostics/probes/mcp.js +0 -75
  91. package/dist/core/diagnostics/probes/node.js +0 -59
  92. package/dist/core/diagnostics/probes/pnpm.js +0 -36
  93. package/dist/core/diagnostics/probes/pugi-md.js +0 -89
  94. package/dist/core/diagnostics/probes/sandbox.js +0 -72
  95. package/dist/core/diagnostics/probes/session.js +0 -74
  96. package/dist/core/diagnostics/probes/status-snapshot.js +0 -488
  97. package/dist/core/diagnostics/probes/workspace.js +0 -63
  98. package/dist/core/diagnostics/types.js +0 -70
  99. package/dist/core/dispatch/cache-cleanup.js +0 -197
  100. package/dist/core/dispatch/cache-handoff.js +0 -295
  101. package/dist/core/edits/apply-patch-layer-e.js +0 -189
  102. package/dist/core/edits/dispatch.js +0 -511
  103. package/dist/core/edits/format-detector.js +0 -260
  104. package/dist/core/edits/format-matrix.js +0 -26
  105. package/dist/core/edits/fuzzy-ladder.js +0 -650
  106. package/dist/core/edits/index.js +0 -19
  107. package/dist/core/edits/journal.js +0 -199
  108. package/dist/core/edits/layer-a-apply.js +0 -217
  109. package/dist/core/edits/layer-a-fuzzy-apply.js +0 -198
  110. package/dist/core/edits/layer-b-apply.js +0 -211
  111. package/dist/core/edits/layer-c-apply.js +0 -160
  112. package/dist/core/edits/layer-d-ast.js +0 -572
  113. package/dist/core/edits/marker-parser.js +0 -401
  114. package/dist/core/edits/security-gate.js +0 -223
  115. package/dist/core/edits/verify-hook.js +0 -273
  116. package/dist/core/edits/worktree.js +0 -322
  117. package/dist/core/engine/adapter-runner.js +0 -8
  118. package/dist/core/engine/anvil-client.js +0 -344
  119. package/dist/core/engine/auto-compact.js +0 -179
  120. package/dist/core/engine/budgets.js +0 -195
  121. package/dist/core/engine/context-prefix.js +0 -155
  122. package/dist/core/engine/index.js +0 -12
  123. package/dist/core/engine/intensity.js +0 -163
  124. package/dist/core/engine/intent.js +0 -260
  125. package/dist/core/engine/native-pugi.js +0 -1616
  126. package/dist/core/engine/noop.js +0 -27
  127. package/dist/core/engine/prompts.js +0 -236
  128. package/dist/core/engine/strip-internal-fields.js +0 -124
  129. package/dist/core/engine/tool-bridge.js +0 -2173
  130. package/dist/core/engine/verification-patterns.js +0 -195
  131. package/dist/core/evaluation/golden-dataset.js +0 -293
  132. package/dist/core/feedback/queue.js +0 -177
  133. package/dist/core/feedback/submitter.js +0 -145
  134. package/dist/core/file-cache.js +0 -141
  135. package/dist/core/flatten/flatten-repo.js +0 -439
  136. package/dist/core/format/osc8-link.js +0 -28
  137. package/dist/core/hook-chains.js +0 -392
  138. package/dist/core/hooks/citation-verify-hook.js +0 -138
  139. package/dist/core/hooks/citation-verify.js +0 -112
  140. package/dist/core/hooks/events.js +0 -46
  141. package/dist/core/hooks/index.js +0 -15
  142. package/dist/core/hooks/registry.js +0 -216
  143. package/dist/core/hooks/runner.js +0 -236
  144. package/dist/core/hooks/v2/event-emitter.js +0 -115
  145. package/dist/core/hooks/v2/executor.js +0 -282
  146. package/dist/core/hooks/v2/index.js +0 -25
  147. package/dist/core/hooks/v2/lifecycle.js +0 -104
  148. package/dist/core/hooks/v2/loader.js +0 -216
  149. package/dist/core/hooks/v2/matcher.js +0 -125
  150. package/dist/core/hooks/v2/trust.js +0 -143
  151. package/dist/core/hooks/v2/types.js +0 -86
  152. package/dist/core/hooks/worktree-events.js +0 -158
  153. package/dist/core/hooks.js +0 -415
  154. package/dist/core/image/renderer.js +0 -71
  155. package/dist/core/index-store.js +0 -260
  156. package/dist/core/init/detector.js +0 -582
  157. package/dist/core/init/template-renderer.js +0 -242
  158. package/dist/core/jobs/registry.js +0 -462
  159. package/dist/core/ledger/results-tsv.js +0 -142
  160. package/dist/core/log-discipline/stdout-redirect.js +0 -51
  161. package/dist/core/lsp/cache.js +0 -105
  162. package/dist/core/lsp/client.js +0 -1229
  163. package/dist/core/lsp/language-detect.js +0 -66
  164. package/dist/core/lsp/post-edit-diagnostics.js +0 -171
  165. package/dist/core/lsp/server-detect.js +0 -173
  166. package/dist/core/lsp/symbol-cache.js +0 -162
  167. package/dist/core/lsp/symbol-tools.js +0 -664
  168. package/dist/core/mcp/client.js +0 -385
  169. package/dist/core/mcp/http-server.js +0 -553
  170. package/dist/core/mcp/orchestrator-config.js +0 -192
  171. package/dist/core/mcp/orchestrator-tools.js +0 -806
  172. package/dist/core/mcp/permission.js +0 -190
  173. package/dist/core/mcp/registry.js +0 -193
  174. package/dist/core/mcp/server-tools.js +0 -219
  175. package/dist/core/mcp/server.js +0 -397
  176. package/dist/core/mcp/trust.js +0 -91
  177. package/dist/core/memory/dual-write.js +0 -416
  178. package/dist/core/memory/passive-extract.js +0 -130
  179. package/dist/core/memory/phase1-kinds.js +0 -20
  180. package/dist/core/memory/secret-scanner.js +0 -304
  181. package/dist/core/memory-sync/queue.js +0 -170
  182. package/dist/core/metrics/extract.js +0 -113
  183. package/dist/core/modes/roo-modes.js +0 -68
  184. package/dist/core/onboarding/ensure-initialized.js +0 -133
  185. package/dist/core/onboarding/marker.js +0 -111
  186. package/dist/core/onboarding/telemetry-state.js +0 -108
  187. package/dist/core/output-style/presets.js +0 -176
  188. package/dist/core/output-style/state.js +0 -185
  189. package/dist/core/path-security.js +0 -345
  190. package/dist/core/permission.js +0 -369
  191. package/dist/core/permissions/auto-classifier.js +0 -124
  192. package/dist/core/permissions/bash-parser.js +0 -371
  193. package/dist/core/permissions/circuit-breaker.js +0 -83
  194. package/dist/core/permissions/constrained-edit.js +0 -91
  195. package/dist/core/permissions/gate.js +0 -278
  196. package/dist/core/permissions/index.js +0 -20
  197. package/dist/core/permissions/mode.js +0 -174
  198. package/dist/core/permissions/network-egress.js +0 -137
  199. package/dist/core/permissions/state.js +0 -241
  200. package/dist/core/permissions/tool-class.js +0 -107
  201. package/dist/core/plan-mode/ui-state.js +0 -51
  202. package/dist/core/plans/plan-artifact.js +0 -721
  203. package/dist/core/policy-limits/etag-store.js +0 -122
  204. package/dist/core/prd-check/parser.js +0 -215
  205. package/dist/core/prd-check/reporter.js +0 -127
  206. package/dist/core/prd-check/session-review.js +0 -557
  207. package/dist/core/prd-check/verifiers.js +0 -223
  208. package/dist/core/prompt-cache/client-cache.js +0 -99
  209. package/dist/core/prompts/assembly.js +0 -29
  210. package/dist/core/prompts/registry.js +0 -364
  211. package/dist/core/pugi-gitignore.js +0 -52
  212. package/dist/core/pugi-md/cc-compat-rules.js +0 -735
  213. package/dist/core/pugi-md/context-injector.js +0 -76
  214. package/dist/core/pugi-md/walk-up.js +0 -207
  215. package/dist/core/python/uv-installer.js +0 -270
  216. package/dist/core/python/uv-resolver.js +0 -83
  217. package/dist/core/rate-limit/narrator.js +0 -146
  218. package/dist/core/recipes/cli-types.js +0 -20
  219. package/dist/core/recipes/loader.js +0 -103
  220. package/dist/core/recipes/runner.js +0 -345
  221. package/dist/core/recipes/schema.js +0 -587
  222. package/dist/core/release-notes/parser.js +0 -241
  223. package/dist/core/release-notes/state.js +0 -116
  224. package/dist/core/repl/ask.js +0 -512
  225. package/dist/core/repl/cancellation.js +0 -98
  226. package/dist/core/repl/cap-warning.js +0 -91
  227. package/dist/core/repl/clipboard-read.js +0 -174
  228. package/dist/core/repl/dispatch-fsm.js +0 -220
  229. package/dist/core/repl/engine-bridge.js +0 -303
  230. package/dist/core/repl/history-search.js +0 -175
  231. package/dist/core/repl/history.js +0 -182
  232. package/dist/core/repl/kill-ring.js +0 -138
  233. package/dist/core/repl/model-pricing.js +0 -135
  234. package/dist/core/repl/privacy-banner.js +0 -71
  235. package/dist/core/repl/session.js +0 -4962
  236. package/dist/core/repl/slash-commands.js +0 -747
  237. package/dist/core/repl/store/index.js +0 -12
  238. package/dist/core/repl/store/jsonl-log.js +0 -321
  239. package/dist/core/repl/store/lockfile.js +0 -155
  240. package/dist/core/repl/store/session-store.js +0 -821
  241. package/dist/core/repl/store/types.js +0 -44
  242. package/dist/core/repl/store/uuid-v7.js +0 -68
  243. package/dist/core/repl/tool-route.js +0 -382
  244. package/dist/core/repl/workspace-context.js +0 -206
  245. package/dist/core/repo-map/build.js +0 -125
  246. package/dist/core/repo-map/cache.js +0 -185
  247. package/dist/core/repo-map/extractor.js +0 -254
  248. package/dist/core/repo-map/formatter.js +0 -145
  249. package/dist/core/repo-map/page-rank.js +0 -105
  250. package/dist/core/repo-map/scanner.js +0 -211
  251. package/dist/core/retro/git-collector.js +0 -251
  252. package/dist/core/retro/health-card.js +0 -25
  253. package/dist/core/retro/metrics.js +0 -342
  254. package/dist/core/retro/narrative.js +0 -249
  255. package/dist/core/retro/plane-collector.js +0 -274
  256. package/dist/core/retro/pr-issue-link.js +0 -65
  257. package/dist/core/retro/types.js +0 -16
  258. package/dist/core/retry-budget/budget.js +0 -284
  259. package/dist/core/retry-budget/index.js +0 -5
  260. package/dist/core/retry-budget/retry-cap.js +0 -74
  261. package/dist/core/routing/lead-worker.js +0 -43
  262. package/dist/core/routing/pre-flight-estimator.js +0 -108
  263. package/dist/core/runs/run-tree.js +0 -103
  264. package/dist/core/sandboxing/adapter.js +0 -29
  265. package/dist/core/sandboxing/index.js +0 -49
  266. package/dist/core/sandboxing/none.js +0 -19
  267. package/dist/core/sandboxing/seatbelt.js +0 -183
  268. package/dist/core/security/injection-scanner.js +0 -367
  269. package/dist/core/security/output-filter.js +0 -418
  270. package/dist/core/session/env-file.js +0 -105
  271. package/dist/core/session/section-budgets.js +0 -140
  272. package/dist/core/session.js +0 -377
  273. package/dist/core/settings.js +0 -400
  274. package/dist/core/share/formatter.js +0 -271
  275. package/dist/core/share/redactor.js +0 -221
  276. package/dist/core/share/uploader.js +0 -267
  277. package/dist/core/skills/defaults.js +0 -457
  278. package/dist/core/skills/loader.js +0 -454
  279. package/dist/core/skills/sources.js +0 -480
  280. package/dist/core/skills/trust.js +0 -172
  281. package/dist/core/smoke/headless-driver.js +0 -174
  282. package/dist/core/smoke/orchestrator.js +0 -194
  283. package/dist/core/smoke/runner.js +0 -238
  284. package/dist/core/smoke/scenario-parser.js +0 -316
  285. package/dist/core/statusline.js +0 -99
  286. package/dist/core/subagents/dispatcher-real.js +0 -600
  287. package/dist/core/subagents/dispatcher.js +0 -352
  288. package/dist/core/subagents/index.js +0 -39
  289. package/dist/core/subagents/isolation-matrix.js +0 -213
  290. package/dist/core/subagents/spawn.js +0 -101
  291. package/dist/core/telemetry/emitter.js +0 -229
  292. package/dist/core/telemetry/queue.js +0 -251
  293. package/dist/core/theme/context.js +0 -91
  294. package/dist/core/theme/presets.js +0 -228
  295. package/dist/core/theme/state.js +0 -181
  296. package/dist/core/todos/invariant.js +0 -10
  297. package/dist/core/todos/state.js +0 -177
  298. package/dist/core/tool-schema/compressor.js +0 -89
  299. package/dist/core/transport/version-interceptor.js +0 -166
  300. package/dist/core/trust.js +0 -109
  301. package/dist/core/tui/thinking-block.js +0 -64
  302. package/dist/core/vim/keymap.js +0 -288
  303. package/dist/core/vim/state.js +0 -92
  304. package/dist/core/watch-markers/marker-watcher.js +0 -133
  305. package/dist/core/worktree/include-parser.js +0 -249
  306. package/dist/core/worktree-manager/cleanup.js +0 -123
  307. package/dist/core/worktree-manager/manager.js +0 -303
  308. package/dist/index.js +0 -44
  309. package/dist/runtime/bootstrap.js +0 -190
  310. package/dist/runtime/cli.js +0 -8121
  311. package/dist/runtime/commands/agents.js +0 -385
  312. package/dist/runtime/commands/budget.js +0 -192
  313. package/dist/runtime/commands/cancel.js +0 -231
  314. package/dist/runtime/commands/chain.js +0 -489
  315. package/dist/runtime/commands/codegraph-status.js +0 -227
  316. package/dist/runtime/commands/compact.js +0 -297
  317. package/dist/runtime/commands/config.js +0 -595
  318. package/dist/runtime/commands/cost.js +0 -199
  319. package/dist/runtime/commands/delegate.js +0 -312
  320. package/dist/runtime/commands/dispatch.js +0 -126
  321. package/dist/runtime/commands/doctor.js +0 -579
  322. package/dist/runtime/commands/feedback.js +0 -184
  323. package/dist/runtime/commands/hooks.js +0 -187
  324. package/dist/runtime/commands/init.js +0 -254
  325. package/dist/runtime/commands/lsp.js +0 -368
  326. package/dist/runtime/commands/mcp.js +0 -935
  327. package/dist/runtime/commands/memory.js +0 -582
  328. package/dist/runtime/commands/model.js +0 -237
  329. package/dist/runtime/commands/onboarding.js +0 -275
  330. package/dist/runtime/commands/patch.js +0 -128
  331. package/dist/runtime/commands/permissions.js +0 -112
  332. package/dist/runtime/commands/plan.js +0 -143
  333. package/dist/runtime/commands/prd-check.js +0 -285
  334. package/dist/runtime/commands/privacy.js +0 -107
  335. package/dist/runtime/commands/recipe.js +0 -325
  336. package/dist/runtime/commands/redo-blob-store.js +0 -92
  337. package/dist/runtime/commands/redo.js +0 -361
  338. package/dist/runtime/commands/release-notes.js +0 -229
  339. package/dist/runtime/commands/repo-map.js +0 -95
  340. package/dist/runtime/commands/report.js +0 -299
  341. package/dist/runtime/commands/resume.js +0 -118
  342. package/dist/runtime/commands/review-consensus.js +0 -414
  343. package/dist/runtime/commands/rewind.js +0 -333
  344. package/dist/runtime/commands/roster.js +0 -117
  345. package/dist/runtime/commands/sessions.js +0 -163
  346. package/dist/runtime/commands/share.js +0 -316
  347. package/dist/runtime/commands/skills.js +0 -401
  348. package/dist/runtime/commands/status.js +0 -186
  349. package/dist/runtime/commands/stickers.js +0 -82
  350. package/dist/runtime/commands/style.js +0 -194
  351. package/dist/runtime/commands/theme.js +0 -196
  352. package/dist/runtime/commands/undo.js +0 -361
  353. package/dist/runtime/commands/update.js +0 -289
  354. package/dist/runtime/commands/vim.js +0 -140
  355. package/dist/runtime/commands/worktree.js +0 -177
  356. package/dist/runtime/commands/worktrees.js +0 -155
  357. package/dist/runtime/deprecation-warning.js +0 -69
  358. package/dist/runtime/engine-exit-code.js +0 -50
  359. package/dist/runtime/headless-repl.js +0 -195
  360. package/dist/runtime/headless.js +0 -548
  361. package/dist/runtime/load-hooks-or-exit.js +0 -71
  362. package/dist/runtime/plan-decompose.js +0 -531
  363. package/dist/runtime/sigint-guard.js +0 -272
  364. package/dist/runtime/stream-renderer.js +0 -195
  365. package/dist/runtime/update-check.js +0 -294
  366. package/dist/runtime/version.js +0 -65
  367. package/dist/runtime/worktree-bootstrap.js +0 -579
  368. package/dist/skills/bundled/batch.js +0 -617
  369. package/dist/skills/bundled/index.js +0 -45
  370. package/dist/skills/bundled/loop.js +0 -358
  371. package/dist/skills/bundled/remember.js +0 -383
  372. package/dist/skills/bundled/simplify.js +0 -289
  373. package/dist/skills/bundled/skillify.js +0 -373
  374. package/dist/skills/bundled/stuck.js +0 -558
  375. package/dist/skills/bundled/verify.js +0 -439
  376. package/dist/testing/vcr.js +0 -486
  377. package/dist/tools/agent-tool.js +0 -229
  378. package/dist/tools/apply-patch.js +0 -556
  379. package/dist/tools/ask-user-question.js +0 -337
  380. package/dist/tools/ask-user.js +0 -115
  381. package/dist/tools/bash.js +0 -1238
  382. package/dist/tools/brief.js +0 -224
  383. package/dist/tools/cron.js +0 -433
  384. package/dist/tools/enter-worktree.js +0 -250
  385. package/dist/tools/exit-worktree.js +0 -147
  386. package/dist/tools/file-tools.js +0 -553
  387. package/dist/tools/http-request.js +0 -336
  388. package/dist/tools/lsp-tools.js +0 -565
  389. package/dist/tools/mcp-tool.js +0 -260
  390. package/dist/tools/multi-edit.js +0 -361
  391. package/dist/tools/powershell.js +0 -268
  392. package/dist/tools/registry.js +0 -166
  393. package/dist/tools/server-tools.js +0 -892
  394. package/dist/tools/skill-tool.js +0 -96
  395. package/dist/tools/sleep.js +0 -99
  396. package/dist/tools/synthetic-output.js +0 -133
  397. package/dist/tools/tasks.js +0 -208
  398. package/dist/tools/todo-write.js +0 -184
  399. package/dist/tools/verify-plan-execution.js +0 -295
  400. package/dist/tools/web-fetch-injection-scanner.js +0 -207
  401. package/dist/tools/web-fetch.js +0 -720
  402. package/dist/tools/web-search.js +0 -458
  403. package/dist/tui/agent-progress-card.js +0 -111
  404. package/dist/tui/agent-tree-pane.js +0 -9
  405. package/dist/tui/agent-tree.js +0 -87
  406. package/dist/tui/ask-cli.js +0 -52
  407. package/dist/tui/ask-modal.js +0 -211
  408. package/dist/tui/ask-user-question-chips.js +0 -315
  409. package/dist/tui/ask-user-question-prompt.js +0 -203
  410. package/dist/tui/compact-banner.js +0 -81
  411. package/dist/tui/conversation-pane.js +0 -164
  412. package/dist/tui/cost-table.js +0 -111
  413. package/dist/tui/device-flow.js +0 -142
  414. package/dist/tui/doctor-table.js +0 -46
  415. package/dist/tui/feedback-prompt.js +0 -156
  416. package/dist/tui/input-box.js +0 -732
  417. package/dist/tui/login-picker.js +0 -69
  418. package/dist/tui/markdown-render.js +0 -266
  419. package/dist/tui/multi-file-diff-approval.js +0 -375
  420. package/dist/tui/onboarding-wizard.js +0 -240
  421. package/dist/tui/permissions-picker.js +0 -86
  422. package/dist/tui/render.js +0 -160
  423. package/dist/tui/repl-render.js +0 -770
  424. package/dist/tui/repl-splash-art.js +0 -64
  425. package/dist/tui/repl-splash-mascot.js +0 -154
  426. package/dist/tui/repl-splash.js +0 -117
  427. package/dist/tui/repl.js +0 -378
  428. package/dist/tui/slash-palette.js +0 -106
  429. package/dist/tui/splash-data.js +0 -61
  430. package/dist/tui/splash.js +0 -31
  431. package/dist/tui/status-bar.js +0 -209
  432. package/dist/tui/status-table.js +0 -7
  433. package/dist/tui/stickers-art.js +0 -136
  434. package/dist/tui/style-table.js +0 -28
  435. package/dist/tui/theme-table.js +0 -29
  436. package/dist/tui/thinking-spinner.js +0 -123
  437. package/dist/tui/tool-stream-pane.js +0 -140
  438. package/dist/tui/update-banner.js +0 -33
  439. package/dist/tui/vim-input.js +0 -267
  440. package/dist/tui/welcome-banner.js +0 -107
  441. package/dist/tui/welcome-data.js +0 -293
  442. package/dist/tui/workspace-context.js +0 -105
  443. package/docs/examples/codegraph.mcp.json +0 -10
  444. package/test/scenarios/codegen-create-file.scenario.txt +0 -13
  445. package/test/scenarios/compact-force.scenario.txt +0 -12
  446. package/test/scenarios/identity.scenario.txt +0 -11
  447. package/test/scenarios/persona-handoff.scenario.txt +0 -12
  448. package/test/scenarios/walkback.scenario.txt +0 -12
@@ -1,128 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- /**
3
- * Open `url` in the default browser. Returns `{ opened: true }` on a
4
- * successful spawn, `{ opened: false }` on any failure. The url is not
5
- * shell-escaped here; we always pass it as a single argv element to a
6
- * direct spawn (no shell), so quoting is irrelevant.
7
- */
8
- export async function autoOpenBrowser(url, deps = {}) {
9
- const platform = deps.platform ?? process.platform;
10
- const spawnDetached = deps.spawnDetached ?? defaultSpawnDetached;
11
- // Refuse anything that does not parse as http(s). The device-flow URL
12
- // is always https — guarding here keeps a hostile server response
13
- // from convincing us to spawn `open file:///etc/passwd` or worse.
14
- if (!isSafeHttpUrl(url)) {
15
- return { opened: false };
16
- }
17
- if (platform === 'darwin') {
18
- return { opened: spawnDetached('open', [url]) };
19
- }
20
- if (platform === 'win32') {
21
- // P1-3 (triple-review): cmd.exe parses `&` as a command
22
- // separator BEFORE Node hands argv to the child, regardless of
23
- // `shell: false`. A device-flow URL like
24
- // `https://app.pugi.io/devices/authorize?user_code=ABC&trace=xyz`
25
- // would be truncated at the `&`, opening only the first half. We
26
- // prefer PowerShell (its argv parser is sane: a single quoted URL
27
- // round-trips verbatim) and fall back to a double-quoted cmd
28
- // invocation when PowerShell is missing from PATH.
29
- if (spawnDetached('powershell', [
30
- '-NoProfile',
31
- '-NonInteractive',
32
- '-Command',
33
- 'Start-Process',
34
- quoteForPowerShell(url),
35
- ])) {
36
- return { opened: true };
37
- }
38
- // Fallback: `cmd /c start "" "<url>"`. The URL itself is wrapped
39
- // in double quotes so cmd does not split on `&`; any embedded `"`
40
- // in the URL is escaped using cmd's caret-quote convention.
41
- return {
42
- opened: spawnDetached('cmd', ['/c', 'start', '""', quoteForCmd(url)]),
43
- };
44
- }
45
- if (platform === 'linux' || platform === 'freebsd' || platform === 'openbsd') {
46
- // Try xdg-open first (the freedesktop standard), then gio (GNOME),
47
- // then a couple of well-known browsers as a last resort. Each
48
- // attempt is a fresh spawn — if the binary is missing the helper
49
- // returns false and we fall through.
50
- for (const cmd of LINUX_OPENERS) {
51
- if (spawnDetached(cmd, [url]))
52
- return { opened: true };
53
- }
54
- return { opened: false };
55
- }
56
- // Unknown platform (android, aix, sunos…) — degrade gracefully.
57
- return { opened: false };
58
- }
59
- const LINUX_OPENERS = ['xdg-open', 'gio', 'gnome-open', 'kde-open'];
60
- function isSafeHttpUrl(candidate) {
61
- try {
62
- const url = new URL(candidate);
63
- return url.protocol === 'https:' || url.protocol === 'http:';
64
- }
65
- catch {
66
- return false;
67
- }
68
- }
69
- /**
70
- * P1-3 (triple-review): wrap a URL for PowerShell's
71
- * `Start-Process` invocation. PowerShell's single-quote string literal
72
- * does NOT process escape sequences; the only metachar inside is the
73
- * single quote itself (escaped by doubling). URLs do not contain
74
- * single quotes in practice, but the helper handles them defensively
75
- * so future input shapes do not break.
76
- */
77
- function quoteForPowerShell(url) {
78
- return `'${url.replace(/'/g, "''")}'`;
79
- }
80
- /**
81
- * P1-3 (triple-review): wrap a URL for cmd.exe's
82
- * `start ""` invocation. Double quotes pin the URL as a single token
83
- * so cmd does NOT split on `&`, `|`, `^`, `<`, `>`. Embedded `"` (rare
84
- * in URLs but defensible) is escaped via cmd's caret-quote convention:
85
- * `^"`.
86
- */
87
- function quoteForCmd(url) {
88
- return `"${url.replace(/"/g, '^"')}"`;
89
- }
90
- /**
91
- * Real spawn implementation. Detaches the child so the Pugi CLI can
92
- * exit (or keep polling) without inheriting the browser's lifecycle.
93
- * Returns `true` only when the spawn produced a pid; any error event
94
- * (ENOENT for a missing binary, EACCES for a sandboxed permission
95
- * denial) flips the result to `false`.
96
- */
97
- function defaultSpawnDetached(cmd, args) {
98
- try {
99
- const options = {
100
- detached: true,
101
- stdio: 'ignore',
102
- shell: false,
103
- };
104
- const child = spawn(cmd, args.slice(), options);
105
- // P3 polish (triple-review): swallow the async `error`
106
- // event (ENOENT for a missing binary, EACCES for a sandboxed
107
- // permission denial). The old `errored` flag was always false at
108
- // the synchronous `return !errored` point (the `error` event is
109
- // delivered later in the next tick), so the flag was dead. The
110
- // listener is still required: without it, Node escalates the
111
- // event to an unhandled-error and crashes the host process when
112
- // the binary is missing.
113
- child.on('error', () => undefined);
114
- if (typeof child.pid !== 'number')
115
- return false;
116
- // unref so the parent event loop is not held open by the browser
117
- // handle. The browser process continues independently.
118
- child.unref();
119
- // Callers treat `true` as best-effort: the fallback "Browser
120
- // didn't open?" hint is always rendered, so a silent spawn
121
- // failure still leaves the user a usable path.
122
- return true;
123
- }
124
- catch {
125
- return false;
126
- }
127
- }
128
- //# sourceMappingURL=auto-open-browser.js.map
@@ -1,122 +0,0 @@
1
- /**
2
- * — Auto-update channel model.
3
- *
4
- * the upstream tool's self-update flow exposes three release channels (stable
5
- * / beta / canary) so operators can dial in their own risk tolerance:
6
- * a finance-team operator pins `stable`, a tinkerer rides `canary`,
7
- * and the default `beta` track sits in the middle. Pugi parity ships
8
- * the same vocabulary on top of npm's dist-tags so we do NOT need a
9
- * custom registry hop:
10
- *
11
- * - `stable` → npm dist-tag `latest`
12
- * - `beta` → npm dist-tag `beta`
13
- * - `canary` → npm dist-tag `next`
14
- *
15
- * The mapping is centralised here because the dispatcher + the probe
16
- * + the slash command + the doctor probe all need to agree on which
17
- * tag they query. The channel name is what shows up in operator UI
18
- * (`pugi update --channel beta`); the npm tag is the wire-format that
19
- * gets concatenated into `npm i -g @pugi/cli@<tag>`.
20
- *
21
- * Module contract:
22
- *
23
- * - Pure constants + a small parse helper. No I/O, no module-level
24
- * side effects. The persistence layer (`state.ts`) and the probe
25
- * (`checker.ts`) wrap this module without ever mutating it.
26
- *
27
- * - Default channel is `beta` because Pugi currently publishes ONLY
28
- * beta releases on npm. Defaulting to `stable` would leave fresh
29
- * installs polling a tag that does not exist yet, surfacing a
30
- * confusing "no update available" message even though the binary
31
- * they just installed is already behind. The default is revisited
32
- * when `latest` (stable) starts shipping; the constant lives on
33
- * a single line so the bump is a one-character diff.
34
- *
35
- * - All channel <-> tag conversions go through `npmTagForChannel` /
36
- * `channelForNpmTag`. Hard-coding the string `'beta'` anywhere
37
- * else is a bug.
38
- */
39
- /**
40
- * Immutable list of every supported channel. Drives the `--channel`
41
- * flag validator + the `/update --channel <name>` slash parser +
42
- * any future Ink picker that wants to render the full set.
43
- */
44
- export const UPDATE_CHANNELS = Object.freeze([
45
- 'stable',
46
- 'beta',
47
- 'canary',
48
- ]);
49
- /**
50
- * Default channel when neither `~/.pugi/config.json::updateChannel`
51
- * nor a CLI flag specifies one. See module header for rationale.
52
- */
53
- export const DEFAULT_UPDATE_CHANNEL = 'beta';
54
- /**
55
- * npm dist-tag → channel mapping. Centralised so a future channel
56
- * rename (e.g. dropping `next` in favour of `canary` as the npm tag)
57
- * is a single-line change. The reverse-lookup helpers below derive
58
- * from this map so the two surfaces never drift.
59
- */
60
- const CHANNEL_TO_NPM_TAG = Object.freeze({
61
- stable: 'latest',
62
- beta: 'beta',
63
- canary: 'next',
64
- });
65
- /**
66
- * Map a Pugi channel name to the npm dist-tag the registry exposes.
67
- * Used to build both the registry query URL and the
68
- * `npm i -g @pugi/cli@<tag>` install command surfaced to the operator.
69
- */
70
- export function npmTagForChannel(channel) {
71
- return CHANNEL_TO_NPM_TAG[channel];
72
- }
73
- /**
74
- * Reverse lookup: given an npm dist-tag, return the matching Pugi
75
- * channel name. Returns `null` for any tag we do not officially
76
- * support; the caller layers in its own fallback (typically
77
- * `DEFAULT_UPDATE_CHANNEL`) so a one-off dist-tag never crashes the
78
- * channel picker.
79
- */
80
- export function channelForNpmTag(tag) {
81
- for (const channel of UPDATE_CHANNELS) {
82
- if (CHANNEL_TO_NPM_TAG[channel] === tag)
83
- return channel;
84
- }
85
- return null;
86
- }
87
- /**
88
- * Type guard / parser for an unknown string. Trims + lowercases the
89
- * input so `--channel BETA` and `--channel beta ` both work. Returns
90
- * `null` for unknown channel names; the caller decides whether to
91
- * fall back, error out, or prompt the operator.
92
- */
93
- export function parseUpdateChannel(raw) {
94
- if (typeof raw !== 'string')
95
- return null;
96
- const normalised = raw.trim().toLowerCase();
97
- if (normalised.length === 0)
98
- return null;
99
- for (const channel of UPDATE_CHANNELS) {
100
- if (channel === normalised)
101
- return channel;
102
- }
103
- return null;
104
- }
105
- /**
106
- * Pretty operator-readable description of a channel. Surfaced in the
107
- * `pugi update --check` JSON envelope + the interactive picker so the
108
- * operator sees what they are switching into. Keeps the copy single-
109
- * sourced because the same line lands in the doctor table, the
110
- * `--check` JSON, and the slash-command response.
111
- */
112
- export function describeChannel(channel) {
113
- switch (channel) {
114
- case 'stable':
115
- return 'stable (npm latest — finance / prod operators)';
116
- case 'beta':
117
- return 'beta (npm beta — current Pugi default)';
118
- case 'canary':
119
- return 'canary (npm next — tinkerers, early adopters)';
120
- }
121
- }
122
- //# sourceMappingURL=channels.js.map
@@ -1,241 +0,0 @@
1
- /**
2
- * — Channel-aware npm registry probe.
3
- *
4
- * Polls `https://registry.npmjs.org/@pugi/cli` and reads the
5
- * `dist-tags` object — npm publishes one entry per dist-tag (`latest`,
6
- * `beta`, `next`) mapped to the highest semver under that tag. The
7
- * channel resolver in `channels.ts` translates Pugi's user-visible
8
- * channel name (`stable` / `beta` / `canary`) into the matching tag
9
- * before we read it off the response.
10
- *
11
- * Why this lives next to (rather than INSIDE) the existing
12
- * `runtime/update-check.ts`:
13
- *
14
- * - `update-check.ts` already poll `/@pugi/cli/latest`. That endpoint
15
- * ONLY surfaces the `latest` dist-tag — channel selection requires
16
- * the full package document `/@pugi/cli` so we can pluck any of
17
- * the three tags. Two endpoints, two probes.
18
- *
19
- * - The legacy banner (REPL cold start) keeps polling `latest` and
20
- * does NOT need to know about channels yet — it is a single-track
21
- * cosmetic hint. Splitting into two modules means we can ship L27
22
- * without churning the existing banner cache shape.
23
- *
24
- * - A future sprint may unify the two probes once the channel
25
- * selection percolates into the REPL banner. For now the modules
26
- * coexist with a clear boundary: this file owns the `pugi update`
27
- * surface, `runtime/update-check.ts` owns the REPL cold-start
28
- * cosmetic banner.
29
- *
30
- * Module contract:
31
- *
32
- * - The probe is pure with respect to disk + clock — every IO/clock
33
- * dependency is injected. The same module is used both at the CLI
34
- * entry point (real `fetch` + real `Date.now`) and in tests
35
- * (mock fetch + frozen clock) without a single environment shim.
36
- *
37
- * - Failures NEVER throw. A 5xx, a network error, a JSON parse
38
- * failure, or an unknown channel/tag all collapse to a structured
39
- * `{ available: false, error: <reason> }` envelope. The caller
40
- * decides whether to surface the error to the operator (the
41
- * `pugi update --check` JSON surface) or swallow it (the cold-
42
- * start banner).
43
- *
44
- * - The probe DOES NOT touch persistence. Writing the
45
- * `~/.pugi/.last-update-check` timestamp is the caller's
46
- * responsibility (the dispatcher in `runtime/commands/update.ts`)
47
- * so a smoke-test sweep that probes the registry 50 times in a
48
- * row does not accidentally write 50 timestamps.
49
- */
50
- import { npmTagForChannel, } from './channels.js';
51
- import { compareVersions } from '../../runtime/update-check.js';
52
- /**
53
- * Base registry URL — overridable per call so the spec can drive the
54
- * full request lifecycle through undici's MockAgent.
55
- */
56
- const PUGI_CLI_PACKAGE_URL = 'https://registry.npmjs.org/@pugi/cli';
57
- /**
58
- * Hard cap on the registry round-trip. Mirrors the existing
59
- * `runtime/update-check.ts::FETCH_TIMEOUT_MS` so both surfaces
60
- * timeout-by-the-same-budget — operators never wait longer for `pugi
61
- * update --check` than they would for the cold-start banner.
62
- */
63
- const FETCH_TIMEOUT_MS = 3_000;
64
- /**
65
- * Build the install command the operator copy-pastes (or `pugi update
66
- * --apply` shells out to). Centralised so the dispatcher + the
67
- * checker share a single source of truth on the literal string.
68
- */
69
- export function buildInstallCommand(channel) {
70
- return `npm install -g @pugi/cli@${npmTagForChannel(channel)}`;
71
- }
72
- /**
73
- * Probe the npm registry for the latest version under `channel`. The
74
- * dispatcher wraps this with persistence + confirmation prompts; this
75
- * function is intentionally pure so the doctor probe + the cold-
76
- * start banner can reuse it without dragging the dispatcher's I/O
77
- * surface in.
78
- */
79
- export async function checkForChannelUpdate(deps) {
80
- const fetchImpl = deps.fetchImpl ?? globalThis.fetch.bind(globalThis);
81
- const registryUrl = deps.registryUrl ?? PUGI_CLI_PACKAGE_URL;
82
- const timeoutMs = deps.timeoutMs ?? FETCH_TIMEOUT_MS;
83
- const tag = npmTagForChannel(deps.channel);
84
- const installCommand = buildInstallCommand(deps.channel);
85
- // A controller-driven timeout — the spec's MockAgent never trips it
86
- // but the production path on a stuck registry must bail in 3s.
87
- const controller = new AbortController();
88
- const timer = setTimeout(() => controller.abort(), timeoutMs);
89
- let response;
90
- try {
91
- response = await fetchImpl(registryUrl, {
92
- method: 'GET',
93
- headers: { Accept: 'application/json' },
94
- signal: controller.signal,
95
- });
96
- }
97
- catch (error) {
98
- clearTimeout(timer);
99
- const message = error instanceof Error ? error.message : String(error);
100
- return {
101
- channel: deps.channel,
102
- npmTag: tag,
103
- current: deps.currentVersion,
104
- latest: null,
105
- available: false,
106
- gap: null,
107
- installCommand,
108
- error: `registry_unreachable: ${message}`,
109
- };
110
- }
111
- clearTimeout(timer);
112
- if (!response.ok) {
113
- return {
114
- channel: deps.channel,
115
- npmTag: tag,
116
- current: deps.currentVersion,
117
- latest: null,
118
- available: false,
119
- gap: null,
120
- installCommand,
121
- error: `registry_status_${response.status}`,
122
- };
123
- }
124
- let body;
125
- try {
126
- body = await response.json();
127
- }
128
- catch (error) {
129
- const message = error instanceof Error ? error.message : String(error);
130
- return {
131
- channel: deps.channel,
132
- npmTag: tag,
133
- current: deps.currentVersion,
134
- latest: null,
135
- available: false,
136
- gap: null,
137
- installCommand,
138
- error: `registry_json_unparseable: ${message}`,
139
- };
140
- }
141
- const distTags = extractDistTags(body);
142
- if (!distTags) {
143
- return {
144
- channel: deps.channel,
145
- npmTag: tag,
146
- current: deps.currentVersion,
147
- latest: null,
148
- available: false,
149
- gap: null,
150
- installCommand,
151
- error: 'registry_missing_dist_tags',
152
- };
153
- }
154
- const latest = distTags[tag];
155
- if (typeof latest !== 'string' || latest.length === 0) {
156
- return {
157
- channel: deps.channel,
158
- npmTag: tag,
159
- current: deps.currentVersion,
160
- latest: null,
161
- available: false,
162
- gap: null,
163
- installCommand,
164
- error: `registry_missing_tag_${tag}`,
165
- };
166
- }
167
- const cmp = compareVersions(deps.currentVersion, latest);
168
- const available = cmp < 0;
169
- const gap = classifyGap(deps.currentVersion, latest);
170
- return {
171
- channel: deps.channel,
172
- npmTag: tag,
173
- current: deps.currentVersion,
174
- latest,
175
- available,
176
- gap,
177
- installCommand,
178
- error: null,
179
- };
180
- }
181
- /**
182
- * Extract the `dist-tags` object from a registry response. The npm
183
- * package document is large (often >100kB); we only need this one
184
- * key. Returns null when the field is missing or not a string-record
185
- * — both indicate a registry response the probe should treat as
186
- * unusable rather than panic on.
187
- */
188
- function extractDistTags(body) {
189
- if (!body || typeof body !== 'object')
190
- return null;
191
- const obj = body;
192
- const raw = obj['dist-tags'];
193
- if (!raw || typeof raw !== 'object' || Array.isArray(raw))
194
- return null;
195
- const result = {};
196
- for (const [tag, value] of Object.entries(raw)) {
197
- if (typeof value === 'string' && value.length > 0) {
198
- result[tag] = value;
199
- }
200
- }
201
- return result;
202
- }
203
- /**
204
- * Coarse semver gap classification used to colour the dispatcher's
205
- * diff line. We do NOT roll our own semver parser — `compareVersions`
206
- * (already in `runtime/update-check.ts`) is the canonical comparator;
207
- * here we only need to bucket the diff into major / minor / patch /
208
- * prerelease for UX hints.
209
- *
210
- * The classifier is intentionally tolerant: anything that does not
211
- * parse as `X.Y.Z[-pre]` collapses to `prerelease` so we surface a
212
- * conservative "investigate manually" hint instead of crashing.
213
- */
214
- function classifyGap(current, latest) {
215
- if (current === latest)
216
- return 'same';
217
- const a = parseCoarseSemver(current);
218
- const b = parseCoarseSemver(latest);
219
- if (!a || !b)
220
- return 'prerelease';
221
- if (b.major !== a.major)
222
- return 'major';
223
- if (b.minor !== a.minor)
224
- return 'minor';
225
- if (b.patch !== a.patch)
226
- return 'patch';
227
- return 'prerelease';
228
- }
229
- function parseCoarseSemver(version) {
230
- const match = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version);
231
- if (!match)
232
- return null;
233
- const major = Number(match[1]);
234
- const minor = Number(match[2]);
235
- const patch = Number(match[3]);
236
- if (!Number.isFinite(major) || !Number.isFinite(minor) || !Number.isFinite(patch)) {
237
- return null;
238
- }
239
- return { major, minor, patch };
240
- }
241
- //# sourceMappingURL=checker.js.map