open-overlord 0.2606161230.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 (100) hide show
  1. package/README.md +148 -0
  2. package/bin/ovld.mjs +8 -0
  3. package/dist/agent-binaries.d.ts +3 -0
  4. package/dist/agent-binaries.d.ts.map +1 -0
  5. package/dist/agent-binaries.js +11 -0
  6. package/dist/agent-binaries.js.map +1 -0
  7. package/dist/agent-catalog-defaults.d.ts +15 -0
  8. package/dist/agent-catalog-defaults.d.ts.map +1 -0
  9. package/dist/agent-catalog-defaults.js +58 -0
  10. package/dist/agent-catalog-defaults.js.map +1 -0
  11. package/dist/agent-catalog.d.ts +7 -0
  12. package/dist/agent-catalog.d.ts.map +1 -0
  13. package/dist/agent-catalog.js +65 -0
  14. package/dist/agent-catalog.js.map +1 -0
  15. package/dist/args.d.ts +17 -0
  16. package/dist/args.d.ts.map +1 -0
  17. package/dist/args.js +80 -0
  18. package/dist/args.js.map +1 -0
  19. package/dist/backend-client.d.ts +19 -0
  20. package/dist/backend-client.d.ts.map +1 -0
  21. package/dist/backend-client.js +72 -0
  22. package/dist/backend-client.js.map +1 -0
  23. package/dist/commands.d.ts +13 -0
  24. package/dist/commands.d.ts.map +1 -0
  25. package/dist/commands.js +452 -0
  26. package/dist/commands.js.map +1 -0
  27. package/dist/config.d.ts +62 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +213 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/connectors.d.ts +87 -0
  32. package/dist/connectors.d.ts.map +1 -0
  33. package/dist/connectors.js +640 -0
  34. package/dist/connectors.js.map +1 -0
  35. package/dist/errors.d.ts +9 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +18 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/help.d.ts +4 -0
  40. package/dist/help.d.ts.map +1 -0
  41. package/dist/help.js +60 -0
  42. package/dist/help.js.map +1 -0
  43. package/dist/index.d.ts +7 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +125 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/launch.d.ts +40 -0
  48. package/dist/launch.d.ts.map +1 -0
  49. package/dist/launch.js +122 -0
  50. package/dist/launch.js.map +1 -0
  51. package/dist/management.d.ts +12 -0
  52. package/dist/management.d.ts.map +1 -0
  53. package/dist/management.js +313 -0
  54. package/dist/management.js.map +1 -0
  55. package/dist/mention-prompt.d.ts +26 -0
  56. package/dist/mention-prompt.d.ts.map +1 -0
  57. package/dist/mention-prompt.js +172 -0
  58. package/dist/mention-prompt.js.map +1 -0
  59. package/dist/mentions.d.ts +34 -0
  60. package/dist/mentions.d.ts.map +1 -0
  61. package/dist/mentions.js +85 -0
  62. package/dist/mentions.js.map +1 -0
  63. package/dist/native-session.d.ts +8 -0
  64. package/dist/native-session.d.ts.map +1 -0
  65. package/dist/native-session.js +103 -0
  66. package/dist/native-session.js.map +1 -0
  67. package/dist/output.d.ts +4 -0
  68. package/dist/output.d.ts.map +1 -0
  69. package/dist/output.js +14 -0
  70. package/dist/output.js.map +1 -0
  71. package/dist/repository-files.d.ts +7 -0
  72. package/dist/repository-files.d.ts.map +1 -0
  73. package/dist/repository-files.js +34 -0
  74. package/dist/repository-files.js.map +1 -0
  75. package/dist/runtime.d.ts +7 -0
  76. package/dist/runtime.d.ts.map +1 -0
  77. package/dist/runtime.js +9 -0
  78. package/dist/runtime.js.map +1 -0
  79. package/dist/select-prompt.d.ts +29 -0
  80. package/dist/select-prompt.d.ts.map +1 -0
  81. package/dist/select-prompt.js +52 -0
  82. package/dist/select-prompt.js.map +1 -0
  83. package/dist/serve.d.ts +25 -0
  84. package/dist/serve.d.ts.map +1 -0
  85. package/dist/serve.js +121 -0
  86. package/dist/serve.js.map +1 -0
  87. package/dist/setup.d.ts +5 -0
  88. package/dist/setup.d.ts.map +1 -0
  89. package/dist/setup.js +47 -0
  90. package/dist/setup.js.map +1 -0
  91. package/dist/terminal-launcher.d.ts +34 -0
  92. package/dist/terminal-launcher.d.ts.map +1 -0
  93. package/dist/terminal-launcher.js +104 -0
  94. package/dist/terminal-launcher.js.map +1 -0
  95. package/dist/version.d.ts +5 -0
  96. package/dist/version.d.ts.map +1 -0
  97. package/dist/version.js +34 -0
  98. package/dist/version.js.map +1 -0
  99. package/package.json +40 -0
  100. package/scripts/postinstall.mjs +1 -0
