maestro-flow 0.3.42 → 0.3.44
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.
- package/.claude/commands/learn-decompose.md +10 -15
- package/.claude/commands/learn-follow.md +11 -16
- package/.claude/commands/learn-investigate.md +18 -22
- package/.claude/commands/learn-retro.md +23 -26
- package/.claude/commands/learn-second-opinion.md +11 -16
- package/.claude/commands/maestro-analyze.md +8 -0
- package/.claude/commands/maestro-brainstorm.md +8 -0
- package/.claude/commands/maestro-execute.md +11 -3
- package/.claude/commands/maestro-learn.md +4 -4
- package/.claude/commands/maestro-milestone-complete.md +6 -6
- package/.claude/commands/maestro-plan.md +8 -0
- package/.claude/commands/maestro-ralph-execute.md +52 -80
- package/.claude/commands/maestro-ralph.md +2 -2
- package/.claude/commands/maestro-tools-execute.md +117 -0
- package/.claude/commands/maestro-tools-register.md +137 -0
- package/.claude/commands/maestro-ui-codify.md +67 -0
- package/.claude/commands/manage-harvest.md +1 -1
- package/.claude/commands/manage-learn.md +5 -7
- package/.claude/commands/manage-wiki.md +1 -1
- package/.claude/commands/quality-auto-test.md +1 -1
- package/.claude/commands/quality-debug.md +8 -0
- package/.claude/commands/quality-retrospective.md +4 -5
- package/.claude/commands/quality-review.md +8 -0
- package/.claude/commands/spec-add.md +25 -4
- package/.claude/commands/spec-load.md +26 -6
- package/.claude/commands/spec-setup.md +2 -2
- package/.claude/commands/wiki-connect.md +1 -1
- package/.claude/commands/wiki-digest.md +5 -6
- package/.claude/skills/codify-to-knowhow/SKILL.md +167 -0
- package/.claude/skills/codify-to-knowhow/phases/01-load-manifest.md +101 -0
- package/.claude/skills/codify-to-knowhow/phases/02-generate-knowhow.md +97 -0
- package/.claude/skills/codify-to-knowhow/phases/03-generate-specs.md +92 -0
- package/.claude/skills/codify-to-knowhow/phases/04-index-verify.md +119 -0
- package/.codex/skills/codify-to-knowhow/SKILL.md +427 -0
- package/.codex/skills/learn-decompose/SKILL.md +8 -8
- package/.codex/skills/learn-follow/SKILL.md +6 -6
- package/.codex/skills/learn-investigate/SKILL.md +4 -4
- package/.codex/skills/learn-retro/SKILL.md +7 -7
- package/.codex/skills/learn-second-opinion/SKILL.md +6 -6
- package/.codex/skills/maestro-analyze/SKILL.md +491 -491
- package/.codex/skills/maestro-collab/SKILL.md +1 -1
- package/.codex/skills/maestro-learn/SKILL.md +1 -1
- package/.codex/skills/maestro-milestone-complete/SKILL.md +122 -122
- package/.codex/skills/maestro-plan/SKILL.md +485 -485
- package/.codex/skills/maestro-tools-execute/SKILL.md +105 -0
- package/.codex/skills/maestro-tools-register/SKILL.md +144 -0
- package/.codex/skills/maestro-ui-codify/SKILL.md +398 -0
- package/.codex/skills/maestro-verify/SKILL.md +486 -486
- package/.codex/skills/manage-harvest/SKILL.md +3 -3
- package/.codex/skills/manage-issue-discover/SKILL.md +431 -431
- package/.codex/skills/manage-learn/SKILL.md +13 -13
- package/.codex/skills/manage-wiki/SKILL.md +1 -1
- package/.codex/skills/quality-auto-test/SKILL.md +553 -553
- package/.codex/skills/quality-refactor/SKILL.md +151 -151
- package/.codex/skills/quality-retrospective/SKILL.md +6 -6
- package/.codex/skills/spec-add/SKILL.md +17 -4
- package/.codex/skills/spec-load/SKILL.md +24 -28
- package/.codex/skills/team-quality-assurance/roles/executor/role.md +1 -1
- package/.codex/skills/team-review/roles/reviewer/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/scanner/role.md +1 -1
- package/.codex/skills/team-testing/roles/executor/role.md +1 -1
- package/.codex/skills/team-testing/roles/generator/role.md +1 -1
- package/.codex/skills/wiki-connect/SKILL.md +5 -5
- package/.codex/skills/wiki-digest/SKILL.md +8 -8
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +4 -2
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +2 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/fs-watcher.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/state/fs-watcher.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/supervisor/self-learning-service.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/supervisor/self-learning-service.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/supervisor/self-learning-service.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.d.ts +7 -3
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +47 -15
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.d.ts +1 -2
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +3 -52
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +67 -21
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +6 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +1 -11
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +7 -4
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +27 -12
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
- package/dashboard/dist-server/src/tools/spec-entry-parser.d.ts +10 -2
- package/dashboard/dist-server/src/tools/spec-entry-parser.js +46 -12
- package/dashboard/dist-server/src/tools/spec-entry-parser.js.map +1 -1
- package/dashboard/dist-server/src/tools/spec-loader.d.ts +6 -2
- package/dashboard/dist-server/src/tools/spec-loader.js +119 -23
- package/dashboard/dist-server/src/tools/spec-loader.js.map +1 -1
- package/dist/src/commands/knowhow.d.ts.map +1 -1
- package/dist/src/commands/knowhow.js +21 -2
- package/dist/src/commands/knowhow.js.map +1 -1
- package/dist/src/commands/spec.d.ts +1 -1
- package/dist/src/commands/spec.d.ts.map +1 -1
- package/dist/src/commands/spec.js +78 -4
- package/dist/src/commands/spec.js.map +1 -1
- package/dist/src/commands/wiki.d.ts.map +1 -1
- package/dist/src/commands/wiki.js +51 -3
- package/dist/src/commands/wiki.js.map +1 -1
- package/dist/src/hooks/keyword-spec-injector.js +1 -1
- package/dist/src/hooks/keyword-spec-injector.js.map +1 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.js +11 -11
- package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
- package/dist/src/hooks/spec-injector.d.ts +1 -0
- package/dist/src/hooks/spec-injector.d.ts.map +1 -1
- package/dist/src/hooks/spec-injector.js +55 -22
- package/dist/src/hooks/spec-injector.js.map +1 -1
- package/dist/src/hooks/wiki-role-loader.d.ts +18 -0
- package/dist/src/hooks/wiki-role-loader.d.ts.map +1 -0
- package/dist/src/hooks/wiki-role-loader.js +43 -0
- package/dist/src/hooks/wiki-role-loader.js.map +1 -0
- package/dist/src/tools/spec-entry-parser.d.ts +10 -2
- package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
- package/dist/src/tools/spec-entry-parser.js +46 -12
- package/dist/src/tools/spec-entry-parser.js.map +1 -1
- package/dist/src/tools/spec-init.d.ts.map +1 -1
- package/dist/src/tools/spec-init.js +19 -0
- package/dist/src/tools/spec-init.js.map +1 -1
- package/dist/src/tools/spec-loader.d.ts +6 -2
- package/dist/src/tools/spec-loader.d.ts.map +1 -1
- package/dist/src/tools/spec-loader.js +119 -23
- package/dist/src/tools/spec-loader.js.map +1 -1
- package/dist/src/tools/spec-writer.d.ts +6 -1
- package/dist/src/tools/spec-writer.d.ts.map +1 -1
- package/dist/src/tools/spec-writer.js +29 -2
- package/dist/src/tools/spec-writer.js.map +1 -1
- package/dist/src/tools/store-knowhow.d.ts.map +1 -1
- package/dist/src/tools/store-knowhow.js +56 -27
- package/dist/src/tools/store-knowhow.js.map +1 -1
- package/package.json +1 -1
- package/workflows/analyze.md +2 -2
- package/workflows/auto-test.md +2 -2
- package/workflows/brainstorm.md +1 -1
- package/workflows/codebase-rebuild.md +1 -1
- package/workflows/codebase-refresh.md +1 -1
- package/workflows/debug.md +1 -1
- package/workflows/execute.md +3 -3
- package/workflows/harvest.md +13 -13
- package/workflows/integration-test.md +2 -2
- package/workflows/issue-discover.md +1 -1
- package/workflows/knowhow.md +72 -11
- package/workflows/learn.md +70 -58
- package/workflows/map.md +1 -1
- package/workflows/milestone-complete.md +2 -2
- package/workflows/plan.md +1 -1
- package/workflows/quick.md +1 -1
- package/workflows/refactor.md +1 -1
- package/workflows/retrospective.md +51 -57
- package/workflows/review.md +1 -1
- package/workflows/roadmap-common.md +1 -1
- package/workflows/specs-add.md +11 -2
- package/workflows/specs-load.md +17 -15
- package/workflows/test-gen.md +1 -1
- package/workflows/tools-spec.md +98 -0
- package/workflows/ui-codify-extract.md +373 -0
- package/workflows/ui-codify-knowhow.md +258 -0
- package/workflows/ui-codify-package.md +161 -0
- package/workflows/ui-codify.md +225 -0
- package/workflows/verify.md +1 -1
- package/workflows/wiki-connect.md +7 -7
- package/workflows/wiki-digest.md +13 -13
- package/workflows/wiki-manage.md +1 -1
|
@@ -17,8 +17,8 @@ export class WikiWriteError extends Error {
|
|
|
17
17
|
/**
|
|
18
18
|
* WikiWriter — safe CRUD for real markdown wiki entries.
|
|
19
19
|
*
|
|
20
|
-
* Scope: only `spec |
|
|
21
|
-
* files. Virtual entries (issue
|
|
20
|
+
* Scope: only `spec | knowhow` entries backed by real `.md`
|
|
21
|
+
* files. Virtual entries (issue), and the top-level `project.md` /
|
|
22
22
|
* `roadmap.md` narratives are rejected.
|
|
23
23
|
*
|
|
24
24
|
* All writes invalidate the indexer cache on success so the next read
|
|
@@ -184,12 +184,12 @@ export class WikiWriter {
|
|
|
184
184
|
throw new WikiWriteError('FORBIDDEN', `cannot append to virtual entry: ${req.containerId}`);
|
|
185
185
|
}
|
|
186
186
|
// Only project-scope specs are writable via wiki. Use `spec-add --scope` for other scopes.
|
|
187
|
-
if (container.scope && container.scope !== 'project') {
|
|
187
|
+
if (this.isSpecPath(resolve(join(this.workflowRoot, container.source.path))) && container.scope && container.scope !== 'project') {
|
|
188
188
|
throw new WikiWriteError('FORBIDDEN', `cannot write to ${container.scope}-scope specs via wiki — use "spec-add --scope ${container.scope}"`);
|
|
189
189
|
}
|
|
190
190
|
const absPath = resolve(join(this.workflowRoot, container.source.path));
|
|
191
|
-
if (!this.isInsideRoot(absPath) || !this.isSpecPath(absPath)) {
|
|
192
|
-
throw new WikiWriteError('FORBIDDEN', `appendEntry only works on spec container files`);
|
|
191
|
+
if (!this.isInsideRoot(absPath) || (!this.isSpecPath(absPath) && !this.isKnowhowPath(absPath))) {
|
|
192
|
+
throw new WikiWriteError('FORBIDDEN', `appendEntry only works on spec or knowhow container files`);
|
|
193
193
|
}
|
|
194
194
|
const kws = Array.isArray(req.keywords)
|
|
195
195
|
? req.keywords
|
|
@@ -204,7 +204,14 @@ export class WikiWriter {
|
|
|
204
204
|
.filter((w) => w.length >= 3)
|
|
205
205
|
.slice(0, 5)
|
|
206
206
|
.join(',');
|
|
207
|
-
|
|
207
|
+
// Merge category into keywords when provided (backward compat)
|
|
208
|
+
const effectiveKws = req.category && !kwStr.split(',').includes(req.category)
|
|
209
|
+
? `${req.category},${kwStr}`
|
|
210
|
+
: kwStr;
|
|
211
|
+
const rolesStr = req.roles && req.roles.length > 0 ? req.roles.join(',') : '';
|
|
212
|
+
const entryTag = this.isKnowhowPath(absPath) ? 'knowhow-entry' : 'spec-entry';
|
|
213
|
+
const rolesAttr = rolesStr ? ` roles="${rolesStr}"` : '';
|
|
214
|
+
const entryBlock = `\n<${entryTag} keywords="${effectiveKws}" date="${date}"${rolesAttr}>\n\n### ${firstLine}\n\n${req.content.trim()}\n\n</${entryTag}>\n`;
|
|
208
215
|
return this.withLock(absPath, async () => {
|
|
209
216
|
let existing;
|
|
210
217
|
try {
|
|
@@ -215,7 +222,7 @@ export class WikiWriter {
|
|
|
215
222
|
}
|
|
216
223
|
const updated = existing.trimEnd() + '\n' + entryBlock;
|
|
217
224
|
// Surface keywords to frontmatter
|
|
218
|
-
const surfaced = surfaceKeywords(updated,
|
|
225
|
+
const surfaced = surfaceKeywords(updated, effectiveKws.split(','));
|
|
219
226
|
await writeFile(absPath, surfaced, 'utf-8');
|
|
220
227
|
this.indexer.invalidate(absPath);
|
|
221
228
|
const rebuilt = await this.indexer.rebuild();
|
|
@@ -247,8 +254,8 @@ export class WikiWriter {
|
|
|
247
254
|
if (!entry.parent) {
|
|
248
255
|
throw new WikiWriteError('BAD_REQUEST', `${entryId} is a container — use remove() to delete the whole file`);
|
|
249
256
|
}
|
|
250
|
-
// Only project-scope specs are writable via wiki
|
|
251
|
-
if (entry.scope && entry.scope !== 'project') {
|
|
257
|
+
// Only project-scope specs are writable via wiki (knowhow has no scope restriction)
|
|
258
|
+
if (entry.type === 'spec' && entry.scope && entry.scope !== 'project') {
|
|
252
259
|
throw new WikiWriteError('FORBIDDEN', `cannot modify ${entry.scope}-scope specs via wiki — use "spec-add --scope ${entry.scope}"`);
|
|
253
260
|
}
|
|
254
261
|
const container = index.byId[entry.parent];
|
|
@@ -267,8 +274,8 @@ export class WikiWriter {
|
|
|
267
274
|
catch {
|
|
268
275
|
throw new WikiWriteError('NOT_FOUND', `container file missing`);
|
|
269
276
|
}
|
|
270
|
-
// Strategy 1: remove <spec-entry> block containing the entry title
|
|
271
|
-
const tagRe = /<spec-entry\s+[^>]+>[\s\S]
|
|
277
|
+
// Strategy 1: remove <spec-entry> or <knowhow-entry> block containing the entry title
|
|
278
|
+
const tagRe = /<(spec|knowhow)-entry\s+[^>]+>[\s\S]*?<\/\1-entry>/g;
|
|
272
279
|
let matched = false;
|
|
273
280
|
const cleaned = raw.replace(tagRe, (block) => {
|
|
274
281
|
if (matched)
|
|
@@ -363,6 +370,11 @@ export class WikiWriter {
|
|
|
363
370
|
const rel = abs.slice(this.workflowRoot.length + 1);
|
|
364
371
|
return rel.split(sep)[0] === 'specs';
|
|
365
372
|
}
|
|
373
|
+
isKnowhowPath(absPath) {
|
|
374
|
+
const abs = resolve(absPath);
|
|
375
|
+
const rel = abs.slice(this.workflowRoot.length + 1);
|
|
376
|
+
return rel.split(sep)[0] === 'knowhow';
|
|
377
|
+
}
|
|
366
378
|
}
|
|
367
379
|
// ---------------------------------------------------------------------------
|
|
368
380
|
// Frontmatter serialization (flat only — matches the lean parser)
|
|
@@ -421,7 +433,10 @@ function categoryToPrefix(category) {
|
|
|
421
433
|
case 'recipe': return 'RCP';
|
|
422
434
|
case 'reference': return 'REF';
|
|
423
435
|
case 'decision': return 'DCS';
|
|
424
|
-
|
|
436
|
+
case 'asset': return 'AST';
|
|
437
|
+
case 'blueprint': return 'BLP';
|
|
438
|
+
case 'document': return 'DOC';
|
|
439
|
+
default: return 'DOC';
|
|
425
440
|
}
|
|
426
441
|
}
|
|
427
442
|
async function pathExists(absPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../../../src/server/wiki/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAIxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,OAAO,GAAG,sBAAsB,CAAC;AACvC,MAAM,KAAK,GAAG,YAAY,CAAC;AAuC3B,MAAM,OAAO,cAAe,SAAQ,KAAK;IACpB;IAAsF;IAAzG,YAAmB,IAA4D,EAAE,OAAe,EAAS,OAAiB;QACxH,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,SAAI,GAAJ,IAAI,CAAwD;QAA0B,YAAO,GAAP,OAAO,CAAU;QAExH,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,UAAU;IAKF;IACA;IALnB,+EAA+E;IAC9D,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEjE,YACmB,YAAoB,EACpB,OAAoB;QADpB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,YAAO,GAAP,OAAO,CAAa;QAErC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,QAAQ,CAAI,GAAW,EAAE,EAAoB;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,2EAA2E;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAkB;QAC7B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,iBAAiB,GAAG,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,EAAE,GAA4B,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACrF,IAAI,GAAG,CAAC,QAAQ;YAAE,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC7C,IAAI,GAAG,CAAC,SAAS;YAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAChD,IAAI,GAAG,CAAC,SAAS;YAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAChD,IAAI,GAAG,CAAC,MAAM;YAAE,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACvC,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,GAAG,UAAU,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAE7C,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,GAAkB;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,+BAA+B,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,4BAA4B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,iEAAiE;QACjE,mEAAmE;QACnE,2DAA2D;QAC3D,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACvD,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,8EAA8E,CAAC,CAAC;QACxH,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC/C,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,uCAAuC,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE;oBACpD,WAAW,EAAE,QAAQ;oBACrB,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACzC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,uBAAuB,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3G,MAAM,MAAM,GAA4B;gBACtC,GAAG,SAAS;gBACZ,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;aAC3B,CAAC;YACF,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;YACjE,MAAM,OAAO,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;YAE/D,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,sCAAsC,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,gCAAgC,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,4BAA4B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,uCAAuC,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,GAAmB;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,wBAAwB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,mCAAmC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,2FAA2F;QAC3F,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,mBAAmB,SAAS,CAAC,KAAK,iDAAiD,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/I,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,gDAAgD,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,GAAG,CAAC,QAAQ;YACd,CAAC,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;gBAChC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;aACnE,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC;aACzC,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;aAC5B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,UAAU,GAAG,2BAA2B,GAAG,CAAC,QAAQ,eAAe,KAAK,WAAW,IAAI,aAAa,SAAS,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC;QAElK,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACvC,IAAI,QAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,2BAA2B,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,UAAU,CAAC;YAEvD,kCAAkC;YAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE5C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAE7C,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO;iBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC;iBAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,qBAAqB,OAAO,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,oBAAoB,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,GAAG,OAAO,yDAAyD,CAAC,CAAC;QAC/G,CAAC;QACD,iDAAiD;QACjD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,iBAAiB,KAAK,CAAC,KAAK,iDAAiD,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACrI,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnD,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,+BAA+B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACtC,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;YAClE,CAAC;YAED,mEAAmE;YACnE,MAAM,KAAK,GAAG,6CAA6C,CAAC;YAC5D,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3C,IAAI,OAAO;oBAAE,OAAO,KAAK,CAAC;gBAC1B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,6CAA6C;YAC7C,IAAI,MAAM,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM,SAAS,GAAG,mBAAmB,CAAC;gBACtC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpC,SAAS,GAAG,CAAC,CAAC;wBACd,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACrD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAClD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;wBACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;4BAAC,OAAO,GAAG,CAAC,CAAC;4BAAC,MAAM;wBAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBACzC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;wBAAE,MAAM,CAAC,GAAG,EAAE,CAAC;oBAClF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACnC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACxF,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,qCAAqC,OAAO,EAAE,CAAC,CAAC;YACxF,CAAC;YAED,mCAAmC;YACnC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,WAAW;IACX,4EAA4E;IAEpE,kBAAkB,CAAC,IAAY;QACrC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,SAAS,IAAI,mBAAmB,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,IAAkB,EAAE,IAAY,EAAE,QAAiB;QAC3E,IAAI,GAAW,CAAC;QAChB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,GAAG,GAAG,SAAS,IAAI,KAAK,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1C,GAAG,GAAG,WAAW,MAAM,IAAI,IAAI,KAAK,CAAC;QACvC,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,0CAA0C,GAAG,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,SAAS,KAAK,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;IAC1F,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,SAAS,CAAC;IAC9C,CAAC;IAEO,UAAU,CAAC,OAAe;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IACvC,CAAC;CACF;AAED,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E,MAAM,UAAU,oBAAoB,CAAC,EAA2B;IAC9D,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;oBACrB,KAAK,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,iEAAiE;YACjE,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,mBAAmB,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IAIjD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,QAAiB;IACzC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS,CAAC,CAAG,OAAO,KAAK,CAAC;QAC/B,KAAK,KAAK,CAAC,CAAO,OAAO,KAAK,CAAC;QAC/B,KAAK,UAAU,CAAC,CAAE,OAAO,KAAK,CAAC;QAC/B,KAAK,QAAQ,CAAC,CAAI,OAAO,KAAK,CAAC;QAC/B,KAAK,WAAW,CAAC,CAAC,OAAO,KAAK,CAAC;QAC/B,KAAK,UAAU,CAAC,CAAE,OAAO,KAAK,CAAC;QAC/B,OAAO,CAAC,CAAU,OAAO,KAAK,CAAC;IACjC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAe;IACvC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,IAAqB;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,GAAW,EAAE,WAAqB;IACzD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAa,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACvB,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC;AACrD,CAAC"}
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../../../src/server/wiki/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export interface SpecEntryParsed {
|
|
8
8
|
category: string;
|
|
9
|
+
roles: string[];
|
|
9
10
|
keywords: string[];
|
|
10
11
|
date: string;
|
|
11
12
|
source?: string;
|
|
13
|
+
ref?: string;
|
|
12
14
|
title: string;
|
|
13
15
|
content: string;
|
|
14
16
|
lineStart: number;
|
|
@@ -28,7 +30,10 @@ export interface ParseError {
|
|
|
28
30
|
line: number;
|
|
29
31
|
message: string;
|
|
30
32
|
}
|
|
31
|
-
export declare const VALID_CATEGORIES: readonly ["coding", "arch", "quality", "debug", "test", "review", "learning"];
|
|
33
|
+
export declare const VALID_CATEGORIES: readonly ["coding", "arch", "quality", "debug", "test", "review", "learning", "tools"];
|
|
34
|
+
/** @deprecated Legacy backward-compat: map old category attr to roles when roles attr is absent.
|
|
35
|
+
* Kept for reading old entries that have category= but no roles= attribute. */
|
|
36
|
+
export declare const CATEGORY_ROLE_FALLBACK: Record<string, string[]>;
|
|
32
37
|
export type ValidCategory = (typeof VALID_CATEGORIES)[number];
|
|
33
38
|
/**
|
|
34
39
|
* Parse spec file content into structured entries.
|
|
@@ -51,5 +56,8 @@ export declare function validateCategoryMatch(entry: SpecEntryParsed, fileCatego
|
|
|
51
56
|
export declare function formatSpecEntries(entries: SpecEntryParsed[], keyword?: string): string;
|
|
52
57
|
/**
|
|
53
58
|
* Format a single entry for writing to a spec file.
|
|
59
|
+
* Always writes `roles=` attribute; never writes `category=`.
|
|
60
|
+
* The `category` parameter is still accepted for file routing (spec-writer.ts) but is NOT written to the XML tag.
|
|
61
|
+
* When `roles` is not provided, falls back to CATEGORY_ROLE_FALLBACK to derive roles from category.
|
|
54
62
|
*/
|
|
55
|
-
export declare function formatNewEntry(category: string, keywords: string[], date: string, title: string, content: string, source?: string): string;
|
|
63
|
+
export declare function formatNewEntry(category: string, keywords: string[], date: string, title: string, content: string, source?: string, ref?: string, roles?: string[]): string;
|
|
@@ -7,7 +7,14 @@
|
|
|
7
7
|
// ============================================================================
|
|
8
8
|
// Valid categories (shared with spec-loader)
|
|
9
9
|
// ============================================================================
|
|
10
|
-
export const VALID_CATEGORIES = ['coding', 'arch', 'quality', 'debug', 'test', 'review', 'learning'];
|
|
10
|
+
export const VALID_CATEGORIES = ['coding', 'arch', 'quality', 'debug', 'test', 'review', 'learning', 'tools'];
|
|
11
|
+
/** @deprecated Legacy backward-compat: map old category attr to roles when roles attr is absent.
|
|
12
|
+
* Kept for reading old entries that have category= but no roles= attribute. */
|
|
13
|
+
export const CATEGORY_ROLE_FALLBACK = {
|
|
14
|
+
coding: ['implement'], arch: ['plan'], quality: ['review'],
|
|
15
|
+
debug: ['analyze'], test: ['test', 'implement'],
|
|
16
|
+
review: ['review'], learning: ['implement'], tools: [],
|
|
17
|
+
};
|
|
11
18
|
// ============================================================================
|
|
12
19
|
// Core regex
|
|
13
20
|
// ============================================================================
|
|
@@ -50,11 +57,18 @@ export function parseSpecEntries(content) {
|
|
|
50
57
|
const titleMatch = body.match(HEADING_RE);
|
|
51
58
|
const title = titleMatch ? titleMatch[1].trim() : '';
|
|
52
59
|
// Validate and build entry
|
|
60
|
+
const ref = attrs.ref || undefined;
|
|
61
|
+
// Resolve roles: explicit roles attr, or fallback from category
|
|
62
|
+
const rolesRaw = attrs.roles
|
|
63
|
+
? attrs.roles.split(',').map(r => r.trim().toLowerCase()).filter(Boolean)
|
|
64
|
+
: CATEGORY_ROLE_FALLBACK[attrs.category ?? ''] ?? [];
|
|
53
65
|
const entry = {
|
|
54
66
|
category: attrs.category ?? '',
|
|
67
|
+
roles: rolesRaw,
|
|
55
68
|
keywords: attrs.keywords ? attrs.keywords.split(',').map(k => k.trim().toLowerCase()).filter(Boolean) : [],
|
|
56
69
|
date: attrs.date ?? '',
|
|
57
70
|
source: attrs.source,
|
|
71
|
+
ref,
|
|
58
72
|
title,
|
|
59
73
|
content: body.trim(),
|
|
60
74
|
lineStart,
|
|
@@ -79,10 +93,11 @@ export function parseSpecEntries(content) {
|
|
|
79
93
|
*/
|
|
80
94
|
export function validateSpecEntry(entry) {
|
|
81
95
|
const errors = [];
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
// roles is required — category alone is no longer sufficient for new entries
|
|
97
|
+
if (entry.roles.length === 0) {
|
|
98
|
+
errors.push('Missing required attribute: roles');
|
|
84
99
|
}
|
|
85
|
-
|
|
100
|
+
if (entry.category && !VALID_CATEGORIES.includes(entry.category)) {
|
|
86
101
|
errors.push(`Invalid category "${entry.category}". Must be one of: ${VALID_CATEGORIES.join(', ')}`);
|
|
87
102
|
}
|
|
88
103
|
if (entry.keywords.length === 0) {
|
|
@@ -125,11 +140,13 @@ export function formatSpecEntries(entries, keyword) {
|
|
|
125
140
|
* Format a single parsed entry as clean markdown with metadata line.
|
|
126
141
|
*
|
|
127
142
|
* Input content: `### Title\n\nBody`
|
|
128
|
-
* Output: `### Title\n>
|
|
143
|
+
* Output: `### Title\n> roles · kw1, kw2 · date · source\n\nBody`
|
|
129
144
|
*/
|
|
130
145
|
function formatEntryClean(e) {
|
|
131
146
|
const meta = [];
|
|
132
|
-
if (e.
|
|
147
|
+
if (e.roles.length > 0)
|
|
148
|
+
meta.push(e.roles.join(', '));
|
|
149
|
+
else if (e.category)
|
|
133
150
|
meta.push(e.category);
|
|
134
151
|
if (e.keywords.length > 0)
|
|
135
152
|
meta.push(e.keywords.join(', '));
|
|
@@ -137,23 +154,40 @@ function formatEntryClean(e) {
|
|
|
137
154
|
meta.push(e.date);
|
|
138
155
|
if (e.source)
|
|
139
156
|
meta.push(e.source);
|
|
140
|
-
if (meta.length === 0)
|
|
157
|
+
if (meta.length === 0 && !e.ref)
|
|
141
158
|
return e.content;
|
|
142
|
-
const metaLine = `> ${meta.join(' \u00b7 ')}
|
|
159
|
+
const metaLine = meta.length > 0 ? `> ${meta.join(' \u00b7 ')}` : '';
|
|
160
|
+
// Build ref detail line: knowhow/AST-oauth-flow.md → knowhow-oauth-flow
|
|
161
|
+
let refLine = '';
|
|
162
|
+
if (e.ref) {
|
|
163
|
+
const refStem = e.ref.replace(/^knowhow\//, '').replace(/\.md$/, '');
|
|
164
|
+
const refSlug = refStem.replace(/^(KNW|TIP|TPL|RCP|REF|DCS|AST|BLP|DOC)-/i, '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
165
|
+
const refId = `knowhow-${refSlug}`;
|
|
166
|
+
refLine = `\n\u2192 Detail: maestro wiki load ${refId}`;
|
|
167
|
+
}
|
|
143
168
|
// Inject after first ### heading line
|
|
144
169
|
const idx = e.content.indexOf('\n');
|
|
145
170
|
if (idx !== -1 && e.content.trimStart().startsWith('###')) {
|
|
146
|
-
return e.content.slice(0, idx) + '\n' + metaLine + e.content.slice(idx);
|
|
171
|
+
return e.content.slice(0, idx) + (metaLine ? '\n' + metaLine : '') + refLine + e.content.slice(idx);
|
|
147
172
|
}
|
|
148
|
-
return metaLine + '\n\n' + e.content;
|
|
173
|
+
return (metaLine ? metaLine + '\n\n' : '') + e.content + refLine;
|
|
149
174
|
}
|
|
150
175
|
/**
|
|
151
176
|
* Format a single entry for writing to a spec file.
|
|
177
|
+
* Always writes `roles=` attribute; never writes `category=`.
|
|
178
|
+
* The `category` parameter is still accepted for file routing (spec-writer.ts) but is NOT written to the XML tag.
|
|
179
|
+
* When `roles` is not provided, falls back to CATEGORY_ROLE_FALLBACK to derive roles from category.
|
|
152
180
|
*/
|
|
153
|
-
export function formatNewEntry(category, keywords, date, title, content, source) {
|
|
181
|
+
export function formatNewEntry(category, keywords, date, title, content, source, ref, roles) {
|
|
154
182
|
const kwStr = keywords.map(k => k.toLowerCase().trim()).filter(Boolean).join(',');
|
|
155
183
|
const sourceAttr = source ? ` source="${source}"` : '';
|
|
156
|
-
|
|
184
|
+
const refAttr = ref ? ` ref="${ref}"` : '';
|
|
185
|
+
// Always use roles — derive from category fallback if not explicitly provided
|
|
186
|
+
const resolvedRoles = (roles && roles.length > 0)
|
|
187
|
+
? roles
|
|
188
|
+
: CATEGORY_ROLE_FALLBACK[category] ?? [];
|
|
189
|
+
const rolesStr = resolvedRoles.map(r => r.toLowerCase().trim()).filter(Boolean).join(',');
|
|
190
|
+
return `<spec-entry roles="${rolesStr}" keywords="${kwStr}" date="${date}"${sourceAttr}${refAttr}>\n\n### ${title}\n\n${content}\n\n</spec-entry>`;
|
|
157
191
|
}
|
|
158
192
|
// ============================================================================
|
|
159
193
|
// Internal helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-entry-parser.js","sourceRoot":"","sources":["../../../../src/tools/spec-entry-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"spec-entry-parser.js","sourceRoot":"","sources":["../../../../src/tools/spec-entry-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Reads .workflow/specs/*.md, filters by category via static mapping,
|
|
6
6
|
* returns concatenated content.
|
|
7
7
|
*/
|
|
8
|
-
export type SpecCategory = 'coding' | 'arch' | 'quality' | 'debug' | 'test' | 'review' | 'learning';
|
|
8
|
+
export type SpecCategory = 'coding' | 'arch' | 'quality' | 'debug' | 'test' | 'review' | 'learning' | 'tools';
|
|
9
9
|
export type SpecScope = 'project' | 'global' | 'team' | 'personal';
|
|
10
10
|
export interface SpecLoadResult {
|
|
11
11
|
content: string;
|
|
@@ -13,6 +13,8 @@ export interface SpecLoadResult {
|
|
|
13
13
|
totalLoaded: number;
|
|
14
14
|
}
|
|
15
15
|
export declare const CATEGORY_MAP: Record<string, SpecCategory>;
|
|
16
|
+
/** File → primary role mapping. Used by --role loading to identify main docs. */
|
|
17
|
+
export declare const FILE_ROLE_MAP: Record<string, string>;
|
|
16
18
|
export declare const TEAM_SPECS_DIR = ".workflow/collab/specs";
|
|
17
19
|
/**
|
|
18
20
|
* Resolve the directory for a given spec scope.
|
|
@@ -48,4 +50,6 @@ export interface LoadSpecsOptions {
|
|
|
48
50
|
/** Override global specs directory (for testing). Defaults to ~/.maestro/specs/ */
|
|
49
51
|
globalDir?: string;
|
|
50
52
|
}
|
|
51
|
-
export declare function loadSpecs(projectPath: string, category?: SpecCategory, uid?: string, keyword?: string, scope?: SpecScope, options?: LoadSpecsOptions
|
|
53
|
+
export declare function loadSpecs(projectPath: string, category?: SpecCategory, uid?: string, keyword?: string, scope?: SpecScope, options?: LoadSpecsOptions & {
|
|
54
|
+
role?: string;
|
|
55
|
+
}): SpecLoadResult;
|
|
@@ -20,6 +20,18 @@ export const CATEGORY_MAP = {
|
|
|
20
20
|
'test-conventions.md': 'test',
|
|
21
21
|
'review-standards.md': 'review',
|
|
22
22
|
'learnings.md': 'learning',
|
|
23
|
+
'tools.md': 'tools',
|
|
24
|
+
};
|
|
25
|
+
/** File → primary role mapping. Used by --role loading to identify main docs. */
|
|
26
|
+
export const FILE_ROLE_MAP = {
|
|
27
|
+
'coding-conventions.md': 'implement',
|
|
28
|
+
'architecture-constraints.md': 'plan',
|
|
29
|
+
'test-conventions.md': 'test',
|
|
30
|
+
'review-standards.md': 'review',
|
|
31
|
+
'debug-notes.md': 'analyze',
|
|
32
|
+
'quality-rules.md': 'review',
|
|
33
|
+
'learnings.md': 'implement',
|
|
34
|
+
'tools.md': '', // no primary role — per-entry roles
|
|
23
35
|
};
|
|
24
36
|
const SPECS_DIR = '.workflow/specs';
|
|
25
37
|
export const TEAM_SPECS_DIR = '.workflow/collab/specs';
|
|
@@ -64,10 +76,11 @@ export function loadSpecs(projectPath, category, uid, keyword, scope, options) {
|
|
|
64
76
|
// Team/personal are per-user — auto-creating them for arbitrary uids is wrong.
|
|
65
77
|
autoInitSeeds(join(projectPath, SPECS_DIR));
|
|
66
78
|
autoInitSeeds(globalDir);
|
|
79
|
+
const role = options?.role;
|
|
67
80
|
// First pass: collect results per layer (skip empty)
|
|
68
81
|
const layerResults = [];
|
|
69
82
|
for (const { dir, label } of layers) {
|
|
70
|
-
const { sections, matched } = loadFromDir(dir, category, keyword);
|
|
83
|
+
const { sections, matched } = loadFromDir(dir, category, keyword, role);
|
|
71
84
|
if (sections.length > 0) {
|
|
72
85
|
layerResults.push({ label, sections, matched });
|
|
73
86
|
}
|
|
@@ -117,8 +130,12 @@ function buildLayers(projectPath, uid, scope, globalDir) {
|
|
|
117
130
|
/**
|
|
118
131
|
* Load spec files from a single directory. Returns empty arrays if the
|
|
119
132
|
* directory does not exist or is unreadable.
|
|
133
|
+
*
|
|
134
|
+
* When `role` is provided:
|
|
135
|
+
* - Primary role docs (FILE_ROLE_MAP match) are loaded in full
|
|
136
|
+
* - Other files: only entries with matching roles attr are included
|
|
120
137
|
*/
|
|
121
|
-
function loadFromDir(specsDir, category, keyword) {
|
|
138
|
+
function loadFromDir(specsDir, category, keyword, role) {
|
|
122
139
|
if (!existsSync(specsDir))
|
|
123
140
|
return { sections: [], matched: [] };
|
|
124
141
|
let files;
|
|
@@ -131,7 +148,7 @@ function loadFromDir(specsDir, category, keyword) {
|
|
|
131
148
|
const sections = [];
|
|
132
149
|
const matched = [];
|
|
133
150
|
for (const file of files) {
|
|
134
|
-
if (!shouldInclude(file, category))
|
|
151
|
+
if (!shouldInclude(file, category, role))
|
|
135
152
|
continue;
|
|
136
153
|
const filePath = join(specsDir, file);
|
|
137
154
|
let raw;
|
|
@@ -144,7 +161,11 @@ function loadFromDir(specsDir, category, keyword) {
|
|
|
144
161
|
const body = stripFrontmatter(raw).trim();
|
|
145
162
|
if (!body)
|
|
146
163
|
continue;
|
|
147
|
-
|
|
164
|
+
// Determine load mode for this file
|
|
165
|
+
const fileRole = FILE_ROLE_MAP[file];
|
|
166
|
+
const isFullLoad = role && fileRole === role;
|
|
167
|
+
const workflowRoot = join(specsDir, '..');
|
|
168
|
+
const formatted = formatFileContent(body, keyword, isFullLoad ? undefined : role, workflowRoot);
|
|
148
169
|
if (formatted) {
|
|
149
170
|
sections.push(formatted);
|
|
150
171
|
matched.push(file);
|
|
@@ -155,49 +176,124 @@ function loadFromDir(specsDir, category, keyword) {
|
|
|
155
176
|
// ============================================================================
|
|
156
177
|
// Internal
|
|
157
178
|
// ============================================================================
|
|
158
|
-
function shouldInclude(filename, category) {
|
|
159
|
-
//
|
|
160
|
-
if (
|
|
179
|
+
function shouldInclude(filename, category, role) {
|
|
180
|
+
// Category filter takes precedence
|
|
181
|
+
if (category) {
|
|
182
|
+
const cat = CATEGORY_MAP[filename];
|
|
183
|
+
return cat ? cat === category : false;
|
|
184
|
+
}
|
|
185
|
+
// Role filter: include primary role docs + all other files (for entry-level filtering)
|
|
186
|
+
if (role) {
|
|
187
|
+
const fileRole = FILE_ROLE_MAP[filename];
|
|
188
|
+
// Primary doc for this role → always include (full load)
|
|
189
|
+
if (fileRole === role)
|
|
190
|
+
return true;
|
|
191
|
+
// Files with no role mapping or different primary role → include for entry-level filtering
|
|
161
192
|
return true;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// Unknown files: include only when no category filter
|
|
166
|
-
return false;
|
|
193
|
+
}
|
|
194
|
+
// No filter → load all
|
|
195
|
+
return true;
|
|
167
196
|
}
|
|
168
197
|
/**
|
|
169
198
|
* Parse file body, strip <spec-entry> tags, format clean output with metadata.
|
|
170
199
|
* When keyword is provided, only return matching entries.
|
|
200
|
+
* When role is provided, only return entries with matching roles attribute.
|
|
171
201
|
* Falls back to raw body for files with no structured entries.
|
|
172
202
|
*/
|
|
173
|
-
function formatFileContent(body, keyword) {
|
|
203
|
+
function formatFileContent(body, keyword, role, workflowRoot) {
|
|
174
204
|
const { entries, legacy } = parseSpecEntries(body);
|
|
175
205
|
// No structured entries → pass through raw body (or keyword-grep it)
|
|
176
206
|
if (entries.length === 0 && legacy.length === 0) {
|
|
207
|
+
// Role filtering: non-primary docs with no structured entries are skipped
|
|
208
|
+
if (role)
|
|
209
|
+
return null;
|
|
177
210
|
if (keyword) {
|
|
178
211
|
return body.toLowerCase().includes(keyword.toLowerCase()) ? body : null;
|
|
179
212
|
}
|
|
180
213
|
return body;
|
|
181
214
|
}
|
|
215
|
+
// Apply role filter at entry level
|
|
216
|
+
let filteredEntries = entries;
|
|
217
|
+
if (role) {
|
|
218
|
+
filteredEntries = entries.filter(e => e.roles.includes(role));
|
|
219
|
+
if (filteredEntries.length === 0)
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
182
222
|
const parts = [];
|
|
223
|
+
// Separate ref entries (lightweight display) from regular entries
|
|
224
|
+
const refEntries = filteredEntries.filter(e => e.ref);
|
|
225
|
+
const regularEntries = filteredEntries.filter(e => !e.ref);
|
|
183
226
|
if (keyword) {
|
|
184
227
|
const kw = keyword.toLowerCase();
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
228
|
+
const matchedRegular = regularEntries.filter(e => e.keywords.includes(kw));
|
|
229
|
+
const matchedRef = refEntries.filter(e => e.keywords.includes(kw));
|
|
230
|
+
if (matchedRegular.length > 0)
|
|
231
|
+
parts.push(formatSpecEntries(matchedRegular));
|
|
232
|
+
if (matchedRef.length > 0)
|
|
233
|
+
parts.push(matchedRef.map(e => formatRefEntry(e, workflowRoot)).join('\n\n---\n\n'));
|
|
234
|
+
if (!role) {
|
|
235
|
+
for (const leg of legacy) {
|
|
236
|
+
if (leg.content.toLowerCase().includes(kw))
|
|
237
|
+
parts.push(leg.content);
|
|
238
|
+
}
|
|
191
239
|
}
|
|
192
240
|
}
|
|
193
241
|
else {
|
|
194
|
-
if (
|
|
195
|
-
parts.push(formatSpecEntries(
|
|
196
|
-
|
|
197
|
-
parts.push(
|
|
242
|
+
if (regularEntries.length > 0)
|
|
243
|
+
parts.push(formatSpecEntries(regularEntries));
|
|
244
|
+
if (refEntries.length > 0)
|
|
245
|
+
parts.push(refEntries.map(e => formatRefEntry(e, workflowRoot)).join('\n\n---\n\n'));
|
|
246
|
+
if (!role) {
|
|
247
|
+
for (const leg of legacy)
|
|
248
|
+
parts.push(leg.content);
|
|
249
|
+
}
|
|
198
250
|
}
|
|
199
251
|
return parts.length > 0 ? parts.join('\n\n---\n\n') : null;
|
|
200
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Format a ref entry as a lightweight summary with a load command hint.
|
|
255
|
+
*
|
|
256
|
+
* Summary resolution order:
|
|
257
|
+
* 1. YAML `summary` field from the referenced knowhow document
|
|
258
|
+
* 2. Spec-entry content body (first 200 chars after heading)
|
|
259
|
+
*/
|
|
260
|
+
function formatRefEntry(e, workflowRoot) {
|
|
261
|
+
const refStem = (e.ref ?? '').replace(/^knowhow\//, '').replace(/\.md$/, '');
|
|
262
|
+
const refSlug = refStem.replace(/^(KNW|TIP|TPL|RCP|REF|DCS|AST|BLP|DOC)-/i, '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
263
|
+
const refId = `knowhow-${refSlug}`;
|
|
264
|
+
// Try to read YAML summary from the referenced knowhow document
|
|
265
|
+
let summary = resolveRefSummary(e.ref, workflowRoot);
|
|
266
|
+
// Fallback: extract summary from spec-entry content (strip heading)
|
|
267
|
+
if (!summary) {
|
|
268
|
+
summary = e.content;
|
|
269
|
+
const headingIdx = summary.indexOf('\n');
|
|
270
|
+
if (headingIdx !== -1 && summary.trimStart().startsWith('###')) {
|
|
271
|
+
summary = summary.slice(headingIdx).trim();
|
|
272
|
+
}
|
|
273
|
+
summary = summary.slice(0, 200).replace(/\s+/g, ' ').trim();
|
|
274
|
+
}
|
|
275
|
+
return `### ${e.title}\n\n${summary}\n\n\u2192 Detail: maestro wiki load ${refId}`;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Read a knowhow file's YAML frontmatter `summary` field.
|
|
279
|
+
* Returns null if the file doesn't exist or has no summary.
|
|
280
|
+
*/
|
|
281
|
+
function resolveRefSummary(ref, workflowRoot) {
|
|
282
|
+
if (!ref || !workflowRoot)
|
|
283
|
+
return null;
|
|
284
|
+
const absPath = join(workflowRoot, ref);
|
|
285
|
+
try {
|
|
286
|
+
const raw = readFileSync(absPath, 'utf-8');
|
|
287
|
+
const fmMatch = raw.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
288
|
+
if (!fmMatch)
|
|
289
|
+
return null;
|
|
290
|
+
const summaryMatch = fmMatch[1].match(/^summary:\s*"?(.+?)"?\s*$/m);
|
|
291
|
+
return summaryMatch ? summaryMatch[1].trim() : null;
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
201
297
|
function stripFrontmatter(raw) {
|
|
202
298
|
const trimmed = raw.trimStart();
|
|
203
299
|
if (!trimmed.startsWith('---'))
|