@shrkcrft/mcp-server 0.1.0-alpha.2 → 0.1.0-alpha.20

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 (189) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -0
  4. package/dist/server/columnar-format.d.ts +34 -0
  5. package/dist/server/columnar-format.d.ts.map +1 -0
  6. package/dist/server/columnar-format.js +95 -0
  7. package/dist/server/create-mcp-server.d.ts +3 -0
  8. package/dist/server/create-mcp-server.d.ts.map +1 -1
  9. package/dist/server/create-mcp-server.js +24 -9
  10. package/dist/server/fit-array-to-budget.d.ts +24 -0
  11. package/dist/server/fit-array-to-budget.d.ts.map +1 -0
  12. package/dist/server/fit-array-to-budget.js +60 -0
  13. package/dist/server/serialize-tool-data.d.ts +15 -0
  14. package/dist/server/serialize-tool-data.d.ts.map +1 -0
  15. package/dist/server/serialize-tool-data.js +22 -0
  16. package/dist/server/tool-definition.d.ts +15 -0
  17. package/dist/server/tool-definition.d.ts.map +1 -1
  18. package/dist/server/tool-input-validators.d.ts.map +1 -1
  19. package/dist/server/tool-input-validators.js +43 -0
  20. package/dist/tools/agent-brief.tool.d.ts.map +1 -1
  21. package/dist/tools/agent-brief.tool.js +20 -0
  22. package/dist/tools/align-cache.tool.d.ts +11 -0
  23. package/dist/tools/align-cache.tool.d.ts.map +1 -0
  24. package/dist/tools/align-cache.tool.js +76 -0
  25. package/dist/tools/all-tools.d.ts.map +1 -1
  26. package/dist/tools/all-tools.js +72 -7
  27. package/dist/tools/architecture-map.tool.d.ts.map +1 -1
  28. package/dist/tools/architecture-map.tool.js +4 -2
  29. package/dist/tools/code-find-usages.tool.d.ts +16 -0
  30. package/dist/tools/code-find-usages.tool.d.ts.map +1 -0
  31. package/dist/tools/code-find-usages.tool.js +180 -0
  32. package/dist/tools/command-catalog.tool.d.ts.map +1 -1
  33. package/dist/tools/command-catalog.tool.js +11 -7
  34. package/dist/tools/compress-context.tool.d.ts +8 -0
  35. package/dist/tools/compress-context.tool.d.ts.map +1 -0
  36. package/dist/tools/compress-context.tool.js +81 -0
  37. package/dist/tools/dashboard-summary.tool.d.ts.map +1 -1
  38. package/dist/tools/dashboard-summary.tool.js +2 -4
  39. package/dist/tools/delegate-task.tool.d.ts +3 -0
  40. package/dist/tools/delegate-task.tool.d.ts.map +1 -0
  41. package/dist/tools/delegate-task.tool.js +94 -0
  42. package/dist/tools/deps-audit.tool.d.ts +10 -0
  43. package/dist/tools/deps-audit.tool.d.ts.map +1 -0
  44. package/dist/tools/deps-audit.tool.js +251 -0
  45. package/dist/tools/diff-check.tool.d.ts +15 -0
  46. package/dist/tools/diff-check.tool.d.ts.map +1 -0
  47. package/dist/tools/diff-check.tool.js +157 -0
  48. package/dist/tools/file-advice.tool.d.ts +22 -0
  49. package/dist/tools/file-advice.tool.d.ts.map +1 -0
  50. package/dist/tools/file-advice.tool.js +88 -0
  51. package/dist/tools/get-api-surface-diff.tool.d.ts +3 -0
  52. package/dist/tools/get-api-surface-diff.tool.d.ts.map +1 -0
  53. package/dist/tools/get-api-surface-diff.tool.js +60 -0
  54. package/dist/tools/get-arch-violations.tool.d.ts +3 -0
  55. package/dist/tools/get-arch-violations.tool.d.ts.map +1 -0
  56. package/dist/tools/get-arch-violations.tool.js +30 -0
  57. package/dist/tools/get-code-intelligence-state.tool.d.ts +11 -0
  58. package/dist/tools/get-code-intelligence-state.tool.d.ts.map +1 -0
  59. package/dist/tools/get-code-intelligence-state.tool.js +60 -0
  60. package/dist/tools/get-context-pack.tool.d.ts +3 -0
  61. package/dist/tools/get-context-pack.tool.d.ts.map +1 -0
  62. package/dist/tools/get-context-pack.tool.js +40 -0
  63. package/dist/tools/get-framework-entities.tool.d.ts +3 -0
  64. package/dist/tools/get-framework-entities.tool.d.ts.map +1 -0
  65. package/dist/tools/get-framework-entities.tool.js +68 -0
  66. package/dist/tools/get-graph-callers.tool.d.ts +3 -0
  67. package/dist/tools/get-graph-callers.tool.d.ts.map +1 -0
  68. package/dist/tools/get-graph-callers.tool.js +94 -0
  69. package/dist/tools/get-graph-context.tool.d.ts +3 -0
  70. package/dist/tools/get-graph-context.tool.d.ts.map +1 -0
  71. package/dist/tools/get-graph-context.tool.js +125 -0
  72. package/dist/tools/get-graph-cycles.tool.d.ts +10 -0
  73. package/dist/tools/get-graph-cycles.tool.d.ts.map +1 -0
  74. package/dist/tools/get-graph-cycles.tool.js +58 -0
  75. package/dist/tools/get-graph-deps.tool.d.ts +12 -0
  76. package/dist/tools/get-graph-deps.tool.d.ts.map +1 -0
  77. package/dist/tools/get-graph-deps.tool.js +80 -0
  78. package/dist/tools/get-graph-hubs.tool.d.ts +3 -0
  79. package/dist/tools/get-graph-hubs.tool.d.ts.map +1 -0
  80. package/dist/tools/get-graph-hubs.tool.js +61 -0
  81. package/dist/tools/get-graph-impact-analysis.tool.d.ts +3 -0
  82. package/dist/tools/get-graph-impact-analysis.tool.d.ts.map +1 -0
  83. package/dist/tools/get-graph-impact-analysis.tool.js +44 -0
  84. package/dist/tools/get-graph-impact.tool.d.ts +3 -0
  85. package/dist/tools/get-graph-impact.tool.d.ts.map +1 -0
  86. package/dist/tools/get-graph-impact.tool.js +150 -0
  87. package/dist/tools/get-graph-path.tool.d.ts +3 -0
  88. package/dist/tools/get-graph-path.tool.d.ts.map +1 -0
  89. package/dist/tools/get-graph-path.tool.js +144 -0
  90. package/dist/tools/get-graph-search.tool.d.ts +3 -0
  91. package/dist/tools/get-graph-search.tool.d.ts.map +1 -0
  92. package/dist/tools/get-graph-search.tool.js +95 -0
  93. package/dist/tools/get-graph-status.tool.d.ts +11 -0
  94. package/dist/tools/get-graph-status.tool.d.ts.map +1 -0
  95. package/dist/tools/get-graph-status.tool.js +55 -0
  96. package/dist/tools/get-graph-unresolved.tool.d.ts +11 -0
  97. package/dist/tools/get-graph-unresolved.tool.d.ts.map +1 -0
  98. package/dist/tools/get-graph-unresolved.tool.js +85 -0
  99. package/dist/tools/get-impact-baseline.tool.d.ts +9 -0
  100. package/dist/tools/get-impact-baseline.tool.d.ts.map +1 -0
  101. package/dist/tools/get-impact-baseline.tool.js +65 -0
  102. package/dist/tools/get-intent-benchmark-run.tool.d.ts +12 -0
  103. package/dist/tools/get-intent-benchmark-run.tool.d.ts.map +1 -0
  104. package/dist/tools/get-intent-benchmark-run.tool.js +55 -0
  105. package/dist/tools/get-knowledge-graph.tool.d.ts +7 -0
  106. package/dist/tools/get-knowledge-graph.tool.d.ts.map +1 -1
  107. package/dist/tools/get-knowledge-graph.tool.js +62 -3
  108. package/dist/tools/get-migrations.tool.d.ts +3 -0
  109. package/dist/tools/get-migrations.tool.d.ts.map +1 -0
  110. package/dist/tools/get-migrations.tool.js +70 -0
  111. package/dist/tools/get-pattern-registry.tool.d.ts +8 -0
  112. package/dist/tools/get-pattern-registry.tool.d.ts.map +1 -0
  113. package/dist/tools/get-pattern-registry.tool.js +40 -0
  114. package/dist/tools/get-quality-gate.tool.d.ts +3 -0
  115. package/dist/tools/get-quality-gate.tool.d.ts.map +1 -0
  116. package/dist/tools/get-quality-gate.tool.js +27 -0
  117. package/dist/tools/get-relevant-context.tool.d.ts.map +1 -1
  118. package/dist/tools/get-relevant-context.tool.js +30 -6
  119. package/dist/tools/get-rules-for-file.tool.d.ts +3 -0
  120. package/dist/tools/get-rules-for-file.tool.d.ts.map +1 -0
  121. package/dist/tools/get-rules-for-file.tool.js +54 -0
  122. package/dist/tools/get-structural-rewrite-plan.tool.d.ts +3 -0
  123. package/dist/tools/get-structural-rewrite-plan.tool.d.ts.map +1 -0
  124. package/dist/tools/get-structural-rewrite-plan.tool.js +46 -0
  125. package/dist/tools/get-structural-search.tool.d.ts +3 -0
  126. package/dist/tools/get-structural-search.tool.d.ts.map +1 -0
  127. package/dist/tools/get-structural-search.tool.js +35 -0
  128. package/dist/tools/get-task-packet.tool.d.ts.map +1 -1
  129. package/dist/tools/get-task-packet.tool.js +26 -22
  130. package/dist/tools/graph-staleness.d.ts +34 -0
  131. package/dist/tools/graph-staleness.d.ts.map +1 -0
  132. package/dist/tools/graph-staleness.js +36 -0
  133. package/dist/tools/list-boundary-rules.tool.d.ts.map +1 -1
  134. package/dist/tools/list-boundary-rules.tool.js +20 -16
  135. package/dist/tools/list-knowledge.tool.d.ts.map +1 -1
  136. package/dist/tools/list-knowledge.tool.js +14 -13
  137. package/dist/tools/list-packs.tool.d.ts.map +1 -1
  138. package/dist/tools/list-packs.tool.js +19 -15
  139. package/dist/tools/list-path-conventions.tool.d.ts.map +1 -1
  140. package/dist/tools/list-path-conventions.tool.js +19 -15
  141. package/dist/tools/list-pipelines.tool.d.ts.map +1 -1
  142. package/dist/tools/list-pipelines.tool.js +18 -14
  143. package/dist/tools/list-presets.tool.d.ts.map +1 -1
  144. package/dist/tools/list-presets.tool.js +25 -21
  145. package/dist/tools/list-rules.tool.d.ts.map +1 -1
  146. package/dist/tools/list-rules.tool.js +18 -14
  147. package/dist/tools/list-templates.tool.d.ts.map +1 -1
  148. package/dist/tools/list-templates.tool.js +18 -14
  149. package/dist/tools/plan-quality-review.tool.d.ts +21 -0
  150. package/dist/tools/plan-quality-review.tool.d.ts.map +1 -0
  151. package/dist/tools/plan-quality-review.tool.js +294 -0
  152. package/dist/tools/primary-tools.d.ts +24 -0
  153. package/dist/tools/primary-tools.d.ts.map +1 -0
  154. package/dist/tools/primary-tools.js +86 -0
  155. package/dist/tools/r19-extras.tool.js +1 -1
  156. package/dist/tools/r32-profiles.tool.d.ts +0 -3
  157. package/dist/tools/r32-profiles.tool.d.ts.map +1 -1
  158. package/dist/tools/r32-profiles.tool.js +3 -54
  159. package/dist/tools/retrieve-original.tool.d.ts +9 -0
  160. package/dist/tools/retrieve-original.tool.d.ts.map +1 -0
  161. package/dist/tools/retrieve-original.tool.js +47 -0
  162. package/dist/tools/runtime-reports.tool.d.ts.map +1 -1
  163. package/dist/tools/runtime-reports.tool.js +1 -3
  164. package/dist/tools/safety-audit.tool.d.ts.map +1 -1
  165. package/dist/tools/safety-audit.tool.js +1 -4
  166. package/dist/tools/search-knowledge.tool.d.ts.map +1 -1
  167. package/dist/tools/search-knowledge.tool.js +17 -13
  168. package/dist/tools/search.tool.d.ts.map +1 -1
  169. package/dist/tools/search.tool.js +11 -8
  170. package/dist/tools/smart-context-bundle.tool.d.ts +17 -0
  171. package/dist/tools/smart-context-bundle.tool.d.ts.map +1 -0
  172. package/dist/tools/smart-context-bundle.tool.js +110 -0
  173. package/dist/tools/smart-context-feed.tool.d.ts +17 -0
  174. package/dist/tools/smart-context-feed.tool.d.ts.map +1 -0
  175. package/dist/tools/smart-context-feed.tool.js +138 -0
  176. package/dist/tools/start-here.tool.js +2 -2
  177. package/package.json +28 -16
  178. package/dist/tools/r22-extras.tool.d.ts +0 -4
  179. package/dist/tools/r22-extras.tool.d.ts.map +0 -1
  180. package/dist/tools/r22-extras.tool.js +0 -42
  181. package/dist/tools/r26-ingest.tool.d.ts +0 -10
  182. package/dist/tools/r26-ingest.tool.d.ts.map +0 -1
  183. package/dist/tools/r26-ingest.tool.js +0 -174
  184. package/dist/tools/r28-plugin-lifecycle.tool.d.ts +0 -4
  185. package/dist/tools/r28-plugin-lifecycle.tool.d.ts.map +0 -1
  186. package/dist/tools/r28-plugin-lifecycle.tool.js +0 -94
  187. package/dist/tools/r34-search-unified.tool.d.ts +0 -3
  188. package/dist/tools/r34-search-unified.tool.d.ts.map +0 -1
  189. package/dist/tools/r34-search-unified.tool.js +0 -38