@@ -0,0 +1,452 @@
1
+ import { flagBoolean, flagValue, parseArgs, requireFlag } from './args.js';
2
+ import { loadConfig } from './config.js';
3
+ import { CliError } from './errors.js';
4
+ import { launchAgent } from './launch.js';
5
+ import { resolveNativeSessionId } from './native-session.js';
6
+ import { printJson, printKeyValue } from './output.js';
7
+ import { promptForProject } from './select-prompt.js';
8
+ function repeatedFlagValues(args, name) {
9
+ const values = [];
10
+ for (let index = 0; index < args.length; index += 1) {
11
+ if (args[index] !== name)
12
+ continue;
13
+ const value = args[index + 1];
14
+ if (value !== undefined) {
15
+ values.push(value);
16
+ index += 1;
17
+ }
18
+ }
19
+ return values;
20
+ }
21
+ function resolveTerminalLauncher(flags) {
22
+ if (flagBoolean(flags, '--no-terminal'))
23
+ return null;
24
+ const override = flagValue(flags, '--terminal');
25
+ if (override)
26
+ return override;
27
+ return loadConfig().terminalLauncher;
28
+ }
29
+ function asRecord(value) {
30
+ return value && typeof value === 'object' ? value : {};
31
+ }
32
+ function firstObjectiveId(ticket) {
33
+ const objectives = asRecord(ticket).objectives;
34
+ if (!Array.isArray(objectives))
35
+ return undefined;
36
+ const first = objectives[0];
37
+ const id = asRecord(first).id;
38
+ return typeof id === 'string' ? id : undefined;
39
+ }
40
+ function ticketDisplayId(ticket) {
41
+ const record = asRecord(ticket);
42
+ return typeof record.displayId === 'string'
43
+ ? record.displayId
44
+ : typeof record.id === 'string'
45
+ ? record.id
46
+ : 'unknown';
47
+ }
48
+ async function discoverProjectId(runtime, explicit) {
49
+ if (explicit)
50
+ return explicit;
51
+ const projects = await runtime.backend.get('/api/projects');
52
+ const first = projects[0];
53
+ const id = asRecord(first).id;
54
+ if (typeof id !== 'string') {
55
+ throw new CliError({ message: 'No project found. Create one with `ovld create-project`.' });
56
+ }
57
+ return id;
58
+ }
59
+ export async function runProtocolCommand({ runtime, subcommand, args, stdin }) {
60
+ const parsed = parseArgs(args);
61
+ if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
62
+ printJson({
63
+ backend: runtime.backend.baseUrl,
64
+ note: 'Protocol commands are forwarded to the configured Overlord backend.'
65
+ });
66
+ return;
67
+ }
68
+ const result = await runtime.backend.post({
69
+ path: `/api/protocol/${encodeURIComponent(subcommand)}`,
70
+ body: {
71
+ args,
72
+ positional: parsed.positional,
73
+ flags: Object.fromEntries(parsed.flags),
74
+ stdin,
75
+ externalSessionId: flagValue(parsed.flags, '--external-session-id') ??
76
+ resolveNativeSessionId({
77
+ explicit: undefined,
78
+ agent: flagValue(parsed.flags, '--agent') ?? 'unknown',
79
+ ticketId: flagValue(parsed.flags, '--ticket-id') ?? 'unknown',
80
+ workingDirectory: process.cwd()
81
+ })
82
+ }
83
+ });
84
+ const resultRecord = asRecord(result);
85
+ if (typeof resultRecord.sessionKey === 'string') {
86
+ printKeyValue({ SESSION_KEY: resultRecord.sessionKey });
87
+ }
88
+ if (typeof resultRecord.ticketId === 'string') {
89
+ printKeyValue({ TICKET_ID: resultRecord.ticketId });
90
+ }
91
+ printJson(result);
92
+ }
93
+ export async function runManagementCommand({ runtime, command, rest }) {
94
+ if (!runtime)
95
+ throw new CliError({ message: `Command requires a backend: ${command}` });
96
+ const parsed = parseArgs(rest);
97
+ const json = flagBoolean(parsed.flags, '--json');
98
+ switch (command) {
99
+ case 'create-project': {
100
+ const name = flagValue(parsed.flags, '--name') ?? parsed.positional.join(' ');
101
+ if (!name)
102
+ throw new CliError({ message: 'Missing --name' });
103
+ const project = await runtime.backend.post({
104
+ path: '/api/projects',
105
+ body: { name }
106
+ });
107
+ const projectId = asRecord(project).id;
108
+ if (!flagBoolean(parsed.flags, '--no-directory') && typeof projectId === 'string') {
109
+ await runtime.backend.post({
110
+ path: `/api/projects/${encodeURIComponent(projectId)}/resources`,
111
+ body: {
112
+ directoryPath: flagValue(parsed.flags, '--directory') ?? process.cwd(),
113
+ isPrimary: true
114
+ }
115
+ });
116
+ }
117
+ if (json)
118
+ printJson({ project });
119
+ else
120
+ console.log(`Created project ${asRecord(project).name ?? name} (${projectId ?? 'unknown'})`);
121
+ return;
122
+ }
123
+ case 'add-cwd': {
124
+ const directory = flagValue(parsed.flags, '--directory') ?? process.cwd();
125
+ let projectId = flagValue(parsed.flags, '--project-id');
126
+ if (!projectId) {
127
+ const projects = await runtime.backend.get('/api/projects');
128
+ if (projects.length === 0) {
129
+ throw new CliError({ message: 'No project found. Create one with `ovld create-project`.' });
130
+ }
131
+ if (process.stdin.isTTY) {
132
+ const chosen = await promptForProject({ projects, directoryPath: directory });
133
+ if (!chosen) {
134
+ console.log('Cancelled. No changes made.');
135
+ return;
136
+ }
137
+ projectId = chosen.id;
138
+ }
139
+ else {
140
+ projectId = projects[0]?.id;
141
+ }
142
+ }
143
+ if (!projectId)
144
+ throw new CliError({ message: 'No project selected.' });
145
+ const resource = await runtime.backend.post({
146
+ path: `/api/projects/${encodeURIComponent(projectId)}/resources`,
147
+ body: {
148
+ directoryPath: directory,
149
+ isPrimary: flagValue(parsed.flags, '--primary') !== 'false'
150
+ }
151
+ });
152
+ if (json)
153
+ printJson({ resource });
154
+ else
155
+ console.log(`Linked ${directory} to project ${projectId}`);
156
+ return;
157
+ }
158
+ case 'create':
159
+ case 'prompt': {
160
+ const objective = parsed.positional.join(' ') || flagValue(parsed.flags, '--objective') || flagValue(parsed.flags, '--prompt');
161
+ const objectivesJson = flagValue(parsed.flags, '--objectives-json');
162
+ const projectId = await discoverProjectId(runtime, flagValue(parsed.flags, '--project-id'));
163
+ if (objectivesJson) {
164
+ const objectives = JSON.parse(objectivesJson);
165
+ const first = objectives[0];
166
+ if (!first)
167
+ throw new CliError({ message: 'objectives-json must contain at least one objective' });
168
+ const ticket = await runtime.backend.post({
169
+ path: '/api/tickets',
170
+ body: { projectId, title: first.title ?? first.objective, firstObjective: first.objective }
171
+ });
172
+ const ticketId = asRecord(ticket).id;
173
+ if (typeof ticketId === 'string') {
174
+ for (const item of objectives.slice(1)) {
175
+ await runtime.backend.post({
176
+ path: '/api/objectives',
177
+ body: { ticketId, title: item.title ?? null, instructionText: item.objective }
178
+ });
179
+ }
180
+ }
181
+ if (json)
182
+ printJson(ticket);
183
+ else
184
+ console.log(`Created ticket ${ticketDisplayId(ticket)}`);
185
+ return;
186
+ }
187
+ if (!objective)
188
+ throw new CliError({ message: 'Missing objective prompt text' });
189
+ const ticket = await runtime.backend.post({
190
+ path: '/api/tickets',
191
+ body: { projectId, title: flagValue(parsed.flags, '--title') ?? objective, firstObjective: objective }
192
+ });
193
+ if (command === 'prompt') {
194
+ const objectiveId = firstObjectiveId(ticket);
195
+ if (objectiveId) {
196
+ await runtime.backend.post({
197
+ path: `/api/objectives/${encodeURIComponent(objectiveId)}/launch`,
198
+ body: { agent: flagValue(parsed.flags, '--agent') ?? 'unknown' }
199
+ });
200
+ }
201
+ }
202
+ if (json)
203
+ printJson(ticket);
204
+ else
205
+ console.log(`Created ticket ${ticketDisplayId(ticket)}`);
206
+ return;
207
+ }
208
+ case 'attach':
209
+ case 'execution': {
210
+ const ticketId = command === 'attach'
211
+ ? (parsed.positional[0] ?? flagValue(parsed.flags, '--ticket-id'))
212
+ : requireFlag(parsed.flags, '--ticket-id');
213
+ const agent = parsed.positional[1] ?? flagValue(parsed.flags, '--agent') ?? 'codex';
214
+ if (!ticketId)
215
+ throw new CliError({ message: 'Usage: ovld attach <ticketId> [agent]' });
216
+ const ticket = await runtime.backend.get(`/api/tickets/${encodeURIComponent(ticketId)}`);
217
+ const objectiveId = flagValue(parsed.flags, '--objective-id') ?? firstObjectiveId(ticket);
218
+ if (!objectiveId)
219
+ throw new CliError({ message: `No launchable objective found for ${ticketId}` });
220
+ const request = await runtime.backend.post({
221
+ path: `/api/objectives/${encodeURIComponent(objectiveId)}/launch`,
222
+ body: {
223
+ agent,
224
+ model: flagValue(parsed.flags, '--model'),
225
+ reasoningEffort: flagValue(parsed.flags, '--thinking')
226
+ }
227
+ });
228
+ if (json)
229
+ printJson({ request });
230
+ else
231
+ console.log(`Queued ${agent} for ${ticketDisplayId(ticket)}`);
232
+ return;
233
+ }
234
+ case 'launch':
235
+ case 'restart':
236
+ case 'run':
237
+ case 'connect':
238
+ case 'resume': {
239
+ const agent = command === 'run' || command === 'connect' || command === 'resume'
240
+ ? (flagValue(parsed.flags, '--agent') ?? parsed.positional[0] ?? 'codex')
241
+ : parsed.positional[0];
242
+ const ticketId = flagValue(parsed.flags, '--ticket-id') ??
243
+ (command === 'run' || command === 'connect' || command === 'resume'
244
+ ? parsed.positional[1]
245
+ : parsed.positional[1]);
246
+ if (!agent || !ticketId) {
247
+ throw new CliError({ message: `Usage: ovld ${command} <agent> --ticket-id <ticketId>` });
248
+ }
249
+ const workingDirectory = flagValue(parsed.flags, '--working-directory') ?? process.cwd();
250
+ const result = await launchAgent({
251
+ runtime,
252
+ options: {
253
+ agent,
254
+ ticketId,
255
+ workingDirectory,
256
+ model: flagValue(parsed.flags, '--model'),
257
+ thinking: flagValue(parsed.flags, '--thinking'),
258
+ flags: repeatedFlagValues(rest, '--flag'),
259
+ preCommand: flagValue(parsed.flags, '--pre-command'),
260
+ terminalLauncher: resolveTerminalLauncher(parsed.flags),
261
+ dryRun: flagBoolean(parsed.flags, '--dry-run')
262
+ }
263
+ });
264
+ if (json || flagBoolean(parsed.flags, '--dry-run')) {
265
+ printJson({ plan: result.plan, status: result.status, signal: result.signal });
266
+ }
267
+ if (result.status && result.status !== 0) {
268
+ throw new CliError({ message: `Launch command exited with status ${result.status}` });
269
+ }
270
+ return;
271
+ }
272
+ case 'runner': {
273
+ await runRunnerCommand({ runtime, parsed, json });
274
+ return;
275
+ }
276
+ case 'tickets': {
277
+ const sub = parsed.positional[0];
278
+ if (sub !== 'list') {
279
+ throw new CliError({ message: 'Usage: ovld tickets list [--status <csv>] [--project-id <id>] [--json]' });
280
+ }
281
+ const params = new URLSearchParams();
282
+ const query = flagValue(parsed.flags, '--query');
283
+ const projectId = flagValue(parsed.flags, '--project-id');
284
+ const limit = flagValue(parsed.flags, '--limit');
285
+ if (query)
286
+ params.set('q', query);
287
+ if (projectId)
288
+ params.set('projectId', projectId);
289
+ if (limit)
290
+ params.set('limit', limit);
291
+ const result = await runtime.backend.get(`/api/tickets/search?${params}`);
292
+ const tickets = result.tickets;
293
+ if (json)
294
+ printJson({ tickets });
295
+ else {
296
+ for (const ticket of tickets) {
297
+ const record = asRecord(ticket);
298
+ console.log(`${record.displayId ?? record.id}\t${record.statusType ?? ''}\t${record.title ?? ''}`);
299
+ }
300
+ }
301
+ return;
302
+ }
303
+ case 'ticket': {
304
+ const sub = parsed.positional[0];
305
+ const ticketId = parsed.positional[1];
306
+ if (!ticketId) {
307
+ throw new CliError({
308
+ message: 'Usage: ovld ticket context|events|deliveries|artifacts|rationales <ticketId> [--json]'
309
+ });
310
+ }
311
+ const pathBySub = {
312
+ context: `/api/tickets/${encodeURIComponent(ticketId)}`,
313
+ events: `/api/tickets/${encodeURIComponent(ticketId)}/events`,
314
+ artifacts: `/api/tickets/${encodeURIComponent(ticketId)}/artifacts`,
315
+ rationales: `/api/tickets/${encodeURIComponent(ticketId)}/file-changes`,
316
+ deliveries: `/api/tickets/${encodeURIComponent(ticketId)}/events`
317
+ };
318
+ const path = sub ? pathBySub[sub] : undefined;
319
+ if (!path) {
320
+ throw new CliError({
321
+ message: 'Usage: ovld ticket context|events|deliveries|artifacts|rationales <ticketId> [--json]'
322
+ });
323
+ }
324
+ const result = await runtime.backend.get(path);
325
+ if (json || sub === 'context')
326
+ printJson(result);
327
+ else if (Array.isArray(result))
328
+ for (const row of result)
329
+ console.log(JSON.stringify(row));
330
+ else
331
+ printJson(result);
332
+ return;
333
+ }
334
+ case 'changes': {
335
+ const sub = parsed.positional[0];
336
+ const ticketId = requireFlag(parsed.flags, '--ticket-id');
337
+ if (sub !== 'status' && sub !== 'rationales') {
338
+ throw new CliError({ message: 'Usage: ovld changes status|rationales --ticket-id <id>' });
339
+ }
340
+ const result = await runtime.backend.get(`/api/tickets/${encodeURIComponent(ticketId)}/file-changes`);
341
+ if (json)
342
+ printJson({ files: result, rationales: result });
343
+ else
344
+ for (const row of result)
345
+ console.log(JSON.stringify(row));
346
+ return;
347
+ }
348
+ default:
349
+ throw new CliError({ message: `Unknown command: ${command}` });
350
+ }
351
+ }
352
+ async function runRunnerCommand({ runtime, parsed, json }) {
353
+ const sub = parsed.positional[0] ?? 'status';
354
+ if (sub === 'status') {
355
+ const result = await runtime.backend.get('/api/runner/status');
356
+ if (json)
357
+ printJson(result);
358
+ else
359
+ printJson(result);
360
+ return;
361
+ }
362
+ if (sub === 'clear' || sub === 'clear-all') {
363
+ const result = await runtime.backend.post({
364
+ path: '/api/runner/clear',
365
+ body: {
366
+ objectiveId: sub === 'clear' ? parsed.positional[1] : undefined,
367
+ projectId: flagValue(parsed.flags, '--project-id')
368
+ }
369
+ });
370
+ if (json)
371
+ printJson(result);
372
+ else
373
+ console.log(`Cleared ${asRecord(result).cleared ?? 0} execution request(s).`);
374
+ return;
375
+ }
376
+ if (sub !== 'once' && sub !== 'start') {
377
+ throw new CliError({ message: 'Usage: ovld runner once|start|status|clear <objective_id>|clear-all' });
378
+ }
379
+ const runOnce = async () => {
380
+ const claim = await runtime.backend.post({
381
+ path: '/api/runner/claim',
382
+ body: { projectId: flagValue(parsed.flags, '--project-id') }
383
+ });
384
+ const request = asRecord(claim).request;
385
+ if (!request)
386
+ return false;
387
+ const requestRecord = asRecord(request);
388
+ const requestId = String(requestRecord.id);
389
+ await runtime.backend.post({ path: `/api/runner/requests/${requestId}/launching` });
390
+ try {
391
+ const launchConfig = asRecord(requestRecord.launchConfig);
392
+ const result = await launchAgent({
393
+ runtime,
394
+ options: {
395
+ agent: String(requestRecord.requestedAgent ?? 'codex'),
396
+ ticketId: String(requestRecord.ticketId),
397
+ workingDirectory: String(requestRecord.workingDirectory ?? process.cwd()),
398
+ model: typeof requestRecord.requestedModel === 'string' ? requestRecord.requestedModel : undefined,
399
+ thinking: typeof requestRecord.requestedReasoningEffort === 'string'
400
+ ? requestRecord.requestedReasoningEffort
401
+ : undefined,
402
+ flags: Array.isArray(launchConfig.flags)
403
+ ? launchConfig.flags.filter((value) => typeof value === 'string')
404
+ : [],
405
+ preCommand: typeof launchConfig.preCommand === 'string' ? launchConfig.preCommand : undefined,
406
+ terminalLauncher: resolveTerminalLauncher(parsed.flags),
407
+ dryRun: flagBoolean(parsed.flags, '--dry-run')
408
+ }
409
+ });
410
+ if (result.status && result.status !== 0) {
411
+ await runtime.backend.post({
412
+ path: `/api/runner/requests/${requestId}/failed`,
413
+ body: { error: `Launch command exited with status ${result.status}` }
414
+ });
415
+ throw new CliError({ message: `Launch command exited with status ${result.status}` });
416
+ }
417
+ await runtime.backend.post({ path: `/api/runner/requests/${requestId}/launched` });
418
+ if (json || flagBoolean(parsed.flags, '--dry-run')) {
419
+ printJson({ request, plan: result.plan, status: result.status });
420
+ }
421
+ else {
422
+ console.log(`Launched ${requestRecord.requestedAgent ?? 'codex'} for ${requestRecord.ticketId}`);
423
+ }
424
+ return true;
425
+ }
426
+ catch (error) {
427
+ await runtime.backend.post({
428
+ path: `/api/runner/requests/${requestId}/failed`,
429
+ body: { error: error instanceof Error ? error.message : String(error) }
430
+ });
431
+ throw error;
432
+ }
433
+ };
434
+ if (sub === 'once') {
435
+ const launched = await runOnce();
436
+ if (!launched) {
437
+ if (json)
438
+ printJson({ launched: false });
439
+ else
440
+ console.log('No claimable execution requests.');
441
+ }
442
+ return;
443
+ }
444
+ const intervalMs = Number.parseInt(flagValue(parsed.flags, '--poll-interval-ms') ?? '3000', 10);
445
+ if (!json)
446
+ console.log(`Runner started. Polling every ${intervalMs}ms for execution requests.`);
447
+ while (true) {
448
+ await runOnce();
449
+ await new Promise(resolve => setTimeout(resolve, intervalMs));
450
+ }
451
+ }
452
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { CatalogAgent } from './agent-catalog-defaults.ts';
2
+ export declare const DEFAULT_LOCAL_BACKEND_DIR = "~/.ovld";
3
+ export declare const DEFAULT_LOCAL_BACKEND_DATABASE_PATH = "~/.ovld/Overlord.sqlite";
4
+ export declare const DEFAULT_LOCAL_BACKEND_URL = "http://127.0.0.1:4310";
5
+ export type BackendMode = 'local' | 'cloud';
6
+ export type OverlordConfig = {
7
+ instanceName: string;
8
+ backendMode: BackendMode;
9
+ backendUrl: string | null;
10
+ /**
11
+ * Developer override for the local SQLite location. Relative paths resolve
12
+ * against the `overlord.toml` directory; absolute paths are used as-is.
13
+ * `null` means use the per-user global default (`~/.ovld/Overlord.sqlite`).
14
+ */
15
+ databasePath: string | null;
16
+ /**
17
+ * Admin-configured cloud database connection string (e.g. a PostgreSQL URL)
18
+ * for running Overlord against a hosted database. `null` means use the local
19
+ * SQLite database at `databasePath`. Feeds the shared `resolveAdapter()`
20
+ * selection point.
21
+ */
22
+ databaseUrl: string | null;
23
+ webHost: string;
24
+ webPort: number;
25
+ sqlStudioEnabled: boolean;
26
+ sqlStudioHost: string;
27
+ sqlStudioPort: number;
28
+ sqlStudioBinary: string;
29
+ defaultAgent: string;
30
+ defaultModel: string | null;
31
+ /**
32
+ * How `ovld launch` / the runner open the agent in a new terminal window.
33
+ * A built-in name (`iTerm2`, `Terminal`) or a raw prefix command
34
+ * (e.g. `open -a Ghostty --args`). `null` launches the agent inline.
35
+ */
36
+ terminalLauncher: string | null;
37
+ /** Parsed from `[agent_catalog]`; merged over bundled defaults when seeding the workspace catalog. */
38
+ agentCatalog: Record<string, CatalogAgent> | null;
39
+ };
40
+ export declare function resolveProjectRoot(startDir?: string): string;
41
+ export declare function resolveRepoPath(relativePath: string, startDir?: string): string;
42
+ export declare function findConfigPath(startDir?: string): string | null;
43
+ export declare function resolveGlobalDataDir(): string;
44
+ export declare function resolveGlobalConfigPath(): string;
45
+ export declare function findEffectiveConfigPath(startDir?: string): string | null;
46
+ export declare function resolveConfigWritePath(startDir?: string): string;
47
+ export declare function loadConfig(configPath?: string | null): OverlordConfig;
48
+ export declare function writeConfig({ targetPath, config }: {
49
+ targetPath: string;
50
+ config: Partial<OverlordConfig>;
51
+ }): void;
52
+ export declare function hasExplicitBackendConfig(config: OverlordConfig): boolean;
53
+ export declare function resolveDatabasePath(config: OverlordConfig, startDir?: string): string;
54
+ export declare function resolveBackendUrl(config: OverlordConfig): string;
55
+ /**
56
+ * Bridge the admin `database_url` from `overlord.toml` into `DATABASE_URL` so
57
+ * the components that already resolve the database from the environment — the
58
+ * auth layer and `resolveAdapter()` — coordinate with the toml without each
59
+ * needing to re-read the config. An existing `DATABASE_URL` is left untouched.
60
+ */
61
+ export declare function applyDatabaseEnv(config: OverlordConfig): void;
62
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AACnD,eAAO,MAAM,mCAAmC,4BAA4B,CAAC;AAC7E,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sGAAsG;IACtG,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;CACnD,CAAC;AA+EF,wBAAgB,kBAAkB,CAAC,QAAQ,SAAgB,GAAG,MAAM,CAMnE;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,SAAgB,GAAG,MAAM,CAEtF;AAED,wBAAgB,cAAc,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,IAAI,CAUtE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,IAAI,CAM/E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,SAAgB,GAAG,MAAM,CAEvE;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAQrE;AAED,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EACV,MAAM,EACP,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACjC,GAAG,IAAI,CAuDP;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAExE;AAgBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,SAAgB,GAAG,MAAM,CAkB5F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAI7D"}