maestro-flow 0.5.33 → 0.5.35

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 (238) hide show
  1. package/.agents/agents/role-design-author.md +5 -3
  2. package/.agents/agents/workflow-collab-planner.md +1 -0
  3. package/.agents/agents/workflow-planner.md +2 -0
  4. package/.agents/skills/maestro/SKILL.md +8 -1
  5. package/.agents/skills/maestro-help/SKILL.md +39 -10
  6. package/.agents/skills/maestro-help/index/catalog.json +117 -53
  7. package/.agents/skills/maestro-help/phases/01-parse-intent.md +9 -6
  8. package/.agents/skills/maestro-help/phases/02-search-present.md +55 -15
  9. package/.agents/skills/maestro-help/phases/03-workflow-guide.md +35 -2
  10. package/.agents/skills/maestro-plan/SKILL.md +3 -1
  11. package/.agents/skills/maestro-ralph/SKILL.md +55 -19
  12. package/.agents/skills/maestro-ralph-execute/SKILL.md +52 -10
  13. package/.agents/skills/manage-harvest/SKILL.md +3 -0
  14. package/.agents/skills/manage-knowledge-audit/SKILL.md +29 -0
  15. package/.agents/skills/odyssey-debug/SKILL.md +7 -1
  16. package/.agents/skills/odyssey-improve/SKILL.md +7 -1
  17. package/.agents/skills/odyssey-planex/SKILL.md +11 -1
  18. package/.agents/skills/odyssey-review-test-fix/SKILL.md +7 -1
  19. package/.agents/skills/odyssey-ui/SKILL.md +7 -1
  20. package/.agents/skills/quality-review/SKILL.md +3 -0
  21. package/.agents/skills/quality-test/SKILL.md +27 -1
  22. package/.agy/agents/role-design-author.md +5 -3
  23. package/.agy/agents/workflow-collab-planner.md +1 -0
  24. package/.agy/agents/workflow-planner.md +2 -0
  25. package/.agy/skills/maestro/SKILL.md +8 -1
  26. package/.agy/skills/maestro-help/SKILL.md +39 -10
  27. package/.agy/skills/maestro-help/index/catalog.json +117 -53
  28. package/.agy/skills/maestro-help/phases/01-parse-intent.md +9 -6
  29. package/.agy/skills/maestro-help/phases/02-search-present.md +55 -15
  30. package/.agy/skills/maestro-help/phases/03-workflow-guide.md +35 -2
  31. package/.agy/skills/maestro-plan/SKILL.md +3 -1
  32. package/.agy/skills/maestro-ralph/SKILL.md +55 -19
  33. package/.agy/skills/maestro-ralph-execute/SKILL.md +52 -10
  34. package/.agy/skills/manage-harvest/SKILL.md +3 -0
  35. package/.agy/skills/manage-knowledge-audit/SKILL.md +29 -0
  36. package/.agy/skills/odyssey-debug/SKILL.md +7 -1
  37. package/.agy/skills/odyssey-improve/SKILL.md +7 -1
  38. package/.agy/skills/odyssey-planex/SKILL.md +11 -1
  39. package/.agy/skills/odyssey-review-test-fix/SKILL.md +7 -1
  40. package/.agy/skills/odyssey-ui/SKILL.md +7 -1
  41. package/.agy/skills/quality-review/SKILL.md +3 -0
  42. package/.agy/skills/quality-test/SKILL.md +27 -1
  43. package/.claude/agents/role-design-author.md +5 -3
  44. package/.claude/agents/workflow-collab-planner.md +1 -0
  45. package/.claude/agents/workflow-planner.md +2 -0
  46. package/.claude/commands/maestro-plan.md +3 -1
  47. package/.claude/commands/maestro-ralph-execute.md +52 -10
  48. package/.claude/commands/maestro-ralph.md +55 -19
  49. package/.claude/commands/maestro.md +8 -1
  50. package/.claude/commands/manage-harvest.md +3 -0
  51. package/.claude/commands/manage-knowledge-audit.md +29 -0
  52. package/.claude/commands/odyssey-debug.md +7 -1
  53. package/.claude/commands/odyssey-improve.md +7 -1
  54. package/.claude/commands/odyssey-planex.md +11 -1
  55. package/.claude/commands/odyssey-review-test-fix.md +7 -1
  56. package/.claude/commands/odyssey-ui.md +7 -1
  57. package/.claude/commands/quality-review.md +3 -0
  58. package/.claude/commands/quality-test.md +27 -1
  59. package/.claude/skills/maestro-help/SKILL.md +39 -10
  60. package/.claude/skills/maestro-help/index/catalog.json +117 -53
  61. package/.claude/skills/maestro-help/phases/01-parse-intent.md +9 -6
  62. package/.claude/skills/maestro-help/phases/02-search-present.md +55 -15
  63. package/.claude/skills/maestro-help/phases/03-workflow-guide.md +35 -2
  64. package/.codex/skills/maestro/SKILL.md +17 -2
  65. package/.codex/skills/maestro-analyze/SKILL.md +20 -3
  66. package/.codex/skills/maestro-brainstorm/SKILL.md +30 -4
  67. package/.codex/skills/maestro-execute/SKILL.md +25 -3
  68. package/.codex/skills/maestro-grill/SKILL.md +9 -0
  69. package/.codex/skills/maestro-plan/SKILL.md +26 -3
  70. package/.codex/skills/maestro-ralph/SKILL.md +6 -0
  71. package/.codex/skills/maestro-ralph-execute/SKILL.md +51 -10
  72. package/.codex/skills/maestro-roadmap/SKILL.md +30 -1
  73. package/.codex/skills/manage-harvest/SKILL.md +2 -1
  74. package/.codex/skills/quality-review/SKILL.md +13 -2
  75. package/README.md +219 -87
  76. package/README.zh-CN.md +221 -79
  77. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.d.ts +82 -0
  78. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js +444 -0
  79. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js.map +1 -0
  80. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +9 -4
  81. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
  82. package/dashboard/dist-server/dashboard/src/server/wiki/search.d.ts +54 -5
  83. package/dashboard/dist-server/dashboard/src/server/wiki/search.js +420 -46
  84. package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
  85. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +16 -0
  86. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  87. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +14 -4
  88. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +130 -49
  89. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  90. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +64 -22
  91. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  92. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +12 -12
  93. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  94. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +10 -3
  95. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  96. package/dashboard/dist-server/src/commands/hooks.d.ts +3 -0
  97. package/dashboard/dist-server/src/commands/hooks.js +11 -8
  98. package/dashboard/dist-server/src/commands/hooks.js.map +1 -1
  99. package/dashboard/dist-server/src/graph/kg/db/types.d.ts +2 -1
  100. package/dashboard/dist-server/src/graph/kg/db/types.js.map +1 -1
  101. package/dashboard/dist-server/src/graph/kg/extraction/code/code-extractor.js +1 -1
  102. package/dashboard/dist-server/src/graph/kg/extraction/code/code-extractor.js.map +1 -1
  103. package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.d.ts +22 -0
  104. package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.js +64 -0
  105. package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.js.map +1 -0
  106. package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js +14 -104
  107. package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js.map +1 -1
  108. package/dashboard/dist-server/src/hooks/keyword-spec-injector.js +5 -2
  109. package/dashboard/dist-server/src/hooks/keyword-spec-injector.js.map +1 -1
  110. package/dashboard/dist-server/src/hooks/wiki-role-loader.js +2 -1
  111. package/dashboard/dist-server/src/hooks/wiki-role-loader.js.map +1 -1
  112. package/dashboard/dist-server/src/tools/domain-loader.js +22 -16
  113. package/dashboard/dist-server/src/tools/domain-loader.js.map +1 -1
  114. package/dashboard/dist-server/src/tools/spec-entry-parser.d.ts +6 -1
  115. package/dashboard/dist-server/src/tools/spec-entry-parser.js +44 -13
  116. package/dashboard/dist-server/src/tools/spec-entry-parser.js.map +1 -1
  117. package/dashboard/dist-server/src/tools/spec-keyword-index.d.ts +2 -0
  118. package/dashboard/dist-server/src/tools/spec-keyword-index.js +4 -9
  119. package/dashboard/dist-server/src/tools/spec-keyword-index.js.map +1 -1
  120. package/dashboard/dist-server/src/tools/spec-loader.js +3 -11
  121. package/dashboard/dist-server/src/tools/spec-loader.js.map +1 -1
  122. package/dashboard/dist-server/src/types/index.d.ts +14 -0
  123. package/dashboard/dist-server/src/utils/frontmatter.d.ts +15 -0
  124. package/dashboard/dist-server/src/utils/frontmatter.js +76 -0
  125. package/dashboard/dist-server/src/utils/frontmatter.js.map +1 -0
  126. package/dist/src/cli.js +1 -0
  127. package/dist/src/cli.js.map +1 -1
  128. package/dist/src/commands/domain.d.ts.map +1 -1
  129. package/dist/src/commands/domain.js +8 -2
  130. package/dist/src/commands/domain.js.map +1 -1
  131. package/dist/src/commands/hooks.d.ts +3 -0
  132. package/dist/src/commands/hooks.d.ts.map +1 -1
  133. package/dist/src/commands/hooks.js +11 -8
  134. package/dist/src/commands/hooks.js.map +1 -1
  135. package/dist/src/commands/install.d.ts.map +1 -1
  136. package/dist/src/commands/install.js +48 -11
  137. package/dist/src/commands/install.js.map +1 -1
  138. package/dist/src/commands/knowhow.d.ts.map +1 -1
  139. package/dist/src/commands/knowhow.js +3 -26
  140. package/dist/src/commands/knowhow.js.map +1 -1
  141. package/dist/src/commands/search.d.ts +6 -1
  142. package/dist/src/commands/search.d.ts.map +1 -1
  143. package/dist/src/commands/search.js +124 -52
  144. package/dist/src/commands/search.js.map +1 -1
  145. package/dist/src/commands/spec.d.ts.map +1 -1
  146. package/dist/src/commands/spec.js +106 -6
  147. package/dist/src/commands/spec.js.map +1 -1
  148. package/dist/src/commands/uninstall.d.ts.map +1 -1
  149. package/dist/src/commands/uninstall.js +12 -3
  150. package/dist/src/commands/uninstall.js.map +1 -1
  151. package/dist/src/commands/update.d.ts.map +1 -1
  152. package/dist/src/commands/update.js +37 -21
  153. package/dist/src/commands/update.js.map +1 -1
  154. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  155. package/dist/src/config/cli-tools-config.js +2 -0
  156. package/dist/src/config/cli-tools-config.js.map +1 -1
  157. package/dist/src/core/extension-loader.d.ts.map +1 -1
  158. package/dist/src/core/extension-loader.js +4 -0
  159. package/dist/src/core/extension-loader.js.map +1 -1
  160. package/dist/src/core/install-executor.d.ts.map +1 -1
  161. package/dist/src/core/install-executor.js +8 -3
  162. package/dist/src/core/install-executor.js.map +1 -1
  163. package/dist/src/graph/analyzers/fs-analyzer.js +2 -2
  164. package/dist/src/graph/analyzers/fs-analyzer.js.map +1 -1
  165. package/dist/src/graph/kg/db/node-kind-registry.d.ts +18 -0
  166. package/dist/src/graph/kg/db/node-kind-registry.d.ts.map +1 -0
  167. package/dist/src/graph/kg/db/node-kind-registry.js +42 -0
  168. package/dist/src/graph/kg/db/node-kind-registry.js.map +1 -0
  169. package/dist/src/graph/kg/db/types.d.ts +2 -1
  170. package/dist/src/graph/kg/db/types.d.ts.map +1 -1
  171. package/dist/src/graph/kg/db/types.js.map +1 -1
  172. package/dist/src/graph/kg/extraction/code/code-extractor.js +1 -1
  173. package/dist/src/graph/kg/extraction/code/code-extractor.js.map +1 -1
  174. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.d.ts +23 -0
  175. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.d.ts.map +1 -0
  176. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.js +64 -0
  177. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.js.map +1 -0
  178. package/dist/src/graph/kg/extraction/orchestrator.d.ts.map +1 -1
  179. package/dist/src/graph/kg/extraction/orchestrator.js +14 -104
  180. package/dist/src/graph/kg/extraction/orchestrator.js.map +1 -1
  181. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -1
  182. package/dist/src/hooks/keyword-spec-injector.js +5 -2
  183. package/dist/src/hooks/keyword-spec-injector.js.map +1 -1
  184. package/dist/src/hooks/wiki-role-loader.d.ts.map +1 -1
  185. package/dist/src/hooks/wiki-role-loader.js +2 -1
  186. package/dist/src/hooks/wiki-role-loader.js.map +1 -1
  187. package/dist/src/index.d.ts +6 -0
  188. package/dist/src/index.d.ts.map +1 -1
  189. package/dist/src/index.js +4 -0
  190. package/dist/src/index.js.map +1 -1
  191. package/dist/src/ralph/cmd-next.d.ts.map +1 -1
  192. package/dist/src/ralph/cmd-next.js +2 -3
  193. package/dist/src/ralph/cmd-next.js.map +1 -1
  194. package/dist/src/tools/domain-loader.d.ts.map +1 -1
  195. package/dist/src/tools/domain-loader.js +22 -16
  196. package/dist/src/tools/domain-loader.js.map +1 -1
  197. package/dist/src/tools/spec-conflict-marker.d.ts +55 -0
  198. package/dist/src/tools/spec-conflict-marker.d.ts.map +1 -0
  199. package/dist/src/tools/spec-conflict-marker.js +228 -0
  200. package/dist/src/tools/spec-conflict-marker.js.map +1 -0
  201. package/dist/src/tools/spec-entry-parser.d.ts +6 -1
  202. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
  203. package/dist/src/tools/spec-entry-parser.js +44 -13
  204. package/dist/src/tools/spec-entry-parser.js.map +1 -1
  205. package/dist/src/tools/spec-keyword-index.d.ts +2 -0
  206. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -1
  207. package/dist/src/tools/spec-keyword-index.js +4 -9
  208. package/dist/src/tools/spec-keyword-index.js.map +1 -1
  209. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  210. package/dist/src/tools/spec-loader.js +3 -11
  211. package/dist/src/tools/spec-loader.js.map +1 -1
  212. package/dist/src/tools/spec-writer.d.ts.map +1 -1
  213. package/dist/src/tools/spec-writer.js +2 -6
  214. package/dist/src/tools/spec-writer.js.map +1 -1
  215. package/dist/src/tools/store-knowhow.d.ts.map +1 -1
  216. package/dist/src/tools/store-knowhow.js +6 -52
  217. package/dist/src/tools/store-knowhow.js.map +1 -1
  218. package/dist/src/tui/uninstall-ui/UninstallFlow.d.ts.map +1 -1
  219. package/dist/src/tui/uninstall-ui/UninstallFlow.js +3 -1
  220. package/dist/src/tui/uninstall-ui/UninstallFlow.js.map +1 -1
  221. package/dist/src/types/index.d.ts +14 -0
  222. package/dist/src/types/index.d.ts.map +1 -1
  223. package/dist/src/utils/frontmatter.d.ts +16 -0
  224. package/dist/src/utils/frontmatter.d.ts.map +1 -0
  225. package/dist/src/utils/frontmatter.js +76 -0
  226. package/dist/src/utils/frontmatter.js.map +1 -0
  227. package/dist/src/utils/migration-registry.d.ts.map +1 -1
  228. package/dist/src/utils/migration-registry.js +14 -1
  229. package/dist/src/utils/migration-registry.js.map +1 -1
  230. package/package.json +5 -3
  231. package/workflows/claude-instructions.md +63 -45
  232. package/workflows/codex-instructions.md +105 -28
  233. package/workflows/command-authoring.md +1 -1
  234. package/workflows/plan.md +2 -1
  235. package/.agents/skills/maestro-ralph-beta/SKILL.md +0 -877
  236. package/.agy/skills/maestro-ralph-beta/SKILL.md +0 -873
  237. package/.claude/commands/maestro-ralph-beta.md +0 -875
  238. package/.codex/skills/maestro-ralph-beta/SKILL.md +0 -883
