@planu/cli 0.97.0 → 0.97.2

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 (55) hide show
  1. package/dist/cli/commands/install.d.ts.map +1 -1
  2. package/dist/cli/commands/install.js +1 -1
  3. package/dist/cli/commands/install.js.map +1 -1
  4. package/dist/engine/compliance-checker.js +3 -0
  5. package/dist/engine/compliance-checker.js.map +1 -1
  6. package/dist/engine/doc-generator/portal/portal-regenerator.d.ts.map +1 -1
  7. package/dist/engine/doc-generator/portal/portal-regenerator.js +7 -17
  8. package/dist/engine/doc-generator/portal/portal-regenerator.js.map +1 -1
  9. package/dist/engine/hooks/event-bus.d.ts +5 -0
  10. package/dist/engine/hooks/event-bus.d.ts.map +1 -1
  11. package/dist/engine/hooks/event-bus.js +14 -1
  12. package/dist/engine/hooks/event-bus.js.map +1 -1
  13. package/dist/engine/hooks/hook-engine.d.ts.map +1 -1
  14. package/dist/engine/hooks/hook-engine.js +1 -0
  15. package/dist/engine/hooks/hook-engine.js.map +1 -1
  16. package/dist/engine/hooks-reconciler.d.ts.map +1 -1
  17. package/dist/engine/hooks-reconciler.js +24 -35
  18. package/dist/engine/hooks-reconciler.js.map +1 -1
  19. package/dist/engine/jira-exporter.d.ts.map +1 -1
  20. package/dist/engine/jira-exporter.js +1 -0
  21. package/dist/engine/jira-exporter.js.map +1 -1
  22. package/dist/engine/skill-evaluator.d.ts.map +1 -1
  23. package/dist/engine/skill-evaluator.js +18 -0
  24. package/dist/engine/skill-evaluator.js.map +1 -1
  25. package/dist/engine/spec-quality-scorer.d.ts.map +1 -1
  26. package/dist/engine/spec-quality-scorer.js +10 -2
  27. package/dist/engine/spec-quality-scorer.js.map +1 -1
  28. package/dist/engine/token-optimizer/response-cache.d.ts.map +1 -1
  29. package/dist/engine/token-optimizer/response-cache.js +7 -2
  30. package/dist/engine/token-optimizer/response-cache.js.map +1 -1
  31. package/dist/engine/webhook/server.d.ts.map +1 -1
  32. package/dist/engine/webhook/server.js +3 -0
  33. package/dist/engine/webhook/server.js.map +1 -1
  34. package/dist/storage/base-store.d.ts.map +1 -1
  35. package/dist/storage/base-store.js +2 -1
  36. package/dist/storage/base-store.js.map +1 -1
  37. package/dist/tools/resolve-project-id.d.ts.map +1 -1
  38. package/dist/tools/resolve-project-id.js +6 -1
  39. package/dist/tools/resolve-project-id.js.map +1 -1
  40. package/dist/tools/start-hooks/configure.d.ts +4 -0
  41. package/dist/tools/start-hooks/configure.d.ts.map +1 -0
  42. package/dist/tools/start-hooks/configure.js +122 -0
  43. package/dist/tools/start-hooks/configure.js.map +1 -0
  44. package/dist/tools/start-hooks/engine.d.ts +13 -0
  45. package/dist/tools/start-hooks/engine.d.ts.map +1 -0
  46. package/dist/tools/start-hooks/engine.js +314 -0
  47. package/dist/tools/start-hooks/engine.js.map +1 -0
  48. package/dist/tools/start-hooks.d.ts +2 -23
  49. package/dist/tools/start-hooks.d.ts.map +1 -1
  50. package/dist/tools/start-hooks.js +4 -516
  51. package/dist/tools/start-hooks.js.map +1 -1
  52. package/dist/tools/update-status/index.d.ts.map +1 -1
  53. package/dist/tools/update-status/index.js +8 -2
  54. package/dist/tools/update-status/index.js.map +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,314 @@
