openlimiter 1.3.5 → 2.0.0
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/dist/activity/event.d.ts +19 -0
- package/dist/activity/event.d.ts.map +1 -0
- package/dist/activity/event.js +169 -0
- package/dist/activity/event.js.map +1 -0
- package/dist/bin.js +5 -3
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +74 -42
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -11
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -1
- package/dist/config.js.map +1 -1
- package/dist/hub-sync.d.ts +1 -1
- package/dist/hub-sync.js +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +16 -1
- package/dist/render.js.map +1 -1
- package/dist/session.d.ts +6 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +1 -1
- package/dist/session.js.map +1 -1
- package/dist/smoke.d.ts +1 -1
- package/dist/smoke.d.ts.map +1 -1
- package/dist/statusline-ingest.d.ts +10 -0
- package/dist/statusline-ingest.d.ts.map +1 -0
- package/dist/statusline-ingest.js +28 -0
- package/dist/statusline-ingest.js.map +1 -0
- package/dist/statusline.d.ts +10 -11
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +144 -126
- package/dist/statusline.js.map +1 -1
- package/dist/terminal-fallback.d.ts +1 -0
- package/dist/terminal-fallback.d.ts.map +1 -1
- package/dist/terminal-fallback.js +15 -3
- package/dist/terminal-fallback.js.map +1 -1
- package/dist/terminal.d.ts +10 -8
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +38 -88
- package/dist/terminal.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Readable } from "node:stream";
|
|
2
|
+
import type { ActivityEvent } from "../../../core/dist/activity/contract.js";
|
|
3
|
+
export declare const EVENT_INPUT_MAX_BYTES = 65536;
|
|
4
|
+
export declare const EVENT_DEADLINE_MS = 100;
|
|
5
|
+
/** Every retained value is structural. Never spread, stringify or inspect free text. */
|
|
6
|
+
export declare function mapHookActivity(agentName: string, eventName: string, payload: unknown, now?: number): ActivityEvent | null;
|
|
7
|
+
export interface EventDependencies {
|
|
8
|
+
stateDirectory?: string;
|
|
9
|
+
readStandardInput: (signal?: AbortSignal) => Promise<string | null>;
|
|
10
|
+
protectWindowsDirectory?: (directory: string) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function eventCommand(argumentsList: readonly string[], dependencies: EventDependencies): Promise<{
|
|
13
|
+
exitCode: 0;
|
|
14
|
+
stdout: "";
|
|
15
|
+
stderr: "";
|
|
16
|
+
}>;
|
|
17
|
+
/** A bounded streaming reader for the standalone hook entry, with no retained tail. */
|
|
18
|
+
export declare function readEventInput(signal?: AbortSignal, input?: Readable): Promise<string | null>;
|
|
19
|
+
//# sourceMappingURL=event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/activity/event.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,yCAAyC,CAAC;AAO5F,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAYrC,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAa,GAAG,aAAa,GAAG,IAAI,CAyC9H;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpE,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,wBAAsB,YAAY,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,EAAE,CAAC;IAAC,MAAM,EAAE,EAAE,CAAA;CAAE,CAAC,CA+BtJ;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,GAAE,QAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiC5G"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { resolveStateDirectory } from "@openlimiter/core";
|
|
5
|
+
// Resolve beside the installed core entry, including when tests relocate the CLI.
|
|
6
|
+
// The package export map is frozen outside this unit's write scope.
|
|
7
|
+
const coreEntry = pathToFileURL(createRequire(import.meta.url).resolve("@openlimiter/core"));
|
|
8
|
+
const { isActivityEvent, isContractObject } = await import(new URL("./activity/contract.js", coreEntry).href);
|
|
9
|
+
const { writeActivityEvent } = await import(new URL("./activity/spool.js", coreEntry).href);
|
|
10
|
+
export const EVENT_INPUT_MAX_BYTES = 65_536;
|
|
11
|
+
export const EVENT_DEADLINE_MS = 100;
|
|
12
|
+
const agents = {
|
|
13
|
+
claude: "claude_code", codex: "codex", muse: "muse", gemini: "gemini_cli", cursor: "cursor"
|
|
14
|
+
};
|
|
15
|
+
const events = {
|
|
16
|
+
claude: ["SessionStart", "UserPromptSubmit", "Notification", "Stop", "SessionEnd"],
|
|
17
|
+
codex: ["SessionStart", "UserPromptSubmit", "PermissionRequest", "Stop", "SessionEnd"],
|
|
18
|
+
muse: ["SessionStart", "UserPromptSubmit", "PermissionRequest", "Notification", "Stop", "SessionEnd"],
|
|
19
|
+
gemini: ["SessionStart", "BeforeAgent", "Notification", "AfterAgent", "SessionEnd"],
|
|
20
|
+
cursor: ["sessionStart", "beforeSubmitPrompt", "stop", "sessionEnd"]
|
|
21
|
+
};
|
|
22
|
+
/** Every retained value is structural. Never spread, stringify or inspect free text. */
|
|
23
|
+
export function mapHookActivity(agentName, eventName, payload, now = Date.now()) {
|
|
24
|
+
const agent = agents[agentName];
|
|
25
|
+
if (!agent || !events[agentName]?.includes(eventName) || !isContractObject(payload))
|
|
26
|
+
return null;
|
|
27
|
+
if (payload["hook_event_name"] !== undefined && payload["hook_event_name"] !== eventName)
|
|
28
|
+
return null;
|
|
29
|
+
const sessionId = agent === "cursor" ? payload["conversation_id"] ?? payload["session_id"] : payload["session_id"];
|
|
30
|
+
if (typeof sessionId !== "string" || /[\\/]/u.test(sessionId) || sessionId === "." || sessionId === "..")
|
|
31
|
+
return null;
|
|
32
|
+
const event = {
|
|
33
|
+
version: 1, eventId: randomUUID(), sessionId, sequence: now * 1_000,
|
|
34
|
+
agent, observedAt: new Date(now).toISOString(), state: "unknown", source: "hook",
|
|
35
|
+
confidence: "explicit", process: { ppid: process.ppid }, signal: "observation"
|
|
36
|
+
};
|
|
37
|
+
if (eventName === "SessionStart" || eventName === "sessionStart")
|
|
38
|
+
event.state = "idle";
|
|
39
|
+
else if (["UserPromptSubmit", "BeforeAgent", "beforeSubmitPrompt"].includes(eventName))
|
|
40
|
+
event.state = "busy";
|
|
41
|
+
else if (eventName === "PermissionRequest")
|
|
42
|
+
event.state = "waiting";
|
|
43
|
+
else if (eventName === "Notification") {
|
|
44
|
+
const kind = payload["notification_type"];
|
|
45
|
+
if ((agent === "gemini_cli" && kind === "ToolPermission") ||
|
|
46
|
+
((agent === "claude_code" || agent === "muse") && kind === "permission_prompt"))
|
|
47
|
+
event.state = "waiting";
|
|
48
|
+
else if (agent === "claude_code" && kind === "elicitation_dialog") {
|
|
49
|
+
event.state = "waiting";
|
|
50
|
+
event.signal = "user_question";
|
|
51
|
+
}
|
|
52
|
+
else if (agent === "claude_code" && kind === "idle_prompt") {
|
|
53
|
+
event.state = "idle";
|
|
54
|
+
event.confidence = "inferred";
|
|
55
|
+
}
|
|
56
|
+
else
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
else if (eventName === "SessionEnd" || eventName === "sessionEnd") {
|
|
60
|
+
event.signal = "session_ended";
|
|
61
|
+
if (agent === "cursor" && payload["reason"] === "aborted")
|
|
62
|
+
event.outcome = "cancelled";
|
|
63
|
+
if (agent === "cursor" && payload["reason"] === "error")
|
|
64
|
+
event.outcome = "failed";
|
|
65
|
+
}
|
|
66
|
+
else if (agent === "cursor") {
|
|
67
|
+
if (payload["status"] === "completed")
|
|
68
|
+
event.state = "done";
|
|
69
|
+
else if (payload["status"] === "aborted")
|
|
70
|
+
event.outcome = "cancelled";
|
|
71
|
+
else if (payload["status"] === "error")
|
|
72
|
+
event.outcome = "failed";
|
|
73
|
+
else
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
event.state = payload["stop_hook_active"] === true ? "busy" : "done";
|
|
78
|
+
if (agent === "claude_code" && event.state === "done")
|
|
79
|
+
event.signal = "claude_stop";
|
|
80
|
+
}
|
|
81
|
+
// Codex uses the parent's session_id on child hooks. Suppress those observations.
|
|
82
|
+
if ((agent === "codex" || agent === "claude_code") && typeof payload["agent_id"] === "string")
|
|
83
|
+
event.isSidechain = true;
|
|
84
|
+
return isActivityEvent(event, now) ? event : null;
|
|
85
|
+
}
|
|
86
|
+
export async function eventCommand(argumentsList, dependencies) {
|
|
87
|
+
const deadline = new AbortController();
|
|
88
|
+
const expires = performance.now() + EVENT_DEADLINE_MS;
|
|
89
|
+
let timer = setTimeout(() => deadline.abort(), EVENT_DEADLINE_MS);
|
|
90
|
+
try {
|
|
91
|
+
const flag = (name) => {
|
|
92
|
+
const index = argumentsList.indexOf(name);
|
|
93
|
+
return index < 0 ? "" : argumentsList[index + 1] ?? "";
|
|
94
|
+
};
|
|
95
|
+
const raw = await Promise.race([
|
|
96
|
+
dependencies.readStandardInput(deadline.signal),
|
|
97
|
+
new Promise((resolve) => deadline.signal.addEventListener("abort", () => resolve(null), { once: true }))
|
|
98
|
+
]);
|
|
99
|
+
if (deadline.signal.aborted || raw === null || Buffer.byteLength(raw) > EVENT_INPUT_MAX_BYTES)
|
|
100
|
+
return { exitCode: 0, stdout: "", stderr: "" };
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const event = mapHookActivity(flag("--agent"), flag("--event"), JSON.parse(raw), now);
|
|
103
|
+
const options = {
|
|
104
|
+
directory: dependencies.stateDirectory ?? resolveStateDirectory(), now, signal: deadline.signal, deadline: expires,
|
|
105
|
+
...(dependencies.protectWindowsDirectory ? { protectWindowsDirectory: async (directory) => {
|
|
106
|
+
// Cold ACL verification is outside the warm hook budget.
|
|
107
|
+
const remaining = Math.max(0, options.deadline - performance.now());
|
|
108
|
+
clearTimeout(timer);
|
|
109
|
+
await dependencies.protectWindowsDirectory(directory);
|
|
110
|
+
options.deadline = performance.now() + remaining;
|
|
111
|
+
timer = setTimeout(() => deadline.abort(), remaining);
|
|
112
|
+
} } : {})
|
|
113
|
+
};
|
|
114
|
+
if (event !== null)
|
|
115
|
+
await writeActivityEvent(event, options);
|
|
116
|
+
}
|
|
117
|
+
catch { /* Activity must never affect the host, including malformed stdin and disk failures. */ }
|
|
118
|
+
finally {
|
|
119
|
+
clearTimeout(timer);
|
|
120
|
+
deadline.abort();
|
|
121
|
+
}
|
|
122
|
+
return { exitCode: 0, stdout: "", stderr: "" };
|
|
123
|
+
}
|
|
124
|
+
/** A bounded streaming reader for the standalone hook entry, with no retained tail. */
|
|
125
|
+
export function readEventInput(signal, input = process.stdin) {
|
|
126
|
+
return new Promise((resolve) => {
|
|
127
|
+
let chunks = [];
|
|
128
|
+
let size = 0;
|
|
129
|
+
let finished = false;
|
|
130
|
+
const finish = (value) => {
|
|
131
|
+
if (finished)
|
|
132
|
+
return;
|
|
133
|
+
finished = true;
|
|
134
|
+
input.removeListener("data", data);
|
|
135
|
+
input.removeListener("end", end);
|
|
136
|
+
input.removeListener("error", failed);
|
|
137
|
+
input.removeListener("close", failed);
|
|
138
|
+
signal?.removeEventListener("abort", failed);
|
|
139
|
+
input.pause();
|
|
140
|
+
input.destroy();
|
|
141
|
+
chunks = [];
|
|
142
|
+
resolve(value);
|
|
143
|
+
};
|
|
144
|
+
const data = (chunk) => {
|
|
145
|
+
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
146
|
+
size += bytes.length;
|
|
147
|
+
if (size > EVENT_INPUT_MAX_BYTES)
|
|
148
|
+
finish(null);
|
|
149
|
+
else
|
|
150
|
+
chunks.push(bytes);
|
|
151
|
+
};
|
|
152
|
+
const end = () => {
|
|
153
|
+
try {
|
|
154
|
+
finish(new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks)));
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
finish(null);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const failed = () => finish(null);
|
|
161
|
+
if (signal?.aborted) {
|
|
162
|
+
finish(null);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
input.on("data", data).once("end", end).once("error", failed).once("close", failed);
|
|
166
|
+
signal?.addEventListener("abort", failed, { once: true });
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/activity/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,kFAAkF;AAClF,oEAAoE;AACpE,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC7F,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,IAAI,CAA6D,CAAC;AAC1K,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,IAAI,CAA0D,CAAC;AAErJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,MAAM,GAA4C;IACtD,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ;CAC5F,CAAC;AACF,MAAM,MAAM,GAAgD;IAC1D,MAAM,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC;IAClF,KAAK,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,CAAC;IACtF,IAAI,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC;IACrG,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC;IACnF,MAAM,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY,CAAC;CACrE,CAAC;AAEF,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACtG,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtG,MAAM,SAAS,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnH,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtH,MAAM,KAAK,GAAkB;QAC3B,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,GAAG,KAAK;QACnE,KAAK,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;QAChF,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa;KAC/E,CAAC;IACF,IAAI,SAAS,KAAK,cAAc,IAAI,SAAS,KAAK,cAAc;QAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;SAClF,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;SACxG,IAAI,SAAS,KAAK,mBAAmB;QAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;SAC/D,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,KAAK,gBAAgB,CAAC;YACvD,CAAC,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,MAAM,CAAC,IAAI,IAAI,KAAK,mBAAmB,CAAC;YAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;aACtG,IAAI,KAAK,KAAK,aAAa,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAClE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YACxB,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC7D,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YACrB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAChC,CAAC;;YAAM,OAAO,IAAI,CAAC;IACrB,CAAC;SAAM,IAAI,SAAS,KAAK,YAAY,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QACpE,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC;QAC/B,IAAI,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;QACvF,IAAI,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IACpF,CAAC;SAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,WAAW;YAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;aACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;aACjE,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;;YAC5D,OAAO,IAAI,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;IACtF,CAAC;IACD,kFAAkF;IAClF,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,aAAa,CAAC,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACxH,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,aAAgC,EAAE,YAA+B;IAClG,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;IACtD,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE;YACpC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC7B,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/C,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/G,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,qBAAqB;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC9I,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,EAAE,GAAG,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,YAAY,CAAC,cAAc,IAAI,qBAAqB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YAClH,GAAG,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;oBAChG,yDAAyD;oBACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;oBACpE,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM,YAAY,CAAC,uBAAwB,CAAC,SAAS,CAAC,CAAC;oBACvD,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACjD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;gBACxD,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACV,CAAC;QACF,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC,CAAC,uFAAuF,CAAC,CAAC;YAC3F,CAAC;QAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;IAClD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACjD,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,MAAoB,EAAE,QAAkB,OAAO,CAAC,KAAK;IAClF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,GAAa,EAAE,CAAC;QAC1B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC5C,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACjC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7C,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,GAAG,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,qBAAqB;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;;gBAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,GAAS,EAAE;YACrB,IAAI,CAAC;gBAAC,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACxF,MAAM,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/bin.js
CHANGED
|
@@ -93,9 +93,11 @@ else {
|
|
|
93
93
|
promptForSecret,
|
|
94
94
|
promptChoice,
|
|
95
95
|
...(controller === null ? {} : { interruptSignal: controller.signal }),
|
|
96
|
-
readStandardInput: (signal) => argumentsList[0] === "
|
|
97
|
-
?
|
|
98
|
-
:
|
|
96
|
+
readStandardInput: async (signal) => argumentsList[0] === "event"
|
|
97
|
+
? (await import("./activity/event.js")).readEventInput(signal)
|
|
98
|
+
: argumentsList[0] === "hook"
|
|
99
|
+
? readStandardInputText(process.stdin, HOOK_INPUT_MAX_BYTES, undefined, signal)
|
|
100
|
+
: readStandardInputText()
|
|
99
101
|
});
|
|
100
102
|
if (controller !== null)
|
|
101
103
|
process.off("SIGINT", onInterrupt);
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import { ACQUISITION_OUTCOME_SENTENCE, ACQUISITION_PROVIDERS, registerManagedCodexAccount, CREDENTIAL_FAILURE_SENTENCE, PROVIDER_CODES, acquireRefreshLock, clearRefreshSpawnFailure, mergeAcquiredSnapshots, createFetchTransport, readRefreshSpawnFailure, antigravitySpec, buildAdvice, canonicalJson, claudeSpec, codexSpec, dedupeFailures, desktopHoldsCache, failureFromConnectorReason, freshness, geminiCliSpec, grokSpec, isProviderDue, kimiSpec, mergeSnapshots, normalizeMeters, normalizeMetersReport, openrouterSpec, readAcquisitionCredential, readAcquisitionSchedule, readSnapshotCache, readWindowsCredentialWith, resolveStateDirectory, runAcquisition, spawnDetachedRefresh, writeAcquisitionSchedule, probeAntigravity, resolveAgyExecutablePath } from "@openlimiter/core";
|
|
2
|
-
import { antigravityFixture, claudeFixture, codexFixture, grokFixture, kimiFixture, connectors, manualFixture, opencodeFixture, openrouterFixture, parseAntigravityCodeAssistPayload, parseAntigravityPayload, parseClaudePayload, parseCodexPayload, parseGeminiCliPayload, parseGrokPayload, parseKimiPayload, parseManualPayload, parseOpencodePayload, parseOpenrouterPayload } from "@openlimiter/connectors";
|
|
1
|
+
import { ACQUISITION_OUTCOME_SENTENCE, ACQUISITION_PROVIDERS, registerManagedCodexAccount, CREDENTIAL_FAILURE_SENTENCE, PROVIDER_CODES, acquireRefreshLock, clearRefreshSpawnFailure, mergeAcquiredSnapshots, createFetchTransport, readRefreshSpawnFailure, antigravitySpec, buildAdvice, canonicalJson, claudeSpec, codexSpec, cursorSpec, dedupeFailures, desktopHoldsCache, failureFromConnectorReason, freshness, geminiCliSpec, grokSpec, isProviderDue, kimiSpec, mergeSnapshots, normalizeMeters, normalizeMetersReport, openrouterSpec, readAcquisitionCredential, readAcquisitionSchedule, readSnapshotCache, readWindowsCredentialWith, resolveStateDirectory, runAcquisition, spawnDetachedRefresh, writeAcquisitionSchedule, probeAntigravity, resolveAgyExecutablePath } from "@openlimiter/core";
|
|
2
|
+
import { antigravityFixture, claudeFixture, codexFixture, grokFixture, kimiFixture, connectors, manualFixture, opencodeFixture, openrouterFixture, parseAntigravityCodeAssistPayload, parseAntigravityPayload, parseClaudePayload, parseCodexPayload, parseCursorPayload, parseGeminiCliPayload, parseGrokPayload, parseKimiPayload, parseManualPayload, parseOpencodePayload, parseOpenrouterPayload } from "@openlimiter/connectors";
|
|
3
3
|
import { AGENT_COMPATIBILITY, agentContextFromCache, agentContextSpillFromCache, agentVersionCompatibility, changeAgentHook, detectAgentInstallation, readAgentHookStatus, runAgentHook, validateAgentExecutableStamp, writeAgentContextSnapshot, loadHostedContextTrust, renderClaudeStatusline } from "@openlimiter/adapters";
|
|
4
4
|
import { execFile, spawn } from "node:child_process";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
|
+
import packageJson from "../package.json" with { type: "json" };
|
|
6
7
|
import { homedir } from "node:os";
|
|
8
|
+
import path from "node:path";
|
|
7
9
|
import { PROVIDER_KEYS, STATUSLINE_KEYS, defaultConfig, initialize, isProviderKey, isStatuslineKey, providerValueText, readConfig, readProvidersConfig, readStatuslineConfig, setProviderValue, setStatuslineValue, statuslineValueText, writeConfig } from "./config.js";
|
|
8
10
|
import { ACQUISITION_PROVENANCE, ANTIGRAVITY_STATUSLINE_PROVENANCE, GROK_STATUSLINE_PROVENANCE, INGEST_PROVENANCE, MANUAL_PROVENANCE, STATUSLINE_PROVENANCE, environmentWithLocalMarkers, STDIN_BYTE_LIMIT, parseAntigravityStatuslinePayload, parseGrokStatuslinePayload, parseJsonText, persistSnapshots, readManualDocument, withProvenance } from "./ingest.js";
|
|
9
11
|
import { UnavailableCredentialStore } from "./credentials.js";
|
|
10
12
|
import { failureLine, failureLines, renderTable, supportsColor } from "./render.js";
|
|
11
|
-
import { isStatuslineHost, renderStatuslineLayout, statuslineColor } from "./statusline.js";
|
|
13
|
+
import { isStatuslineHost, renderStatuslineLayout, statuslineColor, statuslineUnicode } from "./statusline.js";
|
|
14
|
+
import { parseStatuslineSession } from "./statusline-ingest.js";
|
|
12
15
|
import { TERMINAL_HOST_NAMES, installHost, terminalHide, terminalShow, terminalStatusTable, uninstallHost } from "./terminal.js";
|
|
13
16
|
import { createFetchHubTransport, hubConfigured } from "./hub.js";
|
|
14
17
|
import { DELIVERY_UNCONFIRMED_SENTENCE, REVOKED_SENTENCE, ensureFreshSession, isAborted, runDeviceLogin } from "./hub-auth.js";
|
|
15
18
|
import { runSync, syncIsDue, recordSyncAttempt } from "./hub-sync.js";
|
|
16
|
-
import { deleteSession, readSession, StorageDiagnosticError, writeSession, withSessionLock } from "./session.js";
|
|
19
|
+
import { deleteSession, readSession, StorageDiagnosticError, applyWindowsOwnerOnlyAcl, writeSession, withSessionLock } from "./session.js";
|
|
17
20
|
import { DeviceLoginError, LOGIN_TIMEOUT_MILLISECONDS, SystemDeviceLoginRunner, managedCodexHome, startCodexDeviceLogin, versionIsSupported as codexVersionIsSupported } from "./codex-device-login.js";
|
|
18
21
|
/** Exit codes. Enumerated so a script can tell these cases apart. */
|
|
19
22
|
export const EXIT_OK = 0;
|
|
@@ -83,7 +86,26 @@ const NEWLINE = "\n";
|
|
|
83
86
|
* same `execFile` wrapper.
|
|
84
87
|
*/
|
|
85
88
|
const execFileRunner = async (executable, helperArguments, timeoutMilliseconds) => await new Promise((resolve) => {
|
|
86
|
-
execFile(executable, [...helperArguments],
|
|
89
|
+
execFile(executable, [...helperArguments], (() => {
|
|
90
|
+
if (!executable.toLowerCase().endsWith("powershell.exe")) {
|
|
91
|
+
return { timeout: timeoutMilliseconds, maxBuffer: 262_144, windowsHide: true };
|
|
92
|
+
}
|
|
93
|
+
const environment = { ...process.env };
|
|
94
|
+
/* Windows environment names ignore case, but a copied process.env keeps
|
|
95
|
+
the inherited spelling (PSMODULEPATH, Psmodulepath...); drop every
|
|
96
|
+
variant so the child sees exactly one module path. */
|
|
97
|
+
for (const key of Object.keys(environment)) {
|
|
98
|
+
if (key.toLowerCase() === "psmodulepath")
|
|
99
|
+
delete environment[key];
|
|
100
|
+
}
|
|
101
|
+
environment["PSModulePath"] = path.win32.join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "WindowsPowerShell", "v1.0", "Modules");
|
|
102
|
+
return {
|
|
103
|
+
timeout: timeoutMilliseconds,
|
|
104
|
+
maxBuffer: 262_144,
|
|
105
|
+
windowsHide: true,
|
|
106
|
+
env: environment
|
|
107
|
+
};
|
|
108
|
+
})(), (error, stdout) => {
|
|
87
109
|
resolve(error === null ? { ok: true, stdout } : { ok: false });
|
|
88
110
|
});
|
|
89
111
|
});
|
|
@@ -109,7 +131,10 @@ function openBrowserPlatform(url, platform) {
|
|
|
109
131
|
export function runtimeDependencies() {
|
|
110
132
|
return {
|
|
111
133
|
acquisitionTransport: createFetchTransport(),
|
|
112
|
-
probeAntigravity
|
|
134
|
+
probeAntigravity: (options) => probeAntigravity({
|
|
135
|
+
...options,
|
|
136
|
+
runCommand: options?.runCommand ?? execFileRunner
|
|
137
|
+
}),
|
|
113
138
|
resolveExecutablePath: resolveAgyExecutablePath,
|
|
114
139
|
spawnDetached: (executable, argumentsList, options) => {
|
|
115
140
|
const child = spawn(executable, [...argumentsList], {
|
|
@@ -258,6 +283,7 @@ export function acquisitionSpecs(providers) {
|
|
|
258
283
|
return [
|
|
259
284
|
claudeSpec({ parse: parseClaudePayload, enabled: providers.claude.poll }),
|
|
260
285
|
codexSpec(parseCodexPayload),
|
|
286
|
+
cursorSpec(parseCursorPayload),
|
|
261
287
|
geminiCliSpec(parseGeminiCliPayload),
|
|
262
288
|
antigravitySpec(parseAntigravityCodeAssistPayload),
|
|
263
289
|
grokSpec(parseGrokPayload),
|
|
@@ -446,16 +472,12 @@ const ACQUISITION_HEADER = "PROVIDER DETECTED STATUS NEXT NOTE";
|
|
|
446
472
|
/**
|
|
447
473
|
* Run one round of acquisition and fold what it found into the cache.
|
|
448
474
|
*
|
|
449
|
-
*
|
|
450
|
-
*
|
|
451
|
-
*
|
|
452
|
-
* holds the lock, so this one exits instead of racing it on the same
|
|
453
|
-
* credentials. And a provider inside its own backoff is skipped by the runner
|
|
454
|
-
* without being asked anything.
|
|
475
|
+
* The refresh lock serializes CLI rounds. The runner takes the shared machine
|
|
476
|
+
* lease for each provider before acquisition and persists its retry deadline
|
|
477
|
+
* before releasing ownership.
|
|
455
478
|
*
|
|
456
|
-
*
|
|
457
|
-
*
|
|
458
|
-
* through the ordinary freshness rule.
|
|
479
|
+
* Successful reads replace observations. Expiry and rate limits record
|
|
480
|
+
* availability while preserving the original observation time.
|
|
459
481
|
*/
|
|
460
482
|
async function refreshCommand(dependencies, now) {
|
|
461
483
|
const lock = await acquireRefreshLock(dependencies.stateDirectory);
|
|
@@ -468,15 +490,8 @@ async function refreshCommand(dependencies, now) {
|
|
|
468
490
|
].join(NEWLINE));
|
|
469
491
|
}
|
|
470
492
|
try {
|
|
471
|
-
/*
|
|
472
|
-
* Desktop ownership is decided HERE, under the lock, and nowhere else.
|
|
473
|
-
* Checking it before taking the lock read a cache that a desktop could
|
|
474
|
-
* start writing a millisecond later, and this round would then poll every
|
|
475
|
-
* provider a second time for nothing. One check, on the only side of the
|
|
476
|
-
* lock where the answer cannot change underneath it.
|
|
477
|
-
*/
|
|
478
|
-
const settled = await readSnapshotCache(dependencies.stateDirectory);
|
|
479
493
|
const providers = await readProvidersConfig(dependencies.stateDirectory);
|
|
494
|
+
const settled = await readSnapshotCache(dependencies.stateDirectory);
|
|
480
495
|
const specs = acquisitionSpecs(providers).filter((spec) => !desktopHoldsCache(settled.ok ? settled.snapshots.filter((row) => row.provider === spec.provider) : [], now));
|
|
481
496
|
if (specs.length === 0) {
|
|
482
497
|
await triggerSyncAfterRefresh(dependencies, now);
|
|
@@ -489,6 +504,8 @@ async function refreshCommand(dependencies, now) {
|
|
|
489
504
|
await clearRefreshSpawnFailure(dependencies.stateDirectory);
|
|
490
505
|
const schedule = await readAcquisitionSchedule(dependencies.stateDirectory);
|
|
491
506
|
const result = await runAcquisition(specs, {
|
|
507
|
+
stateDirectory: dependencies.stateDirectory ?? resolveStateDirectory(),
|
|
508
|
+
clock: () => Date.parse(dependencies.now()),
|
|
492
509
|
transport: dependencies.acquisitionTransport,
|
|
493
510
|
now,
|
|
494
511
|
schedule,
|
|
@@ -506,10 +523,8 @@ async function refreshCommand(dependencies, now) {
|
|
|
506
523
|
* can outlive its lock if this machine was suspended mid refresh, and a
|
|
507
524
|
* round that lost its lock must not write over the round that took it.
|
|
508
525
|
*
|
|
509
|
-
*
|
|
510
|
-
*
|
|
511
|
-
* itself has to be safe against a desktop row that appeared since this
|
|
512
|
-
* round started reading. `mergeAcquiredSnapshots` decides that per row,
|
|
526
|
+
* Native payloads can arrive during acquisition. `mergeAcquiredSnapshots`
|
|
527
|
+
* arbitrates observations per row,
|
|
513
528
|
* inside the cache lock both processes do share, keeping whichever row is
|
|
514
529
|
* newer and leaving a tie with the row already there.
|
|
515
530
|
*/
|
|
@@ -626,6 +641,7 @@ function doctorRows(snapshots, environment, now) {
|
|
|
626
641
|
}
|
|
627
642
|
const help = [
|
|
628
643
|
"openlimiter",
|
|
644
|
+
"openlimiter --version | -v | version",
|
|
629
645
|
"openlimiter setup",
|
|
630
646
|
"openlimiter login [--open]",
|
|
631
647
|
"openlimiter logout",
|
|
@@ -638,8 +654,8 @@ const help = [
|
|
|
638
654
|
"openlimiter terminal status",
|
|
639
655
|
"openlimiter terminal install <host> [--wrap]",
|
|
640
656
|
"openlimiter terminal uninstall <host|all>",
|
|
641
|
-
"openlimiter terminal show <provider ...>",
|
|
642
|
-
"openlimiter terminal hide <provider ...>",
|
|
657
|
+
"openlimiter terminal show <segment|provider|window ...>",
|
|
658
|
+
"openlimiter terminal hide <segment|provider|window ...>",
|
|
643
659
|
"openlimiter refresh",
|
|
644
660
|
"openlimiter hook [--dry-run]",
|
|
645
661
|
"openlimiter hooks install <agent>",
|
|
@@ -674,8 +690,8 @@ const help = [
|
|
|
674
690
|
*
|
|
675
691
|
* This is the path that gives the tool something to meter. It performs no
|
|
676
692
|
* network access at all: it validates the JSON the host already wrote to this
|
|
677
|
-
* process.
|
|
678
|
-
* cache
|
|
693
|
+
* process. Unusable quota readings leave snapshots null so the caller can
|
|
694
|
+
* fall back to the cache while retaining display metadata from valid JSON.
|
|
679
695
|
*
|
|
680
696
|
* Which parser runs, and which provenance the reading is stamped with, are
|
|
681
697
|
* decided by the host. Codex names no scripting interface at all (its status
|
|
@@ -695,7 +711,7 @@ async function ingestStandardInput(dependencies, now, host = "claude") {
|
|
|
695
711
|
? parseGrokStatuslinePayload(document.value, now)
|
|
696
712
|
: parseClaudePayload(document.value, now);
|
|
697
713
|
if (meters === null)
|
|
698
|
-
return null;
|
|
714
|
+
return { snapshots: null, payload: document.value };
|
|
699
715
|
const provenance = host === "antigravity"
|
|
700
716
|
? ANTIGRAVITY_STATUSLINE_PROVENANCE
|
|
701
717
|
: host === "grok"
|
|
@@ -705,13 +721,14 @@ async function ingestStandardInput(dependencies, now, host = "claude") {
|
|
|
705
721
|
reading, and it says so. */
|
|
706
722
|
const incoming = normalizeMeters(withProvenance(meters, provenance));
|
|
707
723
|
if (incoming.length === 0)
|
|
708
|
-
return null;
|
|
724
|
+
return { snapshots: null, payload: document.value };
|
|
709
725
|
try {
|
|
710
|
-
|
|
726
|
+
const { merged } = await persistSnapshots(incoming, dependencies.stateDirectory, now);
|
|
727
|
+
return { snapshots: merged, payload: document.value };
|
|
711
728
|
}
|
|
712
729
|
catch {
|
|
713
730
|
const existing = await cachedSnapshots(dependencies.stateDirectory);
|
|
714
|
-
return mergeSnapshots(existing, incoming);
|
|
731
|
+
return { snapshots: mergeSnapshots(existing, incoming), payload: document.value };
|
|
715
732
|
}
|
|
716
733
|
}
|
|
717
734
|
catch {
|
|
@@ -918,7 +935,7 @@ async function statuslineCommand(dependencies, argumentsList, now) {
|
|
|
918
935
|
? hostFlag.toLowerCase()
|
|
919
936
|
: "claude";
|
|
920
937
|
const ingested = await ingestStandardInput(dependencies, now, host);
|
|
921
|
-
const snapshots = ingested ?? await cachedSnapshots(dependencies.stateDirectory);
|
|
938
|
+
const snapshots = ingested?.snapshots ?? await cachedSnapshots(dependencies.stateDirectory);
|
|
922
939
|
/*
|
|
923
940
|
* The refresh that keeps the other providers current starts here and is never
|
|
924
941
|
* waited for. This render draws whatever the cache already holds, the child
|
|
@@ -926,7 +943,7 @@ async function statuslineCommand(dependencies, argumentsList, now) {
|
|
|
926
943
|
* whole reason a terminal person needs no background service.
|
|
927
944
|
*/
|
|
928
945
|
await startRefreshBehind(dependencies, snapshots, now);
|
|
929
|
-
if (ingested
|
|
946
|
+
if (ingested?.snapshots == null) {
|
|
930
947
|
await writeAgentContextSnapshot(snapshots, dependencies.stateDirectory, now, PROVIDER_CODES).catch(() => undefined);
|
|
931
948
|
}
|
|
932
949
|
const advice = buildAdvice(snapshots, now, PROVIDER_CODES);
|
|
@@ -938,7 +955,9 @@ async function statuslineCommand(dependencies, argumentsList, now) {
|
|
|
938
955
|
snapshots,
|
|
939
956
|
now,
|
|
940
957
|
config,
|
|
941
|
-
|
|
958
|
+
session: parseStatuslineSession(ingested?.payload),
|
|
959
|
+
color: statuslineColor(config.color, dependencies.environment, dependencies.colorOutput, host),
|
|
960
|
+
unicode: statuslineUnicode(dependencies.environment),
|
|
942
961
|
host
|
|
943
962
|
}));
|
|
944
963
|
}
|
|
@@ -947,10 +966,12 @@ const agentAliases = {
|
|
|
947
966
|
antigravity: "antigravity",
|
|
948
967
|
claude: "claude",
|
|
949
968
|
codex: "codex",
|
|
969
|
+
cursor: "cursor",
|
|
950
970
|
gemini: "gemini",
|
|
951
971
|
grok: "grok",
|
|
952
972
|
"grok-build": "grok",
|
|
953
973
|
kimi: "kimi",
|
|
974
|
+
muse: "muse",
|
|
954
975
|
opencode: "opencode"
|
|
955
976
|
};
|
|
956
977
|
function agentArgument(value) {
|
|
@@ -1241,8 +1262,8 @@ const terminalUsage = [
|
|
|
1241
1262
|
"openlimiter terminal status",
|
|
1242
1263
|
"openlimiter terminal install <host> [--wrap]",
|
|
1243
1264
|
"openlimiter terminal uninstall <host|all>",
|
|
1244
|
-
"openlimiter terminal show <provider ...>",
|
|
1245
|
-
"openlimiter terminal hide <provider ...>",
|
|
1265
|
+
"openlimiter terminal show <segment|provider|window ...>",
|
|
1266
|
+
"openlimiter terminal hide <segment|provider|window ...>",
|
|
1246
1267
|
"",
|
|
1247
1268
|
"hosts: " + TERMINAL_HOST_NAMES.join(", ") + "."
|
|
1248
1269
|
].join("\n");
|
|
@@ -1318,7 +1339,7 @@ async function terminalCommand(dependencies, argumentsList) {
|
|
|
1318
1339
|
if (action === "show" || action === "hide") {
|
|
1319
1340
|
const providerIds = argumentsList.slice(2);
|
|
1320
1341
|
if (providerIds.length === 0) {
|
|
1321
|
-
return fail(EXIT_USAGE, "openlimiter terminal: " + action + " needs at least one provider
|
|
1342
|
+
return fail(EXIT_USAGE, "openlimiter terminal: " + action + " needs at least one segment, provider or window.");
|
|
1322
1343
|
}
|
|
1323
1344
|
const result = action === "show"
|
|
1324
1345
|
? await terminalShow(providerIds, context)
|
|
@@ -1564,6 +1585,7 @@ async function setupSignInStep(dependencies) {
|
|
|
1564
1585
|
const AGENT_CREDENTIAL_PROVIDER = {
|
|
1565
1586
|
claude: "CLAUDE",
|
|
1566
1587
|
codex: "CODEX",
|
|
1588
|
+
cursor: "CURSOR",
|
|
1567
1589
|
gemini: "GEMINI_CLI",
|
|
1568
1590
|
antigravity: "ANTIGRAVITY",
|
|
1569
1591
|
grok: "GROK",
|
|
@@ -1744,6 +1766,9 @@ export async function runCli(argumentsList, overrides = {}) {
|
|
|
1744
1766
|
const command = argumentsList[0] ?? "setup";
|
|
1745
1767
|
const now = dependencies.now();
|
|
1746
1768
|
try {
|
|
1769
|
+
if (command === "--version" || command === "-v" || command === "version") {
|
|
1770
|
+
return succeed(packageJson.version);
|
|
1771
|
+
}
|
|
1747
1772
|
if (command === "setup") {
|
|
1748
1773
|
const result = await setupCommand(dependencies, now);
|
|
1749
1774
|
if (hasOutputSink || setupOutput.length === 0)
|
|
@@ -1775,6 +1800,13 @@ export async function runCli(argumentsList, overrides = {}) {
|
|
|
1775
1800
|
if (command === "hook") {
|
|
1776
1801
|
return await hookProtocolCommand(dependencies, argumentsList, now);
|
|
1777
1802
|
}
|
|
1803
|
+
if (command === "event") {
|
|
1804
|
+
const { eventCommand } = await import("./activity/event.js");
|
|
1805
|
+
return await eventCommand(argumentsList, {
|
|
1806
|
+
...dependencies,
|
|
1807
|
+
protectWindowsDirectory: (directory) => applyWindowsOwnerOnlyAcl(directory, dependencies.windowsAclRunner)
|
|
1808
|
+
});
|
|
1809
|
+
}
|
|
1778
1810
|
if (command === "hooks")
|
|
1779
1811
|
return await hooksCommand(dependencies, argumentsList);
|
|
1780
1812
|
if (command === "status") {
|
|
@@ -1803,7 +1835,7 @@ export async function runCli(argumentsList, overrides = {}) {
|
|
|
1803
1835
|
* nothing rather than breaking their host. Every other command surfaces the
|
|
1804
1836
|
* failure with a redacted message so a script can react to it.
|
|
1805
1837
|
*/
|
|
1806
|
-
if (command === "hook")
|
|
1838
|
+
if (command === "hook" || command === "event")
|
|
1807
1839
|
return { exitCode: EXIT_OK, stdout: "", stderr: "" };
|
|
1808
1840
|
/* A detached refresh writes to a discarded stream and has nobody to tell,
|
|
1809
1841
|
so it fails quietly rather than leaving an exit code nothing reads. */
|