@seanmars/tospec 0.11.0 → 0.13.0

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/assets/dashboard/style.css +8 -3
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +40 -17
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/config.d.ts.map +1 -1
  6. package/dist/commands/config.js +0 -9
  7. package/dist/commands/config.js.map +1 -1
  8. package/dist/commands/dashboard.d.ts +95 -8
  9. package/dist/commands/dashboard.d.ts.map +1 -1
  10. package/dist/commands/dashboard.js +253 -32
  11. package/dist/commands/dashboard.js.map +1 -1
  12. package/dist/commands/decision.d.ts.map +1 -1
  13. package/dist/commands/decision.js +1 -13
  14. package/dist/commands/decision.js.map +1 -1
  15. package/dist/commands/validate.d.ts.map +1 -1
  16. package/dist/commands/validate.js +36 -41
  17. package/dist/commands/validate.js.map +1 -1
  18. package/dist/commands/workflow/instructions.d.ts +0 -2
  19. package/dist/commands/workflow/instructions.d.ts.map +1 -1
  20. package/dist/commands/workflow/instructions.js +2 -37
  21. package/dist/commands/workflow/instructions.js.map +1 -1
  22. package/dist/commands/workflow/shared.d.ts +0 -3
  23. package/dist/commands/workflow/shared.d.ts.map +1 -1
  24. package/dist/commands/workflow/shared.js.map +1 -1
  25. package/dist/core/archive.d.ts +13 -4
  26. package/dist/core/archive.d.ts.map +1 -1
  27. package/dist/core/archive.js +89 -117
  28. package/dist/core/archive.js.map +1 -1
  29. package/dist/core/artifact-graph/instruction-loader.d.ts +0 -5
  30. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  31. package/dist/core/artifact-graph/instruction-loader.js +31 -37
  32. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  33. package/dist/core/artifact-graph/resolver.d.ts +6 -0
  34. package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
  35. package/dist/core/artifact-graph/resolver.js +79 -124
  36. package/dist/core/artifact-graph/resolver.js.map +1 -1
  37. package/dist/core/change-presenter.d.ts +0 -1
  38. package/dist/core/change-presenter.d.ts.map +1 -1
  39. package/dist/core/change-presenter.js +3 -20
  40. package/dist/core/change-presenter.js.map +1 -1
  41. package/dist/core/command-generation/adapters/index.d.ts +9 -1
  42. package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
  43. package/dist/core/command-generation/adapters/index.js +10 -1
  44. package/dist/core/command-generation/adapters/index.js.map +1 -1
  45. package/dist/core/command-generation/index.d.ts +2 -2
  46. package/dist/core/command-generation/index.d.ts.map +1 -1
  47. package/dist/core/command-generation/index.js +2 -2
  48. package/dist/core/command-generation/index.js.map +1 -1
  49. package/dist/core/config.d.ts +0 -4
  50. package/dist/core/config.d.ts.map +1 -1
  51. package/dist/core/config.js +0 -4
  52. package/dist/core/config.js.map +1 -1
  53. package/dist/core/converters/json-converter.d.ts +0 -1
  54. package/dist/core/converters/json-converter.d.ts.map +1 -1
  55. package/dist/core/converters/json-converter.js +3 -17
  56. package/dist/core/converters/json-converter.js.map +1 -1
  57. package/dist/core/dashboard-activity.d.ts.map +1 -1
  58. package/dist/core/dashboard-activity.js +2 -8
  59. package/dist/core/dashboard-activity.js.map +1 -1
  60. package/dist/core/dashboard-data.d.ts +7 -7
  61. package/dist/core/dashboard-data.d.ts.map +1 -1
  62. package/dist/core/dashboard-data.js +15 -54
  63. package/dist/core/dashboard-data.js.map +1 -1
  64. package/dist/core/id.d.ts +0 -8
  65. package/dist/core/id.d.ts.map +1 -1
  66. package/dist/core/id.js +0 -19
  67. package/dist/core/id.js.map +1 -1
  68. package/dist/core/init.d.ts +0 -1
  69. package/dist/core/init.d.ts.map +1 -1
  70. package/dist/core/init.js +11 -26
  71. package/dist/core/init.js.map +1 -1
  72. package/dist/core/list.d.ts.map +1 -1
  73. package/dist/core/list.js +3 -34
  74. package/dist/core/list.js.map +1 -1
  75. package/dist/core/migrate.js +9 -15
  76. package/dist/core/migrate.js.map +1 -1
  77. package/dist/core/parsers/markdown-parser.d.ts +11 -1
  78. package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
  79. package/dist/core/parsers/markdown-parser.js +25 -13
  80. package/dist/core/parsers/markdown-parser.js.map +1 -1
  81. package/dist/core/planning-home.d.ts +6 -0
  82. package/dist/core/planning-home.d.ts.map +1 -1
  83. package/dist/core/planning-home.js +6 -1
  84. package/dist/core/planning-home.js.map +1 -1
  85. package/dist/core/project-config.d.ts +5 -19
  86. package/dist/core/project-config.d.ts.map +1 -1
  87. package/dist/core/project-config.js +11 -130
  88. package/dist/core/project-config.js.map +1 -1
  89. package/dist/core/root-selection.d.ts.map +1 -1
  90. package/dist/core/root-selection.js +2 -15
  91. package/dist/core/root-selection.js.map +1 -1
  92. package/dist/core/shared/index.d.ts +2 -2
  93. package/dist/core/shared/index.d.ts.map +1 -1
  94. package/dist/core/shared/index.js +2 -2
  95. package/dist/core/shared/index.js.map +1 -1
  96. package/dist/core/shared/skill-generation.d.ts +11 -4
  97. package/dist/core/shared/skill-generation.d.ts.map +1 -1
  98. package/dist/core/shared/skill-generation.js +18 -6
  99. package/dist/core/shared/skill-generation.js.map +1 -1
  100. package/dist/core/shared/tool-detection.d.ts +3 -6
  101. package/dist/core/shared/tool-detection.d.ts.map +1 -1
  102. package/dist/core/shared/tool-detection.js +3 -9
  103. package/dist/core/shared/tool-detection.js.map +1 -1
  104. package/dist/core/spec-presenter.d.ts.map +1 -1
  105. package/dist/core/spec-presenter.js.map +1 -1
  106. package/dist/core/specs-apply.d.ts +0 -31
  107. package/dist/core/specs-apply.d.ts.map +1 -1
  108. package/dist/core/specs-apply.js +0 -102
  109. package/dist/core/specs-apply.js.map +1 -1
  110. package/dist/core/templates/fragments/interview.d.ts +10 -0
  111. package/dist/core/templates/fragments/interview.d.ts.map +1 -0
  112. package/dist/core/templates/fragments/interview.js +13 -0
  113. package/dist/core/templates/fragments/interview.js.map +1 -0
  114. package/dist/core/templates/fragments/next-step.d.ts +14 -0
  115. package/dist/core/templates/fragments/next-step.d.ts.map +1 -0
  116. package/dist/core/templates/fragments/next-step.js +14 -0
  117. package/dist/core/templates/fragments/next-step.js.map +1 -0
  118. package/dist/core/templates/fragments/verify.d.ts +20 -0
  119. package/dist/core/templates/fragments/verify.d.ts.map +1 -0
  120. package/dist/core/templates/{workflows → fragments}/verify.js +34 -6
  121. package/dist/core/templates/fragments/verify.js.map +1 -0
  122. package/dist/core/templates/skill-templates.d.ts +1 -1
  123. package/dist/core/templates/skill-templates.d.ts.map +1 -1
  124. package/dist/core/templates/skill-templates.js +1 -1
  125. package/dist/core/templates/skill-templates.js.map +1 -1
  126. package/dist/core/templates/types.d.ts +6 -0
  127. package/dist/core/templates/types.d.ts.map +1 -1
  128. package/dist/core/templates/workflows/apply.d.ts +2 -2
  129. package/dist/core/templates/workflows/apply.d.ts.map +1 -1
  130. package/dist/core/templates/workflows/apply.js +38 -32
  131. package/dist/core/templates/workflows/apply.js.map +1 -1
  132. package/dist/core/templates/workflows/archive.d.ts.map +1 -1
  133. package/dist/core/templates/workflows/archive.js +23 -29
  134. package/dist/core/templates/workflows/archive.js.map +1 -1
  135. package/dist/core/templates/workflows/decision.d.ts.map +1 -1
  136. package/dist/core/templates/workflows/decision.js +11 -8
  137. package/dist/core/templates/workflows/decision.js.map +1 -1
  138. package/dist/core/templates/workflows/explore.d.ts +6 -3
  139. package/dist/core/templates/workflows/explore.d.ts.map +1 -1
  140. package/dist/core/templates/workflows/explore.js +27 -31
  141. package/dist/core/templates/workflows/explore.js.map +1 -1
  142. package/dist/core/templates/workflows/grill.d.ts.map +1 -1
  143. package/dist/core/templates/workflows/grill.js +14 -21
  144. package/dist/core/templates/workflows/grill.js.map +1 -1
  145. package/dist/core/templates/workflows/issue.js +2 -2
  146. package/dist/core/templates/workflows/issue.js.map +1 -1
  147. package/dist/core/templates/workflows/propose.js +1 -1
  148. package/dist/core/templates/workflows/propose.js.map +1 -1
  149. package/dist/core/templates/workflows/reconcile.d.ts +14 -0
  150. package/dist/core/templates/workflows/reconcile.d.ts.map +1 -0
  151. package/dist/core/templates/workflows/{sync.js → reconcile.js} +29 -22
  152. package/dist/core/templates/workflows/reconcile.js.map +1 -0
  153. package/dist/core/templates/workflows/update.d.ts.map +1 -1
  154. package/dist/core/templates/workflows/update.js +18 -28
  155. package/dist/core/templates/workflows/update.js.map +1 -1
  156. package/dist/core/update.d.ts.map +1 -1
  157. package/dist/core/update.js +8 -18
  158. package/dist/core/update.js.map +1 -1
  159. package/dist/core/validation/section-validator.d.ts.map +1 -1
  160. package/dist/core/validation/section-validator.js +3 -16
  161. package/dist/core/validation/section-validator.js.map +1 -1
  162. package/dist/core/validation/validator.d.ts +0 -2
  163. package/dist/core/validation/validator.d.ts.map +1 -1
  164. package/dist/core/validation/validator.js +36 -74
  165. package/dist/core/validation/validator.js.map +1 -1
  166. package/dist/utils/change-utils.d.ts.map +1 -1
  167. package/dist/utils/change-utils.js +3 -6
  168. package/dist/utils/change-utils.js.map +1 -1
  169. package/dist/utils/file-system.d.ts +17 -19
  170. package/dist/utils/file-system.d.ts.map +1 -1
  171. package/dist/utils/file-system.js +41 -189
  172. package/dist/utils/file-system.js.map +1 -1
  173. package/dist/utils/frontmatter.d.ts +22 -0
  174. package/dist/utils/frontmatter.d.ts.map +1 -0
  175. package/dist/utils/frontmatter.js +39 -0
  176. package/dist/utils/frontmatter.js.map +1 -0
  177. package/dist/utils/item-discovery.d.ts +7 -0
  178. package/dist/utils/item-discovery.d.ts.map +1 -1
  179. package/dist/utils/item-discovery.js +13 -23
  180. package/dist/utils/item-discovery.js.map +1 -1
  181. package/dist/utils/link.d.ts +3 -1
  182. package/dist/utils/link.d.ts.map +1 -1
  183. package/dist/utils/link.js +4 -14
  184. package/dist/utils/link.js.map +1 -1
  185. package/dist/utils/task-progress.d.ts +0 -1
  186. package/dist/utils/task-progress.d.ts.map +1 -1
  187. package/dist/utils/task-progress.js +5 -6
  188. package/dist/utils/task-progress.js.map +1 -1
  189. package/package.json +1 -1
  190. package/dist/core/references.d.ts +0 -40
  191. package/dist/core/references.d.ts.map +0 -1
  192. package/dist/core/references.js +0 -11
  193. package/dist/core/references.js.map +0 -1
  194. package/dist/core/templates/workflows/sync.d.ts +0 -14
  195. package/dist/core/templates/workflows/sync.d.ts.map +0 -1
  196. package/dist/core/templates/workflows/sync.js.map +0 -1
  197. package/dist/core/templates/workflows/verify.d.ts +0 -9
  198. package/dist/core/templates/workflows/verify.d.ts.map +0 -1
  199. package/dist/core/templates/workflows/verify.js.map +0 -1
  200. package/dist/utils/command-references.d.ts +0 -18
  201. package/dist/utils/command-references.d.ts.map +0 -1
  202. package/dist/utils/command-references.js +0 -20
  203. package/dist/utils/command-references.js.map +0 -1
  204. package/dist/utils/index.d.ts +0 -6
  205. package/dist/utils/index.d.ts.map +0 -1
  206. package/dist/utils/index.js +0 -9
  207. package/dist/utils/index.js.map +0 -1
  208. package/dist/utils/shell-detection.d.ts +0 -20
  209. package/dist/utils/shell-detection.d.ts.map +0 -1
  210. package/dist/utils/shell-detection.js +0 -41
  211. package/dist/utils/shell-detection.js.map +0 -1
