@opengsd/gsd-pi 1.1.1-dev.b2556262 → 1.2.0-dev.4813ead6

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 (500) hide show
  1. package/dist/cli-web-branch.d.ts +2 -0
  2. package/dist/cli-web-branch.js +9 -2
  3. package/dist/help-text.js +5 -0
  4. package/dist/project-sessions.js +4 -2
  5. package/dist/resources/.managed-resources-content-hash +1 -1
  6. package/dist/resources/extensions/ask-user-questions.js +78 -23
  7. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +101 -237
  8. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
  9. package/dist/resources/extensions/github-sync/templates.js +3 -3
  10. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  11. package/dist/resources/extensions/gsd/auto/contracts.js +8 -1
  12. package/dist/resources/extensions/gsd/auto/loop.js +74 -56
  13. package/dist/resources/extensions/gsd/auto/orchestrator.js +763 -63
  14. package/dist/resources/extensions/gsd/auto/phases.js +28 -3
  15. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  16. package/dist/resources/extensions/gsd/auto/session.js +3 -0
  17. package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
  18. package/dist/resources/extensions/gsd/auto-dispatch.js +6 -5
  19. package/dist/resources/extensions/gsd/auto-model-selection.js +8 -0
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -3
  21. package/dist/resources/extensions/gsd/auto-prompts.js +191 -9
  22. package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
  23. package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -0
  24. package/dist/resources/extensions/gsd/auto-start.js +12 -23
  25. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  26. package/dist/resources/extensions/gsd/auto-tool-tracking.js +37 -0
  27. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +33 -29
  28. package/dist/resources/extensions/gsd/auto-verification.js +7 -7
  29. package/dist/resources/extensions/gsd/auto-worktree.js +45 -36
  30. package/dist/resources/extensions/gsd/auto.js +73 -471
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +11 -37
  33. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  34. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +103 -138
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +63 -4
  36. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
  37. package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
  38. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  39. package/dist/resources/extensions/gsd/commands-handlers.js +20 -0
  40. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  41. package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
  42. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  43. package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
  44. package/dist/resources/extensions/gsd/db-workspace.js +103 -0
  45. package/dist/resources/extensions/gsd/debug-logger.js +10 -0
  46. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  47. package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
  48. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  49. package/dist/resources/extensions/gsd/doctor-proactive.js +7 -2
  50. package/dist/resources/extensions/gsd/doctor.js +16 -9
  51. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  52. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  53. package/dist/resources/extensions/gsd/gsd-db.js +12 -0
  54. package/dist/resources/extensions/gsd/guided-flow.js +36 -470
  55. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  56. package/dist/resources/extensions/gsd/markdown-renderer.js +33 -33
  57. package/dist/resources/extensions/gsd/mcp-filter.js +8 -1
  58. package/dist/resources/extensions/gsd/mcp-tool-name.js +26 -0
  59. package/dist/resources/extensions/gsd/md-importer.js +4 -3
  60. package/dist/resources/extensions/gsd/migrate/safety.js +2 -2
  61. package/dist/resources/extensions/gsd/migration-auto-check.js +3 -2
  62. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  63. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -4
  64. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  65. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
  66. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  67. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  68. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  69. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
  70. package/dist/resources/extensions/gsd/native-git-bridge.js +45 -0
  71. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  72. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  73. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  74. package/dist/resources/extensions/gsd/preferences.js +147 -29
  75. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  76. package/dist/resources/extensions/gsd/prompts/discuss.md +6 -7
  77. package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -0
  78. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
  79. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
  80. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
  82. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  83. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  84. package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -0
  85. package/dist/resources/extensions/gsd/prompts/research-milestone.md +2 -2
  86. package/dist/resources/extensions/gsd/prompts/system.md +1 -1
  87. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +5 -3
  88. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  89. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  90. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  91. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  92. package/dist/resources/extensions/gsd/roadmap-slices.js +8 -2
  93. package/dist/resources/extensions/gsd/schemas/parsers.js +6 -1
  94. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  95. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +21 -1
  96. package/dist/resources/extensions/gsd/state.js +13 -5
  97. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  98. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  99. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  100. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  101. package/dist/resources/extensions/gsd/tool-contract.js +52 -8
  102. package/dist/resources/extensions/gsd/tool-presentation-plan.js +15 -34
  103. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  104. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  105. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +39 -0
  106. package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
  107. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +169 -20
  108. package/dist/resources/extensions/gsd/uat-policy.js +16 -10
  109. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  110. package/dist/resources/extensions/gsd/unit-context-composer.js +40 -20
  111. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  112. package/dist/resources/extensions/gsd/unit-tool-contracts.js +2 -1
  113. package/dist/resources/extensions/gsd/user-input-boundary.js +65 -4
  114. package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
  115. package/dist/resources/extensions/gsd/web-app-uat.js +80 -0
  116. package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
  117. package/dist/resources/extensions/gsd/workflow-reconcile.js +4 -3
  118. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  119. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  120. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  121. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  122. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  123. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  124. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  125. package/dist/update-cmd.js +20 -0
  126. package/dist/web/standalone/.next/BUILD_ID +1 -1
  127. package/dist/web/standalone/.next/app-path-routes-manifest.json +5 -5
  128. package/dist/web/standalone/.next/build-manifest.json +3 -3
  129. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  130. package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
  131. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  140. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  147. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  150. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  152. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  154. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  160. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  164. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  166. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  176. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  189. package/dist/web/standalone/.next/server/app-paths-manifest.json +5 -5
  190. package/dist/web/standalone/.next/server/chunks/5047.js +2 -0
  191. package/dist/web/standalone/.next/server/chunks/5124.js +1 -0
  192. package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
  193. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  196. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  197. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  198. package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
  199. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
  200. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
  201. package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
  202. package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
  203. package/dist/web/standalone/.next/static/chunks/796.cf859a427a2cb2ac.js +10 -0
  204. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
  205. package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-fbea77b5f9953368.js} +1 -1
  206. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  207. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  208. package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
  209. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
  210. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  211. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  212. package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
  213. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
  214. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
  215. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
  216. package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
  217. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  218. package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
  219. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  220. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
  221. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  222. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  223. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  224. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
  225. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
  226. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  227. package/dist/web-mode.d.ts +2 -0
  228. package/dist/web-mode.js +20 -8
  229. package/package.json +17 -11
  230. package/packages/cloud-mcp-gateway/package.json +2 -2
  231. package/packages/contracts/package.json +1 -1
  232. package/packages/daemon/package.json +4 -4
  233. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  234. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  235. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  236. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  237. package/packages/gsd-agent-core/package.json +5 -5
  238. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  239. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +3 -0
  240. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  241. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +1 -1
  242. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  243. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  244. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +106 -40
  245. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  246. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  247. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
  248. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  249. package/packages/gsd-agent-modes/package.json +7 -7
  250. package/packages/mcp-server/dist/server.d.ts +10 -0
  251. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  252. package/packages/mcp-server/dist/server.js +8 -0
  253. package/packages/mcp-server/dist/server.js.map +1 -1
  254. package/packages/mcp-server/dist/workflow-tools.d.ts +41 -0
  255. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  256. package/packages/mcp-server/dist/workflow-tools.js +2 -1
  257. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  258. package/packages/mcp-server/package.json +3 -3
  259. package/packages/native/package.json +1 -1
  260. package/packages/pi-agent-core/package.json +1 -1
  261. package/packages/pi-ai/dist/image-models.generated.d.ts +30 -0
  262. package/packages/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  263. package/packages/pi-ai/dist/image-models.generated.js +30 -0
  264. package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
  265. package/packages/pi-ai/dist/models.generated.d.ts +8 -127
  266. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  267. package/packages/pi-ai/dist/models.generated.js +47 -166
  268. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  269. package/packages/pi-ai/package.json +1 -1
  270. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/auth-storage.js +11 -3
  272. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  273. package/packages/pi-coding-agent/package.json +7 -7
  274. package/packages/pi-tui/dist/components/input.js +1 -1
  275. package/packages/pi-tui/dist/components/input.js.map +1 -1
  276. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  277. package/packages/pi-tui/dist/keys.js +39 -30
  278. package/packages/pi-tui/dist/keys.js.map +1 -1
  279. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  280. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  281. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  282. package/packages/pi-tui/package.json +2 -2
  283. package/packages/rpc-client/package.json +2 -2
  284. package/pkg/package.json +1 -1
  285. package/scripts/install/deps.js +10 -0
  286. package/scripts/link-workspace-packages.cjs +7 -40
  287. package/src/resources/extensions/ask-user-questions.ts +87 -24
  288. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +126 -289
  289. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +242 -2
  290. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
  291. package/src/resources/extensions/github-sync/templates.ts +3 -3
  292. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  293. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  294. package/src/resources/extensions/gsd/auto/contracts.ts +40 -121
  295. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -0
  296. package/src/resources/extensions/gsd/auto/loop.ts +83 -61
  297. package/src/resources/extensions/gsd/auto/orchestrator.ts +913 -64
  298. package/src/resources/extensions/gsd/auto/phases.ts +35 -3
  299. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  300. package/src/resources/extensions/gsd/auto/session.ts +4 -0
  301. package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
  302. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -7
  303. package/src/resources/extensions/gsd/auto-model-selection.ts +8 -0
  304. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -3
  305. package/src/resources/extensions/gsd/auto-prompts.ts +220 -9
  306. package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
  307. package/src/resources/extensions/gsd/auto-runtime-state.ts +30 -0
  308. package/src/resources/extensions/gsd/auto-start.ts +17 -20
  309. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  310. package/src/resources/extensions/gsd/auto-tool-tracking.ts +40 -0
  311. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +42 -30
  312. package/src/resources/extensions/gsd/auto-verification.ts +7 -8
  313. package/src/resources/extensions/gsd/auto-worktree.ts +57 -42
  314. package/src/resources/extensions/gsd/auto.ts +96 -508
  315. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
  316. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +10 -37
  317. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  318. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +120 -151
  319. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +107 -3
  320. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
  321. package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
  322. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  323. package/src/resources/extensions/gsd/commands-handlers.ts +18 -0
  324. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  325. package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
  326. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  327. package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
  328. package/src/resources/extensions/gsd/db-workspace.ts +170 -0
  329. package/src/resources/extensions/gsd/debug-logger.ts +11 -0
  330. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  331. package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
  332. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  333. package/src/resources/extensions/gsd/doctor-proactive.ts +8 -2
  334. package/src/resources/extensions/gsd/doctor.ts +15 -5
  335. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  336. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  337. package/src/resources/extensions/gsd/gsd-db.ts +12 -0
  338. package/src/resources/extensions/gsd/guided-flow.ts +49 -560
  339. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  340. package/src/resources/extensions/gsd/markdown-renderer.ts +40 -20
  341. package/src/resources/extensions/gsd/mcp-filter.ts +9 -1
  342. package/src/resources/extensions/gsd/mcp-tool-name.ts +35 -0
  343. package/src/resources/extensions/gsd/md-importer.ts +3 -3
  344. package/src/resources/extensions/gsd/migrate/safety.ts +2 -2
  345. package/src/resources/extensions/gsd/migration-auto-check.ts +2 -2
  346. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  347. package/src/resources/extensions/gsd/milestone-closeout.ts +12 -4
  348. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  349. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
  350. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  351. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  352. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  353. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
  354. package/src/resources/extensions/gsd/native-git-bridge.ts +48 -0
  355. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  356. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  357. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  358. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  359. package/src/resources/extensions/gsd/preferences.ts +173 -28
  360. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  361. package/src/resources/extensions/gsd/prompts/discuss.md +6 -7
  362. package/src/resources/extensions/gsd/prompts/execute-task.md +2 -0
  363. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
  364. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
  365. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
  366. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
  367. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  368. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  369. package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -0
  370. package/src/resources/extensions/gsd/prompts/research-milestone.md +2 -2
  371. package/src/resources/extensions/gsd/prompts/system.md +1 -1
  372. package/src/resources/extensions/gsd/prompts/validate-milestone.md +5 -3
  373. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  374. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  375. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  376. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  377. package/src/resources/extensions/gsd/roadmap-slices.ts +8 -2
  378. package/src/resources/extensions/gsd/schemas/parsers.ts +6 -1
  379. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  380. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +31 -10
  381. package/src/resources/extensions/gsd/state.ts +15 -5
  382. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  383. package/src/resources/extensions/gsd/templates/project.md +1 -0
  384. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  385. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  386. package/src/resources/extensions/gsd/tests/artifact-db-drift-memo.test.ts +66 -0
  387. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  388. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
  389. package/src/resources/extensions/gsd/tests/auto-dispatch-baseline-harness.test.ts +53 -0
  390. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +321 -5
  391. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  392. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
  393. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +709 -845
  394. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +38 -10
  395. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  396. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  397. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
  398. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  399. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +38 -1
  400. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +15 -0
  401. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
  402. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +88 -0
  403. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  404. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +64 -1
  405. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  406. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  407. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  408. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  409. package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
  410. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +75 -0
  411. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  412. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +58 -0
  413. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  414. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +25 -0
  415. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  416. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  417. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  418. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  419. package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
  420. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +127 -0
  421. package/src/resources/extensions/gsd/tests/parse-project-milestone-bridge.test.ts +77 -0
  422. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
  423. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +6 -2
  424. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
  425. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  426. package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
  427. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +75 -2
  428. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
  429. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  430. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  431. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +94 -0
  432. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +65 -0
  433. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  434. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +25 -1
  435. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
  436. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +101 -1
  437. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  438. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +21 -6
  439. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +38 -0
  440. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  441. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  442. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +23 -0
  443. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +47 -0
  444. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +147 -0
  445. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  446. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +150 -0
  447. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +126 -9
  448. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
  449. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +21 -0
  450. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  451. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +24 -0
  452. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  453. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +15 -3
  454. package/src/resources/extensions/gsd/tests/write-gate.test.ts +79 -0
  455. package/src/resources/extensions/gsd/tool-contract.ts +86 -8
  456. package/src/resources/extensions/gsd/tool-presentation-plan.ts +16 -33
  457. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  458. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  459. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +43 -0
  460. package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
  461. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +183 -21
  462. package/src/resources/extensions/gsd/uat-policy.ts +19 -10
  463. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  464. package/src/resources/extensions/gsd/unit-context-composer.ts +85 -20
  465. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  466. package/src/resources/extensions/gsd/unit-tool-contracts.ts +2 -1
  467. package/src/resources/extensions/gsd/user-input-boundary.ts +55 -5
  468. package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
  469. package/src/resources/extensions/gsd/web-app-uat.ts +101 -0
  470. package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
  471. package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
  472. package/src/resources/extensions/gsd/workflow-tool-surface.ts +73 -0
  473. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  474. package/src/resources/extensions/gsd/worktree-lifecycle.ts +7 -16
  475. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  476. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  477. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  478. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  479. package/dist/web/standalone/.next/server/chunks/678.js +0 -2
  480. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  481. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  482. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  483. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  484. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  485. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  486. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
  487. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
  488. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
  489. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
  490. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
  491. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
  492. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
  493. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
  494. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
  495. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
  496. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
  497. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
  498. package/scripts/ensure-workspace-builds.cjs +0 -129
  499. /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → tkLHUSzPA2kMmWz4DmGwI}/_buildManifest.js +0 -0
  500. /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → tkLHUSzPA2kMmWz4DmGwI}/_ssgManifest.js +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
