@neriros/ralphy 3.10.8 → 3.10.9

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/shell/index.js +67 -47
  2. package/package.json +1 -1
@@ -18928,8 +18928,8 @@ import { readFileSync } from "fs";
18928
18928
  import { resolve } from "path";
18929
18929
  function getVersion() {
18930
18930
  try {
18931
- if ("3.10.8")
18932
- return "3.10.8";
18931
+ if ("3.10.9")
18932
+ return "3.10.9";
18933
18933
  } catch {}
18934
18934
  const dirsToTry = [];
18935
18935
  try {
@@ -81906,11 +81906,11 @@ function applyAliases(cfg) {
81906
81906
  }
81907
81907
  }
81908
81908
  }
81909
- function workflowPath(projectRoot) {
81910
- return join5(projectRoot, WORKFLOW_FILE);
81909
+ function workflowPath(projectRoot, workflowFile) {
81910
+ return workflowFile ?? join5(projectRoot, WORKFLOW_FILE);
81911
81911
  }
81912
- async function loadWorkflow(projectRoot) {
81913
- const path = workflowPath(projectRoot);
81912
+ async function loadWorkflow(projectRoot, workflowFile) {
81913
+ const path = workflowPath(projectRoot, workflowFile);
81914
81914
  const file2 = Bun.file(path);
81915
81915
  if (!await file2.exists()) {
81916
81916
  const { config: config2 } = parseWorkflow(DEFAULT_WORKFLOW_MD);
@@ -81919,8 +81919,8 @@ async function loadWorkflow(projectRoot) {
81919
81919
  const text = await file2.text();
81920
81920
  return parseWorkflow(text, path);
81921
81921
  }
81922
- async function ensureWorkflow(projectRoot) {
81923
- const path = workflowPath(projectRoot);
81922
+ async function ensureWorkflow(projectRoot, workflowFile) {
81923
+ const path = workflowPath(projectRoot, workflowFile);
81924
81924
  const file2 = Bun.file(path);
81925
81925
  if (await file2.exists())
81926
81926
  return path;
@@ -84362,6 +84362,12 @@ function getLayout() {
84362
84362
  throw new Error("No layout in context. Set layout when calling runWithContext().");
84363
84363
  return ctx.layout;
84364
84364
  }
84365
+ function getArgs() {
84366
+ const ctx = getContext();
84367
+ if (!ctx.args)
84368
+ throw new Error("No args in context. Set args when calling runWithContext().");
84369
+ return ctx.args;
84370
+ }
84365
84371
  function runWithContext(ctx, fn) {
84366
84372
  return contextStore.run(ctx, fn);
84367
84373
  }
@@ -84712,6 +84718,7 @@ var init_output2 = __esm(() => {
84712
84718
  });
84713
84719
 
84714
84720
  // packages/cli-args/src/common-args.ts
84721
+ import { resolve as resolve3 } from "path";
84715
84722
  function initialCommonArgs() {
84716
84723
  return {
84717
84724
  engine: "claude",
@@ -84725,6 +84732,7 @@ function initialCommonArgs() {
84725
84732
  log: false,
84726
84733
  verbose: false,
84727
84734
  projectRoot: undefined,
84735
+ workflowFile: undefined,
84728
84736
  name: "",
84729
84737
  prompt: "",
84730
84738
  fromAgent: false
@@ -84747,6 +84755,7 @@ function emptyParseState() {
84747
84755
  pendingOption: null,
84748
84756
  expectClaudeModel: false,
84749
84757
  expectProjectRoot: false,
84758
+ expectWorkflow: false,
84750
84759
  expectName: false,
84751
84760
  expectPrompt: false,
84752
84761
  expectPromptFile: false,
@@ -84771,6 +84780,11 @@ function parseCommonArg(arg, args, state) {
84771
84780
  state.expectProjectRoot = false;
84772
84781
  return true;
84773
84782
  }
84783
+ if (state.expectWorkflow) {
84784
+ args.workflowFile = resolve3(arg);
84785
+ state.expectWorkflow = false;
84786
+ return true;
84787
+ }
84774
84788
  if (state.expectName) {
84775
84789
  args.name = arg;
84776
84790
  state.expectName = false;
@@ -84817,6 +84831,9 @@ function parseCommonArg(arg, args, state) {
84817
84831
  case "--project-root":
84818
84832
  state.expectProjectRoot = true;
84819
84833
  return true;
84834
+ case "--workflow":
84835
+ state.expectWorkflow = true;
84836
+ return true;
84820
84837
  case "--name":
84821
84838
  state.expectName = true;
84822
84839
  return true;
@@ -84966,6 +84983,7 @@ var init_cli = __esm(() => {
84966
84983
  "",
84967
84984
  "Options:",
84968
84985
  " --name <name> Change name (required for most commands)",
84986
+ " --workflow <path> Path to an alternate WORKFLOW.md (default: <project>/WORKFLOW.md)",
84969
84987
  " --prompt <text> Task description",
84970
84988
  " --prompt-file <path> Read prompt from file",
84971
84989
  " --model <model> Set model (haiku|sonnet|opus)",
@@ -85049,6 +85067,7 @@ var init_task_cli = __esm(() => {
85049
85067
  "",
85050
85068
  "Options:",
85051
85069
  " --name <name> Change name (required)",
85070
+ " --workflow <path> Path to an alternate WORKFLOW.md (default: <project>/WORKFLOW.md)",
85052
85071
  " --prompt <text> Task description",
85053
85072
  " --prompt-file <path> Read prompt from file",
85054
85073
  " --model <model> Set model (haiku|sonnet|opus)",
@@ -97382,10 +97401,10 @@ var require_xstate_development_cjs = __commonJS((exports) => {
97382
97401
  }
97383
97402
  }
97384
97403
  function toPromise(actor) {
97385
- return new Promise((resolve3, reject2) => {
97404
+ return new Promise((resolve4, reject2) => {
97386
97405
  actor.subscribe({
97387
97406
  complete: () => {
97388
- resolve3(actor.getSnapshot().output);
97407
+ resolve4(actor.getSnapshot().output);
97389
97408
  },
97390
97409
  error: reject2
97391
97410
  });
@@ -98816,10 +98835,10 @@ async function runEngine(opts) {
98816
98835
  await mkdir4(dirname6(opts.logFile), { recursive: true });
98817
98836
  rawWriter = createWriteStream(opts.logFile, { flags: "a" });
98818
98837
  }
98819
- const closeRaw = () => new Promise((resolve3) => {
98838
+ const closeRaw = () => new Promise((resolve4) => {
98820
98839
  if (!rawWriter)
98821
- return resolve3();
98822
- rawWriter.end(resolve3);
98840
+ return resolve4();
98841
+ rawWriter.end(resolve4);
98823
98842
  });
98824
98843
  const userOnFeedEvent = opts.onFeedEvent;
98825
98844
  const onFeedEvent = (event) => {
@@ -98963,8 +98982,8 @@ var init_flow_machine = __esm(() => {
98963
98982
  } catch {}
98964
98983
  const exited = await Promise.race([
98965
98984
  worker.exited.then(() => "exited"),
98966
- new Promise((resolve3) => {
98967
- const t = setTimeout(() => resolve3("timeout"), graceMs);
98985
+ new Promise((resolve4) => {
98986
+ const t = setTimeout(() => resolve4("timeout"), graceMs);
98968
98987
  t.unref();
98969
98988
  })
98970
98989
  ]);
@@ -100138,7 +100157,7 @@ var init_loop2 = __esm(() => {
100138
100157
  // apps/loop/src/hooks/useLoop.ts
100139
100158
  import { join as join15 } from "path";
100140
100159
  function sleep(seconds) {
100141
- return new Promise((resolve3) => setTimeout(resolve3, seconds * 1000));
100160
+ return new Promise((resolve4) => setTimeout(resolve4, seconds * 1000));
100142
100161
  }
100143
100162
  function useLoop(opts) {
100144
100163
  const outerLayoutRef = import_react57.useRef(null);
@@ -101390,7 +101409,7 @@ async function main2(argv) {
101390
101409
  await mkdir6(statesDir, { recursive: true });
101391
101410
  await ensureRalphGitignore(projectRoot);
101392
101411
  const { ensureWorkflow: ensureWorkflow2 } = await Promise.resolve().then(() => (init_workflow(), exports_workflow));
101393
- const workflowPath2 = await ensureWorkflow2(projectRoot);
101412
+ const workflowPath2 = await ensureWorkflow2(projectRoot, args.workflowFile);
101394
101413
  process.stdout.write(`Workflow config: ${workflowPath2}
101395
101414
  `);
101396
101415
  const openspecBin = resolveOpenspecBin(import.meta.dir);
@@ -101778,6 +101797,7 @@ var init_cli2 = __esm(() => {
101778
101797
  "",
101779
101798
  "Options:",
101780
101799
  " --name <id> Change name / ticket identifier (list / debug filter)",
101800
+ " --workflow <path> Path to an alternate WORKFLOW.md (default: <project>/WORKFLOW.md)",
101781
101801
  " --prompt <text> Task description appended to every scaffolded proposal",
101782
101802
  " --prompt-file <path> Read prompt from file",
101783
101803
  " --model <model> Set model (haiku|sonnet|opus)",
@@ -101838,12 +101858,12 @@ __export(exports_config, {
101838
101858
  loadRalphyConfig: () => loadRalphyConfig,
101839
101859
  ensureRalphyConfig: () => ensureRalphyConfig
101840
101860
  });
101841
- async function loadRalphyConfig(projectRoot) {
101842
- const { config: config2 } = await loadWorkflow(projectRoot);
101861
+ async function loadRalphyConfig(projectRoot, workflowFile) {
101862
+ const { config: config2 } = await loadWorkflow(projectRoot, workflowFile);
101843
101863
  return config2;
101844
101864
  }
101845
- async function ensureRalphyConfig(projectRoot) {
101846
- return ensureWorkflow(projectRoot);
101865
+ async function ensureRalphyConfig(projectRoot, workflowFile) {
101866
+ return ensureWorkflow(projectRoot, workflowFile);
101847
101867
  }
101848
101868
  var init_config = __esm(() => {
101849
101869
  init_workflow();
@@ -102150,7 +102170,7 @@ async function runCapability(cap, args, ctx = {}) {
102150
102170
  throw lastError;
102151
102171
  }
102152
102172
  function sleepMs(ms) {
102153
- return new Promise((resolve3) => setTimeout(resolve3, ms));
102173
+ return new Promise((resolve4) => setTimeout(resolve4, ms));
102154
102174
  }
102155
102175
 
102156
102176
  // packages/workflow/src/boundaries.ts
@@ -107150,7 +107170,7 @@ function createPrepareHelpers(input) {
107150
107170
  }
107151
107171
  let workflowPrompt = "";
107152
107172
  try {
107153
- const workflow = await loadWorkflow(projectRoot);
107173
+ const workflow = await loadWorkflow(projectRoot, args.workflowFile);
107154
107174
  workflowPrompt = renderWorkflowPrompt(workflow, {
107155
107175
  issue: {
107156
107176
  identifier: issue2.identifier,
@@ -111615,11 +111635,11 @@ var require_tslib = __commonJS((exports, module) => {
111615
111635
  };
111616
111636
  __awaiter = function(thisArg, _arguments, P, generator) {
111617
111637
  function adopt(value) {
111618
- return value instanceof P ? value : new P(function(resolve3) {
111619
- resolve3(value);
111638
+ return value instanceof P ? value : new P(function(resolve4) {
111639
+ resolve4(value);
111620
111640
  });
111621
111641
  }
111622
- return new (P || (P = Promise))(function(resolve3, reject2) {
111642
+ return new (P || (P = Promise))(function(resolve4, reject2) {
111623
111643
  function fulfilled(value) {
111624
111644
  try {
111625
111645
  step(generator.next(value));
@@ -111635,7 +111655,7 @@ var require_tslib = __commonJS((exports, module) => {
111635
111655
  }
111636
111656
  }
111637
111657
  function step(result2) {
111638
- result2.done ? resolve3(result2.value) : adopt(result2.value).then(fulfilled, rejected);
111658
+ result2.done ? resolve4(result2.value) : adopt(result2.value).then(fulfilled, rejected);
111639
111659
  }
111640
111660
  step((generator = generator.apply(thisArg, _arguments || [])).next());
111641
111661
  });
@@ -111864,14 +111884,14 @@ var require_tslib = __commonJS((exports, module) => {
111864
111884
  }, i);
111865
111885
  function verb(n) {
111866
111886
  i[n] = o[n] && function(v) {
111867
- return new Promise(function(resolve3, reject2) {
111868
- v = o[n](v), settle(resolve3, reject2, v.done, v.value);
111887
+ return new Promise(function(resolve4, reject2) {
111888
+ v = o[n](v), settle(resolve4, reject2, v.done, v.value);
111869
111889
  });
111870
111890
  };
111871
111891
  }
111872
- function settle(resolve3, reject2, d, v) {
111892
+ function settle(resolve4, reject2, d, v) {
111873
111893
  Promise.resolve(v).then(function(v2) {
111874
- resolve3({ value: v2, done: d });
111894
+ resolve4({ value: v2, done: d });
111875
111895
  }, reject2);
111876
111896
  }
111877
111897
  };
@@ -112734,9 +112754,9 @@ var require_clone = __commonJS((exports, module) => {
112734
112754
  } else if (_instanceof2(parent2, nativeSet)) {
112735
112755
  child = new nativeSet;
112736
112756
  } else if (_instanceof2(parent2, nativePromise)) {
112737
- child = new nativePromise(function(resolve3, reject2) {
112757
+ child = new nativePromise(function(resolve4, reject2) {
112738
112758
  parent2.then(function(value) {
112739
- resolve3(_clone(value, depth2 - 1));
112759
+ resolve4(_clone(value, depth2 - 1));
112740
112760
  }, function(err) {
112741
112761
  reject2(_clone(err, depth2 - 1));
112742
112762
  });
@@ -260785,7 +260805,7 @@ function toPdfSafe(text) {
260785
260805
  return out;
260786
260806
  }
260787
260807
  function renderMarkdownToPdf(md, title) {
260788
- return new Promise((resolve3, reject2) => {
260808
+ return new Promise((resolve4, reject2) => {
260789
260809
  try {
260790
260810
  const doc2 = new PDFDocument({
260791
260811
  size: PAGE_SIZE,
@@ -260794,7 +260814,7 @@ function renderMarkdownToPdf(md, title) {
260794
260814
  });
260795
260815
  const chunks = [];
260796
260816
  doc2.on("data", (chunk2) => chunks.push(chunk2));
260797
- doc2.on("end", () => resolve3(new Uint8Array(Buffer.concat(chunks))));
260817
+ doc2.on("end", () => resolve4(new Uint8Array(Buffer.concat(chunks))));
260798
260818
  doc2.on("error", reject2);
260799
260819
  doc2.fillColor(COLOR_TEXT).font(FONT_BODY).fontSize(BODY_SIZE);
260800
260820
  const tokens = g.lexer(md);
@@ -262092,7 +262112,7 @@ async function waitForActiveWorkers(deps) {
262092
262112
  const budgetMs = deps.budgetMs ?? 1e4;
262093
262113
  const warnAtMs = deps.warnAtMs ?? 5000;
262094
262114
  deps.stop();
262095
- await new Promise((resolve3) => {
262115
+ await new Promise((resolve4) => {
262096
262116
  const start = Date.now();
262097
262117
  let warned = false;
262098
262118
  const wait = setInterval(() => {
@@ -262100,7 +262120,7 @@ async function waitForActiveWorkers(deps) {
262100
262120
  const elapsed = Date.now() - start;
262101
262121
  if (active === 0) {
262102
262122
  clearInterval(wait);
262103
- resolve3();
262123
+ resolve4();
262104
262124
  return;
262105
262125
  }
262106
262126
  if (!warned && elapsed >= warnAtMs) {
@@ -262110,7 +262130,7 @@ async function waitForActiveWorkers(deps) {
262110
262130
  if (elapsed >= budgetMs) {
262111
262131
  clearInterval(wait);
262112
262132
  deps.onTimeout?.(active);
262113
- resolve3();
262133
+ resolve4();
262114
262134
  }
262115
262135
  }, 100);
262116
262136
  });
@@ -262695,8 +262715,8 @@ function AgentMode({
262695
262715
  let cancelled = false;
262696
262716
  async function init2() {
262697
262717
  logSession(`=== session start ${SESSION_START} ===`);
262698
- const cfgPath = await ensureConfig(projectRoot);
262699
- const cfg2 = await loadConfig(projectRoot);
262718
+ const cfgPath = await ensureConfig(projectRoot, args.workflowFile);
262719
+ const cfg2 = await loadConfig(projectRoot, args.workflowFile);
262700
262720
  cfgRef.current = cfg2;
262701
262721
  appendLog(`agent mode v${VERSION} \u2014 config: ${cfgPath}`, "gray");
262702
262722
  const apiKey = process.env["LINEAR_API_KEY"];
@@ -264600,7 +264620,7 @@ async function runList(input) {
264600
264620
  }
264601
264621
  const rows = buildLocalRows();
264602
264622
  printLocalRows(rows);
264603
- const cfg = await loadRalphyConfig(projectRoot);
264623
+ const cfg = await loadRalphyConfig(projectRoot, getArgs().workflowFile);
264604
264624
  const apiKey = process.env["LINEAR_API_KEY"];
264605
264625
  const indicators = cfg.linear.indicators;
264606
264626
  const team = input.linearTeamOverride || cfg.linear.team;
@@ -264724,7 +264744,7 @@ async function runListDebug(input) {
264724
264744
  process.exitCode = 1;
264725
264745
  return;
264726
264746
  }
264727
- const cfg = await loadRalphyConfig(projectRoot);
264747
+ const cfg = await loadRalphyConfig(projectRoot, getArgs().workflowFile);
264728
264748
  const indicators = cfg.linear.indicators;
264729
264749
  const team = input.linearTeamOverride || cfg.linear.team;
264730
264750
  const { assignee, anyAssignee } = resolveLinearFilter(input.linearFilterOverride, input.linearAssigneeOverride, cfg.linear.filter);
@@ -264862,8 +264882,8 @@ async function runAgentJson({
264862
264882
  });
264863
264883
  const fileSink = createJsonLogFileSink(args.jsonLogFile);
264864
264884
  const emit3 = makeEmit(fileSink);
264865
- const cfgPath = await ensureRalphyConfig(projectRoot);
264866
- const cfg = await loadRalphyConfig(projectRoot);
264885
+ const cfgPath = await ensureRalphyConfig(projectRoot, args.workflowFile);
264886
+ const cfg = await loadRalphyConfig(projectRoot, args.workflowFile);
264867
264887
  await writeAgentRunState({
264868
264888
  projectRoot,
264869
264889
  configPath: cfgPath,
@@ -265020,7 +265040,7 @@ async function runAgentJson({
265020
265040
  }
265021
265041
  })();
265022
265042
  }, 1000);
265023
- await new Promise((resolve3) => {
265043
+ await new Promise((resolve4) => {
265024
265044
  let shuttingDown = false;
265025
265045
  const onSig = () => {
265026
265046
  if (shuttingDown) {
@@ -265050,7 +265070,7 @@ async function runAgentJson({
265050
265070
  });
265051
265071
  setTimeout(() => process.exit(1), 50);
265052
265072
  }
265053
- }).then(() => resolve3());
265073
+ }).then(() => resolve4());
265054
265074
  };
265055
265075
  process.once("SIGINT", onSig);
265056
265076
  process.once("SIGTERM", onSig);
@@ -265128,7 +265148,7 @@ async function main3(argv) {
265128
265148
  if (args.ticketTokens.length > 0) {
265129
265149
  const { loadRalphyConfig: loadRalphyConfig2 } = await Promise.resolve().then(() => (init_config(), exports_config));
265130
265150
  const { resolveTicketNumbers: resolveTicketNumbers2, formatTicketError: formatTicketError2 } = await Promise.resolve().then(() => (init_linear_client(), exports_linear_client));
265131
- const cfg = await loadRalphyConfig2(projectRoot);
265151
+ const cfg = await loadRalphyConfig2(projectRoot, args.workflowFile);
265132
265152
  const team = args.linearTeam || cfg.linear.team;
265133
265153
  try {
265134
265154
  resolveTicketNumbers2(args.ticketTokens, team);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neriros/ralphy",
3
- "version": "3.10.8",
3
+ "version": "3.10.9",
4
4
  "description": "An iterative AI task execution framework. Orchestrates multi-phase autonomous work using Claude or Codex engines.",
5
5
  "keywords": [
6
6
  "agent",