specweave 1.0.569 → 1.0.571
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/bin/specweave.js +83 -0
- package/dist/src/cli/commands/analytics-push.d.ts +27 -0
- package/dist/src/cli/commands/analytics-push.d.ts.map +1 -0
- package/dist/src/cli/commands/analytics-push.js +74 -0
- package/dist/src/cli/commands/analytics-push.js.map +1 -0
- package/dist/src/cli/commands/session.d.ts +34 -0
- package/dist/src/cli/commands/session.d.ts.map +1 -0
- package/dist/src/cli/commands/session.js +142 -0
- package/dist/src/cli/commands/session.js.map +1 -0
- package/dist/src/cli/commands/sync-flush.d.ts +31 -0
- package/dist/src/cli/commands/sync-flush.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-flush.js +114 -0
- package/dist/src/cli/commands/sync-flush.js.map +1 -0
- package/dist/src/core/analytics/event-writer.d.ts +33 -0
- package/dist/src/core/analytics/event-writer.d.ts.map +1 -0
- package/dist/src/core/analytics/event-writer.js +63 -0
- package/dist/src/core/analytics/event-writer.js.map +1 -0
- package/dist/src/core/hooks/handlers/hook-router.d.ts +1 -1
- package/dist/src/core/hooks/handlers/hook-router.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/hook-router.js +7 -10
- package/dist/src/core/hooks/handlers/hook-router.js.map +1 -1
- package/dist/src/core/hooks/handlers/pre-tool-use.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/pre-tool-use.js +23 -17
- package/dist/src/core/hooks/handlers/pre-tool-use.js.map +1 -1
- package/dist/src/core/hooks/handlers/types.d.ts +1 -1
- package/dist/src/core/hooks/handlers/types.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/types.js +0 -7
- package/dist/src/core/hooks/handlers/types.js.map +1 -1
- package/dist/src/core/hooks/handlers/user-prompt-submit.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/user-prompt-submit.js +21 -14
- package/dist/src/core/hooks/handlers/user-prompt-submit.js.map +1 -1
- package/dist/src/core/session/auto-scanner.d.ts +37 -0
- package/dist/src/core/session/auto-scanner.d.ts.map +1 -0
- package/dist/src/core/{hooks/handlers/stop-auto.js → session/auto-scanner.js} +33 -43
- package/dist/src/core/session/auto-scanner.js.map +1 -0
- package/dist/src/core/session/reflect-checker.d.ts +19 -0
- package/dist/src/core/session/reflect-checker.d.ts.map +1 -0
- package/dist/src/core/session/reflect-checker.js +30 -0
- package/dist/src/core/session/reflect-checker.js.map +1 -0
- package/dist/src/core/session/session-lifecycle.d.ts +44 -0
- package/dist/src/core/session/session-lifecycle.d.ts.map +1 -0
- package/dist/src/core/{hooks/handlers/session-start.js → session/session-lifecycle.js} +71 -32
- package/dist/src/core/session/session-lifecycle.js.map +1 -0
- package/dist/src/core/sync/event-queue-ops.d.ts +39 -0
- package/dist/src/core/sync/event-queue-ops.d.ts.map +1 -0
- package/dist/src/core/sync/event-queue-ops.js +109 -0
- package/dist/src/core/sync/event-queue-ops.js.map +1 -0
- package/dist/src/hooks/generate-settings.d.ts.map +1 -1
- package/dist/src/hooks/generate-settings.js +12 -13
- package/dist/src/hooks/generate-settings.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/core/hooks/handlers/post-tool-use-analytics.d.ts +0 -11
- package/dist/src/core/hooks/handlers/post-tool-use-analytics.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/post-tool-use-analytics.js +0 -75
- package/dist/src/core/hooks/handlers/post-tool-use-analytics.js.map +0 -1
- package/dist/src/core/hooks/handlers/post-tool-use.d.ts +0 -11
- package/dist/src/core/hooks/handlers/post-tool-use.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/post-tool-use.js +0 -76
- package/dist/src/core/hooks/handlers/post-tool-use.js.map +0 -1
- package/dist/src/core/hooks/handlers/pre-compact.d.ts +0 -11
- package/dist/src/core/hooks/handlers/pre-compact.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/pre-compact.js +0 -77
- package/dist/src/core/hooks/handlers/pre-compact.js.map +0 -1
- package/dist/src/core/hooks/handlers/session-start.d.ts +0 -9
- package/dist/src/core/hooks/handlers/session-start.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/session-start.js.map +0 -1
- package/dist/src/core/hooks/handlers/stop-auto.d.ts +0 -16
- package/dist/src/core/hooks/handlers/stop-auto.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/stop-auto.js.map +0 -1
- package/dist/src/core/hooks/handlers/stop-reflect.d.ts +0 -14
- package/dist/src/core/hooks/handlers/stop-reflect.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/stop-reflect.js +0 -43
- package/dist/src/core/hooks/handlers/stop-reflect.js.map +0 -1
- package/dist/src/core/hooks/handlers/stop-sync.d.ts +0 -15
- package/dist/src/core/hooks/handlers/stop-sync.d.ts.map +0 -1
- package/dist/src/core/hooks/handlers/stop-sync.js +0 -68
- package/dist/src/core/hooks/handlers/stop-sync.js.map +0 -1
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PostToolUse hook handler — non-blocking event detector and queue writer.
|
|
3
|
-
*
|
|
4
|
-
* Detects changes to increment files and queues events to pending.jsonl
|
|
5
|
-
* for later processing by stop-sync.
|
|
6
|
-
*
|
|
7
|
-
* @module core/hooks/handlers/post-tool-use
|
|
8
|
-
*/
|
|
9
|
-
import * as fs from 'fs';
|
|
10
|
-
import * as path from 'path';
|
|
11
|
-
const CONTINUE = { continue: true };
|
|
12
|
-
function getToolInput(input) {
|
|
13
|
-
return (input.tool_input ?? input.toolInput ?? {});
|
|
14
|
-
}
|
|
15
|
-
function getFilePath(input) {
|
|
16
|
-
const ti = getToolInput(input);
|
|
17
|
-
return (ti.file_path ?? '');
|
|
18
|
-
}
|
|
19
|
-
function extractIncrementId(filePath) {
|
|
20
|
-
const match = filePath.match(/(\d{4}-[^/]+)/);
|
|
21
|
-
return match ? match[1] : null;
|
|
22
|
-
}
|
|
23
|
-
function queueEvent(stateDir, event, incrementId, timestamp, data) {
|
|
24
|
-
try {
|
|
25
|
-
const queueDir = path.join(stateDir, 'event-queue');
|
|
26
|
-
fs.mkdirSync(queueDir, { recursive: true });
|
|
27
|
-
const entry = {
|
|
28
|
-
event,
|
|
29
|
-
incrementId,
|
|
30
|
-
timestamp,
|
|
31
|
-
...(data ? { data } : {}),
|
|
32
|
-
};
|
|
33
|
-
fs.appendFileSync(path.join(queueDir, 'pending.jsonl'), JSON.stringify(entry) + '\n');
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
// Never throw from event queuing
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export const handle = async (input, context) => {
|
|
40
|
-
const filePath = getFilePath(input);
|
|
41
|
-
// Ignore non-increment files
|
|
42
|
-
if (!filePath.includes('.specweave/increments/')) {
|
|
43
|
-
return CONTINUE;
|
|
44
|
-
}
|
|
45
|
-
const incrementId = extractIncrementId(filePath);
|
|
46
|
-
if (!incrementId)
|
|
47
|
-
return CONTINUE;
|
|
48
|
-
const basename = path.basename(filePath);
|
|
49
|
-
// metadata.json → detect status changes
|
|
50
|
-
if (basename === 'metadata.json') {
|
|
51
|
-
try {
|
|
52
|
-
if (fs.existsSync(filePath)) {
|
|
53
|
-
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
54
|
-
const meta = JSON.parse(raw);
|
|
55
|
-
const status = meta.status ?? 'unknown';
|
|
56
|
-
queueEvent(context.stateDir, 'increment.status_changed', incrementId, context.timestamp, { field: 'status', value: status });
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// Read failure — skip silently
|
|
61
|
-
}
|
|
62
|
-
return CONTINUE;
|
|
63
|
-
}
|
|
64
|
-
// tasks.md → queue task.updated
|
|
65
|
-
if (basename === 'tasks.md') {
|
|
66
|
-
queueEvent(context.stateDir, 'task.updated', incrementId, context.timestamp);
|
|
67
|
-
return CONTINUE;
|
|
68
|
-
}
|
|
69
|
-
// spec.md → queue spec.updated
|
|
70
|
-
if (basename === 'spec.md') {
|
|
71
|
-
queueEvent(context.stateDir, 'spec.updated', incrementId, context.timestamp);
|
|
72
|
-
return CONTINUE;
|
|
73
|
-
}
|
|
74
|
-
return CONTINUE;
|
|
75
|
-
};
|
|
76
|
-
//# sourceMappingURL=post-tool-use.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/post-tool-use.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-compact hook handler — context pressure signal.
|
|
3
|
-
*
|
|
4
|
-
* Fires when Claude Code approaches context limits (before compaction).
|
|
5
|
-
* Tracks compaction count, escalates pressure level, writes health alerts.
|
|
6
|
-
*
|
|
7
|
-
* Escalation: 1st=elevated, 2nd=critical, 3+=emergency
|
|
8
|
-
*/
|
|
9
|
-
import type { HandlerFn } from './types.js';
|
|
10
|
-
export declare const handle: HandlerFn;
|
|
11
|
-
//# sourceMappingURL=pre-compact.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pre-compact.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/pre-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAqC5C,eAAO,MAAM,MAAM,EAAE,SA0CpB,CAAC"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-compact hook handler — context pressure signal.
|
|
3
|
-
*
|
|
4
|
-
* Fires when Claude Code approaches context limits (before compaction).
|
|
5
|
-
* Tracks compaction count, escalates pressure level, writes health alerts.
|
|
6
|
-
*
|
|
7
|
-
* Escalation: 1st=elevated, 2nd=critical, 3+=emergency
|
|
8
|
-
*/
|
|
9
|
-
import * as fs from 'fs';
|
|
10
|
-
import * as path from 'path';
|
|
11
|
-
function readPressure(filePath) {
|
|
12
|
-
try {
|
|
13
|
-
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
14
|
-
const data = JSON.parse(raw);
|
|
15
|
-
return typeof data.compactionCount === 'number' ? data.compactionCount : 0;
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return 0;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function getLevel(count) {
|
|
22
|
-
if (count >= 3)
|
|
23
|
-
return 'emergency';
|
|
24
|
-
if (count >= 2)
|
|
25
|
-
return 'critical';
|
|
26
|
-
return 'elevated';
|
|
27
|
-
}
|
|
28
|
-
function getAdvice(level) {
|
|
29
|
-
switch (level) {
|
|
30
|
-
case 'elevated':
|
|
31
|
-
return 'Context budget reduced to compact. Session is running long.';
|
|
32
|
-
case 'critical':
|
|
33
|
-
return 'Context budget at minimal. Consider starting a new session or setting contextBudget.level to off.';
|
|
34
|
-
case 'emergency':
|
|
35
|
-
return 'Context budget stripped to off (3+ compactions). Strongly recommend starting a new session.';
|
|
36
|
-
default:
|
|
37
|
-
return '';
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export const handle = async (_input, context) => {
|
|
41
|
-
if (process.env.SPECWEAVE_DISABLE_HOOKS === '1') {
|
|
42
|
-
return { continue: true };
|
|
43
|
-
}
|
|
44
|
-
const { stateDir, logsDir, timestamp } = context;
|
|
45
|
-
fs.mkdirSync(stateDir, { recursive: true });
|
|
46
|
-
const pressurePath = path.join(stateDir, 'context-pressure.json');
|
|
47
|
-
const prevCount = readPressure(pressurePath);
|
|
48
|
-
const newCount = prevCount + 1;
|
|
49
|
-
const level = getLevel(newCount);
|
|
50
|
-
const advice = getAdvice(level);
|
|
51
|
-
// Write context-pressure.json
|
|
52
|
-
const pressure = {
|
|
53
|
-
level,
|
|
54
|
-
compactionCount: newCount,
|
|
55
|
-
lastCompaction: timestamp,
|
|
56
|
-
};
|
|
57
|
-
fs.writeFileSync(pressurePath, JSON.stringify(pressure));
|
|
58
|
-
// Write prompt-health-alert.json
|
|
59
|
-
const alertPath = path.join(stateDir, 'prompt-health-alert.json');
|
|
60
|
-
fs.writeFileSync(alertPath, JSON.stringify({
|
|
61
|
-
level,
|
|
62
|
-
compactionCount: newCount,
|
|
63
|
-
advice,
|
|
64
|
-
timestamp,
|
|
65
|
-
}));
|
|
66
|
-
// Log compaction event
|
|
67
|
-
try {
|
|
68
|
-
fs.mkdirSync(logsDir, { recursive: true });
|
|
69
|
-
const logEntry = `[${timestamp}] COMPACTION #${newCount} | level=${level} | ${advice}\n`;
|
|
70
|
-
fs.appendFileSync(path.join(logsDir, 'prompt-health.log'), logEntry);
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// Never throw from logging
|
|
74
|
-
}
|
|
75
|
-
return { continue: true };
|
|
76
|
-
};
|
|
77
|
-
//# sourceMappingURL=pre-compact.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pre-compact.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/pre-compact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session-start hook handler — session initialization.
|
|
3
|
-
*
|
|
4
|
-
* Clears stale auto-mode files, resets context pressure,
|
|
5
|
-
* and performs baseline prompt health check.
|
|
6
|
-
*/
|
|
7
|
-
import type { HandlerFn } from './types.js';
|
|
8
|
-
export declare const handle: HandlerFn;
|
|
9
|
-
//# sourceMappingURL=session-start.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/session-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkC5C,eAAO,MAAM,MAAM,EAAE,SA6EpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/session-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stop-auto hook handler.
|
|
3
|
-
*
|
|
4
|
-
* Fires when a session ends. Checks if an auto-mode session is active:
|
|
5
|
-
* 1. Look for auto-mode.json (per-session or global)
|
|
6
|
-
* 2. Check session staleness
|
|
7
|
-
* 3. Scan active increments for pending tasks
|
|
8
|
-
* 4. Include progress context but always approve
|
|
9
|
-
*
|
|
10
|
-
* Stop hooks should NEVER block session exit.
|
|
11
|
-
*
|
|
12
|
-
* @module core/hooks/handlers/stop-auto
|
|
13
|
-
*/
|
|
14
|
-
import type { HandlerFn } from './types.js';
|
|
15
|
-
export declare const handle: HandlerFn;
|
|
16
|
-
//# sourceMappingURL=stop-auto.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop-auto.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/stop-auto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAwE5C,eAAO,MAAM,MAAM,EAAE,SAyCpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop-auto.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/stop-auto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stop-reflect hook handler.
|
|
3
|
-
*
|
|
4
|
-
* Fires when a session ends. Checks if reflection is enabled in config.
|
|
5
|
-
* If enabled, logs that reflection was requested (actual reflection logic
|
|
6
|
-
* will call `specweave reflect-stop` CLI in a follow-up).
|
|
7
|
-
*
|
|
8
|
-
* NEVER blocks — always returns approve.
|
|
9
|
-
*
|
|
10
|
-
* @module core/hooks/handlers/stop-reflect
|
|
11
|
-
*/
|
|
12
|
-
import type { HandlerFn } from './types.js';
|
|
13
|
-
export declare const handle: HandlerFn;
|
|
14
|
-
//# sourceMappingURL=stop-reflect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop-reflect.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/stop-reflect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAe5C,eAAO,MAAM,MAAM,EAAE,SAgBpB,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stop-reflect hook handler.
|
|
3
|
-
*
|
|
4
|
-
* Fires when a session ends. Checks if reflection is enabled in config.
|
|
5
|
-
* If enabled, logs that reflection was requested (actual reflection logic
|
|
6
|
-
* will call `specweave reflect-stop` CLI in a follow-up).
|
|
7
|
-
*
|
|
8
|
-
* NEVER blocks — always returns approve.
|
|
9
|
-
*
|
|
10
|
-
* @module core/hooks/handlers/stop-reflect
|
|
11
|
-
*/
|
|
12
|
-
import * as fs from 'fs';
|
|
13
|
-
import { logHook } from './utils.js';
|
|
14
|
-
/** Check if reflect is enabled in config. Default: true */
|
|
15
|
-
function isReflectEnabled(configPath) {
|
|
16
|
-
try {
|
|
17
|
-
if (!fs.existsSync(configPath))
|
|
18
|
-
return true;
|
|
19
|
-
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
20
|
-
// Note: explicit false check — missing key defaults to enabled
|
|
21
|
-
return config.reflect?.enabled !== false;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return true; // Default enabled on error
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
export const handle = async (input, context) => {
|
|
28
|
-
try {
|
|
29
|
-
const enabled = isReflectEnabled(context.configPath);
|
|
30
|
-
if (!enabled) {
|
|
31
|
-
logHook(context, 'stop-reflect', 'Reflection disabled in config');
|
|
32
|
-
return { decision: 'approve' };
|
|
33
|
-
}
|
|
34
|
-
// Reflection is enabled — log intent
|
|
35
|
-
logHook(context, 'stop-reflect', 'Reflection requested at session end');
|
|
36
|
-
return { decision: 'approve' };
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// Never throw — always approve
|
|
40
|
-
return { decision: 'approve' };
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=stop-reflect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop-reflect.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/stop-reflect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,2DAA2D;AAC3D,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,+DAA+D;QAC/D,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,2BAA2B;IAC1C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAc,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,+BAA+B,CAAC,CAAC;YAClE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACjC,CAAC;QAED,qCAAqC;QACrC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,qCAAqC,CAAC,CAAC;QACxE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stop-sync hook handler.
|
|
3
|
-
*
|
|
4
|
-
* Fires at session end (after stop-reflect and stop-auto). Reads pending
|
|
5
|
-
* sync events, deduplicates by increment ID, logs sync intent, and clears
|
|
6
|
-
* the event queue. Actual sync calls (LivingDocsSync, GitHub/JIRA/ADO)
|
|
7
|
-
* will be added in a follow-up.
|
|
8
|
-
*
|
|
9
|
-
* NEVER blocks — always returns approve.
|
|
10
|
-
*
|
|
11
|
-
* @module core/hooks/handlers/stop-sync
|
|
12
|
-
*/
|
|
13
|
-
import type { HandlerFn } from './types.js';
|
|
14
|
-
export declare const handle: HandlerFn;
|
|
15
|
-
//# sourceMappingURL=stop-sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop-sync.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/stop-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAoB5C,eAAO,MAAM,MAAM,EAAE,SA+CpB,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stop-sync hook handler.
|
|
3
|
-
*
|
|
4
|
-
* Fires at session end (after stop-reflect and stop-auto). Reads pending
|
|
5
|
-
* sync events, deduplicates by increment ID, logs sync intent, and clears
|
|
6
|
-
* the event queue. Actual sync calls (LivingDocsSync, GitHub/JIRA/ADO)
|
|
7
|
-
* will be added in a follow-up.
|
|
8
|
-
*
|
|
9
|
-
* NEVER blocks — always returns approve.
|
|
10
|
-
*
|
|
11
|
-
* @module core/hooks/handlers/stop-sync
|
|
12
|
-
*/
|
|
13
|
-
import * as fs from 'fs';
|
|
14
|
-
import * as path from 'path';
|
|
15
|
-
import { logHook } from './utils.js';
|
|
16
|
-
/** Parse a JSONL line safely */
|
|
17
|
-
function parseEventLine(line) {
|
|
18
|
-
try {
|
|
19
|
-
return JSON.parse(line);
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export const handle = async (input, context) => {
|
|
26
|
-
try {
|
|
27
|
-
const pendingPath = path.join(context.stateDir, 'event-queue', 'pending.jsonl');
|
|
28
|
-
// 1. Check if pending events exist
|
|
29
|
-
if (!fs.existsSync(pendingPath)) {
|
|
30
|
-
logHook(context, 'stop-sync', 'No pending events');
|
|
31
|
-
return { decision: 'approve' };
|
|
32
|
-
}
|
|
33
|
-
const content = fs.readFileSync(pendingPath, 'utf8').trim();
|
|
34
|
-
if (!content) {
|
|
35
|
-
logHook(context, 'stop-sync', 'No pending events');
|
|
36
|
-
return { decision: 'approve' };
|
|
37
|
-
}
|
|
38
|
-
// 2. Parse and deduplicate events by increment ID
|
|
39
|
-
const lines = content.split('\n').filter((l) => l.trim());
|
|
40
|
-
const seenIncrements = new Set();
|
|
41
|
-
for (const line of lines) {
|
|
42
|
-
const event = parseEventLine(line);
|
|
43
|
-
if (!event?.incrementId)
|
|
44
|
-
continue;
|
|
45
|
-
const incId = event.incrementId;
|
|
46
|
-
if (seenIncrements.has(incId))
|
|
47
|
-
continue;
|
|
48
|
-
seenIncrements.add(incId);
|
|
49
|
-
logHook(context, 'stop-sync', `Sync requested for increment: ${incId} (event: ${event.event ?? 'unknown'})`);
|
|
50
|
-
}
|
|
51
|
-
// 3. Clear processed events
|
|
52
|
-
try {
|
|
53
|
-
fs.writeFileSync(pendingPath, '');
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
// Non-critical — events may be re-processed next time
|
|
57
|
-
}
|
|
58
|
-
if (seenIncrements.size > 0) {
|
|
59
|
-
logHook(context, 'stop-sync', `Processed ${seenIncrements.size} unique increment(s)`);
|
|
60
|
-
}
|
|
61
|
-
return { decision: 'approve' };
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Never throw — always approve
|
|
65
|
-
return { decision: 'approve' };
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
//# sourceMappingURL=stop-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop-sync.js","sourceRoot":"","sources":["../../../../../src/core/hooks/handlers/stop-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAUrC,gCAAgC;AAChC,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAc,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;QAEhF,mCAAmC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;YACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;YACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACjC,CAAC;QAED,kDAAkD;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,EAAE,WAAW;gBAAE,SAAS;YAElC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;YAChC,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YAExC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,iCAAiC,KAAK,YAAY,KAAK,CAAC,KAAK,IAAI,SAAS,GAAG,CAAC,CAAC;QAC/G,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QAED,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,cAAc,CAAC,IAAI,sBAAsB,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC"}
|