gsd-pi 2.27.0 → 2.28.0-dev.1ba624e

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 (1260) hide show
  1. package/README.md +39 -12
  2. package/dist/cli.js +20 -21
  3. package/dist/extension-discovery.d.ts +16 -0
  4. package/dist/extension-discovery.js +66 -0
  5. package/dist/headless-answers.d.ts +51 -0
  6. package/dist/headless-answers.js +224 -0
  7. package/dist/headless-context.d.ts +18 -0
  8. package/dist/headless-context.js +44 -0
  9. package/dist/headless-events.d.ts +28 -0
  10. package/dist/headless-events.js +59 -0
  11. package/dist/headless-query.d.ts +40 -0
  12. package/dist/headless-query.js +77 -0
  13. package/dist/headless-ui.d.ts +23 -0
  14. package/dist/headless-ui.js +103 -0
  15. package/dist/headless.d.ts +2 -0
  16. package/dist/headless.js +67 -186
  17. package/dist/help-text.js +6 -0
  18. package/dist/loader.js +18 -59
  19. package/dist/onboarding.js +8 -7
  20. package/dist/remote-questions-config.js +8 -3
  21. package/dist/resource-loader.d.ts +1 -6
  22. package/dist/resource-loader.js +125 -96
  23. package/dist/resources/extensions/ask-user-questions.ts +3 -2
  24. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +219 -0
  25. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +400 -0
  26. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +985 -0
  27. package/dist/resources/extensions/bg-shell/index.ts +17 -1561
  28. package/dist/resources/extensions/bg-shell/overlay.ts +4 -0
  29. package/dist/resources/extensions/bg-shell/utilities.ts +4 -16
  30. package/dist/resources/extensions/browser-tools/capture.ts +34 -2
  31. package/dist/resources/extensions/browser-tools/lifecycle.ts +5 -5
  32. package/dist/resources/extensions/browser-tools/settle.ts +1 -1
  33. package/dist/resources/extensions/browser-tools/state.ts +5 -5
  34. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +1 -1
  35. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +3 -3
  36. package/dist/resources/extensions/browser-tools/tools/assertions.ts +1 -1
  37. package/dist/resources/extensions/browser-tools/tools/device.ts +1 -1
  38. package/dist/resources/extensions/browser-tools/tools/extract.ts +1 -1
  39. package/dist/resources/extensions/browser-tools/tools/navigation.ts +6 -6
  40. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +1 -1
  41. package/dist/resources/extensions/browser-tools/tools/pages.ts +1 -1
  42. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +28 -10
  43. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +1 -1
  44. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +1 -1
  45. package/dist/resources/extensions/browser-tools/utils.ts +5 -5
  46. package/dist/resources/extensions/get-secrets-from-user.ts +1 -1
  47. package/dist/resources/extensions/google-search/index.ts +21 -8
  48. package/dist/resources/extensions/gsd/activity-log.ts +2 -1
  49. package/dist/resources/extensions/gsd/atomic-write.ts +35 -0
  50. package/dist/resources/extensions/gsd/auto/session.ts +12 -0
  51. package/dist/resources/extensions/gsd/auto-dashboard.ts +84 -3
  52. package/dist/resources/extensions/gsd/auto-idempotency.ts +150 -0
  53. package/dist/resources/extensions/gsd/auto-post-unit.ts +591 -0
  54. package/dist/resources/extensions/gsd/auto-prompts.ts +116 -22
  55. package/dist/resources/extensions/gsd/auto-recovery.ts +21 -10
  56. package/dist/resources/extensions/gsd/auto-start.ts +500 -0
  57. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +220 -0
  58. package/dist/resources/extensions/gsd/auto-timers.ts +223 -0
  59. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +3 -1
  60. package/dist/resources/extensions/gsd/auto-verification.ts +229 -0
  61. package/dist/resources/extensions/gsd/auto-worktree-sync.ts +22 -31
  62. package/dist/resources/extensions/gsd/auto-worktree.ts +83 -67
  63. package/dist/resources/extensions/gsd/auto.ts +381 -1873
  64. package/dist/resources/extensions/gsd/commands-config.ts +102 -0
  65. package/dist/resources/extensions/gsd/commands-handlers.ts +375 -0
  66. package/dist/resources/extensions/gsd/commands-inspect.ts +90 -0
  67. package/dist/resources/extensions/gsd/commands-logs.ts +537 -0
  68. package/dist/resources/extensions/gsd/commands-maintenance.ts +206 -0
  69. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +760 -0
  70. package/dist/resources/extensions/gsd/commands.ts +373 -1432
  71. package/dist/resources/extensions/gsd/constants.ts +21 -0
  72. package/dist/resources/extensions/gsd/context-budget.ts +25 -2
  73. package/dist/resources/extensions/gsd/crash-recovery.ts +4 -2
  74. package/dist/resources/extensions/gsd/dashboard-overlay.ts +13 -4
  75. package/dist/resources/extensions/gsd/db-writer.ts +21 -2
  76. package/dist/resources/extensions/gsd/detection.ts +469 -0
  77. package/dist/resources/extensions/gsd/diff-context.ts +2 -1
  78. package/dist/resources/extensions/gsd/dispatch-guard.ts +4 -0
  79. package/dist/resources/extensions/gsd/docs/preferences-reference.md +83 -0
  80. package/dist/resources/extensions/gsd/doctor-checks.ts +564 -0
  81. package/dist/resources/extensions/gsd/doctor-format.ts +78 -0
  82. package/dist/resources/extensions/gsd/doctor-types.ts +72 -0
  83. package/dist/resources/extensions/gsd/doctor.ts +64 -701
  84. package/dist/resources/extensions/gsd/errors.ts +0 -2
  85. package/dist/resources/extensions/gsd/export-html.ts +367 -11
  86. package/dist/resources/extensions/gsd/export.ts +119 -30
  87. package/dist/resources/extensions/gsd/files.ts +8 -126
  88. package/dist/resources/extensions/gsd/forensics.ts +2 -12
  89. package/dist/resources/extensions/gsd/git-constants.ts +11 -0
  90. package/dist/resources/extensions/gsd/git-service.ts +13 -9
  91. package/dist/resources/extensions/gsd/gsd-db.ts +26 -6
  92. package/dist/resources/extensions/gsd/guided-flow-queue.ts +451 -0
  93. package/dist/resources/extensions/gsd/guided-flow.ts +231 -514
  94. package/dist/resources/extensions/gsd/history.ts +2 -20
  95. package/dist/resources/extensions/gsd/index.ts +208 -46
  96. package/dist/resources/extensions/gsd/init-wizard.ts +615 -0
  97. package/dist/resources/extensions/gsd/json-persistence.ts +52 -0
  98. package/dist/resources/extensions/gsd/jsonl-utils.ts +21 -0
  99. package/dist/resources/extensions/gsd/key-manager.ts +995 -0
  100. package/dist/resources/extensions/gsd/metrics.ts +49 -36
  101. package/dist/resources/extensions/gsd/migrate/command.ts +1 -1
  102. package/dist/resources/extensions/gsd/migrate/parsers.ts +10 -95
  103. package/dist/resources/extensions/gsd/milestone-actions.ts +126 -0
  104. package/dist/resources/extensions/gsd/milestone-ids.ts +95 -0
  105. package/dist/resources/extensions/gsd/native-git-bridge.ts +5 -10
  106. package/dist/resources/extensions/gsd/parallel-eligibility.ts +3 -3
  107. package/dist/resources/extensions/gsd/paths.ts +1 -11
  108. package/dist/resources/extensions/gsd/plugin-importer.ts +3 -2
  109. package/dist/resources/extensions/gsd/preferences-models.ts +323 -0
  110. package/dist/resources/extensions/gsd/preferences-skills.ts +169 -0
  111. package/dist/resources/extensions/gsd/preferences-types.ts +223 -0
  112. package/dist/resources/extensions/gsd/preferences-validation.ts +597 -0
  113. package/dist/resources/extensions/gsd/preferences.ts +219 -1305
  114. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  115. package/dist/resources/extensions/gsd/prompt-compressor.ts +508 -0
  116. package/dist/resources/extensions/gsd/prompt-loader.ts +4 -2
  117. package/dist/resources/extensions/gsd/prompt-ordering.ts +200 -0
  118. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -2
  119. package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  120. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +2 -4
  121. package/dist/resources/extensions/gsd/prompts/discuss.md +13 -5
  122. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -2
  123. package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  124. package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -1
  125. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -2
  126. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -2
  127. package/dist/resources/extensions/gsd/prompts/queue.md +30 -0
  128. package/dist/resources/extensions/gsd/prompts/quick-task.md +0 -6
  129. package/dist/resources/extensions/gsd/prompts/replan-slice.md +0 -1
  130. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +0 -1
  131. package/dist/resources/extensions/gsd/prompts/system.md +5 -2
  132. package/dist/resources/extensions/gsd/provider-error-pause.ts +59 -10
  133. package/dist/resources/extensions/gsd/queue-order.ts +1 -1
  134. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +15 -2
  135. package/dist/resources/extensions/gsd/quick.ts +18 -15
  136. package/dist/resources/extensions/gsd/reports.ts +1 -7
  137. package/dist/resources/extensions/gsd/routing-history.ts +13 -17
  138. package/dist/resources/extensions/gsd/safe-fs.ts +47 -0
  139. package/dist/resources/extensions/gsd/semantic-chunker.ts +336 -0
  140. package/dist/resources/extensions/gsd/session-forensics.ts +8 -23
  141. package/dist/resources/extensions/gsd/session-lock.ts +284 -0
  142. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +80 -16
  143. package/dist/resources/extensions/gsd/skills/gsd-headless/references/answer-injection.md +35 -6
  144. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +7 -2
  145. package/dist/resources/extensions/gsd/skills/gsd-headless/references/multi-session.md +4 -13
  146. package/dist/resources/extensions/gsd/state.ts +54 -2
  147. package/dist/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  148. package/dist/resources/extensions/gsd/summary-distiller.ts +258 -0
  149. package/dist/resources/extensions/gsd/templates/preferences.md +34 -0
  150. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  151. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  152. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +197 -0
  153. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +33 -39
  154. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +108 -2
  155. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  156. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +3 -0
  157. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  158. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +69 -0
  159. package/dist/resources/extensions/gsd/tests/detection.test.ts +398 -0
  160. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +12 -24
  161. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +118 -94
  162. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  163. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +7 -3
  164. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +75 -0
  165. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +17 -55
  166. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  167. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +375 -0
  168. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +122 -0
  169. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +3 -0
  170. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +1 -1
  171. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  172. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  173. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +24 -82
  174. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  175. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  176. package/dist/resources/extensions/gsd/tests/metrics.test.ts +173 -305
  177. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +3 -0
  178. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +59 -1
  179. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +18 -61
  180. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +17 -8
  181. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +3 -0
  182. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  183. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  184. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +23 -47
  185. package/dist/resources/extensions/gsd/tests/preferences.test.ts +284 -0
  186. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  187. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  188. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  189. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  190. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  191. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +1 -1
  192. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +2 -2
  193. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +43 -60
  194. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  195. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  196. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -0
  197. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +8 -5
  198. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  199. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  200. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  201. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  202. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  203. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  204. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +69 -73
  205. package/dist/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  206. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  207. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +55 -0
  208. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +26 -24
  209. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +251 -8
  210. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +2 -2
  211. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +2 -1
  212. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +24 -61
  213. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +5 -2
  214. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +132 -43
  215. package/dist/resources/extensions/gsd/token-counter.ts +20 -0
  216. package/dist/resources/extensions/gsd/triage-ui.ts +1 -1
  217. package/dist/resources/extensions/gsd/types.ts +5 -1
  218. package/dist/resources/extensions/gsd/unit-runtime.ts +16 -13
  219. package/dist/resources/extensions/gsd/validate-directory.ts +164 -0
  220. package/dist/resources/extensions/gsd/verification-evidence.ts +9 -4
  221. package/dist/resources/extensions/gsd/verification-gate.ts +83 -7
  222. package/dist/resources/extensions/gsd/visualizer-data.ts +1 -1
  223. package/dist/resources/extensions/gsd/visualizer-overlay.ts +5 -2
  224. package/dist/resources/extensions/gsd/visualizer-views.ts +2 -3
  225. package/dist/resources/extensions/gsd/worktree-command.ts +4 -51
  226. package/dist/resources/extensions/gsd/worktree-manager.ts +7 -9
  227. package/dist/resources/extensions/gsd/worktree.ts +41 -1
  228. package/dist/resources/extensions/mcporter/index.ts +27 -14
  229. package/dist/resources/extensions/remote-questions/discord-adapter.ts +2 -2
  230. package/dist/resources/extensions/remote-questions/manager.ts +6 -24
  231. package/dist/resources/extensions/remote-questions/mod.ts +16 -0
  232. package/dist/resources/extensions/remote-questions/notify.ts +90 -0
  233. package/dist/resources/extensions/remote-questions/remote-command.ts +1 -1
  234. package/dist/resources/extensions/remote-questions/slack-adapter.ts +1 -2
  235. package/dist/resources/extensions/remote-questions/store.ts +5 -1
  236. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +1 -2
  237. package/dist/resources/extensions/remote-questions/types.ts +29 -3
  238. package/dist/resources/extensions/search-the-web/native-search.ts +7 -0
  239. package/dist/resources/extensions/search-the-web/provider.ts +15 -3
  240. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +1 -13
  241. package/dist/resources/extensions/search-the-web/tool-search.ts +1 -13
  242. package/dist/resources/extensions/shared/format-utils.ts +53 -0
  243. package/dist/resources/extensions/shared/frontmatter.ts +117 -0
  244. package/dist/resources/extensions/shared/mod.ts +33 -0
  245. package/dist/resources/extensions/shared/sanitize.ts +19 -0
  246. package/dist/resources/extensions/slash-commands/create-extension.ts +1 -1
  247. package/dist/resources/extensions/slash-commands/create-slash-command.ts +1 -1
  248. package/dist/resources/extensions/subagent/index.ts +1 -2
  249. package/dist/resources/extensions/ttsr/index.ts +5 -0
  250. package/dist/resources/extensions/ttsr/rule-loader.ts +4 -51
  251. package/dist/resources/extensions/universal-config/discovery.ts +37 -15
  252. package/dist/resources/extensions/voice/index.ts +1 -1
  253. package/dist/resources/skills/accessibility/SKILL.md +522 -0
  254. package/dist/resources/skills/accessibility/references/WCAG.md +162 -0
  255. package/dist/resources/skills/agent-browser/SKILL.md +517 -0
  256. package/dist/resources/skills/agent-browser/references/authentication.md +202 -0
  257. package/dist/resources/skills/agent-browser/references/commands.md +263 -0
  258. package/dist/resources/skills/agent-browser/references/profiling.md +120 -0
  259. package/dist/resources/skills/agent-browser/references/proxy-support.md +194 -0
  260. package/dist/resources/skills/agent-browser/references/session-management.md +193 -0
  261. package/dist/resources/skills/agent-browser/references/snapshot-refs.md +194 -0
  262. package/dist/resources/skills/agent-browser/references/video-recording.md +173 -0
  263. package/dist/resources/skills/agent-browser/templates/authenticated-session.sh +105 -0
  264. package/dist/resources/skills/agent-browser/templates/capture-workflow.sh +69 -0
  265. package/dist/resources/skills/agent-browser/templates/form-automation.sh +62 -0
  266. package/dist/resources/skills/best-practices/SKILL.md +583 -0
  267. package/dist/resources/skills/code-optimizer/SKILL.md +160 -0
  268. package/dist/resources/skills/code-optimizer/references/algorithmic-complexity.md +66 -0
  269. package/dist/resources/skills/code-optimizer/references/build-compilation.md +90 -0
  270. package/dist/resources/skills/code-optimizer/references/bundle-dependencies.md +82 -0
  271. package/dist/resources/skills/code-optimizer/references/caching-memoization.md +76 -0
  272. package/dist/resources/skills/code-optimizer/references/concurrency-async.md +80 -0
  273. package/dist/resources/skills/code-optimizer/references/config-infra.md +71 -0
  274. package/dist/resources/skills/code-optimizer/references/data-structures.md +80 -0
  275. package/dist/resources/skills/code-optimizer/references/database-queries.md +76 -0
  276. package/dist/resources/skills/code-optimizer/references/dead-code-redundancy.md +84 -0
  277. package/dist/resources/skills/code-optimizer/references/error-resilience.md +80 -0
  278. package/dist/resources/skills/code-optimizer/references/io-network.md +89 -0
  279. package/dist/resources/skills/code-optimizer/references/logging-observability.md +64 -0
  280. package/dist/resources/skills/code-optimizer/references/memory-resources.md +66 -0
  281. package/dist/resources/skills/code-optimizer/references/rendering-ui.md +90 -0
  282. package/dist/resources/skills/code-optimizer/references/security-performance.md +68 -0
  283. package/dist/resources/skills/core-web-vitals/SKILL.md +441 -0
  284. package/dist/resources/skills/core-web-vitals/references/LCP.md +208 -0
  285. package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +122 -0
  286. package/dist/resources/skills/make-interfaces-feel-better/animations.md +379 -0
  287. package/dist/resources/skills/make-interfaces-feel-better/performance.md +88 -0
  288. package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +247 -0
  289. package/dist/resources/skills/make-interfaces-feel-better/typography.md +123 -0
  290. package/dist/resources/skills/react-best-practices/README.md +123 -0
  291. package/dist/resources/skills/react-best-practices/SKILL.md +136 -0
  292. package/dist/resources/skills/react-best-practices/metadata.json +15 -0
  293. package/dist/resources/skills/react-best-practices/rules/_sections.md +46 -0
  294. package/dist/resources/skills/react-best-practices/rules/_template.md +28 -0
  295. package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  296. package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +42 -0
  297. package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
  298. package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +38 -0
  299. package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +80 -0
  300. package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +51 -0
  301. package/dist/resources/skills/react-best-practices/rules/async-parallel.md +28 -0
  302. package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  303. package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  304. package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  305. package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  306. package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  307. package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +50 -0
  308. package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  309. package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  310. package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  311. package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  312. package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
  313. package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  314. package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  315. package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  316. package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  317. package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +50 -0
  318. package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  319. package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +37 -0
  320. package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  321. package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  322. package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  323. package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  324. package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +26 -0
  325. package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  326. package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  327. package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  328. package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  329. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  330. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  331. package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  332. package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  333. package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  334. package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  335. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  336. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  337. package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  338. package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  339. package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  340. package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +44 -0
  341. package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  342. package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  343. package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  344. package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  345. package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  346. package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +96 -0
  347. package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  348. package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +76 -0
  349. package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +65 -0
  350. package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  351. package/dist/resources/skills/react-best-practices/rules/server-serialization.md +38 -0
  352. package/dist/resources/skills/userinterface-wiki/SKILL.md +253 -0
  353. package/dist/resources/skills/userinterface-wiki/rules/_sections.md +66 -0
  354. package/dist/resources/skills/userinterface-wiki/rules/_template.md +24 -0
  355. package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
  356. package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
  357. package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
  358. package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
  359. package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
  360. package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
  361. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
  362. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
  363. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
  364. package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
  365. package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
  366. package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
  367. package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
  368. package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
  369. package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
  370. package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
  371. package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
  372. package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
  373. package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
  374. package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
  375. package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
  376. package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
  377. package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
  378. package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
  379. package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
  380. package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
  381. package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
  382. package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
  383. package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
  384. package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
  385. package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
  386. package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
  387. package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
  388. package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
  389. package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
  390. package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
  391. package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
  392. package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
  393. package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
  394. package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
  395. package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
  396. package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
  397. package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
  398. package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
  399. package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
  400. package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
  401. package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
  402. package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
  403. package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
  404. package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
  405. package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
  406. package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
  407. package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
  408. package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
  409. package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
  410. package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
  411. package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
  412. package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
  413. package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
  414. package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
  415. package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
  416. package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
  417. package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
  418. package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
  419. package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
  420. package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
  421. package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
  422. package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
  423. package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
  424. package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
  425. package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
  426. package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
  427. package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
  428. package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
  429. package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
  430. package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
  431. package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
  432. package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
  433. package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
  434. package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
  435. package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
  436. package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
  437. package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
  438. package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
  439. package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
  440. package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
  441. package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
  442. package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
  443. package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
  444. package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
  445. package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
  446. package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
  447. package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
  448. package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
  449. package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
  450. package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
  451. package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
  452. package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
  453. package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
  454. package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
  455. package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
  456. package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
  457. package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
  458. package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
  459. package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
  460. package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
  461. package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
  462. package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
  463. package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
  464. package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
  465. package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
  466. package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
  467. package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
  468. package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
  469. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
  470. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
  471. package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
  472. package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
  473. package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
  474. package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
  475. package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
  476. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
  477. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
  478. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
  479. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
  480. package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
  481. package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
  482. package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
  483. package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
  484. package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
  485. package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
  486. package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
  487. package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
  488. package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
  489. package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
  490. package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
  491. package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
  492. package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
  493. package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
  494. package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
  495. package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
  496. package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
  497. package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
  498. package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
  499. package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
  500. package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
  501. package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
  502. package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
  503. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
  504. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
  505. package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
  506. package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
  507. package/dist/resources/skills/web-design-guidelines/SKILL.md +39 -0
  508. package/dist/resources/skills/web-quality-audit/SKILL.md +170 -0
  509. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +91 -0
  510. package/dist/update-check.js +1 -1
  511. package/package.json +23 -8
  512. package/packages/native/package.json +28 -0
  513. package/packages/pi-agent-core/package.json +6 -0
  514. package/packages/pi-ai/dist/models.generated.d.ts +43 -11
  515. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  516. package/packages/pi-ai/dist/models.generated.js +34 -26
  517. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  518. package/packages/pi-ai/dist/providers/anthropic.js +3 -2
  519. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  520. package/packages/pi-ai/dist/providers/openai-codex-responses.js +14 -4
  521. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  522. package/packages/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  523. package/packages/pi-ai/dist/utils/oauth/anthropic.js +2 -0
  524. package/packages/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  525. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  526. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +5 -1
  527. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  528. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  529. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +4 -0
  530. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  531. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  532. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +6 -0
  533. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  534. package/packages/pi-ai/dist/utils/oauth/index.js +2 -2
  535. package/packages/pi-ai/dist/utils/oauth/index.js.map +1 -1
  536. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  537. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +2 -0
  538. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  539. package/packages/pi-ai/oauth.d.ts +1 -0
  540. package/packages/pi-ai/oauth.js +1 -0
  541. package/packages/pi-ai/package.json +2 -2
  542. package/packages/pi-ai/src/models.generated.ts +42 -34
  543. package/packages/pi-ai/src/providers/anthropic.ts +3 -2
  544. package/packages/pi-ai/src/providers/openai-codex-responses.ts +15 -4
  545. package/packages/pi-ai/src/utils/oauth/anthropic.ts +2 -0
  546. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +5 -1
  547. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +4 -0
  548. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +6 -0
  549. package/packages/pi-ai/src/utils/oauth/index.ts +2 -2
  550. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +2 -0
  551. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  552. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  553. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  554. package/packages/pi-coding-agent/dist/core/auth-storage.js +2 -1
  555. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  556. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  557. package/packages/pi-coding-agent/dist/core/bash-executor.js +23 -1
  558. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  559. package/packages/pi-coding-agent/dist/core/blob-store.d.ts +8 -0
  560. package/packages/pi-coding-agent/dist/core/blob-store.d.ts.map +1 -1
  561. package/packages/pi-coding-agent/dist/core/blob-store.js +50 -1
  562. package/packages/pi-coding-agent/dist/core/blob-store.js.map +1 -1
  563. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  564. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +2 -1
  565. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  566. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  567. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +3 -2
  568. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  569. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  570. package/packages/pi-coding-agent/dist/core/compaction/utils.js +2 -2
  571. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  572. package/packages/pi-coding-agent/dist/core/constants.d.ts +29 -0
  573. package/packages/pi-coding-agent/dist/core/constants.d.ts.map +1 -0
  574. package/packages/pi-coding-agent/dist/core/constants.js +44 -0
  575. package/packages/pi-coding-agent/dist/core/constants.js.map +1 -0
  576. package/packages/pi-coding-agent/dist/core/extensions/loader.js +1 -1
  577. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  578. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  579. package/packages/pi-coding-agent/dist/core/extensions/runner.js +32 -10
  580. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  581. package/packages/pi-coding-agent/dist/core/extensions/runner.test.d.ts +2 -0
  582. package/packages/pi-coding-agent/dist/core/extensions/runner.test.d.ts.map +1 -0
  583. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +77 -0
  584. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -0
  585. package/packages/pi-coding-agent/dist/core/fs-utils.d.ts +7 -0
  586. package/packages/pi-coding-agent/dist/core/fs-utils.d.ts.map +1 -0
  587. package/packages/pi-coding-agent/dist/core/fs-utils.js +12 -0
  588. package/packages/pi-coding-agent/dist/core/fs-utils.js.map +1 -0
  589. package/packages/pi-coding-agent/dist/core/fs-utils.test.d.ts +2 -0
  590. package/packages/pi-coding-agent/dist/core/fs-utils.test.d.ts.map +1 -0
  591. package/packages/pi-coding-agent/dist/core/fs-utils.test.js +67 -0
  592. package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -0
  593. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  594. package/packages/pi-coding-agent/dist/core/lsp/client.js +22 -2
  595. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  596. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  597. package/packages/pi-coding-agent/dist/core/lsp/index.js +30 -4
  598. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  599. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  600. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +13 -5
  601. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  602. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  603. package/packages/pi-coding-agent/dist/core/model-resolver.js +14 -0
  604. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  605. package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
  606. package/packages/pi-coding-agent/dist/core/resolve-config-value.js +12 -4
  607. package/packages/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
  608. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +49 -0
  609. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  610. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +7 -0
  611. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  612. package/packages/pi-coding-agent/dist/core/session-manager.js +108 -14
  613. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  614. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +6 -0
  615. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  616. package/packages/pi-coding-agent/dist/core/settings-manager.js +22 -5
  617. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  618. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  619. package/packages/pi-coding-agent/dist/core/system-prompt.js +10 -0
  620. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  621. package/packages/pi-coding-agent/dist/core/tools/edit-diff.js +2 -2
  622. package/packages/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -1
  623. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  624. package/packages/pi-coding-agent/dist/core/tools/find.js +2 -1
  625. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  626. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js +4 -4
  627. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -1
  628. package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts +1 -1
  629. package/packages/pi-coding-agent/dist/core/tools/hashline.js +1 -1
  630. package/packages/pi-coding-agent/dist/core/tools/hashline.js.map +1 -1
  631. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js +8 -8
  632. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -1
  633. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +1 -1
  634. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -1
  635. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  636. package/packages/pi-coding-agent/dist/core/tools/path-utils.d.ts +1 -0
  637. package/packages/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  638. package/packages/pi-coding-agent/dist/core/tools/path-utils.js +1 -1
  639. package/packages/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  640. package/packages/pi-coding-agent/dist/core/tools/truncate.d.ts.map +1 -1
  641. package/packages/pi-coding-agent/dist/core/tools/truncate.js +2 -1
  642. package/packages/pi-coding-agent/dist/core/tools/truncate.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/index.d.ts +2 -1
  644. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  645. package/packages/pi-coding-agent/dist/index.js +3 -1
  646. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  647. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  648. package/packages/pi-coding-agent/dist/main.js +6 -0
  649. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  650. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts +9 -0
  651. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  652. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +47 -5
  653. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
  654. package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts +1 -1
  655. package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -1
  656. package/packages/pi-coding-agent/dist/modes/interactive/components/index.js +1 -1
  657. package/packages/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -1
  658. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +4 -4
  659. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  660. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  661. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  662. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +12 -0
  663. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  664. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  665. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +33 -2
  666. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  667. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  668. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +11 -0
  669. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  670. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  671. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +12 -2
  672. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  673. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.d.ts.map +1 -1
  674. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.js +25 -3
  675. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.js.map +1 -1
  676. package/packages/pi-coding-agent/package.json +0 -4
  677. package/packages/pi-coding-agent/scripts/copy-assets.cjs +39 -8
  678. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  679. package/packages/pi-coding-agent/src/core/auth-storage.ts +2 -1
  680. package/packages/pi-coding-agent/src/core/bash-executor.ts +23 -1
  681. package/packages/pi-coding-agent/src/core/blob-store.ts +46 -1
  682. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -1
  683. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -2
  684. package/packages/pi-coding-agent/src/core/compaction/utils.ts +2 -2
  685. package/packages/pi-coding-agent/src/core/constants.ts +59 -0
  686. package/packages/pi-coding-agent/src/core/extensions/loader.ts +1 -1
  687. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +84 -0
  688. package/packages/pi-coding-agent/src/core/extensions/runner.ts +31 -10
  689. package/packages/pi-coding-agent/src/core/fs-utils.test.ts +66 -0
  690. package/packages/pi-coding-agent/src/core/fs-utils.ts +12 -0
  691. package/packages/pi-coding-agent/src/core/lsp/client.ts +22 -2
  692. package/packages/pi-coding-agent/src/core/lsp/index.ts +31 -5
  693. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +13 -5
  694. package/packages/pi-coding-agent/src/core/model-resolver.ts +14 -0
  695. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +58 -0
  696. package/packages/pi-coding-agent/src/core/resolve-config-value.ts +14 -4
  697. package/packages/pi-coding-agent/src/core/session-manager.ts +113 -18
  698. package/packages/pi-coding-agent/src/core/settings-manager.ts +33 -5
  699. package/packages/pi-coding-agent/src/core/system-prompt.ts +11 -0
  700. package/packages/pi-coding-agent/src/core/tools/edit-diff.ts +2 -2
  701. package/packages/pi-coding-agent/src/core/tools/find.ts +2 -1
  702. package/packages/pi-coding-agent/src/core/tools/hashline-edit.ts +4 -4
  703. package/packages/pi-coding-agent/src/core/tools/hashline.test.ts +8 -8
  704. package/packages/pi-coding-agent/src/core/tools/hashline.ts +1 -1
  705. package/packages/pi-coding-agent/src/core/tools/index.ts +1 -1
  706. package/packages/pi-coding-agent/src/core/tools/path-utils.ts +1 -1
  707. package/packages/pi-coding-agent/src/core/tools/truncate.ts +3 -1
  708. package/packages/pi-coding-agent/src/index.ts +9 -0
  709. package/packages/pi-coding-agent/src/main.ts +7 -0
  710. package/packages/pi-coding-agent/src/modes/interactive/components/extension-selector.ts +49 -5
  711. package/packages/pi-coding-agent/src/modes/interactive/components/index.ts +1 -1
  712. package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +4 -4
  713. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  714. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +35 -1
  715. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +12 -0
  716. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +11 -2
  717. package/packages/pi-coding-agent/src/resources/extensions/memory/pipeline.ts +23 -3
  718. package/packages/pi-tui/dist/__tests__/autocomplete.test.d.ts +2 -0
  719. package/packages/pi-tui/dist/__tests__/autocomplete.test.d.ts.map +1 -0
  720. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +149 -0
  721. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -0
  722. package/packages/pi-tui/dist/__tests__/fuzzy.test.d.ts +2 -0
  723. package/packages/pi-tui/dist/__tests__/fuzzy.test.d.ts.map +1 -0
  724. package/packages/pi-tui/dist/__tests__/fuzzy.test.js +94 -0
  725. package/packages/pi-tui/dist/__tests__/fuzzy.test.js.map +1 -0
  726. package/packages/pi-tui/dist/autocomplete.d.ts +8 -1
  727. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  728. package/packages/pi-tui/dist/autocomplete.js +20 -2
  729. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  730. package/packages/pi-tui/package.json +8 -2
  731. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +186 -0
  732. package/packages/pi-tui/src/__tests__/fuzzy.test.ts +112 -0
  733. package/packages/pi-tui/src/autocomplete.ts +26 -1
  734. package/src/resources/extensions/ask-user-questions.ts +3 -2
  735. package/src/resources/extensions/bg-shell/bg-shell-command.ts +219 -0
  736. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +400 -0
  737. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +985 -0
  738. package/src/resources/extensions/bg-shell/index.ts +17 -1561
  739. package/src/resources/extensions/bg-shell/overlay.ts +4 -0
  740. package/src/resources/extensions/bg-shell/utilities.ts +4 -16
  741. package/src/resources/extensions/browser-tools/capture.ts +34 -2
  742. package/src/resources/extensions/browser-tools/lifecycle.ts +5 -5
  743. package/src/resources/extensions/browser-tools/settle.ts +1 -1
  744. package/src/resources/extensions/browser-tools/state.ts +5 -5
  745. package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +1 -1
  746. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +3 -3
  747. package/src/resources/extensions/browser-tools/tools/assertions.ts +1 -1
  748. package/src/resources/extensions/browser-tools/tools/device.ts +1 -1
  749. package/src/resources/extensions/browser-tools/tools/extract.ts +1 -1
  750. package/src/resources/extensions/browser-tools/tools/navigation.ts +6 -6
  751. package/src/resources/extensions/browser-tools/tools/network-mock.ts +1 -1
  752. package/src/resources/extensions/browser-tools/tools/pages.ts +1 -1
  753. package/src/resources/extensions/browser-tools/tools/screenshot.ts +28 -10
  754. package/src/resources/extensions/browser-tools/tools/state-persistence.ts +1 -1
  755. package/src/resources/extensions/browser-tools/tools/visual-diff.ts +1 -1
  756. package/src/resources/extensions/browser-tools/utils.ts +5 -5
  757. package/src/resources/extensions/get-secrets-from-user.ts +1 -1
  758. package/src/resources/extensions/google-search/index.ts +21 -8
  759. package/src/resources/extensions/gsd/activity-log.ts +2 -1
  760. package/src/resources/extensions/gsd/atomic-write.ts +35 -0
  761. package/src/resources/extensions/gsd/auto/session.ts +12 -0
  762. package/src/resources/extensions/gsd/auto-dashboard.ts +84 -3
  763. package/src/resources/extensions/gsd/auto-idempotency.ts +150 -0
  764. package/src/resources/extensions/gsd/auto-post-unit.ts +591 -0
  765. package/src/resources/extensions/gsd/auto-prompts.ts +116 -22
  766. package/src/resources/extensions/gsd/auto-recovery.ts +21 -10
  767. package/src/resources/extensions/gsd/auto-start.ts +500 -0
  768. package/src/resources/extensions/gsd/auto-stuck-detection.ts +220 -0
  769. package/src/resources/extensions/gsd/auto-timers.ts +223 -0
  770. package/src/resources/extensions/gsd/auto-unit-closeout.ts +3 -1
  771. package/src/resources/extensions/gsd/auto-verification.ts +229 -0
  772. package/src/resources/extensions/gsd/auto-worktree-sync.ts +22 -31
  773. package/src/resources/extensions/gsd/auto-worktree.ts +83 -67
  774. package/src/resources/extensions/gsd/auto.ts +381 -1873
  775. package/src/resources/extensions/gsd/commands-config.ts +102 -0
  776. package/src/resources/extensions/gsd/commands-handlers.ts +375 -0
  777. package/src/resources/extensions/gsd/commands-inspect.ts +90 -0
  778. package/src/resources/extensions/gsd/commands-logs.ts +537 -0
  779. package/src/resources/extensions/gsd/commands-maintenance.ts +206 -0
  780. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +760 -0
  781. package/src/resources/extensions/gsd/commands.ts +373 -1432
  782. package/src/resources/extensions/gsd/constants.ts +21 -0
  783. package/src/resources/extensions/gsd/context-budget.ts +25 -2
  784. package/src/resources/extensions/gsd/crash-recovery.ts +4 -2
  785. package/src/resources/extensions/gsd/dashboard-overlay.ts +13 -4
  786. package/src/resources/extensions/gsd/db-writer.ts +21 -2
  787. package/src/resources/extensions/gsd/detection.ts +469 -0
  788. package/src/resources/extensions/gsd/diff-context.ts +2 -1
  789. package/src/resources/extensions/gsd/dispatch-guard.ts +4 -0
  790. package/src/resources/extensions/gsd/docs/preferences-reference.md +83 -0
  791. package/src/resources/extensions/gsd/doctor-checks.ts +564 -0
  792. package/src/resources/extensions/gsd/doctor-format.ts +78 -0
  793. package/src/resources/extensions/gsd/doctor-types.ts +72 -0
  794. package/src/resources/extensions/gsd/doctor.ts +64 -701
  795. package/src/resources/extensions/gsd/errors.ts +0 -2
  796. package/src/resources/extensions/gsd/export-html.ts +367 -11
  797. package/src/resources/extensions/gsd/export.ts +119 -30
  798. package/src/resources/extensions/gsd/files.ts +8 -126
  799. package/src/resources/extensions/gsd/forensics.ts +2 -12
  800. package/src/resources/extensions/gsd/git-constants.ts +11 -0
  801. package/src/resources/extensions/gsd/git-service.ts +13 -9
  802. package/src/resources/extensions/gsd/gsd-db.ts +26 -6
  803. package/src/resources/extensions/gsd/guided-flow-queue.ts +451 -0
  804. package/src/resources/extensions/gsd/guided-flow.ts +231 -514
  805. package/src/resources/extensions/gsd/history.ts +2 -20
  806. package/src/resources/extensions/gsd/index.ts +208 -46
  807. package/src/resources/extensions/gsd/init-wizard.ts +615 -0
  808. package/src/resources/extensions/gsd/json-persistence.ts +52 -0
  809. package/src/resources/extensions/gsd/jsonl-utils.ts +21 -0
  810. package/src/resources/extensions/gsd/key-manager.ts +995 -0
  811. package/src/resources/extensions/gsd/metrics.ts +49 -36
  812. package/src/resources/extensions/gsd/migrate/command.ts +1 -1
  813. package/src/resources/extensions/gsd/migrate/parsers.ts +10 -95
  814. package/src/resources/extensions/gsd/milestone-actions.ts +126 -0
  815. package/src/resources/extensions/gsd/milestone-ids.ts +95 -0
  816. package/src/resources/extensions/gsd/native-git-bridge.ts +5 -10
  817. package/src/resources/extensions/gsd/parallel-eligibility.ts +3 -3
  818. package/src/resources/extensions/gsd/paths.ts +1 -11
  819. package/src/resources/extensions/gsd/plugin-importer.ts +3 -2
  820. package/src/resources/extensions/gsd/preferences-models.ts +323 -0
  821. package/src/resources/extensions/gsd/preferences-skills.ts +169 -0
  822. package/src/resources/extensions/gsd/preferences-types.ts +223 -0
  823. package/src/resources/extensions/gsd/preferences-validation.ts +597 -0
  824. package/src/resources/extensions/gsd/preferences.ts +219 -1305
  825. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  826. package/src/resources/extensions/gsd/prompt-compressor.ts +508 -0
  827. package/src/resources/extensions/gsd/prompt-loader.ts +4 -2
  828. package/src/resources/extensions/gsd/prompt-ordering.ts +200 -0
  829. package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -2
  830. package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  831. package/src/resources/extensions/gsd/prompts/discuss-headless.md +2 -4
  832. package/src/resources/extensions/gsd/prompts/discuss.md +13 -5
  833. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -2
  834. package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  835. package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -1
  836. package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -2
  837. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -2
  838. package/src/resources/extensions/gsd/prompts/queue.md +30 -0
  839. package/src/resources/extensions/gsd/prompts/quick-task.md +0 -6
  840. package/src/resources/extensions/gsd/prompts/replan-slice.md +0 -1
  841. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +0 -1
  842. package/src/resources/extensions/gsd/prompts/system.md +5 -2
  843. package/src/resources/extensions/gsd/provider-error-pause.ts +59 -10
  844. package/src/resources/extensions/gsd/queue-order.ts +1 -1
  845. package/src/resources/extensions/gsd/queue-reorder-ui.ts +15 -2
  846. package/src/resources/extensions/gsd/quick.ts +18 -15
  847. package/src/resources/extensions/gsd/reports.ts +1 -7
  848. package/src/resources/extensions/gsd/routing-history.ts +13 -17
  849. package/src/resources/extensions/gsd/safe-fs.ts +47 -0
  850. package/src/resources/extensions/gsd/semantic-chunker.ts +336 -0
  851. package/src/resources/extensions/gsd/session-forensics.ts +8 -23
  852. package/src/resources/extensions/gsd/session-lock.ts +284 -0
  853. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +80 -16
  854. package/src/resources/extensions/gsd/skills/gsd-headless/references/answer-injection.md +35 -6
  855. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +7 -2
  856. package/src/resources/extensions/gsd/skills/gsd-headless/references/multi-session.md +4 -13
  857. package/src/resources/extensions/gsd/state.ts +54 -2
  858. package/src/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  859. package/src/resources/extensions/gsd/summary-distiller.ts +258 -0
  860. package/src/resources/extensions/gsd/templates/preferences.md +34 -0
  861. package/src/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  862. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  863. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +197 -0
  864. package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +33 -39
  865. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +108 -2
  866. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  867. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +3 -0
  868. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  869. package/src/resources/extensions/gsd/tests/context-budget.test.ts +69 -0
  870. package/src/resources/extensions/gsd/tests/detection.test.ts +398 -0
  871. package/src/resources/extensions/gsd/tests/discuss-prompt.test.ts +12 -24
  872. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +118 -94
  873. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  874. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -3
  875. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +75 -0
  876. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +17 -55
  877. package/src/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  878. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +375 -0
  879. package/src/resources/extensions/gsd/tests/extension-selector-separator.test.ts +122 -0
  880. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +3 -0
  881. package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +1 -1
  882. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  883. package/src/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  884. package/src/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +24 -82
  885. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  886. package/src/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  887. package/src/resources/extensions/gsd/tests/metrics.test.ts +173 -305
  888. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +3 -0
  889. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +59 -1
  890. package/src/resources/extensions/gsd/tests/next-milestone-id.test.ts +18 -61
  891. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +17 -8
  892. package/src/resources/extensions/gsd/tests/parallel-merge.test.ts +3 -0
  893. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  894. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  895. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +23 -47
  896. package/src/resources/extensions/gsd/tests/preferences.test.ts +284 -0
  897. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  898. package/src/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  899. package/src/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  900. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  901. package/src/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  902. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +1 -1
  903. package/src/resources/extensions/gsd/tests/remote-status.test.ts +2 -2
  904. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +43 -60
  905. package/src/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  906. package/src/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  907. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -0
  908. package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +8 -5
  909. package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  910. package/src/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  911. package/src/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  912. package/src/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  913. package/src/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  914. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  915. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +69 -73
  916. package/src/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  917. package/src/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  918. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +55 -0
  919. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +26 -24
  920. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +251 -8
  921. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +2 -2
  922. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +2 -1
  923. package/src/resources/extensions/gsd/tests/workspace-index.test.ts +24 -61
  924. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +5 -2
  925. package/src/resources/extensions/gsd/tests/write-gate.test.ts +132 -43
  926. package/src/resources/extensions/gsd/token-counter.ts +20 -0
  927. package/src/resources/extensions/gsd/triage-ui.ts +1 -1
  928. package/src/resources/extensions/gsd/types.ts +5 -1
  929. package/src/resources/extensions/gsd/unit-runtime.ts +16 -13
  930. package/src/resources/extensions/gsd/validate-directory.ts +164 -0
  931. package/src/resources/extensions/gsd/verification-evidence.ts +9 -4
  932. package/src/resources/extensions/gsd/verification-gate.ts +83 -7
  933. package/src/resources/extensions/gsd/visualizer-data.ts +1 -1
  934. package/src/resources/extensions/gsd/visualizer-overlay.ts +5 -2
  935. package/src/resources/extensions/gsd/visualizer-views.ts +2 -3
  936. package/src/resources/extensions/gsd/worktree-command.ts +4 -51
  937. package/src/resources/extensions/gsd/worktree-manager.ts +7 -9
  938. package/src/resources/extensions/gsd/worktree.ts +41 -1
  939. package/src/resources/extensions/mcporter/index.ts +27 -14
  940. package/src/resources/extensions/remote-questions/discord-adapter.ts +2 -2
  941. package/src/resources/extensions/remote-questions/manager.ts +6 -24
  942. package/src/resources/extensions/remote-questions/mod.ts +16 -0
  943. package/src/resources/extensions/remote-questions/notify.ts +90 -0
  944. package/src/resources/extensions/remote-questions/remote-command.ts +1 -1
  945. package/src/resources/extensions/remote-questions/slack-adapter.ts +1 -2
  946. package/src/resources/extensions/remote-questions/store.ts +5 -1
  947. package/src/resources/extensions/remote-questions/telegram-adapter.ts +1 -2
  948. package/src/resources/extensions/remote-questions/types.ts +29 -3
  949. package/src/resources/extensions/search-the-web/native-search.ts +7 -0
  950. package/src/resources/extensions/search-the-web/provider.ts +15 -3
  951. package/src/resources/extensions/search-the-web/tool-llm-context.ts +1 -13
  952. package/src/resources/extensions/search-the-web/tool-search.ts +1 -13
  953. package/src/resources/extensions/shared/format-utils.ts +53 -0
  954. package/src/resources/extensions/shared/frontmatter.ts +117 -0
  955. package/src/resources/extensions/shared/mod.ts +33 -0
  956. package/src/resources/extensions/shared/sanitize.ts +19 -0
  957. package/src/resources/extensions/slash-commands/create-extension.ts +1 -1
  958. package/src/resources/extensions/slash-commands/create-slash-command.ts +1 -1
  959. package/src/resources/extensions/subagent/index.ts +1 -2
  960. package/src/resources/extensions/ttsr/index.ts +5 -0
  961. package/src/resources/extensions/ttsr/rule-loader.ts +4 -51
  962. package/src/resources/extensions/universal-config/discovery.ts +37 -15
  963. package/src/resources/extensions/voice/index.ts +1 -1
  964. package/src/resources/skills/accessibility/SKILL.md +522 -0
  965. package/src/resources/skills/accessibility/references/WCAG.md +162 -0
  966. package/src/resources/skills/agent-browser/SKILL.md +517 -0
  967. package/src/resources/skills/agent-browser/references/authentication.md +202 -0
  968. package/src/resources/skills/agent-browser/references/commands.md +263 -0
  969. package/src/resources/skills/agent-browser/references/profiling.md +120 -0
  970. package/src/resources/skills/agent-browser/references/proxy-support.md +194 -0
  971. package/src/resources/skills/agent-browser/references/session-management.md +193 -0
  972. package/src/resources/skills/agent-browser/references/snapshot-refs.md +194 -0
  973. package/src/resources/skills/agent-browser/references/video-recording.md +173 -0
  974. package/src/resources/skills/agent-browser/templates/authenticated-session.sh +105 -0
  975. package/src/resources/skills/agent-browser/templates/capture-workflow.sh +69 -0
  976. package/src/resources/skills/agent-browser/templates/form-automation.sh +62 -0
  977. package/src/resources/skills/best-practices/SKILL.md +583 -0
  978. package/src/resources/skills/code-optimizer/SKILL.md +160 -0
  979. package/src/resources/skills/code-optimizer/references/algorithmic-complexity.md +66 -0
  980. package/src/resources/skills/code-optimizer/references/build-compilation.md +90 -0
  981. package/src/resources/skills/code-optimizer/references/bundle-dependencies.md +82 -0
  982. package/src/resources/skills/code-optimizer/references/caching-memoization.md +76 -0
  983. package/src/resources/skills/code-optimizer/references/concurrency-async.md +80 -0
  984. package/src/resources/skills/code-optimizer/references/config-infra.md +71 -0
  985. package/src/resources/skills/code-optimizer/references/data-structures.md +80 -0
  986. package/src/resources/skills/code-optimizer/references/database-queries.md +76 -0
  987. package/src/resources/skills/code-optimizer/references/dead-code-redundancy.md +84 -0
  988. package/src/resources/skills/code-optimizer/references/error-resilience.md +80 -0
  989. package/src/resources/skills/code-optimizer/references/io-network.md +89 -0
  990. package/src/resources/skills/code-optimizer/references/logging-observability.md +64 -0
  991. package/src/resources/skills/code-optimizer/references/memory-resources.md +66 -0
  992. package/src/resources/skills/code-optimizer/references/rendering-ui.md +90 -0
  993. package/src/resources/skills/code-optimizer/references/security-performance.md +68 -0
  994. package/src/resources/skills/core-web-vitals/SKILL.md +441 -0
  995. package/src/resources/skills/core-web-vitals/references/LCP.md +208 -0
  996. package/src/resources/skills/make-interfaces-feel-better/SKILL.md +122 -0
  997. package/src/resources/skills/make-interfaces-feel-better/animations.md +379 -0
  998. package/src/resources/skills/make-interfaces-feel-better/performance.md +88 -0
  999. package/src/resources/skills/make-interfaces-feel-better/surfaces.md +247 -0
  1000. package/src/resources/skills/make-interfaces-feel-better/typography.md +123 -0
  1001. package/src/resources/skills/react-best-practices/README.md +123 -0
  1002. package/src/resources/skills/react-best-practices/SKILL.md +136 -0
  1003. package/src/resources/skills/react-best-practices/metadata.json +15 -0
  1004. package/src/resources/skills/react-best-practices/rules/_sections.md +46 -0
  1005. package/src/resources/skills/react-best-practices/rules/_template.md +28 -0
  1006. package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  1007. package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +42 -0
  1008. package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
  1009. package/src/resources/skills/react-best-practices/rules/async-api-routes.md +38 -0
  1010. package/src/resources/skills/react-best-practices/rules/async-defer-await.md +80 -0
  1011. package/src/resources/skills/react-best-practices/rules/async-dependencies.md +51 -0
  1012. package/src/resources/skills/react-best-practices/rules/async-parallel.md +28 -0
  1013. package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  1014. package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  1015. package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  1016. package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  1017. package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  1018. package/src/resources/skills/react-best-practices/rules/bundle-preload.md +50 -0
  1019. package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  1020. package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  1021. package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  1022. package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  1023. package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
  1024. package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  1025. package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  1026. package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  1027. package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  1028. package/src/resources/skills/react-best-practices/rules/js-early-exit.md +50 -0
  1029. package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  1030. package/src/resources/skills/react-best-practices/rules/js-index-maps.md +37 -0
  1031. package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  1032. package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  1033. package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  1034. package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  1035. package/src/resources/skills/react-best-practices/rules/rendering-activity.md +26 -0
  1036. package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  1037. package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  1038. package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  1039. package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  1040. package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  1041. package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  1042. package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  1043. package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  1044. package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  1045. package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  1046. package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  1047. package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  1048. package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  1049. package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  1050. package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  1051. package/src/resources/skills/react-best-practices/rules/rerender-memo.md +44 -0
  1052. package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  1053. package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  1054. package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  1055. package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  1056. package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  1057. package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +96 -0
  1058. package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  1059. package/src/resources/skills/react-best-practices/rules/server-cache-react.md +76 -0
  1060. package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +65 -0
  1061. package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  1062. package/src/resources/skills/react-best-practices/rules/server-serialization.md +38 -0
  1063. package/src/resources/skills/userinterface-wiki/SKILL.md +253 -0
  1064. package/src/resources/skills/userinterface-wiki/rules/_sections.md +66 -0
  1065. package/src/resources/skills/userinterface-wiki/rules/_template.md +24 -0
  1066. package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
  1067. package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
  1068. package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
  1069. package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
  1070. package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
  1071. package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
  1072. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
  1073. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
  1074. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
  1075. package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
  1076. package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
  1077. package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
  1078. package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
  1079. package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
  1080. package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
  1081. package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
  1082. package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
  1083. package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
  1084. package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
  1085. package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
  1086. package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
  1087. package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
  1088. package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
  1089. package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
  1090. package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
  1091. package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
  1092. package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
  1093. package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
  1094. package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
  1095. package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
  1096. package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
  1097. package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
  1098. package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
  1099. package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
  1100. package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
  1101. package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
  1102. package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
  1103. package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
  1104. package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
  1105. package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
  1106. package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
  1107. package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
  1108. package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
  1109. package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
  1110. package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
  1111. package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
  1112. package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
  1113. package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
  1114. package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
  1115. package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
  1116. package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
  1117. package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
  1118. package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
  1119. package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
  1120. package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
  1121. package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
  1122. package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
  1123. package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
  1124. package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
  1125. package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
  1126. package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
  1127. package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
  1128. package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
  1129. package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
  1130. package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
  1131. package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
  1132. package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
  1133. package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
  1134. package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
  1135. package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
  1136. package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
  1137. package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
  1138. package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
  1139. package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
  1140. package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
  1141. package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
  1142. package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
  1143. package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
  1144. package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
  1145. package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
  1146. package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
  1147. package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
  1148. package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
  1149. package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
  1150. package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
  1151. package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
  1152. package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
  1153. package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
  1154. package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
  1155. package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
  1156. package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
  1157. package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
  1158. package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
  1159. package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
  1160. package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
  1161. package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
  1162. package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
  1163. package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
  1164. package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
  1165. package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
  1166. package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
  1167. package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
  1168. package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
  1169. package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
  1170. package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
  1171. package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
  1172. package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
  1173. package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
  1174. package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
  1175. package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
  1176. package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
  1177. package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
  1178. package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
  1179. package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
  1180. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
  1181. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
  1182. package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
  1183. package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
  1184. package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
  1185. package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
  1186. package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
  1187. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
  1188. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
  1189. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
  1190. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
  1191. package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
  1192. package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
  1193. package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
  1194. package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
  1195. package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
  1196. package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
  1197. package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
  1198. package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
  1199. package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
  1200. package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
  1201. package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
  1202. package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
  1203. package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
  1204. package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
  1205. package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
  1206. package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
  1207. package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
  1208. package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
  1209. package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
  1210. package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
  1211. package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
  1212. package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
  1213. package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
  1214. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
  1215. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
  1216. package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
  1217. package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
  1218. package/src/resources/skills/web-design-guidelines/SKILL.md +39 -0
  1219. package/src/resources/skills/web-quality-audit/SKILL.md +170 -0
  1220. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +91 -0
  1221. package/dist/resources/extensions/gsd/complexity.ts +0 -237
  1222. package/dist/resources/extensions/gsd/github-client.ts +0 -235
  1223. package/dist/resources/extensions/gsd/mcp-server.ts +0 -108
  1224. package/dist/resources/extensions/gsd/tests/activity-log-prune.test.ts +0 -297
  1225. package/dist/resources/extensions/gsd/tests/activity-log-save.test.ts +0 -127
  1226. package/dist/resources/extensions/gsd/tests/agent-end-provider-error.test.ts +0 -110
  1227. package/dist/resources/extensions/gsd/tests/auto-draft-pause.test.ts +0 -115
  1228. package/dist/resources/extensions/gsd/tests/complexity-routing.test.ts +0 -294
  1229. package/dist/resources/extensions/gsd/tests/marketplace-discovery.test.ts +0 -202
  1230. package/dist/resources/extensions/gsd/tests/metrics-io.test.ts +0 -176
  1231. package/dist/resources/extensions/gsd/tests/network-error-fallback.test.ts +0 -104
  1232. package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +0 -120
  1233. package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -226
  1234. package/dist/resources/extensions/gsd/tests/preferences-mode.test.ts +0 -110
  1235. package/dist/resources/extensions/gsd/tests/preferences-models.test.ts +0 -207
  1236. package/dist/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +0 -183
  1237. package/dist/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +0 -168
  1238. package/dist/resources/extensions/shared/bundled-extension-paths.ts +0 -11
  1239. package/dist/resources/extensions/shared/progress-widget.ts +0 -282
  1240. package/dist/resources/extensions/shared/thinking-widget.ts +0 -107
  1241. package/src/resources/extensions/gsd/complexity.ts +0 -237
  1242. package/src/resources/extensions/gsd/github-client.ts +0 -235
  1243. package/src/resources/extensions/gsd/mcp-server.ts +0 -108
  1244. package/src/resources/extensions/gsd/tests/activity-log-prune.test.ts +0 -297
  1245. package/src/resources/extensions/gsd/tests/activity-log-save.test.ts +0 -127
  1246. package/src/resources/extensions/gsd/tests/agent-end-provider-error.test.ts +0 -110
  1247. package/src/resources/extensions/gsd/tests/auto-draft-pause.test.ts +0 -115
  1248. package/src/resources/extensions/gsd/tests/complexity-routing.test.ts +0 -294
  1249. package/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts +0 -202
  1250. package/src/resources/extensions/gsd/tests/metrics-io.test.ts +0 -176
  1251. package/src/resources/extensions/gsd/tests/network-error-fallback.test.ts +0 -104
  1252. package/src/resources/extensions/gsd/tests/preferences-git.test.ts +0 -120
  1253. package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -226
  1254. package/src/resources/extensions/gsd/tests/preferences-mode.test.ts +0 -110
  1255. package/src/resources/extensions/gsd/tests/preferences-models.test.ts +0 -207
  1256. package/src/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +0 -183
  1257. package/src/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +0 -168
  1258. package/src/resources/extensions/shared/bundled-extension-paths.ts +0 -11
  1259. package/src/resources/extensions/shared/progress-widget.ts +0 -282
  1260. package/src/resources/extensions/shared/thinking-widget.ts +0 -107
