gsd-pi 2.33.1 → 2.34.0-dev.6769913

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 (1061) hide show
  1. package/dist/bundled-resource-path.d.ts +8 -0
  2. package/dist/bundled-resource-path.js +14 -0
  3. package/dist/cli.js +16 -0
  4. package/dist/headless-query.js +6 -6
  5. package/dist/resource-loader.d.ts +2 -0
  6. package/dist/resource-loader.js +39 -4
  7. package/dist/resources/extensions/ask-user-questions.js +217 -0
  8. package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
  9. package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
  10. package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
  11. package/dist/resources/extensions/async-jobs/index.js +119 -0
  12. package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
  13. package/dist/resources/extensions/aws-auth/index.js +138 -0
  14. package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
  15. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
  16. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
  17. package/dist/resources/extensions/bg-shell/index.js +41 -0
  18. package/dist/resources/extensions/bg-shell/interaction.js +160 -0
  19. package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
  20. package/dist/resources/extensions/bg-shell/overlay.js +378 -0
  21. package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
  22. package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
  23. package/dist/resources/extensions/bg-shell/types.js +96 -0
  24. package/dist/resources/extensions/bg-shell/utilities.js +50 -0
  25. package/dist/resources/extensions/browser-tools/capture.js +179 -0
  26. package/dist/resources/extensions/browser-tools/core.js +899 -0
  27. package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
  28. package/dist/resources/extensions/browser-tools/index.js +123 -0
  29. package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
  30. package/dist/resources/extensions/browser-tools/refs.js +254 -0
  31. package/dist/resources/extensions/browser-tools/settle.js +173 -0
  32. package/dist/resources/extensions/browser-tools/state.js +126 -0
  33. package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
  34. package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
  35. package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
  36. package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
  37. package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
  38. package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
  39. package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
  40. package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
  41. package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
  42. package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
  43. package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
  44. package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
  45. package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
  46. package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
  47. package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
  48. package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
  49. package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
  50. package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
  51. package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
  52. package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
  53. package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
  54. package/dist/resources/extensions/browser-tools/utils.js +490 -0
  55. package/dist/resources/extensions/context7/index.js +337 -0
  56. package/dist/resources/extensions/get-secrets-from-user.js +492 -0
  57. package/dist/resources/extensions/google-search/index.js +373 -0
  58. package/dist/resources/extensions/gsd/activity-log.js +146 -0
  59. package/dist/resources/extensions/gsd/atomic-write.js +38 -0
  60. package/dist/resources/extensions/gsd/auto/session.js +182 -0
  61. package/dist/resources/extensions/gsd/auto-budget.js +30 -0
  62. package/dist/resources/extensions/gsd/auto-dashboard.js +429 -0
  63. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +185 -0
  64. package/dist/resources/extensions/gsd/auto-dispatch.js +353 -0
  65. package/dist/resources/extensions/gsd/auto-loop.js +956 -0
  66. package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
  67. package/dist/resources/extensions/gsd/auto-observability.js +56 -0
  68. package/dist/resources/extensions/gsd/auto-post-unit.js +385 -0
  69. package/dist/resources/extensions/gsd/auto-prompts.js +1153 -0
  70. package/dist/resources/extensions/gsd/auto-recovery.js +512 -0
  71. package/dist/resources/extensions/gsd/auto-start.js +414 -0
  72. package/dist/resources/extensions/gsd/auto-supervisor.js +47 -0
  73. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
  74. package/dist/resources/extensions/gsd/auto-timers.js +180 -0
  75. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  76. package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
  77. package/dist/resources/extensions/gsd/auto-verification.js +171 -0
  78. package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
  79. package/dist/resources/extensions/gsd/auto-worktree.js +830 -0
  80. package/dist/resources/extensions/gsd/auto.js +765 -0
  81. package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
  82. package/dist/resources/extensions/gsd/captures.js +354 -0
  83. package/dist/resources/extensions/gsd/changelog.js +162 -0
  84. package/dist/resources/extensions/gsd/claude-import.js +540 -0
  85. package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
  86. package/dist/resources/extensions/gsd/commands-bootstrap.js +224 -0
  87. package/dist/resources/extensions/gsd/commands-config.js +89 -0
  88. package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
  89. package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
  90. package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
  91. package/dist/resources/extensions/gsd/commands-logs.js +468 -0
  92. package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
  93. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
  94. package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
  95. package/dist/resources/extensions/gsd/commands.js +1031 -0
  96. package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
  97. package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
  98. package/dist/resources/extensions/gsd/context-budget.js +187 -0
  99. package/dist/resources/extensions/gsd/context-store.js +165 -0
  100. package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
  101. package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
  102. package/dist/resources/extensions/gsd/db-writer.js +298 -0
  103. package/dist/resources/extensions/gsd/debug-logger.js +161 -0
  104. package/dist/resources/extensions/gsd/detection.js +373 -0
  105. package/dist/resources/extensions/gsd/diff-context.js +168 -0
  106. package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
  107. package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  108. package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
  109. package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
  110. package/dist/resources/extensions/gsd/doctor-format.js +71 -0
  111. package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
  112. package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
  113. package/dist/resources/extensions/gsd/doctor-types.js +12 -0
  114. package/dist/resources/extensions/gsd/doctor.js +672 -0
  115. package/dist/resources/extensions/gsd/error-utils.js +6 -0
  116. package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
  117. package/dist/resources/extensions/gsd/exit-command.js +11 -0
  118. package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
  119. package/dist/resources/extensions/gsd/export.js +268 -0
  120. package/dist/resources/extensions/gsd/file-watcher.js +76 -0
  121. package/dist/resources/extensions/gsd/files.js +937 -0
  122. package/dist/resources/extensions/gsd/forensics.js +511 -0
  123. package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
  124. package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
  125. package/dist/resources/extensions/gsd/git-service.js +460 -0
  126. package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
  127. package/dist/resources/extensions/gsd/gsd-db.js +735 -0
  128. package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
  129. package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
  130. package/dist/resources/extensions/gsd/health-widget.js +141 -0
  131. package/dist/resources/extensions/gsd/history.js +118 -0
  132. package/dist/resources/extensions/gsd/index.js +1114 -0
  133. package/dist/resources/extensions/gsd/init-wizard.js +479 -0
  134. package/dist/resources/extensions/gsd/json-persistence.js +62 -0
  135. package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
  136. package/dist/resources/extensions/gsd/key-manager.js +829 -0
  137. package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
  138. package/dist/resources/extensions/gsd/md-importer.js +440 -0
  139. package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
  140. package/dist/resources/extensions/gsd/memory-store.js +351 -0
  141. package/dist/resources/extensions/gsd/metrics.js +377 -0
  142. package/dist/resources/extensions/gsd/migrate/command.js +157 -0
  143. package/dist/resources/extensions/gsd/migrate/index.js +7 -0
  144. package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
  145. package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
  146. package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
  147. package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
  148. package/dist/resources/extensions/gsd/migrate/types.js +4 -0
  149. package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
  150. package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
  151. package/dist/resources/extensions/gsd/migrate-external.js +130 -0
  152. package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
  153. package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
  154. package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
  155. package/dist/resources/extensions/gsd/model-router.js +187 -0
  156. package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
  157. package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
  158. package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
  159. package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
  160. package/dist/resources/extensions/gsd/notifications.js +58 -0
  161. package/dist/resources/extensions/gsd/observability-validator.js +398 -0
  162. package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
  163. package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
  164. package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
  165. package/dist/resources/extensions/gsd/paths.js +414 -0
  166. package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
  167. package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
  168. package/dist/resources/extensions/gsd/preferences-models.js +294 -0
  169. package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
  170. package/dist/resources/extensions/gsd/preferences-types.js +73 -0
  171. package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
  172. package/dist/resources/extensions/gsd/preferences.js +325 -0
  173. package/dist/resources/extensions/gsd/progress-score.js +102 -0
  174. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
  175. package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
  176. package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
  177. package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
  178. package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
  179. package/dist/resources/extensions/gsd/queue-order.js +178 -0
  180. package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
  181. package/dist/resources/extensions/gsd/quick.js +206 -0
  182. package/dist/resources/extensions/gsd/repo-identity.js +187 -0
  183. package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
  184. package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
  185. package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
  186. package/dist/resources/extensions/gsd/routing-history.js +210 -0
  187. package/dist/resources/extensions/gsd/safe-fs.js +52 -0
  188. package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
  189. package/dist/resources/extensions/gsd/session-forensics.js +427 -0
  190. package/dist/resources/extensions/gsd/session-lock.js +397 -0
  191. package/dist/resources/extensions/gsd/session-status-io.js +134 -0
  192. package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
  193. package/dist/resources/extensions/gsd/skill-health.js +324 -0
  194. package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
  195. package/dist/resources/extensions/gsd/state.js +653 -0
  196. package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
  197. package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
  198. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  199. package/dist/resources/extensions/gsd/token-counter.js +54 -0
  200. package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
  201. package/dist/resources/extensions/gsd/triage-ui.js +125 -0
  202. package/dist/resources/extensions/gsd/types.js +4 -0
  203. package/dist/resources/extensions/gsd/undo.js +205 -0
  204. package/dist/resources/extensions/gsd/unit-id.js +7 -0
  205. package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
  206. package/dist/resources/extensions/gsd/validate-directory.js +143 -0
  207. package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
  208. package/dist/resources/extensions/gsd/verification-gate.js +514 -0
  209. package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
  210. package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
  211. package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
  212. package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
  213. package/dist/resources/extensions/gsd/workspace-index.js +139 -0
  214. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
  215. package/dist/resources/extensions/gsd/worktree-command.js +682 -0
  216. package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
  217. package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
  218. package/dist/resources/extensions/gsd/worktree.js +199 -0
  219. package/dist/resources/extensions/mac-tools/index.js +768 -0
  220. package/dist/resources/extensions/mcp-client/index.js +364 -0
  221. package/dist/resources/extensions/package.json +3 -0
  222. package/dist/resources/extensions/remote-questions/config.js +70 -0
  223. package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
  224. package/dist/resources/extensions/remote-questions/format.js +234 -0
  225. package/dist/resources/extensions/remote-questions/http-client.js +43 -0
  226. package/dist/resources/extensions/remote-questions/manager.js +156 -0
  227. package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
  228. package/dist/resources/extensions/remote-questions/notify.js +89 -0
  229. package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
  230. package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
  231. package/dist/resources/extensions/remote-questions/status.js +25 -0
  232. package/dist/resources/extensions/remote-questions/store.js +70 -0
  233. package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
  234. package/dist/resources/extensions/remote-questions/types.js +5 -0
  235. package/dist/resources/extensions/search-the-web/cache.js +74 -0
  236. package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
  237. package/dist/resources/extensions/search-the-web/format.js +161 -0
  238. package/dist/resources/extensions/search-the-web/http.js +178 -0
  239. package/dist/resources/extensions/search-the-web/index.js +41 -0
  240. package/dist/resources/extensions/search-the-web/native-search.js +166 -0
  241. package/dist/resources/extensions/search-the-web/provider.js +143 -0
  242. package/dist/resources/extensions/search-the-web/tavily.js +82 -0
  243. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
  244. package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
  245. package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
  246. package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
  247. package/dist/resources/extensions/shared/confirm-ui.js +96 -0
  248. package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
  249. package/dist/resources/extensions/shared/frontmatter.js +109 -0
  250. package/dist/resources/extensions/shared/interview-ui.js +569 -0
  251. package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
  252. package/dist/resources/extensions/shared/next-action-ui.js +168 -0
  253. package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
  254. package/dist/resources/extensions/shared/sanitize.js +17 -0
  255. package/dist/resources/extensions/shared/terminal.js +21 -0
  256. package/dist/resources/extensions/shared/ui.js +245 -0
  257. package/dist/resources/extensions/shared/wizard-ui.js +478 -0
  258. package/dist/resources/extensions/slash-commands/audit.js +72 -0
  259. package/dist/resources/extensions/slash-commands/clear.js +8 -0
  260. package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
  261. package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
  262. package/dist/resources/extensions/slash-commands/index.js +10 -0
  263. package/dist/resources/extensions/subagent/agents.js +103 -0
  264. package/dist/resources/extensions/subagent/index.js +905 -0
  265. package/dist/resources/extensions/subagent/isolation.js +384 -0
  266. package/dist/resources/extensions/subagent/worker-registry.js +73 -0
  267. package/dist/resources/extensions/ttsr/index.js +144 -0
  268. package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
  269. package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
  270. package/dist/resources/extensions/universal-config/discovery.js +94 -0
  271. package/dist/resources/extensions/universal-config/format.js +178 -0
  272. package/dist/resources/extensions/universal-config/index.js +99 -0
  273. package/dist/resources/extensions/universal-config/scanners.js +574 -0
  274. package/dist/resources/extensions/universal-config/tools.js +57 -0
  275. package/dist/resources/extensions/universal-config/types.js +8 -0
  276. package/dist/resources/extensions/voice/index.js +247 -0
  277. package/dist/startup-timings.d.ts +2 -0
  278. package/dist/startup-timings.js +22 -0
  279. package/dist/tool-bootstrap.js +59 -11
  280. package/dist/worktree-cli.js +7 -7
  281. package/package.json +1 -1
  282. package/packages/native/dist/native.d.ts +0 -2
  283. package/packages/native/dist/native.js +0 -2
  284. package/packages/native/src/native.ts +0 -3
  285. package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
  286. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  287. package/packages/pi-agent-core/dist/agent-loop.js +24 -27
  288. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  289. package/packages/pi-agent-core/dist/agent.d.ts +1 -0
  290. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  291. package/packages/pi-agent-core/dist/agent.js +11 -22
  292. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  293. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  294. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  295. package/packages/pi-agent-core/dist/proxy.js +1 -1
  296. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  297. package/packages/pi-agent-core/src/agent-loop.ts +30 -27
  298. package/packages/pi-agent-core/src/agent.ts +12 -23
  299. package/packages/pi-agent-core/src/proxy.ts +1 -1
  300. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  301. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  302. package/packages/pi-ai/dist/api-registry.js +0 -10
  303. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  304. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  305. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  306. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  307. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  308. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  309. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  310. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  311. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  312. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  313. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  314. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  315. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  316. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  317. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  318. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  319. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  320. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  321. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  322. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  323. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  324. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  325. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  326. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  327. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  328. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  329. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  330. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  331. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  332. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  333. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  334. package/packages/pi-ai/dist/utils/validation.js +0 -14
  335. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  336. package/packages/pi-ai/src/api-registry.ts +0 -12
  337. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  338. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  339. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  340. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  341. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  342. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  343. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  344. package/packages/pi-ai/src/utils/validation.ts +0 -15
  345. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  346. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  347. package/packages/pi-coding-agent/dist/config.js +4 -8
  348. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  349. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +4 -0
  350. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/core/agent-session.js +24 -5
  352. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  354. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  355. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  356. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  358. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  359. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  360. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  361. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  362. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  363. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  364. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  365. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
  366. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  367. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  368. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  369. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  370. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  371. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  372. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  373. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  374. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  375. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  376. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
  378. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  379. package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
  380. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  382. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  383. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  384. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  385. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  386. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +1 -1
  388. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  390. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  391. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  392. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  394. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  395. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  396. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  397. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  398. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  399. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  400. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  402. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  404. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  406. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  407. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  408. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  409. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
  410. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  411. package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
  412. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  413. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
  414. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  415. package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
  416. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  417. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  418. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  419. package/packages/pi-coding-agent/dist/index.js +1 -1
  420. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  422. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  423. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  424. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  425. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  426. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  427. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  428. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  429. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  430. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  431. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  432. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  433. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  434. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  435. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  436. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  437. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  438. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  440. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  441. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  442. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  443. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  444. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  445. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  446. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  447. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  448. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  449. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  450. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  451. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  452. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  453. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  454. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  455. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  456. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  457. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  458. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  459. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  460. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  461. package/packages/pi-coding-agent/package.json +1 -1
  462. package/packages/pi-coding-agent/src/config.ts +5 -10
  463. package/packages/pi-coding-agent/src/core/agent-session.ts +26 -5
  464. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  465. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  466. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  467. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
  468. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  469. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  470. package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
  471. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  472. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
  473. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  474. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  475. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  476. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  477. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  478. package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
  479. package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
  480. package/packages/pi-coding-agent/src/index.ts +1 -0
  481. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  482. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  483. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  484. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  485. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  486. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  487. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  488. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  489. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  490. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  491. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  492. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  493. package/packages/pi-tui/dist/components/editor.js +1 -1
  494. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  495. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  496. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  497. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  498. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  499. package/packages/pi-tui/dist/tui.d.ts +0 -22
  500. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  501. package/packages/pi-tui/dist/tui.js +6 -272
  502. package/packages/pi-tui/dist/tui.js.map +1 -1
  503. package/packages/pi-tui/dist/utils.d.ts +0 -7
  504. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  505. package/packages/pi-tui/dist/utils.js +0 -44
  506. package/packages/pi-tui/dist/utils.js.map +1 -1
  507. package/packages/pi-tui/src/components/editor.ts +1 -1
  508. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  509. package/packages/pi-tui/src/tui.ts +11 -312
  510. package/packages/pi-tui/src/utils.ts +0 -43
  511. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  512. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  513. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  514. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  515. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  516. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  517. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  518. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  519. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  520. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  521. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  522. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  523. package/pkg/package.json +1 -1
  524. package/src/resources/extensions/bg-shell/index.ts +41 -46
  525. package/src/resources/extensions/browser-tools/index.ts +156 -67
  526. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  527. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  528. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  529. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  530. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  531. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  532. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  533. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  534. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  535. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  536. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  537. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  538. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  539. package/src/resources/extensions/gsd/auto-verification.ts +76 -72
  540. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  541. package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
  542. package/src/resources/extensions/gsd/auto.ts +516 -1189
  543. package/src/resources/extensions/gsd/captures.ts +10 -4
  544. package/src/resources/extensions/gsd/changelog.ts +213 -0
  545. package/src/resources/extensions/gsd/commands-bootstrap.ts +253 -0
  546. package/src/resources/extensions/gsd/commands.ts +48 -32
  547. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  548. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  549. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  550. package/src/resources/extensions/gsd/git-service.ts +32 -12
  551. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  552. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  553. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  554. package/src/resources/extensions/gsd/index.ts +76 -163
  555. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  556. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  557. package/src/resources/extensions/gsd/quick.ts +121 -76
  558. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  559. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  560. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  561. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  562. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  563. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  564. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  565. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  566. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  567. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  568. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  569. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  570. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  571. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  572. package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
  573. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  574. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  575. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  576. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  577. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  578. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  579. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  580. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  581. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  582. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  583. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  584. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  585. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  586. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
  587. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  588. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  589. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  590. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  591. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  592. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  593. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  594. package/src/resources/extensions/gsd/types.ts +90 -77
  595. package/src/resources/extensions/gsd/undo.ts +42 -46
  596. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  597. package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
  598. package/src/resources/extensions/gsd/verification-gate.ts +4 -16
  599. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  600. package/src/resources/extensions/gsd/worktree-command.ts +29 -11
  601. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  602. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  603. package/src/resources/extensions/gsd/worktree.ts +7 -44
  604. package/src/resources/extensions/mcp-client/index.ts +2 -1
  605. package/src/resources/extensions/package.json +3 -0
  606. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  607. package/src/resources/extensions/search-the-web/index.ts +35 -52
  608. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  609. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  610. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  611. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  612. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  613. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  614. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  615. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  616. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  617. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  618. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  619. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  620. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  621. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  622. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  623. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  624. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  625. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  626. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  627. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  628. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  629. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  630. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  631. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  632. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  633. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  634. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  635. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  636. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  637. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  638. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  639. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  640. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  641. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  642. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  643. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  644. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  645. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  646. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  647. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  648. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  649. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  650. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  651. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  652. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  653. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  654. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  655. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  656. package/dist/resources/extensions/context7/index.ts +0 -428
  657. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  658. package/dist/resources/extensions/google-search/index.ts +0 -466
  659. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  660. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  661. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  662. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  663. package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
  664. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  665. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  666. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  667. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  668. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  669. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  670. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  671. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  672. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  673. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  674. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  675. package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
  676. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  677. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  678. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  679. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  680. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  681. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  682. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  683. package/dist/resources/extensions/gsd/captures.ts +0 -427
  684. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  685. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  686. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  687. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  688. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  689. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  690. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  691. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  692. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  693. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  694. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  695. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  696. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  697. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  698. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  699. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  700. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  701. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  702. package/dist/resources/extensions/gsd/detection.ts +0 -470
  703. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  704. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  705. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  706. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  707. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  708. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  709. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  710. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  711. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  712. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  713. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  714. package/dist/resources/extensions/gsd/export.ts +0 -317
  715. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  716. package/dist/resources/extensions/gsd/files.ts +0 -1058
  717. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  718. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  719. package/dist/resources/extensions/gsd/git-service.ts +0 -580
  720. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  721. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  722. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  723. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  724. package/dist/resources/extensions/gsd/history.ts +0 -143
  725. package/dist/resources/extensions/gsd/index.ts +0 -1390
  726. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  727. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  728. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  729. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  730. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  731. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  732. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  733. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  734. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  735. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  736. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  737. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  738. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  739. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  740. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  741. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  742. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  743. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  744. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  745. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  746. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  747. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  748. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  749. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  750. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  751. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  752. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  753. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  754. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  755. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  756. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  757. package/dist/resources/extensions/gsd/paths.ts +0 -449
  758. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  759. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  760. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  761. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  762. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  763. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  764. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  765. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  766. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  767. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  768. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  769. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  770. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  771. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  772. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  773. package/dist/resources/extensions/gsd/quick.ts +0 -212
  774. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  775. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  776. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  777. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  778. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  779. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  780. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  781. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  782. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  783. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  784. package/dist/resources/extensions/gsd/state.ts +0 -727
  785. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  786. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  787. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  788. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  789. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  790. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  791. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  792. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  793. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  794. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  795. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  796. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  797. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  798. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  799. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  800. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  801. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  802. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  803. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  804. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  805. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  806. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  807. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  808. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  809. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  810. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  811. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  812. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  813. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  814. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  815. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  816. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  817. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  818. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  819. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  820. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  821. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  822. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  823. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  824. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  825. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  826. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  827. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  828. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  829. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  830. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  831. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  832. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  833. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  834. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  835. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  836. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  837. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  838. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  839. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  840. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  841. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  842. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  843. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  844. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
  845. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  846. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  847. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  848. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  849. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  850. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  851. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  852. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  853. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  854. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  855. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  856. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  857. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  858. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  859. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  860. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  861. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  862. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  863. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  864. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  865. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  866. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  867. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  868. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  869. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  870. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  871. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  872. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  873. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  874. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  875. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  876. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  877. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  878. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  879. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  880. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  881. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  882. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  883. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  884. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  885. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  886. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  887. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  888. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  889. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  890. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  891. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  892. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  893. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  894. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  895. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  896. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  897. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  898. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  899. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  900. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  901. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  902. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  903. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  904. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  905. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  906. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  907. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  908. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  909. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  910. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  911. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  912. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  913. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  914. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  915. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  916. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  917. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  918. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  919. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  920. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  921. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  922. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  923. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  924. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  925. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  926. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  927. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  928. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  929. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  930. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  931. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  932. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  933. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  934. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  935. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  936. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  937. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  938. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  939. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  940. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  941. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  942. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  943. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  944. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  945. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  946. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  947. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  948. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  949. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  950. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  951. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  952. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  953. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  954. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  955. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  956. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  957. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  958. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  959. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  960. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  961. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  962. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  963. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  964. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  965. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  966. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  967. package/dist/resources/extensions/gsd/types.ts +0 -425
  968. package/dist/resources/extensions/gsd/undo.ts +0 -223
  969. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  970. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  971. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  972. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  973. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  974. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  975. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  976. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  977. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  978. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  979. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  980. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  981. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  982. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  983. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  984. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  985. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  986. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  987. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  988. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  989. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  990. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  991. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  992. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  993. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  994. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  995. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  996. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  997. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  998. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  999. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  1000. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  1001. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  1002. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  1003. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  1004. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  1005. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  1006. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  1007. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  1008. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  1009. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  1010. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  1011. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  1012. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  1013. package/dist/resources/extensions/shared/terminal.ts +0 -23
  1014. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  1015. package/dist/resources/extensions/shared/ui.ts +0 -400
  1016. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  1017. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  1018. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  1019. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  1020. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  1021. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  1022. package/dist/resources/extensions/subagent/agents.ts +0 -126
  1023. package/dist/resources/extensions/subagent/index.ts +0 -1121
  1024. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  1025. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  1026. package/dist/resources/extensions/ttsr/index.ts +0 -168
  1027. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  1028. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  1029. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  1030. package/dist/resources/extensions/universal-config/format.ts +0 -191
  1031. package/dist/resources/extensions/universal-config/index.ts +0 -120
  1032. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  1033. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  1034. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  1035. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  1036. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  1037. package/dist/resources/extensions/universal-config/types.ts +0 -135
  1038. package/dist/resources/extensions/voice/index.ts +0 -272
  1039. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  1040. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
  1041. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  1042. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  1043. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  1044. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  1045. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  1046. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  1047. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  1048. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  1049. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
  1050. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  1051. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  1052. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  1053. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  1054. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  1055. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  1056. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  1057. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  1058. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  1059. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  1060. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  1061. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -1,1196 +0,0 @@
