@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.
- package/dist/shell/index.js +67 -47
- package/package.json +1 -1
package/dist/shell/index.js
CHANGED
|
@@ -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.
|
|
18932
|
-
return "3.10.
|
|
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((
|
|
97404
|
+
return new Promise((resolve4, reject2) => {
|
|
97386
97405
|
actor.subscribe({
|
|
97387
97406
|
complete: () => {
|
|
97388
|
-
|
|
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((
|
|
98838
|
+
const closeRaw = () => new Promise((resolve4) => {
|
|
98820
98839
|
if (!rawWriter)
|
|
98821
|
-
return
|
|
98822
|
-
rawWriter.end(
|
|
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((
|
|
98967
|
-
const t = setTimeout(() =>
|
|
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((
|
|
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((
|
|
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(
|
|
111619
|
-
|
|
111638
|
+
return value instanceof P ? value : new P(function(resolve4) {
|
|
111639
|
+
resolve4(value);
|
|
111620
111640
|
});
|
|
111621
111641
|
}
|
|
111622
|
-
return new (P || (P = Promise))(function(
|
|
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 ?
|
|
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(
|
|
111868
|
-
v = o[n](v), settle(
|
|
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(
|
|
111892
|
+
function settle(resolve4, reject2, d, v) {
|
|
111873
111893
|
Promise.resolve(v).then(function(v2) {
|
|
111874
|
-
|
|
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(
|
|
112757
|
+
child = new nativePromise(function(resolve4, reject2) {
|
|
112738
112758
|
parent2.then(function(value) {
|
|
112739
|
-
|
|
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((
|
|
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", () =>
|
|
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((
|
|
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
|
-
|
|
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
|
-
|
|
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((
|
|
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(() =>
|
|
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);
|