@@ -76,26 +76,52 @@ export function isSchemaDir(parentDir, entry) {
76
76
  * @param projectRoot - Optional project root directory for project-local schema resolution
77
77
  * @returns The path to the schema directory, or null if not found
78
78
  */
79
- export function getSchemaDir(name, projectRoot) {
80
- // 1. Check project-local directory (if projectRoot provided)
81
- if (projectRoot) {
82
- const projectDir = path.join(getProjectSchemasDir(projectRoot), name);
83
- const projectSchemaPath = path.join(projectDir, 'schema.yaml');
84
- if (fs.existsSync(projectSchemaPath)) {
85
- return projectDir;
86
- }
79
+ /**
80
+ * Identity of a file's current contents, for cache invalidation. Null when the
81
+ * file cannot be stat'd, which disables caching for that path rather than
82
+ * risking a stale hit.
83
+ */
84
+ export function fileStamp(filePath) {
85
+ try {
86
+ const { mtimeMs, size } = fs.statSync(filePath);
87
+ return `${mtimeMs}:${size}`;
87
88
  }
88
- // 2. Check user override directory
89
- const userDir = path.join(getUserSchemasDir(), name);
90
- const userSchemaPath = path.join(userDir, 'schema.yaml');
91
- if (fs.existsSync(userSchemaPath)) {
92
- return userDir;
89
+ catch {
90
+ return null;
93
91
  }
94
- // 3. Check package built-in directory
95
- const packageDir = path.join(getPackageSchemasDir(), name);
96
- const packageSchemaPath = path.join(packageDir, 'schema.yaml');
97
- if (fs.existsSync(packageSchemaPath)) {
98
- return packageDir;
92
+ }
93
+ /** Parsed schemas keyed by path, invalidated when the file's stamp changes. */
94
+ const schemaCache = new Map();
95
+ /**
96
+ * The schema search path, **lowest precedence first** (package → user →
97
+ * project). Every lookup and listing walks this one list, so adding a source
98
+ * is a single edit rather than one per function.
99
+ */
100
+ function schemaSources(projectRoot) {
101
+ return [
102
+ { dir: getPackageSchemasDir(), source: 'package' },
103
+ { dir: getUserSchemasDir(), source: 'user' },
104
+ ...(projectRoot
105
+ ? [{ dir: getProjectSchemasDir(projectRoot), source: 'project' }]
106
+ : []),
107
+ ];
108
+ }
109
+ /** Names of the directories under `dir` that actually contain a schema.yaml. */
110
+ function scanSchemaDir(dir) {
111
+ if (!fs.existsSync(dir))
112
+ return [];
113
+ return fs
114
+ .readdirSync(dir, { withFileTypes: true })
115
+ .filter((entry) => isSchemaDir(dir, entry) && fs.existsSync(path.join(dir, entry.name, 'schema.yaml')))
116
+ .map((entry) => entry.name);
117
+ }
118
+ export function getSchemaDir(name, projectRoot) {
119
+ // Highest precedence first: project overrides user overrides package.
120
+ for (const { dir } of schemaSources(projectRoot).reverse()) {
121
+ const candidate = path.join(dir, name);
122
+ if (fs.existsSync(path.join(candidate, 'schema.yaml'))) {
123
+ return candidate;
124
+ }
99
125
  }
100
126
  return null;
101
127
  }
@@ -124,6 +150,15 @@ export function resolveSchema(name, projectRoot) {
124
150
  throw new Error(`Schema '${normalizedName}' not found. Available schemas: ${availableSchemas.join(', ')}`);
125
151
  }
126
152
  const schemaPath = path.join(schemaDir, 'schema.yaml');
153
+ // A single status/list run resolves the same schema once per change, and the
154
+ // dashboard re-resolves on every refresh; the yaml + Zod + cycle-check parse
155
+ // dominates that cost. One statSync decides whether it can be skipped.
156
+ const stamp = fileStamp(schemaPath);
157
+ const cached = stamp === null ? undefined : schemaCache.get(schemaPath);
158
+ if (cached && cached.stamp === stamp) {
159
+ // Cloned so a caller mutating its schema cannot corrupt later resolutions.
160
+ return structuredClone(cached.schema);
161
+ }
127
162
  // Load and parse the schema
128
163
  let content;
129
164
  try {
@@ -134,7 +169,11 @@ export function resolveSchema(name, projectRoot) {
134
169
  throw new SchemaLoadError(`Failed to read schema at '${schemaPath}': ${ioError.message}`, schemaPath, ioError);
135
170
  }
136
171
  try {
137
- return parseSchema(content);
172
+ const schema = parseSchema(content);
173
+ if (stamp !== null) {
174
+ schemaCache.set(schemaPath, { stamp, schema: structuredClone(schema) });
175
+ }
176
+ return schema;
138
177
  }
139
178
  catch (err) {
140
179
  if (err instanceof SchemaValidationError) {
@@ -152,42 +191,9 @@ export function resolveSchema(name, projectRoot) {
152
191
  */
153
192
  export function listSchemas(projectRoot) {
154
193
  const schemas = new Set();
155
- // Add package built-in schemas
156
- const packageDir = getPackageSchemasDir();
157
- if (fs.existsSync(packageDir)) {
158
- for (const entry of fs.readdirSync(packageDir, { withFileTypes: true })) {
159
- if (isSchemaDir(packageDir, entry)) {
160
- const schemaPath = path.join(packageDir, entry.name, 'schema.yaml');
161
- if (fs.existsSync(schemaPath)) {
162
- schemas.add(entry.name);
163
- }
164
- }
165
- }
166
- }
167
- // Add user override schemas (may override package schemas)
168
- const userDir = getUserSchemasDir();
169
- if (fs.existsSync(userDir)) {
170
- for (const entry of fs.readdirSync(userDir, { withFileTypes: true })) {
171
- if (isSchemaDir(userDir, entry)) {
172
- const schemaPath = path.join(userDir, entry.name, 'schema.yaml');
173
- if (fs.existsSync(schemaPath)) {
174
- schemas.add(entry.name);
175
- }
176
- }
177
- }
178
- }
179
- // Add project-local schemas (if projectRoot provided)
180
- if (projectRoot) {
181
- const projectDir = getProjectSchemasDir(projectRoot);
182
- if (fs.existsSync(projectDir)) {
183
- for (const entry of fs.readdirSync(projectDir, { withFileTypes: true })) {
184
- if (isSchemaDir(projectDir, entry)) {
185
- const schemaPath = path.join(projectDir, entry.name, 'schema.yaml');
186
- if (fs.existsSync(schemaPath)) {
187
- schemas.add(entry.name);
188
- }
189
- }
190
- }
194
+ for (const { dir } of schemaSources(projectRoot)) {
195
+ for (const name of scanSchemaDir(dir)) {
196
+ schemas.add(name);
191
197
  }
192
198
  }
193
199
  return Array.from(schemas).sort();
@@ -201,76 +207,25 @@ export function listSchemas(projectRoot) {
201
207
  export function listSchemasWithInfo(projectRoot) {
202
208
  const schemas = [];
203
209
  const seenNames = new Set();
204
- // Add project-local schemas first (highest priority, if projectRoot provided)
205
- if (projectRoot) {
206
- const projectDir = getProjectSchemasDir(projectRoot);
207
- if (fs.existsSync(projectDir)) {
208
- for (const entry of fs.readdirSync(projectDir, { withFileTypes: true })) {
209
- if (isSchemaDir(projectDir, entry)) {
210
- const schemaPath = path.join(projectDir, entry.name, 'schema.yaml');
211
- if (fs.existsSync(schemaPath)) {
212
- try {
213
- const schema = parseSchema(fs.readFileSync(schemaPath, 'utf-8'));
214
- schemas.push({
215
- name: entry.name,
216
- description: schema.description || '',
217
- artifacts: schema.artifacts.map((a) => a.id),
218
- source: 'project',
219
- });
220
- seenNames.add(entry.name);
221
- }
222
- catch {
223
- // Skip invalid schemas
224
- }
225
- }
226
- }
227
- }
228
- }
229
- }
230
- // Add user override schemas (if not overridden by project)
231
- const userDir = getUserSchemasDir();
232
- if (fs.existsSync(userDir)) {
233
- for (const entry of fs.readdirSync(userDir, { withFileTypes: true })) {
234
- if (isSchemaDir(userDir, entry) && !seenNames.has(entry.name)) {
235
- const schemaPath = path.join(userDir, entry.name, 'schema.yaml');
236
- if (fs.existsSync(schemaPath)) {
237
- try {
238
- const schema = parseSchema(fs.readFileSync(schemaPath, 'utf-8'));
239
- schemas.push({
240
- name: entry.name,
241
- description: schema.description || '',
242
- artifacts: schema.artifacts.map((a) => a.id),
243
- source: 'user',
244
- });
245
- seenNames.add(entry.name);
246
- }
247
- catch {
248
- // Skip invalid schemas
249
- }
250
- }
210
+ // Highest precedence first, so an overridden schema is skipped rather than
211
+ // replaced. A schema that fails to parse is not marked seen — the next
212
+ // source down still gets a chance to supply it.
213
+ for (const { dir, source } of schemaSources(projectRoot).reverse()) {
214
+ for (const name of scanSchemaDir(dir)) {
215
+ if (seenNames.has(name))
216
+ continue;
217
+ try {
218
+ const schema = parseSchema(fs.readFileSync(path.join(dir, name, 'schema.yaml'), 'utf-8'));
219
+ schemas.push({
220
+ name,
221
+ description: schema.description || '',
222
+ artifacts: schema.artifacts.map((a) => a.id),
223
+ source,
224
+ });
225
+ seenNames.add(name);
251
226
  }
252
- }
253
- }
254
- // Add package built-in schemas (if not overridden by project or user)
255
- const packageDir = getPackageSchemasDir();
256
- if (fs.existsSync(packageDir)) {
257
- for (const entry of fs.readdirSync(packageDir, { withFileTypes: true })) {
258
- if (isSchemaDir(packageDir, entry) && !seenNames.has(entry.name)) {
259
- const schemaPath = path.join(packageDir, entry.name, 'schema.yaml');
260
- if (fs.existsSync(schemaPath)) {
261
- try {
262
- const schema = parseSchema(fs.readFileSync(schemaPath, 'utf-8'));
263
- schemas.push({
264
- name: entry.name,
265
- description: schema.description || '',
266
- artifacts: schema.artifacts.map((a) => a.id),
267
- source: 'package',
268
- });
269
- }
270
- catch {
271
- // Skip invalid schemas
272
- }
273
- }
227
+ catch {
228
+ // Skip invalid schemas
274
229
  }
275
230
  }
276
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/core/artifact-graph/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/core/artifact-graph/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB;IACA;IAHlB,YACE,OAAe,EACC,UAAkB,EAClB,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAQ;QAClB,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,qEAAqE;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,KAAgB;IAC7D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiD,CAAC;AAE7E;;;;GAIG;AACH,SAAS,aAAa,CAAC,WAAoB;IACzC,OAAO;QACL,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;QAClD,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAC5C,GAAG,CAAC,WAAW;YACb,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC;YAC1E,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,EAAE;SACN,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACzC,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CACtF;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,WAAoB;IAEpB,sEAAsE;IACtE,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,WAAoB;IAC9D,sDAAsD;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,WAAW,cAAc,mCAAmC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEvD,6EAA6E;IAC7E,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxE,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACrC,2EAA2E;QAC3E,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,eAAe,CACvB,6BAA6B,UAAU,MAAM,OAAO,CAAC,OAAO,EAAE,EAC9D,UAAU,EACV,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;YACzC,MAAM,IAAI,eAAe,CACvB,sBAAsB,UAAU,MAAM,GAAG,CAAC,OAAO,EAAE,EACnD,UAAU,EACV,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,eAAe,CACvB,8BAA8B,UAAU,MAAM,UAAU,CAAC,OAAO,EAAE,EAClE,UAAU,EACV,UAAU,CACX,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAoB;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAYD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAoB;IACtD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,2EAA2E;IAC3E,uEAAuE;IACvE,gDAAgD;IAChD,KAAK,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACnE,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1F,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI;oBACJ,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;oBACrC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,MAAM;iBACP,CAAC,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC"}
@@ -19,6 +19,5 @@ export declare class ChangePresenter {
19
19
  }): Promise<void>;
20
20
  private fileExists;
21
21
  private extractTitle;
22
- private extractFrontmatterTitle;
23
22
  }
24
23
  //# sourceMappingURL=change-presenter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-presenter.d.ts","sourceRoot":"","sources":["../../src/core/change-presenter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAId,QAAQ,CAAC,EAAE,MAAM;IAK7B,OAAO,CAAC,cAAc;IAItB;;;;;OAKG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA0ElK,UAAU;IASxB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,uBAAuB;CAchC"}
1
+ {"version":3,"file":"change-presenter.d.ts","sourceRoot":"","sources":["../../src/core/change-presenter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAId,QAAQ,CAAC,EAAE,MAAM;IAK7B,OAAO,CAAC,cAAc;IAItB;;;;;OAKG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA0ElK,UAAU;IASxB,OAAO,CAAC,YAAY;CAOrB"}
@@ -1,6 +1,6 @@
1
1
  import { promises as fs } from 'fs';
2
2
  import path from 'path';
3
- import { parse as parseYaml } from 'yaml';
3
+ import { frontmatterString } from '../utils/frontmatter.js';
4
4
  import { JsonConverter } from './converters/json-converter.js';
5
5
  import { ChangeParser } from './parsers/change-parser.js';
6
6
  import { emitSuccess } from '../commands/shared-output.js';
@@ -101,29 +101,12 @@ export class ChangePresenter {
101
101
  }
102
102
  }
103
103
  extractTitle(content, changeName) {
104
- // Prefer the ticket/proposal yaml frontmatter `title:`.
105
- const fmTitle = this.extractFrontmatterTitle(content);
104
+ // Prefer the ticket/proposal yaml frontmatter `title:`, then the H1.
105
+ const fmTitle = frontmatterString(content, 'title')?.trim();
106
106
  if (fmTitle)
107
107
  return fmTitle;
108
108
  const match = content.match(/^#\s+(?:Change:\s+)?(.+)$/im);
109
109
  return match ? match[1].trim() : changeName;
110
110
  }
111
- extractFrontmatterTitle(content) {
112
- if (!content.startsWith('---'))
113
- return null;
114
- const end = content.indexOf('\n---', 3);
115
- if (end === -1)
116
- return null;
117
- try {
118
- const parsed = parseYaml(content.slice(3, end));
119
- if (parsed && typeof parsed === 'object' && typeof parsed.title === 'string' && parsed.title.trim()) {
120
- return parsed.title.trim();
121
- }
122
- }
123
- catch {
124
- // Malformed frontmatter — fall through to H1/changeName.
125
- }
126
- return null;
127
- }
128
111
  }
129
112
  //# sourceMappingURL=change-presenter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-presenter.js","sourceRoot":"","sources":["../../src/core/change-presenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"change-presenter.js","sourceRoot":"","sources":["../../src/core/change-presenter.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,13 @@
3
3
  *
4
4
  * Re-exports the tool command adapters tospec ships (claude only).
5
5
  */
6
- export { claudeAdapter } from './claude.js';
6
+ import type { ToolCommandAdapter } from '../types.js';
7
+ import { claudeAdapter } from './claude.js';
8
+ export { claudeAdapter };
9
+ /**
10
+ * The adapter registry. Adding a tool means adding it here — callers resolve by
11
+ * `toolId` rather than testing the tool name, so no generation code changes.
12
+ */
13
+ export declare const COMMAND_ADAPTERS: readonly ToolCommandAdapter[];
14
+ export declare function findCommandAdapter(toolId: string): ToolCommandAdapter | undefined;
7
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/command-generation/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/command-generation/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAAoB,CAAC;AAE/E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEjF"}
@@ -3,5 +3,14 @@
3
3
  *
4
4
  * Re-exports the tool command adapters tospec ships (claude only).
5
5
  */
6
- export { claudeAdapter } from './claude.js';
6
+ import { claudeAdapter } from './claude.js';
7
+ export { claudeAdapter };
8
+ /**
9
+ * The adapter registry. Adding a tool means adding it here — callers resolve by
10
+ * `toolId` rather than testing the tool name, so no generation code changes.
11
+ */
12
+ export const COMMAND_ADAPTERS = [claudeAdapter];
13
+ export function findCommandAdapter(toolId) {
14
+ return COMMAND_ADAPTERS.find((adapter) => adapter.toolId === toolId);
15
+ }
7
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/command-generation/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/command-generation/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC,CAAC,aAAa,CAAC,CAAC;AAE/E,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACvE,CAAC"}
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * Generic command generation with a tool adapter. Claude Code is the only
5
5
  * shipped adapter today; add a tool by writing an adapter in adapters/ and
6
- * branching on its toolId at the call site (see writeToolCommands).
6
+ * registering it in COMMAND_ADAPTERS callers resolve it by toolId.
7
7
  */
8
8
  export type { CommandContent, ToolCommandAdapter, GeneratedCommand, } from './types.js';
9
9
  export { generateCommand, generateCommands } from './generator.js';
10
- export { claudeAdapter } from './adapters/index.js';
10
+ export { claudeAdapter, COMMAND_ADAPTERS, findCommandAdapter } from './adapters/index.js';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/command-generation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/command-generation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * Generic command generation with a tool adapter. Claude Code is the only
5
5
  * shipped adapter today; add a tool by writing an adapter in adapters/ and
6
- * branching on its toolId at the call site (see writeToolCommands).
6
+ * registering it in COMMAND_ADAPTERS callers resolve it by toolId.
7
7
  */
8
8
  // Generator functions
9
9
  export { generateCommand, generateCommands } from './generator.js';
10
10
  // Adapters
11
- export { claudeAdapter } from './adapters/index.js';
11
+ export { claudeAdapter, COMMAND_ADAPTERS, findCommandAdapter } from './adapters/index.js';
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/command-generation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/command-generation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,8 +1,4 @@
1
1
  export declare const TOSPEC_DIR_NAME = "tospec";
2
- export declare const TOSPEC_MARKERS: {
3
- start: string;
4
- end: string;
5
- };
6
2
  export interface TospecConfig {
7
3
  aiTools: string[];
8
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,eAAO,MAAM,cAAc;;;CAG1B,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,EAAE,YAAY,EAGlC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,EAAE,YAAY,EAGlC,CAAC"}
@@ -1,8 +1,4 @@
1
1
  export const TOSPEC_DIR_NAME = 'tospec';
2
- export const TOSPEC_MARKERS = {
3
- start: '<!-- TOSPEC:START -->',
4
- end: '<!-- TOSPEC:END -->'
5
- };
6
2
  export const AI_TOOLS = [
7
3
  { name: 'Claude Code', value: 'claude', available: true, successLabel: 'Claude Code', skillsDir: '.claude' },
8
4
  { name: 'Codex', value: 'codex', available: true, successLabel: 'Codex', skillsDir: '.codex' }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,uBAAuB;IAC9B,GAAG,EAAE,qBAAqB;CAC3B,CAAC;AAeF,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;IAC5G,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;CAC/F,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAexC,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;IAC5G,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;CAC/F,CAAC"}
@@ -1,6 +1,5 @@
1
1
  export declare class JsonConverter {
2
2
  convertSpecToJson(filePath: string): string;
3
3
  convertChangeToJson(filePath: string): Promise<string>;
4
- private extractNameFromPath;
5
4
  }
6
5
  //# sourceMappingURL=json-converter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-converter.d.ts","sourceRoot":"","sources":["../../../src/core/converters/json-converter.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACxB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAkBrC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5D,OAAO,CAAC,mBAAmB;CAgB5B"}
1
+ {"version":3,"file":"json-converter.d.ts","sourceRoot":"","sources":["../../../src/core/converters/json-converter.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IACxB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAkBrC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAmB7D"}
@@ -2,12 +2,12 @@ import { readFileSync } from 'fs';
2
2
  import path from 'path';
3
3
  import { MarkdownParser } from '../parsers/markdown-parser.js';
4
4
  import { ChangeParser } from '../parsers/change-parser.js';
5
- import { FileSystemUtils } from '../../utils/file-system.js';
5
+ import { extractNameFromPath } from '../../utils/file-system.js';
6
6
  export class JsonConverter {
7
7
  convertSpecToJson(filePath) {
8
8
  const content = readFileSync(filePath, 'utf-8');
9
9
  const parser = new MarkdownParser(content);
10
- const specName = this.extractNameFromPath(filePath);
10
+ const specName = extractNameFromPath(filePath);
11
11
  const spec = parser.parseSpec(specName);
12
12
  const jsonSpec = {
13
13
  ...spec,
@@ -20,7 +20,7 @@ export class JsonConverter {
20
20
  }
21
21
  async convertChangeToJson(filePath) {
22
22
  const content = readFileSync(filePath, 'utf-8');
23
- const changeName = this.extractNameFromPath(filePath);
23
+ const changeName = extractNameFromPath(filePath);
24
24
  const changeDir = path.dirname(filePath);
25
25
  const parser = new ChangeParser(content, changeDir);
26
26
  const change = await parser.parseChangeWithDeltas(changeName);
@@ -33,19 +33,5 @@ export class JsonConverter {
33
33
  };
34
34
  return JSON.stringify(jsonChange, null, 2);
35
35
  }
36
- extractNameFromPath(filePath) {
37
- const normalizedPath = FileSystemUtils.toPosixPath(filePath);
38
- const parts = normalizedPath.split('/');
39
- for (let i = parts.length - 1; i >= 0; i--) {
40
- if (parts[i] === 'specs' || parts[i] === 'changes') {
41
- if (i < parts.length - 1) {
42
- return parts[i + 1];
43
- }
44
- }
45
- }
46
- const fileName = parts[parts.length - 1] ?? '';
47
- const dotIndex = fileName.lastIndexOf('.');
48
- return dotIndex > 0 ? fileName.slice(0, dotIndex) : fileName;
49
- }
50
36
  }
51
37
  //# sourceMappingURL=json-converter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-converter.js","sourceRoot":"","sources":["../../../src/core/converters/json-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,OAAO,aAAa;IACxB,iBAAiB,CAAC,QAAgB;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG;YACf,GAAG,IAAI;YACP,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,QAAQ;gBAChB,UAAU,EAAE,QAAQ;aACrB;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG;YACjB,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,QAAQ;gBAClB,UAAU,EAAE,QAAQ;aACrB;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,mBAAmB,CAAC,QAAgB;QAC1C,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/D,CAAC;CACF"}
1
+ {"version":3,"file":"json-converter.js","sourceRoot":"","sources":["../../../src/core/converters/json-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,OAAO,aAAa;IACxB,iBAAiB,CAAC,QAAgB;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG;YACf,GAAG,IAAI;YACP,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,QAAQ;gBAChB,UAAU,EAAE,QAAQ;aACrB;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG;YACjB,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,QAAQ;gBAClB,UAAU,EAAE,QAAQ;aACrB;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-activity.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-activity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAIrC,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,GAAE,MAAsB,EAC5B,KAAK,GAAE,IAAiB,GACvB,WAAW,EAAE,CAaf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EAAE,EACnB,iBAAiB,EAAE,MAAM,EACzB,UAAU,GAAE,MAA0B,GACrC,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,MAAsB,EAC/B,KAAK,GAAE,IAAiB,GACvB,MAAM,CAWR;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM5D;AAgCD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,GAAE,cAA8B,GACrC,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
1
+ {"version":3,"file":"dashboard-activity.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-activity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAIrC,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,GAAE,MAAsB,EAC5B,KAAK,GAAE,IAAiB,GACvB,WAAW,EAAE,CAaf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EAAE,EACnB,iBAAiB,EAAE,MAAM,EACzB,UAAU,GAAE,MAA0B,GACrC,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,MAAsB,EAC/B,KAAK,GAAE,IAAiB,GACvB,MAAM,CAWR;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM5D;AAgCD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,GAAE,cAA8B,GACrC,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
@@ -10,6 +10,7 @@ import { execFile } from 'node:child_process';
10
10
  import { promisify } from 'node:util';
11
11
  import { readProjectConfig } from './project-config.js';
12
12
  import { getActiveChangeIds } from '../utils/item-discovery.js';
13
+ import { formatLocalDate } from '../utils/timestamp.js';
13
14
  const execFileAsync = promisify(execFile);
14
15
  export const DEFAULT_STALE_DAYS = 14;
15
16
  const ACTIVITY_DAYS = 30;
@@ -17,13 +18,6 @@ const DRIFT_WINDOW_DAYS = 7;
17
18
  // -----------------------------------------------------------------------------
18
19
  // Pure aggregation (unit-testable)
19
20
  // -----------------------------------------------------------------------------
20
- /** yyyy-mm-dd in local time. */
21
- function isoDay(d) {
22
- const y = d.getFullYear();
23
- const m = String(d.getMonth() + 1).padStart(2, '0');
24
- const day = String(d.getDate()).padStart(2, '0');
25
- return `${y}-${m}-${day}`;
26
- }
27
21
  /**
28
22
  * Buckets two lists of commit dates (yyyy-mm-dd, from `git log --date=short`)
29
23
  * into a zero-filled daily series covering the last `days` days ending `today`.
@@ -38,7 +32,7 @@ export function aggregateDaily(repoDates, tospecDates, days = ACTIVITY_DAYS, tod
38
32
  const out = [];
39
33
  for (let i = days - 1; i >= 0; i--) {
40
34
  const d = new Date(today.getFullYear(), today.getMonth(), today.getDate() - i);
41
- const key = isoDay(d);
35
+ const key = formatLocalDate(d);
42
36
  out.push({ date: key, repo: repoCounts.get(key) ?? 0, tospec: tospecCounts.get(key) ?? 0 });
43
37
  }
44
38
  return out;