lazycodex-ai 5.1.65 → 5.1.68
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/cli/index.js +210 -158
- package/dist/cli/service-auth/account-home.d.ts +47 -0
- package/dist/cli/service-auth/account-home.fixture.d.ts +1 -0
- package/dist/cli/service-auth/credential-lock.d.ts +2 -0
- package/dist/cli/service-auth/index.d.ts +1 -1
- package/dist/cli-node/index.js +210 -158
- package/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +11 -7
- package/packages/omo-codex/plugin/skills/browser/SKILL.md +21 -6
- package/packages/omo-codex/plugin/skills/browser/references/commands.md +41 -4
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +15 -4
- package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +4 -2
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/LICENSE +21 -0
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +4 -3
- package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +4 -3
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +6 -6
- package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +2 -2
- package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +5 -4
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +3 -3
- package/packages/shared-skills/skills/browser/ATTRIBUTION.md +11 -7
- package/packages/shared-skills/skills/browser/SKILL.md +21 -6
- package/packages/shared-skills/skills/browser/references/commands.md +41 -4
- package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +15 -4
- package/packages/shared-skills/skills/browser/references/recipes/1password.md +4 -2
- package/packages/shared-skills/skills/browser/runtime/omowright/LICENSE +21 -0
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +4 -3
- package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +4 -3
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +6 -6
- package/packages/shared-skills/skills/ulw-research/references/research-collection.md +2 -2
- package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +5 -4
package/dist/cli-node/index.js
CHANGED
|
@@ -2133,7 +2133,7 @@ var package_default;
|
|
|
2133
2133
|
var init_package = __esm(() => {
|
|
2134
2134
|
package_default = {
|
|
2135
2135
|
name: "oh-my-opencode",
|
|
2136
|
-
version: "5.1.
|
|
2136
|
+
version: "5.1.68",
|
|
2137
2137
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2138
2138
|
main: "./dist/index.js",
|
|
2139
2139
|
types: "dist/index.d.ts",
|
|
@@ -2320,7 +2320,7 @@ var init_package = __esm(() => {
|
|
|
2320
2320
|
},
|
|
2321
2321
|
devDependencies: {
|
|
2322
2322
|
"@clack/prompts": "^1.8.1",
|
|
2323
|
-
"@code-yeongyu/senpi": "2026.11.
|
|
2323
|
+
"@code-yeongyu/senpi": "2026.11.10",
|
|
2324
2324
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
2325
2325
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2326
2326
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -2385,18 +2385,18 @@ var init_package = __esm(() => {
|
|
|
2385
2385
|
typescript: "^7.0.2"
|
|
2386
2386
|
},
|
|
2387
2387
|
optionalDependencies: {
|
|
2388
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
2389
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2390
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2391
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2392
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2393
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2394
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2395
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2396
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2397
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2398
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2399
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
2388
|
+
"oh-my-opencode-darwin-arm64": "5.1.68",
|
|
2389
|
+
"oh-my-opencode-darwin-x64": "5.1.68",
|
|
2390
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.68",
|
|
2391
|
+
"oh-my-opencode-linux-arm64": "5.1.68",
|
|
2392
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.68",
|
|
2393
|
+
"oh-my-opencode-linux-x64": "5.1.68",
|
|
2394
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.68",
|
|
2395
|
+
"oh-my-opencode-linux-x64-musl": "5.1.68",
|
|
2396
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.68",
|
|
2397
|
+
"oh-my-opencode-windows-arm64": "5.1.68",
|
|
2398
|
+
"oh-my-opencode-windows-x64": "5.1.68",
|
|
2399
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.68"
|
|
2400
2400
|
},
|
|
2401
2401
|
overrides: {
|
|
2402
2402
|
hono: "^4.13.8",
|
|
@@ -8081,7 +8081,7 @@ var init_latest_models = __esm(() => {
|
|
|
8081
8081
|
claudeOpus: "claude-opus-5-5",
|
|
8082
8082
|
claudeSonnet: "claude-sonnet-5-5",
|
|
8083
8083
|
claudeHaiku: "claude-haiku-5-5",
|
|
8084
|
-
claudeFable: "claude-fable-5-
|
|
8084
|
+
claudeFable: "claude-fable-5-2",
|
|
8085
8085
|
gptAstra: "gpt-6-astra",
|
|
8086
8086
|
gptSol: "gpt-6.1-sol",
|
|
8087
8087
|
gptSolFast: "gpt-6.1-sol-fast",
|
|
@@ -9347,61 +9347,9 @@ var init_file_reference_resolver = __esm(() => {
|
|
|
9347
9347
|
init_logger2();
|
|
9348
9348
|
});
|
|
9349
9349
|
|
|
9350
|
-
// packages/model-core/src/fable-55-launch.ts
|
|
9351
|
-
function isFable55Model(model) {
|
|
9352
|
-
const modelId = model.split("/").pop() ?? model;
|
|
9353
|
-
return modelId.replaceAll(".", "-") === FABLE_55_LAUNCH.id;
|
|
9354
|
-
}
|
|
9355
|
-
function selectLaunchRungs(rungs, gate, onRejected) {
|
|
9356
|
-
return rungs.filter((rung) => {
|
|
9357
|
-
if (!isFable55Model(rung.model))
|
|
9358
|
-
return true;
|
|
9359
|
-
if (!gate.released)
|
|
9360
|
-
return false;
|
|
9361
|
-
if (rung.variant !== undefined && gate.accepted.includes(rung.variant))
|
|
9362
|
-
return true;
|
|
9363
|
-
onRejected({ model: rung.model, variant: rung.variant });
|
|
9364
|
-
return false;
|
|
9365
|
-
});
|
|
9366
|
-
}
|
|
9367
|
-
function recordLaunchRungRejection(rejection) {
|
|
9368
|
-
launchRungRejectionLog.push(rejection);
|
|
9369
|
-
console.warn(`[fable-55-launch] dropped a Fable 5.5 rung with effort "${rejection.variant ?? "(none)"}": not in FABLE_55_EFFORTS.accepted`);
|
|
9370
|
-
}
|
|
9371
|
-
function launchRungs(rungs) {
|
|
9372
|
-
return selectLaunchRungs(rungs, { released: FABLE_55_RELEASED, accepted: FABLE_55_EFFORTS.accepted }, recordLaunchRungRejection);
|
|
9373
|
-
}
|
|
9374
|
-
function launchDefaultModelId() {
|
|
9375
|
-
return FABLE_55_RELEASED ? FABLE_55_LAUNCH.id : FABLE_55_PREDECESSOR;
|
|
9376
|
-
}
|
|
9377
|
-
var FABLE_55_LAUNCH, FABLE_55_RELEASED = false, FABLE_55_EFFORTS, launchRungRejectionLog, FABLE_55_PREDECESSOR;
|
|
9378
|
-
var init_fable_55_launch = __esm(() => {
|
|
9379
|
-
init_latest_models();
|
|
9380
|
-
FABLE_55_LAUNCH = {
|
|
9381
|
-
id: "claude-fable-5-5",
|
|
9382
|
-
family: "claude-fable",
|
|
9383
|
-
reasoning: undefined,
|
|
9384
|
-
temperature: undefined,
|
|
9385
|
-
toolCall: undefined,
|
|
9386
|
-
modalities: undefined,
|
|
9387
|
-
limit: {
|
|
9388
|
-
context: undefined,
|
|
9389
|
-
input: undefined,
|
|
9390
|
-
output: undefined
|
|
9391
|
-
}
|
|
9392
|
-
};
|
|
9393
|
-
FABLE_55_EFFORTS = {
|
|
9394
|
-
measured: false,
|
|
9395
|
-
accepted: ["xhigh", "max"]
|
|
9396
|
-
};
|
|
9397
|
-
launchRungRejectionLog = [];
|
|
9398
|
-
FABLE_55_PREDECESSOR = LATEST_MODEL_BY_FAMILY.claudeFable;
|
|
9399
|
-
});
|
|
9400
|
-
|
|
9401
9350
|
// packages/model-core/src/agent-model-requirements.ts
|
|
9402
9351
|
var AGENT_MODEL_REQUIREMENTS;
|
|
9403
9352
|
var init_agent_model_requirements = __esm(() => {
|
|
9404
|
-
init_fable_55_launch();
|
|
9405
9353
|
init_latest_models();
|
|
9406
9354
|
AGENT_MODEL_REQUIREMENTS = {
|
|
9407
9355
|
sisyphus: {
|
|
@@ -9496,15 +9444,15 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9496
9444
|
]
|
|
9497
9445
|
},
|
|
9498
9446
|
prometheus: {
|
|
9499
|
-
fallbackChain:
|
|
9447
|
+
fallbackChain: [
|
|
9500
9448
|
{
|
|
9501
9449
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9502
|
-
model:
|
|
9450
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9503
9451
|
variant: "xhigh"
|
|
9504
9452
|
},
|
|
9505
9453
|
{
|
|
9506
9454
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9507
|
-
model:
|
|
9455
|
+
model: "claude-fable-5-1",
|
|
9508
9456
|
variant: "xhigh"
|
|
9509
9457
|
},
|
|
9510
9458
|
{
|
|
@@ -9518,18 +9466,18 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9518
9466
|
variant: "max"
|
|
9519
9467
|
},
|
|
9520
9468
|
{ providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
|
|
9521
|
-
]
|
|
9469
|
+
]
|
|
9522
9470
|
},
|
|
9523
9471
|
metis: {
|
|
9524
|
-
fallbackChain:
|
|
9472
|
+
fallbackChain: [
|
|
9525
9473
|
{
|
|
9526
9474
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9527
|
-
model:
|
|
9475
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9528
9476
|
variant: "max"
|
|
9529
9477
|
},
|
|
9530
9478
|
{
|
|
9531
9479
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9532
|
-
model:
|
|
9480
|
+
model: "claude-fable-5-1",
|
|
9533
9481
|
variant: "max"
|
|
9534
9482
|
},
|
|
9535
9483
|
{
|
|
@@ -9543,7 +9491,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9543
9491
|
variant: "max"
|
|
9544
9492
|
},
|
|
9545
9493
|
{ providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
|
|
9546
|
-
]
|
|
9494
|
+
]
|
|
9547
9495
|
},
|
|
9548
9496
|
momus: {
|
|
9549
9497
|
fallbackChain: [
|
|
@@ -9603,20 +9551,19 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9603
9551
|
// packages/model-core/src/category-model-requirements.ts
|
|
9604
9552
|
var CATEGORY_MODEL_REQUIREMENTS;
|
|
9605
9553
|
var init_category_model_requirements = __esm(() => {
|
|
9606
|
-
init_fable_55_launch();
|
|
9607
9554
|
init_latest_models();
|
|
9608
9555
|
CATEGORY_MODEL_REQUIREMENTS = {
|
|
9609
9556
|
"visual-engineering": {
|
|
9610
|
-
fallbackChain:
|
|
9557
|
+
fallbackChain: [
|
|
9611
9558
|
{ providers: ["google", "google-vertex", "opencode"], model: LATEST_MODEL_BY_FAMILY.geminiPro, variant: "low" },
|
|
9612
9559
|
{
|
|
9613
9560
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9614
|
-
model:
|
|
9561
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9615
9562
|
variant: "max"
|
|
9616
9563
|
},
|
|
9617
9564
|
{
|
|
9618
9565
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9619
|
-
model:
|
|
9566
|
+
model: "claude-fable-5-1",
|
|
9620
9567
|
variant: "max"
|
|
9621
9568
|
},
|
|
9622
9569
|
{
|
|
@@ -9630,7 +9577,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9630
9577
|
variant: "max"
|
|
9631
9578
|
},
|
|
9632
9579
|
{ providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
|
|
9633
|
-
]
|
|
9580
|
+
]
|
|
9634
9581
|
},
|
|
9635
9582
|
ultrabrain: {
|
|
9636
9583
|
fallbackChain: [
|
|
@@ -9664,15 +9611,15 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9664
9611
|
]
|
|
9665
9612
|
},
|
|
9666
9613
|
artistry: {
|
|
9667
|
-
fallbackChain:
|
|
9614
|
+
fallbackChain: [
|
|
9668
9615
|
{
|
|
9669
9616
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9670
|
-
model:
|
|
9617
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9671
9618
|
variant: "max"
|
|
9672
9619
|
},
|
|
9673
9620
|
{
|
|
9674
9621
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9675
|
-
model:
|
|
9622
|
+
model: "claude-fable-5-1",
|
|
9676
9623
|
variant: "max"
|
|
9677
9624
|
},
|
|
9678
9625
|
{
|
|
@@ -9686,7 +9633,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9686
9633
|
variant: "max"
|
|
9687
9634
|
},
|
|
9688
9635
|
{ providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
|
|
9689
|
-
]
|
|
9636
|
+
]
|
|
9690
9637
|
},
|
|
9691
9638
|
quick: {
|
|
9692
9639
|
fallbackChain: [
|
|
@@ -10372,9 +10319,7 @@ var init_runtime_fallback_model = () => {};
|
|
|
10372
10319
|
// packages/model-core/src/model-capabilities/supplemental-entries.ts
|
|
10373
10320
|
var SUPPLEMENTAL_MODEL_CAPABILITIES;
|
|
10374
10321
|
var init_supplemental_entries = __esm(() => {
|
|
10375
|
-
init_fable_55_launch();
|
|
10376
10322
|
SUPPLEMENTAL_MODEL_CAPABILITIES = {
|
|
10377
|
-
[FABLE_55_LAUNCH.id]: FABLE_55_LAUNCH,
|
|
10378
10323
|
"kimi-k3": {
|
|
10379
10324
|
id: "kimi-k3",
|
|
10380
10325
|
family: "kimi",
|
|
@@ -10450,6 +10395,21 @@ var init_supplemental_entries = __esm(() => {
|
|
|
10450
10395
|
output: 128000
|
|
10451
10396
|
}
|
|
10452
10397
|
},
|
|
10398
|
+
"claude-fable-5-2": {
|
|
10399
|
+
id: "claude-fable-5-2",
|
|
10400
|
+
family: "claude-fable",
|
|
10401
|
+
reasoning: true,
|
|
10402
|
+
temperature: false,
|
|
10403
|
+
toolCall: true,
|
|
10404
|
+
modalities: {
|
|
10405
|
+
input: ["text", "image", "pdf"],
|
|
10406
|
+
output: ["text"]
|
|
10407
|
+
},
|
|
10408
|
+
limit: {
|
|
10409
|
+
context: 1e6,
|
|
10410
|
+
output: 128000
|
|
10411
|
+
}
|
|
10412
|
+
},
|
|
10453
10413
|
"gpt-6-astra": {
|
|
10454
10414
|
id: "gpt-6-astra",
|
|
10455
10415
|
family: "gpt",
|
|
@@ -10854,25 +10814,16 @@ var init_supplemental_entries = __esm(() => {
|
|
|
10854
10814
|
});
|
|
10855
10815
|
|
|
10856
10816
|
// packages/model-core/src/model-capabilities/bundled-snapshot.ts
|
|
10857
|
-
function fillGaps(generated, placeholder) {
|
|
10858
|
-
const merged = { ...placeholder };
|
|
10859
|
-
for (const [key, value] of Object.entries(generated)) {
|
|
10860
|
-
if (value === undefined)
|
|
10861
|
-
continue;
|
|
10862
|
-
const base = merged[key];
|
|
10863
|
-
merged[key] = value !== null && typeof value === "object" && !Array.isArray(value) && base !== null && typeof base === "object" ? { ...base, ...Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) } : value;
|
|
10864
|
-
}
|
|
10865
|
-
return merged;
|
|
10866
|
-
}
|
|
10867
10817
|
function getBundledModelCapabilitiesSnapshot(snapshotJson) {
|
|
10868
|
-
|
|
10869
|
-
|
|
10870
|
-
|
|
10871
|
-
|
|
10872
|
-
|
|
10818
|
+
return {
|
|
10819
|
+
...snapshotJson,
|
|
10820
|
+
models: {
|
|
10821
|
+
...snapshotJson.models,
|
|
10822
|
+
...SUPPLEMENTAL_MODEL_CAPABILITIES
|
|
10823
|
+
}
|
|
10824
|
+
};
|
|
10873
10825
|
}
|
|
10874
10826
|
var init_bundled_snapshot = __esm(() => {
|
|
10875
|
-
init_fable_55_launch();
|
|
10876
10827
|
init_supplemental_entries();
|
|
10877
10828
|
});
|
|
10878
10829
|
|
|
@@ -11300,7 +11251,6 @@ var init_src2 = __esm(() => {
|
|
|
11300
11251
|
init_model_requirements();
|
|
11301
11252
|
init_latest_models();
|
|
11302
11253
|
init_model_family_detectors();
|
|
11303
|
-
init_fable_55_launch();
|
|
11304
11254
|
init_model_capability_aliases();
|
|
11305
11255
|
init_model_capability_heuristics();
|
|
11306
11256
|
init_model_capability_guardrails();
|
|
@@ -11622,7 +11572,6 @@ Approach:
|
|
|
11622
11572
|
</Category_Context>`, GOOGLE_CATEGORIES;
|
|
11623
11573
|
var init_google_categories = __esm(() => {
|
|
11624
11574
|
init_latest_models();
|
|
11625
|
-
init_src2();
|
|
11626
11575
|
GOOGLE_CATEGORIES = [
|
|
11627
11576
|
{
|
|
11628
11577
|
name: "visual-engineering",
|
|
@@ -11632,7 +11581,7 @@ var init_google_categories = __esm(() => {
|
|
|
11632
11581
|
},
|
|
11633
11582
|
{
|
|
11634
11583
|
name: "artistry",
|
|
11635
|
-
config: { model: `anthropic/${
|
|
11584
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeFable}`, variant: "max" },
|
|
11636
11585
|
description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
|
|
11637
11586
|
promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
|
|
11638
11587
|
}
|
|
@@ -92837,7 +92786,7 @@ var package_default2;
|
|
|
92837
92786
|
var init_package2 = __esm(() => {
|
|
92838
92787
|
package_default2 = {
|
|
92839
92788
|
name: "@oh-my-opencode/omo-codex",
|
|
92840
|
-
version: "5.1.
|
|
92789
|
+
version: "5.1.68",
|
|
92841
92790
|
type: "module",
|
|
92842
92791
|
private: true,
|
|
92843
92792
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -104970,6 +104919,7 @@ var RuntimeFallbackConfigSchema = object({
|
|
|
104970
104919
|
max_fallback_attempts: number2().min(1).max(20).optional(),
|
|
104971
104920
|
cooldown_seconds: number2().min(0).optional(),
|
|
104972
104921
|
timeout_seconds: number2().min(0).optional(),
|
|
104922
|
+
first_prompt_timeout_seconds: number2().min(0).optional(),
|
|
104973
104923
|
notify_on_fallback: boolean2().optional(),
|
|
104974
104924
|
restore_primary_after_cooldown: boolean2().optional()
|
|
104975
104925
|
});
|
|
@@ -109600,8 +109550,8 @@ var package_default3 = {
|
|
|
109600
109550
|
},
|
|
109601
109551
|
dependencies: {
|
|
109602
109552
|
"@clack/prompts": "^1.8.1",
|
|
109603
|
-
"@code-yeongyu/senpi": "2026.11.
|
|
109604
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.
|
|
109553
|
+
"@code-yeongyu/senpi": "2026.11.10",
|
|
109554
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.10",
|
|
109605
109555
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
109606
109556
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
109607
109557
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -112861,8 +112811,110 @@ import { createHash as createHash12, randomUUID as randomUUID8 } from "node:cryp
|
|
|
112861
112811
|
import { basename as basename17 } from "node:path";
|
|
112862
112812
|
|
|
112863
112813
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/darwin-backend.ts
|
|
112814
|
+
import { homedir as homedir32 } from "node:os";
|
|
112815
|
+
import { join as join110 } from "node:path";
|
|
112816
|
+
|
|
112817
|
+
// packages/omo-opencode/src/cli/service-auth/account-home.ts
|
|
112818
|
+
import { execFileSync as execFileSync4 } from "node:child_process";
|
|
112819
|
+
import { accessSync as accessSync5, constants as constants13, mkdirSync as mkdirSync19, readFileSync as readFileSync44, statSync as statSync7 } from "node:fs";
|
|
112864
112820
|
import { homedir as homedir31 } from "node:os";
|
|
112865
|
-
import { join as
|
|
112821
|
+
import { join as join106, posix as posix13, win32 as win3210 } from "node:path";
|
|
112822
|
+
var lockDirectoryIn = (home) => join106(home, ".omo", "session-locks");
|
|
112823
|
+
function userRecordHome(facts) {
|
|
112824
|
+
try {
|
|
112825
|
+
if (facts.platform === "linux")
|
|
112826
|
+
return passwdHome(facts);
|
|
112827
|
+
if (facts.platform === "darwin")
|
|
112828
|
+
return darwinHome(facts);
|
|
112829
|
+
if (facts.platform === "win32")
|
|
112830
|
+
return windowsProfile(facts);
|
|
112831
|
+
return;
|
|
112832
|
+
} catch {
|
|
112833
|
+
return;
|
|
112834
|
+
}
|
|
112835
|
+
}
|
|
112836
|
+
function passwdHome(facts) {
|
|
112837
|
+
if (facts.uid === undefined)
|
|
112838
|
+
return;
|
|
112839
|
+
const uid = String(facts.uid);
|
|
112840
|
+
const home = facts.readFile("/etc/passwd").split(`
|
|
112841
|
+
`).map((line) => line.split(":")).find((fields) => fields[2] === uid)?.[5];
|
|
112842
|
+
return home !== undefined && posix13.isAbsolute(home) ? home : undefined;
|
|
112843
|
+
}
|
|
112844
|
+
function darwinHome(facts) {
|
|
112845
|
+
const fields = facts.run("/usr/bin/id", ["-P"]).trim().split(":");
|
|
112846
|
+
const home = fields[8];
|
|
112847
|
+
if (facts.uid !== undefined && fields[2] !== String(facts.uid))
|
|
112848
|
+
return;
|
|
112849
|
+
return home !== undefined && posix13.isAbsolute(home) ? home : undefined;
|
|
112850
|
+
}
|
|
112851
|
+
function windowsProfile(facts) {
|
|
112852
|
+
const whoami = system32Tool(facts, "whoami.exe");
|
|
112853
|
+
const reg = system32Tool(facts, "reg.exe");
|
|
112854
|
+
if (whoami === undefined || reg === undefined)
|
|
112855
|
+
return;
|
|
112856
|
+
const sid = /S-1-[0-9-]+/.exec(facts.run(whoami, ["/user", "/fo", "csv", "/nh"]))?.[0];
|
|
112857
|
+
if (sid === undefined)
|
|
112858
|
+
return;
|
|
112859
|
+
const key = `HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\${sid}`;
|
|
112860
|
+
const value = /ProfileImagePath\s+REG_(?:EXPAND_)?SZ\s+(.+)/.exec(facts.run(reg, ["query", key, "/v", "ProfileImagePath"]))?.[1]?.trim();
|
|
112861
|
+
const home = value?.replace(/%([^%]+)%/g, (whole, name) => facts.env[name] ?? whole);
|
|
112862
|
+
return home !== undefined && !home.includes("%") && win3210.isAbsolute(home) ? home : undefined;
|
|
112863
|
+
}
|
|
112864
|
+
function system32Tool(facts, name) {
|
|
112865
|
+
const root = facts.env.SystemRoot;
|
|
112866
|
+
if (root === undefined || !/^[A-Za-z]:[\\/]/.test(root) || root.split(/[\\/]/).includes(".."))
|
|
112867
|
+
return;
|
|
112868
|
+
const tool = win3210.join(root, "System32", name);
|
|
112869
|
+
return facts.isFile(tool) ? tool : undefined;
|
|
112870
|
+
}
|
|
112871
|
+
function chooseLockHome(facts) {
|
|
112872
|
+
const home = facts.homedir();
|
|
112873
|
+
const record = facts.recordHome();
|
|
112874
|
+
if (record === undefined || record === home)
|
|
112875
|
+
return home;
|
|
112876
|
+
try {
|
|
112877
|
+
facts.prepareLockDirectory(lockDirectoryIn(record));
|
|
112878
|
+
return record;
|
|
112879
|
+
} catch (error) {
|
|
112880
|
+
const reason = error instanceof Error && "code" in error ? String(error.code) : String(error);
|
|
112881
|
+
facts.warn(`omo: the account home ${record} cannot hold the credential lock (${reason}); using ${home}. A process started with another HOME may refresh the same sign-in at the same time (#12978).`);
|
|
112882
|
+
return home;
|
|
112883
|
+
}
|
|
112884
|
+
}
|
|
112885
|
+
var systemPlatformFacts = {
|
|
112886
|
+
platform: process.platform,
|
|
112887
|
+
uid: process.getuid?.(),
|
|
112888
|
+
env: process.env,
|
|
112889
|
+
readFile: (path) => readFileSync44(path, "utf8"),
|
|
112890
|
+
isFile: (path) => statSync7(path, { throwIfNoEntry: false })?.isFile() ?? false,
|
|
112891
|
+
run: (command, args) => execFileSync4(command, args, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 5000, windowsHide: true })
|
|
112892
|
+
};
|
|
112893
|
+
var systemAccountFacts = {
|
|
112894
|
+
recordHome: () => userRecordHome(systemPlatformFacts),
|
|
112895
|
+
homedir: homedir31,
|
|
112896
|
+
prepareLockDirectory: (directory) => {
|
|
112897
|
+
mkdirSync19(directory, { recursive: true, mode: 448 });
|
|
112898
|
+
accessSync5(directory, constants13.W_OK);
|
|
112899
|
+
},
|
|
112900
|
+
warn: (message) => process.stderr.write(`${message}
|
|
112901
|
+
`)
|
|
112902
|
+
};
|
|
112903
|
+
var TEST_LOCK_HOME_ENV = "OMO_TEST_CREDENTIAL_LOCK_HOME";
|
|
112904
|
+
var INJECTED_SECRETS = Symbol.for("omo.test.injectedSecrets");
|
|
112905
|
+
function testLockHome(env, secrets) {
|
|
112906
|
+
const home = env[TEST_LOCK_HOME_ENV];
|
|
112907
|
+
if (home === undefined || !(posix13.isAbsolute(home) || win3210.isAbsolute(home)))
|
|
112908
|
+
return;
|
|
112909
|
+
const marked = typeof secrets === "object" && secrets !== null && secrets[INJECTED_SECRETS] === true;
|
|
112910
|
+
return marked ? home : undefined;
|
|
112911
|
+
}
|
|
112912
|
+
var facts = systemAccountFacts;
|
|
112913
|
+
var chosen;
|
|
112914
|
+
function accountHome() {
|
|
112915
|
+
chosen ??= testLockHome(process.env, typeof Bun === "undefined" ? undefined : Bun.secrets) ?? chooseLockHome(facts);
|
|
112916
|
+
return chosen;
|
|
112917
|
+
}
|
|
112866
112918
|
|
|
112867
112919
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/client.ts
|
|
112868
112920
|
init_zod();
|
|
@@ -112977,18 +113029,18 @@ async function callHelper(path, call, options = {}) {
|
|
|
112977
113029
|
}
|
|
112978
113030
|
|
|
112979
113031
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/location.ts
|
|
112980
|
-
import { dirname as dirname42, join as
|
|
113032
|
+
import { dirname as dirname42, join as join107, posix as posix14 } from "node:path";
|
|
112981
113033
|
import { fileURLToPath as fileURLToPath8 } from "node:url";
|
|
112982
113034
|
function bundleCandidates(moduleUrl) {
|
|
112983
113035
|
const root = dirname42(dirname42(dirname42(fileURLToPath8(moduleUrl))));
|
|
112984
|
-
return [
|
|
113036
|
+
return [join107(root, "bin", "darwin", "omo-keychain"), join107(root, "omo-keychain")];
|
|
112985
113037
|
}
|
|
112986
113038
|
function machineCandidates(home, arch = process.arch) {
|
|
112987
113039
|
const runtimeArch = arch === "arm64" ? "arm64" : "x64";
|
|
112988
113040
|
return [
|
|
112989
113041
|
`/Applications/OmO.app/Contents/Resources/omo-runtime/darwin-${runtimeArch}/omo-keychain`,
|
|
112990
|
-
|
|
112991
|
-
|
|
113042
|
+
posix14.join(home, "Applications", "OmO.app", "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo-keychain"),
|
|
113043
|
+
posix14.join(home, ".bun", "install", "global", "node_modules", "omo-ai", "bin", "darwin", "omo-keychain")
|
|
112992
113044
|
];
|
|
112993
113045
|
}
|
|
112994
113046
|
async function locateHelper(candidates, verify) {
|
|
@@ -113005,9 +113057,9 @@ async function locateHelper(candidates, verify) {
|
|
|
113005
113057
|
|
|
113006
113058
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/pin.ts
|
|
113007
113059
|
import { readdirSync as readdirSync14, rmSync as rmSync9 } from "node:fs";
|
|
113008
|
-
import { chmod as chmod2, copyFile as copyFile4, constants as
|
|
113060
|
+
import { chmod as chmod2, copyFile as copyFile4, constants as constants14, mkdtemp as mkdtemp2, rm as rm16, stat as stat8 } from "node:fs/promises";
|
|
113009
113061
|
import { tmpdir as tmpdir6 } from "node:os";
|
|
113010
|
-
import { basename as basename15, join as
|
|
113062
|
+
import { basename as basename15, join as join108 } from "node:path";
|
|
113011
113063
|
var DIR_PREFIX = "omo-keychain-";
|
|
113012
113064
|
var OWNED_DIR = new RegExp(`^${DIR_PREFIX}(\\d+)-`);
|
|
113013
113065
|
var isAlive = (pid) => {
|
|
@@ -113031,7 +113083,7 @@ function sweepDeadPinDirs(root = tmpdir6()) {
|
|
|
113031
113083
|
if (owner === undefined || Number(owner) === process.pid || isAlive(Number(owner)))
|
|
113032
113084
|
continue;
|
|
113033
113085
|
try {
|
|
113034
|
-
rmSync9(
|
|
113086
|
+
rmSync9(join108(root, entry), { recursive: true, force: true });
|
|
113035
113087
|
} catch {
|
|
113036
113088
|
continue;
|
|
113037
113089
|
}
|
|
@@ -113044,7 +113096,7 @@ async function processPinDir() {
|
|
|
113044
113096
|
if (processDir !== undefined)
|
|
113045
113097
|
return processDir;
|
|
113046
113098
|
sweepDeadPinDirs();
|
|
113047
|
-
const dir = await mkdtemp2(
|
|
113099
|
+
const dir = await mkdtemp2(join108(tmpdir6(), `${DIR_PREFIX}${process.pid}-`));
|
|
113048
113100
|
process.once("exit", () => rmSync9(dir, { recursive: true, force: true }));
|
|
113049
113101
|
processDir = dir;
|
|
113050
113102
|
return dir;
|
|
@@ -113055,9 +113107,9 @@ async function sourceIdentity(source) {
|
|
|
113055
113107
|
return `${source}\x00${info.dev}\x00${info.ino}\x00${info.size}\x00${info.mtimeMs}\x00${info.ctimeMs}`;
|
|
113056
113108
|
}
|
|
113057
113109
|
async function copyAndVerify(source, verify, dir) {
|
|
113058
|
-
const target =
|
|
113110
|
+
const target = join108(dir, `${crypto.randomUUID()}-${basename15(source)}`);
|
|
113059
113111
|
try {
|
|
113060
|
-
await copyFile4(source, target,
|
|
113112
|
+
await copyFile4(source, target, constants14.COPYFILE_EXCL);
|
|
113061
113113
|
await chmod2(target, 320);
|
|
113062
113114
|
} catch (error) {
|
|
113063
113115
|
await rm16(target, { force: true });
|
|
@@ -113672,16 +113724,16 @@ var {
|
|
|
113672
113724
|
unlink: unlink3
|
|
113673
113725
|
} = promises;
|
|
113674
113726
|
var {
|
|
113675
|
-
accessSync:
|
|
113727
|
+
accessSync: accessSync6,
|
|
113676
113728
|
chmodSync: chmodSync7,
|
|
113677
113729
|
fsyncSync: fsyncSync3,
|
|
113678
113730
|
linkSync,
|
|
113679
113731
|
lstatSync: lstatSync5,
|
|
113680
|
-
mkdirSync:
|
|
113681
|
-
readFileSync:
|
|
113732
|
+
mkdirSync: mkdirSync20,
|
|
113733
|
+
readFileSync: readFileSync45,
|
|
113682
113734
|
readdirSync: readdirSync15,
|
|
113683
113735
|
realpathSync: realpathSync13,
|
|
113684
|
-
statSync:
|
|
113736
|
+
statSync: statSync9,
|
|
113685
113737
|
unlinkSync: unlinkSync10,
|
|
113686
113738
|
writeFileSync: writeFileSync17,
|
|
113687
113739
|
writeSync
|
|
@@ -114151,7 +114203,7 @@ async function publishLockRecord(lockPath, record) {
|
|
|
114151
114203
|
// packages/team-core/src/team-state-store/lock-lease.ts
|
|
114152
114204
|
import { randomUUID as randomUUID7 } from "node:crypto";
|
|
114153
114205
|
import { open as open4, readdir as readdir18, readFile as readFile36, rename as rename9, rm as rm18 } from "node:fs/promises";
|
|
114154
|
-
import { basename as basename16, dirname as dirname44, join as
|
|
114206
|
+
import { basename as basename16, dirname as dirname44, join as join109 } from "node:path";
|
|
114155
114207
|
|
|
114156
114208
|
// packages/team-core/src/team-state-store/lock-reclaim.ts
|
|
114157
114209
|
import { createHash as createHash10 } from "node:crypto";
|
|
@@ -114230,7 +114282,7 @@ var UUID2 = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
|
|
|
114230
114282
|
var escapeRegExp2 = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
114231
114283
|
var leaseTempPattern = (lockPath) => new RegExp(`^\\.${escapeRegExp2(basename16(lockPath))}\\.${UUID2}\\.lease$`);
|
|
114232
114284
|
async function replaceRecord(lockPath, content) {
|
|
114233
|
-
const temporary =
|
|
114285
|
+
const temporary = join109(dirname44(lockPath), `${leaseTempPrefix(lockPath)}${randomUUID7()}${LEASE_TEMP_SUFFIX}`);
|
|
114234
114286
|
try {
|
|
114235
114287
|
const handle = await open4(temporary, "wx", 384);
|
|
114236
114288
|
try {
|
|
@@ -114256,7 +114308,7 @@ async function removeLeftoverTemps(lockPath) {
|
|
|
114256
114308
|
}
|
|
114257
114309
|
for (const entry of entries) {
|
|
114258
114310
|
if (pattern.test(entry))
|
|
114259
|
-
await rm18(
|
|
114311
|
+
await rm18(join109(dirname44(lockPath), entry), { force: true });
|
|
114260
114312
|
}
|
|
114261
114313
|
}
|
|
114262
114314
|
async function currentRecord(lockPath) {
|
|
@@ -114393,7 +114445,7 @@ function promptLockAt(path, hooks = {}) {
|
|
|
114393
114445
|
var ROW_9B_DEFAULT = "reinstall-notice";
|
|
114394
114446
|
var helperAccess = () => sharedHelperAccess(() => {
|
|
114395
114447
|
const { entryCandidates } = keychainProcessState();
|
|
114396
|
-
return resolveHelperAccess([...entryCandidates, ...bundleCandidates(import.meta.url), ...machineCandidates(
|
|
114448
|
+
return resolveHelperAccess([...entryCandidates, ...bundleCandidates(import.meta.url), ...machineCandidates(homedir32())]);
|
|
114397
114449
|
});
|
|
114398
114450
|
function sharedHelperAccess(resolve) {
|
|
114399
114451
|
const state = keychainProcessState();
|
|
@@ -114430,7 +114482,7 @@ function createDarwinBackend(options) {
|
|
|
114430
114482
|
access: options.access,
|
|
114431
114483
|
cache: options.cache ?? processApprovalCache(),
|
|
114432
114484
|
background: options.background,
|
|
114433
|
-
takePromptLock: promptLockAt(
|
|
114485
|
+
takePromptLock: promptLockAt(join110(lockDirectoryIn(options.home ?? accountHome()), `${options.account}.keychain-prompt`)),
|
|
114434
114486
|
ownSilentGet: () => silently(() => options.secrets.get(key)),
|
|
114435
114487
|
ownOverwrite: (value) => silently(() => options.secrets.set({ ...key, value })),
|
|
114436
114488
|
ownDelete: (name) => name === options.account ? gatedSecrets(() => options.secrets.delete({ ...key, name })) : silently(() => options.secrets.delete({ ...key, name })),
|
|
@@ -114458,22 +114510,22 @@ async function guardHelperlessRead(service, account, choice = ROW_9B_DEFAULT, pr
|
|
|
114458
114510
|
}
|
|
114459
114511
|
|
|
114460
114512
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/store-binding.ts
|
|
114461
|
-
import { homedir as
|
|
114513
|
+
import { homedir as homedir33 } from "node:os";
|
|
114462
114514
|
|
|
114463
114515
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/creator-handoff.ts
|
|
114464
114516
|
init_bun_file_shim();
|
|
114465
114517
|
init_bun_spawn_shim();
|
|
114466
|
-
import { dirname as dirname47, posix as
|
|
114518
|
+
import { dirname as dirname47, posix as posix15 } from "node:path";
|
|
114467
114519
|
|
|
114468
114520
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/runtime-capabilities.ts
|
|
114469
114521
|
init_zod();
|
|
114470
114522
|
import { readFile as readFile37 } from "node:fs/promises";
|
|
114471
|
-
import { dirname as dirname46, join as
|
|
114523
|
+
import { dirname as dirname46, join as join111 } from "node:path";
|
|
114472
114524
|
var RUNTIME_CAPABILITIES_FILE = "omo-runtime-capabilities.json";
|
|
114473
114525
|
var RUNTIME_CAPABILITIES = { keychainHandoff: 1 };
|
|
114474
114526
|
var capabilitiesSchema = object({ keychainHandoff: number2().int() }).passthrough();
|
|
114475
114527
|
async function runtimeDeclaresKeychainHandoff(runtime) {
|
|
114476
|
-
const text = await readFile37(
|
|
114528
|
+
const text = await readFile37(join111(dirname46(runtime), RUNTIME_CAPABILITIES_FILE), "utf8").catch(() => null);
|
|
114477
114529
|
if (text === null)
|
|
114478
114530
|
return false;
|
|
114479
114531
|
try {
|
|
@@ -114492,9 +114544,9 @@ var HANDOFF_ENV = "OMO_KEYCHAIN_HANDOFF";
|
|
|
114492
114544
|
var HANDOFF_DEADLINE_MS = 45000;
|
|
114493
114545
|
function desktopRuntimeCandidates(home, arch = process.arch) {
|
|
114494
114546
|
const runtimeArch = arch === "arm64" ? "arm64" : "x64";
|
|
114495
|
-
return ["/Applications/OmO.app",
|
|
114547
|
+
return ["/Applications/OmO.app", posix15.join(home, "Applications", "OmO.app")].map((app) => ({
|
|
114496
114548
|
app,
|
|
114497
|
-
runtime:
|
|
114549
|
+
runtime: posix15.join(app, "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo")
|
|
114498
114550
|
}));
|
|
114499
114551
|
}
|
|
114500
114552
|
var verifyBundle = async (app, requirement) => {
|
|
@@ -114552,13 +114604,13 @@ function createCreatorHandOff(options) {
|
|
|
114552
114604
|
|
|
114553
114605
|
// packages/omo-opencode/src/cli/service-auth/keychain-helper/store-binding.ts
|
|
114554
114606
|
var readers = new Map;
|
|
114555
|
-
var
|
|
114556
|
-
var isInjectedSecrets = (api) => api[
|
|
114607
|
+
var INJECTED_SECRETS2 = Symbol.for("omo.test.injectedSecrets");
|
|
114608
|
+
var isInjectedSecrets = (api) => api[INJECTED_SECRETS2] === true;
|
|
114557
114609
|
var backends = new Map;
|
|
114558
114610
|
function processHandOff(origin) {
|
|
114559
114611
|
return () => {
|
|
114560
114612
|
const state = keychainProcessState();
|
|
114561
|
-
state.handOff ??= createCreatorHandOff({ candidates: desktopRuntimeCandidates(
|
|
114613
|
+
state.handOff ??= createCreatorHandOff({ candidates: desktopRuntimeCandidates(homedir33()), origin })();
|
|
114562
114614
|
return state.handOff;
|
|
114563
114615
|
};
|
|
114564
114616
|
}
|
|
@@ -114711,18 +114763,18 @@ var probeSecretServiceLock = () => new Promise((resolve) => {
|
|
|
114711
114763
|
import { AsyncLocalStorage as AsyncLocalStorage3 } from "node:async_hooks";
|
|
114712
114764
|
import { createHash as createHash11 } from "node:crypto";
|
|
114713
114765
|
import { mkdir as mkdir12 } from "node:fs/promises";
|
|
114714
|
-
import {
|
|
114715
|
-
import { join as join112 } from "node:path";
|
|
114766
|
+
import { join as join113 } from "node:path";
|
|
114716
114767
|
var held = new AsyncLocalStorage3;
|
|
114717
|
-
|
|
114768
|
+
var CREDENTIAL_LOCK_STALE_AFTER_MS = 60000;
|
|
114769
|
+
function credentialLockPaths(api, home = accountHome()) {
|
|
114718
114770
|
const id = createHash11("sha256").update(serviceOrigin(api)).digest("hex");
|
|
114719
|
-
const directory =
|
|
114720
|
-
return { directory, lock:
|
|
114771
|
+
const directory = lockDirectoryIn(home);
|
|
114772
|
+
return { directory, lock: join113(directory, `${id}.lock`), desktopRecord: join113(directory, `${id}.desktop-generation.json`) };
|
|
114721
114773
|
}
|
|
114722
|
-
function heldCredentialLease(api, home =
|
|
114774
|
+
function heldCredentialLease(api, home = accountHome()) {
|
|
114723
114775
|
return held.getStore()?.get(credentialLockPaths(api, home).lock);
|
|
114724
114776
|
}
|
|
114725
|
-
async function withCredentialLock(api, action, home =
|
|
114777
|
+
async function withCredentialLock(api, action, home = accountHome(), ownerTag = "cli-session") {
|
|
114726
114778
|
const { directory, lock } = credentialLockPaths(api, home);
|
|
114727
114779
|
const owned = held.getStore();
|
|
114728
114780
|
const outer = owned?.get(lock);
|
|
@@ -114731,7 +114783,7 @@ async function withCredentialLock(api, action, home = homedir33(), ownerTag = "c
|
|
|
114731
114783
|
await mkdir12(directory, { recursive: true, mode: 448 });
|
|
114732
114784
|
return withLock(lock, (lease) => held.run(new Map([...owned ?? [], [lock, lease]]), () => action(lease)), {
|
|
114733
114785
|
ownerTag,
|
|
114734
|
-
staleAfterMs:
|
|
114786
|
+
staleAfterMs: CREDENTIAL_LOCK_STALE_AFTER_MS
|
|
114735
114787
|
});
|
|
114736
114788
|
}
|
|
114737
114789
|
|
|
@@ -115099,14 +115151,14 @@ async function loginLoopback(session, options) {
|
|
|
115099
115151
|
|
|
115100
115152
|
// packages/memory-core/src/sync/device-retire.ts
|
|
115101
115153
|
import { createHash as createHash14, randomBytes as randomBytes6 } from "node:crypto";
|
|
115102
|
-
import { join as
|
|
115154
|
+
import { join as join116 } from "node:path";
|
|
115103
115155
|
|
|
115104
115156
|
// packages/memory-core/src/identity/layout.ts
|
|
115105
115157
|
import { homedir as homedir34 } from "node:os";
|
|
115106
|
-
import { join as
|
|
115158
|
+
import { join as join114, resolve as resolve31 } from "node:path";
|
|
115107
115159
|
var MEMORY_ROOT_ENV_VAR = "OMO_MEMORY_HOME";
|
|
115108
115160
|
function defaultMemoryRoot() {
|
|
115109
|
-
return
|
|
115161
|
+
return join114(homedir34(), ".omo", "memory");
|
|
115110
115162
|
}
|
|
115111
115163
|
function resolveMemoryRoot(env, cwd) {
|
|
115112
115164
|
const override = env[MEMORY_ROOT_ENV_VAR];
|
|
@@ -115116,13 +115168,13 @@ function resolveMemoryRoot(env, cwd) {
|
|
|
115116
115168
|
return resolve31(cwd, override);
|
|
115117
115169
|
}
|
|
115118
115170
|
// packages/memory-core/src/sync/pin-dir.ts
|
|
115119
|
-
import { join as
|
|
115120
|
-
var syncPinDir = (memoryRoot) =>
|
|
115171
|
+
import { join as join115 } from "node:path";
|
|
115172
|
+
var syncPinDir = (memoryRoot) => join115(memoryRoot, "sync-device");
|
|
115121
115173
|
|
|
115122
115174
|
// packages/memory-core/src/sync/device-retire.ts
|
|
115123
|
-
var trustAnchorRoot = (pinDir) =>
|
|
115175
|
+
var trustAnchorRoot = (pinDir) => join116(pinDir, "trust-anchor");
|
|
115124
115176
|
var trustAnchorKey = (account) => createHash14("sha256").update(account, "utf8").digest("base64url");
|
|
115125
|
-
var trustAnchorDir = (pinDir, account) =>
|
|
115177
|
+
var trustAnchorDir = (pinDir, account) => join116(trustAnchorRoot(pinDir), trustAnchorKey(account));
|
|
115126
115178
|
var hasLiveTrustAnchor = async (pinDir) => {
|
|
115127
115179
|
try {
|
|
115128
115180
|
return (await readdir17(trustAnchorRoot(pinDir))).some((name) => !name.includes(".retired-"));
|
|
@@ -115148,9 +115200,9 @@ import { homedir as homedir35 } from "node:os";
|
|
|
115148
115200
|
// packages/omo-opencode/src/cli/service-auth/signed-out-marker.ts
|
|
115149
115201
|
init_zod();
|
|
115150
115202
|
import { mkdir as mkdir13, readFile as readFile38, rename as rename10, rm as rm19, writeFile as writeFile18 } from "node:fs/promises";
|
|
115151
|
-
import { dirname as dirname48, join as
|
|
115203
|
+
import { dirname as dirname48, join as join117 } from "node:path";
|
|
115152
115204
|
var markerSchema = object({ device: string2().nullable(), at: string2() });
|
|
115153
|
-
var signedOutMarkerPath = (home, credential) =>
|
|
115205
|
+
var signedOutMarkerPath = (home, credential) => join117(home, ".omo", "account-state", `${credential}.signed-out.json`);
|
|
115154
115206
|
async function readSignedOutMarker(path) {
|
|
115155
115207
|
const text = await readFile38(path, "utf8").catch(() => null);
|
|
115156
115208
|
if (text === null)
|
|
@@ -115715,7 +115767,7 @@ async function boulder(options) {
|
|
|
115715
115767
|
}
|
|
115716
115768
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
115717
115769
|
import { spawn as spawn6 } from "node:child_process";
|
|
115718
|
-
import { existsSync as existsSync67, readFileSync as
|
|
115770
|
+
import { existsSync as existsSync67, readFileSync as readFileSync46, realpathSync as realpathSync14 } from "node:fs";
|
|
115719
115771
|
import { homedir as homedir36 } from "node:os";
|
|
115720
115772
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
115721
115773
|
function resolveCodexUlwLoopCommand(input = {}) {
|
|
@@ -115765,7 +115817,7 @@ function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
|
|
|
115765
115817
|
}
|
|
115766
115818
|
function isGeneratedRuntimeWrapper(candidate) {
|
|
115767
115819
|
try {
|
|
115768
|
-
return
|
|
115820
|
+
return readFileSync46(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
|
|
115769
115821
|
} catch (error) {
|
|
115770
115822
|
if (error instanceof Error)
|
|
115771
115823
|
return false;
|
|
@@ -116211,7 +116263,7 @@ prunes.
|
|
|
116211
116263
|
|
|
116212
116264
|
// packages/omo-opencode/src/cli/config-migrate.ts
|
|
116213
116265
|
init_startup_migration();
|
|
116214
|
-
import { posix as
|
|
116266
|
+
import { posix as posix16 } from "node:path";
|
|
116215
116267
|
function reports(result) {
|
|
116216
116268
|
return result.results.map((entry) => ({
|
|
116217
116269
|
diagnostics: entry.diagnostics,
|
|
@@ -116245,7 +116297,7 @@ function runConfigMigrate(options = {}) {
|
|
|
116245
116297
|
dryRun: options.dryRun ?? false,
|
|
116246
116298
|
environment,
|
|
116247
116299
|
...homeDir === undefined ? {} : { env: { HOME: homeDir }, homeDir },
|
|
116248
|
-
pathOperations:
|
|
116300
|
+
pathOperations: posix16
|
|
116249
116301
|
});
|
|
116250
116302
|
const report = reports(result);
|
|
116251
116303
|
const response = {
|