@sigil0/looking-glass 0.1.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.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +572 -0
  3. package/dist/agents/coordinator.d.ts +21 -0
  4. package/dist/agents/coordinator.d.ts.map +1 -0
  5. package/dist/agents/coordinator.js +171 -0
  6. package/dist/agents/coordinator.js.map +1 -0
  7. package/dist/app.d.ts +44 -0
  8. package/dist/app.d.ts.map +1 -0
  9. package/dist/app.js +215 -0
  10. package/dist/app.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +419 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +4 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +132 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/engine/context.d.ts +6 -0
  20. package/dist/engine/context.d.ts.map +1 -0
  21. package/dist/engine/context.js +65 -0
  22. package/dist/engine/context.js.map +1 -0
  23. package/dist/engine/engine.d.ts +74 -0
  24. package/dist/engine/engine.d.ts.map +1 -0
  25. package/dist/engine/engine.js +573 -0
  26. package/dist/engine/engine.js.map +1 -0
  27. package/dist/engine/types.d.ts +35 -0
  28. package/dist/engine/types.d.ts.map +1 -0
  29. package/dist/engine/types.js +2 -0
  30. package/dist/engine/types.js.map +1 -0
  31. package/dist/instructions.d.ts +8 -0
  32. package/dist/instructions.d.ts.map +1 -0
  33. package/dist/instructions.js +60 -0
  34. package/dist/instructions.js.map +1 -0
  35. package/dist/model/codex-lb.d.ts +141 -0
  36. package/dist/model/codex-lb.d.ts.map +1 -0
  37. package/dist/model/codex-lb.js +471 -0
  38. package/dist/model/codex-lb.js.map +1 -0
  39. package/dist/paths.d.ts +7 -0
  40. package/dist/paths.d.ts.map +1 -0
  41. package/dist/paths.js +41 -0
  42. package/dist/paths.js.map +1 -0
  43. package/dist/scheduler/daemon.d.ts +40 -0
  44. package/dist/scheduler/daemon.d.ts.map +1 -0
  45. package/dist/scheduler/daemon.js +189 -0
  46. package/dist/scheduler/daemon.js.map +1 -0
  47. package/dist/scheduler/index.d.ts +8 -0
  48. package/dist/scheduler/index.d.ts.map +1 -0
  49. package/dist/scheduler/index.js +6 -0
  50. package/dist/scheduler/index.js.map +1 -0
  51. package/dist/scheduler/runner.d.ts +18 -0
  52. package/dist/scheduler/runner.d.ts.map +1 -0
  53. package/dist/scheduler/runner.js +173 -0
  54. package/dist/scheduler/runner.js.map +1 -0
  55. package/dist/scheduler/schedule.d.ts +7 -0
  56. package/dist/scheduler/schedule.d.ts.map +1 -0
  57. package/dist/scheduler/schedule.js +94 -0
  58. package/dist/scheduler/schedule.js.map +1 -0
  59. package/dist/scheduler/store.d.ts +55 -0
  60. package/dist/scheduler/store.d.ts.map +1 -0
  61. package/dist/scheduler/store.js +1203 -0
  62. package/dist/scheduler/store.js.map +1 -0
  63. package/dist/scheduler/systemd.d.ts +7 -0
  64. package/dist/scheduler/systemd.d.ts.map +1 -0
  65. package/dist/scheduler/systemd.js +97 -0
  66. package/dist/scheduler/systemd.js.map +1 -0
  67. package/dist/scheduler/types.d.ts +145 -0
  68. package/dist/scheduler/types.d.ts.map +1 -0
  69. package/dist/scheduler/types.js +7 -0
  70. package/dist/scheduler/types.js.map +1 -0
  71. package/dist/security.d.ts +6 -0
  72. package/dist/security.d.ts.map +1 -0
  73. package/dist/security.js +27 -0
  74. package/dist/security.js.map +1 -0
  75. package/dist/storage/artifact-store.d.ts +19 -0
  76. package/dist/storage/artifact-store.d.ts.map +1 -0
  77. package/dist/storage/artifact-store.js +47 -0
  78. package/dist/storage/artifact-store.js.map +1 -0
  79. package/dist/storage/database.d.ts +5 -0
  80. package/dist/storage/database.d.ts.map +1 -0
  81. package/dist/storage/database.js +395 -0
  82. package/dist/storage/database.js.map +1 -0
  83. package/dist/storage/session-store.d.ts +114 -0
  84. package/dist/storage/session-store.d.ts.map +1 -0
  85. package/dist/storage/session-store.js +731 -0
  86. package/dist/storage/session-store.js.map +1 -0
  87. package/dist/tools/agents.d.ts +14 -0
  88. package/dist/tools/agents.d.ts.map +1 -0
  89. package/dist/tools/agents.js +35 -0
  90. package/dist/tools/agents.js.map +1 -0
  91. package/dist/tools/apply-patch.d.ts +7 -0
  92. package/dist/tools/apply-patch.d.ts.map +1 -0
  93. package/dist/tools/apply-patch.js +429 -0
  94. package/dist/tools/apply-patch.js.map +1 -0
  95. package/dist/tools/ask.d.ts +8 -0
  96. package/dist/tools/ask.d.ts.map +1 -0
  97. package/dist/tools/ask.js +27 -0
  98. package/dist/tools/ask.js.map +1 -0
  99. package/dist/tools/bash.d.ts +9 -0
  100. package/dist/tools/bash.d.ts.map +1 -0
  101. package/dist/tools/bash.js +98 -0
  102. package/dist/tools/bash.js.map +1 -0
  103. package/dist/tools/index.d.ts +9 -0
  104. package/dist/tools/index.d.ts.map +1 -0
  105. package/dist/tools/index.js +34 -0
  106. package/dist/tools/index.js.map +1 -0
  107. package/dist/tools/paths.d.ts +3 -0
  108. package/dist/tools/paths.d.ts.map +1 -0
  109. package/dist/tools/paths.js +34 -0
  110. package/dist/tools/paths.js.map +1 -0
  111. package/dist/tools/process.d.ts +21 -0
  112. package/dist/tools/process.d.ts.map +1 -0
  113. package/dist/tools/process.js +104 -0
  114. package/dist/tools/process.js.map +1 -0
  115. package/dist/tools/read.d.ts +9 -0
  116. package/dist/tools/read.d.ts.map +1 -0
  117. package/dist/tools/read.js +95 -0
  118. package/dist/tools/read.js.map +1 -0
  119. package/dist/tools/registry.d.ts +19 -0
  120. package/dist/tools/registry.d.ts.map +1 -0
  121. package/dist/tools/registry.js +188 -0
  122. package/dist/tools/registry.js.map +1 -0
  123. package/dist/tools/safety.d.ts +9 -0
  124. package/dist/tools/safety.d.ts.map +1 -0
  125. package/dist/tools/safety.js +199 -0
  126. package/dist/tools/safety.js.map +1 -0
  127. package/dist/tools/schedule.d.ts +4 -0
  128. package/dist/tools/schedule.d.ts.map +1 -0
  129. package/dist/tools/schedule.js +191 -0
  130. package/dist/tools/schedule.js.map +1 -0
  131. package/dist/tools/search.d.ts +16 -0
  132. package/dist/tools/search.d.ts.map +1 -0
  133. package/dist/tools/search.js +75 -0
  134. package/dist/tools/search.js.map +1 -0
  135. package/dist/tools/types.d.ts +54 -0
  136. package/dist/tools/types.d.ts.map +1 -0
  137. package/dist/tools/types.js +10 -0
  138. package/dist/tools/types.js.map +1 -0
  139. package/dist/types.d.ts +90 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +2 -0
  142. package/dist/types.js.map +1 -0
  143. package/dist/ui/stdio.d.ts +5 -0
  144. package/dist/ui/stdio.d.ts.map +1 -0
  145. package/dist/ui/stdio.js +65 -0
  146. package/dist/ui/stdio.js.map +1 -0
  147. package/dist/ui/tui.d.ts +93 -0
  148. package/dist/ui/tui.d.ts.map +1 -0
  149. package/dist/ui/tui.js +2246 -0
  150. package/dist/ui/tui.js.map +1 -0
  151. package/package.json +53 -0
