specweave 0.28.68 → 0.29.1
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.md +3 -2
- package/README.md +19 -2
- package/dist/src/cli/commands/discrepancies.d.ts +89 -0
- package/dist/src/cli/commands/discrepancies.d.ts.map +1 -0
- package/dist/src/cli/commands/discrepancies.js +385 -0
- package/dist/src/cli/commands/discrepancies.js.map +1 -0
- package/dist/src/cli/commands/notifications.d.ts +70 -0
- package/dist/src/cli/commands/notifications.d.ts.map +1 -0
- package/dist/src/cli/commands/notifications.js +236 -0
- package/dist/src/cli/commands/notifications.js.map +1 -0
- package/dist/src/cli/commands/sync-logs.d.ts +54 -0
- package/dist/src/cli/commands/sync-logs.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-logs.js +240 -0
- package/dist/src/cli/commands/sync-logs.js.map +1 -0
- package/dist/src/cli/commands/sync-monitor.d.ts +42 -0
- package/dist/src/cli/commands/sync-monitor.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-monitor.js +191 -0
- package/dist/src/cli/commands/sync-monitor.js.map +1 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.d.ts +45 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.js +431 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -0
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.d.ts +66 -0
- package/dist/src/cli/workers/brownfield-worker.d.ts.map +1 -0
- package/dist/src/cli/workers/brownfield-worker.js +417 -0
- package/dist/src/cli/workers/brownfield-worker.js.map +1 -0
- package/dist/src/core/background/brownfield-launcher.d.ts +86 -0
- package/dist/src/core/background/brownfield-launcher.d.ts.map +1 -0
- package/dist/src/core/background/brownfield-launcher.js +295 -0
- package/dist/src/core/background/brownfield-launcher.js.map +1 -0
- package/dist/src/core/background/index.d.ts +2 -0
- package/dist/src/core/background/index.d.ts.map +1 -1
- package/dist/src/core/background/index.js +2 -0
- package/dist/src/core/background/index.js.map +1 -1
- package/dist/src/core/background/types.d.ts +23 -2
- package/dist/src/core/background/types.d.ts.map +1 -1
- package/dist/src/core/config/index.d.ts +1 -0
- package/dist/src/core/config/index.d.ts.map +1 -1
- package/dist/src/core/config/index.js +1 -0
- package/dist/src/core/config/index.js.map +1 -1
- package/dist/src/core/config/types.d.ts +6 -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/dashboard/dashboard-data.d.ts +156 -0
- package/dist/src/core/dashboard/dashboard-data.d.ts.map +1 -0
- package/dist/src/core/dashboard/dashboard-data.js +191 -0
- package/dist/src/core/dashboard/dashboard-data.js.map +1 -0
- package/dist/src/core/dashboard/index.d.ts +9 -0
- package/dist/src/core/dashboard/index.d.ts.map +1 -0
- package/dist/src/core/dashboard/index.js +9 -0
- package/dist/src/core/dashboard/index.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts +77 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js +286 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/index.d.ts +8 -0
- package/dist/src/core/discrepancy/analyzers/index.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/index.js +8 -0
- package/dist/src/core/discrepancy/analyzers/index.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts +96 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js +247 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js.map +1 -0
- package/dist/src/core/discrepancy/brownfield-manager.d.ts +88 -0
- package/dist/src/core/discrepancy/brownfield-manager.d.ts.map +1 -0
- package/dist/src/core/discrepancy/brownfield-manager.js +520 -0
- package/dist/src/core/discrepancy/brownfield-manager.js.map +1 -0
- package/dist/src/core/discrepancy/brownfield-types.d.ts +174 -0
- package/dist/src/core/discrepancy/brownfield-types.d.ts.map +1 -0
- package/dist/src/core/discrepancy/brownfield-types.js +11 -0
- package/dist/src/core/discrepancy/brownfield-types.js.map +1 -0
- package/dist/src/core/discrepancy/detector.d.ts +92 -0
- package/dist/src/core/discrepancy/detector.d.ts.map +1 -0
- package/dist/src/core/discrepancy/detector.js +346 -0
- package/dist/src/core/discrepancy/detector.js.map +1 -0
- package/dist/src/core/discrepancy/increment-generator.d.ts +51 -0
- package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -0
- package/dist/src/core/discrepancy/increment-generator.js +234 -0
- package/dist/src/core/discrepancy/increment-generator.js.map +1 -0
- package/dist/src/core/discrepancy/index.d.ts +18 -0
- package/dist/src/core/discrepancy/index.d.ts.map +1 -0
- package/dist/src/core/discrepancy/index.js +24 -0
- package/dist/src/core/discrepancy/index.js.map +1 -0
- package/dist/src/core/discrepancy/severity-classifier.d.ts +81 -0
- package/dist/src/core/discrepancy/severity-classifier.d.ts.map +1 -0
- package/dist/src/core/discrepancy/severity-classifier.js +289 -0
- package/dist/src/core/discrepancy/severity-classifier.js.map +1 -0
- package/dist/src/core/discrepancy/spec-parser.d.ts +74 -0
- package/dist/src/core/discrepancy/spec-parser.d.ts.map +1 -0
- package/dist/src/core/discrepancy/spec-parser.js +213 -0
- package/dist/src/core/discrepancy/spec-parser.js.map +1 -0
- package/dist/src/core/discrepancy/update-recommender.d.ts +77 -0
- package/dist/src/core/discrepancy/update-recommender.d.ts.map +1 -0
- package/dist/src/core/discrepancy/update-recommender.js +323 -0
- package/dist/src/core/discrepancy/update-recommender.js.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -16
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +31 -112
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/logs/index.d.ts +10 -0
- package/dist/src/core/logs/index.d.ts.map +1 -0
- package/dist/src/core/logs/index.js +10 -0
- package/dist/src/core/logs/index.js.map +1 -0
- package/dist/src/core/logs/log-aggregator.d.ts +130 -0
- package/dist/src/core/logs/log-aggregator.d.ts.map +1 -0
- package/dist/src/core/logs/log-aggregator.js +206 -0
- package/dist/src/core/logs/log-aggregator.js.map +1 -0
- package/dist/src/core/logs/log-exporter.d.ts +81 -0
- package/dist/src/core/logs/log-exporter.d.ts.map +1 -0
- package/dist/src/core/logs/log-exporter.js +141 -0
- package/dist/src/core/logs/log-exporter.js.map +1 -0
- package/dist/src/core/notifications/command-integration.d.ts +82 -0
- package/dist/src/core/notifications/command-integration.d.ts.map +1 -0
- package/dist/src/core/notifications/command-integration.js +80 -0
- package/dist/src/core/notifications/command-integration.js.map +1 -0
- package/dist/src/core/notifications/index.d.ts +12 -0
- package/dist/src/core/notifications/index.d.ts.map +1 -0
- package/dist/src/core/notifications/index.js +12 -0
- package/dist/src/core/notifications/index.js.map +1 -0
- package/dist/src/core/notifications/notification-display.d.ts +70 -0
- package/dist/src/core/notifications/notification-display.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-display.js +177 -0
- package/dist/src/core/notifications/notification-display.js.map +1 -0
- package/dist/src/core/notifications/notification-manager.d.ts +126 -0
- package/dist/src/core/notifications/notification-manager.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-manager.js +287 -0
- package/dist/src/core/notifications/notification-manager.js.map +1 -0
- package/dist/src/core/notifications/notification-types.d.ts +159 -0
- package/dist/src/core/notifications/notification-types.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-types.js +93 -0
- package/dist/src/core/notifications/notification-types.js.map +1 -0
- package/dist/src/core/scheduler/index.d.ts +11 -0
- package/dist/src/core/scheduler/index.d.ts.map +1 -0
- package/dist/src/core/scheduler/index.js +11 -0
- package/dist/src/core/scheduler/index.js.map +1 -0
- package/dist/src/core/scheduler/job-scheduler.d.ts +179 -0
- package/dist/src/core/scheduler/job-scheduler.d.ts.map +1 -0
- package/dist/src/core/scheduler/job-scheduler.js +282 -0
- package/dist/src/core/scheduler/job-scheduler.js.map +1 -0
- package/dist/src/core/scheduler/schedule-persistence.d.ts +83 -0
- package/dist/src/core/scheduler/schedule-persistence.d.ts.map +1 -0
- package/dist/src/core/scheduler/schedule-persistence.js +180 -0
- package/dist/src/core/scheduler/schedule-persistence.js.map +1 -0
- package/dist/src/core/scheduler/scheduled-job.d.ts +188 -0
- package/dist/src/core/scheduler/scheduled-job.d.ts.map +1 -0
- package/dist/src/core/scheduler/scheduled-job.js +182 -0
- package/dist/src/core/scheduler/scheduled-job.js.map +1 -0
- package/dist/src/core/sync/permission-enforcer.d.ts +206 -0
- package/dist/src/core/sync/permission-enforcer.d.ts.map +1 -0
- package/dist/src/core/sync/permission-enforcer.js +268 -0
- package/dist/src/core/sync/permission-enforcer.js.map +1 -0
- package/dist/src/core/sync/sync-audit-logger.d.ts +217 -0
- package/dist/src/core/sync/sync-audit-logger.d.ts.map +1 -0
- package/dist/src/core/sync/sync-audit-logger.js +327 -0
- package/dist/src/core/sync/sync-audit-logger.js.map +1 -0
- package/dist/src/core/sync/sync-interceptor.d.ts +190 -0
- package/dist/src/core/sync/sync-interceptor.d.ts.map +1 -0
- package/dist/src/core/sync/sync-interceptor.js +224 -0
- package/dist/src/core/sync/sync-interceptor.js.map +1 -0
- package/dist/src/core/types/increment-metadata.d.ts +5 -2
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/sync-config.d.ts +267 -0
- package/dist/src/core/types/sync-config.d.ts.map +1 -0
- package/dist/src/core/types/sync-config.js +304 -0
- package/dist/src/core/types/sync-config.js.map +1 -0
- package/dist/src/hooks/index.d.ts +11 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +11 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/platform.d.ts +125 -0
- package/dist/src/hooks/platform.d.ts.map +1 -0
- package/dist/src/hooks/platform.js +325 -0
- package/dist/src/hooks/platform.js.map +1 -0
- package/dist/src/hooks/processor.d.ts +20 -0
- package/dist/src/hooks/processor.d.ts.map +1 -0
- package/dist/src/hooks/processor.js +317 -0
- package/dist/src/hooks/processor.js.map +1 -0
- package/dist/src/hooks/scheduler-startup.d.ts +19 -0
- package/dist/src/hooks/scheduler-startup.d.ts.map +1 -0
- package/dist/src/hooks/scheduler-startup.js +92 -0
- package/dist/src/hooks/scheduler-startup.js.map +1 -0
- package/dist/src/hooks/session-start.d.ts +16 -0
- package/dist/src/hooks/session-start.d.ts.map +1 -0
- package/dist/src/hooks/session-start.js +92 -0
- package/dist/src/hooks/session-start.js.map +1 -0
- package/dist/src/importers/duplicate-detector.d.ts +13 -2
- package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
- package/dist/src/importers/duplicate-detector.js +21 -2
- package/dist/src/importers/duplicate-detector.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +41 -2
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +225 -38
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +7 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +30 -4
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/sync/ado-sync-wrapper.d.ts +137 -0
- package/dist/src/sync/ado-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/ado-sync-wrapper.js +148 -0
- package/dist/src/sync/ado-sync-wrapper.js.map +1 -0
- package/dist/src/sync/github-sync-wrapper.d.ts +195 -0
- package/dist/src/sync/github-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/github-sync-wrapper.js +220 -0
- package/dist/src/sync/github-sync-wrapper.js.map +1 -0
- package/dist/src/sync/jira-sync-wrapper.d.ts +155 -0
- package/dist/src/sync/jira-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/jira-sync-wrapper.js +175 -0
- package/dist/src/sync/jira-sync-wrapper.js.map +1 -0
- package/dist/src/utils/feature-id-derivation.d.ts +58 -0
- package/dist/src/utils/feature-id-derivation.d.ts.map +1 -0
- package/dist/src/utils/feature-id-derivation.js +77 -0
- package/dist/src/utils/feature-id-derivation.js.map +1 -0
- package/package.json +3 -1
- package/plugins/specweave/commands/specweave-discrepancies.md +141 -0
- package/plugins/specweave/commands/specweave-discrepancy-to-increment.md +160 -0
- package/plugins/specweave/commands/specweave-jobs.md +45 -2
- package/plugins/specweave/commands/specweave-notifications.md +92 -0
- package/plugins/specweave/commands/specweave-sync-logs.md +131 -0
- package/plugins/specweave/commands/specweave-sync-monitor.md +57 -0
- package/plugins/specweave/hooks/hooks.json +3 -3
- package/plugins/specweave/hooks/lib/scheduler-startup.sh +72 -0
- package/plugins/specweave/hooks/universal/dispatcher.mjs +246 -0
- package/plugins/specweave/hooks/universal/session-start.cmd +16 -0
- package/plugins/specweave/hooks/universal/session-start.ps1 +16 -0
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +14 -5
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +5 -2
- package/plugins/specweave/skills/discrepancy-viewer.md +154 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +46 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +69 -0
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +0 -26
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +0 -249
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +0 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +0 -28
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -156
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +0 -1
- package/dist/src/core/sync/bidirectional-engine.d.ts +0 -119
- package/dist/src/core/sync/bidirectional-engine.d.ts.map +0 -1
- package/dist/src/core/sync/bidirectional-engine.js +0 -359
- package/dist/src/core/sync/bidirectional-engine.js.map +0 -1
- package/dist/src/core/sync/conflict-resolver.d.ts +0 -66
- package/dist/src/core/sync/conflict-resolver.d.ts.map +0 -1
- package/dist/src/core/sync/conflict-resolver.js +0 -108
- package/dist/src/core/sync/conflict-resolver.js.map +0 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts +0 -55
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +0 -1
- package/dist/src/core/sync/enhanced-content-builder.js +0 -203
- package/dist/src/core/sync/enhanced-content-builder.js.map +0 -1
- package/dist/src/core/sync/folder-mapper.d.ts +0 -71
- package/dist/src/core/sync/folder-mapper.d.ts.map +0 -1
- package/dist/src/core/sync/folder-mapper.js +0 -203
- package/dist/src/core/sync/folder-mapper.js.map +0 -1
- package/dist/src/core/sync/label-detector.d.ts +0 -66
- package/dist/src/core/sync/label-detector.d.ts.map +0 -1
- package/dist/src/core/sync/label-detector.js +0 -224
- package/dist/src/core/sync/label-detector.js.map +0 -1
- package/dist/src/core/sync/performance-optimizer.d.ts +0 -153
- package/dist/src/core/sync/performance-optimizer.d.ts.map +0 -1
- package/dist/src/core/sync/performance-optimizer.js +0 -220
- package/dist/src/core/sync/performance-optimizer.js.map +0 -1
- package/dist/src/core/sync/profile-selector.d.ts +0 -52
- package/dist/src/core/sync/profile-selector.d.ts.map +0 -1
- package/dist/src/core/sync/profile-selector.js +0 -179
- package/dist/src/core/sync/profile-selector.js.map +0 -1
- package/dist/src/core/sync/profile-validator.d.ts +0 -52
- package/dist/src/core/sync/profile-validator.d.ts.map +0 -1
- package/dist/src/core/sync/profile-validator.js +0 -170
- package/dist/src/core/sync/profile-validator.js.map +0 -1
- package/dist/src/core/sync/rate-limiter.d.ts +0 -116
- package/dist/src/core/sync/rate-limiter.d.ts.map +0 -1
- package/dist/src/core/sync/rate-limiter.js +0 -308
- package/dist/src/core/sync/rate-limiter.js.map +0 -1
- package/dist/src/core/sync/retry-handler.d.ts +0 -98
- package/dist/src/core/sync/retry-handler.d.ts.map +0 -1
- package/dist/src/core/sync/retry-handler.js +0 -196
- package/dist/src/core/sync/retry-handler.js.map +0 -1
- package/dist/src/core/sync/retry-logic.d.ts +0 -64
- package/dist/src/core/sync/retry-logic.d.ts.map +0 -1
- package/dist/src/core/sync/retry-logic.js +0 -165
- package/dist/src/core/sync/retry-logic.js.map +0 -1
- package/dist/src/core/sync/status-cache.d.ts +0 -91
- package/dist/src/core/sync/status-cache.d.ts.map +0 -1
- package/dist/src/core/sync/status-cache.js +0 -140
- package/dist/src/core/sync/status-cache.js.map +0 -1
- package/dist/src/core/sync/status-mapper.d.ts +0 -69
- package/dist/src/core/sync/status-mapper.d.ts.map +0 -1
- package/dist/src/core/sync/status-mapper.js +0 -90
- package/dist/src/core/sync/status-mapper.js.map +0 -1
- package/dist/src/core/sync/status-sync-engine.d.ts +0 -162
- package/dist/src/core/sync/status-sync-engine.d.ts.map +0 -1
- package/dist/src/core/sync/status-sync-engine.js +0 -347
- package/dist/src/core/sync/status-sync-engine.js.map +0 -1
- package/dist/src/core/sync/sync-event-logger.d.ts +0 -113
- package/dist/src/core/sync/sync-event-logger.d.ts.map +0 -1
- package/dist/src/core/sync/sync-event-logger.js +0 -141
- package/dist/src/core/sync/sync-event-logger.js.map +0 -1
- package/dist/src/core/sync/time-range-selector.d.ts +0 -48
- package/dist/src/core/sync/time-range-selector.d.ts.map +0 -1
- package/dist/src/core/sync/time-range-selector.js +0 -224
- package/dist/src/core/sync/time-range-selector.js.map +0 -1
- package/dist/src/core/sync/types.d.ts +0 -52
- package/dist/src/core/sync/types.d.ts.map +0 -1
- package/dist/src/core/sync/types.js +0 -5
- package/dist/src/core/sync/types.js.map +0 -1
- package/dist/src/core/sync/workflow-detector.d.ts +0 -95
- package/dist/src/core/sync/workflow-detector.d.ts.map +0 -1
- package/dist/src/core/sync/workflow-detector.js +0 -175
- package/dist/src/core/sync/workflow-detector.js.map +0 -1
- package/plugins/specweave-github/lib/enhanced-github-sync.js +0 -220
- package/plugins/specweave-github/lib/enhanced-github-sync.ts +0 -322
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -134
- package/plugins/specweave-jira/lib/enhanced-jira-sync.ts +0 -196
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Platform Hook Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides platform detection and process spawning for Windows, macOS, and Linux.
|
|
5
|
+
* Optimized for hook execution with minimal overhead.
|
|
6
|
+
*
|
|
7
|
+
* @module hooks/platform
|
|
8
|
+
*/
|
|
9
|
+
import { SpawnOptions, ChildProcess } from 'child_process';
|
|
10
|
+
/**
|
|
11
|
+
* Platform types
|
|
12
|
+
*/
|
|
13
|
+
export type Platform = 'windows' | 'macos' | 'linux' | 'unknown';
|
|
14
|
+
/**
|
|
15
|
+
* WSL availability status
|
|
16
|
+
*/
|
|
17
|
+
export interface WslStatus {
|
|
18
|
+
available: boolean;
|
|
19
|
+
version?: 1 | 2;
|
|
20
|
+
defaultDistro?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get normalized platform identifier
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPlatform(): Platform;
|
|
26
|
+
/**
|
|
27
|
+
* Check if running on Windows
|
|
28
|
+
*/
|
|
29
|
+
export declare function isWindows(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Check if running on POSIX system (macOS, Linux)
|
|
32
|
+
*/
|
|
33
|
+
export declare function isPosix(): boolean;
|
|
34
|
+
export declare function checkWslStatus(): WslStatus;
|
|
35
|
+
/**
|
|
36
|
+
* Find project root by looking for .specweave directory
|
|
37
|
+
*
|
|
38
|
+
* @param startDir - Directory to start searching from
|
|
39
|
+
* @returns Project root path or null if not found
|
|
40
|
+
*/
|
|
41
|
+
export declare function findProjectRoot(startDir?: string): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Spawn a detached background process (cross-platform)
|
|
44
|
+
*
|
|
45
|
+
* On Windows: Uses 'start' command or direct spawn with detached option
|
|
46
|
+
* On POSIX: Uses spawn with detached + unref
|
|
47
|
+
*
|
|
48
|
+
* @param command - Command to run
|
|
49
|
+
* @param args - Arguments
|
|
50
|
+
* @param options - Spawn options
|
|
51
|
+
* @returns ChildProcess or null if spawn failed
|
|
52
|
+
*/
|
|
53
|
+
export declare function spawnDetached(command: string, args?: string[], options?: SpawnOptions): ChildProcess | null;
|
|
54
|
+
/**
|
|
55
|
+
* Spawn Node.js script in background (cross-platform)
|
|
56
|
+
*
|
|
57
|
+
* Optimized for spawning Node.js scripts as background daemons.
|
|
58
|
+
*
|
|
59
|
+
* @param scriptPath - Path to the Node.js script
|
|
60
|
+
* @param args - Arguments to pass to the script
|
|
61
|
+
* @param cwd - Working directory
|
|
62
|
+
* @returns ChildProcess or null if spawn failed
|
|
63
|
+
*/
|
|
64
|
+
export declare function spawnNodeBackground(scriptPath: string, args?: string[], cwd?: string): ChildProcess | null;
|
|
65
|
+
/**
|
|
66
|
+
* Read JSON file safely with error handling
|
|
67
|
+
*
|
|
68
|
+
* @param filePath - Path to JSON file
|
|
69
|
+
* @returns Parsed JSON or null if failed
|
|
70
|
+
*/
|
|
71
|
+
export declare function readJsonSafe<T = unknown>(filePath: string): T | null;
|
|
72
|
+
/**
|
|
73
|
+
* Write JSON file safely with atomic write
|
|
74
|
+
*
|
|
75
|
+
* @param filePath - Path to JSON file
|
|
76
|
+
* @param data - Data to write
|
|
77
|
+
* @returns true if successful, false otherwise
|
|
78
|
+
*/
|
|
79
|
+
export declare function writeJsonSafe(filePath: string, data: unknown): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Append to log file (creates directory if needed)
|
|
82
|
+
*
|
|
83
|
+
* @param logPath - Path to log file
|
|
84
|
+
* @param message - Message to append
|
|
85
|
+
*/
|
|
86
|
+
export declare function appendLog(logPath: string, message: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* Cross-platform file locking using directory creation
|
|
89
|
+
*
|
|
90
|
+
* mkdir is atomic on all platforms (Windows, macOS, Linux)
|
|
91
|
+
*/
|
|
92
|
+
export declare class FileLock {
|
|
93
|
+
private lockDir;
|
|
94
|
+
private pidFile;
|
|
95
|
+
private acquired;
|
|
96
|
+
constructor(lockPath: string);
|
|
97
|
+
/**
|
|
98
|
+
* Try to acquire lock
|
|
99
|
+
*
|
|
100
|
+
* @param staleLockSeconds - Consider lock stale after this many seconds
|
|
101
|
+
* @returns true if lock acquired, false if held by another process
|
|
102
|
+
*/
|
|
103
|
+
acquire(staleLockSeconds?: number): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Release the lock
|
|
106
|
+
*/
|
|
107
|
+
release(): void;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Hook result interface (matches Claude Code hook protocol)
|
|
111
|
+
*/
|
|
112
|
+
export interface HookResult {
|
|
113
|
+
continue: boolean;
|
|
114
|
+
systemMessage?: string;
|
|
115
|
+
error?: string;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Output hook result to stdout
|
|
119
|
+
*/
|
|
120
|
+
export declare function outputHookResult(result: HookResult): void;
|
|
121
|
+
/**
|
|
122
|
+
* Consume stdin (required for hooks that receive input)
|
|
123
|
+
*/
|
|
124
|
+
export declare function consumeStdin(): Promise<string>;
|
|
125
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/hooks/platform.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAS,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAaD;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAKtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAUD,wBAAgB,cAAc,IAAI,SAAS,CAyB1C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAa/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,YAAiB,GACzB,YAAY,GAAG,IAAI,CAoBrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,EAAO,EACnB,GAAG,CAAC,EAAE,MAAM,GACX,YAAY,GAAG,IAAI,CA8BrB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAUpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAetE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAYhE;AAED;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAK5B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,SAAM,GAAG,OAAO;IA2CxC;;OAEG;IACH,OAAO,IAAI,IAAI;CAUhB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAepD"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Platform Hook Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides platform detection and process spawning for Windows, macOS, and Linux.
|
|
5
|
+
* Optimized for hook execution with minimal overhead.
|
|
6
|
+
*
|
|
7
|
+
* @module hooks/platform
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from 'child_process';
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
/**
|
|
13
|
+
* Cached platform info (computed once at module load)
|
|
14
|
+
*/
|
|
15
|
+
const platformInfo = {
|
|
16
|
+
platform: process.platform,
|
|
17
|
+
isWindows: process.platform === 'win32',
|
|
18
|
+
isMacOS: process.platform === 'darwin',
|
|
19
|
+
isLinux: process.platform === 'linux',
|
|
20
|
+
isPosix: process.platform !== 'win32',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Get normalized platform identifier
|
|
24
|
+
*/
|
|
25
|
+
export function getPlatform() {
|
|
26
|
+
if (platformInfo.isWindows)
|
|
27
|
+
return 'windows';
|
|
28
|
+
if (platformInfo.isMacOS)
|
|
29
|
+
return 'macos';
|
|
30
|
+
if (platformInfo.isLinux)
|
|
31
|
+
return 'linux';
|
|
32
|
+
return 'unknown';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if running on Windows
|
|
36
|
+
*/
|
|
37
|
+
export function isWindows() {
|
|
38
|
+
return platformInfo.isWindows;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if running on POSIX system (macOS, Linux)
|
|
42
|
+
*/
|
|
43
|
+
export function isPosix() {
|
|
44
|
+
return platformInfo.isPosix;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check WSL availability on Windows
|
|
48
|
+
*
|
|
49
|
+
* Checks for WSL installation without requiring it.
|
|
50
|
+
* Returns cached result for performance.
|
|
51
|
+
*/
|
|
52
|
+
let wslStatusCache = null;
|
|
53
|
+
export function checkWslStatus() {
|
|
54
|
+
if (wslStatusCache !== null) {
|
|
55
|
+
return wslStatusCache;
|
|
56
|
+
}
|
|
57
|
+
if (!platformInfo.isWindows) {
|
|
58
|
+
wslStatusCache = { available: false };
|
|
59
|
+
return wslStatusCache;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
// Check if wsl.exe exists
|
|
63
|
+
const wslPath = path.join(process.env.SYSTEMROOT || 'C:\\Windows', 'System32', 'wsl.exe');
|
|
64
|
+
if (!fs.existsSync(wslPath)) {
|
|
65
|
+
wslStatusCache = { available: false };
|
|
66
|
+
return wslStatusCache;
|
|
67
|
+
}
|
|
68
|
+
// WSL exists - we could check version but keep it simple for now
|
|
69
|
+
wslStatusCache = { available: true };
|
|
70
|
+
return wslStatusCache;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
wslStatusCache = { available: false };
|
|
74
|
+
return wslStatusCache;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Find project root by looking for .specweave directory
|
|
79
|
+
*
|
|
80
|
+
* @param startDir - Directory to start searching from
|
|
81
|
+
* @returns Project root path or null if not found
|
|
82
|
+
*/
|
|
83
|
+
export function findProjectRoot(startDir = process.cwd()) {
|
|
84
|
+
let current = path.resolve(startDir);
|
|
85
|
+
const root = path.parse(current).root;
|
|
86
|
+
while (current !== root) {
|
|
87
|
+
const specweavePath = path.join(current, '.specweave');
|
|
88
|
+
if (fs.existsSync(specweavePath) && fs.statSync(specweavePath).isDirectory()) {
|
|
89
|
+
return current;
|
|
90
|
+
}
|
|
91
|
+
current = path.dirname(current);
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Spawn a detached background process (cross-platform)
|
|
97
|
+
*
|
|
98
|
+
* On Windows: Uses 'start' command or direct spawn with detached option
|
|
99
|
+
* On POSIX: Uses spawn with detached + unref
|
|
100
|
+
*
|
|
101
|
+
* @param command - Command to run
|
|
102
|
+
* @param args - Arguments
|
|
103
|
+
* @param options - Spawn options
|
|
104
|
+
* @returns ChildProcess or null if spawn failed
|
|
105
|
+
*/
|
|
106
|
+
export function spawnDetached(command, args = [], options = {}) {
|
|
107
|
+
try {
|
|
108
|
+
const spawnOptions = {
|
|
109
|
+
...options,
|
|
110
|
+
detached: true,
|
|
111
|
+
stdio: 'ignore',
|
|
112
|
+
windowsHide: true,
|
|
113
|
+
};
|
|
114
|
+
// Direct spawn with detached + windowsHide works on all platforms
|
|
115
|
+
// On Windows: windowsHide prevents console window, detached allows orphaning
|
|
116
|
+
// On POSIX: detached creates new process group, unref allows parent to exit
|
|
117
|
+
// NOTE: Previously used cmd.exe /c start /b on Windows, but that has
|
|
118
|
+
// argument escaping issues and loses exit codes. Direct spawn is more reliable.
|
|
119
|
+
const child = spawn(command, args, spawnOptions);
|
|
120
|
+
child.unref();
|
|
121
|
+
return child;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Spawn Node.js script in background (cross-platform)
|
|
129
|
+
*
|
|
130
|
+
* Optimized for spawning Node.js scripts as background daemons.
|
|
131
|
+
*
|
|
132
|
+
* @param scriptPath - Path to the Node.js script
|
|
133
|
+
* @param args - Arguments to pass to the script
|
|
134
|
+
* @param cwd - Working directory
|
|
135
|
+
* @returns ChildProcess or null if spawn failed
|
|
136
|
+
*/
|
|
137
|
+
export function spawnNodeBackground(scriptPath, args = [], cwd) {
|
|
138
|
+
const nodeExecutable = process.execPath; // Use same Node.js that's running this script
|
|
139
|
+
try {
|
|
140
|
+
const spawnOptions = {
|
|
141
|
+
cwd: cwd || process.cwd(),
|
|
142
|
+
detached: true,
|
|
143
|
+
stdio: 'ignore',
|
|
144
|
+
windowsHide: true,
|
|
145
|
+
env: {
|
|
146
|
+
...process.env,
|
|
147
|
+
SPECWEAVE_BACKGROUND_PROCESS: '1',
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
if (platformInfo.isWindows) {
|
|
151
|
+
// On Windows, spawn node directly with detached
|
|
152
|
+
// The windowsHide option prevents console window
|
|
153
|
+
const child = spawn(nodeExecutable, [scriptPath, ...args], spawnOptions);
|
|
154
|
+
child.unref();
|
|
155
|
+
return child;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// On POSIX, standard detached spawn
|
|
159
|
+
const child = spawn(nodeExecutable, [scriptPath, ...args], spawnOptions);
|
|
160
|
+
child.unref();
|
|
161
|
+
return child;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Read JSON file safely with error handling
|
|
170
|
+
*
|
|
171
|
+
* @param filePath - Path to JSON file
|
|
172
|
+
* @returns Parsed JSON or null if failed
|
|
173
|
+
*/
|
|
174
|
+
export function readJsonSafe(filePath) {
|
|
175
|
+
try {
|
|
176
|
+
if (!fs.existsSync(filePath)) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
180
|
+
return JSON.parse(content);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Write JSON file safely with atomic write
|
|
188
|
+
*
|
|
189
|
+
* @param filePath - Path to JSON file
|
|
190
|
+
* @param data - Data to write
|
|
191
|
+
* @returns true if successful, false otherwise
|
|
192
|
+
*/
|
|
193
|
+
export function writeJsonSafe(filePath, data) {
|
|
194
|
+
try {
|
|
195
|
+
const dir = path.dirname(filePath);
|
|
196
|
+
if (!fs.existsSync(dir)) {
|
|
197
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
198
|
+
}
|
|
199
|
+
// Atomic write: write to temp file, then rename
|
|
200
|
+
const tempPath = `${filePath}.tmp.${process.pid}`;
|
|
201
|
+
fs.writeFileSync(tempPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
202
|
+
fs.renameSync(tempPath, filePath);
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Append to log file (creates directory if needed)
|
|
211
|
+
*
|
|
212
|
+
* @param logPath - Path to log file
|
|
213
|
+
* @param message - Message to append
|
|
214
|
+
*/
|
|
215
|
+
export function appendLog(logPath, message) {
|
|
216
|
+
try {
|
|
217
|
+
const dir = path.dirname(logPath);
|
|
218
|
+
if (!fs.existsSync(dir)) {
|
|
219
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
220
|
+
}
|
|
221
|
+
const timestamp = new Date().toISOString().substring(11, 19); // HH:MM:SS
|
|
222
|
+
fs.appendFileSync(logPath, `[${timestamp}] ${message}\n`, 'utf-8');
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Silently ignore log failures
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Cross-platform file locking using directory creation
|
|
230
|
+
*
|
|
231
|
+
* mkdir is atomic on all platforms (Windows, macOS, Linux)
|
|
232
|
+
*/
|
|
233
|
+
export class FileLock {
|
|
234
|
+
constructor(lockPath) {
|
|
235
|
+
this.acquired = false;
|
|
236
|
+
this.lockDir = lockPath + '.lock.d';
|
|
237
|
+
this.pidFile = path.join(this.lockDir, 'pid');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Try to acquire lock
|
|
241
|
+
*
|
|
242
|
+
* @param staleLockSeconds - Consider lock stale after this many seconds
|
|
243
|
+
* @returns true if lock acquired, false if held by another process
|
|
244
|
+
*/
|
|
245
|
+
acquire(staleLockSeconds = 300) {
|
|
246
|
+
try {
|
|
247
|
+
// Try atomic mkdir
|
|
248
|
+
fs.mkdirSync(this.lockDir);
|
|
249
|
+
fs.writeFileSync(this.pidFile, String(process.pid), 'utf-8');
|
|
250
|
+
this.acquired = true;
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
if (err.code !== 'EEXIST') {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
// Lock exists - check if stale
|
|
258
|
+
try {
|
|
259
|
+
const lockPid = parseInt(fs.readFileSync(this.pidFile, 'utf-8').trim(), 10);
|
|
260
|
+
// Check if process is still running
|
|
261
|
+
if (!isNaN(lockPid)) {
|
|
262
|
+
try {
|
|
263
|
+
process.kill(lockPid, 0); // Signal 0 just checks existence
|
|
264
|
+
return false; // Process is running, lock is valid
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
// Process not running, check age
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Check lock age
|
|
271
|
+
const stat = fs.statSync(this.pidFile);
|
|
272
|
+
const ageSeconds = (Date.now() - stat.mtimeMs) / 1000;
|
|
273
|
+
if (ageSeconds > staleLockSeconds) {
|
|
274
|
+
// Stale lock - remove and retry
|
|
275
|
+
fs.rmSync(this.lockDir, { recursive: true, force: true });
|
|
276
|
+
return this.acquire(staleLockSeconds);
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Release the lock
|
|
287
|
+
*/
|
|
288
|
+
release() {
|
|
289
|
+
if (this.acquired) {
|
|
290
|
+
try {
|
|
291
|
+
fs.rmSync(this.lockDir, { recursive: true, force: true });
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// Ignore cleanup errors
|
|
295
|
+
}
|
|
296
|
+
this.acquired = false;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Output hook result to stdout
|
|
302
|
+
*/
|
|
303
|
+
export function outputHookResult(result) {
|
|
304
|
+
console.log(JSON.stringify(result));
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Consume stdin (required for hooks that receive input)
|
|
308
|
+
*/
|
|
309
|
+
export async function consumeStdin() {
|
|
310
|
+
return new Promise((resolve) => {
|
|
311
|
+
let data = '';
|
|
312
|
+
process.stdin.setEncoding('utf-8');
|
|
313
|
+
process.stdin.on('data', (chunk) => {
|
|
314
|
+
data += chunk;
|
|
315
|
+
});
|
|
316
|
+
process.stdin.on('end', () => {
|
|
317
|
+
resolve(data);
|
|
318
|
+
});
|
|
319
|
+
// Handle case where stdin is empty/closed
|
|
320
|
+
if (process.stdin.isTTY) {
|
|
321
|
+
resolve('');
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/hooks/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Background Event Processor (Cross-Platform)
|
|
4
|
+
*
|
|
5
|
+
* Processes queued events asynchronously, routes to specialized handlers.
|
|
6
|
+
* Works on Windows, macOS, and Linux without WSL requirement.
|
|
7
|
+
*
|
|
8
|
+
* Usage: node processor.js [--daemon]
|
|
9
|
+
*
|
|
10
|
+
* Event routing:
|
|
11
|
+
* - increment.created/done/archived/reopened -> living-specs-handler
|
|
12
|
+
* - user-story.completed/reopened -> status-line-handler
|
|
13
|
+
* - task.updated/spec.updated -> living-docs-handler (legacy)
|
|
14
|
+
*
|
|
15
|
+
* Self-terminates after 60s of idle
|
|
16
|
+
*
|
|
17
|
+
* @module hooks/processor
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/hooks/processor.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
|