@@ -1,13 +1,15 @@
1
1
  import { buildTaskPacket } from '@shrkcrft/inspector';
2
+ import { FORMAT_INPUT_PROPERTY, formatObjectArrays } from "../server/columnar-format.js";
2
3
  export const getTaskPacketTool = {
3
4
  name: 'get_task_packet',
4
- description: 'Full machine task packet (project overview, detected profiles, recommended pipelines, relevant rules/paths/templates, action hints, recommended CLI/MCP, forbidden actions, verification commands, human-review checkpoints, token-budgeted context body). **Prefer `prepare_agent_task` for first task grounding** — it returns the curated agent bundle plus next-safe-action. Read-only.',
5
+ description: 'Full machine task packet (project overview, detected profiles, recommended pipelines, relevant rules/paths/templates, action hints, recommended CLI/MCP, forbidden actions, verification commands, human-review checkpoints, token-budgeted context body). Pass `format:"table"` for a token-efficient columnar encoding of the structured lists. **Prefer `prepare_agent_task` for first task grounding** — it returns the curated agent bundle plus next-safe-action. Read-only.',
5
6
  inputSchema: {
6
7
  type: 'object',
7
8
  properties: {
8
9
  task: { type: 'string' },
9
10
  maxTokens: { type: 'number', minimum: 100, maximum: 20000 },
10
11
  scope: { type: 'array', items: { type: 'string' } },
12
+ ...FORMAT_INPUT_PROPERTY,
11
13
  },
12
14
  required: ['task'],
13
15
  additionalProperties: false,
@@ -22,27 +24,29 @@ export const getTaskPacketTool = {
22
24
  maxTokens,
23
25
  ...(scope ? { scope } : {}),
24
26
  });
25
- return {
26
- data: {
27
- task: packet.task,
28
- detectedProfiles: packet.detectedProfiles,
29
- recommendedPipelines: packet.recommendedPipelines,
30
- presetRecommendations: packet.presetRecommendations.map((r) => ({
31
- presetId: r.preset.id,
32
- confidence: r.confidence,
33
- score: r.score,
34
- })),
35
- relevantRules: packet.relevantRules.map((r) => ({ id: r.id, title: r.title })),
36
- relevantPaths: packet.relevantPaths.map((p) => ({ id: p.id, title: p.title })),
37
- relevantTemplates: packet.relevantTemplates.map((t) => ({ id: t.id, name: t.name })),
38
- recommendedMcpTools: packet.recommendedMcpTools,
39
- recommendedCliCommands: packet.recommendedCliCommands,
40
- forbiddenActions: packet.forbiddenActions,
41
- verificationCommands: packet.verificationCommands,
42
- humanReviewPoints: packet.humanReviewPoints,
43
- tokenEstimate: packet.tokenEstimate,
44
- context: packet.context,
45
- },
27
+ const data = {
28
+ task: packet.task,
29
+ detectedProfiles: packet.detectedProfiles,
30
+ recommendedPipelines: packet.recommendedPipelines,
31
+ presetRecommendations: packet.presetRecommendations.map((r) => ({
32
+ presetId: r.preset.id,
33
+ confidence: r.confidence,
34
+ score: r.score,
35
+ })),
36
+ relevantRules: packet.relevantRules.map((r) => ({ id: r.id, title: r.title })),
37
+ relevantPaths: packet.relevantPaths.map((p) => ({ id: p.id, title: p.title })),
38
+ relevantTemplates: packet.relevantTemplates.map((t) => ({ id: t.id, name: t.name })),
39
+ recommendedMcpTools: packet.recommendedMcpTools,
40
+ recommendedCliCommands: packet.recommendedCliCommands,
41
+ forbiddenActions: packet.forbiddenActions,
42
+ verificationCommands: packet.verificationCommands,
43
+ humanReviewPoints: packet.humanReviewPoints,
44
+ tokenEstimate: packet.tokenEstimate,
45
+ context: packet.context,
46
46
  };
47
+ // `format:"table"` columnar-encodes the structured object-array fields
48
+ // (relevantRules/Paths/Templates, presetRecommendations, …); scalars,
49
+ // string arrays, and the markdown context body are left untouched.
50
+ return { data: formatObjectArrays(data, input) };
47
51
  },
48
52
  };
