lazycodex-ai 5.0.0 → 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 +41 -376
- package/README.ko.md +45 -376
- package/README.md +39 -376
- package/README.ru.md +50 -368
- package/README.zh-cn.md +50 -371
- package/dist/cli/index.js +242 -150
- package/dist/cli-node/index.js +242 -150
- 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/plugin/test/node-install-surface.test.mjs +0 -1
- 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.
|
|
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.
|
|
293
|
-
"oh-my-opencode-darwin-x64": "5.
|
|
294
|
-
"oh-my-opencode-darwin-x64-baseline": "5.
|
|
295
|
-
"oh-my-opencode-linux-arm64": "5.
|
|
296
|
-
"oh-my-opencode-linux-arm64-musl": "5.
|
|
297
|
-
"oh-my-opencode-linux-x64": "5.
|
|
298
|
-
"oh-my-opencode-linux-x64-baseline": "5.
|
|
299
|
-
"oh-my-opencode-linux-x64-musl": "5.
|
|
300
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.
|
|
301
|
-
"oh-my-opencode-windows-arm64": "5.
|
|
302
|
-
"oh-my-opencode-windows-x64": "5.
|
|
303
|
-
"oh-my-opencode-windows-x64-baseline": "5.
|
|
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)) {
|
|
@@ -7479,11 +7493,6 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7479
7493
|
writing: {
|
|
7480
7494
|
requiresAnyModel: true,
|
|
7481
7495
|
fallbackChain: [
|
|
7482
|
-
{
|
|
7483
|
-
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7484
|
-
model: "claude-fable-5-1",
|
|
7485
|
-
variant: "low"
|
|
7486
|
-
},
|
|
7487
7496
|
{
|
|
7488
7497
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7489
7498
|
model: "claude-opus-5-5",
|
|
@@ -8046,8 +8055,17 @@ var init_model_resolver = () => {};
|
|
|
8046
8055
|
// packages/model-core/src/fallback-chain-from-models.ts
|
|
8047
8056
|
var init_fallback_chain_from_models = () => {};
|
|
8048
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
|
+
|
|
8049
8067
|
// packages/model-core/src/model-error-classifier.ts
|
|
8050
|
-
var RETRYABLE_ERROR_NAMES,
|
|
8068
|
+
var RETRYABLE_ERROR_NAMES, NON_RETRYABLE_ERROR_NAMES;
|
|
8051
8069
|
var init_model_error_classifier = __esm(() => {
|
|
8052
8070
|
RETRYABLE_ERROR_NAMES = new Set([
|
|
8053
8071
|
"providermodelnotfounderror",
|
|
@@ -8056,11 +8074,6 @@ var init_model_error_classifier = __esm(() => {
|
|
|
8056
8074
|
"providerconnectionerror",
|
|
8057
8075
|
"authenticationerror"
|
|
8058
8076
|
]);
|
|
8059
|
-
STOP_ERROR_NAMES = new Set([
|
|
8060
|
-
"quotaexceedederror",
|
|
8061
|
-
"insufficientcreditserror",
|
|
8062
|
-
"freeusagelimiterror"
|
|
8063
|
-
]);
|
|
8064
8077
|
NON_RETRYABLE_ERROR_NAMES = new Set([
|
|
8065
8078
|
"messageabortederror",
|
|
8066
8079
|
"permissiondeniederror",
|
|
@@ -8072,15 +8085,6 @@ var init_model_error_classifier = __esm(() => {
|
|
|
8072
8085
|
]);
|
|
8073
8086
|
});
|
|
8074
8087
|
|
|
8075
|
-
// packages/model-core/src/runtime-fallback-auto-retry-signal.ts
|
|
8076
|
-
var init_runtime_fallback_auto_retry_signal = () => {};
|
|
8077
|
-
|
|
8078
|
-
// packages/model-core/src/runtime-fallback-error-shape.ts
|
|
8079
|
-
var init_runtime_fallback_error_shape = () => {};
|
|
8080
|
-
|
|
8081
|
-
// packages/model-core/src/runtime-fallback-error-classifier.ts
|
|
8082
|
-
var init_runtime_fallback_error_classifier = () => {};
|
|
8083
|
-
|
|
8084
8088
|
// packages/model-core/src/provider-exhaustion-fallback-policy.ts
|
|
8085
8089
|
var init_provider_exhaustion_fallback_policy = () => {};
|
|
8086
8090
|
|
|
@@ -9282,7 +9286,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
9282
9286
|
KIMI_CATEGORIES = [
|
|
9283
9287
|
{
|
|
9284
9288
|
name: "writing",
|
|
9285
|
-
config: { model: "anthropic/claude-
|
|
9289
|
+
config: { model: "anthropic/claude-opus-5-5", variant: "low" },
|
|
9286
9290
|
description: "Documentation, prose, technical writing",
|
|
9287
9291
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
9288
9292
|
}
|
|
@@ -74420,6 +74424,29 @@ var init_category = __esm(() => {
|
|
|
74420
74424
|
OmoCategoriesConfigSchema = record(string2(), OmoCategoryConfigSchema);
|
|
74421
74425
|
});
|
|
74422
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
|
+
|
|
74423
74450
|
// packages/omo-config-core/src/schema/git-master.ts
|
|
74424
74451
|
var OmoGitMasterSettingsShape, OmoGitMasterSettingsLayerSchema, OmoGitMasterSettingsSchema;
|
|
74425
74452
|
var init_git_master = __esm(() => {
|
|
@@ -74692,11 +74719,11 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
|
|
|
74692
74719
|
const record2 = record(string2(), unknown()).parse(input);
|
|
74693
74720
|
return OmoTaskSettingsSchema.parse({
|
|
74694
74721
|
...record2,
|
|
74695
|
-
residency_max_children: record2["residency_max_children"] ??
|
|
74722
|
+
residency_max_children: record2["residency_max_children"] ?? DEFAULT_RESIDENCY_MAX_CHILDREN,
|
|
74696
74723
|
global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
|
|
74697
74724
|
});
|
|
74698
74725
|
}
|
|
74699
|
-
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;
|
|
74700
74727
|
var init_task = __esm(() => {
|
|
74701
74728
|
init_zod();
|
|
74702
74729
|
ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
|
|
@@ -74759,7 +74786,7 @@ var init_task = __esm(() => {
|
|
|
74759
74786
|
provider_concurrency: record(string2(), number2().int().nonnegative()).optional(),
|
|
74760
74787
|
model_concurrency: record(string2(), number2().int().nonnegative()).optional(),
|
|
74761
74788
|
max_depth: number2().int().nonnegative().default(1),
|
|
74762
|
-
residency_max_children: ResidencyMaxChildrenInputSchema.default(
|
|
74789
|
+
residency_max_children: ResidencyMaxChildrenInputSchema.default(DEFAULT_RESIDENCY_MAX_CHILDREN),
|
|
74763
74790
|
resident_idle_timeout_ms: number2().int().positive().max(Number.MAX_SAFE_INTEGER).default(900000),
|
|
74764
74791
|
ttl_ms: number2().int().positive().default(86400000),
|
|
74765
74792
|
state_dir: string2().optional(),
|
|
@@ -74910,6 +74937,7 @@ var init_config = __esm(() => {
|
|
|
74910
74937
|
init_zod();
|
|
74911
74938
|
init_agent();
|
|
74912
74939
|
init_category();
|
|
74940
|
+
init_computer();
|
|
74913
74941
|
init_git_master();
|
|
74914
74942
|
init_memory();
|
|
74915
74943
|
init_model_catalog();
|
|
@@ -74932,6 +74960,7 @@ var init_config = __esm(() => {
|
|
|
74932
74960
|
model_profile: string2().optional(),
|
|
74933
74961
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
74934
74962
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74963
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
74935
74964
|
disabled_skills: OmoDisabledSkillsSchema.optional()
|
|
74936
74965
|
}).strict();
|
|
74937
74966
|
OmoConfigProfileSchema = object({
|
|
@@ -74946,6 +74975,7 @@ var init_config = __esm(() => {
|
|
|
74946
74975
|
model_profile: string2().optional(),
|
|
74947
74976
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
74948
74977
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74978
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
74949
74979
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74950
74980
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74951
74981
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -74965,6 +74995,7 @@ var init_config = __esm(() => {
|
|
|
74965
74995
|
model_profile: string2().optional(),
|
|
74966
74996
|
memory: OmoMemorySettingsSchema.optional(),
|
|
74967
74997
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
74998
|
+
computer: OmoComputerSettingsSchema.optional(),
|
|
74968
74999
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74969
75000
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74970
75001
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -74987,6 +75018,7 @@ var init_config = __esm(() => {
|
|
|
74987
75018
|
model_profile: string2().optional(),
|
|
74988
75019
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
74989
75020
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
75021
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
74990
75022
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74991
75023
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74992
75024
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -75132,6 +75164,7 @@ var init_schema = __esm(() => {
|
|
|
75132
75164
|
init_task();
|
|
75133
75165
|
init_team();
|
|
75134
75166
|
init_telemetry();
|
|
75167
|
+
init_computer();
|
|
75135
75168
|
});
|
|
75136
75169
|
|
|
75137
75170
|
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
@@ -85443,7 +85476,7 @@ class SyncSpanContextManager {
|
|
|
85443
85476
|
var init_context = () => {};
|
|
85444
85477
|
|
|
85445
85478
|
// node_modules/.bun/@posthog+core@1.55.0/node_modules/@posthog/core/dist/traces/config.mjs
|
|
85446
|
-
function
|
|
85479
|
+
function positiveInteger2(value, fallback) {
|
|
85447
85480
|
return typeof value == "number" && Number.isInteger(value) && value >= 1 ? value : fallback;
|
|
85448
85481
|
}
|
|
85449
85482
|
function withUsableIdentityKeys(attributes) {
|
|
@@ -85478,22 +85511,22 @@ function resolveTracesConfig(config, hostResourceAttributes, logger) {
|
|
|
85478
85511
|
const resourceAttributes = assignUserAttributes({
|
|
85479
85512
|
...hostResourceAttributes
|
|
85480
85513
|
}, withUsableIdentityKeys(config?.resourceAttributes));
|
|
85481
|
-
const maxExportBatchSize =
|
|
85514
|
+
const maxExportBatchSize = positiveInteger2(config?.maxExportBatchSize, DEFAULT_MAX_EXPORT_BATCH_SIZE);
|
|
85482
85515
|
return {
|
|
85483
85516
|
serviceName: resourceAttributes?.["service.name"] ?? config?.serviceName,
|
|
85484
85517
|
serviceVersion: resourceAttributes?.["service.version"] ?? config?.serviceVersion,
|
|
85485
85518
|
environment: resourceAttributes?.["deployment.environment"] ?? config?.environment,
|
|
85486
85519
|
resourceAttributes,
|
|
85487
85520
|
beforeSpanSend: resolveBeforeSpanSend(config?.beforeSpanSend, logger),
|
|
85488
|
-
maxAttributesPerSpan:
|
|
85489
|
-
maxEventsPerSpan:
|
|
85521
|
+
maxAttributesPerSpan: positiveInteger2(config?.maxAttributesPerSpan, DEFAULT_MAX_ATTRIBUTES_PER_SPAN),
|
|
85522
|
+
maxEventsPerSpan: positiveInteger2(config?.maxEventsPerSpan, DEFAULT_MAX_EVENTS_PER_SPAN),
|
|
85490
85523
|
maxAttributesPerEvent: DEFAULT_MAX_ATTRIBUTES_PER_EVENT,
|
|
85491
|
-
maxAttributeValueLength:
|
|
85492
|
-
flushIntervalMs:
|
|
85524
|
+
maxAttributeValueLength: positiveInteger2(config?.maxAttributeValueLength, DEFAULT_MAX_ATTRIBUTE_VALUE_LENGTH),
|
|
85525
|
+
flushIntervalMs: positiveInteger2(config?.flushIntervalMs, DEFAULT_FLUSH_INTERVAL_MS2),
|
|
85493
85526
|
maxExportBatchSize,
|
|
85494
|
-
maxQueueSize: Math.max(
|
|
85495
|
-
maxLiveSpans:
|
|
85496
|
-
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)
|
|
85497
85530
|
};
|
|
85498
85531
|
}
|
|
85499
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;
|
|
@@ -89033,7 +89066,7 @@ var package_default2;
|
|
|
89033
89066
|
var init_package2 = __esm(() => {
|
|
89034
89067
|
package_default2 = {
|
|
89035
89068
|
name: "@oh-my-opencode/omo-codex",
|
|
89036
|
-
version: "5.
|
|
89069
|
+
version: "5.1.0",
|
|
89037
89070
|
type: "module",
|
|
89038
89071
|
private: true,
|
|
89039
89072
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -98183,6 +98216,8 @@ function isErrno(error, code) {
|
|
|
98183
98216
|
var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
98184
98217
|
join62("extensions", "omo.js"),
|
|
98185
98218
|
join62("extensions", "omo-task.js"),
|
|
98219
|
+
join62("extensions", "omo-computer-use.js"),
|
|
98220
|
+
join62("extensions", "assets.generated.json"),
|
|
98186
98221
|
join62("extensions", "omo-member.js"),
|
|
98187
98222
|
join62("extensions", "memory-run-supervisor.mjs"),
|
|
98188
98223
|
...PERSONA_ASSET_FILES.map((filename) => join62("extensions", filename)),
|
|
@@ -98374,7 +98409,7 @@ async function runNativeDevInstaller(options) {
|
|
|
98374
98409
|
return runSenpiInstaller(options);
|
|
98375
98410
|
}
|
|
98376
98411
|
// packages/omo-opencode/src/cli/install-native/legacy-omo-bin.ts
|
|
98377
|
-
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";
|
|
98378
98413
|
import { dirname as dirname26, isAbsolute as isAbsolute12, join as join64, posix as posix9, win32 as win325 } from "node:path";
|
|
98379
98414
|
var NATIVE_OMO_PACKAGE = "omo-ai";
|
|
98380
98415
|
var LEGACY_OMO_BIN_PACKAGES = ["oh-my-openagent", "oh-my-opencode", "lazycodex"];
|
|
@@ -98456,12 +98491,11 @@ function resolveOwner(binPath) {
|
|
|
98456
98491
|
if (fromLink !== null)
|
|
98457
98492
|
return fromLink;
|
|
98458
98493
|
const shim = readShimText(binPath);
|
|
98459
|
-
|
|
98460
|
-
return null;
|
|
98461
|
-
const lightWrapper = codexLightWrapperOwner(shim);
|
|
98494
|
+
const lightWrapper = shim === null ? null : codexLightWrapperOwner(shim);
|
|
98462
98495
|
if (lightWrapper !== null)
|
|
98463
98496
|
return lightWrapper;
|
|
98464
|
-
|
|
98497
|
+
const entries = [...shim === null ? [] : shimEntryPaths(shim, dirname26(binPath)), ...bunxEntryPaths(binPath)];
|
|
98498
|
+
for (const entry of entries) {
|
|
98465
98499
|
if (!isInsideNodeModules(entry) || !pathExists(entry))
|
|
98466
98500
|
continue;
|
|
98467
98501
|
const owner = ownerOfFile(entry);
|
|
@@ -98482,6 +98516,23 @@ function shimEntryPaths(shim, shimDirectory) {
|
|
|
98482
98516
|
}
|
|
98483
98517
|
return paths;
|
|
98484
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
|
+
}
|
|
98485
98536
|
function codexLightWrapperOwner(shim) {
|
|
98486
98537
|
if (!shim.includes(CODEX_LIGHT_WRAPPER_MARKER))
|
|
98487
98538
|
return null;
|
|
@@ -103411,20 +103462,41 @@ var BOULDER_FILE = "boulder.json";
|
|
|
103411
103462
|
var BOULDER_STATE_PATH = `${BOULDER_DIR}/${BOULDER_FILE}`;
|
|
103412
103463
|
var NOTEPAD_DIR = "notepads";
|
|
103413
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
|
+
|
|
103414
103482
|
// packages/boulder-state/src/plan-checklist.ts
|
|
103415
|
-
var SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX]?)[ \t]*\][ \t]+(.+)$/;
|
|
103483
|
+
var SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX~]?)[ \t]*\][ \t]+(.+)$/;
|
|
103416
103484
|
var TODO_HEADING_PATTERN = /^##[ \t]+TODOs(?:[ \t]+#+)?[ \t]*$/i;
|
|
103417
103485
|
var FINAL_VERIFICATION_HEADING_PATTERN = /^##[ \t]+Final Verification Wave(?:[ \t]+#+)?[ \t]*$/i;
|
|
103418
103486
|
var SECTION_BOUNDARY_HEADING_PATTERN = /^#{1,2}(?:[ \t]+|$)/;
|
|
103419
|
-
var
|
|
103420
|
-
var
|
|
103421
|
-
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;
|
|
103422
103490
|
function parsePlanChecklist(markdown) {
|
|
103423
103491
|
const lines = markdown.split(/\r?\n/);
|
|
103424
103492
|
if (!hasStructuredSection(lines)) {
|
|
103425
103493
|
return parseSimpleChecklist(lines);
|
|
103426
103494
|
}
|
|
103427
|
-
|
|
103495
|
+
const structuredPlan = parseStructuredPlan(lines);
|
|
103496
|
+
if (structuredPlan.checklist.total === 0 && structuredPlan.hasUntrackedTopLevelCheckbox) {
|
|
103497
|
+
return parseSimpleChecklist(lines);
|
|
103498
|
+
}
|
|
103499
|
+
return structuredPlan.checklist;
|
|
103428
103500
|
}
|
|
103429
103501
|
function parseCurrentTopLevelTask(markdown) {
|
|
103430
103502
|
const lines = markdown.split(/\r?\n/);
|
|
@@ -103434,10 +103506,12 @@ function parseCurrentTopLevelTask(markdown) {
|
|
|
103434
103506
|
return parseStructuredPlan(lines).nextTask;
|
|
103435
103507
|
}
|
|
103436
103508
|
function parseStructuredPlan(lines) {
|
|
103509
|
+
let completed = 0;
|
|
103437
103510
|
let remaining = 0;
|
|
103438
103511
|
let total = 0;
|
|
103439
103512
|
let nextTaskLabel = null;
|
|
103440
103513
|
let nextTask = null;
|
|
103514
|
+
let hasUntrackedTopLevelCheckbox = false;
|
|
103441
103515
|
let section = "other";
|
|
103442
103516
|
let fence = null;
|
|
103443
103517
|
for (const line of lines) {
|
|
@@ -103457,6 +103531,9 @@ function parseStructuredPlan(lines) {
|
|
|
103457
103531
|
continue;
|
|
103458
103532
|
}
|
|
103459
103533
|
if (section === "other") {
|
|
103534
|
+
if (parseSimpleTopLevelCheckbox(line) !== null) {
|
|
103535
|
+
hasUntrackedTopLevelCheckbox = true;
|
|
103536
|
+
}
|
|
103460
103537
|
continue;
|
|
103461
103538
|
}
|
|
103462
103539
|
const checkbox = parseStructuredTopLevelCheckbox(line, section);
|
|
@@ -103464,7 +103541,11 @@ function parseStructuredPlan(lines) {
|
|
|
103464
103541
|
continue;
|
|
103465
103542
|
}
|
|
103466
103543
|
total += 1;
|
|
103467
|
-
if (checkbox.
|
|
103544
|
+
if (checkbox.status === "done") {
|
|
103545
|
+
completed += 1;
|
|
103546
|
+
continue;
|
|
103547
|
+
}
|
|
103548
|
+
if (checkbox.status === "in-progress") {
|
|
103468
103549
|
continue;
|
|
103469
103550
|
}
|
|
103470
103551
|
remaining += 1;
|
|
@@ -103475,15 +103556,17 @@ function parseStructuredPlan(lines) {
|
|
|
103475
103556
|
}
|
|
103476
103557
|
return {
|
|
103477
103558
|
checklist: {
|
|
103478
|
-
completed
|
|
103559
|
+
completed,
|
|
103479
103560
|
remaining,
|
|
103480
103561
|
total,
|
|
103481
103562
|
nextTaskLabel
|
|
103482
103563
|
},
|
|
103483
|
-
nextTask
|
|
103564
|
+
nextTask,
|
|
103565
|
+
hasUntrackedTopLevelCheckbox
|
|
103484
103566
|
};
|
|
103485
103567
|
}
|
|
103486
103568
|
function parseSimpleChecklist(lines) {
|
|
103569
|
+
let completed = 0;
|
|
103487
103570
|
let remaining = 0;
|
|
103488
103571
|
let total = 0;
|
|
103489
103572
|
let nextTaskLabel = null;
|
|
@@ -103505,7 +103588,11 @@ function parseSimpleChecklist(lines) {
|
|
|
103505
103588
|
continue;
|
|
103506
103589
|
}
|
|
103507
103590
|
total += 1;
|
|
103508
|
-
if (checkbox.
|
|
103591
|
+
if (checkbox.status === "done") {
|
|
103592
|
+
completed += 1;
|
|
103593
|
+
continue;
|
|
103594
|
+
}
|
|
103595
|
+
if (checkbox.status === "in-progress") {
|
|
103509
103596
|
continue;
|
|
103510
103597
|
}
|
|
103511
103598
|
remaining += 1;
|
|
@@ -103513,7 +103600,7 @@ function parseSimpleChecklist(lines) {
|
|
|
103513
103600
|
nextTaskLabel = checkbox.label;
|
|
103514
103601
|
}
|
|
103515
103602
|
}
|
|
103516
|
-
return { completed
|
|
103603
|
+
return { completed, remaining, total, nextTaskLabel };
|
|
103517
103604
|
}
|
|
103518
103605
|
function parseSimpleTopLevelCheckbox(line) {
|
|
103519
103606
|
const match = line.match(SIMPLE_CHECKBOX_PATTERN);
|
|
@@ -103522,7 +103609,13 @@ function parseSimpleTopLevelCheckbox(line) {
|
|
|
103522
103609
|
if (marker === undefined || label === undefined) {
|
|
103523
103610
|
return null;
|
|
103524
103611
|
}
|
|
103525
|
-
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";
|
|
103526
103619
|
}
|
|
103527
103620
|
function hasStructuredSection(lines) {
|
|
103528
103621
|
let fence = null;
|
|
@@ -103554,8 +103647,7 @@ function parseStructuredSectionHeading(line) {
|
|
|
103554
103647
|
return "other";
|
|
103555
103648
|
}
|
|
103556
103649
|
function parseStructuredTopLevelCheckbox(line, section) {
|
|
103557
|
-
const
|
|
103558
|
-
const match = line.match(pattern);
|
|
103650
|
+
const match = line.match(STRUCTURED_CHECKBOX_PATTERN);
|
|
103559
103651
|
const marker = match?.[1];
|
|
103560
103652
|
const label = match?.[2];
|
|
103561
103653
|
if (marker === undefined || label === undefined) {
|
|
@@ -103565,10 +103657,10 @@ function parseStructuredTopLevelCheckbox(line, section) {
|
|
|
103565
103657
|
if (task === null) {
|
|
103566
103658
|
return null;
|
|
103567
103659
|
}
|
|
103568
|
-
return {
|
|
103660
|
+
return { status: parseCheckboxStatus(marker), label, task };
|
|
103569
103661
|
}
|
|
103570
103662
|
function buildTaskRef(section, label) {
|
|
103571
|
-
const pattern = section === "todo" ?
|
|
103663
|
+
const pattern = section === "todo" ? TODO_TASK_LABEL_PATTERN : FINAL_WAVE_TASK_LABEL_PATTERN;
|
|
103572
103664
|
const match = label.match(pattern);
|
|
103573
103665
|
const rawLabel = match?.[1];
|
|
103574
103666
|
const title = match?.[2];
|
|
@@ -103582,20 +103674,6 @@ function buildTaskRef(section, label) {
|
|
|
103582
103674
|
title
|
|
103583
103675
|
};
|
|
103584
103676
|
}
|
|
103585
|
-
function parseOpeningFence(line) {
|
|
103586
|
-
const match = line.match(FENCE_PATTERN);
|
|
103587
|
-
const run = match?.[1];
|
|
103588
|
-
const info = match?.[2];
|
|
103589
|
-
const marker = run?.charAt(0);
|
|
103590
|
-
if (run === undefined || info === undefined || marker !== "`" && marker !== "~" || marker === "`" && info.includes("`")) {
|
|
103591
|
-
return null;
|
|
103592
|
-
}
|
|
103593
|
-
return { marker, length: run.length };
|
|
103594
|
-
}
|
|
103595
|
-
function isClosingFence(line, fence) {
|
|
103596
|
-
const run = line.match(/^[ \t]{0,3}(`{3,}|~{3,})[ \t]*$/)?.[1];
|
|
103597
|
-
return run?.charAt(0) === fence.marker && run.length >= fence.length;
|
|
103598
|
-
}
|
|
103599
103677
|
// packages/boulder-state/src/top-level-task.ts
|
|
103600
103678
|
import { existsSync as existsSync36, readFileSync as readFileSync19 } from "node:fs";
|
|
103601
103679
|
function readCurrentTopLevelTask(planPath) {
|
|
@@ -103637,7 +103715,7 @@ function resolveBoulderPlanPathForWork(directory, work) {
|
|
|
103637
103715
|
return resolveBoulderPlanPath(directory, work);
|
|
103638
103716
|
}
|
|
103639
103717
|
// packages/boulder-state/src/storage/plan-progress.ts
|
|
103640
|
-
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";
|
|
103641
103719
|
function getPlanProgress(planPath) {
|
|
103642
103720
|
if (!existsSync38(planPath)) {
|
|
103643
103721
|
return { total: 0, completed: 0, isComplete: false };
|
|
@@ -104056,7 +104134,7 @@ async function hasActiveBoulderContinuation(directory, sessionID, client) {
|
|
|
104056
104134
|
if (!boulder || !boulder.active_plan)
|
|
104057
104135
|
return false;
|
|
104058
104136
|
const progress = getPlanProgress(resolveBoulderPlanPath(directory, boulder));
|
|
104059
|
-
if (progress.isComplete)
|
|
104137
|
+
if (progress.isComplete || progress.total === 0)
|
|
104060
104138
|
return false;
|
|
104061
104139
|
if (!client)
|
|
104062
104140
|
return false;
|
|
@@ -106254,13 +106332,14 @@ init_src();
|
|
|
106254
106332
|
import { existsSync as existsSync55 } from "node:fs";
|
|
106255
106333
|
import { createRequire as createRequire3 } from "node:module";
|
|
106256
106334
|
import { homedir as homedir20 } from "node:os";
|
|
106257
|
-
import { dirname as dirname33, join as
|
|
106335
|
+
import { dirname as dirname33, join as join87 } from "node:path";
|
|
106258
106336
|
|
|
106259
106337
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
106260
|
-
import { join as
|
|
106338
|
+
import { join as join86 } from "path";
|
|
106261
106339
|
import { homedir as homedir19, tmpdir as tmpdir4 } from "os";
|
|
106262
106340
|
// packages/comment-checker-core/src/release.ts
|
|
106263
106341
|
import { join as join84 } from "node:path";
|
|
106342
|
+
var COMMENT_CHECKER_RELEASE_VERSION = "0.8.0";
|
|
106264
106343
|
function commentCheckerBinaryName(platform) {
|
|
106265
106344
|
return platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
106266
106345
|
}
|
|
@@ -106273,12 +106352,23 @@ function commentCheckerCacheDir(input) {
|
|
|
106273
106352
|
const base = input.env.XDG_CACHE_HOME || join84(input.homedir, ".cache");
|
|
106274
106353
|
return join84(base, input.cacheDirName, "bin");
|
|
106275
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
|
+
}
|
|
106276
106366
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
106277
106367
|
init_binary_downloader();
|
|
106278
106368
|
init_logger2();
|
|
106279
106369
|
init_plugin_identity();
|
|
106280
106370
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
106281
|
-
var DEBUG_FILE =
|
|
106371
|
+
var DEBUG_FILE = join86(tmpdir4(), "comment-checker-debug.log");
|
|
106282
106372
|
function getCacheDir2() {
|
|
106283
106373
|
return commentCheckerCacheDir({
|
|
106284
106374
|
platform: process.platform,
|
|
@@ -106291,7 +106381,9 @@ function getBinaryName() {
|
|
|
106291
106381
|
return commentCheckerBinaryName(process.platform);
|
|
106292
106382
|
}
|
|
106293
106383
|
function getCachedBinaryPath2() {
|
|
106294
|
-
|
|
106384
|
+
const cacheDir = getCacheDir2();
|
|
106385
|
+
const cached = getCachedBinaryPath(cacheDir, getBinaryName());
|
|
106386
|
+
return cached !== null && isCachedCommentCheckerCurrent(cacheDir) ? cached : null;
|
|
106295
106387
|
}
|
|
106296
106388
|
|
|
106297
106389
|
// packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
|
|
@@ -106335,7 +106427,7 @@ async function getBinaryVersion(binary) {
|
|
|
106335
106427
|
}
|
|
106336
106428
|
}
|
|
106337
106429
|
async function checkAstGrepCli() {
|
|
106338
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
106430
|
+
const runtimeDir = astGrepRuntimeDir(join87(homedir20(), ".omo"));
|
|
106339
106431
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
106340
106432
|
if (sgPath === null) {
|
|
106341
106433
|
return {
|
|
@@ -106365,10 +106457,10 @@ function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath
|
|
|
106365
106457
|
const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
|
|
106366
106458
|
try {
|
|
106367
106459
|
const packageDir = baseDirOverride ?? dirname33(resolvePackageJsonPath());
|
|
106368
|
-
const vendorPath =
|
|
106460
|
+
const vendorPath = join87(packageDir, "vendor", platformKey, binaryName);
|
|
106369
106461
|
if (existsSync55(vendorPath))
|
|
106370
106462
|
return vendorPath;
|
|
106371
|
-
const binPath =
|
|
106463
|
+
const binPath = join87(packageDir, "bin", binaryName);
|
|
106372
106464
|
if (existsSync55(binPath))
|
|
106373
106465
|
return binPath;
|
|
106374
106466
|
} catch (error) {
|
|
@@ -106515,7 +106607,7 @@ async function getGhCliInfo(dependencies = {}) {
|
|
|
106515
106607
|
// packages/omo-opencode/src/mcp/lsp.ts
|
|
106516
106608
|
init_zod();
|
|
106517
106609
|
init_opencode_config_dir();
|
|
106518
|
-
import { existsSync as existsSync56, readFileSync as
|
|
106610
|
+
import { existsSync as existsSync56, readFileSync as readFileSync38 } from "node:fs";
|
|
106519
106611
|
import { delimiter as delimiter3, dirname as dirname34, resolve as resolve23 } from "node:path";
|
|
106520
106612
|
import { fileURLToPath as fileURLToPath7 } from "node:url";
|
|
106521
106613
|
|
|
@@ -106659,7 +106751,7 @@ function findBootstrapRoot(candidates, pathExists) {
|
|
|
106659
106751
|
}
|
|
106660
106752
|
function readDaemonPackageVersion(root) {
|
|
106661
106753
|
try {
|
|
106662
|
-
const packageJson = JSON.parse(
|
|
106754
|
+
const packageJson = JSON.parse(readFileSync38(resolve23(root, PACKAGE_REL, "package.json"), "utf-8"));
|
|
106663
106755
|
return DaemonPackageSchema.parse(packageJson).version;
|
|
106664
106756
|
} catch (error) {
|
|
106665
106757
|
if (!(error instanceof Error))
|
|
@@ -106742,15 +106834,15 @@ function getInstalledLspServers(options = {}) {
|
|
|
106742
106834
|
|
|
106743
106835
|
// packages/omo-opencode/src/cli/doctor/checks/tools-mcp.ts
|
|
106744
106836
|
init_shared();
|
|
106745
|
-
import { existsSync as existsSync57, readFileSync as
|
|
106837
|
+
import { existsSync as existsSync57, readFileSync as readFileSync39 } from "node:fs";
|
|
106746
106838
|
import { homedir as homedir21 } from "node:os";
|
|
106747
|
-
import { join as
|
|
106839
|
+
import { join as join88 } from "node:path";
|
|
106748
106840
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
106749
106841
|
function getMcpConfigPaths() {
|
|
106750
106842
|
return [
|
|
106751
|
-
|
|
106752
|
-
|
|
106753
|
-
|
|
106843
|
+
join88(homedir21(), ".claude", ".mcp.json"),
|
|
106844
|
+
join88(process.cwd(), ".mcp.json"),
|
|
106845
|
+
join88(process.cwd(), ".claude", ".mcp.json")
|
|
106754
106846
|
];
|
|
106755
106847
|
}
|
|
106756
106848
|
function loadUserMcpConfig() {
|
|
@@ -106759,7 +106851,7 @@ function loadUserMcpConfig() {
|
|
|
106759
106851
|
if (!existsSync57(configPath))
|
|
106760
106852
|
continue;
|
|
106761
106853
|
try {
|
|
106762
|
-
const content =
|
|
106854
|
+
const content = readFileSync39(configPath, "utf-8");
|
|
106763
106855
|
const config = parseJsonc(content);
|
|
106764
106856
|
if (config.mcpServers) {
|
|
106765
106857
|
Object.assign(servers, config.mcpServers);
|
|
@@ -106894,7 +106986,7 @@ async function checkTools() {
|
|
|
106894
106986
|
|
|
106895
106987
|
// packages/omo-opencode/src/cli/doctor/checks/telemetry.ts
|
|
106896
106988
|
init_src5();
|
|
106897
|
-
import { existsSync as existsSync58, readFileSync as
|
|
106989
|
+
import { existsSync as existsSync58, readFileSync as readFileSync40 } from "node:fs";
|
|
106898
106990
|
function isTelemetryState(value) {
|
|
106899
106991
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
106900
106992
|
}
|
|
@@ -106904,7 +106996,7 @@ function readLastActiveDay(stateFilePath) {
|
|
|
106904
106996
|
}
|
|
106905
106997
|
let parsed;
|
|
106906
106998
|
try {
|
|
106907
|
-
parsed = JSON.parse(
|
|
106999
|
+
parsed = JSON.parse(readFileSync40(stateFilePath, "utf-8"));
|
|
106908
107000
|
} catch (error) {
|
|
106909
107001
|
if (error instanceof Error) {
|
|
106910
107002
|
return "unreadable";
|
|
@@ -107032,7 +107124,7 @@ init_src();
|
|
|
107032
107124
|
import { existsSync as existsSync59 } from "node:fs";
|
|
107033
107125
|
import { lstat as lstat16, readdir as readdir14, readFile as readFile28 } from "node:fs/promises";
|
|
107034
107126
|
import { homedir as homedir23 } from "node:os";
|
|
107035
|
-
import { basename as basename12, join as
|
|
107127
|
+
import { basename as basename12, join as join89, resolve as resolve24 } from "node:path";
|
|
107036
107128
|
// packages/omo-opencode/package.json
|
|
107037
107129
|
var package_default3 = {
|
|
107038
107130
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -107102,13 +107194,13 @@ var CODEX_BIN_NAMES = [
|
|
|
107102
107194
|
"omo-git-bash-hook"
|
|
107103
107195
|
];
|
|
107104
107196
|
async function gatherCodexSummary(deps = {}) {
|
|
107105
|
-
const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
107197
|
+
const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ?? join89(homedir23(), ".codex"));
|
|
107106
107198
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
107107
107199
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
107108
107200
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
107109
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
107110
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
107111
|
-
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");
|
|
107112
107204
|
const pluginVersion = stringField(manifest, "version");
|
|
107113
107205
|
return {
|
|
107114
107206
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
@@ -107165,7 +107257,7 @@ function buildCodexIssues(summary) {
|
|
|
107165
107257
|
if (summary.pluginRoot === null) {
|
|
107166
107258
|
issues.push({
|
|
107167
107259
|
title: "OMO Codex plugin is not installed",
|
|
107168
|
-
description: `Expected cached plugin at ${
|
|
107260
|
+
description: `Expected cached plugin at ${join89("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
107169
107261
|
fix: "Run: npx lazycodex-ai install",
|
|
107170
107262
|
severity: "error",
|
|
107171
107263
|
affects: ["plugin loading"]
|
|
@@ -107230,12 +107322,12 @@ function buildCodexIssues(summary) {
|
|
|
107230
107322
|
return issues;
|
|
107231
107323
|
}
|
|
107232
107324
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
107233
|
-
const pluginRoot =
|
|
107325
|
+
const pluginRoot = join89(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
|
|
107234
107326
|
if (!existsSync59(pluginRoot))
|
|
107235
107327
|
return null;
|
|
107236
107328
|
const versions = await readdir14(pluginRoot, { withFileTypes: true });
|
|
107237
107329
|
const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
107238
|
-
return candidates.length === 0 ? null :
|
|
107330
|
+
return candidates.length === 0 ? null : join89(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
107239
107331
|
}
|
|
107240
107332
|
async function readCodexConfigSummary(configPath) {
|
|
107241
107333
|
if (!existsSync59(configPath)) {
|
|
@@ -107263,13 +107355,13 @@ async function readCodexConfigSummary(configPath) {
|
|
|
107263
107355
|
async function readLinkedBins(binDir) {
|
|
107264
107356
|
const linked = [];
|
|
107265
107357
|
for (const name of CODEX_BIN_NAMES) {
|
|
107266
|
-
if (await pathExists3(
|
|
107358
|
+
if (await pathExists3(join89(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
107267
107359
|
linked.push(name);
|
|
107268
107360
|
}
|
|
107269
107361
|
return linked;
|
|
107270
107362
|
}
|
|
107271
107363
|
async function readLinkedAgents(codexHome) {
|
|
107272
|
-
const agentsDir =
|
|
107364
|
+
const agentsDir = join89(codexHome, "agents");
|
|
107273
107365
|
if (!existsSync59(agentsDir))
|
|
107274
107366
|
return [];
|
|
107275
107367
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
@@ -107403,7 +107495,7 @@ function resolveLatestVersion(input) {
|
|
|
107403
107495
|
init_src();
|
|
107404
107496
|
import { readdir as readdir15, readFile as readFile29, stat as stat7 } from "node:fs/promises";
|
|
107405
107497
|
import { homedir as homedir24 } from "node:os";
|
|
107406
|
-
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";
|
|
107407
107499
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
107408
107500
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
107409
107501
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
@@ -107413,7 +107505,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
107413
107505
|
const env = deps.env ?? process.env;
|
|
107414
107506
|
const platform = deps.platform ?? process.platform;
|
|
107415
107507
|
const arch = deps.arch ?? process.arch;
|
|
107416
|
-
const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ??
|
|
107508
|
+
const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ?? join90(homedir24(), ".codex"));
|
|
107417
107509
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
107418
107510
|
if (summary.pluginRoot === null) {
|
|
107419
107511
|
return {
|
|
@@ -107438,7 +107530,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
107438
107530
|
});
|
|
107439
107531
|
}
|
|
107440
107532
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
107441
|
-
const runtimeSgPath =
|
|
107533
|
+
const runtimeSgPath = join90(runtimeSgDir, sgBinaryName(platform));
|
|
107442
107534
|
const sg = findSgBinarySync({
|
|
107443
107535
|
arch,
|
|
107444
107536
|
env,
|
|
@@ -107550,7 +107642,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
107550
107642
|
for (const entry of entries) {
|
|
107551
107643
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
107552
107644
|
continue;
|
|
107553
|
-
const entryPath =
|
|
107645
|
+
const entryPath = join90(root, entry.name);
|
|
107554
107646
|
if (entry.isDirectory()) {
|
|
107555
107647
|
paths.push(...await findManifestPaths(entryPath, manifestName));
|
|
107556
107648
|
continue;
|
|
@@ -107594,18 +107686,18 @@ function isPluginRuntimePathArg(arg) {
|
|
|
107594
107686
|
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute14(arg));
|
|
107595
107687
|
}
|
|
107596
107688
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
107597
|
-
return
|
|
107689
|
+
return join90(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
107598
107690
|
}
|
|
107599
107691
|
function describeSgSource(sgPath, env, runtimeSgDir, platform) {
|
|
107600
107692
|
const override = env[SG_PATH_ENV_KEY]?.trim();
|
|
107601
107693
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
107602
107694
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
107603
|
-
if (sgPath ===
|
|
107695
|
+
if (sgPath === join90(runtimeSgDir, sgBinaryName(platform)))
|
|
107604
107696
|
return "runtime dir";
|
|
107605
107697
|
return "PATH";
|
|
107606
107698
|
}
|
|
107607
107699
|
async function readBootstrapStateSummary(codexHome) {
|
|
107608
|
-
const statePath =
|
|
107700
|
+
const statePath = join90(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
107609
107701
|
const raw = await readJson2(statePath);
|
|
107610
107702
|
if (raw === null)
|
|
107611
107703
|
return null;
|
|
@@ -107684,16 +107776,16 @@ function isRecord18(value) {
|
|
|
107684
107776
|
import { existsSync as existsSync60 } from "node:fs";
|
|
107685
107777
|
import { readFile as readFile30 } from "node:fs/promises";
|
|
107686
107778
|
import { homedir as homedir25 } from "node:os";
|
|
107687
|
-
import { join as
|
|
107779
|
+
import { join as join91, resolve as resolve26 } from "node:path";
|
|
107688
107780
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
107689
107781
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
107690
107782
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
107691
107783
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
107692
|
-
const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
107784
|
+
const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ?? join91(homedir25(), ".codex"));
|
|
107693
107785
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
107694
107786
|
const platform = deps.platform ?? process.platform;
|
|
107695
|
-
const wrapperPath =
|
|
107696
|
-
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");
|
|
107697
107789
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
107698
107790
|
const issues = [];
|
|
107699
107791
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
@@ -108224,17 +108316,17 @@ import {
|
|
|
108224
108316
|
existsSync as existsSync63,
|
|
108225
108317
|
mkdirSync as mkdirSync17,
|
|
108226
108318
|
readdirSync as readdirSync13,
|
|
108227
|
-
readFileSync as
|
|
108319
|
+
readFileSync as readFileSync42,
|
|
108228
108320
|
renameSync as renameSync8,
|
|
108229
108321
|
unlinkSync as unlinkSync9,
|
|
108230
|
-
writeFileSync as
|
|
108322
|
+
writeFileSync as writeFileSync14
|
|
108231
108323
|
} from "node:fs";
|
|
108232
|
-
import { basename as basename13, dirname as dirname36, join as
|
|
108324
|
+
import { basename as basename13, dirname as dirname36, join as join94 } from "node:path";
|
|
108233
108325
|
|
|
108234
108326
|
// packages/mcp-client-core/src/config-dir.ts
|
|
108235
108327
|
import { existsSync as existsSync61, realpathSync as realpathSync10 } from "node:fs";
|
|
108236
108328
|
import { homedir as homedir26 } from "node:os";
|
|
108237
|
-
import { join as
|
|
108329
|
+
import { join as join92, resolve as resolve27 } from "node:path";
|
|
108238
108330
|
function resolveConfigPath2(pathValue) {
|
|
108239
108331
|
const resolvedPath = resolve27(pathValue);
|
|
108240
108332
|
if (!existsSync61(resolvedPath))
|
|
@@ -108252,13 +108344,13 @@ function getOpenCodeCliConfigDir(env = process.env) {
|
|
|
108252
108344
|
if (customConfigDir) {
|
|
108253
108345
|
return resolveConfigPath2(customConfigDir);
|
|
108254
108346
|
}
|
|
108255
|
-
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() ||
|
|
108256
|
-
return resolveConfigPath2(
|
|
108347
|
+
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join92(homedir26(), ".config");
|
|
108348
|
+
return resolveConfigPath2(join92(xdgConfigDir, "opencode"));
|
|
108257
108349
|
}
|
|
108258
108350
|
|
|
108259
108351
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
108260
|
-
import { chmodSync as chmodSync4, existsSync as existsSync62, readFileSync as
|
|
108261
|
-
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";
|
|
108262
108354
|
var INDEX_FILE_NAME = "index.json";
|
|
108263
108355
|
function isTokenIndex(value) {
|
|
108264
108356
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -108266,14 +108358,14 @@ function isTokenIndex(value) {
|
|
|
108266
108358
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
108267
108359
|
}
|
|
108268
108360
|
function getIndexPath(storageDir) {
|
|
108269
|
-
return
|
|
108361
|
+
return join93(storageDir, INDEX_FILE_NAME);
|
|
108270
108362
|
}
|
|
108271
108363
|
function readTokenIndex(storageDir) {
|
|
108272
108364
|
const indexPath = getIndexPath(storageDir);
|
|
108273
108365
|
if (!existsSync62(indexPath))
|
|
108274
108366
|
return {};
|
|
108275
108367
|
try {
|
|
108276
|
-
const parsed = JSON.parse(
|
|
108368
|
+
const parsed = JSON.parse(readFileSync41(indexPath, "utf-8"));
|
|
108277
108369
|
return isTokenIndex(parsed) ? parsed : {};
|
|
108278
108370
|
} catch (readError) {
|
|
108279
108371
|
if (!(readError instanceof Error))
|
|
@@ -108285,7 +108377,7 @@ function writeTokenIndex(storageDir, index) {
|
|
|
108285
108377
|
try {
|
|
108286
108378
|
const indexPath = getIndexPath(storageDir);
|
|
108287
108379
|
const tempPath = `${indexPath}.tmp.${Date.now()}`;
|
|
108288
|
-
|
|
108380
|
+
writeFileSync13(tempPath, JSON.stringify(index, null, 2), { encoding: "utf-8", mode: 384 });
|
|
108289
108381
|
chmodSync4(tempPath, 384);
|
|
108290
108382
|
renameSync7(tempPath, indexPath);
|
|
108291
108383
|
return true;
|
|
@@ -108310,16 +108402,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
|
|
|
108310
108402
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
108311
108403
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
108312
108404
|
function getMcpOauthStorageDir() {
|
|
108313
|
-
return
|
|
108405
|
+
return join94(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
108314
108406
|
}
|
|
108315
108407
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
108316
108408
|
return createHash7("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
108317
108409
|
}
|
|
108318
108410
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
108319
|
-
return
|
|
108411
|
+
return join94(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
108320
108412
|
}
|
|
108321
108413
|
function getLegacyStoragePath() {
|
|
108322
|
-
return
|
|
108414
|
+
return join94(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
108323
108415
|
}
|
|
108324
108416
|
function normalizeHost2(serverHost) {
|
|
108325
108417
|
let host = serverHost.trim();
|
|
@@ -108383,7 +108475,7 @@ function readTokenFile(filePath) {
|
|
|
108383
108475
|
if (!existsSync63(filePath))
|
|
108384
108476
|
return null;
|
|
108385
108477
|
try {
|
|
108386
|
-
const parsed = JSON.parse(
|
|
108478
|
+
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
108387
108479
|
return isOAuthTokenData(parsed) ? parsed : null;
|
|
108388
108480
|
} catch (readError) {
|
|
108389
108481
|
if (!(readError instanceof Error))
|
|
@@ -108396,7 +108488,7 @@ function readLegacyStore() {
|
|
|
108396
108488
|
if (!existsSync63(filePath))
|
|
108397
108489
|
return null;
|
|
108398
108490
|
try {
|
|
108399
|
-
const parsed = JSON.parse(
|
|
108491
|
+
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
108400
108492
|
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
108401
108493
|
return null;
|
|
108402
108494
|
const result = {};
|
|
@@ -108418,7 +108510,7 @@ function writeTokenFile(filePath, token) {
|
|
|
108418
108510
|
mkdirSync17(dir, { recursive: true });
|
|
108419
108511
|
}
|
|
108420
108512
|
const tempPath = `${filePath}.tmp.${Date.now()}`;
|
|
108421
|
-
|
|
108513
|
+
writeFileSync14(tempPath, JSON.stringify(token, null, 2), { encoding: "utf-8", mode: 384 });
|
|
108422
108514
|
chmodSync5(tempPath, 384);
|
|
108423
108515
|
renameSync8(tempPath, filePath);
|
|
108424
108516
|
return true;
|
|
@@ -108474,7 +108566,7 @@ function deleteLegacyToken(serverHost, resource) {
|
|
|
108474
108566
|
function writeLegacyStore(store) {
|
|
108475
108567
|
try {
|
|
108476
108568
|
const filePath = getLegacyStoragePath();
|
|
108477
|
-
|
|
108569
|
+
writeFileSync14(filePath, JSON.stringify(store, null, 2), { encoding: "utf-8", mode: 384 });
|
|
108478
108570
|
chmodSync5(filePath, 384);
|
|
108479
108571
|
return true;
|
|
108480
108572
|
} catch (writeError) {
|
|
@@ -108498,7 +108590,7 @@ function listTokensByHost(serverHost) {
|
|
|
108498
108590
|
for (const [hash, indexedKey] of Object.entries(index)) {
|
|
108499
108591
|
if (!indexedKey.startsWith(prefix))
|
|
108500
108592
|
continue;
|
|
108501
|
-
const indexedToken = readTokenFile(
|
|
108593
|
+
const indexedToken = readTokenFile(join94(getMcpOauthStorageDir(), `${hash}.json`));
|
|
108502
108594
|
if (indexedToken)
|
|
108503
108595
|
result[indexedKey] = indexedToken;
|
|
108504
108596
|
}
|
|
@@ -108513,7 +108605,7 @@ function listAllTokens() {
|
|
|
108513
108605
|
for (const entry of readdirSync13(dir, { withFileTypes: true })) {
|
|
108514
108606
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
108515
108607
|
continue;
|
|
108516
|
-
const token = readTokenFile(
|
|
108608
|
+
const token = readTokenFile(join94(dir, entry.name));
|
|
108517
108609
|
const hash = basename13(entry.name, ".json");
|
|
108518
108610
|
if (token)
|
|
108519
108611
|
result[index[hash] ?? hash] = token;
|
|
@@ -109237,7 +109329,7 @@ async function boulder(options) {
|
|
|
109237
109329
|
}
|
|
109238
109330
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
109239
109331
|
import { spawn as spawn5 } from "node:child_process";
|
|
109240
|
-
import { existsSync as existsSync65, readFileSync as
|
|
109332
|
+
import { existsSync as existsSync65, readFileSync as readFileSync43, realpathSync as realpathSync11 } from "node:fs";
|
|
109241
109333
|
import { homedir as homedir27 } from "node:os";
|
|
109242
109334
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
109243
109335
|
function resolveCodexUlwLoopCommand(input = {}) {
|
|
@@ -109287,7 +109379,7 @@ function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
|
|
|
109287
109379
|
}
|
|
109288
109380
|
function isGeneratedRuntimeWrapper(candidate) {
|
|
109289
109381
|
try {
|
|
109290
|
-
return
|
|
109382
|
+
return readFileSync43(candidate, "utf8").includes(RUNTIME_WRAPPER_MARKER);
|
|
109291
109383
|
} catch (error) {
|
|
109292
109384
|
if (error instanceof Error)
|
|
109293
109385
|
return false;
|