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.
Files changed (77) hide show
  1. package/bin/specweave.js +83 -0
  2. package/dist/src/cli/commands/analytics-push.d.ts +27 -0
  3. package/dist/src/cli/commands/analytics-push.d.ts.map +1 -0
  4. package/dist/src/cli/commands/analytics-push.js +74 -0
  5. package/dist/src/cli/commands/analytics-push.js.map +1 -0
  6. package/dist/src/cli/commands/session.d.ts +34 -0
  7. package/dist/src/cli/commands/session.d.ts.map +1 -0
  8. package/dist/src/cli/commands/session.js +142 -0
  9. package/dist/src/cli/commands/session.js.map +1 -0
  10. package/dist/src/cli/commands/sync-flush.d.ts +31 -0
  11. package/dist/src/cli/commands/sync-flush.d.ts.map +1 -0
  12. package/dist/src/cli/commands/sync-flush.js +114 -0
  13. package/dist/src/cli/commands/sync-flush.js.map +1 -0
  14. package/dist/src/core/analytics/event-writer.d.ts +33 -0
  15. package/dist/src/core/analytics/event-writer.d.ts.map +1 -0
  16. package/dist/src/core/analytics/event-writer.js +63 -0
  17. package/dist/src/core/analytics/event-writer.js.map +1 -0
  18. package/dist/src/core/hooks/handlers/hook-router.d.ts +1 -1
  19. package/dist/src/core/hooks/handlers/hook-router.d.ts.map +1 -1
  20. package/dist/src/core/hooks/handlers/hook-router.js +7 -10
  21. package/dist/src/core/hooks/handlers/hook-router.js.map +1 -1
  22. package/dist/src/core/hooks/handlers/pre-tool-use.d.ts.map +1 -1
  23. package/dist/src/core/hooks/handlers/pre-tool-use.js +23 -17
  24. package/dist/src/core/hooks/handlers/pre-tool-use.js.map +1 -1
  25. package/dist/src/core/hooks/handlers/types.d.ts +1 -1
  26. package/dist/src/core/hooks/handlers/types.d.ts.map +1 -1
  27. package/dist/src/core/hooks/handlers/types.js +0 -7
  28. package/dist/src/core/hooks/handlers/types.js.map +1 -1
  29. package/dist/src/core/hooks/handlers/user-prompt-submit.d.ts.map +1 -1
  30. package/dist/src/core/hooks/handlers/user-prompt-submit.js +21 -14
  31. package/dist/src/core/hooks/handlers/user-prompt-submit.js.map +1 -1
  32. package/dist/src/core/session/auto-scanner.d.ts +37 -0
  33. package/dist/src/core/session/auto-scanner.d.ts.map +1 -0
  34. package/dist/src/core/{hooks/handlers/stop-auto.js → session/auto-scanner.js} +33 -43
  35. package/dist/src/core/session/auto-scanner.js.map +1 -0
  36. package/dist/src/core/session/reflect-checker.d.ts +19 -0
  37. package/dist/src/core/session/reflect-checker.d.ts.map +1 -0
  38. package/dist/src/core/session/reflect-checker.js +30 -0
  39. package/dist/src/core/session/reflect-checker.js.map +1 -0
  40. package/dist/src/core/session/session-lifecycle.d.ts +44 -0
  41. package/dist/src/core/session/session-lifecycle.d.ts.map +1 -0
  42. package/dist/src/core/{hooks/handlers/session-start.js → session/session-lifecycle.js} +71 -32
  43. package/dist/src/core/session/session-lifecycle.js.map +1 -0
  44. package/dist/src/core/sync/event-queue-ops.d.ts +39 -0
  45. package/dist/src/core/sync/event-queue-ops.d.ts.map +1 -0
  46. package/dist/src/core/sync/event-queue-ops.js +109 -0
  47. package/dist/src/core/sync/event-queue-ops.js.map +1 -0
  48. package/dist/src/hooks/generate-settings.d.ts.map +1 -1
  49. package/dist/src/hooks/generate-settings.js +12 -13
  50. package/dist/src/hooks/generate-settings.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/src/core/hooks/handlers/post-tool-use-analytics.d.ts +0 -11
  53. package/dist/src/core/hooks/handlers/post-tool-use-analytics.d.ts.map +0 -1
  54. package/dist/src/core/hooks/handlers/post-tool-use-analytics.js +0 -75
  55. package/dist/src/core/hooks/handlers/post-tool-use-analytics.js.map +0 -1
  56. package/dist/src/core/hooks/handlers/post-tool-use.d.ts +0 -11
  57. package/dist/src/core/hooks/handlers/post-tool-use.d.ts.map +0 -1
  58. package/dist/src/core/hooks/handlers/post-tool-use.js +0 -76
  59. package/dist/src/core/hooks/handlers/post-tool-use.js.map +0 -1
  60. package/dist/src/core/hooks/handlers/pre-compact.d.ts +0 -11
  61. package/dist/src/core/hooks/handlers/pre-compact.d.ts.map +0 -1
  62. package/dist/src/core/hooks/handlers/pre-compact.js +0 -77
  63. package/dist/src/core/hooks/handlers/pre-compact.js.map +0 -1
  64. package/dist/src/core/hooks/handlers/session-start.d.ts +0 -9
  65. package/dist/src/core/hooks/handlers/session-start.d.ts.map +0 -1
  66. package/dist/src/core/hooks/handlers/session-start.js.map +0 -1
  67. package/dist/src/core/hooks/handlers/stop-auto.d.ts +0 -16
  68. package/dist/src/core/hooks/handlers/stop-auto.d.ts.map +0 -1
  69. package/dist/src/core/hooks/handlers/stop-auto.js.map +0 -1
  70. package/dist/src/core/hooks/handlers/stop-reflect.d.ts +0 -14
  71. package/dist/src/core/hooks/handlers/stop-reflect.d.ts.map +0 -1
  72. package/dist/src/core/hooks/handlers/stop-reflect.js +0 -43
  73. package/dist/src/core/hooks/handlers/stop-reflect.js.map +0 -1
  74. package/dist/src/core/hooks/handlers/stop-sync.d.ts +0 -15
  75. package/dist/src/core/hooks/handlers/stop-sync.d.ts.map +0 -1
  76. package/dist/src/core/hooks/handlers/stop-sync.js +0 -68
  77. 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"}