@@ -0,0 +1,34 @@
1
+ import { type GraphQueryApi, type INode } from '@shrkcrft/graph';
2
+ /**
3
+ * A note when a symbol's file language has no call-graph extraction (Go/Python/
4
+ * Java/…) — only TS/JS build call/reference edges — so an empty caller/usage
5
+ * result isn't read as "nothing calls it". Returns undefined for TS/JS.
6
+ */
7
+ export declare function callGraphLanguageNote(api: GraphQueryApi, sym: INode): string | undefined;
8
+ export declare const GRAPH_STALE_HINT = "Result files changed since indexing \u2014 run `shrk graph index --changed` for fresh results.";
9
+ export interface IGraphStaleSurface {
10
+ /** Result file paths deleted on disk — drop entries whose `path` is in this set. */
11
+ deletedSet: ReadonlySet<string>;
12
+ /** Spread into the tool `data` object; null when every result file is fresh. */
13
+ field: {
14
+ stale: {
15
+ modified: readonly string[];
16
+ deleted: readonly string[];
17
+ };
18
+ staleHint: string;
19
+ } | null;
20
+ }
21
+ /**
22
+ * Targeted, read-only staleness over a query's result file paths. The graph
23
+ * MCP tools use it to DROP deleted result files and FLAG modified ones, so a
24
+ * stale index never silently serves a wrong/dead answer for a file the agent
25
+ * just edited. Cheap: stats only the handful of result files (mtime+size gate,
26
+ * sha1 only on mismatch) — never a whole-tree walk.
27
+ */
28
+ export declare function graphResultStaleness(api: GraphQueryApi, cwd: string, paths: ReadonlyArray<string | undefined>): IGraphStaleSurface;
29
+ /** Filter out result entries whose file path was deleted on disk. */
30
+ export declare function dropDeleted<T extends {
31
+ id: string;
32
+ path?: string;
33
+ }>(rows: readonly T[], deletedSet: ReadonlySet<string>): T[];
34
+ //# sourceMappingURL=graph-staleness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-staleness.d.ts","sourceRoot":"","sources":["../../src/tools/graph-staleness.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEzF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAKxF;AAED,eAAO,MAAM,gBAAgB,mGACgE,CAAC;AAE9F,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,gFAAgF;IAChF,KAAK,EACD;QAAE,KAAK,EAAE;YAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;YAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GACzF,IAAI,CAAC;CACV;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,GACvC,kBAAkB,CAUpB;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACjE,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,CAAC,EAAE,CAEL"}
@@ -0,0 +1,36 @@
1
+ import { hasCallGraphReferences } from '@shrkcrft/graph';
2
+ /**
3
+ * A note when a symbol's file language has no call-graph extraction (Go/Python/
4
+ * Java/…) — only TS/JS build call/reference edges — so an empty caller/usage
5
+ * result isn't read as "nothing calls it". Returns undefined for TS/JS.
6
+ */
7
+ export function callGraphLanguageNote(api, sym) {
8
+ const file = sym.path ? api.findFile(sym.path) : undefined;
9
+ const lang = file?.data?.['language'];
10
+ if (hasCallGraphReferences(lang))
11
+ return undefined;
12
+ return `Call/reference edges are extracted for TS/JS only — \`${sym.label}\` is in a ${lang} file, so callers/usages are not tracked here (an empty result does NOT mean none).`;
13
+ }
14
+ export const GRAPH_STALE_HINT = 'Result files changed since indexing — run `shrk graph index --changed` for fresh results.';
15
+ /**
16
+ * Targeted, read-only staleness over a query's result file paths. The graph
17
+ * MCP tools use it to DROP deleted result files and FLAG modified ones, so a
18
+ * stale index never silently serves a wrong/dead answer for a file the agent
19
+ * just edited. Cheap: stats only the handful of result files (mtime+size gate,
20
+ * sha1 only on mismatch) — never a whole-tree walk.
21
+ */
22
+ export function graphResultStaleness(api, cwd, paths) {
23
+ const rel = paths.filter((p) => !!p);
24
+ const stale = api.staleFilesAmong(cwd, rel);
25
+ const has = stale.modified.length > 0 || stale.deleted.length > 0;
26
+ return {
27
+ deletedSet: new Set(stale.deleted),
28
+ field: has
29
+ ? { stale: { modified: stale.modified, deleted: stale.deleted }, staleHint: GRAPH_STALE_HINT }
30
+ : null,
31
+ };
32
+ }
33
+ /** Filter out result entries whose file path was deleted on disk. */
34
+ export function dropDeleted(rows, deletedSet) {
35
+ return rows.filter((r) => !r.path || !deletedSet.has(r.path));
36
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"list-boundary-rules.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-boundary-rules.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,EAAE,eAoBnC,CAAC"}
1
+ {"version":3,"file":"list-boundary-rules.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-boundary-rules.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,qBAAqB,EAAE,eAuBnC,CAAC"}
@@ -1,20 +1,24 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listBoundaryRulesTool = {
2
3
  name: 'list_boundary_rules',
3
- description: 'List every configured boundary rule (local + pack-contributed). Returns id, title, severity, from/forbidden patterns, source.',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
6
- return {
7
- data: ctx.inspection.boundaryRegistry.list().map((r) => ({
8
- id: r.id,
9
- title: r.title,
10
- description: r.description,
11
- severity: r.severity ?? 'error',
12
- from: r.from,
13
- forbiddenImports: r.forbiddenImports ?? [],
14
- allowedImports: r.allowedImports ?? [],
15
- tags: r.tags ?? [],
16
- source: ctx.inspection.boundarySources.get(r.id) ?? null,
17
- })),
18
- };
4
+ description: 'List every configured boundary rule (local + pack-contributed). Returns id, title, severity, from/forbidden patterns, source. Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
11
+ const rows = ctx.inspection.boundaryRegistry.list().map((r) => ({
12
+ id: r.id,
13
+ title: r.title,
14
+ description: r.description,
15
+ severity: r.severity ?? 'error',
16
+ from: r.from,
17
+ forbiddenImports: r.forbiddenImports ?? [],
18
+ allowedImports: r.allowedImports ?? [],
19
+ tags: r.tags ?? [],
20
+ source: ctx.inspection.boundarySources.get(r.id) ?? null,
21
+ }));
22
+ return { data: formatRows(rows, input) };
19
23
  },
