@planu/cli 1.11.0 → 1.12.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.
- package/dist/config/license-plans.json +27 -2
- package/dist/engine/api-compat/compatibility-checker.d.ts +4 -0
- package/dist/engine/api-compat/compatibility-checker.d.ts.map +1 -0
- package/dist/engine/api-compat/compatibility-checker.js +118 -0
- package/dist/engine/api-compat/compatibility-checker.js.map +1 -0
- package/dist/engine/checkpoint/checkpoint-manager.d.ts +22 -0
- package/dist/engine/checkpoint/checkpoint-manager.d.ts.map +1 -0
- package/dist/engine/checkpoint/checkpoint-manager.js +76 -0
- package/dist/engine/checkpoint/checkpoint-manager.js.map +1 -0
- package/dist/engine/checkpoint/policy-engine.d.ts +10 -0
- package/dist/engine/checkpoint/policy-engine.d.ts.map +1 -0
- package/dist/engine/checkpoint/policy-engine.js +87 -0
- package/dist/engine/checkpoint/policy-engine.js.map +1 -0
- package/dist/engine/compliance/auto-remediator.d.ts +9 -0
- package/dist/engine/compliance/auto-remediator.d.ts.map +1 -0
- package/dist/engine/compliance/auto-remediator.js +118 -0
- package/dist/engine/compliance/auto-remediator.js.map +1 -0
- package/dist/engine/context-profile/profile-catalog.d.ts +5 -0
- package/dist/engine/context-profile/profile-catalog.d.ts.map +1 -0
- package/dist/engine/context-profile/profile-catalog.js +145 -0
- package/dist/engine/context-profile/profile-catalog.js.map +1 -0
- package/dist/engine/critical-path/path-analyzer.d.ts +3 -0
- package/dist/engine/critical-path/path-analyzer.d.ts.map +1 -0
- package/dist/engine/critical-path/path-analyzer.js +145 -0
- package/dist/engine/critical-path/path-analyzer.js.map +1 -0
- package/dist/engine/drift/violation-resolver.d.ts +9 -0
- package/dist/engine/drift/violation-resolver.d.ts.map +1 -0
- package/dist/engine/drift/violation-resolver.js +128 -0
- package/dist/engine/drift/violation-resolver.js.map +1 -0
- package/dist/engine/ears/criterion-scorer.d.ts +7 -0
- package/dist/engine/ears/criterion-scorer.d.ts.map +1 -0
- package/dist/engine/ears/criterion-scorer.js +87 -0
- package/dist/engine/ears/criterion-scorer.js.map +1 -0
- package/dist/engine/ears/pattern-matcher.d.ts +5 -0
- package/dist/engine/ears/pattern-matcher.d.ts.map +1 -0
- package/dist/engine/ears/pattern-matcher.js +48 -0
- package/dist/engine/ears/pattern-matcher.js.map +1 -0
- package/dist/engine/ears/rewriter.d.ts +7 -0
- package/dist/engine/ears/rewriter.d.ts.map +1 -0
- package/dist/engine/ears/rewriter.js +45 -0
- package/dist/engine/ears/rewriter.js.map +1 -0
- package/dist/engine/ears/spec-linter.d.ts +7 -0
- package/dist/engine/ears/spec-linter.d.ts.map +1 -0
- package/dist/engine/ears/spec-linter.js +127 -0
- package/dist/engine/ears/spec-linter.js.map +1 -0
- package/dist/engine/health/auto-fixer.d.ts +7 -0
- package/dist/engine/health/auto-fixer.d.ts.map +1 -0
- package/dist/engine/health/auto-fixer.js +130 -0
- package/dist/engine/health/auto-fixer.js.map +1 -0
- package/dist/engine/mcp-catalog/catalog-advisor.d.ts +3 -0
- package/dist/engine/mcp-catalog/catalog-advisor.d.ts.map +1 -0
- package/dist/engine/mcp-catalog/catalog-advisor.js +180 -0
- package/dist/engine/mcp-catalog/catalog-advisor.js.map +1 -0
- package/dist/engine/similar-problems/similarity-finder.d.ts +3 -0
- package/dist/engine/similar-problems/similarity-finder.d.ts.map +1 -0
- package/dist/engine/similar-problems/similarity-finder.js +144 -0
- package/dist/engine/similar-problems/similarity-finder.js.map +1 -0
- package/dist/engine/sync/asana-puller.d.ts +9 -0
- package/dist/engine/sync/asana-puller.d.ts.map +1 -0
- package/dist/engine/sync/asana-puller.js +91 -0
- package/dist/engine/sync/asana-puller.js.map +1 -0
- package/dist/engine/sync/conflict-resolver.d.ts +17 -0
- package/dist/engine/sync/conflict-resolver.d.ts.map +1 -0
- package/dist/engine/sync/conflict-resolver.js +58 -0
- package/dist/engine/sync/conflict-resolver.js.map +1 -0
- package/dist/engine/sync/monday-puller.d.ts +9 -0
- package/dist/engine/sync/monday-puller.d.ts.map +1 -0
- package/dist/engine/sync/monday-puller.js +110 -0
- package/dist/engine/sync/monday-puller.js.map +1 -0
- package/dist/engine/sync/notion-puller.d.ts +15 -0
- package/dist/engine/sync/notion-puller.d.ts.map +1 -0
- package/dist/engine/sync/notion-puller.js +101 -0
- package/dist/engine/sync/notion-puller.js.map +1 -0
- package/dist/engine/verifier/code-scanner.d.ts +8 -0
- package/dist/engine/verifier/code-scanner.d.ts.map +1 -0
- package/dist/engine/verifier/code-scanner.js +73 -0
- package/dist/engine/verifier/code-scanner.js.map +1 -0
- package/dist/engine/verifier/compliance-scorer.d.ts +17 -0
- package/dist/engine/verifier/compliance-scorer.d.ts.map +1 -0
- package/dist/engine/verifier/compliance-scorer.js +131 -0
- package/dist/engine/verifier/compliance-scorer.js.map +1 -0
- package/dist/engine/verifier/criterion-matcher.d.ts +15 -0
- package/dist/engine/verifier/criterion-matcher.d.ts.map +1 -0
- package/dist/engine/verifier/criterion-matcher.js +210 -0
- package/dist/engine/verifier/criterion-matcher.js.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/compliance-score-store.d.ts +16 -0
- package/dist/storage/compliance-score-store.d.ts.map +1 -0
- package/dist/storage/compliance-score-store.js +30 -0
- package/dist/storage/compliance-score-store.js.map +1 -0
- package/dist/storage/context-profile-store.d.ts +14 -0
- package/dist/storage/context-profile-store.d.ts.map +1 -0
- package/dist/storage/context-profile-store.js +34 -0
- package/dist/storage/context-profile-store.js.map +1 -0
- package/dist/storage/workflow-checkpoint-store.d.ts +16 -0
- package/dist/storage/workflow-checkpoint-store.d.ts.map +1 -0
- package/dist/storage/workflow-checkpoint-store.js +71 -0
- package/dist/storage/workflow-checkpoint-store.js.map +1 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.js +32 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.js.map +1 -0
- package/dist/tools/checkpoint/configure-policy-handler.d.ts +3 -0
- package/dist/tools/checkpoint/configure-policy-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/configure-policy-handler.js +60 -0
- package/dist/tools/checkpoint/configure-policy-handler.js.map +1 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.d.ts +3 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.js +25 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.js.map +1 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.js +32 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.js.map +1 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.js +44 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.js.map +1 -0
- package/dist/tools/pull-sync-handler.d.ts +25 -0
- package/dist/tools/pull-sync-handler.d.ts.map +1 -0
- package/dist/tools/pull-sync-handler.js +161 -0
- package/dist/tools/pull-sync-handler.js.map +1 -0
- package/dist/tools/register-auto-remediation.d.ts +3 -0
- package/dist/tools/register-auto-remediation.d.ts.map +1 -0
- package/dist/tools/register-auto-remediation.js +174 -0
- package/dist/tools/register-auto-remediation.js.map +1 -0
- package/dist/tools/register-checkpoints.d.ts +3 -0
- package/dist/tools/register-checkpoints.d.ts.map +1 -0
- package/dist/tools/register-checkpoints.js +134 -0
- package/dist/tools/register-checkpoints.js.map +1 -0
- package/dist/tools/register-context-profile.d.ts +3 -0
- package/dist/tools/register-context-profile.d.ts.map +1 -0
- package/dist/tools/register-context-profile.js +106 -0
- package/dist/tools/register-context-profile.js.map +1 -0
- package/dist/tools/register-ears.d.ts +3 -0
- package/dist/tools/register-ears.d.ts.map +1 -0
- package/dist/tools/register-ears.js +148 -0
- package/dist/tools/register-ears.js.map +1 -0
- package/dist/tools/register-enterprise-compliance.js +1 -1
- package/dist/tools/register-enterprise-compliance.js.map +1 -1
- package/dist/tools/register-pull-sync.d.ts +3 -0
- package/dist/tools/register-pull-sync.d.ts.map +1 -0
- package/dist/tools/register-pull-sync.js +71 -0
- package/dist/tools/register-pull-sync.js.map +1 -0
- package/dist/tools/register-spec405-tools.d.ts +7 -0
- package/dist/tools/register-spec405-tools.d.ts.map +1 -0
- package/dist/tools/register-spec405-tools.js +194 -0
- package/dist/tools/register-spec405-tools.js.map +1 -0
- package/dist/tools/register-verifier.d.ts +3 -0
- package/dist/tools/register-verifier.d.ts.map +1 -0
- package/dist/tools/register-verifier.js +141 -0
- package/dist/tools/register-verifier.js.map +1 -0
- package/dist/types/analysis.d.ts +98 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/context-profile.d.ts +22 -0
- package/dist/types/context-profile.d.ts.map +1 -0
- package/dist/types/context-profile.js +2 -0
- package/dist/types/context-profile.js.map +1 -0
- package/dist/types/ears.d.ts +34 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +3 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/health.d.ts +40 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +3 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/notion-asana-monday.d.ts +38 -0
- package/dist/types/notion-asana-monday.d.ts.map +1 -1
- package/dist/types/workflow-checkpoint.d.ts +66 -0
- package/dist/types/workflow-checkpoint.d.ts.map +1 -0
- package/dist/types/workflow-checkpoint.js +4 -0
- package/dist/types/workflow-checkpoint.js.map +1 -0
- package/package.json +1 -1
- package/src/config/license-plans.json +27 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-sync-handler.js","sourceRoot":"","sources":["../../src/tools/pull-sync-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-auto-remediation.d.ts","sourceRoot":"","sources":["../../src/tools/register-auto-remediation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmNpE"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// tools/register-auto-remediation.ts — Auto-fix + remediation tools (SPEC-408)
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { safeLicensed } from './safe-handler.js';
|
|
4
|
+
import { hashProjectPath } from '../storage/base-store.js';
|
|
5
|
+
import { autoFixHealth } from '../engine/health/auto-fixer.js';
|
|
6
|
+
import { autoRemediateCompliance } from '../engine/compliance/auto-remediator.js';
|
|
7
|
+
import { resolveDriftViolations } from '../engine/drift/violation-resolver.js';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Tool 1: auto_fix_health
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export function registerAutoRemediationTools(server) {
|
|
12
|
+
server.registerTool('auto_fix_health', {
|
|
13
|
+
description: 'Automatically fix deterministic health issues found by health_check_all. ' +
|
|
14
|
+
'Fixable: missing progress.md files. ' +
|
|
15
|
+
'Not fixable (reported as skipped): incomplete spec fields, missing tests, drift violations. ' +
|
|
16
|
+
'Use dryRun=true to preview what would be fixed without making changes.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
projectPath: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(4096)
|
|
22
|
+
.describe('Absolute path to the project root directory'),
|
|
23
|
+
dryRun: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('When true, report what would be fixed without actually writing any files (default: false)'),
|
|
27
|
+
},
|
|
28
|
+
annotations: {
|
|
29
|
+
title: 'Auto Fix Health Issues',
|
|
30
|
+
},
|
|
31
|
+
}, safeLicensed('auto_fix_health', async (args) => {
|
|
32
|
+
const { projectPath, dryRun = false } = args;
|
|
33
|
+
const projectId = hashProjectPath(projectPath);
|
|
34
|
+
const result = await autoFixHealth(projectPath, projectId, dryRun);
|
|
35
|
+
const lines = [
|
|
36
|
+
dryRun ? '[DRY RUN] Auto-fix health report:' : 'Auto-fix health report:',
|
|
37
|
+
'',
|
|
38
|
+
`Fixed: ${result.fixedCount}`,
|
|
39
|
+
`Skipped (manual action required): ${result.skippedCount}`,
|
|
40
|
+
`Executed at: ${result.executedAt}`,
|
|
41
|
+
];
|
|
42
|
+
if (result.fixes.length > 0) {
|
|
43
|
+
lines.push('', 'Fixes applied:');
|
|
44
|
+
for (const fix of result.fixes) {
|
|
45
|
+
lines.push(` [${fix.success ? 'OK' : 'FAIL'}] ${fix.affectedItem}: ${fix.action}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (result.skipped.length > 0) {
|
|
49
|
+
lines.push('', 'Skipped (requires manual action):');
|
|
50
|
+
for (const skip of result.skipped) {
|
|
51
|
+
lines.push(` - ${skip.issue}: ${skip.reason}`);
|
|
52
|
+
for (const step of skip.manualSteps) {
|
|
53
|
+
lines.push(` → ${step}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
58
|
+
}));
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Tool 2: auto_remediate_compliance
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
server.registerTool('auto_remediate_compliance', {
|
|
63
|
+
description: 'For each compliance control gap, creates a stub spec so the team has a tracked work item. ' +
|
|
64
|
+
'Already-covered controls are reported. Partially-covered controls list manual actions needed. ' +
|
|
65
|
+
'Use dryRun=true to preview without creating any files.',
|
|
66
|
+
inputSchema: {
|
|
67
|
+
projectPath: z
|
|
68
|
+
.string()
|
|
69
|
+
.min(1)
|
|
70
|
+
.max(4096)
|
|
71
|
+
.describe('Absolute path to the project root directory'),
|
|
72
|
+
framework: z
|
|
73
|
+
.enum(['SOC2', 'GDPR', 'HIPAA', 'ISO27001'])
|
|
74
|
+
.describe('Compliance framework to remediate: SOC2=service org controls, GDPR=EU data privacy, HIPAA=US health data, ISO27001=security management'),
|
|
75
|
+
dryRun: z
|
|
76
|
+
.boolean()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe('When true, report what would be created without writing any files (default: false)'),
|
|
79
|
+
},
|
|
80
|
+
annotations: {
|
|
81
|
+
title: 'Auto Remediate Compliance Gaps',
|
|
82
|
+
},
|
|
83
|
+
}, safeLicensed('auto_remediate_compliance', async (args) => {
|
|
84
|
+
const { projectPath, framework, dryRun = false, } = args;
|
|
85
|
+
const projectId = hashProjectPath(projectPath);
|
|
86
|
+
const result = await autoRemediateCompliance(projectPath, projectId, framework, dryRun);
|
|
87
|
+
const lines = [
|
|
88
|
+
dryRun
|
|
89
|
+
? `[DRY RUN] Compliance remediation for ${result.framework}:`
|
|
90
|
+
: `Compliance remediation for ${result.framework}:`,
|
|
91
|
+
'',
|
|
92
|
+
`Specs created: ${result.createdSpecs.length}`,
|
|
93
|
+
`Controls already covered: ${result.alreadyCovered.length}`,
|
|
94
|
+
`Manual actions required: ${result.manualActionRequired.length}`,
|
|
95
|
+
];
|
|
96
|
+
if (result.createdSpecs.length > 0) {
|
|
97
|
+
lines.push('', 'Specs created:');
|
|
98
|
+
for (const id of result.createdSpecs) {
|
|
99
|
+
lines.push(` + ${id}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (result.alreadyCovered.length > 0) {
|
|
103
|
+
lines.push('', 'Already covered controls:');
|
|
104
|
+
for (const ctrl of result.alreadyCovered) {
|
|
105
|
+
lines.push(` ✓ ${ctrl}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (result.manualActionRequired.length > 0) {
|
|
109
|
+
lines.push('', 'Manual actions required:');
|
|
110
|
+
for (const action of result.manualActionRequired) {
|
|
111
|
+
lines.push(` - ${action.control}: ${action.description}`);
|
|
112
|
+
for (const step of action.steps) {
|
|
113
|
+
lines.push(` → ${step}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
118
|
+
}));
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Tool 3: resolve_drift_violations
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
server.registerTool('resolve_drift_violations', {
|
|
123
|
+
description: 'Resolves drift violations semi-automatically. ' +
|
|
124
|
+
'For done specs with diverged code: creates a follow-up spec to track the delta. ' +
|
|
125
|
+
'For in-progress specs ahead of the spec: records the resolution note. ' +
|
|
126
|
+
'For draft specs with code present: flags for manual review. ' +
|
|
127
|
+
'Use dryRun=true to preview without creating files.',
|
|
128
|
+
inputSchema: {
|
|
129
|
+
projectPath: z
|
|
130
|
+
.string()
|
|
131
|
+
.min(1)
|
|
132
|
+
.max(4096)
|
|
133
|
+
.describe('Absolute path to the project root directory'),
|
|
134
|
+
dryRun: z
|
|
135
|
+
.boolean()
|
|
136
|
+
.optional()
|
|
137
|
+
.describe('When true, report what would be resolved without writing any files (default: false)'),
|
|
138
|
+
},
|
|
139
|
+
annotations: {
|
|
140
|
+
title: 'Resolve Drift Violations',
|
|
141
|
+
},
|
|
142
|
+
}, safeLicensed('resolve_drift_violations', async (args) => {
|
|
143
|
+
const { projectPath, dryRun = false } = args;
|
|
144
|
+
const projectId = hashProjectPath(projectPath);
|
|
145
|
+
const result = await resolveDriftViolations(projectPath, projectId, dryRun);
|
|
146
|
+
const lines = [
|
|
147
|
+
dryRun ? '[DRY RUN] Drift violation resolution:' : 'Drift violation resolution:',
|
|
148
|
+
'',
|
|
149
|
+
`Violations resolved: ${result.resolved.length}`,
|
|
150
|
+
`Follow-up specs created: ${result.followUpSpecsCreated.length}`,
|
|
151
|
+
`Requiring manual review: ${result.manualReview.length}`,
|
|
152
|
+
];
|
|
153
|
+
if (result.resolved.length > 0) {
|
|
154
|
+
lines.push('', 'Resolved:');
|
|
155
|
+
for (const r of result.resolved) {
|
|
156
|
+
lines.push(` [${r.specId}] ${r.action}: ${r.description}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (result.followUpSpecsCreated.length > 0) {
|
|
160
|
+
lines.push('', 'Follow-up specs created:');
|
|
161
|
+
for (const id of result.followUpSpecsCreated) {
|
|
162
|
+
lines.push(` + ${id}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (result.manualReview.length > 0) {
|
|
166
|
+
lines.push('', 'Requires manual review:');
|
|
167
|
+
for (const item of result.manualReview) {
|
|
168
|
+
lines.push(` - ${item}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=register-auto-remediation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-auto-remediation.js","sourceRoot":"","sources":["../../src/tools/register-auto-remediation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-checkpoints.d.ts","sourceRoot":"","sources":["../../src/tools/register-checkpoints.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsL/D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// tools/register-checkpoints.ts — Registers approval checkpoint tools (SPEC-411)
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { safeTracked } from './safe-handler.js';
|
|
4
|
+
import { handleConfigureCheckpointPolicy } from './checkpoint/configure-policy-handler.js';
|
|
5
|
+
import { handleRequireCheckpoint } from './checkpoint/require-checkpoint-handler.js';
|
|
6
|
+
import { handleApproveCheckpoint } from './checkpoint/approve-checkpoint-handler.js';
|
|
7
|
+
import { handleRejectCheckpoint } from './checkpoint/reject-checkpoint-handler.js';
|
|
8
|
+
import { handleListPendingCheckpoints } from './checkpoint/list-checkpoints-handler.js';
|
|
9
|
+
export function registerCheckpointTools(server) {
|
|
10
|
+
// -------------------------------------------------------------------------
|
|
11
|
+
// configure_checkpoint_policy — set up approval gates for transitions
|
|
12
|
+
// -------------------------------------------------------------------------
|
|
13
|
+
server.registerTool('configure_checkpoint_policy', {
|
|
14
|
+
description: 'Configure approval checkpoints that block spec status transitions until a designated role approves. ' +
|
|
15
|
+
'Apply a built-in preset (strict/balanced/relaxed) or define custom per-transition policies. ' +
|
|
16
|
+
'This implements the Judge gate in Planner→Worker→Judge governance.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
|
|
19
|
+
preset: z
|
|
20
|
+
.enum(['strict', 'balanced', 'relaxed'])
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Policy preset: strict=all transitions need approval (draft->review, review->approved, approved->implementing, implementing->done), ' +
|
|
23
|
+
'balanced=key transitions only (review->approved, implementing->done), ' +
|
|
24
|
+
'relaxed=only completion needs approval (implementing->done).'),
|
|
25
|
+
policies: z
|
|
26
|
+
.array(z.object({
|
|
27
|
+
transition: z
|
|
28
|
+
.string()
|
|
29
|
+
.min(1)
|
|
30
|
+
.describe('Transition to gate, e.g. "review->approved". ' +
|
|
31
|
+
'Valid statuses: draft, review, approved, implementing, done, discarded.'),
|
|
32
|
+
requiredRole: z
|
|
33
|
+
.string()
|
|
34
|
+
.min(1)
|
|
35
|
+
.describe('Role that must approve: developer, tech_lead, qa, product_owner, admin.'),
|
|
36
|
+
description: z
|
|
37
|
+
.string()
|
|
38
|
+
.min(1)
|
|
39
|
+
.describe('Human-readable explanation of why this checkpoint exists.'),
|
|
40
|
+
autoApproveAfterHours: z
|
|
41
|
+
.number()
|
|
42
|
+
.positive()
|
|
43
|
+
.optional()
|
|
44
|
+
.describe('Hours before the checkpoint auto-approves if no action is taken.'),
|
|
45
|
+
}))
|
|
46
|
+
.optional()
|
|
47
|
+
.describe('Custom policies (used when preset is not set). ' +
|
|
48
|
+
'Replaces all existing policies for the project.'),
|
|
49
|
+
},
|
|
50
|
+
annotations: { title: 'Configure Checkpoint Policy', destructiveHint: false },
|
|
51
|
+
}, safeTracked('configure_checkpoint_policy', (args) => handleConfigureCheckpointPolicy(args)));
|
|
52
|
+
// -------------------------------------------------------------------------
|
|
53
|
+
// require_checkpoint — manually create a pending checkpoint
|
|
54
|
+
// -------------------------------------------------------------------------
|
|
55
|
+
server.registerTool('require_checkpoint', {
|
|
56
|
+
description: 'Create a pending checkpoint that blocks a specific spec status transition. ' +
|
|
57
|
+
'Returns the checkpoint ID and instructions on who needs to approve it. ' +
|
|
58
|
+
'The checkpoint must be approved via approve_checkpoint before the transition can proceed.',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
|
|
61
|
+
specId: z.string().min(1).max(500).describe('Spec ID to block, e.g. SPEC-042.'),
|
|
62
|
+
transition: z
|
|
63
|
+
.string()
|
|
64
|
+
.min(1)
|
|
65
|
+
.describe('Status transition to block, e.g. "review->approved". ' +
|
|
66
|
+
'Must match a configured policy.'),
|
|
67
|
+
requestedBy: z
|
|
68
|
+
.string()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe('Identifier of who is requesting the checkpoint (defaults to "system").'),
|
|
71
|
+
},
|
|
72
|
+
annotations: { title: 'Require Checkpoint', destructiveHint: false },
|
|
73
|
+
}, safeTracked('require_checkpoint', (args) => handleRequireCheckpoint(args)));
|
|
74
|
+
// -------------------------------------------------------------------------
|
|
75
|
+
// approve_checkpoint — approve a pending checkpoint
|
|
76
|
+
// -------------------------------------------------------------------------
|
|
77
|
+
server.registerTool('approve_checkpoint', {
|
|
78
|
+
description: 'Approve a pending checkpoint, unblocking the associated spec status transition. ' +
|
|
79
|
+
'Returns confirmation and next steps for the spec.',
|
|
80
|
+
inputSchema: {
|
|
81
|
+
projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
|
|
82
|
+
checkpointId: z
|
|
83
|
+
.string()
|
|
84
|
+
.min(1)
|
|
85
|
+
.describe('ID of the checkpoint to approve (returned by require_checkpoint).'),
|
|
86
|
+
approvedBy: z
|
|
87
|
+
.string()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe('Identifier of the approver (defaults to "anonymous").'),
|
|
90
|
+
},
|
|
91
|
+
annotations: { title: 'Approve Checkpoint', destructiveHint: false },
|
|
92
|
+
}, safeTracked('approve_checkpoint', (args) => handleApproveCheckpoint(args)));
|
|
93
|
+
// -------------------------------------------------------------------------
|
|
94
|
+
// reject_checkpoint — reject a pending checkpoint
|
|
95
|
+
// -------------------------------------------------------------------------
|
|
96
|
+
server.registerTool('reject_checkpoint', {
|
|
97
|
+
description: 'Reject a pending checkpoint, blocking the associated spec status transition. ' +
|
|
98
|
+
'A rejection reason is required. The spec stays in its current status.',
|
|
99
|
+
inputSchema: {
|
|
100
|
+
projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
|
|
101
|
+
checkpointId: z
|
|
102
|
+
.string()
|
|
103
|
+
.min(1)
|
|
104
|
+
.describe('ID of the checkpoint to reject (returned by require_checkpoint).'),
|
|
105
|
+
rejectedBy: z
|
|
106
|
+
.string()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Identifier of the reviewer rejecting (defaults to "anonymous").'),
|
|
109
|
+
reason: z
|
|
110
|
+
.string()
|
|
111
|
+
.min(1)
|
|
112
|
+
.describe('Mandatory explanation of why the checkpoint was rejected.'),
|
|
113
|
+
},
|
|
114
|
+
annotations: { title: 'Reject Checkpoint', destructiveHint: false },
|
|
115
|
+
}, safeTracked('reject_checkpoint', (args) => handleRejectCheckpoint(args)));
|
|
116
|
+
// -------------------------------------------------------------------------
|
|
117
|
+
// list_pending_checkpoints — list checkpoints awaiting approval
|
|
118
|
+
// -------------------------------------------------------------------------
|
|
119
|
+
server.registerTool('list_pending_checkpoints', {
|
|
120
|
+
description: 'List all pending approval checkpoints for a project. ' +
|
|
121
|
+
'Optionally filter by required role to see only checkpoints relevant to you. ' +
|
|
122
|
+
'Returns spec ID, transition being blocked, required role, and requester.',
|
|
123
|
+
inputSchema: {
|
|
124
|
+
projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
|
|
125
|
+
role: z
|
|
126
|
+
.string()
|
|
127
|
+
.optional()
|
|
128
|
+
.describe('Filter by required role: developer, tech_lead, qa, product_owner, admin. ' +
|
|
129
|
+
'Omit to list all pending checkpoints.'),
|
|
130
|
+
},
|
|
131
|
+
annotations: { title: 'List Pending Checkpoints', readOnlyHint: true },
|
|
132
|
+
}, safeTracked('list_pending_checkpoints', (args) => handleListPendingCheckpoints(args)));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=register-checkpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-checkpoints.js","sourceRoot":"","sources":["../../src/tools/register-checkpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-context-profile.d.ts","sourceRoot":"","sources":["../../src/tools/register-context-profile.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiHnE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { safeTracked } from './safe-handler.js';
|
|
3
|
+
import { setActiveProfile, getActiveProfile } from '../storage/context-profile-store.js';
|
|
4
|
+
import { getProfile, getAllProfiles } from '../engine/context-profile/profile-catalog.js';
|
|
5
|
+
const AVAILABLE_PHASES = ['brainstorm', 'plan', 'implement', 'review', 'release'];
|
|
6
|
+
const projectPathField = z
|
|
7
|
+
.string()
|
|
8
|
+
.min(1)
|
|
9
|
+
.max(4096)
|
|
10
|
+
.describe('Absolute path to the project root directory.');
|
|
11
|
+
const phaseField = z
|
|
12
|
+
.enum(['brainstorm', 'plan', 'implement', 'review', 'release'])
|
|
13
|
+
.describe('Work phase to activate: ' +
|
|
14
|
+
'brainstorm=explore ideas, ' +
|
|
15
|
+
'plan=design specs, ' +
|
|
16
|
+
'implement=build features, ' +
|
|
17
|
+
'review=validate quality, ' +
|
|
18
|
+
'release=publish');
|
|
19
|
+
export function registerContextProfileTools(server) {
|
|
20
|
+
// -------------------------------------------------------------------------
|
|
21
|
+
// set_context_profile
|
|
22
|
+
// -------------------------------------------------------------------------
|
|
23
|
+
server.registerTool('set_context_profile', {
|
|
24
|
+
description: 'Activate a work-phase context profile that guides the LLM to use only the ' +
|
|
25
|
+
'relevant tools for the current phase (brainstorm/plan/implement/review/release). ' +
|
|
26
|
+
'Reduces token waste by surfacing only the ~10 most relevant tools per phase.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
projectPath: projectPathField,
|
|
29
|
+
phase: phaseField,
|
|
30
|
+
},
|
|
31
|
+
annotations: { readOnlyHint: false },
|
|
32
|
+
}, safeTracked('set_context_profile', async (args) => {
|
|
33
|
+
const { projectPath, phase } = args;
|
|
34
|
+
await setActiveProfile(projectPath, phase);
|
|
35
|
+
const profile = getProfile(phase);
|
|
36
|
+
const focusList = profile.focusTools.map((t) => ` • ${t}`).join('\n');
|
|
37
|
+
const tipsList = profile.tips.map((t) => ` - ${t}`).join('\n');
|
|
38
|
+
const text = `You are now in **${profile.name}**.\n\n` +
|
|
39
|
+
`${profile.description}\n\n` +
|
|
40
|
+
`**Focus tools (~${profile.estimatedTokensSaved}% token savings):**\n${focusList}\n\n` +
|
|
41
|
+
`**Tips:**\n${tipsList}`;
|
|
42
|
+
return { content: [{ type: 'text', text }] };
|
|
43
|
+
}));
|
|
44
|
+
// -------------------------------------------------------------------------
|
|
45
|
+
// get_context_profile
|
|
46
|
+
// -------------------------------------------------------------------------
|
|
47
|
+
server.registerTool('get_context_profile', {
|
|
48
|
+
description: 'Get the currently active context profile for a project, ' +
|
|
49
|
+
'including focus tools and phase-specific tips. ' +
|
|
50
|
+
'Returns a prompt when no profile is active.',
|
|
51
|
+
inputSchema: {
|
|
52
|
+
projectPath: projectPathField,
|
|
53
|
+
},
|
|
54
|
+
annotations: { readOnlyHint: true },
|
|
55
|
+
}, safeTracked('get_context_profile', async (args) => {
|
|
56
|
+
const { projectPath } = args;
|
|
57
|
+
const active = await getActiveProfile(projectPath);
|
|
58
|
+
if (!active) {
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: 'No active context profile. Use set_context_profile to activate one.\n\n' +
|
|
64
|
+
`Available phases: ${AVAILABLE_PHASES.join(', ')}`,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const profile = getProfile(active.phase);
|
|
70
|
+
const focusList = profile.focusTools.map((t) => ` • ${t}`).join('\n');
|
|
71
|
+
const avoidList = profile.avoidTools.map((t) => ` • ${t}`).join('\n');
|
|
72
|
+
const tipsList = profile.tips.map((t) => ` - ${t}`).join('\n');
|
|
73
|
+
const text = `**Active profile: ${profile.name}**\n` +
|
|
74
|
+
`Activated: ${active.activatedAt}\n\n` +
|
|
75
|
+
`${profile.description}\n\n` +
|
|
76
|
+
`**Focus tools:**\n${focusList}\n\n` +
|
|
77
|
+
`**Avoid tools:**\n${avoidList}\n\n` +
|
|
78
|
+
`**Tips:**\n${tipsList}\n\n` +
|
|
79
|
+
`Estimated token savings: ~${profile.estimatedTokensSaved}%`;
|
|
80
|
+
return { content: [{ type: 'text', text }] };
|
|
81
|
+
}));
|
|
82
|
+
// -------------------------------------------------------------------------
|
|
83
|
+
// list_context_profiles
|
|
84
|
+
// -------------------------------------------------------------------------
|
|
85
|
+
server.registerTool('list_context_profiles', {
|
|
86
|
+
description: 'List all 5 available context profiles (brainstorm/plan/implement/review/release) ' +
|
|
87
|
+
'with their focus tools and estimated token savings. ' +
|
|
88
|
+
'Use this to discover which profile is best for the current work.',
|
|
89
|
+
inputSchema: {
|
|
90
|
+
projectPath: projectPathField,
|
|
91
|
+
},
|
|
92
|
+
annotations: { readOnlyHint: true },
|
|
93
|
+
}, safeTracked('list_context_profiles', async (args) => {
|
|
94
|
+
const { projectPath } = args;
|
|
95
|
+
const active = await getActiveProfile(projectPath);
|
|
96
|
+
const profiles = getAllProfiles();
|
|
97
|
+
const lines = ['**Available context profiles:**\n'];
|
|
98
|
+
for (const p of profiles) {
|
|
99
|
+
const isActive = active?.phase === p.phase ? ' (ACTIVE)' : '';
|
|
100
|
+
lines.push(`### ${p.name}${isActive}`, `Phase: \`${p.phase}\``, p.description, `Focus: ${p.focusTools.slice(0, 5).join(', ')}${p.focusTools.length > 5 ? ` +${String(p.focusTools.length - 5)} more` : ''}`, `Token savings: ~${String(p.estimatedTokensSaved)}%`, '');
|
|
101
|
+
}
|
|
102
|
+
lines.push(`Use set_context_profile with phase=<phase> to activate one.`);
|
|
103
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=register-context-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-context-profile.js","sourceRoot":"","sources":["../../src/tools/register-context-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-ears.d.ts","sourceRoot":"","sources":["../../src/tools/register-ears.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkLzD"}
|