gsd-pi 2.37.1-dev.d3ace49 → 2.38.0-dev.361f5e3

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 (168) hide show
  1. package/dist/app-paths.js +1 -1
  2. package/dist/cli.js +9 -0
  3. package/dist/extension-discovery.d.ts +5 -3
  4. package/dist/extension-discovery.js +14 -9
  5. package/dist/extension-registry.js +2 -2
  6. package/dist/remote-questions-config.js +2 -2
  7. package/dist/resources/extensions/browser-tools/package.json +3 -1
  8. package/dist/resources/extensions/cmux/index.js +55 -1
  9. package/dist/resources/extensions/context7/package.json +1 -1
  10. package/dist/resources/extensions/env-utils.js +29 -0
  11. package/dist/resources/extensions/get-secrets-from-user.js +5 -24
  12. package/dist/resources/extensions/github-sync/cli.js +284 -0
  13. package/dist/resources/extensions/github-sync/index.js +73 -0
  14. package/dist/resources/extensions/github-sync/mapping.js +67 -0
  15. package/dist/resources/extensions/github-sync/sync.js +424 -0
  16. package/dist/resources/extensions/github-sync/templates.js +118 -0
  17. package/dist/resources/extensions/github-sync/types.js +7 -0
  18. package/dist/resources/extensions/google-search/package.json +3 -1
  19. package/dist/resources/extensions/gsd/auto/session.js +6 -23
  20. package/dist/resources/extensions/gsd/auto-dispatch.js +7 -8
  21. package/dist/resources/extensions/gsd/auto-loop.js +149 -170
  22. package/dist/resources/extensions/gsd/auto-post-unit.js +92 -70
  23. package/dist/resources/extensions/gsd/auto-prompts.js +7 -31
  24. package/dist/resources/extensions/gsd/auto-start.js +13 -2
  25. package/dist/resources/extensions/gsd/auto-worktree-sync.js +13 -5
  26. package/dist/resources/extensions/gsd/auto.js +143 -96
  27. package/dist/resources/extensions/gsd/captures.js +9 -1
  28. package/dist/resources/extensions/gsd/commands-extensions.js +3 -2
  29. package/dist/resources/extensions/gsd/commands-handlers.js +16 -3
  30. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
  31. package/dist/resources/extensions/gsd/commands.js +22 -2
  32. package/dist/resources/extensions/gsd/context-budget.js +2 -10
  33. package/dist/resources/extensions/gsd/detection.js +1 -2
  34. package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -2
  35. package/dist/resources/extensions/gsd/doctor-checks.js +82 -0
  36. package/dist/resources/extensions/gsd/doctor-environment.js +78 -0
  37. package/dist/resources/extensions/gsd/doctor-format.js +15 -0
  38. package/dist/resources/extensions/gsd/doctor-providers.js +27 -11
  39. package/dist/resources/extensions/gsd/doctor.js +184 -11
  40. package/dist/resources/extensions/gsd/export.js +1 -1
  41. package/dist/resources/extensions/gsd/files.js +2 -2
  42. package/dist/resources/extensions/gsd/forensics.js +1 -1
  43. package/dist/resources/extensions/gsd/git-service.js +8 -1
  44. package/dist/resources/extensions/gsd/index.js +2 -1
  45. package/dist/resources/extensions/gsd/migrate/parsers.js +1 -1
  46. package/dist/resources/extensions/gsd/package.json +1 -1
  47. package/dist/resources/extensions/gsd/preferences-models.js +0 -12
  48. package/dist/resources/extensions/gsd/preferences-types.js +1 -1
  49. package/dist/resources/extensions/gsd/preferences-validation.js +59 -11
  50. package/dist/resources/extensions/gsd/preferences.js +8 -5
  51. package/dist/resources/extensions/gsd/prompts/discuss.md +11 -14
  52. package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -2
  53. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +11 -12
  54. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -10
  55. package/dist/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  56. package/dist/resources/extensions/gsd/prompts/queue.md +4 -8
  57. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +11 -8
  58. package/dist/resources/extensions/gsd/prompts/run-uat.md +25 -10
  59. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -2
  60. package/dist/resources/extensions/gsd/repo-identity.js +21 -4
  61. package/dist/resources/extensions/gsd/resource-version.js +2 -1
  62. package/dist/resources/extensions/gsd/state.js +1 -1
  63. package/dist/resources/extensions/gsd/visualizer-data.js +1 -1
  64. package/dist/resources/extensions/gsd/worktree.js +35 -16
  65. package/dist/resources/extensions/remote-questions/status.js +2 -1
  66. package/dist/resources/extensions/remote-questions/store.js +2 -1
  67. package/dist/resources/extensions/search-the-web/provider.js +2 -1
  68. package/dist/resources/extensions/subagent/index.js +12 -3
  69. package/dist/resources/extensions/subagent/isolation.js +2 -1
  70. package/dist/resources/extensions/ttsr/rule-loader.js +2 -1
  71. package/dist/resources/extensions/universal-config/package.json +1 -1
  72. package/dist/welcome-screen.d.ts +12 -0
  73. package/dist/welcome-screen.js +53 -0
  74. package/package.json +1 -1
  75. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  76. package/packages/pi-coding-agent/dist/core/package-manager.js +8 -4
  77. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  78. package/packages/pi-coding-agent/package.json +1 -1
  79. package/packages/pi-coding-agent/src/core/package-manager.ts +8 -4
  80. package/pkg/package.json +1 -1
  81. package/src/resources/extensions/cmux/index.ts +57 -1
  82. package/src/resources/extensions/env-utils.ts +31 -0
  83. package/src/resources/extensions/get-secrets-from-user.ts +5 -24
  84. package/src/resources/extensions/github-sync/cli.ts +364 -0
  85. package/src/resources/extensions/github-sync/index.ts +93 -0
  86. package/src/resources/extensions/github-sync/mapping.ts +81 -0
  87. package/src/resources/extensions/github-sync/sync.ts +556 -0
  88. package/src/resources/extensions/github-sync/templates.ts +183 -0
  89. package/src/resources/extensions/github-sync/tests/cli.test.ts +20 -0
  90. package/src/resources/extensions/github-sync/tests/commit-linking.test.ts +39 -0
  91. package/src/resources/extensions/github-sync/tests/mapping.test.ts +104 -0
  92. package/src/resources/extensions/github-sync/tests/templates.test.ts +110 -0
  93. package/src/resources/extensions/github-sync/types.ts +47 -0
  94. package/src/resources/extensions/gsd/auto/session.ts +7 -25
  95. package/src/resources/extensions/gsd/auto-dispatch.ts +6 -8
  96. package/src/resources/extensions/gsd/auto-loop.ts +207 -252
  97. package/src/resources/extensions/gsd/auto-post-unit.ts +69 -41
  98. package/src/resources/extensions/gsd/auto-prompts.ts +7 -33
  99. package/src/resources/extensions/gsd/auto-start.ts +18 -2
  100. package/src/resources/extensions/gsd/auto-worktree-sync.ts +15 -4
  101. package/src/resources/extensions/gsd/auto.ts +139 -101
  102. package/src/resources/extensions/gsd/captures.ts +10 -1
  103. package/src/resources/extensions/gsd/commands-extensions.ts +4 -2
  104. package/src/resources/extensions/gsd/commands-handlers.ts +17 -2
  105. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
  106. package/src/resources/extensions/gsd/commands.ts +24 -2
  107. package/src/resources/extensions/gsd/context-budget.ts +2 -12
  108. package/src/resources/extensions/gsd/detection.ts +2 -2
  109. package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -2
  110. package/src/resources/extensions/gsd/doctor-checks.ts +75 -0
  111. package/src/resources/extensions/gsd/doctor-environment.ts +82 -1
  112. package/src/resources/extensions/gsd/doctor-format.ts +20 -0
  113. package/src/resources/extensions/gsd/doctor-providers.ts +26 -9
  114. package/src/resources/extensions/gsd/doctor-types.ts +16 -1
  115. package/src/resources/extensions/gsd/doctor.ts +177 -13
  116. package/src/resources/extensions/gsd/export.ts +1 -1
  117. package/src/resources/extensions/gsd/files.ts +2 -2
  118. package/src/resources/extensions/gsd/forensics.ts +1 -1
  119. package/src/resources/extensions/gsd/git-service.ts +13 -1
  120. package/src/resources/extensions/gsd/index.ts +3 -1
  121. package/src/resources/extensions/gsd/migrate/parsers.ts +1 -1
  122. package/src/resources/extensions/gsd/preferences-models.ts +0 -12
  123. package/src/resources/extensions/gsd/preferences-types.ts +4 -4
  124. package/src/resources/extensions/gsd/preferences-validation.ts +51 -11
  125. package/src/resources/extensions/gsd/preferences.ts +8 -5
  126. package/src/resources/extensions/gsd/prompts/discuss.md +11 -14
  127. package/src/resources/extensions/gsd/prompts/execute-task.md +2 -2
  128. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +11 -12
  129. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -10
  130. package/src/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  131. package/src/resources/extensions/gsd/prompts/queue.md +4 -8
  132. package/src/resources/extensions/gsd/prompts/reactive-execute.md +11 -8
  133. package/src/resources/extensions/gsd/prompts/run-uat.md +25 -10
  134. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -2
  135. package/src/resources/extensions/gsd/repo-identity.ts +23 -4
  136. package/src/resources/extensions/gsd/resource-version.ts +3 -1
  137. package/src/resources/extensions/gsd/state.ts +1 -1
  138. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +21 -18
  139. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +16 -37
  140. package/src/resources/extensions/gsd/tests/cmux.test.ts +93 -0
  141. package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +266 -0
  142. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +86 -3
  143. package/src/resources/extensions/gsd/tests/preferences.test.ts +2 -7
  144. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +59 -0
  145. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +21 -1
  146. package/src/resources/extensions/gsd/tests/run-uat.test.ts +11 -3
  147. package/src/resources/extensions/gsd/tests/worktree.test.ts +47 -0
  148. package/src/resources/extensions/gsd/types.ts +0 -1
  149. package/src/resources/extensions/gsd/visualizer-data.ts +1 -1
  150. package/src/resources/extensions/gsd/worktree.ts +35 -15
  151. package/src/resources/extensions/remote-questions/status.ts +3 -1
  152. package/src/resources/extensions/remote-questions/store.ts +3 -1
  153. package/src/resources/extensions/search-the-web/provider.ts +2 -1
  154. package/src/resources/extensions/subagent/index.ts +12 -3
  155. package/src/resources/extensions/subagent/isolation.ts +3 -1
  156. package/src/resources/extensions/ttsr/rule-loader.ts +3 -1
  157. package/dist/resources/extensions/gsd/prompt-compressor.js +0 -393
  158. package/dist/resources/extensions/gsd/semantic-chunker.js +0 -254
  159. package/dist/resources/extensions/gsd/summary-distiller.js +0 -212
  160. package/src/resources/extensions/gsd/prompt-compressor.ts +0 -508
  161. package/src/resources/extensions/gsd/semantic-chunker.ts +0 -336
  162. package/src/resources/extensions/gsd/summary-distiller.ts +0 -258
  163. package/src/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  164. package/src/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  165. package/src/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  166. package/src/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  167. package/src/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  168. package/src/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