@@ -0,0 +1,471 @@
1
+ import OpenAI from "openai";
2
+ import { redactSensitiveText } from "../security.js";
3
+ export function buildResponseParams(provider, request) {
4
+ const common = {
5
+ model: request.model,
6
+ instructions: request.instructions,
7
+ input: provider === "lm-studio"
8
+ ? request.input.filter((item) => item.type !== "reasoning")
9
+ : request.input,
10
+ tools: request.tools,
11
+ parallel_tool_calls: true,
12
+ ...(request.supportsReasoning ? {
13
+ reasoning: {
14
+ // codex-lb advertises "ultra" before the public SDK type includes it.
15
+ effort: request.reasoningEffort,
16
+ summary: "auto",
17
+ },
18
+ } : {}),
19
+ ...(provider === "codex-lb" && request.previousResponseId
20
+ ? { previous_response_id: request.previousResponseId }
21
+ : {}),
22
+ };
23
+ if (provider === "lm-studio") {
24
+ return { ...common, store: false, text: { format: { type: "text" } } };
25
+ }
26
+ return {
27
+ ...common,
28
+ store: false,
29
+ prompt_cache_key: request.promptCacheKey,
30
+ include: ["reasoning.encrypted_content"],
31
+ text: { verbosity: request.verbosity },
32
+ ...(request.fast ? { service_tier: "priority" } : {}),
33
+ };
34
+ }
35
+ function detailFrom(value) {
36
+ if (!value || typeof value !== "object")
37
+ return {};
38
+ const outer = value;
39
+ return outer.error && typeof outer.error === "object" ? outer.error : outer;
40
+ }
41
+ async function* responseEvents(response) {
42
+ if (!response.body)
43
+ throw new Error("Response stream had no body");
44
+ const reader = response.body.getReader();
45
+ const decoder = new TextDecoder();
46
+ let buffer = "";
47
+ let data = [];
48
+ const parse = () => {
49
+ const payload = data.join("\n");
50
+ data = [];
51
+ if (!payload || payload === "[DONE]")
52
+ return null;
53
+ try {
54
+ const event = JSON.parse(payload);
55
+ if (!event || typeof event !== "object" || Array.isArray(event)) {
56
+ throw new Error("event is not an object");
57
+ }
58
+ return event;
59
+ }
60
+ catch (error) {
61
+ throw Object.assign(new Error(`Malformed response stream event: ${error instanceof Error ? error.message : String(error)}`), {
62
+ code: "malformed_response_event",
63
+ });
64
+ }
65
+ };
66
+ while (true) {
67
+ const chunk = await reader.read();
68
+ buffer += decoder.decode(chunk.value ?? new Uint8Array(), { stream: !chunk.done });
69
+ let newline = buffer.indexOf("\n");
70
+ while (newline >= 0) {
71
+ const line = buffer.slice(0, newline).replace(/\r$/, "");
72
+ buffer = buffer.slice(newline + 1);
73
+ if (line === "") {
74
+ const event = parse();
75
+ if (event)
76
+ yield event;
77
+ }
78
+ else if (line.startsWith("data:")) {
79
+ data.push(line.slice(5).trimStart());
80
+ }
81
+ newline = buffer.indexOf("\n");
82
+ }
83
+ if (chunk.done)
84
+ break;
85
+ }
86
+ if (buffer.startsWith("data:"))
87
+ data.push(buffer.slice(5).trimStart());
88
+ const event = parse();
89
+ if (event)
90
+ yield event;
91
+ }
92
+ export function isStaleResponseError(value, requestWasAnchored) {
93
+ const detail = detailFrom(value);
94
+ const directMessage = value instanceof Error ? value.message : "";
95
+ const status = value && typeof value === "object" && "status" in value
96
+ ? value.status
97
+ : undefined;
98
+ if ([
99
+ "previous_response_not_found",
100
+ "codex_previous_response_stale",
101
+ "previous_response_owner_unavailable",
102
+ "turn_state_owner_unavailable",
103
+ "previous_response_first_event_timeout",
104
+ "malformed_response",
105
+ "malformed_response_event",
106
+ ].includes(detail.code ?? ""))
107
+ return true;
108
+ if (detail.code === "invalid_request_error" &&
109
+ detail.param === "previous_response_id" &&
110
+ /previous response.*not found/i.test(detail.message ?? ""))
111
+ return true;
112
+ return requestWasAnchored && (detail.code === "stream_incomplete"
113
+ || /previous response owner account is unavailable/i.test(detail.message ?? "")
114
+ || /rsp\.output is not iterable/i.test(directMessage)
115
+ || status === 502);
116
+ }
117
+ function asEffort(value) {
118
+ return ["none", "low", "medium", "high", "xhigh", "max", "ultra"].includes(value ?? "")
119
+ ? value
120
+ : null;
121
+ }
122
+ function lmStudioEffort(value) {
123
+ if (value === "off")
124
+ return "none";
125
+ if (value === "on")
126
+ return "medium";
127
+ return asEffort(value);
128
+ }
129
+ function asVerbosity(value) {
130
+ return ["low", "medium", "high"].includes(value ?? "") ? value : "low";
131
+ }
132
+ export function modelInfo(raw) {
133
+ const metadata = raw.metadata ?? {};
134
+ const efforts = (metadata.supported_reasoning_levels ?? [])
135
+ .map((entry) => asEffort(entry.effort))
136
+ .filter((effort) => effort !== null);
137
+ const contextWindow = metadata.input_context_window ?? metadata.context_window ?? raw.capabilities?.context_length
138
+ ?? raw.context_length ?? 128_000;
139
+ const supportsFast = metadata.additional_speed_tiers?.includes("fast") === true
140
+ || metadata.service_tiers?.some((tier) => tier.id === "priority") === true;
141
+ return {
142
+ id: raw.id,
143
+ name: metadata.display_name ?? raw.id,
144
+ description: metadata.description ?? "",
145
+ contextWindow,
146
+ maxOutputTokens: metadata.max_output_tokens ?? raw.capabilities?.max_output_tokens ?? raw.max_output_tokens ?? null,
147
+ reasoningEfforts: efforts.length > 0 ? efforts : ["low", "medium", "high"],
148
+ defaultReasoningEffort: asEffort(metadata.default_reasoning_level) ?? "medium",
149
+ defaultVerbosity: asVerbosity(metadata.default_verbosity),
150
+ supportsReasoning: raw.capabilities?.supports_reasoning ?? raw.supports_reasoning ?? efforts.length > 0,
151
+ supportsImages: raw.capabilities?.supports_images ?? raw.supports_images ?? false,
152
+ supportsParallelToolCalls: metadata.supports_parallel_tool_calls ?? true,
153
+ supportsFast,
154
+ priority: metadata.priority ?? 1_000,
155
+ };
156
+ }
157
+ export function lmStudioModelInfo(raw) {
158
+ const supportsReasoning = raw.capabilities?.reasoning !== undefined;
159
+ const efforts = (raw.capabilities?.reasoning?.allowed_options ?? [])
160
+ .map((value) => lmStudioEffort(value))
161
+ .filter((value) => value !== null);
162
+ return {
163
+ id: raw.key,
164
+ name: raw.display_name ?? raw.key,
165
+ description: raw.description ?? "",
166
+ contextWindow: raw.loaded_instances?.[0]?.config?.context_length ?? raw.max_context_length ?? 128_000,
167
+ maxOutputTokens: null,
168
+ reasoningEfforts: efforts.length > 0 ? efforts : ["medium"],
169
+ defaultReasoningEffort: lmStudioEffort(raw.capabilities?.reasoning?.default) ?? efforts[0] ?? "medium",
170
+ defaultVerbosity: "low",
171
+ supportsReasoning,
172
+ supportsImages: raw.capabilities?.vision ?? false,
173
+ supportsParallelToolCalls: raw.capabilities?.trained_for_tool_use ?? false,
174
+ supportsFast: false,
175
+ priority: raw.loaded_instances?.length ? 0 : 1_000,
176
+ };
177
+ }
178
+ export function responseText(response) {
179
+ if (response.output_text)
180
+ return response.output_text;
181
+ const parts = [];
182
+ for (const item of response.output) {
183
+ if (item.type !== "message")
184
+ continue;
185
+ for (const content of item.content) {
186
+ if (content.type === "output_text")
187
+ parts.push(content.text);
188
+ }
189
+ }
190
+ return parts.join("");
191
+ }
192
+ function redactLmStudioReasoning(response) {
193
+ return {
194
+ ...response,
195
+ output: response.output.filter((item) => item.type !== "reasoning"),
196
+ };
197
+ }
198
+ function compactTranscript(input) {
199
+ const lines = [];
200
+ for (const item of input) {
201
+ if (item.type === "reasoning")
202
+ continue;
203
+ if (item.type === "function_call") {
204
+ lines.push(`ASSISTANT TOOL CALL ${item.name}: ${item.arguments}`);
205
+ continue;
206
+ }
207
+ if (item.type === "function_call_output") {
208
+ lines.push(`TOOL RESULT ${item.call_id}: ${typeof item.output === "string" ? item.output : JSON.stringify(item.output)}`);
209
+ continue;
210
+ }
211
+ const message = item;
212
+ if (!message.role || !Array.isArray(message.content))
213
+ continue;
214
+ const text = message.content.map((content) => {
215
+ if (!content || typeof content !== "object")
216
+ return "";
217
+ const part = content;
218
+ if ((part.type === "input_text" || part.type === "output_text") && part.text)
219
+ return part.text;
220
+ return "";
221
+ }).filter(Boolean).join("\n");
222
+ if (text)
223
+ lines.push(`${message.role.toUpperCase()}: ${text}`);
224
+ }
225
+ return lines.join("\n\n");
226
+ }
227
+ function lmStudioModelsURL(baseURL) {
228
+ const url = new URL(baseURL);
229
+ url.pathname = `${url.pathname.replace(/\/?v1\/?$/, "")}/api/v1/models`.replace(/\/+/g, "/");
230
+ return url.toString();
231
+ }
232
+ export class CodexLbClient {
233
+ config;
234
+ client;
235
+ apiKey;
236
+ constructor(config) {
237
+ this.config = config;
238
+ this.apiKey = process.env[config.gateway.apiKeyEnv] || "local-looking-glass";
239
+ this.client = new OpenAI({
240
+ apiKey: this.apiKey,
241
+ baseURL: config.gateway.baseURL,
242
+ maxRetries: 0,
243
+ timeout: config.gateway.timeoutMs,
244
+ });
245
+ }
246
+ supportsResponseContinuity() {
247
+ return this.config.gateway.provider === "codex-lb";
248
+ }
249
+ safeErrorMessage(message) {
250
+ return redactSensitiveText(message, [this.apiKey]);
251
+ }
252
+ async models(signal) {
253
+ if (this.config.gateway.provider === "lm-studio") {
254
+ try {
255
+ const timeout = AbortSignal.timeout(this.config.gateway.timeoutMs);
256
+ const requestSignal = signal ? AbortSignal.any([signal, timeout]) : timeout;
257
+ const response = await fetch(lmStudioModelsURL(this.config.gateway.baseURL), {
258
+ headers: { authorization: `Bearer ${this.apiKey}` },
259
+ signal: requestSignal,
260
+ });
261
+ if (!response.ok)
262
+ throw new Error(`LM Studio model metadata failed with HTTP ${response.status}`);
263
+ const payload = await response.json();
264
+ const models = (payload.models ?? [])
265
+ .filter((model) => model.type === "llm")
266
+ .map(lmStudioModelInfo)
267
+ .sort((left, right) => left.priority - right.priority || left.name.localeCompare(right.name));
268
+ if (models.length > 0)
269
+ return models;
270
+ }
271
+ catch (error) {
272
+ if (signal?.aborted)
273
+ throw error;
274
+ // Older LM Studio versions and restricted tokens may only expose /v1/models.
275
+ }
276
+ }
277
+ const page = await this.client.models.list(signal ? { signal } : undefined);
278
+ return page.data
279
+ .filter((model) => model.metadata?.supported_in_api !== false)
280
+ .map(modelInfo)
281
+ .sort((left, right) => left.priority - right.priority || left.name.localeCompare(right.name));
282
+ }
283
+ async stream(request, callbacks = {}) {
284
+ const params = buildResponseParams(this.config.gateway.provider, request);
285
+ const timeout = AbortSignal.timeout(this.config.gateway.timeoutMs);
286
+ const signal = request.signal ? AbortSignal.any([request.signal, timeout]) : timeout;
287
+ const http = await fetch(`${this.config.gateway.baseURL}/responses`, {
288
+ method: "POST",
289
+ headers: {
290
+ authorization: `Bearer ${this.apiKey}`,
291
+ "content-type": "application/json",
292
+ accept: "text/event-stream",
293
+ },
294
+ body: JSON.stringify({ ...params, stream: true }),
295
+ signal,
296
+ });
297
+ if (!http.ok) {
298
+ const text = await http.text();
299
+ let payload = text;
300
+ try {
301
+ payload = JSON.parse(text);
302
+ }
303
+ catch {
304
+ // Preserve non-JSON gateway errors as their response text.
305
+ }
306
+ const detail = detailFrom(payload);
307
+ const message = this.safeErrorMessage(detail.message ?? (text || `Response failed with HTTP ${http.status}`));
308
+ throw Object.assign(new Error(message), detail, {
309
+ status: http.status,
310
+ });
311
+ }
312
+ let created = {};
313
+ let terminal = null;
314
+ let streamedError = null;
315
+ let sawTerminal = false;
316
+ const output = new Map();
317
+ for await (const event of responseEvents(http)) {
318
+ callbacks.onEvent?.(event);
319
+ if (event.type === "response.output_text.delta" && typeof event.delta === "string") {
320
+ callbacks.onTextDelta?.(event.delta);
321
+ }
322
+ if (event.type === "response.reasoning_summary_text.delta" && typeof event.delta === "string") {
323
+ callbacks.onReasoningDelta?.(event.delta);
324
+ }
325
+ if (event.type === "response.created" && event.response)
326
+ created = event.response;
327
+ if ((event.type === "response.output_item.added" || event.type === "response.output_item.done")
328
+ && Number.isInteger(event.output_index) && event.item !== undefined) {
329
+ output.set(event.output_index, event.item);
330
+ }
331
+ if (["response.completed", "response.done", "response.failed", "response.incomplete"].includes(event.type ?? "")) {
332
+ sawTerminal = true;
333
+ terminal = event.response ?? {};
334
+ }
335
+ if (event.type === "error")
336
+ streamedError = event.error ?? event;
337
+ if (event.type === "response.failed")
338
+ streamedError = event.response?.error ?? event;
339
+ if (event.type === "response.incomplete")
340
+ streamedError = event.response?.incomplete_details ?? event;
341
+ // Gateway extension events such as response.metadata are intentionally ignored.
342
+ }
343
+ if (!sawTerminal) {
344
+ if (streamedError) {
345
+ const detail = detailFrom(streamedError);
346
+ throw Object.assign(new Error(this.safeErrorMessage(detail.message ?? "Response stream failed")), detail);
347
+ }
348
+ throw Object.assign(new Error("Response stream ended without a terminal event"), { code: "stream_incomplete" });
349
+ }
350
+ const combined = { ...created, ...(terminal ?? {}) };
351
+ const terminalOutput = Array.isArray(combined.output) ? combined.output : [];
352
+ const canonicalOutput = terminalOutput.length > 0
353
+ ? terminalOutput
354
+ : [...output.entries()].sort(([left], [right]) => left - right).map(([, item]) => item);
355
+ const status = typeof combined.status === "string"
356
+ ? combined.status
357
+ : streamedError ? "failed" : "completed";
358
+ if (streamedError || status === "failed" || status === "incomplete") {
359
+ const detail = detailFrom(streamedError ?? combined.error ?? combined.incomplete_details);
360
+ throw Object.assign(new Error(this.safeErrorMessage(detail.message ?? `Response ${status}`)), detail, { responseStatus: status });
361
+ }
362
+ if (typeof combined.id !== "string" || !combined.id || canonicalOutput.length === 0) {
363
+ throw Object.assign(new Error("Response stream returned an invalid completed response"), {
364
+ code: "malformed_response",
365
+ });
366
+ }
367
+ const canonical = {
368
+ ...combined,
369
+ id: combined.id,
370
+ status,
371
+ output: canonicalOutput,
372
+ output_text: "",
373
+ };
374
+ canonical.output_text = responseText(canonical);
375
+ return this.config.gateway.provider === "lm-studio" ? redactLmStudioReasoning(canonical) : canonical;
376
+ }
377
+ async compact(request) {
378
+ if (this.config.gateway.provider === "lm-studio") {
379
+ const transcript = compactTranscript(request.input);
380
+ if (!transcript)
381
+ throw new Error("LM Studio compaction received no semantic transcript");
382
+ const profile = {
383
+ model: request.model,
384
+ instructions: [
385
+ "Create a dense, durable checkpoint of the supplied conversation.",
386
+ "Preserve user requirements, decisions, relevant facts, file paths, code changes, tool outcomes, unresolved work, and safety constraints.",
387
+ "Do not continue the task, call tools, or add commentary. Return only the checkpoint text.",
388
+ ].join(" "),
389
+ input: [{
390
+ role: "user",
391
+ content: [{
392
+ type: "input_text",
393
+ text: `Conversation transcript:\n\n${transcript}`,
394
+ }],
395
+ }],
396
+ tools: [],
397
+ promptCacheKey: request.promptCacheKey,
398
+ reasoningEffort: "none",
399
+ supportsReasoning: true,
400
+ verbosity: "high",
401
+ fast: false,
402
+ ...(request.signal ? { signal: request.signal } : {}),
403
+ };
404
+ const response = await this.client.responses.create(buildResponseParams("lm-studio", profile), request.signal ? { signal: request.signal } : undefined);
405
+ const summary = responseText(response).trim();
406
+ if (!summary)
407
+ throw new Error("LM Studio compaction returned no checkpoint text");
408
+ return {
409
+ id: `compact_${response.id}`,
410
+ object: "response.compaction",
411
+ output: [{
412
+ id: `msg_compact_${response.id}`,
413
+ type: "message",
414
+ role: "user",
415
+ status: "completed",
416
+ content: [{
417
+ type: "input_text",
418
+ text: `Conversation checkpoint generated by Looking Glass:\n${summary}`,
419
+ }],
420
+ }],
421
+ usage: response.usage,
422
+ };
423
+ }
424
+ const body = {
425
+ model: request.model,
426
+ instructions: request.instructions,
427
+ input: request.input,
428
+ prompt_cache_key: request.promptCacheKey,
429
+ ...(request.fast ? { service_tier: "priority" } : {}),
430
+ };
431
+ const timeout = AbortSignal.timeout(this.config.gateway.timeoutMs);
432
+ const signal = request.signal ? AbortSignal.any([request.signal, timeout]) : timeout;
433
+ const response = await fetch(`${this.config.gateway.baseURL}/responses/compact`, {
434
+ method: "POST",
435
+ headers: {
436
+ authorization: `Bearer ${this.apiKey}`,
437
+ "content-type": "application/json",
438
+ },
439
+ body: JSON.stringify(body),
440
+ signal,
441
+ });
442
+ const payload = await response.json();
443
+ if (!response.ok) {
444
+ const detail = detailFrom(payload);
445
+ throw Object.assign(new Error(this.safeErrorMessage(detail.message ?? `Compaction failed with HTTP ${response.status}`)), detail, {
446
+ status: response.status,
447
+ });
448
+ }
449
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
450
+ throw new Error("Compaction returned an invalid payload");
451
+ }
452
+ const output = payload.output;
453
+ if (!Array.isArray(output) || output.length === 0
454
+ || output.some((item) => !item || typeof item !== "object" || Array.isArray(item))) {
455
+ throw new Error("Compaction response did not contain valid output items");
456
+ }
457
+ return payload;
458
+ }
459
+ }
460
+ export function chooseModel(models, configured) {
461
+ if (models.length === 0)
462
+ throw new Error("Gateway returned no usable models");
463
+ if (configured) {
464
+ const match = models.find((model) => model.id === configured);
465
+ if (!match)
466
+ throw new Error(`Configured model is not available: ${configured}`);
467
+ return match;
468
+ }
469
+ return models[0];
470
+ }
471
+ //# sourceMappingURL=codex-lb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-lb.js","sourceRoot":"","sources":["../../src/model/codex-lb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function configDir(): string;
2
+ export declare function dataDir(): string;
3
+ export declare function stateDbPath(): string;
4
+ export declare function artifactsDir(): string;
5
+ export declare function ensureStateDirectories(): void;
6
+ export declare function findWorkspaceRoot(start?: string): string;
7
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AASA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAgB,GAAG,MAAM,CAa/D"}
package/dist/paths.js ADDED
@@ -0,0 +1,41 @@
1
+ import { mkdirSync, statSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join, resolve } from "node:path";
4
+ function envPath(name, fallback) {
5
+ const value = process.env[name];
6
+ return value ? resolve(value) : fallback;
7
+ }
8
+ export function configDir() {
9
+ return envPath("XDG_CONFIG_HOME", join(homedir(), ".config")) + "/looking-glass";
10
+ }
11
+ export function dataDir() {
12
+ return envPath("XDG_DATA_HOME", join(homedir(), ".local", "share")) + "/looking-glass";
13
+ }
14
+ export function stateDbPath() {
15
+ return process.env.LOOKING_GLASS_DB ?? join(dataDir(), "state.db");
16
+ }
17
+ export function artifactsDir() {
18
+ return join(dataDir(), "artifacts");
19
+ }
20
+ export function ensureStateDirectories() {
21
+ mkdirSync(configDir(), { recursive: true, mode: 0o700 });
22
+ mkdirSync(dataDir(), { recursive: true, mode: 0o700 });
23
+ mkdirSync(artifactsDir(), { recursive: true, mode: 0o700 });
24
+ }
25
+ export function findWorkspaceRoot(start = process.cwd()) {
26
+ let current = resolve(start);
27
+ while (true) {
28
+ try {
29
+ statSync(join(current, ".git"));
30
+ return current;
31
+ }
32
+ catch {
33
+ // Continue to the filesystem root.
34
+ }
35
+ const parent = dirname(current);
36
+ if (parent === current)
37
+ return resolve(start);
38
+ current = parent;
39
+ }
40
+ }
41
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,SAAS,OAAO,CAAC,IAAY,EAAE,QAAgB;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,gBAAgB,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;IACrD,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { SchedulerStore } from "./store.js";
2
+ import type { SessionPromptHandler } from "./types.js";
3
+ export interface SchedulerDaemonOptions {
4
+ pollIntervalMs: number;
5
+ leaseMs: number;
6
+ maxConcurrentCommands: number;
7
+ materializeBatchSize?: number;
8
+ owner?: string;
9
+ bootId?: string;
10
+ sessionPromptHandler?: SessionPromptHandler;
11
+ sensitiveEnvKeys?: string[];
12
+ }
13
+ export interface SchedulerTickResult {
14
+ materialized: number;
15
+ claimed: number;
16
+ }
17
+ export declare class SchedulerDaemon {
18
+ private readonly store;
19
+ readonly owner: string;
20
+ readonly bootId: string;
21
+ private readonly runner;
22
+ private readonly sessionPromptRunner;
23
+ private readonly pollIntervalMs;
24
+ private readonly leaseMs;
25
+ private readonly maxConcurrentCommands;
26
+ private readonly materializeBatchSize;
27
+ private readonly running;
28
+ private commandSignal;
29
+ private commandAbort;
30
+ private firstWorkerError;
31
+ private hasWorkerError;
32
+ constructor(store: SchedulerStore, options: SchedulerDaemonOptions);
33
+ run(signal: AbortSignal): Promise<void>;
34
+ tick(now?: number): Promise<SchedulerTickResult>;
35
+ waitForIdle(): Promise<void>;
36
+ private captureWorkerError;
37
+ private settleWorkers;
38
+ private settleWorkersWithLease;
39
+ }
40
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/scheduler/daemon.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAyBD,qBAAa,eAAe;IAgBxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAfxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,cAAc,CAAS;gBAGZ,KAAK,EAAE,cAAc,EACtC,OAAO,EAAE,sBAAsB;IAc3B,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DvC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8BhD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC,OAAO,CAAC,kBAAkB;YAQZ,aAAa;YAIb,sBAAsB;CAoBrC"}