@oisincoveney/pipeline 1.22.3 → 1.22.5

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.
@@ -50,6 +50,15 @@ ecosystem_code:
50
50
  role: OpenTelemetry plugin pattern for runtime observability
51
51
  default_stack: true
52
52
  source: https://www.npmjs.com/package/@devtheops/opencode-plugin-otel
53
+ - id: opencode-goal-plugin
54
+ name: opencode-goal-plugin
55
+ package: "@prevalentware/opencode-goal-plugin"
56
+ plugin:
57
+ kind: npm
58
+ package: "@prevalentware/opencode-goal-plugin"
59
+ role: Codex-style long-running goal mode with /goal slash command, persistent state, evidence-gated completion, and TUI sidebar
60
+ default_stack: true
61
+ source: https://www.npmjs.com/package/@prevalentware/opencode-goal-plugin
53
62
  - id: opencode-snip
54
63
  name: opencode-snip
55
64
  role: prompt snippet and command-discipline helper patterns
package/dist/config.d.ts CHANGED
@@ -371,8 +371,8 @@ declare const configSchema: z.ZodObject<{
371
371
  policy: z.ZodOptional<z.ZodObject<{
372
372
  commands: z.ZodOptional<z.ZodEnum<{
373
373
  allow: "allow";
374
- "trusted-only": "trusted-only";
375
374
  deny: "deny";
375
+ "trusted-only": "trusted-only";
376
376
  }>>;
377
377
  modules: z.ZodOptional<z.ZodEnum<{
378
378
  allow: "allow";
@@ -396,8 +396,8 @@ declare const configSchema: z.ZodObject<{
396
396
  }, z.core.$strict>>>;
397
397
  default_profile: z.ZodOptional<z.ZodString>;
398
398
  mode: z.ZodEnum<{
399
- hosted: "hosted";
400
399
  local: "local";
400
+ hosted: "hosted";
401
401
  }>;
402
402
  provider: z.ZodLiteral<"toolhive">;
403
403
  authorization_env: z.ZodDefault<z.ZodString>;
@@ -440,10 +440,10 @@ declare const configSchema: z.ZodObject<{
440
440
  }, z.core.$strict>>;
441
441
  output: z.ZodOptional<z.ZodObject<{
442
442
  format: z.ZodEnum<{
443
+ json_schema: "json_schema";
443
444
  text: "text";
444
445
  json: "json";
445
446
  jsonl: "jsonl";
446
- json_schema: "json_schema";
447
447
  }>;
448
448
  repair: z.ZodOptional<z.ZodObject<{
449
449
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -461,6 +461,7 @@ declare const configSchema: z.ZodObject<{
461
461
  skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
462
462
  timeout_ms: z.ZodOptional<z.ZodNumber>;
463
463
  tools: z.ZodOptional<z.ZodArray<z.ZodEnum<{
464
+ task: "task";
464
465
  read: "read";
465
466
  list: "list";
466
467
  grep: "grep";
@@ -468,7 +469,6 @@ declare const configSchema: z.ZodObject<{
468
469
  bash: "bash";
469
470
  edit: "edit";
470
471
  write: "write";
471
- task: "task";
472
472
  }>>>;
473
473
  }, z.core.$strict>>>;
474
474
  runner_job: z.ZodDefault<z.ZodObject<{
@@ -512,14 +512,15 @@ declare const configSchema: z.ZodObject<{
512
512
  disabled: "disabled";
513
513
  }>>>;
514
514
  output_formats: z.ZodOptional<z.ZodArray<z.ZodEnum<{
515
+ json_schema: "json_schema";
515
516
  text: "text";
516
517
  json: "json";
517
518
  jsonl: "jsonl";
518
- json_schema: "json_schema";
519
519
  }>>>;
520
520
  rules: z.ZodOptional<z.ZodBoolean>;
521
521
  skills: z.ZodOptional<z.ZodBoolean>;
522
522
  tools: z.ZodOptional<z.ZodArray<z.ZodEnum<{
523
+ task: "task";
523
524
  read: "read";
524
525
  list: "list";
525
526
  grep: "grep";
@@ -527,16 +528,15 @@ declare const configSchema: z.ZodObject<{
527
528
  bash: "bash";
528
529
  edit: "edit";
529
530
  write: "write";
530
- task: "task";
531
531
  }>>>;
532
532
  }, z.core.$strict>;
533
533
  command: z.ZodOptional<z.ZodString>;
534
534
  host_models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
535
535
  model: z.ZodOptional<z.ZodString>;
536
536
  type: z.ZodEnum<{
537
+ opencode: "opencode";
537
538
  command: "command";
538
539
  codex: "codex";
539
- opencode: "opencode";
540
540
  }>;
541
541
  }, z.core.$strict>>>;
542
542
  scheduler: z.ZodDefault<z.ZodObject<{
package/dist/config.js CHANGED
@@ -357,7 +357,7 @@ scheduler:
357
357
  green-implementation:
358
358
  category: green
359
359
  profile: pipeline-code-writer
360
- models: [kimi-for-coding/k2p6, opencode-go/qwen3.7-max, opencode-go/deepseek-v4-pro]
360
+ models: [opencode-go/qwen3.7-max, kimi-for-coding/k2p6, opencode-go/deepseek-v4-pro]
361
361
  verification:
362
362
  category: verification
363
363
  profile: pipeline-verifier
@@ -372,7 +372,7 @@ scheduler:
372
372
  research:
373
373
  category: research
374
374
  profile: pipeline-researcher
375
- models: [kimi-for-coding/k2p6, zai-coding-plan/glm-5.1, openai/gpt-5.5-fast]
375
+ models: [openai/gpt-5.5-fast, zai-coding-plan/glm-5.1, kimi-for-coding/k2p6]
376
376
  red-tests:
377
377
  category: red
378
378
  profile: pipeline-test-writer
@@ -384,7 +384,7 @@ scheduler:
384
384
  green-frontend:
385
385
  category: green
386
386
  profile: pipeline-code-writer
387
- models: [kimi-for-coding/k2p6, opencode-go/qwen3.7-max, opencode-go/deepseek-v4-pro]
387
+ models: [opencode-go/qwen3.7-max, kimi-for-coding/k2p6, opencode-go/deepseek-v4-pro]
388
388
  acceptance-review:
389
389
  category: acceptance
390
390
  profile: pipeline-acceptance-reviewer
package/dist/gates.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { parseJson } from "./safe-json.js";
2
- import { existsSync, readFileSync } from "node:fs";
2
+ import { existsSync, readFileSync, renameSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  import { execa } from "execa";
5
5
  import { resolveCommand } from "package-manager-detector/commands";
@@ -33,16 +33,52 @@ function envCommand(envName) {
33
33
  }
34
34
  async function resolvePackageScript(worktreePath, scriptName) {
35
35
  if (!readPackageScripts(worktreePath)[scriptName]) return null;
36
- const resolved = resolveCommand((await detect({
37
- cwd: worktreePath,
38
- stopDir: worktreePath
39
- }))?.agent ?? "npm", "run", [scriptName]);
36
+ const resolved = resolveCommand(await detectPackageManagerAgent(worktreePath), "run", [scriptName]);
40
37
  if (!resolved) return null;
41
38
  return {
42
39
  command: resolved.command,
43
40
  args: resolved.args
44
41
  };
45
42
  }
43
+ async function detectPackageManagerAgent(worktreePath) {
44
+ return (await detect({
45
+ cwd: worktreePath,
46
+ stopDir: worktreePath
47
+ }))?.agent ?? "npm";
48
+ }
49
+ async function resolvePackageBinaryCommand(worktreePath, binary, args) {
50
+ if (!existsSync(join(worktreePath, "package.json"))) return null;
51
+ switch (await detectPackageManagerAgent(worktreePath)) {
52
+ case "bun": return {
53
+ command: "bun",
54
+ args: [
55
+ "x",
56
+ binary,
57
+ ...args
58
+ ]
59
+ };
60
+ case "pnpm": return {
61
+ command: "pnpm",
62
+ args: [
63
+ "exec",
64
+ binary,
65
+ ...args
66
+ ]
67
+ };
68
+ case "yarn": return {
69
+ command: "yarn",
70
+ args: [
71
+ "exec",
72
+ binary,
73
+ ...args
74
+ ]
75
+ };
76
+ default: return {
77
+ command: "npx",
78
+ args: [binary, ...args]
79
+ };
80
+ }
81
+ }
46
82
  async function runTests(worktreePath, signal) {
47
83
  const projectCommand = envCommand("PIPELINE_TEST_COMMAND") ?? await resolvePackageScript(worktreePath, "test");
48
84
  if (!projectCommand) return {
@@ -70,15 +106,16 @@ async function runLint(worktreePath, signal) {
70
106
  exitCode: 0,
71
107
  output: "skipped"
72
108
  };
73
- return await runProjectCommand(projectCommand, worktreePath, signal);
109
+ return await runProjectCommand(projectCommand, worktreePath, signal, { hidePipelineRuns: true });
74
110
  }
75
111
  async function runFallow(worktreePath, signal) {
76
- return runProjectCommand(envCommand("PIPELINE_FALLOW_COMMAND") ?? await resolvePackageScript(worktreePath, "fallow") ?? {
112
+ return runProjectCommand(envCommand("PIPELINE_FALLOW_COMMAND") ?? await resolvePackageScript(worktreePath, "fallow") ?? await resolvePackageBinaryCommand(worktreePath, "fallow", ["audit"]) ?? {
77
113
  args: ["audit"],
78
114
  command: "fallow"
79
- }, worktreePath, signal);
115
+ }, worktreePath, signal, { hidePipelineRuns: true });
80
116
  }
81
- async function runProjectCommand(projectCommand, worktreePath, signal) {
117
+ async function runProjectCommand(projectCommand, worktreePath, signal, options) {
118
+ const hiddenRuns = options?.hidePipelineRuns ? hidePipelineRunsDirectory(worktreePath) : null;
82
119
  try {
83
120
  const result = await execa(projectCommand.command, projectCommand.args, {
84
121
  cancelSignal: signal,
@@ -98,8 +135,21 @@ async function runProjectCommand(projectCommand, worktreePath, signal) {
98
135
  exitCode: e.exitCode ?? 1,
99
136
  output: commandErrorOutput(e)
100
137
  };
138
+ } finally {
139
+ hiddenRuns?.restore();
101
140
  }
102
141
  }
142
+ function hidePipelineRunsDirectory(worktreePath) {
143
+ const pipelineDir = join(worktreePath, ".pipeline");
144
+ const runsDir = join(pipelineDir, "runs");
145
+ if (!existsSync(runsDir)) return null;
146
+ const hiddenRunsDir = join(pipelineDir, `.runs-hidden-${process.pid}-${Date.now()}`);
147
+ renameSync(runsDir, hiddenRunsDir);
148
+ return { restore: () => {
149
+ if (!existsSync(hiddenRunsDir)) return;
150
+ renameSync(hiddenRunsDir, runsDir);
151
+ } };
152
+ }
103
153
  function commandError(err) {
104
154
  return err;
105
155
  }
package/package.json CHANGED
@@ -111,7 +111,7 @@
111
111
  "prepack": "bun run build:cli"
112
112
  },
113
113
  "type": "module",
114
- "version": "1.22.3",
114
+ "version": "1.22.5",
115
115
  "description": "Config-driven multi-agent pipeline runner for repository work",
116
116
  "main": "./dist/index.js",
117
117
  "types": "./dist/index.d.ts",