@planu/cli 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/config/tool-groups.json +140 -0
  2. package/dist/engine/ai-cost-estimator/core.d.ts +1 -1
  3. package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -1
  4. package/dist/engine/ai-cost-estimator/core.js +55 -19
  5. package/dist/engine/ai-cost-estimator/core.js.map +1 -1
  6. package/dist/engine/focus-tracker.d.ts.map +1 -1
  7. package/dist/engine/focus-tracker.js +1 -0
  8. package/dist/engine/focus-tracker.js.map +1 -1
  9. package/dist/engine/planu-config-writer.d.ts +2 -2
  10. package/dist/engine/planu-config-writer.d.ts.map +1 -1
  11. package/dist/engine/planu-config-writer.js +4 -6
  12. package/dist/engine/planu-config-writer.js.map +1 -1
  13. package/dist/engine/spec-migrator.d.ts +17 -0
  14. package/dist/engine/spec-migrator.d.ts.map +1 -0
  15. package/dist/engine/spec-migrator.js +119 -0
  16. package/dist/engine/spec-migrator.js.map +1 -0
  17. package/dist/engine/tool-groups/context-analyzer.d.ts +11 -0
  18. package/dist/engine/tool-groups/context-analyzer.d.ts.map +1 -0
  19. package/dist/engine/tool-groups/context-analyzer.js +40 -0
  20. package/dist/engine/tool-groups/context-analyzer.js.map +1 -0
  21. package/dist/engine/tool-groups/group-manager.d.ts +35 -0
  22. package/dist/engine/tool-groups/group-manager.d.ts.map +1 -0
  23. package/dist/engine/tool-groups/group-manager.js +201 -0
  24. package/dist/engine/tool-groups/group-manager.js.map +1 -0
  25. package/dist/engine/web-fetcher/registry-loader.d.ts.map +1 -1
  26. package/dist/engine/web-fetcher/registry-loader.js +2 -0
  27. package/dist/engine/web-fetcher/registry-loader.js.map +1 -1
  28. package/dist/index.js +28 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/tools/create-spec-helpers.d.ts +7 -0
  31. package/dist/tools/create-spec-helpers.d.ts.map +1 -0
  32. package/dist/tools/create-spec-helpers.js +42 -0
  33. package/dist/tools/create-spec-helpers.js.map +1 -0
  34. package/dist/tools/create-spec.d.ts.map +1 -1
  35. package/dist/tools/create-spec.js +12 -33
  36. package/dist/tools/create-spec.js.map +1 -1
  37. package/dist/tools/data-governance/audit-handler.d.ts.map +1 -1
  38. package/dist/tools/data-governance/audit-handler.js +1 -0
  39. package/dist/tools/data-governance/audit-handler.js.map +1 -1
  40. package/dist/tools/design-schema.d.ts.map +1 -1
  41. package/dist/tools/design-schema.js +1 -0
  42. package/dist/tools/design-schema.js.map +1 -1
  43. package/dist/tools/git/branch-ops.d.ts +6 -0
  44. package/dist/tools/git/branch-ops.d.ts.map +1 -1
  45. package/dist/tools/git/branch-ops.js +113 -1
  46. package/dist/tools/git/branch-ops.js.map +1 -1
  47. package/dist/tools/init-project/handler.d.ts.map +1 -1
  48. package/dist/tools/init-project/handler.js +48 -14
  49. package/dist/tools/init-project/handler.js.map +1 -1
  50. package/dist/tools/manage-git.d.ts.map +1 -1
  51. package/dist/tools/manage-git.js +3 -1
  52. package/dist/tools/manage-git.js.map +1 -1
  53. package/dist/tools/register-ai-cost-tools.js +1 -1
  54. package/dist/tools/register-ai-cost-tools.js.map +1 -1
  55. package/dist/tools/register-spec-tools/core-spec-tools.js +4 -4
  56. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  57. package/dist/tools/register-tool-groups.d.ts +7 -0
  58. package/dist/tools/register-tool-groups.d.ts.map +1 -0
  59. package/dist/tools/register-tool-groups.js +39 -0
  60. package/dist/tools/register-tool-groups.js.map +1 -0
  61. package/dist/tools/schemas/lifecycle.d.ts +8 -0
  62. package/dist/tools/schemas/lifecycle.d.ts.map +1 -1
  63. package/dist/tools/schemas/lifecycle.js +9 -1
  64. package/dist/tools/schemas/lifecycle.js.map +1 -1
  65. package/dist/tools/suggest-tooling/orchestration-generator.js +1 -1
  66. package/dist/tools/suggest-tooling/orchestration-generator.js.map +1 -1
  67. package/dist/tools/tool-group-handler.d.ts +9 -0
  68. package/dist/tools/tool-group-handler.d.ts.map +1 -0
  69. package/dist/tools/tool-group-handler.js +82 -0
  70. package/dist/tools/tool-group-handler.js.map +1 -0
  71. package/dist/tools/update-status.d.ts.map +1 -1
  72. package/dist/tools/update-status.js +9 -1
  73. package/dist/tools/update-status.js.map +1 -1
  74. package/dist/types/common/tech-enums.d.ts +1 -1
  75. package/dist/types/common/tech-enums.d.ts.map +1 -1
  76. package/dist/types/git.d.ts +12 -0
  77. package/dist/types/git.d.ts.map +1 -1
  78. package/dist/types/index.d.ts +1 -0
  79. package/dist/types/index.d.ts.map +1 -1
  80. package/dist/types/index.js +1 -0
  81. package/dist/types/index.js.map +1 -1
  82. package/dist/types/project/inputs.d.ts +0 -1
  83. package/dist/types/project/inputs.d.ts.map +1 -1
  84. package/dist/types/spec/core.d.ts +1 -0
  85. package/dist/types/spec/core.d.ts.map +1 -1
  86. package/dist/types/spec/inputs.d.ts +9 -0
  87. package/dist/types/spec/inputs.d.ts.map +1 -1
  88. package/dist/types/tool-groups.d.ts +57 -0
  89. package/dist/types/tool-groups.d.ts.map +1 -0
  90. package/dist/types/tool-groups.js +3 -0
  91. package/dist/types/tool-groups.js.map +1 -0
  92. package/package.json +1 -1
  93. package/src/config/tool-groups.json +140 -0