- let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
4
3
  let { existsSync, readFileSync } = require('fs')
5
4
  let { dirname, join } = require('path')
5
+ let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
6
6
 
7
7
  function fromBase64(str) {
8
8
  if (Buffer) {
@@ -16,6 +16,7 @@ function fromBase64(str) {
16
16
  class PreviousMap {
17
17
  constructor(css, opts) {
18
18
  if (opts.map === false) return
19
+ if (opts.unsafeMap) this.unsafeMap = true
19
20
  this.loadAnnotation(css)
20
21
  this.inline = this.startWith(this.annotation, 'data:')
21
22
 
@@ -30,7 +31,7 @@ class PreviousMap {
30
31
 
31
32
  consumer() {
32
33
  if (!this.consumerCache) {
33
- this.consumerCache = new SourceMapConsumer(this.text)
34
+ this.consumerCache = new SourceMapConsumer(this.json || this.text)
34
35
  }
35
36
  return this.consumerCache
36
37
  }
@@ -41,15 +42,18 @@ class PreviousMap {
41
42
  let charsetUri = /^data:application\/json;charset=utf-?8,/
42
43
  let uri = /^data:application\/json,/
43
44
 
44
- if (charsetUri.test(text) || uri.test(text)) {
45
- return decodeURIComponent(text.substr(RegExp.lastMatch.length))
45
+ let uriMatch = text.match(charsetUri) || text.match(uri)
46
+ if (uriMatch) {
47
+ return decodeURIComponent(text.substr(uriMatch[0].length))
46
48
  }
47
49
 
48
- if (baseCharsetUri.test(text) || baseUri.test(text)) {
49
- return fromBase64(text.substr(RegExp.lastMatch.length))
50
+ let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri)
51
+ if (baseUriMatch) {
52
+ return fromBase64(text.substr(baseUriMatch[0].length))
50
53
  }
51
54
 
52
- let encoding = text.match(/data:application\/json;([^,]+),/)[1]
55
+ let encoding = text.slice('data:application/json;'.length)
56
+ encoding = encoding.slice(0, encoding.indexOf(','))
53
57
  throw new Error('Unsupported source map encoding ' + encoding)
54
58
  }
55
59
 
@@ -67,7 +71,7 @@ class PreviousMap {
67
71
  }
68
72
 
69
73
  loadAnnotation(css) {
70
- let comments = css.match(/\/\*\s*# sourceMappingURL=/gm)
74
+ let comments = css.match(/\/\*\s*# sourceMappingURL=/g)
71
75
  if (!comments) return
72
76
 
73
77
  // sourceMappingURLs from comments, strings, etc.
@@ -80,7 +84,13 @@ class PreviousMap {
80
84
  }
81
85
  }
82
86
 
83
- loadFile(path) {
87
+ loadFile(path, cssFile, trusted) {
88
+ /* c8 ignore next 5 */
89
+ if (!trusted && !this.unsafeMap) {
90
+ if (!/\.map$/i.test(path)) {
91
+ return undefined
92
+ }
93
+ }
84
94
  this.root = dirname(path)
85
95
  if (existsSync(path)) {
86
96
  this.mapFile = path
@@ -97,7 +107,7 @@ class PreviousMap {
97
107
  } else if (typeof prev === 'function') {
98
108
  let prevPath = prev(file)
99
109
  if (prevPath) {
100
- let map = this.loadFile(prevPath)
110
+ let map = this.loadFile(prevPath, file, true)
101
111
  if (!map) {
102
112
  throw new Error(
103
113
  'Unable to load previous source map: ' + prevPath.toString()
@@ -121,7 +131,16 @@ class PreviousMap {
121
131
  } else if (this.annotation) {
122
132
  let map = this.annotation
123
133
  if (file) map = join(dirname(file), map)
124
- return this.loadFile(map)
134
+ let unknown = this.loadFile(map, file, false)
135
+ if (unknown) {
136
+ try {
137
+ /* c8 ignore next 4 */
138
+ this.json = JSON.parse(unknown.replace(/^\)]}'[^\n]*\n/, ''))
139
+ } catch {
140
+ return undefined
141
+ }
142
+ }
143
+ return unknown
125
144
  }
126
145
  }
127
146
 
@@ -1,13 +1,13 @@
1
1
  'use strict'
2
2
 
3
- let NoWorkResult = require('./no-work-result')
4
- let LazyResult = require('./lazy-result')
5
3
  let Document = require('./document')
4
+ let LazyResult = require('./lazy-result')
5
+ let NoWorkResult = require('./no-work-result')
6
6
  let Root = require('./root')
7
7
 
8
8
  class Processor {
9
9
  constructor(plugins = []) {
10
- this.version = '8.4.31'
10
+ this.version = '8.5.12'
11
11
  this.plugins = this.normalize(plugins)
12
12
  }
13
13
 
@@ -43,10 +43,10 @@ class Processor {
43
43
 
44
44
  process(css, opts = {}) {
45
45
  if (
46
- this.plugins.length === 0 &&
47
- typeof opts.parser === 'undefined' &&
48
- typeof opts.stringifier === 'undefined' &&
49
- typeof opts.syntax === 'undefined'
46
+ !this.plugins.length &&
47
+ !opts.parser &&
48
+ !opts.stringifier &&
49
+ !opts.syntax
50
50
  ) {
51
51
  return new NoWorkResult(this, css, opts)
52
52
  } else {
@@ -3,12 +3,16 @@
3
3
  let Warning = require('./warning')
4
4
 
5
5
  class Result {
6
+ get content() {
7
+ return this.css
8
+ }
9
+
6
10
  constructor(processor, root, opts) {
7
11
  this.processor = processor
8
12
  this.messages = []
9
13
  this.root = root
10
14
  this.opts = opts
11
- this.css = undefined
15
+ this.css = ''
12
16
  this.map = undefined
13
17
  }
14
18
 
@@ -32,10 +36,6 @@ class Result {
32
36
  warnings() {
33
37
  return this.messages.filter(i => i.type === 'warning')
34
38
  }
35
-
36
- get content() {
37
- return this.css
38
- }
39
39
  }
40
40
 
41
41
  module.exports = Result
@@ -4,12 +4,6 @@ let Container = require('./container')
4
4
  let list = require('./list')
5
5
 
6
6
  class Rule extends Container {
7
- constructor(defaults) {
8
- super(defaults)
9
- this.type = 'rule'
10
- if (!this.nodes) this.nodes = []
11
- }
12
-
13
7
  get selectors() {
14
8
  return list.comma(this.selector)
15
9
  }
@@ -19,6 +13,12 @@ class Rule extends Container {
19
13
  let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')
20
14
  this.selector = values.join(sep)
21
15
  }
16
+
17
+ constructor(defaults) {
18
+ super(defaults)
19
+ this.type = 'rule'
20
+ if (!this.nodes) this.nodes = []
21
+ }
22
22
  }
23
23
 
24
24
  module.exports = Rule
@@ -1,5 +1,17 @@
1
1
  'use strict'
2
2
 
3
+ // Escapes sequences that could break out of an HTML <style> context.
4
+ // Uses CSS unicode escaping (\3c = '<') which is valid CSS and parsed
5
+ // correctly by all compliant CSS consumers.
6
+ const STYLE_TAG = /(<)(\/?style\b)/gi
7
+ const COMMENT_OPEN = /(<)(!--)/g
8
+
9
+ function escapeHTMLInCSS(str) {
10
+ if (typeof str !== 'string') return str
11
+ if (!str.includes('<')) return str
12
+ return str.replace(STYLE_TAG, '\\3c $2').replace(COMMENT_OPEN, '\\3c $2')
13
+ }
14
+
3
15
  const DEFAULT_RAW = {
4
16
  after: '\n',
5
17
  beforeClose: '\n',
@@ -25,11 +37,12 @@ class Stringifier {
25
37
  }
26
38
 
27
39
  atrule(node, semicolon) {
40
+ let raws = node.raws
28
41
  let name = '@' + node.name
29
42
  let params = node.params ? this.rawValue(node, 'params') : ''
30
43
 
31
- if (typeof node.raws.afterName !== 'undefined') {
32
- name += node.raws.afterName
44
+ if (typeof raws.afterName !== 'undefined') {
45
+ name += raws.afterName
33
46
  } else if (params) {
34
47
  name += ' '
35
48
  }
@@ -37,8 +50,8 @@ class Stringifier {
37
50
  if (node.nodes) {
38
51
  this.block(node, name + params)
39
52
  } else {
40
- let end = (node.raws.between || '') + (semicolon ? ';' : '')
41
- this.builder(name + params + end, node)
53
+ let end = (raws.between || '') + (semicolon ? ';' : '')
54
+ this.builder(escapeHTMLInCSS(name + params + end), node)
42
55
  }
43
56
  }
44
57
 
@@ -72,53 +85,77 @@ class Stringifier {
72
85
  }
73
86
 
74
87
  block(node, start) {
75
- let between = this.raw(node, 'between', 'beforeOpen')
76
- this.builder(start + between + '{', node, 'start')
88
+ let raws = node.raws
89
+ let between = typeof raws.between !== 'undefined'
90
+ ? raws.between
91
+ : this.raw(node, 'between', 'beforeOpen')
92
+ this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start')
77
93
 
78
94
  let after
79
95
  if (node.nodes && node.nodes.length) {
80
96
  this.body(node)
81
- after = this.raw(node, 'after')
97
+ after = typeof raws.after !== 'undefined'
98
+ ? raws.after
99
+ : this.raw(node, 'after')
82
100
  } else {
83
- after = this.raw(node, 'after', 'emptyBody')
101
+ after = typeof raws.after !== 'undefined'
102
+ ? raws.after
103
+ : this.raw(node, 'after', 'emptyBody')
84
104
  }
85
105
 
86
- if (after) this.builder(after)
106
+ if (after) this.builder(escapeHTMLInCSS(after))
87
107
  this.builder('}', node, 'end')
88
108
  }
89
109
 
90
110
  body(node) {
91
- let last = node.nodes.length - 1
111
+ let nodes = node.nodes
112
+ let last = nodes.length - 1
92
113
  while (last > 0) {
93
- if (node.nodes[last].type !== 'comment') break
114
+ if (nodes[last].type !== 'comment') break
94
115
  last -= 1
95
116
  }
96
117
 
97
118
  let semicolon = this.raw(node, 'semicolon')
98
- for (let i = 0; i < node.nodes.length; i++) {
99
- let child = node.nodes[i]
100
- let before = this.raw(child, 'before')
101
- if (before) this.builder(before)
119
+ let isDocument = node.type === 'document'
120
+ for (let i = 0; i < nodes.length; i++) {
121
+ let child = nodes[i]
122
+ let before = child.raws.before
123
+ if (typeof before === 'undefined') {
124
+ before = this.raw(child, 'before')
125
+ }
126
+ if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before))
102
127
  this.stringify(child, last !== i || semicolon)
103
128
  }
104
129
  }
105
130
 
106
131
  comment(node) {
107
- let left = this.raw(node, 'left', 'commentLeft')
108
- let right = this.raw(node, 'right', 'commentRight')
109
- this.builder('/*' + left + node.text + right + '*/', node)
132
+ let raws = node.raws
133
+ let left = typeof raws.left !== 'undefined'
134
+ ? raws.left
135
+ : this.raw(node, 'left', 'commentLeft')
136
+ let right = typeof raws.right !== 'undefined'
137
+ ? raws.right
138
+ : this.raw(node, 'right', 'commentRight')
139
+ this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node)
110
140
  }
111
141
 
112
142
  decl(node, semicolon) {
113
- let between = this.raw(node, 'between', 'colon')
114
- let string = node.prop + between + this.rawValue(node, 'value')
143
+ let raws = node.raws
144
+ let between = typeof raws.between !== 'undefined'
145
+ ? raws.between
146
+ : this.raw(node, 'between', 'colon')
147
+
148
+ let rawVal = raws.value
149
+ let value = rawVal && rawVal.value === node.value ? rawVal.raw : node.value
150
+
151
+ let string = node.prop + between + value
115
152
 
116
153
  if (node.important) {
117
- string += node.raws.important || ' !important'
154
+ string += raws.important || ' !important'
118
155
  }
119
156
 
120
157
  if (semicolon) string += ';'
121
- this.builder(string, node)
158
+ this.builder(escapeHTMLInCSS(string), node)
122
159
  }
123
160
 
124
161
  document(node) {
@@ -154,9 +191,9 @@ class Stringifier {
154
191
 
155
192
  // Detect style by other nodes
156
193
  let root = node.root()
157
- if (!root.rawCache) root.rawCache = {}
158
- if (typeof root.rawCache[detect] !== 'undefined') {
159
- return root.rawCache[detect]
194
+ let cache = root.rawCache || (root.rawCache = {})
195
+ if (typeof cache[detect] !== 'undefined') {
196
+ return cache[detect]
160
197
  }
161
198
 
162
199
  if (detect === 'before' || detect === 'after') {
@@ -175,7 +212,7 @@ class Stringifier {
175
212
 
176
213
  if (typeof value === 'undefined') value = DEFAULT_RAW[detect]
177
214
 
178
- root.rawCache[detect] = value
215
+ cache[detect] = value
179
216
  return value
180
217
  }
181
218
 
@@ -324,13 +361,17 @@ class Stringifier {
324
361
 
325
362
  root(node) {
326
363
  this.body(node)
327
- if (node.raws.after) this.builder(node.raws.after)
364
+ if (node.raws.after) {
365
+ let after = node.raws.after
366
+ let isDocument = node.parent && node.parent.type === 'document'
367
+ this.builder(isDocument ? after : escapeHTMLInCSS(after))
368
+ }
328
369
  }
329
370
 
330
371
  rule(node) {
331
372
  this.block(node, this.rawValue(node, 'selector'))
332
373
  if (node.raws.ownSemicolon) {
333
- this.builder(node.raws.ownSemicolon, node, 'end')
374
+ this.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, 'end')
334
375
  }
335
376
  }
336
377
 
@@ -29,13 +29,14 @@ module.exports = function tokenizer(input, options = {}) {
29
29
  let css = input.css.valueOf()
30
30
  let ignore = options.ignoreErrors
31
31
 
32
- let code, next, quote, content, escape
33
- let escaped, escapePos, prev, n, currentToken
32
+ let code, content, escape, next, quote
33
+ let currentToken, escaped, escapePos, n, prev
34
34
 
35
35
  let length = css.length
36
36
  let pos = 0
37
37
  let buffer = []
38
38
  let returned = []
39
+ let lastBadParen = -1
39
40
 
40
41
  function position() {
41
42
  return pos
@@ -127,11 +128,14 @@ module.exports = function tokenizer(input, options = {}) {
127
128
  currentToken = ['brackets', css.slice(pos, next + 1), pos, next]
128
129
 
129
130
  pos = next
131
+ } else if (pos <= lastBadParen) {
132
+ currentToken = ['(', '(', pos]
130
133
  } else {
131
134
  next = css.indexOf(')', pos + 1)
132
135
  content = css.slice(pos, next + 1)
133
136
 
134
137
  if (next === -1 || RE_BAD_BRACKET.test(content)) {
138
+ lastBadParen = next === -1 ? length : next
135
139
  currentToken = ['(', '(', pos]
136
140
  } else {
137
141
  currentToken = ['brackets', content, pos, next]
@@ -1,14 +1,52 @@
1
1
  {
2
2
  "name": "postcss",
3
- "version": "8.4.31",
3
+ "version": "8.5.12",
4
4
  "description": "Tool for transforming styles with JS plugins",
5
- "engines": {
6
- "node": "^10 || ^12 || >=14"
5
+ "keywords": [
6
+ "css",
7
+ "manipulation",
8
+ "parser",
9
+ "postcss",
10
+ "preprocessor",
11
+ "rework",
12
+ "source map",
13
+ "transform",
14
+ "transpiler"
15
+ ],
16
+ "homepage": "https://postcss.org/",
17
+ "bugs": {
18
+ "url": "https://github.com/postcss/postcss/issues"
7
19
  },
20
+ "license": "MIT",
21
+ "author": "Andrey Sitnik <andrey@sitnik.es>",
22
+ "repository": "postcss/postcss",
23
+ "funding": [
24
+ {
25
+ "type": "opencollective",
26
+ "url": "https://opencollective.com/postcss/"
27
+ },
28
+ {
29
+ "type": "tidelift",
30
+ "url": "https://tidelift.com/funding/github/npm/postcss"
31
+ },
32
+ {
33
+ "type": "github",
34
+ "url": "https://github.com/sponsors/ai"
35
+ }
36
+ ],
37
+ "main": "./lib/postcss.js",
38
+ "browser": {
39
+ "./lib/terminal-highlight": false,
40
+ "source-map-js": false,
41
+ "path": false,
42
+ "url": false,
43
+ "fs": false
44
+ },
45
+ "types": "./lib/postcss.d.ts",
8
46
  "exports": {
9
47
  ".": {
10
- "require": "./lib/postcss.js",
11
- "import": "./lib/postcss.mjs"
48
+ "import": "./lib/postcss.mjs",
49
+ "require": "./lib/postcss.js"
12
50
  },
13
51
  "./lib/at-rule": "./lib/at-rule.js",
14
52
  "./lib/comment": "./lib/comment.js",
@@ -39,50 +77,12 @@
39
77
  "./lib/warning": "./lib/warning.js",
40
78
  "./package.json": "./package.json"
41
79
  },
42
- "main": "./lib/postcss.js",
43
- "types": "./lib/postcss.d.ts",
44
- "keywords": [
45
- "css",
46
- "postcss",
47
- "rework",
48
- "preprocessor",
49
- "parser",
50
- "source map",
51
- "transform",
52
- "manipulation",
53
- "transpiler"
54
- ],
55
- "funding": [
56
- {
57
- "type": "opencollective",
58
- "url": "https://opencollective.com/postcss/"
59
- },
60
- {
61
- "type": "tidelift",
62
- "url": "https://tidelift.com/funding/github/npm/postcss"
63
- },
64
- {
65
- "type": "github",
66
- "url": "https://github.com/sponsors/ai"
67
- }
68
- ],
69
- "author": "Andrey Sitnik <andrey@sitnik.ru>",
70
- "license": "MIT",
71
- "homepage": "https://postcss.org/",
72
- "repository": "postcss/postcss",
73
- "bugs": {
74
- "url": "https://github.com/postcss/postcss/issues"
75
- },
76
80
  "dependencies": {
77
- "nanoid": "^3.3.6",
78
- "picocolors": "^1.0.0",
79
- "source-map-js": "^1.0.2"
81
+ "nanoid": "^3.3.11",
82
+ "picocolors": "^1.1.1",
83
+ "source-map-js": "^1.2.1"
80
84
  },
81
- "browser": {
82
- "./lib/terminal-highlight": false,
83
- "source-map-js": false,
84
- "path": false,
85
- "url": false,
86
- "fs": false
85
+ "engines": {
86
+ "node": "^10 || ^12 || >=14"
87
87
  }
88
88
  }
@@ -10,6 +10,8 @@ export interface WebModeLaunchOptions {
10
10
  port?: number;
11
11
  /** Additional allowed origins for CORS (forwarded as GSD_WEB_ALLOWED_ORIGINS). */
12
12
  allowedOrigins?: string[];
13
+ /** Disable web bearer-token auth for externally protected deployments. */
14
+ noAuth?: boolean;
13
15
  }
14
16
  export interface ResolvedWebHostBootstrap {
15
17
  ok: true;
package/dist/web-mode.js CHANGED
@@ -245,6 +245,9 @@ function formatLaunchStatus(status) {
245
245
  function emitLaunchStatus(stderr, status) {
246
246
  stderr.write(formatLaunchStatus(status));
247
247
  }
248
+ function isWebNoAuthEnabled(env) {
249
+ return env.GSD_WEB_NO_AUTH === '1';
250
+ }
248
251
  function buildSpawnSpec(resolution, host, port, platform, execPath) {
249
252
  if (resolution.kind === 'packaged-standalone') {
250
253
  return {
@@ -452,15 +455,16 @@ export async function launchWebMode(options, deps = {}) {
452
455
  // without a clean shutdown (e.g. terminal closed, crash).
453
456
  cleanupStaleInstance(options.cwd, stderr, deps.registryPath);
454
457
  const port = options.port ?? await (deps.resolvePort ?? reserveWebPort)(host);
455
- const authToken = randomBytes(32).toString('hex');
458
+ const baseEnv = deps.env ?? process.env;
459
+ const noAuth = options.noAuth ?? isWebNoAuthEnabled(baseEnv);
460
+ const authToken = noAuth ? null : randomBytes(32).toString('hex');
456
461
  const url = `http://${host}:${port}`;
457
462
  const env = {
458
- ...(deps.env ?? process.env),
463
+ ...baseEnv,
459
464
  HOSTNAME: host,
460
465
  PORT: String(port),
461
466
  GSD_WEB_HOST: host,
462
467
  GSD_WEB_PORT: String(port),
463
- GSD_WEB_AUTH_TOKEN: authToken,
464
468
  GSD_WEB_PROJECT_CWD: options.cwd,
465
469
  GSD_WEB_PROJECT_SESSIONS_DIR: options.projectSessionsDir,
466
470
  GSD_WEB_PACKAGE_ROOT: resolution.packageRoot,
@@ -468,6 +472,14 @@ export async function launchWebMode(options, deps = {}) {
468
472
  ...(resolution.kind === 'source-dev' ? { NEXT_PUBLIC_GSD_DEV: '1' } : {}),
469
473
  ...(options.allowedOrigins?.length ? { GSD_WEB_ALLOWED_ORIGINS: options.allowedOrigins.join(',') } : {}),
470
474
  };
475
+ if (authToken) {
476
+ env.GSD_WEB_AUTH_TOKEN = authToken;
477
+ }
478
+ else {
479
+ delete env.GSD_WEB_AUTH_TOKEN;
480
+ env.GSD_WEB_NO_AUTH = '1';
481
+ stderr.write('[gsd] WARNING: Web token auth is disabled. The interface is unprotected unless external access control is in place.\n');
482
+ }
471
483
  try {
472
484
  stderr.write(`[gsd] Initialising resources…\n`);
473
485
  const bootstrap = deps.initResources ? { initResources: deps.initResources } : await loadResourceBootstrap();
@@ -565,7 +577,7 @@ export async function launchWebMode(options, deps = {}) {
565
577
  failureReason,
566
578
  });
567
579
  try {
568
- const bootReadyFn = deps.waitForBootReady ?? ((u) => waitForBootReady(u, 180_000, stderr, authToken));
580
+ const bootReadyFn = deps.waitForBootReady ?? ((u) => waitForBootReady(u, 180_000, stderr, authToken ?? undefined));
569
581
  const readyOutcome = bootReadyFn(url).then(() => ({ kind: 'ready' }));
570
582
  // If the child-exit branch wins, `readyOutcome` may reject later; swallow it
571
583
  // so it never surfaces as an unhandledRejection after the race has settled.
@@ -599,10 +611,10 @@ export async function launchWebMode(options, deps = {}) {
599
611
  // Register in multi-instance registry
600
612
  registerInstance(options.cwd, { pid, port, url }, deps.registryPath);
601
613
  }
602
- const authenticatedUrl = `${url}/#token=${authToken}`;
614
+ const browserUrl = authToken ? `${url}/#token=${authToken}` : url;
603
615
  try {
604
616
  ;
605
- (deps.openBrowser ?? openBrowser)(authenticatedUrl);
617
+ (deps.openBrowser ?? openBrowser)(browserUrl);
606
618
  }
607
619
  catch (browserError) {
608
620
  stderr.write(`[gsd] Could not open browser: ${browserError instanceof Error ? browserError.message : String(browserError)}\n`);
@@ -625,7 +637,7 @@ export async function launchWebMode(options, deps = {}) {
625
637
  emitLaunchStatus(stderr, failure);
626
638
  return failure;
627
639
  }
628
- const authenticatedUrl = `${url}/#token=${authToken}`;
640
+ const readyUrl = authToken ? `${url}/#token=${authToken}` : url;
629
641
  const success = {
630
642
  mode: 'web',
631
643
  ok: true,
@@ -638,7 +650,7 @@ export async function launchWebMode(options, deps = {}) {
638
650
  hostPath: resolution.entryPath,
639
651
  hostRoot: resolution.hostRoot,
640
652
  };
641
- stderr.write(`[gsd] Ready → ${authenticatedUrl}\n`);
653
+ stderr.write(`[gsd] Ready → ${readyUrl}\n`);
642
654
  emitLaunchStatus(stderr, success);
643
655
  return success;
644
656
  }