@happyvertical/smrt-dev-mcp 0.60.9 → 0.60.11

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 (60) hide show
  1. package/AGENTS.md +33 -1
  2. package/README.md +17 -1
  3. package/agents/agent-skills.md +16 -0
  4. package/agents/intent-duplicates.md +26 -0
  5. package/dist/agent-skills.d.ts +2 -0
  6. package/dist/agent-skills.d.ts.map +1 -1
  7. package/dist/agent-skills.js +61 -0
  8. package/dist/agent-skills.js.map +1 -0
  9. package/dist/dev-plane.js +2 -2
  10. package/dist/{http-CCiO7qQW.js → http-BqKiyqgN.js} +2 -2
  11. package/dist/{http-CCiO7qQW.js.map → http-BqKiyqgN.js.map} +1 -1
  12. package/dist/index.js +13 -445
  13. package/dist/index.js.map +1 -1
  14. package/dist/knowledge/index.d.ts +1 -1
  15. package/dist/knowledge/index.d.ts.map +1 -1
  16. package/dist/knowledge/intents/audit-trail.md +63 -0
  17. package/dist/knowledge/intents/auth-and-users.md +67 -0
  18. package/dist/knowledge/intents/background-work.md +72 -0
  19. package/dist/knowledge/intents/feature-flags-and-entitlements.md +60 -0
  20. package/dist/knowledge/intents/file-and-asset-storage.md +71 -0
  21. package/dist/knowledge/intents/human-approvals.md +56 -0
  22. package/dist/knowledge/intents/index.md +41 -0
  23. package/dist/knowledge/intents/money-and-rates.md +65 -0
  24. package/dist/knowledge/intents/outbound-messages.md +67 -0
  25. package/dist/knowledge/intents/prompts-and-ai-operations.md +72 -0
  26. package/dist/knowledge/intents/relationships-and-trees.md +56 -0
  27. package/dist/knowledge/intents/scheduled-runs.md +61 -0
  28. package/dist/knowledge/intents/search-facts-knowledge.md +68 -0
  29. package/dist/knowledge/intents/secrets-and-config.md +66 -0
  30. package/dist/knowledge/intents/tenant-scoping.md +63 -0
  31. package/dist/knowledge/intents/webhooks-and-events.md +71 -0
  32. package/dist/knowledge/okf-bundle.d.ts +61 -0
  33. package/dist/knowledge/okf-bundle.d.ts.map +1 -0
  34. package/dist/{knowledge-DqoDX-lZ.js → knowledge-DUiMUjEg.js} +218 -3
  35. package/dist/knowledge-DUiMUjEg.js.map +1 -0
  36. package/dist/knowledge.js +2 -2
  37. package/dist/review-cli-DJIWUlFp.js +75 -0
  38. package/dist/review-cli-DJIWUlFp.js.map +1 -0
  39. package/dist/review-smrt-project-ByEwPcor.js +774 -0
  40. package/dist/review-smrt-project-ByEwPcor.js.map +1 -0
  41. package/dist/smrt-knowledge.okf.md +65 -0
  42. package/dist/{tool-catalog-RHq7nyCm.js → tool-catalog-BhnSCF8g.js} +11 -2
  43. package/dist/tool-catalog-BhnSCF8g.js.map +1 -0
  44. package/dist/tool-catalog.d.ts.map +1 -1
  45. package/dist/tools/intent-detector.d.ts +57 -0
  46. package/dist/tools/intent-detector.d.ts.map +1 -0
  47. package/dist/tools/intent-index.d.ts +40 -0
  48. package/dist/tools/intent-index.d.ts.map +1 -0
  49. package/dist/tools/review-cli.d.ts +40 -0
  50. package/dist/tools/review-cli.d.ts.map +1 -0
  51. package/dist/tools/review-smrt-project.d.ts +25 -0
  52. package/dist/tools/review-smrt-project.d.ts.map +1 -1
  53. package/package.json +10 -6
  54. package/plugin.json +1 -1
  55. package/skills/smrt-catalog/SKILL.md +42 -0
  56. package/skills/smrt-catalog/evals.json +28 -0
  57. package/skills/smrt-contribute/SKILL.md +73 -0
  58. package/skills/smrt-contribute/evals.json +18 -0
  59. package/dist/knowledge-DqoDX-lZ.js.map +0 -1
  60. package/dist/tool-catalog-RHq7nyCm.js.map +0 -1
