lazycodex-ai 5.0.0-beta.49 → 5.0.0-beta.50
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 +4682 -14969
- package/dist/cli-node/index.js +4727 -15014
- package/package.json +1 -1
- package/packages/lsp-daemon/dist/cli.js +181 -181
- package/packages/lsp-daemon/dist/client.js +232 -232
- package/packages/lsp-daemon/dist/index.js +132 -132
- package/packages/lsp-tools-mcp/dist/cli.js +103 -101
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +14 -14
- package/packages/lsp-tools-mcp/dist/mcp.js +129 -129
- package/packages/lsp-tools-mcp/dist/tools.js +47 -47
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/README.md +4 -0
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +151 -102
- 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/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +35 -24
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +31 -21
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
- 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/lazycodex-executor-verify/src/codex-hook.ts +31 -23
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +133 -7
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +3 -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 +298 -298
- 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/README.md +2 -0
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +123 -0
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +38 -30
- 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/rules/src/post-compact-budget.ts +6 -0
- package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -2
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +24 -0
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +2 -2
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +66 -357
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +66 -358
- 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/README.md +2 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +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/dist/cli.js +3 -3
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +63 -63
- 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/model-catalog.json +16 -7
- package/packages/omo-codex/plugin/package-lock.json +16 -16
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +18 -90
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
- package/packages/omo-codex/plugin/shared/package.json +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +3 -1
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +25 -1
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
- package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +318 -569
|
@@ -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.50",
|
|
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",
|
|
@@ -4,6 +4,8 @@ Codex plugin that injects a compact orchestration directive (the **ultrawork** p
|
|
|
4
4
|
|
|
5
5
|
Bundled Codex agent role TOMLs in `agents/` are installed into `CODEX_HOME/agents/` by the omo-codex installer (`linkCachedPluginAgents`, in `src/cli/install-codex/link-cached-plugin-agents.ts`). Install-time writes regular file copies on every platform. For the public `sisyphuslabs` marketplace, those files are copied from Codex's local installed-marketplace snapshot so they keep resolving after Codex prunes old plugin-cache versions or temporary marketplace state. There is no runtime Python hook.
|
|
6
6
|
|
|
7
|
+
All 12 bundled agent TOMLs set `model = "gpt-6-astra"`; each role keeps its own `model_reasoning_effort` (explorer and librarian `low`, the gate reviewer `low`, the code reviewer and `lazycodex-worker-high` `medium`, the rest `high`). When a user has customized an installed agent's effort, the installer keeps that effort while moving the model to `gpt-6-astra` (`src/install/managed-agent-reasoning-defaults.ts`).
|
|
8
|
+
|
|
7
9
|
## What the injected directive enforces
|
|
8
10
|
|
|
9
11
|
| Mandate | Behavior |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "explorer"
|
|
2
2
|
description = "Codebase search specialist for Codex sessions. Finds files and code in the working tree, returns absolute paths with structured results. Read-only."
|
|
3
3
|
nickname_candidates = ["Explorer"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "low"
|
|
6
6
|
service_tier = "fast"
|
|
7
7
|
|
package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-clone-fidelity-reviewer"
|
|
2
2
|
description = "Read-only LazyCodex clone / design-system fidelity reviewer. Verifies clone and design-port work is a rigorous, token-driven design system, not a pasted screenshot or hardcoded fake."
|
|
3
3
|
nickname_candidates = ["Clone Fidelity Reviewer"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-code-reviewer"
|
|
2
2
|
description = "Read-only LazyCodex code-quality reviewer. Audits diffs, tests, and risk with strict artifact-backed findings."
|
|
3
3
|
nickname_candidates = ["Code Reviewer"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "medium"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-gate-reviewer"
|
|
2
2
|
description = "Read-only LazyCodex gate reviewer. Re-audits executor, code review, and QA artifacts before final approval."
|
|
3
3
|
nickname_candidates = ["Gate Reviewer"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "low"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-qa-executor"
|
|
2
2
|
description = "LazyCodex manual QA executor. Runs real scenarios and records artifact-backed surface evidence."
|
|
3
3
|
nickname_candidates = ["QA Executor"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-worker-high"
|
|
2
2
|
description = "LazyCodex high-difficulty implementation worker, sized for LARGE changes: a new module or abstraction, a cross-module refactor, concurrency/security/migration work, or any real, complex, big problem that has ONE clear goal. Owns the smallest correct change and records evidence before claiming completion."
|
|
3
3
|
nickname_candidates = ["High Worker"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "medium"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-worker-low"
|
|
2
2
|
description = "LazyCodex low-difficulty implementation worker, sized for SMALL changes: single-spot fixes, boilerplate, config/copy changes, and pattern-following edits confined to one file. Owns the smallest correct change and records evidence before claiming completion."
|
|
3
3
|
nickname_candidates = ["Low Worker"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "lazycodex-worker-medium"
|
|
2
2
|
description = "LazyCodex medium-difficulty implementation worker, sized for MID-SIZED changes: a standard feature inside existing layers, touching a few files along established patterns. Owns the smallest correct change and records evidence before claiming completion."
|
|
3
3
|
nickname_candidates = ["Medium Worker"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "librarian"
|
|
2
2
|
description = "External open-source codebase and documentation researcher. Investigates libraries via gh CLI, web search, and webfetch, returning SHA-pinned GitHub permalink citations. Read-only."
|
|
3
3
|
nickname_candidates = ["Librarian"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "low"
|
|
6
6
|
service_tier = "fast"
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "metis"
|
|
2
2
|
description = "Pre-planning analyst. Detects contradictions, ambiguity, missing constraints, and execution risks in a draft plan or request before the planner commits. Read-only."
|
|
3
3
|
nickname_candidates = ["Analyst"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "momus"
|
|
2
2
|
description = "Deep plan reviewer. Verifies a work plan is executable: references exist, tasks are startable, QA scenarios are concrete. Runs at High and may take a long time; callers must wait for its terminal result instead of cancelling or duplicating it. Issues OKAY, ITERATE, or REJECT. Read-only."
|
|
3
3
|
nickname_candidates = ["Reviewer"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
name = "plan"
|
|
2
2
|
description = "Strategic planning consultant for work with unresolved design uncertainty after discovery. Produces one executable plan; never implements. Writes the plan to .omo/plans/<slug>.md."
|
|
3
3
|
nickname_candidates = ["Planner"]
|
|
4
|
-
model = "gpt-
|
|
4
|
+
model = "gpt-6-astra"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -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.50) 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.50",
|
|
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",
|
|
@@ -422,13 +422,13 @@ function parseHookInput(raw) {
|
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
function readStdin() {
|
|
425
|
-
return new Promise((
|
|
425
|
+
return new Promise((resolve) => {
|
|
426
426
|
let data = "";
|
|
427
427
|
processStdin.setEncoding("utf8");
|
|
428
428
|
processStdin.on("data", (chunk) => {
|
|
429
429
|
data += chunk;
|
|
430
430
|
});
|
|
431
|
-
processStdin.once("error", () =>
|
|
432
|
-
processStdin.once("end", () =>
|
|
431
|
+
processStdin.once("error", () => resolve(data));
|
|
432
|
+
processStdin.once("end", () => resolve(data));
|
|
433
433
|
});
|
|
434
434
|
}
|
|
@@ -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.50) Checking Ulw-Execute Continuation"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -2788,7 +2788,7 @@ var text3 = (value, key) => {
|
|
|
2788
2788
|
const candidate = read2(value, key);
|
|
2789
2789
|
return isText(candidate) ? candidate.trim() : undefined;
|
|
2790
2790
|
};
|
|
2791
|
-
var isModel2 = (value) => typeof value === "string" && ULW_LOOP_SUCCESS_CRITERION_USER_MODELS.some((
|
|
2791
|
+
var isModel2 = (value) => typeof value === "string" && ULW_LOOP_SUCCESS_CRITERION_USER_MODELS.some((model) => model === value);
|
|
2792
2792
|
var after = (proposal) => {
|
|
2793
2793
|
const candidate = read2(proposal, "after");
|
|
2794
2794
|
return typeof candidate === "object" && candidate !== null && !Array.isArray(candidate) ? candidate : undefined;
|
|
@@ -2863,8 +2863,8 @@ function reviseCriterion(plan, proposal, now) {
|
|
|
2863
2863
|
const current = target?.successCriteria[index];
|
|
2864
2864
|
if (target === undefined || current === undefined)
|
|
2865
2865
|
return;
|
|
2866
|
-
const
|
|
2867
|
-
target.successCriteria[index] = { ...current, scenario: text3(proposal, "scenario") ?? current.scenario, expectedEvidence: text3(proposal, "expectedEvidence") ?? current.expectedEvidence, userModel: isModel2(
|
|
2866
|
+
const model = read2(proposal, "userModel");
|
|
2867
|
+
target.successCriteria[index] = { ...current, scenario: text3(proposal, "scenario") ?? current.scenario, expectedEvidence: text3(proposal, "expectedEvidence") ?? current.expectedEvidence, userModel: isModel2(model) ? model : current.userModel };
|
|
2868
2868
|
target.updatedAt = now;
|
|
2869
2869
|
}
|
|
2870
2870
|
|
|
@@ -2873,19 +2873,19 @@ function buildSteeringPlanSnapshot(plan, changedGoalIds) {
|
|
|
2873
2873
|
const snapshot = {
|
|
2874
2874
|
updatedAt: plan.updatedAt,
|
|
2875
2875
|
goalCount: plan.goals.length,
|
|
2876
|
-
goalIds: plan.goals.map((
|
|
2877
|
-
goals: plan.goals.filter((
|
|
2876
|
+
goalIds: plan.goals.map((goal) => goal.id),
|
|
2877
|
+
goals: plan.goals.filter((goal) => changedGoalIds.has(goal.id))
|
|
2878
2878
|
};
|
|
2879
2879
|
return plan.activeGoalId === undefined ? snapshot : { ...snapshot, activeGoalId: plan.activeGoalId };
|
|
2880
2880
|
}
|
|
2881
|
-
function changedGoalIdsBetween(before,
|
|
2882
|
-
const beforeById = new Map(before.goals.map((
|
|
2881
|
+
function changedGoalIdsBetween(before, after) {
|
|
2882
|
+
const beforeById = new Map(before.goals.map((goal) => [goal.id, goal]));
|
|
2883
2883
|
const changed = new Set;
|
|
2884
|
-
for (const
|
|
2885
|
-
const prior = beforeById.get(
|
|
2886
|
-
if (prior === undefined || JSON.stringify(prior) !== JSON.stringify(
|
|
2887
|
-
changed.add(
|
|
2888
|
-
beforeById.delete(
|
|
2884
|
+
for (const goal of after.goals) {
|
|
2885
|
+
const prior = beforeById.get(goal.id);
|
|
2886
|
+
if (prior === undefined || JSON.stringify(prior) !== JSON.stringify(goal))
|
|
2887
|
+
changed.add(goal.id);
|
|
2888
|
+
beforeById.delete(goal.id);
|
|
2889
2889
|
}
|
|
2890
2890
|
for (const id of beforeById.keys())
|
|
2891
2891
|
changed.add(id);
|
|
@@ -2905,7 +2905,7 @@ var text4 = (value, key) => {
|
|
|
2905
2905
|
};
|
|
2906
2906
|
var isKind2 = (value) => typeof value === "string" && ULW_LOOP_STEERING_MUTATION_KINDS.some((kind) => kind === value);
|
|
2907
2907
|
var isSource2 = (value) => typeof value === "string" && SOURCES2.some((source) => source === value);
|
|
2908
|
-
var isModel3 = (value) => typeof value === "string" && ULW_LOOP_SUCCESS_CRITERION_USER_MODELS.some((
|
|
2908
|
+
var isModel3 = (value) => typeof value === "string" && ULW_LOOP_SUCCESS_CRITERION_USER_MODELS.some((model) => model === value);
|
|
2909
2909
|
var texts = (value, key) => {
|
|
2910
2910
|
const candidate = read3(value, key);
|
|
2911
2911
|
return Array.isArray(candidate) && candidate.every((item) => typeof item === "string") ? candidate : [];
|
|
@@ -3046,10 +3046,10 @@ function validateCriterion(plan, proposal, reasons) {
|
|
|
3046
3046
|
reasons.push("revise_criterion requires goalId");
|
|
3047
3047
|
else if (criterionId === undefined || target.successCriteria.every((item) => item.id !== criterionId))
|
|
3048
3048
|
reasons.push("revise_criterion requires criterionId");
|
|
3049
|
-
const
|
|
3050
|
-
if (read3(proposal, "scenario") === undefined && read3(proposal, "expectedEvidence") === undefined &&
|
|
3049
|
+
const model = read3(proposal, "userModel");
|
|
3050
|
+
if (read3(proposal, "scenario") === undefined && read3(proposal, "expectedEvidence") === undefined && model === undefined)
|
|
3051
3051
|
reasons.push("revise_criterion requires update");
|
|
3052
|
-
if (
|
|
3052
|
+
if (model !== undefined && !isModel3(model))
|
|
3053
3053
|
reasons.push("invalid userModel");
|
|
3054
3054
|
}
|
|
3055
3055
|
function applySteeringMutation(plan, proposal, audit) {
|
|
@@ -3076,8 +3076,8 @@ function applySteeringMutation(plan, proposal, audit) {
|
|
|
3076
3076
|
function isProposal(value) {
|
|
3077
3077
|
return isPlain2(value) && isKind2(read3(value, "kind")) && isSource2(read3(value, "source")) && isText2(read3(value, "evidence")) && isText2(read3(value, "rationale"));
|
|
3078
3078
|
}
|
|
3079
|
-
function parseUlwLoopSteeringDirective(
|
|
3080
|
-
const match = /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):\s*([\s\S]+)$/u.exec(
|
|
3079
|
+
function parseUlwLoopSteeringDirective(text) {
|
|
3080
|
+
const match = /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):\s*([\s\S]+)$/u.exec(text);
|
|
3081
3081
|
if (match?.[1] === undefined)
|
|
3082
3082
|
return null;
|
|
3083
3083
|
try {
|
|
@@ -3162,16 +3162,16 @@ async function prepareBatch(repoRoot, plan, proposals, scope) {
|
|
|
3162
3162
|
const key = proposal.idempotencyKey ?? proposal.promptSignature;
|
|
3163
3163
|
const prior = key === undefined ? undefined : await findAcceptedSteeringLedgerEntry(repoRoot, key, scope);
|
|
3164
3164
|
if (prior?.steering !== undefined) {
|
|
3165
|
-
const
|
|
3166
|
-
items.push({ kind: "deduped", result
|
|
3167
|
-
results.push(
|
|
3165
|
+
const result = { accepted: true, deduped: true, audit: { ...prior.steering, deduped: true }, rejectedReasons: [] };
|
|
3166
|
+
items.push({ kind: "deduped", result });
|
|
3167
|
+
results.push(result);
|
|
3168
3168
|
continue;
|
|
3169
3169
|
}
|
|
3170
3170
|
const audit = validateUlwLoopSteeringProposal(current, proposal);
|
|
3171
3171
|
if (!audit.invariant.accepted) {
|
|
3172
|
-
const
|
|
3173
|
-
items.push({ kind: "deduped", result
|
|
3174
|
-
results.push(
|
|
3172
|
+
const result = { accepted: false, deduped: false, audit, rejectedReasons: audit.invariant.rejectedReasons };
|
|
3173
|
+
items.push({ kind: "deduped", result });
|
|
3174
|
+
results.push(result);
|
|
3175
3175
|
continue;
|
|
3176
3176
|
}
|
|
3177
3177
|
const next = applySteeringMutation(current, proposal, audit);
|
|
@@ -3238,7 +3238,7 @@ ledger: ${plan.ledgerPath}
|
|
|
3238
3238
|
async function status(repoRoot, json, scope) {
|
|
3239
3239
|
const plan = await readUlwLoopPlan(repoRoot, scope);
|
|
3240
3240
|
if (json) {
|
|
3241
|
-
const active = plan.goals.find((
|
|
3241
|
+
const active = plan.goals.find((goal) => goal.id === plan.activeGoalId);
|
|
3242
3242
|
const currentAttemptDir = plan.evidenceLayoutVersion === 2 && active ? ulwLoopAttemptEvidenceDir(active.id, active.attempt, scope) : undefined;
|
|
3243
3243
|
printJson({
|
|
3244
3244
|
ok: true,
|
|
@@ -3281,9 +3281,9 @@ async function steer(repoRoot, argv, json, scope) {
|
|
|
3281
3281
|
const proposals = await parseSteeringProposals(argv);
|
|
3282
3282
|
const single = proposals[0];
|
|
3283
3283
|
if (single !== undefined && proposals.length === 1 && readValue(argv, "--proposals-json") === undefined) {
|
|
3284
|
-
const
|
|
3285
|
-
printSteerResult(
|
|
3286
|
-
return
|
|
3284
|
+
const result = await steerUlwLoop(repoRoot, single, scope);
|
|
3285
|
+
printSteerResult(result, json);
|
|
3286
|
+
return result.accepted ? 0 : 1;
|
|
3287
3287
|
}
|
|
3288
3288
|
const result = await steerUlwLoopBatch(repoRoot, proposals, scope);
|
|
3289
3289
|
printSteerBatchResult(result, json);
|
|
@@ -3302,12 +3302,12 @@ async function addGoal(repoRoot, argv, json, scope) {
|
|
|
3302
3302
|
}
|
|
3303
3303
|
async function criteria(repoRoot, argv, json, scope) {
|
|
3304
3304
|
const goalId = required4(argv, "--goal-id");
|
|
3305
|
-
const
|
|
3305
|
+
const goal = findGoal3(await readUlwLoopPlan(repoRoot, scope), goalId);
|
|
3306
3306
|
if (json)
|
|
3307
|
-
printJson({ ok: true, goalId:
|
|
3307
|
+
printJson({ ok: true, goalId: goal.id, criteria: goal.successCriteria });
|
|
3308
3308
|
else {
|
|
3309
|
-
process.stdout.write(`criteria for ${
|
|
3310
|
-
${
|
|
3309
|
+
process.stdout.write(`criteria for ${goal.id}:
|
|
3310
|
+
${goal.successCriteria.map(formatCriterionForCli).join(`
|
|
3311
3311
|
`)}
|
|
3312
3312
|
`);
|
|
3313
3313
|
}
|
|
@@ -3361,9 +3361,9 @@ function required4(argv, flag) {
|
|
|
3361
3361
|
throw new UlwLoopError(`Missing ${flag}.`, "ULW_LOOP_ARGUMENT_MISSING", { details: { flag } });
|
|
3362
3362
|
}
|
|
3363
3363
|
function findGoal3(plan, goalId) {
|
|
3364
|
-
const
|
|
3365
|
-
if (
|
|
3366
|
-
return
|
|
3364
|
+
const goal = plan.goals.find((candidate) => candidate.id === goalId);
|
|
3365
|
+
if (goal !== undefined)
|
|
3366
|
+
return goal;
|
|
3367
3367
|
throw new UlwLoopError(`Unknown ulw-loop id: ${goalId}.`, "ULW_LOOP_GOAL_NOT_FOUND", { details: { goalId } });
|
|
3368
3368
|
}
|
|
3369
3369
|
|
|
@@ -3460,13 +3460,13 @@ function sessionIdFlagPresent(argv) {
|
|
|
3460
3460
|
}
|
|
3461
3461
|
function commandScope(repoRoot, argv) {
|
|
3462
3462
|
if (sessionIdFlagPresent(argv)) {
|
|
3463
|
-
const
|
|
3464
|
-
if (!
|
|
3463
|
+
const sessionId = readValue(argv, SESSION_ID_FLAG)?.trim();
|
|
3464
|
+
if (!sessionId) {
|
|
3465
3465
|
throw new UlwLoopError(sessionIdRequiredMessage(SESSION_ID_FLAG), "ULW_LOOP_SESSION_ID_REQUIRED", {
|
|
3466
3466
|
details: { flag: SESSION_ID_FLAG }
|
|
3467
3467
|
});
|
|
3468
3468
|
}
|
|
3469
|
-
return { sessionId
|
|
3469
|
+
return { sessionId };
|
|
3470
3470
|
}
|
|
3471
3471
|
const sessionId = resolveUlwLoopSessionIdFromEnv();
|
|
3472
3472
|
if (sessionId !== null)
|
|
@@ -3755,14 +3755,14 @@ function optionalString(value) {
|
|
|
3755
3755
|
return value === undefined || typeof value === "string";
|
|
3756
3756
|
}
|
|
3757
3757
|
function readAll(stdin) {
|
|
3758
|
-
return new Promise((
|
|
3758
|
+
return new Promise((resolve, reject) => {
|
|
3759
3759
|
let data = "";
|
|
3760
3760
|
stdin.setEncoding("utf8");
|
|
3761
3761
|
stdin.on("data", (chunk) => {
|
|
3762
3762
|
data += chunk instanceof Buffer ? chunk.toString() : String(chunk);
|
|
3763
3763
|
});
|
|
3764
3764
|
stdin.once("error", reject);
|
|
3765
|
-
stdin.once("end", () =>
|
|
3765
|
+
stdin.once("end", () => resolve(data));
|
|
3766
3766
|
});
|
|
3767
3767
|
}
|
|
3768
3768
|
|
|
@@ -3872,16 +3872,16 @@ function consumeReviewSpawnBudget(payload, plan, stateDir) {
|
|
|
3872
3872
|
const agentType = reviewAgentType(payload.tool_input);
|
|
3873
3873
|
if (agentType === null)
|
|
3874
3874
|
return null;
|
|
3875
|
-
const
|
|
3876
|
-
if (
|
|
3875
|
+
const goal = plan.goals.find((candidate) => candidate.id === plan.activeGoalId) ?? plan.goals.find((candidate) => isFinalRunCompletionCandidate(plan, candidate));
|
|
3876
|
+
if (goal === undefined)
|
|
3877
3877
|
return null;
|
|
3878
3878
|
const counterPath = join3(stateDir, "review-spawn-counts.json");
|
|
3879
3879
|
const limit = reviewSpawnLimit();
|
|
3880
3880
|
const counts = readCounts(counterPath);
|
|
3881
|
-
const key = `${agentType}:${
|
|
3881
|
+
const key = `${agentType}:${goal.id}:a${goal.attempt}`;
|
|
3882
3882
|
const count = (counts[key] ?? 0) + 1;
|
|
3883
3883
|
if (count > limit)
|
|
3884
|
-
return `ulw-loop reviewer no-progress cap reached (${agentType} ${count}/${limit}) for ${
|
|
3884
|
+
return `ulw-loop reviewer no-progress cap reached (${agentType} ${count}/${limit}) for ${goal.id} attempt ${goal.attempt}. Consolidate existing review findings, or checkpoint and start a new attempt after concrete progress.`;
|
|
3885
3885
|
counts[key] = count;
|
|
3886
3886
|
atomicWriteJson(counterPath, counts);
|
|
3887
3887
|
return null;
|
|
@@ -3889,23 +3889,23 @@ function consumeReviewSpawnBudget(payload, plan, stateDir) {
|
|
|
3889
3889
|
function missingGateArtifact(payload, plan) {
|
|
3890
3890
|
if (!isGateReviewerSpawn(payload.tool_input))
|
|
3891
3891
|
return null;
|
|
3892
|
-
const
|
|
3893
|
-
if (
|
|
3892
|
+
const goal = plan.goals.find((candidate) => isFinalRunCompletionCandidate(plan, candidate));
|
|
3893
|
+
if (goal === undefined || goal.status === "complete")
|
|
3894
3894
|
return null;
|
|
3895
|
-
if (!
|
|
3895
|
+
if (!goal.successCriteria.every((criterion) => criterion.status === "pass"))
|
|
3896
3896
|
return null;
|
|
3897
3897
|
const scope = { sessionId: payload.session_id };
|
|
3898
|
-
const requiredArtifacts = [`${
|
|
3898
|
+
const requiredArtifacts = [`${goal.id}-manual-qa.md`];
|
|
3899
3899
|
if (plan.evidenceLayoutVersion === 2) {
|
|
3900
|
-
const attemptDir = ulwLoopAttemptEvidenceDir(
|
|
3900
|
+
const attemptDir = ulwLoopAttemptEvidenceDir(goal.id, goal.attempt, scope);
|
|
3901
3901
|
for (const name of requiredArtifacts) {
|
|
3902
|
-
const
|
|
3903
|
-
if (!isNonEmptyFile(join3(payload.cwd,
|
|
3904
|
-
return
|
|
3902
|
+
const relative = `${attemptDir}/${name}`;
|
|
3903
|
+
if (!isNonEmptyFile(join3(payload.cwd, relative)))
|
|
3904
|
+
return relative;
|
|
3905
3905
|
}
|
|
3906
3906
|
return null;
|
|
3907
3907
|
}
|
|
3908
|
-
const manualQa = `.omo/evidence/${
|
|
3908
|
+
const manualQa = `.omo/evidence/${goal.id}-manual-qa.md`;
|
|
3909
3909
|
return isNonEmptyFile(join3(payload.cwd, manualQa)) ? null : manualQa;
|
|
3910
3910
|
}
|
|
3911
3911
|
function isGateReviewerSpawn(toolInput) {
|
|
@@ -4066,14 +4066,14 @@ function runStopResumeHook(input) {
|
|
|
4066
4066
|
const plan = readPlan2(join4(stateDir, "goals.json"));
|
|
4067
4067
|
if (plan === null || plan.aggregateCompletion?.status === "complete")
|
|
4068
4068
|
return "";
|
|
4069
|
-
const
|
|
4070
|
-
if (
|
|
4069
|
+
const goal = resumableGoal(plan);
|
|
4070
|
+
if (goal === undefined)
|
|
4071
4071
|
return "";
|
|
4072
|
-
if (!consumeResumeBudgetLocked(ulwLoopStateLockPath(payload.cwd, scope), stateDir,
|
|
4072
|
+
if (!consumeResumeBudgetLocked(ulwLoopStateLockPath(payload.cwd, scope), stateDir, goal.id))
|
|
4073
4073
|
return "";
|
|
4074
4074
|
const output = {
|
|
4075
4075
|
decision: "block",
|
|
4076
|
-
reason: renderResumeDirective(plan,
|
|
4076
|
+
reason: renderResumeDirective(plan, goal, payload.session_id)
|
|
4077
4077
|
};
|
|
4078
4078
|
return JSON.stringify(output);
|
|
4079
4079
|
}
|
|
@@ -4091,13 +4091,13 @@ async function runStopResumeHookCli(stdin, stdout) {
|
|
|
4091
4091
|
}
|
|
4092
4092
|
}
|
|
4093
4093
|
function resumableGoal(plan) {
|
|
4094
|
-
const active = plan.goals.find((
|
|
4094
|
+
const active = plan.goals.find((goal) => goal.id === plan.activeGoalId);
|
|
4095
4095
|
if (active !== undefined && isResumableStatus(active.status))
|
|
4096
4096
|
return active;
|
|
4097
|
-
return plan.goals.find((
|
|
4097
|
+
return plan.goals.find((goal) => isResumableStatus(goal.status));
|
|
4098
4098
|
}
|
|
4099
|
-
function isResumableStatus(
|
|
4100
|
-
return
|
|
4099
|
+
function isResumableStatus(status) {
|
|
4100
|
+
return status === "pending" || status === "in_progress";
|
|
4101
4101
|
}
|
|
4102
4102
|
function consumeResumeBudgetLocked(lockPath, stateDir, goalId) {
|
|
4103
4103
|
try {
|
|
@@ -4127,11 +4127,11 @@ function consumeResumeBudget(stateDir, goalId) {
|
|
|
4127
4127
|
function isInsideDir(dir, candidate) {
|
|
4128
4128
|
return candidate.startsWith(resolve4(dir) + sep2);
|
|
4129
4129
|
}
|
|
4130
|
-
function renderResumeDirective(plan,
|
|
4130
|
+
function renderResumeDirective(plan, goal, sessionId) {
|
|
4131
4131
|
const normalized = normalizeUlwLoopSessionId(sessionId);
|
|
4132
4132
|
const option = normalized !== null && plan.goalsPath.includes(`/${normalized}/`) ? ` --session-id ${normalized}` : "";
|
|
4133
4133
|
return [
|
|
4134
|
-
`The ulw-loop run in this session still has unfinished goals (next: ${
|
|
4134
|
+
`The ulw-loop run in this session still has unfinished goals (next: ${goal.id} — ${goal.title}).`,
|
|
4135
4135
|
"The turn ended before the loop completed. Resume it now:",
|
|
4136
4136
|
`1. Run \`omo-agent-toolkit ulw-loop status${option} --json\` to reload the plan, the active goal, and currentAttemptDir.`,
|
|
4137
4137
|
"2. Continue the active goal's remaining success criteria, recording evidence with record-evidence.",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit --with-ultrawork",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.50) Checking Ulw-Loop Steering"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"type": "command",
|
|
21
21
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use-spawn",
|
|
22
22
|
"timeout": 5,
|
|
23
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
23
|
+
"statusMessage": "(OmO 5.0.0-beta.50) Recording Spawn Admission"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"type": "command",
|
|
34
34
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
|
|
35
35
|
"timeout": 5,
|
|
36
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
36
|
+
"statusMessage": "(OmO 5.0.0-beta.50) Enforcing Unlimited Ulw-Loop Budget"
|
|
37
37
|
}
|
|
38
38
|
]
|
|
39
39
|
},
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"type": "command",
|
|
45
45
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use-spawn",
|
|
46
46
|
"timeout": 5,
|
|
47
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
47
|
+
"statusMessage": "(OmO 5.0.0-beta.50) Guarding Ulw-Loop Spawns"
|
|
48
48
|
}
|
|
49
49
|
]
|
|
50
50
|
}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"type": "command",
|
|
57
57
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook stop",
|
|
58
58
|
"timeout": 10,
|
|
59
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
59
|
+
"statusMessage": "(OmO 5.0.0-beta.50) Checking Ulw-Loop Resume"
|
|
60
60
|
}
|
|
61
61
|
]
|
|
62
62
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-ulw-loop",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.50",
|
|
4
4
|
"description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
|
|
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/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.50) 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.50) 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.50) 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/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.50) 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.50) 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.50) 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.50) 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
|
],
|