instar 0.28.65 → 0.28.67

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 (62) hide show
  1. package/dist/cli.js +53 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/AutoDispatcher.d.ts +4 -1
  4. package/dist/core/AutoDispatcher.d.ts.map +1 -1
  5. package/dist/core/AutoDispatcher.js +5 -4
  6. package/dist/core/AutoDispatcher.js.map +1 -1
  7. package/dist/core/AutoUpdater.d.ts +6 -1
  8. package/dist/core/AutoUpdater.d.ts.map +1 -1
  9. package/dist/core/AutoUpdater.js +7 -4
  10. package/dist/core/AutoUpdater.js.map +1 -1
  11. package/dist/lifeline/LifelineHealthWatchdog.d.ts +81 -0
  12. package/dist/lifeline/LifelineHealthWatchdog.d.ts.map +1 -0
  13. package/dist/lifeline/LifelineHealthWatchdog.js +122 -0
  14. package/dist/lifeline/LifelineHealthWatchdog.js.map +1 -0
  15. package/dist/lifeline/RestartOrchestrator.d.ts +73 -0
  16. package/dist/lifeline/RestartOrchestrator.d.ts.map +1 -0
  17. package/dist/lifeline/RestartOrchestrator.js +124 -0
  18. package/dist/lifeline/RestartOrchestrator.js.map +1 -0
  19. package/dist/lifeline/TelegramLifeline.d.ts +55 -1
  20. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  21. package/dist/lifeline/TelegramLifeline.js +364 -41
  22. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  23. package/dist/lifeline/droppedMessages.d.ts +67 -0
  24. package/dist/lifeline/droppedMessages.d.ts.map +1 -0
  25. package/dist/lifeline/droppedMessages.js +179 -0
  26. package/dist/lifeline/droppedMessages.js.map +1 -0
  27. package/dist/lifeline/forwardErrors.d.ts +38 -0
  28. package/dist/lifeline/forwardErrors.d.ts.map +1 -0
  29. package/dist/lifeline/forwardErrors.js +53 -0
  30. package/dist/lifeline/forwardErrors.js.map +1 -0
  31. package/dist/lifeline/rateLimitState.d.ts +63 -0
  32. package/dist/lifeline/rateLimitState.d.ts.map +1 -0
  33. package/dist/lifeline/rateLimitState.js +110 -0
  34. package/dist/lifeline/rateLimitState.js.map +1 -0
  35. package/dist/lifeline/retryWithBackoff.d.ts +28 -0
  36. package/dist/lifeline/retryWithBackoff.d.ts.map +1 -0
  37. package/dist/lifeline/retryWithBackoff.js +34 -0
  38. package/dist/lifeline/retryWithBackoff.js.map +1 -0
  39. package/dist/lifeline/startupMarker.d.ts +20 -0
  40. package/dist/lifeline/startupMarker.d.ts.map +1 -0
  41. package/dist/lifeline/startupMarker.js +52 -0
  42. package/dist/lifeline/startupMarker.js.map +1 -0
  43. package/dist/lifeline/versionHandshake.d.ts +40 -0
  44. package/dist/lifeline/versionHandshake.d.ts.map +1 -0
  45. package/dist/lifeline/versionHandshake.js +45 -0
  46. package/dist/lifeline/versionHandshake.js.map +1 -0
  47. package/dist/messaging/shared/compactionResumePayload.d.ts +1 -1
  48. package/dist/messaging/shared/compactionResumePayload.d.ts.map +1 -1
  49. package/dist/messaging/shared/compactionResumePayload.js +14 -5
  50. package/dist/messaging/shared/compactionResumePayload.js.map +1 -1
  51. package/dist/server/routes.d.ts.map +1 -1
  52. package/dist/server/routes.js +58 -1
  53. package/dist/server/routes.js.map +1 -1
  54. package/package.json +1 -1
  55. package/src/data/builtin-manifest.json +82 -82
  56. package/upgrades/0.28.66.md +44 -0
  57. package/upgrades/0.28.67.md +58 -0
  58. package/upgrades/side-effects/0.28.65.md +59 -0
  59. package/upgrades/side-effects/0.28.66.md +130 -0
  60. package/upgrades/side-effects/lifeline-message-drop-stage-a.md +155 -0
  61. package/upgrades/side-effects/lifeline-self-restart-stage-b.md +129 -0
  62. package/upgrades/NEXT.md +0 -53
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Typed errors thrown by forwardToServer so upstream (retry + orchestrator)
3
+ * can tell transient failures from terminal ones and from version skew.
4
+ *
5
+ * Stage B: replaces the bare `Error(\`forward responded 426\`)` pattern that
6
+ * couldn't be classified by retryWithBackoff.
7
+ */
8
+ export class ForwardTransientError extends Error {
9
+ status;
10
+ kind = 'transient';
11
+ constructor(status, message) {
12
+ super(message ?? `forward responded ${status}`);
13
+ this.status = status;
14
+ this.name = 'ForwardTransientError';
15
+ }
16
+ }
17
+ export class ForwardBadRequestError extends Error {
18
+ body;
19
+ kind = 'bad-request';
20
+ constructor(body) {
21
+ super('forward responded 400');
22
+ this.body = body;
23
+ this.name = 'ForwardBadRequestError';
24
+ }
25
+ }
26
+ export class ForwardServerBootError extends Error {
27
+ retryAfterMs;
28
+ kind = 'server-booting';
29
+ constructor(retryAfterMs = 1000) {
30
+ super('forward responded 503 server-boot-incomplete');
31
+ this.retryAfterMs = retryAfterMs;
32
+ this.name = 'ForwardServerBootError';
33
+ }
34
+ }
35
+ export class ForwardVersionSkewError extends Error {
36
+ status;
37
+ body;
38
+ kind = 'version-skew';
39
+ constructor(status, body) {
40
+ super(`forward responded 426 (server=${body.serverVersion ?? 'unknown'})`);
41
+ this.status = status;
42
+ this.body = body;
43
+ this.name = 'ForwardVersionSkewError';
44
+ }
45
+ }
46
+ /** True if the error classifies as terminal — retry MUST NOT re-attempt. */
47
+ export function isTerminalForwardError(err) {
48
+ if (!err || typeof err !== 'object')
49
+ return false;
50
+ const kind = err.kind;
51
+ return kind === 'version-skew' || kind === 'bad-request';
52
+ }
53
+ //# sourceMappingURL=forwardErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwardErrors.js","sourceRoot":"","sources":["../../src/lifeline/forwardErrors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAElB;IADnB,IAAI,GAAG,WAAoB,CAAC;IACrC,YAA4B,MAAc,EAAE,OAAgB;QAC1D,KAAK,CAAC,OAAO,IAAI,qBAAqB,MAAM,EAAE,CAAC,CAAC;QADtB,WAAM,GAAN,MAAM,CAAQ;QAExC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEnB;IADnB,IAAI,GAAG,aAAsB,CAAC;IACvC,YAA4B,IAAc;QACxC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QADL,SAAI,GAAJ,IAAI,CAAU;QAExC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEnB;IADnB,IAAI,GAAG,gBAAyB,CAAC;IAC1C,YAA4B,eAAuB,IAAI;QACrD,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAD5B,iBAAY,GAAZ,YAAY,CAAe;QAErD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AASD,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAG9B;IACA;IAHT,IAAI,GAAG,cAAuB,CAAC;IACxC,YACkB,MAAc,EACd,IAAqB;QAErC,KAAK,CAAC,iCAAiC,IAAI,CAAC,aAAa,IAAI,SAAS,GAAG,CAAC,CAAC;QAH3D,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAiB;QAGrC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAQD,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAC;IAC7C,OAAO,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,aAAa,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Rate-limit state — `state/last-self-restart-at.json`.
3
+ *
4
+ * Tracks wall-clock of the last self-restart, ring-buffer history, and
5
+ * rate-limit decisions across buckets. Atomic writes via tmp+rename.
6
+ *
7
+ * Fail-closed read semantics per spec:
8
+ * - missing → clear to restart
9
+ * - malformed / unreadable → block (treat as "just restarted")
10
+ * - future timestamp → ALLOW and overwrite (previous "block" was a deadlock)
11
+ */
12
+ export type RestartBucket = 'watchdog' | 'versionSkew';
13
+ export interface RestartHistoryEntry {
14
+ at: string;
15
+ reason: string;
16
+ bucket: RestartBucket;
17
+ }
18
+ export interface RateLimitState {
19
+ lastRestartAt: string;
20
+ lastReason: string;
21
+ history: RestartHistoryEntry[];
22
+ }
23
+ export declare const HISTORY_CAP = 50;
24
+ export declare const WATCHDOG_COOLDOWN_MS: number;
25
+ export declare const VERSION_SKEW_COOLDOWN_MS: number;
26
+ export declare const VERSION_SKEW_DAILY_CAP = 3;
27
+ export declare const RESTART_STORM_WINDOW_MS: number;
28
+ export declare const RESTART_STORM_THRESHOLD = 6;
29
+ export declare function statePath(stateDir: string): string;
30
+ export type ReadOutcome = {
31
+ kind: 'clear';
32
+ state: null;
33
+ } | {
34
+ kind: 'corrupt';
35
+ state: null;
36
+ errorSignal: 'rateLimitFileCorrupt';
37
+ } | {
38
+ kind: 'skew';
39
+ state: RateLimitState | null;
40
+ errorSignal: 'rateLimitFileSkew';
41
+ } | {
42
+ kind: 'ok';
43
+ state: RateLimitState;
44
+ };
45
+ /**
46
+ * Read + classify the rate-limit file.
47
+ *
48
+ * - Missing → { clear }
49
+ * - Parse error / bad → { corrupt } (signal + block)
50
+ * - Future timestamp → { skew } (signal + ALLOW — overwrite avoids deadlock)
51
+ * - Otherwise → { ok, state }
52
+ */
53
+ export declare function readRateLimitState(stateDir: string, now?: number): ReadOutcome;
54
+ export interface RateLimitDecision {
55
+ allowed: boolean;
56
+ reason?: string;
57
+ stormActive?: boolean;
58
+ }
59
+ /** Decide whether a restart in the given bucket is allowed right now. */
60
+ export declare function decide(outcome: ReadOutcome, bucket: RestartBucket, now?: number): RateLimitDecision;
61
+ export declare function writeRateLimitState(stateDir: string, reason: string, bucket: RestartBucket, prior: RateLimitState | null, now?: number): RateLimitState;
62
+ export declare function isRestartStorm(state: RateLimitState | null, now?: number): boolean;
63
+ //# sourceMappingURL=rateLimitState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitState.d.ts","sourceRoot":"","sources":["../../src/lifeline/rateLimitState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,oBAAoB,QAAiB,CAAC;AACnD,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AACvD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AACtD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,sBAAsB,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,mBAAmB,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAE1C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,WAAW,CAqClF;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,yEAAyE;AACzE,wBAAgB,MAAM,CACpB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,aAAa,EACrB,GAAG,SAAa,GACf,iBAAiB,CAwBnB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,cAAc,GAAG,IAAI,EAC5B,GAAG,SAAa,GACf,cAAc,CAchB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,SAAa,GAAG,OAAO,CAItF"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Rate-limit state — `state/last-self-restart-at.json`.
3
+ *
4
+ * Tracks wall-clock of the last self-restart, ring-buffer history, and
5
+ * rate-limit decisions across buckets. Atomic writes via tmp+rename.
6
+ *
7
+ * Fail-closed read semantics per spec:
8
+ * - missing → clear to restart
9
+ * - malformed / unreadable → block (treat as "just restarted")
10
+ * - future timestamp → ALLOW and overwrite (previous "block" was a deadlock)
11
+ */
12
+ import fs from 'node:fs';
13
+ import path from 'node:path';
14
+ export const HISTORY_CAP = 50;
15
+ export const WATCHDOG_COOLDOWN_MS = 10 * 60 * 1000; // 10 min
16
+ export const VERSION_SKEW_COOLDOWN_MS = 10 * 60 * 1000; // 10 min between same-bucket
17
+ export const VERSION_SKEW_DAILY_CAP = 3; // max 3 per 24h
18
+ export const RESTART_STORM_WINDOW_MS = 60 * 60 * 1000; // 1h window
19
+ export const RESTART_STORM_THRESHOLD = 6; // 6 restarts in 1h
20
+ export function statePath(stateDir) {
21
+ return path.join(stateDir, 'last-self-restart-at.json');
22
+ }
23
+ /**
24
+ * Read + classify the rate-limit file.
25
+ *
26
+ * - Missing → { clear }
27
+ * - Parse error / bad → { corrupt } (signal + block)
28
+ * - Future timestamp → { skew } (signal + ALLOW — overwrite avoids deadlock)
29
+ * - Otherwise → { ok, state }
30
+ */
31
+ export function readRateLimitState(stateDir, now = Date.now()) {
32
+ const p = statePath(stateDir);
33
+ let raw;
34
+ try {
35
+ raw = fs.readFileSync(p, 'utf-8');
36
+ }
37
+ catch (err) {
38
+ if (err.code === 'ENOENT') {
39
+ return { kind: 'clear', state: null };
40
+ }
41
+ return { kind: 'corrupt', state: null, errorSignal: 'rateLimitFileCorrupt' };
42
+ }
43
+ let parsed;
44
+ try {
45
+ parsed = JSON.parse(raw);
46
+ }
47
+ catch {
48
+ return { kind: 'corrupt', state: null, errorSignal: 'rateLimitFileCorrupt' };
49
+ }
50
+ if (!parsed ||
51
+ typeof parsed !== 'object' ||
52
+ typeof parsed.lastRestartAt !== 'string' ||
53
+ !Array.isArray(parsed.history)) {
54
+ return { kind: 'corrupt', state: null, errorSignal: 'rateLimitFileCorrupt' };
55
+ }
56
+ const state = parsed;
57
+ const t = Date.parse(state.lastRestartAt);
58
+ if (Number.isNaN(t)) {
59
+ return { kind: 'corrupt', state: null, errorSignal: 'rateLimitFileCorrupt' };
60
+ }
61
+ if (t > now) {
62
+ return { kind: 'skew', state, errorSignal: 'rateLimitFileSkew' };
63
+ }
64
+ return { kind: 'ok', state };
65
+ }
66
+ /** Decide whether a restart in the given bucket is allowed right now. */
67
+ export function decide(outcome, bucket, now = Date.now()) {
68
+ if (outcome.kind === 'clear')
69
+ return { allowed: true };
70
+ if (outcome.kind === 'corrupt')
71
+ return { allowed: false, reason: 'rate-limit-file-corrupt' };
72
+ if (outcome.kind === 'skew')
73
+ return { allowed: true };
74
+ const state = outcome.state;
75
+ const elapsed = Math.max(0, now - Date.parse(state.lastRestartAt));
76
+ if (elapsed < WATCHDOG_COOLDOWN_MS) {
77
+ return { allowed: false, reason: 'cooldown-active' };
78
+ }
79
+ if (bucket === 'versionSkew') {
80
+ const recentSkew = state.history.filter(h => h.bucket === 'versionSkew' && now - Date.parse(h.at) < 24 * 60 * 60 * 1000).length;
81
+ if (recentSkew >= VERSION_SKEW_DAILY_CAP) {
82
+ return { allowed: false, reason: 'version-skew-daily-cap' };
83
+ }
84
+ }
85
+ const stormActive = state.history.filter(h => now - Date.parse(h.at) < RESTART_STORM_WINDOW_MS).length >=
86
+ RESTART_STORM_THRESHOLD;
87
+ return { allowed: true, stormActive };
88
+ }
89
+ export function writeRateLimitState(stateDir, reason, bucket, prior, now = Date.now()) {
90
+ const nowIso = new Date(now).toISOString();
91
+ const history = [...(prior?.history ?? []), { at: nowIso, reason, bucket }].slice(-HISTORY_CAP);
92
+ const next = {
93
+ lastRestartAt: nowIso,
94
+ lastReason: reason,
95
+ history,
96
+ };
97
+ const p = statePath(stateDir);
98
+ const tmp = `${p}.${process.pid}.tmp`;
99
+ fs.mkdirSync(path.dirname(p), { recursive: true });
100
+ fs.writeFileSync(tmp, JSON.stringify(next, null, 2), { mode: 0o600 });
101
+ fs.renameSync(tmp, p);
102
+ return next;
103
+ }
104
+ export function isRestartStorm(state, now = Date.now()) {
105
+ if (!state)
106
+ return false;
107
+ const recent = state.history.filter(h => now - Date.parse(h.at) < RESTART_STORM_WINDOW_MS);
108
+ return recent.length >= RESTART_STORM_THRESHOLD;
109
+ }
110
+ //# sourceMappingURL=rateLimitState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitState.js","sourceRoot":"","sources":["../../src/lifeline/rateLimitState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * retryWithBackoff — small, policy-configurable retry helper.
3
+ *
4
+ * Used by the Telegram lifeline to give in-flight message handoffs a real
5
+ * chance to succeed before falling into the drop/queue path. Kept generic
6
+ * so it can be reused by other lifeline call sites that currently give up
7
+ * on the first failure.
8
+ *
9
+ * Not a gate, not an authority — just mechanics. Signal-vs-authority:
10
+ * retrying is deterministic policy; any "should we give up" judgment is
11
+ * upstream.
12
+ */
13
+ export interface RetryPolicy {
14
+ /** Total number of attempts (not retries). 3 means "try, wait, retry, wait, retry". */
15
+ attempts: number;
16
+ /** Base delay in ms before the second attempt. Subsequent delays double. */
17
+ baseMs: number;
18
+ /** Optional callback invoked before each attempt. onAttempt(n, lastError). */
19
+ onAttempt?: (attemptNumber: number, lastError: Error | undefined) => void;
20
+ /**
21
+ * Optional predicate — if it returns true for a thrown error, retry stops
22
+ * immediately and the error is re-thrown. Used to short-circuit version-skew
23
+ * (426) and malformed-request (400) responses that would be pointless to retry.
24
+ */
25
+ isTerminal?: (err: Error) => boolean;
26
+ }
27
+ export declare function retryWithBackoff<T>(fn: () => Promise<T>, policy: RetryPolicy): Promise<T>;
28
+ //# sourceMappingURL=retryWithBackoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryWithBackoff.d.ts","sourceRoot":"","sources":["../../src/lifeline/retryWithBackoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1E;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC;CACtC;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,CAAC,CAAC,CAiBZ"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * retryWithBackoff — small, policy-configurable retry helper.
3
+ *
4
+ * Used by the Telegram lifeline to give in-flight message handoffs a real
5
+ * chance to succeed before falling into the drop/queue path. Kept generic
6
+ * so it can be reused by other lifeline call sites that currently give up
7
+ * on the first failure.
8
+ *
9
+ * Not a gate, not an authority — just mechanics. Signal-vs-authority:
10
+ * retrying is deterministic policy; any "should we give up" judgment is
11
+ * upstream.
12
+ */
13
+ export async function retryWithBackoff(fn, policy) {
14
+ let lastError;
15
+ for (let attempt = 1; attempt <= policy.attempts; attempt++) {
16
+ if (policy.onAttempt) {
17
+ policy.onAttempt(attempt, lastError);
18
+ }
19
+ try {
20
+ return await fn();
21
+ }
22
+ catch (err) {
23
+ lastError = err instanceof Error ? err : new Error(String(err));
24
+ if (policy.isTerminal?.(lastError))
25
+ throw lastError;
26
+ if (attempt === policy.attempts)
27
+ break;
28
+ const delayMs = policy.baseMs * Math.pow(2, attempt - 1);
29
+ await new Promise(resolve => setTimeout(resolve, delayMs));
30
+ }
31
+ }
32
+ throw lastError ?? new Error('retryWithBackoff: exhausted with no recorded error');
33
+ }
34
+ //# sourceMappingURL=retryWithBackoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryWithBackoff.js","sourceRoot":"","sources":["../../src/lifeline/retryWithBackoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,MAAmB;IAEnB,IAAI,SAA4B,CAAC;IACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;gBAAE,MAAM,SAAS,CAAC;YACpD,IAAI,OAAO,KAAK,MAAM,CAAC,QAAQ;gBAAE,MAAM;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Startup liveness marker — `state/lifeline-started-at.json`.
3
+ *
4
+ * Every lifeline startup writes this file unconditionally, capturing
5
+ * pid / version / timestamp. It is the signal the CLI polls to determine
6
+ * whether a `launchctl kickstart` actually took effect.
7
+ *
8
+ * Distinct from `last-self-restart-at.json` which is written only by the
9
+ * restart orchestrator on self-triggered restarts — `launchctl kickstart`
10
+ * (an external restart) does not touch that file.
11
+ */
12
+ export interface StartupMarker {
13
+ startedAt: string;
14
+ pid: number;
15
+ version: string;
16
+ }
17
+ export declare function markerPath(stateDir: string): string;
18
+ export declare function writeStartupMarker(stateDir: string, version: string): StartupMarker;
19
+ export declare function readStartupMarker(stateDir: string): StartupMarker | null;
20
+ //# sourceMappingURL=startupMarker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startupMarker.d.ts","sourceRoot":"","sources":["../../src/lifeline/startupMarker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAgBnF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiBxE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Startup liveness marker — `state/lifeline-started-at.json`.
3
+ *
4
+ * Every lifeline startup writes this file unconditionally, capturing
5
+ * pid / version / timestamp. It is the signal the CLI polls to determine
6
+ * whether a `launchctl kickstart` actually took effect.
7
+ *
8
+ * Distinct from `last-self-restart-at.json` which is written only by the
9
+ * restart orchestrator on self-triggered restarts — `launchctl kickstart`
10
+ * (an external restart) does not touch that file.
11
+ */
12
+ import fs from 'node:fs';
13
+ import path from 'node:path';
14
+ export function markerPath(stateDir) {
15
+ return path.join(stateDir, 'lifeline-started-at.json');
16
+ }
17
+ export function writeStartupMarker(stateDir, version) {
18
+ const marker = {
19
+ startedAt: new Date().toISOString(),
20
+ pid: process.pid,
21
+ version,
22
+ };
23
+ const p = markerPath(stateDir);
24
+ const tmp = `${p}.${process.pid}.tmp`;
25
+ try {
26
+ fs.mkdirSync(path.dirname(p), { recursive: true });
27
+ fs.writeFileSync(tmp, JSON.stringify(marker, null, 2), { mode: 0o600 });
28
+ fs.renameSync(tmp, p);
29
+ }
30
+ catch (err) {
31
+ console.error(`[Lifeline] failed to write startup marker: ${err}`);
32
+ }
33
+ return marker;
34
+ }
35
+ export function readStartupMarker(stateDir) {
36
+ try {
37
+ const raw = fs.readFileSync(markerPath(stateDir), 'utf-8');
38
+ const parsed = JSON.parse(raw);
39
+ if (parsed &&
40
+ typeof parsed === 'object' &&
41
+ typeof parsed.startedAt === 'string' &&
42
+ typeof parsed.pid === 'number' &&
43
+ typeof parsed.version === 'string') {
44
+ return parsed;
45
+ }
46
+ return null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ //# sourceMappingURL=startupMarker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startupMarker.js","sourceRoot":"","sources":["../../src/lifeline/startupMarker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,OAAe;IAClE,MAAM,MAAM,GAAkB;QAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO;KACR,CAAC;IACF,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACtC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IACE,MAAM;YACN,OAAO,MAAM,KAAK,QAAQ;YAC1B,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YACpC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAC9B,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAClC,CAAC;YACD,OAAO,MAAuB,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Version-handshake helpers shared by the lifeline forward path and
3
+ * the server's /internal/telegram-forward handler.
4
+ *
5
+ * Signal-vs-authority: this is a structural API-boundary validator
6
+ * (Hard-invariant carve-out in docs/signal-vs-authority.md). The MAJOR/MINOR
7
+ * compatibility rule is a fixed protocol policy, not a judgment call.
8
+ */
9
+ export declare const VERSION_REGEX: RegExp;
10
+ export declare const VERSION_MAX_LEN = 64;
11
+ export declare const PATCH_INFO_THRESHOLD = 10;
12
+ export interface Semver {
13
+ major: number;
14
+ minor: number;
15
+ patch: number;
16
+ prerelease?: string;
17
+ }
18
+ export declare function parseVersion(s: unknown): Semver | null;
19
+ export type HandshakeDecision = {
20
+ kind: 'accept';
21
+ } | {
22
+ kind: 'accept-with-patch-info';
23
+ patchDiff: number;
24
+ } | {
25
+ kind: 'upgrade-required';
26
+ serverVersion: Semver;
27
+ clientVersion: Semver;
28
+ serverVersionString: string;
29
+ };
30
+ /**
31
+ * Decide the handshake outcome given validated server + client versions.
32
+ *
33
+ * - MAJOR or MINOR differs → upgrade-required (426)
34
+ * - Same MAJOR.MINOR, |PATCH diff| > 10 → accept-with-patch-info (200 + info signal)
35
+ * - Otherwise → accept (200)
36
+ *
37
+ * Boundary: strict `>`. A PATCH diff of exactly 10 stays silent.
38
+ */
39
+ export declare function compareVersions(server: Semver, client: Semver): HandshakeDecision;
40
+ //# sourceMappingURL=versionHandshake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionHandshake.d.ts","sourceRoot":"","sources":["../../src/lifeline/versionHandshake.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,aAAa,QAAuD,CAAC;AAClF,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQtD;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5G;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAUjF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Version-handshake helpers shared by the lifeline forward path and
3
+ * the server's /internal/telegram-forward handler.
4
+ *
5
+ * Signal-vs-authority: this is a structural API-boundary validator
6
+ * (Hard-invariant carve-out in docs/signal-vs-authority.md). The MAJOR/MINOR
7
+ * compatibility rule is a fixed protocol policy, not a judgment call.
8
+ */
9
+ export const VERSION_REGEX = /^\d{1,4}\.\d{1,4}\.\d{1,4}(-[A-Za-z0-9.-]{1,32})?$/;
10
+ export const VERSION_MAX_LEN = 64;
11
+ export const PATCH_INFO_THRESHOLD = 10;
12
+ export function parseVersion(s) {
13
+ if (typeof s !== 'string')
14
+ return null;
15
+ if (s.length > VERSION_MAX_LEN)
16
+ return null;
17
+ if (!VERSION_REGEX.test(s))
18
+ return null;
19
+ const [core, prerelease] = s.split('-', 2);
20
+ const [major, minor, patch] = core.split('.').map(Number);
21
+ if (![major, minor, patch].every(n => Number.isFinite(n) && n >= 0))
22
+ return null;
23
+ return { major, minor, patch, prerelease };
24
+ }
25
+ /**
26
+ * Decide the handshake outcome given validated server + client versions.
27
+ *
28
+ * - MAJOR or MINOR differs → upgrade-required (426)
29
+ * - Same MAJOR.MINOR, |PATCH diff| > 10 → accept-with-patch-info (200 + info signal)
30
+ * - Otherwise → accept (200)
31
+ *
32
+ * Boundary: strict `>`. A PATCH diff of exactly 10 stays silent.
33
+ */
34
+ export function compareVersions(server, client) {
35
+ if (server.major !== client.major || server.minor !== client.minor) {
36
+ const serverVersionString = `${server.major}.${server.minor}.${server.patch}`;
37
+ return { kind: 'upgrade-required', serverVersion: server, clientVersion: client, serverVersionString };
38
+ }
39
+ const patchDiff = Math.abs(server.patch - client.patch);
40
+ if (patchDiff > PATCH_INFO_THRESHOLD) {
41
+ return { kind: 'accept-with-patch-info', patchDiff };
42
+ }
43
+ return { kind: 'accept' };
44
+ }
45
+ //# sourceMappingURL=versionHandshake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionHandshake.js","sourceRoot":"","sources":["../../src/lifeline/versionHandshake.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,oDAAoD,CAAC;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AASvC,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC,CAAC,MAAM,GAAG,eAAe;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC7C,CAAC;AAOD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAAc;IAC5D,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,mBAAmB,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACzG,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
@@ -20,7 +20,7 @@
20
20
  * bracketed-paste comfort zone get written to a temp file and replaced
21
21
  * with a "read this file" reference in the injection.
22
22
  */
23
- export declare const COMPACTION_RESUME_PREAMBLE = "Your session just went through context compaction \u2014 your working memory was reset. The context below is what you had before the reset. Briefly let the user know compaction occurred, then continue the conversation naturally.";
23
+ export declare const COMPACTION_RESUME_PREAMBLE: string;
24
24
  export interface HistoryEntryLike {
25
25
  text?: string;
26
26
  fromUser?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"compactionResumePayload.d.ts","sourceRoot":"","sources":["../../../src/messaging/shared/compactionResumePayload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,eAAO,MAAM,0BAA0B,yOAC4L,CAAC;AAEpO,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,MAAM,CAmBR"}
1
+ {"version":3,"file":"compactionResumePayload.d.ts","sourceRoot":"","sources":["../../../src/messaging/shared/compactionResumePayload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,eAAO,MAAM,0BAA0B,QAQzB,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,MAAM,CAqBR"}
@@ -23,7 +23,14 @@
23
23
  import fs from 'fs';
24
24
  import path from 'path';
25
25
  import { randomUUID } from 'crypto';
26
- export const COMPACTION_RESUME_PREAMBLE = 'Your session just went through context compaction — your working memory was reset. The context below is what you had before the reset. Briefly let the user know compaction occurred, then continue the conversation naturally.';
26
+ export const COMPACTION_RESUME_PREAMBLE = [
27
+ 'Your session just went through context compaction — your working memory was reset. The context below is what you had before the reset.',
28
+ '',
29
+ 'How to respond:',
30
+ '1. Your FIRST sentence must be a brief, calm statement that your session paused for context compaction and has now resumed. Do NOT say you "lost track," "got lost," "got confused," or "lost your place" — you did not. Compaction is a routine pause; narrate it as one.',
31
+ '2. Then respond directly to the user\'s MOST RECENT message in the context below. If it was a question, answer it. If it was a directive or a decision the user handed back to you ("your call", "you decide", "proceed as you see fit"), make the decision and act on it — do NOT reconstruct a generic status summary, re-offer options the user already delegated, or hand the choice back to them.',
32
+ '3. Assume full continuity. Any work-in-progress, open commitments, or next steps recorded in the context below are still yours to carry forward.',
33
+ ].join('\n');
27
34
  /**
28
35
  * Format a list of chronological messages as an inline block.
29
36
  * Used as a fallback when topicMemory isn't available (or for Slack,
@@ -80,9 +87,11 @@ export function prepareInjectionText(payload, triggerLabel, identifier, opts) {
80
87
  const filepath = path.join(tmpDir, filename);
81
88
  fs.writeFileSync(filepath, payload);
82
89
  console.log(`[CompactionResume] (${triggerLabel}) payload ${payload.length} chars > ${threshold}, wrote to ${filepath}`);
83
- return (`Your session just went through context compaction. Your prior working memory ` +
84
- `summary, recent messages, and lookup hints has been preserved at ${filepath}. ` +
85
- `Read that file IMMEDIATELY to re-orient, briefly let the user know compaction ` +
86
- `occurred, then continue the conversation naturally.`);
90
+ return (`Your session just went through context compaction your working memory was reset. ` +
91
+ `Your prior context (summary, recent messages, and lookup hints) has been preserved at ${filepath}. ` +
92
+ `Read that file IMMEDIATELY to re-orient, then respond to the user as follows:\n\n` +
93
+ `1. Your FIRST sentence must be a brief, calm statement that your session paused for context compaction and has now resumed. Do NOT say you "lost track," "got lost," "got confused," or "lost your place" — you did not. Compaction is a routine pause; narrate it as one.\n` +
94
+ `2. Then respond directly to the user's MOST RECENT message in the preserved context. If it was a question, answer it. If it was a directive or a decision the user handed back to you ("your call", "you decide", "proceed as you see fit"), make the decision and act on it — do NOT reconstruct a generic status summary, re-offer options the user already delegated, or hand the choice back to them.\n` +
95
+ `3. Assume full continuity. Any work-in-progress, open commitments, or next steps recorded in the preserved context are still yours to carry forward.`);
87
96
  }
88
97
  //# sourceMappingURL=compactionResumePayload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compactionResumePayload.js","sourceRoot":"","sources":["../../../src/messaging/shared/compactionResumePayload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compactionResumePayload.js","sourceRoot":"","sources":["../../../src/messaging/shared/compactionResumePayload.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}