@pugi/cli 0.1.0-beta.98 → 1.0.0-alpha.1

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 -192
  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,211 +0,0 @@
1
- /**
2
- * Repo-map scanner — .
3
- *
4
- * Walks the workspace via `fs.readdirSync` (sync, depth-first), filters
5
- * to a recognised set of source-language extensions, and applies the
6
- * shared `PugiIgnore` matcher so the same exclusion rules used by the
7
- * three-tier context skeleton also gate the repo-map.
8
- *
9
- * Why a stand-alone scanner (vs. reusing the skeleton walker):
10
- *
11
- * 1. The skeleton walker emits a flat `IndexArtifact[]` of every
12
- * ignore-respecting file (markdown, configs, schemas, etc.) for
13
- * the working-set heuristic. The repo-map ONLY needs source
14
- * files — markdown headings and JSON keys are not "definitions"
15
- * in the L28 sense. Filtering downstream is cheap, but the
16
- * scanner gets to short-circuit on extension before stat'ing
17
- * the file, which matters for monorepos with thousands of
18
- * non-source artefacts (lockfiles, schemas, fixtures).
19
- *
20
- * 2. We need mtime + size per file so `cache.ts` can invalidate
21
- * stale entries without re-parsing. The skeleton walker
22
- * surfaces only paths.
23
- *
24
- * 3. The L28 contract caps the walk at `MAX_SRC_FILES` (5000) and
25
- * individual files at `MAX_FILE_BYTES` (200 KiB). When the cap
26
- * trips the scanner returns a `{ skipped: 'too-large' }`
27
- * verdict rather than partial data — the consumer must decide
28
- * whether to fall back to a no-op map or surface a hint к the
29
- * operator. Surfacing partial data would silently bias the
30
- * injected summary toward whichever subtree the walker happened
31
- * to traverse first.
32
- *
33
- * The output is sorted (POSIX path string compare) so two runs over
34
- * the same workspace produce byte-identical `repo-map.json` caches —
35
- * `cache.ts` relies on stable ordering for its hash-free freshness
36
- * check. POSIX-style separators are used in `relPath` regardless of
37
- * platform so the cache file stays portable.
38
- *
39
- * Pure module surface: no logging, no network. Errors during readdir
40
- * on a single subtree (permission denied, symlink loop) are swallowed
41
- * and the walker continues — repo-map is a best-effort context
42
- * enrichment, never a gate.
43
- */
44
- import { readdirSync, statSync } from 'node:fs';
45
- import { join, posix, relative, resolve, sep } from 'node:path';
46
- /**
47
- * Hard ceiling on total source files surfaced by a single scan. The
48
- * engine context budget is the binding constraint — a 5K-file repo
49
- * already overflows the 2K-token injection cap so going higher buys
50
- * nothing but walker latency. Repos above the cap fall back к the
51
- * `{ skipped: 'too-large' }` verdict.
52
- */
53
- export const MAX_SRC_FILES = 5000;
54
- /**
55
- * Per-file size cap. Files larger than this are skipped — they are
56
- * almost always generated (compiled JS, vendored libs, encoded blobs)
57
- * and add noise without signal. The 200 KiB threshold mirrors the
58
- * skeleton walker's own `MAX_FILE_BYTES` so the two scans agree
59
- * on "what counts as a source file".
60
- */
61
- export const MAX_FILE_BYTES = 200 * 1024;
62
- /**
63
- * Source-language extensions the extractor knows how to parse. Adding
64
- * a language here without a matching extractor branch is a silent
65
- * no-op (the file shows up в the scan but extracts zero symbols);
66
- * the spec asserts the symmetry so a future PR cannot drift the two
67
- * lists out of sync.
68
- */
69
- export const SUPPORTED_EXTENSIONS = Object.freeze([
70
- '.ts',
71
- '.tsx',
72
- '.js',
73
- '.jsx',
74
- '.mjs',
75
- '.cjs',
76
- '.md',
77
- '.mdx',
78
- ]);
79
- const defaultReaddir = (path) => readdirSync(path, { withFileTypes: true });
80
- const defaultStat = (path) => {
81
- const s = statSync(path);
82
- return { size: s.size, mtimeMs: s.mtimeMs };
83
- };
84
- /**
85
- * Walk the workspace once and return every source file the extractor
86
- * is willing to parse. The function is deliberately synchronous —
87
- * the underlying walks are CPU-bound, не I/O-bound, and the sync
88
- * call avoids the promise overhead that dominates for thousands of
89
- * small files. The L28 engine boot path runs this on a Node `setImmediate`
90
- * so the main thread is not blocked.
91
- */
92
- export function scanRepoForMap(options) {
93
- const root = resolve(options.root);
94
- const readdir = options.readdir ?? defaultReaddir;
95
- const stat = options.stat ?? defaultStat;
96
- const maxFiles = options.maxFiles ?? MAX_SRC_FILES;
97
- const maxFileBytes = options.maxFileBytes ?? MAX_FILE_BYTES;
98
- const ignore = options.ignore;
99
- const files = [];
100
- let walked = 0;
101
- let skippedLarge = 0;
102
- let skippedIgnored = 0;
103
- let tooLarge = false;
104
- /**
105
- * Depth-first recursion. We push dirs into a manual stack instead of
106
- * recursing in JS because deep monorepos (Nx with 100+ packages)
107
- * have approached the v8 default stack limit on Windows runners
108
- * before; an explicit stack is one less thing to debug.
109
- */
110
- const stack = [root];
111
- while (stack.length > 0) {
112
- const dir = stack.pop();
113
- let entries;
114
- try {
115
- entries = readdir(dir);
116
- }
117
- catch {
118
- // Permission denied / symlink loop / mid-flight delete — keep
119
- // walking. Repo-map is best-effort context, never a gate.
120
- continue;
121
- }
122
- for (const entry of entries) {
123
- const abs = join(dir, entry.name);
124
- const isDir = entry.isDirectory();
125
- if (ignore.isIgnored(abs, isDir)) {
126
- skippedIgnored += 1;
127
- continue;
128
- }
129
- if (isDir) {
130
- stack.push(abs);
131
- continue;
132
- }
133
- if (!entry.isFile()) {
134
- // Symlinks, sockets, FIFOs etc. Skip silently — they are not
135
- // source code and stat'ing them can throw on broken links.
136
- continue;
137
- }
138
- walked += 1;
139
- const ext = extOf(entry.name);
140
- if (!SUPPORTED_EXTENSIONS.includes(ext)) {
141
- continue;
142
- }
143
- let statResult;
144
- try {
145
- statResult = stat(abs);
146
- }
147
- catch {
148
- // File vanished between readdir and stat — skip.
149
- continue;
150
- }
151
- if (statResult.size > maxFileBytes) {
152
- skippedLarge += 1;
153
- continue;
154
- }
155
- // Workspace-relative POSIX path. `relative` returns the host
156
- // separator on Windows; normalise to forward slashes so the
157
- // cache file is portable.
158
- const rel = relative(root, abs).split(sep).join(posix.sep);
159
- files.push({
160
- relPath: rel,
161
- absPath: abs,
162
- ext,
163
- sizeBytes: statResult.size,
164
- mtimeMs: statResult.mtimeMs,
165
- });
166
- if (files.length > maxFiles) {
167
- tooLarge = true;
168
- break;
169
- }
170
- }
171
- if (tooLarge)
172
- break;
173
- }
174
- if (tooLarge) {
175
- return {
176
- ok: false,
177
- root,
178
- skipped: {
179
- reason: 'too-large',
180
- walked,
181
- },
182
- };
183
- }
184
- // Sort by POSIX path for stable cache output. Two runs over the
185
- // same workspace yield byte-identical JSON so the cache hash check
186
- // is a simple `mtime + size` per entry without a content digest.
187
- files.sort((a, b) => (a.relPath < b.relPath ? -1 : a.relPath > b.relPath ? 1 : 0));
188
- return {
189
- ok: true,
190
- root,
191
- files,
192
- stats: {
193
- walked,
194
- kept: files.length,
195
- skippedLarge,
196
- skippedIgnored,
197
- },
198
- };
199
- }
200
- /**
201
- * Lowercase extension including the leading dot, or '' when the
202
- * filename has no extension. Mirrors `node:path.extname` semantics —
203
- * inlined so the scanner has zero per-iteration call overhead.
204
- */
205
- function extOf(name) {
206
- const dot = name.lastIndexOf('.');
207
- if (dot < 0 || dot === 0)
208
- return '';
209
- return name.slice(dot).toLowerCase();
210
- }
211
- //# sourceMappingURL=scanner.js.map
@@ -1,251 +0,0 @@
1
- /**
2
- * Git collector for `pugi retro`.
3
- *
4
- * Mines a window of git history into RawCommit[] using `git log
5
- * --numstat --no-renames` plus a few discrete `git` calls for branch
6
- * + base + user identity. All git invocations go through child_process
7
- * (execFile) so we never shell-expand operator-controlled values.
8
- *
9
- * The collector is intentionally tolerant of a "no git" workspace —
10
- * `pugi retro` should not crash on a fresh `pugi init` scratch dir.
11
- * `collectGitContext` returns an empty harvest with `hasGit: false`
12
- * so the renderer can emit a friendly empty-state.
13
- */
14
- import { execFile } from 'node:child_process';
15
- import { existsSync } from 'node:fs';
16
- import { join } from 'node:path';
17
- import { promisify } from 'node:util';
18
- const execFileAsync = promisify(execFile);
19
- const GIT_LOG_FORMAT = '%H%x01%an%x01%ae%x01%aI%x01%at%x01%s%x01%b';
20
- const RECORD_SEP = '\x02';
21
- const FIELD_SEP = '\x01';
22
- /** Files counted as tests (used both for stats split + commit-type
23
- * classification when the author forgets a conventional prefix). */
24
- const TEST_FILE_RE = /(^|\/)(test|tests|spec|__tests__)\//i;
25
- const TEST_FILE_SUFFIX_RE = /\.(spec|test)\.(ts|tsx|js|jsx|mjs|cjs)$/i;
26
- function isTestFile(path) {
27
- if (TEST_FILE_RE.test(path))
28
- return true;
29
- if (TEST_FILE_SUFFIX_RE.test(path))
30
- return true;
31
- return false;
32
- }
33
- /** Format a Date as `YYYY-MM-DDTHH:mm:ss` in LOCAL time (no `Z` suffix).
34
- * Spec: git log `--since` parses local-time strings when no Z is given.
35
- */
36
- export function formatLocalDateTime(d) {
37
- const pad = (n) => n.toString().padStart(2, '0');
38
- const y = d.getFullYear();
39
- const mo = pad(d.getMonth() + 1);
40
- const da = pad(d.getDate());
41
- const h = pad(d.getHours());
42
- const mi = pad(d.getMinutes());
43
- const s = pad(d.getSeconds());
44
- return `${y}-${mo}-${da}T${h}:${mi}:${s}`;
45
- }
46
- /** Detect whether the cwd lives inside a git working tree.
47
- * Cheap probe: checks for a `.git` dir/file, then falls back to the
48
- * actual `git rev-parse --is-inside-work-tree` for worktrees / submodules.
49
- */
50
- export async function isGitWorkspace(cwd) {
51
- if (existsSync(join(cwd, '.git')))
52
- return true;
53
- try {
54
- const { stdout } = await execFileAsync('git', ['rev-parse', '--is-inside-work-tree'], { cwd });
55
- return stdout.trim() === 'true';
56
- }
57
- catch {
58
- return false;
59
- }
60
- }
61
- /** Resolve `origin/HEAD` symbolic ref → short name (e.g. `main`).
62
- * Falls back to `main` if the remote ref is not set (common in fresh
63
- * scratch repos with no remote).
64
- */
65
- export async function detectBaseBranch(cwd) {
66
- try {
67
- const { stdout } = await execFileAsync('git', ['symbolic-ref', '--short', 'refs/remotes/origin/HEAD'], { cwd });
68
- const ref = stdout.trim();
69
- if (!ref)
70
- return 'main';
71
- const idx = ref.lastIndexOf('/');
72
- return idx === -1 ? ref : ref.slice(idx + 1);
73
- }
74
- catch {
75
- return 'main';
76
- }
77
- }
78
- export async function detectCurrentBranch(cwd) {
79
- try {
80
- const { stdout } = await execFileAsync('git', ['branch', '--show-current'], { cwd });
81
- const branch = stdout.trim();
82
- return branch || 'HEAD';
83
- }
84
- catch {
85
- return 'HEAD';
86
- }
87
- }
88
- export async function detectUserIdentity(cwd) {
89
- const name = await readGitConfig(cwd, 'user.name');
90
- const email = await readGitConfig(cwd, 'user.email');
91
- return { name: name || 'You', email: email || '' };
92
- }
93
- async function readGitConfig(cwd, key) {
94
- try {
95
- const { stdout } = await execFileAsync('git', ['config', '--get', key], { cwd });
96
- return stdout.trim();
97
- }
98
- catch {
99
- return '';
100
- }
101
- }
102
- /** Parse the multi-line `git log --numstat` output into RawCommit[].
103
- *
104
- * Format laid out as: `<header>\n<numstat lines>\n` per record,
105
- * records separated by RECORD_SEP. The header has 7 fields joined by
106
- * FIELD_SEP: sha, name, email, iso-date, epoch, subject, body. Each
107
- * numstat line is `<ins>\t<del>\t<path>`; binary diffs surface as
108
- * `-\t-\t<path>` and contribute 0/0 to the stats roll-up.
109
- */
110
- export function parseGitLog(raw) {
111
- const records = raw.split(RECORD_SEP).map((r) => r.trim()).filter(Boolean);
112
- const commits = [];
113
- for (const record of records) {
114
- const lines = record.split('\n');
115
- const headerLine = lines[0];
116
- if (!headerLine)
117
- continue;
118
- const headerFields = headerLine.split(FIELD_SEP);
119
- if (headerFields.length < 7)
120
- continue;
121
- const sha = headerFields[0] ?? '';
122
- const author = headerFields[1] ?? '';
123
- const authorEmail = headerFields[2] ?? '';
124
- const timestamp = headerFields[3] ?? '';
125
- const epochRaw = headerFields[4] ?? '0';
126
- const subject = headerFields[5] ?? '';
127
- const body = headerFields[6] ?? '';
128
- const epochSeconds = Number.parseInt(epochRaw, 10);
129
- if (!sha || !Number.isFinite(epochSeconds))
130
- continue;
131
- const files = [];
132
- let insertions = 0;
133
- let deletions = 0;
134
- let testInsertions = 0;
135
- let testDeletions = 0;
136
- for (let i = 1; i < lines.length; i += 1) {
137
- const line = lines[i];
138
- if (!line)
139
- continue;
140
- const parts = line.split('\t');
141
- if (parts.length < 3)
142
- continue;
143
- const insRaw = parts[0] ?? '0';
144
- const delRaw = parts[1] ?? '0';
145
- const path = parts[2] ?? '';
146
- if (!path)
147
- continue;
148
- const ins = insRaw === '-' ? 0 : Number.parseInt(insRaw, 10) || 0;
149
- const del = delRaw === '-' ? 0 : Number.parseInt(delRaw, 10) || 0;
150
- files.push(path);
151
- insertions += ins;
152
- deletions += del;
153
- if (isTestFile(path)) {
154
- testInsertions += ins;
155
- testDeletions += del;
156
- }
157
- }
158
- commits.push({
159
- sha,
160
- author,
161
- authorEmail,
162
- timestamp,
163
- epochSeconds,
164
- subject,
165
- body,
166
- files,
167
- stats: { insertions, deletions, testInsertions, testDeletions },
168
- });
169
- }
170
- return commits;
171
- }
172
- /** Run `git log` for the given window. The format string packs every
173
- * field we need into one stream so we only spawn git once. Records
174
- * are separated by RECORD_SEP and fields by FIELD_SEP (both control
175
- * characters that cannot appear inside commit text), so the parser
176
- * never confuses subject text containing tabs/newlines for delimiters.
177
- */
178
- async function runGitLog(cwd, window) {
179
- const since = formatLocalDateTime(window.since);
180
- const until = formatLocalDateTime(window.until);
181
- const args = [
182
- 'log',
183
- `--since=${since}`,
184
- `--until=${until}`,
185
- '--no-renames',
186
- '--numstat',
187
- `--pretty=format:${RECORD_SEP}${GIT_LOG_FORMAT}`,
188
- 'HEAD',
189
- ];
190
- try {
191
- const { stdout } = await execFileAsync('git', args, {
192
- cwd,
193
- maxBuffer: 64 * 1024 * 1024,
194
- });
195
- return stdout;
196
- }
197
- catch {
198
- return '';
199
- }
200
- }
201
- /** Count commits between the merge-base of <base>...HEAD and HEAD —
202
- * i.e. how many commits the current branch has added over the base.
203
- * Returns 0 when the branch is base or the base ref is unknown.
204
- */
205
- export async function countCommitsAheadOfBase(cwd, base, since) {
206
- try {
207
- const { stdout } = await execFileAsync('git', [
208
- 'rev-list',
209
- '--count',
210
- `${base}..HEAD`,
211
- `--since=${formatLocalDateTime(since)}`,
212
- ], { cwd });
213
- const n = Number.parseInt(stdout.trim(), 10);
214
- return Number.isFinite(n) ? n : 0;
215
- }
216
- catch {
217
- return 0;
218
- }
219
- }
220
- export async function collectGitContext(options) {
221
- const { cwd, window } = options;
222
- const hasGit = await isGitWorkspace(cwd);
223
- if (!hasGit) {
224
- return {
225
- hasGit: false,
226
- cwd,
227
- currentBranch: '',
228
- baseBranch: '',
229
- userName: '',
230
- userEmail: '',
231
- commits: [],
232
- };
233
- }
234
- const [currentBranch, baseBranch, identity, rawLog] = await Promise.all([
235
- detectCurrentBranch(cwd),
236
- detectBaseBranch(cwd),
237
- detectUserIdentity(cwd),
238
- runGitLog(cwd, window),
239
- ]);
240
- const commits = parseGitLog(rawLog);
241
- return {
242
- hasGit: true,
243
- cwd,
244
- currentBranch,
245
- baseBranch,
246
- userName: identity.name,
247
- userEmail: identity.email,
248
- commits,
249
- };
250
- }
251
- //# sourceMappingURL=git-collector.js.map
@@ -1,25 +0,0 @@
1
- /**
2
- * Workspace health card — Plane module oversize detection.
3
- *
4
- * Background (recall Pugi incident 2026-05-30): the Plane web UI
5
- * tripped a React error boundary when an admin-api module accumulated
6
- * ~200 issues. The actual REST API still returned 200, but the frontend
7
- * choked. The fix was to keep modules at or below 60 issues and split larger ones.
8
- *
9
- * The health card surfaces a P1 warning when a module exceeds the
10
- * recommended cap so the operator can split it before the next sprint.
11
- */
12
- /** Recommended max issues per Plane module. The retro card surfaces
13
- * any module exceeding this so the operator can split it. */
14
- export const OVERSIZED_MODULE_THRESHOLD = 60;
15
- export function computeHealthCard(modules) {
16
- const oversized = modules
17
- .filter((m) => m.issueCount > OVERSIZED_MODULE_THRESHOLD)
18
- .sort((a, b) => b.issueCount - a.issueCount);
19
- return {
20
- totalModules: modules.length,
21
- oversized,
22
- oversizedThreshold: OVERSIZED_MODULE_THRESHOLD,
23
- };
24
- }
25
- //# sourceMappingURL=health-card.js.map