claudelink 1.4.3 → 1.5.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.
Files changed (47) hide show
  1. package/README.md +58 -4
  2. package/dist/arm-compact.d.ts +2 -0
  3. package/dist/arm-compact.js +182 -0
  4. package/dist/arm-compact.js.map +1 -0
  5. package/dist/cli.js +145 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/compact-analyzer.d.ts +67 -0
  8. package/dist/compact-analyzer.js +309 -0
  9. package/dist/compact-analyzer.js.map +1 -0
  10. package/dist/compact-decision.d.ts +19 -0
  11. package/dist/compact-decision.js +47 -0
  12. package/dist/compact-decision.js.map +1 -0
  13. package/dist/compact-executor.d.ts +27 -0
  14. package/dist/compact-executor.js +160 -0
  15. package/dist/compact-executor.js.map +1 -0
  16. package/dist/context-watcher-settings.d.ts +21 -0
  17. package/dist/context-watcher-settings.js +176 -0
  18. package/dist/context-watcher-settings.js.map +1 -0
  19. package/dist/context-watcher.d.ts +70 -0
  20. package/dist/context-watcher.js +1035 -0
  21. package/dist/context-watcher.js.map +1 -0
  22. package/dist/db.d.ts +22 -1
  23. package/dist/db.js +184 -5
  24. package/dist/db.js.map +1 -1
  25. package/dist/hooks/stop-hook.js +30 -1
  26. package/dist/hooks/stop-hook.js.map +1 -1
  27. package/dist/index.js +144 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/manual-decision.d.ts +23 -0
  30. package/dist/manual-decision.js +67 -0
  31. package/dist/manual-decision.js.map +1 -0
  32. package/dist/prompt-clear.d.ts +8 -0
  33. package/dist/prompt-clear.js +33 -0
  34. package/dist/prompt-clear.js.map +1 -0
  35. package/dist/recovery-watcher.d.ts +6 -0
  36. package/dist/recovery-watcher.js +20 -0
  37. package/dist/recovery-watcher.js.map +1 -1
  38. package/dist/role-collision.d.ts +6 -0
  39. package/dist/role-collision.js +51 -0
  40. package/dist/role-collision.js.map +1 -0
  41. package/dist/ui-server.d.ts +4 -0
  42. package/dist/ui-server.js +899 -20
  43. package/dist/ui-server.js.map +1 -1
  44. package/dist/usage-reader.d.ts +79 -0
  45. package/dist/usage-reader.js +553 -0
  46. package/dist/usage-reader.js.map +1 -0
  47. package/package.json +8 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-executor.js","sourceRoot":"","sources":["../src/compact-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type WatcherMode = "observe" | "inject";
