lazycodex-ai 5.0.0-beta.46 → 5.0.0-beta.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +15 -15
- package/dist/cli-node/index.js +15 -15
- package/package.json +1 -1
- package/packages/lsp-daemon/dist/cli.js +6 -3
- package/packages/lsp-daemon/dist/client.js +6 -3
- package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
- package/packages/lsp-daemon/dist/ensure-daemon.js +9 -2
- package/packages/lsp-daemon/dist/index.js +6 -3
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- 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 +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +6 -3
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +15 -7
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +294 -96
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +12 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +21 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +10 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +25 -57
- package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +227 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +17 -3
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +10 -7
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +18 -7
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +24 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +25 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +11 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +34 -64
- package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +239 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +16 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +14 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +10 -8
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +12 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +7 -5
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +36 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +37 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +218 -0
- 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/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-checking-ulw-execute-continuation.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/ulw-loop/SKILL.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +10 -7
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
package/dist/cli/index.js
CHANGED
|
@@ -54,7 +54,7 @@ var package_default;
|
|
|
54
54
|
var init_package = __esm(() => {
|
|
55
55
|
package_default = {
|
|
56
56
|
name: "oh-my-opencode",
|
|
57
|
-
version: "5.0.0-beta.
|
|
57
|
+
version: "5.0.0-beta.48",
|
|
58
58
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
59
59
|
main: "./dist/index.js",
|
|
60
60
|
types: "dist/index.d.ts",
|
|
@@ -238,7 +238,7 @@ var init_package = __esm(() => {
|
|
|
238
238
|
zod: "^4.4.3"
|
|
239
239
|
},
|
|
240
240
|
devDependencies: {
|
|
241
|
-
"@code-yeongyu/senpi": "2026.9.7",
|
|
241
|
+
"@code-yeongyu/senpi": "2026.9.7-2",
|
|
242
242
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
243
243
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
244
244
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -279,18 +279,18 @@ var init_package = __esm(() => {
|
|
|
279
279
|
typescript: "^7.0.2"
|
|
280
280
|
},
|
|
281
281
|
optionalDependencies: {
|
|
282
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
283
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
284
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
285
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
286
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
287
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
288
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
289
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
290
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
282
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.48",
|
|
283
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.48",
|
|
284
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.48",
|
|
285
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.48",
|
|
286
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.48",
|
|
287
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.48",
|
|
288
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.48",
|
|
289
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.48",
|
|
290
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.48",
|
|
291
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.48",
|
|
292
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.48",
|
|
293
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.48"
|
|
294
294
|
},
|
|
295
295
|
overrides: {
|
|
296
296
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -94447,7 +94447,7 @@ var package_default2;
|
|
|
94447
94447
|
var init_package2 = __esm(() => {
|
|
94448
94448
|
package_default2 = {
|
|
94449
94449
|
name: "@oh-my-opencode/omo-codex",
|
|
94450
|
-
version: "5.0.0-beta.
|
|
94450
|
+
version: "5.0.0-beta.48",
|
|
94451
94451
|
type: "module",
|
|
94452
94452
|
private: true,
|
|
94453
94453
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
package/dist/cli-node/index.js
CHANGED
|
@@ -55,7 +55,7 @@ var package_default;
|
|
|
55
55
|
var init_package = __esm(() => {
|
|
56
56
|
package_default = {
|
|
57
57
|
name: "oh-my-opencode",
|
|
58
|
-
version: "5.0.0-beta.
|
|
58
|
+
version: "5.0.0-beta.48",
|
|
59
59
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
60
60
|
main: "./dist/index.js",
|
|
61
61
|
types: "dist/index.d.ts",
|
|
@@ -239,7 +239,7 @@ var init_package = __esm(() => {
|
|
|
239
239
|
zod: "^4.4.3"
|
|
240
240
|
},
|
|
241
241
|
devDependencies: {
|
|
242
|
-
"@code-yeongyu/senpi": "2026.9.7",
|
|
242
|
+
"@code-yeongyu/senpi": "2026.9.7-2",
|
|
243
243
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
244
244
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
245
245
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -280,18 +280,18 @@ var init_package = __esm(() => {
|
|
|
280
280
|
typescript: "^7.0.2"
|
|
281
281
|
},
|
|
282
282
|
optionalDependencies: {
|
|
283
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
284
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
285
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
286
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
287
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
288
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
289
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
290
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
294
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
283
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.48",
|
|
284
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.48",
|
|
285
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.48",
|
|
286
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.48",
|
|
287
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.48",
|
|
288
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.48",
|
|
289
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.48",
|
|
290
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.48",
|
|
291
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.48",
|
|
292
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.48",
|
|
293
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.48",
|
|
294
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.48"
|
|
295
295
|
},
|
|
296
296
|
overrides: {
|
|
297
297
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -94526,7 +94526,7 @@ var package_default2;
|
|
|
94526
94526
|
var init_package2 = __esm(() => {
|
|
94527
94527
|
package_default2 = {
|
|
94528
94528
|
name: "@oh-my-opencode/omo-codex",
|
|
94529
|
-
version: "5.0.0-beta.
|
|
94529
|
+
version: "5.0.0-beta.48",
|
|
94530
94530
|
type: "module",
|
|
94531
94531
|
private: true,
|
|
94532
94532
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazycodex-ai",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.48",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -6127,14 +6127,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
|
|
|
6127
6127
|
socket.connect(paths.socket);
|
|
6128
6128
|
});
|
|
6129
6129
|
}
|
|
6130
|
-
function spawnDaemonProcess(paths) {
|
|
6130
|
+
function spawnDaemonProcess(paths, deps = {}) {
|
|
6131
6131
|
mkdirSync3(dirname10(paths.log), { recursive: true });
|
|
6132
6132
|
const logFd = openSync2(paths.log, "a");
|
|
6133
6133
|
try {
|
|
6134
|
-
const
|
|
6134
|
+
const spawnDaemonChild = deps.spawn ?? spawn2;
|
|
6135
|
+
const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
|
|
6136
|
+
const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
|
|
6135
6137
|
detached: true,
|
|
6136
6138
|
stdio: ["ignore", logFd, logFd],
|
|
6137
|
-
windowsHide: true
|
|
6139
|
+
windowsHide: true,
|
|
6140
|
+
env: { ...process.env, BUN_BE_BUN: "1" }
|
|
6138
6141
|
});
|
|
6139
6142
|
child.once("spawn", () => closeSync2(logFd));
|
|
6140
6143
|
child.once("error", (error) => {
|
|
@@ -719,14 +719,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
|
|
|
719
719
|
socket.connect(paths.socket);
|
|
720
720
|
});
|
|
721
721
|
}
|
|
722
|
-
function spawnDaemonProcess(paths) {
|
|
722
|
+
function spawnDaemonProcess(paths, deps = {}) {
|
|
723
723
|
mkdirSync2(dirname3(paths.log), { recursive: true });
|
|
724
724
|
const logFd = openSync2(paths.log, "a");
|
|
725
725
|
try {
|
|
726
|
-
const
|
|
726
|
+
const spawnDaemonChild = deps.spawn ?? spawn;
|
|
727
|
+
const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
|
|
728
|
+
const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
|
|
727
729
|
detached: true,
|
|
728
730
|
stdio: ["ignore", logFd, logFd],
|
|
729
|
-
windowsHide: true
|
|
731
|
+
windowsHide: true,
|
|
732
|
+
env: { ...process.env, BUN_BE_BUN: "1" }
|
|
730
733
|
});
|
|
731
734
|
child.once("spawn", () => closeSync2(logFd));
|
|
732
735
|
child.once("error", (error) => {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ChildProcess, type SpawnOptions } from "node:child_process";
|
|
1
2
|
import type { OwnerPing } from "./ownership.js";
|
|
2
3
|
import { type DaemonPaths } from "./paths.js";
|
|
3
4
|
import { type DaemonRuntimeDefaults } from "./runtime-contract.js";
|
|
@@ -19,7 +20,11 @@ export interface EnsureDaemonOptions {
|
|
|
19
20
|
export declare function ensureDaemonRunning(paths: DaemonPaths, deps?: EnsureDaemonDeps, options?: EnsureDaemonOptions): Promise<void>;
|
|
20
21
|
export declare function probeDaemon(paths: DaemonPaths, timeoutMs?: number, signal?: AbortSignal): Promise<boolean>;
|
|
21
22
|
export declare function pingDaemon(paths: DaemonPaths, token: string, timeoutMs?: number, signal?: AbortSignal): Promise<OwnerPing | null>;
|
|
22
|
-
export
|
|
23
|
+
export interface SpawnDaemonProcessDeps {
|
|
24
|
+
spawn: (executable: string, args: readonly string[], options: SpawnOptions) => ChildProcess;
|
|
25
|
+
resolveExecutable: () => string;
|
|
26
|
+
}
|
|
27
|
+
export declare function spawnDaemonProcess(paths: DaemonPaths, deps?: Partial<SpawnDaemonProcessDeps>): void;
|
|
23
28
|
export declare function resolveDaemonNodeExecutable(cachedExecPath?: string, originalArgv0?: string, pathExists?: (path: string) => boolean): string;
|
|
24
29
|
export declare function resolveDaemonCliPath(env?: NodeJS.ProcessEnv, defaults?: DaemonRuntimeDefaults): string;
|
|
25
30
|
export declare function defaultEnsureDaemonDeps(): EnsureDaemonDeps;
|
|
@@ -81,14 +81,21 @@ export function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
|
|
|
81
81
|
socket.connect(paths.socket);
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
|
-
export function spawnDaemonProcess(paths) {
|
|
84
|
+
export function spawnDaemonProcess(paths, deps = {}) {
|
|
85
85
|
mkdirSync(dirname(paths.log), { recursive: true });
|
|
86
86
|
const logFd = openSync(paths.log, "a");
|
|
87
87
|
try {
|
|
88
|
-
const
|
|
88
|
+
const spawnDaemonChild = deps.spawn ?? spawn;
|
|
89
|
+
const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
|
|
90
|
+
const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
|
|
89
91
|
detached: true,
|
|
90
92
|
stdio: ["ignore", logFd, logFd],
|
|
91
93
|
windowsHide: true,
|
|
94
|
+
// Under the packaged runtime execPath is the compiled omo binary, not a
|
|
95
|
+
// node interpreter; without BUN_BE_BUN it runs its embedded entrypoint, so
|
|
96
|
+
// the CLI argv boots a billable agent session instead of the daemon
|
|
97
|
+
// (issue #7914). Inert for node and for the bun interpreter itself.
|
|
98
|
+
env: { ...process.env, BUN_BE_BUN: "1" },
|
|
92
99
|
});
|
|
93
100
|
child.once("spawn", () => closeSync(logFd));
|
|
94
101
|
child.once("error", (error) => {
|
|
@@ -3861,14 +3861,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
|
|
|
3861
3861
|
socket.connect(paths.socket);
|
|
3862
3862
|
});
|
|
3863
3863
|
}
|
|
3864
|
-
function spawnDaemonProcess(paths) {
|
|
3864
|
+
function spawnDaemonProcess(paths, deps = {}) {
|
|
3865
3865
|
mkdirSync2(dirname6(paths.log), { recursive: true });
|
|
3866
3866
|
const logFd = openSync2(paths.log, "a");
|
|
3867
3867
|
try {
|
|
3868
|
-
const
|
|
3868
|
+
const spawnDaemonChild = deps.spawn ?? spawn2;
|
|
3869
|
+
const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
|
|
3870
|
+
const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
|
|
3869
3871
|
detached: true,
|
|
3870
3872
|
stdio: ["ignore", logFd, logFd],
|
|
3871
|
-
windowsHide: true
|
|
3873
|
+
windowsHide: true,
|
|
3874
|
+
env: { ...process.env, BUN_BE_BUN: "1" }
|
|
3872
3875
|
});
|
|
3873
3876
|
child.once("spawn", () => closeSync2(logFd));
|
|
3874
3877
|
child.once("error", (error) => {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
|
|
9
9
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
|
|
10
10
|
"timeout": 30,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sisyphuslabs/codex-bootstrap",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.48",
|
|
4
4
|
"description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": true,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
|
|
10
10
|
"timeout": 5,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Recommending Git Bash MCP"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"type": "command",
|
|
21
21
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
22
22
|
"timeout": 5,
|
|
23
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
23
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Resetting Git Bash MCP Reminder"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Verifying LazyCodex Executor Evidence"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-lazycodex-executor-verify",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.48",
|
|
4
4
|
"description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.12.1",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "5.0.0-beta.
|
|
4
|
-
"inputDigest": "sha256:
|
|
3
|
+
"version": "5.0.0-beta.48",
|
|
4
|
+
"inputDigest": "sha256:835e6f61b5800fc88f9cb11340f0d13f135cb1d6c987336145ccbbe809df7326",
|
|
5
5
|
"outputs": [
|
|
6
6
|
{
|
|
7
7
|
"path": "cli.d.ts",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"path": "cli.js",
|
|
12
|
-
"sha256": "
|
|
12
|
+
"sha256": "bddbb2f82db0dffb0c2ec7b69778a63e77cac2c6a0f8bfb6d7a62980a49d14bb"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "codex-hook-cli.d.ts",
|
|
@@ -556,14 +556,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
|
|
|
556
556
|
socket.connect(paths.socket);
|
|
557
557
|
});
|
|
558
558
|
}
|
|
559
|
-
function spawnDaemonProcess(paths) {
|
|
559
|
+
function spawnDaemonProcess(paths, deps = {}) {
|
|
560
560
|
mkdirSync2(dirname3(paths.log), { recursive: true });
|
|
561
561
|
const logFd = openSync2(paths.log, "a");
|
|
562
562
|
try {
|
|
563
|
-
const
|
|
563
|
+
const spawnDaemonChild = deps.spawn ?? spawn;
|
|
564
|
+
const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
|
|
565
|
+
const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
|
|
564
566
|
detached: true,
|
|
565
567
|
stdio: ["ignore", logFd, logFd],
|
|
566
|
-
windowsHide: true
|
|
568
|
+
windowsHide: true,
|
|
569
|
+
env: { ...process.env, BUN_BE_BUN: "1" }
|
|
567
570
|
});
|
|
568
571
|
child.once("spawn", () => closeSync2(logFd));
|
|
569
572
|
child.once("error", (error) => {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
10
10
|
"timeout": 60,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Checking LSP Diagnostics"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"type": "command",
|
|
22
22
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
23
23
|
"timeout": 5,
|
|
24
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
24
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Resetting LSP Diagnostics Cache"
|
|
25
25
|
}
|
|
26
26
|
]
|
|
27
27
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Loading Project Rules"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"type": "command",
|
|
20
20
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
|
|
21
21
|
"timeout": 10,
|
|
22
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
22
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Loading Project Rules"
|
|
23
23
|
}
|
|
24
24
|
]
|
|
25
25
|
}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"type": "command",
|
|
33
33
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
34
34
|
"timeout": 10,
|
|
35
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
35
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Matching Project Rules"
|
|
36
36
|
}
|
|
37
37
|
]
|
|
38
38
|
}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"type": "command",
|
|
46
46
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
47
47
|
"timeout": 10,
|
|
48
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
48
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Resetting Project Rule Cache"
|
|
49
49
|
}
|
|
50
50
|
]
|
|
51
51
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Checking Thread Title Hygiene"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-telemetry",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.48",
|
|
4
4
|
"description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.12.1",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Checking Ultrawork Trigger"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-ultrawork",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.48",
|
|
4
4
|
"description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.12.1",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Checking Ulw-Execute Continuation"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"type": "command",
|
|
20
20
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook subagent-stop",
|
|
21
21
|
"timeout": 10,
|
|
22
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
22
|
+
"statusMessage": "(OmO 5.0.0-beta.48) Checking Ulw-Execute Continuation"
|
|
23
23
|
}
|
|
24
24
|
]
|
|
25
25
|
}
|
|
@@ -3,7 +3,8 @@ import { hasFlag, readValue } from "./cli-arg-parser.js";
|
|
|
3
3
|
import { printJsonError, subcommandHelp, ULW_LOOP_HELP } from "./cli-output.js";
|
|
4
4
|
import { addGoal, captureEvidence, completeGoals, createGoals, criteria, reviewBlockers, status, steer, } from "./cli-subcommands.js";
|
|
5
5
|
import { resolveUlwLoopSessionIdFromEnv } from "./paths.js";
|
|
6
|
-
import {
|
|
6
|
+
import { listUlwLoopSessionIds } from "./plan-io.js";
|
|
7
|
+
import { sessionIdRequiredMessage, sessionScopeRequiredMessage } from "./plan-missing-recovery.js";
|
|
7
8
|
import { UlwLoopError } from "./types.js";
|
|
8
9
|
export const ULW_LOOP_SUBCOMMANDS = [
|
|
9
10
|
"help",
|
|
@@ -27,7 +28,6 @@ export async function ulwLoopCommand(argv) {
|
|
|
27
28
|
const repoRoot = process.cwd();
|
|
28
29
|
const json = hasFlag(rest, "--json");
|
|
29
30
|
try {
|
|
30
|
-
const scope = commandScope(rest);
|
|
31
31
|
if (!isUlwLoopSubcommand(command)) {
|
|
32
32
|
if (json) {
|
|
33
33
|
printJsonError(new UlwLoopError(`Unknown ulw-loop subcommand: ${command}.`, "ULW_LOOP_SUBCOMMAND_UNKNOWN", {
|
|
@@ -42,10 +42,12 @@ export async function ulwLoopCommand(argv) {
|
|
|
42
42
|
process.stdout.write(`${subcommandHelp(command)}\n`);
|
|
43
43
|
return 0;
|
|
44
44
|
}
|
|
45
|
+
if (command === "help") {
|
|
46
|
+
process.stdout.write(`${ULW_LOOP_HELP}\n`);
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
const scope = commandScope(repoRoot, rest);
|
|
45
50
|
switch (command) {
|
|
46
|
-
case "help":
|
|
47
|
-
process.stdout.write(`${ULW_LOOP_HELP}\n`);
|
|
48
|
-
return 0;
|
|
49
51
|
case "create-goals":
|
|
50
52
|
return await createGoals(repoRoot, rest, json, scope);
|
|
51
53
|
case "status":
|
|
@@ -89,7 +91,10 @@ const SESSION_ID_FLAG = "--session-id";
|
|
|
89
91
|
function sessionIdFlagPresent(argv) {
|
|
90
92
|
return hasFlag(argv, SESSION_ID_FLAG) || argv.some((arg) => arg.startsWith(`${SESSION_ID_FLAG}=`));
|
|
91
93
|
}
|
|
92
|
-
|
|
94
|
+
// Every state subcommand runs against exactly one session directory. Without a flag or
|
|
95
|
+
// a session env there is no owner to resolve, so the command refuses instead of
|
|
96
|
+
// falling back to the repo-global root that every session in the cwd would share.
|
|
97
|
+
function commandScope(repoRoot, argv) {
|
|
93
98
|
if (sessionIdFlagPresent(argv)) {
|
|
94
99
|
const sessionId = readValue(argv, SESSION_ID_FLAG)?.trim();
|
|
95
100
|
if (!sessionId) {
|
|
@@ -100,5 +105,8 @@ function commandScope(argv) {
|
|
|
100
105
|
return { sessionId };
|
|
101
106
|
}
|
|
102
107
|
const sessionId = resolveUlwLoopSessionIdFromEnv();
|
|
103
|
-
|
|
108
|
+
if (sessionId !== null)
|
|
109
|
+
return { sessionId };
|
|
110
|
+
const existingSessionIds = listUlwLoopSessionIds(repoRoot);
|
|
111
|
+
throw new UlwLoopError(sessionScopeRequiredMessage(SESSION_ID_FLAG, existingSessionIds), "ULW_LOOP_SESSION_SCOPE_REQUIRED", { details: { flag: SESSION_ID_FLAG, existingSessionIds } });
|
|
104
112
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { UlwLoopCodexGoalMode, UlwLoopPlan } from "./types.js";
|
|
2
|
-
export declare const ULW_LOOP_HELP = "Usage:\n omo-agent-toolkit hook user-prompt-submit [--with-ultrawork] (Codex UserPromptSubmit hook)\n omo-agent-toolkit help | --help | -h (this message)\n omo-agent-toolkit ulw-loop help\n omo-agent-toolkit ulw-loop create-goals --brief \"...\" [--brief-file <path>] [--from-stdin] [--codex-goal-mode aggregate|per_story] [--validation-batch-json <json-or-path>] [--force] [--json]\n omo-agent-toolkit ulw-loop status [--json]\n omo-agent-toolkit ulw-loop complete-goals [--retry-failed] [--json]\n omo-agent-toolkit ulw-loop criteria --goal-id <id> [--json]\n omo-agent-toolkit ulw-loop record-evidence --goal-id <id> --criterion-id <id> --status pass|fail|blocked --evidence \"...\" [--notes \"...\"] [--json]\n omo-agent-toolkit ulw-loop checkpoint --print-template [--goal-id <id>] [--json]\n omo-agent-toolkit ulw-loop checkpoint --goal-id <id> --status complete|failed|blocked --evidence \"...\" --codex-goal-json <...> [--quality-gate-json <...>] [--no-advance] [--json]\n omo-agent-toolkit ulw-loop steer --kind <kind> ... --evidence \"...\" --rationale \"...\" [--proposals-json <json-or-path>] [--json]\n omo-agent-toolkit ulw-loop add-goal --title \"...\" --objective \"...\" [--json]\n omo-agent-toolkit ulw-loop record-review-blockers --goal-id <id> --title \"...\" --objective \"...\" --evidence \"...\" --codex-goal-json <...> [--json]\n\
|
|
2
|
+
export declare const ULW_LOOP_HELP = "Usage:\n omo-agent-toolkit hook user-prompt-submit [--with-ultrawork] (Codex UserPromptSubmit hook)\n omo-agent-toolkit help | --help | -h (this message)\n omo-agent-toolkit ulw-loop help\n omo-agent-toolkit ulw-loop create-goals --brief \"...\" [--brief-file <path>] [--from-stdin] [--codex-goal-mode aggregate|per_story] [--validation-batch-json <json-or-path>] [--force] [--json]\n omo-agent-toolkit ulw-loop status [--json]\n omo-agent-toolkit ulw-loop complete-goals [--retry-failed] [--json]\n omo-agent-toolkit ulw-loop criteria --goal-id <id> [--json]\n omo-agent-toolkit ulw-loop record-evidence --goal-id <id> --criterion-id <id> --status pass|fail|blocked --evidence \"...\" [--notes \"...\"] [--json]\n omo-agent-toolkit ulw-loop checkpoint --print-template [--goal-id <id>] [--json]\n omo-agent-toolkit ulw-loop checkpoint --goal-id <id> --status complete|failed|blocked --evidence \"...\" --codex-goal-json <...> [--quality-gate-json <...>] [--no-advance] [--json]\n omo-agent-toolkit ulw-loop steer --kind <kind> ... --evidence \"...\" --rationale \"...\" [--proposals-json <json-or-path>] [--json]\n omo-agent-toolkit ulw-loop add-goal --title \"...\" --objective \"...\" [--json]\n omo-agent-toolkit ulw-loop record-review-blockers --goal-id <id> --title \"...\" --objective \"...\" --evidence \"...\" --codex-goal-json <...> [--json]\n\nEvery state subcommand needs a session scope: [--session-id <id>] or the session env (OMO_ULW_LOOP_SESSION_ID / CODEX_SESSION_ID / CODEX_THREAD_ID / PI_SESSION_ID); state lives under .omo/ulw-loop/<id>/ and the unscoped root is never used implicitly.\nEvery subcommand accepts --help | -h to print its own usage line.";
|
|
3
3
|
export declare function subcommandHelp(subcommand: string): string;
|
|
4
4
|
export declare function printJson(value: unknown): void;
|
|
5
5
|
export declare function printJsonError(error: unknown): void;
|
|
@@ -14,7 +14,7 @@ export const ULW_LOOP_HELP = `Usage:
|
|
|
14
14
|
omo-agent-toolkit ulw-loop add-goal --title "..." --objective "..." [--json]
|
|
15
15
|
omo-agent-toolkit ulw-loop record-review-blockers --goal-id <id> --title "..." --objective "..." --evidence "..." --codex-goal-json <...> [--json]
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Every state subcommand needs a session scope: [--session-id <id>] or the session env (OMO_ULW_LOOP_SESSION_ID / CODEX_SESSION_ID / CODEX_THREAD_ID / PI_SESSION_ID); state lives under .omo/ulw-loop/<id>/ and the unscoped root is never used implicitly.
|
|
18
18
|
Every subcommand accepts --help | -h to print its own usage line.`;
|
|
19
19
|
export function subcommandHelp(subcommand) {
|
|
20
20
|
const lines = ULW_LOOP_HELP.split("\n").filter((line) => line.trimStart().startsWith(`omo-agent-toolkit ulw-loop ${subcommand}`));
|