@planu/cli 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/config/license-plans.json +15 -1
  2. package/dist/engine/audit-trail/formatter.d.ts +13 -0
  3. package/dist/engine/audit-trail/formatter.d.ts.map +1 -0
  4. package/dist/engine/audit-trail/formatter.js +43 -0
  5. package/dist/engine/audit-trail/formatter.js.map +1 -0
  6. package/dist/engine/audit-trail/hasher.d.ts +18 -0
  7. package/dist/engine/audit-trail/hasher.d.ts.map +1 -0
  8. package/dist/engine/audit-trail/hasher.js +46 -0
  9. package/dist/engine/audit-trail/hasher.js.map +1 -0
  10. package/dist/engine/audit-trail/index.d.ts +2 -0
  11. package/dist/engine/audit-trail/index.d.ts.map +1 -1
  12. package/dist/engine/audit-trail/index.js +4 -1
  13. package/dist/engine/audit-trail/index.js.map +1 -1
  14. package/dist/engine/auto-promoter.d.ts +14 -0
  15. package/dist/engine/auto-promoter.d.ts.map +1 -0
  16. package/dist/engine/auto-promoter.js +40 -0
  17. package/dist/engine/auto-promoter.js.map +1 -0
  18. package/dist/engine/compliance-test-generator/control-mapper.d.ts +4 -0
  19. package/dist/engine/compliance-test-generator/control-mapper.d.ts.map +1 -0
  20. package/dist/engine/compliance-test-generator/control-mapper.js +41 -0
  21. package/dist/engine/compliance-test-generator/control-mapper.js.map +1 -0
  22. package/dist/engine/compliance-test-generator/frameworks/iso42001.d.ts +3 -0
  23. package/dist/engine/compliance-test-generator/frameworks/iso42001.d.ts.map +1 -0
  24. package/dist/engine/compliance-test-generator/frameworks/iso42001.js +55 -0
  25. package/dist/engine/compliance-test-generator/frameworks/iso42001.js.map +1 -0
  26. package/dist/engine/compliance-test-generator/frameworks/pci-dss.d.ts +3 -0
  27. package/dist/engine/compliance-test-generator/frameworks/pci-dss.d.ts.map +1 -0
  28. package/dist/engine/compliance-test-generator/frameworks/pci-dss.js +55 -0
  29. package/dist/engine/compliance-test-generator/frameworks/pci-dss.js.map +1 -0
  30. package/dist/engine/compliance-test-generator/frameworks/soc2.d.ts +3 -0
  31. package/dist/engine/compliance-test-generator/frameworks/soc2.d.ts.map +1 -0
  32. package/dist/engine/compliance-test-generator/frameworks/soc2.js +47 -0
  33. package/dist/engine/compliance-test-generator/frameworks/soc2.js.map +1 -0
  34. package/dist/engine/compliance-test-generator/index.d.ts +3 -0
  35. package/dist/engine/compliance-test-generator/index.d.ts.map +1 -0
  36. package/dist/engine/compliance-test-generator/index.js +64 -0
  37. package/dist/engine/compliance-test-generator/index.js.map +1 -0
  38. package/dist/engine/compliance-test-generator/test-formatter.d.ts +6 -0
  39. package/dist/engine/compliance-test-generator/test-formatter.d.ts.map +1 -0
  40. package/dist/engine/compliance-test-generator/test-formatter.js +33 -0
  41. package/dist/engine/compliance-test-generator/test-formatter.js.map +1 -0
  42. package/dist/engine/cost-guardrails.d.ts +11 -0
  43. package/dist/engine/cost-guardrails.d.ts.map +1 -0
  44. package/dist/engine/cost-guardrails.js +39 -0
  45. package/dist/engine/cost-guardrails.js.map +1 -0
  46. package/dist/engine/dogfood-analyzer.d.ts +6 -0
  47. package/dist/engine/dogfood-analyzer.d.ts.map +1 -0
  48. package/dist/engine/dogfood-analyzer.js +59 -0
  49. package/dist/engine/dogfood-analyzer.js.map +1 -0
  50. package/dist/engine/drift-watcher/criteria-checker.d.ts +16 -0
  51. package/dist/engine/drift-watcher/criteria-checker.d.ts.map +1 -0
  52. package/dist/engine/drift-watcher/criteria-checker.js +81 -0
  53. package/dist/engine/drift-watcher/criteria-checker.js.map +1 -0
  54. package/dist/engine/drift-watcher/file-watcher.d.ts +8 -0
  55. package/dist/engine/drift-watcher/file-watcher.d.ts.map +1 -0
  56. package/dist/engine/drift-watcher/file-watcher.js +24 -0
  57. package/dist/engine/drift-watcher/file-watcher.js.map +1 -0
  58. package/dist/engine/drift-watcher/index.d.ts +19 -0
  59. package/dist/engine/drift-watcher/index.d.ts.map +1 -0
  60. package/dist/engine/drift-watcher/index.js +70 -0
  61. package/dist/engine/drift-watcher/index.js.map +1 -0
  62. package/dist/engine/mcp-gateway/gateway-registry.d.ts +19 -0
  63. package/dist/engine/mcp-gateway/gateway-registry.d.ts.map +1 -0
  64. package/dist/engine/mcp-gateway/gateway-registry.js +33 -0
  65. package/dist/engine/mcp-gateway/gateway-registry.js.map +1 -0
  66. package/dist/engine/mcp-gateway/gateway-scanner.d.ts +17 -0
  67. package/dist/engine/mcp-gateway/gateway-scanner.d.ts.map +1 -0
  68. package/dist/engine/mcp-gateway/gateway-scanner.js +62 -0
  69. package/dist/engine/mcp-gateway/gateway-scanner.js.map +1 -0
  70. package/dist/engine/mcp-gateway/index.d.ts +3 -0
  71. package/dist/engine/mcp-gateway/index.d.ts.map +1 -0
  72. package/dist/engine/mcp-gateway/index.js +4 -0
  73. package/dist/engine/mcp-gateway/index.js.map +1 -0
  74. package/dist/engine/multi-repo/companion-spec-builder.d.ts +9 -0
  75. package/dist/engine/multi-repo/companion-spec-builder.d.ts.map +1 -0
  76. package/dist/engine/multi-repo/companion-spec-builder.js +22 -0
  77. package/dist/engine/multi-repo/companion-spec-builder.js.map +1 -0
  78. package/dist/engine/multi-repo/consumer-scanner.d.ts +12 -0
  79. package/dist/engine/multi-repo/consumer-scanner.d.ts.map +1 -0
  80. package/dist/engine/multi-repo/consumer-scanner.js +48 -0
  81. package/dist/engine/multi-repo/consumer-scanner.js.map +1 -0
  82. package/dist/engine/multi-repo/index.d.ts +4 -0
  83. package/dist/engine/multi-repo/index.d.ts.map +1 -0
  84. package/dist/engine/multi-repo/index.js +5 -0
  85. package/dist/engine/multi-repo/index.js.map +1 -0
  86. package/dist/engine/multi-repo/refactor-tracker.d.ts +7 -0
  87. package/dist/engine/multi-repo/refactor-tracker.d.ts.map +1 -0
  88. package/dist/engine/multi-repo/refactor-tracker.js +22 -0
  89. package/dist/engine/multi-repo/refactor-tracker.js.map +1 -0
  90. package/dist/index.js +15 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/storage/audit-trail-store.d.ts +20 -0
  93. package/dist/storage/audit-trail-store.d.ts.map +1 -0
  94. package/dist/storage/audit-trail-store.js +98 -0
  95. package/dist/storage/audit-trail-store.js.map +1 -0
  96. package/dist/storage/auto-promoter-config-store.d.ts +11 -0
  97. package/dist/storage/auto-promoter-config-store.d.ts.map +1 -0
  98. package/dist/storage/auto-promoter-config-store.js +23 -0
  99. package/dist/storage/auto-promoter-config-store.js.map +1 -0
  100. package/dist/storage/budget-store.d.ts +19 -0
  101. package/dist/storage/budget-store.d.ts.map +1 -0
  102. package/dist/storage/budget-store.js +64 -0
  103. package/dist/storage/budget-store.js.map +1 -0
  104. package/dist/storage/gateway-store.d.ts +23 -0
  105. package/dist/storage/gateway-store.d.ts.map +1 -0
  106. package/dist/storage/gateway-store.js +52 -0
  107. package/dist/storage/gateway-store.js.map +1 -0
  108. package/dist/storage/refactor-registry-store.d.ts +21 -0
  109. package/dist/storage/refactor-registry-store.d.ts.map +1 -0
  110. package/dist/storage/refactor-registry-store.js +77 -0
  111. package/dist/storage/refactor-registry-store.js.map +1 -0
  112. package/dist/tools/auto-promoter-handler.d.ts +13 -0
  113. package/dist/tools/auto-promoter-handler.d.ts.map +1 -0
  114. package/dist/tools/auto-promoter-handler.js +50 -0
  115. package/dist/tools/auto-promoter-handler.js.map +1 -0
  116. package/dist/tools/compliance-test-handler.d.ts +5 -0
  117. package/dist/tools/compliance-test-handler.d.ts.map +1 -0
  118. package/dist/tools/compliance-test-handler.js +66 -0
  119. package/dist/tools/compliance-test-handler.js.map +1 -0
  120. package/dist/tools/cost-guardrails-handler.d.ts +15 -0
  121. package/dist/tools/cost-guardrails-handler.d.ts.map +1 -0
  122. package/dist/tools/cost-guardrails-handler.js +72 -0
  123. package/dist/tools/cost-guardrails-handler.js.map +1 -0
  124. package/dist/tools/dogfood-status-handler.d.ts +3 -0
  125. package/dist/tools/dogfood-status-handler.d.ts.map +1 -0
  126. package/dist/tools/dogfood-status-handler.js +28 -0
  127. package/dist/tools/dogfood-status-handler.js.map +1 -0
  128. package/dist/tools/drift-watcher-handler.d.ts +7 -0
  129. package/dist/tools/drift-watcher-handler.d.ts.map +1 -0
  130. package/dist/tools/drift-watcher-handler.js +65 -0
  131. package/dist/tools/drift-watcher-handler.js.map +1 -0
  132. package/dist/tools/export-audit-trail-handler.d.ts +9 -0
  133. package/dist/tools/export-audit-trail-handler.d.ts.map +1 -0
  134. package/dist/tools/export-audit-trail-handler.js +103 -0
  135. package/dist/tools/export-audit-trail-handler.js.map +1 -0
  136. package/dist/tools/mcp-gateway-handler.d.ts +13 -0
  137. package/dist/tools/mcp-gateway-handler.d.ts.map +1 -0
  138. package/dist/tools/mcp-gateway-handler.js +60 -0
  139. package/dist/tools/mcp-gateway-handler.js.map +1 -0
  140. package/dist/tools/multi-repo-handler.d.ts +15 -0
  141. package/dist/tools/multi-repo-handler.d.ts.map +1 -0
  142. package/dist/tools/multi-repo-handler.js +86 -0
  143. package/dist/tools/multi-repo-handler.js.map +1 -0
  144. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
  145. package/dist/tools/register-audit-trail-tools.js +38 -0
  146. package/dist/tools/register-audit-trail-tools.js.map +1 -1
  147. package/dist/tools/register-auto-promoter-tools.d.ts +3 -0
  148. package/dist/tools/register-auto-promoter-tools.d.ts.map +1 -0
  149. package/dist/tools/register-auto-promoter-tools.js +43 -0
  150. package/dist/tools/register-auto-promoter-tools.js.map +1 -0
  151. package/dist/tools/register-compliance-test-tools.d.ts +3 -0
  152. package/dist/tools/register-compliance-test-tools.d.ts.map +1 -0
  153. package/dist/tools/register-compliance-test-tools.js +55 -0
  154. package/dist/tools/register-compliance-test-tools.js.map +1 -0
  155. package/dist/tools/register-cost-guardrails-tools.d.ts +3 -0
  156. package/dist/tools/register-cost-guardrails-tools.d.ts.map +1 -0
  157. package/dist/tools/register-cost-guardrails-tools.js +61 -0
  158. package/dist/tools/register-cost-guardrails-tools.js.map +1 -0
  159. package/dist/tools/register-dogfood-tools.d.ts +3 -0
  160. package/dist/tools/register-dogfood-tools.d.ts.map +1 -0
  161. package/dist/tools/register-dogfood-tools.js +21 -0
  162. package/dist/tools/register-dogfood-tools.js.map +1 -0
  163. package/dist/tools/register-drift-watcher-tools.d.ts +3 -0
  164. package/dist/tools/register-drift-watcher-tools.d.ts.map +1 -0
  165. package/dist/tools/register-drift-watcher-tools.js +28 -0
  166. package/dist/tools/register-drift-watcher-tools.js.map +1 -0
  167. package/dist/tools/register-mcp-gateway-tools.d.ts +3 -0
  168. package/dist/tools/register-mcp-gateway-tools.d.ts.map +1 -0
  169. package/dist/tools/register-mcp-gateway-tools.js +35 -0
  170. package/dist/tools/register-mcp-gateway-tools.js.map +1 -0
  171. package/dist/tools/register-multi-repo-tools.d.ts +8 -0
  172. package/dist/tools/register-multi-repo-tools.d.ts.map +1 -0
  173. package/dist/tools/register-multi-repo-tools.js +52 -0
  174. package/dist/tools/register-multi-repo-tools.js.map +1 -0
  175. package/dist/tools/safe-handler.d.ts.map +1 -1
  176. package/dist/tools/safe-handler.js +50 -1
  177. package/dist/tools/safe-handler.js.map +1 -1
  178. package/dist/types/audit.d.ts +64 -0
  179. package/dist/types/audit.d.ts.map +1 -0
  180. package/dist/types/audit.js +3 -0
  181. package/dist/types/audit.js.map +1 -0
  182. package/dist/types/auto-promoter.d.ts +26 -0
  183. package/dist/types/auto-promoter.d.ts.map +1 -0
  184. package/dist/types/auto-promoter.js +3 -0
  185. package/dist/types/auto-promoter.js.map +1 -0
  186. package/dist/types/compliance-tests.d.ts +41 -0
  187. package/dist/types/compliance-tests.d.ts.map +1 -0
  188. package/dist/types/compliance-tests.js +3 -0
  189. package/dist/types/compliance-tests.js.map +1 -0
  190. package/dist/types/cost-guardrails.d.ts +41 -0
  191. package/dist/types/cost-guardrails.d.ts.map +1 -0
  192. package/dist/types/cost-guardrails.js +3 -0
  193. package/dist/types/cost-guardrails.js.map +1 -0
  194. package/dist/types/dogfood.d.ts +22 -0
  195. package/dist/types/dogfood.d.ts.map +1 -0
  196. package/dist/types/dogfood.js +3 -0
  197. package/dist/types/dogfood.js.map +1 -0
  198. package/dist/types/drift-watcher.d.ts +35 -0
  199. package/dist/types/drift-watcher.d.ts.map +1 -0
  200. package/dist/types/drift-watcher.js +3 -0
  201. package/dist/types/drift-watcher.js.map +1 -0
  202. package/dist/types/index.d.ts +8 -0
  203. package/dist/types/index.d.ts.map +1 -1
  204. package/dist/types/index.js +8 -0
  205. package/dist/types/index.js.map +1 -1
  206. package/dist/types/mcp-gateway.d.ts +34 -0
  207. package/dist/types/mcp-gateway.d.ts.map +1 -0
  208. package/dist/types/mcp-gateway.js +3 -0
  209. package/dist/types/mcp-gateway.js.map +1 -0
  210. package/dist/types/multi-repo.d.ts +39 -0
  211. package/dist/types/multi-repo.d.ts.map +1 -0
  212. package/dist/types/multi-repo.js +5 -0
  213. package/dist/types/multi-repo.js.map +1 -0
  214. package/package.json +1 -1
  215. package/src/config/license-plans.json +15 -1
