@planu/cli 1.12.0 → 1.13.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/ai-tool-registry.json +71 -0
- package/dist/config/autopilot-config.json +21 -0
- package/dist/config/competitive-catalog.json +83 -0
- package/dist/config/license-plans.json +17 -1
- package/dist/engine/agent-registry/lifecycle-manager.d.ts +8 -0
- package/dist/engine/agent-registry/lifecycle-manager.d.ts.map +1 -0
- package/dist/engine/agent-registry/lifecycle-manager.js +81 -0
- package/dist/engine/agent-registry/lifecycle-manager.js.map +1 -0
- package/dist/engine/agent-registry/role-catalog.d.ts +17 -0
- package/dist/engine/agent-registry/role-catalog.d.ts.map +1 -0
- package/dist/engine/agent-registry/role-catalog.js +55 -0
- package/dist/engine/agent-registry/role-catalog.js.map +1 -0
- package/dist/engine/autopilot/action-executor.d.ts +18 -0
- package/dist/engine/autopilot/action-executor.d.ts.map +1 -0
- package/dist/engine/autopilot/action-executor.js +91 -0
- package/dist/engine/autopilot/action-executor.js.map +1 -0
- package/dist/engine/autopilot/event-bus.d.ts +8 -0
- package/dist/engine/autopilot/event-bus.d.ts.map +1 -0
- package/dist/engine/autopilot/event-bus.js +28 -0
- package/dist/engine/autopilot/event-bus.js.map +1 -0
- package/dist/engine/autopilot/trigger-rules.d.ts +3 -0
- package/dist/engine/autopilot/trigger-rules.d.ts.map +1 -0
- package/dist/engine/autopilot/trigger-rules.js +125 -0
- package/dist/engine/autopilot/trigger-rules.js.map +1 -0
- package/dist/engine/competitive/gap-analyzer.d.ts +12 -0
- package/dist/engine/competitive/gap-analyzer.d.ts.map +1 -0
- package/dist/engine/competitive/gap-analyzer.js +214 -0
- package/dist/engine/competitive/gap-analyzer.js.map +1 -0
- package/dist/engine/hook-generator/ai-hook-templates.d.ts +8 -0
- package/dist/engine/hook-generator/ai-hook-templates.d.ts.map +1 -0
- package/dist/engine/hook-generator/ai-hook-templates.js +43 -0
- package/dist/engine/hook-generator/ai-hook-templates.js.map +1 -0
- package/dist/engine/hook-generator/hook-merger.d.ts +13 -0
- package/dist/engine/hook-generator/hook-merger.d.ts.map +1 -0
- package/dist/engine/hook-generator/hook-merger.js +148 -0
- package/dist/engine/hook-generator/hook-merger.js.map +1 -0
- package/dist/engine/hook-generator/stack-hook-templates.d.ts +10 -0
- package/dist/engine/hook-generator/stack-hook-templates.d.ts.map +1 -0
- package/dist/engine/hook-generator/stack-hook-templates.js +105 -0
- package/dist/engine/hook-generator/stack-hook-templates.js.map +1 -0
- package/dist/engine/project-dna/ai-tool-detector.d.ts +12 -0
- package/dist/engine/project-dna/ai-tool-detector.d.ts.map +1 -0
- package/dist/engine/project-dna/ai-tool-detector.js +103 -0
- package/dist/engine/project-dna/ai-tool-detector.js.map +1 -0
- package/dist/engine/project-dna/rules-generator.d.ts +18 -0
- package/dist/engine/project-dna/rules-generator.d.ts.map +1 -0
- package/dist/engine/project-dna/rules-generator.js +193 -0
- package/dist/engine/project-dna/rules-generator.js.map +1 -0
- package/dist/engine/project-dna/stack-detector.d.ts +24 -0
- package/dist/engine/project-dna/stack-detector.d.ts.map +1 -0
- package/dist/engine/project-dna/stack-detector.js +309 -0
- package/dist/engine/project-dna/stack-detector.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/agent-registry-store.d.ts +11 -0
- package/dist/storage/agent-registry-store.d.ts.map +1 -0
- package/dist/storage/agent-registry-store.js +45 -0
- package/dist/storage/agent-registry-store.js.map +1 -0
- package/dist/tools/competitive-handlers.d.ts +30 -0
- package/dist/tools/competitive-handlers.d.ts.map +1 -0
- package/dist/tools/competitive-handlers.js +155 -0
- package/dist/tools/competitive-handlers.js.map +1 -0
- package/dist/tools/create-spec/post-creation.d.ts +1 -1
- package/dist/tools/create-spec/post-creation.d.ts.map +1 -1
- package/dist/tools/create-spec/post-creation.js +13 -1
- package/dist/tools/create-spec/post-creation.js.map +1 -1
- package/dist/tools/create-spec.js +1 -1
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/hook-generator-handler.d.ts +8 -0
- package/dist/tools/hook-generator-handler.d.ts.map +1 -0
- package/dist/tools/hook-generator-handler.js +154 -0
- package/dist/tools/hook-generator-handler.js.map +1 -0
- package/dist/tools/project-dna-handler.d.ts +34 -0
- package/dist/tools/project-dna-handler.d.ts.map +1 -0
- package/dist/tools/project-dna-handler.js +261 -0
- package/dist/tools/project-dna-handler.js.map +1 -0
- package/dist/tools/register-agent-registry.d.ts +5 -0
- package/dist/tools/register-agent-registry.d.ts.map +1 -0
- package/dist/tools/register-agent-registry.js +254 -0
- package/dist/tools/register-agent-registry.js.map +1 -0
- package/dist/tools/register-autopilot.d.ts +3 -0
- package/dist/tools/register-autopilot.d.ts.map +1 -0
- package/dist/tools/register-autopilot.js +78 -0
- package/dist/tools/register-autopilot.js.map +1 -0
- package/dist/tools/register-competitive.d.ts +3 -0
- package/dist/tools/register-competitive.d.ts.map +1 -0
- package/dist/tools/register-competitive.js +88 -0
- package/dist/tools/register-competitive.js.map +1 -0
- package/dist/tools/register-hook-generator.d.ts +3 -0
- package/dist/tools/register-hook-generator.d.ts.map +1 -0
- package/dist/tools/register-hook-generator.js +96 -0
- package/dist/tools/register-hook-generator.js.map +1 -0
- package/dist/tools/register-project-dna.d.ts +3 -0
- package/dist/tools/register-project-dna.d.ts.map +1 -0
- package/dist/tools/register-project-dna.js +43 -0
- package/dist/tools/register-project-dna.js.map +1 -0
- package/dist/tools/update-status/side-effects.d.ts.map +1 -1
- package/dist/tools/update-status/side-effects.js +32 -0
- package/dist/tools/update-status/side-effects.js.map +1 -1
- package/dist/types/agent-registry.d.ts +53 -0
- package/dist/types/agent-registry.d.ts.map +1 -0
- package/dist/types/agent-registry.js +2 -0
- package/dist/types/agent-registry.js.map +1 -0
- package/dist/types/autopilot.d.ts +36 -0
- package/dist/types/autopilot.d.ts.map +1 -0
- package/dist/types/autopilot.js +3 -0
- package/dist/types/autopilot.js.map +1 -0
- package/dist/types/competitive.d.ts +41 -0
- package/dist/types/competitive.d.ts.map +1 -0
- package/dist/types/competitive.js +3 -0
- package/dist/types/competitive.js.map +1 -0
- package/dist/types/hook-generator.d.ts +49 -0
- package/dist/types/hook-generator.d.ts.map +1 -0
- package/dist/types/hook-generator.js +3 -0
- package/dist/types/hook-generator.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/project-dna.d.ts +46 -0
- package/dist/types/project-dna.d.ts.map +1 -0
- package/dist/types/project-dna.js +4 -0
- package/dist/types/project-dna.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ai-tool-registry.json +71 -0
- package/src/config/autopilot-config.json +21 -0
- package/src/config/competitive-catalog.json +83 -0
- package/src/config/license-plans.json +17 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-competitive.d.ts","sourceRoot":"","sources":["../../src/tools/register-competitive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgHhE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { listCompetitorsHandler, competitiveGapAnalysisHandler, updateCatalogHandler, } from './competitive-handlers.js';
|
|
3
|
+
import { safeTracked, safeLicensed } from './safe-handler.js';
|
|
4
|
+
export function registerCompetitiveTools(server) {
|
|
5
|
+
// -------------------------------------------------------------------------
|
|
6
|
+
// list_competitors — FREE
|
|
7
|
+
// -------------------------------------------------------------------------
|
|
8
|
+
server.registerTool('list_competitors', {
|
|
9
|
+
description: 'List all competitors in the competitive catalog. Shows each competitor with their ' +
|
|
10
|
+
'tracked capabilities and last update date. Free tool — no license required.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
projectPath: z.string().min(1).max(1000).describe('Absolute path to the project root.'),
|
|
13
|
+
},
|
|
14
|
+
annotations: { readOnlyHint: true },
|
|
15
|
+
}, safeTracked('list_competitors', async (args) => listCompetitorsHandler(args)));
|
|
16
|
+
// -------------------------------------------------------------------------
|
|
17
|
+
// competitive_gap_analysis — PRO
|
|
18
|
+
// -------------------------------------------------------------------------
|
|
19
|
+
server.registerTool('competitive_gap_analysis', {
|
|
20
|
+
description: 'Analyze a spec or feature description against the competitive catalog to determine ' +
|
|
21
|
+
'Planu positioning (differentiator / parity / lagging), coverage by competitor, ' +
|
|
22
|
+
'unique capabilities, opportunity gaps, and differentiation suggestions. Requires Pro license.',
|
|
23
|
+
inputSchema: {
|
|
24
|
+
projectPath: z.string().min(1).max(1000).describe('Absolute path to the project root.'),
|
|
25
|
+
specId: z
|
|
26
|
+
.string()
|
|
27
|
+
.max(100)
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Spec ID to analyze (e.g. "SPEC-042"). The tool reads the spec title and description ' +
|
|
30
|
+
'to extract feature keywords. Either specId or featureDescription is required.'),
|
|
31
|
+
featureDescription: z
|
|
32
|
+
.string()
|
|
33
|
+
.max(5000)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Free-text description of the feature to analyze vs competitors. ' +
|
|
36
|
+
'Either specId or featureDescription is required.'),
|
|
37
|
+
competitors: z
|
|
38
|
+
.array(z.string().max(100))
|
|
39
|
+
.max(20)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Subset of competitor IDs to compare against (e.g. ["kiro", "linear"]). ' +
|
|
42
|
+
'Valid values: kiro, tessl, github-spec-kit, linear, jira, notion, shortcut. ' +
|
|
43
|
+
'Omit to compare against all competitors.'),
|
|
44
|
+
},
|
|
45
|
+
annotations: { readOnlyHint: true },
|
|
46
|
+
}, safeLicensed('competitive_gap_analysis', async (args) => competitiveGapAnalysisHandler(args)));
|
|
47
|
+
// -------------------------------------------------------------------------
|
|
48
|
+
// update_competitive_catalog — PRO
|
|
49
|
+
// -------------------------------------------------------------------------
|
|
50
|
+
server.registerTool('update_competitive_catalog', {
|
|
51
|
+
description: 'Add or update a competitor in the competitive catalog. Writes to a project-local ' +
|
|
52
|
+
'competitive-catalog.json in the planu/ directory, which overrides the bundled catalog. ' +
|
|
53
|
+
'Requires Pro license.',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
projectPath: z.string().min(1).max(1000).describe('Absolute path to the project root.'),
|
|
56
|
+
competitor: z.object({
|
|
57
|
+
id: z
|
|
58
|
+
.string()
|
|
59
|
+
.min(1)
|
|
60
|
+
.max(100)
|
|
61
|
+
.describe('Unique identifier for the competitor (e.g. "kiro", "my-tool").'),
|
|
62
|
+
name: z
|
|
63
|
+
.string()
|
|
64
|
+
.min(1)
|
|
65
|
+
.max(200)
|
|
66
|
+
.describe('Display name of the competitor (e.g. "Kiro (AWS)").'),
|
|
67
|
+
url: z.string().max(500).optional().describe('Homepage URL of the competitor.'),
|
|
68
|
+
capabilities: z
|
|
69
|
+
.array(z.string().max(200))
|
|
70
|
+
.max(50)
|
|
71
|
+
.optional()
|
|
72
|
+
.describe('List of capability identifiers the competitor supports.'),
|
|
73
|
+
strengths: z
|
|
74
|
+
.array(z.string().max(300))
|
|
75
|
+
.max(20)
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Known strengths of this competitor.'),
|
|
78
|
+
weaknesses: z
|
|
79
|
+
.array(z.string().max(300))
|
|
80
|
+
.max(20)
|
|
81
|
+
.optional()
|
|
82
|
+
.describe('Known weaknesses of this competitor.'),
|
|
83
|
+
}),
|
|
84
|
+
},
|
|
85
|
+
annotations: { readOnlyHint: false },
|
|
86
|
+
}, safeLicensed('update_competitive_catalog', async (args) => updateCatalogHandler(args)));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=register-competitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-competitive.js","sourceRoot":"","sources":["../../src/tools/register-competitive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-hook-generator.d.ts","sourceRoot":"","sources":["../../src/tools/register-hook-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmCzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsGlE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// tools/register-hook-generator.ts — Registers Dynamic Hook Generator tools (SPEC-416)
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { safeLicensed, safeTracked } from './safe-handler.js';
|
|
4
|
+
import { handleGenerateHooksForStack, handlePreviewHooks, handleMergeHooks, } from './hook-generator-handler.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Shared sub-schemas
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
const hookSectionSchema = z.object({
|
|
9
|
+
id: z.string().max(200).describe('Unique section identifier, e.g. typescript-typecheck'),
|
|
10
|
+
phase: z
|
|
11
|
+
.enum(['pre-commit', 'commit-msg', 'pre-push', 'post-merge', 'post-checkout'])
|
|
12
|
+
.describe('Git hook phase. Values: pre-commit | commit-msg | pre-push | post-merge | post-checkout'),
|
|
13
|
+
stack: z.string().max(100).describe('Stack token this section targets'),
|
|
14
|
+
content: z.string().max(5000).describe('Hook commands or config content'),
|
|
15
|
+
description: z.string().max(500).describe('Human-readable description of what this section does'),
|
|
16
|
+
});
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Registration
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
export function registerHookGeneratorTools(server) {
|
|
21
|
+
// ---- generate_hooks_for_stack (pro) ----
|
|
22
|
+
server.registerTool('generate_hooks_for_stack', {
|
|
23
|
+
description: 'Generates git hooks and AI-tool-specific hooks based on the detected or specified ' +
|
|
24
|
+
'project stack. Merges intelligently with existing hook files using planu markers ' +
|
|
25
|
+
'(<!-- planu:generated:ID -->) so manual edits outside markers are never overwritten.',
|
|
26
|
+
inputSchema: {
|
|
27
|
+
projectPath: z.string().max(1000).describe('Absolute path to the project root directory'),
|
|
28
|
+
stack: z
|
|
29
|
+
.array(z.string().max(100))
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Stack tokens to generate hooks for. If omitted, auto-detected from project files. ' +
|
|
32
|
+
'Examples: typescript, eslint, prettier, vitest, jest, python, go, commitlint'),
|
|
33
|
+
aiTool: z
|
|
34
|
+
.string()
|
|
35
|
+
.max(100)
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('AI tool to generate tool-specific hooks for. If omitted, auto-detected. ' +
|
|
38
|
+
'Values: claude | cursor | windsurf | gemini | kiro | cline | copilot | aider'),
|
|
39
|
+
dryRun: z
|
|
40
|
+
.boolean()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('If true, shows what would be generated without writing files. Default: false'),
|
|
43
|
+
},
|
|
44
|
+
annotations: {
|
|
45
|
+
title: 'Generate Hooks for Stack',
|
|
46
|
+
readOnlyHint: false,
|
|
47
|
+
},
|
|
48
|
+
}, safeLicensed('generate_hooks_for_stack', async (args) => handleGenerateHooksForStack(args)));
|
|
49
|
+
// ---- preview_hooks (free) ----
|
|
50
|
+
server.registerTool('preview_hooks', {
|
|
51
|
+
description: 'Previews what generate_hooks_for_stack would add or update without writing any files. ' +
|
|
52
|
+
'Shows which phases would be modified, which sections are already present, and what ' +
|
|
53
|
+
'new sections would be injected.',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
projectPath: z.string().max(1000).describe('Absolute path to the project root directory'),
|
|
56
|
+
stack: z
|
|
57
|
+
.array(z.string().max(100))
|
|
58
|
+
.optional()
|
|
59
|
+
.describe('Stack tokens to preview. If omitted, auto-detected. ' +
|
|
60
|
+
'Examples: typescript, eslint, vitest, python, go'),
|
|
61
|
+
},
|
|
62
|
+
annotations: {
|
|
63
|
+
title: 'Preview Hook Changes',
|
|
64
|
+
readOnlyHint: true,
|
|
65
|
+
},
|
|
66
|
+
}, safeTracked('preview_hooks', async (args) => handlePreviewHooks(args)));
|
|
67
|
+
// ---- merge_hooks (pro) ----
|
|
68
|
+
server.registerTool('merge_hooks', {
|
|
69
|
+
description: 'Merges explicit HookSection entries into the appropriate git hook files. ' +
|
|
70
|
+
'Uses planu markers for idempotent injection — re-running the same sections ' +
|
|
71
|
+
'is safe and produces no duplicate output.',
|
|
72
|
+
inputSchema: {
|
|
73
|
+
projectPath: z.string().max(1000).describe('Absolute path to the project root directory'),
|
|
74
|
+
sections: z
|
|
75
|
+
.array(hookSectionSchema)
|
|
76
|
+
.describe('Hook sections to merge into the project hook files'),
|
|
77
|
+
dryRun: z
|
|
78
|
+
.boolean()
|
|
79
|
+
.optional()
|
|
80
|
+
.describe('If true, computes the merged content but does NOT write files. Default: false'),
|
|
81
|
+
},
|
|
82
|
+
annotations: {
|
|
83
|
+
title: 'Merge Hook Sections',
|
|
84
|
+
readOnlyHint: false,
|
|
85
|
+
},
|
|
86
|
+
}, safeLicensed('merge_hooks', async (args) => {
|
|
87
|
+
const typed = args;
|
|
88
|
+
const input = {
|
|
89
|
+
projectPath: typed.projectPath,
|
|
90
|
+
sections: typed.sections,
|
|
91
|
+
dryRun: typed.dryRun,
|
|
92
|
+
};
|
|
93
|
+
return handleMergeHooks(input);
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=register-hook-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-hook-generator.js","sourceRoot":"","sources":["../../src/tools/register-hook-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-project-dna.d.ts","sourceRoot":"","sources":["../../src/tools/register-project-dna.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8D/D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { safeTracked, safeLicensed } from './safe-handler.js';
|
|
2
|
+
import { handleDetectProjectDNA, handleBootstrapProjectIntelligence, handleUpdateProjectDNA, DetectProjectDNAInputSchema, BootstrapProjectIntelligenceInputSchema, UpdateDNAInputSchema, } from './project-dna-handler.js';
|
|
3
|
+
export function registerProjectDNATools(server) {
|
|
4
|
+
server.registerTool('detect_project_dna', {
|
|
5
|
+
description: 'Detect the technology stack and active AI tool for a project. ' +
|
|
6
|
+
'Reads package.json, Cargo.toml, go.mod, requirements.txt, tsconfig.json, ' +
|
|
7
|
+
'and AI tool detection files to build a complete Project DNA profile.',
|
|
8
|
+
inputSchema: DetectProjectDNAInputSchema,
|
|
9
|
+
annotations: {
|
|
10
|
+
title: 'Detect Project DNA',
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
destructiveHint: false,
|
|
13
|
+
openWorldHint: false,
|
|
14
|
+
},
|
|
15
|
+
}, safeTracked('detect_project_dna', async (args) => handleDetectProjectDNA(args)));
|
|
16
|
+
server.registerTool('bootstrap_project_intelligence', {
|
|
17
|
+
description: 'Generate AI tool rules and suggest skills based on the detected project stack. ' +
|
|
18
|
+
'Creates rules files in the format expected by the active AI tool ' +
|
|
19
|
+
'(markdown for Claude/Kiro/Gemini, .mdc for Cursor, appended sections for Windsurf/Cline/Copilot). ' +
|
|
20
|
+
'Supported stack tokens: supabase, typescript, nextjs, vitest, react, prisma, zod, stripe, jest, ' +
|
|
21
|
+
'fastapi, django, flask, gin, axum, tailwind.',
|
|
22
|
+
inputSchema: BootstrapProjectIntelligenceInputSchema,
|
|
23
|
+
annotations: {
|
|
24
|
+
title: 'Bootstrap Project Intelligence',
|
|
25
|
+
readOnlyHint: false,
|
|
26
|
+
destructiveHint: false,
|
|
27
|
+
openWorldHint: false,
|
|
28
|
+
},
|
|
29
|
+
}, safeLicensed('bootstrap_project_intelligence', async (args) => handleBootstrapProjectIntelligence(args)));
|
|
30
|
+
server.registerTool('update_project_dna', {
|
|
31
|
+
description: 'Re-scan a project to refresh its DNA profile (stack, AI tool, package manager). ' +
|
|
32
|
+
'Use after adding new dependencies or switching AI tools. ' +
|
|
33
|
+
'After updating, run bootstrap_project_intelligence to apply the new configuration.',
|
|
34
|
+
inputSchema: UpdateDNAInputSchema,
|
|
35
|
+
annotations: {
|
|
36
|
+
title: 'Update Project DNA',
|
|
37
|
+
readOnlyHint: true,
|
|
38
|
+
destructiveHint: false,
|
|
39
|
+
openWorldHint: false,
|
|
40
|
+
},
|
|
41
|
+
}, safeLicensed('update_project_dna', async (args) => handleUpdateProjectDNA(args)));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=register-project-dna.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-project-dna.js","sourceRoot":"","sources":["../../src/tools/register-project-dna.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,kCAAkC,EAClC,sBAAsB,EACtB,2BAA2B,EAC3B,uCAAuC,EACvC,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,gEAAgE;YAChE,2EAA2E;YAC3E,sEAAsE;QACxE,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE;YACX,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,WAAW,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC/C,sBAAsB,CAAC,IAAsB,CAAC,CAC/C,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,WAAW,EACT,iFAAiF;YACjF,mEAAmE;YACnE,oGAAoG;YACpG,kGAAkG;YAClG,8CAA8C;QAChD,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACX,KAAK,EAAE,gCAAgC;YACvC,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,YAAY,CAAC,gCAAgC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC5D,kCAAkC,CAAC,IAAsB,CAAC,CAC3D,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,kFAAkF;YAClF,2DAA2D;YAC3D,oFAAoF;QACtF,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE;YACX,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,YAAY,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAChD,sBAAsB,CAAC,IAAsB,CAAC,CAC/C,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"side-effects.d.ts","sourceRoot":"","sources":["../../../src/tools/update-status/side-effects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAA2C,MAAM,sBAAsB,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"side-effects.d.ts","sourceRoot":"","sources":["../../../src/tools/update-status/side-effects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAA2C,MAAM,sBAAsB,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,yEAAyE;AACzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,aAAa,EAAE,UAAU,CAAC;CAC3B,GAAG,IAAI,CAkGP"}
|
|
@@ -3,6 +3,7 @@ import { regenerateSpecSummaryHtml } from '../../engine/spec-summary-html.js';
|
|
|
3
3
|
import { notifyStoreChange } from '../../engine/doc-generator/portal/regen-hook.js';
|
|
4
4
|
import { dispatchHookEvent } from '../manage-hooks.js';
|
|
5
5
|
import { buildStatusChangePayload } from '../../engine/hooks/triggers.js';
|
|
6
|
+
import { emitAutopilotEvent } from '../../engine/autopilot/event-bus.js';
|
|
6
7
|
/** Fire-and-forget side effects after a successful status transition. */
|
|
7
8
|
export function fireAndForgetSideEffects(params) {
|
|
8
9
|
const { knowledge, allSpecs, specId, newStatus, validateScore, projectId, spec, currentStatus } = params;
|
|
@@ -32,6 +33,37 @@ export function fireAndForgetSideEffects(params) {
|
|
|
32
33
|
void dispatchHookEvent(projectId, buildStatusChangePayload(projectId, specId, spec.title, currentStatus, newStatus)).catch((err) => {
|
|
33
34
|
console.error('[planu] dispatchHookEvent failed:', err);
|
|
34
35
|
});
|
|
36
|
+
// SPEC-413: Emit autopilot lifecycle events (fire-and-forget)
|
|
37
|
+
if (knowledge?.projectPath) {
|
|
38
|
+
const autopilotProjectPath = knowledge.projectPath;
|
|
39
|
+
if (newStatus === 'approved') {
|
|
40
|
+
emitAutopilotEvent({
|
|
41
|
+
name: 'spec:status:approved',
|
|
42
|
+
specId,
|
|
43
|
+
projectPath: autopilotProjectPath,
|
|
44
|
+
projectId,
|
|
45
|
+
payload: { estimatedHours: spec.estimation.devHours, risk: spec.risk },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else if (newStatus === 'implementing') {
|
|
49
|
+
emitAutopilotEvent({
|
|
50
|
+
name: 'spec:status:implementing',
|
|
51
|
+
specId,
|
|
52
|
+
projectPath: autopilotProjectPath,
|
|
53
|
+
projectId,
|
|
54
|
+
payload: { estimatedHours: spec.estimation.devHours, risk: spec.risk },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else if (newStatus === 'done') {
|
|
58
|
+
emitAutopilotEvent({
|
|
59
|
+
name: 'spec:status:done',
|
|
60
|
+
specId,
|
|
61
|
+
projectPath: autopilotProjectPath,
|
|
62
|
+
projectId,
|
|
63
|
+
payload: { estimatedHours: spec.estimation.devHours, risk: spec.risk },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
35
67
|
// SPEC-248: Auto-capture lesson when drift is detected (validateScore < 70 on transition to done)
|
|
36
68
|
if (newStatus === 'done' &&
|
|
37
69
|
validateScore !== null &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"side-effects.js","sourceRoot":"","sources":["../../../src/tools/update-status/side-effects.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"side-effects.js","sourceRoot":"","sources":["../../../src/tools/update-status/side-effects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type RegistryAgentRole = 'spec-guardian' | 'pr-reviewer' | 'metrics-analyst' | 'criteria-auditor' | 'changelog-keeper' | 'dependency-watcher';
|
|
2
|
+
export type AgentTriggerType = 'cron' | 'event' | 'webhook' | 'manual';
|
|
3
|
+
export type RegistryAgentStatus = 'active' | 'paused' | 'error' | 'unregistered';
|
|
4
|
+
export interface AgentTriggerConfig {
|
|
5
|
+
type: AgentTriggerType;
|
|
6
|
+
schedule?: string;
|
|
7
|
+
event?: string;
|
|
8
|
+
webhook?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AgentRunRecord {
|
|
11
|
+
runId: string;
|
|
12
|
+
startedAt: string;
|
|
13
|
+
completedAt?: string;
|
|
14
|
+
success: boolean;
|
|
15
|
+
error?: string;
|
|
16
|
+
durationMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface PersistentAgent {
|
|
19
|
+
role: RegistryAgentRole;
|
|
20
|
+
trigger: AgentTriggerConfig;
|
|
21
|
+
status: RegistryAgentStatus;
|
|
22
|
+
registeredAt: string;
|
|
23
|
+
lastRunAt?: string;
|
|
24
|
+
nextRunAt?: string;
|
|
25
|
+
runCount: number;
|
|
26
|
+
successCount: number;
|
|
27
|
+
recentRuns: AgentRunRecord[];
|
|
28
|
+
config: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
export interface PersistentAgentRegistry {
|
|
31
|
+
version: string;
|
|
32
|
+
updatedAt: string;
|
|
33
|
+
agents: Record<RegistryAgentRole, PersistentAgent>;
|
|
34
|
+
}
|
|
35
|
+
export interface RegisterPersistentAgentInput {
|
|
36
|
+
projectPath: string;
|
|
37
|
+
role: RegistryAgentRole;
|
|
38
|
+
trigger: AgentTriggerConfig;
|
|
39
|
+
config?: Record<string, unknown>;
|
|
40
|
+
}
|
|
41
|
+
export interface AgentRegistryActionInput {
|
|
42
|
+
projectPath: string;
|
|
43
|
+
role: RegistryAgentRole;
|
|
44
|
+
}
|
|
45
|
+
export interface AgentRegistryHealthResult {
|
|
46
|
+
role: RegistryAgentRole;
|
|
47
|
+
status: RegistryAgentStatus;
|
|
48
|
+
lastRunAt?: string;
|
|
49
|
+
successRate: number;
|
|
50
|
+
avgDurationMs?: number;
|
|
51
|
+
lastError?: string;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=agent-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../src/types/agent-registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/types/agent-registry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type AutopilotEventName = 'spec:created' | 'spec:status:approved' | 'spec:status:implementing' | 'spec:status:done' | 'drift:detected' | 'cron:daily';
|
|
2
|
+
export interface AutopilotEvent {
|
|
3
|
+
name: AutopilotEventName;
|
|
4
|
+
specId?: string;
|
|
5
|
+
projectPath: string;
|
|
6
|
+
projectId: string;
|
|
7
|
+
payload?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface TriggerCondition {
|
|
10
|
+
minEstimatedHours?: number;
|
|
11
|
+
riskLevel?: string[];
|
|
12
|
+
minDriftScore?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface TriggerRule {
|
|
15
|
+
id: string;
|
|
16
|
+
event: AutopilotEventName;
|
|
17
|
+
action: string;
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
condition?: TriggerCondition;
|
|
20
|
+
description: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AutopilotConfig {
|
|
23
|
+
version: string;
|
|
24
|
+
rules: Record<string, {
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
threshold?: number;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export interface AutopilotStatus {
|
|
30
|
+
totalRules: number;
|
|
31
|
+
enabledRules: number;
|
|
32
|
+
disabledRules: string[];
|
|
33
|
+
lastCronRun?: string;
|
|
34
|
+
}
|
|
35
|
+
export type AutopilotAction = 'enable' | 'disable' | 'status' | 'set-threshold';
|
|
36
|
+
//# sourceMappingURL=autopilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/types/autopilot.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,sBAAsB,GACtB,0BAA0B,GAC1B,kBAAkB,GAClB,gBAAgB,GAChB,YAAY,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../../src/types/autopilot.ts"],"names":[],"mappings":"AAAA,sDAAsD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** A competitor in the competitive catalog. */
|
|
2
|
+
export interface CompetitorProfile {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
url: string;
|
|
6
|
+
capabilities: string[];
|
|
7
|
+
strengths: string[];
|
|
8
|
+
weaknesses: string[];
|
|
9
|
+
updatedAt: string;
|
|
10
|
+
}
|
|
11
|
+
/** Result of a competitive gap analysis for a feature or spec. */
|
|
12
|
+
export interface GapAnalysisResult {
|
|
13
|
+
/** How Planu compares to competitors on the analyzed feature. */
|
|
14
|
+
positioning: 'differentiator' | 'parity' | 'lagging';
|
|
15
|
+
/** Whether each competitor has matching capabilities. */
|
|
16
|
+
coverage: Record<string, boolean>;
|
|
17
|
+
/** Planu capabilities not found in any competitor. */
|
|
18
|
+
uniqueToPlanu: string[];
|
|
19
|
+
/** Feature keywords not covered by Planu or any competitor. */
|
|
20
|
+
gaps: string[];
|
|
21
|
+
/** Improvement suggestions derived from competitor weaknesses. */
|
|
22
|
+
suggestions: string[];
|
|
23
|
+
/** Human-readable summary of the analysis. */
|
|
24
|
+
summary: string;
|
|
25
|
+
}
|
|
26
|
+
/** The full competitive catalog persisted in config. */
|
|
27
|
+
export interface CompetitiveCatalog {
|
|
28
|
+
version: string;
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
competitors: Record<string, CompetitorProfile>;
|
|
31
|
+
}
|
|
32
|
+
/** Input for adding or updating a competitor in the catalog. */
|
|
33
|
+
export interface CompetitorUpdateInput {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
url?: string;
|
|
37
|
+
capabilities?: string[];
|
|
38
|
+
strengths?: string[];
|
|
39
|
+
weaknesses?: string[];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=competitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitive.d.ts","sourceRoot":"","sources":["../../src/types/competitive.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,WAAW,EAAE,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrD,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sDAAsD;IACtD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,kEAAkE;IAClE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAChD;AAED,gEAAgE;AAChE,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitive.js","sourceRoot":"","sources":["../../src/types/competitive.ts"],"names":[],"mappings":"AAAA,kEAAkE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type HookPhase = 'pre-commit' | 'commit-msg' | 'pre-push' | 'post-merge' | 'post-checkout';
|
|
2
|
+
export type HookFormat = 'bash' | 'yaml' | 'json';
|
|
3
|
+
export interface HookSection {
|
|
4
|
+
/** Unique identifier, e.g. 'typescript-typecheck' */
|
|
5
|
+
id: string;
|
|
6
|
+
phase: HookPhase;
|
|
7
|
+
/** Stack token this section targets */
|
|
8
|
+
stack: string;
|
|
9
|
+
/** Actual hook commands / config */
|
|
10
|
+
content: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
export interface HookPreview {
|
|
14
|
+
phase: HookPhase;
|
|
15
|
+
filePath: string;
|
|
16
|
+
/** null if the file does not exist yet */
|
|
17
|
+
currentContent: string | null;
|
|
18
|
+
proposedAdditions: HookSection[];
|
|
19
|
+
wouldModify: boolean;
|
|
20
|
+
/** IDs of sections already present in the file */
|
|
21
|
+
conflicts: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface MergeResult {
|
|
24
|
+
filePath: string;
|
|
25
|
+
sectionsAdded: string[];
|
|
26
|
+
sectionsUpdated: string[];
|
|
27
|
+
/** Already present with same content — no change */
|
|
28
|
+
sectionsSkipped: string[];
|
|
29
|
+
content: string;
|
|
30
|
+
}
|
|
31
|
+
export interface GenerateHooksInput {
|
|
32
|
+
projectPath: string;
|
|
33
|
+
/** Override auto-detected stack */
|
|
34
|
+
stack?: string[];
|
|
35
|
+
/** Override auto-detected AI tool */
|
|
36
|
+
aiTool?: string;
|
|
37
|
+
/** Show what would be generated without writing files */
|
|
38
|
+
dryRun?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface PreviewHooksInput {
|
|
41
|
+
projectPath: string;
|
|
42
|
+
stack?: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface MergeHooksInput {
|
|
45
|
+
projectPath: string;
|
|
46
|
+
sections: HookSection[];
|
|
47
|
+
dryRun?: boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=hook-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-generator.d.ts","sourceRoot":"","sources":["../../src/types/hook-generator.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,CAAC;AAElG,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oDAAoD;IACpD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-generator.js","sourceRoot":"","sources":["../../src/types/hook-generator.ts"],"names":[],"mappings":"AAAA,+EAA+E"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -207,4 +207,9 @@ export * from './health.js';
|
|
|
207
207
|
export * from './context-profile.js';
|
|
208
208
|
export * from './ears.js';
|
|
209
209
|
export * from './workflow-checkpoint.js';
|
|
210
|
+
export * from './competitive.js';
|
|
211
|
+
export * from './autopilot.js';
|
|
212
|
+
export * from './agent-registry.js';
|
|
213
|
+
export * from './project-dna.js';
|
|
214
|
+
export * from './hook-generator.js';
|
|
210
215
|
//# sourceMappingURL=index.d.ts.map
|