@planu/cli 0.51.0 → 0.52.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.
@@ -0,0 +1,85 @@
1
+ {
2
+ "$schema": "AC templates by spec type — injected by create_spec for actionable, verifiable criteria",
3
+ "feature": {
4
+ "sections": ["user-story", "happy-path", "edge-cases", "error-handling", "rollback"],
5
+ "criteria": [
6
+ "Happy path works end-to-end with valid inputs",
7
+ "Invalid inputs return descriptive error messages",
8
+ "Edge cases are handled: empty values, max length, special characters",
9
+ "Feature is behind a feature flag or gracefully degrades if dependencies fail",
10
+ "Unit tests cover happy path + at least 2 edge cases",
11
+ "No regressions in existing functionality (full test suite passes)"
12
+ ]
13
+ },
14
+ "bugfix": {
15
+ "sections": ["reproduction", "root-cause", "fix", "regression"],
16
+ "criteria": [
17
+ "Bug is reproducible with the steps documented above",
18
+ "Root cause is identified and documented (not just the symptom)",
19
+ "Fix addresses the root cause, not a workaround",
20
+ "Regression test written that fails before fix and passes after",
21
+ "No regressions in existing functionality",
22
+ "Fix verified in the same environment where bug was reported"
23
+ ]
24
+ },
25
+ "refactor": {
26
+ "sections": ["before-state", "after-state", "constraints"],
27
+ "criteria": [
28
+ "All existing tests pass without modification (zero behavior change)",
29
+ "Before/after metrics documented: complexity, line count, or coupling",
30
+ "No new dependencies introduced",
31
+ "Public API surface unchanged (or migration documented if changed)",
32
+ "Benchmark shows no performance regression (±5% tolerance)"
33
+ ]
34
+ },
35
+ "infra": {
36
+ "sections": ["environments", "schema-changes", "rollback-plan", "monitoring"],
37
+ "criteria": [
38
+ "Change deployed to staging and verified before production",
39
+ "Rollback procedure documented and tested",
40
+ "Monitoring/alerting configured for the new resource",
41
+ "No hardcoded environment-specific values",
42
+ "Health check endpoint updated if applicable",
43
+ "SLA target defined: availability %, latency p99"
44
+ ]
45
+ },
46
+ "docs": {
47
+ "sections": ["audience", "content-outline"],
48
+ "criteria": [
49
+ "Documentation is accurate against current codebase",
50
+ "All code examples compile and run successfully",
51
+ "Reviewed by at least one person from the target audience",
52
+ "Table of contents or navigation is updated"
53
+ ]
54
+ },
55
+ "tech-debt": {
56
+ "sections": ["current-problem", "impact", "risk", "effort"],
57
+ "criteria": [
58
+ "Technical debt is resolved as described",
59
+ "All existing tests pass without modification",
60
+ "No new tech debt introduced (verified by linter/complexity check)",
61
+ "Estimated vs actual effort logged for future calibration",
62
+ "Before/after complexity metrics documented"
63
+ ]
64
+ },
65
+ "project": {
66
+ "sections": ["user-story", "milestones", "success-metrics"],
67
+ "criteria": [
68
+ "Project milestone deliverables are clearly defined",
69
+ "Success metrics are measurable and time-bound",
70
+ "Dependencies on other teams/specs are documented",
71
+ "Risk mitigation plan exists for high-risk items",
72
+ "Integration tests cover cross-module interactions"
73
+ ]
74
+ },
75
+ "agent": {
76
+ "sections": ["user-story", "tool-interface", "error-handling"],
77
+ "criteria": [
78
+ "Agent tool is registered with Zod schema and .describe() on all fields",
79
+ "Error messages include what failed and what to do next",
80
+ "Tool works correctly when called by an LLM (tested via MCP)",
81
+ "Rate limiting or license gate applied if needed",
82
+ "Idempotent: calling twice with same input produces same result"
83
+ ]
84
+ }
85
+ }
@@ -0,0 +1,8 @@
1
+ import type { SpecType } from '../../types/index.js';
2
+ /**
3
+ * Load acceptance criteria lines for a given spec type.
4
+ * Returns `- [ ] Criterion` lines ready for markdown injection.
5
+ * Falls back to 'feature' template if type not found.
6
+ */
7
+ export declare function loadAcTemplate(type: SpecType): string[];
8
+ //# sourceMappingURL=ac-template-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ac-template-loader.d.ts","sourceRoot":"","sources":["../../../src/tools/create-spec-hu/ac-template-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAkBrD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAOvD"}
@@ -0,0 +1,29 @@
1
+ // tools/create-spec-hu/ac-template-loader.ts — Load AC criteria from config templates
2
+ // SPEC-025: type-specific acceptance criteria from ac-templates.json
3
+ import { readFileSync } from 'node:fs';
4
+ import { resolve, dirname } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ let cache = null;
8
+ function loadTemplates() {
9
+ if (cache) {
10
+ return cache;
11
+ }
12
+ const path = resolve(__dirname, '../../config/ac-templates.json');
13
+ cache = JSON.parse(readFileSync(path, 'utf-8'));
14
+ return cache;
15
+ }
16
+ /**
17
+ * Load acceptance criteria lines for a given spec type.
18
+ * Returns `- [ ] Criterion` lines ready for markdown injection.
19
+ * Falls back to 'feature' template if type not found.
20
+ */
21
+ export function loadAcTemplate(type) {
22
+ const templates = loadTemplates();
23
+ const entry = templates[type] ?? templates.feature;
24
+ if (!entry?.criteria.length) {
25
+ return ['- [ ] (Define acceptance criteria)'];
26
+ }
27
+ return entry.criteria.map((c) => `- [ ] ${c}`);
28
+ }
29
+ //# sourceMappingURL=ac-template-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ac-template-loader.js","sourceRoot":"","sources":["../../../src/tools/create-spec-hu/ac-template-loader.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,qEAAqE;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,IAAI,KAAK,GAAsE,IAAI,CAAC;AAEpF,SAAS,aAAa;IACpB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC;IAClE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAG7C,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hu-body-generators.d.ts","sourceRoot":"","sources":["../../../src/tools/create-spec-hu/hu-body-generators.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEnF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAClC,MAAM,EAAE,CA0MV;AAGD,wBAAgB,gCAAgC,IAAI,MAAM,EAAE,CAU3D;AAGD,wBAAgB,oCAAoC,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,EAAE,CAkBjF;AAID,2FAA2F;AAC3F,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAUnD;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAUnD"}
1
+ {"version":3,"file":"hu-body-generators.d.ts","sourceRoot":"","sources":["../../../src/tools/create-spec-hu/hu-body-generators.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGnF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAClC,MAAM,EAAE,CA0LV;AAGD,wBAAgB,gCAAgC,IAAI,MAAM,EAAE,CAU3D;AAGD,wBAAgB,oCAAoC,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,EAAE,CAkBjF;AAID,2FAA2F;AAC3F,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAUnD;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAUnD"}
@@ -1,5 +1,6 @@
1
1
  // tools/create-spec-hu/hu-body-generators.ts — Body section generators for HU.md
2
2
  // SPEC-013: mobile accessibility criteria for ios/android targets.
3
+ import { loadAcTemplate } from './ac-template-loader.js';
3
4
  /**
4
5
  * Generate the body section of HU.md based on spec type.
5
6
  * SPEC-013: includes mobile accessibility criteria for ios/android targets.
@@ -29,10 +30,7 @@ export function generateHUBody(type, description, target, knowledge) {
29
30
  '',
30
31
  '## Fix Criteria',
31
32
  '',
32
- '- [ ] Bug is fixed as described',
33
- '- [ ] Root cause is addressed',
34
- '- [ ] Regression tests are written and passing',
35
- '- [ ] No regressions in existing functionality',
33
+ ...loadAcTemplate('bugfix'),
36
34
  ];
37
35
  case 'refactor':
38
36
  return [
@@ -54,10 +52,7 @@ export function generateHUBody(type, description, target, knowledge) {
54
52
  '',
55
53
  '## Acceptance Criteria',
56
54
  '',
57
- '- [ ] Refactoring is complete',
58
- '- [ ] All existing tests pass without modification',
59
- '- [ ] No behavioral changes',
60
- '- [ ] Code quality metrics improved',
55
+ ...loadAcTemplate('refactor'),
61
56
  ];
62
57
  case 'infra':
63
58
  return [
@@ -75,10 +70,7 @@ export function generateHUBody(type, description, target, knowledge) {
75
70
  '',
76
71
  '## Acceptance Criteria',
77
72
  '',
78
- '- [ ] Infrastructure change is deployed',
79
- '- [ ] All environments are functional',
80
- '- [ ] Rollback plan is documented',
81
- '- [ ] No downtime during deployment',
73
+ ...loadAcTemplate('infra'),
82
74
  '',
83
75
  '## Rollback Plan',
84
76
  '',
@@ -101,9 +93,7 @@ export function generateHUBody(type, description, target, knowledge) {
101
93
  '',
102
94
  '## Acceptance Criteria',
103
95
  '',
104
- '- [ ] Documentation is complete and accurate',
105
- '- [ ] Reviewed by target audience',
106
- '- [ ] All code examples are tested',
96
+ ...loadAcTemplate('docs'),
107
97
  ];
108
98
  // SPEC-027: tech-debt type — formal tracking with impact/risk/timeline
109
99
  case 'tech-debt':
@@ -139,10 +129,7 @@ export function generateHUBody(type, description, target, knowledge) {
139
129
  '',
140
130
  '## Acceptance Criteria',
141
131
  '',
142
- '- [ ] Technical debt is resolved as described',
143
- '- [ ] All existing tests pass without modification',
144
- '- [ ] No new tech debt introduced',
145
- '- [ ] Estimated effort was tracked for future calibration',
132
+ ...loadAcTemplate('tech-debt'),
146
133
  '',
147
134
  '## Estimated Effort',
148
135
  '',
@@ -164,6 +151,7 @@ export function generateHUBody(type, description, target, knowledge) {
164
151
  const descBody = isStructured
165
152
  ? description
166
153
  : `As a user, I want ${description}, so that I can achieve the expected outcome.`;
154
+ const acLines = loadAcTemplate(type);
167
155
  const base = [
168
156
  '## Description',
169
157
  '',
@@ -171,10 +159,7 @@ export function generateHUBody(type, description, target, knowledge) {
171
159
  '',
172
160
  '## Acceptance Criteria',
173
161
  '',
174
- '- [ ] Feature is implemented as described',
175
- '- [ ] All edge cases are handled',
176
- '- [ ] Unit tests are written and passing',
177
- '- [ ] No regressions in existing functionality',
162
+ ...acLines,
178
163
  ];
179
164
  // SPEC-013: inject mobile platform accessibility criteria
180
165
  if (target === 'ios') {
@@ -1 +1 @@
1
- {"version":3,"file":"hu-body-generators.js","sourceRoot":"","sources":["../../../src/tools/create-spec-hu/hu-body-generators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hu-body-generators.js","sourceRoot":"","sources":["../../../src/tools/create-spec-hu/hu-body-generators.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"safe-handler.d.ts","sourceRoot":"","sources":["../../src/tools/safe-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqDpD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACxC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAalC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACxC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAElC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACxC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAElC"}
1
+ {"version":3,"file":"safe-handler.d.ts","sourceRoot":"","sources":["../../src/tools/safe-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAyDpD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACxC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAalC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACxC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAElC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACxC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAElC"}
@@ -3,9 +3,11 @@
3
3
  // instead of crashing the server. Includes execution timeout via Promise.race.
4
4
  import { withLicenseGate, withUsageTracking } from './license-gate.js';
5
5
  import { sanitizePath } from './sanitize-path.js';
6
+ import { ensureHooksStarted } from './start-hooks.js';
6
7
  /**
7
8
  * Sanitizes path-like fields in tool args before passing to handler.
8
9
  * Checks `projectPath` and `path` fields for directory traversal attacks.
10
+ * Also triggers lazy hook engine auto-start when a projectPath is present.
9
11
  */
10
12
  function sanitizeArgs(args) {
11
13
  if (args === null || typeof args !== 'object') {
@@ -14,6 +16,8 @@ function sanitizeArgs(args) {
14
16
  const obj = args;
15
17
  if (typeof obj.projectPath === 'string') {
16
18
  obj.projectPath = sanitizePath(obj.projectPath);
19
+ // Auto-start hooks on first tool call with a projectPath (fire-and-forget)
20
+ ensureHooksStarted(obj.projectPath);
17
21
  }
18
22
  if (typeof obj.path === 'string') {
19
23
  obj.path = sanitizePath(obj.path);
@@ -1 +1 @@
1
- {"version":3,"file":"safe-handler.js","sourceRoot":"","sources":["../../src/tools/safe-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safe-handler.js","sourceRoot":"","sources":["../../src/tools/safe-handler.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,13 @@ import { FileWatcher } from '../engine/hooks/file-watcher.js';
6
6
  * Get the current engine instance (for testing/internal use).
7
7
  */
8
8
  export declare function getEngineInstance(): HookEngine | null;
9
+ /**
10
+ * Auto-start hook engine if not running. Called transparently from the tool
11
+ * pipeline whenever a tool receives a projectPath arg. Idempotent and
12
+ * fire-and-forget — errors are silently swallowed so tool execution is never
13
+ * blocked by hook startup failures.
14
+ */
15
+ export declare function ensureHooksStarted(projectPath: string): void;
9
16
  /**
10
17
  * Get the current watcher instance (for testing/internal use).
11
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"start-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACd,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAa9D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,IAAI,CAEvD;AAMD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA0FjF;AAuBD,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAuBhF;AAMD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CAqC5D;AAMD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0CzF"}
1
+ {"version":3,"file":"start-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACd,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAa9D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,IAAI,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAW5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,IAAI,CAEvD;AAMD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA0FjF;AAuBD,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAuBhF;AAMD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CAqC5D;AAMD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0CzF"}
@@ -17,6 +17,24 @@ let configLoaderInstance = null;
17
17
  export function getEngineInstance() {
18
18
  return engineInstance;
19
19
  }
20
+ /**
21
+ * Auto-start hook engine if not running. Called transparently from the tool
22
+ * pipeline whenever a tool receives a projectPath arg. Idempotent and
23
+ * fire-and-forget — errors are silently swallowed so tool execution is never
24
+ * blocked by hook startup failures.
25
+ */
26
+ export function ensureHooksStarted(projectPath) {
27
+ if (engineInstance?.status().running) {
28
+ return;
29
+ }
30
+ // Fire-and-forget — don't block the tool call
31
+ void handleStartHooks({
32
+ projectPath,
33
+ hooks: ['on-save', 'on-create', 'on-delete', 'on-commit'],
34
+ }).catch(() => {
35
+ // Silently swallow — hooks are best-effort
36
+ });
37
+ }
20
38
  /**
21
39
  * Get the current watcher instance (for testing/internal use).
22
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"start-hooks.js","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start-hooks.js","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAUrE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,IAAI,cAAc,GAAsB,IAAI,CAAC;AAC7C,IAAI,eAAe,GAAuB,IAAI,CAAC;AAC/C,IAAI,iBAAiB,GAAqB,IAAI,CAAC;AAC/C,IAAI,oBAAoB,GAAwB,IAAI,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IACD,8CAA8C;IAC9C,KAAK,gBAAgB,CAAC;QACpB,WAAW;QACX,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;KAC1D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,2CAA2C;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAqB;IAC1D,iDAAiD;IACjD,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,6BAA6B;wBACtC,GAAG,MAAM;qBACV,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAEzE,cAAc;IACd,oBAAoB,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAEjD,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,cAAc,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE1C,sBAAsB;IACtB,eAAe,GAAG,IAAI,WAAW,CAAC;QAChC,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO;QACzC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO;KAC1C,CAAC,CAAC;IAEH,mBAAmB;IACnB,iBAAiB,GAAG,IAAI,SAAS,CAC/B,CAAC,KAAmB,EAAE,EAAE;QACtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,KAAK,cAAc,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,EACD;QACE,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CACF,CAAC;IAEF,4BAA4B;IAC5B,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAmB,EAAE,EAAE;QACnD,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,wCAAwC;IACxC,oBAAoB,CAAC,aAAa,EAAE,CAAC;IAErC,2BAA2B;IAC3B,cAAc,CAAC,KAAK,EAAE,CAAC;IACvB,eAAe,CAAC,KAAK,EAAE,CAAC;IAExB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,qBAAqB;oBAC9B,WAAW;oBACX,YAAY;oBACZ,MAAM,EAAE;wBACN,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;qBAC9C;iBACF,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,KAAmB;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAqB;IACzD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,wCAAwC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC;SAC1F,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,IAAI,EAAE,CAAC;IACtB,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,oBAAoB,EAAE,KAAK,EAAE,CAAC;IAE9B,MAAM,OAAO,GAAG,8CAA8C,CAAC;IAE/D,cAAc,GAAG,IAAI,CAAC;IACtB,eAAe,GAAG,IAAI,CAAC;IACvB,iBAAiB,GAAG,IAAI,CAAC;IACzB,oBAAoB,GAAG,IAAI,CAAC;IAE5B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,wCAAwC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,EAAE;wBACf,aAAa,EAAE,CAAC;wBAChB,SAAS,EAAE,EAAE;wBACb,YAAY,EAAE,CAAC;qBAChB,CAAC;iBACH;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;IAE9C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,GAAG,MAAM;oBACT,YAAY,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM;iBAC/C,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAyB;IAClE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,oDAAoD;QACpD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,0CAA0C;wBACnD,MAAM;qBACP,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAEjD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,wBAAwB;oBACjC,MAAM;oBACN,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,OAAO,IAAI,KAAK;iBACzD,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "0.51.0",
3
+ "version": "0.52.0",
4
4
  "description": "Planu — MCP Server for Spec Driven Development. Manages specs, estimations, reverse engineering, and auto-learning across any language/framework.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,85 @@
1
+ {
2
+ "$schema": "AC templates by spec type — injected by create_spec for actionable, verifiable criteria",
3
+ "feature": {
4
+ "sections": ["user-story", "happy-path", "edge-cases", "error-handling", "rollback"],
5
+ "criteria": [
6
+ "Happy path works end-to-end with valid inputs",
7
+ "Invalid inputs return descriptive error messages",
8
+ "Edge cases are handled: empty values, max length, special characters",
9
+ "Feature is behind a feature flag or gracefully degrades if dependencies fail",
10
+ "Unit tests cover happy path + at least 2 edge cases",
11
+ "No regressions in existing functionality (full test suite passes)"
12
+ ]
13
+ },
14
+ "bugfix": {
15
+ "sections": ["reproduction", "root-cause", "fix", "regression"],
16
+ "criteria": [
17
+ "Bug is reproducible with the steps documented above",
18
+ "Root cause is identified and documented (not just the symptom)",
19
+ "Fix addresses the root cause, not a workaround",
20
+ "Regression test written that fails before fix and passes after",
21
+ "No regressions in existing functionality",
22
+ "Fix verified in the same environment where bug was reported"
23
+ ]
24
+ },
25
+ "refactor": {
26
+ "sections": ["before-state", "after-state", "constraints"],
27
+ "criteria": [
28
+ "All existing tests pass without modification (zero behavior change)",
29
+ "Before/after metrics documented: complexity, line count, or coupling",
30
+ "No new dependencies introduced",
31
+ "Public API surface unchanged (or migration documented if changed)",
32
+ "Benchmark shows no performance regression (±5% tolerance)"
33
+ ]
34
+ },
35
+ "infra": {
36
+ "sections": ["environments", "schema-changes", "rollback-plan", "monitoring"],
37
+ "criteria": [
38
+ "Change deployed to staging and verified before production",
39
+ "Rollback procedure documented and tested",
40
+ "Monitoring/alerting configured for the new resource",
41
+ "No hardcoded environment-specific values",
42
+ "Health check endpoint updated if applicable",
43
+ "SLA target defined: availability %, latency p99"
44
+ ]
45
+ },
46
+ "docs": {
47
+ "sections": ["audience", "content-outline"],
48
+ "criteria": [
49
+ "Documentation is accurate against current codebase",
50
+ "All code examples compile and run successfully",
51
+ "Reviewed by at least one person from the target audience",
52
+ "Table of contents or navigation is updated"
53
+ ]
54
+ },
55
+ "tech-debt": {
56
+ "sections": ["current-problem", "impact", "risk", "effort"],
57
+ "criteria": [
58
+ "Technical debt is resolved as described",
59
+ "All existing tests pass without modification",
60
+ "No new tech debt introduced (verified by linter/complexity check)",
61
+ "Estimated vs actual effort logged for future calibration",
62
+ "Before/after complexity metrics documented"
63
+ ]
64
+ },
65
+ "project": {
66
+ "sections": ["user-story", "milestones", "success-metrics"],
67
+ "criteria": [
68
+ "Project milestone deliverables are clearly defined",
69
+ "Success metrics are measurable and time-bound",
70
+ "Dependencies on other teams/specs are documented",
71
+ "Risk mitigation plan exists for high-risk items",
72
+ "Integration tests cover cross-module interactions"
73
+ ]
74
+ },
75
+ "agent": {
76
+ "sections": ["user-story", "tool-interface", "error-handling"],
77
+ "criteria": [
78
+ "Agent tool is registered with Zod schema and .describe() on all fields",
79
+ "Error messages include what failed and what to do next",
80
+ "Tool works correctly when called by an LLM (tested via MCP)",
81
+ "Rate limiting or license gate applied if needed",
82
+ "Idempotent: calling twice with same input produces same result"
83
+ ]
84
+ }
85
+ }