lazycodex-ai 5.1.60 → 5.1.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +181 -32
- package/dist/cli/service-auth/index.d.ts +2 -1
- package/dist/cli/service-auth/session.d.ts +27 -0
- package/dist/cli/service-auth/sync-pin-retire.d.ts +7 -0
- package/dist/cli-node/index.js +181 -32
- package/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +13 -0
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +3 -3
- package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +2 -2
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +15 -2
- package/packages/shared-skills/skills/browser/references/owned-engine/README.md +1 -1
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/frontend/SKILL.md +2 -2
- package/packages/shared-skills/skills/frontend/references/design/README.md +2 -2
- package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +2 -2
- package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -1
- package/packages/shared-skills/skills/programming/references/python/libraries.md +3 -3
- package/packages/shared-skills/skills/programming/references/python/one-liners.md +1 -1
- package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +1 -1
- package/packages/shared-skills/skills/programming/references/rust/libraries.md +2 -2
- package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +1 -1
- package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +2 -2
package/dist/cli-node/index.js
CHANGED
|
@@ -2133,7 +2133,7 @@ var package_default;
|
|
|
2133
2133
|
var init_package = __esm(() => {
|
|
2134
2134
|
package_default = {
|
|
2135
2135
|
name: "oh-my-opencode",
|
|
2136
|
-
version: "5.1.
|
|
2136
|
+
version: "5.1.62",
|
|
2137
2137
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2138
2138
|
main: "./dist/index.js",
|
|
2139
2139
|
types: "dist/index.d.ts",
|
|
@@ -2320,7 +2320,7 @@ var init_package = __esm(() => {
|
|
|
2320
2320
|
},
|
|
2321
2321
|
devDependencies: {
|
|
2322
2322
|
"@clack/prompts": "^1.8.1",
|
|
2323
|
-
"@code-yeongyu/senpi": "2026.11.
|
|
2323
|
+
"@code-yeongyu/senpi": "2026.11.5-1",
|
|
2324
2324
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
2325
2325
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2326
2326
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -2385,18 +2385,18 @@ var init_package = __esm(() => {
|
|
|
2385
2385
|
typescript: "^7.0.2"
|
|
2386
2386
|
},
|
|
2387
2387
|
optionalDependencies: {
|
|
2388
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
2389
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2390
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2391
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2392
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2393
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2394
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2395
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2396
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2397
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2398
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2399
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
2388
|
+
"oh-my-opencode-darwin-arm64": "5.1.62",
|
|
2389
|
+
"oh-my-opencode-darwin-x64": "5.1.62",
|
|
2390
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.62",
|
|
2391
|
+
"oh-my-opencode-linux-arm64": "5.1.62",
|
|
2392
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.62",
|
|
2393
|
+
"oh-my-opencode-linux-x64": "5.1.62",
|
|
2394
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.62",
|
|
2395
|
+
"oh-my-opencode-linux-x64-musl": "5.1.62",
|
|
2396
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.62",
|
|
2397
|
+
"oh-my-opencode-windows-arm64": "5.1.62",
|
|
2398
|
+
"oh-my-opencode-windows-x64": "5.1.62",
|
|
2399
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.62"
|
|
2400
2400
|
},
|
|
2401
2401
|
overrides: {
|
|
2402
2402
|
hono: "^4.13.8",
|
|
@@ -7491,7 +7491,7 @@ function createLogger(options) {
|
|
|
7491
7491
|
function scheduleFlush() {
|
|
7492
7492
|
if (flushTimer)
|
|
7493
7493
|
return;
|
|
7494
|
-
flushTimer =
|
|
7494
|
+
flushTimer = scheduleTimeout(() => {
|
|
7495
7495
|
flushTimer = null;
|
|
7496
7496
|
flush();
|
|
7497
7497
|
}, flushIntervalMs);
|
|
@@ -7518,7 +7518,7 @@ function createLogger(options) {
|
|
|
7518
7518
|
function _setLoggerForTesting(overrides) {
|
|
7519
7519
|
buffer = [];
|
|
7520
7520
|
if (flushTimer) {
|
|
7521
|
-
|
|
7521
|
+
cancelTimeout(flushTimer);
|
|
7522
7522
|
flushTimer = null;
|
|
7523
7523
|
}
|
|
7524
7524
|
if (overrides.filePath !== undefined)
|
|
@@ -7534,13 +7534,13 @@ function createLogger(options) {
|
|
|
7534
7534
|
maxLogFileBackups = maxLogFileBackupsDefault;
|
|
7535
7535
|
buffer = [];
|
|
7536
7536
|
if (flushTimer) {
|
|
7537
|
-
|
|
7537
|
+
cancelTimeout(flushTimer);
|
|
7538
7538
|
flushTimer = null;
|
|
7539
7539
|
}
|
|
7540
7540
|
}
|
|
7541
7541
|
function _flushForTesting() {
|
|
7542
7542
|
if (flushTimer) {
|
|
7543
|
-
|
|
7543
|
+
cancelTimeout(flushTimer);
|
|
7544
7544
|
flushTimer = null;
|
|
7545
7545
|
}
|
|
7546
7546
|
flush();
|
|
@@ -7553,8 +7553,10 @@ function createLogger(options) {
|
|
|
7553
7553
|
_flushForTesting
|
|
7554
7554
|
};
|
|
7555
7555
|
}
|
|
7556
|
-
var DEFAULT_MAX_LOG_FILE_SIZE_BYTES, DEFAULT_MAX_LOG_FILE_BACKUPS = 2, DEFAULT_LOG_FLUSH_INTERVAL_MS = 500, DEFAULT_LOG_BUFFER_SIZE_LIMIT = 50;
|
|
7556
|
+
var scheduleTimeout, cancelTimeout, DEFAULT_MAX_LOG_FILE_SIZE_BYTES, DEFAULT_MAX_LOG_FILE_BACKUPS = 2, DEFAULT_LOG_FLUSH_INTERVAL_MS = 500, DEFAULT_LOG_BUFFER_SIZE_LIMIT = 50;
|
|
7557
7557
|
var init_logger = __esm(() => {
|
|
7558
|
+
scheduleTimeout = globalThis.setTimeout;
|
|
7559
|
+
cancelTimeout = globalThis.clearTimeout;
|
|
7558
7560
|
DEFAULT_MAX_LOG_FILE_SIZE_BYTES = 50 * 1024 * 1024;
|
|
7559
7561
|
});
|
|
7560
7562
|
|
|
@@ -77716,6 +77718,19 @@ var init_telemetry = __esm(() => {
|
|
|
77716
77718
|
}).strict();
|
|
77717
77719
|
});
|
|
77718
77720
|
|
|
77721
|
+
// packages/omo-config-core/src/schema/device-service.ts
|
|
77722
|
+
var OmoDeviceServiceSettingsShape, OmoDeviceServiceSettingsLayerSchema, OmoDeviceServiceSettingsSchema;
|
|
77723
|
+
var init_device_service = __esm(() => {
|
|
77724
|
+
init_zod();
|
|
77725
|
+
OmoDeviceServiceSettingsShape = {
|
|
77726
|
+
enabled: boolean2()
|
|
77727
|
+
};
|
|
77728
|
+
OmoDeviceServiceSettingsLayerSchema = object(OmoDeviceServiceSettingsShape).partial().strict();
|
|
77729
|
+
OmoDeviceServiceSettingsSchema = OmoDeviceServiceSettingsLayerSchema.extend({
|
|
77730
|
+
enabled: boolean2().default(true)
|
|
77731
|
+
}).strict();
|
|
77732
|
+
});
|
|
77733
|
+
|
|
77719
77734
|
// packages/omo-config-core/src/schema/format-on-mutation.ts
|
|
77720
77735
|
var mode, languages, OmoFormatOnMutationLayerSchema, OmoFormatOnMutationSchema;
|
|
77721
77736
|
var init_format_on_mutation = __esm(() => {
|
|
@@ -77764,6 +77779,7 @@ var init_config = __esm(() => {
|
|
|
77764
77779
|
init_task();
|
|
77765
77780
|
init_team();
|
|
77766
77781
|
init_telemetry();
|
|
77782
|
+
init_device_service();
|
|
77767
77783
|
init_format_on_mutation();
|
|
77768
77784
|
init_provenance();
|
|
77769
77785
|
OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
|
|
@@ -77783,6 +77799,7 @@ var init_config = __esm(() => {
|
|
|
77783
77799
|
model_pad: OmoModelPadSchema.optional(),
|
|
77784
77800
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
77785
77801
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
77802
|
+
device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
|
|
77786
77803
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77787
77804
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77788
77805
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -77802,6 +77819,7 @@ var init_config = __esm(() => {
|
|
|
77802
77819
|
model_pad: OmoModelPadSchema.optional(),
|
|
77803
77820
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
77804
77821
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
77822
|
+
device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
|
|
77805
77823
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77806
77824
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77807
77825
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -77826,6 +77844,7 @@ var init_config = __esm(() => {
|
|
|
77826
77844
|
model_pad: OmoModelPadSchema.optional(),
|
|
77827
77845
|
memory: OmoMemorySettingsSchema.optional(),
|
|
77828
77846
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
77847
|
+
device_service: OmoDeviceServiceSettingsSchema.optional(),
|
|
77829
77848
|
side_panel: OmoSidePanelSettingsSchema.optional(),
|
|
77830
77849
|
computer: OmoComputerSettingsSchema.optional(),
|
|
77831
77850
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -77853,6 +77872,7 @@ var init_config = __esm(() => {
|
|
|
77853
77872
|
model_pad: OmoModelPadSchema.optional(),
|
|
77854
77873
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
77855
77874
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
77875
|
+
device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
|
|
77856
77876
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77857
77877
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77858
77878
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -78004,6 +78024,7 @@ var init_schema = __esm(() => {
|
|
|
78004
78024
|
init_task();
|
|
78005
78025
|
init_team();
|
|
78006
78026
|
init_telemetry();
|
|
78027
|
+
init_device_service();
|
|
78007
78028
|
init_computer();
|
|
78008
78029
|
});
|
|
78009
78030
|
|
|
@@ -92768,7 +92789,7 @@ var package_default2;
|
|
|
92768
92789
|
var init_package2 = __esm(() => {
|
|
92769
92790
|
package_default2 = {
|
|
92770
92791
|
name: "@oh-my-opencode/omo-codex",
|
|
92771
|
-
version: "5.1.
|
|
92792
|
+
version: "5.1.62",
|
|
92772
92793
|
type: "module",
|
|
92773
92794
|
private: true,
|
|
92774
92795
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -100144,6 +100165,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
100144
100165
|
join66("extensions", "omo-memory-commands.js"),
|
|
100145
100166
|
join66("extensions", "omo-session-history.js"),
|
|
100146
100167
|
join66("extensions", "omo-recall-store.js"),
|
|
100168
|
+
join66("extensions", "omo-device-service.js"),
|
|
100147
100169
|
join66("extensions", "omo-telemetry-posthog.js"),
|
|
100148
100170
|
join66("extensions", "omo-telemetry-otlp.js"),
|
|
100149
100171
|
join66("extensions", "omo-memory-sync.js"),
|
|
@@ -104430,6 +104452,7 @@ var BuiltinSkillNameSchema = _enum([
|
|
|
104430
104452
|
"debugging",
|
|
104431
104453
|
"security-research",
|
|
104432
104454
|
"security-review",
|
|
104455
|
+
"hyperplan",
|
|
104433
104456
|
"visual-qa",
|
|
104434
104457
|
"team-mode"
|
|
104435
104458
|
]);
|
|
@@ -109528,8 +109551,8 @@ var package_default3 = {
|
|
|
109528
109551
|
},
|
|
109529
109552
|
dependencies: {
|
|
109530
109553
|
"@clack/prompts": "^1.8.1",
|
|
109531
|
-
"@code-yeongyu/senpi": "2026.11.
|
|
109532
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.
|
|
109554
|
+
"@code-yeongyu/senpi": "2026.11.5-1",
|
|
109555
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.11.5-1",
|
|
109533
109556
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
109534
109557
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
109535
109558
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -112801,6 +112824,24 @@ function retryOnEintrSync(operation) {
|
|
|
112801
112824
|
|
|
112802
112825
|
// packages/memory-core/src/fs/rename-contention.ts
|
|
112803
112826
|
var CONTENTION_CODES = new Set(["EPERM", "EBUSY", "EACCES"]);
|
|
112827
|
+
var CONTENTION_DELAYS_MS = [10, 25, 50, 100, 200, 400];
|
|
112828
|
+
var sleepFor = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
112829
|
+
async function renameWithContentionRetry(from, to, deps) {
|
|
112830
|
+
const delays = deps.platform === "win32" ? deps.delaysMs ?? CONTENTION_DELAYS_MS : [];
|
|
112831
|
+
const sleep = deps.sleep ?? sleepFor;
|
|
112832
|
+
for (let attempt = 0;; attempt += 1) {
|
|
112833
|
+
try {
|
|
112834
|
+
await retryOnEintr(() => deps.admit === undefined ? deps.rename(from, to) : deps.admit(() => deps.rename(from, to)));
|
|
112835
|
+
return;
|
|
112836
|
+
} catch (error) {
|
|
112837
|
+
const delay = delays[attempt];
|
|
112838
|
+
const code = fsErrorCode(error);
|
|
112839
|
+
if (delay === undefined || code === undefined || !CONTENTION_CODES.has(code))
|
|
112840
|
+
throw error;
|
|
112841
|
+
await sleep(delay);
|
|
112842
|
+
}
|
|
112843
|
+
}
|
|
112844
|
+
}
|
|
112804
112845
|
|
|
112805
112846
|
// packages/memory-core/src/fs/resilient.ts
|
|
112806
112847
|
function isFunction2(value) {
|
|
@@ -112833,6 +112874,13 @@ function resilientNamespace(namespace, kind) {
|
|
|
112833
112874
|
}
|
|
112834
112875
|
var IDEMPOTENT_HANDLE_METHODS = new Set(["stat", "sync", "datasync", "chmod", "chown", "utimes", "truncate"]);
|
|
112835
112876
|
var promises = resilientNamespace(fsp, "async");
|
|
112877
|
+
function rename8(from, to, admit) {
|
|
112878
|
+
return renameWithContentionRetry(from, to, {
|
|
112879
|
+
rename: (source, target) => fsp.rename(source, target),
|
|
112880
|
+
platform: process.platform,
|
|
112881
|
+
...admit === undefined ? {} : { admit }
|
|
112882
|
+
});
|
|
112883
|
+
}
|
|
112836
112884
|
var sync = resilientNamespace(fsSync, "sync");
|
|
112837
112885
|
var {
|
|
112838
112886
|
access: access3,
|
|
@@ -113728,15 +113776,60 @@ async function loginLoopback(session, options) {
|
|
|
113728
113776
|
}
|
|
113729
113777
|
}
|
|
113730
113778
|
|
|
113731
|
-
// packages/
|
|
113779
|
+
// packages/memory-core/src/sync/device-retire.ts
|
|
113780
|
+
import { createHash as createHash14, randomBytes as randomBytes6 } from "node:crypto";
|
|
113781
|
+
import { join as join109 } from "node:path";
|
|
113782
|
+
|
|
113783
|
+
// packages/memory-core/src/identity/layout.ts
|
|
113732
113784
|
import { homedir as homedir32 } from "node:os";
|
|
113785
|
+
import { join as join107, resolve as resolve31 } from "node:path";
|
|
113786
|
+
var MEMORY_ROOT_ENV_VAR = "OMO_MEMORY_HOME";
|
|
113787
|
+
function defaultMemoryRoot() {
|
|
113788
|
+
return join107(homedir32(), ".omo", "memory");
|
|
113789
|
+
}
|
|
113790
|
+
function resolveMemoryRoot(env, cwd) {
|
|
113791
|
+
const override = env[MEMORY_ROOT_ENV_VAR];
|
|
113792
|
+
if (override === undefined || override.trim() === "") {
|
|
113793
|
+
return defaultMemoryRoot();
|
|
113794
|
+
}
|
|
113795
|
+
return resolve31(cwd, override);
|
|
113796
|
+
}
|
|
113797
|
+
// packages/memory-core/src/sync/pin-dir.ts
|
|
113798
|
+
import { join as join108 } from "node:path";
|
|
113799
|
+
var syncPinDir = (memoryRoot) => join108(memoryRoot, "sync-device");
|
|
113800
|
+
|
|
113801
|
+
// packages/memory-core/src/sync/device-retire.ts
|
|
113802
|
+
var trustAnchorRoot = (pinDir) => join109(pinDir, "trust-anchor");
|
|
113803
|
+
var trustAnchorKey = (account) => createHash14("sha256").update(account, "utf8").digest("base64url");
|
|
113804
|
+
var trustAnchorDir = (pinDir, account) => join109(trustAnchorRoot(pinDir), trustAnchorKey(account));
|
|
113805
|
+
var hasLiveTrustAnchor = async (pinDir) => {
|
|
113806
|
+
try {
|
|
113807
|
+
return (await readdir17(trustAnchorRoot(pinDir))).some((name) => !name.includes(".retired-"));
|
|
113808
|
+
} catch (error) {
|
|
113809
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT")
|
|
113810
|
+
return false;
|
|
113811
|
+
throw error;
|
|
113812
|
+
}
|
|
113813
|
+
};
|
|
113814
|
+
var retireSyncDevice = async (input) => {
|
|
113815
|
+
const dir = trustAnchorDir(input.pinDir, input.account);
|
|
113816
|
+
try {
|
|
113817
|
+
await rename8(dir, `${dir}.retired-${Date.now()}-${randomBytes6(4).toString("hex")}`);
|
|
113818
|
+
} catch (error) {
|
|
113819
|
+
if (!(error instanceof Error && ("code" in error) && error.code === "ENOENT"))
|
|
113820
|
+
throw error;
|
|
113821
|
+
}
|
|
113822
|
+
};
|
|
113823
|
+
|
|
113824
|
+
// packages/omo-opencode/src/cli/service-auth/session.ts
|
|
113825
|
+
import { homedir as homedir33 } from "node:os";
|
|
113733
113826
|
|
|
113734
113827
|
// packages/omo-opencode/src/cli/service-auth/signed-out-marker.ts
|
|
113735
113828
|
init_zod();
|
|
113736
|
-
import { mkdir as mkdir12, readFile as readFile35, rename as
|
|
113737
|
-
import { dirname as dirname43, join as
|
|
113829
|
+
import { mkdir as mkdir12, readFile as readFile35, rename as rename9, rm as rm17, writeFile as writeFile17 } from "node:fs/promises";
|
|
113830
|
+
import { dirname as dirname43, join as join110 } from "node:path";
|
|
113738
113831
|
var markerSchema = object({ device: string2().nullable(), at: string2() });
|
|
113739
|
-
var signedOutMarkerPath = (home, credential) =>
|
|
113832
|
+
var signedOutMarkerPath = (home, credential) => join110(home, ".omo", "account-state", `${credential}.signed-out.json`);
|
|
113740
113833
|
async function readSignedOutMarker(path) {
|
|
113741
113834
|
const text = await readFile35(path, "utf8").catch(() => null);
|
|
113742
113835
|
if (text === null)
|
|
@@ -113754,7 +113847,7 @@ async function writeSignedOutMarker(path, device) {
|
|
|
113754
113847
|
await mkdir12(dirname43(path), { recursive: true, mode: 448 });
|
|
113755
113848
|
const staging = `${path}.${process.pid}.tmp`;
|
|
113756
113849
|
await writeFile17(staging, JSON.stringify({ device, at: new Date().toISOString() }), { mode: 384 });
|
|
113757
|
-
await
|
|
113850
|
+
await rename9(staging, path);
|
|
113758
113851
|
}
|
|
113759
113852
|
var clearSignedOutMarker = (path) => rm17(path, { force: true });
|
|
113760
113853
|
|
|
@@ -113769,11 +113862,18 @@ class SessionEnded extends SignInError {
|
|
|
113769
113862
|
}
|
|
113770
113863
|
}
|
|
113771
113864
|
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required", "device_revoked"]);
|
|
113865
|
+
var discardedOf = (credentials, cause) => ({
|
|
113866
|
+
kind: "credential",
|
|
113867
|
+
deviceId: credentials.device.id,
|
|
113868
|
+
accountId: credentials.accountId,
|
|
113869
|
+
owner: credentials.owner,
|
|
113870
|
+
cause
|
|
113871
|
+
});
|
|
113772
113872
|
function createSession(options) {
|
|
113773
113873
|
const api = serviceOrigin(options.api);
|
|
113774
113874
|
const now = options.now ?? Date.now;
|
|
113775
|
-
const { store, signal } = options;
|
|
113776
|
-
const markerPath = signedOutMarkerPath(options.home ??
|
|
113875
|
+
const { store, signal, beforeKeysDiscarded } = options;
|
|
113876
|
+
const markerPath = signedOutMarkerPath(options.home ?? homedir33(), credentialId(api));
|
|
113777
113877
|
async function locked(action) {
|
|
113778
113878
|
signal?.throwIfAborted();
|
|
113779
113879
|
return withCredentialLock(api, async () => {
|
|
@@ -113782,6 +113882,11 @@ function createSession(options) {
|
|
|
113782
113882
|
}, options.home);
|
|
113783
113883
|
}
|
|
113784
113884
|
const request = (path, init) => requestApi(api, path, init, signal);
|
|
113885
|
+
const accountOf = async (access) => {
|
|
113886
|
+
const body = await request("/v1/me", { headers: { authorization: `Bearer ${access}` } }).catch(() => null);
|
|
113887
|
+
const id = typeof body === "object" && body !== null && "account" in body && typeof body.account === "object" && body.account !== null && "id" in body.account ? body.account.id : undefined;
|
|
113888
|
+
return typeof id === "string" && id !== "" ? id : undefined;
|
|
113889
|
+
};
|
|
113785
113890
|
async function refreshed(current) {
|
|
113786
113891
|
if (current.refreshState === "uncertain" || current.refreshAttempt !== undefined) {
|
|
113787
113892
|
throw new SessionEnded(`Refresh recovery can no longer be proved safe. ${signInHint("again")}`, false, "refresh_recovery_expired");
|
|
@@ -113798,6 +113903,7 @@ function createSession(options) {
|
|
|
113798
113903
|
if (error instanceof CredentialStoreError)
|
|
113799
113904
|
throw error;
|
|
113800
113905
|
if (error instanceof ApiRefusal && error.status < 500 && ["unauthorized", "account_deleted", "reauth_required", "invalid_grant", "device_revoked"].includes(error.code)) {
|
|
113906
|
+
await beforeKeysDiscarded(discardedOf(current, "refused"));
|
|
113801
113907
|
await store.clear();
|
|
113802
113908
|
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);
|
|
113803
113909
|
}
|
|
@@ -113823,6 +113929,17 @@ function createSession(options) {
|
|
|
113823
113929
|
},
|
|
113824
113930
|
async save(value) {
|
|
113825
113931
|
await locked(async () => {
|
|
113932
|
+
let stored;
|
|
113933
|
+
try {
|
|
113934
|
+
stored = await store.readAuthoritative();
|
|
113935
|
+
} catch (error) {
|
|
113936
|
+
if (!(error instanceof InvalidCredentialState))
|
|
113937
|
+
throw error;
|
|
113938
|
+
await beforeKeysDiscarded({ kind: "unreadable" });
|
|
113939
|
+
stored = null;
|
|
113940
|
+
}
|
|
113941
|
+
if (stored !== null && stored.device.id !== value.device.id)
|
|
113942
|
+
await beforeKeysDiscarded(discardedOf(stored, "replaced"));
|
|
113826
113943
|
await store.write(value);
|
|
113827
113944
|
await clearSignedOutMarker(markerPath);
|
|
113828
113945
|
});
|
|
@@ -113849,12 +113966,16 @@ function createSession(options) {
|
|
|
113849
113966
|
async logout() {
|
|
113850
113967
|
return locked(async () => {
|
|
113851
113968
|
let current = null;
|
|
113969
|
+
let account;
|
|
113852
113970
|
try {
|
|
113853
113971
|
current = await store.readAuthoritative();
|
|
113854
113972
|
if (current !== null) {
|
|
113855
113973
|
if (current.refreshState === "uncertain")
|
|
113856
113974
|
return false;
|
|
113857
113975
|
const access = Date.parse(current.accessTokenExpiresAt) <= now() ? (await refreshed(current)).accessToken : current.accessToken;
|
|
113976
|
+
if (current.accountId === undefined && current.owner === undefined && await beforeKeysDiscarded.wantsAccount?.() === true) {
|
|
113977
|
+
account = await accountOf(access);
|
|
113978
|
+
}
|
|
113858
113979
|
await request(`/v1/devices/${encodeURIComponent(current.device.id)}`, {
|
|
113859
113980
|
method: "DELETE",
|
|
113860
113981
|
headers: { authorization: `Bearer ${access}` }
|
|
@@ -113869,6 +113990,9 @@ function createSession(options) {
|
|
|
113869
113990
|
throw error;
|
|
113870
113991
|
} finally {
|
|
113871
113992
|
await writeSignedOutMarker(markerPath, current?.device.id ?? null);
|
|
113993
|
+
const stored = current === null ? null : await store.read().catch(() => current);
|
|
113994
|
+
if (stored !== null)
|
|
113995
|
+
await beforeKeysDiscarded(discardedOf(stored.accountId === undefined && account !== undefined ? { ...stored, accountId: account } : stored, "logout"));
|
|
113872
113996
|
await store.clear();
|
|
113873
113997
|
}
|
|
113874
113998
|
});
|
|
@@ -113905,6 +114029,26 @@ function createSession(options) {
|
|
|
113905
114029
|
};
|
|
113906
114030
|
}
|
|
113907
114031
|
|
|
114032
|
+
// packages/omo-opencode/src/cli/service-auth/sync-pin-retire.ts
|
|
114033
|
+
var reason = (error) => error instanceof Error && ("code" in error) && typeof error.code === "string" ? error.code : "unknown";
|
|
114034
|
+
function retireSyncPinOnDiscard(options) {
|
|
114035
|
+
const hook = async (discarded) => {
|
|
114036
|
+
if (discarded.kind === "unreadable") {
|
|
114037
|
+
options.log("memory sync: a stored sign-in could not be read while it was replaced; its sync pin was left in place");
|
|
114038
|
+
return;
|
|
114039
|
+
}
|
|
114040
|
+
const account = discarded.owner?.accountId ?? discarded.accountId;
|
|
114041
|
+
if (account === undefined)
|
|
114042
|
+
return;
|
|
114043
|
+
try {
|
|
114044
|
+
await retireSyncDevice({ pinDir: options.pinDir(), account });
|
|
114045
|
+
} catch (error) {
|
|
114046
|
+
options.log(`memory sync: the sync pin could not be retired (${reason(error)}); it was left in place`);
|
|
114047
|
+
}
|
|
114048
|
+
};
|
|
114049
|
+
return Object.assign(hook, { wantsAccount: () => hasLiveTrustAnchor(options.pinDir()).catch(() => false) });
|
|
114050
|
+
}
|
|
114051
|
+
|
|
113908
114052
|
// packages/omo-opencode/src/cli/service-auth/commands.ts
|
|
113909
114053
|
async function ensureServiceAvailable(session, api) {
|
|
113910
114054
|
try {
|
|
@@ -113947,7 +114091,12 @@ async function run2(action, options) {
|
|
|
113947
114091
|
try {
|
|
113948
114092
|
const api = serviceOrigin(options.api ?? process.env.OMO_SERVICE_API_URL ?? "https://api.omo.dev");
|
|
113949
114093
|
const store = createCredentialStore(api, { wait: INTERACTIVE_READ_WAIT });
|
|
113950
|
-
const session = createSession({
|
|
114094
|
+
const session = createSession({
|
|
114095
|
+
api,
|
|
114096
|
+
store,
|
|
114097
|
+
signal: controller.signal,
|
|
114098
|
+
beforeKeysDiscarded: retireSyncPinOnDiscard({ pinDir: () => syncPinDir(resolveMemoryRoot(process.env, process.cwd())), log: (line) => console.error(line) })
|
|
114099
|
+
});
|
|
113951
114100
|
if (action === "logout") {
|
|
113952
114101
|
const revoked = await session.logout();
|
|
113953
114102
|
console.log("Signed out of OmO. Stored credentials and device keys were removed.");
|
|
@@ -114215,11 +114364,11 @@ async function boulder(options) {
|
|
|
114215
114364
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
114216
114365
|
import { spawn as spawn6 } from "node:child_process";
|
|
114217
114366
|
import { existsSync as existsSync67, readFileSync as readFileSync45, realpathSync as realpathSync14 } from "node:fs";
|
|
114218
|
-
import { homedir as
|
|
114367
|
+
import { homedir as homedir34 } from "node:os";
|
|
114219
114368
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
114220
114369
|
function resolveCodexUlwLoopCommand(input = {}) {
|
|
114221
114370
|
const env = input.env ?? process.env;
|
|
114222
|
-
const homeDir = input.homeDir ??
|
|
114371
|
+
const homeDir = input.homeDir ?? homedir34();
|
|
114223
114372
|
const localComponentBin = resolveLocalUlwLoopBin(env, homeDir);
|
|
114224
114373
|
if (localComponentBin !== null)
|
|
114225
114374
|
return { executable: localComponentBin, argsPrefix: [] };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazycodex-ai",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.62",
|
|
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",
|
|
@@ -7655,6 +7655,15 @@ var OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
|
|
|
7655
7655
|
enabled: boolean2().default(true)
|
|
7656
7656
|
}).strict();
|
|
7657
7657
|
|
|
7658
|
+
// ../../omo-config-core/src/schema/device-service.ts
|
|
7659
|
+
var OmoDeviceServiceSettingsShape = {
|
|
7660
|
+
enabled: boolean2()
|
|
7661
|
+
};
|
|
7662
|
+
var OmoDeviceServiceSettingsLayerSchema = object(OmoDeviceServiceSettingsShape).partial().strict();
|
|
7663
|
+
var OmoDeviceServiceSettingsSchema = OmoDeviceServiceSettingsLayerSchema.extend({
|
|
7664
|
+
enabled: boolean2().default(true)
|
|
7665
|
+
}).strict();
|
|
7666
|
+
|
|
7658
7667
|
// ../../omo-config-core/src/schema/format-on-mutation.ts
|
|
7659
7668
|
var mode = _enum(["off", "best-effort", "required"]);
|
|
7660
7669
|
var languages = record(string2(), boolean2()).optional();
|
|
@@ -7697,6 +7706,7 @@ var OmoTypedHarnessConfigSchema = object({
|
|
|
7697
7706
|
model_pad: OmoModelPadSchema.optional(),
|
|
7698
7707
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
7699
7708
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
7709
|
+
device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
|
|
7700
7710
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
7701
7711
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
7702
7712
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -7716,6 +7726,7 @@ var OmoConfigProfileSchema = object({
|
|
|
7716
7726
|
model_pad: OmoModelPadSchema.optional(),
|
|
7717
7727
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
7718
7728
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
7729
|
+
device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
|
|
7719
7730
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
7720
7731
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
7721
7732
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -7740,6 +7751,7 @@ var OmoConfigSchema = object({
|
|
|
7740
7751
|
model_pad: OmoModelPadSchema.optional(),
|
|
7741
7752
|
memory: OmoMemorySettingsSchema.optional(),
|
|
7742
7753
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
7754
|
+
device_service: OmoDeviceServiceSettingsSchema.optional(),
|
|
7743
7755
|
side_panel: OmoSidePanelSettingsSchema.optional(),
|
|
7744
7756
|
computer: OmoComputerSettingsSchema.optional(),
|
|
7745
7757
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -7767,6 +7779,7 @@ var OmoConfigLayerSchema = object({
|
|
|
7767
7779
|
model_pad: OmoModelPadSchema.optional(),
|
|
7768
7780
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
7769
7781
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
7782
|
+
device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
|
|
7770
7783
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
7771
7784
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
7772
7785
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
@@ -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.
|
|
11
|
+
"statusMessage": "(OmO 5.1.62) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -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.
|
|
11
|
+
"statusMessage": "(OmO 5.1.62) 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.
|
|
23
|
+
"statusMessage": "(OmO 5.1.62) Resetting Git Bash MCP Reminder"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -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.
|
|
11
|
+
"statusMessage": "(OmO 5.1.62) Verifying LazyCodex Executor Evidence"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -67,7 +67,7 @@ sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-sou
|
|
|
67
67
|
- Latest LazyCodex version from `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` (release tags or the version stamped in the repo) and latest Codex release (`gh release view --repo openai/codex`).
|
|
68
68
|
- OS, install method, and `lazycodex` / `lazycodex-ai` bin links resolving (`command -v`).
|
|
69
69
|
- Astra readiness. The LazyCodex catalog default is `gpt-6-astra`, which Codex only knows from codex-cli 0.153.1 onward. First release tag containing the `models.json` change: `rust-v0.153.1` (backport commit `5cc1c94b8e`). Reproduce on a full clone with tags: `git -C <codex-clone> log --format='%h %d' -S gpt-6-astra -- codex-rs/models-manager/models.json`, then `git -C <codex-clone> tag --contains 5cc1c94b8e | sort -V | head -1`; a shallow clone or one without tags returns nothing. Record the installed version from `codex --version`, the root `model` in `$CODEX_HOME/config.toml` (informational only, it doesn't change the verdict), and, when `$CODEX_HOME/models_cache.json` exists, whether it contains `gpt-6-astra` (`grep -c gpt-6-astra "${CODEX_HOME:-$HOME/.codex}/models_cache.json"`). Verdict: PASS when `codex --version` is 0.153.1 or newer and `models_cache.json` is either absent or lists `gpt-6-astra`. WARN when the version is older than 0.153.1, or the cache exists but lacks `gpt-6-astra`; remediation is upgrading Codex (`npm install -g @openai/codex@latest`, or the package manager that installed `codex`), then starting Codex once so `models_cache.json` refreshes.
|
|
70
|
-
3. Check config and wiring against the latest installer, not against assumptions. Read what the current installer under `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` writes (
|
|
70
|
+
3. Check config and wiring against the latest installer, not against assumptions. Read what the current installer under `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` writes (in that checkout, `plugins/omo/scripts/migrate-codex-config.mjs` and its `migrate-codex-config/` helpers produce the LazyCodex-managed `config.toml` entries, and `plugins/omo/.codex-plugin/plugin.json` declares the payload), then verify the local equivalents:
|
|
71
71
|
- `$CODEX_HOME/config.toml` exists and parses; LazyCodex-managed entries match what the latest installer would write.
|
|
72
72
|
- Plugin payload present and non-empty: read `.codex-plugin/plugin.json`; when that manifest declares a `hooks` array, validate every direct hook path declared by the manifest; require `hooks/hooks.json` only when the manifest declares it; do not require retired paths such as `components/workflow-selector` or `hooks/user-prompt-submit-selecting-lazycodex-workflow.json` unless the current manifest declares them.
|
|
73
73
|
- Verify the manifest-declared runtime payload, not a remembered source tree. Current payload includes `skills/`, `.mcp.json`, root CLI runtimes such as `dist/cli/index.js` and `dist/cli-node/index.js`, and every hook/MCP `components/*/dist/*.js` target referenced by installed manifests.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "5.1.
|
|
4
|
-
"inputDigest": "sha256:
|
|
3
|
+
"version": "5.1.62",
|
|
4
|
+
"inputDigest": "sha256:02c829fe463bfc768c81c04b28cf3d1ecb00b9d4b833753b6dc94c9a65b6f052",
|
|
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.
|
|
11
|
+
"statusMessage": "(OmO 5.1.62) 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.
|
|
24
|
+
"statusMessage": "(OmO 5.1.62) Resetting LSP Diagnostics Cache"
|
|
25
25
|
}
|
|
26
26
|
]
|
|
27
27
|
}
|