1
+ // tools/start-hooks/engine.ts — Singleton state + lifecycle handlers for the hook engine.
2
+ import { HookEngine } from '../../engine/hooks/hook-engine.js';
3
+ import { EventBus } from '../../engine/hooks/event-bus.js';
4
+ import { FileWatcher } from '../../engine/hooks/file-watcher.js';
5
+ import { ConfigLoader } from '../../engine/hooks/config-loader.js';
6
+ import { Debouncer } from '../../engine/hooks/debouncer.js';
7
+ import { handleOnImplChange } from '../../engine/hooks/handlers/on-impl-change.js';
8
+ import { handleOnSpecChange } from '../../engine/hooks/handlers/on-spec-change.js';
9
+ import { handleOnPushCheck, getLastPushCheckResult, } from '../../engine/hooks/handlers/on-push-check.js';
10
+ import { handleOnSecurityCheck, isSecuritySensitiveFile, } from '../../engine/hooks/handlers/on-security-check.js';
11
+ import { subscribeStatusChangeHandler } from '../../engine/hooks/handlers/on-status-change.js';
12
+ import { listSpecs } from '../../storage/spec-store.js';
13
+ import { hashProjectPath } from '../../storage/base-store.js';
14
+ import { analyzeLivingSpec } from '../../engine/living-spec-analyzer.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Singleton state
17
+ // ---------------------------------------------------------------------------
18
+ let engineInstance = null;
19
+ let watcherInstance = null;
20
+ let debouncerInstance = null;
21
+ let configLoaderInstance = null;
22
+ export function getEngineInstance() {
23
+ return engineInstance;
24
+ }
25
+ export function getWatcherInstance() {
26
+ return watcherInstance;
27
+ }
28
+ export function getConfigLoaderInstance() {
29
+ return configLoaderInstance;
30
+ }
31
+ export function ensureHooksStarted(projectPath) {
32
+ if (engineInstance?.status().running) {
33
+ return;
34
+ }
35
+ void handleStartHooks({
36
+ projectPath,
37
+ hooks: [
38
+ 'on-save',
39
+ 'on-create',
40
+ 'on-delete',
41
+ 'on-commit',
42
+ 'on-impl-change',
43
+ 'on-spec-change',
44
+ 'on-push-check',
45
+ 'on-security-check',
46
+ ],
47
+ }).catch(() => {
48
+ // Silently swallow — hooks are best-effort
49
+ });
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // Start hooks
53
+ // ---------------------------------------------------------------------------
54
+ export async function handleStartHooks(args) {
55
+ if (engineInstance?.status().running) {
56
+ const status = engineInstance.status();
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: JSON.stringify({ message: 'Hook engine already running', ...status }, null, 2),
62
+ },
63
+ ],
64
+ };
65
+ }
66
+ const projectPath = args.projectPath;
67
+ const enabledHooks = args.hooks ?? [
68
+ 'on-save',
69
+ 'on-create',
70
+ 'on-delete',
71
+ 'on-impl-change',
72
+ 'on-spec-change',
73
+ 'on-security-check',
74
+ ];
75
+ configLoaderInstance = new ConfigLoader(projectPath);
76
+ const config = await configLoaderInstance.load();
77
+ const eventBus = new EventBus();
78
+ engineInstance = new HookEngine(eventBus);
79
+ watcherInstance = new FileWatcher({
80
+ rootDir: projectPath,
81
+ include: config.hooks['on-save']?.include,
82
+ exclude: config.hooks['on-save']?.exclude,
83
+ });
84
+ debouncerInstance = new Debouncer((event) => {
85
+ const hookTypes = getApplicableHookTypes(event);
86
+ for (const hookType of hookTypes) {
87
+ if (enabledHooks.includes(hookType)) {
88
+ void engineInstance?.dispatch(event, hookType);
89
+ }
90
+ }
91
+ }, { debounceMs: config.debounceMs, rateLimitPerFileMs: config.rateLimitPerFileMs });
92
+ watcherInstance.on('change', (event) => {
93
+ eventBus.emitEvent('file:change', {
94
+ path: event.path,
95
+ type: event.type,
96
+ timestamp: event.timestamp,
97
+ });
98
+ debouncerInstance?.push(event);
99
+ });
100
+ configLoaderInstance.startWatching();
101
+ engineInstance.start();
102
+ watcherInstance.start();
103
+ registerAdvancedHandlers(engineInstance, enabledHooks, projectPath, config);
104
+ const eventBusFromEngine = engineInstance.getEventBus();
105
+ subscribeStatusChangeHandler(eventBusFromEngine,
106
+ /* v8 ignore next 3 */ (_projectId) => Promise.resolve(true));
107
+ return {
108
+ content: [
109
+ {
110
+ type: 'text',
111
+ text: JSON.stringify({
112
+ message: 'Hook engine started',
113
+ projectPath,
114
+ enabledHooks,
115
+ config: {
116
+ debounceMs: config.debounceMs,
117
+ rateLimitPerFileMs: config.rateLimitPerFileMs,
118
+ },
119
+ }, null, 2),
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // Stop hooks
126
+ // ---------------------------------------------------------------------------
127
+ export async function handleStopHooks(_args) {
128
+ await Promise.resolve();
129
+ if (!engineInstance) {
130
+ return {
131
+ content: [{ type: 'text', text: JSON.stringify({ message: 'Hook engine not running' }) }],
132
+ };
133
+ }
134
+ engineInstance.stop();
135
+ watcherInstance?.close();
136
+ debouncerInstance?.dispose();
137
+ configLoaderInstance?.close();
138
+ const message = 'Hook engine stopped and resources cleaned up';
139
+ engineInstance = null;
140
+ watcherInstance = null;
141
+ debouncerInstance = null;
142
+ configLoaderInstance = null;
143
+ return { content: [{ type: 'text', text: JSON.stringify({ message }) }] };
144
+ }
145
+ // ---------------------------------------------------------------------------
146
+ // Hook status
147
+ // ---------------------------------------------------------------------------
148
+ export async function handleHookStatus() {
149
+ await Promise.resolve();
150
+ if (!engineInstance) {
151
+ return {
152
+ content: [
153
+ {
154
+ type: 'text',
155
+ text: JSON.stringify({
156
+ running: false,
157
+ activeHooks: [],
158
+ pendingEvents: 0,
159
+ telemetry: {},
160
+ eventHistory: 0,
161
+ }),
162
+ },
163
+ ],
164
+ };
165
+ }
166
+ const status = engineInstance.status();
167
+ const eventBus = engineInstance.getEventBus();
168
+ return {
169
+ content: [
170
+ {
171
+ type: 'text',
172
+ text: JSON.stringify({ ...status, eventHistory: eventBus.getFullHistory().length }, null, 2),
173
+ },
174
+ ],
175
+ };
176
+ }
177
+ // ---------------------------------------------------------------------------
178
+ // Private helpers
179
+ // ---------------------------------------------------------------------------
180
+ function getApplicableHookTypes(event) {
181
+ switch (event.type) {
182
+ case 'modify':
183
+ return ['on-save', 'on-impl-change', 'on-spec-change', 'on-security-check'];
184
+ case 'create':
185
+ return ['on-create', 'on-impl-change', 'on-spec-change', 'on-security-check'];
186
+ case 'delete':
187
+ return ['on-delete'];
188
+ /* v8 ignore next 2 */
189
+ default:
190
+ return [];
191
+ }
192
+ }
193
+ function specToMinimal(spec) {
194
+ return { id: spec.id, title: spec.title, status: spec.status, progressPath: spec.progressPath };
195
+ }
196
+ function makeAnalyzeSpecFn() {
197
+ return async (minimal, projectPath) => {
198
+ const specLike = {
199
+ id: minimal.id,
200
+ title: minimal.title,
201
+ slug: minimal.id
202
+ .toLowerCase()
203
+ .replace(/^spec-/, '')
204
+ .replace(/\s+/g, '-'),
205
+ status: minimal.status,
206
+ progressPath: minimal.progressPath,
207
+ };
208
+ const report = await analyzeLivingSpec(specLike, projectPath);
209
+ return {
210
+ completionPct: report.completionPercent,
211
+ progressUpdated: report.progressUpdated,
212
+ criterionResults: report.criteria.map((c) => ({
213
+ criterion: c.criterion,
214
+ met: c.status === 'met',
215
+ evidence: c.evidence,
216
+ })),
217
+ };
218
+ };
219
+ }
220
+ function registerAdvancedHandlers(engine, enabledHooks, projectPath, config) {
221
+ if (enabledHooks.includes('on-impl-change')) {
222
+ engine.register({
223
+ name: 'on-impl-change',
224
+ hookType: 'on-impl-change',
225
+ priority: 200,
226
+ execute: async (event) => {
227
+ const projectId = hashProjectPath(projectPath);
228
+ let specs = [];
229
+ try {
230
+ const fullSpecs = await listSpecs(projectId);
231
+ specs = fullSpecs.map(specToMinimal);
232
+ }
233
+ catch {
234
+ // Spec load failure — proceed without analysis
235
+ }
236
+ const analysisResult = await handleOnImplChange(event, projectPath, specs, makeAnalyzeSpecFn(), config.autoMarkDone !== false);
237
+ const firstSpecId = analysisResult
238
+ ? (analysisResult.specsAnalyzed[0]?.specId ?? null)
239
+ : null;
240
+ return {
241
+ hook: 'on-save',
242
+ specId: firstSpecId,
243
+ driftDelta: analysisResult ? analysisResult.specsAnalyzed.length : 0,
244
+ hashChanged: event.type === 'modify' || event.type === 'create',
245
+ annotationsValid: analysisResult !== undefined,
246
+ };
247
+ },
248
+ });
249
+ }
250
+ if (enabledHooks.includes('on-spec-change')) {
251
+ engine.register({
252
+ name: 'on-spec-change',
253
+ hookType: 'on-spec-change',
254
+ priority: 300,
255
+ execute: async (event) => {
256
+ await handleOnSpecChange(event, projectPath);
257
+ return {
258
+ hook: 'on-save',
259
+ specId: null,
260
+ driftDelta: 0,
261
+ hashChanged: event.type !== 'delete',
262
+ annotationsValid: true,
263
+ };
264
+ },
265
+ });
266
+ }
267
+ if (enabledHooks.includes('on-push-check')) {
268
+ engine.register({
269
+ name: 'on-push-check',
270
+ hookType: 'on-push-check',
271
+ priority: 150,
272
+ execute: async (event) => {
273
+ await handleOnPushCheck(event, projectPath);
274
+ const pushResult = getLastPushCheckResult(projectPath);
275
+ const findings = pushResult?.findings ?? [];
276
+ const driftWarnings = findings
277
+ .filter((f) => f.severity === 'warning')
278
+ .map((f) => f.message);
279
+ const HIGH_SEVERITY = ['critical', 'high'];
280
+ return {
281
+ hook: 'on-commit',
282
+ commitHash: event.path,
283
+ reconciledSpecs: [],
284
+ integrityResult: {
285
+ valid: findings.every((f) => !HIGH_SEVERITY.includes(f.severity)),
286
+ errors: findings
287
+ .filter((f) => HIGH_SEVERITY.includes(f.severity))
288
+ .map((f) => f.message),
289
+ },
290
+ driftWarnings,
291
+ };
292
+ },
293
+ });
294
+ }
295
+ if (enabledHooks.includes('on-security-check')) {
296
+ engine.register({
297
+ name: 'on-security-check',
298
+ hookType: 'on-security-check',
299
+ priority: 250,
300
+ execute: async (event) => {
301
+ await handleOnSecurityCheck(event, projectPath);
302
+ const isSensitive = isSecuritySensitiveFile(event.path);
303
+ return {
304
+ hook: 'on-save',
305
+ specId: null,
306
+ driftDelta: 0,
307
+ hashChanged: event.type !== 'delete',
308
+ annotationsValid: !isSensitive,
309
+ };
310
+ },
311
+ });
312
+ }
313
+ }
314
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/tools/start-hooks/engine.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,3 @@
1
- import type { ToolResult } from '../types/index.js';
2
- import type { StartHooksInput, StopHooksInput, ConfigureHooksInput } from '../types/file-hooks.js';
3
- import { HookEngine } from '../engine/hooks/hook-engine.js';
4
- import { FileWatcher } from '../engine/hooks/file-watcher.js';
5
- /**
6
- * Get the current engine instance (for testing/internal use).
7
- */
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;
16
- /**
17
- * Get the current watcher instance (for testing/internal use).
18
- */
19
- export declare function getWatcherInstance(): FileWatcher | null;
20
- export declare function handleStartHooks(args: StartHooksInput): Promise<ToolResult>;
21
- export declare function handleStopHooks(_args: StopHooksInput): Promise<ToolResult>;
22
- export declare function handleHookStatus(): Promise<ToolResult>;
23
- export declare function handleConfigureHooks(args: ConfigureHooksInput): Promise<ToolResult>;
1
+ export { getEngineInstance, getWatcherInstance, getConfigLoaderInstance, ensureHooksStarted, handleStartHooks, handleStopHooks, handleHookStatus, } from './start-hooks/engine.js';
2
+ export { handleConfigureHooks } from './start-hooks/configure.js';
24
3
  //# sourceMappingURL=start-hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACd,mBAAmB,EAGpB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AA2B9D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,IAAI,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAoB5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,IAAI,CAEvD;AAMD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAwOjF;AA0ED,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,CAoDzF"}
1
+ {"version":3,"file":"start-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}