@@ -25,15 +25,14 @@ function getIndexer() {
25
25
  }
26
26
  return _indexer;
27
27
  }
28
- /**
29
- * Unified knowledge search BM25F ranking via WikiIndexer, with type/category
30
- * filtering and per-source deduplication.
31
- */
28
+ let _lastSearchMeta = { embeddingUsed: false, embeddingDocs: 0 };
29
+ export function getLastSearchMeta() { return _lastSearchMeta; }
32
30
  export async function runUnifiedSearch(q, opts) {
33
31
  const limit = opts.limit > 0 ? opts.limit : 20;
34
32
  const indexer = getIndexer();
35
33
  const candidateLimit = Math.max(limit * 3, 60);
36
- const scored = await indexer.searchWithScores(q, candidateLimit);
34
+ const { results: scored, embeddingUsed, embeddingDocs } = await indexer.searchWithMeta(q, candidateLimit);
35
+ _lastSearchMeta = { embeddingUsed, embeddingDocs };
37
36
  let filtered = scored;
38
37
  if (opts.type) {
39
38
  filtered = filtered.filter(r => r.entry.type === opts.type);
@@ -41,21 +40,27 @@ export async function runUnifiedSearch(q, opts) {
41
40
  if (opts.category) {
42
41
  filtered = filtered.filter(r => r.entry.category === opts.category);
43
42
  }
44
- const seen = new Map();
43
+ if (opts.workspace) {
44
+ filtered = filtered.filter(r => r.entry.source.workspace === opts.workspace);
45
+ }
46
+ const seen = new Set();
47
+ const deduped = [];
45
48
  for (const r of filtered) {
46
- const sourceKey = r.entry.source?.path || r.entry.id;
47
- if (!seen.has(sourceKey)) {
48
- seen.set(sourceKey, r);
49
- }
49
+ if (seen.has(r.entry.id))
50
+ continue;
51
+ seen.add(r.entry.id);
52
+ deduped.push(r);
53
+ if (deduped.length >= limit)
54
+ break;
50
55
  }
51
- const deduped = [...seen.values()].slice(0, limit);
56
+ const maxScore = deduped.length > 0 ? deduped[0].score : 1;
52
57
  const results = deduped.map(({ entry, score }) => ({
53
58
  id: entry.id,
54
59
  type: entry.type,
55
60
  title: entry.title,
56
61
  category: entry.category,
57
62
  summary: entry.summary,
58
- score,
63
+ score: maxScore > 0 ? score / maxScore : score,
59
64
  snippet: extractSnippet(entry.body, q),
60
65
  source: entry.source,
61
66
  workspace: entry.source.workspace,
@@ -67,26 +72,25 @@ export async function runUnifiedSearch(q, opts) {
67
72
  return results;
68
73
  }
69
74
  function incrementSearchHitsAsync(entryIds) {
70
- let mg = null;
71
- try {
72
- const { MaestroGraph } = require('../graph/kg/engine.js');
75
+ import('../graph/kg/engine.js').then(({ MaestroGraph }) => {
73
76
  const projectRoot = resolve('.');
74
77
  if (!MaestroGraph.isInitialized(projectRoot))
75
78
  return;
76
- mg = MaestroGraph.openSync(projectRoot);
79
+ const mg = MaestroGraph.openSync(projectRoot);
77
80
  if (!mg)
78
81
  return;
79
- const { CredibilityStore, wikiIdToNodeId } = require('../graph/kg/credibility.js');
80
- const store = new CredibilityStore(mg.rawDb);
81
- const nodeIds = entryIds.map(wikiIdToNodeId).filter(Boolean);
82
- store.incrementSearchHits(nodeIds);
83
- }
84
- catch {
85
- // Best-effort never fail the search flow
86
- }
87
- finally {
88
- mg?.close();
89
- }
82
+ try {
83
+ import('../graph/kg/credibility.js').then(({ CredibilityStore, wikiIdToNodeId }) => {
84
+ const store = new CredibilityStore(mg.rawDb);
85
+ const nodeIds = entryIds.map(wikiIdToNodeId).filter(Boolean);
86
+ store.incrementSearchHits(nodeIds);
87
+ mg.close();
88
+ }).catch(() => { mg.close(); });
89
+ }
90
+ catch {
91
+ mg.close();
92
+ }
93
+ }).catch(() => { });
90
94
  }
91
95
  /**
92
96
  * Search MaestroGraph for code nodes matching the query. Gracefully returns
@@ -136,10 +140,7 @@ export function registerSearchCommand(program) {
136
140
  console.error(`Error: --type must be one of ${VALID_TYPES.join(', ')} (got "${opts.type}")`);
137
141
  process.exit(1);
138
142
  }
139
- let wikiResults = await runUnifiedSearch(q, { type: opts.type, category: opts.category, limit });
140
- if (opts.workspace) {
141
- wikiResults = wikiResults.filter(r => r.workspace === opts.workspace);
142
- }
143
+ let wikiResults = await runUnifiedSearch(q, { type: opts.type, category: opts.category, workspace: opts.workspace, limit });
143
144
  const codeResults = includeCode ? await runCodeSearch(q, limit) : [];
144
145
  // --all: normalize and merge scores for unified ranking
145
146
  if (opts.all) {
@@ -157,7 +158,7 @@ export function registerSearchCommand(program) {
157
158
  const qTerms = q.toLowerCase().split(/\s+/).filter(Boolean);
158
159
  for (const r of merged) {
159
160
  const name = isTTY ? highlightTerms(r.name, qTerms) : r.name;
160
- const scoreTag = ` (${r.normalizedScore.toFixed(2)})`;
161
+ const scoreTag = ` (${r.normalizedScore.toFixed(4)})`;
161
162
  console.log(` [${r.source}] [${r.kind}] ${name} ${r.detail}${scoreTag}`);
162
163
  }
163
164
  return;
@@ -179,11 +180,16 @@ export function registerSearchCommand(program) {
179
180
  }
180
181
  const isTTY = process.stdout.isTTY === true;
181
182
  const qTerms = q.toLowerCase().split(/\s+/).filter(Boolean);
183
+ const meta = getLastSearchMeta();
184
+ const embTag = meta.embeddingUsed ? `+emb(${meta.embeddingDocs})` : 'bm25-only';
182
185
  if (includeCode && codeResults.length > 0) {
183
- console.log(`Search: "${q}" (${wikiResults.length} wiki + ${codeResults.length} code results)`);
186
+ console.log(`Search: "${q}" (${wikiResults.length} wiki + ${codeResults.length} code results, ${embTag})`);
184
187
  }
185
188
  else {
186
- console.log(`Search: "${q}" (${wikiResults.length} results)`);
189
+ console.log(`Search: "${q}" (${wikiResults.length} results, ${embTag})`);
190
+ }
191
+ if (qTerms.length > 4) {
192
+ console.log(` Hint: ${qTerms.length} terms detected — split into 1-3 keyword queries for better precision`);
187
193
  }
188
194
  if (wikiResults.length === 0 && codeResults.length === 0) {
189
195
  console.log(' No matches found.');
@@ -197,10 +203,9 @@ export function registerSearchCommand(program) {
197
203
  const typeTag = `[${r.type}]`;
198
204
  const catTag = r.category ? ` ${r.category}` : '';
199
205
  const wsTag = r.workspace ? ` [ws:${r.workspace}]` : '';
200
- const scoreTag = r.score !== null ? ` (${r.score.toFixed(2)})` : '';
201
- const staleTag = (r.credibilityFactor !== undefined && r.credibilityFactor < 0.5) ? ' ⚠️' : '';
206
+ const scoreTag = r.score !== null ? ` (${r.score.toFixed(4)})` : '';
202
207
  const title = isTTY ? highlightTerms(r.title, qTerms) : r.title;
203
- console.log(`${indent}${typeTag}${catTag}${wsTag} ${r.id} ${title}${scoreTag}${staleTag}`);
208
+ console.log(`${indent}${typeTag}${catTag}${wsTag} ${r.id} ${title}${scoreTag}`);
204
209
  if (r.snippet) {
205
210
  const snippet = isTTY ? highlightTerms(r.snippet, qTerms) : r.snippet;
206
211
  console.log(`${indent} ${snippet}`);
@@ -214,31 +219,98 @@ export function registerSearchCommand(program) {
214
219
  if (codeResults.length > 0) {
215
220
  console.log(' [Code Results]');
216
221
  for (const r of codeResults) {
217
- const scoreTag = r.score !== null ? ` (${r.score.toFixed(2)})` : '';
222
+ const scoreTag = r.score !== null ? ` (${r.score.toFixed(4)})` : '';
218
223
  const name = isTTY ? highlightTerms(r.name, qTerms) : r.name;
219
224
  console.log(` [${r.kind}] ${name} ${r.filePath}${scoreTag}`);
220
225
  }
221
226
  }
222
227
  });
228
+ program
229
+ .command('embedding')
230
+ .description('Embedding model status, warmup, and rebuild')
231
+ .argument('[action]', 'status (default), warmup, rebuild', 'status')
232
+ .action(async (action) => {
233
+ const workflowRoot = resolve('.workflow');
234
+ const { isAvailable, getUnavailableReason, loadEmbeddingIndex, embedTexts, getDeviceSummary, detectDevice } = await import('#maestro-dashboard/wiki/embedding.js');
235
+ if (action === 'status') {
236
+ const avail = await isAvailable();
237
+ console.log(`Transformers: ${avail ? 'available' : 'NOT available (' + (getUnavailableReason?.() ?? 'unknown') + ')'}`);
238
+ if (avail) {
239
+ await detectDevice();
240
+ console.log(`Device: ${getDeviceSummary()}`);
241
+ }
242
+ const idx = loadEmbeddingIndex(workflowRoot);
243
+ if (idx) {
244
+ console.log(`Index: ${idx.docIds.length} docs, dim=${idx.dimension}, model=${idx.modelId}`);
245
+ console.log(`Built: ${new Date(idx.builtAt).toISOString()}, device=${idx.deviceUsed}`);
246
+ if (idx.buildTimeMs)
247
+ console.log(`Build time: ${idx.buildTimeMs}ms`);
248
+ }
249
+ else {
250
+ console.log('Index: not built (will build on first search)');
251
+ }
252
+ return;
253
+ }
254
+ if (action === 'warmup') {
255
+ const avail = await isAvailable();
256
+ if (!avail) {
257
+ console.error(`Embedding unavailable: ${getUnavailableReason?.() ?? 'unknown'}`);
258
+ process.exit(1);
259
+ }
260
+ console.log('Warming up model...');
261
+ const t0 = Date.now();
262
+ await embedTexts(['warmup']);
263
+ console.log(`Model ready (${getDeviceSummary()}, ${Date.now() - t0}ms)`);
264
+ return;
265
+ }
266
+ if (action === 'rebuild') {
267
+ const avail = await isAvailable();
268
+ if (!avail) {
269
+ console.error(`Embedding unavailable: ${getUnavailableReason?.() ?? 'unknown'}`);
270
+ process.exit(1);
271
+ }
272
+ console.log('Rebuilding embedding index...');
273
+ const { WikiIndexer } = await import('#maestro-dashboard/wiki/wiki-indexer.js');
274
+ const { loadWorkspaceConfig, resolveWorkspaceLinks } = await import('../config/index.js');
275
+ const projectPath = process.cwd();
276
+ const wsConfig = loadWorkspaceConfig(projectPath);
277
+ const resolved = resolveWorkspaceLinks(projectPath, wsConfig);
278
+ const linkedWorkspaces = resolved.filter(lw => lw.valid).map(lw => ({ name: lw.name, workflowRoot: lw.workflowRoot, shareTypes: lw.share }));
279
+ const indexer = new WikiIndexer({ workflowRoot, linkedWorkspaces });
280
+ const t0 = Date.now();
281
+ const { results, embeddingUsed, embeddingDocs } = await indexer.searchWithMeta('warmup', 1);
282
+ if (embeddingUsed) {
283
+ console.log(`Index rebuilt: ${embeddingDocs} docs (${Date.now() - t0}ms)`);
284
+ }
285
+ else {
286
+ console.log(`Rebuild failed — check with: maestro embedding status`);
287
+ }
288
+ return;
289
+ }
290
+ console.error(`Unknown action: ${action}. Use: status, warmup, rebuild`);
291
+ process.exit(1);
292
+ });
223
293
  }
224
- function minMaxNormalize(scores) {
225
- const norm = new Map();
226
- if (scores.length === 0)
227
- return norm;
228
- const min = Math.min(...scores);
229
- const max = Math.max(...scores);
230
- const range = max - min || 1;
231
- for (const s of scores)
232
- norm.set(s, (s - min) / range);
233
- return norm;
294
+ function getMinMax(scores) {
295
+ let min = Infinity;
296
+ let max = -Infinity;
297
+ for (const s of scores) {
298
+ if (s < min)
299
+ min = s;
300
+ if (s > max)
301
+ max = s;
302
+ }
303
+ return { min, max };
234
304
  }
235
305
  function mergeAndNormalize(wiki, code, limit) {
236
306
  const WIKI_WEIGHT = 0.6;
237
307
  const CODE_WEIGHT = 0.4;
238
308
  const wikiScores = wiki.map(r => r.score ?? 0);
239
309
  const codeScores = code.map(r => r.score ?? 0);
240
- const wikiNorm = minMaxNormalize(wikiScores);
241
- const codeNorm = minMaxNormalize(codeScores);
310
+ const wikiMM = wikiScores.length > 0 ? getMinMax(wikiScores) : { min: 0, max: 0 };
311
+ const codeMM = codeScores.length > 0 ? getMinMax(codeScores) : { min: 0, max: 0 };
312
+ const wikiRange = wikiMM.max - wikiMM.min || 1;
313
+ const codeRange = codeMM.max - codeMM.min || 1;
242
314
  const merged = [];
243
315
  for (const r of wiki) {
244
316
  const raw = r.score ?? 0;
@@ -247,7 +319,7 @@ function mergeAndNormalize(wiki, code, limit) {
247
319
  kind: r.type,
248
320
  name: r.title,
249
321
  detail: r.category ? `${r.category} ${r.id}` : r.id,
250
- normalizedScore: (wikiNorm.get(raw) ?? 0) * WIKI_WEIGHT,
322
+ normalizedScore: ((raw - wikiMM.min) / wikiRange) * WIKI_WEIGHT,
251
323
  });
252
324
  }
253
325
  for (const r of code) {
@@ -257,7 +329,7 @@ function mergeAndNormalize(wiki, code, limit) {
257
329
  kind: r.kind,
258
330
  name: r.name,
259
331
  detail: r.filePath,
260
- normalizedScore: (codeNorm.get(raw) ?? 0) * CODE_WEIGHT,
332
+ normalizedScore: ((raw - codeMM.min) / codeRange) * CODE_WEIGHT,
261
333
  });
262
334
  }
263
335
  merged.sort((a, b) => b.normalizedScore - a.normalizedScore);
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../src/commands/spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BjD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAy8B1D"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../src/commands/spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BjD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkkC1D"}
@@ -409,17 +409,14 @@ export function registerSpecCommand(program) {
409
409
  const absRefPath = pathResolve(process.cwd(), '.workflow', refPath);
410
410
  // If ref file doesn't exist AND --knowhow-type given → create knowhow doc first
411
411
  if (!fileExists(absRefPath) && knowhowType) {
412
- const KNOWHOW_PREFIX_MAP = {
413
- session: 'KNW', tip: 'TIP', template: 'TPL', recipe: 'RCP',
414
- reference: 'REF', decision: 'DCS', asset: 'AST', blueprint: 'BLP',
415
- document: 'DOC',
416
- };
412
+ const { KNOWHOW_PREFIX_MAP } = await import('../utils/frontmatter.js');
417
413
  const prefix = KNOWHOW_PREFIX_MAP[knowhowType] ?? 'DOC';
418
414
  const dir = pathJoin(process.cwd(), '.workflow', 'knowhow');
419
415
  if (!fileExists(dir))
420
416
  mkDir(dir, { recursive: true });
417
+ const { escapeYamlValue } = await import('../utils/frontmatter.js');
421
418
  const now = new Date();
422
- const fmLines = ['---', `title: ${title}`, `type: ${knowhowType}`, `category: ${category}`, `created: ${now.toISOString()}`];
419
+ const fmLines = ['---', `title: ${escapeYamlValue(title)}`, `type: ${knowhowType}`, `category: ${category}`, `created: ${now.toISOString()}`];
423
420
  if (keywords.length > 0) {
424
421
  fmLines.push('keywords:');
425
422
  for (const t of keywords)
@@ -810,6 +807,109 @@ export function registerSpecCommand(program) {
810
807
  console.log('\n... (truncated)');
811
808
  }
812
809
  });
810
+ // ── conflict ─────────────────────────────────────────────────────────
811
+ const conflict = spec
812
+ .command('conflict')
813
+ .description('Manage confidence and conflict markers on spec entries');
814
+ conflict
815
+ .command('list')
816
+ .alias('ls')
817
+ .description('List all entries with conflict markers or degraded confidence')
818
+ .option('--json', 'Output as JSON')
819
+ .action(async (opts) => {
820
+ const { listConflicts } = await import('../tools/spec-conflict-marker.js');
821
+ const conflicts = listConflicts(process.cwd());
822
+ if (opts.json) {
823
+ console.log(JSON.stringify(conflicts, null, 2));
824
+ return;
825
+ }
826
+ if (conflicts.length === 0) {
827
+ console.log('No conflicts or degraded entries found.');
828
+ return;
829
+ }
830
+ console.log(`Found ${conflicts.length} marked entries:\n`);
831
+ for (const c of conflicts) {
832
+ const badge = c.confidence === 'contested' ? '[CONTESTED]'
833
+ : c.confidence === 'low' ? '[LOW]'
834
+ : `[${c.confidence.toUpperCase()}]`;
835
+ console.log(` ${badge} ${c.file}:${c.lineStart} "${c.title}" [${c.category}]`);
836
+ if (c.conflictNote)
837
+ console.log(` Note: ${c.conflictNote}`);
838
+ if (c.conflictMarker)
839
+ console.log(` Marker: ${c.conflictMarker}`);
840
+ }
841
+ });
842
+ conflict
843
+ .command('mark')
844
+ .description('Mark a spec entry as conflicted')
845
+ .argument('<file>', 'Spec filename (e.g. coding-conventions.md)')
846
+ .argument('<line>', 'Line number of the <spec-entry> tag')
847
+ .requiredOption('--note <text>', 'Conflict description')
848
+ .option('--marker <id>', 'Conflict marker ID (auto-generated if omitted)')
849
+ .option('--confidence <level>', 'Confidence level: high|medium|low|contested (default: contested)')
850
+ .action(async (file, line, opts) => {
851
+ const { markConflict } = await import('../tools/spec-conflict-marker.js');
852
+ const result = markConflict(process.cwd(), file, parseInt(line, 10), {
853
+ note: opts.note,
854
+ marker: opts.marker,
855
+ confidence: opts.confidence || 'contested',
856
+ });
857
+ if (result.success) {
858
+ console.log(`Marked ${file}:${line} as conflicted.`);
859
+ }
860
+ else {
861
+ console.error(`Error: ${result.error}`);
862
+ process.exit(1);
863
+ }
864
+ });
865
+ conflict
866
+ .command('clear')
867
+ .description('Clear conflict markers from a spec entry')
868
+ .argument('<file>', 'Spec filename')
869
+ .argument('<line>', 'Line number of the <spec-entry> tag')
870
+ .option('--confidence <level>', 'Set new confidence level after clearing (default: remove)')
871
+ .action(async (file, line, opts) => {
872
+ const { clearConflict } = await import('../tools/spec-conflict-marker.js');
873
+ const result = clearConflict(process.cwd(), file, parseInt(line, 10), opts.confidence);
874
+ if (result.success) {
875
+ console.log(`Cleared conflict markers from ${file}:${line}.`);
876
+ }
877
+ else {
878
+ console.error(`Error: ${result.error}`);
879
+ process.exit(1);
880
+ }
881
+ });
882
+ conflict
883
+ .command('set-confidence')
884
+ .description('Set confidence level on a spec entry')
885
+ .argument('<file>', 'Spec filename')
886
+ .argument('<line>', 'Line number of the <spec-entry> tag')
887
+ .argument('<level>', 'Confidence level: high|medium|low|contested')
888
+ .action(async (file, line, level) => {
889
+ const { setConfidence } = await import('../tools/spec-conflict-marker.js');
890
+ const result = setConfidence(process.cwd(), file, parseInt(line, 10), level);
891
+ if (result.success) {
892
+ console.log(`Set confidence=${level} on ${file}:${line}.`);
893
+ }
894
+ else {
895
+ console.error(`Error: ${result.error}`);
896
+ process.exit(1);
897
+ }
898
+ });
899
+ conflict
900
+ .command('clear-all')
901
+ .description('Clear all conflict markers in a spec file')
902
+ .argument('<file>', 'Spec filename')
903
+ .option('--confidence <level>', 'Set new confidence level after clearing')
904
+ .action(async (file, opts) => {
905
+ const { clearAllConflicts } = await import('../tools/spec-conflict-marker.js');
906
+ const result = clearAllConflicts(process.cwd(), file, opts.confidence);
907
+ console.log(`Cleared ${result.cleared} conflict markers from ${file}.`);
908
+ if (result.errors.length > 0) {
909
+ for (const err of result.errors)
910
+ console.error(` Error: ${err}`);
911
+ }
912
+ });
813
913
  // ── analytics ────────────────────────────────────────────────────────
814
914
  spec
815
915
  .command('analytics')