@neriros/ralphy 3.10.7 → 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 +122 -50
- 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 {
|
|
@@ -80519,7 +80519,7 @@ function foldLegacyAssignee(v) {
|
|
|
80519
80519
|
}
|
|
80520
80520
|
return rest2;
|
|
80521
80521
|
}
|
|
80522
|
-
var CURRENT_WORKFLOW_VERSION =
|
|
80522
|
+
var CURRENT_WORKFLOW_VERSION = 4, MarkerSchema, SET_INDICATOR_KEYS, GetIndicatorSchema, SetIndicatorSchema, IndicatorsSchema, ProjectSchema, CommandsSchema, DEFAULT_META_ONLY_FILES, BoundariesSchema, WorkflowConfigSchema;
|
|
80523
80523
|
var init_schema = __esm(() => {
|
|
80524
80524
|
init_zod();
|
|
80525
80525
|
MarkerSchema = exports_external.discriminatedUnion("type", [
|
|
@@ -80533,7 +80533,13 @@ var init_schema = __esm(() => {
|
|
|
80533
80533
|
exports_external.object({ type: exports_external.literal("project"), value: exports_external.string().min(1) }).strict(),
|
|
80534
80534
|
exports_external.object({ type: exports_external.literal("comment"), value: exports_external.string().min(1) }).strict()
|
|
80535
80535
|
]);
|
|
80536
|
-
SET_INDICATOR_KEYS = [
|
|
80536
|
+
SET_INDICATOR_KEYS = [
|
|
80537
|
+
"setInProgress",
|
|
80538
|
+
"setDone",
|
|
80539
|
+
"setPrReady",
|
|
80540
|
+
"setError",
|
|
80541
|
+
"clearApproved"
|
|
80542
|
+
];
|
|
80537
80543
|
GetIndicatorSchema = exports_external.object({
|
|
80538
80544
|
filter: exports_external.array(MarkerSchema).default([])
|
|
80539
80545
|
});
|
|
@@ -80547,6 +80553,7 @@ var init_schema = __esm(() => {
|
|
|
80547
80553
|
getAutoApprove: GetIndicatorSchema.optional(),
|
|
80548
80554
|
setInProgress: SetIndicatorSchema.optional(),
|
|
80549
80555
|
setDone: SetIndicatorSchema.optional(),
|
|
80556
|
+
setPrReady: SetIndicatorSchema.optional(),
|
|
80550
80557
|
setError: SetIndicatorSchema.optional(),
|
|
80551
80558
|
setAwaitingConfirmation: SetIndicatorSchema.optional(),
|
|
80552
80559
|
clearApproved: SetIndicatorSchema.optional(),
|
|
@@ -80851,6 +80858,9 @@ linear:
|
|
|
80851
80858
|
# setDone: # status/label to set when the PR is opened
|
|
80852
80859
|
# type: status
|
|
80853
80860
|
# value: In Review
|
|
80861
|
+
# setPrReady: # additive: marker set when the PR is ready for human review
|
|
80862
|
+
# type: status # (fires unless the PR is auto-merged immediately; does not replace setDone)
|
|
80863
|
+
# value: In Review
|
|
80854
80864
|
# setError: # label applied when a task is quarantined
|
|
80855
80865
|
# type: label
|
|
80856
80866
|
# value: "ralph:error"
|
|
@@ -81896,11 +81906,11 @@ function applyAliases(cfg) {
|
|
|
81896
81906
|
}
|
|
81897
81907
|
}
|
|
81898
81908
|
}
|
|
81899
|
-
function workflowPath(projectRoot) {
|
|
81900
|
-
return join5(projectRoot, WORKFLOW_FILE);
|
|
81909
|
+
function workflowPath(projectRoot, workflowFile) {
|
|
81910
|
+
return workflowFile ?? join5(projectRoot, WORKFLOW_FILE);
|
|
81901
81911
|
}
|
|
81902
|
-
async function loadWorkflow(projectRoot) {
|
|
81903
|
-
const path = workflowPath(projectRoot);
|
|
81912
|
+
async function loadWorkflow(projectRoot, workflowFile) {
|
|
81913
|
+
const path = workflowPath(projectRoot, workflowFile);
|
|
81904
81914
|
const file2 = Bun.file(path);
|
|
81905
81915
|
if (!await file2.exists()) {
|
|
81906
81916
|
const { config: config2 } = parseWorkflow(DEFAULT_WORKFLOW_MD);
|
|
@@ -81909,8 +81919,8 @@ async function loadWorkflow(projectRoot) {
|
|
|
81909
81919
|
const text = await file2.text();
|
|
81910
81920
|
return parseWorkflow(text, path);
|
|
81911
81921
|
}
|
|
81912
|
-
async function ensureWorkflow(projectRoot) {
|
|
81913
|
-
const path = workflowPath(projectRoot);
|
|
81922
|
+
async function ensureWorkflow(projectRoot, workflowFile) {
|
|
81923
|
+
const path = workflowPath(projectRoot, workflowFile);
|
|
81914
81924
|
const file2 = Bun.file(path);
|
|
81915
81925
|
if (await file2.exists())
|
|
81916
81926
|
return path;
|
|
@@ -83953,6 +83963,12 @@ var init_SetupWizard = __esm(async () => {
|
|
|
83953
83963
|
description: "Set when the task finishes and its pull request is opened.",
|
|
83954
83964
|
slots: ["setDone"]
|
|
83955
83965
|
},
|
|
83966
|
+
{
|
|
83967
|
+
key: "prReady",
|
|
83968
|
+
label: "PR ready",
|
|
83969
|
+
description: "Optional, additive: set when the PR is marked ready for human review (non-draft), layered on top of Done. Skipped only on the immediate non-draft auto-merge path.",
|
|
83970
|
+
slots: ["setPrReady"]
|
|
83971
|
+
},
|
|
83956
83972
|
{
|
|
83957
83973
|
key: "error",
|
|
83958
83974
|
label: "Error",
|
|
@@ -84041,6 +84057,11 @@ var init_migrations = __esm(() => {
|
|
|
84041
84057
|
version: 3,
|
|
84042
84058
|
description: "The per-workflow `linear.assignee` setting is replaced by a global " + "`linear.filter` expression (e.g. `assignee = me`) applied to every " + "ticket fetch. Existing `assignee` values are folded in automatically; " + "note that an empty filter now defaults to `assignee = me` (it previously " + "meant unassigned-only).",
|
|
84043
84059
|
fields: ["linear.filter"]
|
|
84060
|
+
},
|
|
84061
|
+
{
|
|
84062
|
+
version: 4,
|
|
84063
|
+
description: "A new additive `setPrReady` Linear indicator marks a ticket the moment its " + "PR is human-mergeable (ready, non-draft), layered on top of `setDone`. " + "Re-run the indicator builder to add it, or keep your current indicators.",
|
|
84064
|
+
fields: ["linear.indicators"]
|
|
84044
84065
|
}
|
|
84045
84066
|
];
|
|
84046
84067
|
LATEST_MIGRATION_VERSION = MIGRATIONS.reduce((max2, migration) => Math.max(max2, migration.version), 0);
|
|
@@ -84341,6 +84362,12 @@ function getLayout() {
|
|
|
84341
84362
|
throw new Error("No layout in context. Set layout when calling runWithContext().");
|
|
84342
84363
|
return ctx.layout;
|
|
84343
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
|
+
}
|
|
84344
84371
|
function runWithContext(ctx, fn) {
|
|
84345
84372
|
return contextStore.run(ctx, fn);
|
|
84346
84373
|
}
|
|
@@ -84691,6 +84718,7 @@ var init_output2 = __esm(() => {
|
|
|
84691
84718
|
});
|
|
84692
84719
|
|
|
84693
84720
|
// packages/cli-args/src/common-args.ts
|
|
84721
|
+
import { resolve as resolve3 } from "path";
|
|
84694
84722
|
function initialCommonArgs() {
|
|
84695
84723
|
return {
|
|
84696
84724
|
engine: "claude",
|
|
@@ -84704,6 +84732,7 @@ function initialCommonArgs() {
|
|
|
84704
84732
|
log: false,
|
|
84705
84733
|
verbose: false,
|
|
84706
84734
|
projectRoot: undefined,
|
|
84735
|
+
workflowFile: undefined,
|
|
84707
84736
|
name: "",
|
|
84708
84737
|
prompt: "",
|
|
84709
84738
|
fromAgent: false
|
|
@@ -84726,6 +84755,7 @@ function emptyParseState() {
|
|
|
84726
84755
|
pendingOption: null,
|
|
84727
84756
|
expectClaudeModel: false,
|
|
84728
84757
|
expectProjectRoot: false,
|
|
84758
|
+
expectWorkflow: false,
|
|
84729
84759
|
expectName: false,
|
|
84730
84760
|
expectPrompt: false,
|
|
84731
84761
|
expectPromptFile: false,
|
|
@@ -84750,6 +84780,11 @@ function parseCommonArg(arg, args, state) {
|
|
|
84750
84780
|
state.expectProjectRoot = false;
|
|
84751
84781
|
return true;
|
|
84752
84782
|
}
|
|
84783
|
+
if (state.expectWorkflow) {
|
|
84784
|
+
args.workflowFile = resolve3(arg);
|
|
84785
|
+
state.expectWorkflow = false;
|
|
84786
|
+
return true;
|
|
84787
|
+
}
|
|
84753
84788
|
if (state.expectName) {
|
|
84754
84789
|
args.name = arg;
|
|
84755
84790
|
state.expectName = false;
|
|
@@ -84796,6 +84831,9 @@ function parseCommonArg(arg, args, state) {
|
|
|
84796
84831
|
case "--project-root":
|
|
84797
84832
|
state.expectProjectRoot = true;
|
|
84798
84833
|
return true;
|
|
84834
|
+
case "--workflow":
|
|
84835
|
+
state.expectWorkflow = true;
|
|
84836
|
+
return true;
|
|
84799
84837
|
case "--name":
|
|
84800
84838
|
state.expectName = true;
|
|
84801
84839
|
return true;
|
|
@@ -84945,6 +84983,7 @@ var init_cli = __esm(() => {
|
|
|
84945
84983
|
"",
|
|
84946
84984
|
"Options:",
|
|
84947
84985
|
" --name <name> Change name (required for most commands)",
|
|
84986
|
+
" --workflow <path> Path to an alternate WORKFLOW.md (default: <project>/WORKFLOW.md)",
|
|
84948
84987
|
" --prompt <text> Task description",
|
|
84949
84988
|
" --prompt-file <path> Read prompt from file",
|
|
84950
84989
|
" --model <model> Set model (haiku|sonnet|opus)",
|
|
@@ -85028,6 +85067,7 @@ var init_task_cli = __esm(() => {
|
|
|
85028
85067
|
"",
|
|
85029
85068
|
"Options:",
|
|
85030
85069
|
" --name <name> Change name (required)",
|
|
85070
|
+
" --workflow <path> Path to an alternate WORKFLOW.md (default: <project>/WORKFLOW.md)",
|
|
85031
85071
|
" --prompt <text> Task description",
|
|
85032
85072
|
" --prompt-file <path> Read prompt from file",
|
|
85033
85073
|
" --model <model> Set model (haiku|sonnet|opus)",
|
|
@@ -97361,10 +97401,10 @@ var require_xstate_development_cjs = __commonJS((exports) => {
|
|
|
97361
97401
|
}
|
|
97362
97402
|
}
|
|
97363
97403
|
function toPromise(actor) {
|
|
97364
|
-
return new Promise((
|
|
97404
|
+
return new Promise((resolve4, reject2) => {
|
|
97365
97405
|
actor.subscribe({
|
|
97366
97406
|
complete: () => {
|
|
97367
|
-
|
|
97407
|
+
resolve4(actor.getSnapshot().output);
|
|
97368
97408
|
},
|
|
97369
97409
|
error: reject2
|
|
97370
97410
|
});
|
|
@@ -98795,10 +98835,10 @@ async function runEngine(opts) {
|
|
|
98795
98835
|
await mkdir4(dirname6(opts.logFile), { recursive: true });
|
|
98796
98836
|
rawWriter = createWriteStream(opts.logFile, { flags: "a" });
|
|
98797
98837
|
}
|
|
98798
|
-
const closeRaw = () => new Promise((
|
|
98838
|
+
const closeRaw = () => new Promise((resolve4) => {
|
|
98799
98839
|
if (!rawWriter)
|
|
98800
|
-
return
|
|
98801
|
-
rawWriter.end(
|
|
98840
|
+
return resolve4();
|
|
98841
|
+
rawWriter.end(resolve4);
|
|
98802
98842
|
});
|
|
98803
98843
|
const userOnFeedEvent = opts.onFeedEvent;
|
|
98804
98844
|
const onFeedEvent = (event) => {
|
|
@@ -98942,8 +98982,8 @@ var init_flow_machine = __esm(() => {
|
|
|
98942
98982
|
} catch {}
|
|
98943
98983
|
const exited = await Promise.race([
|
|
98944
98984
|
worker.exited.then(() => "exited"),
|
|
98945
|
-
new Promise((
|
|
98946
|
-
const t = setTimeout(() =>
|
|
98985
|
+
new Promise((resolve4) => {
|
|
98986
|
+
const t = setTimeout(() => resolve4("timeout"), graceMs);
|
|
98947
98987
|
t.unref();
|
|
98948
98988
|
})
|
|
98949
98989
|
]);
|
|
@@ -100117,7 +100157,7 @@ var init_loop2 = __esm(() => {
|
|
|
100117
100157
|
// apps/loop/src/hooks/useLoop.ts
|
|
100118
100158
|
import { join as join15 } from "path";
|
|
100119
100159
|
function sleep(seconds) {
|
|
100120
|
-
return new Promise((
|
|
100160
|
+
return new Promise((resolve4) => setTimeout(resolve4, seconds * 1000));
|
|
100121
100161
|
}
|
|
100122
100162
|
function useLoop(opts) {
|
|
100123
100163
|
const outerLayoutRef = import_react57.useRef(null);
|
|
@@ -101289,6 +101329,8 @@ async function runDebug(opts) {
|
|
|
101289
101329
|
out(" \u26A0 setError applied \u2014 issue is quarantined in Linear");
|
|
101290
101330
|
if (logHas("setDone applied"))
|
|
101291
101331
|
out(" \u2713 setDone applied \u2014 issue marked done in Linear");
|
|
101332
|
+
if (logHas("setPrReady applied"))
|
|
101333
|
+
out(" \u2713 setPrReady applied \u2014 PR is ready for human review");
|
|
101292
101334
|
if (logHas("clearConflicted applied"))
|
|
101293
101335
|
out(" \u2713 clearConflicted applied");
|
|
101294
101336
|
if (logHas("setConflicted applied"))
|
|
@@ -101367,7 +101409,7 @@ async function main2(argv) {
|
|
|
101367
101409
|
await mkdir6(statesDir, { recursive: true });
|
|
101368
101410
|
await ensureRalphGitignore(projectRoot);
|
|
101369
101411
|
const { ensureWorkflow: ensureWorkflow2 } = await Promise.resolve().then(() => (init_workflow(), exports_workflow));
|
|
101370
|
-
const workflowPath2 = await ensureWorkflow2(projectRoot);
|
|
101412
|
+
const workflowPath2 = await ensureWorkflow2(projectRoot, args.workflowFile);
|
|
101371
101413
|
process.stdout.write(`Workflow config: ${workflowPath2}
|
|
101372
101414
|
`);
|
|
101373
101415
|
const openspecBin = resolveOpenspecBin(import.meta.dir);
|
|
@@ -101738,6 +101780,7 @@ var init_cli2 = __esm(() => {
|
|
|
101738
101780
|
"getAutoMerge",
|
|
101739
101781
|
"setInProgress",
|
|
101740
101782
|
"setDone",
|
|
101783
|
+
"setPrReady",
|
|
101741
101784
|
"setError"
|
|
101742
101785
|
]);
|
|
101743
101786
|
GET_KEYS = new Set(["getTodo", "getInProgress", "getAutoMerge"]);
|
|
@@ -101754,6 +101797,7 @@ var init_cli2 = __esm(() => {
|
|
|
101754
101797
|
"",
|
|
101755
101798
|
"Options:",
|
|
101756
101799
|
" --name <id> Change name / ticket identifier (list / debug filter)",
|
|
101800
|
+
" --workflow <path> Path to an alternate WORKFLOW.md (default: <project>/WORKFLOW.md)",
|
|
101757
101801
|
" --prompt <text> Task description appended to every scaffolded proposal",
|
|
101758
101802
|
" --prompt-file <path> Read prompt from file",
|
|
101759
101803
|
" --model <model> Set model (haiku|sonnet|opus)",
|
|
@@ -101776,9 +101820,10 @@ var init_cli2 = __esm(() => {
|
|
|
101776
101820
|
" --worktree Run each task in its own git worktree",
|
|
101777
101821
|
" --indicator <k>:<t>:<v> Override an indicator (repeatable).",
|
|
101778
101822
|
" Keys: getTodo, getInProgress, getAutoMerge,",
|
|
101779
|
-
" setInProgress, setDone, setError",
|
|
101823
|
+
" setInProgress, setDone, setPrReady, setError",
|
|
101780
101824
|
" Types: label, status, attachment, project, comment",
|
|
101781
101825
|
" --indicator setInProgress:attachment:In Progress",
|
|
101826
|
+
" --indicator setPrReady:status:In Review (additive ready marker)",
|
|
101782
101827
|
" (attachment upserts a single 'Ralphy' entry; value = subtitle)",
|
|
101783
101828
|
" --create-pr Push the worker branch and open a GitHub PR on success (needs --worktree)",
|
|
101784
101829
|
" --fix-ci After opening the PR, re-run on CI failures until green (needs --create-pr)",
|
|
@@ -101813,12 +101858,12 @@ __export(exports_config, {
|
|
|
101813
101858
|
loadRalphyConfig: () => loadRalphyConfig,
|
|
101814
101859
|
ensureRalphyConfig: () => ensureRalphyConfig
|
|
101815
101860
|
});
|
|
101816
|
-
async function loadRalphyConfig(projectRoot) {
|
|
101817
|
-
const { config: config2 } = await loadWorkflow(projectRoot);
|
|
101861
|
+
async function loadRalphyConfig(projectRoot, workflowFile) {
|
|
101862
|
+
const { config: config2 } = await loadWorkflow(projectRoot, workflowFile);
|
|
101818
101863
|
return config2;
|
|
101819
101864
|
}
|
|
101820
|
-
async function ensureRalphyConfig(projectRoot) {
|
|
101821
|
-
return ensureWorkflow(projectRoot);
|
|
101865
|
+
async function ensureRalphyConfig(projectRoot, workflowFile) {
|
|
101866
|
+
return ensureWorkflow(projectRoot, workflowFile);
|
|
101822
101867
|
}
|
|
101823
101868
|
var init_config = __esm(() => {
|
|
101824
101869
|
init_workflow();
|
|
@@ -102125,7 +102170,7 @@ async function runCapability(cap, args, ctx = {}) {
|
|
|
102125
102170
|
throw lastError;
|
|
102126
102171
|
}
|
|
102127
102172
|
function sleepMs(ms) {
|
|
102128
|
-
return new Promise((
|
|
102173
|
+
return new Promise((resolve4) => setTimeout(resolve4, ms));
|
|
102129
102174
|
}
|
|
102130
102175
|
|
|
102131
102176
|
// packages/workflow/src/boundaries.ts
|
|
@@ -104248,6 +104293,7 @@ async function runPrPhase(input, deps) {
|
|
|
104248
104293
|
emit: emit3,
|
|
104249
104294
|
respawnWorker,
|
|
104250
104295
|
registerPr,
|
|
104296
|
+
onPrReady,
|
|
104251
104297
|
checkPrConflict,
|
|
104252
104298
|
resolveDependencyBaseBranch
|
|
104253
104299
|
} = deps;
|
|
@@ -104442,6 +104488,9 @@ ${indented}${suffix}`, "yellow");
|
|
|
104442
104488
|
log3(`! manual merge failed for ${prUrl}: ${e.stderr?.trim() || e.message}`, "yellow");
|
|
104443
104489
|
}
|
|
104444
104490
|
}
|
|
104491
|
+
if (!(wantAutoMerge && !prReadyNeeded)) {
|
|
104492
|
+
await onPrReady?.(prUrl);
|
|
104493
|
+
}
|
|
104445
104494
|
return 0;
|
|
104446
104495
|
}
|
|
104447
104496
|
async function runWorktreeCleanupPhase(input, deps) {
|
|
@@ -104647,6 +104696,7 @@ async function runPostTask(input, deps) {
|
|
|
104647
104696
|
emit: emit3,
|
|
104648
104697
|
respawnWorker,
|
|
104649
104698
|
...deps.registerPr !== undefined ? { registerPr: deps.registerPr } : {},
|
|
104699
|
+
...deps.onPrReady !== undefined ? { onPrReady: deps.onPrReady } : {},
|
|
104650
104700
|
...deps.checkPrConflict !== undefined ? { checkPrConflict: deps.checkPrConflict } : {},
|
|
104651
104701
|
...deps.resolveDependencyBaseBranch !== undefined ? { resolveDependencyBaseBranch: deps.resolveDependencyBaseBranch } : {}
|
|
104652
104702
|
});
|
|
@@ -107120,7 +107170,7 @@ function createPrepareHelpers(input) {
|
|
|
107120
107170
|
}
|
|
107121
107171
|
let workflowPrompt = "";
|
|
107122
107172
|
try {
|
|
107123
|
-
const workflow = await loadWorkflow(projectRoot);
|
|
107173
|
+
const workflow = await loadWorkflow(projectRoot, args.workflowFile);
|
|
107124
107174
|
workflowPrompt = renderWorkflowPrompt(workflow, {
|
|
107125
107175
|
issue: {
|
|
107126
107176
|
identifier: issue2.identifier,
|
|
@@ -108150,6 +108200,8 @@ function createSpawnWorker(input) {
|
|
|
108150
108200
|
indicators,
|
|
108151
108201
|
cmdRunner,
|
|
108152
108202
|
gitRunner,
|
|
108203
|
+
applyIndicator,
|
|
108204
|
+
bus,
|
|
108153
108205
|
onLog,
|
|
108154
108206
|
diag,
|
|
108155
108207
|
runners,
|
|
@@ -108378,6 +108430,23 @@ function createSpawnWorker(input) {
|
|
|
108378
108430
|
runScript,
|
|
108379
108431
|
...retroDepEntry(args.agentDebug, runRetrospectiveHook),
|
|
108380
108432
|
registerPr: (cn, url2) => onPrRegistered(cn, url2),
|
|
108433
|
+
...issueForChange && indicators.setPrReady ? {
|
|
108434
|
+
onPrReady: async () => {
|
|
108435
|
+
const issue2 = issueForChange;
|
|
108436
|
+
const marker = indicators.setPrReady;
|
|
108437
|
+
try {
|
|
108438
|
+
await applyIndicator(issue2, marker);
|
|
108439
|
+
onLog(` ${issue2.identifier}: setPrReady applied`, "gray");
|
|
108440
|
+
} catch (err) {
|
|
108441
|
+
onLog(`! Linear setPrReady failed for ${issue2.identifier}: ${err.message}`, "yellow");
|
|
108442
|
+
emitCapture(bus, "agent_indicator_failed", {
|
|
108443
|
+
indicator: "setPrReady",
|
|
108444
|
+
issue_identifier: issue2.identifier,
|
|
108445
|
+
error: err.message
|
|
108446
|
+
});
|
|
108447
|
+
}
|
|
108448
|
+
}
|
|
108449
|
+
} : {},
|
|
108381
108450
|
...onWorkerPhase && {
|
|
108382
108451
|
onPhase: (phase2, detail) => onWorkerPhase(changeName, phase2, detail)
|
|
108383
108452
|
},
|
|
@@ -108415,6 +108484,7 @@ var init_worker = __esm(() => {
|
|
|
108415
108484
|
init_agent_run_state();
|
|
108416
108485
|
init_retro();
|
|
108417
108486
|
init_engine();
|
|
108487
|
+
init_coordinator();
|
|
108418
108488
|
});
|
|
108419
108489
|
|
|
108420
108490
|
// apps/agent/src/agent/baseline/runner.ts
|
|
@@ -111565,11 +111635,11 @@ var require_tslib = __commonJS((exports, module) => {
|
|
|
111565
111635
|
};
|
|
111566
111636
|
__awaiter = function(thisArg, _arguments, P, generator) {
|
|
111567
111637
|
function adopt(value) {
|
|
111568
|
-
return value instanceof P ? value : new P(function(
|
|
111569
|
-
|
|
111638
|
+
return value instanceof P ? value : new P(function(resolve4) {
|
|
111639
|
+
resolve4(value);
|
|
111570
111640
|
});
|
|
111571
111641
|
}
|
|
111572
|
-
return new (P || (P = Promise))(function(
|
|
111642
|
+
return new (P || (P = Promise))(function(resolve4, reject2) {
|
|
111573
111643
|
function fulfilled(value) {
|
|
111574
111644
|
try {
|
|
111575
111645
|
step(generator.next(value));
|
|
@@ -111585,7 +111655,7 @@ var require_tslib = __commonJS((exports, module) => {
|
|
|
111585
111655
|
}
|
|
111586
111656
|
}
|
|
111587
111657
|
function step(result2) {
|
|
111588
|
-
result2.done ?
|
|
111658
|
+
result2.done ? resolve4(result2.value) : adopt(result2.value).then(fulfilled, rejected);
|
|
111589
111659
|
}
|
|
111590
111660
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
111591
111661
|
});
|
|
@@ -111814,14 +111884,14 @@ var require_tslib = __commonJS((exports, module) => {
|
|
|
111814
111884
|
}, i);
|
|
111815
111885
|
function verb(n) {
|
|
111816
111886
|
i[n] = o[n] && function(v) {
|
|
111817
|
-
return new Promise(function(
|
|
111818
|
-
v = o[n](v), settle(
|
|
111887
|
+
return new Promise(function(resolve4, reject2) {
|
|
111888
|
+
v = o[n](v), settle(resolve4, reject2, v.done, v.value);
|
|
111819
111889
|
});
|
|
111820
111890
|
};
|
|
111821
111891
|
}
|
|
111822
|
-
function settle(
|
|
111892
|
+
function settle(resolve4, reject2, d, v) {
|
|
111823
111893
|
Promise.resolve(v).then(function(v2) {
|
|
111824
|
-
|
|
111894
|
+
resolve4({ value: v2, done: d });
|
|
111825
111895
|
}, reject2);
|
|
111826
111896
|
}
|
|
111827
111897
|
};
|
|
@@ -112684,9 +112754,9 @@ var require_clone = __commonJS((exports, module) => {
|
|
|
112684
112754
|
} else if (_instanceof2(parent2, nativeSet)) {
|
|
112685
112755
|
child = new nativeSet;
|
|
112686
112756
|
} else if (_instanceof2(parent2, nativePromise)) {
|
|
112687
|
-
child = new nativePromise(function(
|
|
112757
|
+
child = new nativePromise(function(resolve4, reject2) {
|
|
112688
112758
|
parent2.then(function(value) {
|
|
112689
|
-
|
|
112759
|
+
resolve4(_clone(value, depth2 - 1));
|
|
112690
112760
|
}, function(err) {
|
|
112691
112761
|
reject2(_clone(err, depth2 - 1));
|
|
112692
112762
|
});
|
|
@@ -260735,7 +260805,7 @@ function toPdfSafe(text) {
|
|
|
260735
260805
|
return out;
|
|
260736
260806
|
}
|
|
260737
260807
|
function renderMarkdownToPdf(md, title) {
|
|
260738
|
-
return new Promise((
|
|
260808
|
+
return new Promise((resolve4, reject2) => {
|
|
260739
260809
|
try {
|
|
260740
260810
|
const doc2 = new PDFDocument({
|
|
260741
260811
|
size: PAGE_SIZE,
|
|
@@ -260744,7 +260814,7 @@ function renderMarkdownToPdf(md, title) {
|
|
|
260744
260814
|
});
|
|
260745
260815
|
const chunks = [];
|
|
260746
260816
|
doc2.on("data", (chunk2) => chunks.push(chunk2));
|
|
260747
|
-
doc2.on("end", () =>
|
|
260817
|
+
doc2.on("end", () => resolve4(new Uint8Array(Buffer.concat(chunks))));
|
|
260748
260818
|
doc2.on("error", reject2);
|
|
260749
260819
|
doc2.fillColor(COLOR_TEXT).font(FONT_BODY).fontSize(BODY_SIZE);
|
|
260750
260820
|
const tokens = g.lexer(md);
|
|
@@ -261809,6 +261879,8 @@ function buildAgentCoordinator(input) {
|
|
|
261809
261879
|
indicators,
|
|
261810
261880
|
cmdRunner,
|
|
261811
261881
|
gitRunner,
|
|
261882
|
+
applyIndicator: resolvers.applyIndicator,
|
|
261883
|
+
bus,
|
|
261812
261884
|
onLog,
|
|
261813
261885
|
diag,
|
|
261814
261886
|
runners: input.runners,
|
|
@@ -262040,7 +262112,7 @@ async function waitForActiveWorkers(deps) {
|
|
|
262040
262112
|
const budgetMs = deps.budgetMs ?? 1e4;
|
|
262041
262113
|
const warnAtMs = deps.warnAtMs ?? 5000;
|
|
262042
262114
|
deps.stop();
|
|
262043
|
-
await new Promise((
|
|
262115
|
+
await new Promise((resolve4) => {
|
|
262044
262116
|
const start = Date.now();
|
|
262045
262117
|
let warned = false;
|
|
262046
262118
|
const wait = setInterval(() => {
|
|
@@ -262048,7 +262120,7 @@ async function waitForActiveWorkers(deps) {
|
|
|
262048
262120
|
const elapsed = Date.now() - start;
|
|
262049
262121
|
if (active === 0) {
|
|
262050
262122
|
clearInterval(wait);
|
|
262051
|
-
|
|
262123
|
+
resolve4();
|
|
262052
262124
|
return;
|
|
262053
262125
|
}
|
|
262054
262126
|
if (!warned && elapsed >= warnAtMs) {
|
|
@@ -262058,7 +262130,7 @@ async function waitForActiveWorkers(deps) {
|
|
|
262058
262130
|
if (elapsed >= budgetMs) {
|
|
262059
262131
|
clearInterval(wait);
|
|
262060
262132
|
deps.onTimeout?.(active);
|
|
262061
|
-
|
|
262133
|
+
resolve4();
|
|
262062
262134
|
}
|
|
262063
262135
|
}, 100);
|
|
262064
262136
|
});
|
|
@@ -262643,8 +262715,8 @@ function AgentMode({
|
|
|
262643
262715
|
let cancelled = false;
|
|
262644
262716
|
async function init2() {
|
|
262645
262717
|
logSession(`=== session start ${SESSION_START} ===`);
|
|
262646
|
-
const cfgPath = await ensureConfig(projectRoot);
|
|
262647
|
-
const cfg2 = await loadConfig(projectRoot);
|
|
262718
|
+
const cfgPath = await ensureConfig(projectRoot, args.workflowFile);
|
|
262719
|
+
const cfg2 = await loadConfig(projectRoot, args.workflowFile);
|
|
262648
262720
|
cfgRef.current = cfg2;
|
|
262649
262721
|
appendLog(`agent mode v${VERSION} \u2014 config: ${cfgPath}`, "gray");
|
|
262650
262722
|
const apiKey = process.env["LINEAR_API_KEY"];
|
|
@@ -264548,7 +264620,7 @@ async function runList(input) {
|
|
|
264548
264620
|
}
|
|
264549
264621
|
const rows = buildLocalRows();
|
|
264550
264622
|
printLocalRows(rows);
|
|
264551
|
-
const cfg = await loadRalphyConfig(projectRoot);
|
|
264623
|
+
const cfg = await loadRalphyConfig(projectRoot, getArgs().workflowFile);
|
|
264552
264624
|
const apiKey = process.env["LINEAR_API_KEY"];
|
|
264553
264625
|
const indicators = cfg.linear.indicators;
|
|
264554
264626
|
const team = input.linearTeamOverride || cfg.linear.team;
|
|
@@ -264672,7 +264744,7 @@ async function runListDebug(input) {
|
|
|
264672
264744
|
process.exitCode = 1;
|
|
264673
264745
|
return;
|
|
264674
264746
|
}
|
|
264675
|
-
const cfg = await loadRalphyConfig(projectRoot);
|
|
264747
|
+
const cfg = await loadRalphyConfig(projectRoot, getArgs().workflowFile);
|
|
264676
264748
|
const indicators = cfg.linear.indicators;
|
|
264677
264749
|
const team = input.linearTeamOverride || cfg.linear.team;
|
|
264678
264750
|
const { assignee, anyAssignee } = resolveLinearFilter(input.linearFilterOverride, input.linearAssigneeOverride, cfg.linear.filter);
|
|
@@ -264810,8 +264882,8 @@ async function runAgentJson({
|
|
|
264810
264882
|
});
|
|
264811
264883
|
const fileSink = createJsonLogFileSink(args.jsonLogFile);
|
|
264812
264884
|
const emit3 = makeEmit(fileSink);
|
|
264813
|
-
const cfgPath = await ensureRalphyConfig(projectRoot);
|
|
264814
|
-
const cfg = await loadRalphyConfig(projectRoot);
|
|
264885
|
+
const cfgPath = await ensureRalphyConfig(projectRoot, args.workflowFile);
|
|
264886
|
+
const cfg = await loadRalphyConfig(projectRoot, args.workflowFile);
|
|
264815
264887
|
await writeAgentRunState({
|
|
264816
264888
|
projectRoot,
|
|
264817
264889
|
configPath: cfgPath,
|
|
@@ -264968,7 +265040,7 @@ async function runAgentJson({
|
|
|
264968
265040
|
}
|
|
264969
265041
|
})();
|
|
264970
265042
|
}, 1000);
|
|
264971
|
-
await new Promise((
|
|
265043
|
+
await new Promise((resolve4) => {
|
|
264972
265044
|
let shuttingDown = false;
|
|
264973
265045
|
const onSig = () => {
|
|
264974
265046
|
if (shuttingDown) {
|
|
@@ -264998,7 +265070,7 @@ async function runAgentJson({
|
|
|
264998
265070
|
});
|
|
264999
265071
|
setTimeout(() => process.exit(1), 50);
|
|
265000
265072
|
}
|
|
265001
|
-
}).then(() =>
|
|
265073
|
+
}).then(() => resolve4());
|
|
265002
265074
|
};
|
|
265003
265075
|
process.once("SIGINT", onSig);
|
|
265004
265076
|
process.once("SIGTERM", onSig);
|
|
@@ -265076,7 +265148,7 @@ async function main3(argv) {
|
|
|
265076
265148
|
if (args.ticketTokens.length > 0) {
|
|
265077
265149
|
const { loadRalphyConfig: loadRalphyConfig2 } = await Promise.resolve().then(() => (init_config(), exports_config));
|
|
265078
265150
|
const { resolveTicketNumbers: resolveTicketNumbers2, formatTicketError: formatTicketError2 } = await Promise.resolve().then(() => (init_linear_client(), exports_linear_client));
|
|
265079
|
-
const cfg = await loadRalphyConfig2(projectRoot);
|
|
265151
|
+
const cfg = await loadRalphyConfig2(projectRoot, args.workflowFile);
|
|
265080
265152
|
const team = args.linearTeam || cfg.linear.team;
|
|
265081
265153
|
try {
|
|
265082
265154
|
resolveTicketNumbers2(args.ticketTokens, team);
|