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
package/dist/cli/index.js CHANGED
@@ -2132,7 +2132,7 @@ var package_default;
2132
2132
  var init_package = __esm(() => {
2133
2133
  package_default = {
2134
2134
  name: "oh-my-opencode",
2135
- version: "5.1.65",
2135
+ version: "5.1.68",
2136
2136
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2137
2137
  main: "./dist/index.js",
2138
2138
  types: "dist/index.d.ts",
@@ -2319,7 +2319,7 @@ var init_package = __esm(() => {
2319
2319
  },
2320
2320
  devDependencies: {
2321
2321
  "@clack/prompts": "^1.8.1",
2322
- "@code-yeongyu/senpi": "2026.11.6-3",
2322
+ "@code-yeongyu/senpi": "2026.11.10",
2323
2323
  "@modelcontextprotocol/sdk": "^1.30.0",
2324
2324
  "@oh-my-opencode/agents-md-core": "workspace:*",
2325
2325
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -2384,18 +2384,18 @@ var init_package = __esm(() => {
2384
2384
  typescript: "^7.0.2"
2385
2385
  },
2386
2386
  optionalDependencies: {
2387
- "oh-my-opencode-darwin-arm64": "5.1.65",
2388
- "oh-my-opencode-darwin-x64": "5.1.65",
2389
- "oh-my-opencode-darwin-x64-baseline": "5.1.65",
2390
- "oh-my-opencode-linux-arm64": "5.1.65",
2391
- "oh-my-opencode-linux-arm64-musl": "5.1.65",
2392
- "oh-my-opencode-linux-x64": "5.1.65",
2393
- "oh-my-opencode-linux-x64-baseline": "5.1.65",
2394
- "oh-my-opencode-linux-x64-musl": "5.1.65",
2395
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.65",
2396
- "oh-my-opencode-windows-arm64": "5.1.65",
2397
- "oh-my-opencode-windows-x64": "5.1.65",
2398
- "oh-my-opencode-windows-x64-baseline": "5.1.65"
2387
+ "oh-my-opencode-darwin-arm64": "5.1.68",
2388
+ "oh-my-opencode-darwin-x64": "5.1.68",
2389
+ "oh-my-opencode-darwin-x64-baseline": "5.1.68",
2390
+ "oh-my-opencode-linux-arm64": "5.1.68",
2391
+ "oh-my-opencode-linux-arm64-musl": "5.1.68",
2392
+ "oh-my-opencode-linux-x64": "5.1.68",
2393
+ "oh-my-opencode-linux-x64-baseline": "5.1.68",
2394
+ "oh-my-opencode-linux-x64-musl": "5.1.68",
2395
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.68",
2396
+ "oh-my-opencode-windows-arm64": "5.1.68",
2397
+ "oh-my-opencode-windows-x64": "5.1.68",
2398
+ "oh-my-opencode-windows-x64-baseline": "5.1.68"
2399
2399
  },
2400
2400
  overrides: {
2401
2401
  hono: "^4.13.8",
@@ -8080,7 +8080,7 @@ var init_latest_models = __esm(() => {
8080
8080
  claudeOpus: "claude-opus-5-5",
8081
8081
  claudeSonnet: "claude-sonnet-5-5",
8082
8082
  claudeHaiku: "claude-haiku-5-5",
8083
- claudeFable: "claude-fable-5-1",
8083
+ claudeFable: "claude-fable-5-2",
8084
8084
  gptAstra: "gpt-6-astra",
8085
8085
  gptSol: "gpt-6.1-sol",
8086
8086
  gptSolFast: "gpt-6.1-sol-fast",
@@ -9346,61 +9346,9 @@ var init_file_reference_resolver = __esm(() => {
9346
9346
  init_logger2();
9347
9347
  });
9348
9348
 
9349
- // packages/model-core/src/fable-55-launch.ts
9350
- function isFable55Model(model) {
9351
- const modelId = model.split("/").pop() ?? model;
9352
- return modelId.replaceAll(".", "-") === FABLE_55_LAUNCH.id;
9353
- }
9354
- function selectLaunchRungs(rungs, gate, onRejected) {
9355
- return rungs.filter((rung) => {
9356
- if (!isFable55Model(rung.model))
9357
- return true;
9358
- if (!gate.released)
9359
- return false;
9360
- if (rung.variant !== undefined && gate.accepted.includes(rung.variant))
9361
- return true;
9362
- onRejected({ model: rung.model, variant: rung.variant });
9363
- return false;
9364
- });
9365
- }
9366
- function recordLaunchRungRejection(rejection) {
9367
- launchRungRejectionLog.push(rejection);
9368
- console.warn(`[fable-55-launch] dropped a Fable 5.5 rung with effort "${rejection.variant ?? "(none)"}": not in FABLE_55_EFFORTS.accepted`);
9369
- }
9370
- function launchRungs(rungs) {
9371
- return selectLaunchRungs(rungs, { released: FABLE_55_RELEASED, accepted: FABLE_55_EFFORTS.accepted }, recordLaunchRungRejection);
9372
- }
9373
- function launchDefaultModelId() {
9374
- return FABLE_55_RELEASED ? FABLE_55_LAUNCH.id : FABLE_55_PREDECESSOR;
9375
- }
9376
- var FABLE_55_LAUNCH, FABLE_55_RELEASED = false, FABLE_55_EFFORTS, launchRungRejectionLog, FABLE_55_PREDECESSOR;
9377
- var init_fable_55_launch = __esm(() => {
9378
- init_latest_models();
9379
- FABLE_55_LAUNCH = {
9380
- id: "claude-fable-5-5",
9381
- family: "claude-fable",
9382
- reasoning: undefined,
9383
- temperature: undefined,
9384
- toolCall: undefined,
9385
- modalities: undefined,
9386
- limit: {
9387
- context: undefined,
9388
- input: undefined,
9389
- output: undefined
9390
- }
9391
- };
9392
- FABLE_55_EFFORTS = {
9393
- measured: false,
9394
- accepted: ["xhigh", "max"]
9395
- };
9396
- launchRungRejectionLog = [];
9397
- FABLE_55_PREDECESSOR = LATEST_MODEL_BY_FAMILY.claudeFable;
9398
- });
9399
-
9400
9349
  // packages/model-core/src/agent-model-requirements.ts
9401
9350
  var AGENT_MODEL_REQUIREMENTS;
9402
9351
  var init_agent_model_requirements = __esm(() => {
9403
- init_fable_55_launch();
9404
9352
  init_latest_models();
9405
9353
  AGENT_MODEL_REQUIREMENTS = {
9406
9354
  sisyphus: {
@@ -9495,15 +9443,15 @@ var init_agent_model_requirements = __esm(() => {
9495
9443
  ]
9496
9444
  },
9497
9445
  prometheus: {
9498
- fallbackChain: launchRungs([
9446
+ fallbackChain: [
9499
9447
  {
9500
9448
  providers: ["anthropic", "github-copilot", "opencode"],
9501
- model: FABLE_55_LAUNCH.id,
9449
+ model: LATEST_MODEL_BY_FAMILY.claudeFable,
9502
9450
  variant: "xhigh"
9503
9451
  },
9504
9452
  {
9505
9453
  providers: ["anthropic", "github-copilot", "opencode"],
9506
- model: LATEST_MODEL_BY_FAMILY.claudeFable,
9454
+ model: "claude-fable-5-1",
9507
9455
  variant: "xhigh"
9508
9456
  },
9509
9457
  {
@@ -9517,18 +9465,18 @@ var init_agent_model_requirements = __esm(() => {
9517
9465
  variant: "max"
9518
9466
  },
9519
9467
  { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
9520
- ])
9468
+ ]
9521
9469
  },
9522
9470
  metis: {
9523
- fallbackChain: launchRungs([
9471
+ fallbackChain: [
9524
9472
  {
9525
9473
  providers: ["anthropic", "github-copilot", "opencode"],
9526
- model: FABLE_55_LAUNCH.id,
9474
+ model: LATEST_MODEL_BY_FAMILY.claudeFable,
9527
9475
  variant: "max"
9528
9476
  },
9529
9477
  {
9530
9478
  providers: ["anthropic", "github-copilot", "opencode"],
9531
- model: LATEST_MODEL_BY_FAMILY.claudeFable,
9479
+ model: "claude-fable-5-1",
9532
9480
  variant: "max"
9533
9481
  },
9534
9482
  {
@@ -9542,7 +9490,7 @@ var init_agent_model_requirements = __esm(() => {
9542
9490
  variant: "max"
9543
9491
  },
9544
9492
  { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
9545
- ])
9493
+ ]
9546
9494
  },
9547
9495
  momus: {
9548
9496
  fallbackChain: [
@@ -9602,20 +9550,19 @@ var init_agent_model_requirements = __esm(() => {
9602
9550
  // packages/model-core/src/category-model-requirements.ts
9603
9551
  var CATEGORY_MODEL_REQUIREMENTS;
9604
9552
  var init_category_model_requirements = __esm(() => {
9605
- init_fable_55_launch();
9606
9553
  init_latest_models();
9607
9554
  CATEGORY_MODEL_REQUIREMENTS = {
9608
9555
  "visual-engineering": {
9609
- fallbackChain: launchRungs([
9556
+ fallbackChain: [
9610
9557
  { providers: ["google", "google-vertex", "opencode"], model: LATEST_MODEL_BY_FAMILY.geminiPro, variant: "low" },
9611
9558
  {
9612
9559
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
9613
- model: FABLE_55_LAUNCH.id,
9560
+ model: LATEST_MODEL_BY_FAMILY.claudeFable,
9614
9561
  variant: "max"
9615
9562
  },
9616
9563
  {
9617
9564
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
9618
- model: LATEST_MODEL_BY_FAMILY.claudeFable,
9565
+ model: "claude-fable-5-1",
9619
9566
  variant: "max"
9620
9567
  },
9621
9568
  {
@@ -9629,7 +9576,7 @@ var init_category_model_requirements = __esm(() => {
9629
9576
  variant: "max"
9630
9577
  },
9631
9578
  { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
9632
- ])
9579
+ ]
9633
9580
  },
9634
9581
  ultrabrain: {
9635
9582
  fallbackChain: [
@@ -9663,15 +9610,15 @@ var init_category_model_requirements = __esm(() => {
9663
9610
  ]
9664
9611
  },
9665
9612
  artistry: {
9666
- fallbackChain: launchRungs([
9613
+ fallbackChain: [
9667
9614
  {
9668
9615
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
9669
- model: FABLE_55_LAUNCH.id,
9616
+ model: LATEST_MODEL_BY_FAMILY.claudeFable,
9670
9617
  variant: "max"
9671
9618
  },
9672
9619
  {
9673
9620
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
9674
- model: LATEST_MODEL_BY_FAMILY.claudeFable,
9621
+ model: "claude-fable-5-1",
9675
9622
  variant: "max"
9676
9623
  },
9677
9624
  {
@@ -9685,7 +9632,7 @@ var init_category_model_requirements = __esm(() => {
9685
9632
  variant: "max"
9686
9633
  },
9687
9634
  { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
9688
- ])
9635
+ ]
9689
9636
  },
9690
9637
  quick: {
9691
9638
  fallbackChain: [
@@ -10371,9 +10318,7 @@ var init_runtime_fallback_model = () => {};
10371
10318
  // packages/model-core/src/model-capabilities/supplemental-entries.ts
10372
10319
  var SUPPLEMENTAL_MODEL_CAPABILITIES;
10373
10320
  var init_supplemental_entries = __esm(() => {
10374
- init_fable_55_launch();
10375
10321
  SUPPLEMENTAL_MODEL_CAPABILITIES = {
10376
- [FABLE_55_LAUNCH.id]: FABLE_55_LAUNCH,
10377
10322
  "kimi-k3": {
10378
10323
  id: "kimi-k3",
10379
10324
  family: "kimi",
@@ -10449,6 +10394,21 @@ var init_supplemental_entries = __esm(() => {
10449
10394
  output: 128000
10450
10395
  }
10451
10396
  },
10397
+ "claude-fable-5-2": {
10398
+ id: "claude-fable-5-2",
10399
+ family: "claude-fable",
10400
+ reasoning: true,
10401
+ temperature: false,
10402
+ toolCall: true,
10403
+ modalities: {
10404
+ input: ["text", "image", "pdf"],
10405
+ output: ["text"]
10406
+ },
10407
+ limit: {
10408
+ context: 1e6,
10409
+ output: 128000
10410
+ }
10411
+ },
10452
10412
  "gpt-6-astra": {
10453
10413
  id: "gpt-6-astra",
10454
10414
  family: "gpt",
@@ -10853,25 +10813,16 @@ var init_supplemental_entries = __esm(() => {
10853
10813
  });
10854
10814
 
10855
10815
  // packages/model-core/src/model-capabilities/bundled-snapshot.ts
10856
- function fillGaps(generated, placeholder) {
10857
- const merged = { ...placeholder };
10858
- for (const [key, value] of Object.entries(generated)) {
10859
- if (value === undefined)
10860
- continue;
10861
- const base = merged[key];
10862
- 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;
10863
- }
10864
- return merged;
10865
- }
10866
10816
  function getBundledModelCapabilitiesSnapshot(snapshotJson) {
10867
- const models = { ...snapshotJson.models, ...SUPPLEMENTAL_MODEL_CAPABILITIES };
10868
- const generatedLaunchRow = snapshotJson.models[FABLE_55_LAUNCH.id];
10869
- if (generatedLaunchRow)
10870
- models[FABLE_55_LAUNCH.id] = fillGaps(generatedLaunchRow, FABLE_55_LAUNCH);
10871
- return { ...snapshotJson, models };
10817
+ return {
10818
+ ...snapshotJson,
10819
+ models: {
10820
+ ...snapshotJson.models,
10821
+ ...SUPPLEMENTAL_MODEL_CAPABILITIES
10822
+ }
10823
+ };
10872
10824
  }
10873
10825
  var init_bundled_snapshot = __esm(() => {
10874
- init_fable_55_launch();
10875
10826
  init_supplemental_entries();
10876
10827
  });
10877
10828
 
@@ -11299,7 +11250,6 @@ var init_src2 = __esm(() => {
11299
11250
  init_model_requirements();
11300
11251
  init_latest_models();
11301
11252
  init_model_family_detectors();
11302
- init_fable_55_launch();
11303
11253
  init_model_capability_aliases();
11304
11254
  init_model_capability_heuristics();
11305
11255
  init_model_capability_guardrails();
@@ -11621,7 +11571,6 @@ Approach:
11621
11571
  </Category_Context>`, GOOGLE_CATEGORIES;
11622
11572
  var init_google_categories = __esm(() => {
11623
11573
  init_latest_models();
11624
- init_src2();
11625
11574
  GOOGLE_CATEGORIES = [
11626
11575
  {
11627
11576
  name: "visual-engineering",
@@ -11631,7 +11580,7 @@ var init_google_categories = __esm(() => {
11631
11580
  },
11632
11581
  {
11633
11582
  name: "artistry",
11634
- config: { model: `anthropic/${launchDefaultModelId()}`, variant: "max" },
11583
+ config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeFable}`, variant: "max" },
11635
11584
  description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
11636
11585
  promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
11637
11586
  }
@@ -92758,7 +92707,7 @@ var package_default2;
92758
92707
  var init_package2 = __esm(() => {
92759
92708
  package_default2 = {
92760
92709
  name: "@oh-my-opencode/omo-codex",
92761
- version: "5.1.65",
92710
+ version: "5.1.68",
92762
92711
  type: "module",
92763
92712
  private: true,
92764
92713
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -104891,6 +104840,7 @@ var RuntimeFallbackConfigSchema = object({
104891
104840
  max_fallback_attempts: number2().min(1).max(20).optional(),
104892
104841
  cooldown_seconds: number2().min(0).optional(),
104893
104842
  timeout_seconds: number2().min(0).optional(),
104843
+ first_prompt_timeout_seconds: number2().min(0).optional(),
104894
104844
  notify_on_fallback: boolean2().optional(),
104895
104845
  restore_primary_after_cooldown: boolean2().optional()
104896
104846
  });
@@ -109521,8 +109471,8 @@ var package_default3 = {
109521
109471
  },
109522
109472
  dependencies: {
109523
109473
  "@clack/prompts": "^1.8.1",
109524
- "@code-yeongyu/senpi": "2026.11.6-3",
109525
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.6-3",
109474
+ "@code-yeongyu/senpi": "2026.11.10",
109475
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.10",
109526
109476
  "@modelcontextprotocol/sdk": "^1.30.0",
109527
109477
  "@oh-my-opencode/agents-md-core": "workspace:*",
109528
109478
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -112782,8 +112732,110 @@ import { createHash as createHash12, randomUUID as randomUUID8 } from "crypto";
112782
112732
  import { basename as basename17 } from "path";
112783
112733
 
112784
112734
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/darwin-backend.ts
112735
+ import { homedir as homedir32 } from "os";
112736
+ import { join as join110 } from "path";
112737
+
112738
+ // packages/omo-opencode/src/cli/service-auth/account-home.ts
112739
+ import { execFileSync as execFileSync4 } from "child_process";
112740
+ import { accessSync as accessSync5, constants as constants13, mkdirSync as mkdirSync19, readFileSync as readFileSync44, statSync as statSync7 } from "fs";
112785
112741
  import { homedir as homedir31 } from "os";
112786
- import { join as join109 } from "path";
112742
+ import { join as join106, posix as posix13, win32 as win3210 } from "path";
112743
+ var lockDirectoryIn = (home) => join106(home, ".omo", "session-locks");
112744
+ function userRecordHome(facts) {
112745
+ try {
112746
+ if (facts.platform === "linux")
112747
+ return passwdHome(facts);
112748
+ if (facts.platform === "darwin")
112749
+ return darwinHome(facts);
112750
+ if (facts.platform === "win32")
112751
+ return windowsProfile(facts);
112752
+ return;
112753
+ } catch {
112754
+ return;
112755
+ }
112756
+ }
112757
+ function passwdHome(facts) {
112758
+ if (facts.uid === undefined)
112759
+ return;
112760
+ const uid = String(facts.uid);
112761
+ const home = facts.readFile("/etc/passwd").split(`
112762
+ `).map((line) => line.split(":")).find((fields) => fields[2] === uid)?.[5];
112763
+ return home !== undefined && posix13.isAbsolute(home) ? home : undefined;
112764
+ }
112765
+ function darwinHome(facts) {
112766
+ const fields = facts.run("/usr/bin/id", ["-P"]).trim().split(":");
112767
+ const home = fields[8];
112768
+ if (facts.uid !== undefined && fields[2] !== String(facts.uid))
112769
+ return;
112770
+ return home !== undefined && posix13.isAbsolute(home) ? home : undefined;
112771
+ }
112772
+ function windowsProfile(facts) {
112773
+ const whoami = system32Tool(facts, "whoami.exe");
112774
+ const reg = system32Tool(facts, "reg.exe");
112775
+ if (whoami === undefined || reg === undefined)
112776
+ return;
112777
+ const sid = /S-1-[0-9-]+/.exec(facts.run(whoami, ["/user", "/fo", "csv", "/nh"]))?.[0];
112778
+ if (sid === undefined)
112779
+ return;
112780
+ const key = `HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\${sid}`;
112781
+ const value = /ProfileImagePath\s+REG_(?:EXPAND_)?SZ\s+(.+)/.exec(facts.run(reg, ["query", key, "/v", "ProfileImagePath"]))?.[1]?.trim();
112782
+ const home = value?.replace(/%([^%]+)%/g, (whole, name) => facts.env[name] ?? whole);
112783
+ return home !== undefined && !home.includes("%") && win3210.isAbsolute(home) ? home : undefined;
112784
+ }
112785
+ function system32Tool(facts, name) {
112786
+ const root = facts.env.SystemRoot;
112787
+ if (root === undefined || !/^[A-Za-z]:[\\/]/.test(root) || root.split(/[\\/]/).includes(".."))
112788
+ return;
112789
+ const tool = win3210.join(root, "System32", name);
112790
+ return facts.isFile(tool) ? tool : undefined;
112791
+ }
112792
+ function chooseLockHome(facts) {
112793
+ const home = facts.homedir();
112794
+ const record = facts.recordHome();
112795
+ if (record === undefined || record === home)
112796
+ return home;
112797
+ try {
112798
+ facts.prepareLockDirectory(lockDirectoryIn(record));
112799
+ return record;
112800
+ } catch (error) {
112801
+ const reason = error instanceof Error && "code" in error ? String(error.code) : String(error);
112802
+ 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).`);
112803
+ return home;
112804
+ }
112805
+ }
112806
+ var systemPlatformFacts = {
112807
+ platform: process.platform,
112808
+ uid: process.getuid?.(),
112809
+ env: process.env,
112810
+ readFile: (path) => readFileSync44(path, "utf8"),
112811
+ isFile: (path) => statSync7(path, { throwIfNoEntry: false })?.isFile() ?? false,
112812
+ run: (command, args) => execFileSync4(command, args, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 5000, windowsHide: true })
112813
+ };
112814
+ var systemAccountFacts = {
112815
+ recordHome: () => userRecordHome(systemPlatformFacts),
112816
+ homedir: homedir31,
112817
+ prepareLockDirectory: (directory) => {
112818
+ mkdirSync19(directory, { recursive: true, mode: 448 });
112819
+ accessSync5(directory, constants13.W_OK);
112820
+ },
112821
+ warn: (message) => process.stderr.write(`${message}
112822
+ `)
112823
+ };
112824
+ var TEST_LOCK_HOME_ENV = "OMO_TEST_CREDENTIAL_LOCK_HOME";
112825
+ var INJECTED_SECRETS = Symbol.for("omo.test.injectedSecrets");
112826
+ function testLockHome(env, secrets) {
112827
+ const home = env[TEST_LOCK_HOME_ENV];
112828
+ if (home === undefined || !(posix13.isAbsolute(home) || win3210.isAbsolute(home)))
112829
+ return;
112830
+ const marked = typeof secrets === "object" && secrets !== null && secrets[INJECTED_SECRETS] === true;
112831
+ return marked ? home : undefined;
112832
+ }
112833
+ var facts = systemAccountFacts;
112834
+ var chosen;
112835
+ function accountHome() {
112836
+ chosen ??= testLockHome(process.env, typeof Bun === "undefined" ? undefined : Bun.secrets) ?? chooseLockHome(facts);
112837
+ return chosen;
112838
+ }
112787
112839
 
112788
112840
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/client.ts
112789
112841
  init_zod();
@@ -112898,18 +112950,18 @@ async function callHelper(path, call, options = {}) {
112898
112950
  }
112899
112951
 
112900
112952
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/location.ts
112901
- import { dirname as dirname42, join as join106, posix as posix13 } from "path";
112953
+ import { dirname as dirname42, join as join107, posix as posix14 } from "path";
112902
112954
  import { fileURLToPath as fileURLToPath8 } from "url";
112903
112955
  function bundleCandidates(moduleUrl) {
112904
112956
  const root = dirname42(dirname42(dirname42(fileURLToPath8(moduleUrl))));
112905
- return [join106(root, "bin", "darwin", "omo-keychain"), join106(root, "omo-keychain")];
112957
+ return [join107(root, "bin", "darwin", "omo-keychain"), join107(root, "omo-keychain")];
112906
112958
  }
112907
112959
  function machineCandidates(home, arch = process.arch) {
112908
112960
  const runtimeArch = arch === "arm64" ? "arm64" : "x64";
112909
112961
  return [
112910
112962
  `/Applications/OmO.app/Contents/Resources/omo-runtime/darwin-${runtimeArch}/omo-keychain`,
112911
- posix13.join(home, "Applications", "OmO.app", "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo-keychain"),
112912
- posix13.join(home, ".bun", "install", "global", "node_modules", "omo-ai", "bin", "darwin", "omo-keychain")
112963
+ posix14.join(home, "Applications", "OmO.app", "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo-keychain"),
112964
+ posix14.join(home, ".bun", "install", "global", "node_modules", "omo-ai", "bin", "darwin", "omo-keychain")
112913
112965
  ];
112914
112966
  }
112915
112967
  async function locateHelper(candidates, verify) {
@@ -112926,9 +112978,9 @@ async function locateHelper(candidates, verify) {
112926
112978
 
112927
112979
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/pin.ts
112928
112980
  import { readdirSync as readdirSync14, rmSync as rmSync9 } from "fs";
112929
- import { chmod as chmod2, copyFile as copyFile4, constants as constants13, mkdtemp as mkdtemp2, rm as rm16, stat as stat8 } from "fs/promises";
112981
+ import { chmod as chmod2, copyFile as copyFile4, constants as constants14, mkdtemp as mkdtemp2, rm as rm16, stat as stat8 } from "fs/promises";
112930
112982
  import { tmpdir as tmpdir6 } from "os";
112931
- import { basename as basename15, join as join107 } from "path";
112983
+ import { basename as basename15, join as join108 } from "path";
112932
112984
  var DIR_PREFIX = "omo-keychain-";
112933
112985
  var OWNED_DIR = new RegExp(`^${DIR_PREFIX}(\\d+)-`);
112934
112986
  var isAlive = (pid) => {
@@ -112952,7 +113004,7 @@ function sweepDeadPinDirs(root = tmpdir6()) {
112952
113004
  if (owner === undefined || Number(owner) === process.pid || isAlive(Number(owner)))
112953
113005
  continue;
112954
113006
  try {
112955
- rmSync9(join107(root, entry), { recursive: true, force: true });
113007
+ rmSync9(join108(root, entry), { recursive: true, force: true });
112956
113008
  } catch {
112957
113009
  continue;
112958
113010
  }
@@ -112965,7 +113017,7 @@ async function processPinDir() {
112965
113017
  if (processDir !== undefined)
112966
113018
  return processDir;
112967
113019
  sweepDeadPinDirs();
112968
- const dir = await mkdtemp2(join107(tmpdir6(), `${DIR_PREFIX}${process.pid}-`));
113020
+ const dir = await mkdtemp2(join108(tmpdir6(), `${DIR_PREFIX}${process.pid}-`));
112969
113021
  process.once("exit", () => rmSync9(dir, { recursive: true, force: true }));
112970
113022
  processDir = dir;
112971
113023
  return dir;
@@ -112976,9 +113028,9 @@ async function sourceIdentity(source) {
112976
113028
  return `${source}\x00${info.dev}\x00${info.ino}\x00${info.size}\x00${info.mtimeMs}\x00${info.ctimeMs}`;
112977
113029
  }
112978
113030
  async function copyAndVerify(source, verify, dir) {
112979
- const target = join107(dir, `${crypto.randomUUID()}-${basename15(source)}`);
113031
+ const target = join108(dir, `${crypto.randomUUID()}-${basename15(source)}`);
112980
113032
  try {
112981
- await copyFile4(source, target, constants13.COPYFILE_EXCL);
113033
+ await copyFile4(source, target, constants14.COPYFILE_EXCL);
112982
113034
  await chmod2(target, 320);
112983
113035
  } catch (error) {
112984
113036
  await rm16(target, { force: true });
@@ -113593,16 +113645,16 @@ var {
113593
113645
  unlink: unlink3
113594
113646
  } = promises;
113595
113647
  var {
113596
- accessSync: accessSync5,
113648
+ accessSync: accessSync6,
113597
113649
  chmodSync: chmodSync7,
113598
113650
  fsyncSync: fsyncSync3,
113599
113651
  linkSync,
113600
113652
  lstatSync: lstatSync5,
113601
- mkdirSync: mkdirSync19,
113602
- readFileSync: readFileSync44,
113653
+ mkdirSync: mkdirSync20,
113654
+ readFileSync: readFileSync45,
113603
113655
  readdirSync: readdirSync15,
113604
113656
  realpathSync: realpathSync13,
113605
- statSync: statSync8,
113657
+ statSync: statSync9,
113606
113658
  unlinkSync: unlinkSync10,
113607
113659
  writeFileSync: writeFileSync17,
113608
113660
  writeSync
@@ -114072,7 +114124,7 @@ async function publishLockRecord(lockPath, record) {
114072
114124
  // packages/team-core/src/team-state-store/lock-lease.ts
114073
114125
  import { randomUUID as randomUUID7 } from "crypto";
114074
114126
  import { open as open4, readdir as readdir18, readFile as readFile36, rename as rename9, rm as rm18 } from "fs/promises";
114075
- import { basename as basename16, dirname as dirname44, join as join108 } from "path";
114127
+ import { basename as basename16, dirname as dirname44, join as join109 } from "path";
114076
114128
 
114077
114129
  // packages/team-core/src/team-state-store/lock-reclaim.ts
114078
114130
  import { createHash as createHash10 } from "crypto";
@@ -114151,7 +114203,7 @@ var UUID2 = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
114151
114203
  var escapeRegExp2 = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
114152
114204
  var leaseTempPattern = (lockPath) => new RegExp(`^\\.${escapeRegExp2(basename16(lockPath))}\\.${UUID2}\\.lease$`);
114153
114205
  async function replaceRecord(lockPath, content) {
114154
- const temporary = join108(dirname44(lockPath), `${leaseTempPrefix(lockPath)}${randomUUID7()}${LEASE_TEMP_SUFFIX}`);
114206
+ const temporary = join109(dirname44(lockPath), `${leaseTempPrefix(lockPath)}${randomUUID7()}${LEASE_TEMP_SUFFIX}`);
114155
114207
  try {
114156
114208
  const handle = await open4(temporary, "wx", 384);
114157
114209
  try {
@@ -114177,7 +114229,7 @@ async function removeLeftoverTemps(lockPath) {
114177
114229
  }
114178
114230
  for (const entry of entries) {
114179
114231
  if (pattern.test(entry))
114180
- await rm18(join108(dirname44(lockPath), entry), { force: true });
114232
+ await rm18(join109(dirname44(lockPath), entry), { force: true });
114181
114233
  }
114182
114234
  }
114183
114235
  async function currentRecord(lockPath) {
@@ -114314,7 +114366,7 @@ function promptLockAt(path, hooks = {}) {
114314
114366
  var ROW_9B_DEFAULT = "reinstall-notice";
114315
114367
  var helperAccess = () => sharedHelperAccess(() => {
114316
114368
  const { entryCandidates } = keychainProcessState();
114317
- return resolveHelperAccess([...entryCandidates, ...bundleCandidates(import.meta.url), ...machineCandidates(homedir31())]);
114369
+ return resolveHelperAccess([...entryCandidates, ...bundleCandidates(import.meta.url), ...machineCandidates(homedir32())]);
114318
114370
  });
114319
114371
  function sharedHelperAccess(resolve) {
114320
114372
  const state = keychainProcessState();
@@ -114351,7 +114403,7 @@ function createDarwinBackend(options) {
114351
114403
  access: options.access,
114352
114404
  cache: options.cache ?? processApprovalCache(),
114353
114405
  background: options.background,
114354
- takePromptLock: promptLockAt(join109(options.home ?? homedir31(), ".omo", "session-locks", `${options.account}.keychain-prompt`)),
114406
+ takePromptLock: promptLockAt(join110(lockDirectoryIn(options.home ?? accountHome()), `${options.account}.keychain-prompt`)),
114355
114407
  ownSilentGet: () => silently(() => options.secrets.get(key)),
114356
114408
  ownOverwrite: (value) => silently(() => options.secrets.set({ ...key, value })),
114357
114409
  ownDelete: (name) => name === options.account ? gatedSecrets(() => options.secrets.delete({ ...key, name })) : silently(() => options.secrets.delete({ ...key, name })),
@@ -114379,22 +114431,22 @@ async function guardHelperlessRead(service, account, choice = ROW_9B_DEFAULT, pr
114379
114431
  }
114380
114432
 
114381
114433
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/store-binding.ts
114382
- import { homedir as homedir32 } from "os";
114434
+ import { homedir as homedir33 } from "os";
114383
114435
 
114384
114436
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/creator-handoff.ts
114385
114437
  init_bun_file_shim();
114386
114438
  init_bun_spawn_shim();
114387
- import { dirname as dirname47, posix as posix14 } from "path";
114439
+ import { dirname as dirname47, posix as posix15 } from "path";
114388
114440
 
114389
114441
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/runtime-capabilities.ts
114390
114442
  init_zod();
114391
114443
  import { readFile as readFile37 } from "fs/promises";
114392
- import { dirname as dirname46, join as join110 } from "path";
114444
+ import { dirname as dirname46, join as join111 } from "path";
114393
114445
  var RUNTIME_CAPABILITIES_FILE = "omo-runtime-capabilities.json";
114394
114446
  var RUNTIME_CAPABILITIES = { keychainHandoff: 1 };
114395
114447
  var capabilitiesSchema = object({ keychainHandoff: number2().int() }).passthrough();
114396
114448
  async function runtimeDeclaresKeychainHandoff(runtime) {
114397
- const text = await readFile37(join110(dirname46(runtime), RUNTIME_CAPABILITIES_FILE), "utf8").catch(() => null);
114449
+ const text = await readFile37(join111(dirname46(runtime), RUNTIME_CAPABILITIES_FILE), "utf8").catch(() => null);
114398
114450
  if (text === null)
114399
114451
  return false;
114400
114452
  try {
@@ -114413,9 +114465,9 @@ var HANDOFF_ENV = "OMO_KEYCHAIN_HANDOFF";
114413
114465
  var HANDOFF_DEADLINE_MS = 45000;
114414
114466
  function desktopRuntimeCandidates(home, arch = process.arch) {
114415
114467
  const runtimeArch = arch === "arm64" ? "arm64" : "x64";
114416
- return ["/Applications/OmO.app", posix14.join(home, "Applications", "OmO.app")].map((app) => ({
114468
+ return ["/Applications/OmO.app", posix15.join(home, "Applications", "OmO.app")].map((app) => ({
114417
114469
  app,
114418
- runtime: posix14.join(app, "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo")
114470
+ runtime: posix15.join(app, "Contents", "Resources", "omo-runtime", `darwin-${runtimeArch}`, "omo")
114419
114471
  }));
114420
114472
  }
114421
114473
  var verifyBundle = async (app, requirement) => {
@@ -114473,13 +114525,13 @@ function createCreatorHandOff(options) {
114473
114525
 
114474
114526
  // packages/omo-opencode/src/cli/service-auth/keychain-helper/store-binding.ts
114475
114527
  var readers = new Map;
114476
- var INJECTED_SECRETS = Symbol.for("omo.test.injectedSecrets");
114477
- var isInjectedSecrets = (api) => api[INJECTED_SECRETS] === true;
114528
+ var INJECTED_SECRETS2 = Symbol.for("omo.test.injectedSecrets");
114529
+ var isInjectedSecrets = (api) => api[INJECTED_SECRETS2] === true;
114478
114530
  var backends = new Map;
114479
114531
  function processHandOff(origin) {
114480
114532
  return () => {
114481
114533
  const state = keychainProcessState();
114482
- state.handOff ??= createCreatorHandOff({ candidates: desktopRuntimeCandidates(homedir32()), origin })();
114534
+ state.handOff ??= createCreatorHandOff({ candidates: desktopRuntimeCandidates(homedir33()), origin })();
114483
114535
  return state.handOff;
114484
114536
  };
114485
114537
  }
@@ -114632,18 +114684,18 @@ var probeSecretServiceLock = () => new Promise((resolve) => {
114632
114684
  import { AsyncLocalStorage as AsyncLocalStorage3 } from "async_hooks";
114633
114685
  import { createHash as createHash11 } from "crypto";
114634
114686
  import { mkdir as mkdir12 } from "fs/promises";
114635
- import { homedir as homedir33 } from "os";
114636
- import { join as join112 } from "path";
114687
+ import { join as join113 } from "path";
114637
114688
  var held = new AsyncLocalStorage3;
114638
- function credentialLockPaths(api, home = homedir33()) {
114689
+ var CREDENTIAL_LOCK_STALE_AFTER_MS = 60000;
114690
+ function credentialLockPaths(api, home = accountHome()) {
114639
114691
  const id = createHash11("sha256").update(serviceOrigin(api)).digest("hex");
114640
- const directory = join112(home, ".omo", "session-locks");
114641
- return { directory, lock: join112(directory, `${id}.lock`), desktopRecord: join112(directory, `${id}.desktop-generation.json`) };
114692
+ const directory = lockDirectoryIn(home);
114693
+ return { directory, lock: join113(directory, `${id}.lock`), desktopRecord: join113(directory, `${id}.desktop-generation.json`) };
114642
114694
  }
114643
- function heldCredentialLease(api, home = homedir33()) {
114695
+ function heldCredentialLease(api, home = accountHome()) {
114644
114696
  return held.getStore()?.get(credentialLockPaths(api, home).lock);
114645
114697
  }
114646
- async function withCredentialLock(api, action, home = homedir33(), ownerTag = "cli-session") {
114698
+ async function withCredentialLock(api, action, home = accountHome(), ownerTag = "cli-session") {
114647
114699
  const { directory, lock } = credentialLockPaths(api, home);
114648
114700
  const owned = held.getStore();
114649
114701
  const outer = owned?.get(lock);
@@ -114652,7 +114704,7 @@ async function withCredentialLock(api, action, home = homedir33(), ownerTag = "c
114652
114704
  await mkdir12(directory, { recursive: true, mode: 448 });
114653
114705
  return withLock(lock, (lease) => held.run(new Map([...owned ?? [], [lock, lease]]), () => action(lease)), {
114654
114706
  ownerTag,
114655
- staleAfterMs: Number.POSITIVE_INFINITY
114707
+ staleAfterMs: CREDENTIAL_LOCK_STALE_AFTER_MS
114656
114708
  });
114657
114709
  }
114658
114710
 
@@ -115020,14 +115072,14 @@ async function loginLoopback(session, options) {
115020
115072
 
115021
115073
  // packages/memory-core/src/sync/device-retire.ts
115022
115074
  import { createHash as createHash14, randomBytes as randomBytes6 } from "crypto";
115023
- import { join as join115 } from "path";
115075
+ import { join as join116 } from "path";
115024
115076
 
115025
115077
  // packages/memory-core/src/identity/layout.ts
115026
115078
  import { homedir as homedir34 } from "os";
115027
- import { join as join113, resolve as resolve31 } from "path";
115079
+ import { join as join114, resolve as resolve31 } from "path";
115028
115080
  var MEMORY_ROOT_ENV_VAR = "OMO_MEMORY_HOME";
115029
115081
  function defaultMemoryRoot() {
115030
- return join113(homedir34(), ".omo", "memory");
115082
+ return join114(homedir34(), ".omo", "memory");
115031
115083
  }
115032
115084
  function resolveMemoryRoot(env, cwd) {
115033
115085
  const override = env[MEMORY_ROOT_ENV_VAR];
@@ -115037,13 +115089,13 @@ function resolveMemoryRoot(env, cwd) {
115037
115089
  return resolve31(cwd, override);
115038
115090
  }
115039
115091
  // packages/memory-core/src/sync/pin-dir.ts
115040
- import { join as join114 } from "path";
115041
- var syncPinDir = (memoryRoot) => join114(memoryRoot, "sync-device");
115092
+ import { join as join115 } from "path";
115093
+ var syncPinDir = (memoryRoot) => join115(memoryRoot, "sync-device");
115042
115094
 
115043
115095
  // packages/memory-core/src/sync/device-retire.ts
115044
- var trustAnchorRoot = (pinDir) => join115(pinDir, "trust-anchor");
115096
+ var trustAnchorRoot = (pinDir) => join116(pinDir, "trust-anchor");
115045
115097
  var trustAnchorKey = (account) => createHash14("sha256").update(account, "utf8").digest("base64url");
115046
- var trustAnchorDir = (pinDir, account) => join115(trustAnchorRoot(pinDir), trustAnchorKey(account));
115098
+ var trustAnchorDir = (pinDir, account) => join116(trustAnchorRoot(pinDir), trustAnchorKey(account));
115047
115099
  var hasLiveTrustAnchor = async (pinDir) => {
115048
115100
  try {
115049
115101
  return (await readdir17(trustAnchorRoot(pinDir))).some((name) => !name.includes(".retired-"));
@@ -115069,9 +115121,9 @@ import { homedir as homedir35 } from "os";
115069
115121
  // packages/omo-opencode/src/cli/service-auth/signed-out-marker.ts
115070
115122
  init_zod();
115071
115123
  import { mkdir as mkdir13, readFile as readFile38, rename as rename10, rm as rm19, writeFile as writeFile18 } from "fs/promises";
115072
- import { dirname as dirname48, join as join116 } from "path";
115124
+ import { dirname as dirname48, join as join117 } from "path";
115073
115125
  var markerSchema = object({ device: string2().nullable(), at: string2() });
115074
- var signedOutMarkerPath = (home, credential) => join116(home, ".omo", "account-state", `${credential}.signed-out.json`);
115126
+ var signedOutMarkerPath = (home, credential) => join117(home, ".omo", "account-state", `${credential}.signed-out.json`);
115075
115127
  async function readSignedOutMarker(path) {
115076
115128
  const text = await readFile38(path, "utf8").catch(() => null);
115077
115129
  if (text === null)
@@ -115636,7 +115688,7 @@ async function boulder(options) {
115636
115688
  }
115637
115689
  // packages/omo-opencode/src/cli/codex-ulw-loop.ts
115638
115690
  import { spawn as spawn6 } from "child_process";
115639
- import { existsSync as existsSync67, readFileSync as readFileSync45, realpathSync as realpathSync14 } from "fs";
115691
+ import { existsSync as existsSync67, readFileSync as readFileSync46, realpathSync as realpathSync14 } from "fs";
115640
115692
  import { homedir as homedir36 } from "os";
115641
115693
  var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
115642
115694
  function resolveCodexUlwLoopCommand(input = {}) {
@@ -115686,7 +115738,7 @@ function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
115686
115738
  }
115687
115739
  function isGeneratedRuntimeWrapper(candidate) {
115688
115740
  try {
115689
- return readFileSync45(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
115741
+ return readFileSync46(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
115690
115742
  } catch (error) {
115691
115743
  if (error instanceof Error)
115692
115744
  return false;
@@ -116132,7 +116184,7 @@ prunes.
116132
116184
 
116133
116185
  // packages/omo-opencode/src/cli/config-migrate.ts
116134
116186
  init_startup_migration();
116135
- import { posix as posix15 } from "path";
116187
+ import { posix as posix16 } from "path";
116136
116188
  function reports(result) {
116137
116189
  return result.results.map((entry) => ({
116138
116190
  diagnostics: entry.diagnostics,
@@ -116166,7 +116218,7 @@ function runConfigMigrate(options = {}) {
116166
116218
  dryRun: options.dryRun ?? false,
116167
116219
  environment,
116168
116220
  ...homeDir === undefined ? {} : { env: { HOME: homeDir }, homeDir },
116169
- pathOperations: posix15
116221
+ pathOperations: posix16
116170
116222
  });
116171
116223
  const report = reports(result);
116172
116224
  const response = {