@@ -0,0 +1,140 @@
1
+ {
2
+ "groups": [
3
+ {
4
+ "id": "core",
5
+ "name": "Core",
6
+ "description": "Essential tools always available — project setup, locale, spec listing, and group management.",
7
+ "tools": ["set_locale", "init_project", "init_constitution", "list_specs", "activate_group", "list_groups"],
8
+ "defaultEnabled": true,
9
+ "locked": true
10
+ },
11
+ {
12
+ "id": "spec-lifecycle",
13
+ "name": "Spec Lifecycle",
14
+ "description": "Create, validate, estimate, and manage specs through their full lifecycle.",
15
+ "tools": [
16
+ "create_spec",
17
+ "validate",
18
+ "estimate",
19
+ "challenge_spec",
20
+ "update_status",
21
+ "check_readiness",
22
+ "clarify_requirements",
23
+ "summarize_spec",
24
+ "reconcile_spec",
25
+ "list_templates",
26
+ "apply_template",
27
+ "spec_history",
28
+ "log_decision"
29
+ ],
30
+ "defaultEnabled": true,
31
+ "locked": false,
32
+ "triggerTools": ["create_spec", "validate", "estimate"]
33
+ },
34
+ {
35
+ "id": "analysis",
36
+ "name": "Analysis",
37
+ "description": "Audit, drift detection, contradiction checks, and deep code analysis.",
38
+ "tools": [
39
+ "audit",
40
+ "audit_stack",
41
+ "detect_drift",
42
+ "detect_contradictions",
43
+ "detect_deprecations",
44
+ "detect_agent",
45
+ "reality_check",
46
+ "check_spec_accuracy",
47
+ "paradigm_report",
48
+ "spec_coverage"
49
+ ],
50
+ "defaultEnabled": false,
51
+ "locked": false,
52
+ "triggerTools": ["audit", "detect_drift", "reality_check"]
53
+ },
54
+ {
55
+ "id": "generation",
56
+ "name": "Generation",
57
+ "description": "Generate docs, tests, schemas, UI contracts, skills, rules, and ADRs.",
58
+ "tools": [
59
+ "generate_docs",
60
+ "generate_tests",
61
+ "design_schema",
62
+ "define_ui_contract",
63
+ "generate_adr",
64
+ "generate_checklist",
65
+ "generate_rules",
66
+ "generate_skill",
67
+ "generate_sub_agent",
68
+ "consult_docs",
69
+ "event_contracts"
70
+ ],
71
+ "defaultEnabled": false,
72
+ "locked": false,
73
+ "triggerTools": ["generate_docs", "generate_tests", "design_schema"]
74
+ },
75
+ {
76
+ "id": "orchestration",
77
+ "name": "Orchestration",
78
+ "description": "Multi-agent orchestration, execution plans, handoff packages, and AI cost estimation.",
79
+ "tools": [
80
+ "orchestrate",
81
+ "orchestrate_agents",
82
+ "package_handoff",
83
+ "generate_execution_plan",
84
+ "generate_orchestration_script",
85
+ "estimate_ai_cost",
86
+ "integrate_pm"
87
+ ],
88
+ "defaultEnabled": false,
89
+ "locked": false,
90
+ "triggerTools": ["orchestrate", "orchestrate_agents", "generate_execution_plan"]
91
+ },
92
+ {
93
+ "id": "devops",
94
+ "name": "DevOps",
95
+ "description": "Git management, tooling suggestions, CI generation, upgrades, and stack recommendations.",
96
+ "tools": [
97
+ "manage_git",
98
+ "suggest_tooling",
99
+ "suggest_stack",
100
+ "suggest_mcps",
101
+ "plan_upgrade",
102
+ "check_versions",
103
+ "check_config_health",
104
+ "generate_ci",
105
+ "discover_mcps",
106
+ "validate_workflow"
107
+ ],
108
+ "defaultEnabled": false,
109
+ "locked": false,
110
+ "triggerTools": ["manage_git", "suggest_tooling", "generate_ci"]
111
+ },
112
+ {
113
+ "id": "governance",
114
+ "name": "Governance",
115
+ "description": "Security checks, data governance, scope management, and context control.",
116
+ "tools": [
117
+ "security_check",
118
+ "data_governance",
119
+ "manage_scope",
120
+ "manage_context",
121
+ "context_budget",
122
+ "request_context",
123
+ "contribute_context",
124
+ "facilitate"
125
+ ],
126
+ "defaultEnabled": false,
127
+ "locked": false,
128
+ "triggerTools": ["security_check", "data_governance", "manage_scope"]
129
+ },
130
+ {
131
+ "id": "learning",
132
+ "name": "Learning",
133
+ "description": "Pattern learning, knowledge capture, reverse engineering, and migration.",
134
+ "tools": ["learn_pattern", "capture_learning", "reverse_engineer", "migrate_tech", "manage_hooks"],
135
+ "defaultEnabled": false,
136
+ "locked": false,
137
+ "triggerTools": ["learn_pattern", "capture_learning", "reverse_engineer"]
138
+ }
139
+ ]
140
+ }
@@ -1,7 +1,7 @@
1
1
  import type { AiCostEstimateResult, EstimateAiCostInput } from '../../types/index.js';
