lazycodex-ai 5.1.64 → 5.1.66

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 (85) hide show
  1. package/dist/cli/index.js +99 -60
  2. package/dist/cli/service-auth/closed-device-login.d.ts +16 -0
  3. package/dist/cli/service-auth/commands.d.ts +9 -2
  4. package/dist/cli/service-auth/session.d.ts +12 -0
  5. package/dist/cli-node/index.js +99 -60
  6. package/package.json +1 -1
  7. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  8. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +19 -0
  9. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  10. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  11. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  12. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  13. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  14. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  15. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  16. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  18. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  19. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  21. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  31. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  32. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  33. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  34. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  35. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  36. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  37. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  53. package/packages/omo-codex/plugin/package-lock.json +12 -12
  54. package/packages/omo-codex/plugin/package.json +1 -1
  55. package/packages/omo-codex/plugin/skills/browser/SKILL.md +24 -7
  56. package/packages/omo-codex/plugin/skills/browser/references/commands.md +41 -4
  57. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +15 -4
  58. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +4 -2
  59. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +232 -341
  60. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +5 -5
  61. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1586 -1394
  62. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor-report.mjs +68 -0
  63. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +8 -43
  64. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +7 -1
  65. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +4 -3
  66. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +1 -1
  67. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +6 -6
  68. package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +2 -2
  69. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +5 -4
  70. package/packages/omo-codex/scripts/install-dist/install-local.mjs +21 -2
  71. package/packages/shared-skills/skills/browser/SKILL.md +24 -7
  72. package/packages/shared-skills/skills/browser/references/commands.md +41 -4
  73. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +15 -4
  74. package/packages/shared-skills/skills/browser/references/recipes/1password.md +4 -2
  75. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +232 -341
  76. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +5 -5
  77. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1586 -1394
  78. package/packages/shared-skills/skills/browser/scripts/browser-doctor-report.mjs +68 -0
  79. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +8 -43
  80. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +7 -1
  81. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +4 -3
  82. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +1 -1
  83. package/packages/shared-skills/skills/ulw-research/SKILL.md +6 -6
  84. package/packages/shared-skills/skills/ulw-research/references/research-collection.md +2 -2
  85. 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.64",