20
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-knowledge.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-knowledge.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,iBAAiB,EAAE,eA8C/B,CAAC"}
1
+ {"version":3,"file":"list-knowledge.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-knowledge.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,iBAAiB,EAAE,eA8C/B,CAAC"}
@@ -1,6 +1,7 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listKnowledgeTool = {
2
3
  name: 'list_knowledge',
3
- description: 'Lists available knowledge entries (id, title, type, tags, scope, priority, appliesWhen). Filterable.',
4
+ description: 'Lists available knowledge entries (id, title, type, tags, scope, priority, appliesWhen). Filterable. Pass `format:"table"` for a token-efficient columnar payload.',
4
5
  inputSchema: {
5
6
  type: 'object',
6
7
  properties: {
@@ -10,6 +11,7 @@ export const listKnowledgeTool = {
10
11
  tags: { type: 'array', items: { type: 'string' } },
11
12
  appliesWhen: { type: 'array', items: { type: 'string' } },
12
13
  limit: { type: 'integer', minimum: 1 },
14
+ ...FORMAT_INPUT_PROPERTY,
13
15
  },
14
16
  additionalProperties: false,
15
17
  },
@@ -30,17 +32,16 @@ export const listKnowledgeTool = {
30
32
  entries = entries.filter((e) => appliesWhen.some((a) => e.appliesWhen.includes(a)));
31
33
  }
32
34
  entries = entries.slice(0, limit);
33
- return {
34
- data: entries.map((e) => ({
35
- id: e.id,
36
- title: e.title,
37
- type: e.type,
38
- priority: e.priority,
39
- scope: e.scope,
40
- tags: e.tags,
41
- appliesWhen: e.appliesWhen,
42
- summary: e.summary,
43
- })),
44
- };
35
+ const rows = entries.map((e) => ({
36
+ id: e.id,
37
+ title: e.title,
38
+ type: e.type,
39
+ priority: e.priority,
40
+ scope: e.scope,
41
+ tags: e.tags,
42
+ appliesWhen: e.appliesWhen,
43
+ summary: e.summary,
44
+ }));
45
+ return { data: formatRows(rows, input) };
45
46
  },
46
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-packs.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-packs.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,aAAa,EAAE,eAmB3B,CAAC"}
1
+ {"version":3,"file":"list-packs.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-packs.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,aAAa,EAAE,eAsB3B,CAAC"}
@@ -1,19 +1,23 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listPacksTool = {
2
3
  name: 'list_packs',
3
- description: 'List discovered SharkCraft packs (third-party npm packages that ship knowledge / templates / pipelines). Each entry includes both declared file counts and resolved object counts after dedup.',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
6
- return {
7
- data: ctx.inspection.packs.discoveredPacks.map((p) => ({
8
- packageName: p.packageName,
9
- packageVersion: p.packageVersion,
10
- valid: p.valid,
11
- contributionCounts: p.contributionCounts,
12
- resolvedCounts: p.resolvedCounts,
13
- signatureStatus: p.signatureStatus,
14
- signatureMessage: p.signatureMessage,
15
- loadError: p.loadError,
16
- })),
17
- };
4
+ description: 'List discovered SharkCraft packs (third-party npm packages that ship knowledge / templates / pipelines). Each entry includes both declared file counts and resolved object counts after dedup. Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
11
+ const rows = ctx.inspection.packs.discoveredPacks.map((p) => ({
12
+ packageName: p.packageName,
13
+ packageVersion: p.packageVersion,
14
+ valid: p.valid,
15
+ contributionCounts: p.contributionCounts,
16
+ resolvedCounts: p.resolvedCounts,
17
+ signatureStatus: p.signatureStatus,
18
+ signatureMessage: p.signatureMessage,
19
+ loadError: p.loadError,
20
+ }));
21
+ return { data: formatRows(rows, input) };
18
22
  },
19
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-path-conventions.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-path-conventions.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,uBAAuB,EAAE,eAmBrC,CAAC"}
1
+ {"version":3,"file":"list-path-conventions.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-path-conventions.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,uBAAuB,EAAE,eAsBrC,CAAC"}
@@ -1,20 +1,24 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listPathConventionsTool = {
2
3
  name: 'list_path_conventions',
3
- description: 'List known path conventions.',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
4
+ description: 'List known path conventions. Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
6
11
  const paths = ctx.inspection.pathService.list();
7
- return {
8
- data: paths.map((p) => ({
9
- id: p.id,
10
- title: p.title,
11
- path: p.metadata?.path ?? '',
12
- priority: p.priority,
13
- tags: p.tags,
14
- scope: p.scope,
15
- appliesWhen: p.appliesWhen,
16
- description: p.metadata?.description ?? p.summary,
17
- })),
18
- };
12
+ const rows = paths.map((p) => ({
13
+ id: p.id,
14
+ title: p.title,
15
+ path: p.metadata?.path ?? '',
16
+ priority: p.priority,
17
+ tags: p.tags,
18
+ scope: p.scope,
19
+ appliesWhen: p.appliesWhen,
20
+ description: p.metadata?.description ?? p.summary,
21
+ }));
22
+ return { data: formatRows(rows, input) };
19
23
  },
20
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-pipelines.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-pipelines.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,iBAAiB,EAAE,eAkB/B,CAAC"}
1
+ {"version":3,"file":"list-pipelines.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-pipelines.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC"}
@@ -1,19 +1,23 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listPipelinesTool = {
2
3
  name: 'list_pipelines',
3
- description: 'List available SharkCraft AI development pipelines (declarative agent workflows).',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
4
+ description: 'List available SharkCraft AI development pipelines (declarative agent workflows). Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
6
11
  const list = ctx.inspection.pipelineRegistry.list();
7
- return {
8
- data: list.map((p) => ({
9
- id: p.id,
10
- title: p.title,
11
- description: p.description,
12
- tags: p.tags ?? [],
13
- scope: p.scope ?? [],
14
- appliesWhen: p.appliesWhen ?? [],
15
- stepCount: p.steps.length,
16
- })),
17
- };
12
+ const rows = list.map((p) => ({
13
+ id: p.id,
14
+ title: p.title,
15
+ description: p.description,
16
+ tags: p.tags ?? [],
17
+ scope: p.scope ?? [],
18
+ appliesWhen: p.appliesWhen ?? [],
19
+ stepCount: p.steps.length,
20
+ }));
21
+ return { data: formatRows(rows, input) };
18
22
  },
19
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-presets.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-presets.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,eAAe,EAAE,eA0B7B,CAAC"}
1
+ {"version":3,"file":"list-presets.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-presets.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,eAAe,EAAE,eA6B7B,CAAC"}
@@ -1,26 +1,30 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listPresetsTool = {
2
3
  name: 'list_presets',
3
- description: 'List all SharkCraft presets (built-in + pack-contributed). A preset is a reusable project setup (knowledge / rules / paths / templates / pipelines / docs) that can be applied via the CLI.',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
4
+ description: 'List all SharkCraft presets (built-in + pack-contributed). A preset is a reusable project setup (knowledge / rules / paths / templates / pipelines / docs) that can be applied via the CLI. Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
6
11
  const presets = ctx.inspection.presetRegistry.list();
7
- return {
8
- data: presets.map((p) => ({
9
- id: p.id,
10
- title: p.title,
11
- description: p.description,
12
- tags: p.tags ?? [],
13
- appliesTo: p.appliesTo ?? [],
14
- weight: p.weight ?? 5,
15
- source: ctx.inspection.presetSources.get(p.id) ?? null,
16
- counts: {
17
- knowledge: p.includes.knowledge?.length ?? 0,
18
- rules: p.includes.rules?.length ?? 0,
19
- paths: p.includes.paths?.length ?? 0,
20
- templates: p.includes.templates?.length ?? 0,
21
- pipelines: p.includes.pipelines?.length ?? 0,
22
- },
23
- })),
24
- };
12
+ const rows = presets.map((p) => ({
13
+ id: p.id,
14
+ title: p.title,
15
+ description: p.description,
16
+ tags: p.tags ?? [],
17
+ appliesTo: p.appliesTo ?? [],
18
+ weight: p.weight ?? 5,
19
+ source: ctx.inspection.presetSources.get(p.id) ?? null,
20
+ counts: {
21
+ knowledge: p.includes.knowledge?.length ?? 0,
22
+ rules: p.includes.rules?.length ?? 0,
23
+ paths: p.includes.paths?.length ?? 0,
24
+ templates: p.includes.templates?.length ?? 0,
25
+ pipelines: p.includes.pipelines?.length ?? 0,
26
+ },
27
+ }));
28
+ return { data: formatRows(rows, input) };
25
29
  },
26
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-rules.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-rules.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,aAAa,EAAE,eAkB3B,CAAC"}
1
+ {"version":3,"file":"list-rules.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-rules.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,aAAa,EAAE,eAqB3B,CAAC"}
@@ -1,19 +1,23 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listRulesTool = {
2
3
  name: 'list_rules',
3
- description: 'List all rules with compact metadata.',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
4
+ description: 'List all rules with compact metadata. Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
6
11
  const rules = ctx.inspection.ruleService.list();
7
- return {
8
- data: rules.map((r) => ({
9
- id: r.id,
10
- title: r.title,
11
- priority: r.priority,
12
- tags: r.tags,
13
- scope: r.scope,
14
- appliesWhen: r.appliesWhen,
15
- summary: r.summary,
16
- })),
17
- };
12
+ const rows = rules.map((r) => ({
13
+ id: r.id,
14
+ title: r.title,
15
+ priority: r.priority,
16
+ tags: r.tags,
17
+ scope: r.scope,
18
+ appliesWhen: r.appliesWhen,
19
+ summary: r.summary,
20
+ }));
21
+ return { data: formatRows(rows, input) };
18
22
  },
19
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-templates.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-templates.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,iBAAiB,EAAE,eAkB/B,CAAC"}
1
+ {"version":3,"file":"list-templates.tool.d.ts","sourceRoot":"","sources":["../../src/tools/list-templates.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC"}
@@ -1,19 +1,23 @@
1
+ import { FORMAT_INPUT_PROPERTY, formatRows } from "../server/columnar-format.js";
1
2
  export const listTemplatesTool = {
2
3
  name: 'list_templates',
3
- description: 'List available generator templates.',
4
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
5
- async handler(_input, ctx) {
4
+ description: 'List available generator templates. Pass `format:"table"` for a token-efficient columnar payload.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: { ...FORMAT_INPUT_PROPERTY },
8
+ additionalProperties: false,
9
+ },
10
+ async handler(input, ctx) {
6
11
  const templates = ctx.inspection.templateRegistry.list();
7
- return {
8
- data: templates.map((t) => ({
9
- id: t.id,
10
- name: t.name,
11
- description: t.description,
12
- tags: t.tags,
13
- scope: t.scope,
14
- appliesWhen: t.appliesWhen,
15
- variableCount: t.variables.length,
16
- })),
17
- };
12
+ const rows = templates.map((t) => ({
13
+ id: t.id,
14
+ name: t.name,
15
+ description: t.description,
16
+ tags: t.tags,
17
+ scope: t.scope,
18
+ appliesWhen: t.appliesWhen,
19
+ variableCount: t.variables.length,
20
+ }));
21
+ return { data: formatRows(rows, input) };
18
22
  },
19
23
  };
@@ -0,0 +1,21 @@
1
+ import type { IToolDefinition } from '../server/tool-definition.js';
2
+ /**
3
+ * `plan_quality_review` — score a plan blob for hallucination,
4
+ * generic boilerplate, contradictions, and ungrounded commands.
5
+ *
6
+ * Inputs:
7
+ * - `plan`: either a stringified JSON / Markdown plan body, OR a
8
+ * `{ from: { slug } }` reference that resolves to a saved
9
+ * `.sharkcraft/smart-context/<slug>.plan.json`.
10
+ * - `recommendedCommands` (optional): the set of commands that are
11
+ * considered "real" (typically `verificationCommands` from the
12
+ * same focused bundle). Anything outside this set in
13
+ * `firstCommands`/`validationCommands` gets flagged.
14
+ *
15
+ * Output: structured findings + an overall verdict so the calling
16
+ * agent can decide whether to use, retry, or reject the plan.
17
+ *
18
+ * Read-only — does not modify or rewrite the plan.
19
+ */
20
+ export declare const planQualityReviewTool: IToolDefinition;
21
+ //# sourceMappingURL=plan-quality-review.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-quality-review.tool.d.ts","sourceRoot":"","sources":["../../src/tools/plan-quality-review.tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAiFnC,CAAC"}