2
2
  /**
3
3
  * Estimates the AI cost for implementing a spec.
4
- * Reads the spec from docs/sdd/specs/, loads pricing from config JSON,
4
+ * Reads the spec from planu/specs/ (or legacy docs/sdd/specs/), loads pricing from config JSON,
5
5
  * and returns a full AiCostEstimateResult with per-model breakdown.
6
6
  */
7
7
  export declare function estimateAiCost(input: EstimateAiCostInput): Promise<AiCostEstimateResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/engine/ai-cost-estimator/core.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,mBAAmB,EAEpB,MAAM,sBAAsB,CAAC;AAmQ9B;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmF9F"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/engine/ai-cost-estimator/core.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,mBAAmB,EAEpB,MAAM,sBAAsB,CAAC;AAqS9B;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmF9F"}
@@ -37,35 +37,71 @@ function getComplexityLevel(acCount) {
37
37
  * Tries to find the spec directory by matching specId prefix.
38
38
  */
39
39
  async function loadSpecContent(specId) {
40
- const specsRoot = 'docs/sdd/specs';
41
- let entries;
40
+ // Try modern location first, fallback to legacy
41
+ let specsRoot = 'planu/specs';
42
42
  try {
43
- const { readdir } = await import('node:fs/promises');
44
- entries = await readdir(specsRoot);
43
+ const { access: fsAccess } = await import('node:fs/promises');
44
+ await fsAccess(specsRoot);
45
+ }
46
+ catch {
47
+ specsRoot = 'docs/sdd/specs';
48
+ }
49
+ const { readdir } = await import('node:fs/promises');
50
+ let specDir = null;
51
+ try {
52
+ const topEntries = await readdir(specsRoot);
53
+ // Try flat layout first: planu/specs/SPEC-069-name/ or docs/sdd/specs/SPEC-069-name/
54
+ const flatMatch = topEntries.find((e) => e.startsWith(specId));
55
+ if (flatMatch) {
56
+ specDir = join(specsRoot, flatMatch);
57
+ }
58
+ else {
59
+ // Try nested layout: planu/specs/{feature}/SPEC-069-name/
60
+ for (const group of topEntries) {
61
+ try {
62
+ const groupEntries = await readdir(join(specsRoot, group));
63
+ const nestedMatch = groupEntries.find((e) => e.startsWith(specId));
64
+ if (nestedMatch) {
65
+ specDir = join(specsRoot, group, nestedMatch);
66
+ break;
67
+ }
68
+ }
69
+ catch {
70
+ // Not a directory — skip
71
+ }
72
+ }
73
+ }
45
74
  }
46
75
  catch {
47
76
  throw new Error(`Spec directory not found at "${specsRoot}". ` +
48
77
  'Make sure you are running from the project root.');
49
78
  }
50
- // Find a directory matching the specId (e.g., "SPEC-069" matches "SPEC-069-ai-cost-estimator")
51
- const specDirName = entries.find((e) => e.startsWith(specId));
52
- if (!specDirName) {
53
- throw new Error(`Spec "${specId}" not found in "${specsRoot}". ` +
54
- `Available specs: ${entries.slice(0, 5).join(', ')}...`);
79
+ if (!specDir) {
80
+ throw new Error(`Spec "${specId}" not found in "${specsRoot}". ` + 'Check that the spec directory exists.');
55
81
  }
56
- const specDir = join(specsRoot, specDirName);
57
82
  const parts = [];
58
- for (const filename of ['HU.md', 'FICHA-TECNICA.md']) {
59
- try {
60
- const content = await readFile(join(specDir, filename), 'utf-8');
61
- parts.push(content);
62
- }
63
- catch {
64
- // File not present skip (not fatal)
83
+ // Try modern names first, fallback to legacy — only read one of each pair
84
+ for (const [modern, legacy] of [
85
+ ['spec.md', 'HU.md'],
86
+ ['technical.md', 'FICHA-TECNICA.md'],
87
+ ]) {
88
+ let found = false;
89
+ for (const filename of [modern, legacy]) {
90
+ if (found) {
91
+ break;
92
+ }
93
+ try {
94
+ const content = await readFile(join(specDir, filename), 'utf-8');
95
+ parts.push(content);
96
+ found = true;
97
+ }
98
+ catch {
99
+ // File not present — try next
100
+ }
65
101
  }
66
102
  }
67
103
  if (parts.length === 0) {
68
- throw new Error(`Spec "${specId}" has no HU.md or FICHA-TECNICA.md in "${specDir}". ` +
104
+ throw new Error(`Spec "${specId}" has no spec files in "${specDir}". ` +
69
105
  'Cannot estimate without spec content.');
70
106
  }
71
107
  return { content: parts.join('\n\n'), specDir };
@@ -198,7 +234,7 @@ function formatMarkdownTable(estimates, recommendedModelId, recommendationReason
198
234
  // ---------------------------------------------------------------------------
199
235
  /**
200
236
  * Estimates the AI cost for implementing a spec.
201
- * Reads the spec from docs/sdd/specs/, loads pricing from config JSON,
237
+ * Reads the spec from planu/specs/ (or legacy docs/sdd/specs/), loads pricing from config JSON,
202
238
  * and returns a full AiCostEstimateResult with per-model breakdown.
203
239
  */
204
240
  export async function estimateAiCost(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/engine/ai-cost-estimator/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/engine/ai-cost-estimator/core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"focus-tracker.d.ts","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwDhE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,UAAU,GAAG,IAAI,CA0BnB;AAWD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
1
+ {"version":3,"file":"focus-tracker.d.ts","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAyDhE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,UAAU,GAAG,IAAI,CA0BnB;AAWD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
@@ -23,6 +23,7 @@ function tokenize(text) {
23
23
  .filter((w) => w.length > 2));
24
24
  }
25
25
  function jaccardSimilarity(a, b) {
26
+ /* v8 ignore next 3 -- private fn: empty-set pair unreachable via tokenize (always has tokens) */
26
27
  if (a.size === 0 && b.size === 0) {
27
28
  return 1;
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"focus-tracker.js","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"focus-tracker.js","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { PlanuConfig } from '../types/index.js';
2
2
  /**
3
- * Create a new PlanuConfig with defaults.
3
+ * Create a new PlanuConfig with defaults. Always uses modern spec location.
4
4
  */
5
- export declare function createPlanuConfig(specLocation?: string): PlanuConfig;
5
+ export declare function createPlanuConfig(): PlanuConfig;
6
6
  /**
7
7
  * Serialize PlanuConfig to JSON string.
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"planu-config-writer.d.ts","sourceRoot":"","sources":["../../src/engine/planu-config-writer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAYpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAKA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE9D"}
1
+ {"version":3,"file":"planu-config-writer.d.ts","sourceRoot":"","sources":["../../src/engine/planu-config-writer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAU/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAKA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -1,16 +1,14 @@
1
1
  const PLANU_CONFIG_VERSION = '1.0.0';
2
2
  const DEFAULT_SPEC_LOCATION = 'planu/specs';
3
3
  /**
4
- * Create a new PlanuConfig with defaults.
4
+ * Create a new PlanuConfig with defaults. Always uses modern spec location.
5
5
  */
6
- export function createPlanuConfig(specLocation) {
6
+ export function createPlanuConfig() {
7
7
  const now = new Date().toISOString();
8
- const location = specLocation ?? DEFAULT_SPEC_LOCATION;
9
- const isLegacy = location.includes('docs/sdd/specs');
10
8
  return {
11
9
  version: PLANU_CONFIG_VERSION,
12
- specLocation: location,
13
- specNaming: isLegacy ? 'legacy' : 'modern',
10
+ specLocation: DEFAULT_SPEC_LOCATION,
11
+ specNaming: 'modern',
14
12
  createdAt: now,
15
13
  updatedAt: now,
16
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"planu-config-writer.js","sourceRoot":"","sources":["../../src/engine/planu-config-writer.ts"],"names":[],"mappings":"AAGA,MAAM,oBAAoB,GAAG,OAAO,CAAC;AACrC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAqB;IACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,YAAY,IAAI,qBAAqB,CAAC;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAErD,OAAO;QACL,OAAO,EAAE,oBAAoB;QAC7B,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC1C,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA2B;IAK1D,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"planu-config-writer.js","sourceRoot":"","sources":["../../src/engine/planu-config-writer.ts"],"names":[],"mappings":"AAGA,MAAM,oBAAoB,GAAG,OAAO,CAAC;AACrC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,OAAO,EAAE,oBAAoB;QAC7B,YAAY,EAAE,qBAAqB;QACnC,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA2B;IAK1D,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Spec, SpecMigrationResult, SpecMigrationDeps } from '../types/index.js';
2
+ /**
3
+ * Detect specs stored under a legacy location (docs/sdd/specs/).
4
+ * Caller provides the list of specs (from storage layer).
5
+ */
6
+ export declare function filterLegacySpecs(specs: Spec[]): Spec[];
7
+ /**
8
+ * Migrate legacy specs to planu/specs/ with modern file naming.
9
+ * Moves files on disk and calls the provided updateSpec for each migrated spec.
10
+ * Also rewrites planu.json.
11
+ */
12
+ export declare function migrateSpecs(projectPath: string, legacySpecs: Spec[], deps: SpecMigrationDeps): Promise<SpecMigrationResult>;
13
+ /**
14
+ * Check if a project path has a planu.json with legacy specLocation.
15
+ */
16
+ export declare function hasLegacyConfig(projectPath: string): Promise<boolean>;
17
+ //# sourceMappingURL=spec-migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-migrator.d.ts","sourceRoot":"","sources":["../../src/engine/spec-migrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAetF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAEvD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,IAAI,EAAE,EACnB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAoB9B;AA8ED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3E"}
@@ -0,0 +1,119 @@
1
+ import { isLegacyLocation, createPlanuConfig, serializePlanuConfig, } from './planu-config-writer.js';
2
+ import { mkdir, rename, readdir, rmdir, access, writeFile, readFile } from 'node:fs/promises';
3
+ import { join, dirname } from 'node:path';
4
+ const LEGACY_TO_MODERN_NAMES = {
5
+ 'HU.md': 'spec.md',
6
+ 'FICHA-TECNICA.md': 'technical.md',
7
+ 'PROGRESS.md': 'progress.md',
8
+ };
9
+ /**
10
+ * Detect specs stored under a legacy location (docs/sdd/specs/).
11
+ * Caller provides the list of specs (from storage layer).
12
+ */
13
+ export function filterLegacySpecs(specs) {
14
+ return specs.filter((s) => isLegacyLocation(s.specPath) || isLegacyLocation(s.technicalPath));
15
+ }
16
+ /**
17
+ * Migrate legacy specs to planu/specs/ with modern file naming.
18
+ * Moves files on disk and calls the provided updateSpec for each migrated spec.
19
+ * Also rewrites planu.json.
20
+ */
21
+ export async function migrateSpecs(projectPath, legacySpecs, deps) {
22
+ const errors = [];
23
+ let migratedCount = 0;
24
+ for (const spec of legacySpecs) {
25
+ try {
26
+ await migrateSingleSpec(projectPath, spec, deps);
27
+ migratedCount++;
28
+ }
29
+ catch (err) {
30
+ const msg = err instanceof Error ? err.message : String(err);
31
+ errors.push(`${spec.id}: ${msg}`);
32
+ }
33
+ }
34
+ // Rewrite planu.json with modern config
35
+ const planuConfigPath = join(projectPath, 'planu.json');
36
+ const planuConfig = createPlanuConfig();
37
+ await writeFile(planuConfigPath, serializePlanuConfig(planuConfig), 'utf-8');
38
+ return { migratedCount, errors };
39
+ }
40
+ async function migrateSingleSpec(projectPath, spec, deps) {
41
+ const oldSpecDir = dirname(join(projectPath, spec.specPath));
42
+ const newRelDir = spec.specPath
43
+ .replace(/docs\/sdd\/specs/, 'planu/specs')
44
+ .replace(/\/[^/]+$/, '');
45
+ const newAbsDir = join(projectPath, newRelDir);
46
+ // Create target directory
47
+ await mkdir(newAbsDir, { recursive: true });
48
+ // Move and rename known files
49
+ const dirEntries = await safeReaddir(oldSpecDir);
50
+ for (const entry of dirEntries) {
51
+ const modernName = LEGACY_TO_MODERN_NAMES[entry] ?? entry;
52
+ const src = join(oldSpecDir, entry);
53
+ const dest = join(newAbsDir, modernName);
54
+ await rename(src, dest);
55
+ }
56
+ // Update spec paths in storage
57
+ const updates = {
58
+ specPath: rewritePath(spec.specPath),
59
+ technicalPath: rewritePath(spec.technicalPath),
60
+ };
61
+ if (spec.progressPath) {
62
+ updates.progressPath = rewritePath(spec.progressPath);
63
+ }
64
+ if (spec.executiveReportPath) {
65
+ updates.executiveReportPath = rewritePath(spec.executiveReportPath);
66
+ }
67
+ if (spec.technicalReportPath) {
68
+ updates.technicalReportPath = rewritePath(spec.technicalReportPath);
69
+ }
70
+ if (spec.planPath) {
71
+ updates.planPath = rewritePath(spec.planPath);
72
+ }
73
+ await deps.updateSpec(spec.projectId, spec.id, updates);
74
+ // Cleanup empty legacy directories
75
+ await cleanupEmptyDirs(oldSpecDir);
76
+ }
77
+ function rewritePath(path) {
78
+ return path
79
+ .replace(/docs\/sdd\/specs/, 'planu/specs')
80
+ .replace(/\/HU\.md$/, '/spec.md')
81
+ .replace(/\/FICHA-TECNICA\.md$/, '/technical.md')
82
+ .replace(/\/PROGRESS\.md$/, '/progress.md');
83
+ }
84
+ async function safeReaddir(dir) {
85
+ try {
86
+ return await readdir(dir);
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ }
92
+ async function cleanupEmptyDirs(dir) {
93
+ try {
94
+ const entries = await readdir(dir);
95
+ if (entries.length === 0) {
96
+ await rmdir(dir);
97
+ // Try to clean parent too (e.g., docs/sdd/specs/ itself)
98
+ await cleanupEmptyDirs(dirname(dir));
99
+ }
100
+ }
101
+ catch {
102
+ // Directory might not exist or not be empty — safe to ignore
103
+ }
104
+ }
105
+ /**
106
+ * Check if a project path has a planu.json with legacy specLocation.
107
+ */
108
+ export async function hasLegacyConfig(projectPath) {
109
+ try {
110
+ await access(join(projectPath, 'planu.json'));
111
+ const content = await readFile(join(projectPath, 'planu.json'), 'utf-8');
112
+ const config = JSON.parse(content);
113
+ return config.specLocation ? isLegacyLocation(config.specLocation) : false;
114
+ }
115
+ catch {
116
+ return false;
117
+ }
118
+ }
119
+ //# sourceMappingURL=spec-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-migrator.js","sourceRoot":"","sources":["../../src/engine/spec-migrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ContextSuggestion } from '../../types/index.js';
2
+ /**
3
+ * Analyzes the last invoked tool and suggests groups that should be activated.
4
+ * Returns suggestions sorted by confidence (highest first).
5
+ */
6
+ export declare function analyzeContext(lastToolUsed: string, enabledGroups: Set<string>): ContextSuggestion[];
7
+ /**
8
+ * Returns the group id that a given tool belongs to, or undefined.
9
+ */
10
+ export declare function findGroupForTool(toolName: string): string | undefined;
11
+ //# sourceMappingURL=context-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/tool-groups/context-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,kBAAkB,CAAC;AAQ/E;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,iBAAiB,EAAE,CA2BrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE"}
@@ -0,0 +1,40 @@
1
+ import toolGroupsConfigJson from '../../config/tool-groups.json' with { type: 'json' };
2
+ const config = toolGroupsConfigJson;
3
+ const TRIGGER_CONFIDENCE = 0.9;
4
+ const MEMBER_CONFIDENCE = 0.5;
5
+ /**
6
+ * Analyzes the last invoked tool and suggests groups that should be activated.
7
+ * Returns suggestions sorted by confidence (highest first).
8
+ */
9
+ export function analyzeContext(lastToolUsed, enabledGroups) {
10
+ const suggestions = [];
11
+ for (const group of config.groups) {
12
+ if (enabledGroups.has(group.id)) {
13
+ continue;
14
+ }
15
+ const isTrigger = group.triggerTools?.includes(lastToolUsed) ?? false;
16
+ const isMember = group.tools.includes(lastToolUsed);
17
+ if (isTrigger) {
18
+ suggestions.push({
19
+ suggestedGroup: group.id,
20
+ reason: `Tool "${lastToolUsed}" is a trigger for group "${group.name}"`,
21
+ confidence: TRIGGER_CONFIDENCE,
22
+ });
23
+ }
24
+ else if (isMember) {
25
+ suggestions.push({
26
+ suggestedGroup: group.id,
27
+ reason: `Tool "${lastToolUsed}" belongs to group "${group.name}"`,
28
+ confidence: MEMBER_CONFIDENCE,
29
+ });
30
+ }
31
+ }
32
+ return suggestions.sort((a, b) => b.confidence - a.confidence);
33
+ }
34
+ /**
35
+ * Returns the group id that a given tool belongs to, or undefined.
36
+ */
37
+ export function findGroupForTool(toolName) {
38
+ return config.groups.find((g) => g.tools.includes(toolName))?.id;
39
+ }
40
+ //# sourceMappingURL=context-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analyzer.js","sourceRoot":"","sources":["../../../src/engine/tool-groups/context-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEvF,MAAM,MAAM,GAAG,oBAAyD,CAAC;AAEzE,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,YAAoB,EACpB,aAA0B;IAE1B,MAAM,WAAW,GAAwB,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEpD,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,CAAC,IAAI,CAAC;gBACf,cAAc,EAAE,KAAK,CAAC,EAAE;gBACxB,MAAM,EAAE,SAAS,YAAY,6BAA6B,KAAK,CAAC,IAAI,GAAG;gBACvE,UAAU,EAAE,kBAAkB;aAC/B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC;gBACf,cAAc,EAAE,KAAK,CAAC,EAAE;gBACxB,MAAM,EAAE,SAAS,YAAY,uBAAuB,KAAK,CAAC,IAAI,GAAG;gBACjE,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ToolSlot, GroupStatus, GroupActivationResult } from '../../types/index.js';
2
+ export declare class GroupManager {
3
+ private readonly groups;
4
+ private readonly enabledState;
5
+ private readonly toolMap;
6
+ private readonly notifyChanged;
7
+ constructor(toolMap: Map<string, ToolSlot>, notifyChanged: () => void);
8
+ /** Load groups from config, restore persisted state, apply to toolMap. */
9
+ init(): Promise<void>;
10
+ /** Enable all tools in a group. */
11
+ enableGroup(groupId: string): GroupActivationResult;
12
+ /** Disable all tools in a group. */
13
+ disableGroup(groupId: string): GroupActivationResult;
14
+ /** Toggle a group based on its current state. */
15
+ toggleGroup(groupId: string): GroupActivationResult;
16
+ /** Return runtime status for all groups, including a virtual 'ungrouped' group. */
17
+ getGroupStatus(): GroupStatus[];
18
+ /** Return the group ID that contains the given tool, or undefined. */
19
+ getToolGroup(toolName: string): string | undefined;
20
+ /** Count of tools currently enabled in toolMap. */
21
+ getActiveToolCount(): number;
22
+ /** Total tools registered in toolMap. */
23
+ getTotalToolCount(): number;
24
+ /** Load persisted group states from disk. */
25
+ private loadPersistedState;
26
+ /** Write current group states to disk. */
27
+ private persistState;
28
+ /** Apply enabled/disabled state to all tools in a group via toolMap. */
29
+ private applyGroupState;
30
+ /** Build a successful GroupActivationResult for a given group and action. */
31
+ private buildActivationResult;
32
+ /** Build a failed GroupActivationResult (group not found or locked). */
33
+ private buildErrorResult;
34
+ }
35
+ //# sourceMappingURL=group-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-manager.d.ts","sourceRoot":"","sources":["../../../src/engine/tool-groups/group-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,QAAQ,EACR,WAAW,EACX,qBAAqB,EAGtB,MAAM,kBAAkB,CAAC;AAQ1B,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;gBAE/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,MAAM,IAAI;IAOrE,0EAA0E;IACpE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B,mCAAmC;IACnC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAcnD,oCAAoC;IACpC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAqBpD,iDAAiD;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAuBnD,mFAAmF;IACnF,cAAc,IAAI,WAAW,EAAE;IAwC/B,sEAAsE;IACtE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IASlD,mDAAmD;IACnD,kBAAkB,IAAI,MAAM;IAU5B,yCAAyC;IACzC,iBAAiB,IAAI,MAAM;IAI3B,6CAA6C;YAC/B,kBAAkB;IAUhC,0CAA0C;YAC5B,YAAY;IAY1B,wEAAwE;IACxE,OAAO,CAAC,eAAe;IAoBvB,6EAA6E;IAC7E,OAAO,CAAC,qBAAqB;IAgB7B,wEAAwE;IACxE,OAAO,CAAC,gBAAgB;CAezB"}