@@ -1,212 +0,0 @@
1
- /**
2
- * Summary distiller — extracts essential structured data from SUMMARY.md files,
3
- * dropping verbose prose to save context budget.
4
- */
5
- // ─── Frontmatter parsing ─────────────────────────────────────────────────────
6
- function parseFrontmatter(raw) {
7
- const result = {
8
- id: "",
9
- provides: [],
10
- requires: [],
11
- key_files: [],
12
- key_decisions: [],
13
- patterns_established: [],
14
- };
15
- // Extract frontmatter block between --- markers
16
- const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/);
17
- if (!fmMatch)
18
- return result;
19
- const fmBlock = fmMatch[1];
20
- const lines = fmBlock.split(/\r?\n/);
21
- let currentKey = null;
22
- for (const line of lines) {
23
- // Scalar value: key: value
24
- const scalarMatch = line.match(/^(\w[\w_]*):\s*(.+)$/);
25
- if (scalarMatch) {
26
- const [, key, value] = scalarMatch;
27
- currentKey = key;
28
- setScalar(result, key, value.trim());
29
- continue;
30
- }
31
- // Array-start key with empty value: key:\n or key: []\n
32
- const arrayStartMatch = line.match(/^(\w[\w_]*):\s*(\[\])?\s*$/);
33
- if (arrayStartMatch) {
34
- currentKey = arrayStartMatch[1];
35
- continue;
36
- }
37
- // Array item: - value
38
- const itemMatch = line.match(/^\s+-\s+(.+)$/);
39
- if (itemMatch && currentKey) {
40
- pushItem(result, currentKey, itemMatch[1].trim());
41
- continue;
42
- }
43
- }
44
- return result;
45
- }
46
- function setScalar(fm, key, value) {
47
- if (key === "id")
48
- fm.id = value;
49
- }
50
- function pushItem(fm, key, value) {
51
- switch (key) {
52
- case "provides":
53
- fm.provides.push(value);
54
- break;
55
- case "requires":
56
- fm.requires.push(value);
57
- break;
58
- case "key_files":
59
- fm.key_files.push(value);
60
- break;
61
- case "key_decisions":
62
- fm.key_decisions.push(value);
63
- break;
64
- case "patterns_established":
65
- fm.patterns_established.push(value);
66
- break;
67
- }
68
- }
69
- // ─── Body parsing ────────────────────────────────────────────────────────────
70
- function extractTitleAndOneLiner(body) {
71
- const lines = body.split(/\r?\n/);
72
- let titleId = "";
73
- let oneLiner = "";
74
- let foundTitle = false;
75
- for (const line of lines) {
76
- const titleMatch = line.match(/^#\s+(\S+):\s*(.*)$/);
77
- if (titleMatch && !foundTitle) {
78
- titleId = titleMatch[1];
79
- // If the title line itself has text after "S01: ", use that as a fallback
80
- if (titleMatch[2].trim()) {
81
- oneLiner = titleMatch[2].trim();
82
- }
83
- foundTitle = true;
84
- continue;
85
- }
86
- // First non-empty line after the title is the one-liner
87
- if (foundTitle && !oneLiner && line.trim() && !line.startsWith("#")) {
88
- oneLiner = line.trim();
89
- break;
90
- }
91
- }
92
- return { id: titleId, oneLiner };
93
- }
94
- function getBodyAfterFrontmatter(raw) {
95
- const fmMatch = raw.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);
96
- if (fmMatch) {
97
- return raw.slice(fmMatch[0].length);
98
- }
99
- return raw;
100
- }
101
- // ─── Public API ──────────────────────────────────────────────────────────────
102
- /**
103
- * Distill a single SUMMARY.md content string into a compact structured block.
104
- */
105
- export function distillSingle(summary) {
106
- const fm = parseFrontmatter(summary);
107
- const body = getBodyAfterFrontmatter(summary);
108
- const { id: titleId, oneLiner } = extractTitleAndOneLiner(body);
109
- const id = fm.id || titleId || "???";
110
- return formatEntry({
111
- id,
112
- oneLiner,
113
- provides: fm.provides,
114
- requires: fm.requires,
115
- key_files: fm.key_files,
116
- key_decisions: fm.key_decisions,
117
- patterns: fm.patterns_established,
118
- });
119
- }
120
- function formatEntry(entry) {
121
- return formatEntryWithDropLevel(entry, 0);
122
- }
123
- /**
124
- * Format an entry, progressively dropping fields based on dropLevel:
125
- * 0 = full output
126
- * 1 = drop patterns
127
- * 2 = drop patterns + key_decisions
128
- * 3 = drop patterns + key_decisions + key_files
129
- */
130
- function formatEntryWithDropLevel(entry, dropLevel) {
131
- const lines = [];
132
- lines.push(`## ${entry.id}: ${entry.oneLiner}`);
133
- if (entry.provides.length > 0) {
134
- lines.push(`provides: ${entry.provides.join(", ")}`);
135
- }
136
- if (entry.requires.length > 0) {
137
- lines.push(`requires: ${entry.requires.join(", ")}`);
138
- }
139
- if (dropLevel < 3 && entry.key_files.length > 0) {
140
- lines.push(`key_files: ${entry.key_files.join(", ")}`);
141
- }
142
- if (dropLevel < 2 && entry.key_decisions.length > 0) {
143
- lines.push(`key_decisions: ${entry.key_decisions.join(", ")}`);
144
- }
145
- if (dropLevel < 1 && entry.patterns.length > 0) {
146
- lines.push(`patterns: ${entry.patterns.join(", ")}`);
147
- }
148
- return lines.join("\n");
149
- }
150
- /**
151
- * Distill multiple SUMMARY.md contents into a budget-constrained output.
152
- */
153
- export function distillSummaries(summaries, budgetChars) {
154
- const originalChars = summaries.reduce((sum, s) => sum + s.length, 0);
155
- if (summaries.length === 0) {
156
- return {
157
- content: "",
158
- summaryCount: 0,
159
- savingsPercent: 0,
160
- originalChars: 0,
161
- distilledChars: 0,
162
- };
163
- }
164
- // Parse all entries up front
165
- const entries = summaries.map((summary) => {
166
- const fm = parseFrontmatter(summary);
167
- const body = getBodyAfterFrontmatter(summary);
168
- const { id: titleId, oneLiner } = extractTitleAndOneLiner(body);
169
- return {
170
- id: fm.id || titleId || "???",
171
- oneLiner,
172
- provides: fm.provides,
173
- requires: fm.requires,
174
- key_files: fm.key_files,
175
- key_decisions: fm.key_decisions,
176
- patterns: fm.patterns_established,
177
- };
178
- });
179
- // Try progressively more aggressive dropping until it fits
180
- for (let dropLevel = 0; dropLevel <= 3; dropLevel++) {
181
- const blocks = entries.map((e) => formatEntryWithDropLevel(e, dropLevel));
182
- const content = blocks.join("\n\n");
183
- if (content.length <= budgetChars) {
184
- const distilledChars = content.length;
185
- return {
186
- content,
187
- summaryCount: summaries.length,
188
- savingsPercent: originalChars > 0
189
- ? Math.round((1 - distilledChars / originalChars) * 100)
190
- : 0,
191
- originalChars,
192
- distilledChars,
193
- };
194
- }
195
- }
196
- // Even at max drop level it doesn't fit — truncate
197
- const blocks = entries.map((e) => formatEntryWithDropLevel(e, 3));
198
- let content = blocks.join("\n\n");
199
- if (content.length > budgetChars) {
200
- content = content.slice(0, Math.max(0, budgetChars - 15)) + "\n[...truncated]";
201
- }
202
- const distilledChars = content.length;
203
- return {
204
- content,
205
- summaryCount: summaries.length,
206
- savingsPercent: originalChars > 0
207
- ? Math.round((1 - distilledChars / originalChars) * 100)
208
- : 0,
209
- originalChars,
210
- distilledChars,
211
- };
212
- }