@@ -0,0 +1,13 @@
1
+ import type { ToolResult } from '../types/index.js';
2
+ import type { DiscoverMcpGatewaysInput, FederationDiscoveryStatusInput } from '../types/mcp-gateway.js';
3
+ /**
4
+ * Handle discover_mcp_gateways tool call.
5
+ * Runs a discovery pass and returns a summary of found gateways.
6
+ */
7
+ export declare function handleDiscoverMcpGateways(input: DiscoverMcpGatewaysInput): Promise<ToolResult>;
8
+ /**
9
+ * Handle federation_discovery_status tool call.
10
+ * Returns all known gateways from the registry with their current status.
11
+ */
12
+ export declare function handleFederationDiscoveryStatus(input: FederationDiscoveryStatusInput): Promise<ToolResult>;
13
+ //# sourceMappingURL=mcp-gateway-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-gateway-handler.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-gateway-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,yBAAyB,CAAC;AAGjC;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,UAAU,CAAC,CA0BrB;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,UAAU,CAAC,CAiCrB"}
@@ -0,0 +1,60 @@
1
+ import { discoverGateways, getGatewayStatus } from '../engine/mcp-gateway/index.js';
2
+ /**
3
+ * Handle discover_mcp_gateways tool call.
4
+ * Runs a discovery pass and returns a summary of found gateways.
5
+ */
6
+ export async function handleDiscoverMcpGateways(input) {
7
+ const { urls = [], includeLocalhost = true } = input;
8
+ const found = await discoverGateways(urls, includeLocalhost);
9
+ if (found.length === 0) {
10
+ return {
11
+ content: [
12
+ {
13
+ type: 'text',
14
+ text: 'No MCP gateways discovered. Make sure target servers expose /.well-known/mcp.',
15
+ },
16
+ ],
17
+ };
18
+ }
19
+ const lines = [`Discovered ${found.length} MCP gateway(s):`, ''];
20
+ for (const gw of found) {
21
+ const compat = gw.planuCompatible ? ' [Planu-compatible]' : '';
22
+ lines.push(` ${gw.name} (${gw.url})${compat}`);
23
+ if (gw.tools.length > 0) {
24
+ lines.push(` Tools: ${gw.tools.join(', ')}`);
25
+ }
26
+ }
27
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
28
+ }
29
+ /**
30
+ * Handle federation_discovery_status tool call.
31
+ * Returns all known gateways from the registry with their current status.
32
+ */
33
+ export async function handleFederationDiscoveryStatus(input) {
34
+ // projectPath is required by the tool schema but the registry is global
35
+ void input.projectPath;
36
+ const { registry, active } = await getGatewayStatus();
37
+ const all = registry.gateways;
38
+ if (all.length === 0) {
39
+ return {
40
+ content: [
41
+ {
42
+ type: 'text',
43
+ text: 'No gateways in registry. Run discover_mcp_gateways to start discovery.',
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ const lines = [`Gateway registry: ${all.length} known, ${active.length} active`];
49
+ if (registry.lastDiscoveryAt) {
50
+ lines.push(`Last discovery: ${registry.lastDiscoveryAt}`);
51
+ }
52
+ lines.push('');
53
+ for (const gw of all) {
54
+ const compat = gw.planuCompatible ? ' [Planu]' : '';
55
+ lines.push(` [${gw.status}] ${gw.name} (${gw.url})${compat}`);
56
+ lines.push(` Last seen: ${gw.lastSeenAt}`);
57
+ }
58
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
59
+ }
60
+ //# sourceMappingURL=mcp-gateway-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-gateway-handler.js","sourceRoot":"","sources":["../../src/tools/mcp-gateway-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ToolResult } from '../types/index.js';
2
+ import type { CoordinateRefactorInput, SyncRefactorStatusInput } from '../types/multi-repo.js';
3
+ /**
4
+ * Initiate a multi-repo refactor session.
5
+ * 1. Loads the source spec to verify it exists.
6
+ * 2. Discovers all registered projects (excluding source).
7
+ * 3. Scans each project for symbol usage.
8
+ * 4. Persists a RefactorSession and returns summary.
9
+ */
10
+ export declare function handleCoordinateRefactor(input: CoordinateRefactorInput): Promise<ToolResult>;
11
+ /**
12
+ * Returns the current progress report for a refactor session.
13
+ */
14
+ export declare function handleSyncRefactorStatus(input: SyncRefactorStatusInput): Promise<ToolResult>;
15
+ //# sourceMappingURL=multi-repo-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo-handler.d.ts","sourceRoot":"","sources":["../../src/tools/multi-repo-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EAGxB,MAAM,wBAAwB,CAAC;AAehC;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAoDrB;AAMD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAqBrB"}
@@ -0,0 +1,86 @@
1
+ // tools/multi-repo-handler.ts — SPEC-389: Handlers for multi-repo refactoring coordination
2
+ import { randomUUID } from 'node:crypto';
3
+ import { hashProjectPath } from '../storage/base-store.js';
4
+ import { getSpec } from '../storage/spec-store.js';
5
+ import { createSession, getSession } from '../storage/refactor-registry-store.js';
6
+ import { scanProjectForSymbols, getRegisteredProjectPaths, buildStatusReport, } from '../engine/multi-repo/index.js';
7
+ import { textResult, errText } from './response-helpers.js';
8
+ // ---------------------------------------------------------------------------
9
+ // coordinate_refactor
10
+ // ---------------------------------------------------------------------------
11
+ /**
12
+ * Initiate a multi-repo refactor session.
13
+ * 1. Loads the source spec to verify it exists.
14
+ * 2. Discovers all registered projects (excluding source).
15
+ * 3. Scans each project for symbol usage.
16
+ * 4. Persists a RefactorSession and returns summary.
17
+ */
18
+ export async function handleCoordinateRefactor(input) {
19
+ const { projectPath, specId, affectedSymbols } = input;
20
+ if (affectedSymbols.length === 0) {
21
+ return errText('affectedSymbols must contain at least one symbol name.');
22
+ }
23
+ const projectId = hashProjectPath(projectPath);
24
+ const spec = await getSpec(projectId, specId);
25
+ if (!spec) {
26
+ return errText(`Spec "${specId}" not found in project "${projectPath}".`);
27
+ }
28
+ const consumerPaths = await getRegisteredProjectPaths(projectPath);
29
+ const consumerProjects = [];
30
+ for (const consumerPath of consumerPaths) {
31
+ const usageLocations = await scanProjectForSymbols(consumerPath, affectedSymbols);
32
+ if (usageLocations.length > 0) {
33
+ consumerProjects.push({
34
+ projectPath: consumerPath,
35
+ projectId: hashProjectPath(consumerPath),
36
+ usageLocations,
37
+ status: 'pending',
38
+ });
39
+ }
40
+ }
41
+ const session = {
42
+ id: randomUUID(),
43
+ sourceSpecId: specId,
44
+ sourceProjectPath: projectPath,
45
+ affectedSymbols,
46
+ consumerProjects,
47
+ startedAt: new Date().toISOString(),
48
+ status: 'scanning',
49
+ };
50
+ await createSession(session);
51
+ const lines = [
52
+ `Refactor session created: ${session.id}`,
53
+ `Source spec: ${specId}`,
54
+ `Affected symbols: ${affectedSymbols.join(', ')}`,
55
+ `Consumer projects with usages: ${consumerProjects.length}`,
56
+ ];
57
+ for (const cp of consumerProjects) {
58
+ lines.push(` - ${cp.projectPath}: ${cp.usageLocations.length} file(s)`);
59
+ }
60
+ return textResult(lines.join('\n'));
61
+ }
62
+ // ---------------------------------------------------------------------------
63
+ // sync_refactor_status
64
+ // ---------------------------------------------------------------------------
65
+ /**
66
+ * Returns the current progress report for a refactor session.
67
+ */
68
+ export async function handleSyncRefactorStatus(input) {
69
+ const { refactorId } = input;
70
+ const session = await getSession(refactorId);
71
+ if (!session) {
72
+ return errText(`Refactor session "${refactorId}" not found.`);
73
+ }
74
+ const report = buildStatusReport(session);
75
+ const lines = [
76
+ `Refactor: ${report.refactorId}`,
77
+ `Source spec: ${report.sourceSpec}`,
78
+ `Total consumers: ${report.totalConsumers}`,
79
+ `Completed: ${report.completed}`,
80
+ `In progress: ${report.inProgress}`,
81
+ `Pending: ${report.pending}`,
82
+ `Overall progress: ${report.overallProgress}%`,
83
+ ];
84
+ return textResult(lines.join('\n'));
85
+ }
86
+ //# sourceMappingURL=multi-repo-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo-handler.js","sourceRoot":"","sources":["../../src/tools/multi-repo-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-audit-trail-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqF/D"}
1
+ {"version":3,"file":"register-audit-trail-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoI/D"}
@@ -2,6 +2,7 @@
2
2
  import { z } from 'zod';
3
3
  import { safeLicensed } from './safe-handler.js';
4
4
  import { handleAuditTrail, handleGenerateAttestation } from './audit-trail-handler.js';
5
+ import { handleExportAuditTrail } from './export-audit-trail-handler.js';
5
6
  import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
6
7
  const AUDIT_EVENT_TYPES = [
7
8
  'spec.created',
@@ -81,5 +82,42 @@ export function registerAuditTrailTools(server) {
81
82
  }
82
83
  return handleGenerateAttestation({ ...args, projectId: pid });
83
84
  }));
85
+ // export_audit_trail — SPEC-387 (EU AI Act Article 12)
86
+ server.registerTool('export_audit_trail', {
87
+ description: 'Export the EU AI Act Article 12 immutable audit trail for every Planu tool invocation. ' +
88
+ 'Supports filtering by project, date range, or spec. Verifies SHA-256 chain integrity. ' +
89
+ 'Formats: json (default), json-ld (W3C PROV-O), csv.',
90
+ annotations: { readOnlyHint: true },
91
+ inputSchema: {
92
+ projectPath: z
93
+ .string()
94
+ .max(4096)
95
+ .describe('Absolute path to project root. Used to filter entries for this project.'),
96
+ fromDate: z
97
+ .string()
98
+ .optional()
99
+ .describe('ISO-8601 start date (inclusive). Example: 2026-01-01T00:00:00Z'),
100
+ toDate: z
101
+ .string()
102
+ .optional()
103
+ .describe('ISO-8601 end date (inclusive). Example: 2026-12-31T23:59:59Z'),
104
+ specId: z
105
+ .string()
106
+ .max(500)
107
+ .optional()
108
+ .describe('Filter entries by spec ID (e.g. SPEC-001).'),
109
+ format: z
110
+ .enum(['json', 'json-ld', 'csv'])
111
+ .optional()
112
+ .describe('Output format. Valid values: json (default), json-ld (W3C PROV-O), csv.'),
113
+ limit: z
114
+ .number()
115
+ .int()
116
+ .min(1)
117
+ .max(10000)
118
+ .optional()
119
+ .describe('Maximum number of entries to return.'),
120
+ },
121
+ }, safeLicensed('export_audit_trail', (args) => Promise.resolve(handleExportAuditTrail(args))));
84
122
  }
85
123
  //# sourceMappingURL=register-audit-trail-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-audit-trail-tools.js","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-audit-trail-tools.js","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAutoPromoterTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-auto-promoter-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-auto-promoter-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-auto-promoter-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoDjE"}
@@ -0,0 +1,43 @@
1
+ // tools/register-auto-promoter-tools.ts — Registers auto-promotion MCP tools (SPEC-391)
2
+ import { z } from 'zod';
3
+ import { handleConfigureAutoPromotion, handleCheckAutoPromotion } from './auto-promoter-handler.js';
4
+ import { safeLicensed } from './safe-handler.js';
5
+ export function registerAutoPromoterTools(server) {
6
+ // configure_auto_promotion — SPEC-391
7
+ server.registerTool('configure_auto_promotion', {
8
+ description: 'Configure auto-promotion settings for a project. ' +
9
+ 'When enabled, specs that reach the confidence threshold are eligible for automatic status promotion. ' +
10
+ 'High-risk specs are never auto-promoted regardless of settings.',
11
+ inputSchema: {
12
+ projectPath: z.string().describe('Absolute path to the project directory.'),
13
+ enabled: z
14
+ .boolean()
15
+ .optional()
16
+ .describe('Enable or disable auto-promotion for the project.'),
17
+ threshold: z
18
+ .number()
19
+ .min(0)
20
+ .max(100)
21
+ .optional()
22
+ .describe('Confidence score threshold (0-100). Specs below this are not auto-promoted. Default: 85.'),
23
+ maxRisk: z
24
+ .enum(['low', 'medium'])
25
+ .optional()
26
+ .describe('Maximum risk level allowed for auto-promotion. ' +
27
+ 'Valid values: "low" (only low-risk specs), "medium" (low and medium). ' +
28
+ 'High-risk specs are never auto-promoted.'),
29
+ },
30
+ annotations: { title: 'Configure Auto Promotion' },
31
+ }, safeLicensed('configure_auto_promotion', async (args) => handleConfigureAutoPromotion(args)));
32
+ // check_auto_promotion — SPEC-391
33
+ server.registerTool('check_auto_promotion', {
34
+ description: 'Check whether a spec is eligible for auto-promotion by computing its confidence score. ' +
35
+ 'Returns the score breakdown (readiness, risk penalty, dependency bonus) and eligibility verdict.',
36
+ inputSchema: {
37
+ projectPath: z.string().describe('Absolute path to the project directory.'),
38
+ specId: z.string().describe('Spec ID to evaluate (e.g., "SPEC-042").'),
39
+ },
40
+ annotations: { title: 'Check Auto Promotion', readOnlyHint: true },
41
+ }, safeLicensed('check_auto_promotion', async (args) => handleCheckAutoPromotion(args)));
42
+ }
43
+ //# sourceMappingURL=register-auto-promoter-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-auto-promoter-tools.js","sourceRoot":"","sources":["../../src/tools/register-auto-promoter-tools.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAGxF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,sCAAsC;IACtC,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,WAAW,EACT,mDAAmD;YACnD,uGAAuG;YACvG,iEAAiE;QACnE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;YAChE,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,0FAA0F,CAC3F;YACH,OAAO,EAAE,CAAC;iBACP,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;iBACvB,QAAQ,EAAE;iBACV,QAAQ,CACP,iDAAiD;gBAC/C,wEAAwE;gBACxE,0CAA0C,CAC7C;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE;KACnD,EACD,YAAY,CAAC,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAC7F,CAAC;IAEF,kCAAkC;IAClC,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,yFAAyF;YACzF,kGAAkG;QACpG,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACvE;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE;KACnE,EACD,YAAY,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CACrF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerComplianceTestTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-compliance-test-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-compliance-test-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-compliance-test-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8DnE"}
@@ -0,0 +1,55 @@
1
+ // tools/register-compliance-test-tools.ts — SPEC-390: Register compliance test suite tools
2
+ import { z } from 'zod';
3
+ import { safeLicensed } from './safe-handler.js';
4
+ import { handleGenerateComplianceTests, handleComplianceCoverageReport, } from './compliance-test-handler.js';
5
+ const FRAMEWORK_DESCRIBE = 'Compliance framework. Valid values: soc2 | pci-dss | iso-42001 | hipaa | gdpr';
6
+ const FORMAT_DESCRIBE = 'Output format for tests. Valid values: jest | gherkin | markdown';
7
+ export function registerComplianceTestTools(server) {
8
+ server.registerTool('generate_compliance_tests', {
9
+ description: 'Generate compliance-specific test suites from spec acceptance criteria. ' +
10
+ 'Maps criteria to regulatory controls (SOC2, PCI-DSS, ISO-42001) and outputs ' +
11
+ 'Jest/Vitest test files, Gherkin scenarios, or markdown checklists.',
12
+ inputSchema: {
13
+ projectPath: z
14
+ .string()
15
+ .min(1)
16
+ .max(4096)
17
+ .describe('Absolute path to the project root directory'),
18
+ specId: z
19
+ .string()
20
+ .min(1)
21
+ .max(50)
22
+ .describe('Spec ID to generate compliance tests for (e.g. SPEC-001)'),
23
+ frameworks: z
24
+ .array(z.enum(['soc2', 'pci-dss', 'iso-42001', 'hipaa', 'gdpr']))
25
+ .min(1)
26
+ .describe(FRAMEWORK_DESCRIBE),
27
+ outputFormat: z.enum(['jest', 'gherkin', 'markdown']).optional().describe(FORMAT_DESCRIBE),
28
+ },
29
+ annotations: {
30
+ title: 'Generate Compliance Tests',
31
+ readOnlyHint: true,
32
+ },
33
+ }, safeLicensed('generate_compliance_tests', async (args) => handleGenerateComplianceTests(args)));
34
+ server.registerTool('compliance_coverage_report', {
35
+ description: 'List all compliance controls for the requested frameworks, showing their IDs, ' +
36
+ 'titles, descriptions, and matching keywords. ' +
37
+ 'Use before generate_compliance_tests to understand which controls are available.',
38
+ inputSchema: {
39
+ projectPath: z
40
+ .string()
41
+ .min(1)
42
+ .max(4096)
43
+ .describe('Absolute path to the project root directory'),
44
+ frameworks: z
45
+ .array(z.enum(['soc2', 'pci-dss', 'iso-42001', 'hipaa', 'gdpr']))
46
+ .min(1)
47
+ .describe(FRAMEWORK_DESCRIBE),
48
+ },
49
+ annotations: {
50
+ title: 'Compliance Coverage Report',
51
+ readOnlyHint: true,
52
+ },
53
+ }, safeLicensed('compliance_coverage_report', (args) => Promise.resolve(handleComplianceCoverageReport(args))));
54
+ }
55
+ //# sourceMappingURL=register-compliance-test-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-compliance-test-tools.js","sourceRoot":"","sources":["../../src/tools/register-compliance-test-tools.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAG3F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAMtC,MAAM,kBAAkB,GACtB,+EAA+E,CAAC;AAClF,MAAM,eAAe,GAAG,kEAAkE,CAAC;AAE3F,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EACT,0EAA0E;YAC1E,8EAA8E;YAC9E,oEAAoE;QACtE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,CAAC,0DAA0D,CAAC;YACvE,UAAU,EAAE,CAAC;iBACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChE,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SAC3F;QACD,WAAW,EAAE;YACX,KAAK,EAAE,2BAA2B;YAClC,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACvD,6BAA6B,CAAC,IAAoC,CAAC,CACpE,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,WAAW,EACT,gFAAgF;YAChF,+CAA+C;YAC/C,kFAAkF;QACpF,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,UAAU,EAAE,CAAC;iBACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChE,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,kBAAkB,CAAC;SAChC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,4BAA4B;YACnC,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,CAClD,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,IAA+B,CAAC,CAAC,CACjF,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerCostGuardrailsTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-cost-guardrails-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-cost-guardrails-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-cost-guardrails-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0EnE"}
@@ -0,0 +1,61 @@
1
+ // tools/register-cost-guardrails-tools.ts — Registers cost guardrail MCP tools (SPEC-393)
2
+ import { z } from 'zod';
3
+ import { handleSetSpecBudget, handleBudgetStatus, handleRecordSpend, } from './cost-guardrails-handler.js';
4
+ import { safeLicensed } from './safe-handler.js';
5
+ export function registerCostGuardrailsTools(server) {
6
+ // set_spec_budget — SPEC-393
7
+ server.registerTool('set_spec_budget', {
8
+ description: 'Set a USD cost budget cap for a spec. ' +
9
+ 'When usage approaches the threshold the recommended model is downgraded to control costs. ' +
10
+ 'When the budget is exhausted the tool recommends haiku only.',
11
+ inputSchema: {
12
+ projectPath: z.string().describe('Absolute path to the project directory.'),
13
+ specId: z.string().describe('Spec ID to budget (e.g., "SPEC-042").'),
14
+ maxUsdCents: z
15
+ .number()
16
+ .int()
17
+ .min(1)
18
+ .describe('Maximum allowed spend in USD cents (e.g., 500 = $5.00).'),
19
+ warningThreshold: z
20
+ .number()
21
+ .min(1)
22
+ .max(100)
23
+ .optional()
24
+ .describe('Percentage at which a warning is triggered. Default: 80.'),
25
+ },
26
+ annotations: { title: 'Set Spec Budget' },
27
+ }, safeLicensed('set_spec_budget', async (args) => handleSetSpecBudget(args)));
28
+ // budget_status — SPEC-393
29
+ server.registerTool('budget_status', {
30
+ description: 'Return the budget status for one spec or all specs in a project. ' +
31
+ 'Shows spend, remaining, usage percentage, and the recommended model tier.',
32
+ inputSchema: {
33
+ projectPath: z.string().describe('Absolute path to the project directory.'),
34
+ specId: z
35
+ .string()
36
+ .optional()
37
+ .describe('Spec ID to query. If omitted, returns status for all specs in the project.'),
38
+ },
39
+ annotations: { title: 'Budget Status', readOnlyHint: true },
40
+ }, safeLicensed('budget_status', async (args) => handleBudgetStatus(args)));
41
+ // record_spend — SPEC-393
42
+ server.registerTool('record_spend', {
43
+ description: 'Record actual AI spend for a spec. ' +
44
+ 'Increments the running total and returns the updated budget status. ' +
45
+ 'A warning message is included when the budget warning threshold is crossed.',
46
+ inputSchema: {
47
+ projectPath: z.string().describe('Absolute path to the project directory.'),
48
+ specId: z.string().describe('Spec ID to charge (e.g., "SPEC-042").'),
49
+ usdCents: z
50
+ .number()
51
+ .min(0)
52
+ .describe('Amount spent in USD cents to add to the running total.'),
53
+ modelUsed: z
54
+ .enum(['opus', 'sonnet', 'haiku'])
55
+ .describe('Model tier used for this invocation. Valid values: "opus", "sonnet", "haiku".'),
56
+ toolName: z.string().describe('Name of the tool or action that incurred the cost.'),
57
+ },
58
+ annotations: { title: 'Record Spend' },
59
+ }, safeLicensed('record_spend', async (args) => handleRecordSpend(args)));
60
+ }
61
+ //# sourceMappingURL=register-cost-guardrails-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-cost-guardrails-tools.js","sourceRoot":"","sources":["../../src/tools/register-cost-guardrails-tools.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAG1F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,6BAA6B;IAC7B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,wCAAwC;YACxC,4FAA4F;YAC5F,8DAA8D;QAChE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACpE,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,yDAAyD,CAAC;YACtE,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0DAA0D,CAAC;SACxE;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;KAC1C,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAC3E,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,mEAAmE;YACnE,2EAA2E;QAC7E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4EAA4E,CAAC;SAC1F;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE;KAC5D,EACD,YAAY,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CACxE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,qCAAqC;YACrC,sEAAsE;YACtE,6EAA6E;QAC/E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACpE,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,wDAAwD,CAAC;YACrE,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;iBACjC,QAAQ,CACP,+EAA+E,CAChF;YACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACvC,EACD,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerDogfoodTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-dogfood-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-dogfood-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-dogfood-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuB5D"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { handleDogfoodStatus } from './dogfood-status-handler.js';
3
+ import { safeTracked } from './safe-handler.js';
4
+ export function registerDogfoodTools(server) {
5
+ server.registerTool('dogfood_status', {
6
+ description: "Report which Planu SDD tools have been used in Planu's own development by analyzing git commit history. Returns a dogfood score (0-100), list of tools used and missing, and a recommendation to improve SDD adoption. Use this to verify the team is practicing what they preach.",
7
+ inputSchema: {
8
+ projectPath: z
9
+ .string()
10
+ .min(1)
11
+ .max(4096)
12
+ .describe('Absolute path to the project root directory'),
13
+ since: z
14
+ .string()
15
+ .optional()
16
+ .describe('ISO 8601 date string (e.g. "2026-01-01") — analyze commits since this date. Defaults to last 30 days.'),
17
+ },
18
+ annotations: { readOnlyHint: true },
19
+ }, safeTracked('dogfood_status', (args) => Promise.resolve(handleDogfoodStatus(args))));
20
+ }
21
+ //# sourceMappingURL=register-dogfood-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-dogfood-tools.js","sourceRoot":"","sources":["../../src/tools/register-dogfood-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,oRAAoR;QACtR,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,uGAAuG,CACxG;SACJ;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,WAAW,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CACpF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerDriftWatcherTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-drift-watcher-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-drift-watcher-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-drift-watcher-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BjE"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import { handleWatchSpecDrift } from './drift-watcher-handler.js';
3
+ import { safeLicensed } from './safe-handler.js';
4
+ export function registerDriftWatcherTools(server) {
5
+ server.registerTool('watch_spec_drift', {
6
+ description: 'Real-time file watcher that detects when code changes cause a spec to drift from ' +
7
+ 'its acceptance criteria. Uses Node.js fs.watch to monitor project files and alerts ' +
8
+ 'when changes may affect spec compliance. State is in-memory and does not persist ' +
9
+ 'across server restarts.',
10
+ inputSchema: {
11
+ projectPath: z
12
+ .string()
13
+ .min(1)
14
+ .max(2048)
15
+ .describe('Absolute path to the project root directory.'),
16
+ specId: z
17
+ .string()
18
+ .min(1)
19
+ .max(200)
20
+ .describe('Spec ID to watch for drift (e.g. "SPEC-042").'),
21
+ action: z
22
+ .enum(['start', 'stop', 'status'])
23
+ .describe('start: begin watching, stop: stop watcher, status: check if running'),
24
+ },
25
+ annotations: { readOnlyHint: false },
26
+ }, safeLicensed('watch_spec_drift', async (args) => handleWatchSpecDrift(args)));
27
+ }
28
+ //# sourceMappingURL=register-drift-watcher-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-drift-watcher-tools.js","sourceRoot":"","sources":["../../src/tools/register-drift-watcher-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,mFAAmF;YACnF,qFAAqF;YACrF,mFAAmF;YACnF,yBAAyB;QAC3B,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACjC,QAAQ,CAAC,qEAAqE,CAAC;SACnF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC9C,oBAAoB,CAAC,IAA2B,CAAC,CAClD,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerMcpGatewayTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-mcp-gateway-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-mcp-gateway-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-mcp-gateway-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6C/D"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import { safe } from './safe-handler.js';
3
+ import { handleDiscoverMcpGateways, handleFederationDiscoveryStatus, } from './mcp-gateway-handler.js';
4
+ export function registerMcpGatewayTools(server) {
5
+ // discover_mcp_gateways
6
+ server.registerTool('discover_mcp_gateways', {
7
+ description: 'Auto-discover Planu-compatible MCP servers by probing the /.well-known/mcp endpoint ' +
8
+ 'on localhost ports and any explicitly provided URLs. ' +
9
+ 'Found gateways are persisted to the global registry for federation.',
10
+ inputSchema: {
11
+ projectPath: z.string().min(1).describe('Absolute path to the project root.'),
12
+ urls: z
13
+ .array(z.url())
14
+ .optional()
15
+ .describe('Extra base URLs to probe (e.g. "http://remote-host:4000"). ' +
16
+ 'Each URL is probed at <url>/.well-known/mcp.'),
17
+ includeLocalhost: z
18
+ .boolean()
19
+ .optional()
20
+ .describe('Scan default localhost ports (3000, 3001, 8080, 8000, 9000). ' +
21
+ 'Defaults to true. Set to false to probe only the provided URLs.'),
22
+ },
23
+ annotations: { title: 'Discover MCP Gateways', readOnlyHint: false },
24
+ }, safe((args) => handleDiscoverMcpGateways(args)));
25
+ // federation_discovery_status
26
+ server.registerTool('federation_discovery_status', {
27
+ description: 'Show all known MCP gateways from the global registry, including their status ' +
28
+ '(active / unreachable / incompatible), discovered tools, and Planu compatibility.',
29
+ inputSchema: {
30
+ projectPath: z.string().min(1).describe('Absolute path to the project root.'),
31
+ },
32
+ annotations: { title: 'Federation Discovery Status', readOnlyHint: true },
33
+ }, safe((args) => handleFederationDiscoveryStatus(args)));
34
+ }
35
+ //# sourceMappingURL=register-mcp-gateway-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-mcp-gateway-tools.js","sourceRoot":"","sources":["../../src/tools/register-mcp-gateway-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAMlC,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,wBAAwB;IACxB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,sFAAsF;YACtF,uDAAuD;YACvD,qEAAqE;QACvE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC7E,IAAI,EAAE,CAAC;iBACJ,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBACd,QAAQ,EAAE;iBACV,QAAQ,CACP,6DAA6D;gBAC3D,8CAA8C,CACjD;YACH,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,+DAA+D;gBAC7D,iEAAiE,CACpE;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,KAAK,EAAE;KACrE,EACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAgC,CAAC,CAAC,CAC5E,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,WAAW,EACT,+EAA+E;YAC/E,mFAAmF;QACrF,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;SAC9E;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,YAAY,EAAE,IAAI,EAAE;KAC1E,EACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,+BAA+B,CAAC,IAAsC,CAAC,CAAC,CACxF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Registers multi-repo refactoring coordination tools on the MCP server (SPEC-389).
4
+ * - coordinate_refactor (pro)
5
+ * - sync_refactor_status (pro)
6
+ */
7
+ export declare function registerMultiRepoTools(server: McpServer): void;
8
+ //# sourceMappingURL=register-multi-repo-tools.d.ts.map