ralphctl 0.16.0 → 0.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/README.md +1 -1
- package/dist/{cli-KZ4IYDKB.mjs → cli-CCNZ2VKB.mjs} +142 -94
- package/dist/cli.mjs +1 -1
- package/dist/manifest.json +2 -2
- package/dist/prompts/_partials/conventions-agents-md.md +5 -5
- package/dist/prompts/_partials/conventions-claude-md.md +7 -8
- package/dist/prompts/_partials/conventions-copilot-instructions.md +5 -7
- package/dist/prompts/_partials/decisions.md +1 -0
- package/dist/prompts/_partials/validation-checklist.md +5 -6
- package/dist/prompts/apply-feedback/template.md +5 -11
- package/dist/prompts/create-pr/template.md +6 -8
- package/dist/prompts/detect-scripts/template.md +11 -8
- package/dist/prompts/detect-skills/template.md +7 -6
- package/dist/prompts/distill-learnings/template.md +2 -0
- package/dist/prompts/evaluate/template.md +44 -36
- package/dist/prompts/evaluate-continuation/template.md +32 -14
- package/dist/prompts/ideate/template.md +29 -9
- package/dist/prompts/implement/template.md +57 -45
- package/dist/prompts/implement-continuation/template.md +17 -9
- package/dist/prompts/plan/template.md +16 -4
- package/dist/prompts/readiness/template.md +12 -9
- package/dist/prompts/refine/template.md +13 -17
- package/dist/skills/ralphctl-abstraction-first/SKILL.md +1 -1
- package/dist/skills/ralphctl-alignment/SKILL.md +1 -1
- package/dist/skills/ralphctl-iterative-review/SKILL.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -433,7 +433,7 @@ Run `ralphctl <command> --help` for flag-level detail.
|
|
|
433
433
|
|
|
434
434
|
**Further reading:**
|
|
435
435
|
[AI Agent Harnesses: A Field Guide](https://lukasgrigis.dev/blog/guides/agent-harnesses/) — Lukas Grigis
|
|
436
|
-
| [Harness Engineering for Coding Agent Users](https://martinfowler.com/articles/harness-engineering.html) —
|
|
436
|
+
| [Harness Engineering for Coding Agent Users](https://martinfowler.com/articles/harness-engineering.html) — Birgitta Böckeler, martinfowler.com (April 2026)
|
|
437
437
|
| [Harness Design for Long-Running Application Development](https://www.anthropic.com/engineering/harness-design-long-running-apps) — Anthropic Engineering
|
|
438
438
|
|
|
439
439
|
---
|
|
@@ -624,6 +624,7 @@ var CLAUDE_MODELS = [
|
|
|
624
624
|
"claude-sonnet-5",
|
|
625
625
|
"claude-opus-4-8",
|
|
626
626
|
"claude-opus-4-8[1m]",
|
|
627
|
+
"claude-opus-5",
|
|
627
628
|
"claude-fable-5",
|
|
628
629
|
"claude-fable-5[1m]"
|
|
629
630
|
];
|
|
@@ -631,12 +632,12 @@ var isClaudeModel = (s) => CLAUDE_MODELS.includes(s);
|
|
|
631
632
|
|
|
632
633
|
// src/domain/value/settings-models/codex.ts
|
|
633
634
|
var CODEX_MODELS = [
|
|
635
|
+
"gpt-5.6-sol",
|
|
636
|
+
"gpt-5.6-terra",
|
|
637
|
+
"gpt-5.6-luna",
|
|
634
638
|
"gpt-5.5",
|
|
635
639
|
"gpt-5.4",
|
|
636
640
|
"gpt-5.4-mini",
|
|
637
|
-
"gpt-5.3-codex-spark",
|
|
638
|
-
"gpt-5.3-codex",
|
|
639
|
-
"gpt-5.2",
|
|
640
641
|
"codex-auto-review"
|
|
641
642
|
];
|
|
642
643
|
var isCodexModel = (s) => CODEX_MODELS.includes(s);
|
|
@@ -650,13 +651,17 @@ var COPILOT_MODELS = [
|
|
|
650
651
|
"gpt-5.4-mini",
|
|
651
652
|
"gpt-5.4-nano",
|
|
652
653
|
"gpt-5.5",
|
|
654
|
+
"gpt-5.6-sol",
|
|
655
|
+
"gpt-5.6-terra",
|
|
656
|
+
"gpt-5.6-luna",
|
|
653
657
|
// Anthropic
|
|
654
658
|
"claude-haiku-4.5",
|
|
655
659
|
"claude-opus-4.5",
|
|
656
660
|
"claude-opus-4.6",
|
|
657
|
-
"claude-opus-4.6-fast",
|
|
658
661
|
"claude-opus-4.7",
|
|
659
662
|
"claude-opus-4.8",
|
|
663
|
+
"claude-opus-4.8-fast",
|
|
664
|
+
"claude-opus-5",
|
|
660
665
|
"claude-fable-5",
|
|
661
666
|
"claude-sonnet-4.5",
|
|
662
667
|
"claude-sonnet-4.6",
|
|
@@ -666,8 +671,11 @@ var COPILOT_MODELS = [
|
|
|
666
671
|
"gemini-3-flash",
|
|
667
672
|
"gemini-3.1-pro-preview",
|
|
668
673
|
"gemini-3.5-flash",
|
|
674
|
+
"gemini-3.6-flash",
|
|
669
675
|
// Microsoft
|
|
670
676
|
"mai-code-1-flash",
|
|
677
|
+
// Moonshot
|
|
678
|
+
"kimi-k2.7-code",
|
|
671
679
|
// Fine-tuned
|
|
672
680
|
"raptor-mini-preview"
|
|
673
681
|
];
|
|
@@ -680,14 +688,16 @@ var FLOW_IDS = ["refine", "plan", "implement", "readiness", "ideate", "createPr"
|
|
|
680
688
|
var CURRENT_SCHEMA_VERSION = 2;
|
|
681
689
|
var LogLevelSchema = z.enum(["silent", "debug", "info", "warn", "error"]);
|
|
682
690
|
var PROVIDER_CLAUDE_CODE = "claude-code";
|
|
691
|
+
var PROVIDER_GITHUB_COPILOT = "github-copilot";
|
|
692
|
+
var PROVIDER_OPENAI_CODEX = "openai-codex";
|
|
683
693
|
var AiProviderSchema = z.enum([
|
|
684
694
|
PROVIDER_CLAUDE_CODE,
|
|
685
|
-
|
|
686
|
-
|
|
695
|
+
PROVIDER_GITHUB_COPILOT,
|
|
696
|
+
PROVIDER_OPENAI_CODEX
|
|
687
697
|
]);
|
|
688
698
|
var ClaudeEffortSchema = z.enum(["low", "medium", "high", "xhigh", "max"]);
|
|
689
699
|
var CopilotEffortSchema = z.enum(["none", "low", "medium", "high", "xhigh", "max"]);
|
|
690
|
-
var CodexEffortSchema = z.enum(["
|
|
700
|
+
var CodexEffortSchema = z.enum(["low", "medium", "high", "xhigh", "max", "ultra"]);
|
|
691
701
|
var GlobalEffortSchema = z.enum(["low", "medium", "high", "xhigh", "max"]);
|
|
692
702
|
var CustomModelStringSchema = z.string().trim().min(1, "model id must be a non-empty trimmed string");
|
|
693
703
|
var ClaudeModelSchema = z.union([z.enum(CLAUDE_MODELS), CustomModelStringSchema]);
|
|
@@ -699,12 +709,12 @@ var ClaudeFlowRowSchema = z.object({
|
|
|
699
709
|
effort: ClaudeEffortSchema.optional()
|
|
700
710
|
});
|
|
701
711
|
var CopilotFlowRowSchema = z.object({
|
|
702
|
-
provider: z.literal(
|
|
712
|
+
provider: z.literal(PROVIDER_GITHUB_COPILOT),
|
|
703
713
|
model: CopilotModelSchema,
|
|
704
714
|
effort: CopilotEffortSchema.optional()
|
|
705
715
|
});
|
|
706
716
|
var CodexFlowRowSchema = z.object({
|
|
707
|
-
provider: z.literal(
|
|
717
|
+
provider: z.literal(PROVIDER_OPENAI_CODEX),
|
|
708
718
|
model: CodexModelSchema,
|
|
709
719
|
effort: CodexEffortSchema.optional()
|
|
710
720
|
});
|
|
@@ -739,35 +749,43 @@ var seedLegacyCreatePrRow = (ai) => {
|
|
|
739
749
|
if (!("provider" in refine)) return ai;
|
|
740
750
|
return { ...aiObj, createPr: { ...refine } };
|
|
741
751
|
};
|
|
742
|
-
var
|
|
743
|
-
|
|
744
|
-
|
|
752
|
+
var RETIRED_MODEL_REMAPS = [
|
|
753
|
+
{ provider: PROVIDER_CLAUDE_CODE, from: "claude-opus-4-7", to: "claude-opus-4-8" },
|
|
754
|
+
{ provider: PROVIDER_GITHUB_COPILOT, from: "claude-opus-4.6-fast", to: "claude-opus-4.8-fast" },
|
|
755
|
+
{ provider: PROVIDER_OPENAI_CODEX, from: "gpt-5.2", to: "gpt-5.5" },
|
|
756
|
+
{ provider: PROVIDER_OPENAI_CODEX, from: "gpt-5.3-codex", to: "gpt-5.5" },
|
|
757
|
+
{ provider: PROVIDER_OPENAI_CODEX, from: "gpt-5.3-codex-spark", to: "gpt-5.5" }
|
|
758
|
+
];
|
|
759
|
+
var RETIRED_CODEX_EFFORT = "minimal";
|
|
760
|
+
var migrateStaleRow = (row) => {
|
|
745
761
|
if (typeof row !== "object" || row === null) return row;
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
762
|
+
let next = row;
|
|
763
|
+
const remap = RETIRED_MODEL_REMAPS.find((r) => next["provider"] === r.provider && next["model"] === r.from);
|
|
764
|
+
if (remap !== void 0) next = { ...next, model: remap.to };
|
|
765
|
+
if (next["provider"] === PROVIDER_OPENAI_CODEX && next["effort"] === RETIRED_CODEX_EFFORT) {
|
|
766
|
+
next = { ...next, effort: "low" };
|
|
749
767
|
}
|
|
750
|
-
return
|
|
768
|
+
return next;
|
|
751
769
|
};
|
|
752
|
-
var
|
|
770
|
+
var migrateStaleAiRows = (ai) => {
|
|
753
771
|
if (typeof ai !== "object" || ai === null) return ai;
|
|
754
772
|
const aiObj = ai;
|
|
755
773
|
const next = { ...aiObj };
|
|
756
774
|
for (const flow of ["refine", "plan", "readiness", "ideate", "createPr"]) {
|
|
757
|
-
if (flow in next) next[flow] =
|
|
775
|
+
if (flow in next) next[flow] = migrateStaleRow(next[flow]);
|
|
758
776
|
}
|
|
759
777
|
const implement = next["implement"];
|
|
760
778
|
if (typeof implement === "object" && implement !== null) {
|
|
761
779
|
const implObj = implement;
|
|
762
780
|
next["implement"] = {
|
|
763
781
|
...implObj,
|
|
764
|
-
generator:
|
|
765
|
-
evaluator:
|
|
782
|
+
generator: migrateStaleRow(implObj["generator"]),
|
|
783
|
+
evaluator: migrateStaleRow(implObj["evaluator"])
|
|
766
784
|
};
|
|
767
785
|
}
|
|
768
786
|
return next;
|
|
769
787
|
};
|
|
770
|
-
var promoteLegacyAiRows = (ai) =>
|
|
788
|
+
var promoteLegacyAiRows = (ai) => migrateStaleAiRows(seedLegacyCreatePrRow(promoteLegacyImplementRow(ai)));
|
|
771
789
|
var healHarnessCrossKnobs = (harness) => {
|
|
772
790
|
if (typeof harness !== "object" || harness === null) return harness;
|
|
773
791
|
const h = harness;
|
|
@@ -993,9 +1011,10 @@ var uniqueProvidersFromAi = (ai) => {
|
|
|
993
1011
|
|
|
994
1012
|
// src/business/settings/defaults.ts
|
|
995
1013
|
var CLAUDE_SONNET = "claude-sonnet-5";
|
|
996
|
-
var CLAUDE_OPUS = "claude-opus-
|
|
1014
|
+
var CLAUDE_OPUS = "claude-opus-5";
|
|
997
1015
|
var GPT_5_MINI = "gpt-5-mini";
|
|
998
1016
|
var GPT_5_4_MINI = "gpt-5.4-mini";
|
|
1017
|
+
var GPT_5_6_SOL = "gpt-5.6-sol";
|
|
999
1018
|
var DEFAULT_MODELS_BY_PROVIDER = {
|
|
1000
1019
|
"claude-code": {
|
|
1001
1020
|
refine: CLAUDE_SONNET,
|
|
@@ -1017,13 +1036,12 @@ var DEFAULT_MODELS_BY_PROVIDER = {
|
|
|
1017
1036
|
},
|
|
1018
1037
|
"openai-codex": {
|
|
1019
1038
|
refine: GPT_5_4_MINI,
|
|
1020
|
-
plan:
|
|
1021
|
-
// `gpt-5.
|
|
1022
|
-
//
|
|
1023
|
-
|
|
1024
|
-
implement: "gpt-5.5",
|
|
1039
|
+
plan: GPT_5_6_SOL,
|
|
1040
|
+
// `gpt-5.6-sol` is the codex flagship (codex CLI ≥ 0.145); it tops the Codex escalation
|
|
1041
|
+
// ladder, so the reset-to-codex implement default and the ladder top stay aligned.
|
|
1042
|
+
implement: GPT_5_6_SOL,
|
|
1025
1043
|
readiness: GPT_5_4_MINI,
|
|
1026
|
-
ideate:
|
|
1044
|
+
ideate: GPT_5_6_SOL,
|
|
1027
1045
|
createPr: GPT_5_4_MINI
|
|
1028
1046
|
}
|
|
1029
1047
|
};
|
|
@@ -1045,7 +1063,7 @@ var DEFAULT_SETTINGS = {
|
|
|
1045
1063
|
...defaultAiSettingsForProvider("claude-code"),
|
|
1046
1064
|
implement: {
|
|
1047
1065
|
generator: { provider: "claude-code", model: CLAUDE_OPUS },
|
|
1048
|
-
evaluator: { provider: "openai-codex", model:
|
|
1066
|
+
evaluator: { provider: "openai-codex", model: GPT_5_6_SOL }
|
|
1049
1067
|
}
|
|
1050
1068
|
},
|
|
1051
1069
|
harness: {
|
|
@@ -3038,10 +3056,10 @@ var resolveWritableRoots = (session) => {
|
|
|
3038
3056
|
};
|
|
3039
3057
|
|
|
3040
3058
|
// src/domain/value/settings-models/suspended-models.ts
|
|
3041
|
-
var SUSPENDED_MODELS = [
|
|
3059
|
+
var SUSPENDED_MODELS = [];
|
|
3042
3060
|
var isSuspendedModel = (s) => SUSPENDED_MODELS.includes(s);
|
|
3043
3061
|
var SUSPENSION_NOTE = "suspended";
|
|
3044
|
-
var suspendedModelMessage = (model) => `'${model}' is temporarily suspended by
|
|
3062
|
+
var suspendedModelMessage = (model) => `'${model}' is temporarily suspended by its provider \u2014 pick another model until access is restored`;
|
|
3045
3063
|
|
|
3046
3064
|
// src/integration/ai/providers/_engine/bounded-tail.ts
|
|
3047
3065
|
var STDERR_TAIL_CAP = 16384;
|
|
@@ -3494,6 +3512,8 @@ var CONTEXT_WINDOW = {
|
|
|
3494
3512
|
// Sonnet 5 always runs at its native 1M window on the Anthropic API — no `[1m]` selector, so
|
|
3495
3513
|
// the bare id carries the 1M figure directly.
|
|
3496
3514
|
"claude-sonnet-5": 1e6,
|
|
3515
|
+
// Opus 5 — natively 1M in Claude Code — no `[1m]` selector; the bare id carries the figure.
|
|
3516
|
+
"claude-opus-5": 1e6,
|
|
3497
3517
|
// `[1m]` is Claude Code's 1M-token long-context selector — the window IS the id suffix.
|
|
3498
3518
|
"claude-opus-4-8[1m]": 1e6,
|
|
3499
3519
|
"claude-fable-5[1m]": 1e6
|
|
@@ -6004,7 +6024,7 @@ var createNpmVersionChecker = (deps) => {
|
|
|
6004
6024
|
// package.json
|
|
6005
6025
|
var package_default = {
|
|
6006
6026
|
name: "ralphctl",
|
|
6007
|
-
version: "0.
|
|
6027
|
+
version: "0.17.0",
|
|
6008
6028
|
description: "Agent harness for long-running AI coding tasks \u2014 orchestrates Claude Code, GitHub Copilot, and OpenAI Codex across repositories",
|
|
6009
6029
|
homepage: "https://github.com/lukas-grigis/ralphctl",
|
|
6010
6030
|
type: "module",
|
|
@@ -6120,18 +6140,25 @@ var CLI_METADATA = {
|
|
|
6120
6140
|
|
|
6121
6141
|
// src/business/task/escalation-map.ts
|
|
6122
6142
|
var DEFAULT_ESCALATION_MAP = {
|
|
6123
|
-
// Claude (Claude-Code
|
|
6143
|
+
// Claude (Claude-Code dash-form) — Haiku → Sonnet 5 → Opus 5; legacy tiers chain through their
|
|
6144
|
+
// own generation (Sonnet 4.6 → Opus 4.8 → Opus 5) and converge at the flagship.
|
|
6124
6145
|
"claude-haiku-4-5": "claude-sonnet-5",
|
|
6125
|
-
"claude-sonnet-5": "claude-opus-
|
|
6146
|
+
"claude-sonnet-5": "claude-opus-5",
|
|
6126
6147
|
"claude-sonnet-4-6": "claude-opus-4-8",
|
|
6127
|
-
|
|
6148
|
+
"claude-opus-4-8": "claude-opus-5",
|
|
6149
|
+
// Claude (Copilot dot-form) — Haiku → Sonnet 4.6 → Opus 4.8. Opus 4.8 is deliberately the
|
|
6150
|
+
// dot-form top: claude-opus-5 is plan-gated on Copilot, so the default ladder never steers a
|
|
6151
|
+
// mid-task spawn into a model many accounts cannot use (add a rung via escalationMap to opt in).
|
|
6128
6152
|
"claude-haiku-4.5": "claude-sonnet-4.6",
|
|
6129
6153
|
"claude-sonnet-4.6": "claude-opus-4.8",
|
|
6130
|
-
// Copilot/Codex GPT —
|
|
6131
|
-
//
|
|
6154
|
+
// Copilot/Codex GPT — minis step to the 5.5 full tier; the 5.5/5.4 generation chains into the
|
|
6155
|
+
// 5.6 family; within 5.6, luna → terra → sol (sol is the flagship top rung).
|
|
6132
6156
|
"gpt-5-mini": "gpt-5.5",
|
|
6133
6157
|
"gpt-5.4-mini": "gpt-5.5",
|
|
6134
|
-
"gpt-5.4": "gpt-5.5"
|
|
6158
|
+
"gpt-5.4": "gpt-5.5",
|
|
6159
|
+
"gpt-5.5": "gpt-5.6-sol",
|
|
6160
|
+
"gpt-5.6-luna": "gpt-5.6-terra",
|
|
6161
|
+
"gpt-5.6-terra": "gpt-5.6-sol"
|
|
6135
6162
|
};
|
|
6136
6163
|
var mergeEscalationMap = (user) => ({
|
|
6137
6164
|
...DEFAULT_ESCALATION_MAP,
|
|
@@ -6155,7 +6182,9 @@ var escalationLadderCyclicFrom = (map, start) => {
|
|
|
6155
6182
|
return false;
|
|
6156
6183
|
};
|
|
6157
6184
|
var EFFORT_ESCALATION_TARGET = "high";
|
|
6185
|
+
var CODEX_EFFORT_ESCALATION_TARGET = "xhigh";
|
|
6158
6186
|
var EFFORT_AT_OR_ABOVE_TARGET = /* @__PURE__ */ new Set(["high", "xhigh", "max"]);
|
|
6187
|
+
var CODEX_EFFORT_AT_OR_ABOVE_TARGET = /* @__PURE__ */ new Set(["xhigh", "max", "ultra"]);
|
|
6159
6188
|
var EFFORT_CAPABLE_PROVIDERS = /* @__PURE__ */ new Set([
|
|
6160
6189
|
"claude-code",
|
|
6161
6190
|
"github-copilot",
|
|
@@ -6179,8 +6208,12 @@ var claudeEffortRung = (model, currentEffort) => {
|
|
|
6179
6208
|
var nextEffortRung = (provider, model, currentEffort) => {
|
|
6180
6209
|
if (provider === void 0 || !EFFORT_CAPABLE_PROVIDERS.has(provider)) return void 0;
|
|
6181
6210
|
if (provider === "claude-code") return claudeEffortRung(model, currentEffort);
|
|
6182
|
-
if (
|
|
6183
|
-
|
|
6211
|
+
if (provider === "github-copilot") {
|
|
6212
|
+
if (currentEffort !== void 0 && EFFORT_AT_OR_ABOVE_TARGET.has(currentEffort)) return void 0;
|
|
6213
|
+
return EFFORT_ESCALATION_TARGET;
|
|
6214
|
+
}
|
|
6215
|
+
if (currentEffort !== void 0 && CODEX_EFFORT_AT_OR_ABOVE_TARGET.has(currentEffort)) return void 0;
|
|
6216
|
+
return CODEX_EFFORT_ESCALATION_TARGET;
|
|
6184
6217
|
};
|
|
6185
6218
|
|
|
6186
6219
|
// src/integration/ai/skills/_engine/filesystem-skills-adapter.ts
|
|
@@ -13978,7 +14011,7 @@ var resolveEffortForRow = (row, globalEffort) => {
|
|
|
13978
14011
|
return _floorForProvider(globalEffort, row.provider);
|
|
13979
14012
|
};
|
|
13980
14013
|
var clampEffortToProvider = (effort, provider) => {
|
|
13981
|
-
if (provider === "openai-codex" &&
|
|
14014
|
+
if (provider === "openai-codex" && effort === "max") return "xhigh";
|
|
13982
14015
|
return effort;
|
|
13983
14016
|
};
|
|
13984
14017
|
var _floorForProvider = (effort, provider) => clampEffortToProvider(effort, provider);
|
|
@@ -16420,7 +16453,12 @@ var renderPlateauDirectiveSection = (plateauBreak) => {
|
|
|
16420
16453
|
"Step back and rethink. Re-read the task contract and the prior critique, question the assumption",
|
|
16421
16454
|
"that led the earlier attempts astray, and implement a **fundamentally different** solution \u2014 a",
|
|
16422
16455
|
"different design, data flow, or code path. Then verify the failing criteria directly before",
|
|
16423
|
-
"signalling completion."
|
|
16456
|
+
"signalling completion.",
|
|
16457
|
+
"",
|
|
16458
|
+
"Before you choose that different approach, name which failure mode you were stuck in \u2014",
|
|
16459
|
+
"re-exploring code you already understood, looping on the same failing edit, over-polishing",
|
|
16460
|
+
"criteria that already pass, or fixing the wrong",
|
|
16461
|
+
'location entirely \u2014 then change that specific behaviour, not just "try something different."'
|
|
16424
16462
|
].join("\n");
|
|
16425
16463
|
};
|
|
16426
16464
|
|
|
@@ -18501,7 +18539,7 @@ var composeCriteriaHistory = (input) => {
|
|
|
18501
18539
|
var requireNonEmpty = (field, message) => (v) => v.trim().length === 0 ? Result.error(new ValidationError({ field, value: v, message })) : Result.ok(v);
|
|
18502
18540
|
var implementPromptDef = {
|
|
18503
18541
|
templateName: "implement",
|
|
18504
|
-
description: "One-shot task execution. The agent reads the task body
|
|
18542
|
+
description: "One-shot task execution. The agent reads the task body and emits harness signals; the harness runs the verify script as the post-task gate and snapshots the signals into progress.md.",
|
|
18505
18543
|
parameters: {
|
|
18506
18544
|
taskName: {
|
|
18507
18545
|
placeholder: "TASK_NAME",
|
|
@@ -18732,7 +18770,7 @@ var generatorExampleSignals = [
|
|
|
18732
18770
|
appliesTo: "config / io layer",
|
|
18733
18771
|
timestamp: EXAMPLE_TS3
|
|
18734
18772
|
},
|
|
18735
|
-
{ type: "task-verified", output: "$
|
|
18773
|
+
{ type: "task-verified", output: "$ <project test command>\n... 42 passed", timestamp: EXAMPLE_TS3 },
|
|
18736
18774
|
{
|
|
18737
18775
|
type: COMMIT_MESSAGE_KIND,
|
|
18738
18776
|
subject: "feat(foo): add helper for bar",
|
|
@@ -20399,7 +20437,7 @@ var evaluatorExampleSignals = [
|
|
|
20399
20437
|
dimension: "correctness",
|
|
20400
20438
|
passed: false,
|
|
20401
20439
|
finding: "C1 command exited 1: empty-input test failed at src/foo.ts:23",
|
|
20402
|
-
executionEvidence: "
|
|
20440
|
+
executionEvidence: "<project test command>\n \u2717 handles empty input (expected 400, got 500)\n 1 failing"
|
|
20403
20441
|
},
|
|
20404
20442
|
{ dimension: "completeness", passed: true, finding: "all declared steps shipped" },
|
|
20405
20443
|
{ dimension: "safety", passed: true, finding: "inputs validated at the request boundary" },
|
|
@@ -20407,7 +20445,11 @@ var evaluatorExampleSignals = [
|
|
|
20407
20445
|
{ dimension: "robustness", passed: true, finding: "error path retries the write once before surfacing" }
|
|
20408
20446
|
],
|
|
20409
20447
|
criteria: [
|
|
20410
|
-
{
|
|
20448
|
+
{
|
|
20449
|
+
id: "C1",
|
|
20450
|
+
passed: false,
|
|
20451
|
+
evidence: "<project test command> exited 1 \u2014 empty-input case failed at src/foo.ts:23"
|
|
20452
|
+
},
|
|
20411
20453
|
{ id: "C2", passed: true, evidence: "request boundary validates input at src/foo.ts:11" }
|
|
20412
20454
|
],
|
|
20413
20455
|
critique: "Correctness: add edge-case handling for empty input at src/foo.ts:23.",
|
|
@@ -27833,7 +27875,14 @@ var readinessPromptDef = {
|
|
|
27833
27875
|
partials: {
|
|
27834
27876
|
HARNESS_CONTEXT: "harness-context"
|
|
27835
27877
|
},
|
|
27836
|
-
expectedSignals: [
|
|
27878
|
+
expectedSignals: [
|
|
27879
|
+
"agents-md-proposal",
|
|
27880
|
+
"setup-skill-proposal",
|
|
27881
|
+
"verify-skill-proposal",
|
|
27882
|
+
"skill-suggestions",
|
|
27883
|
+
"note",
|
|
27884
|
+
"learning"
|
|
27885
|
+
]
|
|
27837
27886
|
};
|
|
27838
27887
|
var renderCurrentTool = (tool) => tool;
|
|
27839
27888
|
var renderExistingContextFile = (body) => {
|
|
@@ -27958,20 +28007,20 @@ var readinessExampleSignals = [
|
|
|
27958
28007
|
{
|
|
27959
28008
|
type: "agents-md-proposal",
|
|
27960
28009
|
tag: "claude-md",
|
|
27961
|
-
content: "# Project Context\n\n## Build & Run\n\n
|
|
28010
|
+
content: "# Project Context\n\n## Build & Run\n\n`<dev server command>` \u2014 runs the dev server.",
|
|
27962
28011
|
timestamp: EXAMPLE_TS6
|
|
27963
28012
|
},
|
|
27964
28013
|
{
|
|
27965
28014
|
type: "setup-skill-proposal",
|
|
27966
|
-
content: "# Setup\n\nRun
|
|
28015
|
+
content: "# Setup\n\nRun `<install command>` to install dependencies.",
|
|
27967
28016
|
timestamp: EXAMPLE_TS6
|
|
27968
28017
|
},
|
|
27969
28018
|
{
|
|
27970
28019
|
type: "verify-skill-proposal",
|
|
27971
|
-
content: "# Verify\n\nRun
|
|
28020
|
+
content: "# Verify\n\nRun `<verify command>` (typecheck + lint + test).",
|
|
27972
28021
|
timestamp: EXAMPLE_TS6
|
|
27973
28022
|
},
|
|
27974
|
-
{ type: "skill-suggestions", names: ["typescript-strict", "
|
|
28023
|
+
{ type: "skill-suggestions", names: ["typescript-strict", "code-style-conventions"], timestamp: EXAMPLE_TS6 }
|
|
27975
28024
|
];
|
|
27976
28025
|
var readinessOutputContract = {
|
|
27977
28026
|
schemaVersion: 1,
|
|
@@ -28287,8 +28336,7 @@ var resolveEffortForRow2 = (ai, flow) => {
|
|
|
28287
28336
|
if (row.effort !== void 0) return row.effort;
|
|
28288
28337
|
const globalEffort = ai.effort;
|
|
28289
28338
|
if (globalEffort === void 0) return void 0;
|
|
28290
|
-
|
|
28291
|
-
return globalEffort;
|
|
28339
|
+
return clampEffortToProvider(globalEffort, row.provider);
|
|
28292
28340
|
};
|
|
28293
28341
|
var PROVIDER_INFRASTRUCTURE_ERROR_CODES = /* @__PURE__ */ new Set([ErrorCode.Probe, ErrorCode.RateLimit]);
|
|
28294
28342
|
var wrapProviderContinue = (eventBus, provider, inner) => ({
|
|
@@ -28564,17 +28612,17 @@ var EXAMPLE_TS7 = "2026-05-22T10:00:00.000Z";
|
|
|
28564
28612
|
var EXAMPLE_SIGNALS2 = [
|
|
28565
28613
|
{
|
|
28566
28614
|
type: SETUP_SKILL_PROPOSAL,
|
|
28567
|
-
content: "This repo pins tool versions with mise. Before editing anything, run mise install to activate the exact versions declared in mise.toml. Then run the project install command documented in
|
|
28615
|
+
content: "This repo pins tool versions with mise. Before editing anything, run mise install to activate the exact versions declared in mise.toml. Then run the project install command documented in the coding-agent context file to hydrate the dependency tree.",
|
|
28568
28616
|
timestamp: EXAMPLE_TS7
|
|
28569
28617
|
},
|
|
28570
28618
|
{
|
|
28571
28619
|
type: VERIFY_SKILL_PROPOSAL,
|
|
28572
|
-
content: "Verification runs three gates in sequence documented in
|
|
28620
|
+
content: "Verification runs three gates in sequence documented in the coding-agent context file: typecheck, lint, then tests. A failure in any gate stops the chain; read the first failing gate output \u2014 later gates have not run yet.",
|
|
28573
28621
|
timestamp: EXAMPLE_TS7
|
|
28574
28622
|
},
|
|
28575
28623
|
{
|
|
28576
28624
|
type: "note",
|
|
28577
|
-
text: "Skills authored from
|
|
28625
|
+
text: "Skills authored from the coding-agent context file and mise.toml.",
|
|
28578
28626
|
timestamp: EXAMPLE_TS7
|
|
28579
28627
|
}
|
|
28580
28628
|
];
|
|
@@ -29024,23 +29072,23 @@ var wrapLegacyArray8 = (raw) => {
|
|
|
29024
29072
|
};
|
|
29025
29073
|
var EXAMPLE_TS8 = "2026-05-22T10:00:00.000Z";
|
|
29026
29074
|
var EXAMPLE_SIGNALS3 = [
|
|
29027
|
-
{ type: "setup-script", command: "
|
|
29075
|
+
{ type: "setup-script", command: "<tool> install", timestamp: EXAMPLE_TS8 },
|
|
29028
29076
|
{
|
|
29029
29077
|
type: "verify-script",
|
|
29030
|
-
command: "
|
|
29078
|
+
command: "<tool> typecheck && <tool> lint && <tool> test",
|
|
29031
29079
|
timestamp: EXAMPLE_TS8
|
|
29032
29080
|
},
|
|
29033
29081
|
{
|
|
29034
29082
|
type: "verify-gates",
|
|
29035
29083
|
gates: [
|
|
29036
|
-
{ pathPrefix: "services/api/", command: "
|
|
29037
|
-
{ pathPrefix: "services/web/", command: "
|
|
29084
|
+
{ pathPrefix: "services/api/", command: "<tool> --filter api test" },
|
|
29085
|
+
{ pathPrefix: "services/web/", command: "<tool> --filter web test" }
|
|
29038
29086
|
],
|
|
29039
29087
|
timestamp: EXAMPLE_TS8
|
|
29040
29088
|
},
|
|
29041
29089
|
{
|
|
29042
29090
|
type: "note",
|
|
29043
|
-
text: "Commands lifted verbatim from
|
|
29091
|
+
text: "Commands lifted verbatim from the coding-agent context file.",
|
|
29044
29092
|
timestamp: EXAMPLE_TS8
|
|
29045
29093
|
}
|
|
29046
29094
|
];
|
|
@@ -30848,7 +30896,7 @@ var evaluateTriggers = (triggers, inputs) => {
|
|
|
30848
30896
|
var PROVIDER_EFFORT_LEVELS = {
|
|
30849
30897
|
"claude-code": ["low", "medium", "high", "xhigh", "max"],
|
|
30850
30898
|
"github-copilot": ["none", "low", "medium", "high", "xhigh", "max"],
|
|
30851
|
-
"openai-codex": ["
|
|
30899
|
+
"openai-codex": ["low", "medium", "high", "xhigh", "max", "ultra"]
|
|
30852
30900
|
};
|
|
30853
30901
|
|
|
30854
30902
|
// src/application/ui/tui/views/flows-customize-picker.ts
|
|
@@ -36483,16 +36531,18 @@ var isPresetName = (raw) => PRESET_NAMES.includes(raw);
|
|
|
36483
36531
|
var CLAUDE = "claude-code";
|
|
36484
36532
|
var COPILOT = "github-copilot";
|
|
36485
36533
|
var CODEX = "openai-codex";
|
|
36486
|
-
var OPUS = "claude-opus-
|
|
36534
|
+
var OPUS = "claude-opus-5";
|
|
36487
36535
|
var SONNET = "claude-sonnet-5";
|
|
36488
36536
|
var HAIKU = "claude-haiku-4-5";
|
|
36489
36537
|
var COPILOT_OPUS = "claude-opus-4.8";
|
|
36490
36538
|
var COPILOT_SONNET = "claude-sonnet-4.6";
|
|
36491
36539
|
var GPT_5_MINI2 = "gpt-5-mini";
|
|
36492
36540
|
var GPT_5_4_MINI2 = "gpt-5.4-mini";
|
|
36541
|
+
var GPT_5_6_SOL2 = "gpt-5.6-sol";
|
|
36542
|
+
var GPT_5_6_TERRA = "gpt-5.6-terra";
|
|
36493
36543
|
var MIXED = {
|
|
36494
36544
|
effort: "high",
|
|
36495
|
-
refine: { provider: CODEX, model:
|
|
36545
|
+
refine: { provider: CODEX, model: GPT_5_6_SOL2 },
|
|
36496
36546
|
plan: { provider: COPILOT, model: COPILOT_SONNET, effort: "xhigh" },
|
|
36497
36547
|
implement: {
|
|
36498
36548
|
generator: { provider: CLAUDE, model: OPUS, effort: "xhigh" },
|
|
@@ -36530,16 +36580,14 @@ var COPILOT_ONLY = {
|
|
|
36530
36580
|
};
|
|
36531
36581
|
var CODEX_ONLY = {
|
|
36532
36582
|
effort: "high",
|
|
36533
|
-
refine: { provider: CODEX, model:
|
|
36534
|
-
plan: { provider: CODEX, model:
|
|
36583
|
+
refine: { provider: CODEX, model: GPT_5_6_TERRA },
|
|
36584
|
+
plan: { provider: CODEX, model: GPT_5_6_SOL2, effort: "xhigh" },
|
|
36535
36585
|
implement: {
|
|
36536
|
-
|
|
36537
|
-
|
|
36538
|
-
generator: { provider: CODEX, model: "gpt-5.5", effort: "high" },
|
|
36539
|
-
evaluator: { provider: CODEX, model: "gpt-5.5", effort: "high" }
|
|
36586
|
+
generator: { provider: CODEX, model: GPT_5_6_SOL2, effort: "xhigh" },
|
|
36587
|
+
evaluator: { provider: CODEX, model: GPT_5_6_SOL2, effort: "xhigh" }
|
|
36540
36588
|
},
|
|
36541
36589
|
readiness: { provider: CODEX, model: GPT_5_4_MINI2, effort: "medium" },
|
|
36542
|
-
ideate: { provider: CODEX, model:
|
|
36590
|
+
ideate: { provider: CODEX, model: GPT_5_6_SOL2 },
|
|
36543
36591
|
createPr: { provider: CODEX, model: GPT_5_4_MINI2 }
|
|
36544
36592
|
};
|
|
36545
36593
|
var MIXED_ECONOMIC = {
|
|
@@ -36581,13 +36629,13 @@ var COPILOT_ECONOMIC = {
|
|
|
36581
36629
|
var CODEX_ECONOMIC = {
|
|
36582
36630
|
effort: "high",
|
|
36583
36631
|
refine: { provider: CODEX, model: GPT_5_4_MINI2 },
|
|
36584
|
-
plan: { provider: CODEX, model:
|
|
36632
|
+
plan: { provider: CODEX, model: GPT_5_6_TERRA, effort: "high" },
|
|
36585
36633
|
implement: {
|
|
36586
|
-
generator: { provider: CODEX, model:
|
|
36587
|
-
evaluator: { provider: CODEX, model:
|
|
36634
|
+
generator: { provider: CODEX, model: GPT_5_6_TERRA, effort: "high" },
|
|
36635
|
+
evaluator: { provider: CODEX, model: GPT_5_6_TERRA, effort: "high" }
|
|
36588
36636
|
},
|
|
36589
36637
|
readiness: { provider: CODEX, model: GPT_5_4_MINI2, effort: "medium" },
|
|
36590
|
-
ideate: { provider: CODEX, model:
|
|
36638
|
+
ideate: { provider: CODEX, model: GPT_5_6_TERRA },
|
|
36591
36639
|
createPr: { provider: CODEX, model: GPT_5_4_MINI2 }
|
|
36592
36640
|
};
|
|
36593
36641
|
var CLAUDE_STRONG_GATE = {
|
|
@@ -36631,14 +36679,15 @@ var COPILOT_STRONG_GATE = {
|
|
|
36631
36679
|
var CODEX_STRONG_GATE = {
|
|
36632
36680
|
effort: "high",
|
|
36633
36681
|
refine: { provider: CODEX, model: GPT_5_4_MINI2 },
|
|
36634
|
-
plan: { provider: CODEX, model:
|
|
36682
|
+
plan: { provider: CODEX, model: GPT_5_6_SOL2, effort: "xhigh" },
|
|
36635
36683
|
implement: {
|
|
36636
|
-
// Narrowest gate of the family:
|
|
36637
|
-
|
|
36638
|
-
|
|
36684
|
+
// Narrowest gate of the family: terra author climbs the single default-ladder rung to the
|
|
36685
|
+
// sol gate.
|
|
36686
|
+
generator: { provider: CODEX, model: GPT_5_6_TERRA, effort: "high" },
|
|
36687
|
+
evaluator: { provider: CODEX, model: GPT_5_6_SOL2, effort: "xhigh" }
|
|
36639
36688
|
},
|
|
36640
36689
|
readiness: { provider: CODEX, model: GPT_5_4_MINI2, effort: "medium" },
|
|
36641
|
-
ideate: { provider: CODEX, model:
|
|
36690
|
+
ideate: { provider: CODEX, model: GPT_5_6_SOL2 },
|
|
36642
36691
|
createPr: { provider: CODEX, model: GPT_5_4_MINI2 }
|
|
36643
36692
|
};
|
|
36644
36693
|
var MIXED_FAST = {
|
|
@@ -36679,19 +36728,19 @@ var COPILOT_FAST = {
|
|
|
36679
36728
|
};
|
|
36680
36729
|
var CODEX_FAST = {
|
|
36681
36730
|
effort: "low",
|
|
36682
|
-
refine: { provider: CODEX, model: GPT_5_4_MINI2
|
|
36731
|
+
refine: { provider: CODEX, model: GPT_5_4_MINI2 },
|
|
36683
36732
|
plan: { provider: CODEX, model: GPT_5_4_MINI2, effort: "low" },
|
|
36684
36733
|
implement: {
|
|
36685
36734
|
generator: { provider: CODEX, model: GPT_5_4_MINI2, effort: "low" },
|
|
36686
36735
|
evaluator: { provider: CODEX, model: GPT_5_4_MINI2, effort: "low" }
|
|
36687
36736
|
},
|
|
36688
|
-
readiness: { provider: CODEX, model: GPT_5_4_MINI2
|
|
36737
|
+
readiness: { provider: CODEX, model: GPT_5_4_MINI2 },
|
|
36689
36738
|
ideate: { provider: CODEX, model: GPT_5_4_MINI2 },
|
|
36690
|
-
createPr: { provider: CODEX, model: GPT_5_4_MINI2
|
|
36739
|
+
createPr: { provider: CODEX, model: GPT_5_4_MINI2 }
|
|
36691
36740
|
};
|
|
36692
36741
|
var MIXED_FRONTIER = {
|
|
36693
36742
|
effort: "max",
|
|
36694
|
-
refine: { provider: CODEX, model:
|
|
36743
|
+
refine: { provider: CODEX, model: GPT_5_6_SOL2 },
|
|
36695
36744
|
plan: { provider: CLAUDE, model: OPUS, effort: "max" },
|
|
36696
36745
|
implement: {
|
|
36697
36746
|
generator: { provider: CLAUDE, model: OPUS, effort: "max" },
|
|
@@ -36699,7 +36748,7 @@ var MIXED_FRONTIER = {
|
|
|
36699
36748
|
},
|
|
36700
36749
|
readiness: { provider: CLAUDE, model: OPUS, effort: "high" },
|
|
36701
36750
|
ideate: { provider: CLAUDE, model: OPUS },
|
|
36702
|
-
createPr: { provider: CODEX, model:
|
|
36751
|
+
createPr: { provider: CODEX, model: GPT_5_6_SOL2 }
|
|
36703
36752
|
};
|
|
36704
36753
|
var CLAUDE_FRONTIER = {
|
|
36705
36754
|
effort: "max",
|
|
@@ -36726,17 +36775,16 @@ var COPILOT_FRONTIER = {
|
|
|
36726
36775
|
createPr: { provider: COPILOT, model: COPILOT_OPUS }
|
|
36727
36776
|
};
|
|
36728
36777
|
var CODEX_FRONTIER = {
|
|
36729
|
-
|
|
36730
|
-
|
|
36731
|
-
|
|
36732
|
-
plan: { provider: CODEX, model: "gpt-5.5", effort: "high" },
|
|
36778
|
+
effort: "max",
|
|
36779
|
+
refine: { provider: CODEX, model: GPT_5_6_SOL2 },
|
|
36780
|
+
plan: { provider: CODEX, model: GPT_5_6_SOL2, effort: "max" },
|
|
36733
36781
|
implement: {
|
|
36734
|
-
generator: { provider: CODEX, model:
|
|
36735
|
-
evaluator: { provider: CODEX, model:
|
|
36782
|
+
generator: { provider: CODEX, model: GPT_5_6_SOL2, effort: "max" },
|
|
36783
|
+
evaluator: { provider: CODEX, model: GPT_5_6_SOL2, effort: "max" }
|
|
36736
36784
|
},
|
|
36737
|
-
readiness: { provider: CODEX, model:
|
|
36738
|
-
ideate: { provider: CODEX, model:
|
|
36739
|
-
createPr: { provider: CODEX, model:
|
|
36785
|
+
readiness: { provider: CODEX, model: GPT_5_6_SOL2, effort: "high" },
|
|
36786
|
+
ideate: { provider: CODEX, model: GPT_5_6_SOL2 },
|
|
36787
|
+
createPr: { provider: CODEX, model: GPT_5_6_SOL2 }
|
|
36740
36788
|
};
|
|
36741
36789
|
var PRESETS = {
|
|
36742
36790
|
mixed: { ai: MIXED, escalateOnPlateau: true },
|
package/dist/cli.mjs
CHANGED
package/dist/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "0.
|
|
4
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"packageVersion": "0.17.0",
|
|
4
|
+
"generatedAt": "2026-07-27T15:30:39.020Z",
|
|
5
5
|
"assets": [
|
|
6
6
|
"agent-definitions/ralphctl-evaluator.md",
|
|
7
7
|
"agent-definitions/ralphctl-generator.md",
|
|
@@ -47,14 +47,14 @@ break the shared lockfile.
|
|
|
47
47
|
|
|
48
48
|
## Architecture
|
|
49
49
|
|
|
50
|
-
-
|
|
51
|
-
-
|
|
50
|
+
- <your layering rule> — e.g. which modules may import which, and which direction is forbidden.
|
|
51
|
+
- <your module-boundary rule> — e.g. no barrel re-export files; every import names its symbol explicitly.
|
|
52
52
|
|
|
53
53
|
## Conventions
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
|
|
55
|
+
- <your error-handling convention> — e.g. return a typed result instead of throwing for domain errors.
|
|
56
|
+
- <your I/O convention> — e.g. all writes go through one shared helper; direct filesystem calls
|
|
57
|
+
are banned elsewhere.
|
|
58
58
|
|
|
59
59
|
## Security
|
|
60
60
|
|