openplanter 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 (126) hide show
  1. package/README.md +210 -0
  2. package/dist/builder.d.ts +11 -0
  3. package/dist/builder.d.ts.map +1 -0
  4. package/dist/builder.js +179 -0
  5. package/dist/builder.js.map +1 -0
  6. package/dist/cli.d.ts +9 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +548 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +51 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +114 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/credentials.d.ts +52 -0
  15. package/dist/credentials.d.ts.map +1 -0
  16. package/dist/credentials.js +371 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/demo.d.ts +26 -0
  19. package/dist/demo.d.ts.map +1 -0
  20. package/dist/demo.js +95 -0
  21. package/dist/demo.js.map +1 -0
  22. package/dist/engine.d.ts +91 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +1036 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/index.d.ts +30 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +39 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/investigation-tools/aph-holdings.d.ts +61 -0
  31. package/dist/investigation-tools/aph-holdings.d.ts.map +1 -0
  32. package/dist/investigation-tools/aph-holdings.js +459 -0
  33. package/dist/investigation-tools/aph-holdings.js.map +1 -0
  34. package/dist/investigation-tools/asic-officer-lookup.d.ts +42 -0
  35. package/dist/investigation-tools/asic-officer-lookup.d.ts.map +1 -0
  36. package/dist/investigation-tools/asic-officer-lookup.js +197 -0
  37. package/dist/investigation-tools/asic-officer-lookup.js.map +1 -0
  38. package/dist/investigation-tools/asx-calendar-fetcher.d.ts +42 -0
  39. package/dist/investigation-tools/asx-calendar-fetcher.d.ts.map +1 -0
  40. package/dist/investigation-tools/asx-calendar-fetcher.js +271 -0
  41. package/dist/investigation-tools/asx-calendar-fetcher.js.map +1 -0
  42. package/dist/investigation-tools/asx-parser.d.ts +66 -0
  43. package/dist/investigation-tools/asx-parser.d.ts.map +1 -0
  44. package/dist/investigation-tools/asx-parser.js +314 -0
  45. package/dist/investigation-tools/asx-parser.js.map +1 -0
  46. package/dist/investigation-tools/bulk-asx-announcements.d.ts +53 -0
  47. package/dist/investigation-tools/bulk-asx-announcements.d.ts.map +1 -0
  48. package/dist/investigation-tools/bulk-asx-announcements.js +204 -0
  49. package/dist/investigation-tools/bulk-asx-announcements.js.map +1 -0
  50. package/dist/investigation-tools/entity-resolver.d.ts +77 -0
  51. package/dist/investigation-tools/entity-resolver.d.ts.map +1 -0
  52. package/dist/investigation-tools/entity-resolver.js +346 -0
  53. package/dist/investigation-tools/entity-resolver.js.map +1 -0
  54. package/dist/investigation-tools/hotcopper-scraper.d.ts +73 -0
  55. package/dist/investigation-tools/hotcopper-scraper.d.ts.map +1 -0
  56. package/dist/investigation-tools/hotcopper-scraper.js +318 -0
  57. package/dist/investigation-tools/hotcopper-scraper.js.map +1 -0
  58. package/dist/investigation-tools/index.d.ts +15 -0
  59. package/dist/investigation-tools/index.d.ts.map +1 -0
  60. package/dist/investigation-tools/index.js +15 -0
  61. package/dist/investigation-tools/index.js.map +1 -0
  62. package/dist/investigation-tools/insider-graph.d.ts +173 -0
  63. package/dist/investigation-tools/insider-graph.d.ts.map +1 -0
  64. package/dist/investigation-tools/insider-graph.js +732 -0
  65. package/dist/investigation-tools/insider-graph.js.map +1 -0
  66. package/dist/investigation-tools/insider-suspicion-scorer.d.ts +97 -0
  67. package/dist/investigation-tools/insider-suspicion-scorer.d.ts.map +1 -0
  68. package/dist/investigation-tools/insider-suspicion-scorer.js +327 -0
  69. package/dist/investigation-tools/insider-suspicion-scorer.js.map +1 -0
  70. package/dist/investigation-tools/multi-forum-scraper.d.ts +104 -0
  71. package/dist/investigation-tools/multi-forum-scraper.d.ts.map +1 -0
  72. package/dist/investigation-tools/multi-forum-scraper.js +415 -0
  73. package/dist/investigation-tools/multi-forum-scraper.js.map +1 -0
  74. package/dist/investigation-tools/price-fetcher.d.ts +81 -0
  75. package/dist/investigation-tools/price-fetcher.d.ts.map +1 -0
  76. package/dist/investigation-tools/price-fetcher.js +268 -0
  77. package/dist/investigation-tools/price-fetcher.js.map +1 -0
  78. package/dist/investigation-tools/shared.d.ts +39 -0
  79. package/dist/investigation-tools/shared.d.ts.map +1 -0
  80. package/dist/investigation-tools/shared.js +203 -0
  81. package/dist/investigation-tools/shared.js.map +1 -0
  82. package/dist/investigation-tools/timeline-linker.d.ts +90 -0
  83. package/dist/investigation-tools/timeline-linker.d.ts.map +1 -0
  84. package/dist/investigation-tools/timeline-linker.js +219 -0
  85. package/dist/investigation-tools/timeline-linker.js.map +1 -0
  86. package/dist/investigation-tools/volume-scanner.d.ts +70 -0
  87. package/dist/investigation-tools/volume-scanner.d.ts.map +1 -0
  88. package/dist/investigation-tools/volume-scanner.js +227 -0
  89. package/dist/investigation-tools/volume-scanner.js.map +1 -0
  90. package/dist/model.d.ts +136 -0
  91. package/dist/model.d.ts.map +1 -0
  92. package/dist/model.js +1071 -0
  93. package/dist/model.js.map +1 -0
  94. package/dist/patching.d.ts +45 -0
  95. package/dist/patching.d.ts.map +1 -0
  96. package/dist/patching.js +317 -0
  97. package/dist/patching.js.map +1 -0
  98. package/dist/prompts.d.ts +15 -0
  99. package/dist/prompts.d.ts.map +1 -0
  100. package/dist/prompts.js +351 -0
  101. package/dist/prompts.js.map +1 -0
  102. package/dist/replay-log.d.ts +54 -0
  103. package/dist/replay-log.d.ts.map +1 -0
  104. package/dist/replay-log.js +94 -0
  105. package/dist/replay-log.js.map +1 -0
  106. package/dist/runtime.d.ts +53 -0
  107. package/dist/runtime.d.ts.map +1 -0
  108. package/dist/runtime.js +259 -0
  109. package/dist/runtime.js.map +1 -0
  110. package/dist/settings.d.ts +39 -0
  111. package/dist/settings.d.ts.map +1 -0
  112. package/dist/settings.js +146 -0
  113. package/dist/settings.js.map +1 -0
  114. package/dist/tool-defs.d.ts +58 -0
  115. package/dist/tool-defs.d.ts.map +1 -0
  116. package/dist/tool-defs.js +1029 -0
  117. package/dist/tool-defs.js.map +1 -0
  118. package/dist/tools.d.ts +72 -0
  119. package/dist/tools.d.ts.map +1 -0
  120. package/dist/tools.js +1454 -0
  121. package/dist/tools.js.map +1 -0
  122. package/dist/tui.d.ts +49 -0
  123. package/dist/tui.d.ts.map +1 -0
  124. package/dist/tui.js +699 -0
  125. package/dist/tui.js.map +1 -0
  126. package/package.json +126 -0
