lazycodex-ai 5.0.1 → 5.1.0
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/README.ja.md +2 -1
- package/README.ko.md +2 -1
- package/README.md +2 -1
- package/README.ru.md +2 -1
- package/README.zh-cn.md +2 -1
- package/dist/cli/index.js +241 -144
- package/dist/cli-node/index.js +241 -144
- package/package.json +6 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +26 -3
- 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/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/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js +42 -32
- 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-execute-continuation/src/plan-checklist.ts +55 -29
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/test/boulder-reader.test.ts +51 -0
- 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/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +37 -14
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
package/dist/cli-node/index.js
CHANGED
|
@@ -65,7 +65,7 @@ var package_default;
|
|
|
65
65
|
var init_package = __esm(() => {
|
|
66
66
|
package_default = {
|
|
67
67
|
name: "oh-my-opencode",
|
|
68
|
-
version: "5.0
|
|
68
|
+
version: "5.1.0",
|
|
69
69
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
70
70
|
main: "./dist/index.js",
|
|
71
71
|
types: "dist/index.d.ts",
|
|
@@ -98,6 +98,11 @@ var init_package = __esm(() => {
|
|
|
98
98
|
"packages/omo-codex",
|
|
99
99
|
"packages/omo-senpi",
|
|
100
100
|
"packages/senpi-task",
|
|
101
|
+
"packages/senpi-desktop-protocol",
|
|
102
|
+
"packages/senpi-desktop-engine",
|
|
103
|
+
"packages/senpi-desktop-prelude",
|
|
104
|
+
"packages/senpi-desktop-service",
|
|
105
|
+
"packages/senpi-desktop-tool",
|
|
101
106
|
"packages/omo-opencode",
|
|
102
107
|
"packages/omo-native"
|
|
103
108
|
],
|
|
@@ -199,7 +204,7 @@ var init_package = __esm(() => {
|
|
|
199
204
|
prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
200
205
|
"test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
|
|
201
206
|
typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
202
|
-
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
|
|
207
|
+
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-protocol/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-engine/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-prelude/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-service/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-tool/tsconfig.json",
|
|
203
208
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
204
209
|
test: "bun test --timeout 20000",
|
|
205
210
|
"changelog:section": "bun script/changelog-section.ts",
|
|
@@ -208,7 +213,8 @@ var init_package = __esm(() => {
|
|
|
208
213
|
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
|
|
209
214
|
"test:windows-codex": "bun run test:codex",
|
|
210
215
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
211
|
-
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
|
|
216
|
+
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build",
|
|
217
|
+
"test:desktop": "bun script/check-cargo-pinned-deps.mjs && bun run --cwd packages/senpi-desktop-protocol test && bun run --cwd packages/senpi-desktop-engine test && bun run --cwd packages/senpi-desktop-prelude test && bun run --cwd packages/senpi-desktop-service test && bun run --cwd packages/senpi-desktop-tool test"
|
|
212
218
|
},
|
|
213
219
|
keywords: [
|
|
214
220
|
"opencode",
|
|
@@ -248,7 +254,7 @@ var init_package = __esm(() => {
|
|
|
248
254
|
zod: "^4.6.5"
|
|
249
255
|
},
|
|
250
256
|
devDependencies: {
|
|
251
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
257
|
+
"@code-yeongyu/senpi": "2026.9.28-7",
|
|
252
258
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
253
259
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
254
260
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -257,11 +263,11 @@ var init_package = __esm(() => {
|
|
|
257
263
|
"@oh-my-opencode/delegate-core": "workspace:*",
|
|
258
264
|
"@oh-my-opencode/git-bash-mcp": "workspace:*",
|
|
259
265
|
"@oh-my-opencode/hashline-core": "workspace:*",
|
|
260
|
-
"@oh-my-opencode/lsp-core": "workspace:*",
|
|
261
266
|
"@oh-my-opencode/isolation-core": "workspace:*",
|
|
262
|
-
"@oh-my-opencode/
|
|
267
|
+
"@oh-my-opencode/lsp-core": "workspace:*",
|
|
263
268
|
"@oh-my-opencode/mcp-client-core": "workspace:*",
|
|
264
269
|
"@oh-my-opencode/mcp-stdio-core": "workspace:*",
|
|
270
|
+
"@oh-my-opencode/memory-core": "workspace:*",
|
|
265
271
|
"@oh-my-opencode/model-core": "workspace:*",
|
|
266
272
|
"@oh-my-opencode/omo-codex": "workspace:*",
|
|
267
273
|
"@oh-my-opencode/omo-config-core": "workspace:*",
|
|
@@ -270,6 +276,11 @@ var init_package = __esm(() => {
|
|
|
270
276
|
"@oh-my-opencode/openclaw-core": "workspace:*",
|
|
271
277
|
"@oh-my-opencode/prompts-core": "workspace:*",
|
|
272
278
|
"@oh-my-opencode/rules-engine": "workspace:*",
|
|
279
|
+
"@oh-my-opencode/senpi-desktop-engine": "workspace:*",
|
|
280
|
+
"@oh-my-opencode/senpi-desktop-prelude": "workspace:*",
|
|
281
|
+
"@oh-my-opencode/senpi-desktop-protocol": "workspace:*",
|
|
282
|
+
"@oh-my-opencode/senpi-desktop-service": "workspace:*",
|
|
283
|
+
"@oh-my-opencode/senpi-desktop-tool": "workspace:*",
|
|
273
284
|
"@oh-my-opencode/senpi-task": "workspace:*",
|
|
274
285
|
"@oh-my-opencode/shared-skills": "workspace:*",
|
|
275
286
|
"@oh-my-opencode/skills-loader-core": "workspace:*",
|
|
@@ -289,18 +300,18 @@ var init_package = __esm(() => {
|
|
|
289
300
|
typescript: "^7.0.2"
|
|
290
301
|
},
|
|
291
302
|
optionalDependencies: {
|
|
292
|
-
"oh-my-opencode-darwin-arm64": "5.0
|
|
293
|
-
"oh-my-opencode-darwin-x64": "5.0
|
|
294
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0
|
|
295
|
-
"oh-my-opencode-linux-arm64": "5.0
|
|
296
|
-
"oh-my-opencode-linux-arm64-musl": "5.0
|
|
297
|
-
"oh-my-opencode-linux-x64": "5.0
|
|
298
|
-
"oh-my-opencode-linux-x64-baseline": "5.0
|
|
299
|
-
"oh-my-opencode-linux-x64-musl": "5.0
|
|
300
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0
|
|
301
|
-
"oh-my-opencode-windows-arm64": "5.0
|
|
302
|
-
"oh-my-opencode-windows-x64": "5.0
|
|
303
|
-
"oh-my-opencode-windows-x64-baseline": "5.0
|
|
303
|
+
"oh-my-opencode-darwin-arm64": "5.1.0",
|
|
304
|
+
"oh-my-opencode-darwin-x64": "5.1.0",
|
|
305
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.0",
|
|
306
|
+
"oh-my-opencode-linux-arm64": "5.1.0",
|
|
307
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.0",
|
|
308
|
+
"oh-my-opencode-linux-x64": "5.1.0",
|
|
309
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.0",
|
|
310
|
+
"oh-my-opencode-linux-x64-musl": "5.1.0",
|
|
311
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.0",
|
|
312
|
+
"oh-my-opencode-windows-arm64": "5.1.0",
|
|
313
|
+
"oh-my-opencode-windows-x64": "5.1.0",
|
|
314
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.0"
|
|
304
315
|
},
|
|
305
316
|
overrides: {
|
|
306
317
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -6397,6 +6408,9 @@ function getActiveReservation(sessionID) {
|
|
|
6397
6408
|
pruneExpiredReservations();
|
|
6398
6409
|
return promptAsyncReservations.get(sessionID);
|
|
6399
6410
|
}
|
|
6411
|
+
function reservedDispatchResult(reservation) {
|
|
6412
|
+
return reservation.expiresAt === undefined ? { status: "reserved", reservedBy: reservation.source } : { status: "reserved", reservedBy: reservation.source, expiresAt: reservation.expiresAt };
|
|
6413
|
+
}
|
|
6400
6414
|
function setPromptReservation(sessionID, reservation) {
|
|
6401
6415
|
promptAsyncReservations.set(sessionID, reservation);
|
|
6402
6416
|
}
|
|
@@ -6446,7 +6460,7 @@ async function dispatchAfterSessionIdle(args) {
|
|
|
6446
6460
|
reservedBy: existing.source,
|
|
6447
6461
|
reservedAgeMs: Date.now() - existing.reservedAt
|
|
6448
6462
|
});
|
|
6449
|
-
return
|
|
6463
|
+
return reservedDispatchResult(existing);
|
|
6450
6464
|
}
|
|
6451
6465
|
const reservation = {
|
|
6452
6466
|
source,
|
|
@@ -6984,7 +6998,7 @@ async function dispatchInternalPrompt(args) {
|
|
|
6984
6998
|
if (queueBehavior === "defer") {
|
|
6985
6999
|
const activeReservation = getActiveReservation(sessionID);
|
|
6986
7000
|
if (activeReservation) {
|
|
6987
|
-
return
|
|
7001
|
+
return reservedDispatchResult(activeReservation);
|
|
6988
7002
|
}
|
|
6989
7003
|
const queuedBy = getQueuedPromptBlocker(sessionID);
|
|
6990
7004
|
if (queuedBy !== undefined || isPromptQueueDraining(sessionID)) {
|
|
@@ -8041,8 +8055,17 @@ var init_model_resolver = () => {};
|
|
|
8041
8055
|
// packages/model-core/src/fallback-chain-from-models.ts
|
|
8042
8056
|
var init_fallback_chain_from_models = () => {};
|
|
8043
8057
|
|
|
8058
|
+
// packages/model-core/src/runtime-fallback-auto-retry-signal.ts
|
|
8059
|
+
var init_runtime_fallback_auto_retry_signal = () => {};
|
|
8060
|
+
|
|
8061
|
+
// packages/model-core/src/runtime-fallback-error-shape.ts
|
|
8062
|
+
var init_runtime_fallback_error_shape = () => {};
|
|
8063
|
+
|
|
8064
|
+
// packages/model-core/src/runtime-fallback-error-classifier.ts
|
|
8065
|
+
var init_runtime_fallback_error_classifier = () => {};
|
|
8066
|
+
|
|
8044
8067
|
// packages/model-core/src/model-error-classifier.ts
|
|
8045
|
-
var RETRYABLE_ERROR_NAMES,
|
|
8068
|
+
var RETRYABLE_ERROR_NAMES, NON_RETRYABLE_ERROR_NAMES;
|
|
8046
8069
|
var init_model_error_classifier = __esm(() => {
|
|
8047
8070
|
RETRYABLE_ERROR_NAMES = new Set([
|
|
8048
8071
|
"providermodelnotfounderror",
|
|
@@ -8051,11 +8074,6 @@ var init_model_error_classifier = __esm(() => {
|
|
|
8051
8074
|
"providerconnectionerror",
|
|
8052
8075
|
"authenticationerror"
|
|
8053
8076
|
]);
|
|
8054
|
-
STOP_ERROR_NAMES = new Set([
|
|
8055
|
-
"quotaexceedederror",
|
|
8056
|
-
"insufficientcreditserror",
|
|
8057
|
-
"freeusagelimiterror"
|
|
8058
|
-
]);
|
|
8059
8077
|
NON_RETRYABLE_ERROR_NAMES = new Set([
|
|
8060
8078
|
"messageabortederror",
|
|
8061
8079
|
"permissiondeniederror",
|
|
@@ -8067,15 +8085,6 @@ var init_model_error_classifier = __esm(() => {
|
|
|
8067
8085
|
]);
|
|
8068
8086
|
});
|
|
8069
8087
|
|
|
8070
|
-
// packages/model-core/src/runtime-fallback-auto-retry-signal.ts
|
|
8071
|
-
var init_runtime_fallback_auto_retry_signal = () => {};
|
|
8072
|
-
|
|
8073
|
-
// packages/model-core/src/runtime-fallback-error-shape.ts
|
|
8074
|
-
var init_runtime_fallback_error_shape = () => {};
|
|
8075
|
-
|
|
8076
|
-
// packages/model-core/src/runtime-fallback-error-classifier.ts
|
|
8077
|
-
var init_runtime_fallback_error_classifier = () => {};
|
|
8078
|
-
|
|
8079
8088
|
// packages/model-core/src/provider-exhaustion-fallback-policy.ts
|
|
8080
8089
|
var init_provider_exhaustion_fallback_policy = () => {};
|
|
8081
8090
|
|
|
@@ -74415,6 +74424,29 @@ var init_category = __esm(() => {
|
|
|
74415
74424
|
OmoCategoriesConfigSchema = record(string2(), OmoCategoryConfigSchema);
|
|
74416
74425
|
});
|
|
74417
74426
|
|
|
74427
|
+
// packages/omo-config-core/src/schema/computer.ts
|
|
74428
|
+
var positiveInteger, nonNegativeInteger, OmoComputerSettingsLayerSchema, OmoComputerSettingsSchema;
|
|
74429
|
+
var init_computer = __esm(() => {
|
|
74430
|
+
init_zod();
|
|
74431
|
+
positiveInteger = number2().int().positive();
|
|
74432
|
+
nonNegativeInteger = number2().int().nonnegative();
|
|
74433
|
+
OmoComputerSettingsLayerSchema = object({
|
|
74434
|
+
enabled: boolean2().describe("Experimental: register the computer tool in OmO Native sessions (default: on where the host is supported; false leaves it unregistered)"),
|
|
74435
|
+
display: string2().min(1),
|
|
74436
|
+
max_width: positiveInteger,
|
|
74437
|
+
max_height: positiveInteger,
|
|
74438
|
+
screenshot_max_bytes: positiveInteger,
|
|
74439
|
+
stop_hotkey: string2().min(1),
|
|
74440
|
+
allow_host_relay_only_stop: boolean2(),
|
|
74441
|
+
macos_canary: _enum(["session", "off"]),
|
|
74442
|
+
audit_log: object({ enabled: boolean2() }).partial().strict(),
|
|
74443
|
+
screenshot_gc: object({ enabled: boolean2(), stale_ms: nonNegativeInteger, scan_interval_ms: nonNegativeInteger }).partial().strict(),
|
|
74444
|
+
engine_path: string2().min(1),
|
|
74445
|
+
cua_adapter: boolean2()
|
|
74446
|
+
}).partial().strict().describe("Experimental computer use in OmO Native: screenshots, windows, accessibility trees and native mouse and keyboard input. Every key is optional; defaults depend on the host.");
|
|
74447
|
+
OmoComputerSettingsSchema = OmoComputerSettingsLayerSchema;
|
|
74448
|
+
});
|
|
74449
|
+
|
|
74418
74450
|
// packages/omo-config-core/src/schema/git-master.ts
|
|
74419
74451
|
var OmoGitMasterSettingsShape, OmoGitMasterSettingsLayerSchema, OmoGitMasterSettingsSchema;
|
|
74420
74452
|
var init_git_master = __esm(() => {
|
|
@@ -74687,11 +74719,11 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
|
|
|
74687
74719
|
const record2 = record(string2(), unknown()).parse(input);
|
|
74688
74720
|
return OmoTaskSettingsSchema.parse({
|
|
74689
74721
|
...record2,
|
|
74690
|
-
residency_max_children: record2["residency_max_children"] ??
|
|
74722
|
+
residency_max_children: record2["residency_max_children"] ?? DEFAULT_RESIDENCY_MAX_CHILDREN,
|
|
74691
74723
|
global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
|
|
74692
74724
|
});
|
|
74693
74725
|
}
|
|
74694
|
-
var DEFAULT_RESIDENCY_MAX_CHILDREN =
|
|
74726
|
+
var DEFAULT_RESIDENCY_MAX_CHILDREN = "unlimited", ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, IsolationBackendKindSchema, OmoTaskIsolationSchema, isolationDefaults, OmoTaskIsolationLayerSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
|
|
74695
74727
|
var init_task = __esm(() => {
|
|
74696
74728
|
init_zod();
|
|
74697
74729
|
ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
|
|
@@ -74754,7 +74786,7 @@ var init_task = __esm(() => {
|
|
|
74754
74786
|
provider_concurrency: record(string2(), number2().int().nonnegative()).optional(),
|
|
74755
74787
|
model_concurrency: record(string2(), number2().int().nonnegative()).optional(),
|
|
74756
74788
|
max_depth: number2().int().nonnegative().default(1),
|
|
74757
|
-
residency_max_children: ResidencyMaxChildrenInputSchema.default(
|
|
74789
|
+
residency_max_children: ResidencyMaxChildrenInputSchema.default(DEFAULT_RESIDENCY_MAX_CHILDREN),
|
|
74758
74790
|
resident_idle_timeout_ms: number2().int().positive().max(Number.MAX_SAFE_INTEGER).default(900000),
|
|
74759
74791
|
ttl_ms: number2().int().positive().default(86400000),
|
|
74760
74792
|
state_dir: string2().optional(),
|
|
@@ -74905,6 +74937,7 @@ var init_config = __esm(() => {
|
|
|
74905
74937
|
init_zod();
|
|
74906
74938
|
init_agent();
|
|
74907
74939
|
init_category();
|
|
74940
|
+
init_computer();
|
|
74908
74941
|
init_git_master();
|
|
74909
74942
|
init_memory();
|
|
74910
74943
|
init_model_catalog();
|
|
@@ -74927,6 +74960,7 @@ var init_config = __esm(() => {
|
|
|
74927
74960
|
model_profile: string2().optional(),
|
|
74928
74961
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
74929
74962
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74963
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
74930
74964
|
disabled_skills: OmoDisabledSkillsSchema.optional()
|
|
74931
74965
|
}).strict();
|
|
74932
74966
|
OmoConfigProfileSchema = object({
|
|
@@ -74941,6 +74975,7 @@ var init_config = __esm(() => {
|
|
|
74941
74975
|
model_profile: string2().optional(),
|
|
74942
74976
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
74943
74977
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74978
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
74944
74979
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74945
74980
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74946
74981
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -74960,6 +74995,7 @@ var init_config = __esm(() => {
|
|
|
74960
74995
|
model_profile: string2().optional(),
|
|
74961
74996
|
memory: OmoMemorySettingsSchema.optional(),
|
|
74962
74997
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
74998
|
+
computer: OmoComputerSettingsSchema.optional(),
|
|
74963
74999
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74964
75000
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74965
75001
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -74982,6 +75018,7 @@ var init_config = __esm(() => {
|
|
|
74982
75018
|
model_profile: string2().optional(),
|
|
74983
75019
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
74984
75020
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
75021
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
74985
75022
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74986
75023
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74987
75024
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -75127,6 +75164,7 @@ var init_schema = __esm(() => {
|
|
|
75127
75164
|
init_task();
|
|
75128
75165
|
init_team();
|
|
75129
75166
|
init_telemetry();
|
|
75167
|
+
init_computer();
|
|
75130
75168
|
});
|
|
75131
75169
|
|
|
75132
75170
|
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
@@ -85438,7 +85476,7 @@ class SyncSpanContextManager {
|
|
|
85438
85476
|
var init_context = () => {};
|
|
85439
85477
|
|
|
85440
85478
|
// node_modules/.bun/@posthog+core@1.55.0/node_modules/@posthog/core/dist/traces/config.mjs
|
|
85441
|
-
function
|
|
85479
|
+
function positiveInteger2(value, fallback) {
|
|
85442
85480
|
return typeof value == "number" && Number.isInteger(value) && value >= 1 ? value : fallback;
|
|
85443
85481
|
}
|
|
85444
85482
|
function withUsableIdentityKeys(attributes) {
|
|
@@ -85473,22 +85511,22 @@ function resolveTracesConfig(config, hostResourceAttributes, logger) {
|
|
|
85473
85511
|
const resourceAttributes = assignUserAttributes({
|
|
85474
85512
|
...hostResourceAttributes
|
|
85475
85513
|
}, withUsableIdentityKeys(config?.resourceAttributes));
|
|
85476
|
-
const maxExportBatchSize =
|
|
85514
|
+
const maxExportBatchSize = positiveInteger2(config?.maxExportBatchSize, DEFAULT_MAX_EXPORT_BATCH_SIZE);
|
|
85477
85515
|
return {
|
|
85478
85516
|
serviceName: resourceAttributes?.["service.name"] ?? config?.serviceName,
|
|
85479
85517
|
serviceVersion: resourceAttributes?.["service.version"] ?? config?.serviceVersion,
|
|
85480
85518
|
environment: resourceAttributes?.["deployment.environment"] ?? config?.environment,
|
|
85481
85519
|
resourceAttributes,
|
|
85482
85520
|
beforeSpanSend: resolveBeforeSpanSend(config?.beforeSpanSend, logger),
|
|
85483
|
-
maxAttributesPerSpan:
|
|
85484
|
-
maxEventsPerSpan:
|
|
85521
|
+
maxAttributesPerSpan: positiveInteger2(config?.maxAttributesPerSpan, DEFAULT_MAX_ATTRIBUTES_PER_SPAN),
|
|
85522
|
+
maxEventsPerSpan: positiveInteger2(config?.maxEventsPerSpan, DEFAULT_MAX_EVENTS_PER_SPAN),
|
|
85485
85523
|
maxAttributesPerEvent: DEFAULT_MAX_ATTRIBUTES_PER_EVENT,
|
|
85486
|
-
maxAttributeValueLength:
|
|
85487
|
-
flushIntervalMs:
|
|
85524
|
+
maxAttributeValueLength: positiveInteger2(config?.maxAttributeValueLength, DEFAULT_MAX_ATTRIBUTE_VALUE_LENGTH),
|
|
85525
|
+
flushIntervalMs: positiveInteger2(config?.flushIntervalMs, DEFAULT_FLUSH_INTERVAL_MS2),
|
|
85488
85526
|
maxExportBatchSize,
|
|
85489
|
-
maxQueueSize: Math.max(
|
|
85490
|
-
maxLiveSpans:
|
|
85491
|
-
maxSpanAgeMs:
|
|
85527
|
+
maxQueueSize: Math.max(positiveInteger2(config?.maxQueueSize, DEFAULT_MAX_QUEUE_SIZE), maxExportBatchSize),
|
|
85528
|
+
maxLiveSpans: positiveInteger2(config?.maxLiveSpans, DEFAULT_MAX_LIVE_SPANS),
|
|
85529
|
+
maxSpanAgeMs: positiveInteger2(config?.maxSpanAgeMs, DEFAULT_MAX_SPAN_AGE_MS)
|
|
85492
85530
|
};
|
|
85493
85531
|
}
|
|
85494
85532
|
var DEFAULT_FLUSH_INTERVAL_MS2 = 5000, DEFAULT_MAX_EXPORT_BATCH_SIZE = 512, DEFAULT_MAX_QUEUE_SIZE = 2048, DEFAULT_MAX_ATTRIBUTES_PER_SPAN = 128, DEFAULT_MAX_EVENTS_PER_SPAN = 128, DEFAULT_MAX_ATTRIBUTES_PER_EVENT = 128, DEFAULT_MAX_ATTRIBUTE_VALUE_LENGTH = 8192, DEFAULT_MAX_LIVE_SPANS = 1e4, DEFAULT_MAX_SPAN_AGE_MS = 3600000, IDENTITY_KEYS;
|
|
@@ -89028,7 +89066,7 @@ var package_default2;
|
|
|
89028
89066
|
var init_package2 = __esm(() => {
|
|
89029
89067
|
package_default2 = {
|
|
89030
89068
|
name: "@oh-my-opencode/omo-codex",
|
|
89031
|
-
version: "5.0
|
|
89069
|
+
version: "5.1.0",
|
|
89032
89070
|
type: "module",
|
|
89033
89071
|
private: true,
|
|
89034
89072
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -98178,6 +98216,8 @@ function isErrno(error, code) {
|
|
|
98178
98216
|
var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
98179
98217
|
join62("extensions", "omo.js"),
|
|
98180
98218
|
join62("extensions", "omo-task.js"),
|
|
98219
|
+
join62("extensions", "omo-computer-use.js"),
|
|
98220
|
+
join62("extensions", "assets.generated.json"),
|
|
98181
98221
|
join62("extensions", "omo-member.js"),
|
|
98182
98222
|
join62("extensions", "memory-run-supervisor.mjs"),
|
|
98183
98223
|
...PERSONA_ASSET_FILES.map((filename) => join62("extensions", filename)),
|
|
@@ -98369,7 +98409,7 @@ async function runNativeDevInstaller(options) {
|
|
|
98369
98409
|
return runSenpiInstaller(options);
|
|
98370
98410
|
}
|
|
98371
98411
|
// packages/omo-opencode/src/cli/install-native/legacy-omo-bin.ts
|
|
98372
|
-
import { lstatSync as lstatSync4, readFileSync as readFileSync15, realpathSync as realpathSync8 } from "node:fs";
|
|
98412
|
+
import { lstatSync as lstatSync4, readFileSync as readFileSync15, realpathSync as realpathSync8, statSync as statSync4 } from "node:fs";
|
|
98373
98413
|
import { dirname as dirname26, isAbsolute as isAbsolute12, join as join64, posix as posix9, win32 as win325 } from "node:path";
|
|
98374
98414
|
var NATIVE_OMO_PACKAGE = "omo-ai";
|
|
98375
98415
|
var LEGACY_OMO_BIN_PACKAGES = ["oh-my-openagent", "oh-my-opencode", "lazycodex"];
|
|
@@ -98451,12 +98491,11 @@ function resolveOwner(binPath) {
|
|
|
98451
98491
|
if (fromLink !== null)
|
|
98452
98492
|
return fromLink;
|
|
98453
98493
|
const shim = readShimText(binPath);
|
|
98454
|
-
|
|
98455
|
-
return null;
|
|
98456
|
-
const lightWrapper = codexLightWrapperOwner(shim);
|
|
98494
|
+
const lightWrapper = shim === null ? null : codexLightWrapperOwner(shim);
|
|
98457
98495
|
if (lightWrapper !== null)
|
|
98458
98496
|
return lightWrapper;
|
|
98459
|
-
|
|
98497
|
+
const entries = [...shim === null ? [] : shimEntryPaths(shim, dirname26(binPath)), ...bunxEntryPaths(binPath)];
|
|
98498
|
+
for (const entry of entries) {
|
|
98460
98499
|
if (!isInsideNodeModules(entry) || !pathExists(entry))
|
|
98461
98500
|
continue;
|
|
98462
98501
|
const owner = ownerOfFile(entry);
|
|
@@ -98477,6 +98516,23 @@ function shimEntryPaths(shim, shimDirectory) {
|
|
|
98477
98516
|
}
|
|
98478
98517
|
return paths;
|
|
98479
98518
|
}
|
|
98519
|
+
function bunxEntryPaths(binPath) {
|
|
98520
|
+
if (!/\.exe$/i.test(binPath))
|
|
98521
|
+
return [];
|
|
98522
|
+
const sidecar = `${binPath.slice(0, -4)}.bunx`;
|
|
98523
|
+
let contents;
|
|
98524
|
+
try {
|
|
98525
|
+
if (!statSync4(sidecar).isFile())
|
|
98526
|
+
return [];
|
|
98527
|
+
contents = readFileSync15(sidecar).toString("utf16le");
|
|
98528
|
+
} catch {
|
|
98529
|
+
return [];
|
|
98530
|
+
}
|
|
98531
|
+
const end = contents.indexOf('"\x00');
|
|
98532
|
+
if (end <= 0)
|
|
98533
|
+
return [];
|
|
98534
|
+
return [join64(dirname26(dirname26(binPath)), contents.slice(0, end).replace(/\\/g, "/"))];
|
|
98535
|
+
}
|
|
98480
98536
|
function codexLightWrapperOwner(shim) {
|
|
98481
98537
|
if (!shim.includes(CODEX_LIGHT_WRAPPER_MARKER))
|
|
98482
98538
|
return null;
|
|
@@ -103406,20 +103462,41 @@ var BOULDER_FILE = "boulder.json";
|
|
|
103406
103462
|
var BOULDER_STATE_PATH = `${BOULDER_DIR}/${BOULDER_FILE}`;
|
|
103407
103463
|
var NOTEPAD_DIR = "notepads";
|
|
103408
103464
|
var NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}`;
|
|
103465
|
+
// packages/boulder-state/src/markdown-fence.ts
|
|
103466
|
+
var FENCE_PATTERN = /^[ \t]{0,3}(`{3,}|~{3,})(.*)$/;
|
|
103467
|
+
function parseOpeningFence(line) {
|
|
103468
|
+
const match = line.match(FENCE_PATTERN);
|
|
103469
|
+
const run = match?.[1];
|
|
103470
|
+
const info = match?.[2];
|
|
103471
|
+
const marker = run?.charAt(0);
|
|
103472
|
+
if (run === undefined || info === undefined || marker !== "`" && marker !== "~" || marker === "`" && info.includes("`")) {
|
|
103473
|
+
return null;
|
|
103474
|
+
}
|
|
103475
|
+
return { marker, length: run.length };
|
|
103476
|
+
}
|
|
103477
|
+
function isClosingFence(line, fence) {
|
|
103478
|
+
const run = line.match(/^[ \t]{0,3}(`{3,}|~{3,})[ \t]*$/)?.[1];
|
|
103479
|
+
return run?.charAt(0) === fence.marker && run.length >= fence.length;
|
|
103480
|
+
}
|
|
103481
|
+
|
|
103409
103482
|
// packages/boulder-state/src/plan-checklist.ts
|
|
103410
|
-
var SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX]?)[ \t]*\][ \t]+(.+)$/;
|
|
103483
|
+
var SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX~]?)[ \t]*\][ \t]+(.+)$/;
|
|
103411
103484
|
var TODO_HEADING_PATTERN = /^##[ \t]+TODOs(?:[ \t]+#+)?[ \t]*$/i;
|
|
103412
103485
|
var FINAL_VERIFICATION_HEADING_PATTERN = /^##[ \t]+Final Verification Wave(?:[ \t]+#+)?[ \t]*$/i;
|
|
103413
103486
|
var SECTION_BOUNDARY_HEADING_PATTERN = /^#{1,2}(?:[ \t]+|$)/;
|
|
103414
|
-
var
|
|
103415
|
-
var
|
|
103416
|
-
var
|
|
103487
|
+
var STRUCTURED_CHECKBOX_PATTERN = /^- \[([ xX~])\] (.+)$/;
|
|
103488
|
+
var TODO_TASK_LABEL_PATTERN = /^([1-9]\d*|T[1-9]\d*(?:\.[1-9]\d*[a-z]?)?)(?:\.[ \t]+|[ \t]+(?:[-\u2014][ \t]+)?)(.+)$/i;
|
|
103489
|
+
var FINAL_WAVE_TASK_LABEL_PATTERN = /^([FH][1-9]\d*(?:\.[1-9]\d*[a-z]?)?)(?:\.[ \t]+|[ \t]+(?:[-\u2014][ \t]+)?)(.+)$/i;
|
|
103417
103490
|
function parsePlanChecklist(markdown) {
|
|
103418
103491
|
const lines = markdown.split(/\r?\n/);
|
|
103419
103492
|
if (!hasStructuredSection(lines)) {
|
|
103420
103493
|
return parseSimpleChecklist(lines);
|
|
103421
103494
|
}
|
|
103422
|
-
|
|
103495
|
+
const structuredPlan = parseStructuredPlan(lines);
|
|
103496
|
+
if (structuredPlan.checklist.total === 0 && structuredPlan.hasUntrackedTopLevelCheckbox) {
|
|
103497
|
+
return parseSimpleChecklist(lines);
|
|
103498
|
+
}
|
|
103499
|
+
return structuredPlan.checklist;
|
|
103423
103500
|
}
|
|
103424
103501
|
function parseCurrentTopLevelTask(markdown) {
|
|
103425
103502
|
const lines = markdown.split(/\r?\n/);
|
|
@@ -103429,10 +103506,12 @@ function parseCurrentTopLevelTask(markdown) {
|
|
|
103429
103506
|
return parseStructuredPlan(lines).nextTask;
|
|
103430
103507
|
}
|
|
103431
103508
|
function parseStructuredPlan(lines) {
|
|
103509
|
+
let completed = 0;
|
|
103432
103510
|
let remaining = 0;
|
|
103433
103511
|
let total = 0;
|
|
103434
103512
|
let nextTaskLabel = null;
|
|
103435
103513
|
let nextTask = null;
|
|
103514
|
+
let hasUntrackedTopLevelCheckbox = false;
|
|
103436
103515
|
let section = "other";
|
|
103437
103516
|
let fence = null;
|
|
103438
103517
|
for (const line of lines) {
|
|
@@ -103452,6 +103531,9 @@ function parseStructuredPlan(lines) {
|
|
|
103452
103531
|
continue;
|
|
103453
103532
|
}
|
|
103454
103533
|
if (section === "other") {
|
|
103534
|
+
if (parseSimpleTopLevelCheckbox(line) !== null) {
|
|
103535
|
+
hasUntrackedTopLevelCheckbox = true;
|
|
103536
|
+
}
|
|
103455
103537
|
continue;
|
|
103456
103538
|
}
|
|
103457
103539
|
const checkbox = parseStructuredTopLevelCheckbox(line, section);
|
|
@@ -103459,7 +103541,11 @@ function parseStructuredPlan(lines) {
|
|
|
103459
103541
|
continue;
|
|
103460
103542
|
}
|
|
103461
103543
|
total += 1;
|
|
103462
|
-
if (checkbox.
|
|
103544
|
+
if (checkbox.status === "done") {
|
|
103545
|
+
completed += 1;
|
|
103546
|
+
continue;
|
|
103547
|
+
}
|
|
103548
|
+
if (checkbox.status === "in-progress") {
|
|
103463
103549
|
continue;
|
|
103464
103550
|
}
|
|
103465
103551
|
remaining += 1;
|
|
@@ -103470,15 +103556,17 @@ function parseStructuredPlan(lines) {
|
|
|
103470
103556
|
}
|
|
103471
103557
|
return {
|
|
103472
103558
|
checklist: {
|
|
103473
|
-
completed
|
|
103559
|
+
completed,
|
|
103474
103560
|
remaining,
|
|
103475
103561
|
total,
|
|
103476
103562
|
nextTaskLabel
|
|
103477
103563
|
},
|
|
103478
|
-
nextTask
|
|
103564
|
+
nextTask,
|
|
103565
|
+
hasUntrackedTopLevelCheckbox
|
|
103479
103566
|
};
|
|
103480
103567
|
}
|
|
103481
103568
|
function parseSimpleChecklist(lines) {
|
|
103569
|
+
let completed = 0;
|
|
103482
103570
|
let remaining = 0;
|
|
103483
103571
|
let total = 0;
|
|
103484
103572
|
let nextTaskLabel = null;
|
|
@@ -103500,7 +103588,11 @@ function parseSimpleChecklist(lines) {
|
|
|
103500
103588
|
continue;
|
|
103501
103589
|
}
|
|
103502
103590
|
total += 1;
|
|
103503
|
-
if (checkbox.
|
|
103591
|
+
if (checkbox.status === "done") {
|
|
103592
|
+
completed += 1;
|
|
103593
|
+
continue;
|
|
103594
|
+
}
|
|
103595
|
+
if (checkbox.status === "in-progress") {
|
|
103504
103596
|
continue;
|
|
103505
103597
|
}
|
|
103506
103598
|
remaining += 1;
|
|
@@ -103508,7 +103600,7 @@ function parseSimpleChecklist(lines) {
|
|
|
103508
103600
|
nextTaskLabel = checkbox.label;
|
|
103509
103601
|
}
|
|
103510
103602
|
}
|
|
103511
|
-
return { completed
|
|
103603
|
+
return { completed, remaining, total, nextTaskLabel };
|
|
103512
103604
|
}
|
|
103513
103605
|
function parseSimpleTopLevelCheckbox(line) {
|
|
103514
103606
|
const match = line.match(SIMPLE_CHECKBOX_PATTERN);
|
|
@@ -103517,7 +103609,13 @@ function parseSimpleTopLevelCheckbox(line) {
|
|
|
103517
103609
|
if (marker === undefined || label === undefined) {
|
|
103518
103610
|
return null;
|
|
103519
103611
|
}
|
|
103520
|
-
return {
|
|
103612
|
+
return { status: parseCheckboxStatus(marker), label };
|
|
103613
|
+
}
|
|
103614
|
+
function parseCheckboxStatus(marker) {
|
|
103615
|
+
if (marker.toLowerCase() === "x") {
|
|
103616
|
+
return "done";
|
|
103617
|
+
}
|
|
103618
|
+
return marker === "~" ? "in-progress" : "open";
|
|
103521
103619
|
}
|
|
103522
103620
|
function hasStructuredSection(lines) {
|
|
103523
103621
|
let fence = null;
|
|
@@ -103549,8 +103647,7 @@ function parseStructuredSectionHeading(line) {
|
|
|
103549
103647
|
return "other";
|
|
103550
103648
|
}
|
|
103551
103649
|
function parseStructuredTopLevelCheckbox(line, section) {
|
|
103552
|
-
const
|
|
103553
|
-
const match = line.match(pattern);
|
|
103650
|
+
const match = line.match(STRUCTURED_CHECKBOX_PATTERN);
|
|
103554
103651
|
const marker = match?.[1];
|
|
103555
103652
|
const label = match?.[2];
|
|
103556
103653
|
if (marker === undefined || label === undefined) {
|
|
@@ -103560,10 +103657,10 @@ function parseStructuredTopLevelCheckbox(line, section) {
|
|
|
103560
103657
|
if (task === null) {
|
|
103561
103658
|
return null;
|
|
103562
103659
|
}
|
|
103563
|
-
return {
|
|
103660
|
+
return { status: parseCheckboxStatus(marker), label, task };
|
|
103564
103661
|
}
|
|
103565
103662
|
function buildTaskRef(section, label) {
|
|
103566
|
-
const pattern = section === "todo" ?
|
|
103663
|
+
const pattern = section === "todo" ? TODO_TASK_LABEL_PATTERN : FINAL_WAVE_TASK_LABEL_PATTERN;
|
|
103567
103664
|
const match = label.match(pattern);
|
|
103568
103665
|
const rawLabel = match?.[1];
|
|
103569
103666
|
const title = match?.[2];
|
|
@@ -103577,20 +103674,6 @@ function buildTaskRef(section, label) {
|
|
|
103577
103674
|
title
|
|
103578
103675
|
};
|
|
103579
103676
|
}
|
|
103580
|
-
function parseOpeningFence(line) {
|
|
103581
|
-
const match = line.match(FENCE_PATTERN);
|
|
103582
|
-
const run = match?.[1];
|
|
103583
|
-
const info = match?.[2];
|
|
103584
|
-
const marker = run?.charAt(0);
|
|
103585
|
-
if (run === undefined || info === undefined || marker !== "`" && marker !== "~" || marker === "`" && info.includes("`")) {
|
|
103586
|
-
return null;
|
|
103587
|
-
}
|
|
103588
|
-
return { marker, length: run.length };
|
|
103589
|
-
}
|
|
103590
|
-
function isClosingFence(line, fence) {
|
|
103591
|
-
const run = line.match(/^[ \t]{0,3}(`{3,}|~{3,})[ \t]*$/)?.[1];
|
|
103592
|
-
return run?.charAt(0) === fence.marker && run.length >= fence.length;
|
|
103593
|
-
}
|
|
103594
103677
|
// packages/boulder-state/src/top-level-task.ts
|
|
103595
103678
|
import { existsSync as existsSync36, readFileSync as readFileSync19 } from "node:fs";
|
|
103596
103679
|
function readCurrentTopLevelTask(planPath) {
|
|
@@ -103632,7 +103715,7 @@ function resolveBoulderPlanPathForWork(directory, work) {
|
|
|
103632
103715
|
return resolveBoulderPlanPath(directory, work);
|
|
103633
103716
|
}
|
|
103634
103717
|
// packages/boulder-state/src/storage/plan-progress.ts
|
|
103635
|
-
import { existsSync as existsSync38, readFileSync as readFileSync20, readdirSync as readdirSync9, statSync as
|
|
103718
|
+
import { existsSync as existsSync38, readFileSync as readFileSync20, readdirSync as readdirSync9, statSync as statSync5 } from "node:fs";
|
|
103636
103719
|
function getPlanProgress(planPath) {
|
|
103637
103720
|
if (!existsSync38(planPath)) {
|
|
103638
103721
|
return { total: 0, completed: 0, isComplete: false };
|
|
@@ -104051,7 +104134,7 @@ async function hasActiveBoulderContinuation(directory, sessionID, client) {
|
|
|
104051
104134
|
if (!boulder || !boulder.active_plan)
|
|
104052
104135
|
return false;
|
|
104053
104136
|
const progress = getPlanProgress(resolveBoulderPlanPath(directory, boulder));
|
|
104054
|
-
if (progress.isComplete)
|
|
104137
|
+
if (progress.isComplete || progress.total === 0)
|
|
104055
104138
|
return false;
|
|
104056
104139
|
if (!client)
|
|
104057
104140
|
return false;
|
|
@@ -106249,13 +106332,14 @@ init_src();
|
|
|
106249
106332
|
import { existsSync as existsSync55 } from "node:fs";
|
|
106250
106333
|
import { createRequire as createRequire3 } from "node:module";
|
|
106251
106334
|
import { homedir as homedir20 } from "node:os";
|
|
106252
|
-
import { dirname as dirname33, join as
|
|
106335
|
+
import { dirname as dirname33, join as join87 } from "node:path";
|
|
106253
106336
|
|
|
106254
106337
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
106255
|
-
import { join as
|
|
106338
|
+
import { join as join86 } from "path";
|
|
106256
106339
|
import { homedir as homedir19, tmpdir as tmpdir4 } from "os";
|
|
106257
106340
|
// packages/comment-checker-core/src/release.ts
|
|
106258
106341
|
import { join as join84 } from "node:path";
|
|
106342
|
+
var COMMENT_CHECKER_RELEASE_VERSION = "0.8.0";
|
|
106259
106343
|
function commentCheckerBinaryName(platform) {
|
|
106260
106344
|
return platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
106261
106345
|
}
|
|
@@ -106268,12 +106352,23 @@ function commentCheckerCacheDir(input) {
|
|
|
106268
106352
|
const base = input.env.XDG_CACHE_HOME || join84(input.homedir, ".cache");
|
|
106269
106353
|
return join84(base, input.cacheDirName, "bin");
|
|
106270
106354
|
}
|
|
106355
|
+
// packages/comment-checker-core/src/cached-release.ts
|
|
106356
|
+
import { readFileSync as readFileSync37, writeFileSync as writeFileSync12 } from "node:fs";
|
|
106357
|
+
import { join as join85 } from "node:path";
|
|
106358
|
+
var COMMENT_CHECKER_VERSION_MARKER = "comment-checker.version";
|
|
106359
|
+
function isCachedCommentCheckerCurrent(cacheDir, readFile = (path) => readFileSync37(path, "utf-8")) {
|
|
106360
|
+
try {
|
|
106361
|
+
return readFile(join85(cacheDir, COMMENT_CHECKER_VERSION_MARKER)).trim() === COMMENT_CHECKER_RELEASE_VERSION;
|
|
106362
|
+
} catch {
|
|
106363
|
+
return false;
|
|
106364
|
+
}
|
|
106365
|
+
}
|
|
106271
106366
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
106272
106367
|
init_binary_downloader();
|
|
106273
106368
|
init_logger2();
|
|
106274
106369
|
init_plugin_identity();
|
|
106275
106370
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
106276
|
-
var DEBUG_FILE =
|
|
106371
|
+
var DEBUG_FILE = join86(tmpdir4(), "comment-checker-debug.log");
|
|
106277
106372
|
function getCacheDir2() {
|
|
106278
106373
|
return commentCheckerCacheDir({
|
|
106279
106374
|
platform: process.platform,
|
|
@@ -106286,7 +106381,9 @@ function getBinaryName() {
|
|
|
106286
106381
|
return commentCheckerBinaryName(process.platform);
|
|
106287
106382
|
}
|
|
106288
106383
|
function getCachedBinaryPath2() {
|
|
106289
|
-
|
|
106384
|
+
const cacheDir = getCacheDir2();
|
|
106385
|
+
const cached = getCachedBinaryPath(cacheDir, getBinaryName());
|
|
106386
|
+
return cached !== null && isCachedCommentCheckerCurrent(cacheDir) ? cached : null;
|
|
106290
106387
|
}
|
|
106291
106388
|
|
|
106292
106389
|
// packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
|
|
@@ -106330,7 +106427,7 @@ async function getBinaryVersion(binary) {
|
|
|
106330
106427
|
}
|
|
106331
106428
|
}
|
|
106332
106429
|
async function checkAstGrepCli() {
|
|
106333
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
106430
|
+
const runtimeDir = astGrepRuntimeDir(join87(homedir20(), ".omo"));
|
|
106334
106431
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
106335
106432
|
if (sgPath === null) {
|
|
106336
106433
|
return {
|
|
@@ -106360,10 +106457,10 @@ function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath
|
|
|
106360
106457
|
const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
|
|
106361
106458
|
try {
|
|
106362
106459
|
const packageDir = baseDirOverride ?? dirname33(resolvePackageJsonPath());
|
|
106363
|
-
const vendorPath =
|
|
106460
|
+
const vendorPath = join87(packageDir, "vendor", platformKey, binaryName);
|
|
106364
106461
|
if (existsSync55(vendorPath))
|
|
106365
106462
|
return vendorPath;
|
|
106366
|
-
const binPath =
|
|
106463
|
+
const binPath = join87(packageDir, "bin", binaryName);
|
|
106367
106464
|
if (existsSync55(binPath))
|
|
106368
106465
|
return binPath;
|
|
106369
106466
|
} catch (error) {
|
|
@@ -106510,7 +106607,7 @@ async function getGhCliInfo(dependencies = {}) {
|
|
|
106510
106607
|
// packages/omo-opencode/src/mcp/lsp.ts
|
|
106511
106608
|
init_zod();
|
|
106512
106609
|
init_opencode_config_dir();
|
|
106513
|
-
import { existsSync as existsSync56, readFileSync as
|
|
106610
|
+
import { existsSync as existsSync56, readFileSync as readFileSync38 } from "node:fs";
|
|
106514
106611
|
import { delimiter as delimiter3, dirname as dirname34, resolve as resolve23 } from "node:path";
|
|
106515
106612
|
import { fileURLToPath as fileURLToPath7 } from "node:url";
|
|
106516
106613
|
|
|
@@ -106654,7 +106751,7 @@ function findBootstrapRoot(candidates, pathExists) {
|
|
|
106654
106751
|
}
|
|
106655
106752
|
function readDaemonPackageVersion(root) {
|
|
106656
106753
|
try {
|
|
106657
|
-
const packageJson = JSON.parse(
|
|
106754
|
+
const packageJson = JSON.parse(readFileSync38(resolve23(root, PACKAGE_REL, "package.json"), "utf-8"));
|
|
106658
106755
|
return DaemonPackageSchema.parse(packageJson).version;
|
|
106659
106756
|
} catch (error) {
|
|
106660
106757
|
if (!(error instanceof Error))
|
|
@@ -106737,15 +106834,15 @@ function getInstalledLspServers(options = {}) {
|
|
|
106737
106834
|
|
|
106738
106835
|
// packages/omo-opencode/src/cli/doctor/checks/tools-mcp.ts
|
|
106739
106836
|
init_shared();
|
|
106740
|
-
import { existsSync as existsSync57, readFileSync as
|
|
106837
|
+
import { existsSync as existsSync57, readFileSync as readFileSync39 } from "node:fs";
|
|
106741
106838
|
import { homedir as homedir21 } from "node:os";
|
|
106742
|
-
import { join as
|
|
106839
|
+
import { join as join88 } from "node:path";
|
|
106743
106840
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
106744
106841
|
function getMcpConfigPaths() {
|
|
106745
106842
|
return [
|
|
106746
|
-
|
|
106747
|
-
|
|
106748
|
-
|
|
106843
|
+
join88(homedir21(), ".claude", ".mcp.json"),
|
|
106844
|
+
join88(process.cwd(), ".mcp.json"),
|
|
106845
|
+
join88(process.cwd(), ".claude", ".mcp.json")
|
|
106749
106846
|
];
|
|
106750
106847
|
}
|
|
106751
106848
|
function loadUserMcpConfig() {
|
|
@@ -106754,7 +106851,7 @@ function loadUserMcpConfig() {
|
|
|
106754
106851
|
if (!existsSync57(configPath))
|
|
106755
106852
|
continue;
|
|
106756
106853
|
try {
|
|
106757
|
-
const content =
|
|
106854
|
+
const content = readFileSync39(configPath, "utf-8");
|
|
106758
106855
|
const config = parseJsonc(content);
|
|
106759
106856
|
if (config.mcpServers) {
|
|
106760
106857
|
Object.assign(servers, config.mcpServers);
|
|
@@ -106889,7 +106986,7 @@ async function checkTools() {
|
|
|
106889
106986
|
|
|
106890
106987
|
// packages/omo-opencode/src/cli/doctor/checks/telemetry.ts
|
|
106891
106988
|
init_src5();
|
|
106892
|
-
import { existsSync as existsSync58, readFileSync as
|
|
106989
|
+
import { existsSync as existsSync58, readFileSync as readFileSync40 } from "node:fs";
|
|
106893
106990
|
function isTelemetryState(value) {
|
|
106894
106991
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
106895
106992
|
}
|
|
@@ -106899,7 +106996,7 @@ function readLastActiveDay(stateFilePath) {
|
|
|
106899
106996
|
}
|
|
106900
106997
|
let parsed;
|
|
106901
106998
|
try {
|
|
106902
|
-
parsed = JSON.parse(
|
|
106999
|
+
parsed = JSON.parse(readFileSync40(stateFilePath, "utf-8"));
|
|
106903
107000
|
} catch (error) {
|
|
106904
107001
|
if (error instanceof Error) {
|
|
106905
107002
|
return "unreadable";
|
|
@@ -107027,7 +107124,7 @@ init_src();
|
|
|
107027
107124
|
import { existsSync as existsSync59 } from "node:fs";
|
|
107028
107125
|
import { lstat as lstat16, readdir as readdir14, readFile as readFile28 } from "node:fs/promises";
|
|
107029
107126
|
import { homedir as homedir23 } from "node:os";
|
|
107030
|
-
import { basename as basename12, join as
|
|
107127
|
+
import { basename as basename12, join as join89, resolve as resolve24 } from "node:path";
|
|
107031
107128
|
// packages/omo-opencode/package.json
|
|
107032
107129
|
var package_default3 = {
|
|
107033
107130
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -107097,13 +107194,13 @@ var CODEX_BIN_NAMES = [
|
|
|
107097
107194
|
"omo-git-bash-hook"
|
|
107098
107195
|
];
|
|
107099
107196
|
async function gatherCodexSummary(deps = {}) {
|
|
107100
|
-
const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
107197
|
+
const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ?? join89(homedir23(), ".codex"));
|
|
107101
107198
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
107102
107199
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
107103
107200
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
107104
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
107105
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
107106
|
-
const configPath =
|
|
107201
|
+
const manifest = pluginRoot === null ? null : await readJson(join89(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
107202
|
+
const installSnapshot = pluginRoot === null ? null : await readJson(join89(pluginRoot, "lazycodex-install.json"));
|
|
107203
|
+
const configPath = join89(codexHome, "config.toml");
|
|
107107
107204
|
const pluginVersion = stringField(manifest, "version");
|
|
107108
107205
|
return {
|
|
107109
107206
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
@@ -107160,7 +107257,7 @@ function buildCodexIssues(summary) {
|
|
|
107160
107257
|
if (summary.pluginRoot === null) {
|
|
107161
107258
|
issues.push({
|
|
107162
107259
|
title: "OMO Codex plugin is not installed",
|
|
107163
|
-
description: `Expected cached plugin at ${
|
|
107260
|
+
description: `Expected cached plugin at ${join89("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
107164
107261
|
fix: "Run: npx lazycodex-ai install",
|
|
107165
107262
|
severity: "error",
|
|
107166
107263
|
affects: ["plugin loading"]
|
|
@@ -107225,12 +107322,12 @@ function buildCodexIssues(summary) {
|
|
|
107225
107322
|
return issues;
|
|
107226
107323
|
}
|
|
107227
107324
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
107228
|
-
const pluginRoot =
|
|
107325
|
+
const pluginRoot = join89(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
|
|
107229
107326
|
if (!existsSync59(pluginRoot))
|
|
107230
107327
|
return null;
|
|
107231
107328
|
const versions = await readdir14(pluginRoot, { withFileTypes: true });
|
|
107232
107329
|
const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
107233
|
-
return candidates.length === 0 ? null :
|
|
107330
|
+
return candidates.length === 0 ? null : join89(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
107234
107331
|
}
|
|
107235
107332
|
async function readCodexConfigSummary(configPath) {
|
|
107236
107333
|
if (!existsSync59(configPath)) {
|
|
@@ -107258,13 +107355,13 @@ async function readCodexConfigSummary(configPath) {
|
|
|
107258
107355
|
async function readLinkedBins(binDir) {
|
|
107259
107356
|
const linked = [];
|
|
107260
107357
|
for (const name of CODEX_BIN_NAMES) {
|
|
107261
|
-
if (await pathExists3(
|
|
107358
|
+
if (await pathExists3(join89(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
107262
107359
|
linked.push(name);
|
|
107263
107360
|
}
|
|
107264
107361
|
return linked;
|
|
107265
107362
|
}
|
|
107266
107363
|
async function readLinkedAgents(codexHome) {
|
|
107267
|
-
const agentsDir =
|
|
107364
|
+
const agentsDir = join89(codexHome, "agents");
|
|
107268
107365
|
if (!existsSync59(agentsDir))
|
|
107269
107366
|
return [];
|
|
107270
107367
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
@@ -107398,7 +107495,7 @@ function resolveLatestVersion(input) {
|
|
|
107398
107495
|
init_src();
|
|
107399
107496
|
import { readdir as readdir15, readFile as readFile29, stat as stat7 } from "node:fs/promises";
|
|
107400
107497
|
import { homedir as homedir24 } from "node:os";
|
|
107401
|
-
import { dirname as dirname35, isAbsolute as isAbsolute14, join as
|
|
107498
|
+
import { dirname as dirname35, isAbsolute as isAbsolute14, join as join90, relative as relative9, resolve as resolve25, sep as sep9 } from "node:path";
|
|
107402
107499
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
107403
107500
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
107404
107501
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
@@ -107408,7 +107505,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
107408
107505
|
const env = deps.env ?? process.env;
|
|
107409
107506
|
const platform = deps.platform ?? process.platform;
|
|
107410
107507
|
const arch = deps.arch ?? process.arch;
|
|
107411
|
-
const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ??
|
|
107508
|
+
const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ?? join90(homedir24(), ".codex"));
|
|
107412
107509
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
107413
107510
|
if (summary.pluginRoot === null) {
|
|
107414
107511
|
return {
|
|
@@ -107433,7 +107530,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
107433
107530
|
});
|
|
107434
107531
|
}
|
|
107435
107532
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
107436
|
-
const runtimeSgPath =
|
|
107533
|
+
const runtimeSgPath = join90(runtimeSgDir, sgBinaryName(platform));
|
|
107437
107534
|
const sg = findSgBinarySync({
|
|
107438
107535
|
arch,
|
|
107439
107536
|
env,
|
|
@@ -107545,7 +107642,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
107545
107642
|
for (const entry of entries) {
|
|
107546
107643
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
107547
107644
|
continue;
|
|
107548
|
-
const entryPath =
|
|
107645
|
+
const entryPath = join90(root, entry.name);
|
|
107549
107646
|
if (entry.isDirectory()) {
|
|
107550
107647
|
paths.push(...await findManifestPaths(entryPath, manifestName));
|
|
107551
107648
|
continue;
|
|
@@ -107589,18 +107686,18 @@ function isPluginRuntimePathArg(arg) {
|
|
|
107589
107686
|
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute14(arg));
|
|
107590
107687
|
}
|
|
107591
107688
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
107592
|
-
return
|
|
107689
|
+
return join90(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
107593
107690
|
}
|
|
107594
107691
|
function describeSgSource(sgPath, env, runtimeSgDir, platform) {
|
|
107595
107692
|
const override = env[SG_PATH_ENV_KEY]?.trim();
|
|
107596
107693
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
107597
107694
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
107598
|
-
if (sgPath ===
|
|
107695
|
+
if (sgPath === join90(runtimeSgDir, sgBinaryName(platform)))
|
|
107599
107696
|
return "runtime dir";
|
|
107600
107697
|
return "PATH";
|
|
107601
107698
|
}
|
|
107602
107699
|
async function readBootstrapStateSummary(codexHome) {
|
|
107603
|
-
const statePath =
|
|
107700
|
+
const statePath = join90(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
107604
107701
|
const raw = await readJson2(statePath);
|
|
107605
107702
|
if (raw === null)
|
|
107606
107703
|
return null;
|
|
@@ -107679,16 +107776,16 @@ function isRecord18(value) {
|
|
|
107679
107776
|
import { existsSync as existsSync60 } from "node:fs";
|
|
107680
107777
|
import { readFile as readFile30 } from "node:fs/promises";
|
|
107681
107778
|
import { homedir as homedir25 } from "node:os";
|
|
107682
|
-
import { join as
|
|
107779
|
+
import { join as join91, resolve as resolve26 } from "node:path";
|
|
107683
107780
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
107684
107781
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
107685
107782
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
107686
107783
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
107687
|
-
const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
107784
|
+
const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ?? join91(homedir25(), ".codex"));
|
|
107688
107785
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
107689
107786
|
const platform = deps.platform ?? process.platform;
|
|
107690
|
-
const wrapperPath =
|
|
107691
|
-
const legacyWrapperPath =
|
|
107787
|
+
const wrapperPath = join91(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
|
|
107788
|
+
const legacyWrapperPath = join91(binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
107692
107789
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
107693
107790
|
const issues = [];
|
|
107694
107791
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
@@ -108219,17 +108316,17 @@ import {
|
|
|
108219
108316
|
existsSync as existsSync63,
|
|
108220
108317
|
mkdirSync as mkdirSync17,
|
|
108221
108318
|
readdirSync as readdirSync13,
|
|
108222
|
-
readFileSync as
|
|
108319
|
+
readFileSync as readFileSync42,
|
|
108223
108320
|
renameSync as renameSync8,
|
|
108224
108321
|
unlinkSync as unlinkSync9,
|
|
108225
|
-
writeFileSync as
|
|
108322
|
+
writeFileSync as writeFileSync14
|
|
108226
108323
|
} from "node:fs";
|
|
108227
|
-
import { basename as basename13, dirname as dirname36, join as
|
|
108324
|
+
import { basename as basename13, dirname as dirname36, join as join94 } from "node:path";
|
|
108228
108325
|
|
|
108229
108326
|
// packages/mcp-client-core/src/config-dir.ts
|
|
108230
108327
|
import { existsSync as existsSync61, realpathSync as realpathSync10 } from "node:fs";
|
|
108231
108328
|
import { homedir as homedir26 } from "node:os";
|
|
108232
|
-
import { join as
|
|
108329
|
+
import { join as join92, resolve as resolve27 } from "node:path";
|
|
108233
108330
|
function resolveConfigPath2(pathValue) {
|
|
108234
108331
|
const resolvedPath = resolve27(pathValue);
|
|
108235
108332
|
if (!existsSync61(resolvedPath))
|
|
@@ -108247,13 +108344,13 @@ function getOpenCodeCliConfigDir(env = process.env) {
|
|
|
108247
108344
|
if (customConfigDir) {
|
|
108248
108345
|
return resolveConfigPath2(customConfigDir);
|
|
108249
108346
|
}
|
|
108250
|
-
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() ||
|
|
108251
|
-
return resolveConfigPath2(
|
|
108347
|
+
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join92(homedir26(), ".config");
|
|
108348
|
+
return resolveConfigPath2(join92(xdgConfigDir, "opencode"));
|
|
108252
108349
|
}
|
|
108253
108350
|
|
|
108254
108351
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
108255
|
-
import { chmodSync as chmodSync4, existsSync as existsSync62, readFileSync as
|
|
108256
|
-
import { join as
|
|
108352
|
+
import { chmodSync as chmodSync4, existsSync as existsSync62, readFileSync as readFileSync41, renameSync as renameSync7, writeFileSync as writeFileSync13 } from "node:fs";
|
|
108353
|
+
import { join as join93 } from "node:path";
|
|
108257
108354
|
var INDEX_FILE_NAME = "index.json";
|
|
108258
108355
|
function isTokenIndex(value) {
|
|
108259
108356
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -108261,14 +108358,14 @@ function isTokenIndex(value) {
|
|
|
108261
108358
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
108262
108359
|
}
|
|
108263
108360
|
function getIndexPath(storageDir) {
|
|
108264
|
-
return
|
|
108361
|
+
return join93(storageDir, INDEX_FILE_NAME);
|
|
108265
108362
|
}
|
|
108266
108363
|
function readTokenIndex(storageDir) {
|
|
108267
108364
|
const indexPath = getIndexPath(storageDir);
|
|
108268
108365
|
if (!existsSync62(indexPath))
|
|
108269
108366
|
return {};
|
|
108270
108367
|
try {
|
|
108271
|
-
const parsed = JSON.parse(
|
|
108368
|
+
const parsed = JSON.parse(readFileSync41(indexPath, "utf-8"));
|
|
108272
108369
|
return isTokenIndex(parsed) ? parsed : {};
|
|
108273
108370
|
} catch (readError) {
|
|
108274
108371
|
if (!(readError instanceof Error))
|
|
@@ -108280,7 +108377,7 @@ function writeTokenIndex(storageDir, index) {
|
|
|
108280
108377
|
try {
|
|
108281
108378
|
const indexPath = getIndexPath(storageDir);
|
|
108282
108379
|
const tempPath = `${indexPath}.tmp.${Date.now()}`;
|
|
108283
|
-
|
|
108380
|
+
writeFileSync13(tempPath, JSON.stringify(index, null, 2), { encoding: "utf-8", mode: 384 });
|
|
108284
108381
|
chmodSync4(tempPath, 384);
|
|
108285
108382
|
renameSync7(tempPath, indexPath);
|
|
108286
108383
|
return true;
|
|
@@ -108305,16 +108402,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
|
|
|
108305
108402
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
108306
108403
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
108307
108404
|
function getMcpOauthStorageDir() {
|
|
108308
|
-
return
|
|
108405
|
+
return join94(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
108309
108406
|
}
|
|
108310
108407
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
108311
108408
|
return createHash7("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
108312
108409
|
}
|
|
108313
108410
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
108314
|
-
return
|
|
108411
|
+
return join94(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
108315
108412
|
}
|
|
108316
108413
|
function getLegacyStoragePath() {
|
|
108317
|
-
return
|
|
108414
|
+
return join94(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
108318
108415
|
}
|
|
108319
108416
|
function normalizeHost2(serverHost) {
|
|
108320
108417
|
let host = serverHost.trim();
|
|
@@ -108378,7 +108475,7 @@ function readTokenFile(filePath) {
|
|
|
108378
108475
|
if (!existsSync63(filePath))
|
|
108379
108476
|
return null;
|
|
108380
108477
|
try {
|
|
108381
|
-
const parsed = JSON.parse(
|
|
108478
|
+
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
108382
108479
|
return isOAuthTokenData(parsed) ? parsed : null;
|
|
108383
108480
|
} catch (readError) {
|
|
108384
108481
|
if (!(readError instanceof Error))
|
|
@@ -108391,7 +108488,7 @@ function readLegacyStore() {
|
|
|
108391
108488
|
if (!existsSync63(filePath))
|
|
108392
108489
|
return null;
|
|
108393
108490
|
try {
|
|
108394
|
-
const parsed = JSON.parse(
|
|
108491
|
+
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
108395
108492
|
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
108396
108493
|
return null;
|
|
108397
108494
|
const result = {};
|
|
@@ -108413,7 +108510,7 @@ function writeTokenFile(filePath, token) {
|
|
|
108413
108510
|
mkdirSync17(dir, { recursive: true });
|
|
108414
108511
|
}
|
|
108415
108512
|
const tempPath = `${filePath}.tmp.${Date.now()}`;
|
|
108416
|
-
|
|
108513
|
+
writeFileSync14(tempPath, JSON.stringify(token, null, 2), { encoding: "utf-8", mode: 384 });
|
|
108417
108514
|
chmodSync5(tempPath, 384);
|
|
108418
108515
|
renameSync8(tempPath, filePath);
|
|
108419
108516
|
return true;
|
|
@@ -108469,7 +108566,7 @@ function deleteLegacyToken(serverHost, resource) {
|
|
|
108469
108566
|
function writeLegacyStore(store) {
|
|
108470
108567
|
try {
|
|
108471
108568
|
const filePath = getLegacyStoragePath();
|
|
108472
|
-
|
|
108569
|
+
writeFileSync14(filePath, JSON.stringify(store, null, 2), { encoding: "utf-8", mode: 384 });
|
|
108473
108570
|
chmodSync5(filePath, 384);
|
|
108474
108571
|
return true;
|
|
108475
108572
|
} catch (writeError) {
|
|
@@ -108493,7 +108590,7 @@ function listTokensByHost(serverHost) {
|
|
|
108493
108590
|
for (const [hash, indexedKey] of Object.entries(index)) {
|
|
108494
108591
|
if (!indexedKey.startsWith(prefix))
|
|
108495
108592
|
continue;
|
|
108496
|
-
const indexedToken = readTokenFile(
|
|
108593
|
+
const indexedToken = readTokenFile(join94(getMcpOauthStorageDir(), `${hash}.json`));
|
|
108497
108594
|
if (indexedToken)
|
|
108498
108595
|
result[indexedKey] = indexedToken;
|
|
108499
108596
|
}
|
|
@@ -108508,7 +108605,7 @@ function listAllTokens() {
|
|
|
108508
108605
|
for (const entry of readdirSync13(dir, { withFileTypes: true })) {
|
|
108509
108606
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
108510
108607
|
continue;
|
|
108511
|
-
const token = readTokenFile(
|
|
108608
|
+
const token = readTokenFile(join94(dir, entry.name));
|
|
108512
108609
|
const hash = basename13(entry.name, ".json");
|
|
108513
108610
|
if (token)
|
|
108514
108611
|
result[index[hash] ?? hash] = token;
|
|
@@ -109232,7 +109329,7 @@ async function boulder(options) {
|
|
|
109232
109329
|
}
|
|
109233
109330
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
109234
109331
|
import { spawn as spawn5 } from "node:child_process";
|
|
109235
|
-
import { existsSync as existsSync65, readFileSync as
|
|
109332
|
+
import { existsSync as existsSync65, readFileSync as readFileSync43, realpathSync as realpathSync11 } from "node:fs";
|
|
109236
109333
|
import { homedir as homedir27 } from "node:os";
|
|
109237
109334
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
109238
109335
|
function resolveCodexUlwLoopCommand(input = {}) {
|
|
@@ -109282,7 +109379,7 @@ function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
|
|
|
109282
109379
|
}
|
|
109283
109380
|
function isGeneratedRuntimeWrapper(candidate) {
|
|
109284
109381
|
try {
|
|
109285
|
-
return
|
|
109382
|
+
return readFileSync43(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
|
|
109286
109383
|
} catch (error) {
|
|
109287
109384
|
if (error instanceof Error)
|
|
109288
109385
|
return false;
|