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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,227 +0,0 @@
1
- /**
2
- * `/codegraph-status` runner — .
3
- *
4
- * Single source of truth for the codegraph adoption + index-freshness
5
- * surface. Used by:
6
- *
7
- * - REPL slash `/codegraph-status` (the discoverable surface)
8
- * - REPL slash `/codegraph` (short alias)
9
- *
10
- * The runner is intentionally narrow — every information surface
11
- * (installed? / index age / symbol count / last reindex / refresh CTA)
12
- * is computed from the workspace-local `.pugi/codegraph-decision.json`
13
- * + the live `.pugi/mcp.json` + the bounded scanner at
14
- * `core/codegraph/detect-repo.ts`. NO network round-trip; everything
15
- * runs offline so an air-gapped operator still gets the status table.
16
- *
17
- * Flags:
18
- * --install — merge codegraph into .pugi/mcp.json (accept decision)
19
- * --reindex — stamp lastIndexedAt now + hint operator к run
20
- * `codegraph index` from a fresh shell. Pugi does NOT
21
- * spawn codegraph itself (no upstream dep guarantee).
22
- * --offer — surface the install prompt even after a decline,
23
- * useful when the operator declined three weeks ago and
24
- * wants to revisit без waiting for the 30-day cadence.
25
- *
26
- * Brand voice gate: ASCII output, no emoji, no decorative dividers.
27
- */
28
- import { resolve } from 'node:path';
29
- import { detectRepo } from '../../core/codegraph/detect-repo.js';
30
- import { detectCodegraphInstalled, CODEGRAPH_DOCS_URL, } from '../../core/codegraph/install.js';
31
- import { readDecision, markIndexed, indexAgeDays, STALE_INDEX_DAYS, } from '../../core/codegraph/decision-store.js';
32
- import { evaluateOffer, applyOfferDecision, emitOfferShown, } from '../../core/codegraph/offer-hook.js';
33
- export function parseCodegraphStatusArgs(args) {
34
- const out = {
35
- install: false,
36
- reindex: false,
37
- offer: false,
38
- unknown: null,
39
- };
40
- for (const arg of args) {
41
- switch (arg) {
42
- case '--install':
43
- case '-i':
44
- out.install = true;
45
- break;
46
- case '--reindex':
47
- case '-r':
48
- out.reindex = true;
49
- break;
50
- case '--offer':
51
- case '-o':
52
- out.offer = true;
53
- break;
54
- default:
55
- out.unknown = arg;
56
- return out;
57
- }
58
- }
59
- return out;
60
- }
61
- /**
62
- * Render the status table. Pure copy assembly — separates rendering
63
- * from side effects so spec callers can pin the exact layout.
64
- */
65
- export function renderStatusLines(input) {
66
- const lines = ['Codegraph status:', ''];
67
- lines.push(` Installed: ${input.installed ? 'yes' : 'no'}`);
68
- if (input.installed) {
69
- lines.push(` Trust state: ${input.trust ?? 'pending'}`);
70
- lines.push(` Config path: ${input.configPath}`);
71
- }
72
- if (input.primarySymbolCount !== null) {
73
- lines.push(` Symbol count: ~${input.primarySymbolCount} source files`);
74
- }
75
- if (input.languages && input.languages.length > 0) {
76
- lines.push(` Languages: ${input.languages.join(', ')}`);
77
- }
78
- if (input.sizeCategory) {
79
- lines.push(` Size category: ${input.sizeCategory}`);
80
- }
81
- if (input.installed) {
82
- if (input.lastIndexedAt) {
83
- lines.push(` Last indexed: ${input.lastIndexedAt}${input.ageDays !== null ? ` (${input.ageDays} day${input.ageDays === 1 ? '' : 's'} ago)` : ''}`);
84
- }
85
- else {
86
- lines.push(' Last indexed: never recorded — run `codegraph index` and `/codegraph-status --reindex`');
87
- }
88
- if (input.staleNudge) {
89
- lines.push('');
90
- lines.push(` Index is ${input.ageDays} day${input.ageDays === 1 ? '' : 's'} old (threshold ${STALE_INDEX_DAYS}). ` +
91
- 'Run `codegraph index` then `/codegraph-status --reindex` to refresh.');
92
- }
93
- }
94
- else {
95
- lines.push('');
96
- lines.push(` Docs: ${CODEGRAPH_DOCS_URL}`);
97
- lines.push(' Install via `/codegraph-status --install` OR `pugi mcp install codegraph codegraph serve --mcp`.');
98
- }
99
- return lines;
100
- }
101
- /**
102
- * Single entry-point used by the slash dispatch + (future) standalone
103
- * `pugi codegraph status` shell command. Pure orchestration — every
104
- * side effect lives behind one of the flag branches.
105
- */
106
- export async function runCodegraphStatusCommand(args, ctx) {
107
- const flags = parseCodegraphStatusArgs(args);
108
- if (flags.unknown) {
109
- ctx.writeOutput({ command: 'codegraph-status', error: 'unknown-flag', flag: flags.unknown }, `/codegraph-status: unknown flag "${flags.unknown}". Allowed: --install, --reindex, --offer.`);
110
- return;
111
- }
112
- const workspaceRoot = resolve(ctx.workspaceRoot);
113
- // --reindex — stamp lastIndexedAt + remind the operator how to actually
114
- // refresh the index. We do NOT spawn `codegraph index` — that is the
115
- // operator's call (upstream codegraph may or may not be installed; we
116
- // refuse to silently spawn a binary we did not vet).
117
- if (flags.reindex) {
118
- const decision = markIndexed(workspaceRoot);
119
- if (!decision) {
120
- ctx.writeOutput({ command: 'codegraph-status', error: 'no-decision' }, '/codegraph-status --reindex: no decision recorded yet. Accept the install first via `--install`.');
121
- return;
122
- }
123
- ctx.writeOutput({ command: 'codegraph-status', reindexed: true, lastIndexedAt: decision.lastIndexedAt }, [
124
- `Codegraph index timestamp updated to ${decision.lastIndexedAt}.`,
125
- 'Run `codegraph index` from a fresh shell to actually rebuild the SQLite cache.',
126
- ].join('\n'));
127
- return;
128
- }
129
- // --install / --offer — surface the install prompt OR accept it
130
- // directly. `--install` skips the prompt + writes the entry; `--offer`
131
- // renders the prompt copy even after a decline (operator-initiated
132
- // revisit). The two are mutually exclusive at runtime — `--install`
133
- // wins when both are set.
134
- if (flags.install || flags.offer) {
135
- const evaluation = evaluateOffer({
136
- workspaceRoot,
137
- ...(ctx.nowIso ? { nowIso: ctx.nowIso } : {}),
138
- ignorePriorDecision: flags.offer,
139
- });
140
- if (!evaluation.shouldPrompt) {
141
- const detection = detectRepo(workspaceRoot);
142
- // Already-installed is the success path for `--install`; treat
143
- // it as PASS rather than ERROR so a re-run is idempotent.
144
- if (evaluation.reason === 'already-installed') {
145
- ctx.writeOutput({ command: 'codegraph-status', alreadyInstalled: true }, 'Codegraph is already declared in .pugi/mcp.json. Run `pugi mcp trust codegraph` if not yet trusted.');
146
- return;
147
- }
148
- ctx.writeOutput({ command: 'codegraph-status', skipped: true, reason: evaluation.reason }, `/codegraph-status --${flags.install ? 'install' : 'offer'}: nothing to do (${evaluation.reason}).` +
149
- (detection.isRepo
150
- ? ` Repo: ${detection.sizeCategory}, ${detection.primarySymbolCount} src files.`
151
- : ''));
152
- return;
153
- }
154
- if (flags.install) {
155
- const result = applyOfferDecision({
156
- workspaceRoot,
157
- accepted: true,
158
- detection: evaluation.detection,
159
- ...(ctx.nowIso ? { nowIso: ctx.nowIso } : {}),
160
- });
161
- if (result.kind === 'declined') {
162
- // Defensive — applyOfferDecision with accepted=true cannot
163
- // surface a `declined` verdict by construction. We still
164
- // narrow the union so TS understands the safe path below.
165
- ctx.writeOutput({ command: 'codegraph-status', installFailed: true, reason: 'unexpected-decline' }, '/codegraph-status --install: install path returned a decline verdict (internal bug).');
166
- return;
167
- }
168
- if (result.kind === 'accepted-install-failed') {
169
- ctx.writeOutput({ command: 'codegraph-status', installFailed: true, reason: result.install.reason }, `/codegraph-status --install failed: ${result.install.reason}`);
170
- return;
171
- }
172
- ctx.writeOutput({
173
- command: 'codegraph-status',
174
- installed: true,
175
- configPath: result.install.status === 'installed' ? result.install.configPath : null,
176
- docsUrl: result.docsUrl,
177
- trustCommand: result.trustCommand,
178
- }, [
179
- result.install.status === 'installed'
180
- ? `Codegraph added к .pugi/mcp.json. Trust gate: ${result.trustCommand}`
181
- : 'Codegraph already declared. Trust gate: ' + result.trustCommand,
182
- `Docs: ${result.docsUrl}`,
183
- ].join('\n'));
184
- return;
185
- }
186
- // --offer path — surface the copy but do not install yet
187
- emitOfferShown(evaluation.detection);
188
- ctx.writeOutput({
189
- command: 'codegraph-status',
190
- offered: true,
191
- copy: evaluation.promptCopy,
192
- docsUrl: evaluation.docsUrl,
193
- }, [
194
- evaluation.promptCopy,
195
- `Docs: ${evaluation.docsUrl}`,
196
- 'Accept: /codegraph-status --install',
197
- 'Decline: do nothing (the prompt re-appears in 30 days).',
198
- ].join('\n'));
199
- return;
200
- }
201
- // Bare invocation — render the status table.
202
- const installed = detectCodegraphInstalled(workspaceRoot);
203
- const detection = detectRepo(workspaceRoot);
204
- const decision = readDecision(workspaceRoot);
205
- const ageDays = decision ? indexAgeDays(decision, ctx.nowIso) : null;
206
- const lines = renderStatusLines({
207
- installed: installed.installed,
208
- trust: installed.trust,
209
- configPath: installed.configPath,
210
- ageDays,
211
- primarySymbolCount: detection.isRepo ? detection.primarySymbolCount : null,
212
- languages: detection.isRepo ? detection.languages : null,
213
- sizeCategory: detection.isRepo ? detection.sizeCategory : null,
214
- lastIndexedAt: decision?.lastIndexedAt ?? null,
215
- staleNudge: ageDays !== null && ageDays >= STALE_INDEX_DAYS,
216
- });
217
- ctx.writeOutput({
218
- command: 'codegraph-status',
219
- installed: installed.installed,
220
- trust: installed.trust,
221
- configPath: installed.configPath,
222
- detection,
223
- decision,
224
- ageDays,
225
- }, lines.join('\n'));
226
- }
227
- //# sourceMappingURL=codegraph-status.js.map
@@ -1,297 +0,0 @@
1
- /**
2
- * `pugi compact` — top-level command + companion to the REPL slash.
3
- *
4
- * Summarises older events from the most recent SessionStore session
5
- * into a single boundary marker, freeing context budget for the next
6
- * REPL session that resumes the same id.
7
- *
8
- * Wire: writeOutput contract matches every other dispatch in cli.ts
9
- * (one structured payload + one human line). Exit code:
10
- * 0 — boundary marker appended
11
- * 1 — summarizer transport failed / store unavailable
12
- * 2 — no events to compact / nothing to do
13
- *
14
- * The companion REPL slash dispatches through this same runner so the
15
- * surface stays single-sourced.
16
- */
17
- import { homedir } from 'node:os';
18
- import { loadRuntimeConfig } from '@pugi/sdk';
19
- import { AnvilEngineLoopClient } from '../../core/engine/anvil-client.js';
20
- import { SqliteSessionStore, resolveProjectStoreDir, } from '../../core/repl/store/session-store.js';
21
- import { appendCompactBoundary, isCompactBoundary, } from '../../core/compact/buffer-rewriter.js';
22
- import { summarizeEvents, SummarizerError } from '../../core/compact/summarizer.js';
23
- /** Number of tail turns preserved verbatim on every compaction. */
24
- export const KEPT_TAIL_TURNS = 5;
25
- /** Minimum source events before we accept a compaction. */
26
- const MIN_EVENTS_TO_COMPACT = 6;
27
- /**
28
- * Entry point reused by the slash command + the top-level dispatcher.
29
- *
30
- * The function is exhaustive: every early-exit branch produces a
31
- * structured `CompactCommandResult` for the JSON path AND a one-line
32
- * human message for the TTY path. Tests assert on the returned shape;
33
- * the top-level dispatcher forwards it to `writeOutput`.
34
- */
35
- export async function runCompactCommand(_args, ctx) {
36
- const trigger = ctx.trigger ?? 'manual';
37
- // Resolve the target session id. When the caller supplied a store
38
- // (REPL slash path, tests) we trust it has the session bound; the
39
- // standalone CLI path needs to discover the most-recent id via the
40
- // read-only view + then open the live store on that id.
41
- let store = ctx.store ?? null;
42
- let sessionId = ctx.sessionId ?? null;
43
- if (store === null) {
44
- sessionId = sessionId ?? (await pickMostRecentSessionIdReadOnly(ctx.workspaceRoot));
45
- if (!sessionId) {
46
- return emit(ctx, {
47
- command: 'compact',
48
- status: 'failed_no_session',
49
- trigger,
50
- reason: 'No active session to compact. Start a REPL with `pugi`.',
51
- });
52
- }
53
- store = await openStoreForCwd(ctx.workspaceRoot, sessionId);
54
- if (!store) {
55
- return emit(ctx, {
56
- command: 'compact',
57
- status: 'failed_no_session',
58
- trigger,
59
- reason: 'Local session store unavailable (lock held by REPL?).',
60
- });
61
- }
62
- }
63
- else if (sessionId === null) {
64
- // Caller supplied a store but no session id — try to discover one.
65
- sessionId = await pickMostRecentSessionId(store, ctx.workspaceRoot);
66
- if (!sessionId) {
67
- return emit(ctx, {
68
- command: 'compact',
69
- status: 'failed_no_session',
70
- trigger,
71
- reason: 'No active session to compact.',
72
- });
73
- }
74
- }
75
- // Snapshot the events. We pass `coversUntilOffset` as the count of
76
- // events at the moment of the snapshot so the marker's anchor is
77
- // accurate even if other writers race afterwards.
78
- let events;
79
- try {
80
- events = await store.loadEvents(sessionId);
81
- }
82
- catch (error) {
83
- return emit(ctx, {
84
- command: 'compact',
85
- status: 'failed_store',
86
- sessionId,
87
- trigger,
88
- reason: `Could not load events: ${errMsg(error)}`,
89
- });
90
- }
91
- if (events.length < MIN_EVENTS_TO_COMPACT && ctx.force !== true) {
92
- return emit(ctx, {
93
- command: 'compact',
94
- status: 'noop_empty',
95
- sessionId,
96
- trigger,
97
- reason: `Only ${events.length} events on disk; need at least ${MIN_EVENTS_TO_COMPACT}. `
98
- + 'Pass --force to compact anyway.',
99
- });
100
- }
101
- // Locate the source slice: everything strictly after the latest
102
- // compact-boundary, EXCLUDING the kept-tail window. If no prior
103
- // boundary exists, walk from offset 0.
104
- const lastBoundaryIdx = findLastCompactBoundaryIndex(events);
105
- const sliceStart = lastBoundaryIdx === -1 ? 0 : lastBoundaryIdx + 1;
106
- const sliceEnd = Math.max(sliceStart, events.length - KEPT_TAIL_TURNS);
107
- const sourceSlice = events.slice(sliceStart, sliceEnd);
108
- if (sourceSlice.length === 0) {
109
- return emit(ctx, {
110
- command: 'compact',
111
- status: 'noop_recent_marker',
112
- sessionId,
113
- trigger,
114
- reason: 'Conversation already compact — nothing new to fold.',
115
- });
116
- }
117
- // Build the engine client. Production uses Anvil; tests inject a
118
- // fixture client to avoid the network round-trip.
119
- const engineClient = ctx.engineClient ?? buildAnvilClient();
120
- if (!engineClient) {
121
- return emit(ctx, {
122
- command: 'compact',
123
- status: 'failed_transport',
124
- sessionId,
125
- trigger,
126
- reason: 'Could not build engine client (run `pugi login`).',
127
- });
128
- }
129
- // Run the summariser.
130
- let summary;
131
- try {
132
- summary = await summarizeEvents({
133
- events: sourceSlice,
134
- client: engineClient,
135
- personaSlug: 'pugi',
136
- });
137
- }
138
- catch (error) {
139
- const code = error instanceof SummarizerError ? error.code : 'unknown';
140
- const message = error instanceof Error ? error.message : String(error);
141
- return emit(ctx, {
142
- command: 'compact',
143
- status: 'failed_transport',
144
- sessionId,
145
- trigger,
146
- reason: `Summarizer failed (${code}): ${message}`,
147
- });
148
- }
149
- // Append the boundary marker. Recompute `coversUntilOffset` AFTER
150
- // the summariser round-trip so any events that landed mid-flight
151
- // fall into the kept-tail window — the operator does not lose work
152
- // that arrived during compaction. The next event we append (the
153
- // marker itself) lands at index `coversUntilOffset` in the on-disk
154
- // log.
155
- let postRoundTripEvents;
156
- try {
157
- postRoundTripEvents = await store.loadEvents(sessionId);
158
- }
159
- catch (error) {
160
- return emit(ctx, {
161
- command: 'compact',
162
- status: 'failed_store',
163
- sessionId,
164
- trigger,
165
- reason: `Could not refresh events: ${errMsg(error)}`,
166
- });
167
- }
168
- const coversUntilOffset = postRoundTripEvents.length;
169
- try {
170
- await appendCompactBoundary({
171
- store,
172
- trigger,
173
- summary: summary.summary,
174
- summaryTokenCount: summary.tokensSummarised,
175
- summaryTurnsBefore: summary.eventsSummarised,
176
- keptTailTurns: KEPT_TAIL_TURNS,
177
- coversUntilOffset,
178
- ...(ctx.now !== undefined ? { now: ctx.now } : {}),
179
- });
180
- }
181
- catch (error) {
182
- return emit(ctx, {
183
- command: 'compact',
184
- status: 'failed_store',
185
- sessionId,
186
- trigger,
187
- reason: `Could not append marker: ${errMsg(error)}`,
188
- });
189
- }
190
- return emit(ctx, {
191
- command: 'compact',
192
- status: 'compacted',
193
- sessionId,
194
- trigger,
195
- turnsBefore: summary.eventsSummarised,
196
- tailKept: KEPT_TAIL_TURNS,
197
- tokensSummarised: summary.tokensSummarised,
198
- }, `Compacted ${summary.eventsSummarised} events (~${summary.tokensSummarised} tokens) into 1 summary. ` +
199
- `Last ${KEPT_TAIL_TURNS} turns kept verbatim.`);
200
- }
201
- /* ------------------------------------------------------------------ */
202
- /* Helpers */
203
- /* ------------------------------------------------------------------ */
204
- /**
205
- * Emit a payload through the context and return it for the caller. We
206
- * keep the function exhaustive so every branch lands on the same
207
- * writeOutput contract (JSON-mode + text-mode).
208
- */
209
- function emit(ctx, payload, text) {
210
- const human = text ?? payload.reason ?? `compact: ${payload.status}`;
211
- ctx.writeOutput(payload, human);
212
- return payload;
213
- }
214
- function findLastCompactBoundaryIndex(events) {
215
- for (let i = events.length - 1; i >= 0; i -= 1) {
216
- if (isCompactBoundary(events[i]))
217
- return i;
218
- }
219
- return -1;
220
- }
221
- function errMsg(error) {
222
- return error instanceof Error ? error.message : String(error);
223
- }
224
- /**
225
- * Open the SqliteSessionStore for the workspace's project slug and
226
- * bind the active log to `sessionId`. Returns null when the open
227
- * fails (lock contention, IO error, missing project dir).
228
- *
229
- * The PID lockfile contention is the expected failure mode here — a
230
- * running REPL holds the lock, and `pugi compact` from a second
231
- * terminal cannot grab it. The caller surfaces a clear message rather
232
- * than crashing the dispatch.
233
- */
234
- async function openStoreForCwd(workspaceRoot, sessionId) {
235
- try {
236
- const slug = projectSlugForCwd(workspaceRoot);
237
- const store = new SqliteSessionStore({ projectSlug: slug, home: homedir() });
238
- await store.open({
239
- id: sessionId,
240
- workspaceRoot,
241
- projectSlug: slug,
242
- });
243
- return store;
244
- }
245
- catch {
246
- return null;
247
- }
248
- }
249
- /**
250
- * Read-only-view variant of `pickMostRecentSessionId` for the
251
- * pre-open phase. Walks `~/.pugi/projects/<slug>/session.db` without
252
- * taking the lockfile so a live REPL in another terminal does not
253
- * make discovery fail.
254
- */
255
- async function pickMostRecentSessionIdReadOnly(workspaceRoot) {
256
- try {
257
- const slug = projectSlugForCwd(workspaceRoot);
258
- const dir = resolveProjectStoreDir(slug, homedir());
259
- const view = await SqliteSessionStore.openReadOnly(dir);
260
- try {
261
- const rows = await view.list({ project: slug, limit: 1, status: 'active' });
262
- return rows.length > 0 ? rows[0].id : null;
263
- }
264
- finally {
265
- await view.close();
266
- }
267
- }
268
- catch {
269
- return null;
270
- }
271
- }
272
- /**
273
- * Locate the most recent active session for the workspace. Returns
274
- * null when no session row exists.
275
- */
276
- async function pickMostRecentSessionId(store, workspaceRoot) {
277
- const slug = projectSlugForCwd(workspaceRoot);
278
- const rows = await store.listSessions({ project: slug, limit: 1, status: 'active' });
279
- if (rows.length === 0)
280
- return null;
281
- return rows[0].id;
282
- }
283
- function projectSlugForCwd(workspaceRoot) {
284
- const base = workspaceRoot.split('/').filter((s) => s.length > 0).pop() ?? 'workspace';
285
- return base.toLowerCase().replace(/[^a-z0-9-]/g, '-').slice(0, 64);
286
- }
287
- /**
288
- * Construct an Anvil-backed engine client from env-resolved runtime
289
- * config. Returns null when the operator is not authenticated.
290
- */
291
- function buildAnvilClient() {
292
- const config = loadRuntimeConfig();
293
- if (!config)
294
- return null;
295
- return new AnvilEngineLoopClient(config);
296
- }
297
- //# sourceMappingURL=compact.js.map