@oisincoveney/pipeline 1.5.5 → 1.5.7
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 -2
- package/dist/index.js +45 -24
- package/docs/config-architecture.md +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -77,6 +77,7 @@ runners:
|
|
|
77
77
|
codex:
|
|
78
78
|
type: codex
|
|
79
79
|
command: codex
|
|
80
|
+
model: gpt-5.5
|
|
80
81
|
capabilities:
|
|
81
82
|
native_subagents: true
|
|
82
83
|
tools: [read, grep, bash, edit, write]
|
|
@@ -93,7 +94,6 @@ version: 1
|
|
|
93
94
|
profiles:
|
|
94
95
|
orchestrator:
|
|
95
96
|
runner: codex
|
|
96
|
-
model: gpt-5
|
|
97
97
|
instructions:
|
|
98
98
|
inline: Coordinate the workflow from this YAML file only.
|
|
99
99
|
tools: [read, grep, bash]
|
|
@@ -103,7 +103,6 @@ profiles:
|
|
|
103
103
|
mode: inherit
|
|
104
104
|
implementer:
|
|
105
105
|
runner: codex
|
|
106
|
-
model: gpt-5
|
|
107
106
|
instructions:
|
|
108
107
|
inline: Implement the requested change and return evidence.
|
|
109
108
|
tools: [read, grep, bash, edit, write]
|
package/dist/index.js
CHANGED
|
@@ -28778,6 +28778,9 @@ function canRunNatively(host, config2, profile) {
|
|
|
28778
28778
|
return false;
|
|
28779
28779
|
}
|
|
28780
28780
|
if (profile.runner === host) {
|
|
28781
|
+
if (host === "codex") {
|
|
28782
|
+
return resolvedHostModel(config2, host, profile) !== undefined;
|
|
28783
|
+
}
|
|
28781
28784
|
return true;
|
|
28782
28785
|
}
|
|
28783
28786
|
return host === "opencode" && isModelRunner(profile.runner) && resolvedHostModel(config2, host, profile) !== undefined;
|
|
@@ -28808,12 +28811,16 @@ function agentDispatchRoutes(host, config2) {
|
|
|
28808
28811
|
function dispatchRouteForAgent(host, config2, route) {
|
|
28809
28812
|
const runnerId = route.profile.runner;
|
|
28810
28813
|
if (host !== "pi" && runnerId === host) {
|
|
28811
|
-
|
|
28812
|
-
|
|
28813
|
-
|
|
28814
|
-
|
|
28815
|
-
|
|
28816
|
-
|
|
28814
|
+
const model = resolvedHostModel(config2, host, route.profile);
|
|
28815
|
+
if (host !== "codex" || model) {
|
|
28816
|
+
return {
|
|
28817
|
+
...route,
|
|
28818
|
+
kind: "native-named-agent",
|
|
28819
|
+
...model ? { model } : {},
|
|
28820
|
+
nativeAgentId: route.profileId,
|
|
28821
|
+
runnerId
|
|
28822
|
+
};
|
|
28823
|
+
}
|
|
28817
28824
|
}
|
|
28818
28825
|
if (host === "opencode" && isModelRunner(runnerId)) {
|
|
28819
28826
|
const model = resolvedHostModel(config2, host, route.profile);
|
|
@@ -28870,6 +28877,8 @@ function dispatchBlock(host, config2) {
|
|
|
28870
28877
|
nativeDispatchBlock(host, nativeRoutes),
|
|
28871
28878
|
cliDispatchBlock(host, cliRoutes),
|
|
28872
28879
|
nodePromptContract(plan.workflowId, routes),
|
|
28880
|
+
"Only gates declared in `.pipeline/pipeline.yaml` are blocking. Do not invent RED, GREEN, full-suite, typecheck, or unrelated-drift gates.",
|
|
28881
|
+
"If a node returns targeted evidence and has no configured blocking gate, advance to the next workflow node.",
|
|
28873
28882
|
"Do not use `pipe`, `oisin-pipeline`, or package scripts to execute workflow nodes.",
|
|
28874
28883
|
hostSpecificDispatchGuard(host, nativeRoutes, cliRoutes)
|
|
28875
28884
|
].filter((line) => Boolean(line)).join(`
|
|
@@ -28889,7 +28898,8 @@ function nativeDispatchBlock(host, routes) {
|
|
|
28889
28898
|
function nativeDispatchLine(host, route) {
|
|
28890
28899
|
const needs = needsSummary(route.needs);
|
|
28891
28900
|
if (host === "codex") {
|
|
28892
|
-
|
|
28901
|
+
const model = route.model ? ` model=${route.model}` : "";
|
|
28902
|
+
return `- ${route.nodeId}: spawn_agent agent_type=${route.nativeAgentId}${model} runner=${route.runnerId} needs=${needs}`;
|
|
28893
28903
|
}
|
|
28894
28904
|
if (host === "claude") {
|
|
28895
28905
|
return `- ${route.nodeId}: Agent tool subagent_type=${route.nativeAgentId} runner=${route.runnerId} needs=${needs}`;
|
|
@@ -29125,24 +29135,31 @@ function codexDefinitions(config2) {
|
|
|
29125
29135
|
invocation: "$pipe <task description>",
|
|
29126
29136
|
path: ".agents/skills/pipe/SKILL.md"
|
|
29127
29137
|
},
|
|
29128
|
-
...nativeProfileEntries("codex", config2).map(([id, profile]) =>
|
|
29129
|
-
|
|
29130
|
-
|
|
29131
|
-
|
|
29132
|
-
|
|
29133
|
-
|
|
29134
|
-
|
|
29135
|
-
|
|
29136
|
-
|
|
29138
|
+
...nativeProfileEntries("codex", config2).map(([id, profile]) => {
|
|
29139
|
+
const model = resolvedHostModel(config2, "codex", profile);
|
|
29140
|
+
if (!model) {
|
|
29141
|
+
throw new Error(`Codex native agent '${id}' requires a resolved model from profile.model or runner.model.`);
|
|
29142
|
+
}
|
|
29143
|
+
return {
|
|
29144
|
+
content: `${hashHeader("codex")}${stringify({
|
|
29145
|
+
description: profile.description ?? id,
|
|
29146
|
+
developer_instructions: [
|
|
29147
|
+
profile.description ?? id,
|
|
29148
|
+
instructionsPointer(profile),
|
|
29149
|
+
"Configured grants:",
|
|
29150
|
+
grants(profile)
|
|
29151
|
+
].join(`
|
|
29137
29152
|
`),
|
|
29138
|
-
|
|
29139
|
-
|
|
29140
|
-
|
|
29153
|
+
model,
|
|
29154
|
+
name: id,
|
|
29155
|
+
sandbox_mode: profile.filesystem?.mode === "workspace-write" ? "workspace-write" : "read-only"
|
|
29156
|
+
}).trimEnd()}
|
|
29141
29157
|
`,
|
|
29142
|
-
|
|
29143
|
-
|
|
29144
|
-
|
|
29145
|
-
|
|
29158
|
+
host: "codex",
|
|
29159
|
+
invocation: "$pipe <task description>",
|
|
29160
|
+
path: `.codex/agents/${id}.toml`
|
|
29161
|
+
};
|
|
29162
|
+
})
|
|
29146
29163
|
];
|
|
29147
29164
|
}
|
|
29148
29165
|
function kimiDefinitions(config2) {
|
|
@@ -29545,6 +29562,7 @@ runners:
|
|
|
29545
29562
|
codex:
|
|
29546
29563
|
type: codex
|
|
29547
29564
|
command: codex
|
|
29565
|
+
model: gpt-5.5
|
|
29548
29566
|
capabilities:
|
|
29549
29567
|
native_subagents: true
|
|
29550
29568
|
rules: true
|
|
@@ -29786,6 +29804,8 @@ var SCAFFOLD_FILES = {
|
|
|
29786
29804
|
"You are the orchestrator for the pipeline.",
|
|
29787
29805
|
"Use `.pipeline/pipeline.yaml` as the source of truth for workflow order, profiles, gates, hooks, and artifacts.",
|
|
29788
29806
|
"Delegate only to workflow node profiles and enforce configured gates before reporting completion.",
|
|
29807
|
+
"Only gates declared in `.pipeline/pipeline.yaml` are blocking. Do not invent RED, GREEN, full-suite, typecheck, or unrelated-drift gates.",
|
|
29808
|
+
"If a node returns targeted evidence and has no configured blocking gate, advance to the next workflow node.",
|
|
29789
29809
|
""
|
|
29790
29810
|
].join(`
|
|
29791
29811
|
`),
|
|
@@ -29821,7 +29841,8 @@ var SCAFFOLD_FILES = {
|
|
|
29821
29841
|
"You are the GREEN/code-write phase for the pipeline.",
|
|
29822
29842
|
"Implement the smallest production change that satisfies the failing tests.",
|
|
29823
29843
|
"Keep edits scoped to the requested behavior.",
|
|
29824
|
-
"Return concrete test
|
|
29844
|
+
"Return concrete targeted test evidence. Include typecheck evidence only when a typecheck command exists or a configured gate requires it.",
|
|
29845
|
+
"Unrelated full-suite failures and missing optional scripts are not blocking unless `.pipeline/pipeline.yaml` declares a gate for them.",
|
|
29825
29846
|
""
|
|
29826
29847
|
].join(`
|
|
29827
29848
|
`),
|