specweave 1.0.580 → 1.0.582
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/.claude-plugin/marketplace.json +2 -2
- package/dist/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +6 -1
- package/dist/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -1
- package/dist/src/cli/commands/doctor.d.ts.map +1 -1
- package/dist/src/cli/commands/doctor.js +12 -5
- package/dist/src/cli/commands/doctor.js.map +1 -1
- package/dist/src/core/config/types.d.ts +16 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/doctor/checkers/plugin-currency-checker.d.ts +26 -0
- package/dist/src/core/doctor/checkers/plugin-currency-checker.d.ts.map +1 -0
- package/dist/src/core/doctor/checkers/plugin-currency-checker.js +128 -0
- package/dist/src/core/doctor/checkers/plugin-currency-checker.js.map +1 -0
- package/dist/src/core/doctor/checkers/skill-currency-checker.d.ts +25 -0
- package/dist/src/core/doctor/checkers/skill-currency-checker.d.ts.map +1 -0
- package/dist/src/core/doctor/checkers/skill-currency-checker.js +98 -0
- package/dist/src/core/doctor/checkers/skill-currency-checker.js.map +1 -0
- package/dist/src/core/doctor/doctor.d.ts.map +1 -1
- package/dist/src/core/doctor/doctor.js +4 -0
- package/dist/src/core/doctor/doctor.js.map +1 -1
- package/dist/src/core/doctor/types.d.ts +7 -0
- package/dist/src/core/doctor/types.d.ts.map +1 -1
- package/dist/src/core/doctor/types.js.map +1 -1
- package/dist/src/core/hooks/LifecycleHookDispatcher.d.ts +6 -1
- package/dist/src/core/hooks/LifecycleHookDispatcher.d.ts.map +1 -1
- package/dist/src/core/hooks/LifecycleHookDispatcher.js +66 -8
- package/dist/src/core/hooks/LifecycleHookDispatcher.js.map +1 -1
- package/dist/src/core/hooks/handlers/banner-check.d.ts +42 -0
- package/dist/src/core/hooks/handlers/banner-check.d.ts.map +1 -0
- package/dist/src/core/hooks/handlers/banner-check.js +180 -0
- package/dist/src/core/hooks/handlers/banner-check.js.map +1 -0
- package/dist/src/core/hooks/handlers/banner-state.d.ts +44 -0
- package/dist/src/core/hooks/handlers/banner-state.d.ts.map +1 -0
- package/dist/src/core/hooks/handlers/banner-state.js +100 -0
- package/dist/src/core/hooks/handlers/banner-state.js.map +1 -0
- package/dist/src/core/hooks/handlers/user-prompt-submit.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/user-prompt-submit.js +16 -0
- package/dist/src/core/hooks/handlers/user-prompt-submit.js.map +1 -1
- package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
- package/dist/src/core/increment/ac-status-manager.js +6 -1
- package/dist/src/core/increment/ac-status-manager.js.map +1 -1
- package/dist/src/core/increment/status-commands.d.ts.map +1 -1
- package/dist/src/core/increment/status-commands.js +4 -1
- package/dist/src/core/increment/status-commands.js.map +1 -1
- package/dist/src/core/specs/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/specs/spec-content-sync.js +8 -4
- package/dist/src/core/specs/spec-content-sync.js.map +1 -1
- package/dist/src/sync/sync-coordinator.d.ts +14 -4
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +100 -38
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/package.json +2 -2
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +6 -1
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -1
- package/plugins/specweave/skills/ado-mapper/SKILL.md +1 -0
- package/plugins/specweave/skills/ado-multi-project/SKILL.md +1 -0
- package/plugins/specweave/skills/ado-resource-validator/SKILL.md +1 -0
- package/plugins/specweave/skills/ado-sync/SKILL.md +1 -0
- package/plugins/specweave/skills/analytics/SKILL.md +1 -0
- package/plugins/specweave/skills/architect/SKILL.md +1 -0
- package/plugins/specweave/skills/auto/SKILL.md +1 -0
- package/plugins/specweave/skills/brainstorm/SKILL.md +1 -0
- package/plugins/specweave/skills/close-all/SKILL.md +1 -0
- package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -0
- package/plugins/specweave/skills/debug/SKILL.md +1 -0
- package/plugins/specweave/skills/diagrams/SKILL.md +1 -0
- package/plugins/specweave/skills/do/SKILL.md +1 -0
- package/plugins/specweave/skills/done/SKILL.md +1 -0
- package/plugins/specweave/skills/e2e/SKILL.md +1 -0
- package/plugins/specweave/skills/github-multi-project/SKILL.md +1 -0
- package/plugins/specweave/skills/github-sync/SKILL.md +1 -0
- package/plugins/specweave/skills/grill/SKILL.md +1 -0
- package/plugins/specweave/skills/help/SKILL.md +1 -0
- package/plugins/specweave/skills/image/SKILL.md +1 -0
- package/plugins/specweave/skills/import/SKILL.md +1 -0
- package/plugins/specweave/skills/increment/SKILL.md +1 -0
- package/plugins/specweave/skills/jira-mapper/SKILL.md +1 -0
- package/plugins/specweave/skills/jira-resource-validator/SKILL.md +1 -0
- package/plugins/specweave/skills/jira-sync/SKILL.md +1 -0
- package/plugins/specweave/skills/judge-llm/SKILL.md +1 -0
- package/plugins/specweave/skills/multi-project/SKILL.md +1 -0
- package/plugins/specweave/skills/npm/SKILL.md +1 -0
- package/plugins/specweave/skills/plan/SKILL.md +1 -0
- package/plugins/specweave/skills/pm/SKILL.md +1 -0
- package/plugins/specweave/skills/pr/SKILL.md +1 -0
- package/plugins/specweave/skills/pr-review/SKILL.md +1 -0
- package/plugins/specweave/skills/progress-sync/SKILL.md +1 -0
- package/plugins/specweave/skills/release-expert/SKILL.md +1 -0
- package/plugins/specweave/skills/remotion/SKILL.md +1 -0
- package/plugins/specweave/skills/skill-gen/SKILL.md +9 -0
- package/plugins/specweave/skills/skill-refine/SKILL.md +1 -0
- package/plugins/specweave/skills/sync-docs/SKILL.md +1 -0
- package/plugins/specweave/skills/tdd-cycle/SKILL.md +1 -0
- package/plugins/specweave/skills/tdd-green/SKILL.md +1 -0
- package/plugins/specweave/skills/tdd-red/SKILL.md +1 -0
- package/plugins/specweave/skills/tdd-refactor/SKILL.md +1 -0
- package/plugins/specweave/skills/team-build/SKILL.md +1 -0
- package/plugins/specweave/skills/team-lead/SKILL.md +1 -0
- package/plugins/specweave/skills/team-merge/SKILL.md +1 -0
- package/plugins/specweave/skills/validate/SKILL.md +1 -0
- package/plugins/specweave/skills/video/SKILL.md +1 -0
|
@@ -34,6 +34,13 @@ export interface DoctorOptions {
|
|
|
34
34
|
fix?: boolean;
|
|
35
35
|
quick?: boolean;
|
|
36
36
|
skipExternal?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Suppress all stdout output (preserves exit code from summary.failures).
|
|
39
|
+
* Used by the session-start banner hook (increment 0796) which calls
|
|
40
|
+
* doctor for its side-effect (`runDoctor` returns a report) but doesn't
|
|
41
|
+
* want to pollute the user's terminal. ADR 0796-04.
|
|
42
|
+
*/
|
|
43
|
+
quiet?: boolean;
|
|
37
44
|
}
|
|
38
45
|
export interface HealthChecker {
|
|
39
46
|
category: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/doctor/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/doctor/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAKzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/doctor/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/doctor/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqDH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -91,7 +91,12 @@ export declare class LifecycleHookDispatcher {
|
|
|
91
91
|
*/
|
|
92
92
|
private static updateDocsLinks;
|
|
93
93
|
/**
|
|
94
|
-
* Log error without propagating
|
|
94
|
+
* Log error without propagating.
|
|
95
|
+
*
|
|
96
|
+
* 0696 hotfix: when projectRoot is provided, also persist the error
|
|
97
|
+
* (with full stack) to .specweave/logs/hooks.log. Both the directory
|
|
98
|
+
* creation and the file append are wrapped in try/catch so a locked
|
|
99
|
+
* filesystem or missing directory never blocks hook execution.
|
|
95
100
|
*/
|
|
96
101
|
private static logError;
|
|
97
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifecycleHookDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/LifecycleHookDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"LifecycleHookDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/LifecycleHookDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,uBAAuB;IAClC;;;;;OAKG;WACU,kBAAkB,CAC7B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAwChB;;;;;;OAMG;WACU,eAAe,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,eAAe,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAClD,OAAO,CAAC,IAAI,CAAC;IAkFhB;;;;;;;;OAQG;WACU,eAAe,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC;IAmM/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAUzB;;;OAGG;mBACkB,mBAAmB;IAwBxC;;;OAGG;mBACkB,WAAW;IAahC;;OAEG;mBACkB,eAAe;IAQpC;;;;;;;;OAQG;mBACkB,eAAe;IA6EpC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;CAwCxB"}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Part of increment 0298: Hook Lifecycle Wiring
|
|
13
13
|
*/
|
|
14
|
+
import { appendFileSync, mkdirSync } from 'fs';
|
|
15
|
+
import path from 'path';
|
|
14
16
|
import { ConfigManager } from '../config/config-manager.js';
|
|
15
17
|
/**
|
|
16
18
|
* Dispatches configured actions at lifecycle hook points.
|
|
@@ -190,9 +192,16 @@ export class LifecycleHookDispatcher {
|
|
|
190
192
|
}
|
|
191
193
|
}
|
|
192
194
|
const shouldSyncLivingDocs = doneConfig.sync_living_docs === true && autoSync && !perIncrementSkip;
|
|
193
|
-
// v1.0.357: Support closing issues for ALL providers (JIRA/ADO/GitHub)
|
|
195
|
+
// v1.0.357 + 0696: Support closing issues for ALL providers (JIRA/ADO/GitHub).
|
|
194
196
|
// close_github_issue is the legacy flag; close_external_issue is the new generic one.
|
|
195
|
-
// SyncCoordinator
|
|
197
|
+
// SyncCoordinator.syncIncrementClosure() closes every enabled provider using a
|
|
198
|
+
// four-source fallback for the issue key:
|
|
199
|
+
// 1. per-US frontmatter external_tools.{jira.key|ado.id}
|
|
200
|
+
// 2. per-US external_id
|
|
201
|
+
// 3. metadata.{jira.issue | ado.work_item_id} (legacy)
|
|
202
|
+
// 4. metadata.externalLinks.{jira.epicKey | ado.workItemId|featureId} (current standard)
|
|
203
|
+
// Per-provider closure errors are pushed into the returned SyncResult.errors[]
|
|
204
|
+
// and forwarded into result.syncErrors (and .specweave/logs/hooks.log) below.
|
|
196
205
|
const shouldCloseIssue = doneConfig.close_github_issue === true
|
|
197
206
|
|| doneConfig.close_external_issue === true
|
|
198
207
|
|| doneConfig.close_jira_issue === true;
|
|
@@ -229,6 +238,8 @@ export class LifecycleHookDispatcher {
|
|
|
229
238
|
}
|
|
230
239
|
}
|
|
231
240
|
// STEP 2: Run closure sync for JIRA/ADO (GitHub already handled by Step 1 via LivingDocsSync).
|
|
241
|
+
// 0696 hotfix: forward per-provider errors from SyncCoordinator into result.syncErrors
|
|
242
|
+
// AND persist them to .specweave/logs/hooks.log via logError.
|
|
232
243
|
const syncClosure = async () => {
|
|
233
244
|
if (!shouldCloseIssue)
|
|
234
245
|
return;
|
|
@@ -238,13 +249,19 @@ export class LifecycleHookDispatcher {
|
|
|
238
249
|
projectRoot,
|
|
239
250
|
incrementId,
|
|
240
251
|
});
|
|
241
|
-
await coordinator.syncIncrementClosure();
|
|
252
|
+
const closureResult = await coordinator.syncIncrementClosure();
|
|
242
253
|
result.syncSuccess.push('Closure sync completed');
|
|
254
|
+
if (closureResult && Array.isArray(closureResult.errors) && closureResult.errors.length > 0) {
|
|
255
|
+
for (const err of closureResult.errors) {
|
|
256
|
+
result.syncErrors.push(err);
|
|
257
|
+
}
|
|
258
|
+
LifecycleHookDispatcher.logError('onIncrementDone:closure', new Error(`Provider closure errors for ${incrementId}: ${closureResult.errors.join('; ')}`), projectRoot);
|
|
259
|
+
}
|
|
243
260
|
}
|
|
244
261
|
catch (error) {
|
|
245
262
|
const msg = error instanceof Error ? error.message : String(error);
|
|
246
263
|
result.syncErrors.push(`Closure sync failed: ${msg}`);
|
|
247
|
-
LifecycleHookDispatcher.logError('onIncrementDone:closure', error);
|
|
264
|
+
LifecycleHookDispatcher.logError('onIncrementDone:closure', error, projectRoot);
|
|
248
265
|
}
|
|
249
266
|
};
|
|
250
267
|
await syncClosure();
|
|
@@ -424,12 +441,53 @@ export class LifecycleHookDispatcher {
|
|
|
424
441
|
}
|
|
425
442
|
}
|
|
426
443
|
/**
|
|
427
|
-
* Log error without propagating
|
|
444
|
+
* Log error without propagating.
|
|
445
|
+
*
|
|
446
|
+
* 0696 hotfix: when projectRoot is provided, also persist the error
|
|
447
|
+
* (with full stack) to .specweave/logs/hooks.log. Both the directory
|
|
448
|
+
* creation and the file append are wrapped in try/catch so a locked
|
|
449
|
+
* filesystem or missing directory never blocks hook execution.
|
|
428
450
|
*/
|
|
429
|
-
static logError(method, error) {
|
|
451
|
+
static logError(method, error, projectRoot) {
|
|
430
452
|
const message = error instanceof Error ? error.message : String(error);
|
|
431
|
-
|
|
432
|
-
|
|
453
|
+
const stack = error instanceof Error && error.stack ? error.stack : '';
|
|
454
|
+
const timestamp = new Date().toISOString();
|
|
455
|
+
const logLine = `[${timestamp}] [LifecycleHookDispatcher.${method}] Hook dispatch error: ${message}`;
|
|
456
|
+
// Always write to stderr first (backwards-compatible behavior).
|
|
457
|
+
try {
|
|
458
|
+
process.stderr.write(`${logLine}\n`);
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
// Ignore stderr write failures (tests often replace streams).
|
|
462
|
+
}
|
|
463
|
+
// 0696: persist to .specweave/logs/hooks.log when projectRoot is known.
|
|
464
|
+
if (!projectRoot)
|
|
465
|
+
return;
|
|
466
|
+
try {
|
|
467
|
+
const logsDir = path.join(projectRoot, '.specweave', 'logs');
|
|
468
|
+
try {
|
|
469
|
+
mkdirSync(logsDir, { recursive: true });
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
472
|
+
// Directory already exists or cannot be created — appendFileSync
|
|
473
|
+
// will raise below if the path is truly unusable.
|
|
474
|
+
}
|
|
475
|
+
const logFile = path.join(logsDir, 'hooks.log');
|
|
476
|
+
const payload = stack
|
|
477
|
+
? `${logLine}\n${stack}\n`
|
|
478
|
+
: `${logLine}\n`;
|
|
479
|
+
appendFileSync(logFile, payload, 'utf8');
|
|
480
|
+
}
|
|
481
|
+
catch (writeErr) {
|
|
482
|
+
// Swallow-and-fallback: best-effort persistence must never throw.
|
|
483
|
+
try {
|
|
484
|
+
const m = writeErr instanceof Error ? writeErr.message : String(writeErr);
|
|
485
|
+
process.stderr.write(`[LifecycleHookDispatcher.logError] hooks.log write failed: ${m}\n`);
|
|
486
|
+
}
|
|
487
|
+
catch {
|
|
488
|
+
// Truly give up.
|
|
489
|
+
}
|
|
490
|
+
}
|
|
433
491
|
}
|
|
434
492
|
}
|
|
435
493
|
//# sourceMappingURL=LifecycleHookDispatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifecycleHookDispatcher.js","sourceRoot":"","sources":["../../../../src/core/hooks/LifecycleHookDispatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LifecycleHookDispatcher.js","sourceRoot":"","sources":["../../../../src/core/hooks/LifecycleHookDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-Start Banner Check (increment 0796 / T-004)
|
|
3
|
+
*
|
|
4
|
+
* Decides whether to surface a one-line update banner to the user at the
|
|
5
|
+
* start of a Claude Code session. Wraps the 0794 doctor checkers
|
|
6
|
+
* (PluginCurrencyChecker, SkillCurrencyChecker), throttles to once per
|
|
7
|
+
* the configured window (default 24h), and silently degrades on every
|
|
8
|
+
* imaginable failure mode (network, parse error, missing files, timeout).
|
|
9
|
+
* Hook callers must NEVER block prompt submission on this — see
|
|
10
|
+
* ADR 0796-03 (failure-mode policy).
|
|
11
|
+
*/
|
|
12
|
+
import { type BannerState } from './banner-state.js';
|
|
13
|
+
import type { HookContext } from './types.js';
|
|
14
|
+
interface BannerConfig {
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
throttleHours?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns true when the cached banner state should be discarded and
|
|
20
|
+
* `specweave doctor` re-run. ADR 0796-02 — Decision 2 lists six conditions
|
|
21
|
+
* any of which forces a re-check.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isThrottleExpired(state: BannerState | null, context: HookContext, config?: BannerConfig): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Format a banner string from the cached doctor result. Returns null when
|
|
26
|
+
* neither plugins nor skills have updates (no banner needed).
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatBanner(result: BannerState['lastResult']): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Orchestrate the banner check:
|
|
31
|
+
* 1. Read cached state.
|
|
32
|
+
* 2. If throttle not expired → return cached banner immediately (~10ms).
|
|
33
|
+
* 3. Otherwise run `specweave doctor --quick --skip-external --quiet`
|
|
34
|
+
* under an 800ms timeout, count warn/fail in the two new currency
|
|
35
|
+
* categories, persist the state, and return the formatted banner.
|
|
36
|
+
*
|
|
37
|
+
* Every error path returns null silently — the user's prompt is never
|
|
38
|
+
* blocked on a failure (ADR 0796-03).
|
|
39
|
+
*/
|
|
40
|
+
export declare function checkBanner(context: HookContext, config?: BannerConfig): Promise<string | null>;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=banner-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner-check.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/banner-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,OAAO,EAAE,WAAW,EACpB,MAAM,GAAE,YAAiB,GACxB,OAAO,CA8BT;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,GAAG,IAAI,CAsB7E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqDxB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-Start Banner Check (increment 0796 / T-004)
|
|
3
|
+
*
|
|
4
|
+
* Decides whether to surface a one-line update banner to the user at the
|
|
5
|
+
* start of a Claude Code session. Wraps the 0794 doctor checkers
|
|
6
|
+
* (PluginCurrencyChecker, SkillCurrencyChecker), throttles to once per
|
|
7
|
+
* the configured window (default 24h), and silently degrades on every
|
|
8
|
+
* imaginable failure mode (network, parse error, missing files, timeout).
|
|
9
|
+
* Hook callers must NEVER block prompt submission on this — see
|
|
10
|
+
* ADR 0796-03 (failure-mode policy).
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, statSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { runDoctor } from '../../doctor/doctor.js';
|
|
16
|
+
import { readBannerState, writeBannerStateAtomic, } from './banner-state.js';
|
|
17
|
+
const DEFAULT_THROTTLE_HOURS = 24;
|
|
18
|
+
const MIN_THROTTLE_HOURS = 1;
|
|
19
|
+
const MAX_THROTTLE_HOURS = 168;
|
|
20
|
+
const DOCTOR_TIMEOUT_MS = 800;
|
|
21
|
+
/**
|
|
22
|
+
* Returns true when the cached banner state should be discarded and
|
|
23
|
+
* `specweave doctor` re-run. ADR 0796-02 — Decision 2 lists six conditions
|
|
24
|
+
* any of which forces a re-check.
|
|
25
|
+
*/
|
|
26
|
+
export function isThrottleExpired(state, context, config = {}) {
|
|
27
|
+
if (!state)
|
|
28
|
+
return true;
|
|
29
|
+
if (state.version !== 1)
|
|
30
|
+
return true;
|
|
31
|
+
const throttleHours = clampThrottleHours(config.throttleHours ?? DEFAULT_THROTTLE_HOURS);
|
|
32
|
+
const throttleMs = throttleHours * 3600 * 1000;
|
|
33
|
+
const lastCheckMs = Date.parse(state.lastCheckAt);
|
|
34
|
+
if (Number.isNaN(lastCheckMs))
|
|
35
|
+
return true;
|
|
36
|
+
// Math.abs — treat clock skew (negative elapsed) as expired
|
|
37
|
+
if (Math.abs(Date.now() - lastCheckMs) > throttleMs)
|
|
38
|
+
return true;
|
|
39
|
+
// Watch the three files that can change update visibility outside the
|
|
40
|
+
// throttle window. Missing files are tolerated (skip the comparison).
|
|
41
|
+
const watchPaths = [
|
|
42
|
+
context.configPath,
|
|
43
|
+
join(homedir(), '.claude', 'plugins', 'installed_plugins.json'),
|
|
44
|
+
join(context.projectRoot, 'vskill.lock'),
|
|
45
|
+
];
|
|
46
|
+
for (const p of watchPaths) {
|
|
47
|
+
if (!existsSync(p))
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
if (statSync(p).mtimeMs > lastCheckMs)
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Stat failure → re-check to be safe
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Format a banner string from the cached doctor result. Returns null when
|
|
62
|
+
* neither plugins nor skills have updates (no banner needed).
|
|
63
|
+
*/
|
|
64
|
+
export function formatBanner(result) {
|
|
65
|
+
const total = (result.pluginUpdates ?? 0) + (result.skillUpdates ?? 0);
|
|
66
|
+
if (total <= 0)
|
|
67
|
+
return null;
|
|
68
|
+
const parts = [];
|
|
69
|
+
if (result.pluginUpdates > 0) {
|
|
70
|
+
parts.push(`${result.pluginUpdates} plugin${result.pluginUpdates === 1 ? '' : 's'}`);
|
|
71
|
+
}
|
|
72
|
+
if (result.skillUpdates > 0) {
|
|
73
|
+
parts.push(`${result.skillUpdates} skill${result.skillUpdates === 1 ? '' : 's'}`);
|
|
74
|
+
}
|
|
75
|
+
const lead = `[SpecWeave] ${parts.join(' and ')} have updates available.`;
|
|
76
|
+
const apply = [];
|
|
77
|
+
if (result.pluginUpdates > 0)
|
|
78
|
+
apply.push('specweave refresh-plugins');
|
|
79
|
+
if (result.skillUpdates > 0)
|
|
80
|
+
apply.push('vskill update --all');
|
|
81
|
+
return [
|
|
82
|
+
lead,
|
|
83
|
+
` Run: specweave doctor (full report)`,
|
|
84
|
+
` Or: ${apply.join(' && ')} (apply)`,
|
|
85
|
+
` Disable banner: set hooks.banner.disabled = true in .specweave/config.json`,
|
|
86
|
+
].join('\n');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Orchestrate the banner check:
|
|
90
|
+
* 1. Read cached state.
|
|
91
|
+
* 2. If throttle not expired → return cached banner immediately (~10ms).
|
|
92
|
+
* 3. Otherwise run `specweave doctor --quick --skip-external --quiet`
|
|
93
|
+
* under an 800ms timeout, count warn/fail in the two new currency
|
|
94
|
+
* categories, persist the state, and return the formatted banner.
|
|
95
|
+
*
|
|
96
|
+
* Every error path returns null silently — the user's prompt is never
|
|
97
|
+
* blocked on a failure (ADR 0796-03).
|
|
98
|
+
*/
|
|
99
|
+
export async function checkBanner(context, config = {}) {
|
|
100
|
+
if (config.disabled === true)
|
|
101
|
+
return null;
|
|
102
|
+
let state = null;
|
|
103
|
+
try {
|
|
104
|
+
state = readBannerState(context.stateDir);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
state = null;
|
|
108
|
+
}
|
|
109
|
+
if (!isThrottleExpired(state, context, config)) {
|
|
110
|
+
return state ? formatBanner(state.lastResult) : null;
|
|
111
|
+
}
|
|
112
|
+
// Cold path: run doctor under timeout
|
|
113
|
+
const doctorPromise = runDoctor(context.projectRoot, {
|
|
114
|
+
quick: true,
|
|
115
|
+
skipExternal: true,
|
|
116
|
+
quiet: true,
|
|
117
|
+
}).catch(() => null);
|
|
118
|
+
const timeoutPromise = new Promise((resolve) => setTimeout(() => resolve(null), DOCTOR_TIMEOUT_MS));
|
|
119
|
+
let report = null;
|
|
120
|
+
try {
|
|
121
|
+
report = await Promise.race([doctorPromise, timeoutPromise]);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
report = null;
|
|
125
|
+
}
|
|
126
|
+
if (!report)
|
|
127
|
+
return null;
|
|
128
|
+
const pluginUpdates = countOutdatedInCategory(report, 'Plugin Currency');
|
|
129
|
+
const skillUpdates = countOutdatedInCategory(report, 'Skill Currency');
|
|
130
|
+
const newState = {
|
|
131
|
+
version: 1,
|
|
132
|
+
lastCheckAt: new Date().toISOString(),
|
|
133
|
+
lastResult: {
|
|
134
|
+
pluginUpdates,
|
|
135
|
+
skillUpdates,
|
|
136
|
+
doctorStatus: pickStatus(report),
|
|
137
|
+
},
|
|
138
|
+
lastBannerShownAt: pluginUpdates + skillUpdates > 0 ? new Date().toISOString() : (state?.lastBannerShownAt ?? null),
|
|
139
|
+
};
|
|
140
|
+
try {
|
|
141
|
+
writeBannerStateAtomic(context.stateDir, newState);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Persist failure — still return the banner this turn so we don't lose the signal
|
|
145
|
+
}
|
|
146
|
+
return formatBanner(newState.lastResult);
|
|
147
|
+
}
|
|
148
|
+
function clampThrottleHours(h) {
|
|
149
|
+
if (!Number.isFinite(h))
|
|
150
|
+
return DEFAULT_THROTTLE_HOURS;
|
|
151
|
+
return Math.min(Math.max(h, MIN_THROTTLE_HOURS), MAX_THROTTLE_HOURS);
|
|
152
|
+
}
|
|
153
|
+
function countOutdatedInCategory(report, categoryName) {
|
|
154
|
+
const cat = report.categories.find((c) => c.category === categoryName);
|
|
155
|
+
if (!cat)
|
|
156
|
+
return 0;
|
|
157
|
+
// Parse the message: "N plugin install(s) outdated" / "N skill(s) outdated"
|
|
158
|
+
// Fall back to "1 if status is warn" — count is informational, banner only
|
|
159
|
+
// distinguishes zero vs non-zero for the printing decision.
|
|
160
|
+
for (const check of cat.checks) {
|
|
161
|
+
if (check.status !== 'warn' && check.status !== 'fail')
|
|
162
|
+
continue;
|
|
163
|
+
const m = /^(\d+)\s/.exec(check.message);
|
|
164
|
+
if (m)
|
|
165
|
+
return parseInt(m[1], 10);
|
|
166
|
+
return 1; // warn/fail without a number → at least 1 outdated
|
|
167
|
+
}
|
|
168
|
+
return 0;
|
|
169
|
+
}
|
|
170
|
+
function pickStatus(report) {
|
|
171
|
+
const interesting = report.categories.filter((c) => c.category === 'Plugin Currency' || c.category === 'Skill Currency');
|
|
172
|
+
if (interesting.some((c) => c.status === 'fail'))
|
|
173
|
+
return 'fail';
|
|
174
|
+
if (interesting.some((c) => c.status === 'warn'))
|
|
175
|
+
return 'warn';
|
|
176
|
+
if (interesting.every((c) => c.status === 'skip'))
|
|
177
|
+
return 'skip';
|
|
178
|
+
return 'pass';
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=banner-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner-check.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/banner-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Banner Throttle State (increment 0796 / T-003)
|
|
3
|
+
*
|
|
4
|
+
* Persists the result of the most recent session-start banner check to
|
|
5
|
+
* `<.specweave/state>/banner-last-check.json`. Used by the
|
|
6
|
+
* UserPromptSubmit hook to short-circuit subsequent prompts within the
|
|
7
|
+
* configured throttle window without re-running `specweave doctor`.
|
|
8
|
+
*
|
|
9
|
+
* Atomic write semantics: the new state is written to `*.tmp` first, then
|
|
10
|
+
* `fs.renameSync` is used to swap it into place. This prevents partial
|
|
11
|
+
* reads when multiple Claude Code windows fire UserPromptSubmit hooks
|
|
12
|
+
* concurrently. Reads are tolerant — any malformed or schema-mismatched
|
|
13
|
+
* file is treated as "never checked" so a corrupt state file can never
|
|
14
|
+
* block prompt submission. ADR 0796-02 (throttle semantics), ADR 0796-03
|
|
15
|
+
* (failure-mode policy).
|
|
16
|
+
*/
|
|
17
|
+
declare const SCHEMA_VERSION: 1;
|
|
18
|
+
export interface BannerState {
|
|
19
|
+
version: typeof SCHEMA_VERSION;
|
|
20
|
+
lastCheckAt: string;
|
|
21
|
+
lastResult: {
|
|
22
|
+
pluginUpdates: number;
|
|
23
|
+
skillUpdates: number;
|
|
24
|
+
doctorStatus: 'pass' | 'warn' | 'fail' | 'skip';
|
|
25
|
+
};
|
|
26
|
+
/** ISO timestamp the banner was last shown to the user, or null if never. */
|
|
27
|
+
lastBannerShownAt: string | null;
|
|
28
|
+
}
|
|
29
|
+
export declare function bannerStatePath(stateDir: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Read the throttle state. Returns null when the file is missing,
|
|
32
|
+
* unparseable, or carries a schema version we don't understand. Never
|
|
33
|
+
* throws — this is the hot path for every UserPromptSubmit and must
|
|
34
|
+
* degrade silently.
|
|
35
|
+
*/
|
|
36
|
+
export declare function readBannerState(stateDir: string): BannerState | null;
|
|
37
|
+
/**
|
|
38
|
+
* Write the throttle state atomically. Creates the parent directory if
|
|
39
|
+
* missing. The temp file is removed on success (only the final file
|
|
40
|
+
* remains).
|
|
41
|
+
*/
|
|
42
|
+
export declare function writeBannerStateAtomic(stateDir: string, state: BannerState): void;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=banner-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner-state.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/banner-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,QAAA,MAAM,cAAc,EAAG,CAAU,CAAC;AAElC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KACjD,CAAC;IACF,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAiBpE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAcjF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Banner Throttle State (increment 0796 / T-003)
|
|
3
|
+
*
|
|
4
|
+
* Persists the result of the most recent session-start banner check to
|
|
5
|
+
* `<.specweave/state>/banner-last-check.json`. Used by the
|
|
6
|
+
* UserPromptSubmit hook to short-circuit subsequent prompts within the
|
|
7
|
+
* configured throttle window without re-running `specweave doctor`.
|
|
8
|
+
*
|
|
9
|
+
* Atomic write semantics: the new state is written to `*.tmp` first, then
|
|
10
|
+
* `fs.renameSync` is used to swap it into place. This prevents partial
|
|
11
|
+
* reads when multiple Claude Code windows fire UserPromptSubmit hooks
|
|
12
|
+
* concurrently. Reads are tolerant — any malformed or schema-mismatched
|
|
13
|
+
* file is treated as "never checked" so a corrupt state file can never
|
|
14
|
+
* block prompt submission. ADR 0796-02 (throttle semantics), ADR 0796-03
|
|
15
|
+
* (failure-mode policy).
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
const FILE_NAME = 'banner-last-check.json';
|
|
20
|
+
const SCHEMA_VERSION = 1;
|
|
21
|
+
export function bannerStatePath(stateDir) {
|
|
22
|
+
return join(stateDir, FILE_NAME);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Read the throttle state. Returns null when the file is missing,
|
|
26
|
+
* unparseable, or carries a schema version we don't understand. Never
|
|
27
|
+
* throws — this is the hot path for every UserPromptSubmit and must
|
|
28
|
+
* degrade silently.
|
|
29
|
+
*/
|
|
30
|
+
export function readBannerState(stateDir) {
|
|
31
|
+
const filePath = bannerStatePath(stateDir);
|
|
32
|
+
if (!existsSync(filePath))
|
|
33
|
+
return null;
|
|
34
|
+
let raw;
|
|
35
|
+
try {
|
|
36
|
+
raw = readFileSync(filePath, 'utf8');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
parsed = JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
if (!isBannerState(parsed))
|
|
49
|
+
return null;
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Write the throttle state atomically. Creates the parent directory if
|
|
54
|
+
* missing. The temp file is removed on success (only the final file
|
|
55
|
+
* remains).
|
|
56
|
+
*/
|
|
57
|
+
export function writeBannerStateAtomic(stateDir, state) {
|
|
58
|
+
if (!existsSync(stateDir)) {
|
|
59
|
+
mkdirSync(stateDir, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
const finalPath = bannerStatePath(stateDir);
|
|
62
|
+
const tmpPath = finalPath + '.tmp';
|
|
63
|
+
writeFileSync(tmpPath, JSON.stringify(state, null, 2) + '\n');
|
|
64
|
+
try {
|
|
65
|
+
renameSync(tmpPath, finalPath);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
// Best-effort cleanup so we don't leave orphaned .tmp files behind
|
|
69
|
+
try {
|
|
70
|
+
unlinkSync(tmpPath);
|
|
71
|
+
}
|
|
72
|
+
catch { /* ignore */ }
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function isBannerState(value) {
|
|
77
|
+
if (typeof value !== 'object' || value === null)
|
|
78
|
+
return false;
|
|
79
|
+
const v = value;
|
|
80
|
+
if (v.version !== SCHEMA_VERSION)
|
|
81
|
+
return false;
|
|
82
|
+
if (typeof v.lastCheckAt !== 'string')
|
|
83
|
+
return false;
|
|
84
|
+
if (!('lastBannerShownAt' in v))
|
|
85
|
+
return false;
|
|
86
|
+
if (v.lastBannerShownAt !== null && typeof v.lastBannerShownAt !== 'string')
|
|
87
|
+
return false;
|
|
88
|
+
if (typeof v.lastResult !== 'object' || v.lastResult === null)
|
|
89
|
+
return false;
|
|
90
|
+
const r = v.lastResult;
|
|
91
|
+
if (typeof r.pluginUpdates !== 'number')
|
|
92
|
+
return false;
|
|
93
|
+
if (typeof r.skillUpdates !== 'number')
|
|
94
|
+
return false;
|
|
95
|
+
const status = r.doctorStatus;
|
|
96
|
+
if (status !== 'pass' && status !== 'warn' && status !== 'fail' && status !== 'skip')
|
|
97
|
+
return false;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=banner-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner-state.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/banner-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt-submit.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/user-prompt-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,SAAS,EAA2B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/user-prompt-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,SAAS,EAA2B,MAAM,YAAY,CAAC;AA0HrE,eAAO,MAAM,MAAM,EAAE,SAoEpB,CAAC"}
|