oh-my-opencode 5.0.0-beta.31 → 5.0.0-beta.32
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 +136 -44
- package/dist/cli-node/index.js +136 -44
- package/dist/features/background-agent/parent-wake-notifier-types.d.ts +1 -1
- package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -1
- package/dist/features/background-agent/parent-wake-session-inspector.d.ts +1 -1
- package/dist/features/monitor/manager-internals.d.ts +1 -1
- package/dist/features/monitor/output-injector-types.d.ts +1 -1
- package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +1 -0
- package/dist/features/team-mode/tools/messaging-runtime.d.ts +1 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/tool-result-storage.d.ts +11 -0
- package/dist/index.js +286 -99
- package/dist/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/dist/tools/session-manager/directory-filter.d.ts +2 -0
- package/dist/tui.js +109 -23
- package/package.json +16 -15
- package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +47 -19
- package/packages/lsp-core/src/lsp/client-diagnostics-pull-timeout.test.ts +64 -0
- package/packages/lsp-core/src/lsp/client.ts +6 -3
- package/packages/lsp-core/src/lsp/controlled-clock-test-support.ts +61 -0
- package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +10 -3
- package/packages/lsp-core/src/lsp/timer-provider.ts +13 -0
- package/packages/lsp-core/src/lsp/transport-request-timeout.test.ts +73 -0
- package/packages/lsp-core/src/lsp/transport.ts +7 -2
- package/packages/lsp-core/src/lsp/workspace-document-state.test.ts +84 -1
- package/packages/lsp-core/src/lsp/workspace-document-state.ts +30 -11
- package/packages/lsp-core/src/tools/parameters.test.ts +51 -0
- package/packages/lsp-daemon/dist/cli.js +41 -16
- package/packages/lsp-daemon/dist/client.js +41 -16
- package/packages/lsp-daemon/dist/index.js +41 -16
- package/packages/lsp-tools-mcp/dist/cli.js +41 -16
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +41 -16
- package/packages/lsp-tools-mcp/dist/mcp.js +41 -16
- package/packages/lsp-tools-mcp/dist/tools.js +41 -16
- package/packages/lsp-tools-mcp/package.json +1 -1
- 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/codegraph/dist/cli.js +3 -17
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +3 -17
- package/packages/omo-codex/plugin/components/codegraph/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 +39 -16
- 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/AGENTS.md +5 -4
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -2
- package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
- package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -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/AGENTS.md +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +14 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +10 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +7 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
- 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 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +775 -312
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +14 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +53 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +85 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +41 -99
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +184 -14
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +15 -0
- 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/references/full-workflow.md +17 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +25 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +127 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +8 -12
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +23 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +57 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +103 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +50 -116
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +186 -12
- package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +66 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +92 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +13 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate.test.ts +101 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +16 -15
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +300 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
- 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-codegraph-init-guidance.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-checking-codegraph-bootstrap.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 +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +31 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +17 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +11 -1
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +13 -0
- package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/dist/features/builtin-skills/index.d.ts +0 -1
- package/dist/features/builtin-skills/skill-file-loader.d.ts +0 -1
- package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +0 -1
- package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +0 -1
- package/dist/features/builtin-skills/skills/debugging.d.ts +0 -1
- package/dist/features/builtin-skills/skills/dev-browser.d.ts +0 -1
- package/dist/features/builtin-skills/skills/frontend.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master-skill-metadata.d.ts +0 -1
- package/dist/features/builtin-skills/skills/git-master.d.ts +0 -1
- package/dist/features/builtin-skills/skills/index.d.ts +0 -1
- package/dist/features/builtin-skills/skills/init-deep.d.ts +0 -1
- package/dist/features/builtin-skills/skills/playwright-cli.d.ts +0 -1
- package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +0 -1
- package/dist/features/builtin-skills/skills/playwright.d.ts +0 -1
- package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +0 -1
- package/dist/features/builtin-skills/skills/review-work.d.ts +0 -1
- package/dist/features/builtin-skills/skills/security-research.d.ts +0 -1
- package/dist/features/builtin-skills/skills/security-review.d.ts +0 -1
- package/dist/features/builtin-skills/skills/team-mode.d.ts +0 -1
- package/dist/features/builtin-skills/skills/visual-qa.d.ts +0 -1
- package/dist/features/builtin-skills/skills.d.ts +0 -1
- package/dist/features/builtin-skills/types.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/command-loader.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/discovery.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/hook-loader.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/index.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/loader.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/mcp-server-loader.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/plugin-path-resolver.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/scope-filter.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/skill-loader.d.ts +0 -1
- package/dist/features/claude-code-plugin-loader/types.d.ts +0 -1
- package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +0 -1
- package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +0 -1
- package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +0 -1
- package/dist/shared/prompt-async-gate/queue.d.ts +0 -1
- package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +0 -1
- package/dist/shared/prompt-async-gate/reservations.d.ts +0 -1
- package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +0 -1
- package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +0 -1
- package/dist/shared/prompt-async-gate/timing.d.ts +0 -1
- package/dist/shared/prompt-async-gate/types.d.ts +0 -1
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -483
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -490
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { mkdtemp, rm } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
@@ -9,16 +9,27 @@ import { applySpawnGuards } from "../src/spawn-guard.ts";
|
|
|
9
9
|
|
|
10
10
|
let workDir: string;
|
|
11
11
|
let originalLimit: string | undefined;
|
|
12
|
+
let originalReviewLimit: string | undefined;
|
|
13
|
+
let originalToolkitSurface: string | undefined;
|
|
12
14
|
|
|
13
15
|
beforeEach(async () => {
|
|
14
16
|
workDir = await mkdtemp(join(tmpdir(), "ulw-spawn-guard-"));
|
|
15
17
|
originalLimit = process.env["OMO_SPAWN_FANOUT_LIMIT"];
|
|
18
|
+
originalReviewLimit = process.env["OMO_ULW_LOOP_REVIEW_SPAWN_LIMIT"];
|
|
19
|
+
originalToolkitSurface = process.env["OMO_AGENT_TOOLKIT_SURFACE"];
|
|
16
20
|
delete process.env["OMO_SPAWN_FANOUT_LIMIT"];
|
|
21
|
+
delete process.env["OMO_ULW_LOOP_REVIEW_SPAWN_LIMIT"];
|
|
22
|
+
delete process.env["OMO_AGENT_TOOLKIT_SURFACE"];
|
|
17
23
|
});
|
|
18
24
|
|
|
19
25
|
afterEach(async () => {
|
|
26
|
+
delete process.env["OMO_AGENT_TOOLKIT_SURFACE"];
|
|
20
27
|
if (originalLimit === undefined) delete process.env["OMO_SPAWN_FANOUT_LIMIT"];
|
|
21
28
|
else process.env["OMO_SPAWN_FANOUT_LIMIT"] = originalLimit;
|
|
29
|
+
if (originalReviewLimit === undefined) delete process.env["OMO_ULW_LOOP_REVIEW_SPAWN_LIMIT"];
|
|
30
|
+
else process.env["OMO_ULW_LOOP_REVIEW_SPAWN_LIMIT"] = originalReviewLimit;
|
|
31
|
+
if (originalToolkitSurface === undefined) delete process.env["OMO_AGENT_TOOLKIT_SURFACE"];
|
|
32
|
+
else process.env["OMO_AGENT_TOOLKIT_SURFACE"] = originalToolkitSurface;
|
|
22
33
|
await rm(workDir, { recursive: true, force: true });
|
|
23
34
|
});
|
|
24
35
|
|
|
@@ -132,7 +143,118 @@ describe("applySpawnGuards fan-out cap", () => {
|
|
|
132
143
|
});
|
|
133
144
|
});
|
|
134
145
|
|
|
146
|
+
describe("applySpawnGuards fan-out cap + reviewer quota interaction", () => {
|
|
147
|
+
it("#given fan-out cap exhausted #when a reviewer spawns #then denies without charging reviewer quota", () => {
|
|
148
|
+
writeGoals();
|
|
149
|
+
process.env["OMO_SPAWN_FANOUT_LIMIT"] = "3";
|
|
150
|
+
|
|
151
|
+
// exhaust the fan-out cap with non-reviewer spawns
|
|
152
|
+
expect(applySpawnGuards(payload("spawn_agent", { message: "scan" }))).toBe("");
|
|
153
|
+
expect(applySpawnGuards(payload("spawn_agent", { message: "scan" }))).toBe("");
|
|
154
|
+
expect(applySpawnGuards(payload("spawn_agent", { message: "scan" }))).toBe("");
|
|
155
|
+
|
|
156
|
+
// reviewer spawn while cap is exhausted — must deny without incrementing reviewer count
|
|
157
|
+
const reviewSpawn = payload("spawn_agent", {
|
|
158
|
+
agent_type: "lazycodex-code-reviewer",
|
|
159
|
+
message: "review the current diff",
|
|
160
|
+
});
|
|
161
|
+
const result = applySpawnGuards(reviewSpawn);
|
|
162
|
+
expect(result).not.toBe("");
|
|
163
|
+
expect(deny(result).permissionDecisionReason).toContain("4/3");
|
|
164
|
+
|
|
165
|
+
// reviewer quota must be untouched — a subsequent spawn after raising the limit must succeed
|
|
166
|
+
process.env["OMO_SPAWN_FANOUT_LIMIT"] = "10";
|
|
167
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
168
|
+
const counters = JSON.parse(readFileSync(join(sessionDir(), "review-spawn-counts.json"), "utf8"));
|
|
169
|
+
expect(counters["lazycodex-code-reviewer:g1:a1"]).toBe(1);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
describe("applySpawnGuards review repetition cap", () => {
|
|
174
|
+
it("#given one goal attempt #when the same reviewer spawns four times #then denies until the attempt advances", () => {
|
|
175
|
+
writeGoals();
|
|
176
|
+
const reviewSpawn = payload("spawn_agent", {
|
|
177
|
+
agent_type: "lazycodex-code-reviewer",
|
|
178
|
+
message: "review the current diff",
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
182
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
183
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
184
|
+
|
|
185
|
+
const fourth = applySpawnGuards(reviewSpawn);
|
|
186
|
+
expect(fourth).not.toBe("");
|
|
187
|
+
expect(deny(fourth).permissionDecisionReason).toContain("4/3");
|
|
188
|
+
const counter = JSON.parse(readFileSync(join(sessionDir(), "spawn-count.json"), "utf8"));
|
|
189
|
+
expect(counter.count).toBe(3);
|
|
190
|
+
|
|
191
|
+
const goalsPath = join(sessionDir(), "goals.json");
|
|
192
|
+
const plan = JSON.parse(readFileSync(goalsPath, "utf8")) as {
|
|
193
|
+
goals: Array<{ attempt: number }>;
|
|
194
|
+
};
|
|
195
|
+
const [goal] = plan.goals;
|
|
196
|
+
if (goal === undefined) throw new Error("fixture must include a goal");
|
|
197
|
+
goal.attempt = 2;
|
|
198
|
+
writeFileSync(goalsPath, JSON.stringify(plan));
|
|
199
|
+
|
|
200
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it.each(["lazycodex-code-reviewer", "lazycodex-qa-executor"])(
|
|
204
|
+
"#given a MultiAgentV2 %s message #when it spawns four times #then applies the reviewer cap",
|
|
205
|
+
(agentType) => {
|
|
206
|
+
writeGoals();
|
|
207
|
+
const reviewSpawn = payload("spawn_agent", {
|
|
208
|
+
message: `Delegate this final-quality lane to ${agentType}`,
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
212
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
213
|
+
expect(applySpawnGuards(reviewSpawn)).toBe("");
|
|
214
|
+
|
|
215
|
+
const fourth = deny(applySpawnGuards(reviewSpawn));
|
|
216
|
+
expect(fourth.permissionDecisionReason).toContain(`${agentType} 4/3`);
|
|
217
|
+
},
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
it("#given exhausted code reviews and an explicit QA assignment #when a mixed V2 prompt is guarded #then charges the QA role", () => {
|
|
221
|
+
writeGoals();
|
|
222
|
+
const codeReview = payload("collaboration.spawn_agent", {
|
|
223
|
+
message: "Act as lazycodex-code-reviewer; review the current diff",
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
expect(applySpawnGuards(codeReview)).toBe("");
|
|
227
|
+
expect(applySpawnGuards(codeReview)).toBe("");
|
|
228
|
+
expect(applySpawnGuards(codeReview)).toBe("");
|
|
229
|
+
|
|
230
|
+
const output = applySpawnGuards(
|
|
231
|
+
payload("collaboration.spawn_agent", {
|
|
232
|
+
message: "Act as a lazycodex-qa-executor; verify the lazycodex-code-reviewer finding",
|
|
233
|
+
}),
|
|
234
|
+
);
|
|
235
|
+
expect(output).toBe("");
|
|
236
|
+
|
|
237
|
+
const counters = JSON.parse(readFileSync(join(sessionDir(), "review-spawn-counts.json"), "utf8"));
|
|
238
|
+
expect(counters["lazycodex-code-reviewer:g1:a1"]).toBe(3);
|
|
239
|
+
expect(counters["lazycodex-qa-executor:g1:a1"]).toBe(1);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
|
|
135
243
|
describe("applySpawnGuards gate-artifact guard", () => {
|
|
244
|
+
it("#given a mixed-role V2 gate prompt #when guarded #then prioritizes the gate role and denies on missing artifact without charging quota", () => {
|
|
245
|
+
writeGoals();
|
|
246
|
+
|
|
247
|
+
const output = applySpawnGuards(
|
|
248
|
+
payload("spawn_agent", {
|
|
249
|
+
message: "Act as lazycodex-gate-reviewer; audit the lazycodex-code-reviewer report",
|
|
250
|
+
}),
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
expect(output).not.toBe("");
|
|
254
|
+
expect(deny(output).permissionDecisionReason).toContain("g1-code-review.md");
|
|
255
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
256
|
+
});
|
|
257
|
+
|
|
136
258
|
it("#given a gate spawn by agent_type without artifacts #when guarded #then denies naming the missing path", () => {
|
|
137
259
|
writeGoals();
|
|
138
260
|
|
|
@@ -146,7 +268,21 @@ describe("applySpawnGuards gate-artifact guard", () => {
|
|
|
146
268
|
expect(parsed.permissionDecisionReason).toContain("g1-code-review.md");
|
|
147
269
|
});
|
|
148
270
|
|
|
149
|
-
it("#given
|
|
271
|
+
it("#given senpi main-session QA is present but code review is absent #when the gate reviewer spawns #then the self-check allows it", () => {
|
|
272
|
+
process.env["OMO_AGENT_TOOLKIT_SURFACE"] = "omo-senpi";
|
|
273
|
+
writeGoals();
|
|
274
|
+
mkdirSync(join(workDir, ".omo", "evidence"), { recursive: true });
|
|
275
|
+
writeFileSync(join(workDir, ".omo", "evidence", "g1-manual-qa.md"), "matrix\n");
|
|
276
|
+
|
|
277
|
+
const output = applySpawnGuards(
|
|
278
|
+
payload("collaborationspawn_agent", { agent_type: "omo-senpi-gate-reviewer", message: "audit the artifacts" }),
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
expect(output).toBe("");
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
it("#given senpi QA is absent #when the gate reviewer spawns #then the self-check blocks naming manual QA", () => {
|
|
285
|
+
process.env["OMO_AGENT_TOOLKIT_SURFACE"] = "omo-senpi";
|
|
150
286
|
writeGoals();
|
|
151
287
|
|
|
152
288
|
const output = applySpawnGuards(
|
|
@@ -155,7 +291,20 @@ describe("applySpawnGuards gate-artifact guard", () => {
|
|
|
155
291
|
|
|
156
292
|
const parsed = deny(output);
|
|
157
293
|
expect(parsed.permissionDecision).toBe("deny");
|
|
158
|
-
expect(parsed.permissionDecisionReason).toContain("g1-
|
|
294
|
+
expect(parsed.permissionDecisionReason).toContain("g1-manual-qa.md");
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it("#given an omo-senpi gate spawn with a code-review artifact only #when guarded #then blocks the missing manual QA", () => {
|
|
298
|
+
process.env["OMO_AGENT_TOOLKIT_SURFACE"] = "omo-senpi";
|
|
299
|
+
writeGoals();
|
|
300
|
+
mkdirSync(join(workDir, ".omo", "evidence"), { recursive: true });
|
|
301
|
+
writeFileSync(join(workDir, ".omo", "evidence", "g1-code-review.md"), "report\n");
|
|
302
|
+
|
|
303
|
+
const output = applySpawnGuards(
|
|
304
|
+
payload("collaborationspawn_agent", { agent_type: "omo-senpi-gate-reviewer", message: "audit the artifacts" }),
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
expect(deny(output).permissionDecisionReason).toContain("g1-manual-qa.md");
|
|
159
308
|
});
|
|
160
309
|
|
|
161
310
|
it("#given an omo-senpi gate reviewer named in the message #when guarded #then still denies", () => {
|
|
@@ -174,6 +323,49 @@ describe("applySpawnGuards gate-artifact guard", () => {
|
|
|
174
323
|
expect(deny(output).permissionDecision).toBe("deny");
|
|
175
324
|
});
|
|
176
325
|
|
|
326
|
+
it("#given the staged Senpi surface #when generic and explicit gate spawns alternate #then they share one cap", () => {
|
|
327
|
+
writeGoals();
|
|
328
|
+
process.env["OMO_AGENT_TOOLKIT_SURFACE"] = "omo-senpi";
|
|
329
|
+
mkdirSync(join(workDir, ".omo", "evidence"), { recursive: true });
|
|
330
|
+
writeFileSync(join(workDir, ".omo", "evidence", "g1-code-review.md"), "report\n");
|
|
331
|
+
writeFileSync(join(workDir, ".omo", "evidence", "g1-manual-qa.md"), "matrix\n");
|
|
332
|
+
const genericGate = payload("spawn_agent", { message: "run the final gate review now" });
|
|
333
|
+
const explicitGate = payload("spawn_agent", {
|
|
334
|
+
message: "Act as omo-senpi-gate-reviewer; audit the final evidence",
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
expect(applySpawnGuards(genericGate)).toBe("");
|
|
338
|
+
expect(applySpawnGuards(explicitGate)).toBe("");
|
|
339
|
+
expect(applySpawnGuards(genericGate)).toBe("");
|
|
340
|
+
|
|
341
|
+
const fourth = deny(applySpawnGuards(explicitGate));
|
|
342
|
+
expect(fourth.permissionDecisionReason).toContain("omo-senpi-gate-reviewer 4/3");
|
|
343
|
+
const counters = JSON.parse(readFileSync(join(sessionDir(), "review-spawn-counts.json"), "utf8"));
|
|
344
|
+
expect(counters["omo-senpi-gate-reviewer:g1:a1"]).toBe(3);
|
|
345
|
+
expect(counters["lazycodex-gate-reviewer:g1:a1"]).toBeUndefined();
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
it("#given the staged Senpi surface #when LazyCodex and Senpi aliases alternate #then one reviewer lane owns the cap", () => {
|
|
349
|
+
writeGoals();
|
|
350
|
+
process.env["OMO_AGENT_TOOLKIT_SURFACE"] = "omo-senpi";
|
|
351
|
+
const senpiReviewer = payload("spawn_agent", {
|
|
352
|
+
message: "Act as omo-senpi-code-reviewer; inspect the current diff",
|
|
353
|
+
});
|
|
354
|
+
const lazycodexReviewer = payload("spawn_agent", {
|
|
355
|
+
message: "Act as lazycodex-code-reviewer; inspect the current diff",
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
expect(applySpawnGuards(senpiReviewer)).toBe("");
|
|
359
|
+
expect(applySpawnGuards(lazycodexReviewer)).toBe("");
|
|
360
|
+
expect(applySpawnGuards(senpiReviewer)).toBe("");
|
|
361
|
+
|
|
362
|
+
const fourth = deny(applySpawnGuards(lazycodexReviewer));
|
|
363
|
+
expect(fourth.permissionDecisionReason).toContain("omo-senpi-code-reviewer 4/3");
|
|
364
|
+
const counters = JSON.parse(readFileSync(join(sessionDir(), "review-spawn-counts.json"), "utf8"));
|
|
365
|
+
expect(counters["omo-senpi-code-reviewer:g1:a1"]).toBe(3);
|
|
366
|
+
expect(counters["lazycodex-code-reviewer:g1:a1"]).toBeUndefined();
|
|
367
|
+
});
|
|
368
|
+
|
|
177
369
|
it("#given v1 artifacts on disk #when the gate spawns #then allows", () => {
|
|
178
370
|
writeGoals();
|
|
179
371
|
mkdirSync(join(workDir, ".omo", "evidence"), { recursive: true });
|
|
@@ -246,3 +438,108 @@ describe("applySpawnGuards gate-artifact guard", () => {
|
|
|
246
438
|
expect(output).toBe("");
|
|
247
439
|
});
|
|
248
440
|
});
|
|
441
|
+
|
|
442
|
+
describe("applySpawnGuards V1 agent_type non-reviewer early-exit", () => {
|
|
443
|
+
it("#given a V1 spawn with a non-reviewer agent_type #when guarded #then allows without charging any quota", () => {
|
|
444
|
+
writeGoals();
|
|
445
|
+
const explorerSpawn = payload("spawn_agent", {
|
|
446
|
+
agent_type: "explorer",
|
|
447
|
+
message: "scan the codebase for lazycodex-code-reviewer patterns",
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
const result = applySpawnGuards(explorerSpawn);
|
|
451
|
+
|
|
452
|
+
expect(result).toBe("");
|
|
453
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
it("#given a V1 spawn with a non-reviewer agent_type mentioning a gate role #when guarded #then does not charge gate quota", () => {
|
|
457
|
+
writeGoals();
|
|
458
|
+
const explorerSpawn = payload("spawn_agent", {
|
|
459
|
+
agent_type: "deep",
|
|
460
|
+
message: "final gate review — summarize findings",
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
const result = applySpawnGuards(explorerSpawn);
|
|
464
|
+
|
|
465
|
+
expect(result).toBe("");
|
|
466
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
describe("applySpawnGuards V2 explicit non-reviewer act-as guard", () => {
|
|
471
|
+
it("#given an explicit 'act as explorer' assignment mentioning a reviewer #when guarded #then allows without charging reviewer quota", () => {
|
|
472
|
+
writeGoals();
|
|
473
|
+
const explorerSpawn = payload("spawn_agent", {
|
|
474
|
+
message: "Act as explorer; scan for lazycodex-code-reviewer usage patterns",
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
const result = applySpawnGuards(explorerSpawn);
|
|
478
|
+
|
|
479
|
+
expect(result).toBe("");
|
|
480
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
it("#given an explicit 'act as a deep' assignment with gate keyword #when guarded #then allows without charging gate quota", () => {
|
|
484
|
+
writeGoals();
|
|
485
|
+
const deepSpawn = payload("spawn_agent", {
|
|
486
|
+
message: "Act as a deep agent; run the final gate review summary",
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
const result = applySpawnGuards(deepSpawn);
|
|
490
|
+
|
|
491
|
+
expect(result).toBe("");
|
|
492
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
it("#given an explicit reviewer act-as assignment #when guarded #then still charges reviewer quota", () => {
|
|
496
|
+
writeGoals();
|
|
497
|
+
const reviewerSpawn = payload("spawn_agent", {
|
|
498
|
+
message: "Act as lazycodex-code-reviewer; inspect the diff",
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
const result = applySpawnGuards(reviewerSpawn);
|
|
502
|
+
|
|
503
|
+
expect(result).toBe("");
|
|
504
|
+
const counters = JSON.parse(readFileSync(join(sessionDir(), "review-spawn-counts.json"), "utf8"));
|
|
505
|
+
expect(counters["lazycodex-code-reviewer:g1:a1"]).toBe(1);
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
describe("applySpawnGuards gate-artifact check before reviewer quota", () => {
|
|
510
|
+
it("#given a gate spawn without artifacts #when the fan-out budget is available #then denies on artifact rule without charging reviewer quota", () => {
|
|
511
|
+
writeGoals();
|
|
512
|
+
|
|
513
|
+
const gateSpawn = payload("spawn_agent", {
|
|
514
|
+
agent_type: "lazycodex-gate-reviewer",
|
|
515
|
+
message: "final gate review",
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
const result = applySpawnGuards(gateSpawn);
|
|
519
|
+
|
|
520
|
+
expect(result).not.toBe("");
|
|
521
|
+
expect(deny(result).permissionDecisionReason).toContain("missing");
|
|
522
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
it("#given a gate spawn denied for missing artifacts #when retried after artifacts land #then charges quota only on the allowed spawn", () => {
|
|
526
|
+
writeGoals();
|
|
527
|
+
const gateSpawn = payload("spawn_agent", {
|
|
528
|
+
agent_type: "lazycodex-gate-reviewer",
|
|
529
|
+
message: "final gate review",
|
|
530
|
+
});
|
|
531
|
+
|
|
532
|
+
const firstResult = applySpawnGuards(gateSpawn);
|
|
533
|
+
expect(firstResult).not.toBe("");
|
|
534
|
+
expect(existsSync(join(sessionDir(), "review-spawn-counts.json"))).toBe(false);
|
|
535
|
+
|
|
536
|
+
mkdirSync(join(workDir, ".omo", "evidence"), { recursive: true });
|
|
537
|
+
writeFileSync(join(workDir, ".omo", "evidence", "g1-code-review.md"), "report\n");
|
|
538
|
+
writeFileSync(join(workDir, ".omo", "evidence", "g1-manual-qa.md"), "matrix\n");
|
|
539
|
+
|
|
540
|
+
const secondResult = applySpawnGuards(gateSpawn);
|
|
541
|
+
expect(secondResult).toBe("");
|
|
542
|
+
const counters = JSON.parse(readFileSync(join(sessionDir(), "review-spawn-counts.json"), "utf8"));
|
|
543
|
+
expect(counters["lazycodex-gate-reviewer:g1:a1"]).toBe(1);
|
|
544
|
+
});
|
|
545
|
+
});
|
|
@@ -56,11 +56,17 @@ describe("standalone ultrawork directive injection", () => {
|
|
|
56
56
|
expect(parsed.hookSpecificOutput.additionalContext).toMatch(/^<ultrawork-mode>/);
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
-
it("#given ulw-loop bundles the ultrawork directive #when compared to
|
|
59
|
+
it("#given ulw-loop bundles the ultrawork directive #when compared to the canonical prompts-core source #then the copy stays byte-identical", async () => {
|
|
60
|
+
// ulw-loop is a standalone published package with no prompts-core dependency, so it bundles its
|
|
61
|
+
// own copy as the runtime fallback its `files` list ships. This pins that copy to the canonical
|
|
62
|
+
// source that scripts/sync-directive.mjs in the ultrawork component regenerates it from.
|
|
60
63
|
const ulwLoopDirective = await readFile(new URL("../directive.md", import.meta.url), "utf8");
|
|
61
|
-
const
|
|
64
|
+
const canonicalDirective = await readFile(
|
|
65
|
+
new URL("../../../../../prompts-core/prompts/ultrawork/codex.md", import.meta.url),
|
|
66
|
+
"utf8",
|
|
67
|
+
);
|
|
62
68
|
|
|
63
|
-
expect(ulwLoopDirective).toBe(
|
|
69
|
+
expect(ulwLoopDirective).toBe(canonicalDirective);
|
|
64
70
|
});
|
|
65
71
|
|
|
66
72
|
it("#given an existing ultrawork skill file #when standalone injection runs #then emits the compact skill pointer", async () => {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook post-compact",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Resetting Git Bash MCP Reminder",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook post-compact"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Resetting LSP Diagnostics Cache",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-compact",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Resetting Project Rule Cache",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-compact"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/codegraph/dist/cli.js\" hook post-tool-use",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking CodeGraph Init Guidance",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\codegraph\\dist\\cli.js\" hook post-tool-use"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/comment-checker/dist/cli.js\" hook post-tool-use",
|
|
9
9
|
"timeout": 30,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking Comments",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\comment-checker\\dist\\cli.js\" hook post-tool-use"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-tool-use",
|
|
9
9
|
"timeout": 60,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking LSP Diagnostics",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-tool-use"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/teammode/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.32) Checking Thread Title Hygiene",
|
|
12
12
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\teammode\\dist\\cli.js\" hook post-tool-use"
|
|
13
13
|
}
|
|
14
14
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-tool-use",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Matching Project Rules",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-tool-use"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Enforcing Unlimited Goal Budget",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use-spawn",
|
|
10
10
|
"timeout": 5,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Guarding Ulw-Loop Spawns",
|
|
12
12
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use-spawn"
|
|
13
13
|
}
|
|
14
14
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook pre-tool-use",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Recommending Git Bash MCP",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook pre-tool-use"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/scripts/auto-update.mjs\" hook session-start",
|
|
9
9
|
"timeout": 15,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking Auto Update",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\scripts\\auto-update.mjs\" hook session-start"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -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.32) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/codegraph/dist/cli.js\" hook session-start",
|
|
9
9
|
"timeout": 15,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking CodeGraph Bootstrap",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\codegraph\\dist\\cli.js\" hook session-start"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook session-start",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Loading Project Rules",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook session-start"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/telemetry/dist/cli.js\" hook session-start",
|
|
9
9
|
"timeout": 15,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Recording Session Telemetry",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\telemetry\\dist\\cli.js\" hook session-start"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -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.32) Checking Ulw-Execute Continuation",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-execute-continuation\\dist\\cli.js\" hook stop"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking Ulw-Loop Resume",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook stop"
|
|
12
12
|
}
|
|
13
13
|
]
|
package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook subagent-stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking Ulw-Execute Continuation",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-execute-continuation\\dist\\cli.js\" hook subagent-stop"
|
|
12
12
|
}
|
|
13
13
|
]
|
package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Verifying LazyCodex Executor Evidence",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lazycodex-executor-verify\\dist\\cli.js\" hook subagent-stop"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ultrawork/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.32) Checking Ultrawork Trigger",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ultrawork\\dist\\cli.js\" hook user-prompt-submit"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Checking Ulw-Loop Steering",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook user-prompt-submit"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.32) Loading Project Rules",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook user-prompt-submit"
|
|
12
12
|
}
|
|
13
13
|
]
|