1
- /**
2
- * Runtime-neutral helper logic for browser-tools.
3
- *
4
- * Kept free of pi-specific imports so it can be exercised with node:test.
5
- */
6
-
7
- // ---------------------------------------------------------------------------
8
- // Interfaces & Types
9
- // ---------------------------------------------------------------------------
10
-
11
- export interface ActionTimeline {
12
- limit: number;
13
- nextId: number;
14
- entries: ActionEntry[];
15
- }
16
-
17
- export interface ActionEntry {
18
- id: number;
19
- tool: string;
20
- paramsSummary: string;
21
- startedAt: number;
22
- finishedAt: number | null;
23
- status: string;
24
- beforeUrl: string;
25
- afterUrl: string;
26
- verificationSummary?: string;
27
- warningSummary?: string;
28
- diffSummary?: string;
29
- changed?: boolean;
30
- error?: string;
31
- }
32
-
33
- export interface ActionPartial {
34
- tool: string;
35
- paramsSummary?: string;
36
- startedAt?: number;
37
- beforeUrl?: string;
38
- afterUrl?: string;
39
- verificationSummary?: string;
40
- warningSummary?: string;
41
- diffSummary?: string;
42
- changed?: boolean;
43
- error?: string;
44
- }
45
-
46
- export interface ActionUpdates {
47
- finishedAt?: number;
48
- status?: string;
49
- afterUrl?: string;
50
- verificationSummary?: string;
51
- warningSummary?: string;
52
- diffSummary?: string;
53
- changed?: boolean;
54
- error?: string;
55
- }
56
-
57
- export interface DiffResult {
58
- changed: boolean;
59
- changes: Array<{ type: string; before: unknown; after: unknown }>;
60
- summary: string;
61
- }
62
-
63
- export interface Threshold {
64
- op: string;
65
- n: number;
66
- }
67
-
68
- export interface PageRegistry {
69
- pages: PageEntry[];
70
- activePageId: number | null;
71
- nextId: number;
72
- }
73
-
74
- export interface PageEntry {
75
- id: number;
76
- page: any;
77
- title: string;
78
- url: string;
79
- opener: number | null;
80
- }
81
-
82
- export interface PageListEntry {
83
- id: number;
84
- title: string;
85
- url: string;
86
- opener: number | null;
87
- isActive: boolean;
88
- }
89
-
90
- export interface SnapshotModeConfig {
91
- tags: string[];
92
- roles: string[];
93
- selectors: string[];
94
- ariaAttributes: string[];
95
- useInteractiveFilter: boolean;
96
- visibleOnly?: boolean;
97
- containerExpand?: boolean;
98
- }
99
-
100
- export interface AssertionCheckResult {
101
- name: string;
102
- passed: boolean;
103
- actual: unknown;
104
- expected: unknown;
105
- selector?: string;
106
- text?: string;
107
- }
108
-
109
- export interface AssertionEvaluation {
110
- verified: boolean;
111
- checks: AssertionCheckResult[];
112
- summary: string;
113
- agentHint: string;
114
- }
115
-
116
- export interface WaitValidationError {
117
- error: string;
118
- }
119
-
120
- export interface BatchStepResult {
121
- ok: boolean;
122
- stopReason: string | null;
123
- failedStepIndex: number | null;
124
- stepResults: unknown[];
125
- summary: string;
126
- }
127
-
128
- export interface FormattedTimeline {
129
- entries: Array<{
130
- id: number | null;
131
- tool: string;
132
- status: string;
133
- durationMs: number | null;
134
- beforeUrl: string;
135
- afterUrl: string;
136
- line: string;
137
- }>;
138
- retained: number;
139
- totalRecorded: number;
140
- bounded: boolean;
141
- summary: string;
142
- }
143
-
144
- export interface FailureHypothesis {
145
- hasFailures: boolean;
146
- categories: string[];
147
- summary: string;
148
- signals: Array<{ category: string; source: string; detail: string }>;
149
- }
150
-
151
- export interface SessionSummary {
152
- counts: {
153
- pages: number;
154
- actions: { total: number; retained: number; success: number; error: number; running: number };
155
- waits: { total: number; success: number; error: number; running: number };
156
- assertions: { total: number; passed: number; failed: number; running: number };
157
- consoleErrors: number;
158
- failedRequests: number;
159
- dialogs: number;
160
- };
161
- activePage: { id: number | null; title: string; url: string } | null;
162
- caveats: string[];
163
- failureHypothesis: FailureHypothesis;
164
- summary: string;
165
- }
166
-
167
- // ---------------------------------------------------------------------------
168
- // Action Timeline
169
- // ---------------------------------------------------------------------------
170
-
171
- export function createActionTimeline(limit = 60): ActionTimeline {
172
- return {
173
- limit,
174
- nextId: 1,
175
- entries: [],
176
- };
177
- }
178
-
179
- export function beginAction(timeline: ActionTimeline, partial: ActionPartial): ActionEntry {
180
- const entry: ActionEntry = {
181
- id: timeline.nextId++,
182
- tool: partial.tool,
183
- paramsSummary: partial.paramsSummary ?? "",
184
- startedAt: partial.startedAt ?? Date.now(),
185
- finishedAt: null,
186
- status: "running",
187
- beforeUrl: partial.beforeUrl ?? "",
188
- afterUrl: partial.afterUrl ?? "",
189
- verificationSummary: partial.verificationSummary,
190
- warningSummary: partial.warningSummary,
191
- diffSummary: partial.diffSummary,
192
- changed: partial.changed,
193
- error: partial.error,
194
- };
195
- timeline.entries.push(entry);
196
- if (timeline.entries.length > timeline.limit) {
197
- timeline.entries.splice(0, timeline.entries.length - timeline.limit);
198
- }
199
- return entry;
200
- }
201
-
202
- export function finishAction(timeline: ActionTimeline, actionId: number, updates: ActionUpdates = {}): ActionEntry | null {
203
- const entry = timeline.entries.find((item) => item.id === actionId);
204
- if (!entry) return null;
205
- Object.assign(entry, updates, {
206
- finishedAt: updates.finishedAt ?? Date.now(),
207
- status: updates.status ?? entry.status ?? "success",
208
- afterUrl: updates.afterUrl ?? entry.afterUrl ?? "",
209
- verificationSummary: updates.verificationSummary ?? entry.verificationSummary,
210
- warningSummary: updates.warningSummary ?? entry.warningSummary,
211
- diffSummary: updates.diffSummary ?? entry.diffSummary,
212
- changed: updates.changed ?? entry.changed,
213
- error: updates.error ?? entry.error,
214
- });
215
- return entry;
216
- }
217
-
218
- export function findAction(timeline: ActionTimeline, actionId: number): ActionEntry | null {
219
- return timeline.entries.find((item) => item.id === actionId) ?? null;
220
- }
221
-
222
- export function toActionParamsSummary(params: unknown): string {
223
- if (!params || typeof params !== "object") return "";
224
- const entries: string[] = [];
225
- for (const [key, value] of Object.entries(params as Record<string, unknown>)) {
226
- if (value === undefined || value === null) continue;
227
- if (typeof value === "string") {
228
- entries.push(`${key}=${JSON.stringify(value.length > 60 ? `${value.slice(0, 57)}...` : value)}`);
229
- continue;
230
- }
231
- if (Array.isArray(value)) {
232
- entries.push(`${key}=[${value.length}]`);
233
- continue;
234
- }
235
- if (typeof value === "object") {
236
- entries.push(`${key}={...}`);
237
- continue;
238
- }
239
- entries.push(`${key}=${String(value)}`);
240
- }
241
- return entries.slice(0, 6).join(", ");
242
- }
243
-
244
- // ---------------------------------------------------------------------------
245
- // Compact State Diffing
246
- // ---------------------------------------------------------------------------
247
-
248
- interface CompactStateForDiff {
249
- url?: string;
250
- title?: string;
251
- focus?: string;
252
- dialog?: { count?: number; title?: string };
253
- counts?: Record<string, number>;
254
- headings?: string[];
255
- bodyText?: string;
256
- }
257
-
258
- export function diffCompactStates(before: CompactStateForDiff | null | undefined, after: CompactStateForDiff | null | undefined): DiffResult {
259
- const changes: Array<{ type: string; before: unknown; after: unknown }> = [];
260
- if (!before || !after) {
261
- return {
262
- changed: false,
263
- changes: [],
264
- summary: "Diff unavailable",
265
- };
266
- }
267
-
268
- if (before.url !== after.url) {
269
- changes.push({ type: "url", before: before.url, after: after.url });
270
- }
271
- if (before.title !== after.title) {
272
- changes.push({ type: "title", before: before.title, after: after.title });
273
- }
274
- if (before.focus !== after.focus) {
275
- changes.push({ type: "focus", before: before.focus, after: after.focus });
276
- }
277
- if ((before.dialog?.count ?? 0) !== (after.dialog?.count ?? 0)) {
278
- changes.push({
279
- type: "dialog_count",
280
- before: before.dialog?.count ?? 0,
281
- after: after.dialog?.count ?? 0,
282
- });
283
- }
284
- if ((before.dialog?.title ?? "") !== (after.dialog?.title ?? "")) {
285
- changes.push({
286
- type: "dialog_title",
287
- before: before.dialog?.title ?? "",
288
- after: after.dialog?.title ?? "",
289
- });
290
- }
291
-
292
- for (const key of ["landmarks", "buttons", "links", "inputs"]) {
293
- const beforeValue = before.counts?.[key] ?? 0;
294
- const afterValue = after.counts?.[key] ?? 0;
295
- if (beforeValue !== afterValue) {
296
- changes.push({ type: `count:${key}`, before: beforeValue, after: afterValue });
297
- }
298
- }
299
-
300
- const beforeHeadings = JSON.stringify(before.headings ?? []);
301
- const afterHeadings = JSON.stringify(after.headings ?? []);
302
- if (beforeHeadings !== afterHeadings) {
303
- changes.push({
304
- type: "headings",
305
- before: before.headings ?? [],
306
- after: after.headings ?? [],
307
- });
308
- }
309
-
310
- const beforeBody = before.bodyText ?? "";
311
- const afterBody = after.bodyText ?? "";
312
- if (beforeBody !== afterBody) {
313
- changes.push({
314
- type: "body_text",
315
- before: beforeBody.slice(0, 120),
316
- after: afterBody.slice(0, 120),
317
- });
318
- }
319
-
320
- const changed = changes.length > 0;
321
- const summary = changed
322
- ? changes
323
- .slice(0, 4)
324
- .map((change) => {
325
- if (change.type === "url") return `URL changed to ${change.after}`;
326
- if (change.type === "title") return `title changed to ${change.after}`;
327
- if (change.type === "focus") return `focus changed`;
328
- if (change.type === "dialog_count") return `dialog count ${change.before}→${change.after}`;
329
- if (change.type.startsWith("count:")) return `${change.type.slice(6)} ${change.before}→${change.after}`;
330
- if (change.type === "headings") return "headings changed";
331
- if (change.type === "body_text") return "visible text changed";
332
- return `${change.type} changed`;
333
- })
334
- .join("; ")
335
- : "No meaningful browser-state change detected";
336
-
337
- return { changed, changes, summary };
338
- }
339
-
340
- // ---------------------------------------------------------------------------
341
- // String helpers
342
- // ---------------------------------------------------------------------------
343
-
344
- function normalizeString(value: unknown): string {
345
- return String(value ?? "").trim();
346
- }
347
-
348
- export function includesNeedle(haystack: string, needle: string): boolean {
349
- return normalizeString(haystack).toLowerCase().includes(normalizeString(needle).toLowerCase());
350
- }
351
-
352
- // ---------------------------------------------------------------------------
353
- // Threshold parsing for count-based assertions
354
- // ---------------------------------------------------------------------------
355
-
356
- /**
357
- * Parse a threshold expression like ">=3", "==0", "<5", or bare "3" (defaults to ">=").
358
- */
359
- export function parseThreshold(value: string | null | undefined): Threshold | null {
360
- if (value == null) return null;
361
- const str = String(value).trim();
362
- if (str === "") return null;
363
- const match = str.match(/^(>=|<=|==|>|<)?\s*(\d+)$/);
364
- if (!match) return null;
365
- const op = match[1] || ">=";
366
- const n = parseInt(match[2], 10);
367
- return { op, n };
368
- }
369
-
370
- /**
371
- * Evaluate whether a count meets a parsed threshold.
372
- */
373
- export function meetsThreshold(count: number, threshold: Threshold): boolean {
374
- switch (threshold.op) {
375
- case ">=": return count >= threshold.n;
376
- case "<=": return count <= threshold.n;
377
- case "==": return count === threshold.n;
378
- case ">": return count > threshold.n;
379
- case "<": return count < threshold.n;
380
- default: return false;
381
- }
382
- }
383
-
384
- /**
385
- * Filter entries that occurred at or after a given action's start time.
386
- * If sinceActionId is missing or the action isn't found, returns all entries.
387
- */
388
- export function getEntriesSince(
389
- entries: Array<{ timestamp?: number }>,
390
- sinceActionId: number | undefined,
391
- timeline: ActionTimeline,
392
- ): Array<{ timestamp?: number }> {
393
- if (!entries || !Array.isArray(entries)) return [];
394
- if (sinceActionId == null || !timeline) return entries;
395
- const action = findAction(timeline, sinceActionId);
396
- if (!action) return entries;
397
- const since = action.startedAt;
398
- return entries.filter((e) => (e.timestamp ?? 0) >= since);
399
- }
400
-
401
- // ---------------------------------------------------------------------------
402
- // Assertion Evaluation
403
- // ---------------------------------------------------------------------------
404
-
405
- interface AssertionCheckInput {
406
- kind: string;
407
- selector?: string;
408
- value?: string;
409
- text?: string;
410
- checked?: boolean;
411
- sinceActionId?: number;
412
- }
413
-
414
- interface AssertionState {
415
- url?: string;
416
- title?: string;
417
- bodyText?: string;
418
- focus?: string;
419
- selectorStates?: Record<string, { visible?: boolean; value?: string; checked?: boolean | null }>;
420
- consoleEntries?: Array<{ type?: string; text?: string; message?: string; timestamp?: number }>;
421
- networkEntries?: Array<{ type?: string; url?: string; status?: number; failed?: boolean; timestamp?: number }>;
422
- allConsoleEntries?: Array<{ type?: string; text?: string; message?: string; timestamp?: number }>;
423
- allNetworkEntries?: Array<{ type?: string; url?: string; status?: number; failed?: boolean; timestamp?: number }>;
424
- actionTimeline?: ActionTimeline | null;
425
- }
426
-
427
- export function evaluateAssertionChecks({ checks, state }: { checks: AssertionCheckInput[]; state: AssertionState }): AssertionEvaluation {
428
- const results: AssertionCheckResult[] = [];
429
- const selectorStates = state.selectorStates ?? {};
430
- const consoleEntries = state.consoleEntries ?? [];
431
- const networkEntries = state.networkEntries ?? [];
432
- const allConsoleEntries = state.allConsoleEntries ?? state.consoleEntries ?? [];
433
- const allNetworkEntries = state.allNetworkEntries ?? state.networkEntries ?? [];
434
- const actionTimeline = state.actionTimeline ?? null;
435
-
436
- for (const check of checks) {
437
- const selectorState = check.selector ? selectorStates[check.selector] ?? null : null;
438
- let passed = false;
439
- let actual: unknown;
440
- let expected: unknown;
441
-
442
- switch (check.kind) {
443
- case "url_contains":
444
- actual = state.url ?? "";
445
- expected = check.value ?? "";
446
- passed = includesNeedle(actual as string, expected as string);
447
- break;
448
- case "title_contains":
449
- actual = state.title ?? "";
450
- expected = check.value ?? "";
451
- passed = includesNeedle(actual as string, expected as string);
452
- break;
453
- case "text_visible":
454
- actual = state.bodyText ?? "";
455
- expected = check.text ?? "";
456
- passed = includesNeedle(actual as string, expected as string);
457
- break;
458
- case "text_not_visible":
459
- actual = state.bodyText ?? "";
460
- expected = check.text ?? "";
461
- passed = !includesNeedle(actual as string, expected as string);
462
- break;
463
- case "selector_visible":
464
- actual = selectorState?.visible ?? false;
465
- expected = true;
466
- passed = actual === true;
467
- break;
468
- case "selector_hidden":
469
- actual = selectorState?.visible ?? false;
470
- expected = false;
471
- passed = actual === false;
472
- break;
473
- case "value_equals":
474
- actual = selectorState?.value ?? "";
475
- expected = check.value ?? "";
476
- passed = actual === expected;
477
- break;
478
- case "value_contains":
479
- actual = selectorState?.value ?? "";
480
- expected = check.value ?? "";
481
- passed = includesNeedle(actual as string, expected as string);
482
- break;
483
- case "focused_matches":
484
- actual = state.focus ?? "";
485
- expected = check.value ?? "";
486
- passed = includesNeedle(actual as string, expected as string);
487
- break;
488
- case "checked_equals":
489
- actual = selectorState?.checked ?? null;
490
- expected = !!check.checked;
491
- passed = actual === expected;
492
- break;
493
- case "no_console_errors":
494
- actual = consoleEntries.filter((entry) => entry.type === "error" || entry.type === "pageerror").length;
495
- expected = 0;
496
- passed = actual === 0;
497
- break;
498
- case "no_failed_requests":
499
- actual = networkEntries.filter((entry) => entry.failed || (typeof entry.status === "number" && entry.status >= 400)).length;
500
- expected = 0;
501
- passed = actual === 0;
502
- break;
503
-
504
- // --- S02: New structured network/console assertion kinds ---
505
-
506
- case "request_url_seen": {
507
- const filtered = getEntriesSince(allNetworkEntries, check.sinceActionId, actionTimeline!);
508
- const matches = (filtered as typeof allNetworkEntries).filter((e) => includesNeedle(e.url ?? "", check.text ?? ""));
509
- actual = matches.length > 0;
510
- expected = true;
511
- passed = actual === true;
512
- break;
513
- }
514
-
515
- case "response_status": {
516
- const filtered = getEntriesSince(allNetworkEntries, check.sinceActionId, actionTimeline!);
517
- const statusNum = parseInt(check.value!, 10);
518
- const matches = (filtered as typeof allNetworkEntries).filter(
519
- (e) => includesNeedle(e.url ?? "", check.text ?? "") && typeof e.status === "number" && e.status === statusNum
520
- );
521
- actual = matches.length > 0 ? `found (status=${matches[0].status})` : `not found`;
522
- expected = `status=${check.value ?? ""}`;
523
- passed = matches.length > 0;
524
- break;
525
- }
526
-
527
- case "console_message_matches": {
528
- const filtered = getEntriesSince(allConsoleEntries, check.sinceActionId, actionTimeline!);
529
- const matches = (filtered as typeof allConsoleEntries).filter((e) => includesNeedle(e.text ?? "", check.text ?? ""));
530
- actual = matches.length > 0;
531
- expected = true;
532
- passed = actual === true;
533
- break;
534
- }
535
-
536
- case "network_count": {
537
- const filtered = getEntriesSince(allNetworkEntries, check.sinceActionId, actionTimeline!);
538
- const matches = (filtered as typeof allNetworkEntries).filter((e) => includesNeedle(e.url ?? "", check.text ?? ""));
539
- const threshold = parseThreshold(check.value);
540
- if (!threshold) {
541
- actual = `invalid threshold: ${check.value}`;
542
- expected = check.value ?? "";
543
- passed = false;
544
- } else {
545
- actual = `count=${matches.length}`;
546
- expected = `${threshold.op}${threshold.n}`;
547
- passed = meetsThreshold(matches.length, threshold);
548
- }
549
- break;
550
- }
551
-
552
- case "console_count": {
553
- const filtered = getEntriesSince(allConsoleEntries, check.sinceActionId, actionTimeline!);
554
- const matches = (filtered as typeof allConsoleEntries).filter((e) => includesNeedle(e.text ?? "", check.text ?? ""));
555
- const threshold = parseThreshold(check.value);
556
- if (!threshold) {
557
- actual = `invalid threshold: ${check.value}`;
558
- expected = check.value ?? "";
559
- passed = false;
560
- } else {
561
- actual = `count=${matches.length}`;
562
- expected = `${threshold.op}${threshold.n}`;
563
- passed = meetsThreshold(matches.length, threshold);
564
- }
565
- break;
566
- }
567
-
568
- case "no_console_errors_since": {
569
- const filtered = getEntriesSince(allConsoleEntries, check.sinceActionId, actionTimeline!);
570
- const errors = (filtered as typeof allConsoleEntries).filter((e) => e.type === "error" || e.type === "pageerror");
571
- actual = errors.length;
572
- expected = 0;
573
- passed = errors.length === 0;
574
- break;
575
- }
576
-
577
- case "no_failed_requests_since": {
578
- const filtered = getEntriesSince(allNetworkEntries, check.sinceActionId, actionTimeline!);
579
- const failures = (filtered as typeof allNetworkEntries).filter((e) => e.failed || (typeof e.status === "number" && e.status >= 400));
580
- actual = failures.length;
581
- expected = 0;
582
- passed = failures.length === 0;
583
- break;
584
- }
585
-
586
- default:
587
- actual = "unsupported";
588
- expected = check.kind;
589
- passed = false;
590
- break;
591
- }
592
-
593
- results.push({
594
- name: check.kind,
595
- passed,
596
- actual,
597
- expected,
598
- selector: check.selector,
599
- text: check.text,
600
- });
601
- }
602
-
603
- const failed = results.filter((result) => !result.passed);
604
- const verified = failed.length === 0;
605
- return {
606
- verified,
607
- checks: results,
608
- summary: verified
609
- ? `PASS (${results.length}/${results.length} checks)`
610
- : `FAIL (${failed.length}/${results.length} checks failed)`,
611
- agentHint: verified
612
- ? "All assertion checks passed"
613
- : failed[0]
614
- ? `Investigate ${failed[0].name} (expected ${JSON.stringify(failed[0].expected)}, got ${JSON.stringify(failed[0].actual)})`
615
- : "Assertion failed",
616
- };
617
- }
618
-
619
- // ---------------------------------------------------------------------------
620
- // Wait-condition validation
621
- // ---------------------------------------------------------------------------
622
-
623
- interface WaitConditionSpec {
624
- needsValue: boolean;
625
- valueLabel: string;
626
- needsThreshold?: boolean;
627
- }
628
-
629
- /**
630
- * All recognized wait conditions with their parameter requirements.
631
- */
632
- const WAIT_CONDITIONS: Record<string, WaitConditionSpec> = {
633
- // Existing 5 conditions
634
- selector_visible: { needsValue: true, valueLabel: "CSS selector" },
635
- selector_hidden: { needsValue: true, valueLabel: "CSS selector" },
636
- url_contains: { needsValue: true, valueLabel: "URL substring" },
637
- network_idle: { needsValue: false, valueLabel: "" },
638
- delay: { needsValue: true, valueLabel: "milliseconds as a string (e.g. '1000')" },
639
-
640
- // New 6 conditions (S03)
641
- text_visible: { needsValue: true, valueLabel: "text to search for" },
642
- text_hidden: { needsValue: true, valueLabel: "text to search for" },
643
- request_completed: { needsValue: true, valueLabel: "URL substring to match" },
644
- console_message: { needsValue: true, valueLabel: "message substring to match" },
645
- element_count: { needsValue: true, valueLabel: "CSS selector", needsThreshold: true },
646
- region_stable: { needsValue: true, valueLabel: "CSS selector" },
647
- };
648
-
649
- /**
650
- * Validate parameters for a browser_wait_for condition.
651
- */
652
- export function validateWaitParams(params: { condition: string; value?: string; threshold?: string }): WaitValidationError | null {
653
- const { condition, value, threshold } = params ?? {};
654
-
655
- if (!condition) {
656
- return { error: "condition is required" };
657
- }
658
-
659
- const spec = WAIT_CONDITIONS[condition];
660
- if (!spec) {
661
- const known = Object.keys(WAIT_CONDITIONS).join(", ");
662
- return { error: `unknown condition "${condition}". Known conditions: ${known}` };
663
- }
664
-
665
- if (spec.needsValue && (!value || String(value).trim() === "")) {
666
- return { error: `${condition} requires a value (${spec.valueLabel})` };
667
- }
668
-
669
- if (spec.needsThreshold && threshold != null && String(threshold).trim() !== "") {
670
- const parsed = parseThreshold(threshold);
671
- if (!parsed) {
672
- return { error: `${condition} threshold is malformed: "${threshold}". Expected format: >=N, <=N, ==N, >N, <N, or bare N` };
673
- }
674
- }
675
-
676
- return null;
677
- }
678
-
679
- // ---------------------------------------------------------------------------
680
- // Region-stable script generator
681
- // ---------------------------------------------------------------------------
682
-
683
- /**
684
- * Generate a JS expression string for page.waitForFunction() that detects
685
- * DOM stability by comparing snapshot hashes across polling intervals.
686
- */
687
- export function createRegionStableScript(selector: string): string {
688
- // Create a stable key from the selector (simple hash to avoid special chars)
689
- const safeKey = Array.from(selector).reduce((h, c) => ((h << 5) - h + c.charCodeAt(0)) | 0, 0) >>> 0;
690
- const windowKey = `__pw_region_stable_${safeKey}`;
691
-
692
- return `(() => {
693
- const el = document.querySelector(${JSON.stringify(selector)});
694
- if (!el) return false;
695
- const snapshot = el.innerHTML.length + '|' + el.childElementCount + '|' + el.innerText.length;
696
- const prev = window[${JSON.stringify(windowKey)}];
697
- window[${JSON.stringify(windowKey)}] = snapshot;
698
- if (prev === undefined) return false;
699
- return snapshot === prev;
700
- })()`;
701
- }
702
-
703
- // ---------------------------------------------------------------------------
704
- // Page Registry — pure-logic operations for multi-page/tab management
705
- // ---------------------------------------------------------------------------
706
-
707
- export function createPageRegistry(): PageRegistry {
708
- return { pages: [], activePageId: null, nextId: 1 };
709
- }
710
-
711
- export function registryAddPage(
712
- registry: PageRegistry,
713
- { page, title = "", url = "", opener = null }: { page: unknown; title?: string; url?: string; opener?: number | null },
714
- ): PageEntry {
715
- const entry: PageEntry = { id: registry.nextId++, page, title, url, opener };
716
- registry.pages.push(entry);
717
- return entry;
718
- }
719
-
720
- export function registryRemovePage(registry: PageRegistry, pageId: number): { removed: PageEntry; newActiveId: number | null } {
721
- const idx = registry.pages.findIndex((p) => p.id === pageId);
722
- if (idx === -1) {
723
- const available = registry.pages.map((p) => p.id);
724
- throw new Error(
725
- `registryRemovePage: page ${pageId} not found. ` +
726
- `Available page IDs: [${available.join(", ")}]. ` +
727
- `Registry size: ${registry.pages.length}.`
728
- );
729
- }
730
- const [removed] = registry.pages.splice(idx, 1);
731
-
732
- // Orphan any pages whose opener was the removed page
733
- for (const entry of registry.pages) {
734
- if (entry.opener === pageId) {
735
- entry.opener = null;
736
- }
737
- }
738
-
739
- let newActiveId = registry.activePageId;
740
- if (registry.activePageId === pageId) {
741
- if (registry.pages.length === 0) {
742
- newActiveId = null;
743
- } else if (removed.opener !== null && registry.pages.some((p) => p.id === removed.opener)) {
744
- newActiveId = removed.opener;
745
- } else {
746
- newActiveId = registry.pages[registry.pages.length - 1].id;
747
- }
748
- registry.activePageId = newActiveId;
749
- }
750
-
751
- return { removed, newActiveId };
752
- }
753
-
754
- export function registrySetActive(registry: PageRegistry, pageId: number): void {
755
- const entry = registry.pages.find((p) => p.id === pageId);
756
- if (!entry) {
757
- const available = registry.pages.map((p) => p.id);
758
- throw new Error(
759
- `registrySetActive: page ${pageId} not found. ` +
760
- `Available page IDs: [${available.join(", ")}]. ` +
761
- `Registry size: ${registry.pages.length}.`
762
- );
763
- }
764
- registry.activePageId = pageId;
765
- }
766
-
767
- export function registryGetActive(registry: PageRegistry): PageEntry {
768
- if (registry.activePageId === null) {
769
- throw new Error(
770
- `registryGetActive: no active page. ` +
771
- `Registry contains ${registry.pages.length} page(s). ` +
772
- `Page IDs: [${registry.pages.map((p) => p.id).join(", ")}].`
773
- );
774
- }
775
- const entry = registry.pages.find((p) => p.id === registry.activePageId);
776
- if (!entry) {
777
- throw new Error(
778
- `registryGetActive: activePageId ${registry.activePageId} not found in registry. ` +
779
- `Available page IDs: [${registry.pages.map((p) => p.id).join(", ")}]. ` +
780
- `Registry size: ${registry.pages.length}. This indicates stale state.`
781
- );
782
- }
783
- return entry;
784
- }
785
-
786
- export function registryGetPage(registry: PageRegistry, pageId: number): PageEntry | null {
787
- return registry.pages.find((p) => p.id === pageId) ?? null;
788
- }
789
-
790
- export function registryListPages(registry: PageRegistry): PageListEntry[] {
791
- return registry.pages.map((entry) => ({
792
- id: entry.id,
793
- title: entry.title,
794
- url: entry.url,
795
- opener: entry.opener,
796
- isActive: entry.id === registry.activePageId,
797
- }));
798
- }
799
-
800
- // ---------------------------------------------------------------------------
801
- // FIFO Bounded Log Pusher
802
- // ---------------------------------------------------------------------------
803
-
804
- export function createBoundedLogPusher(maxSize: number): (array: unknown[], entry: unknown) => void {
805
- return function push(array: unknown[], entry: unknown): void {
806
- array.push(entry);
807
- if (array.length > maxSize) {
808
- array.splice(0, array.length - maxSize);
809
- }
810
- };
811
- }
812
-
813
- export async function runBatchSteps({ steps, executeStep, stopOnFailure = true }: {
814
- steps: unknown[];
815
- executeStep: (step: unknown, index: number) => Promise<{ ok: boolean; [key: string]: unknown }>;
816
- stopOnFailure?: boolean;
817
- }): Promise<BatchStepResult> {
818
- const results: unknown[] = [];
819
- for (let i = 0; i < steps.length; i += 1) {
820
- const step = steps[i] as { action: string };
821
- const result = await executeStep(step, i);
822
- results.push(result);
823
- if (result.ok === false && stopOnFailure) {
824
- return {
825
- ok: false,
826
- stopReason: "step_failed",
827
- failedStepIndex: i,
828
- stepResults: results,
829
- summary: `Stopped at step ${i + 1} (${step.action})`,
830
- };
831
- }
832
- }
833
- return {
834
- ok: true,
835
- stopReason: null,
836
- failedStepIndex: null,
837
- stepResults: results,
838
- summary: `Completed ${results.length} step(s)`,
839
- };
840
- }
841
-
842
- // ---------------------------------------------------------------------------
843
- // Snapshot Modes — semantic element filtering for browser_snapshot_refs
844
- // ---------------------------------------------------------------------------
845
-
846
- export const SNAPSHOT_MODES: Record<string, SnapshotModeConfig> = {
847
- interactive: {
848
- tags: [],
849
- roles: [],
850
- selectors: [],
851
- ariaAttributes: [],
852
- useInteractiveFilter: true,
853
- },
854
- form: {
855
- tags: ["input", "select", "textarea", "button", "fieldset", "label", "output", "datalist"],
856
- roles: ["textbox", "searchbox", "combobox", "checkbox", "radio", "switch", "slider", "spinbutton", "listbox", "option"],
857
- selectors: ["[contenteditable]"],
858
- ariaAttributes: [],
859
- useInteractiveFilter: false,
860
- },
861
- dialog: {
862
- tags: ["dialog"],
863
- roles: ["dialog", "alertdialog"],
864
- selectors: ['[role="dialog"]', '[role="alertdialog"]'],
865
- ariaAttributes: [],
866
- useInteractiveFilter: false,
867
- containerExpand: true,
868
- },
869
- navigation: {
870
- tags: ["a", "nav"],
871
- roles: ["link", "navigation", "menubar", "menu", "menuitem"],
872
- selectors: [],
873
- ariaAttributes: [],
874
- useInteractiveFilter: false,
875
- },
876
- errors: {
877
- tags: [],
878
- roles: ["alert", "status"],
879
- selectors: ['[aria-invalid="true"]', '[role="alert"]', '[role="status"]'],
880
- ariaAttributes: ["aria-invalid", "aria-errormessage"],
881
- useInteractiveFilter: false,
882
- containerExpand: true,
883
- },
884
- headings: {
885
- tags: ["h1", "h2", "h3", "h4", "h5", "h6"],
886
- roles: ["heading"],
887
- selectors: [],
888
- ariaAttributes: [],
889
- useInteractiveFilter: false,
890
- },
891
- visible_only: {
892
- tags: [],
893
- roles: [],
894
- selectors: [],
895
- ariaAttributes: [],
896
- useInteractiveFilter: false,
897
- visibleOnly: true,
898
- },
899
- };
900
-
901
- export function getSnapshotModeConfig(mode: string): SnapshotModeConfig | null {
902
- return SNAPSHOT_MODES[mode] ?? null;
903
- }
904
-
905
- // ---------------------------------------------------------------------------
906
- // Fingerprint functions — structural identity for ref resolution
907
- // ---------------------------------------------------------------------------
908
-
909
- export function computeContentHash(text: string): string {
910
- if (!text) return "0";
911
- let h = 5381;
912
- for (let i = 0; i < text.length; i++) {
913
- h = ((h << 5) - h + text.charCodeAt(i)) | 0;
914
- }
915
- return (h >>> 0).toString(16);
916
- }
917
-
918
- export function computeStructuralSignature(tag: string, role: string, childTags: string[]): string {
919
- const input = `${tag}|${role}|${childTags.join(",")}`;
920
- let h = 5381;
921
- for (let i = 0; i < input.length; i++) {
922
- h = ((h << 5) - h + input.charCodeAt(i)) | 0;
923
- }
924
- return (h >>> 0).toString(16);
925
- }
926
-
927
- export function matchFingerprint(
928
- stored: { contentHash?: string; structuralSignature?: string },
929
- candidate: { contentHash?: string; structuralSignature?: string },
930
- ): boolean {
931
- if (!stored || !candidate) return false;
932
- if (!stored.contentHash || !stored.structuralSignature) return false;
933
- if (!candidate.contentHash || !candidate.structuralSignature) return false;
934
- return stored.contentHash === candidate.contentHash &&
935
- stored.structuralSignature === candidate.structuralSignature;
936
- }
937
-
938
- // ---------------------------------------------------------------------------
939
- // Timeline Formatting
940
- // ---------------------------------------------------------------------------
941
-
942
- function formatDurationMs(entry: { startedAt?: number; finishedAt?: number | null }): number | null {
943
- const startedAt = typeof entry?.startedAt === "number" ? entry.startedAt : null;
944
- const finishedAt = typeof entry?.finishedAt === "number" ? entry.finishedAt : null;
945
- if (startedAt == null || finishedAt == null || finishedAt < startedAt) return null;
946
- return finishedAt - startedAt;
947
- }
948
-
949
- function summarizeActionStatus(status: string | undefined): string {
950
- if (status === "error") return "error";
951
- if (status === "running") return "running";
952
- return "success";
953
- }
954
-
955
- function looksBoundedWarning(value: unknown): boolean {
956
- return /bounded .*history/i.test(String(value ?? ""));
957
- }
958
-
959
- function uniqueStrings(values: (string | undefined)[]): string[] {
960
- return [...new Set(values.filter(Boolean))] as string[];
961
- }
962
-
963
- export function formatTimelineEntries(entries: ActionEntry[] = [], options: Record<string, unknown> = {}): FormattedTimeline {
964
- const retained = (options.retained as number) ?? entries.length;
965
- const totalRecorded = (options.totalRecorded as number) ?? retained;
966
- const bounded = totalRecorded > retained;
967
-
968
- if (!entries.length) {
969
- return {
970
- entries: [],
971
- retained,
972
- totalRecorded,
973
- bounded,
974
- summary: "No browser actions recorded.",
975
- };
976
- }
977
-
978
- const formattedEntries = entries.map((entry) => {
979
- const status = summarizeActionStatus(entry.status);
980
- const durationMs = formatDurationMs(entry);
981
- const parts: string[] = [
982
- `#${entry.id ?? "?"}`,
983
- entry.tool ?? "unknown_tool",
984
- status,
985
- ];
986
-
987
- if (durationMs != null) parts.push(`${durationMs}ms`);
988
- if (entry.paramsSummary) parts.push(entry.paramsSummary);
989
- if (entry.error) parts.push(entry.error);
990
- if (entry.verificationSummary) parts.push(entry.verificationSummary);
991
- if (entry.diffSummary) parts.push(entry.diffSummary);
992
- if (entry.warningSummary) parts.push(entry.warningSummary);
993
-
994
- return {
995
- id: entry.id ?? null,
996
- tool: entry.tool ?? "",
997
- status,
998
- durationMs,
999
- beforeUrl: entry.beforeUrl ?? "",
1000
- afterUrl: entry.afterUrl ?? "",
1001
- line: parts.join(" | "),
1002
- };
1003
- });
1004
-
1005
- const summary = bounded
1006
- ? `Timeline: showing ${retained} of ${totalRecorded} recorded browser actions; older actions were discarded due to bounded history.`
1007
- : `Timeline: ${retained} browser action${retained === 1 ? "" : "s"} recorded.`;
1008
-
1009
- return {
1010
- entries: formattedEntries,
1011
- retained,
1012
- totalRecorded,
1013
- bounded,
1014
- summary,
1015
- };
1016
- }
1017
-
1018
- // ---------------------------------------------------------------------------
1019
- // Failure Hypothesis
1020
- // ---------------------------------------------------------------------------
1021
-
1022
- export function buildFailureHypothesis(session: Record<string, any> = {}): FailureHypothesis {
1023
- const timelineEntries = session.actionTimeline?.entries ?? [];
1024
- const consoleEntries = session.consoleEntries ?? [];
1025
- const networkEntries = session.networkEntries ?? [];
1026
- const dialogEntries = session.dialogEntries ?? [];
1027
- const signals: Array<{ category: string; source: string; detail: string }> = [];
1028
-
1029
- for (const entry of timelineEntries) {
1030
- if (entry?.status !== "error") continue;
1031
- if (entry.tool === "browser_wait_for") {
1032
- signals.push({
1033
- category: "wait",
1034
- source: `action#${entry.id ?? "?"}`,
1035
- detail: entry.error || entry.warningSummary || "Wait condition failed",
1036
- });
1037
- continue;
1038
- }
1039
- if (entry.tool === "browser_assert") {
1040
- signals.push({
1041
- category: "assert",
1042
- source: `action#${entry.id ?? "?"}`,
1043
- detail: entry.error || entry.verificationSummary || "Assertion failed",
1044
- });
1045
- continue;
1046
- }
1047
- signals.push({
1048
- category: "action",
1049
- source: `action#${entry.id ?? "?"}`,
1050
- detail: entry.error || `${entry.tool ?? "browser action"} failed`,
1051
- });
1052
- }
1053
-
1054
- for (const entry of consoleEntries) {
1055
- if (entry?.type !== "error" && entry?.type !== "pageerror") continue;
1056
- signals.push({
1057
- category: "console",
1058
- source: entry.type!,
1059
- detail: entry.text || "Console error recorded",
1060
- });
1061
- }
1062
-
1063
- for (const entry of networkEntries) {
1064
- const failed = entry?.failed || (typeof entry?.status === "number" && entry.status >= 400);
1065
- if (!failed) continue;
1066
- signals.push({
1067
- category: "network",
1068
- source: entry.url || "network request",
1069
- detail: `${entry.url || "request"} failed${typeof entry?.status === "number" ? ` with ${entry.status}` : ""}`,
1070
- });
1071
- }
1072
-
1073
- for (const entry of dialogEntries) {
1074
- signals.push({
1075
- category: "dialog",
1076
- source: entry?.type || "dialog",
1077
- detail: entry?.message || "Dialog appeared during failure investigation",
1078
- });
1079
- }
1080
-
1081
- const categories = uniqueStrings(signals.map((signal) => signal.category));
1082
- const hasFailures = categories.length > 0;
1083
- const summary = hasFailures
1084
- ? `Recent failure signals detected across ${categories.join(", ")}.`
1085
- : "No recent failure signals detected.";
1086
-
1087
- return {
1088
- hasFailures,
1089
- categories,
1090
- summary,
1091
- signals,
1092
- };
1093
- }
1094
-
1095
- // ---------------------------------------------------------------------------
1096
- // Session Summary
1097
- // ---------------------------------------------------------------------------
1098
-
1099
- export function summarizeBrowserSession(session: Record<string, any> = {}): SessionSummary {
1100
- const actionTimeline = session.actionTimeline ?? { limit: 0, entries: [] as ActionEntry[] };
1101
- const actionEntries: ActionEntry[] = actionTimeline.entries ?? [];
1102
- const retainedActionCount: number = session.retainedActionCount ?? actionEntries.length;
1103
- const totalActionCount: number = session.totalActionCount ?? retainedActionCount;
1104
- const pages: Array<Record<string, any>> = session.pages ?? [];
1105
- const consoleEntries: Array<Record<string, any>> = session.consoleEntries ?? [];
1106
- const networkEntries: Array<Record<string, any>> = session.networkEntries ?? [];
1107
- const dialogEntries: Array<Record<string, any>> = session.dialogEntries ?? [];
1108
-
1109
- const actionStatusCounts = actionEntries.reduce(
1110
- (acc: Record<string, number>, entry: ActionEntry) => {
1111
- const status = summarizeActionStatus(entry.status);
1112
- acc[status] = (acc[status] ?? 0) + 1;
1113
- return acc;
1114
- },
1115
- { success: 0, error: 0, running: 0 },
1116
- );
1117
-
1118
- const waitEntries = actionEntries.filter((entry: ActionEntry) => entry.tool === "browser_wait_for");
1119
- const assertEntries = actionEntries.filter((entry: ActionEntry) => entry.tool === "browser_assert");
1120
- const consoleErrors = consoleEntries.filter((entry: Record<string, any>) => entry.type === "error" || entry.type === "pageerror");
1121
- const failedRequests = networkEntries.filter((entry: Record<string, any>) => entry.failed || (typeof entry.status === "number" && entry.status >= 400));
1122
- const activePage = pages.find((page: Record<string, any>) => page.isActive) ?? pages[0] ?? null;
1123
-
1124
- const caveats: string[] = [];
1125
- if (totalActionCount > retainedActionCount) {
1126
- caveats.push(`Showing ${retainedActionCount} of ${totalActionCount} recorded actions; older actions were discarded due to bounded history.`);
1127
- }
1128
- if (
1129
- actionEntries.some((entry) => looksBoundedWarning(entry.warningSummary) || looksBoundedWarning(entry.error)) ||
1130
- consoleEntries.some((entry) => looksBoundedWarning(entry.text) || looksBoundedWarning(entry.message)) ||
1131
- consoleEntries.length > 0
1132
- ) {
1133
- caveats.push("bounded console history may hide older console events.");
1134
- }
1135
- if (failedRequests.length > 0 || networkEntries.length > 0) {
1136
- caveats.push("bounded network history may hide older requests.");
1137
- }
1138
-
1139
- const failureHypothesis = buildFailureHypothesis(session);
1140
-
1141
- if (!actionEntries.length && pages.length === 0 && consoleEntries.length === 0 && networkEntries.length === 0 && dialogEntries.length === 0) {
1142
- return {
1143
- counts: {
1144
- pages: 0,
1145
- actions: { total: 0, retained: 0, success: 0, error: 0, running: 0 },
1146
- waits: { total: 0, success: 0, error: 0, running: 0 },
1147
- assertions: { total: 0, passed: 0, failed: 0, running: 0 },
1148
- consoleErrors: 0,
1149
- failedRequests: 0,
1150
- dialogs: 0,
1151
- },
1152
- activePage: null,
1153
- caveats: [],
1154
- failureHypothesis,
1155
- summary: "No browser session activity recorded.",
1156
- };
1157
- }
1158
-
1159
- return {
1160
- counts: {
1161
- pages: pages.length,
1162
- actions: {
1163
- total: totalActionCount,
1164
- retained: retainedActionCount,
1165
- success: actionStatusCounts.success,
1166
- error: actionStatusCounts.error,
1167
- running: actionStatusCounts.running,
1168
- },
1169
- waits: {
1170
- total: waitEntries.length,
1171
- success: waitEntries.filter((entry) => summarizeActionStatus(entry.status) === "success").length,
1172
- error: waitEntries.filter((entry) => summarizeActionStatus(entry.status) === "error").length,
1173
- running: waitEntries.filter((entry) => summarizeActionStatus(entry.status) === "running").length,
1174
- },
1175
- assertions: {
1176
- total: assertEntries.length,
1177
- passed: assertEntries.filter((entry) => summarizeActionStatus(entry.status) === "success").length,
1178
- failed: assertEntries.filter((entry) => summarizeActionStatus(entry.status) === "error").length,
1179
- running: assertEntries.filter((entry) => summarizeActionStatus(entry.status) === "running").length,
1180
- },
1181
- consoleErrors: consoleErrors.length,
1182
- failedRequests: failedRequests.length,
1183
- dialogs: dialogEntries.length,
1184
- },
1185
- activePage: activePage
1186
- ? {
1187
- id: activePage.id ?? null,
1188
- title: activePage.title ?? "",
1189
- url: activePage.url ?? "",
1190
- }
1191
- : null,
1192
- caveats,
1193
- failureHypothesis,
1194
- summary: `Session: ${pages.length} page${pages.length === 1 ? "" : "s"}, ${totalActionCount} actions, ${waitEntries.length} wait${waitEntries.length === 1 ? "" : "s"}, ${assertEntries.length} assert${assertEntries.length === 1 ? "" : "s"}.${caveats.length ? ` ${caveats.join(" ")}` : ""}`,
1195
- };
1196
- }