package/dist/cli.js ADDED
@@ -0,0 +1,548 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point – migrated from agent/__main__.py.
4
+ *
5
+ * Parses command-line arguments, loads credentials/settings, builds the
6
+ * engine, and launches the appropriate REPL or headless task mode.
7
+ */
8
+ import { Command, Option } from "commander";
9
+ import * as process from "node:process";
10
+ import { agentConfigFromEnv } from "./config.js";
11
+ import { CredentialBundle, CredentialStore, UserCredentialStore, credentialsFromEnv, discoverEnvCandidates, parseEnvFile, promptForCredentials, } from "./credentials.js";
12
+ import { SessionError, SessionRuntime, SessionStore } from "./runtime.js";
13
+ import { normalizeReasoningEffort, SettingsStore, } from "./settings.js";
14
+ import { inferProviderForModel, _fetchModelsForProvider, buildEngine } from "./builder.js";
15
+ import { MODEL_ALIASES, _clip_event, getModelDisplayName, dispatchSlashCommand, runRichRepl, } from "./tui.js";
16
+ // ---------------------------------------------------------------------------
17
+ // Constants
18
+ // ---------------------------------------------------------------------------
19
+ const VALID_REASONING_FLAGS = ["low", "medium", "high", "none"];
20
+ // ---------------------------------------------------------------------------
21
+ // Helpers
22
+ // ---------------------------------------------------------------------------
23
+ function _formatTs(ts) {
24
+ if (ts <= 0)
25
+ return "unknown";
26
+ return new Date(ts * 1000).toISOString();
27
+ }
28
+ function _resolveProvider(requested, creds) {
29
+ const lower = requested.trim().toLowerCase();
30
+ if (["openai", "anthropic", "openrouter", "cerebras", "grok"].includes(lower)) {
31
+ return lower;
32
+ }
33
+ if (lower === "all")
34
+ return "all";
35
+ if (creds.openaiApiKey)
36
+ return "openai";
37
+ if (creds.anthropicApiKey)
38
+ return "anthropic";
39
+ if (creds.openrouterApiKey)
40
+ return "openrouter";
41
+ if (creds.cerebrasApiKey)
42
+ return "cerebras";
43
+ if (creds.grokApiKey)
44
+ return "grok";
45
+ return "openai";
46
+ }
47
+ async function _printModels(cfg, requestedProvider) {
48
+ let providers;
49
+ if (requestedProvider === "all" || requestedProvider === "auto") {
50
+ providers = ["openai", "anthropic", "openrouter", "cerebras", "grok"];
51
+ }
52
+ else {
53
+ providers = [requestedProvider];
54
+ }
55
+ let printedAny = false;
56
+ for (const provider of providers) {
57
+ try {
58
+ const models = await _fetchModelsForProvider(cfg, provider);
59
+ console.log(`${provider}: ${models.length} models`);
60
+ for (const row of models) {
61
+ const modelId = String(row.id ?? "");
62
+ const createdTs = Number(row.created_ts ?? 0) || 0;
63
+ console.log(` ${modelId} | ${_formatTs(createdTs)}`);
64
+ }
65
+ printedAny = true;
66
+ }
67
+ catch (exc) {
68
+ console.log(`${provider}: skipped (${exc})`);
69
+ }
70
+ }
71
+ if (!printedAny) {
72
+ console.log("No models could be listed. Configure at least one provider API key.");
73
+ return 1;
74
+ }
75
+ return 0;
76
+ }
77
+ async function _loadCredentials(cfg, opts, allowPrompt) {
78
+ const userStore = new UserCredentialStore();
79
+ const userCreds = userStore.load();
80
+ const creds = new CredentialBundle({
81
+ openaiApiKey: userCreds.openaiApiKey,
82
+ anthropicApiKey: userCreds.anthropicApiKey,
83
+ openrouterApiKey: userCreds.openrouterApiKey,
84
+ cerebrasApiKey: userCreds.cerebrasApiKey,
85
+ grokApiKey: userCreds.grokApiKey,
86
+ exaApiKey: userCreds.exaApiKey,
87
+ voyageApiKey: userCreds.voyageApiKey,
88
+ });
89
+ const store = new CredentialStore(cfg.workspace, cfg.sessionRootDir);
90
+ const stored = store.load();
91
+ if (stored.openaiApiKey)
92
+ creds.openaiApiKey = stored.openaiApiKey;
93
+ if (stored.anthropicApiKey)
94
+ creds.anthropicApiKey = stored.anthropicApiKey;
95
+ if (stored.openrouterApiKey)
96
+ creds.openrouterApiKey = stored.openrouterApiKey;
97
+ if (stored.cerebrasApiKey)
98
+ creds.cerebrasApiKey = stored.cerebrasApiKey;
99
+ if (stored.grokApiKey)
100
+ creds.grokApiKey = stored.grokApiKey;
101
+ if (stored.exaApiKey)
102
+ creds.exaApiKey = stored.exaApiKey;
103
+ if (stored.voyageApiKey)
104
+ creds.voyageApiKey = stored.voyageApiKey;
105
+ const envCreds = credentialsFromEnv();
106
+ if (envCreds.openaiApiKey)
107
+ creds.openaiApiKey = envCreds.openaiApiKey;
108
+ if (envCreds.anthropicApiKey)
109
+ creds.anthropicApiKey = envCreds.anthropicApiKey;
110
+ if (envCreds.openrouterApiKey)
111
+ creds.openrouterApiKey = envCreds.openrouterApiKey;
112
+ if (envCreds.cerebrasApiKey)
113
+ creds.cerebrasApiKey = envCreds.cerebrasApiKey;
114
+ if (envCreds.grokApiKey)
115
+ creds.grokApiKey = envCreds.grokApiKey;
116
+ if (envCreds.exaApiKey)
117
+ creds.exaApiKey = envCreds.exaApiKey;
118
+ if (envCreds.voyageApiKey)
119
+ creds.voyageApiKey = envCreds.voyageApiKey;
120
+ const envCandidates = discoverEnvCandidates(cfg.workspace);
121
+ for (const envPath of [...envCandidates].reverse()) {
122
+ const fileCreds = parseEnvFile(envPath);
123
+ if (fileCreds.openaiApiKey)
124
+ creds.openaiApiKey = fileCreds.openaiApiKey;
125
+ if (fileCreds.anthropicApiKey)
126
+ creds.anthropicApiKey = fileCreds.anthropicApiKey;
127
+ if (fileCreds.openrouterApiKey)
128
+ creds.openrouterApiKey = fileCreds.openrouterApiKey;
129
+ if (fileCreds.cerebrasApiKey)
130
+ creds.cerebrasApiKey = fileCreds.cerebrasApiKey;
131
+ if (fileCreds.grokApiKey)
132
+ creds.grokApiKey = fileCreds.grokApiKey;
133
+ if (fileCreds.exaApiKey)
134
+ creds.exaApiKey = fileCreds.exaApiKey;
135
+ if (fileCreds.voyageApiKey)
136
+ creds.voyageApiKey = fileCreds.voyageApiKey;
137
+ }
138
+ if (opts.apiKey)
139
+ creds.openaiApiKey = opts.apiKey.trim() || creds.openaiApiKey;
140
+ if (opts.openaiApiKey)
141
+ creds.openaiApiKey = opts.openaiApiKey.trim() || creds.openaiApiKey;
142
+ if (opts.anthropicApiKey)
143
+ creds.anthropicApiKey = opts.anthropicApiKey.trim() || creds.anthropicApiKey;
144
+ if (opts.openrouterApiKey)
145
+ creds.openrouterApiKey = opts.openrouterApiKey.trim() || creds.openrouterApiKey;
146
+ if (opts.cerebrasApiKey)
147
+ creds.cerebrasApiKey = opts.cerebrasApiKey.trim() || creds.cerebrasApiKey;
148
+ if (opts.grokApiKey)
149
+ creds.grokApiKey = opts.grokApiKey.trim() || creds.grokApiKey;
150
+ if (opts.exaApiKey)
151
+ creds.exaApiKey = opts.exaApiKey.trim() || creds.exaApiKey;
152
+ if (opts.voyageApiKey)
153
+ creds.voyageApiKey = opts.voyageApiKey.trim() || creds.voyageApiKey;
154
+ let changedByPrompt = false;
155
+ if (allowPrompt) {
156
+ const [updated, changed] = await promptForCredentials(creds, opts.configureKeys);
157
+ creds.openaiApiKey = updated.openaiApiKey;
158
+ creds.anthropicApiKey = updated.anthropicApiKey;
159
+ creds.openrouterApiKey = updated.openrouterApiKey;
160
+ creds.cerebrasApiKey = updated.cerebrasApiKey;
161
+ creds.grokApiKey = updated.grokApiKey;
162
+ creds.exaApiKey = updated.exaApiKey;
163
+ creds.voyageApiKey = updated.voyageApiKey;
164
+ changedByPrompt = changed;
165
+ }
166
+ else if (opts.configureKeys) {
167
+ console.log("Headless/non-interactive mode: skipping interactive key prompt.");
168
+ }
169
+ if (!creds.hasAny()) {
170
+ console.log("No API keys are configured. Set keys with --configure-keys, env vars, or .env files.");
171
+ }
172
+ if (changedByPrompt) {
173
+ userStore.save(creds);
174
+ }
175
+ if (stored.hasAny()) {
176
+ store.save(creds);
177
+ }
178
+ return creds;
179
+ }
180
+ // ---------------------------------------------------------------------------
181
+ // Runtime overrides
182
+ // ---------------------------------------------------------------------------
183
+ function _applyRuntimeOverrides(cfg, opts, creds) {
184
+ if (opts.maxDepth !== undefined)
185
+ cfg.maxDepth = opts.maxDepth;
186
+ if (opts.maxSteps !== undefined)
187
+ cfg.maxStepsPerCall = opts.maxSteps;
188
+ if (opts.timeout !== undefined)
189
+ cfg.commandTimeoutSec = opts.timeout;
190
+ if (opts.provider)
191
+ cfg.provider = opts.provider;
192
+ cfg.provider = _resolveProvider(cfg.provider, creds);
193
+ cfg.openaiApiKey = creds.openaiApiKey;
194
+ cfg.anthropicApiKey = creds.anthropicApiKey;
195
+ cfg.openrouterApiKey = creds.openrouterApiKey;
196
+ cfg.cerebrasApiKey = creds.cerebrasApiKey;
197
+ cfg.grokApiKey = creds.grokApiKey;
198
+ cfg.exaApiKey = creds.exaApiKey;
199
+ cfg.voyageApiKey = creds.voyageApiKey;
200
+ cfg.apiKey = cfg.openaiApiKey;
201
+ if (opts.baseUrl) {
202
+ if (cfg.provider === "openai")
203
+ cfg.openaiBaseUrl = opts.baseUrl;
204
+ else if (cfg.provider === "anthropic")
205
+ cfg.anthropicBaseUrl = opts.baseUrl;
206
+ else if (cfg.provider === "openrouter")
207
+ cfg.openrouterBaseUrl = opts.baseUrl;
208
+ else if (cfg.provider === "cerebras")
209
+ cfg.cerebrasBaseUrl = opts.baseUrl;
210
+ else if (cfg.provider === "grok")
211
+ cfg.grokBaseUrl = opts.baseUrl;
212
+ cfg.baseUrl = opts.baseUrl;
213
+ }
214
+ if (opts.model) {
215
+ cfg.model = MODEL_ALIASES[opts.model.toLowerCase()] ?? opts.model;
216
+ }
217
+ if (opts.reasoningEffort) {
218
+ cfg.reasoningEffort = opts.reasoningEffort === "none" ? null : opts.reasoningEffort;
219
+ }
220
+ if (opts.recursive)
221
+ cfg.recursive = true;
222
+ if (opts.acceptanceCriteria)
223
+ cfg.acceptanceCriteria = true;
224
+ if (opts.demo)
225
+ cfg.demo = true;
226
+ }
227
+ // ---------------------------------------------------------------------------
228
+ // Persistent settings
229
+ // ---------------------------------------------------------------------------
230
+ function _applyPersistentSettings(cfg, opts, store) {
231
+ let settings = store.load();
232
+ let changed = false;
233
+ if (opts.defaultModel !== undefined) {
234
+ settings.defaultModel = opts.defaultModel.trim() || null;
235
+ changed = true;
236
+ }
237
+ if (opts.defaultReasoningEffort !== undefined) {
238
+ settings.defaultReasoningEffort =
239
+ opts.defaultReasoningEffort === "none"
240
+ ? null
241
+ : normalizeReasoningEffort(opts.defaultReasoningEffort);
242
+ changed = true;
243
+ }
244
+ if (opts.defaultModelOpenai !== undefined) {
245
+ settings.defaultModelOpenai = opts.defaultModelOpenai.trim() || null;
246
+ changed = true;
247
+ }
248
+ if (opts.defaultModelAnthropic !== undefined) {
249
+ settings.defaultModelAnthropic = opts.defaultModelAnthropic.trim() || null;
250
+ changed = true;
251
+ }
252
+ if (opts.defaultModelOpenrouter !== undefined) {
253
+ settings.defaultModelOpenrouter = opts.defaultModelOpenrouter.trim() || null;
254
+ changed = true;
255
+ }
256
+ if (opts.defaultModelCerebras !== undefined) {
257
+ settings.defaultModelCerebras = opts.defaultModelCerebras.trim() || null;
258
+ changed = true;
259
+ }
260
+ if (opts.defaultModelGrok !== undefined) {
261
+ settings.defaultModelGrok = opts.defaultModelGrok.trim() || null;
262
+ changed = true;
263
+ }
264
+ if (changed) {
265
+ store.save(settings);
266
+ settings = settings.normalized();
267
+ console.log("Saved persistent defaults to .openplanter/settings.json");
268
+ }
269
+ if (!opts.model && !process.env["OPENPLANTER_MODEL"] && settings.defaultModel) {
270
+ cfg.model = settings.defaultModel;
271
+ }
272
+ if (!opts.reasoningEffort &&
273
+ !process.env["OPENPLANTER_REASONING_EFFORT"] &&
274
+ settings.defaultReasoningEffort) {
275
+ cfg.reasoningEffort = settings.defaultReasoningEffort;
276
+ }
277
+ return settings;
278
+ }
279
+ function _printSettings(settings) {
280
+ console.log("Persistent settings:");
281
+ console.log(` default_model: ${settings.defaultModel || "(unset)"}`);
282
+ console.log(` default_reasoning_effort: ${settings.defaultReasoningEffort || "(unset)"}`);
283
+ console.log(` default_model_openai: ${settings.defaultModelOpenai || "(unset)"}`);
284
+ console.log(` default_model_anthropic: ${settings.defaultModelAnthropic || "(unset)"}`);
285
+ console.log(` default_model_openrouter: ${settings.defaultModelOpenrouter || "(unset)"}`);
286
+ console.log(` default_model_cerebras: ${settings.defaultModelCerebras || "(unset)"}`);
287
+ console.log(` default_model_grok: ${settings.defaultModelGrok || "(unset)"}`);
288
+ }
289
+ // ---------------------------------------------------------------------------
290
+ // Plain REPL (no colors/spinner fallback)
291
+ // ---------------------------------------------------------------------------
292
+ async function runPlainRepl(ctx) {
293
+ const { DemoCensor } = await import("./demo.js");
294
+ const censorFn = ctx.cfg.demo ? new DemoCensor(ctx.cfg.workspace).censorText.bind(null) : null;
295
+ const _out = (text) => console.log(censorFn ? censorFn(text) : text);
296
+ _out("OpenPlanter Agent (plain mode). Type /quit to exit.");
297
+ const readline = await import("node:readline");
298
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
299
+ const ask = () => new Promise((resolve) => {
300
+ rl.question("you> ", (answer) => resolve(answer ?? null));
301
+ });
302
+ let running = true;
303
+ while (running) {
304
+ let objective;
305
+ try {
306
+ objective = await ask();
307
+ }
308
+ catch {
309
+ break;
310
+ }
311
+ if (objective === null)
312
+ break;
313
+ const trimmed = objective.trim();
314
+ if (!trimmed)
315
+ continue;
316
+ const result = await dispatchSlashCommand(trimmed, ctx, (line) => _out(`agent> ${line}`));
317
+ if (result === "quit") {
318
+ running = false;
319
+ break;
320
+ }
321
+ if (result === "clear" || result === "handled")
322
+ continue;
323
+ const response = await ctx.runtime.solve(trimmed, {
324
+ onEvent: (ev) => _out(`trace> ${_clip_event(ev)}`),
325
+ });
326
+ _out(`agent> ${response}`);
327
+ }
328
+ rl.close();
329
+ }
330
+ // ---------------------------------------------------------------------------
331
+ // CLI program
332
+ // ---------------------------------------------------------------------------
333
+ function _hasNonInteractiveCommand(opts) {
334
+ if (opts.task)
335
+ return true;
336
+ if (opts.listModels)
337
+ return true;
338
+ if (opts.listSessions)
339
+ return true;
340
+ if (opts.showSettings)
341
+ return true;
342
+ if (opts.configureKeys)
343
+ return true;
344
+ if (opts.defaultModel !== undefined)
345
+ return true;
346
+ if (opts.defaultReasoningEffort !== undefined)
347
+ return true;
348
+ if (opts.defaultModelOpenai !== undefined)
349
+ return true;
350
+ if (opts.defaultModelAnthropic !== undefined)
351
+ return true;
352
+ if (opts.defaultModelOpenrouter !== undefined)
353
+ return true;
354
+ if (opts.defaultModelCerebras !== undefined)
355
+ return true;
356
+ if (opts.defaultModelGrok !== undefined)
357
+ return true;
358
+ return false;
359
+ }
360
+ export async function main() {
361
+ const program = new Command()
362
+ .name("openplanter-agent")
363
+ .description("OpenPlanter coding agent with terminal UI.")
364
+ .option("--workspace <dir>", "Workspace root directory.", ".")
365
+ .addOption(new Option("--provider <name>", "Model provider.")
366
+ .choices(["auto", "openai", "anthropic", "openrouter", "cerebras", "grok", "all"]))
367
+ .option("--model <name>", "Model name.")
368
+ .addOption(new Option("--reasoning-effort <level>", "Per-run reasoning effort override.")
369
+ .choices(VALID_REASONING_FLAGS))
370
+ .option("--default-model <name>", "Persist workspace default model.")
371
+ .addOption(new Option("--default-reasoning-effort <level>", "Persist workspace default reasoning effort.")
372
+ .choices(VALID_REASONING_FLAGS))
373
+ .option("--default-model-openai <name>", "Persist default model for OpenAI provider.")
374
+ .option("--default-model-anthropic <name>", "Persist default model for Anthropic provider.")
375
+ .option("--default-model-openrouter <name>", "Persist default model for OpenRouter provider.")
376
+ .option("--default-model-cerebras <name>", "Persist default model for Cerebras provider.")
377
+ .option("--default-model-grok <name>", "Persist default model for Grok (xAI) provider.")
378
+ .option("--show-settings", "Show persistent workspace defaults and exit.", false)
379
+ .option("--base-url <url>", "Provider base URL override.")
380
+ .option("--api-key <key>", "Legacy API key alias (maps to OpenAI).")
381
+ .option("--openai-api-key <key>", "OpenAI API key override.")
382
+ .option("--anthropic-api-key <key>", "Anthropic API key override.")
383
+ .option("--openrouter-api-key <key>", "OpenRouter API key override.")
384
+ .option("--cerebras-api-key <key>", "Cerebras API key override.")
385
+ .option("--grok-api-key <key>", "Grok (xAI) API key override.")
386
+ .option("--exa-api-key <key>", "Exa API key override.")
387
+ .option("--voyage-api-key <key>", "Voyage API key override.")
388
+ .option("--configure-keys", "Prompt to set/update provider API keys.", false)
389
+ .option("--max-depth <n>", "Maximum recursion depth.", parseInt)
390
+ .option("--max-steps <n>", "Maximum steps per recursive call.", parseInt)
391
+ .option("--timeout <n>", "Shell command timeout seconds.", parseInt)
392
+ .option("--headless", "Disable interactive UI/prompts.", false)
393
+ .option("--no-tui", "Use plain REPL instead of Rich REPL.", false)
394
+ .option("--task <objective>", "Single objective to run and exit.")
395
+ .option("--session-id <id>", "Session id to use.")
396
+ .option("--resume", "Resume an existing session.", false)
397
+ .option("--list-sessions", "List known sessions and exit.", false)
398
+ .option("--list-models", "Fetch and list available provider models.", false)
399
+ .option("--recursive", "Enable recursive mode with subtask delegation.", false)
400
+ .option("--acceptance-criteria", "Enable acceptance criteria judging.", false)
401
+ .option("--demo", "Censor entity names in output.", false);
402
+ program.parse(process.argv);
403
+ const opts = program.opts();
404
+ const nonTty = !(process.stdin.isTTY && process.stdout.isTTY);
405
+ if (opts.headless || nonTty)
406
+ opts.noTui = true;
407
+ const cfg = agentConfigFromEnv(opts.workspace);
408
+ const settingsStore = new SettingsStore(cfg.workspace, cfg.sessionRootDir);
409
+ const settings = _applyPersistentSettings(cfg, opts, settingsStore);
410
+ if (opts.listSessions) {
411
+ const store = new SessionStore(cfg.workspace, cfg.sessionRootDir);
412
+ const sessions = store.listSessions(200);
413
+ if (sessions.length === 0) {
414
+ console.log("No sessions found.");
415
+ return;
416
+ }
417
+ for (const sess of sessions) {
418
+ console.log(`${sess.session_id} | created=${sess.created_at} | updated=${sess.updated_at}`);
419
+ }
420
+ return;
421
+ }
422
+ if (opts.showSettings) {
423
+ _printSettings(settings);
424
+ if (!opts.task && !opts.listModels)
425
+ return;
426
+ }
427
+ if ((opts.headless || nonTty) && !_hasNonInteractiveCommand(opts)) {
428
+ console.log("Headless/non-interactive mode requires --task or a non-interactive command.");
429
+ process.exit(2);
430
+ }
431
+ const creds = await _loadCredentials(cfg, opts, !(opts.headless || nonTty));
432
+ _applyRuntimeOverrides(cfg, opts, creds);
433
+ if (!cfg.model.trim()) {
434
+ const providerModel = settings.defaultModelForProvider(cfg.provider);
435
+ if (providerModel)
436
+ cfg.model = providerModel;
437
+ }
438
+ if (opts.configureKeys && !opts.task && !opts.listModels && !opts.showSettings) {
439
+ console.log("Credential configuration step complete.");
440
+ return;
441
+ }
442
+ if (opts.listModels) {
443
+ const requestedProvider = (opts.provider ?? "auto").trim().toLowerCase();
444
+ const rc = await _printModels(cfg, requestedProvider);
445
+ if (rc !== 0)
446
+ process.exit(rc);
447
+ return;
448
+ }
449
+ if (cfg.provider === "all") {
450
+ console.log("Provider 'all' is only valid with --list-models.");
451
+ process.exit(2);
452
+ }
453
+ const modelForCheck = (cfg.model || "").trim();
454
+ if (modelForCheck && cfg.provider !== "openrouter") {
455
+ const inferred = inferProviderForModel(modelForCheck);
456
+ if (inferred && inferred !== cfg.provider) {
457
+ const keyMap = {
458
+ openai: cfg.openaiApiKey,
459
+ anthropic: cfg.anthropicApiKey,
460
+ openrouter: cfg.openrouterApiKey,
461
+ cerebras: cfg.cerebrasApiKey,
462
+ grok: cfg.grokApiKey,
463
+ };
464
+ if (keyMap[inferred]) {
465
+ cfg.provider = inferred;
466
+ }
467
+ else {
468
+ console.log(`Model '${modelForCheck}' requires provider '${inferred}' ` +
469
+ `but no API key is configured for it.`);
470
+ process.exit(1);
471
+ }
472
+ }
473
+ }
474
+ const engine = buildEngine(cfg);
475
+ const modelName = getModelDisplayName(engine);
476
+ let runtime;
477
+ try {
478
+ runtime = SessionRuntime.bootstrap({
479
+ engine,
480
+ config: engine.config,
481
+ sessionId: opts.sessionId ?? null,
482
+ resume: opts.resume,
483
+ });
484
+ }
485
+ catch (exc) {
486
+ if (exc instanceof SessionError) {
487
+ console.log(`Session error: ${exc.message}`);
488
+ return;
489
+ }
490
+ throw exc;
491
+ }
492
+ const startupInfo = {
493
+ Provider: cfg.provider,
494
+ Model: modelName,
495
+ };
496
+ if (cfg.reasoningEffort)
497
+ startupInfo.Reasoning = cfg.reasoningEffort;
498
+ startupInfo.Mode = cfg.recursive ? "recursive" : "flat";
499
+ startupInfo.Workspace = cfg.workspace;
500
+ startupInfo.Session = runtime.sessionId;
501
+ const ctx = { runtime, cfg, settingsStore };
502
+ let censorFn = null;
503
+ if (cfg.demo) {
504
+ const { DemoCensor } = await import("./demo.js");
505
+ censorFn = new DemoCensor(cfg.workspace).censorText.bind(null);
506
+ }
507
+ const _printStartup = (info) => {
508
+ for (const [key, val] of Object.entries(info)) {
509
+ const line = `${key.padStart(10)} ${val}`;
510
+ console.log(censorFn ? censorFn(line) : line);
511
+ }
512
+ console.log();
513
+ };
514
+ if (opts.task) {
515
+ _printStartup(startupInfo);
516
+ const result = await runtime.solve(opts.task, {
517
+ onEvent: (ev) => {
518
+ const line = `trace> ${_clip_event(ev)}`;
519
+ console.log(censorFn ? censorFn(line) : line);
520
+ },
521
+ });
522
+ console.log(censorFn ? censorFn(result) : result);
523
+ return;
524
+ }
525
+ if (opts.noTui) {
526
+ if (!process.stdin.isTTY) {
527
+ console.log("No interactive stdin available; use --task for headless execution.");
528
+ process.exit(2);
529
+ }
530
+ _printStartup(startupInfo);
531
+ await runPlainRepl(ctx);
532
+ return;
533
+ }
534
+ await runRichRepl(ctx, startupInfo);
535
+ }
536
+ // Auto-run when executed directly
537
+ const isDirectRun = typeof process !== "undefined" &&
538
+ process.argv[1] &&
539
+ (process.argv[1].endsWith("/cli.js") ||
540
+ process.argv[1].endsWith("/cli.ts") ||
541
+ process.argv[1].endsWith("openplanter-agent"));
542
+ if (isDirectRun) {
543
+ main().catch((err) => {
544
+ console.error(err);
545
+ process.exit(1);
546
+ });
547
+ }
548
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Agent configuration – migrated from agent/config.py.
3
+ *
4
+ * Provides the AgentConfig interface and factory method for reading
5
+ * configuration from environment variables.
6
+ */
7
+ export declare const PROVIDER_DEFAULT_MODELS: Record<string, string>;
8
+ export interface AgentConfig {
9
+ workspace: string;
10
+ provider: string;
11
+ model: string;
12
+ reasoningEffort: string | null;
13
+ baseUrl: string;
14
+ apiKey: string | null;
15
+ openaiBaseUrl: string;
16
+ anthropicBaseUrl: string;
17
+ openrouterBaseUrl: string;
18
+ cerebrasBaseUrl: string;
19
+ grokBaseUrl: string;
20
+ exaBaseUrl: string;
21
+ openaiApiKey: string | null;
22
+ anthropicApiKey: string | null;
23
+ openrouterApiKey: string | null;
24
+ cerebrasApiKey: string | null;
25
+ grokApiKey: string | null;
26
+ exaApiKey: string | null;
27
+ voyageApiKey: string | null;
28
+ maxDepth: number;
29
+ maxStepsPerCall: number;
30
+ maxObservationChars: number;
31
+ commandTimeoutSec: number;
32
+ shell: string;
33
+ maxFilesListed: number;
34
+ maxFileChars: number;
35
+ maxSearchHits: number;
36
+ maxShellOutputChars: number;
37
+ sessionRootDir: string;
38
+ maxPersistedObservations: number;
39
+ maxSolveSeconds: number;
40
+ recursive: boolean;
41
+ minSubtaskDepth: number;
42
+ acceptanceCriteria: boolean;
43
+ maxPlanChars: number;
44
+ demo: boolean;
45
+ }
46
+ /**
47
+ * Build an AgentConfig from environment variables, mirroring the Python
48
+ * ``AgentConfig.from_env()`` classmethod.
49
+ */
50
+ export declare function agentConfigFromEnv(workspace: string): AgentConfig;
51
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM1D,CAAC;AAMF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAkBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAuIjE"}