@opengsd/gsd-pi 1.1.1-dev.b2556262 → 1.2.0-dev.844675c9

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 (211) hide show
  1. package/dist/project-sessions.js +4 -2
  2. package/dist/resources/.managed-resources-content-hash +1 -1
  3. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +17 -9
  4. package/dist/resources/extensions/gsd/auto/contracts.js +8 -1
  5. package/dist/resources/extensions/gsd/auto/orchestrator.js +659 -57
  6. package/dist/resources/extensions/gsd/auto-prompts.js +110 -1
  7. package/dist/resources/extensions/gsd/auto-runtime-state.js +3 -0
  8. package/dist/resources/extensions/gsd/auto-tool-tracking.js +5 -0
  9. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +29 -0
  10. package/dist/resources/extensions/gsd/auto-worktree.js +24 -17
  11. package/dist/resources/extensions/gsd/auto.js +62 -464
  12. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +4 -1
  13. package/dist/resources/extensions/gsd/debug-logger.js +10 -0
  14. package/dist/resources/extensions/gsd/doctor-proactive.js +7 -2
  15. package/dist/resources/extensions/gsd/guided-flow.js +2 -2
  16. package/dist/resources/extensions/gsd/markdown-renderer.js +31 -32
  17. package/dist/resources/extensions/gsd/mcp-filter.js +6 -0
  18. package/dist/resources/extensions/gsd/native-git-bridge.js +45 -0
  19. package/dist/resources/extensions/gsd/prompts/discuss.md +6 -7
  20. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
  21. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -5
  22. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
  23. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
  24. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  25. package/dist/resources/extensions/gsd/prompts/research-milestone.md +2 -2
  26. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +5 -3
  27. package/dist/resources/extensions/gsd/schemas/parsers.js +6 -1
  28. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +21 -1
  29. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +169 -20
  30. package/dist/resources/extensions/gsd/user-input-boundary.js +42 -4
  31. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  32. package/dist/web/standalone/.next/BUILD_ID +1 -1
  33. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  34. package/dist/web/standalone/.next/build-manifest.json +2 -2
  35. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  36. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  37. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  38. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  41. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  42. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  43. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  45. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  46. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  47. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  51. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  52. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  53. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  54. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  55. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  56. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  57. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  58. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  59. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  60. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  61. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  62. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  64. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  65. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  66. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  67. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  68. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  69. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  70. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  71. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  72. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  73. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  74. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  75. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  76. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  77. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  78. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  79. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  80. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  81. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  82. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  83. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  84. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  85. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  86. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  87. package/dist/web/standalone/.next/server/app/index.html +1 -1
  88. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  95. package/dist/web/standalone/.next/server/chunks/5047.js +2 -0
  96. package/dist/web/standalone/.next/server/chunks/5124.js +1 -0
  97. package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
  98. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  99. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  100. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  101. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  102. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  103. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  104. package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
  105. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
  106. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  107. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  108. package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
  109. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
  110. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
  111. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
  112. package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
  113. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  114. package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
  115. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  116. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
  117. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  118. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  119. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  120. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
  121. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
  122. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  123. package/package.json +16 -11
  124. package/packages/cloud-mcp-gateway/package.json +2 -2
  125. package/packages/contracts/package.json +1 -1
  126. package/packages/daemon/package.json +4 -4
  127. package/packages/gsd-agent-core/package.json +5 -5
  128. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +1 -1
  129. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  130. package/packages/gsd-agent-modes/package.json +7 -7
  131. package/packages/mcp-server/package.json +3 -3
  132. package/packages/native/package.json +1 -1
  133. package/packages/pi-agent-core/package.json +1 -1
  134. package/packages/pi-ai/dist/models.generated.d.ts +0 -34
  135. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  136. package/packages/pi-ai/dist/models.generated.js +12 -46
  137. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  138. package/packages/pi-ai/package.json +1 -1
  139. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  140. package/packages/pi-coding-agent/dist/core/auth-storage.js +11 -3
  141. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  142. package/packages/pi-coding-agent/package.json +7 -7
  143. package/packages/pi-tui/package.json +2 -2
  144. package/packages/rpc-client/package.json +2 -2
  145. package/pkg/package.json +1 -1
  146. package/scripts/install/deps.js +10 -0
  147. package/scripts/link-workspace-packages.cjs +7 -40
  148. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +18 -8
  149. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +2 -2
  150. package/src/resources/extensions/gsd/auto/contracts.ts +8 -119
  151. package/src/resources/extensions/gsd/auto/orchestrator.ts +794 -58
  152. package/src/resources/extensions/gsd/auto-prompts.ts +114 -1
  153. package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -0
  154. package/src/resources/extensions/gsd/auto-tool-tracking.ts +5 -0
  155. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +33 -0
  156. package/src/resources/extensions/gsd/auto-worktree.ts +24 -16
  157. package/src/resources/extensions/gsd/auto.ts +81 -500
  158. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +4 -0
  159. package/src/resources/extensions/gsd/debug-logger.ts +11 -0
  160. package/src/resources/extensions/gsd/doctor-proactive.ts +8 -2
  161. package/src/resources/extensions/gsd/guided-flow.ts +2 -2
  162. package/src/resources/extensions/gsd/markdown-renderer.ts +38 -19
  163. package/src/resources/extensions/gsd/mcp-filter.ts +7 -0
  164. package/src/resources/extensions/gsd/native-git-bridge.ts +48 -0
  165. package/src/resources/extensions/gsd/prompts/discuss.md +6 -7
  166. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
  167. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -5
  168. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
  169. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
  170. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  171. package/src/resources/extensions/gsd/prompts/research-milestone.md +2 -2
  172. package/src/resources/extensions/gsd/prompts/validate-milestone.md +5 -3
  173. package/src/resources/extensions/gsd/schemas/parsers.ts +6 -1
  174. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +31 -10
  175. package/src/resources/extensions/gsd/tests/artifact-db-drift-memo.test.ts +66 -0
  176. package/src/resources/extensions/gsd/tests/auto-dispatch-baseline-harness.test.ts +53 -0
  177. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +590 -855
  178. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +38 -10
  179. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +15 -0
  180. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +64 -1
  181. package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
  182. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +75 -0
  183. package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
  184. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +127 -0
  185. package/src/resources/extensions/gsd/tests/parse-project-milestone-bridge.test.ts +77 -0
  186. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +4 -2
  187. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +29 -2
  188. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +65 -0
  189. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +19 -5
  190. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +38 -0
  191. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +62 -0
  192. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +24 -0
  193. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +15 -3
  194. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +183 -21
  195. package/src/resources/extensions/gsd/user-input-boundary.ts +37 -5
  196. package/dist/web/standalone/.next/server/chunks/678.js +0 -2
  197. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
  198. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
  199. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
  200. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
  201. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
  202. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
  203. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
  204. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
  205. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
  206. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
  207. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
  208. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
  209. package/scripts/ensure-workspace-builds.cjs +0 -129
  210. /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → Qbr81pQ-pbQXP4bq2VXLv}/_buildManifest.js +0 -0
  211. /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → Qbr81pQ-pbQXP4bq2VXLv}/_ssgManifest.js +0 -0
