@planu/cli 1.2.0 → 1.4.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/dev-lifecycle-catalog.json +22 -0
- package/dist/config/license-plans.json +20 -1
- package/dist/engine/aider-prompt-generator.d.ts +26 -0
- package/dist/engine/aider-prompt-generator.d.ts.map +1 -0
- package/dist/engine/aider-prompt-generator.js +144 -0
- package/dist/engine/aider-prompt-generator.js.map +1 -0
- package/dist/engine/claude-config-auditor/settings-auditor.d.ts.map +1 -1
- package/dist/engine/claude-config-auditor/settings-auditor.js +20 -1
- package/dist/engine/claude-config-auditor/settings-auditor.js.map +1 -1
- package/dist/engine/code-graph-configurator.d.ts +23 -0
- package/dist/engine/code-graph-configurator.d.ts.map +1 -0
- package/dist/engine/code-graph-configurator.js +80 -0
- package/dist/engine/code-graph-configurator.js.map +1 -0
- package/dist/engine/continue-config-generator.d.ts +15 -0
- package/dist/engine/continue-config-generator.d.ts.map +1 -0
- package/dist/engine/continue-config-generator.js +53 -0
- package/dist/engine/continue-config-generator.js.map +1 -0
- package/dist/engine/doc-compliance-checker.d.ts +23 -0
- package/dist/engine/doc-compliance-checker.d.ts.map +1 -0
- package/dist/engine/doc-compliance-checker.js +168 -0
- package/dist/engine/doc-compliance-checker.js.map +1 -0
- package/dist/engine/e2e-test-generator.d.ts +19 -0
- package/dist/engine/e2e-test-generator.d.ts.map +1 -0
- package/dist/engine/e2e-test-generator.js +210 -0
- package/dist/engine/e2e-test-generator.js.map +1 -0
- package/dist/engine/ecosystem-detector.d.ts +13 -0
- package/dist/engine/ecosystem-detector.d.ts.map +1 -0
- package/dist/engine/ecosystem-detector.js +128 -0
- package/dist/engine/ecosystem-detector.js.map +1 -0
- package/dist/engine/memory-config-generator.d.ts +8 -0
- package/dist/engine/memory-config-generator.d.ts.map +1 -0
- package/dist/engine/memory-config-generator.js +101 -0
- package/dist/engine/memory-config-generator.js.map +1 -0
- package/dist/engine/pr-spec-validator.d.ts +25 -0
- package/dist/engine/pr-spec-validator.d.ts.map +1 -0
- package/dist/engine/pr-spec-validator.js +172 -0
- package/dist/engine/pr-spec-validator.js.map +1 -0
- package/dist/engine/skill-generator/sections-docs.d.ts +13 -0
- package/dist/engine/skill-generator/sections-docs.d.ts.map +1 -0
- package/dist/engine/skill-generator/sections-docs.js +59 -0
- package/dist/engine/skill-generator/sections-docs.js.map +1 -0
- package/dist/engine/skill-generator/skills-content.d.ts +1 -1
- package/dist/engine/skill-generator/skills-content.d.ts.map +1 -1
- package/dist/engine/skill-generator/skills-content.js +3 -2
- package/dist/engine/skill-generator/skills-content.js.map +1 -1
- package/dist/engine/skill-generator/skills.d.ts +1 -0
- package/dist/engine/skill-generator/skills.d.ts.map +1 -1
- package/dist/engine/skill-generator/skills.js +1 -0
- package/dist/engine/skill-generator/skills.js.map +1 -1
- package/dist/engine/skill-generator.d.ts.map +1 -1
- package/dist/engine/skill-generator.js +21 -2
- package/dist/engine/skill-generator.js.map +1 -1
- package/dist/engine/sweep-issue-generator.d.ts +14 -0
- package/dist/engine/sweep-issue-generator.d.ts.map +1 -0
- package/dist/engine/sweep-issue-generator.js +140 -0
- package/dist/engine/sweep-issue-generator.js.map +1 -0
- package/dist/engine/web-fetcher/docs-intelligence.d.ts +8 -0
- package/dist/engine/web-fetcher/docs-intelligence.d.ts.map +1 -0
- package/dist/engine/web-fetcher/docs-intelligence.js +154 -0
- package/dist/engine/web-fetcher/docs-intelligence.js.map +1 -0
- package/dist/engine/web-fetcher/registry-auto-discovery.d.ts +20 -0
- package/dist/engine/web-fetcher/registry-auto-discovery.d.ts.map +1 -0
- package/dist/engine/web-fetcher/registry-auto-discovery.js +184 -0
- package/dist/engine/web-fetcher/registry-auto-discovery.js.map +1 -0
- package/dist/engine/web-fetcher/stack-detector.d.ts +4 -0
- package/dist/engine/web-fetcher/stack-detector.d.ts.map +1 -0
- package/dist/engine/web-fetcher/stack-detector.js +155 -0
- package/dist/engine/web-fetcher/stack-detector.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/aider-launcher-handler.d.ts +4 -0
- package/dist/tools/aider-launcher-handler.d.ts.map +1 -0
- package/dist/tools/aider-launcher-handler.js +69 -0
- package/dist/tools/aider-launcher-handler.js.map +1 -0
- package/dist/tools/code-graph-handler.d.ts +6 -0
- package/dist/tools/code-graph-handler.d.ts.map +1 -0
- package/dist/tools/code-graph-handler.js +68 -0
- package/dist/tools/code-graph-handler.js.map +1 -0
- package/dist/tools/continue-config-handler.d.ts +4 -0
- package/dist/tools/continue-config-handler.d.ts.map +1 -0
- package/dist/tools/continue-config-handler.js +88 -0
- package/dist/tools/continue-config-handler.js.map +1 -0
- package/dist/tools/create-spec/spec-builder.d.ts.map +1 -1
- package/dist/tools/create-spec/spec-builder.js +20 -0
- package/dist/tools/create-spec/spec-builder.js.map +1 -1
- package/dist/tools/create-spec-hu/docs-criteria-adapter.d.ts +14 -0
- package/dist/tools/create-spec-hu/docs-criteria-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/docs-criteria-adapter.js +50 -0
- package/dist/tools/create-spec-hu/docs-criteria-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu.d.ts +1 -1
- package/dist/tools/create-spec-hu.d.ts.map +1 -1
- package/dist/tools/create-spec-hu.js +5 -1
- package/dist/tools/create-spec-hu.js.map +1 -1
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +2 -2
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/doc-compliance-handler.d.ts +3 -0
- package/dist/tools/doc-compliance-handler.d.ts.map +1 -0
- package/dist/tools/doc-compliance-handler.js +48 -0
- package/dist/tools/doc-compliance-handler.js.map +1 -0
- package/dist/tools/docs-registry-handler.d.ts +6 -0
- package/dist/tools/docs-registry-handler.d.ts.map +1 -0
- package/dist/tools/docs-registry-handler.js +73 -0
- package/dist/tools/docs-registry-handler.js.map +1 -0
- package/dist/tools/e2e-test-generator-handler.d.ts +12 -0
- package/dist/tools/e2e-test-generator-handler.d.ts.map +1 -0
- package/dist/tools/e2e-test-generator-handler.js +54 -0
- package/dist/tools/e2e-test-generator-handler.js.map +1 -0
- package/dist/tools/ecosystem-tools-handler.d.ts +4 -0
- package/dist/tools/ecosystem-tools-handler.d.ts.map +1 -0
- package/dist/tools/ecosystem-tools-handler.js +57 -0
- package/dist/tools/ecosystem-tools-handler.js.map +1 -0
- package/dist/tools/memory-config-handler.d.ts +4 -0
- package/dist/tools/memory-config-handler.d.ts.map +1 -0
- package/dist/tools/memory-config-handler.js +110 -0
- package/dist/tools/memory-config-handler.js.map +1 -0
- package/dist/tools/pr-agent-handler.d.ts +12 -0
- package/dist/tools/pr-agent-handler.d.ts.map +1 -0
- package/dist/tools/pr-agent-handler.js +47 -0
- package/dist/tools/pr-agent-handler.js.map +1 -0
- package/dist/tools/register-aider-tools.d.ts +3 -0
- package/dist/tools/register-aider-tools.d.ts.map +1 -0
- package/dist/tools/register-aider-tools.js +28 -0
- package/dist/tools/register-aider-tools.js.map +1 -0
- package/dist/tools/register-code-graph-tools.d.ts +3 -0
- package/dist/tools/register-code-graph-tools.d.ts.map +1 -0
- package/dist/tools/register-code-graph-tools.js +36 -0
- package/dist/tools/register-code-graph-tools.js.map +1 -0
- package/dist/tools/register-continue-tools.d.ts +3 -0
- package/dist/tools/register-continue-tools.d.ts.map +1 -0
- package/dist/tools/register-continue-tools.js +38 -0
- package/dist/tools/register-continue-tools.js.map +1 -0
- package/dist/tools/register-doc-compliance-tools.d.ts +3 -0
- package/dist/tools/register-doc-compliance-tools.d.ts.map +1 -0
- package/dist/tools/register-doc-compliance-tools.js +18 -0
- package/dist/tools/register-doc-compliance-tools.js.map +1 -0
- package/dist/tools/register-docs-registry-tools.d.ts +3 -0
- package/dist/tools/register-docs-registry-tools.d.ts.map +1 -0
- package/dist/tools/register-docs-registry-tools.js +35 -0
- package/dist/tools/register-docs-registry-tools.js.map +1 -0
- package/dist/tools/register-e2e-test-generator-tools.d.ts +3 -0
- package/dist/tools/register-e2e-test-generator-tools.d.ts.map +1 -0
- package/dist/tools/register-e2e-test-generator-tools.js +35 -0
- package/dist/tools/register-e2e-test-generator-tools.js.map +1 -0
- package/dist/tools/register-memory-config-tools.d.ts +3 -0
- package/dist/tools/register-memory-config-tools.d.ts.map +1 -0
- package/dist/tools/register-memory-config-tools.js +34 -0
- package/dist/tools/register-memory-config-tools.js.map +1 -0
- package/dist/tools/register-pr-agent-tools.d.ts +3 -0
- package/dist/tools/register-pr-agent-tools.d.ts.map +1 -0
- package/dist/tools/register-pr-agent-tools.js +34 -0
- package/dist/tools/register-pr-agent-tools.js.map +1 -0
- package/dist/tools/register-sweep-tools.d.ts +3 -0
- package/dist/tools/register-sweep-tools.d.ts.map +1 -0
- package/dist/tools/register-sweep-tools.js +42 -0
- package/dist/tools/register-sweep-tools.js.map +1 -0
- package/dist/tools/register-token-optimizer-tools.d.ts +3 -0
- package/dist/tools/register-token-optimizer-tools.d.ts.map +1 -0
- package/dist/tools/register-token-optimizer-tools.js +22 -0
- package/dist/tools/register-token-optimizer-tools.js.map +1 -0
- package/dist/tools/sweep-integration-handler.d.ts +4 -0
- package/dist/tools/sweep-integration-handler.d.ts.map +1 -0
- package/dist/tools/sweep-integration-handler.js +60 -0
- package/dist/tools/sweep-integration-handler.js.map +1 -0
- package/dist/types/aider.d.ts +21 -0
- package/dist/types/aider.d.ts.map +1 -0
- package/dist/types/aider.js +3 -0
- package/dist/types/aider.js.map +1 -0
- package/dist/types/code-graph-integration.d.ts +22 -0
- package/dist/types/code-graph-integration.d.ts.map +1 -0
- package/dist/types/code-graph-integration.js +3 -0
- package/dist/types/code-graph-integration.js.map +1 -0
- package/dist/types/continue-integration.d.ts +32 -0
- package/dist/types/continue-integration.d.ts.map +1 -0
- package/dist/types/continue-integration.js +3 -0
- package/dist/types/continue-integration.js.map +1 -0
- package/dist/types/docs.d.ts +70 -0
- package/dist/types/docs.d.ts.map +1 -1
- package/dist/types/e2e-test-generator.d.ts +27 -0
- package/dist/types/e2e-test-generator.d.ts.map +1 -0
- package/dist/types/e2e-test-generator.js +3 -0
- package/dist/types/e2e-test-generator.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/mcp.d.ts +17 -0
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/pr-agent.d.ts +28 -0
- package/dist/types/pr-agent.d.ts.map +1 -0
- package/dist/types/pr-agent.js +3 -0
- package/dist/types/pr-agent.js.map +1 -0
- package/dist/types/spec/core.d.ts +2 -0
- package/dist/types/spec/core.d.ts.map +1 -1
- package/dist/types/sweep.d.ts +22 -0
- package/dist/types/sweep.d.ts.map +1 -0
- package/dist/types/sweep.js +3 -0
- package/dist/types/sweep.js.map +1 -0
- package/dist/types/tooling/index.d.ts +2 -0
- package/dist/types/tooling/index.d.ts.map +1 -1
- package/dist/types/tooling/memory-config.d.ts +25 -0
- package/dist/types/tooling/memory-config.d.ts.map +1 -0
- package/dist/types/tooling/memory-config.js +3 -0
- package/dist/types/tooling/memory-config.js.map +1 -0
- package/dist/types/tooling/token-optimizer.d.ts +42 -0
- package/dist/types/tooling/token-optimizer.d.ts.map +1 -0
- package/dist/types/tooling/token-optimizer.js +3 -0
- package/dist/types/tooling/token-optimizer.js.map +1 -0
- package/dist/types/tooling.d.ts +1 -1
- package/dist/types/tooling.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config/dev-lifecycle-catalog.json +22 -0
- package/src/config/license-plans.json +20 -1
|
@@ -615,5 +615,27 @@
|
|
|
615
615
|
"mcpAvailable": false
|
|
616
616
|
}
|
|
617
617
|
}
|
|
618
|
+
},
|
|
619
|
+
"token_optimization": {
|
|
620
|
+
"name": "Token Optimization (AI/LLM)",
|
|
621
|
+
"why": "Reduce AI assistant token usage by filtering verbose output and monitoring context window",
|
|
622
|
+
"tools": {
|
|
623
|
+
"rtk": {
|
|
624
|
+
"name": "RTK (Response Token Killer)",
|
|
625
|
+
"type": "open-source",
|
|
626
|
+
"docsUrl": "https://github.com/planu-dev/rtk",
|
|
627
|
+
"mcpAvailable": false,
|
|
628
|
+
"description": "Filters verbose Claude output via PreToolUse hooks, reducing token usage by 30-60%",
|
|
629
|
+
"installCommand": "npm install --save-dev rtk"
|
|
630
|
+
},
|
|
631
|
+
"headroom": {
|
|
632
|
+
"name": "Headroom",
|
|
633
|
+
"type": "open-source",
|
|
634
|
+
"docsUrl": "https://github.com/nichochar/headroom",
|
|
635
|
+
"mcpAvailable": false,
|
|
636
|
+
"description": "Monitors context window usage in real-time and warns before hitting limits",
|
|
637
|
+
"installCommand": "npm install --save-dev headroom"
|
|
638
|
+
}
|
|
639
|
+
}
|
|
618
640
|
}
|
|
619
641
|
}
|
|
@@ -393,7 +393,26 @@
|
|
|
393
393
|
"bulk_project_operations",
|
|
394
394
|
"workspace_report",
|
|
395
395
|
"workspace_search",
|
|
396
|
-
"workspace_alerts"
|
|
396
|
+
"workspace_alerts",
|
|
397
|
+
"suggest_token_optimizer",
|
|
398
|
+
"token_optimizer_status",
|
|
399
|
+
"configure_memory",
|
|
400
|
+
"memory_status",
|
|
401
|
+
"configure_code_graph",
|
|
402
|
+
"code_graph_status",
|
|
403
|
+
"configure_continue",
|
|
404
|
+
"continue_status",
|
|
405
|
+
"generate_aider_prompt",
|
|
406
|
+
"aider_status",
|
|
407
|
+
"create_sweep_issue",
|
|
408
|
+
"sweep_status",
|
|
409
|
+
"review_pr_against_spec",
|
|
410
|
+
"pr_agent_status",
|
|
411
|
+
"generate_e2e_tests",
|
|
412
|
+
"e2e_test_status",
|
|
413
|
+
"validate_docs_registry",
|
|
414
|
+
"discover_docs_url",
|
|
415
|
+
"doc_compliance_report"
|
|
397
416
|
],
|
|
398
417
|
"alwaysAllowed": [
|
|
399
418
|
"activate_license",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AiderPromptResult, AiderStatusResult } from '../types/index.js';
|
|
2
|
+
/** Map difficulty 1-5 to appropriate aider model. */
|
|
3
|
+
export declare function selectModel(difficulty: number): string;
|
|
4
|
+
/**
|
|
5
|
+
* Read affected files from technical.md in the spec directory.
|
|
6
|
+
* Looks for a markdown list under "## Affected Files" or "## Files" section.
|
|
7
|
+
* Returns empty array if technical.md not found or section missing.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readAffectedFiles(specDir: string): Promise<string[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Build the full aider CLI command from spec metadata and file list.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildAiderCommand(title: string, criteria: string[], files: string[], model: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Build .aider.conf.yml content for the spec.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildConfContent(model: string, specTitle: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate the full aider prompt result for a spec.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateAiderPrompt(specId: string, projectPath: string): Promise<AiderPromptResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Check if aider is installed and return version/config info.
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkAiderStatus(projectPath: string): AiderStatusResult;
|
|
26
|
+
//# sourceMappingURL=aider-prompt-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aider-prompt-generator.d.ts","sourceRoot":"","sources":["../../src/engine/aider-prompt-generator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK9E,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAQtD;AAsBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAa1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQzE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA6C5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAqBvE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// engine/aider-prompt-generator.ts — Pure functions for SPEC-378 Aider Launcher
|
|
2
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { parseFrontmatter } from './frontmatter-parser.js';
|
|
6
|
+
import { extractSection, extractListItems } from './validator/extractors.js';
|
|
7
|
+
const SPECS_DIR = 'planu/specs';
|
|
8
|
+
const MAX_FILES = 5;
|
|
9
|
+
/** Map difficulty 1-5 to appropriate aider model. */
|
|
10
|
+
export function selectModel(difficulty) {
|
|
11
|
+
if (difficulty <= 2) {
|
|
12
|
+
return 'claude/claude-haiku-4-5';
|
|
13
|
+
}
|
|
14
|
+
if (difficulty === 3) {
|
|
15
|
+
return 'claude/claude-sonnet-4-6';
|
|
16
|
+
}
|
|
17
|
+
return 'claude/claude-opus-4-6';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Find the spec directory for a given specId inside projectPath/planu/specs.
|
|
21
|
+
* Returns null if not found.
|
|
22
|
+
*/
|
|
23
|
+
async function findSpecDir(specId, projectPath) {
|
|
24
|
+
const specsRoot = join(projectPath, SPECS_DIR);
|
|
25
|
+
let entries;
|
|
26
|
+
try {
|
|
27
|
+
entries = await readdir(specsRoot);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const prefix = specId.toUpperCase() + '-';
|
|
33
|
+
const dir = entries.find((e) => e.toUpperCase().startsWith(prefix));
|
|
34
|
+
if (!dir) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return join(specsRoot, dir);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Read affected files from technical.md in the spec directory.
|
|
41
|
+
* Looks for a markdown list under "## Affected Files" or "## Files" section.
|
|
42
|
+
* Returns empty array if technical.md not found or section missing.
|
|
43
|
+
*/
|
|
44
|
+
export async function readAffectedFiles(specDir) {
|
|
45
|
+
const techPath = join(specDir, 'technical.md');
|
|
46
|
+
let raw;
|
|
47
|
+
try {
|
|
48
|
+
raw = await readFile(techPath, 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
const section = extractSection(raw, 'affected files', 'archivos afectados');
|
|
54
|
+
if (!section) {
|
|
55
|
+
return extractListItems(raw).slice(0, MAX_FILES);
|
|
56
|
+
}
|
|
57
|
+
return extractListItems(section).slice(0, MAX_FILES);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build the full aider CLI command from spec metadata and file list.
|
|
61
|
+
*/
|
|
62
|
+
export function buildAiderCommand(title, criteria, files, model) {
|
|
63
|
+
const criteriaText = criteria.map((c) => `- ${c}`).join('\\n');
|
|
64
|
+
const message = `${title}\\n\\nAcceptance criteria:\\n${criteriaText}`;
|
|
65
|
+
const filePart = files.length > 0 ? ` ${files.join(' ')}` : '';
|
|
66
|
+
return `aider --model ${model} --message "${message}"${filePart}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Build .aider.conf.yml content for the spec.
|
|
70
|
+
*/
|
|
71
|
+
export function buildConfContent(model, specTitle) {
|
|
72
|
+
return [
|
|
73
|
+
`# .aider.conf.yml — generated by Planu for: ${specTitle}`,
|
|
74
|
+
`model: ${model}`,
|
|
75
|
+
`auto-commits: false`,
|
|
76
|
+
`dirty-commits: true`,
|
|
77
|
+
`show-diffs: true`,
|
|
78
|
+
].join('\n');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Generate the full aider prompt result for a spec.
|
|
82
|
+
*/
|
|
83
|
+
export async function generateAiderPrompt(specId, projectPath) {
|
|
84
|
+
const specDir = await findSpecDir(specId, projectPath);
|
|
85
|
+
if (!specDir) {
|
|
86
|
+
throw new Error(`Spec directory for ${specId} not found in ${join(projectPath, SPECS_DIR)}. ` +
|
|
87
|
+
`Ensure the spec exists and follows the SPEC-NNN-slug naming convention.`);
|
|
88
|
+
}
|
|
89
|
+
const specMdPath = join(specDir, 'spec.md');
|
|
90
|
+
let specContent;
|
|
91
|
+
try {
|
|
92
|
+
specContent = await readFile(specMdPath, 'utf-8');
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
throw new Error(`spec.md not found in ${specDir}. Create the spec file before generating an aider prompt.`);
|
|
96
|
+
}
|
|
97
|
+
const { metadata, body } = parseFrontmatter(specContent);
|
|
98
|
+
const title = typeof metadata.title === 'string' ? metadata.title : specId;
|
|
99
|
+
const difficulty = typeof metadata.difficulty === 'number' ? metadata.difficulty : 3;
|
|
100
|
+
const acSection = extractSection(body, 'acceptance criteria', 'criterios de aceptaci');
|
|
101
|
+
const criteria = acSection ? extractListItems(acSection) : [];
|
|
102
|
+
const files = await readAffectedFiles(specDir);
|
|
103
|
+
const model = selectModel(difficulty);
|
|
104
|
+
const command = buildAiderCommand(title, criteria, files, model);
|
|
105
|
+
const confContent = buildConfContent(model, title);
|
|
106
|
+
const explanation = [
|
|
107
|
+
`Generated aider command for ${specId}: ${title}`,
|
|
108
|
+
``,
|
|
109
|
+
`1. Copy the command and run it in your project root.`,
|
|
110
|
+
`2. Optionally save the .aider.conf.yml to your project root for persistent config.`,
|
|
111
|
+
`3. Aider will implement the spec interactively. Review diffs before committing.`,
|
|
112
|
+
``,
|
|
113
|
+
`Model selected: ${model} (difficulty ${difficulty}/5)`,
|
|
114
|
+
files.length > 0
|
|
115
|
+
? `Files targeted: ${files.join(', ')}`
|
|
116
|
+
: `No affected files found in technical.md — aider will choose files interactively.`,
|
|
117
|
+
].join('\n');
|
|
118
|
+
return { command, confContent, explanation, specTitle: title, model, filesIncluded: files };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if aider is installed and return version/config info.
|
|
122
|
+
*/
|
|
123
|
+
export function checkAiderStatus(projectPath) {
|
|
124
|
+
try {
|
|
125
|
+
const whichOut = execSync('which aider', { encoding: 'utf-8' }).trim();
|
|
126
|
+
if (whichOut.length === 0) {
|
|
127
|
+
return { installed: false };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return { installed: false };
|
|
132
|
+
}
|
|
133
|
+
let version;
|
|
134
|
+
try {
|
|
135
|
+
const versionOut = execSync('aider --version 2>&1', { encoding: 'utf-8' }).trim();
|
|
136
|
+
version = versionOut.split('\n')[0] ?? undefined;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
version = undefined;
|
|
140
|
+
}
|
|
141
|
+
const configPath = join(projectPath, '.aider.conf.yml');
|
|
142
|
+
return { installed: true, version, configPath };
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=aider-prompt-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aider-prompt-generator.js","sourceRoot":"","sources":["../../src/engine/aider-prompt-generator.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7E,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,yBAAyB,CAAC;IACnC,CAAC;IACD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,0BAA0B,CAAC;IACpC,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,WAAmB;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,QAAkB,EAClB,KAAe,EACf,KAAa;IAEb,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,GAAG,KAAK,gCAAgC,YAAY,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,iBAAiB,KAAK,eAAe,OAAO,IAAI,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IAC/D,OAAO;QACL,+CAA+C,SAAS,EAAE;QAC1D,UAAU,KAAK,EAAE;QACjB,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,WAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,iBAAiB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI;YAC3E,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,2DAA2D,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3E,MAAM,UAAU,GAAG,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG;QAClB,+BAA+B,MAAM,KAAK,KAAK,EAAE;QACjD,EAAE;QACF,sDAAsD;QACtD,oFAAoF;QACpF,iFAAiF;QACjF,EAAE;QACF,mBAAmB,KAAK,gBAAgB,UAAU,KAAK;QACvD,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvC,CAAC,CAAC,kFAAkF;KACvF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC9F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClF,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAExD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-auditor.d.ts","sourceRoot":"","sources":["../../../src/engine/claude-config-auditor/settings-auditor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-auditor.d.ts","sourceRoot":"","sources":["../../../src/engine/claude-config-auditor/settings-auditor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AAsGxE,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAgCjF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// Planu — Settings and extensions auditor for SPEC-092
|
|
1
|
+
// Planu — Settings and extensions auditor for SPEC-092, SPEC-374
|
|
2
2
|
import { readFile, access } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
const DOCS_REF = 'https://code.claude.com/docs/en/settings';
|
|
5
|
+
const RTK_DOCS_REF = 'https://github.com/planu-dev/rtk';
|
|
5
6
|
async function readSettings(filePath) {
|
|
6
7
|
try {
|
|
7
8
|
const content = await readFile(filePath, 'utf-8');
|
|
@@ -20,6 +21,13 @@ async function pathExists(p) {
|
|
|
20
21
|
return false;
|
|
21
22
|
}
|
|
22
23
|
}
|
|
24
|
+
function settingsHasRtkHook(data) {
|
|
25
|
+
const preToolUse = data.hooks?.PreToolUse;
|
|
26
|
+
if (!Array.isArray(preToolUse)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return preToolUse.some((entry) => (entry.hooks ?? []).some((h) => typeof h === 'string' && h.toLowerCase().includes('rtk')));
|
|
30
|
+
}
|
|
23
31
|
function auditSingleSettings(data, label) {
|
|
24
32
|
const findings = [];
|
|
25
33
|
const allowList = data.permissions?.allow ?? [];
|
|
@@ -66,6 +74,17 @@ function auditSingleSettings(data, label) {
|
|
|
66
74
|
docsRef: DOCS_REF,
|
|
67
75
|
});
|
|
68
76
|
}
|
|
77
|
+
if (!settingsHasRtkHook(data)) {
|
|
78
|
+
findings.push({
|
|
79
|
+
area: 'settings',
|
|
80
|
+
severity: 'info',
|
|
81
|
+
code: 'RTK_HOOK_MISSING',
|
|
82
|
+
message: `${label} has no RTK PreToolUse hook configured`,
|
|
83
|
+
suggestion: 'Add RTK (Response Token Killer) to PreToolUse hooks to reduce token usage by 30-60%. ' +
|
|
84
|
+
'Run suggest_token_optimizer for setup instructions.',
|
|
85
|
+
docsRef: RTK_DOCS_REF,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
69
88
|
return findings;
|
|
70
89
|
}
|
|
71
90
|
export async function auditSettings(projectPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-auditor.js","sourceRoot":"","sources":["../../../src/engine/claude-config-auditor/settings-auditor.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"settings-auditor.js","sourceRoot":"","sources":["../../../src/engine/claude-config-auditor/settings-auditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ClaudeJsonConfig, ClaudeJsonMcpServer, CodeGraphProviderStatus, CodeGraphStatusResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build a .claude.json MCP entry for a given provider key.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildProviderEntry(providerKey: string): ClaudeJsonMcpServer | null;
|
|
6
|
+
/**
|
|
7
|
+
* Merge a new MCP entry into an existing .claude.json config object.
|
|
8
|
+
* Returns the updated config (does not mutate input).
|
|
9
|
+
*/
|
|
10
|
+
export declare function mergeProviderIntoConfig(existing: ClaudeJsonConfig, providerKey: string, entry: ClaudeJsonMcpServer): ClaudeJsonConfig;
|
|
11
|
+
/**
|
|
12
|
+
* Determine which providers are configured given a .claude.json config object.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveProviderStatuses(config: ClaudeJsonConfig): CodeGraphProviderStatus[];
|
|
15
|
+
/**
|
|
16
|
+
* Build the full status result from a .claude.json config object.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildStatusResult(config: ClaudeJsonConfig): CodeGraphStatusResult;
|
|
19
|
+
/**
|
|
20
|
+
* Return the key used in .claude.json for a given action.
|
|
21
|
+
*/
|
|
22
|
+
export declare function actionToProviderKey(action: 'setup-codegraph-context' | 'setup-pathfinder' | 'setup-axon'): string;
|
|
23
|
+
//# sourceMappingURL=code-graph-configurator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-graph-configurator.d.ts","sourceRoot":"","sources":["../../src/engine/code-graph-configurator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EAEnB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AA+B3B;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAMlF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,mBAAmB,GACzB,gBAAgB,CAQlB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,EAAE,CAM3F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CAKjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,yBAAyB,GAAG,kBAAkB,GAAG,YAAY,GACpE,MAAM,CAOR"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Provider definitions
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const PROVIDER_DEFS = [
|
|
5
|
+
{
|
|
6
|
+
key: 'codegraphcontext',
|
|
7
|
+
provider: 'codegraph-context',
|
|
8
|
+
command: 'npx',
|
|
9
|
+
args: ['-y', 'codegraphcontext-mcp'],
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
key: 'code-pathfinder',
|
|
13
|
+
provider: 'pathfinder',
|
|
14
|
+
command: 'npx',
|
|
15
|
+
args: ['-y', '@codepathfinder/mcp-server'],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: 'axon',
|
|
19
|
+
provider: 'axon',
|
|
20
|
+
command: 'npx',
|
|
21
|
+
args: ['-y', 'axon-mcp'],
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Public functions
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Build a .claude.json MCP entry for a given provider key.
|
|
29
|
+
*/
|
|
30
|
+
export function buildProviderEntry(providerKey) {
|
|
31
|
+
const def = PROVIDER_DEFS.find((d) => d.key === providerKey);
|
|
32
|
+
if (!def) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return { command: def.command, args: def.args };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Merge a new MCP entry into an existing .claude.json config object.
|
|
39
|
+
* Returns the updated config (does not mutate input).
|
|
40
|
+
*/
|
|
41
|
+
export function mergeProviderIntoConfig(existing, providerKey, entry) {
|
|
42
|
+
return {
|
|
43
|
+
...existing,
|
|
44
|
+
mcpServers: {
|
|
45
|
+
...(existing.mcpServers ?? {}),
|
|
46
|
+
[providerKey]: entry,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Determine which providers are configured given a .claude.json config object.
|
|
52
|
+
*/
|
|
53
|
+
export function resolveProviderStatuses(config) {
|
|
54
|
+
const servers = config.mcpServers ?? {};
|
|
55
|
+
return PROVIDER_DEFS.map((def) => ({
|
|
56
|
+
name: def.provider,
|
|
57
|
+
configured: Object.prototype.hasOwnProperty.call(servers, def.key),
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build the full status result from a .claude.json config object.
|
|
62
|
+
*/
|
|
63
|
+
export function buildStatusResult(config) {
|
|
64
|
+
const providers = resolveProviderStatuses(config);
|
|
65
|
+
const activeProviders = providers.filter((p) => p.configured);
|
|
66
|
+
const activeProvider = activeProviders.length > 0 ? (activeProviders[0]?.name ?? null) : null;
|
|
67
|
+
return { providers, activeProvider };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Return the key used in .claude.json for a given action.
|
|
71
|
+
*/
|
|
72
|
+
export function actionToProviderKey(action) {
|
|
73
|
+
const map = {
|
|
74
|
+
'setup-codegraph-context': 'codegraphcontext',
|
|
75
|
+
'setup-pathfinder': 'code-pathfinder',
|
|
76
|
+
'setup-axon': 'axon',
|
|
77
|
+
};
|
|
78
|
+
return map[action] ?? '';
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=code-graph-configurator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-graph-configurator.js","sourceRoot":"","sources":["../../src/engine/code-graph-configurator.ts"],"names":[],"mappings":"AASA,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,aAAa,GAA2B;IAC5C;QACE,GAAG,EAAE,kBAAkB;QACvB,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC;KACrC;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,4BAA4B,CAAC;KAC3C;IACD;QACE,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;KACzB;CACF,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAA0B,EAC1B,WAAmB,EACnB,KAA0B;IAE1B,OAAO;QACL,GAAG,QAAQ;QACX,UAAU,EAAE;YACV,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9B,CAAC,WAAW,CAAC,EAAE,KAAK;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAwB;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC;KACnE,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAqE;IAErE,MAAM,GAAG,GAA2B;QAClC,yBAAyB,EAAE,kBAAkB;QAC7C,kBAAkB,EAAE,iBAAiB;QACrC,YAAY,EAAE,MAAM;KACrB,CAAC;IACF,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ContinueConfigFile, ContinueMcpServerEntry, ContinueTransport } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build the MCP server entry for Planu depending on transport type.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildPlanuMcpEntry(transport: ContinueTransport, hostedUrl?: string): ContinueMcpServerEntry;
|
|
6
|
+
/**
|
|
7
|
+
* Generate the full .continue/config.json content.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateContinueConfig(transport: ContinueTransport, hostedUrl?: string): ContinueConfigFile;
|
|
10
|
+
/**
|
|
11
|
+
* Check whether a parsed .continue/config.json has a Planu MCP entry.
|
|
12
|
+
* Returns the transport type if found, otherwise null.
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectPlanuTransport(config: ContinueConfigFile): ContinueTransport | null;
|
|
15
|
+
//# sourceMappingURL=continue-config-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-config-generator.d.ts","sourceRoot":"","sources":["../../src/engine/continue-config-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAgB3B;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iBAAiB,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,sBAAsB,CAaxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,iBAAiB,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,kBAAkB,CAMpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CASzF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Slash commands included in every Continue config
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const PLANU_SLASH_COMMANDS = [
|
|
5
|
+
{ name: 'spec', description: 'Look up a Planu spec by ID' },
|
|
6
|
+
{ name: 'validate', description: 'Validate current spec compliance' },
|
|
7
|
+
{ name: 'criteria', description: 'Show acceptance criteria for current spec' },
|
|
8
|
+
];
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Public functions
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Build the MCP server entry for Planu depending on transport type.
|
|
14
|
+
*/
|
|
15
|
+
export function buildPlanuMcpEntry(transport, hostedUrl) {
|
|
16
|
+
if (transport === 'sse') {
|
|
17
|
+
return {
|
|
18
|
+
name: 'planu',
|
|
19
|
+
transport: { type: 'sse', url: hostedUrl ?? '' },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
name: 'planu',
|
|
24
|
+
command: 'npx',
|
|
25
|
+
args: ['-y', '@planu/cli'],
|
|
26
|
+
transport: 'stdio',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate the full .continue/config.json content.
|
|
31
|
+
*/
|
|
32
|
+
export function generateContinueConfig(transport, hostedUrl) {
|
|
33
|
+
const mcpEntry = buildPlanuMcpEntry(transport, hostedUrl);
|
|
34
|
+
return {
|
|
35
|
+
mcpServers: [mcpEntry],
|
|
36
|
+
slashCommands: PLANU_SLASH_COMMANDS,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check whether a parsed .continue/config.json has a Planu MCP entry.
|
|
41
|
+
* Returns the transport type if found, otherwise null.
|
|
42
|
+
*/
|
|
43
|
+
export function detectPlanuTransport(config) {
|
|
44
|
+
const entry = config.mcpServers.find((s) => s.name === 'planu');
|
|
45
|
+
if (!entry) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
if (typeof entry.transport === 'object' && entry.transport.type === 'sse') {
|
|
49
|
+
return 'sse';
|
|
50
|
+
}
|
|
51
|
+
return 'stdio';
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=continue-config-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-config-generator.js","sourceRoot":"","sources":["../../src/engine/continue-config-generator.ts"],"names":[],"mappings":"AAOA,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG;IAC3B,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC3D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,kCAAkC,EAAE;IACrE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2CAA2C,EAAE;CAC/E,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA4B,EAC5B,SAAkB;IAElB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,IAAI,EAAE,EAAE;SACjD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;QAC1B,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAA4B,EAC5B,SAAkB;IAElB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1D,OAAO;QACL,UAAU,EAAE,CAAC,QAAQ,CAAC;QACtB,aAAa,EAAE,oBAAoB;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DocComplianceReport, DocComplianceIssue, StructuredDocsResult } from '../types/index.js';
|
|
2
|
+
export type { DocComplianceReport, DocComplianceIssue };
|
|
3
|
+
/**
|
|
4
|
+
* Checks if any anti-pattern from official docs appears in spec content.
|
|
5
|
+
* Returns a DocComplianceIssue for each match found.
|
|
6
|
+
*/
|
|
7
|
+
export declare function detectAntiPatterns(tech: string, docsResult: StructuredDocsResult, specContent: string): DocComplianceIssue[];
|
|
8
|
+
/**
|
|
9
|
+
* Identifies best practices from official docs that are NOT covered in the spec.
|
|
10
|
+
* Returns a list of missing best practice descriptions.
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectMissingBestPractices(tech: string, docsResult: StructuredDocsResult, specContent: string): DocComplianceIssue[];
|
|
13
|
+
/**
|
|
14
|
+
* Calculates a compliance score 0-100 based on issues found.
|
|
15
|
+
* High severity issues cost more points.
|
|
16
|
+
*/
|
|
17
|
+
export declare function calculateComplianceScore(issues: DocComplianceIssue[], totalChecks: number): number;
|
|
18
|
+
/**
|
|
19
|
+
* Main entry point: checks a spec file against official documentation.
|
|
20
|
+
* Reads the spec file, detects techs, fetches docs, and checks for issues.
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkDocCompliance(specPath: string, specId: string): Promise<DocComplianceReport>;
|
|
23
|
+
//# sourceMappingURL=doc-compliance-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-compliance-checker.d.ts","sourceRoot":"","sources":["../../src/engine/doc-compliance-checker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAK3B,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;AAExD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,MAAM,GAClB,kBAAkB,EAAE,CA0BtB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,MAAM,GAClB,kBAAkB,EAAE,CA6BtB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,WAAW,EAAE,MAAM,GAClB,MAAM,CAQR;AAYD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAwF9B"}
|