@oisincoveney/pipeline 1.5.2 → 1.5.3

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.
Files changed (2) hide show
  1. package/dist/index.js +152 -167
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -28680,14 +28680,6 @@ function header(host) {
28680
28680
  return [GENERATED_MARKER, `${OWNER_MARKER_PREFIX}host=${host} -->`, ""].join(`
28681
28681
  `);
28682
28682
  }
28683
- function tsHeader(host) {
28684
- return [
28685
- GENERATED_TS_MARKER,
28686
- `${OWNER_TS_MARKER_PREFIX}host=${host}`,
28687
- ""
28688
- ].join(`
28689
- `);
28690
- }
28691
28683
  function yamlHeader(host) {
28692
28684
  return [
28693
28685
  GENERATED_YAML_MARKER,
@@ -28717,12 +28709,6 @@ function profileEntries(config2) {
28717
28709
  function nativeProfileEntries(host, config2) {
28718
28710
  return profileEntries(config2).filter(([_, profile]) => canRunNatively(host, config2, profile));
28719
28711
  }
28720
- function hasAgentWorkflowNodes(config2) {
28721
- return compileWorkflowPlan(config2).topologicalOrder.some((node) => node.kind === "agent");
28722
- }
28723
- function profileNames(config2) {
28724
- return profileEntries(config2).map(([name]) => `\`${name}\``).join(", ");
28725
- }
28726
28712
  function orchestratorProfile(config2) {
28727
28713
  const profile = config2.profiles[config2.orchestrator.profile];
28728
28714
  if (!profile) {
@@ -28733,33 +28719,14 @@ function orchestratorProfile(config2) {
28733
28719
  hooks: config2.orchestrator.hooks
28734
28720
  };
28735
28721
  }
28736
- function workflowSummary(config2) {
28737
- const plan = compileWorkflowPlan(config2);
28738
- return [
28739
- `Workflow: ${plan.workflowId}`,
28740
- entrypointSummary(config2),
28741
- "",
28742
- ...plan.topologicalOrder.map((node) => {
28743
- const parts = [
28744
- `- ${node.id}`,
28745
- `kind=${node.kind}`,
28746
- node.profile ? `profile=${node.profile}` : "",
28747
- runnerForNode(config2, node.profile) ? `runner=${runnerForNode(config2, node.profile)}` : "",
28748
- node.needs.length ? `needs=${node.needs.join(",")}` : "needs=none"
28749
- ].filter(Boolean);
28750
- return parts.join(" ");
28751
- })
28752
- ].join(`
28753
- `);
28754
- }
28755
- function runnerForNode(config2, profileId) {
28756
- return profileId ? config2.profiles[profileId]?.runner : undefined;
28757
- }
28758
28722
  function resolvedHostModel(config2, host, profile) {
28759
28723
  const runner = config2.runners[profile.runner];
28760
28724
  return profile.host_models?.[host] ?? runner?.host_models?.[host] ?? profile.model ?? runner?.model;
28761
28725
  }
28762
28726
  function canRunNatively(host, config2, profile) {
28727
+ if (host === "pi") {
28728
+ return false;
28729
+ }
28763
28730
  if (profile.runner === host) {
28764
28731
  return true;
28765
28732
  }
@@ -28768,12 +28735,9 @@ function canRunNatively(host, config2, profile) {
28768
28735
  function isModelRunner(runnerId) {
28769
28736
  return COMMAND_HOSTS.some((host) => host === runnerId);
28770
28737
  }
28771
- function runnerCliLabel(runnerId) {
28772
- return `${runnerId} CLI`;
28773
- }
28774
- function dispatchSummary(host, config2) {
28738
+ function agentDispatchRoutes(host, config2) {
28775
28739
  const plan = compileWorkflowPlan(config2);
28776
- const lines = plan.topologicalOrder.flatMap((node) => {
28740
+ return plan.topologicalOrder.flatMap((node) => {
28777
28741
  if (!(node.kind === "agent" && node.profile)) {
28778
28742
  return [];
28779
28743
  }
@@ -28781,43 +28745,43 @@ function dispatchSummary(host, config2) {
28781
28745
  if (!profile) {
28782
28746
  return [];
28783
28747
  }
28784
- return [dispatchLineForAgent(host, config2, node.id, node.profile, profile)];
28748
+ return [
28749
+ dispatchRouteForAgent(host, config2, {
28750
+ needs: node.needs,
28751
+ nodeId: node.id,
28752
+ profile,
28753
+ profileId: node.profile
28754
+ })
28755
+ ];
28785
28756
  });
28786
- return ["Node dispatch:", ...lines.length > 0 ? lines : ["- none"]].join(`
28787
- `);
28788
28757
  }
28789
- function dispatchLineForAgent(host, config2, nodeId, profileId, profile) {
28790
- if (profile.runner === host) {
28791
- return sameHostDispatchLine(host, nodeId, profileId, profile.runner);
28758
+ function dispatchRouteForAgent(host, config2, route) {
28759
+ const runnerId = route.profile.runner;
28760
+ if (host !== "pi" && runnerId === host) {
28761
+ return {
28762
+ ...route,
28763
+ kind: "native-named-agent",
28764
+ nativeAgentId: route.profileId,
28765
+ runnerId
28766
+ };
28792
28767
  }
28793
- if (host === "opencode" && isModelRunner(profile.runner)) {
28794
- const model = resolvedHostModel(config2, host, profile);
28768
+ if (host === "opencode" && isModelRunner(runnerId)) {
28769
+ const model = resolvedHostModel(config2, host, route.profile);
28795
28770
  if (model) {
28796
- return `- ${nodeId}: OpenCode native subagent profile=${profileId} model=${model} runner=${profile.runner}`;
28771
+ return {
28772
+ ...route,
28773
+ kind: "native-model-agent",
28774
+ model,
28775
+ nativeAgentId: route.profileId,
28776
+ runnerId
28777
+ };
28797
28778
  }
28798
28779
  }
28799
- return `- ${nodeId}: ${runnerCliLabel(profile.runner)} profile=${profileId} runner=${profile.runner}`;
28800
- }
28801
- function sameHostDispatchLine(host, nodeId, profileId, runnerId) {
28802
- const labels = {
28803
- claude: `Claude native subagent subagent_type=${profileId}`,
28804
- codex: `Codex native worker subagent profile=${profileId} agent_type=worker`,
28805
- kimi: `Kimi native Agent subagent subagent_type=${profileId}`,
28806
- opencode: `OpenCode native subagent subagent_type=${profileId}`,
28807
- pi: `Pi native subagent chain profile=${profileId}`
28780
+ return {
28781
+ ...route,
28782
+ kind: "cli",
28783
+ runnerId
28808
28784
  };
28809
- return `- ${nodeId}: ${labels[host]} runner=${runnerId}`;
28810
- }
28811
- function entrypointSummary(config2) {
28812
- const entries = Object.entries(config2.entrypoints);
28813
- if (entries.length === 0) {
28814
- return "Entrypoints: none";
28815
- }
28816
- return [
28817
- "Entrypoints:",
28818
- ...entries.map(([id, entrypoint]) => `- ${id} -> ${entrypoint.workflow}${entrypoint.description ? ` (${entrypoint.description})` : ""}`)
28819
- ].join(`
28820
- `);
28821
28785
  }
28822
28786
  function grants(actor) {
28823
28787
  return [
@@ -28842,42 +28806,127 @@ function orchestratorBlock(config2) {
28842
28806
  ].join(`
28843
28807
  `);
28844
28808
  }
28845
- function nativeDelegationInstruction(host, config2) {
28846
- if (!hasAgentWorkflowNodes(config2)) {
28809
+ function dispatchBlock(host, config2) {
28810
+ const routes = agentDispatchRoutes(host, config2);
28811
+ if (routes.length === 0) {
28847
28812
  return;
28848
28813
  }
28849
- if (host === "opencode") {
28850
- return "Dispatch each agent workflow node by its runner. For lines marked `OpenCode native subagent`, use OpenCode's task tool with `subagent_type` exactly equal to the configured profile id. For cross-runner nodes with an explicit resolved OpenCode model, use the generated OpenCode native subagent. For lines marked CLI, invoke that runner's CLI directly. Do not substitute a default subagent. Do not use instruction-only translation. Do not invoke package scripts or the pipeline CLI to run this workflow.";
28814
+ const plan = compileWorkflowPlan(config2);
28815
+ const nativeRoutes = routes.filter((route) => route.kind !== "cli");
28816
+ const cliRoutes = routes.filter((route) => route.kind === "cli");
28817
+ return [
28818
+ `Run workflow \`${plan.workflowId}\` for the user task.`,
28819
+ "",
28820
+ nativeDispatchBlock(host, nativeRoutes),
28821
+ cliDispatchBlock(host, cliRoutes),
28822
+ nodePromptContract(plan.workflowId, routes),
28823
+ "Do not use `pipe`, `oisin-pipeline`, or package scripts to execute workflow nodes.",
28824
+ hostSpecificDispatchGuard(host, nativeRoutes, cliRoutes)
28825
+ ].filter((line) => Boolean(line)).join(`
28826
+ `);
28827
+ }
28828
+ function nativeDispatchBlock(host, routes) {
28829
+ if (routes.length === 0) {
28830
+ return;
28851
28831
  }
28832
+ return [
28833
+ `${hostDisplayName(host)} native routes:`,
28834
+ ...routes.map((route) => nativeDispatchLine(host, route)),
28835
+ ""
28836
+ ].join(`
28837
+ `);
28838
+ }
28839
+ function nativeDispatchLine(host, route) {
28840
+ const needs = needsSummary(route.needs);
28852
28841
  if (host === "codex") {
28853
- return 'Dispatch each agent workflow node by its runner. For lines marked `Codex native worker subagent`, call `spawn_agent` with `agent_type: "worker"` and `fork_context: false`, then pass a node prompt containing the task, workflow id, node id, profile id, runner id, configured profile instructions, grants, and dependency outputs. Codex `exec` exposes native built-in agent types (`default`, `explorer`, `worker`) rather than arbitrary generated project profile ids, so do not call `spawn_agent` with the profile id as `agent_type`. Do not spawn the default agent for configured Codex nodes. For lines marked CLI, invoke that runner\'s CLI directly. Do not use instruction-only translation. Do not invoke package scripts or the pipeline CLI to run this workflow.';
28842
+ return `- ${route.nodeId}: spawn_agent agent_type=${route.nativeAgentId} runner=${route.runnerId} needs=${needs}`;
28854
28843
  }
28855
28844
  if (host === "claude") {
28856
- return "Dispatch each agent workflow node by its runner. For lines marked `Claude native subagent`, use Claude's Task tool with `subagent_type` exactly equal to the configured profile id. For lines marked CLI, invoke that runner's CLI directly. Do not substitute a default subagent. Do not use instruction-only translation. Do not invoke package scripts or the pipeline CLI to run this workflow.";
28845
+ return `- ${route.nodeId}: Agent tool subagent_type=${route.nativeAgentId} runner=${route.runnerId} needs=${needs}`;
28857
28846
  }
28858
28847
  if (host === "kimi") {
28859
- return "Dispatch each agent workflow node by its runner. For lines marked `Kimi native Agent subagent`, use Kimi's Agent tool with `subagent_type` exactly equal to the configured profile id when the current Kimi root agent exposes that subagent type. If that native subagent type is not available, invoke Kimi CLI with the generated `.kimi/agents/<profile>.yaml` agent spec. For non-Kimi nodes, invoke that runner's CLI directly. Do not substitute a default subagent. Do not use instruction-only translation. Do not invoke package scripts or the pipeline CLI to run this workflow.";
28848
+ return `- ${route.nodeId}: Agent tool subagent_type=${route.nativeAgentId} runner=${route.runnerId} needs=${needs}`;
28860
28849
  }
28861
- if (host === "pi") {
28862
- return "Dispatch each agent workflow node by its runner. Use Pi's native subagent chain only when every agent node is a Pi runner node and the Pi subagent commands are available. If Pi native subagent commands are unavailable, invoke each configured runner through its CLI directly. For mixed-runner workflows, invoke each configured runner through its CLI directly. Do not use instruction-only translation. Do not invoke package scripts or the pipeline CLI to run this workflow.";
28850
+ if (host === "opencode") {
28851
+ const model = route.model ? ` model=${route.model}` : "";
28852
+ return `- ${route.nodeId}: Task tool subagent_type=${route.nativeAgentId}${model} runner=${route.runnerId} needs=${needs}`;
28863
28853
  }
28864
- return "Dispatch each agent workflow node by its runner. Use this host's native subagent mechanism only when it can actually run the requested runner/model. For cross-runner nodes that cannot be represented natively, invoke that runner's CLI directly. Do not use instruction-only translation. Do not invoke package scripts or the pipeline CLI to run this workflow.";
28854
+ return `- ${route.nodeId}: native agent ${route.nativeAgentId} runner=${route.runnerId} needs=${needs}`;
28865
28855
  }
28866
- function cliDispatchInstructions(config2) {
28867
- if (!hasAgentWorkflowNodes(config2)) {
28856
+ function cliDispatchBlock(host, routes) {
28857
+ if (routes.length === 0) {
28868
28858
  return;
28869
28859
  }
28860
+ const nativeNotice = host === "pi" ? "Pi native dispatch is not enabled for this generated workflow." : `These nodes are not ${hostDisplayName(host)} native routes.`;
28861
+ return [nativeNotice, "CLI routes:", ...routes.map(cliDispatchLine), ""].join(`
28862
+ `);
28863
+ }
28864
+ function cliDispatchLine(route) {
28865
+ return `- ${route.nodeId}: ${route.runnerId} CLI profile=${route.profileId} command=\`${runnerCliCommand(route)}\` needs=${needsSummary(route.needs)}`;
28866
+ }
28867
+ function runnerCliCommand(route) {
28868
+ if (route.runnerId === "codex") {
28869
+ return `codex exec --json -C <repo-root> --sandbox ${codexSandbox(route.profile)} --skip-git-repo-check <node prompt>`;
28870
+ }
28871
+ if (route.runnerId === "kimi") {
28872
+ return `kimi --print --agent-file .kimi/agents/${route.profileId}.yaml --work-dir <repo-root> --final-message-only --prompt <node prompt>`;
28873
+ }
28874
+ if (route.runnerId === "opencode") {
28875
+ return `opencode run --agent ${route.profileId} --format json --dir <repo-root> <node prompt>`;
28876
+ }
28877
+ if (route.runnerId === "claude") {
28878
+ return `claude --agent ${route.profileId} --print -p <node prompt>`;
28879
+ }
28880
+ if (route.runnerId === "pi") {
28881
+ return "pi --print --no-session <node prompt>";
28882
+ }
28883
+ return `${route.runnerId} <node prompt>`;
28884
+ }
28885
+ function codexSandbox(profile) {
28886
+ return profile.filesystem?.mode === "workspace-write" ? "workspace-write" : "read-only";
28887
+ }
28888
+ function nodePromptContract(workflowId, routes) {
28889
+ const hasCliRoutes = routes.some((route) => route.kind === "cli");
28890
+ const lead = hasCliRoutes ? "For each CLI node prompt include:" : "For each native node prompt include:";
28870
28891
  return [
28871
- "For CLI-dispatched nodes, construct the node prompt with the task, workflow id, node id, profile id, runner id, and dependency outputs.",
28872
- "CLI dispatch command shapes:",
28873
- "- codex: `codex exec --json -C <repo-root> --sandbox <mode> --config 'approval_policy=\"never\"' --skip-git-repo-check <node prompt>`",
28874
- "- kimi: `kimi --print --agent-file .kimi/agents/<profile>.yaml --work-dir <repo-root> --final-message-only --prompt <node prompt>`",
28875
- "- opencode: `opencode run --agent <profile> --format json --dir <repo-root> <node prompt>`",
28876
- "- claude: `claude --print -p <node prompt>`",
28877
- "- pi: `pi --print --no-session <node prompt>`"
28892
+ lead,
28893
+ "- user task",
28894
+ `- workflow id: ${workflowId}`,
28895
+ "- node id",
28896
+ "- profile id",
28897
+ "- runner id",
28898
+ "- profile instructions reference",
28899
+ "- profile grants",
28900
+ "- dependency outputs",
28901
+ ""
28878
28902
  ].join(`
28879
28903
  `);
28880
28904
  }
28905
+ function hostSpecificDispatchGuard(host, nativeRoutes, cliRoutes) {
28906
+ if (host === "codex" && nativeRoutes.length > 0) {
28907
+ return "Do not substitute the generic Codex worker for configured profiles.";
28908
+ }
28909
+ if (cliRoutes.length > 0 && nativeRoutes.length > 0) {
28910
+ return `Do not claim CLI routes are ${hostDisplayName(host)} native routes.`;
28911
+ }
28912
+ if (cliRoutes.length > 0 && nativeRoutes.length === 0 && host !== "pi") {
28913
+ return `Do not claim these nodes are ${hostDisplayName(host)} subagents.`;
28914
+ }
28915
+ return;
28916
+ }
28917
+ function hostDisplayName(host) {
28918
+ const names = {
28919
+ claude: "Claude",
28920
+ codex: "Codex",
28921
+ kimi: "Kimi",
28922
+ opencode: "OpenCode",
28923
+ pi: "Pi"
28924
+ };
28925
+ return names[host];
28926
+ }
28927
+ function needsSummary(needs) {
28928
+ return needs.length > 0 ? needs.join(",") : "none";
28929
+ }
28881
28930
  function compactLines(lines) {
28882
28931
  return lines.filter((line) => line !== undefined);
28883
28932
  }
@@ -28905,17 +28954,9 @@ function claudeDefinitions(config2) {
28905
28954
  }, compactLines([
28906
28955
  header("claude").trimEnd(),
28907
28956
  "",
28908
- workflowSummary(config2),
28909
- "",
28910
- dispatchSummary("claude", config2),
28911
- "",
28912
28957
  orchestratorBlock(config2),
28913
28958
  "",
28914
- nativeDelegationInstruction("claude", config2),
28915
- "",
28916
- cliDispatchInstructions(config2),
28917
- "",
28918
- `Delegate work only to configured profiles: ${profileNames(config2)}.`
28959
+ dispatchBlock("claude", config2)
28919
28960
  ]).join(`
28920
28961
  `)),
28921
28962
  host: "claude",
@@ -28962,22 +29003,13 @@ function opencodeDefinitions(config2) {
28962
29003
  {
28963
29004
  content: markdown({
28964
29005
  agent: "pipeline-orchestrator",
28965
- description: "Run the configured pipeline workflow",
28966
- subtask: true
29006
+ description: "Run the configured pipeline workflow"
28967
29007
  }, compactLines([
28968
29008
  header("opencode").trimEnd(),
28969
29009
  "",
28970
- workflowSummary(config2),
28971
- "",
28972
- dispatchSummary("opencode", config2),
28973
- "",
28974
29010
  orchestratorBlock(config2),
28975
29011
  "",
28976
- nativeDelegationInstruction("opencode", config2),
28977
- "",
28978
- cliDispatchInstructions(config2),
28979
- "",
28980
- `Delegate work only to configured profiles: ${profileNames(config2)}.`
29012
+ dispatchBlock("opencode", config2)
28981
29013
  ]).join(`
28982
29014
  `)),
28983
29015
  host: "opencode",
@@ -28989,18 +29021,14 @@ function opencodeDefinitions(config2) {
28989
29021
  description: "Orchestrate the configured pipeline and enforce gates.",
28990
29022
  mode: "primary",
28991
29023
  permission: opencodePermission(orchestratorProfile(config2), {
28992
- forceTask: hasAgentWorkflowNodes(config2)
29024
+ forceTask: agentDispatchRoutes("opencode", config2).some((route) => route.kind !== "cli")
28993
29025
  })
28994
29026
  }, compactLines([
28995
29027
  header("opencode").trimEnd(),
28996
29028
  "",
28997
29029
  orchestratorBlock(config2),
28998
29030
  "",
28999
- dispatchSummary("opencode", config2),
29000
- "",
29001
- nativeDelegationInstruction("opencode", config2),
29002
- "",
29003
- cliDispatchInstructions(config2)
29031
+ dispatchBlock("opencode", config2)
29004
29032
  ]).join(`
29005
29033
  `)),
29006
29034
  host: "opencode",
@@ -29041,17 +29069,9 @@ function codexDefinitions(config2) {
29041
29069
  "",
29042
29070
  "Invoke this skill with `$pipe <task description>`.",
29043
29071
  "",
29044
- workflowSummary(config2),
29045
- "",
29046
- dispatchSummary("codex", config2),
29047
- "",
29048
29072
  orchestratorBlock(config2),
29049
29073
  "",
29050
- nativeDelegationInstruction("codex", config2),
29051
- "",
29052
- cliDispatchInstructions(config2),
29053
- "",
29054
- `Use separate configured profiles: ${profileNames(config2)}.`
29074
+ dispatchBlock("codex", config2)
29055
29075
  ]).join(`
29056
29076
  `)),
29057
29077
  host: "codex",
@@ -29087,17 +29107,9 @@ function kimiDefinitions(config2) {
29087
29107
  }, compactLines([
29088
29108
  header("kimi").trimEnd(),
29089
29109
  "",
29090
- workflowSummary(config2),
29091
- "",
29092
- dispatchSummary("kimi", config2),
29093
- "",
29094
29110
  orchestratorBlock(config2),
29095
29111
  "",
29096
- nativeDelegationInstruction("kimi", config2),
29097
- "",
29098
- cliDispatchInstructions(config2),
29099
- "",
29100
- `Use separate configured profiles: ${profileNames(config2)}.`
29112
+ dispatchBlock("kimi", config2)
29101
29113
  ]).join(`
29102
29114
  `)),
29103
29115
  host: "kimi",
@@ -29155,6 +29167,9 @@ function kimiAgentDefinitions(id, profile) {
29155
29167
  ];
29156
29168
  }
29157
29169
  function kimiOrchestratorAgentDefinitions(config2) {
29170
+ if (agentDispatchRoutes("kimi", config2).every((route) => route.kind !== "native-named-agent")) {
29171
+ return [];
29172
+ }
29158
29173
  const agentPath = ".kimi/agents/pipeline-orchestrator.yaml";
29159
29174
  const promptPath = ".kimi/agents/pipeline-orchestrator.prompt.md";
29160
29175
  const nativeKimiProfiles = nativeProfileEntries("kimi", config2);
@@ -29208,15 +29223,9 @@ function kimiOrchestratorAgentDefinitions(config2) {
29208
29223
  content: compactLines([
29209
29224
  header("kimi").trimEnd(),
29210
29225
  "",
29211
- workflowSummary(config2),
29212
- "",
29213
- dispatchSummary("kimi", config2),
29214
- "",
29215
29226
  orchestratorBlock(config2),
29216
29227
  "",
29217
- nativeDelegationInstruction("kimi", config2),
29218
- "",
29219
- cliDispatchInstructions(config2),
29228
+ dispatchBlock("kimi", config2),
29220
29229
  "",
29221
29230
  "This agent file is the Kimi-native orchestrator surface. Launch Kimi with `--agent-file .kimi/agents/pipeline-orchestrator.yaml` before using `/skill:pipe` when you want Kimi runner nodes to run through Kimi's native Agent tool."
29222
29231
  ]).join(`
@@ -29247,42 +29256,18 @@ function piDefinitions(config2) {
29247
29256
  {
29248
29257
  content: markdown({
29249
29258
  "argument-hint": "<task description>",
29250
- description: "Run the configured pipeline workflow with Pi subagents"
29259
+ description: "Run the configured pipeline workflow"
29251
29260
  }, compactLines([
29252
29261
  header("pi").trimEnd(),
29253
29262
  "",
29254
- workflowSummary(config2),
29255
- "",
29256
- dispatchSummary("pi", config2),
29257
- "",
29258
29263
  orchestratorBlock(config2),
29259
29264
  "",
29260
- nativeDelegationInstruction("pi", config2),
29261
- "",
29262
- cliDispatchInstructions(config2)
29265
+ dispatchBlock("pi", config2)
29263
29266
  ]).join(`
29264
29267
  `)),
29265
29268
  host: "pi",
29266
29269
  invocation: "/pipe <task description>",
29267
29270
  path: ".pi/prompts/pipe.md"
29268
- },
29269
- {
29270
- content: [
29271
- tsHeader("pi").trimEnd(),
29272
- "",
29273
- "// Pi exposes project prompt templates as slash commands.",
29274
- "// The real /pipe command is .pi/prompts/pipe.md.",
29275
- "// This generated shim intentionally registers no command so it cannot",
29276
- "// intercept /pipe in print mode before the prompt-template expansion runs.",
29277
- "export default function pipelineWorkNext(): void {",
29278
- " return;",
29279
- "}",
29280
- ""
29281
- ].join(`
29282
- `),
29283
- host: "pi",
29284
- invocation: "/pipe <task description>",
29285
- path: ".pi/extensions/pipe.ts"
29286
29271
  }
29287
29272
  ];
29288
29273
  }
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.2",
76
+ "version": "1.5.3",
77
77
  "description": "",
78
78
  "main": "index.js",
79
79
  "keywords": [],