@@ -1 +1 @@
1
- {"version":3,"file":"hashline.test.js","sourceRoot":"","sources":["../../../src/core/tools/hashline.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport {\n\tcomputeLineHash,\n\tformatHashLines,\n\tformatLineTag,\n\tparseTag,\n\tvalidateLineRef,\n\tapplyHashlineEdits,\n\tHashlineMismatchError,\n\thashlineParseText,\n\tstripNewLinePrefixes,\n\ttype HashlineEdit,\n\ttype Anchor,\n} from \"./hashline.js\";\n\nfunction makeTag(line: number, content: string): Anchor {\n\treturn parseTag(formatLineTag(line, content));\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// computeLineHash\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"computeLineHash\", () => {\n\tit(\"returns 2-character hash string from nibble alphabet\", () => {\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.match(hash, /^[ZPMQVRWSNKTXJBYH]{2}$/);\n\t});\n\n\tit(\"same content at same line produces same hash\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"hello\");\n\t\tassert.equal(a, b);\n\t});\n\n\tit(\"different content produces different hash\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"world\");\n\t\tassert.notEqual(a, b);\n\t});\n\n\tit(\"empty line produces valid hash\", () => {\n\t\tconst hash = computeLineHash(1, \"\");\n\t\tassert.match(hash, /^[ZPMQVRWSNKTXJBYH]{2}$/);\n\t});\n\n\tit(\"uses line number for symbol-only lines\", () => {\n\t\tconst a = computeLineHash(1, \"***\");\n\t\tconst b = computeLineHash(2, \"***\");\n\t\tassert.notEqual(a, b);\n\t});\n\n\tit(\"does not use line number for alphanumeric lines\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(2, \"hello\");\n\t\tassert.equal(a, b);\n\t});\n\n\tit(\"strips trailing whitespace before hashing\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"hello \");\n\t\tassert.equal(a, b);\n\t});\n\n\tit(\"strips CR before hashing\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"hello\\r\");\n\t\tassert.equal(a, b);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// formatHashLines\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"formatHashLines\", () => {\n\tit(\"formats single line\", () => {\n\t\tconst result = formatHashLines(\"hello\");\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.equal(result, `1#${hash}:hello`);\n\t});\n\n\tit(\"formats multiple lines with 1-indexed numbers\", () => {\n\t\tconst result = formatHashLines(\"foo\\nbar\\nbaz\");\n\t\tconst lines = result.split(\"\\n\");\n\t\tassert.equal(lines.length, 3);\n\t\tassert.ok(lines[0].startsWith(\"1#\"));\n\t\tassert.ok(lines[1].startsWith(\"2#\"));\n\t\tassert.ok(lines[2].startsWith(\"3#\"));\n\t});\n\n\tit(\"respects custom startLine\", () => {\n\t\tconst result = formatHashLines(\"foo\\nbar\", 10);\n\t\tconst lines = result.split(\"\\n\");\n\t\tassert.ok(lines[0].startsWith(\"10#\"));\n\t\tassert.ok(lines[1].startsWith(\"11#\"));\n\t});\n\n\tit(\"handles empty lines in content\", () => {\n\t\tconst result = formatHashLines(\"foo\\n\\nbar\");\n\t\tconst lines = result.split(\"\\n\");\n\t\tassert.equal(lines.length, 3);\n\t\tassert.match(lines[1], /^2#[ZPMQVRWSNKTXJBYH]{2}:$/);\n\t});\n\n\tit(\"round-trips with computeLineHash\", () => {\n\t\tconst content = \"function hello() {\\n return 42;\\n}\";\n\t\tconst formatted = formatHashLines(content);\n\t\tconst lines = formatted.split(\"\\n\");\n\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst match = lines[i].match(/^(\\d+)#([ZPMQVRWSNKTXJBYH]{2}):(.*)$/);\n\t\t\tassert.ok(match, `Line ${i} should match hashline format`);\n\t\t\tconst lineNum = Number.parseInt(match![1], 10);\n\t\t\tconst hash = match![2];\n\t\t\tconst lineContent = match![3];\n\t\t\tassert.equal(computeLineHash(lineNum, lineContent), hash);\n\t\t}\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// parseTag\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"parseTag\", () => {\n\tit(\"parses valid reference\", () => {\n\t\tconst ref = parseTag(\"5#QQ\");\n\t\tassert.deepEqual(ref, { line: 5, hash: \"QQ\" });\n\t});\n\n\tit(\"rejects single-character hash\", () => {\n\t\tassert.throws(() => parseTag(\"1#Q\"), /Invalid line reference/);\n\t});\n\n\tit(\"parses long hash by taking strict 2-char prefix\", () => {\n\t\tconst ref = parseTag(\"100#QQQQ\");\n\t\tassert.deepEqual(ref, { line: 100, hash: \"QQ\" });\n\t});\n\n\tit(\"rejects missing separator\", () => {\n\t\tassert.throws(() => parseTag(\"5QQ\"), /Invalid line reference/);\n\t});\n\n\tit(\"rejects non-numeric line\", () => {\n\t\tassert.throws(() => parseTag(\"abc#Q\"), /Invalid line reference/);\n\t});\n\n\tit(\"rejects line number 0\", () => {\n\t\tassert.throws(() => parseTag(\"0#QQ\"), /Line number must be >= 1/);\n\t});\n\n\tit(\"rejects empty string\", () => {\n\t\tassert.throws(() => parseTag(\"\"), /Invalid line reference/);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// validateLineRef\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"validateLineRef\", () => {\n\tit(\"accepts valid ref with matching hash\", () => {\n\t\tconst lines = [\"hello\", \"world\"];\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.doesNotThrow(() => validateLineRef({ line: 1, hash }, lines));\n\t});\n\n\tit(\"rejects line out of range\", () => {\n\t\tconst lines = [\"hello\"];\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.throws(() => validateLineRef({ line: 2, hash }, lines), /does not exist/);\n\t});\n\n\tit(\"rejects mismatched hash\", () => {\n\t\tconst lines = [\"hello\", \"world\"];\n\t\tassert.throws(() => validateLineRef({ line: 1, hash: \"ZZ\" }, lines), /has changed since last read/);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — replace\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — replace\", () => {\n\tit(\"replaces single line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), lines: [\"BBB\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nBBB\\nccc\");\n\t\tassert.equal(result.firstChangedLine, 2);\n\t});\n\n\tit(\"range replace (shrink)\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), end: makeTag(3, \"ccc\"), lines: [\"ONE\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nONE\\nddd\");\n\t});\n\n\tit(\"range replace (same count)\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{ op: \"replace\", pos: makeTag(2, \"bbb\"), end: makeTag(3, \"ccc\"), lines: [\"XXX\", \"YYY\"] },\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nXXX\\nYYY\\nddd\");\n\t});\n\n\tit(\"replaces first line\", () => {\n\t\tconst content = \"first\\nsecond\\nthird\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(1, \"first\"), lines: [\"FIRST\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"FIRST\\nsecond\\nthird\");\n\t});\n\n\tit(\"replaces last line\", () => {\n\t\tconst content = \"first\\nsecond\\nthird\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(3, \"third\"), lines: [\"THIRD\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"first\\nsecond\\nTHIRD\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — delete\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — delete\", () => {\n\tit(\"deletes single line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), lines: [] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nccc\");\n\t});\n\n\tit(\"deletes range of lines\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), end: makeTag(3, \"ccc\"), lines: [] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nddd\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — append\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — append\", () => {\n\tit(\"inserts after a line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"append\", pos: makeTag(1, \"aaa\"), lines: [\"NEW\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nNEW\\nbbb\\nccc\");\n\t\tassert.equal(result.firstChangedLine, 2);\n\t});\n\n\tit(\"inserts multiple lines\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"append\", pos: makeTag(1, \"aaa\"), lines: [\"x\", \"y\", \"z\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nx\\ny\\nz\\nbbb\");\n\t});\n\n\tit(\"inserts at EOF without anchors\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits = [{ op: \"append\", lines: [\"NEW\"] }] as unknown as HashlineEdit[];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nbbb\\nNEW\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — prepend\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — prepend\", () => {\n\tit(\"inserts before a line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"prepend\", pos: makeTag(2, \"bbb\"), lines: [\"NEW\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nNEW\\nbbb\\nccc\");\n\t});\n\n\tit(\"prepends at BOF without anchor\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits = [{ op: \"prepend\", lines: [\"NEW\"] }] as unknown as HashlineEdit[];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"NEW\\naaa\\nbbb\");\n\t});\n\n\tit(\"insert before and insert after at same line produce correct order\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{ op: \"prepend\", pos: makeTag(2, \"bbb\"), lines: [\"BEFORE\"] },\n\t\t\t{ op: \"append\", pos: makeTag(2, \"bbb\"), lines: [\"AFTER\"] },\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nBEFORE\\nbbb\\nAFTER\\nccc\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — multiple edits\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — multiple edits\", () => {\n\tit(\"applies two non-overlapping replaces (bottom-up safe)\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\\neee\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{ op: \"replace\", pos: makeTag(2, \"bbb\"), lines: [\"BBB\"] },\n\t\t\t{ op: \"replace\", pos: makeTag(4, \"ddd\"), lines: [\"DDD\"] },\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nBBB\\nccc\\nDDD\\neee\");\n\t});\n\n\tit(\"empty edits array is a no-op\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst result = applyHashlineEdits(content, []);\n\t\tassert.equal(result.lines, content);\n\t\tassert.equal(result.firstChangedLine, undefined);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — error cases\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — errors\", () => {\n\tit(\"rejects stale hash\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: parseTag(\"2#QQ\"), lines: [\"BBB\"] }];\n\t\tassert.throws(() => applyHashlineEdits(content, edits), (err: any) => err instanceof HashlineMismatchError);\n\t});\n\n\tit(\"stale hash error shows >>> markers with correct hashes\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\\neee\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: parseTag(\"2#QQ\"), lines: [\"BBB\"] }];\n\n\t\ttry {\n\t\t\tapplyHashlineEdits(content, edits);\n\t\t\tassert.fail(\"should have thrown\");\n\t\t} catch (err: any) {\n\t\t\tassert.ok(err instanceof HashlineMismatchError);\n\t\t\tassert.ok(err.message.includes(\">>>\"));\n\t\t\tconst correctHash = computeLineHash(2, \"bbb\");\n\t\t\tassert.ok(err.message.includes(`2#${correctHash}:bbb`));\n\t\t}\n\t});\n\n\tit(\"rejects out-of-range line\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: parseTag(\"10#ZZ\"), lines: [\"X\"] }];\n\t\tassert.throws(() => applyHashlineEdits(content, edits), /does not exist/);\n\t});\n\n\tit(\"rejects range with start > end\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\\neee\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(5, \"eee\"), end: makeTag(2, \"bbb\"), lines: [\"X\"] }];\n\t\tassert.throws(() => applyHashlineEdits(content, edits));\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// stripNewLinePrefixes\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"stripNewLinePrefixes\", () => {\n\tit(\"strips leading '+' when majority of lines start with '+'\", () => {\n\t\tconst lines = [\"+line one\", \"+line two\", \"+line three\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"line one\", \"line two\", \"line three\"]);\n\t});\n\n\tit(\"does NOT strip leading '-' from Markdown list items\", () => {\n\t\tconst lines = [\"- item one\", \"- item two\", \"- item three\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"- item one\", \"- item two\", \"- item three\"]);\n\t});\n\n\tit(\"strips hashline prefixes when all non-empty lines carry them\", () => {\n\t\tconst lines = [\"1#WQ:foo\", \"2#TZ:bar\", \"3#HX:baz\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"foo\", \"bar\", \"baz\"]);\n\t});\n\n\tit(\"does NOT strip hashline prefixes when any non-empty line is plain content\", () => {\n\t\tconst lines = [\"1#WQ:foo\", \"bar\", \"3#HX:baz\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"1#WQ:foo\", \"bar\", \"3#HX:baz\"]);\n\t});\n\n\tit(\"does NOT strip comment lines that look like hashline prefixes\", () => {\n\t\tassert.deepEqual(stripNewLinePrefixes([\" # Note: Using a fixed version\"]), [\" # Note: Using a fixed version\"]);\n\t\tassert.deepEqual(stripNewLinePrefixes([\"# TODO: remove this\"]), [\"# TODO: remove this\"]);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// hashlineParseText\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"hashlineParseText\", () => {\n\tit(\"returns empty array for null\", () => {\n\t\tassert.deepEqual(hashlineParseText(null), []);\n\t});\n\n\tit(\"returns array input as-is when no strip heuristic applies\", () => {\n\t\tconst input = [\"- [x] done\", \"- [ ] todo\"];\n\t\tassert.equal(hashlineParseText(input), input);\n\t});\n\n\tit(\"splits string on newline and preserves Markdown list '-' prefix\", () => {\n\t\tconst result = hashlineParseText(\"- item one\\n- item two\\n- item three\");\n\t\tassert.deepEqual(result, [\"- item one\", \"- item two\", \"- item three\"]);\n\t});\n\n\tit(\"strips '+' diff markers from string input\", () => {\n\t\tconst result = hashlineParseText(\"+line one\\n+line two\");\n\t\tassert.deepEqual(result, [\"line one\", \"line two\"]);\n\t});\n\n\tit(\"still strips trailing empty from string split\", () => {\n\t\tassert.deepEqual(hashlineParseText(\"foo\\n\"), [\"foo\"]);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Auto-correction heuristics\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — heuristics\", () => {\n\tit(\"auto-corrects off-by-one range end that duplicates a closing brace\", () => {\n\t\tconst content = \"if (ok) {\\n run();\\n}\\nafter();\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{\n\t\t\t\top: \"replace\",\n\t\t\t\tpos: makeTag(1, \"if (ok) {\"),\n\t\t\t\tend: makeTag(2, \" run();\"),\n\t\t\t\tlines: [\"if (ok) {\", \" runSafe();\", \"}\"],\n\t\t\t},\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"if (ok) {\\n runSafe();\\n}\\nafter();\");\n\t\tassert.ok(result.warnings);\n\t\tassert.equal(result.warnings!.length, 1);\n\t\tassert.ok(result.warnings![0].includes(\"Auto-corrected range replace\"));\n\t});\n\n\tit(\"auto-corrects escaped tab indentation\", () => {\n\t\tconst content = \"root\\n\\tchild\\n\\t\\tvalue\\nend\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(3, \"\\t\\tvalue\"), lines: [\"\\\\t\\\\treplaced\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"root\\n\\tchild\\n\\t\\treplaced\\nend\");\n\t\tassert.ok(result.warnings);\n\t\tassert.ok(result.warnings![0].includes(\"Auto-corrected escaped tab indentation\"));\n\t});\n});\n"]}
1
+ {"version":3,"file":"hashline.test.js","sourceRoot":"","sources":["../../../src/core/tools/hashline.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport {\n\tcomputeLineHash,\n\tformatHashLines,\n\tformatLineTag,\n\tparseTag,\n\tvalidateLineRef,\n\tapplyHashlineEdits,\n\tHashlineMismatchError,\n\tparseHashlineText,\n\tstripNewLinePrefixes,\n\ttype HashlineEdit,\n\ttype Anchor,\n} from \"./hashline.js\";\n\nfunction makeTag(line: number, content: string): Anchor {\n\treturn parseTag(formatLineTag(line, content));\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// computeLineHash\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"computeLineHash\", () => {\n\tit(\"returns 2-character hash string from nibble alphabet\", () => {\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.match(hash, /^[ZPMQVRWSNKTXJBYH]{2}$/);\n\t});\n\n\tit(\"same content at same line produces same hash\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"hello\");\n\t\tassert.equal(a, b);\n\t});\n\n\tit(\"different content produces different hash\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"world\");\n\t\tassert.notEqual(a, b);\n\t});\n\n\tit(\"empty line produces valid hash\", () => {\n\t\tconst hash = computeLineHash(1, \"\");\n\t\tassert.match(hash, /^[ZPMQVRWSNKTXJBYH]{2}$/);\n\t});\n\n\tit(\"uses line number for symbol-only lines\", () => {\n\t\tconst a = computeLineHash(1, \"***\");\n\t\tconst b = computeLineHash(2, \"***\");\n\t\tassert.notEqual(a, b);\n\t});\n\n\tit(\"does not use line number for alphanumeric lines\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(2, \"hello\");\n\t\tassert.equal(a, b);\n\t});\n\n\tit(\"strips trailing whitespace before hashing\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"hello \");\n\t\tassert.equal(a, b);\n\t});\n\n\tit(\"strips CR before hashing\", () => {\n\t\tconst a = computeLineHash(1, \"hello\");\n\t\tconst b = computeLineHash(1, \"hello\\r\");\n\t\tassert.equal(a, b);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// formatHashLines\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"formatHashLines\", () => {\n\tit(\"formats single line\", () => {\n\t\tconst result = formatHashLines(\"hello\");\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.equal(result, `1#${hash}:hello`);\n\t});\n\n\tit(\"formats multiple lines with 1-indexed numbers\", () => {\n\t\tconst result = formatHashLines(\"foo\\nbar\\nbaz\");\n\t\tconst lines = result.split(\"\\n\");\n\t\tassert.equal(lines.length, 3);\n\t\tassert.ok(lines[0].startsWith(\"1#\"));\n\t\tassert.ok(lines[1].startsWith(\"2#\"));\n\t\tassert.ok(lines[2].startsWith(\"3#\"));\n\t});\n\n\tit(\"respects custom startLine\", () => {\n\t\tconst result = formatHashLines(\"foo\\nbar\", 10);\n\t\tconst lines = result.split(\"\\n\");\n\t\tassert.ok(lines[0].startsWith(\"10#\"));\n\t\tassert.ok(lines[1].startsWith(\"11#\"));\n\t});\n\n\tit(\"handles empty lines in content\", () => {\n\t\tconst result = formatHashLines(\"foo\\n\\nbar\");\n\t\tconst lines = result.split(\"\\n\");\n\t\tassert.equal(lines.length, 3);\n\t\tassert.match(lines[1], /^2#[ZPMQVRWSNKTXJBYH]{2}:$/);\n\t});\n\n\tit(\"round-trips with computeLineHash\", () => {\n\t\tconst content = \"function hello() {\\n return 42;\\n}\";\n\t\tconst formatted = formatHashLines(content);\n\t\tconst lines = formatted.split(\"\\n\");\n\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst match = lines[i].match(/^(\\d+)#([ZPMQVRWSNKTXJBYH]{2}):(.*)$/);\n\t\t\tassert.ok(match, `Line ${i} should match hashline format`);\n\t\t\tconst lineNum = Number.parseInt(match![1], 10);\n\t\t\tconst hash = match![2];\n\t\t\tconst lineContent = match![3];\n\t\t\tassert.equal(computeLineHash(lineNum, lineContent), hash);\n\t\t}\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// parseTag\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"parseTag\", () => {\n\tit(\"parses valid reference\", () => {\n\t\tconst ref = parseTag(\"5#QQ\");\n\t\tassert.deepEqual(ref, { line: 5, hash: \"QQ\" });\n\t});\n\n\tit(\"rejects single-character hash\", () => {\n\t\tassert.throws(() => parseTag(\"1#Q\"), /Invalid line reference/);\n\t});\n\n\tit(\"parses long hash by taking strict 2-char prefix\", () => {\n\t\tconst ref = parseTag(\"100#QQQQ\");\n\t\tassert.deepEqual(ref, { line: 100, hash: \"QQ\" });\n\t});\n\n\tit(\"rejects missing separator\", () => {\n\t\tassert.throws(() => parseTag(\"5QQ\"), /Invalid line reference/);\n\t});\n\n\tit(\"rejects non-numeric line\", () => {\n\t\tassert.throws(() => parseTag(\"abc#Q\"), /Invalid line reference/);\n\t});\n\n\tit(\"rejects line number 0\", () => {\n\t\tassert.throws(() => parseTag(\"0#QQ\"), /Line number must be >= 1/);\n\t});\n\n\tit(\"rejects empty string\", () => {\n\t\tassert.throws(() => parseTag(\"\"), /Invalid line reference/);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// validateLineRef\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"validateLineRef\", () => {\n\tit(\"accepts valid ref with matching hash\", () => {\n\t\tconst lines = [\"hello\", \"world\"];\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.doesNotThrow(() => validateLineRef({ line: 1, hash }, lines));\n\t});\n\n\tit(\"rejects line out of range\", () => {\n\t\tconst lines = [\"hello\"];\n\t\tconst hash = computeLineHash(1, \"hello\");\n\t\tassert.throws(() => validateLineRef({ line: 2, hash }, lines), /does not exist/);\n\t});\n\n\tit(\"rejects mismatched hash\", () => {\n\t\tconst lines = [\"hello\", \"world\"];\n\t\tassert.throws(() => validateLineRef({ line: 1, hash: \"ZZ\" }, lines), /has changed since last read/);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — replace\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — replace\", () => {\n\tit(\"replaces single line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), lines: [\"BBB\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nBBB\\nccc\");\n\t\tassert.equal(result.firstChangedLine, 2);\n\t});\n\n\tit(\"range replace (shrink)\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), end: makeTag(3, \"ccc\"), lines: [\"ONE\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nONE\\nddd\");\n\t});\n\n\tit(\"range replace (same count)\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{ op: \"replace\", pos: makeTag(2, \"bbb\"), end: makeTag(3, \"ccc\"), lines: [\"XXX\", \"YYY\"] },\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nXXX\\nYYY\\nddd\");\n\t});\n\n\tit(\"replaces first line\", () => {\n\t\tconst content = \"first\\nsecond\\nthird\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(1, \"first\"), lines: [\"FIRST\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"FIRST\\nsecond\\nthird\");\n\t});\n\n\tit(\"replaces last line\", () => {\n\t\tconst content = \"first\\nsecond\\nthird\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(3, \"third\"), lines: [\"THIRD\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"first\\nsecond\\nTHIRD\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — delete\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — delete\", () => {\n\tit(\"deletes single line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), lines: [] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nccc\");\n\t});\n\n\tit(\"deletes range of lines\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(2, \"bbb\"), end: makeTag(3, \"ccc\"), lines: [] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nddd\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — append\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — append\", () => {\n\tit(\"inserts after a line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"append\", pos: makeTag(1, \"aaa\"), lines: [\"NEW\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nNEW\\nbbb\\nccc\");\n\t\tassert.equal(result.firstChangedLine, 2);\n\t});\n\n\tit(\"inserts multiple lines\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"append\", pos: makeTag(1, \"aaa\"), lines: [\"x\", \"y\", \"z\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nx\\ny\\nz\\nbbb\");\n\t});\n\n\tit(\"inserts at EOF without anchors\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits = [{ op: \"append\", lines: [\"NEW\"] }] as unknown as HashlineEdit[];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nbbb\\nNEW\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — prepend\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — prepend\", () => {\n\tit(\"inserts before a line\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"prepend\", pos: makeTag(2, \"bbb\"), lines: [\"NEW\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nNEW\\nbbb\\nccc\");\n\t});\n\n\tit(\"prepends at BOF without anchor\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits = [{ op: \"prepend\", lines: [\"NEW\"] }] as unknown as HashlineEdit[];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"NEW\\naaa\\nbbb\");\n\t});\n\n\tit(\"insert before and insert after at same line produce correct order\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{ op: \"prepend\", pos: makeTag(2, \"bbb\"), lines: [\"BEFORE\"] },\n\t\t\t{ op: \"append\", pos: makeTag(2, \"bbb\"), lines: [\"AFTER\"] },\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nBEFORE\\nbbb\\nAFTER\\nccc\");\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — multiple edits\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — multiple edits\", () => {\n\tit(\"applies two non-overlapping replaces (bottom-up safe)\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\\neee\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{ op: \"replace\", pos: makeTag(2, \"bbb\"), lines: [\"BBB\"] },\n\t\t\t{ op: \"replace\", pos: makeTag(4, \"ddd\"), lines: [\"DDD\"] },\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"aaa\\nBBB\\nccc\\nDDD\\neee\");\n\t});\n\n\tit(\"empty edits array is a no-op\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst result = applyHashlineEdits(content, []);\n\t\tassert.equal(result.lines, content);\n\t\tassert.equal(result.firstChangedLine, undefined);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// applyHashlineEdits — error cases\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — errors\", () => {\n\tit(\"rejects stale hash\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: parseTag(\"2#QQ\"), lines: [\"BBB\"] }];\n\t\tassert.throws(() => applyHashlineEdits(content, edits), (err: any) => err instanceof HashlineMismatchError);\n\t});\n\n\tit(\"stale hash error shows >>> markers with correct hashes\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\\neee\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: parseTag(\"2#QQ\"), lines: [\"BBB\"] }];\n\n\t\ttry {\n\t\t\tapplyHashlineEdits(content, edits);\n\t\t\tassert.fail(\"should have thrown\");\n\t\t} catch (err: any) {\n\t\t\tassert.ok(err instanceof HashlineMismatchError);\n\t\t\tassert.ok(err.message.includes(\">>>\"));\n\t\t\tconst correctHash = computeLineHash(2, \"bbb\");\n\t\t\tassert.ok(err.message.includes(`2#${correctHash}:bbb`));\n\t\t}\n\t});\n\n\tit(\"rejects out-of-range line\", () => {\n\t\tconst content = \"aaa\\nbbb\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: parseTag(\"10#ZZ\"), lines: [\"X\"] }];\n\t\tassert.throws(() => applyHashlineEdits(content, edits), /does not exist/);\n\t});\n\n\tit(\"rejects range with start > end\", () => {\n\t\tconst content = \"aaa\\nbbb\\nccc\\nddd\\neee\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(5, \"eee\"), end: makeTag(2, \"bbb\"), lines: [\"X\"] }];\n\t\tassert.throws(() => applyHashlineEdits(content, edits));\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// stripNewLinePrefixes\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"stripNewLinePrefixes\", () => {\n\tit(\"strips leading '+' when majority of lines start with '+'\", () => {\n\t\tconst lines = [\"+line one\", \"+line two\", \"+line three\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"line one\", \"line two\", \"line three\"]);\n\t});\n\n\tit(\"does NOT strip leading '-' from Markdown list items\", () => {\n\t\tconst lines = [\"- item one\", \"- item two\", \"- item three\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"- item one\", \"- item two\", \"- item three\"]);\n\t});\n\n\tit(\"strips hashline prefixes when all non-empty lines carry them\", () => {\n\t\tconst lines = [\"1#WQ:foo\", \"2#TZ:bar\", \"3#HX:baz\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"foo\", \"bar\", \"baz\"]);\n\t});\n\n\tit(\"does NOT strip hashline prefixes when any non-empty line is plain content\", () => {\n\t\tconst lines = [\"1#WQ:foo\", \"bar\", \"3#HX:baz\"];\n\t\tassert.deepEqual(stripNewLinePrefixes(lines), [\"1#WQ:foo\", \"bar\", \"3#HX:baz\"]);\n\t});\n\n\tit(\"does NOT strip comment lines that look like hashline prefixes\", () => {\n\t\tassert.deepEqual(stripNewLinePrefixes([\" # Note: Using a fixed version\"]), [\" # Note: Using a fixed version\"]);\n\t\tassert.deepEqual(stripNewLinePrefixes([\"# TODO: remove this\"]), [\"# TODO: remove this\"]);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// parseHashlineText\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"parseHashlineText\", () => {\n\tit(\"returns empty array for null\", () => {\n\t\tassert.deepEqual(parseHashlineText(null), []);\n\t});\n\n\tit(\"returns array input as-is when no strip heuristic applies\", () => {\n\t\tconst input = [\"- [x] done\", \"- [ ] todo\"];\n\t\tassert.equal(parseHashlineText(input), input);\n\t});\n\n\tit(\"splits string on newline and preserves Markdown list '-' prefix\", () => {\n\t\tconst result = parseHashlineText(\"- item one\\n- item two\\n- item three\");\n\t\tassert.deepEqual(result, [\"- item one\", \"- item two\", \"- item three\"]);\n\t});\n\n\tit(\"strips '+' diff markers from string input\", () => {\n\t\tconst result = parseHashlineText(\"+line one\\n+line two\");\n\t\tassert.deepEqual(result, [\"line one\", \"line two\"]);\n\t});\n\n\tit(\"still strips trailing empty from string split\", () => {\n\t\tassert.deepEqual(parseHashlineText(\"foo\\n\"), [\"foo\"]);\n\t});\n});\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Auto-correction heuristics\n// ═══════════════════════════════════════════════════════════════════════════\n\ndescribe(\"applyHashlineEdits — heuristics\", () => {\n\tit(\"auto-corrects off-by-one range end that duplicates a closing brace\", () => {\n\t\tconst content = \"if (ok) {\\n run();\\n}\\nafter();\";\n\t\tconst edits: HashlineEdit[] = [\n\t\t\t{\n\t\t\t\top: \"replace\",\n\t\t\t\tpos: makeTag(1, \"if (ok) {\"),\n\t\t\t\tend: makeTag(2, \" run();\"),\n\t\t\t\tlines: [\"if (ok) {\", \" runSafe();\", \"}\"],\n\t\t\t},\n\t\t];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"if (ok) {\\n runSafe();\\n}\\nafter();\");\n\t\tassert.ok(result.warnings);\n\t\tassert.equal(result.warnings!.length, 1);\n\t\tassert.ok(result.warnings![0].includes(\"Auto-corrected range replace\"));\n\t});\n\n\tit(\"auto-corrects escaped tab indentation\", () => {\n\t\tconst content = \"root\\n\\tchild\\n\\t\\tvalue\\nend\";\n\t\tconst edits: HashlineEdit[] = [{ op: \"replace\", pos: makeTag(3, \"\\t\\tvalue\"), lines: [\"\\\\t\\\\treplaced\"] }];\n\t\tconst result = applyHashlineEdits(content, edits);\n\t\tassert.equal(result.lines, \"root\\n\\tchild\\n\\t\\treplaced\\nend\");\n\t\tassert.ok(result.warnings);\n\t\tassert.ok(result.warnings![0].includes(\"Auto-corrected escaped tab indentation\"));\n\t});\n});\n"]}
@@ -9,7 +9,7 @@ export { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationOption
9
9
  export { createWriteTool, type WriteOperations, type WriteToolInput, type WriteToolOptions, writeTool, } from "./write.js";
10
10
  export { createHashlineEditTool, type HashlineEditInput, type HashlineEditItem, type HashlineEditOperations, type HashlineEditToolDetails, type HashlineEditToolOptions, hashlineEditTool, } from "./hashline-edit.js";
11
11
  export { createHashlineReadTool, type HashlineReadOperations, type HashlineReadToolDetails, type HashlineReadToolInput, type HashlineReadToolOptions, hashlineReadTool, } from "./hashline-read.js";
12
- export { type Anchor, applyHashlineEdits, computeLineHash, formatHashLines, formatLineTag, type HashlineEdit, HashlineMismatchError, hashlineParseText, type HashMismatch, parseTag, stripNewLinePrefixes, validateLineRef, } from "./hashline.js";
12
+ export { type Anchor, applyHashlineEdits, computeLineHash, formatHashLines, formatLineTag, type HashlineEdit, HashlineMismatchError, parseHashlineText, type HashMismatch, parseTag, stripNewLinePrefixes, validateLineRef, } from "./hashline.js";
13
13
  export { createLspTool, type LspToolDetails, lspSchema, lspTool, } from "../lsp/index.js";
14
14
  export type { LspServerStatus } from "../lsp/client.js";
15
15
  import type { AgentTool } from "@gsd/pi-agent-core";
@@ -9,7 +9,7 @@ export { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, truncateHead, truncat
9
9
  export { createWriteTool, writeTool, } from "./write.js";
10
10
  export { createHashlineEditTool, hashlineEditTool, } from "./hashline-edit.js";
11
11
  export { createHashlineReadTool, hashlineReadTool, } from "./hashline-read.js";
12
- export { applyHashlineEdits, computeLineHash, formatHashLines, formatLineTag, HashlineMismatchError, hashlineParseText, parseTag, stripNewLinePrefixes, validateLineRef, } from "./hashline.js";
12
+ export { applyHashlineEdits, computeLineHash, formatHashLines, formatLineTag, HashlineMismatchError, parseHashlineText, parseTag, stripNewLinePrefixes, validateLineRef, } from "./hashline.js";
13
13
  export { createLspTool, lspSchema, lspTool, } from "../lsp/index.js";
14
14
  import { bashTool, createBashTool } from "./bash.js";
15
15
  import { createEditTool, editTool } from "./edit.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\tcreateBashTool,\n\trewriteBackgroundCommand,\n} from \"./bash.js\";\nexport {\n\ttype BashInterceptorRule,\n\tcheckBashInterception,\n\ttype CompiledInterceptor,\n\tcompileInterceptor,\n\tDEFAULT_BASH_INTERCEPTOR_RULES,\n\ttype InterceptionResult,\n} from \"./bash-interceptor.js\";\nexport {\n\tcreateEditTool,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n} from \"./edit.js\";\nexport {\n\tcreateFindTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n} from \"./find.js\";\nexport {\n\tcreateGrepTool,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n} from \"./grep.js\";\nexport {\n\tcreateLsTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n} from \"./ls.js\";\nexport {\n\tcreateReadTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n} from \"./read.js\";\nexport {\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\tformatSize,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n} from \"./truncate.js\";\nexport {\n\tcreateWriteTool,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n} from \"./write.js\";\nexport {\n\tcreateHashlineEditTool,\n\ttype HashlineEditInput,\n\ttype HashlineEditItem,\n\ttype HashlineEditOperations,\n\ttype HashlineEditToolDetails,\n\ttype HashlineEditToolOptions,\n\thashlineEditTool,\n} from \"./hashline-edit.js\";\nexport {\n\tcreateHashlineReadTool,\n\ttype HashlineReadOperations,\n\ttype HashlineReadToolDetails,\n\ttype HashlineReadToolInput,\n\ttype HashlineReadToolOptions,\n\thashlineReadTool,\n} from \"./hashline-read.js\";\nexport {\n\ttype Anchor,\n\tapplyHashlineEdits,\n\tcomputeLineHash,\n\tformatHashLines,\n\tformatLineTag,\n\ttype HashlineEdit,\n\tHashlineMismatchError,\n\thashlineParseText,\n\ttype HashMismatch,\n\tparseTag,\n\tstripNewLinePrefixes,\n\tvalidateLineRef,\n} from \"./hashline.js\";\nexport {\n\tcreateLspTool,\n\ttype LspToolDetails,\n\tlspSchema,\n\tlspTool,\n} from \"../lsp/index.js\";\nexport type { LspServerStatus } from \"../lsp/client.js\";\n\nimport type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { type BashToolOptions, bashTool, createBashTool } from \"./bash.js\";\nimport { createEditTool, editTool } from \"./edit.js\";\nimport { createFindTool, findTool } from \"./find.js\";\nimport { createGrepTool, grepTool } from \"./grep.js\";\nimport { createHashlineEditTool, hashlineEditTool } from \"./hashline-edit.js\";\nimport { createHashlineReadTool, hashlineReadTool } from \"./hashline-read.js\";\nimport { createLsTool, lsTool } from \"./ls.js\";\nimport { createReadTool, type ReadToolOptions, readTool } from \"./read.js\";\nimport { createWriteTool, writeTool } from \"./write.js\";\nimport { createLspTool, lspTool } from \"../lsp/index.js\";\n\n/** Tool type (AgentTool from pi-ai) */\nexport type Tool = AgentTool<any>;\n\n// Default tools for full access mode (using process.cwd())\nexport const codingTools: Tool[] = [readTool, bashTool, editTool, writeTool];\n\n// Read-only tools for exploration without modification (using process.cwd())\nexport const readOnlyTools: Tool[] = [readTool, grepTool, findTool, lsTool];\n\n// All available tools (using process.cwd())\nexport const allTools = {\n\tread: readTool,\n\tbash: bashTool,\n\tedit: editTool,\n\twrite: writeTool,\n\tgrep: grepTool,\n\tfind: findTool,\n\tls: lsTool,\n\tlsp: lspTool,\n\thashline_edit: hashlineEditTool,\n\thashline_read: hashlineReadTool,\n};\n\n// Hashline-mode coding tools — read with hash anchors, edit with hash references\nexport const hashlineCodingTools: Tool[] = [hashlineReadTool, bashTool, hashlineEditTool, writeTool];\n\nexport type ToolName = keyof typeof allTools;\n\nexport interface ToolsOptions {\n\t/** Options for the read tool */\n\tread?: ReadToolOptions;\n\t/** Options for the bash tool */\n\tbash?: BashToolOptions;\n}\n\n/**\n * Create coding tools configured for a specific working directory.\n */\nexport function createCodingTools(cwd: string, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateReadTool(cwd, options?.read),\n\t\tcreateBashTool(cwd, options?.bash),\n\t\tcreateEditTool(cwd),\n\t\tcreateWriteTool(cwd),\n\t];\n}\n\n/**\n * Create read-only tools configured for a specific working directory.\n */\nexport function createReadOnlyTools(cwd: string, options?: ToolsOptions): Tool[] {\n\treturn [createReadTool(cwd, options?.read), createGrepTool(cwd), createFindTool(cwd), createLsTool(cwd)];\n}\n\n/**\n * Create all tools configured for a specific working directory.\n */\nexport function createAllTools(cwd: string, options?: ToolsOptions): Record<ToolName, Tool> {\n\treturn {\n\t\tread: createReadTool(cwd, options?.read),\n\t\tbash: createBashTool(cwd, options?.bash),\n\t\tedit: createEditTool(cwd),\n\t\twrite: createWriteTool(cwd),\n\t\tgrep: createGrepTool(cwd),\n\t\tfind: createFindTool(cwd),\n\t\tls: createLsTool(cwd),\n\t\tlsp: createLspTool(cwd),\n\t\thashline_edit: createHashlineEditTool(cwd),\n\t\thashline_read: createHashlineReadTool(cwd, options?.read),\n\t};\n}\n\n/**\n * Create hashline-mode coding tools configured for a specific working directory.\n * Uses hashline read (LINE#ID prefixed output) and hashline edit (hash-anchor based edits).\n */\nexport function createHashlineCodingTools(cwd: string, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateHashlineReadTool(cwd, options?.read),\n\t\tcreateBashTool(cwd, options?.bash),\n\t\tcreateHashlineEditTool(cwd),\n\t\tcreateWriteTool(cwd),\n\t];\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\tcreateBashTool,\n\trewriteBackgroundCommand,\n} from \"./bash.js\";\nexport {\n\ttype BashInterceptorRule,\n\tcheckBashInterception,\n\ttype CompiledInterceptor,\n\tcompileInterceptor,\n\tDEFAULT_BASH_INTERCEPTOR_RULES,\n\ttype InterceptionResult,\n} from \"./bash-interceptor.js\";\nexport {\n\tcreateEditTool,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n} from \"./edit.js\";\nexport {\n\tcreateFindTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n} from \"./find.js\";\nexport {\n\tcreateGrepTool,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n} from \"./grep.js\";\nexport {\n\tcreateLsTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n} from \"./ls.js\";\nexport {\n\tcreateReadTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n} from \"./read.js\";\nexport {\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\tformatSize,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n} from \"./truncate.js\";\nexport {\n\tcreateWriteTool,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n} from \"./write.js\";\nexport {\n\tcreateHashlineEditTool,\n\ttype HashlineEditInput,\n\ttype HashlineEditItem,\n\ttype HashlineEditOperations,\n\ttype HashlineEditToolDetails,\n\ttype HashlineEditToolOptions,\n\thashlineEditTool,\n} from \"./hashline-edit.js\";\nexport {\n\tcreateHashlineReadTool,\n\ttype HashlineReadOperations,\n\ttype HashlineReadToolDetails,\n\ttype HashlineReadToolInput,\n\ttype HashlineReadToolOptions,\n\thashlineReadTool,\n} from \"./hashline-read.js\";\nexport {\n\ttype Anchor,\n\tapplyHashlineEdits,\n\tcomputeLineHash,\n\tformatHashLines,\n\tformatLineTag,\n\ttype HashlineEdit,\n\tHashlineMismatchError,\n\tparseHashlineText,\n\ttype HashMismatch,\n\tparseTag,\n\tstripNewLinePrefixes,\n\tvalidateLineRef,\n} from \"./hashline.js\";\nexport {\n\tcreateLspTool,\n\ttype LspToolDetails,\n\tlspSchema,\n\tlspTool,\n} from \"../lsp/index.js\";\nexport type { LspServerStatus } from \"../lsp/client.js\";\n\nimport type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { type BashToolOptions, bashTool, createBashTool } from \"./bash.js\";\nimport { createEditTool, editTool } from \"./edit.js\";\nimport { createFindTool, findTool } from \"./find.js\";\nimport { createGrepTool, grepTool } from \"./grep.js\";\nimport { createHashlineEditTool, hashlineEditTool } from \"./hashline-edit.js\";\nimport { createHashlineReadTool, hashlineReadTool } from \"./hashline-read.js\";\nimport { createLsTool, lsTool } from \"./ls.js\";\nimport { createReadTool, type ReadToolOptions, readTool } from \"./read.js\";\nimport { createWriteTool, writeTool } from \"./write.js\";\nimport { createLspTool, lspTool } from \"../lsp/index.js\";\n\n/** Tool type (AgentTool from pi-ai) */\nexport type Tool = AgentTool<any>;\n\n// Default tools for full access mode (using process.cwd())\nexport const codingTools: Tool[] = [readTool, bashTool, editTool, writeTool];\n\n// Read-only tools for exploration without modification (using process.cwd())\nexport const readOnlyTools: Tool[] = [readTool, grepTool, findTool, lsTool];\n\n// All available tools (using process.cwd())\nexport const allTools = {\n\tread: readTool,\n\tbash: bashTool,\n\tedit: editTool,\n\twrite: writeTool,\n\tgrep: grepTool,\n\tfind: findTool,\n\tls: lsTool,\n\tlsp: lspTool,\n\thashline_edit: hashlineEditTool,\n\thashline_read: hashlineReadTool,\n};\n\n// Hashline-mode coding tools — read with hash anchors, edit with hash references\nexport const hashlineCodingTools: Tool[] = [hashlineReadTool, bashTool, hashlineEditTool, writeTool];\n\nexport type ToolName = keyof typeof allTools;\n\nexport interface ToolsOptions {\n\t/** Options for the read tool */\n\tread?: ReadToolOptions;\n\t/** Options for the bash tool */\n\tbash?: BashToolOptions;\n}\n\n/**\n * Create coding tools configured for a specific working directory.\n */\nexport function createCodingTools(cwd: string, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateReadTool(cwd, options?.read),\n\t\tcreateBashTool(cwd, options?.bash),\n\t\tcreateEditTool(cwd),\n\t\tcreateWriteTool(cwd),\n\t];\n}\n\n/**\n * Create read-only tools configured for a specific working directory.\n */\nexport function createReadOnlyTools(cwd: string, options?: ToolsOptions): Tool[] {\n\treturn [createReadTool(cwd, options?.read), createGrepTool(cwd), createFindTool(cwd), createLsTool(cwd)];\n}\n\n/**\n * Create all tools configured for a specific working directory.\n */\nexport function createAllTools(cwd: string, options?: ToolsOptions): Record<ToolName, Tool> {\n\treturn {\n\t\tread: createReadTool(cwd, options?.read),\n\t\tbash: createBashTool(cwd, options?.bash),\n\t\tedit: createEditTool(cwd),\n\t\twrite: createWriteTool(cwd),\n\t\tgrep: createGrepTool(cwd),\n\t\tfind: createFindTool(cwd),\n\t\tls: createLsTool(cwd),\n\t\tlsp: createLspTool(cwd),\n\t\thashline_edit: createHashlineEditTool(cwd),\n\t\thashline_read: createHashlineReadTool(cwd, options?.read),\n\t};\n}\n\n/**\n * Create hashline-mode coding tools configured for a specific working directory.\n * Uses hashline read (LINE#ID prefixed output) and hashline edit (hash-anchor based edits).\n */\nexport function createHashlineCodingTools(cwd: string, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateHashlineReadTool(cwd, options?.read),\n\t\tcreateBashTool(cwd, options?.bash),\n\t\tcreateHashlineEditTool(cwd),\n\t\tcreateWriteTool(cwd),\n\t];\n}\n"]}
@@ -1,3 +1,4 @@
1
+ export declare const UNICODE_SPACES: RegExp;
1
2
  export declare function expandPath(filePath: string): string;
2
3
  /**
3
4
  * Resolve a path relative to the given cwd.
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../src/core/tools/path-utils.ts"],"names":[],"mappings":"AAsCA,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CASnD;AAcD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgCrE"}
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../src/core/tools/path-utils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,QAAmD,CAAC;AAkC/E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CASnD;AAcD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgCrE"}
@@ -1,7 +1,7 @@
1
1
  import { accessSync, constants } from "node:fs";
2
2
  import * as os from "node:os";
3
3
  import { isAbsolute, resolve as resolvePath } from "node:path";
4
- const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
4
+ export const UNICODE_SPACES = /[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g;
5
5
  const NARROW_NO_BREAK_SPACE = "\u202F";
6
6
  function normalizeUnicodeSpaces(str) {
7
7
  return str.replace(UNICODE_SPACES, " ");
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../../src/core/tools/path-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants } from \"node:fs\";\nimport * as os from \"node:os\";\nimport { isAbsolute, resolve as resolvePath } from \"node:path\";\n\nconst UNICODE_SPACES = /[\\u00A0\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\nconst NARROW_NO_BREAK_SPACE = \"\\u202F\";\nfunction normalizeUnicodeSpaces(str: string): string {\n\treturn str.replace(UNICODE_SPACES, \" \");\n}\n\nfunction tryMacOSScreenshotPath(filePath: string): string {\n\treturn filePath.replace(/ (AM|PM)\\./g, `${NARROW_NO_BREAK_SPACE}$1.`);\n}\n\nfunction tryNFDVariant(filePath: string): string {\n\t// macOS stores filenames in NFD (decomposed) form, try converting user input to NFD\n\treturn filePath.normalize(\"NFD\");\n}\n\nfunction tryCurlyQuoteVariant(filePath: string): string {\n\t// macOS uses U+2019 (right single quotation mark) in screenshot names like \"Capture d'écran\"\n\t// Users typically type U+0027 (straight apostrophe)\n\treturn filePath.replace(/'/g, \"\\u2019\");\n}\n\nfunction fileExists(filePath: string): boolean {\n\ttry {\n\t\taccessSync(filePath, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction normalizeAtPrefix(filePath: string): string {\n\treturn filePath.startsWith(\"@\") ? filePath.slice(1) : filePath;\n}\n\nexport function expandPath(filePath: string): string {\n\tconst normalized = normalizeUnicodeSpaces(normalizeAtPrefix(filePath));\n\tif (normalized === \"~\") {\n\t\treturn os.homedir();\n\t}\n\tif (normalized.startsWith(\"~/\")) {\n\t\treturn os.homedir() + normalized.slice(1);\n\t}\n\treturn normalized;\n}\n\n/**\n * On Windows, convert MSYS/MinGW-style paths (/c/Users/...) to native\n * drive letter paths (C:\\Users\\...). LLMs often produce these when given\n * Windows paths in prompts.\n */\nfunction normalizeMsysPath(p: string): string {\n\tif (process.platform === \"win32\" && /^\\/[a-zA-Z]\\//.test(p)) {\n\t\treturn `${p[1]!.toUpperCase()}:\\\\${p.slice(3).replace(/\\//g, \"\\\\\")}`;\n\t}\n\treturn p;\n}\n\n/**\n * Resolve a path relative to the given cwd.\n * Handles ~ expansion, MSYS-style paths on Windows, and absolute paths.\n */\nexport function resolveToCwd(filePath: string, cwd: string): string {\n\tconst expanded = normalizeMsysPath(expandPath(filePath));\n\tif (isAbsolute(expanded)) {\n\t\treturn expanded;\n\t}\n\treturn resolvePath(cwd, expanded);\n}\n\nexport function resolveReadPath(filePath: string, cwd: string): string {\n\tconst resolved = resolveToCwd(filePath, cwd);\n\n\tif (fileExists(resolved)) {\n\t\treturn resolved;\n\t}\n\n\t// Try macOS AM/PM variant (narrow no-break space before AM/PM)\n\tconst amPmVariant = tryMacOSScreenshotPath(resolved);\n\tif (amPmVariant !== resolved && fileExists(amPmVariant)) {\n\t\treturn amPmVariant;\n\t}\n\n\t// Try NFD variant (macOS stores filenames in NFD form)\n\tconst nfdVariant = tryNFDVariant(resolved);\n\tif (nfdVariant !== resolved && fileExists(nfdVariant)) {\n\t\treturn nfdVariant;\n\t}\n\n\t// Try curly quote variant (macOS uses U+2019 in screenshot names)\n\tconst curlyVariant = tryCurlyQuoteVariant(resolved);\n\tif (curlyVariant !== resolved && fileExists(curlyVariant)) {\n\t\treturn curlyVariant;\n\t}\n\n\t// Try combined NFD + curly quote (for French macOS screenshots like \"Capture d'écran\")\n\tconst nfdCurlyVariant = tryCurlyQuoteVariant(nfdVariant);\n\tif (nfdCurlyVariant !== resolved && fileExists(nfdCurlyVariant)) {\n\t\treturn nfdCurlyVariant;\n\t}\n\n\treturn resolved;\n}\n"]}
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../../src/core/tools/path-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants } from \"node:fs\";\nimport * as os from \"node:os\";\nimport { isAbsolute, resolve as resolvePath } from \"node:path\";\n\nexport const UNICODE_SPACES = /[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\nconst NARROW_NO_BREAK_SPACE = \"\\u202F\";\nfunction normalizeUnicodeSpaces(str: string): string {\n\treturn str.replace(UNICODE_SPACES, \" \");\n}\n\nfunction tryMacOSScreenshotPath(filePath: string): string {\n\treturn filePath.replace(/ (AM|PM)\\./g, `${NARROW_NO_BREAK_SPACE}$1.`);\n}\n\nfunction tryNFDVariant(filePath: string): string {\n\t// macOS stores filenames in NFD (decomposed) form, try converting user input to NFD\n\treturn filePath.normalize(\"NFD\");\n}\n\nfunction tryCurlyQuoteVariant(filePath: string): string {\n\t// macOS uses U+2019 (right single quotation mark) in screenshot names like \"Capture d'écran\"\n\t// Users typically type U+0027 (straight apostrophe)\n\treturn filePath.replace(/'/g, \"\\u2019\");\n}\n\nfunction fileExists(filePath: string): boolean {\n\ttry {\n\t\taccessSync(filePath, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction normalizeAtPrefix(filePath: string): string {\n\treturn filePath.startsWith(\"@\") ? filePath.slice(1) : filePath;\n}\n\nexport function expandPath(filePath: string): string {\n\tconst normalized = normalizeUnicodeSpaces(normalizeAtPrefix(filePath));\n\tif (normalized === \"~\") {\n\t\treturn os.homedir();\n\t}\n\tif (normalized.startsWith(\"~/\")) {\n\t\treturn os.homedir() + normalized.slice(1);\n\t}\n\treturn normalized;\n}\n\n/**\n * On Windows, convert MSYS/MinGW-style paths (/c/Users/...) to native\n * drive letter paths (C:\\Users\\...). LLMs often produce these when given\n * Windows paths in prompts.\n */\nfunction normalizeMsysPath(p: string): string {\n\tif (process.platform === \"win32\" && /^\\/[a-zA-Z]\\//.test(p)) {\n\t\treturn `${p[1]!.toUpperCase()}:\\\\${p.slice(3).replace(/\\//g, \"\\\\\")}`;\n\t}\n\treturn p;\n}\n\n/**\n * Resolve a path relative to the given cwd.\n * Handles ~ expansion, MSYS-style paths on Windows, and absolute paths.\n */\nexport function resolveToCwd(filePath: string, cwd: string): string {\n\tconst expanded = normalizeMsysPath(expandPath(filePath));\n\tif (isAbsolute(expanded)) {\n\t\treturn expanded;\n\t}\n\treturn resolvePath(cwd, expanded);\n}\n\nexport function resolveReadPath(filePath: string, cwd: string): string {\n\tconst resolved = resolveToCwd(filePath, cwd);\n\n\tif (fileExists(resolved)) {\n\t\treturn resolved;\n\t}\n\n\t// Try macOS AM/PM variant (narrow no-break space before AM/PM)\n\tconst amPmVariant = tryMacOSScreenshotPath(resolved);\n\tif (amPmVariant !== resolved && fileExists(amPmVariant)) {\n\t\treturn amPmVariant;\n\t}\n\n\t// Try NFD variant (macOS stores filenames in NFD form)\n\tconst nfdVariant = tryNFDVariant(resolved);\n\tif (nfdVariant !== resolved && fileExists(nfdVariant)) {\n\t\treturn nfdVariant;\n\t}\n\n\t// Try curly quote variant (macOS uses U+2019 in screenshot names)\n\tconst curlyVariant = tryCurlyQuoteVariant(resolved);\n\tif (curlyVariant !== resolved && fileExists(curlyVariant)) {\n\t\treturn curlyVariant;\n\t}\n\n\t// Try combined NFD + curly quote (for French macOS screenshots like \"Capture d'écran\")\n\tconst nfdCurlyVariant = tryCurlyQuoteVariant(nfdVariant);\n\tif (nfdCurlyVariant !== resolved && fileExists(nfdCurlyVariant)) {\n\t\treturn nfdCurlyVariant;\n\t}\n\n\treturn resolved;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../../src/core/tools/truncate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAChC,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACtC,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,eAAe,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,qBAAqB,EAAE,OAAO,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAkF/F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAyE/F;AAuBD;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA6B,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAKzC"}
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../../src/core/tools/truncate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,iBAAiB,OAA6B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAChC,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACtC,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,eAAe,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,qBAAqB,EAAE,OAAO,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAkF/F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAyE/F;AAuBD;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA6B,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAKzC"}
@@ -7,7 +7,8 @@
7
7
  *
