@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 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
- return {
28812
- ...route,
28813
- kind: "native-named-agent",
28814
- nativeAgentId: route.profileId,
28815
- runnerId
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
- return `- ${route.nodeId}: spawn_agent agent_type=${route.nativeAgentId} runner=${route.runnerId} needs=${needs}`;
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
- content: `${hashHeader("codex")}${stringify({
29130
- description: profile.description ?? id,
29131
- developer_instructions: [
29132
- profile.description ?? id,
29133
- instructionsPointer(profile),
29134
- "Configured grants:",
29135
- grants(profile)
29136
- ].join(`
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
- name: id,
29139
- sandbox_mode: profile.filesystem?.mode === "workspace-write" ? "workspace-write" : "read-only"
29140
- }).trimEnd()}
29153
+ model,
29154
+ name: id,
29155
+ sandbox_mode: profile.filesystem?.mode === "workspace-write" ? "workspace-write" : "read-only"
29156
+ }).trimEnd()}
29141
29157
  `,
29142
- host: "codex",
29143
- invocation: "$pipe <task description>",
29144
- path: `.codex/agents/${id}.toml`
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 and typecheck evidence.",
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
  `),
@@ -22,6 +22,7 @@ runners:
22
22
  codex:
23
23
  type: codex
24
24
  command: codex
25
+ model: gpt-5.5
25
26
  capabilities:
26
27
  native_subagents: true
27
28
  rules: true
package/package.json CHANGED
@@ -73,7 +73,7 @@
73
73
  "prepack": "bun run build:cli"
74
74
  },
75
75
  "type": "module",
76
- "version": "1.5.5",
76
+ "version": "1.5.7",
77
77
  "description": "",
78
78
  "main": "index.js",
79
79
  "keywords": [],