oh-my-opencode 4.16.3 → 4.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/omomomo.md +1 -1
- package/.agents/skills/hyperplan/SKILL.md +3 -3
- package/.agents/skills/omomomo/SKILL.md +1 -1
- package/.opencode/command/omomomo.md +1 -1
- package/.opencode/skills/hyperplan/SKILL.md +3 -3
- package/.opencode/skills/pre-publish-review/SKILL.md +3 -0
- package/README.ja.md +4 -4
- package/README.ko.md +4 -4
- package/README.md +2 -2
- package/README.ru.md +4 -4
- package/README.zh-cn.md +4 -4
- package/dist/cli/index.js +179 -63
- package/dist/cli-node/index.js +179 -63
- package/dist/features/team-mode/test-support/async-test-helpers.d.ts +2 -2
- package/dist/index.js +121 -58
- package/dist/plugin/chat-message/types.d.ts +4 -0
- package/dist/plugin/command-execute-before.d.ts +1 -0
- package/dist/plugin/stop-continuation.d.ts +17 -0
- package/dist/skills/remove-ai-slops/SKILL.md +2 -2
- package/dist/skills/start-work/SKILL.md +5 -2
- package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/dist/tui.js +71 -29
- package/package.json +15 -14
- package/packages/git-bash-mcp/package.json +27 -0
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -19
- 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/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/dist/cli.js +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +2 -2
- 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 +6 -2
- 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 +67 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +0 -13
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +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/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +1 -79
- 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/explorer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +6 -6
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +26 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/{lazycodex-executor.toml → lazycodex-worker-low.toml} +6 -4
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +26 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +55 -28
- 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/ultrawork/skills/ultrawork/SKILL.md +55 -28
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +22 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +0 -68
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +55 -28
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +405 -25
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +16 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +20 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +12 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +148 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +209 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +25 -2
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +14 -15
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +29 -27
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +14 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +10 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +27 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +23 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +16 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +138 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +208 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +8 -35
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +24 -13
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +43 -8
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +55 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +228 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +193 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-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 +18 -0
- 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-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +17 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -2
- 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 +13 -13
- 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/sync-skills.mjs +8 -2
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +8 -2
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +5 -2
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +55 -28
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +14 -15
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +29 -27
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +2 -2
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +76 -16
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -2
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +4 -101
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +14 -14
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +11 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +4 -2
- package/packages/omo-codex/plugin/test/ulw-plan-skill-contract.test.mjs +9 -40
- package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +4 -277
- package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +5 -5
- package/packages/omo-codex/scripts/install-config.test.mjs +22 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +91 -21
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +2 -2
- package/packages/shared-skills/skills/start-work/SKILL.md +5 -2
- package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +0 -70
- package/packages/omo-codex/plugin/test/ulw-research-epistemic-contract.test.mjs +0 -98
- package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
package/dist/index.js
CHANGED
|
@@ -21139,6 +21139,11 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
21139
21139
|
},
|
|
21140
21140
|
deep: {
|
|
21141
21141
|
fallbackChain: [
|
|
21142
|
+
{
|
|
21143
|
+
providers: ["openai", "vercel"],
|
|
21144
|
+
model: "gpt-5.6-terra",
|
|
21145
|
+
variant: "xhigh"
|
|
21146
|
+
},
|
|
21142
21147
|
{
|
|
21143
21148
|
providers: ["openai", "vercel"],
|
|
21144
21149
|
model: "gpt-5.6-sol",
|
|
@@ -21202,6 +21207,11 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
21202
21207
|
},
|
|
21203
21208
|
"unspecified-low": {
|
|
21204
21209
|
fallbackChain: [
|
|
21210
|
+
{
|
|
21211
|
+
providers: ["openai", "vercel"],
|
|
21212
|
+
model: "gpt-5.6-luna",
|
|
21213
|
+
variant: "xhigh"
|
|
21214
|
+
},
|
|
21205
21215
|
{
|
|
21206
21216
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
21207
21217
|
model: "claude-sonnet-4-6"
|
|
@@ -22603,6 +22613,38 @@ var SUPPLEMENTAL_MODEL_CAPABILITIES = {
|
|
|
22603
22613
|
output: 128000
|
|
22604
22614
|
}
|
|
22605
22615
|
},
|
|
22616
|
+
"gpt-5.6-terra": {
|
|
22617
|
+
id: "gpt-5.6-terra",
|
|
22618
|
+
family: "gpt-mini",
|
|
22619
|
+
reasoning: true,
|
|
22620
|
+
temperature: false,
|
|
22621
|
+
toolCall: true,
|
|
22622
|
+
modalities: {
|
|
22623
|
+
input: ["text", "image", "pdf"],
|
|
22624
|
+
output: ["text"]
|
|
22625
|
+
},
|
|
22626
|
+
limit: {
|
|
22627
|
+
context: 1050000,
|
|
22628
|
+
input: 922000,
|
|
22629
|
+
output: 128000
|
|
22630
|
+
}
|
|
22631
|
+
},
|
|
22632
|
+
"gpt-5.6-luna": {
|
|
22633
|
+
id: "gpt-5.6-luna",
|
|
22634
|
+
family: "gpt-nano",
|
|
22635
|
+
reasoning: true,
|
|
22636
|
+
temperature: false,
|
|
22637
|
+
toolCall: true,
|
|
22638
|
+
modalities: {
|
|
22639
|
+
input: ["text", "image", "pdf"],
|
|
22640
|
+
output: ["text"]
|
|
22641
|
+
},
|
|
22642
|
+
limit: {
|
|
22643
|
+
context: 1050000,
|
|
22644
|
+
input: 922000,
|
|
22645
|
+
output: 128000
|
|
22646
|
+
}
|
|
22647
|
+
},
|
|
22606
22648
|
"gpt-5.5": {
|
|
22607
22649
|
id: "gpt-5.5",
|
|
22608
22650
|
family: "gpt",
|
|
@@ -23506,28 +23548,6 @@ function truncateDescription(description, maxLength = 120) {
|
|
|
23506
23548
|
}
|
|
23507
23549
|
|
|
23508
23550
|
// packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
|
|
23509
|
-
var UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
23510
|
-
You are working on tasks that don't fit specific categories but require moderate effort.
|
|
23511
|
-
|
|
23512
|
-
<Selection_Gate>
|
|
23513
|
-
BEFORE selecting this category, VERIFY ALL conditions:
|
|
23514
|
-
1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
|
|
23515
|
-
2. Task requires more than trivial effort but is NOT system-wide
|
|
23516
|
-
3. Scope is contained within a few files/modules
|
|
23517
|
-
|
|
23518
|
-
If task fits ANY other category, DO NOT select unspecified-low.
|
|
23519
|
-
This is NOT a default choice - it's for genuinely unclassifiable moderate-effort work.
|
|
23520
|
-
</Selection_Gate>
|
|
23521
|
-
</Category_Context>
|
|
23522
|
-
|
|
23523
|
-
<Caller_Warning>
|
|
23524
|
-
THIS CATEGORY USES A MID-TIER MODEL (claude-sonnet-4-6).
|
|
23525
|
-
|
|
23526
|
-
**PROVIDE CLEAR STRUCTURE:**
|
|
23527
|
-
1. MUST DO: Enumerate required actions explicitly
|
|
23528
|
-
2. MUST NOT DO: State forbidden actions to prevent scope creep
|
|
23529
|
-
3. EXPECTED OUTPUT: Define concrete success criteria
|
|
23530
|
-
</Caller_Warning>`;
|
|
23531
23551
|
var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
23532
23552
|
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
23533
23553
|
|
|
@@ -23543,12 +23563,6 @@ If task is unclassifiable but moderate-effort, use unspecified-low instead.
|
|
|
23543
23563
|
</Selection_Gate>
|
|
23544
23564
|
</Category_Context>`;
|
|
23545
23565
|
var ANTHROPIC_CATEGORIES = [
|
|
23546
|
-
{
|
|
23547
|
-
name: "unspecified-low",
|
|
23548
|
-
config: { model: "anthropic/claude-sonnet-4-6" },
|
|
23549
|
-
description: "Tasks that don't fit other categories, low effort required",
|
|
23550
|
-
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
23551
|
-
},
|
|
23552
23566
|
{
|
|
23553
23567
|
name: "unspecified-high",
|
|
23554
23568
|
config: { model: "anthropic/claude-opus-4-7", variant: "max" },
|
|
@@ -23856,6 +23870,28 @@ EXPECTED OUTPUT:
|
|
|
23856
23870
|
|
|
23857
23871
|
If your prompt lacks this structure, REWRITE IT before delegating.
|
|
23858
23872
|
</Caller_Warning>`;
|
|
23873
|
+
var UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
23874
|
+
You are working on tasks that don't fit specific categories but require moderate effort.
|
|
23875
|
+
|
|
23876
|
+
<Selection_Gate>
|
|
23877
|
+
BEFORE selecting this category, VERIFY ALL conditions:
|
|
23878
|
+
1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
|
|
23879
|
+
2. Task requires more than trivial effort but is NOT system-wide
|
|
23880
|
+
3. Scope is contained within a few files/modules
|
|
23881
|
+
|
|
23882
|
+
If task fits ANY other category, DO NOT select unspecified-low.
|
|
23883
|
+
This is NOT a default choice - it's for genuinely unclassifiable moderate-effort work.
|
|
23884
|
+
</Selection_Gate>
|
|
23885
|
+
</Category_Context>
|
|
23886
|
+
|
|
23887
|
+
<Caller_Warning>
|
|
23888
|
+
THIS CATEGORY USES A LIGHTWEIGHT MODEL (gpt-5.6-luna).
|
|
23889
|
+
|
|
23890
|
+
**PROVIDE CLEAR STRUCTURE:**
|
|
23891
|
+
1. MUST DO: Enumerate required actions explicitly
|
|
23892
|
+
2. MUST NOT DO: State forbidden actions to prevent scope creep
|
|
23893
|
+
3. EXPECTED OUTPUT: Define concrete success criteria
|
|
23894
|
+
</Caller_Warning>`;
|
|
23859
23895
|
var OPENAI_CATEGORIES = [
|
|
23860
23896
|
{
|
|
23861
23897
|
name: "ultrabrain",
|
|
@@ -23865,7 +23901,7 @@ var OPENAI_CATEGORIES = [
|
|
|
23865
23901
|
},
|
|
23866
23902
|
{
|
|
23867
23903
|
name: "deep",
|
|
23868
|
-
config: { model: "openai/gpt-5.6-
|
|
23904
|
+
config: { model: "openai/gpt-5.6-terra", variant: "xhigh" },
|
|
23869
23905
|
description: "Goal-oriented autonomous problem-solving on hairy problems requiring deep research. ONE goal + ONE deliverable per call \u2014 multiple goals must fan out as parallel `deep` calls, never bundled into one.",
|
|
23870
23906
|
promptAppend: DEEP_CATEGORY_PROMPT_APPEND,
|
|
23871
23907
|
resolvePromptAppend: resolveDeepCategoryPromptAppend
|
|
@@ -23875,6 +23911,12 @@ var OPENAI_CATEGORIES = [
|
|
|
23875
23911
|
config: { model: "openai/gpt-5.4-mini" },
|
|
23876
23912
|
description: "Trivial tasks - single file changes, typo fixes, simple modifications",
|
|
23877
23913
|
promptAppend: QUICK_CATEGORY_PROMPT_APPEND
|
|
23914
|
+
},
|
|
23915
|
+
{
|
|
23916
|
+
name: "unspecified-low",
|
|
23917
|
+
config: { model: "openai/gpt-5.6-luna", variant: "xhigh" },
|
|
23918
|
+
description: "Tasks that don't fit other categories, low effort required",
|
|
23919
|
+
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
23878
23920
|
}
|
|
23879
23921
|
];
|
|
23880
23922
|
|
|
@@ -89613,7 +89655,7 @@ function getCachedVersion(options = {}) {
|
|
|
89613
89655
|
// package.json
|
|
89614
89656
|
var package_default = {
|
|
89615
89657
|
name: "oh-my-opencode",
|
|
89616
|
-
version: "4.
|
|
89658
|
+
version: "4.17.0",
|
|
89617
89659
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
89618
89660
|
main: "./dist/index.js",
|
|
89619
89661
|
types: "dist/index.d.ts",
|
|
@@ -89676,6 +89718,7 @@ var package_default = {
|
|
|
89676
89718
|
"packages/lsp-tools-mcp/dist",
|
|
89677
89719
|
"packages/lsp-daemon/package.json",
|
|
89678
89720
|
"packages/lsp-daemon/dist",
|
|
89721
|
+
"packages/git-bash-mcp/package.json",
|
|
89679
89722
|
"packages/git-bash-mcp/dist",
|
|
89680
89723
|
"packages/shared-skills/package.json",
|
|
89681
89724
|
"packages/shared-skills/index.mjs",
|
|
@@ -89741,7 +89784,7 @@ var package_default = {
|
|
|
89741
89784
|
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/pi-goal/tsconfig.json && tsgo --noEmit -p packages/pi-webfetch/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json",
|
|
89742
89785
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
89743
89786
|
test: "bun test",
|
|
89744
|
-
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
89787
|
+
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
89745
89788
|
"test:senpi": "node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && bun test packages/omo-senpi",
|
|
89746
89789
|
"test:windows-codex": "bun run test:codex",
|
|
89747
89790
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build"
|
|
@@ -89823,18 +89866,18 @@ var package_default = {
|
|
|
89823
89866
|
typescript: "^6.0.3"
|
|
89824
89867
|
},
|
|
89825
89868
|
optionalDependencies: {
|
|
89826
|
-
"oh-my-opencode-darwin-arm64": "4.
|
|
89827
|
-
"oh-my-opencode-darwin-x64": "4.
|
|
89828
|
-
"oh-my-opencode-darwin-x64-baseline": "4.
|
|
89829
|
-
"oh-my-opencode-linux-arm64": "4.
|
|
89830
|
-
"oh-my-opencode-linux-arm64-musl": "4.
|
|
89831
|
-
"oh-my-opencode-linux-x64": "4.
|
|
89832
|
-
"oh-my-opencode-linux-x64-baseline": "4.
|
|
89833
|
-
"oh-my-opencode-linux-x64-musl": "4.
|
|
89834
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.
|
|
89835
|
-
"oh-my-opencode-windows-arm64": "4.
|
|
89836
|
-
"oh-my-opencode-windows-x64": "4.
|
|
89837
|
-
"oh-my-opencode-windows-x64-baseline": "4.
|
|
89869
|
+
"oh-my-opencode-darwin-arm64": "4.17.0",
|
|
89870
|
+
"oh-my-opencode-darwin-x64": "4.17.0",
|
|
89871
|
+
"oh-my-opencode-darwin-x64-baseline": "4.17.0",
|
|
89872
|
+
"oh-my-opencode-linux-arm64": "4.17.0",
|
|
89873
|
+
"oh-my-opencode-linux-arm64-musl": "4.17.0",
|
|
89874
|
+
"oh-my-opencode-linux-x64": "4.17.0",
|
|
89875
|
+
"oh-my-opencode-linux-x64-baseline": "4.17.0",
|
|
89876
|
+
"oh-my-opencode-linux-x64-musl": "4.17.0",
|
|
89877
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.17.0",
|
|
89878
|
+
"oh-my-opencode-windows-arm64": "4.17.0",
|
|
89879
|
+
"oh-my-opencode-windows-x64": "4.17.0",
|
|
89880
|
+
"oh-my-opencode-windows-x64-baseline": "4.17.0"
|
|
89838
89881
|
},
|
|
89839
89882
|
overrides: {
|
|
89840
89883
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -94916,10 +94959,10 @@ Trigger when ANY apply: user said "\uC5C4\uBC00" / "strictly" / "rigorously" / "
|
|
|
94916
94959
|
|
|
94917
94960
|
Procedure (non-negotiable):
|
|
94918
94961
|
1. Spawn a reviewer via \`task(category="ultrabrain", subagent_type="plan", load_skills=[...], run_in_background=false, prompt="<goal + scenarios + evidence + diff + notepad path>")\` \u2014 or any high-rigor reviewer agent available.
|
|
94919
|
-
2.
|
|
94920
|
-
3. Fix every
|
|
94921
|
-
4. Re-submit to the SAME reviewer
|
|
94922
|
-
5.
|
|
94962
|
+
2. Verify each reviewer concern yourself. A concern blocks only when it names a success criterion the evidence fails; record concerns that cite no criterion as notes with a one-line reason \u2014 fixed or declined at your judgment.
|
|
94963
|
+
3. Fix every criterion-cited blocker. Re-run ONLY the scenario QA affected by the fix; capture fresh evidence for the delta. Update notepad.
|
|
94964
|
+
4. Re-submit to the SAME reviewer at most twice, passing only the delta diff, the blockers it cited, and the already-approved criteria marked out-of-scope. An approval whose only remaining items are notes counts as approval.
|
|
94965
|
+
5. On approval, declare done. If criterion-cited blockers remain after two re-reviews, stop and surface them to the user \u2014 do not loop further.
|
|
94923
94966
|
|
|
94924
94967
|
## ZERO TOLERANCE FAILURES
|
|
94925
94968
|
- **NO Scope Reduction**: Never make "demo", "skeleton", "simplified", "basic" versions - deliver FULL implementation
|
|
@@ -95205,7 +95248,7 @@ If ANY answer is no \u2192 GO BACK AND DO IT. Do not claim completion.
|
|
|
95205
95248
|
|
|
95206
95249
|
### REVIEWER GATE (triggered, not optional)
|
|
95207
95250
|
|
|
95208
|
-
Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", or task touches 3+ files OR ran 20+ turns OR 30+ min, or refactor/migration/perf/security. Spawn a high-rigor reviewer via \`task\` with: goal, scenarios, evidence paths, full diff, notepad path.
|
|
95251
|
+
Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", or task touches 3+ files OR ran 20+ turns OR 30+ min, or refactor/migration/perf/security. Spawn a high-rigor reviewer via \`task\` with: goal, scenarios, evidence paths, full diff, notepad path. A concern blocks only when it names a success criterion the evidence fails; others are notes. Fix cited blockers, re-run the affected scenario QA, capture fresh delta evidence, and resubmit at most twice; an approval with only notes left counts as approval. Remaining cited blockers after two re-reviews go to the user.
|
|
95209
95252
|
|
|
95210
95253
|
<MANUAL_QA_MANDATE>
|
|
95211
95254
|
### YOU MUST EXECUTE MANUAL QA. THIS IS NOT OPTIONAL. DO NOT SKIP THIS.
|
|
@@ -95455,7 +95498,7 @@ If QA starts a server, browser, tmux session, port, temp dir, or background proc
|
|
|
95455
95498
|
|
|
95456
95499
|
Use a high-rigor reviewer when the task touches 3+ files, changes security/performance/migration behavior, lasts 30+ minutes, or the user asks for strict review.
|
|
95457
95500
|
|
|
95458
|
-
|
|
95501
|
+
A reviewer concern binds only when it cites a success criterion the evidence fails; other concerns are notes. Fix cited blockers, rerun the affected verification, and resubmit the delta at most twice; then surface remaining blockers to the user.
|
|
95459
95502
|
|
|
95460
95503
|
## ZERO TOLERANCE FAILURES
|
|
95461
95504
|
|
|
@@ -95649,7 +95692,7 @@ Name the exact tool + exact invocation per scenario (literal \`curl\` / \`send-k
|
|
|
95649
95692
|
|
|
95650
95693
|
## REVIEWER GATE (triggered)
|
|
95651
95694
|
|
|
95652
|
-
Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", or task touches 3+ files OR ran 20+ turns OR 30+ min, or it's a refactor/migration/perf/security change. Spawn a high-rigor reviewer via \`task\` with goal + scenarios + evidence + diff.
|
|
95695
|
+
Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", or task touches 3+ files OR ran 20+ turns OR 30+ min, or it's a refactor/migration/perf/security change. Spawn a high-rigor reviewer via \`task\` with goal + scenarios + evidence + diff. A concern blocks only when it cites a success criterion the evidence fails \u2014 others are notes. Fix cited blockers, re-run only the affected QA, and re-submit the delta at most twice; an approval with only notes left counts as approval. If cited blockers remain after two re-reviews, surface them to the user before declaring done.
|
|
95653
95696
|
|
|
95654
95697
|
## COMPLETION CRITERIA
|
|
95655
95698
|
|
|
@@ -148838,6 +148881,8 @@ call_omo_agent(subagent_type="librarian", prompt="I'm looking for proven impleme
|
|
|
148838
148881
|
- MUST NOT: Create criteria requiring "user clicks/interacts..."
|
|
148839
148882
|
- MUST NOT: Use placeholders without concrete examples (bad: "[endpoint]", good: "/api/users")
|
|
148840
148883
|
- MUST NOT: Write vague QA scenarios ("verify it works", "check the page loads", "test the API returns data")
|
|
148884
|
+
- MUST: For a PROSE deliverable (a prompt, \`SKILL.md\`, rule, or markdown/instruction file), make QA a human/agent READ against the intended behavior, or assert only a machine-consumed value (a parsed field, a sentinel a runtime greps, a doc JSON sample through its real validator) \u2014 the file's wording has no behavioral seam
|
|
148885
|
+
- MUST NOT: Turn a prompt/doc change into a text-grep acceptance criterion (\`grep "<sentence>" SKILL.md\`, word/char counts, phrase presence/absence) \u2014 that pins a diff, not behavior, and blocks every legitimate edit
|
|
148841
148886
|
|
|
148842
148887
|
## Recommended Approach
|
|
148843
148888
|
[1-2 sentence summary of how to proceed]
|
|
@@ -160695,6 +160740,18 @@ function parseRalphLoopArguments(rawArguments) {
|
|
|
160695
160740
|
|
|
160696
160741
|
// packages/omo-opencode/src/plugin/command-execute-before.ts
|
|
160697
160742
|
init_logger2();
|
|
160743
|
+
|
|
160744
|
+
// packages/omo-opencode/src/plugin/stop-continuation.ts
|
|
160745
|
+
function stopContinuation(args) {
|
|
160746
|
+
const { directory, hooks, sessionID } = args;
|
|
160747
|
+
hooks.stopContinuationGuard?.stop?.(sessionID);
|
|
160748
|
+
hooks.todoContinuationEnforcer?.cancelAllCountdowns();
|
|
160749
|
+
hooks.ralphLoop?.cancelLoop(sessionID);
|
|
160750
|
+
clearBoulderState(directory);
|
|
160751
|
+
log2("[stop-continuation] All continuation mechanisms stopped", { sessionID });
|
|
160752
|
+
}
|
|
160753
|
+
|
|
160754
|
+
// packages/omo-opencode/src/plugin/command-execute-before.ts
|
|
160698
160755
|
var NATIVE_LOOP_TRIGGERED_FLAG = "__omoNativeLoopTriggered";
|
|
160699
160756
|
function hasPartsOutput(value) {
|
|
160700
160757
|
if (typeof value !== "object" || value === null)
|
|
@@ -160704,11 +160761,14 @@ function hasPartsOutput(value) {
|
|
|
160704
160761
|
return Array.isArray(parts);
|
|
160705
160762
|
}
|
|
160706
160763
|
function createCommandExecuteBeforeHandler(args) {
|
|
160707
|
-
const { hooks } = args;
|
|
160764
|
+
const { directory, hooks } = args;
|
|
160708
160765
|
return async (input, output) => {
|
|
160709
160766
|
await hooks.autoSlashCommand?.["command.execute.before"]?.(input, output);
|
|
160710
160767
|
const normalizedCommand = input.command.toLowerCase();
|
|
160711
160768
|
const sessionID = input.sessionID;
|
|
160769
|
+
if (normalizedCommand === "stop-continuation" && sessionID) {
|
|
160770
|
+
stopContinuation({ directory, hooks, sessionID });
|
|
160771
|
+
}
|
|
160712
160772
|
if (hooks.ralphLoop && sessionID) {
|
|
160713
160773
|
if (normalizedCommand === "ralph-loop" || normalizedCommand === "ulw-loop") {
|
|
160714
160774
|
const parsedArguments = parseRalphLoopArguments(input.arguments || "");
|
|
@@ -160954,6 +161014,14 @@ function createChatMessageHandler3(args) {
|
|
|
160954
161014
|
if (input.agent) {
|
|
160955
161015
|
updateSessionAgent(input.sessionID, input.agent);
|
|
160956
161016
|
}
|
|
161017
|
+
const slashCommand = detectSlashCommand(extractPromptText3(output.parts));
|
|
161018
|
+
if (slashCommand?.command === "stop-continuation") {
|
|
161019
|
+
stopContinuation({
|
|
161020
|
+
directory: ctx.directory,
|
|
161021
|
+
hooks,
|
|
161022
|
+
sessionID: input.sessionID
|
|
161023
|
+
});
|
|
161024
|
+
}
|
|
160957
161025
|
const isFirstMessage = firstMessageVariantGate.shouldOverride(input.sessionID);
|
|
160958
161026
|
if (isFirstMessage) {
|
|
160959
161027
|
firstMessageVariantGate.markApplied(input.sessionID);
|
|
@@ -162941,13 +163009,7 @@ function createToolExecuteBeforeHandler3(args) {
|
|
|
162941
163009
|
const command = rawName?.replace(/^\//, "").toLowerCase();
|
|
162942
163010
|
const sessionID = input.sessionID || getMainSessionID();
|
|
162943
163011
|
if (command === "stop-continuation" && sessionID) {
|
|
162944
|
-
hooks
|
|
162945
|
-
hooks.todoContinuationEnforcer?.cancelAllCountdowns();
|
|
162946
|
-
hooks.ralphLoop?.cancelLoop(sessionID);
|
|
162947
|
-
clearBoulderState(ctx.directory);
|
|
162948
|
-
log2("[stop-continuation] All continuation mechanisms stopped", {
|
|
162949
|
-
sessionID
|
|
162950
|
-
});
|
|
163012
|
+
stopContinuation({ directory: ctx.directory, hooks, sessionID });
|
|
162951
163013
|
}
|
|
162952
163014
|
const workStartingCommands = ["start-work", "ralph-loop", "ulw-loop"];
|
|
162953
163015
|
if (workStartingCommands.includes(command ?? "") && sessionID) {
|
|
@@ -162981,6 +163043,7 @@ function createPluginInterface(args) {
|
|
|
162981
163043
|
},
|
|
162982
163044
|
"chat.headers": createChatHeadersHandler({ ctx }),
|
|
162983
163045
|
"command.execute.before": createCommandExecuteBeforeHandler({
|
|
163046
|
+
directory: ctx.directory,
|
|
162984
163047
|
hooks
|
|
162985
163048
|
}),
|
|
162986
163049
|
"chat.message": createChatMessageHandler3({
|
|
@@ -49,6 +49,9 @@ type RalphLoopHook = {
|
|
|
49
49
|
resumeLoop?: (sessionID: string) => boolean;
|
|
50
50
|
cancelLoop: (sessionID: string) => boolean | void;
|
|
51
51
|
};
|
|
52
|
+
type TodoContinuationEnforcerHook = {
|
|
53
|
+
cancelAllCountdowns: () => void;
|
|
54
|
+
};
|
|
52
55
|
export type ChatMessageHooks = {
|
|
53
56
|
modelFallback?: ChatMessageHook | null;
|
|
54
57
|
stopContinuationGuard?: StopContinuationGuard | null;
|
|
@@ -63,5 +66,6 @@ export type ChatMessageHooks = {
|
|
|
63
66
|
hephaestusAgentsMdInjector?: ChatMessageHook | null;
|
|
64
67
|
startWork?: ChatMessageHook | null;
|
|
65
68
|
ralphLoop?: RalphLoopHook | null;
|
|
69
|
+
todoContinuationEnforcer?: TodoContinuationEnforcerHook | null;
|
|
66
70
|
};
|
|
67
71
|
export {};
|
|
@@ -14,6 +14,7 @@ type CommandExecuteBeforeOutput = {
|
|
|
14
14
|
};
|
|
15
15
|
declare const NATIVE_LOOP_TRIGGERED_FLAG = "__omoNativeLoopTriggered";
|
|
16
16
|
export declare function createCommandExecuteBeforeHandler(args: {
|
|
17
|
+
directory: string;
|
|
17
18
|
hooks: CreatedHooks;
|
|
18
19
|
}): (input: CommandExecuteBeforeInput, output: CommandExecuteBeforeOutput) => Promise<void>;
|
|
19
20
|
export { NATIVE_LOOP_TRIGGERED_FLAG };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type StopContinuationHooks = {
|
|
2
|
+
readonly stopContinuationGuard?: {
|
|
3
|
+
readonly stop?: (sessionID: string) => void;
|
|
4
|
+
} | null;
|
|
5
|
+
readonly todoContinuationEnforcer?: {
|
|
6
|
+
readonly cancelAllCountdowns: () => void;
|
|
7
|
+
} | null;
|
|
8
|
+
readonly ralphLoop?: {
|
|
9
|
+
readonly cancelLoop: (sessionID: string) => boolean | void;
|
|
10
|
+
} | null;
|
|
11
|
+
};
|
|
12
|
+
export declare function stopContinuation(args: {
|
|
13
|
+
readonly directory: string;
|
|
14
|
+
readonly hooks: StopContinuationHooks;
|
|
15
|
+
readonly sessionID: string;
|
|
16
|
+
}): void;
|
|
17
|
+
export {};
|
|
@@ -62,7 +62,7 @@ The agent looks for these nine categories. The first three are stylistic, the ne
|
|
|
62
62
|
**Hard rule**: only apply when behavior equivalence is obvious. Do NOT change algorithms with subtle correctness implications. Do NOT micro-optimize hot paths without a benchmark. If in doubt, SKIP.
|
|
63
63
|
|
|
64
64
|
### Behavior coverage
|
|
65
|
-
9. **Missing tests** — behavior present in changed files that is not locked by any regression test. The fix is not to remove code but to ADD the narrowest test that pins the behavior.
|
|
65
|
+
9. **Missing tests** — behavior present in changed files that is not locked by any regression test. The fix is not to remove code but to ADD the narrowest test that pins the behavior. EXCEPTION: a PROSE file (prompt, `SKILL.md`, rule, markdown) has no behavioral seam — do NOT add a text/word-count/phrase pin for it; that guards a diff, not behavior. Cover only a machine-consumed value (parsed field, sentinel a runtime greps, a doc JSON sample through its real validator) or leave it to review.
|
|
66
66
|
|
|
67
67
|
### Structural
|
|
68
68
|
10. **Oversized modules** — any source file exceeding **250 pure LOC** (non-blank, non-comment lines). This is an architectural defect, not a style preference. Measure: `awk '!/^[[:space:]]*$/ && !/^[[:space:]]*(#|\/\/)/' <file> | wc -l`.
|
|
@@ -122,7 +122,7 @@ For each in-scope source file:
|
|
|
122
122
|
|
|
123
123
|
1. Identify the public/observable behavior the file exposes (exported functions, HTTP handlers, CLI commands, classes used elsewhere).
|
|
124
124
|
2. Check whether existing tests cover that behavior. Use `git grep` / project test conventions to find related test files.
|
|
125
|
-
3. **If behavior is uncovered or weakly covered, write the narrowest regression test that pins current behavior BEFORE editing the file.** Tests should pin observable outputs, not implementation details.
|
|
125
|
+
3. **If behavior is uncovered or weakly covered, write the narrowest regression test that pins current behavior BEFORE editing the file.** Tests should pin observable outputs, not implementation details. A PROSE file (prompt/`SKILL.md`/rule/markdown) is exempt — its wording is not behavior; skip the test and rely on review, or assert only a machine-consumed value.
|
|
126
126
|
4. Run the test suite (or at minimum the relevant tests). They must be **green** before any cleanup begins.
|
|
127
127
|
|
|
128
128
|
If you cannot establish a green baseline (e.g., test runner is broken), STOP and report. Do not proceed with cleanup on unverified ground.
|
|
@@ -14,13 +14,16 @@ Translate any OpenCode-only tool name in an inherited example to its Codex equiv
|
|
|
14
14
|
| OpenCode example | Codex tool to use |
|
|
15
15
|
| --- | --- |
|
|
16
16
|
| final-review `task(...)` | `multi_agent_v1.spawn_agent({"message":"TASK: act as a rigorous reviewer. ...","agent_type":"lazycodex-gate-reviewer","fork_context":false})` |
|
|
17
|
-
| worker `task(...)` | `multi_agent_v1.spawn_agent({"message":"TASK: act as <role>. ...","fork_context":false})` |
|
|
17
|
+
| worker `task(...)` | `multi_agent_v1.spawn_agent({"message":"TASK: act as <role>. ...","fork_context":false})` — for implementation workers add `agent_type: "lazycodex-worker-<low|medium|high>"` when the spawn schema exposes `agent_type` |
|
|
18
18
|
| `background_output(task_id="...")` | `multi_agent_v1.wait_agent(...)` for mailbox signals |
|
|
19
19
|
| `team_*(...)` | `multi_agent_v1.spawn_agent` + `multi_agent_v1.send_input` + `multi_agent_v1.wait_agent` + `multi_agent_v1.close_agent` |
|
|
20
20
|
|
|
21
21
|
When translating `load_skills=[...]`, name the skills inside the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
22
22
|
|
|
23
|
-
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,"fork_context":false})` becomes `spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})` (`"all"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type`
|
|
23
|
+
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,"fork_context":false})` becomes `spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})` (`"all"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. On the v2 surface `agent_type` may be absent from the spawn schema — when absent, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
24
|
+
|
|
25
|
+
### Delegation by difficulty (Codex tier workers)
|
|
26
|
+
When tier worker agents are installed (Codex), size each implementation lane by difficulty and pass the matching `agent_type` where the spawn schema exposes it: LOW (one-file fix, boilerplate, config/copy) -> `lazycodex-worker-low`; MEDIUM (standard feature, few files, known patterns) -> `lazycodex-worker-medium`; HIGH (new module, cross-module refactor, concurrency/security/migration) -> `lazycodex-worker-high`. Explorer/librarian research lanes keep their own roles. Difficulty (model power) is orthogonal to the LIGHT/HEAVY rigor tier in step 4 — judge each on its own facts. On spawn surfaces without `agent_type` (deployed v2), state the tier inside `message`.
|
|
24
27
|
|
|
25
28
|
## Codex Subagent Reliability
|
|
26
29
|
|
|
@@ -221,7 +221,7 @@ Your next move: <fill - e.g. approve, or run a high-accuracy review>. Full execu
|
|
|
221
221
|
## Verification strategy
|
|
222
222
|
> Zero human intervention - all verification is agent-executed.
|
|
223
223
|
- Test decision: <TDD | tests-after | none> + framework
|
|
224
|
-
- Evidence:
|
|
224
|
+
- Evidence: <attemptDir>/task-<N>-${slug}.<ext> (attemptDir = currentAttemptDir from 'omo ulw-loop status --json', .omo/evidence/ulw/<session>/<goalId>/a<attempt>; outside ulw-loop use .omo/evidence/)
|
|
225
225
|
|
|
226
226
|
## Execution strategy
|
|
227
227
|
### Parallel execution waves
|
|
@@ -239,7 +239,7 @@ Your next move: <fill - e.g. approve, or run a high-accuracy review>. Full execu
|
|
|
239
239
|
Parallelization: Wave <N> | Blocked by: <...> | Blocks: <...>
|
|
240
240
|
References (executor has NO interview context - be exhaustive): <src/path:lines>
|
|
241
241
|
Acceptance criteria (agent-executable): <exact command or assertion>
|
|
242
|
-
QA scenarios (name the exact tool + invocation): happy + failure, Evidence
|
|
242
|
+
QA scenarios (name the exact tool + invocation): happy + failure, Evidence <attemptDir>/task-1-${slug}.<ext>
|
|
243
243
|
Commit: <Y/N> | <type>(<scope>): <summary>
|
|
244
244
|
|
|
245
245
|
## Final verification wave
|
package/dist/tui.js
CHANGED
|
@@ -20904,6 +20904,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20904
20904
|
},
|
|
20905
20905
|
deep: {
|
|
20906
20906
|
fallbackChain: [
|
|
20907
|
+
{
|
|
20908
|
+
providers: ["openai", "vercel"],
|
|
20909
|
+
model: "gpt-5.6-terra",
|
|
20910
|
+
variant: "xhigh"
|
|
20911
|
+
},
|
|
20907
20912
|
{
|
|
20908
20913
|
providers: ["openai", "vercel"],
|
|
20909
20914
|
model: "gpt-5.6-sol",
|
|
@@ -20967,6 +20972,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20967
20972
|
},
|
|
20968
20973
|
"unspecified-low": {
|
|
20969
20974
|
fallbackChain: [
|
|
20975
|
+
{
|
|
20976
|
+
providers: ["openai", "vercel"],
|
|
20977
|
+
model: "gpt-5.6-luna",
|
|
20978
|
+
variant: "xhigh"
|
|
20979
|
+
},
|
|
20970
20980
|
{
|
|
20971
20981
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20972
20982
|
model: "claude-sonnet-4-6"
|
|
@@ -21364,6 +21374,38 @@ var init_supplemental_entries = __esm(() => {
|
|
|
21364
21374
|
output: 128000
|
|
21365
21375
|
}
|
|
21366
21376
|
},
|
|
21377
|
+
"gpt-5.6-terra": {
|
|
21378
|
+
id: "gpt-5.6-terra",
|
|
21379
|
+
family: "gpt-mini",
|
|
21380
|
+
reasoning: true,
|
|
21381
|
+
temperature: false,
|
|
21382
|
+
toolCall: true,
|
|
21383
|
+
modalities: {
|
|
21384
|
+
input: ["text", "image", "pdf"],
|
|
21385
|
+
output: ["text"]
|
|
21386
|
+
},
|
|
21387
|
+
limit: {
|
|
21388
|
+
context: 1050000,
|
|
21389
|
+
input: 922000,
|
|
21390
|
+
output: 128000
|
|
21391
|
+
}
|
|
21392
|
+
},
|
|
21393
|
+
"gpt-5.6-luna": {
|
|
21394
|
+
id: "gpt-5.6-luna",
|
|
21395
|
+
family: "gpt-nano",
|
|
21396
|
+
reasoning: true,
|
|
21397
|
+
temperature: false,
|
|
21398
|
+
toolCall: true,
|
|
21399
|
+
modalities: {
|
|
21400
|
+
input: ["text", "image", "pdf"],
|
|
21401
|
+
output: ["text"]
|
|
21402
|
+
},
|
|
21403
|
+
limit: {
|
|
21404
|
+
context: 1050000,
|
|
21405
|
+
input: 922000,
|
|
21406
|
+
output: 128000
|
|
21407
|
+
}
|
|
21408
|
+
},
|
|
21367
21409
|
"gpt-5.5": {
|
|
21368
21410
|
id: "gpt-5.5",
|
|
21369
21411
|
family: "gpt",
|
|
@@ -21882,28 +21924,7 @@ var init_agent_display_names = __esm(() => {
|
|
|
21882
21924
|
REVERSE_DISPLAY_NAMES = Object.fromEntries(Object.entries(AGENT_DISPLAY_NAMES).map(([key, displayName]) => [displayName.toLowerCase(), key]));
|
|
21883
21925
|
});
|
|
21884
21926
|
// packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
|
|
21885
|
-
var
|
|
21886
|
-
You are working on tasks that don't fit specific categories but require moderate effort.
|
|
21887
|
-
|
|
21888
|
-
<Selection_Gate>
|
|
21889
|
-
BEFORE selecting this category, VERIFY ALL conditions:
|
|
21890
|
-
1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
|
|
21891
|
-
2. Task requires more than trivial effort but is NOT system-wide
|
|
21892
|
-
3. Scope is contained within a few files/modules
|
|
21893
|
-
|
|
21894
|
-
If task fits ANY other category, DO NOT select unspecified-low.
|
|
21895
|
-
This is NOT a default choice - it's for genuinely unclassifiable moderate-effort work.
|
|
21896
|
-
</Selection_Gate>
|
|
21897
|
-
</Category_Context>
|
|
21898
|
-
|
|
21899
|
-
<Caller_Warning>
|
|
21900
|
-
THIS CATEGORY USES A MID-TIER MODEL (claude-sonnet-4-6).
|
|
21901
|
-
|
|
21902
|
-
**PROVIDE CLEAR STRUCTURE:**
|
|
21903
|
-
1. MUST DO: Enumerate required actions explicitly
|
|
21904
|
-
2. MUST NOT DO: State forbidden actions to prevent scope creep
|
|
21905
|
-
3. EXPECTED OUTPUT: Define concrete success criteria
|
|
21906
|
-
</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
21927
|
+
var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
21907
21928
|
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
21908
21929
|
|
|
21909
21930
|
<Selection_Gate>
|
|
@@ -21919,12 +21940,6 @@ If task is unclassifiable but moderate-effort, use unspecified-low instead.
|
|
|
21919
21940
|
</Category_Context>`, ANTHROPIC_CATEGORIES;
|
|
21920
21941
|
var init_anthropic_categories = __esm(() => {
|
|
21921
21942
|
ANTHROPIC_CATEGORIES = [
|
|
21922
|
-
{
|
|
21923
|
-
name: "unspecified-low",
|
|
21924
|
-
config: { model: "anthropic/claude-sonnet-4-6" },
|
|
21925
|
-
description: "Tasks that don't fit other categories, low effort required",
|
|
21926
|
-
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
21927
|
-
},
|
|
21928
21943
|
{
|
|
21929
21944
|
name: "unspecified-high",
|
|
21930
21945
|
config: { model: "anthropic/claude-opus-4-7", variant: "max" },
|
|
@@ -22221,6 +22236,27 @@ EXPECTED OUTPUT:
|
|
|
22221
22236
|
\`\`\`
|
|
22222
22237
|
|
|
22223
22238
|
If your prompt lacks this structure, REWRITE IT before delegating.
|
|
22239
|
+
</Caller_Warning>`, UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
22240
|
+
You are working on tasks that don't fit specific categories but require moderate effort.
|
|
22241
|
+
|
|
22242
|
+
<Selection_Gate>
|
|
22243
|
+
BEFORE selecting this category, VERIFY ALL conditions:
|
|
22244
|
+
1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
|
|
22245
|
+
2. Task requires more than trivial effort but is NOT system-wide
|
|
22246
|
+
3. Scope is contained within a few files/modules
|
|
22247
|
+
|
|
22248
|
+
If task fits ANY other category, DO NOT select unspecified-low.
|
|
22249
|
+
This is NOT a default choice - it's for genuinely unclassifiable moderate-effort work.
|
|
22250
|
+
</Selection_Gate>
|
|
22251
|
+
</Category_Context>
|
|
22252
|
+
|
|
22253
|
+
<Caller_Warning>
|
|
22254
|
+
THIS CATEGORY USES A LIGHTWEIGHT MODEL (gpt-5.6-luna).
|
|
22255
|
+
|
|
22256
|
+
**PROVIDE CLEAR STRUCTURE:**
|
|
22257
|
+
1. MUST DO: Enumerate required actions explicitly
|
|
22258
|
+
2. MUST NOT DO: State forbidden actions to prevent scope creep
|
|
22259
|
+
3. EXPECTED OUTPUT: Define concrete success criteria
|
|
22224
22260
|
</Caller_Warning>`, OPENAI_CATEGORIES;
|
|
22225
22261
|
var init_openai_categories = __esm(() => {
|
|
22226
22262
|
init_types3();
|
|
@@ -22233,7 +22269,7 @@ var init_openai_categories = __esm(() => {
|
|
|
22233
22269
|
},
|
|
22234
22270
|
{
|
|
22235
22271
|
name: "deep",
|
|
22236
|
-
config: { model: "openai/gpt-5.6-
|
|
22272
|
+
config: { model: "openai/gpt-5.6-terra", variant: "xhigh" },
|
|
22237
22273
|
description: "Goal-oriented autonomous problem-solving on hairy problems requiring deep research. ONE goal + ONE deliverable per call \u2014 multiple goals must fan out as parallel `deep` calls, never bundled into one.",
|
|
22238
22274
|
promptAppend: DEEP_CATEGORY_PROMPT_APPEND,
|
|
22239
22275
|
resolvePromptAppend: resolveDeepCategoryPromptAppend
|
|
@@ -22243,6 +22279,12 @@ var init_openai_categories = __esm(() => {
|
|
|
22243
22279
|
config: { model: "openai/gpt-5.4-mini" },
|
|
22244
22280
|
description: "Trivial tasks - single file changes, typo fixes, simple modifications",
|
|
22245
22281
|
promptAppend: QUICK_CATEGORY_PROMPT_APPEND
|
|
22282
|
+
},
|
|
22283
|
+
{
|
|
22284
|
+
name: "unspecified-low",
|
|
22285
|
+
config: { model: "openai/gpt-5.6-luna", variant: "xhigh" },
|
|
22286
|
+
description: "Tasks that don't fit other categories, low effort required",
|
|
22287
|
+
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
22246
22288
|
}
|
|
22247
22289
|
];
|
|
22248
22290
|
});
|