@mu-crew/mu 3.12.0 → 3.13.1
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/chunk-3BARPJLY.js +44 -0
- package/dist/{chunk-R2SVBZAB.js → chunk-45KQLMEL.js} +193 -93
- package/dist/chunk-45KQLMEL.js.map +1 -0
- package/dist/{chunk-XV7J56GD.js → chunk-G434JKV2.js} +4 -3
- package/dist/{chunk-XV7J56GD.js.map → chunk-G434JKV2.js.map} +1 -1
- package/dist/{chunk-IRPTNVJC.js → chunk-KUGUFBWH.js} +8622 -6026
- package/dist/chunk-KUGUFBWH.js.map +1 -0
- package/dist/{chunk-77GBZ2KR.js → chunk-QITLNZEM.js} +3 -1
- package/dist/{chunk-77GBZ2KR.js.map → chunk-QITLNZEM.js.map} +1 -1
- package/dist/{chunk-TEGZOXML.js → chunk-VIEYQMQA.js} +12 -10
- package/dist/chunk-VIEYQMQA.js.map +1 -0
- package/dist/{chunk-L2ABBTYG.js → chunk-WI6AWCMK.js} +3 -1
- package/dist/{chunk-L2ABBTYG.js.map → chunk-WI6AWCMK.js.map} +1 -1
- package/dist/{cli-MDCJEU74.js → cli-CKOMHBXV.js} +3581 -107
- package/dist/cli-CKOMHBXV.js.map +1 -0
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/devtools-LS4ZEPWM.js +3772 -0
- package/dist/devtools-LS4ZEPWM.js.map +1 -0
- package/dist/extension/mu-pi.js +206 -61
- package/dist/extension/mu-pi.js.map +1 -1
- package/dist/index.d.ts +309 -228
- package/dist/index.js +12 -5
- package/dist/tui-LFJ5P4Y2.js +40956 -0
- package/dist/tui-LFJ5P4Y2.js.map +1 -0
- package/dist/tui-sync-worker.js +4 -3
- package/dist/tui-sync-worker.js.map +1 -1
- package/dist/yank-XDOONQSL.js +13 -0
- package/docs/ARCHITECTURE.md +4 -1
- package/docs/ROADMAP.md +43 -38
- package/docs/VISION.md +8 -0
- package/docs/VOCABULARY.md +3 -1
- package/docs/architecture/dag.md +4 -0
- package/docs/architecture/sync.md +8 -0
- package/docs/architecture/tui.md +11 -2
- package/docs/guide/delegate.md +6 -4
- package/docs/guide/recovery.md +4 -0
- package/docs/reference/env.md +2 -2
- package/package.json +2 -1
- package/skills/mu/SKILL.md +12 -2
- package/skills/mu/recipes/adversarial-review.md +3 -0
- package/skills/mu/recipes/backlog-triage.md +2 -0
- package/skills/mu/recipes/findings.md +7 -0
- package/skills/mu/recipes/long-run.md +3 -1
- package/skills/mu/recipes/loop-until-done.md +3 -1
- package/skills/mu/recipes/orchestrator-loop.md +4 -0
- package/skills/mu/recipes/ultrathink.md +3 -1
- package/skills/mu/recipes/watcher.md +6 -1
- package/dist/chunk-IRPTNVJC.js.map +0 -1
- package/dist/chunk-PZ5AY32C.js +0 -10
- package/dist/chunk-R2SVBZAB.js.map +0 -1
- package/dist/chunk-TEGZOXML.js.map +0 -1
- package/dist/cli-MDCJEU74.js.map +0 -1
- package/dist/tui-LO75XA3O.js +0 -6452
- package/dist/tui-LO75XA3O.js.map +0 -1
- package/dist/yank-T3AYQTVR.js +0 -12
- /package/dist/{chunk-PZ5AY32C.js.map → chunk-3BARPJLY.js.map} +0 -0
- /package/dist/{yank-T3AYQTVR.js.map → yank-XDOONQSL.js.map} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { Database } from 'better-sqlite3';
|
|
2
2
|
|
|
3
3
|
type CtlState = "busy" | "idle";
|
|
4
|
+
/**
|
|
5
|
+
* pi is waiting on a blocking extension dialog (ui_prompt_start without
|
|
6
|
+
* its ui_prompt_end): a confirm, select, input, editor or custom prompt.
|
|
7
|
+
* `kind` and `title` are the innermost open dialog's; `since` is when the
|
|
8
|
+
* first one opened (ms epoch).
|
|
9
|
+
*/
|
|
10
|
+
type CtlBlocked = {
|
|
11
|
+
kind: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
since: number;
|
|
14
|
+
};
|
|
4
15
|
/** Session commands the `command` op runs: `/new`, `/reload`, `/compact`. */
|
|
5
16
|
declare const CTL_COMMANDS: readonly ["new", "reload", "compact"];
|
|
6
17
|
type CtlCommandName = (typeof CTL_COMMANDS)[number];
|
|
@@ -22,6 +33,8 @@ interface StateReading {
|
|
|
22
33
|
pending?: boolean;
|
|
23
34
|
/** ctl only: pi's settled-run count (`mu agent wait --after-runs`). */
|
|
24
35
|
runs?: number;
|
|
36
|
+
/** ctl only: the extension dialog pi is waiting on (state needs_permission). */
|
|
37
|
+
blocked?: CtlBlocked;
|
|
25
38
|
}
|
|
26
39
|
interface StateAgentRef {
|
|
27
40
|
name: string;
|
|
@@ -30,8 +43,9 @@ interface StateAgentRef {
|
|
|
30
43
|
/** When set and it names pi, the control socket is the state source. */
|
|
31
44
|
cli?: string;
|
|
32
45
|
}
|
|
33
|
-
/** ctl's idle maps to needs_input, the same as murmur's idle
|
|
34
|
-
|
|
46
|
+
/** ctl's idle maps to needs_input, the same as murmur's idle; an open
|
|
47
|
+
* extension dialog (`blocked`) maps to needs_permission. */
|
|
48
|
+
declare function ctlRuntimeState(state: CtlState, blocked?: CtlBlocked): RuntimeState;
|
|
35
49
|
declare const UNKNOWN_REASON: {
|
|
36
50
|
readonly murmurMissing: "murmur not installed";
|
|
37
51
|
readonly extensionMissing: "murmur pi extension not linked";
|
|
@@ -466,9 +480,14 @@ interface MuxBackend {
|
|
|
466
480
|
listPanesInSession(session: string): Promise<MuxPane[]>;
|
|
467
481
|
splitWindow(opts: SplitWindowOptions): Promise<string>;
|
|
468
482
|
killPane(paneId: string): Promise<void>;
|
|
483
|
+
/** False only when the mux reports the pane (or server) gone; throws
|
|
484
|
+
* when the probe itself fails, so liveness gates fail closed. */
|
|
469
485
|
paneExists(paneId: string): Promise<boolean>;
|
|
470
486
|
paneTTY(paneId: string): Promise<string>;
|
|
471
487
|
setPaneTitle(paneId: string, title: string): Promise<void>;
|
|
488
|
+
/** Stop the pane's program from retitling it (tmux `allow-set-title off`;
|
|
489
|
+
* pi emits OSC "π - <cwd>"). No-op where the backend has no equivalent. */
|
|
490
|
+
lockPaneTitle(paneId: string): Promise<void>;
|
|
472
491
|
getPaneTitle(paneId: string): Promise<string | undefined>;
|
|
473
492
|
currentAgentName(): Promise<string | undefined>;
|
|
474
493
|
/** Name of the session the CALLER is running inside, or undefined
|
|
@@ -672,7 +691,7 @@ type HerdrExecutor = (args: readonly string[]) => Promise<HerdrExecResult>;
|
|
|
672
691
|
* Required: the fast test tier may not shell out.
|
|
673
692
|
*/
|
|
674
693
|
declare function setHerdrExecutor(executor: HerdrExecutor): HerdrExecutor;
|
|
675
|
-
/** Restore the real (
|
|
694
|
+
/** Restore the real (child_process-backed) executor. */
|
|
676
695
|
declare function resetHerdrExecutor(): void;
|
|
677
696
|
/**
|
|
678
697
|
* True iff a `herdr status` payload describes a server mu can drive.
|
|
@@ -753,7 +772,7 @@ type TmuxExecutor = (args: readonly string[]) => Promise<TmuxExecResult>;
|
|
|
753
772
|
* tests can restore it cleanly. Production code should never call this.
|
|
754
773
|
*/
|
|
755
774
|
declare function setTmuxExecutor(executor: TmuxExecutor): TmuxExecutor;
|
|
756
|
-
/** Restore the real (
|
|
775
|
+
/** Restore the real (child_process-backed) executor. */
|
|
757
776
|
declare function resetTmuxExecutor(): void;
|
|
758
777
|
/**
|
|
759
778
|
* Run an arbitrary tmux command. The single point of contact with the
|
|
@@ -837,6 +856,8 @@ declare function splitWindow(opts: SplitWindowOptions): Promise<string>;
|
|
|
837
856
|
declare function killPane(paneId: string): Promise<void>;
|
|
838
857
|
declare function paneExists(paneId: string): Promise<boolean>;
|
|
839
858
|
declare function setPaneTitle(paneId: string, title: string): Promise<void>;
|
|
859
|
+
/** Pane-scoped `allow-set-title off`: OSC title escapes from the app no longer overwrite the mu title. */
|
|
860
|
+
declare function lockPaneTitle(paneId: string): Promise<void>;
|
|
840
861
|
/**
|
|
841
862
|
* Look up the window id (e.g. `@42`) that contains a given pane id
|
|
842
863
|
* (e.g. `%15`). Used by spawn so we can apply window-scoped options
|
|
@@ -1203,6 +1224,14 @@ type InterruptResult = {
|
|
|
1203
1224
|
declare function interruptAgent(db: Db, name: string, text: string, opts: AbortAgentOptions): Promise<InterruptResult>;
|
|
1204
1225
|
|
|
1205
1226
|
type VcsBackendName = "jj" | "sl" | "git" | "none";
|
|
1227
|
+
/** Out-parameter for `detect()`: set `failed` when a root probe could not
|
|
1228
|
+
* answer (spawn error, signal, timeout) as opposed to cleanly saying "not
|
|
1229
|
+
* this VCS". A caller that caches the detected backend must not cache
|
|
1230
|
+
* when `failed` is set: the probe may have hidden a higher-precedence
|
|
1231
|
+
* backend. */
|
|
1232
|
+
interface ProbeReport {
|
|
1233
|
+
failed: boolean;
|
|
1234
|
+
}
|
|
1206
1235
|
interface RebaseResult {
|
|
1207
1236
|
/** The ref the workspace was actually rebased onto (resolved
|
|
1208
1237
|
* symbolic-or-revset → concrete name). For git that is the
|
|
@@ -1340,8 +1369,9 @@ interface VcsBackend {
|
|
|
1340
1369
|
readonly name: VcsBackendName;
|
|
1341
1370
|
/** True iff this backend should handle `projectRoot`. Implementations
|
|
1342
1371
|
* check for the relevant marker dir (`.jj`, `.sl`, `.git`); `none`
|
|
1343
|
-
* always returns true and is consulted last.
|
|
1344
|
-
|
|
1372
|
+
* always returns true and is consulted last. `report.failed` is set
|
|
1373
|
+
* when a root probe was indeterminate (see `ProbeReport`). */
|
|
1374
|
+
detect(projectRoot: string, report?: ProbeReport): Promise<boolean>;
|
|
1345
1375
|
createWorkspace(opts: CreateWorkspaceOptions$1): Promise<CreateWorkspaceResult>;
|
|
1346
1376
|
freeWorkspace(opts: FreeWorkspaceOptions$1): Promise<FreeWorkspaceResult$1>;
|
|
1347
1377
|
/**
|
|
@@ -1477,7 +1507,7 @@ declare const slBackend: VcsBackend;
|
|
|
1477
1507
|
/** Return the backend that should handle projectRoot. Walks BACKENDS
|
|
1478
1508
|
* in precedence order; never returns undefined because noneBackend
|
|
1479
1509
|
* always claims. */
|
|
1480
|
-
declare function detectBackend(projectRoot: string): Promise<VcsBackend>;
|
|
1510
|
+
declare function detectBackend(projectRoot: string, report?: ProbeReport): Promise<VcsBackend>;
|
|
1481
1511
|
/** Look up a backend by name. Throws on unknown name. Used by
|
|
1482
1512
|
* `mu agent spawn --workspace-backend ...` to honour an explicit
|
|
1483
1513
|
* override. */
|
|
@@ -1584,6 +1614,8 @@ type SpawnCtl = "ok" | "missing" | "refused" | "skipped";
|
|
|
1584
1614
|
type SpawnedAgent = AgentRow & {
|
|
1585
1615
|
ctl: SpawnCtl;
|
|
1586
1616
|
ctlSocket: string;
|
|
1617
|
+
/** Set when the startup scan saw a Claude trust dialog parked in the pane. */
|
|
1618
|
+
trustDialog?: true;
|
|
1587
1619
|
};
|
|
1588
1620
|
/**
|
|
1589
1621
|
* Spawn a new agent in its tmux pane and register it in the DB.
|
|
@@ -1901,6 +1933,20 @@ declare class AgentCtlUnreachableError extends Error implements HasNextSteps {
|
|
|
1901
1933
|
constructor(agentName: string, workstream: string, socket: string, kind: "missing" | "refused");
|
|
1902
1934
|
errorNextSteps(): NextStep[];
|
|
1903
1935
|
}
|
|
1936
|
+
/**
|
|
1937
|
+
* A side-effecting ctl request (send, fresh, interrupt, command) was
|
|
1938
|
+
* written to a live agent's socket, then no reply arrived (timeout or
|
|
1939
|
+
* close). pi may have queued the prompt, so a blind resend can duplicate it.
|
|
1940
|
+
*/
|
|
1941
|
+
declare class AgentSendIndeterminateError extends Error implements HasNextSteps {
|
|
1942
|
+
readonly agentName: string;
|
|
1943
|
+
readonly workstream: string;
|
|
1944
|
+
readonly op: string;
|
|
1945
|
+
readonly reason: string;
|
|
1946
|
+
readonly name = "AgentSendIndeterminateError";
|
|
1947
|
+
constructor(agentName: string, workstream: string, op: string, reason: string);
|
|
1948
|
+
errorNextSteps(): NextStep[];
|
|
1949
|
+
}
|
|
1904
1950
|
/**
|
|
1905
1951
|
* A ctl verb (send, abort, ...) found the agent's control socket silent
|
|
1906
1952
|
* AND its pane gone: the process exited (or the pane was closed behind
|
|
@@ -1984,6 +2030,21 @@ declare class AgentBusyError extends Error implements HasNextSteps {
|
|
|
1984
2030
|
command?: string | undefined);
|
|
1985
2031
|
errorNextSteps(): NextStep[];
|
|
1986
2032
|
}
|
|
2033
|
+
/**
|
|
2034
|
+
* `mu workspace free` refused: the owning agent is mid-turn, waiting on
|
|
2035
|
+
* a permission, or unreadable with a live pane. Freeing would pull the
|
|
2036
|
+
* checkout out from under it. CLI-only guard; `agent close` and spawn
|
|
2037
|
+
* rollback call the SDK directly and are unaffected.
|
|
2038
|
+
*/
|
|
2039
|
+
declare class WorkspaceOwnerBusyError extends Error implements HasNextSteps {
|
|
2040
|
+
readonly agentName: string;
|
|
2041
|
+
readonly workstream: string;
|
|
2042
|
+
readonly state: string;
|
|
2043
|
+
readonly detail?: string | undefined;
|
|
2044
|
+
readonly name = "WorkspaceOwnerBusyError";
|
|
2045
|
+
constructor(agentName: string, workstream: string, state: string, detail?: string | undefined);
|
|
2046
|
+
errorNextSteps(): NextStep[];
|
|
2047
|
+
}
|
|
1987
2048
|
/**
|
|
1988
2049
|
* A slash command other than `/new`, `/reload`, `/compact` sent to a pi
|
|
1989
2050
|
* agent. The control socket cannot run it (pi.sendUserMessage would
|
|
@@ -1999,6 +2060,18 @@ declare class AgentSlashCommandUnsupportedError extends Error implements HasNext
|
|
|
1999
2060
|
constructor(agentName: string, workstream: string, text: string, supported: readonly string[]);
|
|
2000
2061
|
errorNextSteps(): NextStep[];
|
|
2001
2062
|
}
|
|
2063
|
+
/**
|
|
2064
|
+
* An empty message sent to a pi agent over the control socket.
|
|
2065
|
+
* pi.sendUserMessage("") is meaningless; a bare Enter is a pane
|
|
2066
|
+
* keystroke, so `--via mux` is the explicit way to press it.
|
|
2067
|
+
*/
|
|
2068
|
+
declare class AgentEmptySendError extends Error implements HasNextSteps {
|
|
2069
|
+
readonly agentName: string;
|
|
2070
|
+
readonly workstream: string;
|
|
2071
|
+
readonly name = "AgentEmptySendError";
|
|
2072
|
+
constructor(agentName: string, workstream: string);
|
|
2073
|
+
errorNextSteps(): NextStep[];
|
|
2074
|
+
}
|
|
2002
2075
|
|
|
2003
2076
|
/** The signal set kick supports. SIGINT is graceful (matches Ctrl-C
|
|
2004
2077
|
* semantics — what the operator probably wanted in the first place);
|
|
@@ -2231,7 +2304,9 @@ declare function refreshAgentTitle(db: Db, agentName: string, workstream: string
|
|
|
2231
2304
|
* crashed (or was explicitly closed mid-task) leaves the task graph
|
|
2232
2305
|
* in a wrong state — IN_PROGRESS forever, with no owner to release.
|
|
2233
2306
|
*/
|
|
2234
|
-
declare function deleteAgent(db: Db, name: string, workstream: string
|
|
2307
|
+
declare function deleteAgent(db: Db, name: string, workstream: string,
|
|
2308
|
+
/** When set, delete only if the row still has this pane id (checked inside the reaper transaction). */
|
|
2309
|
+
expectedPaneId?: string): boolean;
|
|
2235
2310
|
declare function isValidAgentName(name: string): boolean;
|
|
2236
2311
|
/**
|
|
2237
2312
|
* Send text to an agent and submit it. A pi agent gets it through its
|
|
@@ -2878,222 +2953,6 @@ interface TaskNoteRow {
|
|
|
2878
2953
|
createdAt: string;
|
|
2879
2954
|
}
|
|
2880
2955
|
|
|
2881
|
-
interface TaskEdges {
|
|
2882
|
-
/** Tasks that must close before this one can start (blockers). */
|
|
2883
|
-
blockers: string[];
|
|
2884
|
-
/** Tasks that this one blocks (dependents). */
|
|
2885
|
-
dependents: string[];
|
|
2886
|
-
}
|
|
2887
|
-
/** One end of an edge with the neighbour's current status attached.
|
|
2888
|
-
* Used by `mu task show` to group blockers/dependents into
|
|
2889
|
-
* "still gating" vs "satisfied" buckets without making the renderer
|
|
2890
|
-
* do a second round-trip to the DB per neighbour. */
|
|
2891
|
-
interface TaskEdgeWithStatus {
|
|
2892
|
-
name: string;
|
|
2893
|
-
status: TaskStatus;
|
|
2894
|
-
substate: TaskSubstate;
|
|
2895
|
-
}
|
|
2896
|
-
interface TaskEdgesWithStatus {
|
|
2897
|
-
/** Tasks that must close before this one can start (blockers),
|
|
2898
|
-
* carrying each blocker's current status. */
|
|
2899
|
-
blockers: TaskEdgeWithStatus[];
|
|
2900
|
-
/** Tasks that this one blocks (dependents), carrying each
|
|
2901
|
-
* dependent's current status. */
|
|
2902
|
-
dependents: TaskEdgeWithStatus[];
|
|
2903
|
-
}
|
|
2904
|
-
/**
|
|
2905
|
-
* Direct (one-hop) edges for a task. For transitive prerequisites, use
|
|
2906
|
-
* `getPrerequisites()`; this helper is the immediate-neighbour view used
|
|
2907
|
-
* by `mu task show`.
|
|
2908
|
-
*/
|
|
2909
|
-
declare function getTaskEdges(db: Db, taskLocalId: string, workstream: string): TaskEdges;
|
|
2910
|
-
/**
|
|
2911
|
-
* Same one-hop edge view as `getTaskEdges`, but each neighbour is
|
|
2912
|
-
* returned as `{ name, status }` so callers can group / colour by
|
|
2913
|
-
* status without an N+1 round-trip. Used by `mu task show` to split
|
|
2914
|
-
* "blocked by" (still-gating) from "satisfied" (already-CLOSED)
|
|
2915
|
-
* blockers, and the symmetric split on the dependents side
|
|
2916
|
-
* (task_show_blocked_by_renders_closed). OPEN and IN_PROGRESS stay in
|
|
2917
|
-
* the still-gating bucket; CLOSED is satisfied.
|
|
2918
|
-
*/
|
|
2919
|
-
declare function getTaskEdgesWithStatus(db: Db, taskLocalId: string, workstream: string): TaskEdgesWithStatus;
|
|
2920
|
-
/**
|
|
2921
|
-
* All tasks transitively reachable from `taskId` via reverse-edge
|
|
2922
|
-
* traversal (i.e. the set of tasks that block this one), including the
|
|
2923
|
-
* task itself.
|
|
2924
|
-
*/
|
|
2925
|
-
declare function getPrerequisites(db: Db, taskLocalId: string, workstream: string): Set<string>;
|
|
2926
|
-
interface BlockEdgeResult {
|
|
2927
|
-
/** True iff a row was actually inserted (vs. already present). */
|
|
2928
|
-
added: boolean;
|
|
2929
|
-
}
|
|
2930
|
-
/**
|
|
2931
|
-
* Add the edge `blocker → blocked` ('blocker blocks blocked').
|
|
2932
|
-
* Idempotent (existing edge → `added: false`). Validates:
|
|
2933
|
-
*
|
|
2934
|
-
* - both tasks exist
|
|
2935
|
-
* - same workstream (cross-workstream edges forbidden)
|
|
2936
|
-
* - no cycle (the new edge wouldn't form a path blocked → ... → blocker)
|
|
2937
|
-
* - blocker ≠ blocked (no self-reference)
|
|
2938
|
-
*/
|
|
2939
|
-
declare function addBlockEdge(db: Db, workstream: string, blocked: string, blocker: string): BlockEdgeResult;
|
|
2940
|
-
interface RemoveBlockEdgeResult {
|
|
2941
|
-
/** True iff a row was actually deleted (vs. no such edge). */
|
|
2942
|
-
removed: boolean;
|
|
2943
|
-
}
|
|
2944
|
-
/**
|
|
2945
|
-
* Remove the edge `blocker → blocked`. Idempotent (no edge →
|
|
2946
|
-
* `removed: false`). Does NOT validate task existence — if the
|
|
2947
|
-
* edge is gone there's nothing to do, regardless of whether the
|
|
2948
|
-
* tasks are gone too.
|
|
2949
|
-
*/
|
|
2950
|
-
declare function removeBlockEdge(db: Db, workstream: string, blocked: string, blocker: string): RemoveBlockEdgeResult;
|
|
2951
|
-
interface ReparentTaskResult {
|
|
2952
|
-
/** Edges removed (i.e. all incoming `to_task = taskId` edges). */
|
|
2953
|
-
removedEdges: number;
|
|
2954
|
-
/** Edges added (after duplicate blockers are canonicalised). */
|
|
2955
|
-
addedEdges: number;
|
|
2956
|
-
}
|
|
2957
|
-
/**
|
|
2958
|
-
* Atomically replace every incoming edge of `taskId` with new ones
|
|
2959
|
-
* `blocker[i] → taskId`. Pass an empty `blockers` array to clear all
|
|
2960
|
-
* incoming edges (the task becomes ready iff its status allows).
|
|
2961
|
-
*
|
|
2962
|
-
* Validates ALL new blockers up-front (existence + same workstream +
|
|
2963
|
-
* cycle check); if any fails, no DELETE happens — the call is fully
|
|
2964
|
-
* atomic via a single transaction.
|
|
2965
|
-
*
|
|
2966
|
-
* Cycle reasoning: removing the existing incoming edges to `taskId`
|
|
2967
|
-
* doesn't change `taskId`'s OUTGOING reachability, so
|
|
2968
|
-
* `wouldCreateCycle(db, blocker, taskId)` evaluated against the
|
|
2969
|
-
* pre-state gives the right answer for each new edge.
|
|
2970
|
-
*/
|
|
2971
|
-
declare function reparentTask(db: Db, taskLocalId: string, blockers: readonly string[], scope: {
|
|
2972
|
-
workstream: string;
|
|
2973
|
-
}): ReparentTaskResult;
|
|
2974
|
-
|
|
2975
|
-
interface AddTaskOptions {
|
|
2976
|
-
localId: string;
|
|
2977
|
-
workstream: string;
|
|
2978
|
-
title: string;
|
|
2979
|
-
/** 1..100; enforced by schema CHECK. */
|
|
2980
|
-
impact: number;
|
|
2981
|
-
/** > 0; enforced by schema CHECK. */
|
|
2982
|
-
effortDays: number;
|
|
2983
|
-
/**
|
|
2984
|
-
* Tasks that block this one. Edges inserted as `blocker -> newTask`.
|
|
2985
|
-
* Each blocker must already exist AND share this task's workstream
|
|
2986
|
-
* (cross-workstream edges are forbidden); cycle check guards each
|
|
2987
|
-
* edge. The CLI surfaces this as `--blocked-by`; the SDK key matches.
|
|
2988
|
-
*/
|
|
2989
|
-
blockedBy?: string[];
|
|
2990
|
-
/** Start as OPEN/triage (a proposal, e.g. a review finding) instead of OPEN/todo. */
|
|
2991
|
-
triage?: boolean;
|
|
2992
|
-
}
|
|
2993
|
-
/**
|
|
2994
|
-
* Atomically create a task and (optionally) its incoming blocked-by
|
|
2995
|
-
* edges.
|
|
2996
|
-
*
|
|
2997
|
-
* The task insert + every edge insert + cycle check happen inside one
|
|
2998
|
-
* SQLite transaction. If any blocker is missing or any edge would
|
|
2999
|
-
* create a cycle, the entire add rolls back.
|
|
3000
|
-
*
|
|
3001
|
-
* Cycle check for `addTask` is structurally trivial (a fresh task has
|
|
3002
|
-
* no outgoing edges, so `to -> ... -> from` is impossible). It's still
|
|
3003
|
-
* called here so the same primitive is exercised by tests.
|
|
3004
|
-
*/
|
|
3005
|
-
declare function addTask(db: Db, opts: AddTaskOptions): TaskRow;
|
|
3006
|
-
interface AddNoteOptions {
|
|
3007
|
-
/** Free-form author label. Convention: agent name, "user", or "orchestrator". */
|
|
3008
|
-
author?: string;
|
|
3009
|
-
/** Workstream context (operator-facing name). v5: tasks.local_id is
|
|
3010
|
-
* per-workstream unique, so this is required to disambiguate. */
|
|
3011
|
-
workstream: string;
|
|
3012
|
-
}
|
|
3013
|
-
declare function addNote(db: Db, taskLocalId: string, content: string, opts: AddNoteOptions): {
|
|
3014
|
-
author: string | null;
|
|
3015
|
-
content: string;
|
|
3016
|
-
createdAt: string;
|
|
3017
|
-
};
|
|
3018
|
-
interface DeleteTaskResult {
|
|
3019
|
-
/** True iff the row existed and was deleted. False on a dry-run
|
|
3020
|
-
* (preview) AND on the idempotent missing-row case. */
|
|
3021
|
-
deleted: boolean;
|
|
3022
|
-
/** Number of `task_edges` rows cascaded out (informational). On a
|
|
3023
|
-
* dry-run, this is the would-be count. */
|
|
3024
|
-
deletedEdges: number;
|
|
3025
|
-
/** Number of `task_notes` rows cascaded out (informational). On a
|
|
3026
|
-
* dry-run, this is the would-be count. */
|
|
3027
|
-
deletedNotes: number;
|
|
3028
|
-
/** True iff this was a dry-run (`opts.dryRun: true`). On a
|
|
3029
|
-
* dry-run `deleted` is false and the counts are the would-be
|
|
3030
|
-
* counts; the DB is unchanged. Always false on a commit / on a
|
|
3031
|
-
* missing-row idempotent no-op. */
|
|
3032
|
-
dryRun: boolean;
|
|
3033
|
-
/** True iff a matching task row was found at the time of the
|
|
3034
|
-
* call. Discriminator for the CLI: a dry-run that found nothing
|
|
3035
|
-
* (`present: false`) renders differently from a dry-run that
|
|
3036
|
-
* found an existing task with zero edges and zero notes
|
|
3037
|
-
* (`present: true, deletedEdges: 0, deletedNotes: 0`). */
|
|
3038
|
-
present: boolean;
|
|
3039
|
-
/** The op group the delete wrote, for `mu undo <group> --yes`. Null
|
|
3040
|
-
* when nothing was deleted (dry-run or missing row). */
|
|
3041
|
-
group: string | null;
|
|
3042
|
-
}
|
|
3043
|
-
interface DeleteTaskOptions {
|
|
3044
|
-
/** When true, return the cascade preview (would-be edge / note
|
|
3045
|
-
* counts) without mutating. The CLI uses this to power the bare
|
|
3046
|
-
* `mu task delete <id>` two-phase pattern (mirrors
|
|
3047
|
-
* `mu workstream teardown` / `mu undo`). Surfaced
|
|
3048
|
-
* by feedback ws task
|
|
3049
|
-
* fb_task_delete_no_yes (impact=30): a dogfood report typed
|
|
3050
|
-
* `mu task delete X --yes` (mirroring workstream teardown) and got
|
|
3051
|
-
* 'unknown option --yes' — the verb took no confirmation flag at
|
|
3052
|
-
* all. Two failed deletes left long-named tasks lingering. */
|
|
3053
|
-
dryRun?: boolean;
|
|
3054
|
-
}
|
|
3055
|
-
/**
|
|
3056
|
-
* Delete a task. FK CASCADE on `task_edges` (from + to) and
|
|
3057
|
-
* `task_notes` cleans the joined rows automatically. Idempotent on
|
|
3058
|
-
* a missing task (returns `deleted: false`).
|
|
3059
|
-
*
|
|
3060
|
-
* Pre-counts the cascade victims for reporting because SQLite's
|
|
3061
|
-
* `changes()` only reports rows directly affected by the DELETE.
|
|
3062
|
-
*
|
|
3063
|
-
* With `opts.dryRun: true`, returns the would-be counts without
|
|
3064
|
-
* touching the DB (no mutation, so no op is written). The CLI bare
|
|
3065
|
-
* `mu task delete <id>` form uses this; `--yes` calls through with
|
|
3066
|
-
* `dryRun: false`.
|
|
3067
|
-
*/
|
|
3068
|
-
declare function deleteTask(db: Db, localId: string, workstream: string, opts?: DeleteTaskOptions): DeleteTaskResult;
|
|
3069
|
-
interface UpdateTaskOptions {
|
|
3070
|
-
title?: string;
|
|
3071
|
-
/** 1..100; enforced by schema CHECK. */
|
|
3072
|
-
impact?: number;
|
|
3073
|
-
/** > 0; enforced by schema CHECK. */
|
|
3074
|
-
effortDays?: number;
|
|
3075
|
-
}
|
|
3076
|
-
interface UpdateTaskResult {
|
|
3077
|
-
/** True iff at least one field actually changed. */
|
|
3078
|
-
updated: boolean;
|
|
3079
|
-
/** The fields whose values differ post-update (in `UpdateTaskOptions`'s
|
|
3080
|
-
* camelCase shape). Empty when `updated: false`. */
|
|
3081
|
-
changedFields: string[];
|
|
3082
|
-
}
|
|
3083
|
-
/**
|
|
3084
|
-
* Update scalar fields on a task. Each option is independently optional;
|
|
3085
|
-
* passing none is a typed no-op (returns `updated: false, changedFields: []`).
|
|
3086
|
-
* Fields whose new value equals the current value are skipped (no row change).
|
|
3087
|
-
*
|
|
3088
|
-
* NOT for status (use `closeTask` / `openTask` / `setTaskStatus`), owner
|
|
3089
|
-
* (use `claimTask` / `releaseTask`), local_id (rename is deferred), or
|
|
3090
|
-
* workstream (cross-workstream moves are deferred).
|
|
3091
|
-
*/
|
|
3092
|
-
interface UpdateTaskScopeOption {
|
|
3093
|
-
workstream: string;
|
|
3094
|
-
}
|
|
3095
|
-
declare function updateTask(db: Db, localId: string, opts: UpdateTaskOptions, scope: UpdateTaskScopeOption): UpdateTaskResult;
|
|
3096
|
-
|
|
3097
2956
|
declare const WORKSPACE_STALE_THRESHOLD = 10;
|
|
3098
2957
|
declare function isWorkspaceStale(behind: number | null | undefined): boolean;
|
|
3099
2958
|
|
|
@@ -3370,8 +3229,13 @@ declare class TaskClaimStaleWorkspaceError extends Error implements HasNextSteps
|
|
|
3370
3229
|
declare class CycleError extends Error implements HasNextSteps {
|
|
3371
3230
|
readonly from: string;
|
|
3372
3231
|
readonly to: string;
|
|
3232
|
+
/** Existing path `to -> … -> from` (task names) that the new edge would close. */
|
|
3233
|
+
readonly path: readonly string[];
|
|
3234
|
+
readonly workstream?: string | undefined;
|
|
3373
3235
|
readonly name = "CycleError";
|
|
3374
|
-
constructor(from: string, to: string
|
|
3236
|
+
constructor(from: string, to: string,
|
|
3237
|
+
/** Existing path `to -> … -> from` (task names) that the new edge would close. */
|
|
3238
|
+
path?: readonly string[], workstream?: string | undefined);
|
|
3375
3239
|
errorNextSteps(): NextStep[];
|
|
3376
3240
|
}
|
|
3377
3241
|
/**
|
|
@@ -3504,6 +3368,222 @@ declare class InvalidSubstateError extends Error implements HasNextSteps {
|
|
|
3504
3368
|
errorNextSteps(): NextStep[];
|
|
3505
3369
|
}
|
|
3506
3370
|
|
|
3371
|
+
interface TaskEdges {
|
|
3372
|
+
/** Tasks that must close before this one can start (blockers). */
|
|
3373
|
+
blockers: string[];
|
|
3374
|
+
/** Tasks that this one blocks (dependents). */
|
|
3375
|
+
dependents: string[];
|
|
3376
|
+
}
|
|
3377
|
+
/** One end of an edge with the neighbour's current status attached.
|
|
3378
|
+
* Used by `mu task show` to group blockers/dependents into
|
|
3379
|
+
* "still gating" vs "satisfied" buckets without making the renderer
|
|
3380
|
+
* do a second round-trip to the DB per neighbour. */
|
|
3381
|
+
interface TaskEdgeWithStatus {
|
|
3382
|
+
name: string;
|
|
3383
|
+
status: TaskStatus;
|
|
3384
|
+
substate: TaskSubstate;
|
|
3385
|
+
}
|
|
3386
|
+
interface TaskEdgesWithStatus {
|
|
3387
|
+
/** Tasks that must close before this one can start (blockers),
|
|
3388
|
+
* carrying each blocker's current status. */
|
|
3389
|
+
blockers: TaskEdgeWithStatus[];
|
|
3390
|
+
/** Tasks that this one blocks (dependents), carrying each
|
|
3391
|
+
* dependent's current status. */
|
|
3392
|
+
dependents: TaskEdgeWithStatus[];
|
|
3393
|
+
}
|
|
3394
|
+
/**
|
|
3395
|
+
* Direct (one-hop) edges for a task. For transitive prerequisites, use
|
|
3396
|
+
* `getPrerequisites()`; this helper is the immediate-neighbour view used
|
|
3397
|
+
* by `mu task show`.
|
|
3398
|
+
*/
|
|
3399
|
+
declare function getTaskEdges(db: Db, taskLocalId: string, workstream: string): TaskEdges;
|
|
3400
|
+
/**
|
|
3401
|
+
* Same one-hop edge view as `getTaskEdges`, but each neighbour is
|
|
3402
|
+
* returned as `{ name, status }` so callers can group / colour by
|
|
3403
|
+
* status without an N+1 round-trip. Used by `mu task show` to split
|
|
3404
|
+
* "blocked by" (still-gating) from "satisfied" (already-CLOSED)
|
|
3405
|
+
* blockers, and the symmetric split on the dependents side
|
|
3406
|
+
* (task_show_blocked_by_renders_closed). OPEN and IN_PROGRESS stay in
|
|
3407
|
+
* the still-gating bucket; CLOSED is satisfied.
|
|
3408
|
+
*/
|
|
3409
|
+
declare function getTaskEdgesWithStatus(db: Db, taskLocalId: string, workstream: string): TaskEdgesWithStatus;
|
|
3410
|
+
/**
|
|
3411
|
+
* All tasks transitively reachable from `taskId` via reverse-edge
|
|
3412
|
+
* traversal (i.e. the set of tasks that block this one), including the
|
|
3413
|
+
* task itself.
|
|
3414
|
+
*/
|
|
3415
|
+
declare function getPrerequisites(db: Db, taskLocalId: string, workstream: string): Set<string>;
|
|
3416
|
+
interface BlockEdgeResult {
|
|
3417
|
+
/** True iff a row was actually inserted (vs. already present). */
|
|
3418
|
+
added: boolean;
|
|
3419
|
+
}
|
|
3420
|
+
/**
|
|
3421
|
+
* Add the edge `blocker → blocked` ('blocker blocks blocked').
|
|
3422
|
+
* Idempotent (existing edge → `added: false`). Validates:
|
|
3423
|
+
*
|
|
3424
|
+
* - both tasks exist
|
|
3425
|
+
* - same workstream (cross-workstream edges forbidden)
|
|
3426
|
+
* - no cycle (the new edge wouldn't form a path blocked → ... → blocker)
|
|
3427
|
+
* - blocker ≠ blocked (no self-reference)
|
|
3428
|
+
*/
|
|
3429
|
+
declare function addBlockEdge(db: Db, workstream: string, blocked: string, blocker: string): BlockEdgeResult;
|
|
3430
|
+
interface RemoveBlockEdgeResult {
|
|
3431
|
+
/** True iff a row was actually deleted (vs. no such edge). */
|
|
3432
|
+
removed: boolean;
|
|
3433
|
+
}
|
|
3434
|
+
/**
|
|
3435
|
+
* Remove the edge `blocker → blocked`. Idempotent (no edge →
|
|
3436
|
+
* `removed: false`). Does NOT validate task existence — if the
|
|
3437
|
+
* edge is gone there's nothing to do, regardless of whether the
|
|
3438
|
+
* tasks are gone too.
|
|
3439
|
+
*/
|
|
3440
|
+
declare function removeBlockEdge(db: Db, workstream: string, blocked: string, blocker: string): RemoveBlockEdgeResult;
|
|
3441
|
+
interface ReparentTaskResult {
|
|
3442
|
+
/** Edges removed (i.e. all incoming `to_task = taskId` edges). */
|
|
3443
|
+
removedEdges: number;
|
|
3444
|
+
/** Edges added (after duplicate blockers are canonicalised). */
|
|
3445
|
+
addedEdges: number;
|
|
3446
|
+
}
|
|
3447
|
+
/**
|
|
3448
|
+
* Atomically replace every incoming edge of `taskId` with new ones
|
|
3449
|
+
* `blocker[i] → taskId`. Pass an empty `blockers` array to clear all
|
|
3450
|
+
* incoming edges (the task becomes ready iff its status allows).
|
|
3451
|
+
*
|
|
3452
|
+
* Validates ALL new blockers up-front (existence + same workstream +
|
|
3453
|
+
* cycle check); if any fails, no DELETE happens — the call is fully
|
|
3454
|
+
* atomic via a single transaction.
|
|
3455
|
+
*
|
|
3456
|
+
* Cycle reasoning: removing the existing incoming edges to `taskId`
|
|
3457
|
+
* doesn't change `taskId`'s OUTGOING reachability, so
|
|
3458
|
+
* `wouldCreateCycle(db, blocker, taskId)` evaluated against the
|
|
3459
|
+
* pre-state gives the right answer for each new edge.
|
|
3460
|
+
*/
|
|
3461
|
+
declare function reparentTask(db: Db, taskLocalId: string, blockers: readonly string[], scope: {
|
|
3462
|
+
workstream: string;
|
|
3463
|
+
}): ReparentTaskResult;
|
|
3464
|
+
|
|
3465
|
+
interface AddTaskOptions {
|
|
3466
|
+
localId: string;
|
|
3467
|
+
workstream: string;
|
|
3468
|
+
title: string;
|
|
3469
|
+
/** 1..100; enforced by schema CHECK. */
|
|
3470
|
+
impact: number;
|
|
3471
|
+
/** > 0; enforced by schema CHECK. */
|
|
3472
|
+
effortDays: number;
|
|
3473
|
+
/**
|
|
3474
|
+
* Tasks that block this one. Edges inserted as `blocker -> newTask`.
|
|
3475
|
+
* Each blocker must already exist AND share this task's workstream
|
|
3476
|
+
* (cross-workstream edges are forbidden); cycle check guards each
|
|
3477
|
+
* edge. The CLI surfaces this as `--blocked-by`; the SDK key matches.
|
|
3478
|
+
*/
|
|
3479
|
+
blockedBy?: string[];
|
|
3480
|
+
/** Start as OPEN/triage (a proposal, e.g. a review finding) instead of OPEN/todo. */
|
|
3481
|
+
triage?: boolean;
|
|
3482
|
+
}
|
|
3483
|
+
/**
|
|
3484
|
+
* Atomically create a task and (optionally) its incoming blocked-by
|
|
3485
|
+
* edges.
|
|
3486
|
+
*
|
|
3487
|
+
* The task insert + every edge insert + cycle check happen inside one
|
|
3488
|
+
* SQLite transaction. If any blocker is missing or any edge would
|
|
3489
|
+
* create a cycle, the entire add rolls back.
|
|
3490
|
+
*
|
|
3491
|
+
* Cycle check for `addTask` is structurally trivial (a fresh task has
|
|
3492
|
+
* no outgoing edges, so `to -> ... -> from` is impossible). It's still
|
|
3493
|
+
* called here so the same primitive is exercised by tests.
|
|
3494
|
+
*/
|
|
3495
|
+
declare function addTask(db: Db, opts: AddTaskOptions): TaskRow;
|
|
3496
|
+
interface AddNoteOptions {
|
|
3497
|
+
/** Free-form author label. Convention: agent name, "user", or "orchestrator". */
|
|
3498
|
+
author?: string;
|
|
3499
|
+
/** Workstream context (operator-facing name). v5: tasks.local_id is
|
|
3500
|
+
* per-workstream unique, so this is required to disambiguate. */
|
|
3501
|
+
workstream: string;
|
|
3502
|
+
}
|
|
3503
|
+
declare function addNote(db: Db, taskLocalId: string, content: string, opts: AddNoteOptions): {
|
|
3504
|
+
author: string | null;
|
|
3505
|
+
content: string;
|
|
3506
|
+
createdAt: string;
|
|
3507
|
+
};
|
|
3508
|
+
interface DeleteTaskResult {
|
|
3509
|
+
/** True iff the row existed and was deleted. False on a dry-run
|
|
3510
|
+
* (preview) AND on the idempotent missing-row case. */
|
|
3511
|
+
deleted: boolean;
|
|
3512
|
+
/** Number of `task_edges` rows cascaded out (informational). On a
|
|
3513
|
+
* dry-run, this is the would-be count. */
|
|
3514
|
+
deletedEdges: number;
|
|
3515
|
+
/** Number of `task_notes` rows cascaded out (informational). On a
|
|
3516
|
+
* dry-run, this is the would-be count. */
|
|
3517
|
+
deletedNotes: number;
|
|
3518
|
+
/** True iff this was a dry-run (`opts.dryRun: true`). On a
|
|
3519
|
+
* dry-run `deleted` is false and the counts are the would-be
|
|
3520
|
+
* counts; the DB is unchanged. Always false on a commit / on a
|
|
3521
|
+
* missing-row idempotent no-op. */
|
|
3522
|
+
dryRun: boolean;
|
|
3523
|
+
/** True iff a matching task row was found at the time of the
|
|
3524
|
+
* call. Discriminator for the CLI: a dry-run that found nothing
|
|
3525
|
+
* (`present: false`) renders differently from a dry-run that
|
|
3526
|
+
* found an existing task with zero edges and zero notes
|
|
3527
|
+
* (`present: true, deletedEdges: 0, deletedNotes: 0`). */
|
|
3528
|
+
present: boolean;
|
|
3529
|
+
/** The op group the delete wrote, for `mu undo <group> --yes`. Null
|
|
3530
|
+
* when nothing was deleted (dry-run or missing row). */
|
|
3531
|
+
group: string | null;
|
|
3532
|
+
}
|
|
3533
|
+
interface DeleteTaskOptions {
|
|
3534
|
+
/** When true, return the cascade preview (would-be edge / note
|
|
3535
|
+
* counts) without mutating. The CLI uses this to power the bare
|
|
3536
|
+
* `mu task delete <id>` two-phase pattern (mirrors
|
|
3537
|
+
* `mu workstream teardown` / `mu undo`). Surfaced
|
|
3538
|
+
* by feedback ws task
|
|
3539
|
+
* fb_task_delete_no_yes (impact=30): a dogfood report typed
|
|
3540
|
+
* `mu task delete X --yes` (mirroring workstream teardown) and got
|
|
3541
|
+
* 'unknown option --yes' — the verb took no confirmation flag at
|
|
3542
|
+
* all. Two failed deletes left long-named tasks lingering. */
|
|
3543
|
+
dryRun?: boolean;
|
|
3544
|
+
}
|
|
3545
|
+
/**
|
|
3546
|
+
* Delete a task. FK CASCADE on `task_edges` (from + to) and
|
|
3547
|
+
* `task_notes` cleans the joined rows automatically. Idempotent on
|
|
3548
|
+
* a missing task (returns `deleted: false`).
|
|
3549
|
+
*
|
|
3550
|
+
* Pre-counts the cascade victims for reporting because SQLite's
|
|
3551
|
+
* `changes()` only reports rows directly affected by the DELETE.
|
|
3552
|
+
*
|
|
3553
|
+
* With `opts.dryRun: true`, returns the would-be counts without
|
|
3554
|
+
* touching the DB (no mutation, so no op is written). The CLI bare
|
|
3555
|
+
* `mu task delete <id>` form uses this; `--yes` calls through with
|
|
3556
|
+
* `dryRun: false`.
|
|
3557
|
+
*/
|
|
3558
|
+
declare function deleteTask(db: Db, localId: string, workstream: string, opts?: DeleteTaskOptions): DeleteTaskResult;
|
|
3559
|
+
interface UpdateTaskOptions {
|
|
3560
|
+
title?: string;
|
|
3561
|
+
/** 1..100; enforced by schema CHECK. */
|
|
3562
|
+
impact?: number;
|
|
3563
|
+
/** > 0; enforced by schema CHECK. */
|
|
3564
|
+
effortDays?: number;
|
|
3565
|
+
}
|
|
3566
|
+
interface UpdateTaskResult {
|
|
3567
|
+
/** True iff at least one field actually changed. */
|
|
3568
|
+
updated: boolean;
|
|
3569
|
+
/** The fields whose values differ post-update (in `UpdateTaskOptions`'s
|
|
3570
|
+
* camelCase shape). Empty when `updated: false`. */
|
|
3571
|
+
changedFields: string[];
|
|
3572
|
+
}
|
|
3573
|
+
/**
|
|
3574
|
+
* Update scalar fields on a task. Each option is independently optional;
|
|
3575
|
+
* passing none is a typed no-op (returns `updated: false, changedFields: []`).
|
|
3576
|
+
* Fields whose new value equals the current value are skipped (no row change).
|
|
3577
|
+
*
|
|
3578
|
+
* NOT for status (use `closeTask` / `openTask` / `setTaskStatus`), owner
|
|
3579
|
+
* (use `claimTask` / `releaseTask`), local_id (rename is deferred), or
|
|
3580
|
+
* workstream (cross-workstream moves are deferred).
|
|
3581
|
+
*/
|
|
3582
|
+
interface UpdateTaskScopeOption {
|
|
3583
|
+
workstream: string;
|
|
3584
|
+
}
|
|
3585
|
+
declare function updateTask(db: Db, localId: string, opts: UpdateTaskOptions, scope: UpdateTaskScopeOption): UpdateTaskResult;
|
|
3586
|
+
|
|
3507
3587
|
/** Thrown when a title has no ASCII letter or digit, so no id can be
|
|
3508
3588
|
* derived from it (any non-ASCII script, or pure punctuation). Exit 2
|
|
3509
3589
|
* (usage) with the verb's --help; the fix is the `<id>` positional.
|
|
@@ -4056,7 +4136,7 @@ declare function emitEvent(db: Db, workstream: string | null, intent: LocalInten
|
|
|
4056
4136
|
* `string` so a typo is a compile error and the set stays auditable —
|
|
4057
4137
|
* `mu log`'s formatter (v2-log-verb) switches on exactly these.
|
|
4058
4138
|
*/
|
|
4059
|
-
type LocalIntent = "agent.spawn" | "agent.close" | "agent.adopt" | "agent.kick" | "agent.send" | "agent.stall" | "workspace.create" | "workspace.free" | "workspace.refresh";
|
|
4139
|
+
type LocalIntent = "agent.spawn" | "agent.spawn_failed" | "agent.close" | "agent.adopt" | "agent.kick" | "agent.send" | "agent.abort" | "agent.stall" | "workspace.create" | "workspace.free" | "workspace.refresh";
|
|
4060
4140
|
|
|
4061
4141
|
interface Track {
|
|
4062
4142
|
/** Goal tasks (no outgoing edges) belonging to this track. */
|
|
@@ -5386,6 +5466,7 @@ declare const tmux_listPanes: typeof listPanes;
|
|
|
5386
5466
|
declare const tmux_listPanesInSession: typeof listPanesInSession;
|
|
5387
5467
|
declare const tmux_listSessions: typeof listSessions;
|
|
5388
5468
|
declare const tmux_listWindows: typeof listWindows;
|
|
5469
|
+
declare const tmux_lockPaneTitle: typeof lockPaneTitle;
|
|
5389
5470
|
declare const tmux_newSession: typeof newSession;
|
|
5390
5471
|
declare const tmux_newSessionWithPane: typeof newSessionWithPane;
|
|
5391
5472
|
declare const tmux_newWindow: typeof newWindow;
|
|
@@ -5405,7 +5486,7 @@ declare const tmux_sleep: typeof sleep;
|
|
|
5405
5486
|
declare const tmux_splitWindow: typeof splitWindow;
|
|
5406
5487
|
declare const tmux_tmuxBackend: typeof tmuxBackend;
|
|
5407
5488
|
declare namespace tmux {
|
|
5408
|
-
export { type tmux_AttachTarget as AttachTarget, type tmux_CaptureOptions as CaptureOptions, type tmux_MuxCommand as MuxCommand, tmux_MuxError as MuxError, type tmux_MuxHealth as MuxHealth, type tmux_NewSessionOptions as NewSessionOptions, type tmux_NewSessionWithPaneOptions as NewSessionWithPaneOptions, type tmux_NewWindowOptions as NewWindowOptions, tmux_PANE_ID_RE as PANE_ID_RE, tmux_PaneNotFoundError as PaneNotFoundError, type tmux_SendOptions as SendOptions, type tmux_SendWarning as SendWarning, type tmux_SplitWindowOptions as SplitWindowOptions, type tmux_TmuxBackend as TmuxBackend, tmux_TmuxError as TmuxError, type tmux_TmuxExecResult as TmuxExecResult, type tmux_TmuxExecutor as TmuxExecutor, type tmux_TmuxPane as TmuxPane, type tmux_TmuxSession as TmuxSession, type tmux_TmuxWindow as TmuxWindow, tmux_assertValidPaneId as assertValidPaneId, tmux_attachCommands as attachCommands, tmux_attachHint as attachHint, tmux_awaitPaneQuiescence as awaitPaneQuiescence, tmux_capturePane as capturePane, tmux_currentAgentName as currentAgentName, tmux_currentPaneTitle as currentPaneTitle, tmux_currentSessionName as currentSessionName, tmux_defaultSendDelayMs as defaultSendDelayMs, tmux_defaultSendReadinessMs as defaultSendReadinessMs, tmux_enableMuPaneBorders as enableMuPaneBorders, tmux_enableMuPaneBordersForPane as enableMuPaneBordersForPane, tmux_enableMuPaneBordersForSession as enableMuPaneBordersForSession, tmux_getPaneTitle as getPaneTitle, tmux_getWindowIdForPane as getWindowIdForPane, tmux_hasWorkMarker as hasWorkMarker, tmux_healthCheck as healthCheck, tmux_isValidPaneId as isValidPaneId, tmux_killPane as killPane, tmux_killSession as killSession, tmux_listPanes as listPanes, tmux_listPanesInSession as listPanesInSession, tmux_listSessions as listSessions, tmux_listWindows as listWindows, tmux_newSession as newSession, tmux_newSessionWithPane as newSessionWithPane, tmux_newWindow as newWindow, tmux_paneExists as paneExists, tmux_paneNotFoundNextSteps as paneNotFoundNextSteps, tmux_paneTTY as paneTTY, tmux_parseAgentNameFromTitle as parseAgentNameFromTitle, tmux_resetSleep as resetSleep, tmux_resetTmuxExecutor as resetTmuxExecutor, tmux_selectLayout as selectLayout, tmux_sendToPane as sendToPane, tmux_sessionExists as sessionExists, tmux_setPaneTitle as setPaneTitle, tmux_setSleepForTests as setSleepForTests, tmux_setTmuxExecutor as setTmuxExecutor, tmux_sleep as sleep, tmux_splitWindow as splitWindow, tmux$1 as tmux, tmux_tmuxBackend as tmuxBackend };
|
|
5489
|
+
export { type tmux_AttachTarget as AttachTarget, type tmux_CaptureOptions as CaptureOptions, type tmux_MuxCommand as MuxCommand, tmux_MuxError as MuxError, type tmux_MuxHealth as MuxHealth, type tmux_NewSessionOptions as NewSessionOptions, type tmux_NewSessionWithPaneOptions as NewSessionWithPaneOptions, type tmux_NewWindowOptions as NewWindowOptions, tmux_PANE_ID_RE as PANE_ID_RE, tmux_PaneNotFoundError as PaneNotFoundError, type tmux_SendOptions as SendOptions, type tmux_SendWarning as SendWarning, type tmux_SplitWindowOptions as SplitWindowOptions, type tmux_TmuxBackend as TmuxBackend, tmux_TmuxError as TmuxError, type tmux_TmuxExecResult as TmuxExecResult, type tmux_TmuxExecutor as TmuxExecutor, type tmux_TmuxPane as TmuxPane, type tmux_TmuxSession as TmuxSession, type tmux_TmuxWindow as TmuxWindow, tmux_assertValidPaneId as assertValidPaneId, tmux_attachCommands as attachCommands, tmux_attachHint as attachHint, tmux_awaitPaneQuiescence as awaitPaneQuiescence, tmux_capturePane as capturePane, tmux_currentAgentName as currentAgentName, tmux_currentPaneTitle as currentPaneTitle, tmux_currentSessionName as currentSessionName, tmux_defaultSendDelayMs as defaultSendDelayMs, tmux_defaultSendReadinessMs as defaultSendReadinessMs, tmux_enableMuPaneBorders as enableMuPaneBorders, tmux_enableMuPaneBordersForPane as enableMuPaneBordersForPane, tmux_enableMuPaneBordersForSession as enableMuPaneBordersForSession, tmux_getPaneTitle as getPaneTitle, tmux_getWindowIdForPane as getWindowIdForPane, tmux_hasWorkMarker as hasWorkMarker, tmux_healthCheck as healthCheck, tmux_isValidPaneId as isValidPaneId, tmux_killPane as killPane, tmux_killSession as killSession, tmux_listPanes as listPanes, tmux_listPanesInSession as listPanesInSession, tmux_listSessions as listSessions, tmux_listWindows as listWindows, tmux_lockPaneTitle as lockPaneTitle, tmux_newSession as newSession, tmux_newSessionWithPane as newSessionWithPane, tmux_newWindow as newWindow, tmux_paneExists as paneExists, tmux_paneNotFoundNextSteps as paneNotFoundNextSteps, tmux_paneTTY as paneTTY, tmux_parseAgentNameFromTitle as parseAgentNameFromTitle, tmux_resetSleep as resetSleep, tmux_resetTmuxExecutor as resetTmuxExecutor, tmux_selectLayout as selectLayout, tmux_sendToPane as sendToPane, tmux_sessionExists as sessionExists, tmux_setPaneTitle as setPaneTitle, tmux_setSleepForTests as setSleepForTests, tmux_setTmuxExecutor as setTmuxExecutor, tmux_sleep as sleep, tmux_splitWindow as splitWindow, tmux$1 as tmux, tmux_tmuxBackend as tmuxBackend };
|
|
5409
5490
|
}
|
|
5410
5491
|
|
|
5411
5492
|
/** What undoing one op will do. */
|
|
@@ -5712,4 +5793,4 @@ declare function summarizeWorkstream(db: Db, opts: WorkstreamOptions): Promise<W
|
|
|
5712
5793
|
*/
|
|
5713
5794
|
declare function teardownWorkstream(db: Db, opts: TeardownWorkstreamOptions): Promise<TeardownResult>;
|
|
5714
5795
|
|
|
5715
|
-
export { AGENT_STATE_GLYPH, type AbortAgentOptions, type AbortResult, type AddNoteOptions, type AddTaskOptions, type AdoptAgentOptions, type AdoptAgentResult, AgentAbortNeedsCtlError, AgentAbortTimeoutError, AgentBusyError, AgentCtlUnreachableError, AgentDiedOnSpawnError, AgentExistsError, AgentExtensionOutdatedError, AgentFreshNeedsCtlError, AgentNameExhaustedError, AgentNotFoundError, AgentNotInWorkstreamError, AgentPaneDeadError, type AgentRow, AgentSlashCommandUnsupportedError, AgentSpawnCliNotFoundError, AgentSpawnStartupError, type AmbientOptions, type AmbientResult, type AppendLogOptions, type ApplyResult, type BlockEdgeResult, CAPTURE_TRIGGER_DDL, CURRENT_SCHEMA_VERSION, type CaptureDb, type CaptureIntent, type CaptureOptions, type CaseCollision, type CheapDriftReport, type ClaimResult, type ClaimTaskOptions, ClaimerNotRegisteredError, type CloseAgentOptions, type CloseAgentResult, type CloseSubstate, type CloseTaskResult, type CommandResolutionResult, type CommandResolver, CrossWorkstreamEdgeError, type CtlLink, CycleError, DEFAULT_SUBSTATE, DRIFT_REPORT_CAP, type Db, type DeleteTaskResult, type DoctorCheck, type DoctorStatus, type DoctorSummary, DriftDetectedError, type DriftRecord, type DriftReport, EXPECTED_TABLES, type EvidenceOption, type FileLockOptions, type FleetHazard, type FlushResult, type FsProbe, type FullDag, GLYPH, GroupIdAmbiguousError, type GroupSummary, HazardFailError, type HazardSeverity, type Hlc, HlcOverflowError, HlcParseError, HomeDirAsProjectRootError, type IdFromTitleResult, type IngestFromDbResult, type IngestResult, type InsertAgentInput, InvalidSubstateError, type InverseOp, KNOWN_INTENTS, KNOWN_VERBS, type KickAgentOptions, type KickAgentResult, type KickProcessExecutor, type KickSignal, type KnownIntent, LinkConflictError, type LinkState, type LinkStatus, type ListLiveAgentsOptions, type ListLogsOptions, type ListNotesOptions, type ListReadyOptions, type ListTasksOptions, type LiveAgent, type LiveAgentsView, type LoadFullDagOptions, type LoadWorkstreamSnapshotOptions, type LocalIntent, type LogKind, LogKindReservedError, type LogRow, MACHINE_LOCAL_ENTITIES, MACHINE_LOCAL_TABLES, MU_SHIM_MARKER, MachineIdentityMissingError, type MachineLocalEntity, type MachineLocalLoss, type MachineLocalTable, type MuxBackend, type MuxBackendName, MuxError, type MuxPane, type MuxPaneStatus, type MuxSession, type MuxWindow, type NewSessionOptions, type NewWindowOptions, NoForegroundProcessError, NoMultiplexerError, NothingToUndoError, OP_CTX_DDL, type Op, type OpContext, OpEntityNotSyncedError, OpKeyMalformedError, type OpenDbOptions, type OwnedTasksSummary, PANE_ID_RE, PEER_SHORT_LEN, PEER_STALE_MS, PORTABLE_TABLES, PaneNotFoundError, PaneNotInSessionError, type ParkTaskOptions, type PeerSegment, type PeerStatus, type PortableTable, ReaperDetectedDuringWaitError, type RebuildOptions, type RebuildReport, RebuildTargetExistsError, RebuildTargetIsSourceError, type ReconcileMode, type ReconcileOptions, type ReconcileReport, type ReleaseResult, type ReleaseTaskOptions, type RemoveBlockEdgeResult, type RenderableOp, type RenderedOp, type ReparentTaskResult, type RoiBucket, type RuntimeState, SEGMENT_FORMAT_VERSION, SYNCED_ENTITIES, SchemaTooNewError, SchemaTooOldError, type SegmentDefect, type SegmentDefectKind, type SegmentLine, type SegmentManifest, type SendOptions, type SendResult, type SendWarning, type SetStatusOptions, type SetStatusResult, type SlugifyResult, type SpawnAgentOptions, type SplitWindowOptions, StallDetectedDuringWaitError, type StateReading, type StateSource, type StrandedWorkspaceOrphan, SubstateReasonRequiredError, type SyncPassResult, SyncPeerNotFoundError, SyncPeerRefAmbiguousError, SyncSourceNotFoundError, type SyncedEntity, TASK_STATUSES, TASK_STATUS_LIST, TASK_SUBSTATES, TASK_SUBSTATE_ROWS, TaskAlreadyOwnedError, TaskClaimStaleWorkspaceError, type TaskEdgeWithStatus, type TaskEdges, type TaskEdgesWithStatus, TaskExistsError, TaskIdInvalidError, TaskInTriageError, TaskNotFoundError, TaskNotInWorkstreamError, type TaskNoteRow, type TaskPair, TaskParkStateError, TaskParkedError, type TaskRow, type TaskStatus, type TaskSubstate, TaskTitleSlugEmptyError, type TaskWaitOptions, type TaskWaitRef, type TaskWaitResult, type TaskWaitTaskState, type TeardownResult, TmuxError, type TmuxExecResult, type TmuxExecutor, type TmuxPane, type TmuxSession, type TmuxWindow, type Track, type Transport, UNKNOWN_REASON, UndoGroupNotFoundError, type UndoOptions, type UndoPlan, type UndoResult, UndoSupersededError, type UpdateTaskOptions, type UpdateTaskResult, type VcsBackend, type VcsBackendName, WORKSPACE_STALE_THRESHOLD, WorkspaceConflictError, WorkspaceDirtyError, WorkspaceExistsError, type WorkspaceFailure, WorkspaceNotFoundError, type WorkspaceOrphan, WorkspacePathNotEmptyError, WorkspacePreservedError, type WorkspaceRow, type WorkspaceStaleness, WorkspaceVcsRequiredError, WorkstreamExistsError, WorkstreamNameInvalidError, WorkstreamNameReservedError, WorkstreamNotFoundError, type WorkstreamOptions, type WorkstreamSnapshot, type WorkstreamSnapshotSlowFields, type WorkstreamSummary, abortAgent, acceptTask, activeMux, addBlockEdge, addNote, addTask, adoptAgent, agentKey, agentStateGlyph, agentStateHistogram, ambientFlush, ambientIngest, ambientSyncPass, appendLog, applyIncomingOp, applyOp, applyOps, assertValidPaneId, awaitPaneQuiescence, backendByName, capturePane, checkCaseCollisions, checkCheapDriftInvariant, checkCommandResolvable, checkDbInsideSyncDir, checkDrift, checkFleetHazards, checkNetworkMount, claimTask, classifyFsType, closeAgent, closeTask, compareHlc, composeAgentTitle, countProblems, createWorkspace, ctlRuntimeState, currentAgentName, currentOpContext, currentPaneTitle, decorateWithDirty, decorateWithStaleness, defaultDbPath, defaultSendDelayMs, defaultSendReadinessMs, defaultSpawnLivenessMs, defaultStateDir, deleteAgent, deleteTask, detectBackend, detectMux, discoverPeers, driftRemediation, emitEvent, ensureWorkstream, envVarNameForCli, expectsCtl, findCaseCollisions, flushSegment, foregroundPgid, formatDriftRecord, formatHlc, formatPair, freeWorkspace, getAgent, getAgentByPane, getParallelTracks, getPrerequisites, getTask, getTaskEdges, getTaskEdgesWithStatus, getWaitPollCount, getWatermark, getWorkspaceForAgent, getWorkspaceStaleness, gitBackend, hasWorkMarker, idFromTitle, idFromTitleVerbose, ingestFromDb, ingestSegment, insertAgent, inspectLinks, installCapture, interruptAgent, isKickSignal, isPathInside, isTaskStatus, isValidAgentName, isValidPair, isValidPaneId, isValidTaskId, isValidWorkstreamName, isWorkspaceStale, jjBackend, kickAgent, killPane, killSession, latestSeq, linkPi, linkSkill, listAgents, listAllOrphanWorkspaces, listBlocked, listGoals, listInProgress, listLiveAgents, listLogs, listNotes, listPanes, listPanesInSession, listReady, listRecentClosed, listRecentGroups, listSessions, listTasks, listTasksByOwner, listWindows, listWorkspaceOrphans, listWorkspaces, listWorkstreams, loadDoctorChecks, loadDoctorSummary, loadFullDag, loadWorkstreamSnapshot, loadWorkstreamSnapshotFast, loadWorkstreamSnapshotSlow, localMachineId, locksDir, mapLegacyStatus, mergeSnapshotFastSlow, mostRecentGroup, murmurAvailable, mux, muxByName, newSession, newSessionWithPane, newWindow, nextHlc, noneBackend, opSubject, openDb, openTask, paneExists, paneTTY, parkTask, parseAgentNameFromTitle, parseHlc, parseOpKey, parsePsTtyOutput, peerStatuses, planUndo, priorFieldValue, probeFilesystem, readAgent, readAgentStates, readFileLockMeta, readManifest, rebuildInto, receiveHlc, reconcile, refreshAgentTitle, releaseTask, remediationParagraph, removeBlockEdge, renderForest, renderOp, renderOpLine, renderTaskTree, repairPeer, reparentTask, resetCommandResolverForTests, resetKickProcessExecutor, resetMux, resetSleep, resetTmuxExecutor, resetWaitPollCount, resetWatermark, resolveActorIdentity, resolveCliCommand, resolveCliCommandWithSource, resolveGroupId, resolvePair, resolvePeerRef, roiBucket, segmentLineCount, segmentPath, selectLayout, sendToAgent, sendToPane, sendViaTransport, sessionExists, setCommandResolverForTests, setKickProcessExecutor, setMuxForTests, setPaneTitle, setSleepForTests, setTaskStatus, setTmuxExecutor, setWaitSleepForTests, setWaitStuckWarnForTests, setWatermark, slBackend, sleep, slugifyTitle, slugifyTitleVerbose, spawnAgent, splitWindow, summarizeOwnedTasks, summarizeWorkstream, syncDir, syncEnabled, syncPass, teardownWorkstream, tmux, tmuxBackend, transportNextSteps, undoGroup, unparkTask, updateTask, verifyAgainstManifest, waitForTasks, withCaptureSuppressed, withFileLock, withOpContext, workspacePath, workspacesRoot, yankCommandForCheck };
|
|
5796
|
+
export { AGENT_STATE_GLYPH, type AbortAgentOptions, type AbortResult, type AddNoteOptions, type AddTaskOptions, type AdoptAgentOptions, type AdoptAgentResult, AgentAbortNeedsCtlError, AgentAbortTimeoutError, AgentBusyError, AgentCtlUnreachableError, AgentDiedOnSpawnError, AgentEmptySendError, AgentExistsError, AgentExtensionOutdatedError, AgentFreshNeedsCtlError, AgentNameExhaustedError, AgentNotFoundError, AgentNotInWorkstreamError, AgentPaneDeadError, type AgentRow, AgentSendIndeterminateError, AgentSlashCommandUnsupportedError, AgentSpawnCliNotFoundError, AgentSpawnStartupError, type AmbientOptions, type AmbientResult, type AppendLogOptions, type ApplyResult, type BlockEdgeResult, CAPTURE_TRIGGER_DDL, CURRENT_SCHEMA_VERSION, type CaptureDb, type CaptureIntent, type CaptureOptions, type CaseCollision, type CheapDriftReport, type ClaimResult, type ClaimTaskOptions, ClaimerNotRegisteredError, type CloseAgentOptions, type CloseAgentResult, type CloseSubstate, type CloseTaskResult, type CommandResolutionResult, type CommandResolver, CrossWorkstreamEdgeError, type CtlLink, CycleError, DEFAULT_SUBSTATE, DRIFT_REPORT_CAP, type Db, type DeleteTaskResult, type DoctorCheck, type DoctorStatus, type DoctorSummary, DriftDetectedError, type DriftRecord, type DriftReport, EXPECTED_TABLES, type EvidenceOption, type FileLockOptions, type FleetHazard, type FlushResult, type FsProbe, type FullDag, GLYPH, GroupIdAmbiguousError, type GroupSummary, HazardFailError, type HazardSeverity, type Hlc, HlcOverflowError, HlcParseError, HomeDirAsProjectRootError, type IdFromTitleResult, type IngestFromDbResult, type IngestResult, type InsertAgentInput, InvalidSubstateError, type InverseOp, KNOWN_INTENTS, KNOWN_VERBS, type KickAgentOptions, type KickAgentResult, type KickProcessExecutor, type KickSignal, type KnownIntent, LinkConflictError, type LinkState, type LinkStatus, type ListLiveAgentsOptions, type ListLogsOptions, type ListNotesOptions, type ListReadyOptions, type ListTasksOptions, type LiveAgent, type LiveAgentsView, type LoadFullDagOptions, type LoadWorkstreamSnapshotOptions, type LocalIntent, type LogKind, LogKindReservedError, type LogRow, MACHINE_LOCAL_ENTITIES, MACHINE_LOCAL_TABLES, MU_SHIM_MARKER, MachineIdentityMissingError, type MachineLocalEntity, type MachineLocalLoss, type MachineLocalTable, type MuxBackend, type MuxBackendName, MuxError, type MuxPane, type MuxPaneStatus, type MuxSession, type MuxWindow, type NewSessionOptions, type NewWindowOptions, NoForegroundProcessError, NoMultiplexerError, NothingToUndoError, OP_CTX_DDL, type Op, type OpContext, OpEntityNotSyncedError, OpKeyMalformedError, type OpenDbOptions, type OwnedTasksSummary, PANE_ID_RE, PEER_SHORT_LEN, PEER_STALE_MS, PORTABLE_TABLES, PaneNotFoundError, PaneNotInSessionError, type ParkTaskOptions, type PeerSegment, type PeerStatus, type PortableTable, ReaperDetectedDuringWaitError, type RebuildOptions, type RebuildReport, RebuildTargetExistsError, RebuildTargetIsSourceError, type ReconcileMode, type ReconcileOptions, type ReconcileReport, type ReleaseResult, type ReleaseTaskOptions, type RemoveBlockEdgeResult, type RenderableOp, type RenderedOp, type ReparentTaskResult, type RoiBucket, type RuntimeState, SEGMENT_FORMAT_VERSION, SYNCED_ENTITIES, SchemaTooNewError, SchemaTooOldError, type SegmentDefect, type SegmentDefectKind, type SegmentLine, type SegmentManifest, type SendOptions, type SendResult, type SendWarning, type SetStatusOptions, type SetStatusResult, type SlugifyResult, type SpawnAgentOptions, type SplitWindowOptions, StallDetectedDuringWaitError, type StateReading, type StateSource, type StrandedWorkspaceOrphan, SubstateReasonRequiredError, type SyncPassResult, SyncPeerNotFoundError, SyncPeerRefAmbiguousError, SyncSourceNotFoundError, type SyncedEntity, TASK_STATUSES, TASK_STATUS_LIST, TASK_SUBSTATES, TASK_SUBSTATE_ROWS, TaskAlreadyOwnedError, TaskClaimStaleWorkspaceError, type TaskEdgeWithStatus, type TaskEdges, type TaskEdgesWithStatus, TaskExistsError, TaskIdInvalidError, TaskInTriageError, TaskNotFoundError, TaskNotInWorkstreamError, type TaskNoteRow, type TaskPair, TaskParkStateError, TaskParkedError, type TaskRow, type TaskStatus, type TaskSubstate, TaskTitleSlugEmptyError, type TaskWaitOptions, type TaskWaitRef, type TaskWaitResult, type TaskWaitTaskState, type TeardownResult, TmuxError, type TmuxExecResult, type TmuxExecutor, type TmuxPane, type TmuxSession, type TmuxWindow, type Track, type Transport, UNKNOWN_REASON, UndoGroupNotFoundError, type UndoOptions, type UndoPlan, type UndoResult, UndoSupersededError, type UpdateTaskOptions, type UpdateTaskResult, type VcsBackend, type VcsBackendName, WORKSPACE_STALE_THRESHOLD, WorkspaceConflictError, WorkspaceDirtyError, WorkspaceExistsError, type WorkspaceFailure, WorkspaceNotFoundError, type WorkspaceOrphan, WorkspaceOwnerBusyError, WorkspacePathNotEmptyError, WorkspacePreservedError, type WorkspaceRow, type WorkspaceStaleness, WorkspaceVcsRequiredError, WorkstreamExistsError, WorkstreamNameInvalidError, WorkstreamNameReservedError, WorkstreamNotFoundError, type WorkstreamOptions, type WorkstreamSnapshot, type WorkstreamSnapshotSlowFields, type WorkstreamSummary, abortAgent, acceptTask, activeMux, addBlockEdge, addNote, addTask, adoptAgent, agentKey, agentStateGlyph, agentStateHistogram, ambientFlush, ambientIngest, ambientSyncPass, appendLog, applyIncomingOp, applyOp, applyOps, assertValidPaneId, awaitPaneQuiescence, backendByName, capturePane, checkCaseCollisions, checkCheapDriftInvariant, checkCommandResolvable, checkDbInsideSyncDir, checkDrift, checkFleetHazards, checkNetworkMount, claimTask, classifyFsType, closeAgent, closeTask, compareHlc, composeAgentTitle, countProblems, createWorkspace, ctlRuntimeState, currentAgentName, currentOpContext, currentPaneTitle, decorateWithDirty, decorateWithStaleness, defaultDbPath, defaultSendDelayMs, defaultSendReadinessMs, defaultSpawnLivenessMs, defaultStateDir, deleteAgent, deleteTask, detectBackend, detectMux, discoverPeers, driftRemediation, emitEvent, ensureWorkstream, envVarNameForCli, expectsCtl, findCaseCollisions, flushSegment, foregroundPgid, formatDriftRecord, formatHlc, formatPair, freeWorkspace, getAgent, getAgentByPane, getParallelTracks, getPrerequisites, getTask, getTaskEdges, getTaskEdgesWithStatus, getWaitPollCount, getWatermark, getWorkspaceForAgent, getWorkspaceStaleness, gitBackend, hasWorkMarker, idFromTitle, idFromTitleVerbose, ingestFromDb, ingestSegment, insertAgent, inspectLinks, installCapture, interruptAgent, isKickSignal, isPathInside, isTaskStatus, isValidAgentName, isValidPair, isValidPaneId, isValidTaskId, isValidWorkstreamName, isWorkspaceStale, jjBackend, kickAgent, killPane, killSession, latestSeq, linkPi, linkSkill, listAgents, listAllOrphanWorkspaces, listBlocked, listGoals, listInProgress, listLiveAgents, listLogs, listNotes, listPanes, listPanesInSession, listReady, listRecentClosed, listRecentGroups, listSessions, listTasks, listTasksByOwner, listWindows, listWorkspaceOrphans, listWorkspaces, listWorkstreams, loadDoctorChecks, loadDoctorSummary, loadFullDag, loadWorkstreamSnapshot, loadWorkstreamSnapshotFast, loadWorkstreamSnapshotSlow, localMachineId, locksDir, mapLegacyStatus, mergeSnapshotFastSlow, mostRecentGroup, murmurAvailable, mux, muxByName, newSession, newSessionWithPane, newWindow, nextHlc, noneBackend, opSubject, openDb, openTask, paneExists, paneTTY, parkTask, parseAgentNameFromTitle, parseHlc, parseOpKey, parsePsTtyOutput, peerStatuses, planUndo, priorFieldValue, probeFilesystem, readAgent, readAgentStates, readFileLockMeta, readManifest, rebuildInto, receiveHlc, reconcile, refreshAgentTitle, releaseTask, remediationParagraph, removeBlockEdge, renderForest, renderOp, renderOpLine, renderTaskTree, repairPeer, reparentTask, resetCommandResolverForTests, resetKickProcessExecutor, resetMux, resetSleep, resetTmuxExecutor, resetWaitPollCount, resetWatermark, resolveActorIdentity, resolveCliCommand, resolveCliCommandWithSource, resolveGroupId, resolvePair, resolvePeerRef, roiBucket, segmentLineCount, segmentPath, selectLayout, sendToAgent, sendToPane, sendViaTransport, sessionExists, setCommandResolverForTests, setKickProcessExecutor, setMuxForTests, setPaneTitle, setSleepForTests, setTaskStatus, setTmuxExecutor, setWaitSleepForTests, setWaitStuckWarnForTests, setWatermark, slBackend, sleep, slugifyTitle, slugifyTitleVerbose, spawnAgent, splitWindow, summarizeOwnedTasks, summarizeWorkstream, syncDir, syncEnabled, syncPass, teardownWorkstream, tmux, tmuxBackend, transportNextSteps, undoGroup, unparkTask, updateTask, verifyAgainstManifest, waitForTasks, withCaptureSuppressed, withFileLock, withOpContext, workspacePath, workspacesRoot, yankCommandForCheck };
|