@@ -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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengsd/gsd-pi",
3
- "version": "1.1.1-dev.b2556262",
3
+ "version": "1.2.0-dev.844675c9",
4
4
  "description": "GSD Pi local-first coding agent",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -19,7 +19,6 @@
19
19
  },
20
20
  "files": [
21
21
  "dist",
22
- "dist/web",
23
22
  "packages/*/dist/**",
24
23
  "packages/*/bin/**",
25
24
  "packages/*/package.json",
@@ -30,12 +29,15 @@
30
29
  "scripts/install.js",
31
30
  "scripts/install",
32
31
  "scripts/link-workspace-packages.cjs",
33
- "scripts/ensure-workspace-builds.cjs",
34
32
  "scripts/lib/workspace-manifest.cjs",
35
33
  "scripts/lib/logo.cjs",
36
34
  "package.json",
37
35
  "README.md"
38
36
  ],
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "provenance": true
40
+ },
39
41
  "piConfig": {
40
42
  "name": "gsd",
41
43
  "configDir": ".gsd"
@@ -68,6 +70,8 @@
68
70
  "copy-export-html": "node scripts/copy-export-html.cjs",
69
71
  "test:compile": "node scripts/compile-tests.mjs",
70
72
  "baseline:refactor": "node scripts/refactor-baseline.mjs",
73
+ "baseline:auto-dispatch": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types scripts/auto-dispatch-baseline.mjs",
74
+ "baseline:auto-dispatch:compare": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types scripts/auto-dispatch-baseline.mjs --no-write",
71
75
  "baseline:refactor:gate": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/tests/refactor-baseline.test.ts src/tests/rpc-golden-fixtures.test.ts src/tests/prompt-golden-fixtures.test.ts src/tests/contracts-rpc-fixtures.test.ts",
72
76
  "baseline:refactor:phase0": "pnpm run baseline:refactor:gate && node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/gsd/tests/derive-state-db.test.ts src/resources/extensions/gsd/tests/single-writer-invariant.test.ts src/resources/extensions/gsd/tests/auto-recovery.test.ts src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts",
73
77
  "legacy:cleanup:gate": "node scripts/legacy-cleanup-gate.mjs",
@@ -86,11 +90,9 @@
86
90
  "test:integration": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test --test-timeout=180000 \"src/tests/integration/*.test.ts\" \"src/resources/extensions/gsd/tests/integration/*.test.ts\" \"src/resources/extensions/async-jobs/*.test.ts\" \"src/resources/extensions/ollama/**/*.test.ts\" \"src/resources/extensions/ollama/*.test.ts\" \"src/resources/extensions/search-the-web/tests/*.test.ts\" \"src/resources/extensions/bg-shell/tests/*.test.ts\" \"src/resources/extensions/slash-commands/tests/*.test.ts\" \"src/resources/extensions/browser-tools/tests/*.test.mjs\"",
87
91
  "pretest": "pnpm run typecheck:extensions",
88
92
  "test": "pnpm run test:unit && pnpm run test:integration && pnpm run test:packages",
89
- "prototype:tui-design": "pnpm run build:pi-tui && pnpm run build:pi-coding-agent && node packages/pi-coding-agent/scripts/run-design-prototype.mjs",
90
- "prototype:tui-density": "pnpm run build:pi-tui && pnpm run build:pi-coding-agent && node packages/pi-coding-agent/scripts/run-density-prototype.mjs",
91
- "prototype:tui-widget": "pnpm run build:pi-tui && pnpm run build:pi-coding-agent && node --experimental-strip-types packages/gsd-agent-modes/scripts/run-widget-prototype.mjs",
92
93
  "test:smoke": "node --experimental-strip-types tests/smoke/run.ts",
93
94
  "test:live": "node scripts/with-env.mjs GSD_LIVE_TESTS=1 -- node --experimental-strip-types tests/live/run.ts",
95
+ "test:live-workflow": "node --experimental-strip-types tests/live-workflow/run.ts",
94
96
  "test:browser-tools": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs",
95
97
  "test:native": "pnpm --filter @gsd/native run test",
96
98
  "test:secret-scan": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/tests/secret-scan.test.ts",
@@ -110,6 +112,7 @@
110
112
  "sync-pkg-version": "node scripts/sync-pkg-version.cjs",
111
113
  "sync-platform-versions": "node native/scripts/sync-platform-versions.cjs",
112
114
  "verify:native-platform-packages": "node scripts/verify-native-platform-packages.mjs",
115
+ "verify:npm-release": "node scripts/verify-npm-release.mjs",
113
116
  "verify:version-sync": "node scripts/verify-version-sync.cjs",
114
117
  "validate-pack": "node scripts/validate-pack.js",
115
118
  "prepack": "node scripts/prepack-resolve-workspace.cjs",
@@ -205,15 +208,17 @@
205
208
  },