package/dist/knowledge.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as buildReviewContext, c as compactContextResult, d as packageDocPaths, f as renderFreshnessResult, h as smrtReview, i as buildPackageSpecialistContext, l as coreCompatibleToSnakeCase, m as smrtArchitecture, n as buildContext, o as checkKnowledgeFreshness, p as renderKnowledgeIndexMarkdown, r as buildKnowledgeIndex, s as checkKnowledgeFreshnessFromIndex, t as buildArchitectureContext, u as diffKnowledgeIndex } from "./knowledge-DqoDX-lZ.js";
2
- export { buildArchitectureContext, buildContext, buildKnowledgeIndex, buildPackageSpecialistContext, buildReviewContext, checkKnowledgeFreshness, checkKnowledgeFreshnessFromIndex, compactContextResult, coreCompatibleToSnakeCase, diffKnowledgeIndex, packageDocPaths, renderFreshnessResult, renderKnowledgeIndexMarkdown, smrtArchitecture, smrtReview };
1
+ import { C as OKF_SHIPPED_INTENTS_DIR, D as stampPackageVersion, E as readOkfBundleManifest, S as OKF_SHIPPED_COMPONENT_PAGE, T as readFrontmatterScalar, _ as OKF_BUNDLE_FORMAT, a as buildReviewContext, b as OKF_BUNDLE_PARENT_DIRS, c as compactContextResult, d as packageDocPaths, f as renderFreshnessResult, g as OKF_BUNDLE_DIR_NAME, h as smrtReview, i as buildPackageSpecialistContext, l as coreCompatibleToSnakeCase, m as smrtArchitecture, n as buildContext, o as checkKnowledgeFreshness, p as renderKnowledgeIndexMarkdown, r as buildKnowledgeIndex, s as checkKnowledgeFreshnessFromIndex, t as buildArchitectureContext, u as diffKnowledgeIndex, v as OKF_BUNDLE_MANIFEST, w as checkOkfBundleFreshness, x as OKF_INTENT_HOME_PACKAGES, y as OKF_BUNDLE_MAX_AGE_DAYS } from "./knowledge-DUiMUjEg.js";
2
+ export { OKF_BUNDLE_DIR_NAME, OKF_BUNDLE_FORMAT, OKF_BUNDLE_MANIFEST, OKF_BUNDLE_MAX_AGE_DAYS, OKF_BUNDLE_PARENT_DIRS, OKF_INTENT_HOME_PACKAGES, OKF_SHIPPED_COMPONENT_PAGE, OKF_SHIPPED_INTENTS_DIR, buildArchitectureContext, buildContext, buildKnowledgeIndex, buildPackageSpecialistContext, buildReviewContext, checkKnowledgeFreshness, checkKnowledgeFreshnessFromIndex, checkOkfBundleFreshness, compactContextResult, coreCompatibleToSnakeCase, diffKnowledgeIndex, packageDocPaths, readFrontmatterScalar, readOkfBundleManifest, renderFreshnessResult, renderKnowledgeIndexMarkdown, smrtArchitecture, smrtReview, stampPackageVersion };
@@ -0,0 +1,75 @@
1
+ import { t as reviewSmrtProject } from "./review-smrt-project-ByEwPcor.js";
2
+ //#region src/tools/review-cli.ts
3
+ /**
4
+ * `smrt-dev-mcp review` — runs `review-smrt-project` from a shell so a CI job
5
+ * (the reusable consumer-knowledge-review workflow, #4690) can call it without
6
+ * speaking MCP. Advisory: the exit code is 0 unless `--fail-on-findings` is set
7
+ * and a duplicate-detection finding exists. It exits 2, never 0, when no
8
+ * intent index can be found.
9
+ */
10
+ function parseReviewCliArgs(argv) {
11
+ const result = {
12
+ format: "json",
13
+ failOnFindings: false
14
+ };
15
+ const value = (index, flag) => {
16
+ const next = argv[index + 1];
17
+ if (!next || next.startsWith("--")) throw new Error(`${flag} requires a value`);
18
+ return next;
19
+ };
20
+ for (let index = 0; index < argv.length; index += 1) {
21
+ const arg = argv[index];
22
+ if (arg === "--directory") {
23
+ result.directory = value(index, arg);
24
+ index += 1;
25
+ } else if (arg === "--intent-index") {
26
+ result.intentIndexPath = value(index, arg);
27
+ index += 1;
28
+ } else if (arg === "--format") {
29
+ const format = value(index, arg);
30
+ if (format !== "json" && format !== "summary") throw new Error("--format must be \"json\" or \"summary\"");
31
+ result.format = format;
32
+ index += 1;
33
+ } else if (arg === "--fail-on-findings") result.failOnFindings = true;
34
+ else throw new Error(`Unknown review option: ${arg}`);
35
+ }
36
+ return result;
37
+ }
38
+ function escapeCell(text) {
39
+ return text.replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
40
+ }
41
+ /** Markdown suitable for `$GITHUB_STEP_SUMMARY`. */
42
+ function renderReviewSummary(result) {
43
+ const duplicates = result.findings.filter((finding) => finding.area === "duplicate-detection");
44
+ const lines = ["## smrt knowledge review", ""];
45
+ const detection = result.duplicateDetection;
46
+ if (!detection?.indexPath) {
47
+ lines.push("Intent index not found; duplicate detection did not run.", ...(detection?.notes ?? []).map((note) => `- ${escapeCell(note)}`));
48
+ return `${lines.join("\n")}\n`;
49
+ }
50
+ if (duplicates.length === 0) lines.push("No hand-rolled equivalents of smrt packages found.");
51
+ else lines.push(`${duplicates.length} advisory finding(s). Nothing here is blocking.`, "", "| Location | Finding | Intent page | Component pages |", "| --- | --- | --- | --- |", ...duplicates.map((finding) => `| \`${escapeCell(finding.file ?? "")}\` | ${escapeCell(finding.title)} | \`${finding.intentPage ?? ""}\` | ${(finding.componentPages ?? []).map((page) => `\`${page}\``).join(", ")} |`));
52
+ const notes = detection.notes;
53
+ if (notes.length > 0) lines.push("", "Notes:", ...notes.map((note) => `- ${escapeCell(note)}`));
54
+ return `${lines.join("\n")}\n`;
55
+ }
56
+ async function runReviewCli(argv, options = {}) {
57
+ const args = parseReviewCliArgs(argv);
58
+ const raw = await reviewSmrtProject({
59
+ directory: args.directory,
60
+ intentIndexPath: args.intentIndexPath,
61
+ packageRoot: options.packageRoot
62
+ });
63
+ const result = JSON.parse(raw);
64
+ process.stdout.write(args.format === "summary" ? renderReviewSummary(result) : `${raw}\n`);
65
+ if (!result.duplicateDetection?.indexPath) {
66
+ process.stderr.write(`smrt-dev-mcp review: no intent index found; duplicate detection did not run. ${(result.duplicateDetection?.notes ?? []).join(" ")}\n`);
67
+ return 2;
68
+ }
69
+ const hasFindings = result.findings.some((finding) => finding.area === "duplicate-detection");
70
+ return args.failOnFindings && hasFindings ? 1 : 0;
71
+ }
72
+ //#endregion
73
+ export { runReviewCli };
74
+
75
+ //# sourceMappingURL=review-cli-DJIWUlFp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-cli-DJIWUlFp.js","names":[],"sources":["../src/tools/review-cli.ts"],"sourcesContent":["/**\n * `smrt-dev-mcp review` — runs `review-smrt-project` from a shell so a CI job\n * (the reusable consumer-knowledge-review workflow, #4690) can call it without\n * speaking MCP. Advisory: the exit code is 0 unless `--fail-on-findings` is set\n * and a duplicate-detection finding exists. It exits 2, never 0, when no\n * intent index can be found.\n */\n\nimport { reviewSmrtProject } from './review-smrt-project.js';\n\nexport interface ReviewCliArgs {\n directory?: string;\n intentIndexPath?: string;\n format: 'json' | 'summary';\n failOnFindings: boolean;\n}\n\ninterface ReviewFinding {\n severity: string;\n area: string;\n code: string;\n title: string;\n message?: string;\n file?: string;\n intentPage?: string;\n componentPages?: string[];\n recommendation: string;\n}\n\ninterface ReviewResult {\n projectPath: string;\n findings: ReviewFinding[];\n duplicateDetection?: { indexPath: string | null; notes: string[] };\n}\n\nexport function parseReviewCliArgs(argv: readonly string[]): ReviewCliArgs {\n const result: ReviewCliArgs = { format: 'json', failOnFindings: false };\n const value = (index: number, flag: string): string => {\n const next = argv[index + 1];\n if (!next || next.startsWith('--'))\n throw new Error(`${flag} requires a value`);\n return next;\n };\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (arg === '--directory') {\n result.directory = value(index, arg);\n index += 1;\n } else if (arg === '--intent-index') {\n result.intentIndexPath = value(index, arg);\n index += 1;\n } else if (arg === '--format') {\n const format = value(index, arg);\n if (format !== 'json' && format !== 'summary') {\n throw new Error('--format must be \"json\" or \"summary\"');\n }\n result.format = format;\n index += 1;\n } else if (arg === '--fail-on-findings') {\n result.failOnFindings = true;\n } else {\n throw new Error(`Unknown review option: ${arg}`);\n }\n }\n return result;\n}\n\nfunction escapeCell(text: string): string {\n return text.replace(/\\|/g, '\\\\|').replace(/\\r?\\n/g, ' ');\n}\n\n/** Markdown suitable for `$GITHUB_STEP_SUMMARY`. */\nexport function renderReviewSummary(result: ReviewResult): string {\n const duplicates = result.findings.filter(\n (finding) => finding.area === 'duplicate-detection',\n );\n const lines = ['## smrt knowledge review', ''];\n const detection = result.duplicateDetection;\n if (!detection?.indexPath) {\n lines.push(\n 'Intent index not found; duplicate detection did not run.',\n ...(detection?.notes ?? []).map((note) => `- ${escapeCell(note)}`),\n );\n return `${lines.join('\\n')}\\n`;\n }\n if (duplicates.length === 0) {\n lines.push('No hand-rolled equivalents of smrt packages found.');\n } else {\n lines.push(\n `${duplicates.length} advisory finding(s). Nothing here is blocking.`,\n '',\n '| Location | Finding | Intent page | Component pages |',\n '| --- | --- | --- | --- |',\n ...duplicates.map(\n (finding) =>\n `| \\`${escapeCell(finding.file ?? '')}\\` | ${escapeCell(finding.title)} | \\`${finding.intentPage ?? ''}\\` | ${(finding.componentPages ?? []).map((page) => `\\`${page}\\``).join(', ')} |`,\n ),\n );\n }\n const notes = detection.notes;\n if (notes.length > 0) {\n lines.push('', 'Notes:', ...notes.map((note) => `- ${escapeCell(note)}`));\n }\n return `${lines.join('\\n')}\\n`;\n}\n\nexport async function runReviewCli(\n argv: readonly string[],\n options: { packageRoot?: string } = {},\n): Promise<number> {\n const args = parseReviewCliArgs(argv);\n const raw = await reviewSmrtProject({\n directory: args.directory,\n intentIndexPath: args.intentIndexPath,\n packageRoot: options.packageRoot,\n });\n const result = JSON.parse(raw) as ReviewResult;\n process.stdout.write(\n args.format === 'summary' ? renderReviewSummary(result) : `${raw}\\n`,\n );\n // Never a green no-op: a run that could not load its index did not review.\n if (!result.duplicateDetection?.indexPath) {\n process.stderr.write(\n `smrt-dev-mcp review: no intent index found; duplicate detection did not run. ${(result.duplicateDetection?.notes ?? []).join(' ')}\\n`,\n );\n return 2;\n }\n const hasFindings = result.findings.some(\n (finding) => finding.area === 'duplicate-detection',\n );\n return args.failOnFindings && hasFindings ? 1 : 0;\n}\n"],"mappings":";;;;;;;;;AAmCA,SAAgB,mBAAmB,MAAwC;CACzE,MAAM,SAAwB;EAAE,QAAQ;EAAQ,gBAAgB;CAAM;CACtE,MAAM,SAAS,OAAe,SAAyB;EACrD,MAAM,OAAO,KAAK,QAAQ;EAC1B,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,GAC/B,MAAM,IAAI,MAAM,GAAG,KAAK,kBAAkB;EAC5C,OAAO;CACT;CACA,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,eAAe;GACzB,OAAO,YAAY,MAAM,OAAO,GAAG;GACnC,SAAS;EACX,OAAO,IAAI,QAAQ,kBAAkB;GACnC,OAAO,kBAAkB,MAAM,OAAO,GAAG;GACzC,SAAS;EACX,OAAO,IAAI,QAAQ,YAAY;GAC7B,MAAM,SAAS,MAAM,OAAO,GAAG;GAC/B,IAAI,WAAW,UAAU,WAAW,WAClC,MAAM,IAAI,MAAM,0CAAsC;GAExD,OAAO,SAAS;GAChB,SAAS;EACX,OAAO,IAAI,QAAQ,sBACjB,OAAO,iBAAiB;OAExB,MAAM,IAAI,MAAM,0BAA0B,KAAK;CAEnD;CACA,OAAO;AACT;AAEA,SAAS,WAAW,MAAsB;CACxC,OAAO,KAAK,QAAQ,OAAO,KAAK,CAAC,CAAC,QAAQ,UAAU,GAAG;AACzD;;AAGA,SAAgB,oBAAoB,QAA8B;CAChE,MAAM,aAAa,OAAO,SAAS,QAChC,YAAY,QAAQ,SAAS,qBAChC;CACA,MAAM,QAAQ,CAAC,4BAA4B,EAAE;CAC7C,MAAM,YAAY,OAAO;CACzB,IAAI,CAAC,WAAW,WAAW;EACzB,MAAM,KACJ,4DACA,IAAI,WAAW,SAAS,CAAC,EAAA,CAAG,KAAK,SAAS,KAAK,WAAW,IAAI,GAAG,CACnE;EACA,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE;CAC7B;CACA,IAAI,WAAW,WAAW,GACxB,MAAM,KAAK,oDAAoD;MAE/D,MAAM,KACJ,GAAG,WAAW,OAAO,kDACrB,IACA,0DACA,6BACA,GAAG,WAAW,KACX,YACC,OAAO,WAAW,QAAQ,QAAQ,EAAE,EAAE,OAAO,WAAW,QAAQ,KAAK,EAAE,OAAO,QAAQ,cAAc,GAAG,QAAQ,QAAQ,kBAAkB,CAAC,EAAA,CAAG,KAAK,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,GACzL,CACF;CAEF,MAAM,QAAQ,UAAU;CACxB,IAAI,MAAM,SAAS,GACjB,MAAM,KAAK,IAAI,UAAU,GAAG,MAAM,KAAK,SAAS,KAAK,WAAW,IAAI,GAAG,CAAC;CAE1E,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE;AAC7B;AAEA,eAAsB,aACpB,MACA,UAAoC,CAAC,GACpB;CACjB,MAAM,OAAO,mBAAmB,IAAI;CACpC,MAAM,MAAM,MAAM,kBAAkB;EAClC,WAAW,KAAK;EAChB,iBAAiB,KAAK;EACtB,aAAa,QAAQ;CACvB,CAAC;CACD,MAAM,SAAS,KAAK,MAAM,GAAG;CAC7B,QAAQ,OAAO,MACb,KAAK,WAAW,YAAY,oBAAoB,MAAM,IAAI,GAAG,IAAI,GACnE;CAEA,IAAI,CAAC,OAAO,oBAAoB,WAAW;EACzC,QAAQ,OAAO,MACb,iFAAiF,OAAO,oBAAoB,SAAS,CAAC,EAAA,CAAG,KAAK,GAAG,EAAE,GACrI;EACA,OAAO;CACT;CACA,MAAM,cAAc,OAAO,SAAS,MACjC,YAAY,QAAQ,SAAS,qBAChC;CACA,OAAO,KAAK,kBAAkB,cAAc,IAAI;AAClD"}