2136
+ version: "5.1.66",
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.5-1",
2323
+ "@code-yeongyu/senpi": "2026.11.9-2",
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:*",
@@ -2375,7 +2375,7 @@ var init_package = __esm(() => {
2375
2375
  "jsonc-parser": "^3.3.1",
2376
2376
  knip: "6.43.0",
2377
2377
  "node-pty": "^1.1.0",
2378
- omowright: "github:code-yeongyu/omowright#73c4898ca492e6e12e3f13948be7151806457a43",
2378
+ omowright: "^0.3.0",
2379
2379
  "oxc-parser": "0.148.0",
2380
2380
  oxlint: "1.89.0",
2381
2381
  picocolors: "^1.1.1",
@@ -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.64",
2389
- "oh-my-opencode-darwin-x64": "5.1.64",
2390
- "oh-my-opencode-darwin-x64-baseline": "5.1.64",
2391
- "oh-my-opencode-linux-arm64": "5.1.64",
2392
- "oh-my-opencode-linux-arm64-musl": "5.1.64",
2393
- "oh-my-opencode-linux-x64": "5.1.64",
2394
- "oh-my-opencode-linux-x64-baseline": "5.1.64",
2395
- "oh-my-opencode-linux-x64-musl": "5.1.64",
2396
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.64",
2397
- "oh-my-opencode-windows-arm64": "5.1.64",
2398
- "oh-my-opencode-windows-x64": "5.1.64",
2399
- "oh-my-opencode-windows-x64-baseline": "5.1.64"
2388
+ "oh-my-opencode-darwin-arm64": "5.1.66",
2389
+ "oh-my-opencode-darwin-x64": "5.1.66",
2390
+ "oh-my-opencode-darwin-x64-baseline": "5.1.66",
2391
+ "oh-my-opencode-linux-arm64": "5.1.66",
2392
+ "oh-my-opencode-linux-arm64-musl": "5.1.66",
2393
+ "oh-my-opencode-linux-x64": "5.1.66",
2394
+ "oh-my-opencode-linux-x64-baseline": "5.1.66",
2395
+ "oh-my-opencode-linux-x64-musl": "5.1.66",
2396
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.66",
2397
+ "oh-my-opencode-windows-arm64": "5.1.66",
2398
+ "oh-my-opencode-windows-x64": "5.1.66",
2399
+ "oh-my-opencode-windows-x64-baseline": "5.1.66"
2400
2400
  },
2401
2401
  overrides: {
2402
2402
  hono: "^4.13.8",
@@ -77199,7 +77199,7 @@ var init_memory_agreements = __esm(() => {
77199
77199
  });
77200
77200
 
77201
77201
  // packages/omo-config-core/src/schema/memory.ts
77202
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryProjectScopeSchema, OmoMemoryProjectScopeLayerSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemoryAutoIdentitySchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
77202
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryProjectScopeSchema, OmoMemoryProjectScopeLayerSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryRuntimeSchema, OmoMemoryRuntimeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemoryAutoIdentitySchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
77203
77203
  var init_memory = __esm(() => {
77204
77204
  init_zod();
77205
77205
  init_memory_agreements();
@@ -77348,6 +77348,22 @@ var init_memory = __esm(() => {
77348
77348
  max_entries_per_directory: number2().int().min(0).optional(),
77349
77349
  max_bytes: number2().int().min(0).optional()
77350
77350
  }).strict();
77351
+ OmoMemoryRuntimeSchema = object({
77352
+ retention_days: number2().int().min(1).default(7),
77353
+ abandoned_journal_days: number2().int().min(1).default(14),
77354
+ completions_days: number2().int().min(1).default(30),
77355
+ pass_budget_ms: number2().int().min(1).default(60000),
77356
+ discard_unreflected_journals: boolean2().default(false),
77357
+ max_bytes: number2().int().min(0).default(2 * 1024 * 1024 * 1024)
77358
+ }).strict();
77359
+ OmoMemoryRuntimeLayerSchema = object({
77360
+ retention_days: number2().int().min(1).optional(),
77361
+ abandoned_journal_days: number2().int().min(1).optional(),
77362
+ completions_days: number2().int().min(1).optional(),
77363
+ pass_budget_ms: number2().int().min(1).optional(),
77364
+ discard_unreflected_journals: boolean2().optional(),
77365
+ max_bytes: number2().int().min(0).optional()
77366
+ }).strict();
77351
77367
  OmoMemoryAgentOverridesSchema = object({
77352
77368
  enabled: boolean2().optional(),
77353
77369
  agent: string2().min(1).optional(),
@@ -77363,6 +77379,7 @@ var init_memory = __esm(() => {
77363
77379
  search: OmoMemorySearchLayerSchema.optional(),
77364
77380
  recall: OmoMemoryRecallLayerSchema.optional(),
77365
77381
  projection: OmoMemoryProjectionLayerSchema.optional(),
77382
+ runtime: OmoMemoryRuntimeLayerSchema.optional(),
77366
77383
  compile_warn_tokens: number2().int().positive().optional()
77367
77384
  }).strict();
77368
77385
  OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
@@ -77407,6 +77424,7 @@ var init_memory = __esm(() => {
77407
77424
  }),
77408
77425
  project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
77409
77426
  projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 0, max_bytes: 40960 }),
77427
+ runtime: OmoMemoryRuntimeSchema.default({ retention_days: 7, abandoned_journal_days: 14, completions_days: 30, pass_budget_ms: 60000, discard_unreflected_journals: false, max_bytes: 2 * 1024 * 1024 * 1024 }),
77410
77428
  compile_warn_tokens: number2().int().positive().default(30000),
77411
77429
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
77412
77430
  }).strict();
@@ -77427,6 +77445,7 @@ var init_memory = __esm(() => {
77427
77445
  recall: OmoMemoryRecallLayerSchema.optional(),
77428
77446
  project_scope: OmoMemoryProjectScopeLayerSchema.optional(),
77429
77447
  projection: OmoMemoryProjectionLayerSchema.optional(),
77448
+ runtime: OmoMemoryRuntimeLayerSchema.optional(),
77430
77449
  compile_warn_tokens: number2().int().positive().optional(),
77431
77450
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
77432
77451
  }).strict();
@@ -92818,7 +92837,7 @@ var package_default2;
92818
92837
  var init_package2 = __esm(() => {
92819
92838
  package_default2 = {
92820
92839
  name: "@oh-my-opencode/omo-codex",
92821
- version: "5.1.64",
92840
+ version: "5.1.66",
92822
92841
  type: "module",
92823
92842
  private: true,
92824
92843
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -104951,6 +104970,7 @@ var RuntimeFallbackConfigSchema = object({
104951
104970
  max_fallback_attempts: number2().min(1).max(20).optional(),
104952
104971
  cooldown_seconds: number2().min(0).optional(),
104953
104972
  timeout_seconds: number2().min(0).optional(),
104973
+ first_prompt_timeout_seconds: number2().min(0).optional(),
104954
104974
  notify_on_fallback: boolean2().optional(),
104955
104975
  restore_primary_after_cooldown: boolean2().optional()
104956
104976
  });
@@ -109581,8 +109601,8 @@ var package_default3 = {
109581
109601
  },
109582
109602
  dependencies: {
109583
109603
  "@clack/prompts": "^1.8.1",
109584
- "@code-yeongyu/senpi": "2026.11.5-1",
109585
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.5-1",
109604
+ "@code-yeongyu/senpi": "2026.11.9-2",
109605
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.9-2",
109586
109606
  "@modelcontextprotocol/sdk": "^1.30.0",
109587
109607
  "@oh-my-opencode/agents-md-core": "workspace:*",
109588
109608
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -112435,6 +112455,15 @@ function signInHint(when, route = signInRoute()) {
112435
112455
  return SIGN_IN_HINTS[route][when];
112436
112456
  }
112437
112457
 
112458
+ // packages/omo-opencode/src/cli/service-auth/closed-device-login.ts
112459
+ init_commander();
112460
+ function withClosedDeviceLoginOptions(command) {
112461
+ return command.helpOption(false).allowUnknownOption().allowExcessArguments().option("--device").option("--no-browser").option("--api <url>");
112462
+ }
112463
+ function isClosedDeviceLogin(options, leftover) {
112464
+ return (options.device === true || options.browser === false) && leftover.length === 0;
112465
+ }
112466
+
112438
112467
  // packages/omo-opencode/src/cli/service-auth/browser.ts
112439
112468
  import { execFile as execFile6 } from "node:child_process";
112440
112469
  var execute = (file, args, env) => new Promise((resolve) => {
@@ -115164,6 +115193,7 @@ var discardedOf = (credentials, cause) => ({
115164
115193
  });
115165
115194
  function createSession(options) {
115166
115195
  const api = serviceOrigin(options.api);
115196
+ const deviceService = options.deviceService;
115167
115197
  const now = options.now ?? Date.now;
115168
115198
  const { store, signal, beforeKeysDiscarded } = options;
115169
115199
  const markerPath = signedOutMarkerPath(options.home ?? homedir35(), credentialId(api));
@@ -115200,6 +115230,7 @@ function createSession(options) {
115200
115230
  if (error instanceof ApiRefusal && error.status < 500 && ["unauthorized", "account_deleted", "reauth_required", "invalid_grant", "device_revoked"].includes(error.code)) {
115201
115231
  await beforeKeysDiscarded(discardedOf(current, "refused"));
115202
115232
  await store.clear();
115233
+ await deviceService?.forget();
115203
115234
  throw new SessionEnded(error.code === "reauth_required" ? `This session was ended because its refresh token was reused. ${signInHint("again")}` : refusalMessage(refusalGuidance(error.code, error.status)), DEVICE_REVOKING_REFUSALS.has(error.code), error.code);
115204
115235
  }
115205
115236
  if (error instanceof RequestFailure && error.notSent || error instanceof ApiRefusal && error.status === 429 && error.code === "rate_limited") {
@@ -115241,6 +115272,7 @@ function createSession(options) {
115241
115272
  await store.write(value, "fresh-sign-in", () => beforeKeysDiscarded({ kind: "unreadable" }));
115242
115273
  await clearSignedOutMarker(markerPath);
115243
115274
  });
115275
+ await deviceService?.adopt(value);
115244
115276
  },
115245
115277
  signedOutMarker: () => readSignedOutMarker(markerPath),
115246
115278
  clearSignedOutMarker: () => clearSignedOutMarker(markerPath),
@@ -115259,41 +115291,46 @@ function createSession(options) {
115259
115291
  },
115260
115292
  async forget() {
115261
115293
  await locked(() => store.clear());
115294
+ await deviceService?.forget();
115262
115295
  },
115263
115296
  accessSnapshot: snapshot,
115264
115297
  async logout() {
115265
- return locked(async () => {
115266
- let current = null;
115267
- let account;
115268
- try {
115269
- current = await store.readAuthoritative();
115270
- if (current !== null) {
115271
- if (current.refreshState === "uncertain")
115272
- return false;
115273
- const access = Date.parse(current.accessTokenExpiresAt) <= now() ? (await refreshed(current)).accessToken : current.accessToken;
115274
- if (current.accountId === undefined && current.owner === undefined && await beforeKeysDiscarded.wantsAccount?.() === true) {
115275
- account = await accountOf(access);
115298
+ try {
115299
+ return await locked(async () => {
115300
+ let current = null;
115301
+ let account;
115302
+ try {
115303
+ current = await store.readAuthoritative();
115304
+ if (current !== null) {
115305
+ if (current.refreshState === "uncertain")
115306
+ return false;
115307
+ const access = Date.parse(current.accessTokenExpiresAt) <= now() ? (await refreshed(current)).accessToken : current.accessToken;
115308
+ if (current.accountId === undefined && current.owner === undefined && await beforeKeysDiscarded.wantsAccount?.() === true) {
115309
+ account = await accountOf(access);
115310
+ }
115311
+ await request(`/v1/devices/${encodeURIComponent(current.device.id)}`, {
115312
+ method: "DELETE",
115313
+ headers: { authorization: `Bearer ${access}` }
115314
+ });
115276
115315
  }
115277
- await request(`/v1/devices/${encodeURIComponent(current.device.id)}`, {
115278
- method: "DELETE",
115279
- headers: { authorization: `Bearer ${access}` }
115280
- });
115316
+ return true;
115317
+ } catch (error) {
115318
+ if (error instanceof SessionEnded)
115319
+ return error.deviceRevoked;
115320
+ if (error instanceof SignInError)
115321
+ return false;
115322
+ throw error;
115323
+ } finally {
115324
+ await writeSignedOutMarker(markerPath, current?.device.id ?? null);
115325
+ const stored = current === null ? null : await store.read().catch(() => current);
115326
+ if (stored !== null)
115327
+ await beforeKeysDiscarded(discardedOf(stored.accountId === undefined && account !== undefined ? { ...stored, accountId: account } : stored, "logout"));
115328
+ await store.clear();
115281
115329
  }
115282
- return true;
115283
- } catch (error) {
115284
- if (error instanceof SessionEnded)
115285
- return error.deviceRevoked;
115286
- if (error instanceof SignInError)
115287
- return false;
115288
- throw error;
115289
- } finally {
115290
- await writeSignedOutMarker(markerPath, current?.device.id ?? null);
115291
- const stored = current === null ? null : await store.read().catch(() => current);
115292
- if (stored !== null)
115293
- await beforeKeysDiscarded(discardedOf(stored.accountId === undefined && account !== undefined ? { ...stored, accountId: account } : stored, "logout"));
115294
- await store.clear();
115295
- }
115296
- });
115330
+ });
115331
+ } finally {
115332
+ await deviceService?.forget();
115333
+ }
115297
115334
  },
115298
115335
  async accessToken(expect) {
115299
115336
  signal?.throwIfAborted();
@@ -115382,7 +115419,7 @@ var DEFAULT_ACCOUNTS_ORIGIN = "https://signin.omo.dev";
115382
115419
  function accountsOrigin(options, env) {
115383
115420
  return serviceOrigin(options.accounts ?? env.OMO_SERVICE_ACCOUNTS_URL ?? DEFAULT_ACCOUNTS_ORIGIN);
115384
115421
  }
115385
- async function run2(action, options) {
115422
+ async function run2(action, options, hooks = {}) {
115386
115423
  const controller = new AbortController;
115387
115424
  const cancel = () => controller.abort();
115388
115425
  process.once("SIGINT", cancel);
@@ -115390,10 +115427,12 @@ async function run2(action, options) {
115390
115427
  try {
115391
115428
  const api = serviceOrigin(options.api ?? process.env.OMO_SERVICE_API_URL ?? "https://api.omo.dev");
115392
115429
  const store = createCredentialStore(api, { wait: INTERACTIVE_READ_WAIT });
115430
+ const deviceService = hooks.deviceService?.(api);
115393
115431
  const session = createSession({
115394
115432
  api,
115395
115433
  store,
115396
115434
  signal: controller.signal,
115435
+ ...deviceService === undefined ? {} : { deviceService },
115397
115436
  beforeKeysDiscarded: retireSyncPinOnDiscard({ pinDir: () => syncPinDir(resolveMemoryRoot(process.env, process.cwd())), log: (line) => console.error(line) })
115398
115437
  });
115399
115438
  if (action === "logout") {
@@ -115453,10 +115492,10 @@ function refuseClosedServiceAuth() {
115453
115492
  console.error(SERVICE_ACCOUNTS_CLOSED_MESSAGE);
115454
115493
  process.exit(1);
115455
115494
  }
115456
- function configureClosedServiceAuthCommands(program) {
115495
+ function configureClosedServiceAuthCommands(program, hooks) {
115457
115496
  for (const name of SERVICE_AUTH_COMMANDS) {
115458
115497
  if (name === "login") {
115459
- configureClosedDeviceLogin(program);
115498
+ configureClosedDeviceLogin(program, hooks);
115460
115499
  continue;
115461
115500
  }
115462
115501
  const command = program.command(name, { hidden: true }).helpOption(false).allowUnknownOption().allowExcessArguments().action(() => {
@@ -115466,25 +115505,25 @@ function configureClosedServiceAuthCommands(program) {
115466
115505
  command.help = refuseClosedServiceAuth;
115467
115506
  }
115468
115507
  }
115469
- function configureClosedDeviceLogin(program) {
115470
- const command = program.command("login", { hidden: true }).helpOption(false).allowUnknownOption().allowExcessArguments().option("--device").option("--no-browser").option("--api <url>").action((options) => {
115471
- if (options.device !== true && options.browser !== false || command.args.length > 0) {
115508
+ function configureClosedDeviceLogin(program, hooks) {
115509
+ const command = withClosedDeviceLoginOptions(program.command("login", { hidden: true })).action((options) => {
115510
+ if (!isClosedDeviceLogin(options, command.args)) {
115472
115511
  console.error(SERVICE_ACCOUNTS_CLOSED_MESSAGE);
115473
115512
  process.exitCode = 1;
115474
115513
  return;
115475
115514
  }
115476
- return run2("login", { ...options, device: true });
115515
+ return run2("login", { ...options, device: true }, hooks);
115477
115516
  });
115478
115517
  command.help = refuseClosedServiceAuth;
115479
115518
  }
115480
- function configureServiceAuthCommands(program, open = serviceAccountsOpen()) {
115519
+ function configureServiceAuthCommands(program, open = serviceAccountsOpen(), hooks = {}) {
115481
115520
  if (!open) {
115482
- configureClosedServiceAuthCommands(program);
115521
+ configureClosedServiceAuthCommands(program, hooks);
115483
115522
  return;
115484
115523
  }
115485
- program.command("login").description("Sign in to OmO using the OS credential store").option("--device", "Use a device code instead of a browser callback").option("--no-browser", "Sign in by device code without opening a browser").option("--api <url>", "OmO API origin (or OMO_SERVICE_API_URL)").option("--accounts <url>", "OmO sign-in page origin (or OMO_SERVICE_ACCOUNTS_URL)").action((options) => run2("login", options));
115524
+ program.command("login").description("Sign in to OmO using the OS credential store").option("--device", "Use a device code instead of a browser callback").option("--no-browser", "Sign in by device code without opening a browser").option("--api <url>", "OmO API origin (or OMO_SERVICE_API_URL)").option("--accounts <url>", "OmO sign-in page origin (or OMO_SERVICE_ACCOUNTS_URL)").action((options) => run2("login", options, hooks));
115486
115525
  for (const action of ["logout", "whoami"]) {
115487
- program.command(action).description(action === "logout" ? "Remove stored OmO credentials and device keys" : "Show the current OmO device sign-in").option("--api <url>", "OmO API origin (or OMO_SERVICE_API_URL)").action((options) => run2(action, options));
115526
+ program.command(action).description(action === "logout" ? "Remove stored OmO credentials and device keys" : "Show the current OmO device sign-in").option("--api <url>", "OmO API origin (or OMO_SERVICE_API_URL)").action((options) => run2(action, options, hooks));
115488
115527
  }
115489
115528
  }
115490
115529
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -7287,6 +7287,22 @@ var OmoMemoryProjectionLayerSchema = object({
7287
7287
  max_entries_per_directory: number2().int().min(0).optional(),
7288
7288
  max_bytes: number2().int().min(0).optional()
7289
7289
  }).strict();
7290
+ var OmoMemoryRuntimeSchema = object({
7291
+ retention_days: number2().int().min(1).default(7),
7292
+ abandoned_journal_days: number2().int().min(1).default(14),
7293
+ completions_days: number2().int().min(1).default(30),
7294
+ pass_budget_ms: number2().int().min(1).default(60000),
7295
+ discard_unreflected_journals: boolean2().default(false),
7296
+ max_bytes: number2().int().min(0).default(2 * 1024 * 1024 * 1024)
7297
+ }).strict();
7298
+ var OmoMemoryRuntimeLayerSchema = object({
7299
+ retention_days: number2().int().min(1).optional(),
7300
+ abandoned_journal_days: number2().int().min(1).optional(),
7301
+ completions_days: number2().int().min(1).optional(),
7302
+ pass_budget_ms: number2().int().min(1).optional(),
7303
+ discard_unreflected_journals: boolean2().optional(),
7304
+ max_bytes: number2().int().min(0).optional()
7305
+ }).strict();
7290
7306
  var OmoMemoryAgentOverridesSchema = object({
7291
7307
  enabled: boolean2().optional(),
7292
7308
  agent: string2().min(1).optional(),
@@ -7302,6 +7318,7 @@ var OmoMemoryAgentOverridesSchema = object({
7302
7318
  search: OmoMemorySearchLayerSchema.optional(),
7303
7319
  recall: OmoMemoryRecallLayerSchema.optional(),
7304
7320
  projection: OmoMemoryProjectionLayerSchema.optional(),
7321
+ runtime: OmoMemoryRuntimeLayerSchema.optional(),
7305
7322
  compile_warn_tokens: number2().int().positive().optional()
7306
7323
  }).strict();
7307
7324
  var OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
@@ -7346,6 +7363,7 @@ var OmoMemorySettingsSchema = object({
7346
7363
  }),
7347
7364
  project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
7348
7365
  projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 0, max_bytes: 40960 }),
7366
+ runtime: OmoMemoryRuntimeSchema.default({ retention_days: 7, abandoned_journal_days: 14, completions_days: 30, pass_budget_ms: 60000, discard_unreflected_journals: false, max_bytes: 2 * 1024 * 1024 * 1024 }),
7349
7367
  compile_warn_tokens: number2().int().positive().default(30000),
7350
7368
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
7351
7369
  }).strict();
@@ -7366,6 +7384,7 @@ var OmoMemorySettingsLayerSchema = object({
7366
7384
  recall: OmoMemoryRecallLayerSchema.optional(),
7367
7385
  project_scope: OmoMemoryProjectScopeLayerSchema.optional(),
7368
7386
  projection: OmoMemoryProjectionLayerSchema.optional(),
7387
+ runtime: OmoMemoryRuntimeLayerSchema.optional(),
7369
7388
  compile_warn_tokens: number2().int().positive().optional(),
7370
7389
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
7371
7390
  }).strict();
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.64) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.1.66) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.64) Checking Comments"
11
+ "statusMessage": "(OmO 5.1.66) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.1.64) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.1.66) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.1.64) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.1.66) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.1.64) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.1.66) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.1.64",
4
- "inputDigest": "sha256:cb017b0862fd36470d54593563d4f3e4679904b6ac9208f738eab88cddb9f78a",
3
+ "version": "5.1.66",
4
+ "inputDigest": "sha256:9d361074ac1ead129a62074e9417d52268b4e4893f9c93b5e05fffd0e0c692ab",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.1.64) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.1.66) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.1.64) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.1.66) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.1.64) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.1.66) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.1.64) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.1.66) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.1.64) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.1.66) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.1.64) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.1.66) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.1.64) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.1.66) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.1.64) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.1.66) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.1.64) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.1.66) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.1.64) Checking Ulw-Execute Continuation"
10
+ "statusMessage": "(OmO 5.1.66) Checking Ulw-Execute Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
3
- "version": "5.1.64",
3
+ "version": "5.1.66",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex ulw-execute plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",