206
209
  "optionalDependencies": {
207
210
  "@mariozechner/clipboard": "0.3.6",
208
- "@opengsd/engine-darwin-arm64": "1.1.1",
209
- "@opengsd/engine-darwin-x64": "1.1.1",
210
- "@opengsd/engine-linux-arm64-gnu": "1.1.1",
211
- "@opengsd/engine-linux-x64-gnu": "1.1.1",
212
- "@opengsd/engine-win32-x64-msvc": "1.1.1",
211
+ "@opengsd/engine-darwin-arm64": "1.2.0",
212
+ "@opengsd/engine-darwin-x64": "1.2.0",
213
+ "@opengsd/engine-linux-arm64-gnu": "1.2.0",
214
+ "@opengsd/engine-linux-x64-gnu": "1.2.0",
215
+ "@opengsd/engine-win32-x64-msvc": "1.2.0",
213
216
  "fsevents": "~2.3.3",
214
217
  "koffi": "^2.9.0"
215
218
  },
216
219
  "overrides": {
220
+ "uuid": "^11.1.1",
221
+ "postcss": "^8.5.10",
217
222
  "@mistralai/mistralai": "2.2.1",
218
223
  "gaxios": "7.1.4",
219
224
  "c8": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengsd/cloud-mcp-gateway",
3
- "version": "1.1.1-dev.b2556262",
3
+ "version": "1.2.0-dev.844675c9",
4
4
  "description": "Cloud MCP gateway for brokering remote MCP clients to local GSD runtimes",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@modelcontextprotocol/sdk": "^1.27.1",
32
- "@opengsd/mcp-server": "^1.1.1-dev.b2556262",
32
+ "@opengsd/mcp-server": "^1.2.0-dev.844675c9",
33
33
  "ws": "^8.20.0",
34
34
  "zod": "^4.0.0"
35
35
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengsd/contracts",
3
- "version": "1.1.1-dev.b2556262",
3
+ "version": "1.2.0-dev.844675c9",
4
4
  "description": "Shared public contracts for GSD workspace boundaries",
5
5
  "license": "MIT",
6
6
  "gsd": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengsd/daemon",
3
- "version": "1.1.1-dev.b2556262",
3
+ "version": "1.2.0-dev.844675c9",
4
4
  "description": "GSD daemon — background process for project monitoring and Discord integration",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -31,9 +31,9 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@anthropic-ai/sdk": "^0.52.0",
34
- "@opengsd/contracts": "^1.1.1-dev.b2556262",
35
- "@opengsd/mcp-server": "^1.1.1-dev.b2556262",
36
- "@opengsd/rpc-client": "^1.1.1-dev.b2556262",
34
+ "@opengsd/contracts": "^1.2.0-dev.844675c9",
35
+ "@opengsd/mcp-server": "^1.2.0-dev.844675c9",
36
+ "@opengsd/rpc-client": "^1.2.0-dev.844675c9",
37
37
  "discord.js": "^14.25.1",
38
38
  "ws": "^8.20.0",
39
39
  "yaml": "^2.8.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd/agent-core",
3
- "version": "1.1.1-dev.b2556262",
3
+ "version": "1.2.0-dev.844675c9",
4
4
  "description": "GSD session orchestration layer on top of @gsd/pi-coding-agent",
5
5
  "type": "module",
6
6
  "gsd": {
@@ -25,9 +25,9 @@
25
25
  "test": "node --import ../../src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/*.test.ts src/**/*.test.ts"
26
26
  },
27
27
  "dependencies": {
28
- "@gsd/native": "^1.1.1-dev.b2556262",
29
- "@gsd/pi-agent-core": "^1.1.1-dev.b2556262",
30
- "@gsd/pi-ai": "^1.1.1-dev.b2556262",
31
- "@gsd/pi-coding-agent": "^1.1.1-dev.b2556262"
28
+ "@gsd/native": "^1.2.0-dev.844675c9",
29
+ "@gsd/pi-agent-core": "^1.2.0-dev.844675c9",
30
+ "@gsd/pi-ai": "^1.2.0-dev.844675c9",
31
+ "@gsd/pi-coding-agent": "^1.2.0-dev.844675c9"
32
32
  }
33
33
  }
@@ -96,7 +96,7 @@ export function renderConnectedCard(width, title, bodyLines, opts = {}) {
96
96
  }
97
97
  const paintBody = (line) => {
98
98
  const innerWidth = Math.max(1, width - indent);
99
- const inner = padRight(truncateToWidth(" " + line, innerWidth, ""), innerWidth);
99
+ const inner = padRight(" " + line, innerWidth);
100
100
  const painted = opts.bodyBg ? theme.bg(opts.bodyBg, inner) : inner;
101
101
  return prefix + painted;
102
102
  };