lazycodex-ai 5.1.66 → 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.
Files changed (62) hide show
  1. package/dist/cli/index.js +209 -158
  2. package/dist/cli/service-auth/account-home.d.ts +47 -0
  3. package/dist/cli/service-auth/account-home.fixture.d.ts +1 -0
  4. package/dist/cli/service-auth/credential-lock.d.ts +2 -0
  5. package/dist/cli/service-auth/index.d.ts +1 -1
  6. package/dist/cli-node/index.js +209 -158
  7. package/package.json +1 -1
  8. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  9. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +1 -1
  10. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  11. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  12. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  15. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  19. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  20. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  22. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  26. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  32. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  33. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  34. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  35. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  36. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  37. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  54. package/packages/omo-codex/plugin/package-lock.json +12 -12
  55. package/packages/omo-codex/plugin/package.json +1 -1
  56. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +11 -7
  57. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/LICENSE +21 -0
  58. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +4 -3
  59. package/packages/omo-codex/scripts/install-dist/install-local.mjs +3 -3
  60. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +11 -7
  61. package/packages/shared-skills/skills/browser/runtime/omowright/LICENSE +21 -0
  62. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +4 -3
@@ -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.66",
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.9-2",
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.66",
2389
- "oh-my-opencode-darwin-x64": "5.1.66",
2390
- "oh-my-opencode-darwin-x64-baseline": "5.1.66",
2391
- "oh-my-opencode-linux-arm64": "5.1.66",
2392
- "oh-my-opencode-linux-arm64-musl": "5.1.66",
2393
- "oh-my-opencode-linux-x64": "5.1.66",
2394
- "oh-my-opencode-linux-x64-baseline": "5.1.66",
2395
- "oh-my-opencode-linux-x64-musl": "5.1.66",
2396
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.66",
2397
- "oh-my-opencode-windows-arm64": "5.1.66",
2398
- "oh-my-opencode-windows-x64": "5.1.66",
2399
- "oh-my-opencode-windows-x64-baseline": "5.1.66"
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-1",
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: launchRungs([
9447
+ fallbackChain: [
9500
9448
  {
9501
9449
  providers: ["anthropic", "github-copilot", "opencode"],
9502
- model: FABLE_55_LAUNCH.id,
9450
+ model: LATEST_MODEL_BY_FAMILY.claudeFable,
9503
9451
  variant: "xhigh"
9504
9452
  },
9505
9453
  {
9506
9454
  providers: ["anthropic", "github-copilot", "opencode"],
9507
- model: LATEST_MODEL_BY_FAMILY.claudeFable,
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: launchRungs([
9472
+ fallbackChain: [
9525
9473
  {
9526
9474
  providers: ["anthropic", "github-copilot", "opencode"],
9527
- model: FABLE_55_LAUNCH.id,
9475
+ model: LATEST_MODEL_BY_FAMILY.claudeFable,
9528
9476
  variant: "max"
9529
9477
  },
9530
9478
  {
9531
9479
  providers: ["anthropic", "github-copilot", "opencode"],
9532
- model: LATEST_MODEL_BY_FAMILY.claudeFable,
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: launchRungs([
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: FABLE_55_LAUNCH.id,
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: LATEST_MODEL_BY_FAMILY.claudeFable,
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: launchRungs([
9614
+ fallbackChain: [
9668
9615
  {
9669
9616
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
9670
- model: FABLE_55_LAUNCH.id,
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: LATEST_MODEL_BY_FAMILY.claudeFable,
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
- const models = { ...snapshotJson.models, ...SUPPLEMENTAL_MODEL_CAPABILITIES };
10869
- const generatedLaunchRow = snapshotJson.models[FABLE_55_LAUNCH.id];
10870
- if (generatedLaunchRow)
10871
- models[FABLE_55_LAUNCH.id] = fillGaps(generatedLaunchRow, FABLE_55_LAUNCH);
10872
- return { ...snapshotJson, models };
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/${launchDefaultModelId()}`, variant: "max" },
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.66",
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.",
@@ -109601,8 +109550,8 @@ var package_default3 = {
109601
109550
  },
109602
109551
  dependencies: {
109603
109552
  "@clack/prompts": "^1.8.1",
109604
- "@code-yeongyu/senpi": "2026.11.9-2",
109605
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.9-2",
109553
+ "@code-yeongyu/senpi": "2026.11.10",
109554
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.10",
109606
109555
  "@modelcontextprotocol/sdk": "^1.30.0",
109607
109556
  "@oh-my-opencode/agents-md-core": "workspace:*",
109608
109557
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -112862,8 +112811,110 @@ import { createHash as createHash12, randomUUID as randomUUID8 } from "node:cryp
112862
112811
  import { basename as basename17 } from "node:path";
112863
112812
 
112864
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";
112865
112820
  import { homedir as homedir31 } from "node:os";
112866
- import { join as join109 } from "node:path";
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
+ }
112867
112918
 
112868
112919
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/client.ts
112869
112920
  init_zod();
@@ -112978,18 +113029,18 @@ async function callHelper(path, call, options = {}) {
112978
113029
  }
112979
113030
 
112980
113031
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/location.ts
112981
- import { dirname as dirname42, join as join106, posix as posix13 } from "node:path";
113032
+ import { dirname as dirname42, join as join107, posix as posix14 } from "node:path";
112982
113033
  import { fileURLToPath as fileURLToPath8 } from "node:url";
112983
113034
  function bundleCandidates(moduleUrl) {
112984
113035
  const root = dirname42(dirname42(dirname42(fileURLToPath8(moduleUrl))));
112985
- return [join106(root, "bin", "darwin", "omo-keychain"), join106(root, "omo-keychain")];
113036
+ return [join107(root, "bin", "darwin", "omo-keychain"), join107(root, "omo-keychain")];
112986
113037
  }
112987
113038
  function machineCandidates(home, arch = process.arch) {
112988
113039
  const runtimeArch = arch === "arm64" ? "arm64" : "x64";
112989
113040
  return [
112990
113041
  `/Applications/OmO.app/Contents/Resources/omo-runtime/darwin-${runtimeArch}/omo-keychain`,
112991
- posix13.join(home, "Applications", "OmO.app", "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo-keychain"),
112992
- posix13.join(home, ".bun", "install", "global", "node_modules", "omo-ai", "bin", "darwin", "omo-keychain")
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")
112993
113044
  ];
112994
113045
  }
112995
113046
  async function locateHelper(candidates, verify) {
@@ -113006,9 +113057,9 @@ async function locateHelper(candidates, verify) {
113006
113057
 
113007
113058
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/pin.ts
113008
113059
  import { readdirSync as readdirSync14, rmSync as rmSync9 } from "node:fs";
113009
- import { chmod as chmod2, copyFile as copyFile4, constants as constants13, mkdtemp as mkdtemp2, rm as rm16, stat as stat8 } from "node:fs/promises";
113060
+ import { chmod as chmod2, copyFile as copyFile4, constants as constants14, mkdtemp as mkdtemp2, rm as rm16, stat as stat8 } from "node:fs/promises";
113010
113061
  import { tmpdir as tmpdir6 } from "node:os";
113011
- import { basename as basename15, join as join107 } from "node:path";
113062
+ import { basename as basename15, join as join108 } from "node:path";
113012
113063
  var DIR_PREFIX = "omo-keychain-";
113013
113064
  var OWNED_DIR = new RegExp(`^${DIR_PREFIX}(\\d+)-`);
113014
113065
  var isAlive = (pid) => {
@@ -113032,7 +113083,7 @@ function sweepDeadPinDirs(root = tmpdir6()) {
113032
113083
  if (owner === undefined || Number(owner) === process.pid || isAlive(Number(owner)))
113033
113084
  continue;
113034
113085
  try {
113035
- rmSync9(join107(root, entry), { recursive: true, force: true });
113086
+ rmSync9(join108(root, entry), { recursive: true, force: true });
113036
113087
  } catch {
113037
113088
  continue;
113038
113089
  }
@@ -113045,7 +113096,7 @@ async function processPinDir() {
113045
113096
  if (processDir !== undefined)
113046
113097
  return processDir;
113047
113098
  sweepDeadPinDirs();
113048
- const dir = await mkdtemp2(join107(tmpdir6(), `${DIR_PREFIX}${process.pid}-`));
113099
+ const dir = await mkdtemp2(join108(tmpdir6(), `${DIR_PREFIX}${process.pid}-`));
113049
113100
  process.once("exit", () => rmSync9(dir, { recursive: true, force: true }));
113050
113101
  processDir = dir;
113051
113102
  return dir;
@@ -113056,9 +113107,9 @@ async function sourceIdentity(source) {
113056
113107
  return `${source}\x00${info.dev}\x00${info.ino}\x00${info.size}\x00${info.mtimeMs}\x00${info.ctimeMs}`;
113057
113108
  }
113058
113109
  async function copyAndVerify(source, verify, dir) {
113059
- const target = join107(dir, `${crypto.randomUUID()}-${basename15(source)}`);
113110
+ const target = join108(dir, `${crypto.randomUUID()}-${basename15(source)}`);
113060
113111
  try {
113061
- await copyFile4(source, target, constants13.COPYFILE_EXCL);
113112
+ await copyFile4(source, target, constants14.COPYFILE_EXCL);
113062
113113
  await chmod2(target, 320);
113063
113114
  } catch (error) {
113064
113115
  await rm16(target, { force: true });
@@ -113673,16 +113724,16 @@ var {
113673
113724
  unlink: unlink3
113674
113725
  } = promises;
113675
113726
  var {
113676
- accessSync: accessSync5,
113727
+ accessSync: accessSync6,
113677
113728
  chmodSync: chmodSync7,
113678
113729
  fsyncSync: fsyncSync3,
113679
113730
  linkSync,
113680
113731
  lstatSync: lstatSync5,
113681
- mkdirSync: mkdirSync19,
113682
- readFileSync: readFileSync44,
113732
+ mkdirSync: mkdirSync20,
113733
+ readFileSync: readFileSync45,
113683
113734
  readdirSync: readdirSync15,
113684
113735
  realpathSync: realpathSync13,
113685
- statSync: statSync8,
113736
+ statSync: statSync9,
113686
113737
  unlinkSync: unlinkSync10,
113687
113738
  writeFileSync: writeFileSync17,
113688
113739
  writeSync
@@ -114152,7 +114203,7 @@ async function publishLockRecord(lockPath, record) {
114152
114203
  // packages/team-core/src/team-state-store/lock-lease.ts
114153
114204
  import { randomUUID as randomUUID7 } from "node:crypto";
114154
114205
  import { open as open4, readdir as readdir18, readFile as readFile36, rename as rename9, rm as rm18 } from "node:fs/promises";
114155
- import { basename as basename16, dirname as dirname44, join as join108 } from "node:path";
114206
+ import { basename as basename16, dirname as dirname44, join as join109 } from "node:path";
114156
114207
 
114157
114208
  // packages/team-core/src/team-state-store/lock-reclaim.ts
114158
114209
  import { createHash as createHash10 } from "node:crypto";
@@ -114231,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}";
114231
114282
  var escapeRegExp2 = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
114232
114283
  var leaseTempPattern = (lockPath) => new RegExp(`^\\.${escapeRegExp2(basename16(lockPath))}\\.${UUID2}\\.lease$`);
114233
114284
  async function replaceRecord(lockPath, content) {
114234
- const temporary = join108(dirname44(lockPath), `${leaseTempPrefix(lockPath)}${randomUUID7()}${LEASE_TEMP_SUFFIX}`);
114285
+ const temporary = join109(dirname44(lockPath), `${leaseTempPrefix(lockPath)}${randomUUID7()}${LEASE_TEMP_SUFFIX}`);
114235
114286
  try {
114236
114287
  const handle = await open4(temporary, "wx", 384);
114237
114288
  try {
@@ -114257,7 +114308,7 @@ async function removeLeftoverTemps(lockPath) {
114257
114308
  }
114258
114309
  for (const entry of entries) {
114259
114310
  if (pattern.test(entry))
114260
- await rm18(join108(dirname44(lockPath), entry), { force: true });
114311
+ await rm18(join109(dirname44(lockPath), entry), { force: true });
114261
114312
  }
114262
114313
  }
114263
114314
  async function currentRecord(lockPath) {
@@ -114394,7 +114445,7 @@ function promptLockAt(path, hooks = {}) {
114394
114445
  var ROW_9B_DEFAULT = "reinstall-notice";
114395
114446
  var helperAccess = () => sharedHelperAccess(() => {
114396
114447
  const { entryCandidates } = keychainProcessState();
114397
- return resolveHelperAccess([...entryCandidates, ...bundleCandidates(import.meta.url), ...machineCandidates(homedir31())]);
114448
+ return resolveHelperAccess([...entryCandidates, ...bundleCandidates(import.meta.url), ...machineCandidates(homedir32())]);
114398
114449
  });
114399
114450
  function sharedHelperAccess(resolve) {
114400
114451
  const state = keychainProcessState();
@@ -114431,7 +114482,7 @@ function createDarwinBackend(options) {
114431
114482
  access: options.access,
114432
114483
  cache: options.cache ?? processApprovalCache(),
114433
114484
  background: options.background,
114434
- takePromptLock: promptLockAt(join109(options.home ?? homedir31(), ".omo", "session-locks", `${options.account}.keychain-prompt`)),
114485
+ takePromptLock: promptLockAt(join110(lockDirectoryIn(options.home ?? accountHome()), `${options.account}.keychain-prompt`)),
114435
114486
  ownSilentGet: () => silently(() => options.secrets.get(key)),
114436
114487
  ownOverwrite: (value) => silently(() => options.secrets.set({ ...key, value })),
114437
114488
  ownDelete: (name) => name === options.account ? gatedSecrets(() => options.secrets.delete({ ...key, name })) : silently(() => options.secrets.delete({ ...key, name })),
@@ -114459,22 +114510,22 @@ async function guardHelperlessRead(service, account, choice = ROW_9B_DEFAULT, pr
114459
114510
  }
114460
114511
 
114461
114512
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/store-binding.ts
114462
- import { homedir as homedir32 } from "node:os";
114513
+ import { homedir as homedir33 } from "node:os";
114463
114514
 
114464
114515
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/creator-handoff.ts
114465
114516
  init_bun_file_shim();
114466
114517
  init_bun_spawn_shim();
114467
- import { dirname as dirname47, posix as posix14 } from "node:path";
114518
+ import { dirname as dirname47, posix as posix15 } from "node:path";
114468
114519
 
114469
114520
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/runtime-capabilities.ts
114470
114521
  init_zod();
114471
114522
  import { readFile as readFile37 } from "node:fs/promises";
114472
- import { dirname as dirname46, join as join110 } from "node:path";
114523
+ import { dirname as dirname46, join as join111 } from "node:path";
114473
114524
  var RUNTIME_CAPABILITIES_FILE = "omo-runtime-capabilities.json";
114474
114525
  var RUNTIME_CAPABILITIES = { keychainHandoff: 1 };
114475
114526
  var capabilitiesSchema = object({ keychainHandoff: number2().int() }).passthrough();
114476
114527
  async function runtimeDeclaresKeychainHandoff(runtime) {
114477
- const text = await readFile37(join110(dirname46(runtime), RUNTIME_CAPABILITIES_FILE), "utf8").catch(() => null);
114528
+ const text = await readFile37(join111(dirname46(runtime), RUNTIME_CAPABILITIES_FILE), "utf8").catch(() => null);
114478
114529
  if (text === null)
114479
114530
  return false;
114480
114531
  try {
@@ -114493,9 +114544,9 @@ var HANDOFF_ENV = "OMO_KEYCHAIN_HANDOFF";
114493
114544
  var HANDOFF_DEADLINE_MS = 45000;
114494
114545
  function desktopRuntimeCandidates(home, arch = process.arch) {
114495
114546
  const runtimeArch = arch === "arm64" ? "arm64" : "x64";
114496
- return ["/Applications/OmO.app", posix14.join(home, "Applications", "OmO.app")].map((app) => ({
114547
+ return ["/Applications/OmO.app", posix15.join(home, "Applications", "OmO.app")].map((app) => ({
114497
114548
  app,
114498
- runtime: posix14.join(app, "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo")
114549
+ runtime: posix15.join(app, "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo")
114499
114550
  }));
114500
114551
  }
114501
114552
  var verifyBundle = async (app, requirement) => {
@@ -114553,13 +114604,13 @@ function createCreatorHandOff(options) {
114553
114604
 
114554
114605
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/store-binding.ts
114555
114606
  var readers = new Map;
114556
- var INJECTED_SECRETS = Symbol.for("omo.test.injectedSecrets");
114557
- var isInjectedSecrets = (api) => api[INJECTED_SECRETS] === true;
114607
+ var INJECTED_SECRETS2 = Symbol.for("omo.test.injectedSecrets");
114608
+ var isInjectedSecrets = (api) => api[INJECTED_SECRETS2] === true;
114558
114609
  var backends = new Map;
114559
114610
  function processHandOff(origin) {
114560
114611
  return () => {
114561
114612
  const state = keychainProcessState();
114562
- state.handOff ??= createCreatorHandOff({ candidates: desktopRuntimeCandidates(homedir32()), origin })();
114613
+ state.handOff ??= createCreatorHandOff({ candidates: desktopRuntimeCandidates(homedir33()), origin })();
114563
114614
  return state.handOff;
114564
114615
  };
114565
114616
  }
@@ -114712,18 +114763,18 @@ var probeSecretServiceLock = () => new Promise((resolve) => {
114712
114763
  import { AsyncLocalStorage as AsyncLocalStorage3 } from "node:async_hooks";
114713
114764
  import { createHash as createHash11 } from "node:crypto";
114714
114765
  import { mkdir as mkdir12 } from "node:fs/promises";
114715
- import { homedir as homedir33 } from "node:os";
114716
- import { join as join112 } from "node:path";
114766
+ import { join as join113 } from "node:path";
114717
114767
  var held = new AsyncLocalStorage3;
114718
- function credentialLockPaths(api, home = homedir33()) {
114768
+ var CREDENTIAL_LOCK_STALE_AFTER_MS = 60000;
114769
+ function credentialLockPaths(api, home = accountHome()) {
114719
114770
  const id = createHash11("sha256").update(serviceOrigin(api)).digest("hex");
114720
- const directory = join112(home, ".omo", "session-locks");
114721
- return { directory, lock: join112(directory, `${id}.lock`), desktopRecord: join112(directory, `${id}.desktop-generation.json`) };
114771
+ const directory = lockDirectoryIn(home);
114772
+ return { directory, lock: join113(directory, `${id}.lock`), desktopRecord: join113(directory, `${id}.desktop-generation.json`) };
114722
114773
  }
114723
- function heldCredentialLease(api, home = homedir33()) {
114774
+ function heldCredentialLease(api, home = accountHome()) {
114724
114775
  return held.getStore()?.get(credentialLockPaths(api, home).lock);
114725
114776
  }
114726
- async function withCredentialLock(api, action, home = homedir33(), ownerTag = "cli-session") {
114777
+ async function withCredentialLock(api, action, home = accountHome(), ownerTag = "cli-session") {
114727
114778
  const { directory, lock } = credentialLockPaths(api, home);
114728
114779
  const owned = held.getStore();
114729
114780
  const outer = owned?.get(lock);
@@ -114732,7 +114783,7 @@ async function withCredentialLock(api, action, home = homedir33(), ownerTag = "c
114732
114783
  await mkdir12(directory, { recursive: true, mode: 448 });
114733
114784
  return withLock(lock, (lease) => held.run(new Map([...owned ?? [], [lock, lease]]), () => action(lease)), {
114734
114785
  ownerTag,
114735
- staleAfterMs: Number.POSITIVE_INFINITY
114786
+ staleAfterMs: CREDENTIAL_LOCK_STALE_AFTER_MS
114736
114787
  });
114737
114788
  }
114738
114789
 
@@ -115100,14 +115151,14 @@ async function loginLoopback(session, options) {
115100
115151
 
115101
115152
  // packages/memory-core/src/sync/device-retire.ts
115102
115153
  import { createHash as createHash14, randomBytes as randomBytes6 } from "node:crypto";
115103
- import { join as join115 } from "node:path";
115154
+ import { join as join116 } from "node:path";
115104
115155
 
115105
115156
  // packages/memory-core/src/identity/layout.ts
115106
115157
  import { homedir as homedir34 } from "node:os";
115107
- import { join as join113, resolve as resolve31 } from "node:path";
115158
+ import { join as join114, resolve as resolve31 } from "node:path";
115108
115159
  var MEMORY_ROOT_ENV_VAR = "OMO_MEMORY_HOME";
115109
115160
  function defaultMemoryRoot() {
115110
- return join113(homedir34(), ".omo", "memory");
115161
+ return join114(homedir34(), ".omo", "memory");
115111
115162
  }
115112
115163
  function resolveMemoryRoot(env, cwd) {
115113
115164
  const override = env[MEMORY_ROOT_ENV_VAR];
@@ -115117,13 +115168,13 @@ function resolveMemoryRoot(env, cwd) {
115117
115168
  return resolve31(cwd, override);
115118
115169
  }
115119
115170
  // packages/memory-core/src/sync/pin-dir.ts
115120
- import { join as join114 } from "node:path";
115121
- var syncPinDir = (memoryRoot) => join114(memoryRoot, "sync-device");
115171
+ import { join as join115 } from "node:path";
115172
+ var syncPinDir = (memoryRoot) => join115(memoryRoot, "sync-device");
115122
115173
 
115123
115174
  // packages/memory-core/src/sync/device-retire.ts
115124
- var trustAnchorRoot = (pinDir) => join115(pinDir, "trust-anchor");
115175
+ var trustAnchorRoot = (pinDir) => join116(pinDir, "trust-anchor");
115125
115176
  var trustAnchorKey = (account) => createHash14("sha256").update(account, "utf8").digest("base64url");
115126
- var trustAnchorDir = (pinDir, account) => join115(trustAnchorRoot(pinDir), trustAnchorKey(account));
115177
+ var trustAnchorDir = (pinDir, account) => join116(trustAnchorRoot(pinDir), trustAnchorKey(account));
115127
115178
  var hasLiveTrustAnchor = async (pinDir) => {
115128
115179
  try {
115129
115180
  return (await readdir17(trustAnchorRoot(pinDir))).some((name) => !name.includes(".retired-"));
@@ -115149,9 +115200,9 @@ import { homedir as homedir35 } from "node:os";
115149
115200
  // packages/omo-opencode/src/cli/service-auth/signed-out-marker.ts
115150
115201
  init_zod();
115151
115202
  import { mkdir as mkdir13, readFile as readFile38, rename as rename10, rm as rm19, writeFile as writeFile18 } from "node:fs/promises";
115152
- import { dirname as dirname48, join as join116 } from "node:path";
115203
+ import { dirname as dirname48, join as join117 } from "node:path";
115153
115204
  var markerSchema = object({ device: string2().nullable(), at: string2() });
115154
- var signedOutMarkerPath = (home, credential) => join116(home, ".omo", "account-state", `${credential}.signed-out.json`);
115205
+ var signedOutMarkerPath = (home, credential) => join117(home, ".omo", "account-state", `${credential}.signed-out.json`);
115155
115206
  async function readSignedOutMarker(path) {
115156
115207
  const text = await readFile38(path, "utf8").catch(() => null);
115157
115208
  if (text === null)
@@ -115716,7 +115767,7 @@ async function boulder(options) {
115716
115767
  }
115717
115768
  // packages/omo-opencode/src/cli/codex-ulw-loop.ts
115718
115769
  import { spawn as spawn6 } from "node:child_process";
115719
- import { existsSync as existsSync67, readFileSync as readFileSync45, realpathSync as realpathSync14 } from "node:fs";
115770
+ import { existsSync as existsSync67, readFileSync as readFileSync46, realpathSync as realpathSync14 } from "node:fs";
115720
115771
  import { homedir as homedir36 } from "node:os";
115721
115772
  var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
115722
115773
  function resolveCodexUlwLoopCommand(input = {}) {
@@ -115766,7 +115817,7 @@ function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
115766
115817
  }
115767
115818
  function isGeneratedRuntimeWrapper(candidate) {
115768
115819
  try {
115769
- return readFileSync45(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
115820
+ return readFileSync46(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
115770
115821
  } catch (error) {
115771
115822
  if (error instanceof Error)
115772
115823
  return false;
@@ -116212,7 +116263,7 @@ prunes.
116212
116263
 
116213
116264
  // packages/omo-opencode/src/cli/config-migrate.ts
116214
116265
  init_startup_migration();
116215
- import { posix as posix15 } from "node:path";
116266
+ import { posix as posix16 } from "node:path";
116216
116267
  function reports(result) {
116217
116268
  return result.results.map((entry) => ({
116218
116269
  diagnostics: entry.diagnostics,
@@ -116246,7 +116297,7 @@ function runConfigMigrate(options = {}) {
116246
116297
  dryRun: options.dryRun ?? false,
116247
116298
  environment,
116248
116299
  ...homeDir === undefined ? {} : { env: { HOME: homeDir }, homeDir },
116249
- pathOperations: posix15
116300
+ pathOperations: posix16
116250
116301
  });
116251
116302
  const report = reports(result);
116252
116303
  const response = {