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.
Files changed (80) hide show
  1. package/dist/cli/index.js +210 -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 +210 -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/SKILL.md +21 -6
  58. package/packages/omo-codex/plugin/skills/browser/references/commands.md +41 -4
  59. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +15 -4
  60. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +4 -2
  61. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/LICENSE +21 -0
  62. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +4 -3
  63. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +4 -3
  64. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +1 -1
  65. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +6 -6
  66. package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +2 -2
  67. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +5 -4
  68. package/packages/omo-codex/scripts/install-dist/install-local.mjs +3 -3
  69. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +11 -7
  70. package/packages/shared-skills/skills/browser/SKILL.md +21 -6
  71. package/packages/shared-skills/skills/browser/references/commands.md +41 -4
  72. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +15 -4
  73. package/packages/shared-skills/skills/browser/references/recipes/1password.md +4 -2
  74. package/packages/shared-skills/skills/browser/runtime/omowright/LICENSE +21 -0
  75. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +4 -3
  76. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +4 -3
  77. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +1 -1
  78. package/packages/shared-skills/skills/ulw-research/SKILL.md +6 -6
  79. package/packages/shared-skills/skills/ulw-research/references/research-collection.md +2 -2
  80. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +5 -4
@@ -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.65",
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.6-3",
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.65",
2389
- "oh-my-opencode-darwin-x64": "5.1.65",
2390
- "oh-my-opencode-darwin-x64-baseline": "5.1.65",
2391
- "oh-my-opencode-linux-arm64": "5.1.65",
2392
- "oh-my-opencode-linux-arm64-musl": "5.1.65",
2393
- "oh-my-opencode-linux-x64": "5.1.65",
2394
- "oh-my-opencode-linux-x64-baseline": "5.1.65",
2395
- "oh-my-opencode-linux-x64-musl": "5.1.65",
2396
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.65",
2397
- "oh-my-opencode-windows-arm64": "5.1.65",
2398
- "oh-my-opencode-windows-x64": "5.1.65",
2399
- "oh-my-opencode-windows-x64-baseline": "5.1.65"
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.65",
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.6-3",
109604
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.6-3",
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 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
+ }
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 join106, posix as posix13 } from "node:path";
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 [join106(root, "bin", "darwin", "omo-keychain"), join106(root, "omo-keychain")];
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
- posix13.join(home, "Applications", "OmO.app", "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo-keychain"),
112991
- 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")
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 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";
113009
113061
  import { tmpdir as tmpdir6 } from "node:os";
113010
- import { basename as basename15, join as join107 } from "node:path";
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(join107(root, entry), { recursive: true, force: true });
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(join107(tmpdir6(), `${DIR_PREFIX}${process.pid}-`));
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 = join107(dir, `${crypto.randomUUID()}-${basename15(source)}`);
113110
+ const target = join108(dir, `${crypto.randomUUID()}-${basename15(source)}`);
113059
113111
  try {
113060
- await copyFile4(source, target, constants13.COPYFILE_EXCL);
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: accessSync5,
113727
+ accessSync: accessSync6,
113676
113728
  chmodSync: chmodSync7,
113677
113729
  fsyncSync: fsyncSync3,
113678
113730
  linkSync,
113679
113731
  lstatSync: lstatSync5,
113680
- mkdirSync: mkdirSync19,
113681
- readFileSync: readFileSync44,
113732
+ mkdirSync: mkdirSync20,
113733
+ readFileSync: readFileSync45,
113682
113734
  readdirSync: readdirSync15,
113683
113735
  realpathSync: realpathSync13,
113684
- statSync: statSync8,
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 join108 } from "node:path";
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 = join108(dirname44(lockPath), `${leaseTempPrefix(lockPath)}${randomUUID7()}${LEASE_TEMP_SUFFIX}`);
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(join108(dirname44(lockPath), entry), { force: true });
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(homedir31())]);
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(join109(options.home ?? homedir31(), ".omo", "session-locks", `${options.account}.keychain-prompt`)),
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 homedir32 } from "node:os";
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 posix14 } from "node:path";
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 join110 } from "node:path";
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(join110(dirname46(runtime), RUNTIME_CAPABILITIES_FILE), "utf8").catch(() => null);
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", posix14.join(home, "Applications", "OmO.app")].map((app) => ({
114547
+ return ["/Applications/OmO.app", posix15.join(home, "Applications", "OmO.app")].map((app) => ({
114496
114548
  app,
114497
- runtime: posix14.join(app, "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo")
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 INJECTED_SECRETS = Symbol.for("omo.test.injectedSecrets");
114556
- var isInjectedSecrets = (api) => api[INJECTED_SECRETS] === true;
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(homedir32()), origin })();
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 { homedir as homedir33 } from "node:os";
114715
- import { join as join112 } from "node:path";
114766
+ import { join as join113 } from "node:path";
114716
114767
  var held = new AsyncLocalStorage3;
114717
- function credentialLockPaths(api, home = homedir33()) {
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 = join112(home, ".omo", "session-locks");
114720
- 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`) };
114721
114773
  }
114722
- function heldCredentialLease(api, home = homedir33()) {
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 = homedir33(), ownerTag = "cli-session") {
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: Number.POSITIVE_INFINITY
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 join115 } from "node:path";
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 join113, resolve as resolve31 } from "node:path";
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 join113(homedir34(), ".omo", "memory");
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 join114 } from "node:path";
115120
- var syncPinDir = (memoryRoot) => join114(memoryRoot, "sync-device");
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) => join115(pinDir, "trust-anchor");
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) => join115(trustAnchorRoot(pinDir), trustAnchorKey(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 join116 } from "node:path";
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) => join116(home, ".omo", "account-state", `${credential}.signed-out.json`);
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 readFileSync45, realpathSync as realpathSync14 } from "node:fs";
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 readFileSync45(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
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 posix15 } from "node:path";
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: posix15
116300
+ pathOperations: posix16
116249
116301
  });
116250
116302
  const report = reports(result);
116251
116303
  const response = {