@sleds/cli 0.1.41 → 0.1.42
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/sleds.mjs +47 -25
- package/package.json +1 -1
package/dist/sleds.mjs
CHANGED
|
@@ -345,11 +345,11 @@ var init_guides = __esm(() => {
|
|
|
345
345
|
{
|
|
346
346
|
do: "Open `Work` and read the tabs",
|
|
347
347
|
where: "Work",
|
|
348
|
-
note: "
|
|
348
|
+
note: "Three tabs, each with its count: Ready · On sleds · Landed this week; what waits for product's yes is on Intake (a line above the tabs says how many). The search at the top narrows the rows as you type; the chips beside the tabs narrow by source, worth, type and `filed by` (you first). Your own work, and what is in front of you, is on Sleds."
|
|
349
349
|
},
|
|
350
350
|
{
|
|
351
351
|
do: "Read a pool item: the band, the worth, the chip, the readiness",
|
|
352
|
-
note: "`suggested` (dashed, with a star) names the sled the rules (and the model) suggest, with why on hover; `waiting for product` needs a yes; the five boxes say what the item has (why · done · worth · repo · route) and `N gaps` names what is missing before anyone could start; an amber note says a related or duplicate item exists. `Take it` puts it on your sled; the ⋯ menu can put it on the suggested sled."
|
|
352
|
+
note: "`suggested` (dashed, with a star) names the sled the rules (and the model) suggest, with why on hover; `waiting for product` needs a yes (on Intake, where a row opens a modal to decide it); the five boxes say what the item has (why · done · worth · repo · route) and `N gaps` names what is missing before anyone could start; an amber note says a related or duplicate item exists. `Take it` puts it on your sled; the ⋯ menu can put it on the suggested sled."
|
|
353
353
|
},
|
|
354
354
|
{
|
|
355
355
|
do: "Read a sled card: the seats, the jobs, the band spent",
|
|
@@ -679,16 +679,16 @@ var init_guides = __esm(() => {
|
|
|
679
679
|
note: "Emails, comma-separated. Blank means any owner or admin of the workspace."
|
|
680
680
|
},
|
|
681
681
|
{
|
|
682
|
-
do: "Approvers decide
|
|
683
|
-
where: "Overview › `Waiting on product
|
|
684
|
-
note: "`Approve` opens the gate; `Defer` keeps it closed and carries the note back to the filer, who answers in the brief and it comes back. In chat the same is `approve {project, decision, note?}`."
|
|
682
|
+
do: "Approvers decide on Intake",
|
|
683
|
+
where: "Intake (the rail), or Overview › `Waiting on product`",
|
|
684
|
+
note: "A row opens the ask in a modal over the ledger: `Approve` opens the gate; `Defer` keeps it closed and carries the note back to the filer, who answers in the brief and it comes back; `Ask the filer` sends the one question. A, D and Q do the same from the keyboard and move to the next ask. In chat the same is `approve {project, decision, note?}`."
|
|
685
685
|
},
|
|
686
686
|
{
|
|
687
687
|
do: "Plan after the yes",
|
|
688
688
|
note: "An approved epic can be planned in chat (`plan`): its milestones are sized, filed under it, and inherit the yes — they do not queue again. The epic's cap is the sum."
|
|
689
689
|
}
|
|
690
690
|
],
|
|
691
|
-
check: "File an ask from chat (`intake`): its item shows waiting for product
|
|
691
|
+
check: "File an ask from chat (`intake`): its item shows waiting for product on Intake, the approvers see it under Waiting on product, and `run` on it is refused until someone approves."
|
|
692
692
|
}
|
|
693
693
|
];
|
|
694
694
|
});
|
|
@@ -1346,6 +1346,9 @@ var init_related = __esm(() => {
|
|
|
1346
1346
|
"via"
|
|
1347
1347
|
]);
|
|
1348
1348
|
});
|
|
1349
|
+
|
|
1350
|
+
// ../../packages/shared/src/intake/rank.ts
|
|
1351
|
+
var init_rank = () => {};
|
|
1349
1352
|
// ../../packages/shared/src/profile/profile.ts
|
|
1350
1353
|
var LIGHT;
|
|
1351
1354
|
var init_profile = __esm(() => {
|
|
@@ -5543,6 +5546,34 @@ var init_fieldMap = __esm(() => {
|
|
|
5543
5546
|
var SEPT_30 = "/whats-new/2026-09-30", WHATS_NEW;
|
|
5544
5547
|
var init_whatsNew = __esm(() => {
|
|
5545
5548
|
WHATS_NEW = [
|
|
5549
|
+
{
|
|
5550
|
+
date: "2026-10-20",
|
|
5551
|
+
title: "Intake: the gate gets its own page",
|
|
5552
|
+
lede: "What waits for product's yes was the first tab on Work. It is a page now, Intake, between Work and Sleds on the rail: the same rows, with the policy an approver decides under on one line, the counts over them, and a modal that reads one ask fast and decides it without leaving the list. Work keeps what is ready and who is on it, and opens on Ready.",
|
|
5553
|
+
sections: [
|
|
5554
|
+
{
|
|
5555
|
+
title: "One ask at a time, over the ledger",
|
|
5556
|
+
where: "Intake › a row",
|
|
5557
|
+
body: "A row on Intake opens a centred modal, not the item's page: what SLEDS says and why, the six steps from filed to landed with this one's place on them, the brief, and — folded, each with its answer on the fold — the ticket, the split and who takes it. Approve, Defer with a note and Ask the filer are at the foot, with Open the full item for anything deeper. ‹ › and the arrow keys walk the ledger in its order; A, D and Q decide and move on; Decide in order starts at the top. Esc goes back to the ledger as it was."
|
|
5558
|
+
},
|
|
5559
|
+
{
|
|
5560
|
+
title: "The policy on the page",
|
|
5561
|
+
where: "Intake, above the rows",
|
|
5562
|
+
body: "Above the rows, one dashed line says whose yes is needed and for which asks, who the approvers are, and what a yes writes to Jira — read from Policy, with Change in Policy beside it. Under it, four counts: open, need a worth, waiting on a filer, and became work this week (which opens the Record)."
|
|
5563
|
+
},
|
|
5564
|
+
{
|
|
5565
|
+
title: "Where things went on Work",
|
|
5566
|
+
where: "Work",
|
|
5567
|
+
body: "Work's tabs are Ready, On sleds and Landed. A line above them says how many wait in Intake and links there; the Board layout says the same in place of its Waiting column. The rail's count under Work is what is ready now; Intake's is what waits. Old links — Approvals, a waiting lane, a search hit on a waiting item — land on Intake."
|
|
5568
|
+
}
|
|
5569
|
+
],
|
|
5570
|
+
also: [
|
|
5571
|
+
{
|
|
5572
|
+
label: "Next",
|
|
5573
|
+
text: "Worth from the modal and from Jira's Business Value, the return of each ask against its time, SLEDS's own suggested verdict, and auto-approve in shadow mode first — spec 41's later slices."
|
|
5574
|
+
}
|
|
5575
|
+
]
|
|
5576
|
+
},
|
|
5546
5577
|
{
|
|
5547
5578
|
date: "2026-10-10",
|
|
5548
5579
|
title: "Docs beside the work, and webhooks for your own tools",
|
|
@@ -7523,6 +7554,7 @@ var init_src = __esm(() => {
|
|
|
7523
7554
|
init_verbs();
|
|
7524
7555
|
init_brief();
|
|
7525
7556
|
init_related();
|
|
7557
|
+
init_rank();
|
|
7526
7558
|
init_markdown2();
|
|
7527
7559
|
init_plan3();
|
|
7528
7560
|
init_recommend();
|
|
@@ -8222,6 +8254,7 @@ init_guides();
|
|
|
8222
8254
|
init_verbs();
|
|
8223
8255
|
init_brief();
|
|
8224
8256
|
init_related();
|
|
8257
|
+
init_rank();
|
|
8225
8258
|
init_markdown2();
|
|
8226
8259
|
init_plan3();
|
|
8227
8260
|
init_recommend();
|
|
@@ -10267,28 +10300,17 @@ function cmuxRunner(exec, deps = {}) {
|
|
|
10267
10300
|
}
|
|
10268
10301
|
let id = parseCmuxWorkspace(r.stdout);
|
|
10269
10302
|
const ref = id ? null : parseCmuxRef(r.stdout);
|
|
10270
|
-
let closed = false;
|
|
10271
10303
|
if (ref) {
|
|
10272
|
-
let
|
|
10273
|
-
for (let i = 0;i < CMUX_LIST_TRIES; i++) {
|
|
10304
|
+
for (let i = 0;i < CMUX_LIST_TRIES && !id; i++) {
|
|
10274
10305
|
if (i > 0)
|
|
10275
10306
|
sleep(CMUX_LIST_WAIT_MS);
|
|
10276
10307
|
const l = cmux(["--id-format", "both", "list-workspaces"]);
|
|
10277
|
-
if (l.status
|
|
10278
|
-
|
|
10279
|
-
listed = l.stdout;
|
|
10280
|
-
if (namedLines(l.stdout, o.name).length > 0)
|
|
10281
|
-
break;
|
|
10282
|
-
}
|
|
10283
|
-
if (listed !== null) {
|
|
10284
|
-
id = cmuxIdForRef(listed, ref, o.name);
|
|
10285
|
-
const stray = id ? null : cmuxIdForName(listed, o.name);
|
|
10286
|
-
if (stray)
|
|
10287
|
-
closed = closeWorkspace(stray);
|
|
10308
|
+
if (l.status === 0)
|
|
10309
|
+
id = cmuxIdForRef(l.stdout, ref, o.name);
|
|
10288
10310
|
}
|
|
10289
10311
|
}
|
|
10290
10312
|
if (!id) {
|
|
10291
|
-
throw new Error(ref ? `cmux workspace create ${o.name} gave ${ref} but no workspace id for it; ${
|
|
10313
|
+
throw new Error(ref ? `cmux workspace create ${o.name} gave ${ref} but no workspace id for it; ${UNWATCHED}` : `cmux workspace create ${o.name} returned no workspace (${r.stdout.trim() || "nothing"}); ${UNWATCHED}`);
|
|
10292
10314
|
}
|
|
10293
10315
|
if (group && listed && !joined) {
|
|
10294
10316
|
const c = cmux([
|
|
@@ -10422,7 +10444,7 @@ function beatBody(state, flags, host = {}, cap = {}) {
|
|
|
10422
10444
|
name: flags.name,
|
|
10423
10445
|
os: host.os ?? process.platform,
|
|
10424
10446
|
runner: flags.runner,
|
|
10425
|
-
version: host.version ?? "0.1.
|
|
10447
|
+
version: host.version ?? "0.1.42" ?? "dev",
|
|
10426
10448
|
running: live.length,
|
|
10427
10449
|
items: live.slice(0, BEAT_ITEMS).map((r) => `${r.item}/${r.node}`),
|
|
10428
10450
|
...cap.atOnce !== undefined ? { atOnce: cap.atOnce } : {},
|
|
@@ -16314,7 +16336,7 @@ async function driveEngine(o, flags, deps, until = {}) {
|
|
|
16314
16336
|
runner: deps.runner.name,
|
|
16315
16337
|
atOnce: flags.atOnce,
|
|
16316
16338
|
interval: flags.interval,
|
|
16317
|
-
cliVersion: "0.1.
|
|
16339
|
+
cliVersion: "0.1.42"
|
|
16318
16340
|
};
|
|
16319
16341
|
const beat = (checkedAt) => {
|
|
16320
16342
|
const m = deps.machine;
|
|
@@ -18376,7 +18398,7 @@ async function driveEngine2(o, flags, deps, until = {}) {
|
|
|
18376
18398
|
runner: deps.runner.name,
|
|
18377
18399
|
atOnce: flags.atOnce,
|
|
18378
18400
|
interval: flags.interval,
|
|
18379
|
-
cliVersion: "0.1.
|
|
18401
|
+
cliVersion: "0.1.42"
|
|
18380
18402
|
};
|
|
18381
18403
|
const beat = (checkedAt) => {
|
|
18382
18404
|
const m = deps.machine;
|
|
@@ -24853,7 +24875,7 @@ ${renderHelpText(argv[1])}`);
|
|
|
24853
24875
|
case "version":
|
|
24854
24876
|
case "--version":
|
|
24855
24877
|
case "-v":
|
|
24856
|
-
console.log("sleds 0.1.
|
|
24878
|
+
console.log("sleds 0.1.42");
|
|
24857
24879
|
return 0;
|
|
24858
24880
|
default:
|
|
24859
24881
|
console.error(`unknown command: ${cmd}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sleds/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.42",
|
|
4
4
|
"description": "SLEDS CLI — the cost and limits of AI agent work, decided at the wall. Point Claude Code at a SLEDS proxy; estimate before you run; hold, switch model, or run overnight when you hit a limit.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|