8
8
  * Never returns partial lines (except bash tail truncation edge case).
9
9
  */
10
- export const DEFAULT_MAX_LINES = 2000;
10
+ import { TRUNCATE_DEFAULT_MAX_LINES } from "../constants.js";
11
+ export const DEFAULT_MAX_LINES = TRUNCATE_DEFAULT_MAX_LINES;
11
12
  export const DEFAULT_MAX_BYTES = 50 * 1024; // 50KB
12
13
  export const GREP_MAX_LINE_LENGTH = 500; // Max chars per grep match line
13
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../../src/core/tools/truncate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared truncation utilities for tool outputs.\n *\n * Truncation is based on two independent limits - whichever is hit first wins:\n * - Line limit (default: 2000 lines)\n * - Byte limit (default: 50KB)\n *\n * Never returns partial lines (except bash tail truncation edge case).\n */\n\nexport const DEFAULT_MAX_LINES = 2000;\nexport const DEFAULT_MAX_BYTES = 50 * 1024; // 50KB\nexport const GREP_MAX_LINE_LENGTH = 500; // Max chars per grep match line\n\nexport interface TruncationResult {\n\t/** The truncated content */\n\tcontent: string;\n\t/** Whether truncation occurred */\n\ttruncated: boolean;\n\t/** Which limit was hit: \"lines\", \"bytes\", or null if not truncated */\n\ttruncatedBy: \"lines\" | \"bytes\" | null;\n\t/** Total number of lines in the original content */\n\ttotalLines: number;\n\t/** Total number of bytes in the original content */\n\ttotalBytes: number;\n\t/** Number of complete lines in the truncated output */\n\toutputLines: number;\n\t/** Number of bytes in the truncated output */\n\toutputBytes: number;\n\t/** Whether the last line was partially truncated (only for tail truncation edge case) */\n\tlastLinePartial: boolean;\n\t/** Whether the first line exceeded the byte limit (for head truncation) */\n\tfirstLineExceedsLimit: boolean;\n\t/** The max lines limit that was applied */\n\tmaxLines: number;\n\t/** The max bytes limit that was applied */\n\tmaxBytes: number;\n}\n\nexport interface TruncationOptions {\n\t/** Maximum number of lines (default: 2000) */\n\tmaxLines?: number;\n\t/** Maximum number of bytes (default: 50KB) */\n\tmaxBytes?: number;\n}\n\n/**\n * Format bytes as human-readable size.\n */\nexport function formatSize(bytes: number): string {\n\tif (bytes < 1024) {\n\t\treturn `${bytes}B`;\n\t} else if (bytes < 1024 * 1024) {\n\t\treturn `${(bytes / 1024).toFixed(1)}KB`;\n\t} else {\n\t\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n\t}\n}\n\n/**\n * Truncate content from the head (keep first N lines/bytes).\n * Suitable for file reads where you want to see the beginning.\n *\n * Never returns partial lines. If first line exceeds byte limit,\n * returns empty content with firstLineExceedsLimit=true.\n */\nexport function truncateHead(content: string, options: TruncationOptions = {}): TruncationResult {\n\tconst maxLines = options.maxLines ?? DEFAULT_MAX_LINES;\n\tconst maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n\n\tconst totalBytes = Buffer.byteLength(content, \"utf-8\");\n\tconst lines = content.split(\"\\n\");\n\tconst totalLines = lines.length;\n\n\t// Check if no truncation needed\n\tif (totalLines <= maxLines && totalBytes <= maxBytes) {\n\t\treturn {\n\t\t\tcontent,\n\t\t\ttruncated: false,\n\t\t\ttruncatedBy: null,\n\t\t\ttotalLines,\n\t\t\ttotalBytes,\n\t\t\toutputLines: totalLines,\n\t\t\toutputBytes: totalBytes,\n\t\t\tlastLinePartial: false,\n\t\t\tfirstLineExceedsLimit: false,\n\t\t\tmaxLines,\n\t\t\tmaxBytes,\n\t\t};\n\t}\n\n\t// Check if first line alone exceeds byte limit\n\tconst firstLineBytes = Buffer.byteLength(lines[0], \"utf-8\");\n\tif (firstLineBytes > maxBytes) {\n\t\treturn {\n\t\t\tcontent: \"\",\n\t\t\ttruncated: true,\n\t\t\ttruncatedBy: \"bytes\",\n\t\t\ttotalLines,\n\t\t\ttotalBytes,\n\t\t\toutputLines: 0,\n\t\t\toutputBytes: 0,\n\t\t\tlastLinePartial: false,\n\t\t\tfirstLineExceedsLimit: true,\n\t\t\tmaxLines,\n\t\t\tmaxBytes,\n\t\t};\n\t}\n\n\t// Collect complete lines that fit\n\tconst outputLinesArr: string[] = [];\n\tlet outputBytesCount = 0;\n\tlet truncatedBy: \"lines\" | \"bytes\" = \"lines\";\n\n\tfor (let i = 0; i < lines.length && i < maxLines; i++) {\n\t\tconst line = lines[i];\n\t\tconst lineBytes = Buffer.byteLength(line, \"utf-8\") + (i > 0 ? 1 : 0); // +1 for newline\n\n\t\tif (outputBytesCount + lineBytes > maxBytes) {\n\t\t\ttruncatedBy = \"bytes\";\n\t\t\tbreak;\n\t\t}\n\n\t\toutputLinesArr.push(line);\n\t\toutputBytesCount += lineBytes;\n\t}\n\n\t// If we exited due to line limit\n\tif (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {\n\t\ttruncatedBy = \"lines\";\n\t}\n\n\tconst outputContent = outputLinesArr.join(\"\\n\");\n\tconst finalOutputBytes = Buffer.byteLength(outputContent, \"utf-8\");\n\n\treturn {\n\t\tcontent: outputContent,\n\t\ttruncated: true,\n\t\ttruncatedBy,\n\t\ttotalLines,\n\t\ttotalBytes,\n\t\toutputLines: outputLinesArr.length,\n\t\toutputBytes: finalOutputBytes,\n\t\tlastLinePartial: false,\n\t\tfirstLineExceedsLimit: false,\n\t\tmaxLines,\n\t\tmaxBytes,\n\t};\n}\n\n/**\n * Truncate content from the tail (keep last N lines/bytes).\n * Suitable for bash output where you want to see the end (errors, final results).\n *\n * May return partial first line if the last line of original content exceeds byte limit.\n */\nexport function truncateTail(content: string, options: TruncationOptions = {}): TruncationResult {\n\tconst maxLines = options.maxLines ?? DEFAULT_MAX_LINES;\n\tconst maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n\n\tconst totalBytes = Buffer.byteLength(content, \"utf-8\");\n\tconst lines = content.split(\"\\n\");\n\tconst totalLines = lines.length;\n\n\t// Check if no truncation needed\n\tif (totalLines <= maxLines && totalBytes <= maxBytes) {\n\t\treturn {\n\t\t\tcontent,\n\t\t\ttruncated: false,\n\t\t\ttruncatedBy: null,\n\t\t\ttotalLines,\n\t\t\ttotalBytes,\n\t\t\toutputLines: totalLines,\n\t\t\toutputBytes: totalBytes,\n\t\t\tlastLinePartial: false,\n\t\t\tfirstLineExceedsLimit: false,\n\t\t\tmaxLines,\n\t\t\tmaxBytes,\n\t\t};\n\t}\n\n\t// Work backwards from the end\n\tconst outputLinesArr: string[] = [];\n\tlet outputBytesCount = 0;\n\tlet truncatedBy: \"lines\" | \"bytes\" = \"lines\";\n\tlet lastLinePartial = false;\n\n\tfor (let i = lines.length - 1; i >= 0 && outputLinesArr.length < maxLines; i--) {\n\t\tconst line = lines[i];\n\t\tconst lineBytes = Buffer.byteLength(line, \"utf-8\") + (outputLinesArr.length > 0 ? 1 : 0); // +1 for newline\n\n\t\tif (outputBytesCount + lineBytes > maxBytes) {\n\t\t\ttruncatedBy = \"bytes\";\n\t\t\t// Edge case: if we haven't added ANY lines yet and this line exceeds maxBytes,\n\t\t\t// take the end of the line (partial)\n\t\t\tif (outputLinesArr.length === 0) {\n\t\t\t\tconst truncatedLine = truncateStringToBytesFromEnd(line, maxBytes);\n\t\t\t\toutputLinesArr.unshift(truncatedLine);\n\t\t\t\toutputBytesCount = Buffer.byteLength(truncatedLine, \"utf-8\");\n\t\t\t\tlastLinePartial = true;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\toutputLinesArr.unshift(line);\n\t\toutputBytesCount += lineBytes;\n\t}\n\n\t// If we exited due to line limit\n\tif (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {\n\t\ttruncatedBy = \"lines\";\n\t}\n\n\tconst outputContent = outputLinesArr.join(\"\\n\");\n\tconst finalOutputBytes = Buffer.byteLength(outputContent, \"utf-8\");\n\n\treturn {\n\t\tcontent: outputContent,\n\t\ttruncated: true,\n\t\ttruncatedBy,\n\t\ttotalLines,\n\t\ttotalBytes,\n\t\toutputLines: outputLinesArr.length,\n\t\toutputBytes: finalOutputBytes,\n\t\tlastLinePartial,\n\t\tfirstLineExceedsLimit: false,\n\t\tmaxLines,\n\t\tmaxBytes,\n\t};\n}\n\n/**\n * Truncate a string to fit within a byte limit (from the end).\n * Handles multi-byte UTF-8 characters correctly.\n */\nfunction truncateStringToBytesFromEnd(str: string, maxBytes: number): string {\n\tconst buf = Buffer.from(str, \"utf-8\");\n\tif (buf.length <= maxBytes) {\n\t\treturn str;\n\t}\n\n\t// Start from the end, skip maxBytes back\n\tlet start = buf.length - maxBytes;\n\n\t// Find a valid UTF-8 boundary (start of a character)\n\twhile (start < buf.length && (buf[start] & 0xc0) === 0x80) {\n\t\tstart++;\n\t}\n\n\treturn buf.slice(start).toString(\"utf-8\");\n}\n\n/**\n * Truncate a single line to max characters, adding [truncated] suffix.\n * Used for grep match lines.\n */\nexport function truncateLine(\n\tline: string,\n\tmaxChars: number = GREP_MAX_LINE_LENGTH,\n): { text: string; wasTruncated: boolean } {\n\tif (line.length <= maxChars) {\n\t\treturn { text: line, wasTruncated: false };\n\t}\n\treturn { text: `${line.slice(0, maxChars)}... [truncated]`, wasTruncated: true };\n}\n"]}
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../../src/core/tools/truncate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared truncation utilities for tool outputs.\n *\n * Truncation is based on two independent limits - whichever is hit first wins:\n * - Line limit (default: 2000 lines)\n * - Byte limit (default: 50KB)\n *\n * Never returns partial lines (except bash tail truncation edge case).\n */\n\nimport { TRUNCATE_DEFAULT_MAX_LINES } from \"../constants.js\";\n\nexport const DEFAULT_MAX_LINES = TRUNCATE_DEFAULT_MAX_LINES;\nexport const DEFAULT_MAX_BYTES = 50 * 1024; // 50KB\nexport const GREP_MAX_LINE_LENGTH = 500; // Max chars per grep match line\n\nexport interface TruncationResult {\n\t/** The truncated content */\n\tcontent: string;\n\t/** Whether truncation occurred */\n\ttruncated: boolean;\n\t/** Which limit was hit: \"lines\", \"bytes\", or null if not truncated */\n\ttruncatedBy: \"lines\" | \"bytes\" | null;\n\t/** Total number of lines in the original content */\n\ttotalLines: number;\n\t/** Total number of bytes in the original content */\n\ttotalBytes: number;\n\t/** Number of complete lines in the truncated output */\n\toutputLines: number;\n\t/** Number of bytes in the truncated output */\n\toutputBytes: number;\n\t/** Whether the last line was partially truncated (only for tail truncation edge case) */\n\tlastLinePartial: boolean;\n\t/** Whether the first line exceeded the byte limit (for head truncation) */\n\tfirstLineExceedsLimit: boolean;\n\t/** The max lines limit that was applied */\n\tmaxLines: number;\n\t/** The max bytes limit that was applied */\n\tmaxBytes: number;\n}\n\nexport interface TruncationOptions {\n\t/** Maximum number of lines (default: 2000) */\n\tmaxLines?: number;\n\t/** Maximum number of bytes (default: 50KB) */\n\tmaxBytes?: number;\n}\n\n/**\n * Format bytes as human-readable size.\n */\nexport function formatSize(bytes: number): string {\n\tif (bytes < 1024) {\n\t\treturn `${bytes}B`;\n\t} else if (bytes < 1024 * 1024) {\n\t\treturn `${(bytes / 1024).toFixed(1)}KB`;\n\t} else {\n\t\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n\t}\n}\n\n/**\n * Truncate content from the head (keep first N lines/bytes).\n * Suitable for file reads where you want to see the beginning.\n *\n * Never returns partial lines. If first line exceeds byte limit,\n * returns empty content with firstLineExceedsLimit=true.\n */\nexport function truncateHead(content: string, options: TruncationOptions = {}): TruncationResult {\n\tconst maxLines = options.maxLines ?? DEFAULT_MAX_LINES;\n\tconst maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n\n\tconst totalBytes = Buffer.byteLength(content, \"utf-8\");\n\tconst lines = content.split(\"\\n\");\n\tconst totalLines = lines.length;\n\n\t// Check if no truncation needed\n\tif (totalLines <= maxLines && totalBytes <= maxBytes) {\n\t\treturn {\n\t\t\tcontent,\n\t\t\ttruncated: false,\n\t\t\ttruncatedBy: null,\n\t\t\ttotalLines,\n\t\t\ttotalBytes,\n\t\t\toutputLines: totalLines,\n\t\t\toutputBytes: totalBytes,\n\t\t\tlastLinePartial: false,\n\t\t\tfirstLineExceedsLimit: false,\n\t\t\tmaxLines,\n\t\t\tmaxBytes,\n\t\t};\n\t}\n\n\t// Check if first line alone exceeds byte limit\n\tconst firstLineBytes = Buffer.byteLength(lines[0], \"utf-8\");\n\tif (firstLineBytes > maxBytes) {\n\t\treturn {\n\t\t\tcontent: \"\",\n\t\t\ttruncated: true,\n\t\t\ttruncatedBy: \"bytes\",\n\t\t\ttotalLines,\n\t\t\ttotalBytes,\n\t\t\toutputLines: 0,\n\t\t\toutputBytes: 0,\n\t\t\tlastLinePartial: false,\n\t\t\tfirstLineExceedsLimit: true,\n\t\t\tmaxLines,\n\t\t\tmaxBytes,\n\t\t};\n\t}\n\n\t// Collect complete lines that fit\n\tconst outputLinesArr: string[] = [];\n\tlet outputBytesCount = 0;\n\tlet truncatedBy: \"lines\" | \"bytes\" = \"lines\";\n\n\tfor (let i = 0; i < lines.length && i < maxLines; i++) {\n\t\tconst line = lines[i];\n\t\tconst lineBytes = Buffer.byteLength(line, \"utf-8\") + (i > 0 ? 1 : 0); // +1 for newline\n\n\t\tif (outputBytesCount + lineBytes > maxBytes) {\n\t\t\ttruncatedBy = \"bytes\";\n\t\t\tbreak;\n\t\t}\n\n\t\toutputLinesArr.push(line);\n\t\toutputBytesCount += lineBytes;\n\t}\n\n\t// If we exited due to line limit\n\tif (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {\n\t\ttruncatedBy = \"lines\";\n\t}\n\n\tconst outputContent = outputLinesArr.join(\"\\n\");\n\tconst finalOutputBytes = Buffer.byteLength(outputContent, \"utf-8\");\n\n\treturn {\n\t\tcontent: outputContent,\n\t\ttruncated: true,\n\t\ttruncatedBy,\n\t\ttotalLines,\n\t\ttotalBytes,\n\t\toutputLines: outputLinesArr.length,\n\t\toutputBytes: finalOutputBytes,\n\t\tlastLinePartial: false,\n\t\tfirstLineExceedsLimit: false,\n\t\tmaxLines,\n\t\tmaxBytes,\n\t};\n}\n\n/**\n * Truncate content from the tail (keep last N lines/bytes).\n * Suitable for bash output where you want to see the end (errors, final results).\n *\n * May return partial first line if the last line of original content exceeds byte limit.\n */\nexport function truncateTail(content: string, options: TruncationOptions = {}): TruncationResult {\n\tconst maxLines = options.maxLines ?? DEFAULT_MAX_LINES;\n\tconst maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n\n\tconst totalBytes = Buffer.byteLength(content, \"utf-8\");\n\tconst lines = content.split(\"\\n\");\n\tconst totalLines = lines.length;\n\n\t// Check if no truncation needed\n\tif (totalLines <= maxLines && totalBytes <= maxBytes) {\n\t\treturn {\n\t\t\tcontent,\n\t\t\ttruncated: false,\n\t\t\ttruncatedBy: null,\n\t\t\ttotalLines,\n\t\t\ttotalBytes,\n\t\t\toutputLines: totalLines,\n\t\t\toutputBytes: totalBytes,\n\t\t\tlastLinePartial: false,\n\t\t\tfirstLineExceedsLimit: false,\n\t\t\tmaxLines,\n\t\t\tmaxBytes,\n\t\t};\n\t}\n\n\t// Work backwards from the end\n\tconst outputLinesArr: string[] = [];\n\tlet outputBytesCount = 0;\n\tlet truncatedBy: \"lines\" | \"bytes\" = \"lines\";\n\tlet lastLinePartial = false;\n\n\tfor (let i = lines.length - 1; i >= 0 && outputLinesArr.length < maxLines; i--) {\n\t\tconst line = lines[i];\n\t\tconst lineBytes = Buffer.byteLength(line, \"utf-8\") + (outputLinesArr.length > 0 ? 1 : 0); // +1 for newline\n\n\t\tif (outputBytesCount + lineBytes > maxBytes) {\n\t\t\ttruncatedBy = \"bytes\";\n\t\t\t// Edge case: if we haven't added ANY lines yet and this line exceeds maxBytes,\n\t\t\t// take the end of the line (partial)\n\t\t\tif (outputLinesArr.length === 0) {\n\t\t\t\tconst truncatedLine = truncateStringToBytesFromEnd(line, maxBytes);\n\t\t\t\toutputLinesArr.unshift(truncatedLine);\n\t\t\t\toutputBytesCount = Buffer.byteLength(truncatedLine, \"utf-8\");\n\t\t\t\tlastLinePartial = true;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\toutputLinesArr.unshift(line);\n\t\toutputBytesCount += lineBytes;\n\t}\n\n\t// If we exited due to line limit\n\tif (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {\n\t\ttruncatedBy = \"lines\";\n\t}\n\n\tconst outputContent = outputLinesArr.join(\"\\n\");\n\tconst finalOutputBytes = Buffer.byteLength(outputContent, \"utf-8\");\n\n\treturn {\n\t\tcontent: outputContent,\n\t\ttruncated: true,\n\t\ttruncatedBy,\n\t\ttotalLines,\n\t\ttotalBytes,\n\t\toutputLines: outputLinesArr.length,\n\t\toutputBytes: finalOutputBytes,\n\t\tlastLinePartial,\n\t\tfirstLineExceedsLimit: false,\n\t\tmaxLines,\n\t\tmaxBytes,\n\t};\n}\n\n/**\n * Truncate a string to fit within a byte limit (from the end).\n * Handles multi-byte UTF-8 characters correctly.\n */\nfunction truncateStringToBytesFromEnd(str: string, maxBytes: number): string {\n\tconst buf = Buffer.from(str, \"utf-8\");\n\tif (buf.length <= maxBytes) {\n\t\treturn str;\n\t}\n\n\t// Start from the end, skip maxBytes back\n\tlet start = buf.length - maxBytes;\n\n\t// Find a valid UTF-8 boundary (start of a character)\n\twhile (start < buf.length && (buf[start] & 0xc0) === 0x80) {\n\t\tstart++;\n\t}\n\n\treturn buf.slice(start).toString(\"utf-8\");\n}\n\n/**\n * Truncate a single line to max characters, adding [truncated] suffix.\n * Used for grep match lines.\n */\nexport function truncateLine(\n\tline: string,\n\tmaxChars: number = GREP_MAX_LINE_LENGTH,\n): { text: string; wasTruncated: boolean } {\n\tif (line.length <= maxChars) {\n\t\treturn { text: line, wasTruncated: false };\n\t}\n\treturn { text: `${line.slice(0, maxChars)}... [truncated]`, wasTruncated: true };\n}\n"]}
@@ -24,7 +24,8 @@ export { type AsyncSettings, type CompactionSettings, type ImageSettings, type M
24
24
  export { formatSkillsForPrompt, type LoadSkillsFromDirOptions, type LoadSkillsResult, loadSkills, loadSkillsFromDir, type Skill, type SkillFrontmatter, } from "./core/skills.js";
25
25
  export { type BashInterceptorRule, type BashOperations, type BashSpawnContext, type BashSpawnHook, type BashToolDetails, type BashToolInput, type BashToolOptions, bashTool, rewriteBackgroundCommand, checkBashInterception, type CompiledInterceptor, compileInterceptor, DEFAULT_BASH_INTERCEPTOR_RULES, codingTools, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, type EditOperations, type EditToolDetails, type EditToolInput, type EditToolOptions, editTool, type FindOperations, type FindToolDetails, type FindToolInput, type FindToolOptions, findTool, formatSize, type GrepOperations, type GrepToolDetails, type GrepToolInput, type GrepToolOptions, grepTool, type LsOperations, type LsToolDetails, type LsToolInput, type LsToolOptions, lsTool, type ReadOperations, type ReadToolDetails, type ReadToolInput, type ReadToolOptions, readTool, type ToolsOptions, type TruncationOptions, type TruncationResult, truncateHead, truncateLine, truncateTail, type WriteOperations, type WriteToolInput, type WriteToolOptions, writeTool, hashlineEditTool, hashlineReadTool, hashlineCodingTools, createHashlineEditTool, createHashlineReadTool, createHashlineCodingTools, type HashlineEditInput, type HashlineEditToolDetails, type HashlineEditToolOptions, type HashlineReadToolDetails, type HashlineReadToolInput, type HashlineReadToolOptions, } from "./core/tools/index.js";
26
26
  export { main } from "./main.js";
27
- export { InteractiveMode, type InteractiveModeOptions, type PrintModeOptions, runPrintMode, runRpcMode, } from "./modes/index.js";
27
+ export { InteractiveMode, type InteractiveModeOptions, type PrintModeOptions, runPrintMode, runRpcMode, type ModelInfo, RpcClient, type RpcClientOptions, type RpcEventListener, type RpcCommand, type RpcResponse, type RpcSessionState, } from "./modes/index.js";
28
+ export { attachJsonlLineReader, serializeJsonLine } from "./modes/rpc/jsonl.js";
28
29
  export { ArminComponent, AssistantMessageComponent, appKey, appKeyHint, BashExecutionComponent, BorderedLoader, BranchSummaryMessageComponent, CompactionSummaryMessageComponent, CustomEditor, CustomMessageComponent, DynamicBorder, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, editorKey, FooterComponent, keyHint, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, ProviderManagerComponent, type RenderDiffOptions, rawKeyHint, renderDiff, SessionSelectorComponent, type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent, ShowImagesSelectorComponent, SkillInvocationMessageComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, type ToolExecutionOptions, TreeSelectorComponent, truncateToVisualLines, UserMessageComponent, UserMessageSelectorComponent, type VisualTruncateResult, } from "./modes/interactive/components/index.js";
29
30
  export { getLanguageFromPath, getMarkdownTheme, getSelectListTheme, getSettingsListTheme, highlightCode, initTheme, Theme, type ThemeColor, } from "./modes/interactive/theme/theme.js";
30
31
  export { copyToClipboard } from "./utils/clipboard.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,9 @@ hashlineEditTool, hashlineReadTool, hashlineCodingTools, createHashlineEditTool,
37
37
  // Main entry point
38
38
  export { main } from "./main.js";
39
39
  // Run modes for programmatic SDK usage
40
- export { InteractiveMode, runPrintMode, runRpcMode, } from "./modes/index.js";
40
+ export { InteractiveMode, runPrintMode, runRpcMode, RpcClient, } from "./modes/index.js";
41
+ // RPC JSONL utilities
42
+ export { attachJsonlLineReader, serializeJsonLine } from "./modes/rpc/jsonl.js";
41
43
  // UI components for extensions
42
44
  export { ArminComponent, AssistantMessageComponent, appKey, appKeyHint, BashExecutionComponent, BorderedLoader, BranchSummaryMessageComponent, CompactionSummaryMessageComponent, CustomEditor, CustomMessageComponent, DynamicBorder, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, editorKey, FooterComponent, keyHint, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, ProviderManagerComponent, rawKeyHint, renderDiff, SessionSelectorComponent, SettingsSelectorComponent, ShowImagesSelectorComponent, SkillInvocationMessageComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, TreeSelectorComponent, truncateToVisualLines, UserMessageComponent, UserMessageSelectorComponent, } from "./modes/interactive/components/index.js";
43
45
  // Theme utilities for custom tools and extensions
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\n// Config paths\nexport { getAgentDir, VERSION } from \"./config.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Auth and model registry\nexport {\n\ttype ApiKeyCredential,\n\ttype AuthCredential,\n\tAuthStorage,\n\ttype AuthStorageBackend,\n\tFileAuthStorageBackend,\n\tInMemoryAuthStorageBackend,\n\ttype OAuthCredential,\n} from \"./core/auth-storage.js\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.js\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppAction,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionForkEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionSwitchEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolDefinition,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.js\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n\twrapToolsWithExtensions,\n\twrapToolWithExtensions,\n} from \"./core/extensions/index.js\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.js\";\nexport { convertToLlm } from \"./core/messages.js\";\nexport { ModelDiscoveryCache } from \"./core/discovery-cache.js\";\nexport type { DiscoveredModel, DiscoveryResult, ProviderDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { getDiscoverableProviders, getDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { ModelRegistry } from \"./core/model-registry.js\";\nexport { ModelsJsonWriter } from \"./core/models-json-writer.js\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.js\";\nexport { DefaultPackageManager } from \"./core/package-manager.js\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.js\";\nexport { DefaultResourceLoader } from \"./core/resource-loader.js\";\n// SDK for programmatic usage\nexport {\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\n// Blob and artifact storage\nexport { BlobStore, isBlobRef, parseBlobRef, externalizeImageData, resolveImageData } from \"./core/blob-store.js\";\nexport { ArtifactManager } from \"./core/artifact-manager.js\";\nexport {\n\ttype AsyncSettings,\n\ttype CompactionSettings,\n\ttype ImageSettings,\n\ttype MemorySettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n\ttype TaskIsolationSettings,\n} from \"./core/settings-manager.js\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashInterceptorRule,\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\trewriteBackgroundCommand,\n\tcheckBashInterception,\n\ttype CompiledInterceptor,\n\tcompileInterceptor,\n\tDEFAULT_BASH_INTERCEPTOR_RULES,\n\tcodingTools,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n\t// Hashline edit mode tools\n\thashlineEditTool,\n\thashlineReadTool,\n\thashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n\tcreateHashlineCodingTools,\n\ttype HashlineEditInput,\n\ttype HashlineEditToolDetails,\n\ttype HashlineEditToolOptions,\n\ttype HashlineReadToolDetails,\n\ttype HashlineReadToolInput,\n\ttype HashlineReadToolOptions,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype PrintModeOptions,\n\trunPrintMode,\n\trunRpcMode,\n} from \"./modes/index.js\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tappKey,\n\tappKeyHint,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\teditorKey,\n\tFooterComponent,\n\tkeyHint,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\tProviderManagerComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.js\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.js\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.js\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.js\";\n// Shell utilities\nexport { getShellConfig, sanitizeCommand } from \"./utils/shell.js\";\n// Cross-platform path display\nexport { toPosixPath } from \"./utils/path-display.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\n// Config paths\nexport { getAgentDir, VERSION } from \"./config.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Auth and model registry\nexport {\n\ttype ApiKeyCredential,\n\ttype AuthCredential,\n\tAuthStorage,\n\ttype AuthStorageBackend,\n\tFileAuthStorageBackend,\n\tInMemoryAuthStorageBackend,\n\ttype OAuthCredential,\n} from \"./core/auth-storage.js\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.js\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppAction,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionForkEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionSwitchEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolDefinition,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.js\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n\twrapToolsWithExtensions,\n\twrapToolWithExtensions,\n} from \"./core/extensions/index.js\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.js\";\nexport { convertToLlm } from \"./core/messages.js\";\nexport { ModelDiscoveryCache } from \"./core/discovery-cache.js\";\nexport type { DiscoveredModel, DiscoveryResult, ProviderDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { getDiscoverableProviders, getDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { ModelRegistry } from \"./core/model-registry.js\";\nexport { ModelsJsonWriter } from \"./core/models-json-writer.js\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.js\";\nexport { DefaultPackageManager } from \"./core/package-manager.js\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.js\";\nexport { DefaultResourceLoader } from \"./core/resource-loader.js\";\n// SDK for programmatic usage\nexport {\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\n// Blob and artifact storage\nexport { BlobStore, isBlobRef, parseBlobRef, externalizeImageData, resolveImageData } from \"./core/blob-store.js\";\nexport { ArtifactManager } from \"./core/artifact-manager.js\";\nexport {\n\ttype AsyncSettings,\n\ttype CompactionSettings,\n\ttype ImageSettings,\n\ttype MemorySettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n\ttype TaskIsolationSettings,\n} from \"./core/settings-manager.js\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashInterceptorRule,\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\trewriteBackgroundCommand,\n\tcheckBashInterception,\n\ttype CompiledInterceptor,\n\tcompileInterceptor,\n\tDEFAULT_BASH_INTERCEPTOR_RULES,\n\tcodingTools,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n\t// Hashline edit mode tools\n\thashlineEditTool,\n\thashlineReadTool,\n\thashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n\tcreateHashlineCodingTools,\n\ttype HashlineEditInput,\n\ttype HashlineEditToolDetails,\n\ttype HashlineEditToolOptions,\n\ttype HashlineReadToolDetails,\n\ttype HashlineReadToolInput,\n\ttype HashlineReadToolOptions,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype PrintModeOptions,\n\trunPrintMode,\n\trunRpcMode,\n\ttype ModelInfo,\n\tRpcClient,\n\ttype RpcClientOptions,\n\ttype RpcEventListener,\n\ttype RpcCommand,\n\ttype RpcResponse,\n\ttype RpcSessionState,\n} from \"./modes/index.js\";\n// RPC JSONL utilities\nexport { attachJsonlLineReader, serializeJsonLine } from \"./modes/rpc/jsonl.js\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tappKey,\n\tappKeyHint,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\teditorKey,\n\tFooterComponent,\n\tkeyHint,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\tProviderManagerComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.js\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.js\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.js\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.js\";\n// Shell utilities\nexport { getShellConfig, sanitizeCommand } from \"./utils/shell.js\";\n// Cross-platform path display\nexport { toPosixPath } from \"./utils/path-display.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6jBH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAmQxC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6jBH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBA0QxC"}
@@ -484,6 +484,12 @@ async function handleConfigCommand(args) {
484
484
  process.exit(0);
485
485
  }
486
486
  export async function main(args) {
487
+ // Catch unhandled promise rejections so the process doesn't silently disappear
488
+ process.on("unhandledRejection", (reason) => {
489
+ const message = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
490
+ console.error(`\nFatal: unhandled promise rejection\n${message}`);
491
+ process.exitCode = 1;
492
+ });
487
493
  const offlineMode = args.includes("--offline") || isTruthyEnvFlag(process.env.PI_OFFLINE);
488
494
  if (offlineMode) {
489
495
  process.env.PI_OFFLINE = "1";