@kernlang/agon 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LVW723TJ.js → chunk-52VTWOLH.js} +3 -3
- package/dist/{chunk-RSS3RL6Z.js → chunk-H7KZ34VX.js} +3 -3
- package/dist/{chunk-7PMMOQZ7.js → chunk-PFHGKBQT.js} +1063 -397
- package/dist/chunk-PFHGKBQT.js.map +1 -0
- package/dist/{chunk-HVJTVOXT.js → chunk-XOJPAFCJ.js} +61 -20
- package/dist/chunk-XOJPAFCJ.js.map +1 -0
- package/dist/engines/minimax-coding-plan-minimax-m3.json +27 -0
- package/dist/{forge-JWR2Z76K.js → forge-6NV4WCMB.js} +4 -4
- package/dist/index.js +230 -60
- package/dist/index.js.map +1 -1
- package/dist/{plan-mode-KBJY2FJN.js → plan-mode-OSU42TOI.js} +4 -4
- package/dist/{src-U2AWRNRL.js → src-4VOZ6GIN.js} +24 -2
- package/package.json +3 -3
- package/dist/chunk-7PMMOQZ7.js.map +0 -1
- package/dist/chunk-HVJTVOXT.js.map +0 -1
- /package/dist/{chunk-LVW723TJ.js.map → chunk-52VTWOLH.js.map} +0 -0
- /package/dist/{chunk-RSS3RL6Z.js.map → chunk-H7KZ34VX.js.map} +0 -0
- /package/dist/{forge-JWR2Z76K.js.map → forge-6NV4WCMB.js.map} +0 -0
- /package/dist/{plan-mode-KBJY2FJN.js.map → plan-mode-OSU42TOI.js.map} +0 -0
- /package/dist/{src-U2AWRNRL.js.map → src-4VOZ6GIN.js.map} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 3,
|
|
3
|
+
"id": "minimax-coding-plan-minimax-m3",
|
|
4
|
+
"displayName": "MiniMax Coding Plan (minimax.io) — MiniMax-M3",
|
|
5
|
+
"isLocal": false,
|
|
6
|
+
"tier": "builtin",
|
|
7
|
+
"timeout": 180,
|
|
8
|
+
|
|
9
|
+
"exec": {
|
|
10
|
+
"args": []
|
|
11
|
+
},
|
|
12
|
+
"review": {
|
|
13
|
+
"args": []
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
"api": {
|
|
17
|
+
"baseUrl": "https://api.minimax.io/v1",
|
|
18
|
+
"apiKeyEnv": "MINIMAX_API_KEY",
|
|
19
|
+
"model": "MiniMax-M3",
|
|
20
|
+
"maxTokens": 16384,
|
|
21
|
+
"format": "openai"
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
"env": {
|
|
25
|
+
"MINIMAX_API_KEY": { "required": true }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -12,9 +12,9 @@ import {
|
|
|
12
12
|
repairOverbroadForbiddenLiterals,
|
|
13
13
|
taskWantsRepositoryLinkCheck,
|
|
14
14
|
validateFitnessCommandIntent
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
15
|
+
} from "./chunk-H7KZ34VX.js";
|
|
16
|
+
import "./chunk-XOJPAFCJ.js";
|
|
17
|
+
import "./chunk-PFHGKBQT.js";
|
|
18
18
|
import "./chunk-5QMVQPHY.js";
|
|
19
19
|
export {
|
|
20
20
|
extractFitnessCommandFromCesarOutput,
|
|
@@ -30,4 +30,4 @@ export {
|
|
|
30
30
|
taskWantsRepositoryLinkCheck,
|
|
31
31
|
validateFitnessCommandIntent
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=forge-
|
|
33
|
+
//# sourceMappingURL=forge-6NV4WCMB.js.map
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
runAgentTeam,
|
|
14
14
|
runReviewCore,
|
|
15
15
|
selectReviewEngine
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-52VTWOLH.js";
|
|
17
17
|
import {
|
|
18
18
|
buildCheckpoint,
|
|
19
19
|
createScoreboard,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
scoreboardFailEngine,
|
|
28
28
|
scoreboardFinishEngine,
|
|
29
29
|
sessionResultStore
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-H7KZ34VX.js";
|
|
31
31
|
import {
|
|
32
32
|
ENGINE_COLORS,
|
|
33
33
|
bold,
|
|
@@ -97,7 +97,7 @@ import {
|
|
|
97
97
|
warn,
|
|
98
98
|
yellow,
|
|
99
99
|
yieldToInk
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-XOJPAFCJ.js";
|
|
101
101
|
import {
|
|
102
102
|
CommandRegistry,
|
|
103
103
|
DEFAULT_CONFIG,
|
|
@@ -165,6 +165,7 @@ import {
|
|
|
165
165
|
headSha,
|
|
166
166
|
hooksFailed,
|
|
167
167
|
initExtensions,
|
|
168
|
+
installKernStackTraceMapper,
|
|
168
169
|
listCesarPlans,
|
|
169
170
|
listChatSessions,
|
|
170
171
|
listPlans,
|
|
@@ -193,6 +194,7 @@ import {
|
|
|
193
194
|
readOnlyDiff,
|
|
194
195
|
registerBuiltinCommands,
|
|
195
196
|
rehydrateSessionWorktree,
|
|
197
|
+
removeAuthKey,
|
|
196
198
|
removeSessionWorktree,
|
|
197
199
|
removeWorkspace,
|
|
198
200
|
renderProvenanceJson,
|
|
@@ -227,7 +229,7 @@ import {
|
|
|
227
229
|
worktreeRemoveBestEffort,
|
|
228
230
|
writeProvenanceReport,
|
|
229
231
|
writeRunStatus
|
|
230
|
-
} from "./chunk-
|
|
232
|
+
} from "./chunk-PFHGKBQT.js";
|
|
231
233
|
import {
|
|
232
234
|
apiDispatch,
|
|
233
235
|
apiStreamDispatch
|
|
@@ -3590,12 +3592,12 @@ async function interactiveAdd() {
|
|
|
3590
3592
|
var providerCommand = defineCommand16({
|
|
3591
3593
|
meta: {
|
|
3592
3594
|
name: "provider",
|
|
3593
|
-
description: "Add, remove, or list API providers"
|
|
3595
|
+
description: "Add, remove, or list API providers; connect/disconnect and manage API keys"
|
|
3594
3596
|
},
|
|
3595
3597
|
args: {
|
|
3596
3598
|
action: {
|
|
3597
3599
|
type: "positional",
|
|
3598
|
-
description: "Action: add | remove | list | browse",
|
|
3600
|
+
description: "Action: add | remove | list | browse | login | logout | key",
|
|
3599
3601
|
required: true
|
|
3600
3602
|
}
|
|
3601
3603
|
},
|
|
@@ -3730,12 +3732,55 @@ var providerCommand = defineCommand16({
|
|
|
3730
3732
|
fail(`No stored credentials matching "${providerQuery}"`);
|
|
3731
3733
|
break;
|
|
3732
3734
|
}
|
|
3733
|
-
|
|
3734
|
-
removeKey(match.envVar);
|
|
3735
|
+
removeAuthKey(match.envVar);
|
|
3735
3736
|
delete process.env[match.envVar];
|
|
3736
3737
|
success(`Removed credentials for ${match.provider ?? match.envVar}`);
|
|
3737
3738
|
break;
|
|
3738
3739
|
}
|
|
3740
|
+
case "key": {
|
|
3741
|
+
loadAllAuthKeys();
|
|
3742
|
+
const sub = (extra[0] ?? "").toLowerCase();
|
|
3743
|
+
if (sub === "" || sub === "list") {
|
|
3744
|
+
const stored = listStoredProviders();
|
|
3745
|
+
header("Saved API keys");
|
|
3746
|
+
if (stored.length === 0) {
|
|
3747
|
+
info("No saved keys. Add one with: agon provider key set <ENV_VAR>");
|
|
3748
|
+
break;
|
|
3749
|
+
}
|
|
3750
|
+
table(["Env var", "Provider"], stored.map((s) => [green(s.envVar), s.provider ?? dim("\u2014")]));
|
|
3751
|
+
break;
|
|
3752
|
+
}
|
|
3753
|
+
const envVar = extra[1];
|
|
3754
|
+
if (!envVar || !/^[A-Za-z0-9_]+$/.test(envVar)) {
|
|
3755
|
+
fail("Usage: agon provider key set <ENV_VAR> | clear <ENV_VAR> | list");
|
|
3756
|
+
process.exit(1);
|
|
3757
|
+
}
|
|
3758
|
+
if (sub === "clear" || sub === "remove" || sub === "rm") {
|
|
3759
|
+
const inStore = listStoredProviders().some((s) => s.envVar === envVar);
|
|
3760
|
+
if (!inStore) {
|
|
3761
|
+
info(`${envVar} is not saved in the auth store${process.env[envVar] ? " (it is set via your shell environment \u2014 unset it there)." : "."}`);
|
|
3762
|
+
break;
|
|
3763
|
+
}
|
|
3764
|
+
removeAuthKey(envVar);
|
|
3765
|
+
delete process.env[envVar];
|
|
3766
|
+
success(`Cleared ${envVar} from ~/.agon/auth.json`);
|
|
3767
|
+
break;
|
|
3768
|
+
}
|
|
3769
|
+
if (sub === "set") {
|
|
3770
|
+
let value = extra.slice(2).join(" ");
|
|
3771
|
+
if (!value) value = await prompt(`Enter value for ${envVar}: `);
|
|
3772
|
+
if (!value) {
|
|
3773
|
+
fail("No value provided.");
|
|
3774
|
+
process.exit(1);
|
|
3775
|
+
}
|
|
3776
|
+
const existed = listStoredProviders().some((s) => s.envVar === envVar);
|
|
3777
|
+
setAuthKey(envVar, value, void 0);
|
|
3778
|
+
success(`${existed ? "Replaced" : "Saved"} ${envVar} in ~/.agon/auth.json`);
|
|
3779
|
+
break;
|
|
3780
|
+
}
|
|
3781
|
+
fail("Usage: agon provider key set <ENV_VAR> | clear <ENV_VAR> | list");
|
|
3782
|
+
process.exit(1);
|
|
3783
|
+
}
|
|
3739
3784
|
case "browse": {
|
|
3740
3785
|
header("Available Models \u2014 models.dev");
|
|
3741
3786
|
info("Fetching...");
|
|
@@ -3791,9 +3836,11 @@ var providerCommand = defineCommand16({
|
|
|
3791
3836
|
info("No providers connected yet.");
|
|
3792
3837
|
}
|
|
3793
3838
|
console.log("");
|
|
3794
|
-
info("agon provider add
|
|
3795
|
-
info("agon provider login
|
|
3796
|
-
info("agon provider logout
|
|
3839
|
+
info("agon provider add \u2014 add model from registry");
|
|
3840
|
+
info("agon provider login \u2014 connect a provider (set/overwrite its key)");
|
|
3841
|
+
info("agon provider logout \u2014 disconnect a provider (remove its key)");
|
|
3842
|
+
info("agon provider key set \u2014 set/replace a key: key set <ENV_VAR> <value>");
|
|
3843
|
+
info("agon provider key clear \u2014 remove a saved key: key clear <ENV_VAR>");
|
|
3797
3844
|
break;
|
|
3798
3845
|
}
|
|
3799
3846
|
}
|
|
@@ -6654,7 +6701,7 @@ import { Box as Box13, Static as Static2, Text as Text13, render } from "ink";
|
|
|
6654
6701
|
import { ScrollBox, AlternateScreen } from "@kernlang/terminal/runtime";
|
|
6655
6702
|
|
|
6656
6703
|
// src/generated/signals/intent.ts
|
|
6657
|
-
var SLASH_COMMANDS = [{ cmd: "/forge", desc: "<task> test with <cmd> [--hardened] \u2014 competitive code generation" }, { cmd: "/brainstorm", desc: "<question> \u2014 confidence-bidding answers" }, { cmd: "/tribunal", desc: "[mode] <question> \u2014 debate (adversarial|socratic|red-team|steelman|synthesis|postmortem)" }, { cmd: "/campfire", desc: "<topic> \u2014 think together, no competition" }, { cmd: "/think", desc: "<problem> [--strategy reflexion] [--steps 8] \u2014 sequential thinking, one engine" }, { cmd: "/council", desc: "<decision> \u2014 roundtable: every engine a role, top-rated chairs" }, { cmd: "/synthesis", desc: "<task> [--swaps 2] \u2014 engines draft, swap, improve; judge picks winner" }, { cmd: "/workspace", desc: "add|remove|list|switch \u2014 manage project repos" }, { cmd: "/ws", desc: " \u2014 list workspaces (shortcut)" }, { cmd: "/cesar", desc: "<engine> \u2014 set Cesar brain engine (e.g. /cesar codex)" }, { cmd: "/models", desc: " \u2014 browse & add provider models + CLI models" }, { cmd: "/tokens", desc: " \u2014 show token usage & costs" }, { cmd: "/engines", desc: " \u2014 select active engines" }, { cmd: "/leaderboard", desc: " \u2014 ELO rankings" }, { cmd: "/cesar-report", desc: " \u2014 Cesar routing calibration report" }, { cmd: "/cesar-hints", desc: "<task> \u2014 inspect Cesar routing hints for a prompt" }, { cmd: "/history", desc: "[id] \u2014 past forge runs" }, { cmd: "/config", desc: "[list|get|set] \u2014 settings" }, { cmd: "/plan", desc: "<task> or no args \u2014 plan mode or show plan" }, { cmd: "/auto", desc: "[on|off|toggle|status] or <task> \u2014 autonomous mode control" }, { cmd: "/plans", desc: " \u2014 list recent plans" }, { cmd: "/approve", desc: " \u2014 approve current plan" }, { cmd: "/retry", desc: " \u2014 retry failed plan step" }, { cmd: "/cancel", desc: " \u2014 cancel current plan" }, { cmd: "/apply", desc: "[path] [--force] \u2014 apply winning forge patch" }, { cmd: "/cp", desc: "[N] \u2014 copy code block N to clipboard" }, { cmd: "/img", desc: "<path> \u2014 attach image to next prompt" }, { cmd: "/flow", desc: " \u2014 log this session" }, { cmd: "/flows", desc: " \u2014 flow analytics dashboard" }, { cmd: "/chats", desc: "[id|resume <id>] \u2014 chat history or resume session" }, { cmd: "/build", desc: "<task> \u2014 agent builds in cwd (reads/edits/tests)" }, { cmd: "/goal", desc: '<intent> --queue <dir> --gate "<cmd>" [--push] \u2014 autonomous queue: build\u2192review(all)\u2192judge\u2192fix\u2192commit\u2192push per task (background job)' }, { cmd: "/conquer", desc: '<task> --gate "<cmd>" [--builder X] [-e a,b] \u2014 supervised-autonomous build: Cesar drives a builder CLI, convenes nero/tribunal/council on forks, stops at a human merge gate (background job)' }, { cmd: "/agent", desc: "<task> \u2014 autonomous agent loop (solo or shadow, auto-routed)" }, { cmd: "/agent-solo", desc: "<task> \u2014 force solo agent mode, no shadow worker" }, { cmd: "/speculate", desc: "<task> \u2014 parallel speculation: N engines race in worktrees, winner applied" }, { cmd: "/team-forge", desc: "[2v2|3v3] <task> test with <cmd> \u2014 team code competition" }, { cmd: "/team-tribunal", desc: "[2v2|3v3] [mode] <question> \u2014 team debate" }, { cmd: "/team-brainstorm", desc: "[2v2|3v3] <question> \u2014 team ideation" }, { cmd: "/pipeline", desc: "<task> [test with <cmd>] \u2014 build\u2192review\u2192fix loop" }, { cmd: "/review", desc: "[with <engine>] [<target>] \u2014 code review (uncommitted|branch:NAME|commit:SHA)" }, { cmd: "/provider", desc: "add|remove|list
|
|
6704
|
+
var SLASH_COMMANDS = [{ cmd: "/forge", desc: "<task> test with <cmd> [--hardened] \u2014 competitive code generation" }, { cmd: "/brainstorm", desc: "<question> \u2014 confidence-bidding answers" }, { cmd: "/tribunal", desc: "[mode] <question> \u2014 debate (adversarial|socratic|red-team|steelman|synthesis|postmortem)" }, { cmd: "/campfire", desc: "<topic> \u2014 think together, no competition" }, { cmd: "/think", desc: "<problem> [--strategy reflexion] [--steps 8] \u2014 sequential thinking, one engine" }, { cmd: "/council", desc: "<decision> \u2014 roundtable: every engine a role, top-rated chairs" }, { cmd: "/synthesis", desc: "<task> [--swaps 2] \u2014 engines draft, swap, improve; judge picks winner" }, { cmd: "/workspace", desc: "add|remove|list|switch \u2014 manage project repos" }, { cmd: "/ws", desc: " \u2014 list workspaces (shortcut)" }, { cmd: "/cesar", desc: "<engine> \u2014 set Cesar brain engine (e.g. /cesar codex)" }, { cmd: "/models", desc: " \u2014 browse & add provider models + CLI models" }, { cmd: "/tokens", desc: " \u2014 show token usage & costs" }, { cmd: "/engines", desc: " \u2014 select active engines" }, { cmd: "/leaderboard", desc: " \u2014 ELO rankings" }, { cmd: "/cesar-report", desc: " \u2014 Cesar routing calibration report" }, { cmd: "/cesar-hints", desc: "<task> \u2014 inspect Cesar routing hints for a prompt" }, { cmd: "/history", desc: "[id] \u2014 past forge runs" }, { cmd: "/config", desc: "[list|get|set] \u2014 settings" }, { cmd: "/plan", desc: "<task> or no args \u2014 plan mode or show plan" }, { cmd: "/auto", desc: "[on|off|toggle|status] or <task> \u2014 autonomous mode control" }, { cmd: "/plans", desc: " \u2014 list recent plans" }, { cmd: "/approve", desc: " \u2014 approve current plan" }, { cmd: "/retry", desc: " \u2014 retry failed plan step" }, { cmd: "/cancel", desc: " \u2014 cancel current plan" }, { cmd: "/apply", desc: "[path] [--force] \u2014 apply winning forge patch" }, { cmd: "/cp", desc: "[N] \u2014 copy code block N to clipboard" }, { cmd: "/img", desc: "<path> \u2014 attach image to next prompt" }, { cmd: "/flow", desc: " \u2014 log this session" }, { cmd: "/flows", desc: " \u2014 flow analytics dashboard" }, { cmd: "/chats", desc: "[id|resume <id>] \u2014 chat history or resume session" }, { cmd: "/build", desc: "<task> \u2014 agent builds in cwd (reads/edits/tests)" }, { cmd: "/goal", desc: '<intent> --queue <dir> --gate "<cmd>" [--push] \u2014 autonomous queue: build\u2192review(all)\u2192judge\u2192fix\u2192commit\u2192push per task (background job)' }, { cmd: "/conquer", desc: '<task> --gate "<cmd>" [--builder X] [-e a,b] \u2014 supervised-autonomous build: Cesar drives a builder CLI, convenes nero/tribunal/council on forks, stops at a human merge gate (background job)' }, { cmd: "/agent", desc: "<task> \u2014 autonomous agent loop (solo or shadow, auto-routed)" }, { cmd: "/agent-solo", desc: "<task> \u2014 force solo agent mode, no shadow worker" }, { cmd: "/speculate", desc: "<task> \u2014 parallel speculation: N engines race in worktrees, winner applied" }, { cmd: "/team-forge", desc: "[2v2|3v3] <task> test with <cmd> \u2014 team code competition" }, { cmd: "/team-tribunal", desc: "[2v2|3v3] [mode] <question> \u2014 team debate" }, { cmd: "/team-brainstorm", desc: "[2v2|3v3] <question> \u2014 team ideation" }, { cmd: "/pipeline", desc: "<task> [test with <cmd>] \u2014 build\u2192review\u2192fix loop" }, { cmd: "/review", desc: "[with <engine>] [<target>] \u2014 code review (uncommitted|branch:NAME|commit:SHA)" }, { cmd: "/provider", desc: "add|remove|list|key \u2014 providers & keys (key set/clear/list)" }, { cmd: "/run", desc: "<cmd> \u2014 run shell command inline" }, { cmd: "/commit", desc: "[message] \u2014 stage & commit with auto-generated message" }, { cmd: "/status", desc: " \u2014 live engine telemetry snapshot" }, { cmd: "/doctor", desc: "[engines|harness] \u2014 diagnose engines, worktree, or Cesar harness" }, { cmd: "/harness-replay", desc: "[turnId] \u2014 replay Cesar tool timeline + approval ledger" }, { cmd: "/undo", desc: " \u2014 revert last patch or Cesar checkpoint" }, { cmd: "/checkpoints", desc: " \u2014 list recent file checkpoints" }, { cmd: "/jobs", desc: " \u2014 list running/completed jobs" }, { cmd: "/focus", desc: "<id> \u2014 switch to background job output" }, { cmd: "/explore", desc: " \u2014 toggle exploration mode (read-only)" }, { cmd: "/nero", desc: "[<decision>] \u2014 toggle Nero mode, or challenge a decision (top-rated critic)" }, { cmd: "/btw", desc: "<question> \u2014 ask something while engines work (side-channel)" }, { cmd: "/mcp", desc: "connect <name|url> | disconnect <name> | list \u2014 manage session MCP servers" }, { cmd: "/init", desc: " \u2014 create AGON.md config wizard" }, { cmd: "/create-skill", desc: "<name> \u2014 scaffold a new skill (.agon/skills/)" }, { cmd: "/clear", desc: " \u2014 reset session (saves chat, clears brain)" }, { cmd: "/clean", desc: " \u2014 alias for /clear" }, { cmd: "/extensions", desc: " \u2014 list installed extensions" }, { cmd: "/help", desc: " \u2014 show this help" }, { cmd: "/exit", desc: " \u2014 quit" }];
|
|
6658
6705
|
var FITNESS_PATTERN = /\b(?:test with|test:|--test|fitness:)\s+(.+)/i;
|
|
6659
6706
|
var LEADERBOARD_KEYWORDS = /\b(leaderboard|elo|rankings?)\b/i;
|
|
6660
6707
|
var HISTORY_KEYWORDS = /\b(history|last runs?|recent)\b/i;
|
|
@@ -9329,7 +9376,7 @@ async function handlePlanShow(dispatch, ctx, planId) {
|
|
|
9329
9376
|
savePlan(approved);
|
|
9330
9377
|
dispatch({ type: "success", message: "Plan approved." });
|
|
9331
9378
|
if (approved.action.type === "forge") {
|
|
9332
|
-
const { handleForge: handleForge2 } = await import("./forge-
|
|
9379
|
+
const { handleForge: handleForge2 } = await import("./forge-6NV4WCMB.js");
|
|
9333
9380
|
await handleForge2(approved.action.task, approved.action.fitnessCmd ?? null, dispatch, ctx, approved, approved.action.hardened);
|
|
9334
9381
|
} else {
|
|
9335
9382
|
dispatch({ type: "info", message: "Run the build again to execute." });
|
|
@@ -9355,7 +9402,7 @@ async function handleApprove(dispatch, ctx) {
|
|
|
9355
9402
|
savePlan(plan);
|
|
9356
9403
|
dispatch({ type: "success", message: "Plan approved." });
|
|
9357
9404
|
if (plan.action.type === "forge") {
|
|
9358
|
-
const { handleForge: handleForge2 } = await import("./forge-
|
|
9405
|
+
const { handleForge: handleForge2 } = await import("./forge-6NV4WCMB.js");
|
|
9359
9406
|
await handleForge2(plan.action.task, plan.action.fitnessCmd ?? null, dispatch, ctx, plan, plan.action.hardened);
|
|
9360
9407
|
} else {
|
|
9361
9408
|
dispatch({ type: "info", message: "Run the build again to execute." });
|
|
@@ -9383,7 +9430,7 @@ async function handleRetry(dispatch, ctx) {
|
|
|
9383
9430
|
plan = startPlan(plan);
|
|
9384
9431
|
ctx.setCurrentPlan(plan);
|
|
9385
9432
|
savePlan(plan);
|
|
9386
|
-
const { handleForge: handleForge2 } = await import("./forge-
|
|
9433
|
+
const { handleForge: handleForge2 } = await import("./forge-6NV4WCMB.js");
|
|
9387
9434
|
await handleForge2(plan.action.task, plan.action.fitnessCmd ?? null, dispatch, ctx, plan, plan.action.hardened);
|
|
9388
9435
|
} else {
|
|
9389
9436
|
dispatch({ type: "info", message: "Plan reset to approved. Run the build again to execute." });
|
|
@@ -12090,6 +12137,34 @@ Summarize what the pipeline produced and take the next concrete step.` : `Pipeli
|
|
|
12090
12137
|
}, cb.ctx));
|
|
12091
12138
|
return true;
|
|
12092
12139
|
}
|
|
12140
|
+
case "conquer": {
|
|
12141
|
+
const _cqTask = (result.task ?? "").trim();
|
|
12142
|
+
if (!_cqTask) {
|
|
12143
|
+
cb.dispatch({ type: "warning", message: "Conquer: missing task \u2014 nothing to run." });
|
|
12144
|
+
return false;
|
|
12145
|
+
}
|
|
12146
|
+
const _cqGate = typeof result.gate === "string" ? result.gate.trim() : "";
|
|
12147
|
+
if (!_cqGate) {
|
|
12148
|
+
cb.dispatch({ type: "warning", message: "Conquer: missing --gate (the done-spec). Tell Cesar the test/verify command that proves the build is done." });
|
|
12149
|
+
return false;
|
|
12150
|
+
}
|
|
12151
|
+
const _cqBuilder = typeof result.builder === "string" ? result.builder.trim() : "";
|
|
12152
|
+
const _cqArgs = ["conquer", _cqTask, "--gate", _cqGate];
|
|
12153
|
+
if (_cqBuilder) _cqArgs.push("--builder", _cqBuilder);
|
|
12154
|
+
if (Array.isArray(result.engines) && result.engines.length > 0) _cqArgs.push("-e", result.engines.join(","));
|
|
12155
|
+
if (typeof result.maxTurns === "number" && result.maxTurns > 0) _cqArgs.push("--max-turns", String(result.maxTurns));
|
|
12156
|
+
const _cqCmd = `agon ${_cqArgs.map((part) => JSON.stringify(part)).join(" ")}`;
|
|
12157
|
+
const _cqCwd = resolveWorkingDir();
|
|
12158
|
+
cb.dispatch({ type: "info", message: "Cesar \u2192 conquer" });
|
|
12159
|
+
cb.runAsJob("conquer", label, withThreadOutcome(_cqCwd, "conquer", label, async () => {
|
|
12160
|
+
cb.dispatch({ type: "info", message: `conquer: launched in the background \u2014 \`${_cqCmd}\`. Track with /jobs or /focus. Stops at a human merge gate \u2014 nothing auto-merges.` });
|
|
12161
|
+
const res = await spawnWithTimeout({ command: "agon", args: _cqArgs, cwd: _cqCwd, timeout: 24 * 60 * 60 * 1e3 });
|
|
12162
|
+
const tail = (res.stdout || "").slice(-4e3);
|
|
12163
|
+
if (tail.trim()) cb.dispatch({ type: "text", content: tail });
|
|
12164
|
+
if (res.exitCode !== 0) throw new Error((res.stderr || `agon conquer exited ${res.exitCode}`).slice(-1e3));
|
|
12165
|
+
}, cb.ctx));
|
|
12166
|
+
return true;
|
|
12167
|
+
}
|
|
12093
12168
|
case "review":
|
|
12094
12169
|
cb.dispatch({ type: "info", message: `Cesar \u2192 review${hardened ? " (hardened)" : ""}` });
|
|
12095
12170
|
{
|
|
@@ -12328,7 +12403,7 @@ async function runCesarBrainFallback(input, cb, crashDel, priorDeterministic) {
|
|
|
12328
12403
|
const cesarEngine = cesarEngineDef ?? cb.ctx.registry.get(cesarId);
|
|
12329
12404
|
const { join: join47 } = await import("path");
|
|
12330
12405
|
const { mkdirSync: mkdirSync29 } = await import("fs");
|
|
12331
|
-
const { resolveWorkingDir: resolveWorkingDir3, RUNS_DIR: RUNS_DIR3, appendMessage: appendMessage3 } = await import("./src-
|
|
12406
|
+
const { resolveWorkingDir: resolveWorkingDir3, RUNS_DIR: RUNS_DIR3, appendMessage: appendMessage3 } = await import("./src-4VOZ6GIN.js");
|
|
12332
12407
|
const outDir = join47(RUNS_DIR3, `cesar-fallback-${Date.now()}`);
|
|
12333
12408
|
mkdirSync29(outDir, { recursive: true });
|
|
12334
12409
|
if (!_silentMode) cb.dispatch({ type: "warning", message: formatCesarRecoveryStatus("retry", cesarId, `log: ${outDir}`) });
|
|
@@ -12509,7 +12584,7 @@ ${historyContext}
|
|
|
12509
12584
|
` : ""}## USER MESSAGE
|
|
12510
12585
|
${input}`;
|
|
12511
12586
|
try {
|
|
12512
|
-
const { resolveWorkingDir: resolveWorkingDir3, RUNS_DIR: RUNS_DIR3, appendMessage: appendMessage3 } = await import("./src-
|
|
12587
|
+
const { resolveWorkingDir: resolveWorkingDir3, RUNS_DIR: RUNS_DIR3, appendMessage: appendMessage3 } = await import("./src-4VOZ6GIN.js");
|
|
12513
12588
|
const { join: join47 } = await import("path");
|
|
12514
12589
|
const { mkdirSync: mkdirSync29 } = await import("fs");
|
|
12515
12590
|
const actingEngine = cb.ctx.registry.get(actingCesar);
|
|
@@ -13069,6 +13144,14 @@ import "path";
|
|
|
13069
13144
|
import { writeFileSync as writeFileSync9, mkdirSync as mkdirSync24, unlinkSync as unlinkSync3, readdirSync as readdirSync6, readFileSync as readFileSync11, existsSync as existsSync12 } from "fs";
|
|
13070
13145
|
import { join as join38, resolve as resolve3 } from "path";
|
|
13071
13146
|
import { homedir as homedir5 } from "os";
|
|
13147
|
+
function parseProviderKeyArgs(args) {
|
|
13148
|
+
const parts = String(args ?? "").trim().split(/\s+/).filter(Boolean);
|
|
13149
|
+
const sub = (parts[0] ?? "").toLowerCase();
|
|
13150
|
+
if (sub === "" || sub === "list") return { sub: "list" };
|
|
13151
|
+
if (sub === "set") return { sub: "set", envVar: parts[1], value: parts.slice(2).join(" ") || void 0 };
|
|
13152
|
+
if (sub === "clear" || sub === "remove" || sub === "rm") return { sub: "clear", envVar: parts[1] };
|
|
13153
|
+
return { sub: "help" };
|
|
13154
|
+
}
|
|
13072
13155
|
function enginesDir2() {
|
|
13073
13156
|
const override = process.env.AGON_HOME?.trim();
|
|
13074
13157
|
const home = override ? resolve3(override) : join38(homedir5(), ".agon");
|
|
@@ -13158,6 +13241,47 @@ function handleProviderList(dispatch) {
|
|
|
13158
13241
|
}
|
|
13159
13242
|
dispatch({ type: "info", message: "Add: /provider add <id> <baseUrl> <API_KEY_ENV> <model>" });
|
|
13160
13243
|
}
|
|
13244
|
+
function handleProviderKey(args, dispatch) {
|
|
13245
|
+
const cmd = parseProviderKeyArgs(args);
|
|
13246
|
+
if (cmd.sub === "help") {
|
|
13247
|
+
dispatch({ type: "info", message: "Usage: /provider key set <ENV_VAR> <value> | clear <ENV_VAR> | list" });
|
|
13248
|
+
dispatch({ type: "info", message: "Change a key: /provider key set MINIMAX_API_KEY <new-value>" });
|
|
13249
|
+
return;
|
|
13250
|
+
}
|
|
13251
|
+
if (cmd.sub === "list") {
|
|
13252
|
+
const stored = listStoredProviders();
|
|
13253
|
+
if (!stored.length) {
|
|
13254
|
+
dispatch({ type: "info", message: "No saved keys. Add one with /provider key set <ENV_VAR> <value>" });
|
|
13255
|
+
return;
|
|
13256
|
+
}
|
|
13257
|
+
dispatch({ type: "header", title: "Saved API keys" });
|
|
13258
|
+
dispatch({ type: "table", headers: ["Env var", "Provider"], rows: stored.map((s) => [s.envVar, s.provider ?? "\u2014"]) });
|
|
13259
|
+
return;
|
|
13260
|
+
}
|
|
13261
|
+
const envVar = cmd.envVar;
|
|
13262
|
+
if (!envVar || !/^[A-Za-z0-9_]+$/.test(envVar)) {
|
|
13263
|
+
dispatch({ type: "error", message: `Invalid env var name${envVar ? `: ${envVar}` : ""}. Example: MINIMAX_API_KEY` });
|
|
13264
|
+
return;
|
|
13265
|
+
}
|
|
13266
|
+
if (cmd.sub === "clear") {
|
|
13267
|
+
const inStore = listStoredProviders().some((s) => s.envVar === envVar);
|
|
13268
|
+
if (!inStore) {
|
|
13269
|
+
dispatch({ type: "info", message: `${envVar} is not saved in the auth store${process.env[envVar] ? " (it is set via your shell environment)." : "."}` });
|
|
13270
|
+
return;
|
|
13271
|
+
}
|
|
13272
|
+
removeAuthKey(envVar);
|
|
13273
|
+
delete process.env[envVar];
|
|
13274
|
+
dispatch({ type: "success", message: `Cleared ${envVar} from the auth store.` });
|
|
13275
|
+
return;
|
|
13276
|
+
}
|
|
13277
|
+
if (!cmd.value) {
|
|
13278
|
+
dispatch({ type: "error", message: `Usage: /provider key set ${envVar} <value>` });
|
|
13279
|
+
return;
|
|
13280
|
+
}
|
|
13281
|
+
const existed = listStoredProviders().some((s) => s.envVar === envVar);
|
|
13282
|
+
setAuthKey(envVar, cmd.value, void 0);
|
|
13283
|
+
dispatch({ type: "success", message: `${existed ? "Replaced" : "Saved"} ${envVar} in the auth store.` });
|
|
13284
|
+
}
|
|
13161
13285
|
async function handleProvider(action, args, dispatch, ctx) {
|
|
13162
13286
|
switch (action) {
|
|
13163
13287
|
case "add":
|
|
@@ -13165,6 +13289,9 @@ async function handleProvider(action, args, dispatch, ctx) {
|
|
|
13165
13289
|
case "remove":
|
|
13166
13290
|
handleProviderRemove(dispatch, ctx, args.trim());
|
|
13167
13291
|
return;
|
|
13292
|
+
case "key":
|
|
13293
|
+
handleProviderKey(args, dispatch);
|
|
13294
|
+
return;
|
|
13168
13295
|
case "list":
|
|
13169
13296
|
default:
|
|
13170
13297
|
handleProviderList(dispatch);
|
|
@@ -13389,7 +13516,7 @@ async function dispatchSessionInfoIntent(intent, input, cb) {
|
|
|
13389
13516
|
cb.setModelPickerTitle?.("Select model");
|
|
13390
13517
|
cb.setModelPickerLoading(true);
|
|
13391
13518
|
cb.setModelPickerOpen(true);
|
|
13392
|
-
import("./src-
|
|
13519
|
+
import("./src-4VOZ6GIN.js").then(({ fetchModelsRegistry: fetchModelsRegistry2, buildModelEntries: buildModelEntries2, buildCliGroupsImmediate, refreshCliGroup, refreshCliGroupVersion }) => {
|
|
13393
13520
|
let cliGroups = buildCliGroupsImmediate();
|
|
13394
13521
|
cb.setModelPickerCliGroups?.(cliGroups);
|
|
13395
13522
|
for (const g of cliGroups) {
|
|
@@ -13407,6 +13534,15 @@ async function dispatchSessionInfoIntent(intent, input, cb) {
|
|
|
13407
13534
|
cb.setModelPickerCliGroups?.([...cliGroups]);
|
|
13408
13535
|
}).catch(clearLoading);
|
|
13409
13536
|
}
|
|
13537
|
+
for (const g of cliGroups) {
|
|
13538
|
+
if (!g.installed || g.loading || g.version) continue;
|
|
13539
|
+
refreshCliGroupVersion(g.engineId).then((v) => {
|
|
13540
|
+
if (!v) return;
|
|
13541
|
+
cliGroups = cliGroups.map((x) => x.engineId === g.engineId ? { ...x, version: v } : x);
|
|
13542
|
+
cb.setModelPickerCliGroups?.([...cliGroups]);
|
|
13543
|
+
}).catch(() => {
|
|
13544
|
+
});
|
|
13545
|
+
}
|
|
13410
13546
|
fetchModelsRegistry2().then((reg) => {
|
|
13411
13547
|
cb.setModelPickerEntries(buildModelEntries2(reg));
|
|
13412
13548
|
cb.setModelPickerLoading(false);
|
|
@@ -13438,7 +13574,7 @@ async function dispatchSessionInfoIntent(intent, input, cb) {
|
|
|
13438
13574
|
await handlePlanShow(cb.dispatch, cb.ctx, intent.planId);
|
|
13439
13575
|
break;
|
|
13440
13576
|
case "plan-task": {
|
|
13441
|
-
const { createCesarPlan } = await import("./src-
|
|
13577
|
+
const { createCesarPlan } = await import("./src-4VOZ6GIN.js");
|
|
13442
13578
|
const cesarPlan = createCesarPlan(intent.task, []);
|
|
13443
13579
|
cb.setActivePlan(cesarPlan);
|
|
13444
13580
|
if (!cb.ctx.cesar) {
|
|
@@ -15822,18 +15958,12 @@ var PlanProposalView = React3.memo(function PlanProposalView2({ plan, markdown,
|
|
|
15822
15958
|
/* @__PURE__ */ jsx3(RenderedSegments, { segments, borderColor: "", wrapWidth }),
|
|
15823
15959
|
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: thinBar }),
|
|
15824
15960
|
committed ? /* @__PURE__ */ jsx3(Text3, { dimColor: true, children: "Plan moved to history." }) : /* @__PURE__ */ jsxs3(Box3, { children: [
|
|
15825
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#fbbf24", bold: true, children: "Awaiting approval
|
|
15826
|
-
/* @__PURE__ */ jsx3(Text3, {
|
|
15827
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80",
|
|
15828
|
-
/* @__PURE__ */ jsx3(Text3, {
|
|
15829
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#ef4444",
|
|
15830
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: " to
|
|
15831
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80", bold: true, children: "go" }),
|
|
15832
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: " / " }),
|
|
15833
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80", bold: true, children: "/approve" }),
|
|
15834
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: " / " }),
|
|
15835
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#ef4444", bold: true, children: "/cancel" }),
|
|
15836
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: ")." })
|
|
15961
|
+
/* @__PURE__ */ jsx3(Text3, { color: "#fbbf24", bold: true, children: "Awaiting approval " }),
|
|
15962
|
+
/* @__PURE__ */ jsx3(Text3, { backgroundColor: "#166534", color: "#ffffff", bold: true, children: " Y " }),
|
|
15963
|
+
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80", children: " Approve & run " }),
|
|
15964
|
+
/* @__PURE__ */ jsx3(Text3, { backgroundColor: "#7f1d1d", color: "#ffffff", bold: true, children: " N " }),
|
|
15965
|
+
/* @__PURE__ */ jsx3(Text3, { color: "#ef4444", children: " Reject " }),
|
|
15966
|
+
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: "\u270E type to change it \xB7 /approve \xB7 /cancel" })
|
|
15837
15967
|
] })
|
|
15838
15968
|
] });
|
|
15839
15969
|
}
|
|
@@ -15934,16 +16064,12 @@ var PlanProposalView = React3.memo(function PlanProposalView2({ plan, markdown,
|
|
|
15934
16064
|
}),
|
|
15935
16065
|
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: thinBar }),
|
|
15936
16066
|
committed ? /* @__PURE__ */ jsx3(Text3, { dimColor: true, children: "Plan moved to history." }) : /* @__PURE__ */ jsxs3(Box3, { children: [
|
|
15937
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#fbbf24", bold: true, children: "Awaiting approval
|
|
15938
|
-
/* @__PURE__ */ jsx3(Text3, {
|
|
15939
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80",
|
|
15940
|
-
/* @__PURE__ */ jsx3(Text3, {
|
|
15941
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#
|
|
15942
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: "
|
|
15943
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80", bold: true, children: "/approve" }),
|
|
15944
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: " to execute. Type " }),
|
|
15945
|
-
/* @__PURE__ */ jsx3(Text3, { color: "#ef4444", bold: true, children: "/cancel" }),
|
|
15946
|
-
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: " to reject." })
|
|
16067
|
+
/* @__PURE__ */ jsx3(Text3, { color: "#fbbf24", bold: true, children: "Awaiting approval " }),
|
|
16068
|
+
/* @__PURE__ */ jsx3(Text3, { backgroundColor: "#166534", color: "#ffffff", bold: true, children: " Y " }),
|
|
16069
|
+
/* @__PURE__ */ jsx3(Text3, { color: "#4ade80", children: " Approve & run " }),
|
|
16070
|
+
/* @__PURE__ */ jsx3(Text3, { backgroundColor: "#7f1d1d", color: "#ffffff", bold: true, children: " N " }),
|
|
16071
|
+
/* @__PURE__ */ jsx3(Text3, { color: "#ef4444", children: " Reject " }),
|
|
16072
|
+
/* @__PURE__ */ jsx3(Text3, { dimColor: true, children: "\u270E type to change it \xB7 /approve \xB7 /cancel" })
|
|
15947
16073
|
] })
|
|
15948
16074
|
] });
|
|
15949
16075
|
});
|
|
@@ -17419,7 +17545,7 @@ function resolvePackageVersion(resolveSpecifier, wantName, fallback) {
|
|
|
17419
17545
|
}
|
|
17420
17546
|
return fallback;
|
|
17421
17547
|
}
|
|
17422
|
-
var VERSION = resolvePackageVersion(null, "@kernlang/agon", "0.1.
|
|
17548
|
+
var VERSION = resolvePackageVersion(null, "@kernlang/agon", "0.1.3");
|
|
17423
17549
|
var KERN_VERSION = resolvePackageVersion("@kernlang/terminal/runtime", "@kernlang/terminal", "3.5.7");
|
|
17424
17550
|
|
|
17425
17551
|
// src/generated/blocks/todo-list.tsx
|
|
@@ -23808,7 +23934,7 @@ function App() {
|
|
|
23808
23934
|
setEnginePickerOpen(false);
|
|
23809
23935
|
setModelPickerOpen(true);
|
|
23810
23936
|
setModelPickerCliGroups([]);
|
|
23811
|
-
import("./src-
|
|
23937
|
+
import("./src-4VOZ6GIN.js").then(({ fetchModelsRegistry: fetchModelsRegistry2, buildModelEntries: buildModelEntries2, buildCliGroupsImmediate, refreshCliGroup, refreshCliGroupVersion }) => {
|
|
23812
23938
|
let cliGroups = buildCliGroupsImmediate();
|
|
23813
23939
|
setModelPickerCliGroups(cliGroups);
|
|
23814
23940
|
for (const g of cliGroups) {
|
|
@@ -23826,6 +23952,15 @@ function App() {
|
|
|
23826
23952
|
setModelPickerCliGroups([...cliGroups]);
|
|
23827
23953
|
}).catch(clearLoading);
|
|
23828
23954
|
}
|
|
23955
|
+
for (const g of cliGroups) {
|
|
23956
|
+
if (!g.installed || g.loading || g.version) continue;
|
|
23957
|
+
refreshCliGroupVersion(g.engineId).then((v) => {
|
|
23958
|
+
if (!v) return;
|
|
23959
|
+
cliGroups = cliGroups.map((x) => x.engineId === g.engineId ? { ...x, version: v } : x);
|
|
23960
|
+
setModelPickerCliGroups([...cliGroups]);
|
|
23961
|
+
}).catch(() => {
|
|
23962
|
+
});
|
|
23963
|
+
}
|
|
23829
23964
|
fetchModelsRegistry2().then((reg) => {
|
|
23830
23965
|
setModelPickerEntries(buildModelEntries2(reg));
|
|
23831
23966
|
setModelPickerLoading(false);
|
|
@@ -24691,6 +24826,11 @@ function App() {
|
|
|
24691
24826
|
},
|
|
24692
24827
|
onCancel: () => setEnginePickerOpen(false),
|
|
24693
24828
|
onRemove: (engineId) => {
|
|
24829
|
+
let _keyEnv;
|
|
24830
|
+
try {
|
|
24831
|
+
_keyEnv = registry.get(engineId)?.api?.apiKeyEnv;
|
|
24832
|
+
} catch (_e) {
|
|
24833
|
+
}
|
|
24694
24834
|
const engPath = join46(getAgonHome(), "engines", `${engineId}.json`);
|
|
24695
24835
|
try {
|
|
24696
24836
|
unlinkSync4(engPath);
|
|
@@ -24711,6 +24851,12 @@ function App() {
|
|
|
24711
24851
|
setRegistryVersion((v) => v + 1);
|
|
24712
24852
|
setSessionEngines((prev) => prev ? prev.filter((id) => id !== engineId) : null);
|
|
24713
24853
|
dispatch({ type: "success", message: `Removed from Agon: ${engineId}. Restore with /engines restore ${engineId}.` });
|
|
24854
|
+
if (_keyEnv && getAuthKey(_keyEnv)) {
|
|
24855
|
+
const stillUsed = registry.list().some((e) => e?.api?.apiKeyEnv === _keyEnv);
|
|
24856
|
+
if (!stillUsed) {
|
|
24857
|
+
dispatch({ type: "info", message: `${_keyEnv} is no longer used by any engine \u2014 clear the saved key with /provider key clear ${_keyEnv}.` });
|
|
24858
|
+
}
|
|
24859
|
+
}
|
|
24714
24860
|
},
|
|
24715
24861
|
onSetModel: (engineId, model) => {
|
|
24716
24862
|
const nextModels = { ...loadConfig().engineModels ?? {} };
|
|
@@ -24778,22 +24924,40 @@ function App() {
|
|
|
24778
24924
|
return;
|
|
24779
24925
|
}
|
|
24780
24926
|
setModelPickerOpen(false);
|
|
24781
|
-
|
|
24782
|
-
|
|
24783
|
-
|
|
24784
|
-
|
|
24785
|
-
|
|
24786
|
-
|
|
24787
|
-
|
|
24788
|
-
|
|
24789
|
-
|
|
24790
|
-
|
|
24791
|
-
|
|
24792
|
-
|
|
24793
|
-
|
|
24794
|
-
|
|
24795
|
-
|
|
24796
|
-
|
|
24927
|
+
void (async () => {
|
|
24928
|
+
const def = modelEntryToEngineDef(entry);
|
|
24929
|
+
const dir = join46(getAgonHome(), "engines");
|
|
24930
|
+
mkdirSync28(dir, { recursive: true });
|
|
24931
|
+
writeFileSync13(join46(dir, `${def.id}.json`), JSON.stringify(def, null, 2) + "\n");
|
|
24932
|
+
registry.register(def);
|
|
24933
|
+
const envVar = def.api?.apiKeyEnv;
|
|
24934
|
+
if (envVar && !getAuthKey(envVar)) {
|
|
24935
|
+
const key = await askQuestion(`Paste ${envVar} for ${entry.providerName} (Enter to skip):`);
|
|
24936
|
+
if (key && key.trim()) {
|
|
24937
|
+
setAuthKey(envVar, key.trim(), entry.providerName);
|
|
24938
|
+
dispatch({ type: "success", message: `Saved ${envVar} to auth store` });
|
|
24939
|
+
} else {
|
|
24940
|
+
dispatch({ type: "info", message: `No key saved \u2014 set ${envVar} before using ${entry.modelName}.` });
|
|
24941
|
+
}
|
|
24942
|
+
} else if (envVar) {
|
|
24943
|
+
const repl = await askQuestion(`${envVar} is already set. Paste a new key to replace it, or Enter to keep:`);
|
|
24944
|
+
if (repl && repl.trim()) {
|
|
24945
|
+
setAuthKey(envVar, repl.trim(), entry.providerName);
|
|
24946
|
+
dispatch({ type: "success", message: `Replaced ${envVar} in auth store` });
|
|
24947
|
+
}
|
|
24948
|
+
}
|
|
24949
|
+
const nextSelected = Array.from(/* @__PURE__ */ new Set([...sessionEngines ?? registry.activeIds(config), def.id]));
|
|
24950
|
+
const cfg = loadConfig();
|
|
24951
|
+
const hidden = new Set(cfg.hiddenEngines ?? []);
|
|
24952
|
+
hidden.delete(def.id);
|
|
24953
|
+
setSessionEngines(nextSelected);
|
|
24954
|
+
configSet("engineActivationMode", "explicit");
|
|
24955
|
+
configSet("forgeEnabledEngines", nextSelected);
|
|
24956
|
+
configSet("hiddenEngines", [...hidden]);
|
|
24957
|
+
setRegistryVersion((v) => v + 1);
|
|
24958
|
+
setConfigVersion((v) => v + 1);
|
|
24959
|
+
dispatch({ type: "success", message: `Added: ${entry.providerName} \u2014 ${entry.modelName}` });
|
|
24960
|
+
})();
|
|
24797
24961
|
},
|
|
24798
24962
|
onCancel: () => {
|
|
24799
24963
|
const hadTarget = !!modelPickerTargetEngine;
|
|
@@ -25102,6 +25266,12 @@ async function runOnboarding() {
|
|
|
25102
25266
|
}
|
|
25103
25267
|
|
|
25104
25268
|
// src/index.ts
|
|
25269
|
+
try {
|
|
25270
|
+
if (!process.env.AGON_NO_STACK_TRACE_MAPPER) {
|
|
25271
|
+
installKernStackTraceMapper();
|
|
25272
|
+
}
|
|
25273
|
+
} catch {
|
|
25274
|
+
}
|
|
25105
25275
|
loadAllAuthKeys();
|
|
25106
25276
|
function consumeIsolationFlags() {
|
|
25107
25277
|
const nextArgv = process.argv.slice(0, 2);
|
|
@@ -25212,7 +25382,7 @@ maybeNotifyIsolationMigration();
|
|
|
25212
25382
|
var main = defineCommand30({
|
|
25213
25383
|
meta: {
|
|
25214
25384
|
name: "agon",
|
|
25215
|
-
version: "0.1.
|
|
25385
|
+
version: "0.1.3",
|
|
25216
25386
|
description: "Any AI can join. They compete. You ship."
|
|
25217
25387
|
},
|
|
25218
25388
|
subCommands: {
|