2
+ export interface ContextWatcherSettings {
3
+ enabled: boolean;
4
+ mode: WatcherMode;
5
+ intervalSec: number;
6
+ contextOccupancyThreshold: number;
7
+ dollarPerTurnThreshold: number;
8
+ handshakeOverheadTokens: number;
9
+ activeWindowMin: number;
10
+ thresholdTokens: number;
11
+ compactBaselineTokens: number;
12
+ cooldownMin: number;
13
+ message: string;
14
+ askMessage: string;
15
+ consentFreshMin: number;
16
+ injectAllowlist: string[];
17
+ oneShot: boolean;
18
+ activeSince: string | null;
19
+ }
20
+ export declare function readContextWatcherSettings(): ContextWatcherSettings;
21
+ export declare function writeContextWatcherSettings(partial: Partial<ContextWatcherSettings>): ContextWatcherSettings;
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ // Persistent settings for the context-hygiene watcher. Stored as JSON at
3
+ // ~/.claudelink/context-watcher.json. Parallel to recovery-watcher-settings.ts.
4
+ //
5
+ // The watcher monitors each live agent's CURRENT context occupancy (read from
6
+ // its Claude Code transcript) and, at a threshold, nudges /compact into that
7
+ // terminal so the agent stops re-reading a huge context every turn.
8
+ //
9
+ // SAFETY: mode defaults to "observe" — detect + log + project savings, NEVER
10
+ // inject. "inject" mode (types /compact into live terminals) is founder-gated
11
+ // and additionally idle-gated at dispatch time. enabled defaults to false.
12
+ //
13
+ // Defaults are CONSERVATIVE and PROVISIONAL — thresholdTokens / compactBaseline
14
+ // align to the team's token/context protocol (dev-03) once it lands.
15
+ var __importDefault = (this && this.__importDefault) || function (mod) {
16
+ return (mod && mod.__esModule) ? mod : { "default": mod };
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.readContextWatcherSettings = readContextWatcherSettings;
20
+ exports.writeContextWatcherSettings = writeContextWatcherSettings;
21
+ const fs_1 = __importDefault(require("fs"));
22
+ const path_1 = __importDefault(require("path"));
23
+ const os_1 = __importDefault(require("os"));
24
+ // Settings location: defaults to ~/.claudelink/context-watcher.json. Honors
25
+ // CLAUDELINK_CONTEXT_WATCHER_SETTINGS env var override so tests can run
26
+ // against a temp file without disturbing the live fleet's config.
27
+ // Evaluated on each call (not cached at module load) so tests can set the
28
+ // env var AFTER importing the module.
29
+ function settingsPath() {
30
+ return (process.env.CLAUDELINK_CONTEXT_WATCHER_SETTINGS ||
31
+ path_1.default.join(os_1.default.homedir(), ".claudelink", "context-watcher.json"));
32
+ }
33
+ const DEFAULTS = {
34
+ enabled: false,
35
+ mode: "observe",
36
+ intervalSec: 120,
37
+ contextOccupancyThreshold: 0.5,
38
+ dollarPerTurnThreshold: 0.27,
39
+ handshakeOverheadTokens: 5000,
40
+ activeWindowMin: 15,
41
+ thresholdTokens: 200000,
42
+ compactBaselineTokens: 60000,
43
+ cooldownMin: 30,
44
+ message: "/compact",
45
+ askMessage: "Context check (automated): you're at high context occupancy and currently idle. If this is a good moment to /compact, FIRST update your HANDOVER.md / artifacts so nothing is lost, THEN call signal_checkpoint with safe_to_clear=true and your handoff_path to consent — I'll /compact you on the next check. If you're mid-something-heavy, call signal_checkpoint with safe_to_clear=false and a one-line note and I'll hold off.",
46
+ consentFreshMin: 15,
47
+ injectAllowlist: [], // fail-closed: empty = arm nobody
48
+ oneShot: true,
49
+ activeSince: null,
50
+ };
51
+ function cleanAllowlist(v) {
52
+ if (!Array.isArray(v))
53
+ return [];
54
+ // Trim whitespace + drop empties + dedupe. Without trim, `["dev", "dev "]`
55
+ // would pass two distinct entries through and the gate's role-includes check
56
+ // would treat "dev " and "dev" as different roles — a footgun if the
57
+ // operator pastes a list with a stray space. Dedupe is belt-and-braces.
58
+ const seen = new Set();
59
+ const out = [];
60
+ for (const x of v) {
61
+ if (typeof x !== "string")
62
+ continue;
63
+ const trimmed = x.trim();
64
+ if (trimmed.length === 0)
65
+ continue;
66
+ if (seen.has(trimmed))
67
+ continue;
68
+ seen.add(trimmed);
69
+ out.push(trimmed);
70
+ }
71
+ return out;
72
+ }
73
+ function clampInt(n, lo, hi, dflt) {
74
+ if (Number.isNaN(n))
75
+ return dflt;
76
+ return Math.max(lo, Math.min(hi, Math.floor(n)));
77
+ }
78
+ // Fractional [0,1]-style threshold, clamped to a sensible operational range.
79
+ // Lower bound 0.10 prevents a typo (0.05) from arming the whole fleet at 10K
80
+ // tokens; upper bound 0.95 keeps any nonzero fire latitude on a model whose
81
+ // window we mis-estimate.
82
+ function clampFrac(n, lo, hi, dflt) {
83
+ if (!Number.isFinite(n))
84
+ return dflt;
85
+ return Math.max(lo, Math.min(hi, n));
86
+ }
87
+ function readContextWatcherSettings() {
88
+ const SETTINGS_PATH = settingsPath();
89
+ try {
90
+ const raw = fs_1.default.readFileSync(SETTINGS_PATH, "utf8");
91
+ const parsed = JSON.parse(raw);
92
+ return {
93
+ enabled: Boolean(parsed.enabled),
94
+ mode: parsed.mode === "inject" ? "inject" : "observe",
95
+ intervalSec: clampInt(Number(parsed.intervalSec), 30, 600, DEFAULTS.intervalSec),
96
+ contextOccupancyThreshold: clampFrac(Number(parsed.contextOccupancyThreshold), 0.1, 0.95, DEFAULTS.contextOccupancyThreshold),
97
+ dollarPerTurnThreshold: Number.isFinite(Number(parsed.dollarPerTurnThreshold)) && Number(parsed.dollarPerTurnThreshold) > 0
98
+ ? Math.max(0.01, Math.min(10, Number(parsed.dollarPerTurnThreshold)))
99
+ : DEFAULTS.dollarPerTurnThreshold,
100
+ handshakeOverheadTokens: clampInt(Number(parsed.handshakeOverheadTokens), 0, 50000, DEFAULTS.handshakeOverheadTokens),
101
+ activeWindowMin: clampInt(Number(parsed.activeWindowMin), 1, 240, DEFAULTS.activeWindowMin),
102
+ thresholdTokens: clampInt(Number(parsed.thresholdTokens), 20000, 1000000, DEFAULTS.thresholdTokens),
103
+ compactBaselineTokens: clampInt(Number(parsed.compactBaselineTokens), 5000, 200000, DEFAULTS.compactBaselineTokens),
104
+ cooldownMin: clampInt(Number(parsed.cooldownMin), 5, 240, DEFAULTS.cooldownMin),
105
+ message: typeof parsed.message === "string" && parsed.message.length > 0
106
+ ? parsed.message
107
+ : DEFAULTS.message,
108
+ askMessage: typeof parsed.askMessage === "string" && parsed.askMessage.length > 0
109
+ ? parsed.askMessage
110
+ : DEFAULTS.askMessage,
111
+ consentFreshMin: clampInt(Number(parsed.consentFreshMin), 1, 120, DEFAULTS.consentFreshMin),
112
+ injectAllowlist: cleanAllowlist(parsed.injectAllowlist),
113
+ oneShot: parsed.oneShot === undefined ? DEFAULTS.oneShot : Boolean(parsed.oneShot),
114
+ activeSince: typeof parsed.activeSince === "string" && parsed.activeSince.length > 0
115
+ ? parsed.activeSince
116
+ : null,
117
+ };
118
+ }
119
+ catch {
120
+ return { ...DEFAULTS };
121
+ }
122
+ }
123
+ function writeContextWatcherSettings(partial) {
124
+ const current = readContextWatcherSettings();
125
+ const merged = {
126
+ enabled: partial.enabled !== undefined ? Boolean(partial.enabled) : current.enabled,
127
+ mode: partial.mode === "inject" || partial.mode === "observe" ? partial.mode : current.mode,
128
+ intervalSec: partial.intervalSec !== undefined
129
+ ? clampInt(Number(partial.intervalSec), 30, 600, current.intervalSec)
130
+ : current.intervalSec,
131
+ contextOccupancyThreshold: partial.contextOccupancyThreshold !== undefined
132
+ ? clampFrac(Number(partial.contextOccupancyThreshold), 0.1, 0.95, current.contextOccupancyThreshold)
133
+ : current.contextOccupancyThreshold,
134
+ dollarPerTurnThreshold: partial.dollarPerTurnThreshold !== undefined && Number(partial.dollarPerTurnThreshold) > 0
135
+ ? Math.max(0.01, Math.min(10, Number(partial.dollarPerTurnThreshold)))
136
+ : current.dollarPerTurnThreshold,
137
+ handshakeOverheadTokens: partial.handshakeOverheadTokens !== undefined
138
+ ? clampInt(Number(partial.handshakeOverheadTokens), 0, 50000, current.handshakeOverheadTokens)
139
+ : current.handshakeOverheadTokens,
140
+ activeWindowMin: partial.activeWindowMin !== undefined
141
+ ? clampInt(Number(partial.activeWindowMin), 1, 240, current.activeWindowMin)
142
+ : current.activeWindowMin,
143
+ thresholdTokens: partial.thresholdTokens !== undefined
144
+ ? clampInt(Number(partial.thresholdTokens), 20000, 1000000, current.thresholdTokens)
145
+ : current.thresholdTokens,
146
+ compactBaselineTokens: partial.compactBaselineTokens !== undefined
147
+ ? clampInt(Number(partial.compactBaselineTokens), 5000, 200000, current.compactBaselineTokens)
148
+ : current.compactBaselineTokens,
149
+ cooldownMin: partial.cooldownMin !== undefined
150
+ ? clampInt(Number(partial.cooldownMin), 5, 240, current.cooldownMin)
151
+ : current.cooldownMin,
152
+ message: partial.message !== undefined && typeof partial.message === "string" && partial.message.length > 0
153
+ ? partial.message
154
+ : current.message,
155
+ askMessage: partial.askMessage !== undefined && typeof partial.askMessage === "string" && partial.askMessage.length > 0
156
+ ? partial.askMessage
157
+ : current.askMessage,
158
+ consentFreshMin: partial.consentFreshMin !== undefined
159
+ ? clampInt(Number(partial.consentFreshMin), 1, 120, current.consentFreshMin)
160
+ : current.consentFreshMin,
161
+ injectAllowlist: partial.injectAllowlist !== undefined ? cleanAllowlist(partial.injectAllowlist) : current.injectAllowlist,
162
+ oneShot: partial.oneShot !== undefined ? Boolean(partial.oneShot) : current.oneShot,
163
+ activeSince: partial.activeSince !== undefined
164
+ ? (typeof partial.activeSince === "string" && partial.activeSince.length > 0 ? partial.activeSince : null)
165
+ : current.activeSince,
166
+ };
167
+ const SETTINGS_PATH = settingsPath();
168
+ const dir = path_1.default.dirname(SETTINGS_PATH);
169
+ if (!fs_1.default.existsSync(dir))
170
+ fs_1.default.mkdirSync(dir, { recursive: true });
171
+ const tmp = SETTINGS_PATH + ".tmp";
172
+ fs_1.default.writeFileSync(tmp, JSON.stringify(merged, null, 2));
173
+ fs_1.default.renameSync(tmp, SETTINGS_PATH);
174
+ return merged;
175
+ }
176
+ //# sourceMappingURL=context-watcher-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-watcher-settings.js","sourceRoot":"","sources":["../src/context-watcher-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { WatcherMode } from "./context-watcher-settings.js";
2
+ export interface GateStatusFields {
3
+ role: string;
4
+ agent_id: string;
5
+ mode: WatcherMode;
6
+ decision: string;
7
+ reason?: string;
8
+ context?: number;
9
+ occupancy_pct?: number;
10
+ model?: string;
11
+ per_turn_usd?: number;
12
+ turns_per_hr?: number;
13
+ progressing?: boolean;
14
+ signal_age_min?: number | null;
15
+ signal_age_turns?: number;
16
+ safe_to_clear?: 0 | 1;
17
+ economic_gate?: boolean;
18
+ ambiguous?: boolean;
19
+ allowlisted?: boolean;
20
+ idle?: boolean;
21
+ fresh_consent?: boolean;
22
+ handoff_ok?: boolean;
23
+ net_saved_usd?: number;
24
+ }
25
+ export declare function formatGateStatus(f: GateStatusFields): string;
26
+ interface TurnEconomics {
27
+ contextTokens: number;
28
+ model: string;
29
+ lastTurnTs: number;
30
+ turnsPerHour: number;
31
+ }
32
+ export declare function latestTurnEconomics(file: string): Promise<TurnEconomics | null>;
33
+ export interface CompactOpportunity {
34
+ windowDays: number;
35
+ thresholdTokens: number;
36
+ compactBaselineTokens: number;
37
+ flaggedTurns: number;
38
+ excessTokensUpperBound: number;
39
+ estUsdUpperBound: number;
40
+ perProject: {
41
+ label: string;
42
+ roles: string[];
43
+ flaggedTurns: number;
44
+ excessTokens: number;
45
+ }[];
46
+ }
47
+ interface AgentRef {
48
+ role: string;
49
+ pid: number;
50
+ }
51
+ export declare function projectCompactOpportunity(agents: AgentRef[], windowDays?: number, thresholdTokens?: number, compactBaselineTokens?: number): Promise<CompactOpportunity>;
52
+ export declare function armGate(file: string, checkpointTs: number | null): Promise<{
53
+ idle: boolean;
54
+ turnsSinceSignal: number;
55
+ detail: string;
56
+ latestType: string;
57
+ ageSec: number;
58
+ }>;
59
+ export interface ContextWatcherHandle {
60
+ reschedule: () => void;
61
+ stop: () => void;
62
+ tickNow: () => Promise<{
63
+ checked: number;
64
+ flagged: number;
65
+ wouldNudge: number;
66
+ injected: number;
67
+ }>;
68
+ }
69
+ export declare function startContextWatcher(): ContextWatcherHandle;
70
+ export {};