ghostrail 0.22.0 → 0.23.0
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/board/page.d.ts.map +1 -1
- package/dist/board/page.js +3 -0
- package/dist/board/page.js.map +1 -1
- package/dist/cli/commands.d.ts +25 -2
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +58 -7
- package/dist/cli/commands.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +4 -2
- package/dist/commands/help.js.map +1 -1
- package/dist/dashboard/page.d.ts +0 -14
- package/dist/dashboard/page.d.ts.map +1 -1
- package/dist/dashboard/page.js +3 -0
- package/dist/dashboard/page.js.map +1 -1
- package/dist/loop/branch.d.ts +8 -1
- package/dist/loop/branch.d.ts.map +1 -1
- package/dist/loop/branch.js +14 -2
- package/dist/loop/branch.js.map +1 -1
- package/dist/loop/engine.d.ts.map +1 -1
- package/dist/loop/engine.js +57 -5
- package/dist/loop/engine.js.map +1 -1
- package/dist/loop/ports.d.ts +4 -1
- package/dist/loop/ports.d.ts.map +1 -1
- package/dist/loop/recurrence.d.ts +43 -0
- package/dist/loop/recurrence.d.ts.map +1 -0
- package/dist/loop/recurrence.js +92 -0
- package/dist/loop/recurrence.js.map +1 -0
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/board/page.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,eAAO,MAAM,SAAS,QAkXd,CAAC"}
|
package/dist/board/page.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IN_PROGRESS_STATE } from "../store/events.js";
|
|
2
|
+
import { STABILITY_NOTICE } from "../version.js";
|
|
2
3
|
/** The self-contained board page: polls the read API and renders runs + stats. */
|
|
3
4
|
export const PAGE_HTML = `<!doctype html>
|
|
4
5
|
<html lang="en">
|
|
@@ -39,6 +40,7 @@ export const PAGE_HTML = `<!doctype html>
|
|
|
39
40
|
.subtable td { padding: .15rem .5rem .15rem 0; border-bottom: none; }
|
|
40
41
|
.detail-cell ul { margin: .25rem 0 0; padding-left: 1.2rem; }
|
|
41
42
|
.toggle { font-size: .8rem; font-weight: normal; margin-left: .75rem; }
|
|
43
|
+
footer.notice { margin-top: 1.5rem; opacity: .6; font-size: .85em; }
|
|
42
44
|
</style>
|
|
43
45
|
</head>
|
|
44
46
|
<body>
|
|
@@ -367,6 +369,7 @@ async function refresh() {
|
|
|
367
369
|
refresh();
|
|
368
370
|
setInterval(refresh, 5000);
|
|
369
371
|
</script>
|
|
372
|
+
<footer class="notice">${STABILITY_NOTICE}</footer>
|
|
370
373
|
</body>
|
|
371
374
|
</html>`;
|
|
372
375
|
//# sourceMappingURL=page.js.map
|
package/dist/board/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,kFAAkF;AAClF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAqFH,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA2R9B,gBAAgB;;QAEjC,CAAC"}
|
package/dist/cli/commands.d.ts
CHANGED
|
@@ -66,12 +66,35 @@ interface WatchFlags {
|
|
|
66
66
|
intervalMs: number;
|
|
67
67
|
intervalLabel: string;
|
|
68
68
|
maxTicks?: number;
|
|
69
|
+
/** Present (true) only when --self-update-restart was given. */
|
|
70
|
+
selfUpdateRestart?: boolean;
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
71
|
-
* Parse `ghostrail watch` options: `--interval`/`-i <duration>` (default `60s`)
|
|
72
|
-
*
|
|
73
|
+
* Parse `ghostrail watch` options: `--interval`/`-i <duration>` (default `60s`),
|
|
74
|
+
* an optional `--max-ticks <n>`, and `--self-update-restart`. Returns undefined
|
|
75
|
+
* for a malformed interval.
|
|
73
76
|
*/
|
|
74
77
|
export declare function parseWatchFlags(argv: readonly string[]): WatchFlags | undefined;
|
|
78
|
+
/** Injectables so self-update-restart can be tested without npm or a real process. */
|
|
79
|
+
export interface SelfUpdateRestartDeps {
|
|
80
|
+
currentVersion?: string;
|
|
81
|
+
/** The version the registry publishes as `latest`, or undefined if unreachable. */
|
|
82
|
+
latestVersion?: () => Promise<string | undefined>;
|
|
83
|
+
selfUpdate?: (argv: readonly string[], streams: CommandStreams) => Promise<number>;
|
|
84
|
+
/** Relaunches with the same `watch` argv `watch` was originally given. */
|
|
85
|
+
restart?: (watchArgv: readonly string[]) => void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* `--self-update-restart`'s whole behavior: called between ticks (never
|
|
89
|
+
* mid-tick, since `watchLoop` awaits `tick()` to completion first). Checks
|
|
90
|
+
* whether a newer ghostrail is published; if not, this is a no-op — refusing
|
|
91
|
+
* to start an update *is* the "pause ticks" the feature asks for, since the
|
|
92
|
+
* caller simply lets the loop continue. If a newer version exists, updates the
|
|
93
|
+
* same way `ghostrail self-update` does and, only on success, relaunches a
|
|
94
|
+
* detached process with the exact argv `watch` was given. A failed update is
|
|
95
|
+
* reported and left running on the current version rather than restarted.
|
|
96
|
+
*/
|
|
97
|
+
export declare function maybeSelfUpdateAndRestart(watchArgv: readonly string[], streams: CommandStreams, deps?: SelfUpdateRestartDeps): Promise<boolean>;
|
|
75
98
|
export declare function cmdWatch(argv: readonly string[], streams: CommandStreams, env?: CommandEnv, cwd?: string): Promise<number>;
|
|
76
99
|
/** `ghostrail triage`: decompose large issues in the triage queue into sub-issues. */
|
|
77
100
|
export declare function cmdTriage(argv: readonly string[], streams: CommandStreams, env?: CommandEnv, cwd?: string): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAatD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAO3D,OAAO,EACL,KAAK,UAAU,EAKhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,YAAY,EAOlB,MAAM,qBAAqB,CAAC;AAmD7B,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,mBAAmB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA4B/C,OAAO,EAGL,KAAK,cAAc,EAOpB,MAAM,qBAAqB,CAAC;AAU7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,KAAK,KAAK,EAAqC,MAAM,aAAa,CAAC;AAG5E,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,CAc/F;AAED,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAwJD,UAAU,SAAS;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,GAAG,EAAE,YAAY,CAAC;IAClB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,KAAK,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;AAE9E;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,SAAS,GAAE,aAA+D,GACzE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA6ChC;AAED,iDAAiD;AACjD,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,UAAwB,EAC7B,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/commands.js
CHANGED
|
@@ -42,7 +42,7 @@ import { DASHBOARD_UNIT, renderDashboardUnit, servicePath, stopTimeoutSeconds, s
|
|
|
42
42
|
import { applySkillPlan, describePlan, pathCtx, planSkillInstall, uninstallSkill, } from "../skill/install.js";
|
|
43
43
|
import { FileStore } from "../store/file-store.js";
|
|
44
44
|
import { triageTick } from "../triage/engine.js";
|
|
45
|
-
import { VERSION } from "../version.js";
|
|
45
|
+
import { STABILITY_NOTICE, VERSION } from "../version.js";
|
|
46
46
|
import { askOnTerminal, parseInstallOffers } from "./prompt.js";
|
|
47
47
|
import { describeStalledUpdate } from "./update-diagnosis.js";
|
|
48
48
|
/**
|
|
@@ -253,12 +253,14 @@ export async function cmdRun(argv, streams, env = process.env, cwd = process.cwd
|
|
|
253
253
|
return result.results.some((r) => r.state === "failed") ? 1 : 0;
|
|
254
254
|
}
|
|
255
255
|
/**
|
|
256
|
-
* Parse `ghostrail watch` options: `--interval`/`-i <duration>` (default `60s`)
|
|
257
|
-
*
|
|
256
|
+
* Parse `ghostrail watch` options: `--interval`/`-i <duration>` (default `60s`),
|
|
257
|
+
* an optional `--max-ticks <n>`, and `--self-update-restart`. Returns undefined
|
|
258
|
+
* for a malformed interval.
|
|
258
259
|
*/
|
|
259
260
|
export function parseWatchFlags(argv) {
|
|
260
261
|
let intervalLabel = "60s";
|
|
261
262
|
let maxTicks;
|
|
263
|
+
let selfUpdateRestart = false;
|
|
262
264
|
for (let i = 0; i < argv.length; i++) {
|
|
263
265
|
const arg = argv[i];
|
|
264
266
|
const next = argv[i + 1];
|
|
@@ -272,13 +274,51 @@ export function parseWatchFlags(argv) {
|
|
|
272
274
|
maxTicks = n;
|
|
273
275
|
i++;
|
|
274
276
|
}
|
|
277
|
+
else if (arg === "--self-update-restart") {
|
|
278
|
+
selfUpdateRestart = true;
|
|
279
|
+
}
|
|
275
280
|
}
|
|
276
281
|
const intervalMs = parseDuration(intervalLabel);
|
|
277
282
|
if (intervalMs === null)
|
|
278
283
|
return undefined;
|
|
279
|
-
return
|
|
280
|
-
|
|
281
|
-
|
|
284
|
+
return {
|
|
285
|
+
intervalMs,
|
|
286
|
+
intervalLabel,
|
|
287
|
+
...(maxTicks === undefined ? {} : { maxTicks }),
|
|
288
|
+
...(selfUpdateRestart ? { selfUpdateRestart: true } : {}),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/** Detached so the relaunch survives this process exiting right after. */
|
|
292
|
+
function defaultRestart(watchArgv) {
|
|
293
|
+
spawn("ghostrail", ["watch", ...watchArgv], { stdio: "inherit", detached: true }).unref();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* `--self-update-restart`'s whole behavior: called between ticks (never
|
|
297
|
+
* mid-tick, since `watchLoop` awaits `tick()` to completion first). Checks
|
|
298
|
+
* whether a newer ghostrail is published; if not, this is a no-op — refusing
|
|
299
|
+
* to start an update *is* the "pause ticks" the feature asks for, since the
|
|
300
|
+
* caller simply lets the loop continue. If a newer version exists, updates the
|
|
301
|
+
* same way `ghostrail self-update` does and, only on success, relaunches a
|
|
302
|
+
* detached process with the exact argv `watch` was given. A failed update is
|
|
303
|
+
* reported and left running on the current version rather than restarted.
|
|
304
|
+
*/
|
|
305
|
+
export async function maybeSelfUpdateAndRestart(watchArgv, streams, deps = {}) {
|
|
306
|
+
const current = deps.currentVersion ?? VERSION;
|
|
307
|
+
const latestVersion = deps.latestVersion ?? registryLatestVersion;
|
|
308
|
+
const selfUpdate = deps.selfUpdate ?? cmdSelfUpdate;
|
|
309
|
+
const restart = deps.restart ?? defaultRestart;
|
|
310
|
+
const latest = await latestVersion();
|
|
311
|
+
if (latest === undefined || latest === current)
|
|
312
|
+
return false;
|
|
313
|
+
streams.err(`self-update-restart: ${current} -> ${latest} available; updating\n`);
|
|
314
|
+
const code = await selfUpdate([], streams);
|
|
315
|
+
if (code !== 0) {
|
|
316
|
+
streams.err("self-update-restart: update failed; staying on the running version\n");
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
streams.err(`self-update-restart: restarting: ghostrail watch ${watchArgv.join(" ")}\n`);
|
|
320
|
+
restart(watchArgv);
|
|
321
|
+
return true;
|
|
282
322
|
}
|
|
283
323
|
/**
|
|
284
324
|
* The passes this config can run under `watch`: the fix queue always, plus
|
|
@@ -357,6 +397,7 @@ export async function cmdWatch(argv, streams, env = process.env, cwd = process.c
|
|
|
357
397
|
}
|
|
358
398
|
const passes = schedulablePasses(setup, streams);
|
|
359
399
|
streams.err(`watching every ${watch.intervalLabel}${describeSchedule(passes)}; press Ctrl-C to stop\n`);
|
|
400
|
+
let restarting = false;
|
|
360
401
|
try {
|
|
361
402
|
const controlDir = setup.stateDir;
|
|
362
403
|
// In memory, for the life of this process: a restart re-runs every pass
|
|
@@ -415,9 +456,17 @@ export async function cmdWatch(argv, streams, env = process.env, cwd = process.c
|
|
|
415
456
|
catch {
|
|
416
457
|
// the countdown is a convenience, not something the loop depends on
|
|
417
458
|
}
|
|
459
|
+
// Checked once per tick, never mid-tick: `watchLoop` awaits this whole
|
|
460
|
+
// callback before starting the next one, so this only ever runs
|
|
461
|
+
// between ticks (specs/self-update-restart.spec.md).
|
|
462
|
+
if (watch.selfUpdateRestart === true) {
|
|
463
|
+
restarting = await maybeSelfUpdateAndRestart(argv, streams);
|
|
464
|
+
if (restarting)
|
|
465
|
+
controller.abort();
|
|
466
|
+
}
|
|
418
467
|
},
|
|
419
468
|
});
|
|
420
|
-
streams.err(`stopped after ${ticks} tick(s)\n`);
|
|
469
|
+
streams.err(restarting ? "stopped for self-update-restart\n" : `stopped after ${ticks} tick(s)\n`);
|
|
421
470
|
return 0;
|
|
422
471
|
}
|
|
423
472
|
finally {
|
|
@@ -1854,6 +1903,7 @@ export async function cmdInit(argv, streams, cwd = process.cwd(), env = process.
|
|
|
1854
1903
|
}
|
|
1855
1904
|
await registerGhostrail(repo, env, streams, { repoint, forceRegister: register });
|
|
1856
1905
|
streams.out(await initNextStepsHint(env, cwd));
|
|
1906
|
+
streams.out(`${STABILITY_NOTICE}\n`);
|
|
1857
1907
|
return 0;
|
|
1858
1908
|
}
|
|
1859
1909
|
/**
|
|
@@ -1991,6 +2041,7 @@ async function npmInstallGlobalResult(version) {
|
|
|
1991
2041
|
* install` gives you exactly x.y.z.
|
|
1992
2042
|
*/
|
|
1993
2043
|
export async function cmdInstall(argv, streams, env = process.env, cwd = process.cwd(), deps = {}) {
|
|
2044
|
+
streams.out(`${STABILITY_NOTICE}\n`);
|
|
1994
2045
|
streams.out(`installing ghostrail@${VERSION} globally...\n`);
|
|
1995
2046
|
const code = await npmInstallGlobal(VERSION);
|
|
1996
2047
|
if (code !== 0) {
|