@overdeck/contracts 0.50.4 → 0.60.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/index.cjs +897 -1473
- package/dist/index.d.ts +555 -1360
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +877 -1461
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,143 @@
|
|
|
1
1
|
import { Effect, Schema, SchemaGetter } from "effect";
|
|
2
2
|
import * as Rpc from "effect/unstable/rpc/Rpc";
|
|
3
3
|
import * as RpcGroup from "effect/unstable/rpc/RpcGroup";
|
|
4
|
+
//#region src/backend-pane.ts
|
|
5
|
+
const BackendPane = Schema.Struct({
|
|
6
|
+
/** Stable pane identity: the backend-native pane handle. */
|
|
7
|
+
id: Schema.String,
|
|
8
|
+
/** Issue the pane belongs to; absent for operator conversations. */
|
|
9
|
+
issue: Schema.optional(Schema.String),
|
|
10
|
+
role: Schema.Literals([
|
|
11
|
+
"work",
|
|
12
|
+
"worker",
|
|
13
|
+
"review",
|
|
14
|
+
"test",
|
|
15
|
+
"uat",
|
|
16
|
+
"strike",
|
|
17
|
+
"plan"
|
|
18
|
+
]),
|
|
19
|
+
harness: Schema.String,
|
|
20
|
+
model: Schema.String,
|
|
21
|
+
state: Schema.Literals([
|
|
22
|
+
"idle",
|
|
23
|
+
"working",
|
|
24
|
+
"blocked",
|
|
25
|
+
"done",
|
|
26
|
+
"exited",
|
|
27
|
+
"unknown"
|
|
28
|
+
]),
|
|
29
|
+
/** Epoch millis the pane entered `state`; drives the `stuck` attention. */
|
|
30
|
+
stateSince: Schema.optional(Schema.Number),
|
|
31
|
+
/** Handle the terminal WebSocket attaches to. */
|
|
32
|
+
terminalId: Schema.optional(Schema.String),
|
|
33
|
+
/** Working directory of the pane (the issue workspace path). */
|
|
34
|
+
workspace: Schema.optional(Schema.String)
|
|
35
|
+
});
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/derived-issue-state.ts
|
|
38
|
+
/**
|
|
39
|
+
* The nine pipeline states of the FR-6 table. They are mutually exclusive and
|
|
40
|
+
* resolved in this precedence (highest first), because the underlying facts
|
|
41
|
+
* overlap:
|
|
42
|
+
*
|
|
43
|
+
* closed > merged > ready > changes-requested > in-review > working >
|
|
44
|
+
* parked > planned > backlog
|
|
45
|
+
*/
|
|
46
|
+
const IssueState = Schema.Literals([
|
|
47
|
+
"backlog",
|
|
48
|
+
"parked",
|
|
49
|
+
"planned",
|
|
50
|
+
"working",
|
|
51
|
+
"in-review",
|
|
52
|
+
"changes-requested",
|
|
53
|
+
"ready",
|
|
54
|
+
"merged",
|
|
55
|
+
"closed"
|
|
56
|
+
]);
|
|
57
|
+
/** Something the operator has to look at. Orthogonal to `IssueState`. */
|
|
58
|
+
const IssueAttention = Schema.Literals([
|
|
59
|
+
"needs-you",
|
|
60
|
+
"stuck",
|
|
61
|
+
"api-error"
|
|
62
|
+
]);
|
|
63
|
+
/** Latest review decision on the PR, as the forge reports it. */
|
|
64
|
+
const PrReviewState = Schema.Literals([
|
|
65
|
+
"approved",
|
|
66
|
+
"changes-requested",
|
|
67
|
+
"review-requested",
|
|
68
|
+
"commented",
|
|
69
|
+
"none"
|
|
70
|
+
]);
|
|
71
|
+
/** Aggregate check-run conclusion for the PR head. */
|
|
72
|
+
const PrChecksState = Schema.Literals([
|
|
73
|
+
"green",
|
|
74
|
+
"red",
|
|
75
|
+
"pending"
|
|
76
|
+
]);
|
|
77
|
+
/** The pull request (or merge request) backing an issue. */
|
|
78
|
+
const DerivedPrState = Schema.Struct({
|
|
79
|
+
url: Schema.String,
|
|
80
|
+
number: Schema.Number,
|
|
81
|
+
reviewState: PrReviewState,
|
|
82
|
+
checks: PrChecksState,
|
|
83
|
+
/** Forge mergeability. `null` when the forge has not computed it yet. */
|
|
84
|
+
mergeable: Schema.NullOr(Schema.Boolean)
|
|
85
|
+
});
|
|
86
|
+
/** The issue's feature branch as git reports it. */
|
|
87
|
+
const DerivedBranchState = Schema.Struct({
|
|
88
|
+
name: Schema.String,
|
|
89
|
+
aheadOfMain: Schema.Number,
|
|
90
|
+
pushed: Schema.Boolean
|
|
91
|
+
});
|
|
92
|
+
/** Everything the dashboard needs to render an issue's pipeline position. */
|
|
93
|
+
const DerivedIssueState = Schema.Struct({
|
|
94
|
+
issueId: Schema.String,
|
|
95
|
+
state: IssueState,
|
|
96
|
+
attention: Schema.optional(IssueAttention),
|
|
97
|
+
pr: Schema.optional(DerivedPrState),
|
|
98
|
+
branch: Schema.optional(DerivedBranchState),
|
|
99
|
+
/**
|
|
100
|
+
* No tracker answered for this issue, so `closed` — the top of the
|
|
101
|
+
* precedence — could not be ruled in or out. Present only in that case; an
|
|
102
|
+
* unresolved tracker read is never reported as an open issue.
|
|
103
|
+
*/
|
|
104
|
+
trackerUnknown: Schema.optional(Schema.Literal(true))
|
|
105
|
+
});
|
|
106
|
+
const ISSUE_STATES = [
|
|
107
|
+
"backlog",
|
|
108
|
+
"parked",
|
|
109
|
+
"planned",
|
|
110
|
+
"working",
|
|
111
|
+
"in-review",
|
|
112
|
+
"changes-requested",
|
|
113
|
+
"ready",
|
|
114
|
+
"merged",
|
|
115
|
+
"closed"
|
|
116
|
+
];
|
|
117
|
+
/** Highest precedence first — the order `deriveIssueState` resolves in. */
|
|
118
|
+
const ISSUE_STATE_PRECEDENCE = [
|
|
119
|
+
"closed",
|
|
120
|
+
"merged",
|
|
121
|
+
"ready",
|
|
122
|
+
"changes-requested",
|
|
123
|
+
"in-review",
|
|
124
|
+
"working",
|
|
125
|
+
"parked",
|
|
126
|
+
"planned",
|
|
127
|
+
"backlog"
|
|
128
|
+
];
|
|
129
|
+
const ISSUE_ATTENTIONS = [
|
|
130
|
+
"needs-you",
|
|
131
|
+
"stuck",
|
|
132
|
+
"api-error"
|
|
133
|
+
];
|
|
134
|
+
function isIssueState(value) {
|
|
135
|
+
return typeof value === "string" && ISSUE_STATES.includes(value);
|
|
136
|
+
}
|
|
137
|
+
function isIssueAttention(value) {
|
|
138
|
+
return typeof value === "string" && ISSUE_ATTENTIONS.includes(value);
|
|
139
|
+
}
|
|
140
|
+
//#endregion
|
|
4
141
|
//#region src/types.ts
|
|
5
142
|
const IssueId = Schema.String;
|
|
6
143
|
const MEMBERSHIP_UNAVAILABLE_REASONS = [
|
|
@@ -41,52 +178,6 @@ const AgentResolution = Schema.Literals([
|
|
|
41
178
|
"abandoned",
|
|
42
179
|
"api_error"
|
|
43
180
|
]);
|
|
44
|
-
const ReviewStatusValue = Schema.Literals([
|
|
45
|
-
"pending",
|
|
46
|
-
"reviewing",
|
|
47
|
-
"passed",
|
|
48
|
-
"failed",
|
|
49
|
-
"blocked",
|
|
50
|
-
"skipped"
|
|
51
|
-
]);
|
|
52
|
-
const TestStatusValue = Schema.Literals([
|
|
53
|
-
"pending",
|
|
54
|
-
"testing",
|
|
55
|
-
"passed",
|
|
56
|
-
"failed",
|
|
57
|
-
"skipped",
|
|
58
|
-
"dispatch_failed"
|
|
59
|
-
]);
|
|
60
|
-
const UatStatusValue = Schema.Literals([
|
|
61
|
-
"pending",
|
|
62
|
-
"testing",
|
|
63
|
-
"passed",
|
|
64
|
-
"failed"
|
|
65
|
-
]);
|
|
66
|
-
const MergeStatusValue = Schema.Literals([
|
|
67
|
-
"pending",
|
|
68
|
-
"queued",
|
|
69
|
-
"merging",
|
|
70
|
-
"verifying",
|
|
71
|
-
"merged",
|
|
72
|
-
"failed"
|
|
73
|
-
]);
|
|
74
|
-
const ReleaseStatusValue = Schema.Literals([
|
|
75
|
-
"pending",
|
|
76
|
-
"releasing",
|
|
77
|
-
"passed",
|
|
78
|
-
"failed",
|
|
79
|
-
"partial",
|
|
80
|
-
"rolled_back",
|
|
81
|
-
"skipped"
|
|
82
|
-
]);
|
|
83
|
-
const VerificationStatusValue = Schema.Literals([
|
|
84
|
-
"pending",
|
|
85
|
-
"running",
|
|
86
|
-
"passed",
|
|
87
|
-
"failed",
|
|
88
|
-
"skipped"
|
|
89
|
-
]);
|
|
90
181
|
const KNOWN_HARNESSES = new Set([
|
|
91
182
|
"claude-code",
|
|
92
183
|
"ohmypi",
|
|
@@ -276,87 +367,6 @@ const AgentSnapshot = Schema.Struct({
|
|
|
276
367
|
runtimeSnapshotSequence: Schema.optional(SequenceNumber)
|
|
277
368
|
});
|
|
278
369
|
/** PAN-3151: A recorded cycle in the review convergence tracking series */
|
|
279
|
-
const ReviewCycleEntry = Schema.Struct({
|
|
280
|
-
cycle: Schema.Number,
|
|
281
|
-
runId: Schema.String,
|
|
282
|
-
atCommit: Schema.optional(Schema.String),
|
|
283
|
-
blockingCount: Schema.Number,
|
|
284
|
-
recordedAt: Schema.String
|
|
285
|
-
});
|
|
286
|
-
const ReviewStatusSnapshot = Schema.Struct({
|
|
287
|
-
issueId: IssueId,
|
|
288
|
-
reviewStatus: Schema.optional(ReviewStatusValue),
|
|
289
|
-
testStatus: Schema.optional(TestStatusValue),
|
|
290
|
-
uatStatus: Schema.optional(UatStatusValue),
|
|
291
|
-
uatNotes: Schema.optional(Schema.String),
|
|
292
|
-
mergeStatus: Schema.optional(MergeStatusValue),
|
|
293
|
-
releaseStatus: Schema.optional(ReleaseStatusValue),
|
|
294
|
-
releaseNotes: Schema.optional(Schema.String),
|
|
295
|
-
verificationStatus: Schema.optional(VerificationStatusValue),
|
|
296
|
-
verificationNotes: Schema.optional(Schema.String),
|
|
297
|
-
verificationCycleCount: Schema.optional(Schema.Number),
|
|
298
|
-
readyForMerge: Schema.optional(Schema.Boolean),
|
|
299
|
-
updatedAt: Schema.optional(Schema.String),
|
|
300
|
-
prUrl: Schema.optional(Schema.String),
|
|
301
|
-
/** Persistent stuck flag — set by divergence guard, cleared by /unstick */
|
|
302
|
-
stuck: Schema.optional(Schema.Boolean),
|
|
303
|
-
stuckReason: Schema.optional(Schema.String),
|
|
304
|
-
stuckAt: Schema.optional(Schema.String),
|
|
305
|
-
stuckDetails: Schema.optional(Schema.String),
|
|
306
|
-
/** PAN-3151: review cycle history for convergence detection */
|
|
307
|
-
reviewCycleHistory: Schema.optional(Schema.Array(ReviewCycleEntry)),
|
|
308
|
-
/** Commit SHA at which review passed; deacon uses this to detect new pushes after review */
|
|
309
|
-
reviewedAtCommit: Schema.optional(Schema.String),
|
|
310
|
-
/** Commit SHA at which the pre-review verification gate last passed */
|
|
311
|
-
lastVerifiedCommit: Schema.optional(Schema.String),
|
|
312
|
-
/** Current merge pipeline step (granular visibility for the merge step tracker) */
|
|
313
|
-
mergeStep: Schema.optional(Schema.String),
|
|
314
|
-
/** PAN-699: timestamp when review agents were dispatched */
|
|
315
|
-
reviewSpawnedAt: Schema.optional(Schema.String),
|
|
316
|
-
/** PAN-699: number of test-agent dispatch retries */
|
|
317
|
-
testRetryCount: Schema.optional(Schema.Number),
|
|
318
|
-
/** PAN-794: parallel-review re-dispatch retry counter (current recovery cycle) */
|
|
319
|
-
reviewRetryCount: Schema.optional(Schema.Number),
|
|
320
|
-
/** PAN-796: review auto-requeue count (circuit breaker threshold) */
|
|
321
|
-
autoRequeueCount: Schema.optional(Schema.Number),
|
|
322
|
-
/** PAN-794: ISO timestamp marking the start of the current recovery cycle */
|
|
323
|
-
recoveryStartedAt: Schema.optional(Schema.String),
|
|
324
|
-
/** Human-requested patrol opt-out — when true, Deacon ignores this issue. */
|
|
325
|
-
deaconIgnored: Schema.optional(Schema.Boolean),
|
|
326
|
-
deaconIgnoredAt: Schema.optional(Schema.String),
|
|
327
|
-
deaconIgnoredReason: Schema.optional(Schema.String),
|
|
328
|
-
/** PAN-1691: per-issue auto-merge routing key. undefined = project default, true = auto-merge (fast lane), false = hold for UAT. */
|
|
329
|
-
autoMerge: Schema.optional(Schema.Boolean),
|
|
330
|
-
/** Active review orchestrator tmux session name (e.g. agent-pan-540-review). */
|
|
331
|
-
reviewCoordinatorSessionName: Schema.optional(Schema.String),
|
|
332
|
-
/** Active review sub-role tmux session names (e.g. agent-pan-540-review-correctness). Discovered at emission time. */
|
|
333
|
-
reviewSessionNames: Schema.optional(Schema.Array(Schema.String)),
|
|
334
|
-
/** Per-role review completion status (keyed by role: 'correctness' | 'security' | ...) */
|
|
335
|
-
reviewSubStatuses: Schema.optional(Schema.Record(Schema.String, Schema.Literals(["running", "done"]))),
|
|
336
|
-
/** PAN-905: queue position in the merge queue */
|
|
337
|
-
queuePosition: Schema.optional(Schema.Number),
|
|
338
|
-
/** PAN-905: currently active specialist (e.g. 'merge-agent') */
|
|
339
|
-
activeSpecialist: Schema.optional(Schema.String),
|
|
340
|
-
/** PAN-905: number of merge retries attempted */
|
|
341
|
-
mergeRetryCount: Schema.optional(Schema.Number),
|
|
342
|
-
/** PAN-905: free-form notes about the merge attempt */
|
|
343
|
-
mergeNotes: Schema.optional(Schema.String),
|
|
344
|
-
/** Merge blocker reasons surfaced to operators. */
|
|
345
|
-
blockerReasons: Schema.optional(Schema.Array(Schema.Struct({
|
|
346
|
-
type: Schema.Literals([
|
|
347
|
-
"failing_checks",
|
|
348
|
-
"merge_conflict",
|
|
349
|
-
"unresolved_conversations",
|
|
350
|
-
"changes_requested",
|
|
351
|
-
"draft_pr",
|
|
352
|
-
"not_mergeable",
|
|
353
|
-
"unmerged_sibling_repo"
|
|
354
|
-
]),
|
|
355
|
-
summary: Schema.String,
|
|
356
|
-
details: Schema.optional(Schema.String),
|
|
357
|
-
detectedAt: Schema.String
|
|
358
|
-
})))
|
|
359
|
-
});
|
|
360
370
|
const TurnDiffFileChange = Schema.Struct({
|
|
361
371
|
path: Schema.String,
|
|
362
372
|
kind: Schema.optional(Schema.String),
|
|
@@ -482,7 +492,10 @@ const DashboardSnapshot = Schema.Struct({
|
|
|
482
492
|
sequence: SequenceNumber,
|
|
483
493
|
agents: Schema.Array(AgentSnapshot),
|
|
484
494
|
specialists: Schema.Array(Schema.Unknown),
|
|
485
|
-
|
|
495
|
+
/** PAN-3917 FR-6: the derived pipeline state of every known issue. */
|
|
496
|
+
derivedIssueStates: Schema.Array(DerivedIssueState),
|
|
497
|
+
/** PAN-3917 FR-12: every live agent pane the terminal backend reports. */
|
|
498
|
+
backendPanes: Schema.Array(BackendPane),
|
|
486
499
|
issues: Schema.Array(Schema.Unknown),
|
|
487
500
|
recentActivity: Schema.optional(Schema.Array(Schema.Unknown)),
|
|
488
501
|
resources: Schema.optional(Schema.Unknown),
|
|
@@ -497,13 +510,6 @@ const DashboardSnapshot = Schema.Struct({
|
|
|
497
510
|
restartGate: Schema.optional(RestartGateSnapshot),
|
|
498
511
|
timestamp: Schema.String
|
|
499
512
|
});
|
|
500
|
-
const WorkspaceDetail = Schema.Struct({
|
|
501
|
-
workspace: Schema.Unknown,
|
|
502
|
-
reviewStatus: Schema.Unknown,
|
|
503
|
-
planning: Schema.Unknown,
|
|
504
|
-
costs: Schema.Unknown,
|
|
505
|
-
agentOutput: Schema.Array(Schema.String)
|
|
506
|
-
});
|
|
507
513
|
const ResourceStats = Schema.Struct({ containers: Schema.Array(Schema.Struct({
|
|
508
514
|
name: Schema.String,
|
|
509
515
|
cpu: Schema.optional(Schema.String),
|
|
@@ -588,14 +594,6 @@ const SessionNode = Schema.Struct({
|
|
|
588
594
|
"tmux",
|
|
589
595
|
"supervisor"
|
|
590
596
|
])),
|
|
591
|
-
paused: Schema.optional(Schema.Boolean),
|
|
592
|
-
pausedReason: Schema.optional(Schema.String),
|
|
593
|
-
pausedAt: Schema.optional(Schema.String),
|
|
594
|
-
troubled: Schema.optional(Schema.Boolean),
|
|
595
|
-
troubledAt: Schema.optional(Schema.String),
|
|
596
|
-
troubledReason: Schema.optional(Schema.String),
|
|
597
|
-
consecutiveFailures: Schema.optional(Schema.Number),
|
|
598
|
-
queuedMailCount: Schema.optional(Schema.Number),
|
|
599
597
|
modelOrigin: Schema.optional(ModelOrigin)
|
|
600
598
|
});
|
|
601
599
|
const FeatureNode = Schema.Struct({
|
|
@@ -1735,16 +1733,32 @@ const PlanItemsUnblockedEvent = Schema.Struct({
|
|
|
1735
1733
|
items: Schema.Array(Schema.String)
|
|
1736
1734
|
})
|
|
1737
1735
|
});
|
|
1738
|
-
/**
|
|
1739
|
-
|
|
1740
|
-
|
|
1736
|
+
/**
|
|
1737
|
+
* PAN-3917 FR-6 — an issue's derived pipeline state changed.
|
|
1738
|
+
*
|
|
1739
|
+
* Emitted with `emitOnly`: derived state is recomputed from the tracker, the
|
|
1740
|
+
* forge and the terminal backend on every boot, so persisting it would be
|
|
1741
|
+
* storing a status Overdeck can derive.
|
|
1742
|
+
*/
|
|
1743
|
+
const IssueStateChangedEvent = Schema.Struct({
|
|
1744
|
+
type: Schema.Literal("issue_state.changed"),
|
|
1741
1745
|
sequence: SequenceNumber,
|
|
1742
1746
|
timestamp: Schema.String,
|
|
1743
|
-
payload: Schema.Struct({
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1747
|
+
payload: Schema.Struct({ issueState: DerivedIssueState })
|
|
1748
|
+
});
|
|
1749
|
+
/** PAN-3917 FR-12 — a live agent pane appeared or changed. `emitOnly`. */
|
|
1750
|
+
const BackendPaneChangedEvent = Schema.Struct({
|
|
1751
|
+
type: Schema.Literal("backend_pane.changed"),
|
|
1752
|
+
sequence: SequenceNumber,
|
|
1753
|
+
timestamp: Schema.String,
|
|
1754
|
+
payload: Schema.Struct({ pane: BackendPane })
|
|
1755
|
+
});
|
|
1756
|
+
/** PAN-3917 FR-12 — a pane left the backend inventory. `emitOnly`. */
|
|
1757
|
+
const BackendPaneRemovedEvent = Schema.Struct({
|
|
1758
|
+
type: Schema.Literal("backend_pane.removed"),
|
|
1759
|
+
sequence: SequenceNumber,
|
|
1760
|
+
timestamp: Schema.String,
|
|
1761
|
+
payload: Schema.Struct({ paneId: Schema.String })
|
|
1748
1762
|
});
|
|
1749
1763
|
/** Replaces socket.io `merge:ready` */
|
|
1750
1764
|
const MergeReadyEvent = Schema.Struct({
|
|
@@ -1756,17 +1770,6 @@ const MergeReadyEvent = Schema.Struct({
|
|
|
1756
1770
|
workspaceId: Schema.optional(Schema.String)
|
|
1757
1771
|
})
|
|
1758
1772
|
});
|
|
1759
|
-
/** New — review status changed */
|
|
1760
|
-
const ReviewStatusChangedEvent = Schema.Struct({
|
|
1761
|
-
type: Schema.Literal("review.status_changed"),
|
|
1762
|
-
sequence: SequenceNumber,
|
|
1763
|
-
timestamp: Schema.String,
|
|
1764
|
-
payload: Schema.Struct({
|
|
1765
|
-
issueId: IssueId,
|
|
1766
|
-
workspaceId: Schema.optional(Schema.String),
|
|
1767
|
-
status: ReviewStatusSnapshot
|
|
1768
|
-
})
|
|
1769
|
-
});
|
|
1770
1773
|
/** New — review specialist dispatched */
|
|
1771
1774
|
const PipelineReviewStartedEvent = Schema.Struct({
|
|
1772
1775
|
type: Schema.Literal("pipeline.review-started"),
|
|
@@ -2605,9 +2608,10 @@ const DomainEvent = Schema.Union([
|
|
|
2605
2608
|
PlanItemStatusChangedEvent,
|
|
2606
2609
|
PlanSubitemStatusChangedEvent,
|
|
2607
2610
|
PlanItemsUnblockedEvent,
|
|
2608
|
-
|
|
2611
|
+
IssueStateChangedEvent,
|
|
2612
|
+
BackendPaneChangedEvent,
|
|
2613
|
+
BackendPaneRemovedEvent,
|
|
2609
2614
|
MergeReadyEvent,
|
|
2610
|
-
ReviewStatusChangedEvent,
|
|
2611
2615
|
PipelineReviewStartedEvent,
|
|
2612
2616
|
PipelineReviewCompletedEvent,
|
|
2613
2617
|
PipelineTestStartedEvent,
|
|
@@ -2837,248 +2841,66 @@ const OpenInEditorInput = Schema.Struct({
|
|
|
2837
2841
|
editor: EditorIdSchema
|
|
2838
2842
|
});
|
|
2839
2843
|
//#endregion
|
|
2840
|
-
//#region src/
|
|
2841
|
-
const
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
"
|
|
2845
|
-
"
|
|
2846
|
-
"
|
|
2847
|
-
"
|
|
2848
|
-
"
|
|
2849
|
-
"
|
|
2850
|
-
"
|
|
2851
|
-
"
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
"
|
|
2855
|
-
"
|
|
2856
|
-
"
|
|
2857
|
-
"
|
|
2858
|
-
"
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2844
|
+
//#region src/rpc.ts
|
|
2845
|
+
const WS_METHODS = {
|
|
2846
|
+
scanConversations: "pan.scanConversations",
|
|
2847
|
+
searchConversations: "pan.searchConversations",
|
|
2848
|
+
listDiscoveredSessions: "pan.listDiscoveredSessions",
|
|
2849
|
+
listSessionsFeed: "pan.listSessionsFeed",
|
|
2850
|
+
getSessionsFeedFacets: "pan.getSessionsFeedFacets",
|
|
2851
|
+
getDiscoveredSession: "pan.getDiscoveredSession",
|
|
2852
|
+
enrichSessions: "pan.enrichSessions",
|
|
2853
|
+
embedSessions: "pan.embedSessions",
|
|
2854
|
+
getConversationCost: "pan.getConversationCost",
|
|
2855
|
+
getConversationCostByWorkspace: "pan.getConversationCostByWorkspace",
|
|
2856
|
+
getConversationStats: "pan.getConversationStats",
|
|
2857
|
+
subscribeDomainEvents: "pan.subscribeDomainEvents",
|
|
2858
|
+
subscribeIssueEvents: "pan.subscribeIssueEvents",
|
|
2859
|
+
subscribeTerminal: "pan.subscribeTerminal",
|
|
2860
|
+
subscribeAgentOutput: "pan.subscribeAgentOutput",
|
|
2861
|
+
subscribeConversationMessages: "pan.subscribeConversationMessages",
|
|
2862
|
+
subscribeProjectSessionTree: "pan.subscribeProjectSessionTree",
|
|
2863
|
+
getSnapshot: "pan.getSnapshot",
|
|
2864
|
+
replayEvents: "pan.replayEvents",
|
|
2865
|
+
readWorkspaceFile: "pan.readWorkspaceFile",
|
|
2866
|
+
readFileAtPath: "pan.readFileAtPath",
|
|
2867
|
+
writeFileAtPath: "pan.writeFileAtPath",
|
|
2868
|
+
resolveFilePathExists: "pan.resolveFilePathExists",
|
|
2869
|
+
terminalOpen: "pan.terminalOpen",
|
|
2870
|
+
terminalWrite: "pan.terminalWrite",
|
|
2871
|
+
terminalResize: "pan.terminalResize",
|
|
2872
|
+
terminalClose: "pan.terminalClose",
|
|
2873
|
+
startPlanning: "pan.startPlanning",
|
|
2874
|
+
startAgent: "pan.startAgent",
|
|
2875
|
+
deepWipe: "pan.deepWipe",
|
|
2876
|
+
sendTerminalInput: "pan.sendTerminalInput",
|
|
2877
|
+
resizeTerminal: "pan.resizeTerminal",
|
|
2878
|
+
shellOpenInEditor: "pan.shellOpenInEditor",
|
|
2879
|
+
getAvailableEditors: "pan.getAvailableEditors"
|
|
2880
|
+
};
|
|
2881
|
+
var PanRpcError = class extends Schema.TaggedErrorClass()("PanRpcError", {
|
|
2882
|
+
message: Schema.String,
|
|
2883
|
+
code: Schema.optional(Schema.String)
|
|
2884
|
+
}) {};
|
|
2885
|
+
const TerminalOutput = Schema.Struct({
|
|
2886
|
+
sessionName: Schema.String,
|
|
2887
|
+
data: Schema.String
|
|
2865
2888
|
});
|
|
2866
|
-
const
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
swarmItemsMerged: Schema.Number,
|
|
2870
|
-
swarmItemsTotal: Schema.Number,
|
|
2871
|
-
prsMerged: Schema.Number,
|
|
2872
|
-
awaitingUat: Schema.Number
|
|
2889
|
+
const AgentOutput = Schema.Struct({
|
|
2890
|
+
agentId: Schema.String,
|
|
2891
|
+
line: Schema.String
|
|
2873
2892
|
});
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
* review-status records per project (`listEligibleCandidatesByProject` +
|
|
2886
|
-
* `computeMergeQueueFromCandidates` in src/lib/flywheel-merge-order.ts), which
|
|
2887
|
-
* needs no flywheel run and cannot be affected by which verb an orchestrator
|
|
2888
|
-
* chose to report. Adding a verb here therefore has no merge-queue consequence;
|
|
2889
|
-
* it only changes what the dashboard displays.
|
|
2890
|
-
*/
|
|
2891
|
-
const FlywheelPipelineVerb = Schema.Literals([
|
|
2892
|
-
"planning",
|
|
2893
|
-
"working",
|
|
2894
|
-
"reviewing",
|
|
2895
|
-
"testing",
|
|
2896
|
-
"shipping",
|
|
2897
|
-
"merging",
|
|
2898
|
-
"blocked",
|
|
2899
|
-
"parked"
|
|
2900
|
-
]);
|
|
2901
|
-
const FlywheelPipelineStatus = Schema.Literals([
|
|
2902
|
-
"queued",
|
|
2903
|
-
"running",
|
|
2904
|
-
"blocked",
|
|
2905
|
-
"passed",
|
|
2906
|
-
"failed",
|
|
2907
|
-
"merged",
|
|
2908
|
-
"parked"
|
|
2909
|
-
]);
|
|
2910
|
-
const FlywheelPipelineItem = Schema.Struct({
|
|
2911
|
-
issueId: Schema.String,
|
|
2912
|
-
title: Schema.String,
|
|
2913
|
-
verb: FlywheelPipelineVerb,
|
|
2914
|
-
status: FlywheelPipelineStatus,
|
|
2915
|
-
progressPercent: Schema.optional(Schema.Number),
|
|
2916
|
-
agentId: Schema.optional(Schema.String),
|
|
2917
|
-
pr: Schema.optional(Schema.Number),
|
|
2918
|
-
mergeOrder: Schema.optional(Schema.Number),
|
|
2919
|
-
conflictsWith: Schema.optional(Schema.Array(Schema.String))
|
|
2920
|
-
});
|
|
2921
|
-
const FlywheelSubstrateBugStatus = Schema.Literals([
|
|
2922
|
-
"filed",
|
|
2923
|
-
"fixed",
|
|
2924
|
-
"workaround"
|
|
2925
|
-
]);
|
|
2926
|
-
const FlywheelSubstrateBug = Schema.Struct({
|
|
2927
|
-
issueId: Schema.String,
|
|
2928
|
-
title: Schema.String,
|
|
2929
|
-
status: FlywheelSubstrateBugStatus,
|
|
2930
|
-
commitSha: Schema.optional(Schema.String),
|
|
2931
|
-
url: Schema.optional(FlywheelHttpUrl)
|
|
2932
|
-
});
|
|
2933
|
-
const FlywheelAgentStatus = Schema.Literals([
|
|
2934
|
-
"starting",
|
|
2935
|
-
"running",
|
|
2936
|
-
"waiting",
|
|
2937
|
-
"idle",
|
|
2938
|
-
"stopped",
|
|
2939
|
-
"error"
|
|
2940
|
-
]);
|
|
2941
|
-
const FlywheelAgent = Schema.Struct({
|
|
2942
|
-
id: Schema.String,
|
|
2943
|
-
label: Schema.String,
|
|
2944
|
-
status: FlywheelAgentStatus,
|
|
2945
|
-
issueId: Schema.optional(Schema.String),
|
|
2946
|
-
role: Schema.optional(Schema.String),
|
|
2947
|
-
model: Schema.optional(Schema.String),
|
|
2948
|
-
ctxPercent: Schema.optional(Schema.Number),
|
|
2949
|
-
currentAction: Schema.optional(Schema.String)
|
|
2950
|
-
});
|
|
2951
|
-
const FlywheelParkedItem = Schema.Struct({
|
|
2952
|
-
issueId: Schema.String,
|
|
2953
|
-
title: Schema.String,
|
|
2954
|
-
reason: Schema.String,
|
|
2955
|
-
parkedAt: Schema.optional(Schema.String)
|
|
2956
|
-
});
|
|
2957
|
-
const FlywheelSuggestionAction = Schema.Literals([
|
|
2958
|
-
"start",
|
|
2959
|
-
"resume",
|
|
2960
|
-
"plan",
|
|
2961
|
-
"review",
|
|
2962
|
-
"merge",
|
|
2963
|
-
"unblock",
|
|
2964
|
-
"park",
|
|
2965
|
-
"investigate",
|
|
2966
|
-
"wait"
|
|
2967
|
-
]);
|
|
2968
|
-
const FlywheelSuggestionPriority = Schema.Literals([
|
|
2969
|
-
"urgent",
|
|
2970
|
-
"high",
|
|
2971
|
-
"medium",
|
|
2972
|
-
"low"
|
|
2973
|
-
]);
|
|
2974
|
-
const FlywheelSuggestion = Schema.Struct({
|
|
2975
|
-
action: FlywheelSuggestionAction,
|
|
2976
|
-
issueId: Schema.optional(Schema.String),
|
|
2977
|
-
rationale: Schema.String,
|
|
2978
|
-
priority: FlywheelSuggestionPriority,
|
|
2979
|
-
filedBy: Schema.optional(Schema.Literals(["agent", "operator"])),
|
|
2980
|
-
weight: Schema.optional(Schema.Number),
|
|
2981
|
-
weightReason: Schema.optional(Schema.String)
|
|
2982
|
-
});
|
|
2983
|
-
const FlywheelSystemStatus = Schema.Struct({
|
|
2984
|
-
mainHead: Schema.String,
|
|
2985
|
-
ramUsedMb: Schema.Number,
|
|
2986
|
-
ramTotalMb: Schema.Number,
|
|
2987
|
-
swapUsedMb: Schema.Number,
|
|
2988
|
-
swapTotalMb: Schema.Number,
|
|
2989
|
-
agentsActive: Schema.Number,
|
|
2990
|
-
agentsCap: Schema.Number
|
|
2991
|
-
});
|
|
2992
|
-
const FlywheelOrders = Schema.Struct({
|
|
2993
|
-
bookId: Schema.String,
|
|
2994
|
-
bookName: Schema.String,
|
|
2995
|
-
landed: Schema.Number,
|
|
2996
|
-
total: Schema.Number,
|
|
2997
|
-
laneAInFlight: Schema.Array(Schema.String),
|
|
2998
|
-
laneBInFlight: Schema.optional(Schema.String),
|
|
2999
|
-
drained: Schema.Boolean
|
|
3000
|
-
});
|
|
3001
|
-
const FlywheelStatus = Schema.Struct({
|
|
3002
|
-
runId: FlywheelRunId,
|
|
3003
|
-
startedAt: Schema.String,
|
|
3004
|
-
elapsedMs: Schema.Number,
|
|
3005
|
-
orchestrator: FlywheelOrchestrator,
|
|
3006
|
-
headline: FlywheelHeadline,
|
|
3007
|
-
activePipeline: Schema.Array(FlywheelPipelineItem),
|
|
3008
|
-
substrateBugs: Schema.Array(FlywheelSubstrateBug),
|
|
3009
|
-
agents: Schema.Array(FlywheelAgent),
|
|
3010
|
-
parked: Schema.Array(FlywheelParkedItem),
|
|
3011
|
-
suggestions: Schema.Array(FlywheelSuggestion).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
3012
|
-
system: FlywheelSystemStatus,
|
|
3013
|
-
openQuestions: Schema.Array(Schema.String),
|
|
3014
|
-
orders: Schema.optional(FlywheelOrders),
|
|
3015
|
-
scope: Schema.optional(FlywheelScope),
|
|
3016
|
-
ticks: Schema.Number,
|
|
3017
|
-
lastTickAt: Schema.String
|
|
3018
|
-
});
|
|
3019
|
-
//#endregion
|
|
3020
|
-
//#region src/rpc.ts
|
|
3021
|
-
const WS_METHODS = {
|
|
3022
|
-
scanConversations: "pan.scanConversations",
|
|
3023
|
-
searchConversations: "pan.searchConversations",
|
|
3024
|
-
listDiscoveredSessions: "pan.listDiscoveredSessions",
|
|
3025
|
-
listSessionsFeed: "pan.listSessionsFeed",
|
|
3026
|
-
getSessionsFeedFacets: "pan.getSessionsFeedFacets",
|
|
3027
|
-
getDiscoveredSession: "pan.getDiscoveredSession",
|
|
3028
|
-
enrichSessions: "pan.enrichSessions",
|
|
3029
|
-
embedSessions: "pan.embedSessions",
|
|
3030
|
-
getConversationCost: "pan.getConversationCost",
|
|
3031
|
-
getConversationCostByWorkspace: "pan.getConversationCostByWorkspace",
|
|
3032
|
-
getConversationStats: "pan.getConversationStats",
|
|
3033
|
-
subscribeDomainEvents: "pan.subscribeDomainEvents",
|
|
3034
|
-
subscribeIssueEvents: "pan.subscribeIssueEvents",
|
|
3035
|
-
subscribeTerminal: "pan.subscribeTerminal",
|
|
3036
|
-
subscribeAgentOutput: "pan.subscribeAgentOutput",
|
|
3037
|
-
subscribeConversationMessages: "pan.subscribeConversationMessages",
|
|
3038
|
-
subscribeProjectSessionTree: "pan.subscribeProjectSessionTree",
|
|
3039
|
-
subscribeFlywheelStatus: "pan.subscribeFlywheelStatus",
|
|
3040
|
-
getSnapshot: "pan.getSnapshot",
|
|
3041
|
-
replayEvents: "pan.replayEvents",
|
|
3042
|
-
getWorkspaceDetail: "pan.getWorkspaceDetail",
|
|
3043
|
-
readWorkspaceFile: "pan.readWorkspaceFile",
|
|
3044
|
-
readFileAtPath: "pan.readFileAtPath",
|
|
3045
|
-
writeFileAtPath: "pan.writeFileAtPath",
|
|
3046
|
-
resolveFilePathExists: "pan.resolveFilePathExists",
|
|
3047
|
-
terminalOpen: "pan.terminalOpen",
|
|
3048
|
-
terminalWrite: "pan.terminalWrite",
|
|
3049
|
-
terminalResize: "pan.terminalResize",
|
|
3050
|
-
terminalClose: "pan.terminalClose",
|
|
3051
|
-
startPlanning: "pan.startPlanning",
|
|
3052
|
-
startAgent: "pan.startAgent",
|
|
3053
|
-
deepWipe: "pan.deepWipe",
|
|
3054
|
-
sendTerminalInput: "pan.sendTerminalInput",
|
|
3055
|
-
resizeTerminal: "pan.resizeTerminal",
|
|
3056
|
-
shellOpenInEditor: "pan.shellOpenInEditor",
|
|
3057
|
-
getAvailableEditors: "pan.getAvailableEditors"
|
|
3058
|
-
};
|
|
3059
|
-
var PanRpcError = class extends Schema.TaggedErrorClass()("PanRpcError", {
|
|
3060
|
-
message: Schema.String,
|
|
3061
|
-
code: Schema.optional(Schema.String)
|
|
3062
|
-
}) {};
|
|
3063
|
-
const TerminalOutput = Schema.Struct({
|
|
3064
|
-
sessionName: Schema.String,
|
|
3065
|
-
data: Schema.String
|
|
3066
|
-
});
|
|
3067
|
-
const AgentOutput = Schema.Struct({
|
|
3068
|
-
agentId: Schema.String,
|
|
3069
|
-
line: Schema.String
|
|
3070
|
-
});
|
|
3071
|
-
const ProposedPlan = Schema.Struct({
|
|
3072
|
-
id: Schema.String,
|
|
3073
|
-
plan: Schema.String,
|
|
3074
|
-
planFilePath: Schema.optional(Schema.String),
|
|
3075
|
-
status: Schema.Literals([
|
|
3076
|
-
"pending",
|
|
3077
|
-
"approved",
|
|
3078
|
-
"rejected"
|
|
3079
|
-
]),
|
|
3080
|
-
createdAt: Schema.String,
|
|
3081
|
-
resolvedAt: Schema.optional(Schema.String)
|
|
2893
|
+
const ProposedPlan = Schema.Struct({
|
|
2894
|
+
id: Schema.String,
|
|
2895
|
+
plan: Schema.String,
|
|
2896
|
+
planFilePath: Schema.optional(Schema.String),
|
|
2897
|
+
status: Schema.Literals([
|
|
2898
|
+
"pending",
|
|
2899
|
+
"approved",
|
|
2900
|
+
"rejected"
|
|
2901
|
+
]),
|
|
2902
|
+
createdAt: Schema.String,
|
|
2903
|
+
resolvedAt: Schema.optional(Schema.String)
|
|
3082
2904
|
});
|
|
3083
2905
|
const CompactBoundary = Schema.Struct({
|
|
3084
2906
|
id: Schema.String,
|
|
@@ -3280,12 +3102,6 @@ const TerminalCloseRpc = Rpc.make(WS_METHODS.terminalClose, {
|
|
|
3280
3102
|
payload: Schema.Struct({ sessionName: Schema.String }),
|
|
3281
3103
|
error: PanRpcError
|
|
3282
3104
|
});
|
|
3283
|
-
/** 10. Get batched workspace detail (unary) — replaces 5 separate HTTP calls */
|
|
3284
|
-
const GetWorkspaceDetailRpc = Rpc.make(WS_METHODS.getWorkspaceDetail, {
|
|
3285
|
-
payload: Schema.Struct({ issueId: IssueId }),
|
|
3286
|
-
success: WorkspaceDetail,
|
|
3287
|
-
error: PanRpcError
|
|
3288
|
-
});
|
|
3289
3105
|
const ReadWorkspaceFileInput = Schema.Struct({
|
|
3290
3106
|
issueId: IssueId,
|
|
3291
3107
|
relativePath: Schema.String,
|
|
@@ -3432,13 +3248,6 @@ const SubscribeProjectSessionTreeRpc = Rpc.make(WS_METHODS.subscribeProjectSessi
|
|
|
3432
3248
|
error: PanRpcError,
|
|
3433
3249
|
stream: true
|
|
3434
3250
|
});
|
|
3435
|
-
/** 18. Subscribe to latest Flywheel status snapshots (stream) */
|
|
3436
|
-
const SubscribeFlywheelStatusRpc = Rpc.make(WS_METHODS.subscribeFlywheelStatus, {
|
|
3437
|
-
payload: Schema.Struct({}),
|
|
3438
|
-
success: Schema.NullOr(FlywheelStatus),
|
|
3439
|
-
error: PanRpcError,
|
|
3440
|
-
stream: true
|
|
3441
|
-
});
|
|
3442
3251
|
/** 19. Open a workspace in an editor (PAN-966) */
|
|
3443
3252
|
const ShellOpenInEditorRpc = Rpc.make(WS_METHODS.shellOpenInEditor, {
|
|
3444
3253
|
payload: OpenInEditorInput,
|
|
@@ -3616,7 +3425,7 @@ const GetConversationStatsRpc = Rpc.make(WS_METHODS.getConversationStats, {
|
|
|
3616
3425
|
error: PanRpcError
|
|
3617
3426
|
});
|
|
3618
3427
|
/** All Overdeck WebSocket RPC methods */
|
|
3619
|
-
const PanRpcGroup = RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc,
|
|
3428
|
+
const PanRpcGroup = RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, ReadWorkspaceFileRpc, ReadFileAtPathRpc, WriteFileAtPathRpc, ResolveFilePathExistsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc);
|
|
3620
3429
|
//#endregion
|
|
3621
3430
|
//#region src/issue-delta.ts
|
|
3622
3431
|
function createIssueDelta(previous, next) {
|
|
@@ -3641,7 +3450,8 @@ const INITIAL_READ_MODEL_STATE = {
|
|
|
3641
3450
|
sequence: 0,
|
|
3642
3451
|
agentsById: {},
|
|
3643
3452
|
agentRuntimeById: {},
|
|
3644
|
-
|
|
3453
|
+
derivedIssueStateByIssueId: {},
|
|
3454
|
+
backendPanesById: {},
|
|
3645
3455
|
resources: null,
|
|
3646
3456
|
agentOutputById: {},
|
|
3647
3457
|
issuesRaw: [],
|
|
@@ -3758,8 +3568,10 @@ function bumpRuntimeSnapshotSequence(agentsById, agentId, sequence) {
|
|
|
3758
3568
|
function syncSnapshot(state, snapshot) {
|
|
3759
3569
|
const agentsById = {};
|
|
3760
3570
|
for (const agent of snapshot.agents) agentsById[agent.id] = agent;
|
|
3761
|
-
const
|
|
3762
|
-
for (const
|
|
3571
|
+
const derivedIssueStateByIssueId = {};
|
|
3572
|
+
for (const derived of snapshot.derivedIssueStates ?? []) derivedIssueStateByIssueId[derived.issueId] = derived;
|
|
3573
|
+
const backendPanesById = {};
|
|
3574
|
+
for (const pane of snapshot.backendPanes ?? []) backendPanesById[pane.id] = pane;
|
|
3763
3575
|
const channelPermissionRequestsById = {};
|
|
3764
3576
|
const channelPermissionRequestIdsByAgentId = {};
|
|
3765
3577
|
for (const request of snapshot.channelPermissionRequests ?? []) {
|
|
@@ -3775,7 +3587,8 @@ function syncSnapshot(state, snapshot) {
|
|
|
3775
3587
|
...state,
|
|
3776
3588
|
sequence: snapshot.sequence,
|
|
3777
3589
|
agentsById,
|
|
3778
|
-
|
|
3590
|
+
derivedIssueStateByIssueId,
|
|
3591
|
+
backendPanesById,
|
|
3779
3592
|
agentRuntimeById: snapshot.agentRuntimeById ?? state.agentRuntimeById,
|
|
3780
3593
|
channelPermissionRequestsById,
|
|
3781
3594
|
channelPermissionRequestIdsByAgentId,
|
|
@@ -3865,7 +3678,16 @@ function applyEvent(state, event) {
|
|
|
3865
3678
|
};
|
|
3866
3679
|
}
|
|
3867
3680
|
case "agent.stopped": {
|
|
3868
|
-
const
|
|
3681
|
+
const stoppedAgent = state.agentsById[event.payload.agentId];
|
|
3682
|
+
const nextAgentsById = stoppedAgent ? {
|
|
3683
|
+
...state.agentsById,
|
|
3684
|
+
[event.payload.agentId]: {
|
|
3685
|
+
...stoppedAgent,
|
|
3686
|
+
status: "stopped",
|
|
3687
|
+
hasLiveTmuxSession: false,
|
|
3688
|
+
lastActivity: event.timestamp
|
|
3689
|
+
}
|
|
3690
|
+
} : state.agentsById;
|
|
3869
3691
|
const runtimeById = state.agentRuntimeById ?? {};
|
|
3870
3692
|
const prevRuntime = runtimeById[event.payload.agentId];
|
|
3871
3693
|
const nextRuntimeById = prevRuntime ? {
|
|
@@ -3894,7 +3716,7 @@ function applyEvent(state, event) {
|
|
|
3894
3716
|
return {
|
|
3895
3717
|
...state,
|
|
3896
3718
|
sequence: Math.max(state.sequence, event.sequence),
|
|
3897
|
-
agentsById:
|
|
3719
|
+
agentsById: nextAgentsById,
|
|
3898
3720
|
agentRuntimeById: nextRuntimeById,
|
|
3899
3721
|
channelPermissionRequestsById: nextPermissionRequestsById,
|
|
3900
3722
|
channelPermissionRequestIdsByAgentId: restPendingIds,
|
|
@@ -4039,85 +3861,35 @@ function applyEvent(state, event) {
|
|
|
4039
3861
|
}
|
|
4040
3862
|
};
|
|
4041
3863
|
}
|
|
4042
|
-
case "
|
|
4043
|
-
case "review.status_changed": return {
|
|
3864
|
+
case "issue_state.changed": return {
|
|
4044
3865
|
...state,
|
|
4045
3866
|
sequence: Math.max(state.sequence, event.sequence),
|
|
4046
|
-
|
|
4047
|
-
...state.
|
|
4048
|
-
[event.payload.issueId]: event.payload.
|
|
3867
|
+
derivedIssueStateByIssueId: {
|
|
3868
|
+
...state.derivedIssueStateByIssueId,
|
|
3869
|
+
[event.payload.issueState.issueId]: event.payload.issueState
|
|
4049
3870
|
}
|
|
4050
3871
|
};
|
|
4051
|
-
case "
|
|
4052
|
-
const { issueId, role, sessionName } = event.payload;
|
|
4053
|
-
const existing = state.reviewStatusByIssueId[issueId];
|
|
4054
|
-
const prevSubs = existing?.reviewSubStatuses ?? {};
|
|
4055
|
-
const prevNames = existing?.reviewSessionNames ?? [];
|
|
4056
|
-
const nextNames = prevNames.includes(sessionName) ? prevNames : [...prevNames, sessionName];
|
|
4057
|
-
const nextStatus = {
|
|
4058
|
-
...existing ?? { issueId },
|
|
4059
|
-
reviewSubStatuses: {
|
|
4060
|
-
...prevSubs,
|
|
4061
|
-
[role]: "running"
|
|
4062
|
-
},
|
|
4063
|
-
reviewSessionNames: nextNames
|
|
4064
|
-
};
|
|
4065
|
-
return {
|
|
4066
|
-
...state,
|
|
4067
|
-
sequence: Math.max(state.sequence, event.sequence),
|
|
4068
|
-
reviewStatusByIssueId: {
|
|
4069
|
-
...state.reviewStatusByIssueId,
|
|
4070
|
-
[issueId]: nextStatus
|
|
4071
|
-
}
|
|
4072
|
-
};
|
|
4073
|
-
}
|
|
4074
|
-
case "review.reviewer_completed": {
|
|
4075
|
-
const { issueId, role } = event.payload;
|
|
4076
|
-
const existing = state.reviewStatusByIssueId[issueId];
|
|
4077
|
-
if (!existing) return {
|
|
4078
|
-
...state,
|
|
4079
|
-
sequence: Math.max(state.sequence, event.sequence)
|
|
4080
|
-
};
|
|
4081
|
-
const prevSubs = existing.reviewSubStatuses ?? {};
|
|
4082
|
-
const nextStatus = {
|
|
4083
|
-
...existing,
|
|
4084
|
-
reviewSubStatuses: {
|
|
4085
|
-
...prevSubs,
|
|
4086
|
-
[role]: "done"
|
|
4087
|
-
}
|
|
4088
|
-
};
|
|
4089
|
-
return {
|
|
4090
|
-
...state,
|
|
4091
|
-
sequence: Math.max(state.sequence, event.sequence),
|
|
4092
|
-
reviewStatusByIssueId: {
|
|
4093
|
-
...state.reviewStatusByIssueId,
|
|
4094
|
-
[issueId]: nextStatus
|
|
4095
|
-
}
|
|
4096
|
-
};
|
|
4097
|
-
}
|
|
4098
|
-
case "review.specialist.timed_out": return {
|
|
3872
|
+
case "backend_pane.changed": return {
|
|
4099
3873
|
...state,
|
|
4100
|
-
sequence: Math.max(state.sequence, event.sequence)
|
|
3874
|
+
sequence: Math.max(state.sequence, event.sequence),
|
|
3875
|
+
backendPanesById: {
|
|
3876
|
+
...state.backendPanesById,
|
|
3877
|
+
[event.payload.pane.id]: event.payload.pane
|
|
3878
|
+
}
|
|
4101
3879
|
};
|
|
4102
|
-
case "
|
|
4103
|
-
const {
|
|
4104
|
-
const nextStatus = {
|
|
4105
|
-
...state.reviewStatusByIssueId[issueId] ?? { issueId },
|
|
4106
|
-
reviewCoordinatorSessionName: sessionName
|
|
4107
|
-
};
|
|
3880
|
+
case "backend_pane.removed": {
|
|
3881
|
+
const { [event.payload.paneId]: _removed, ...rest } = state.backendPanesById;
|
|
4108
3882
|
return {
|
|
4109
3883
|
...state,
|
|
4110
3884
|
sequence: Math.max(state.sequence, event.sequence),
|
|
4111
|
-
|
|
4112
|
-
...state.reviewStatusByIssueId,
|
|
4113
|
-
[issueId]: nextStatus
|
|
4114
|
-
}
|
|
3885
|
+
backendPanesById: rest
|
|
4115
3886
|
};
|
|
4116
3887
|
}
|
|
4117
|
-
case "review.
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
3888
|
+
case "review.reviewer_started":
|
|
3889
|
+
case "review.reviewer_completed":
|
|
3890
|
+
case "review.specialist.timed_out":
|
|
3891
|
+
case "review.coordinator_started":
|
|
3892
|
+
case "review.coordinator.died":
|
|
4121
3893
|
case "pipeline.review-started":
|
|
4122
3894
|
case "pipeline.review-completed":
|
|
4123
3895
|
case "pipeline.test-started":
|
|
@@ -5102,49 +4874,229 @@ function deriveProjectCi(record) {
|
|
|
5102
4874
|
};
|
|
5103
4875
|
}
|
|
5104
4876
|
//#endregion
|
|
5105
|
-
//#region src/flywheel
|
|
5106
|
-
const
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
"
|
|
5110
|
-
"
|
|
4877
|
+
//#region src/flywheel.ts
|
|
4878
|
+
const FlywheelRunId = Schema.String.check(Schema.isPattern(/^RUN-\d+$/));
|
|
4879
|
+
const FlywheelHttpUrl = Schema.String.check(Schema.isPattern(/^https?:\/\/\S+$/i));
|
|
4880
|
+
const FlywheelHarness = Schema.Literals([
|
|
4881
|
+
"claude-code",
|
|
4882
|
+
"pi",
|
|
4883
|
+
"ohmypi",
|
|
4884
|
+
"codex",
|
|
4885
|
+
"acp",
|
|
4886
|
+
"kimi-code",
|
|
4887
|
+
"opencode",
|
|
4888
|
+
"muse"
|
|
5111
4889
|
]);
|
|
5112
|
-
const
|
|
5113
|
-
"
|
|
5114
|
-
"
|
|
5115
|
-
"
|
|
4890
|
+
const FlywheelEffort = Schema.Literals([
|
|
4891
|
+
"low",
|
|
4892
|
+
"medium",
|
|
4893
|
+
"high",
|
|
4894
|
+
"xhigh",
|
|
4895
|
+
"max"
|
|
5116
4896
|
]);
|
|
5117
|
-
const
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
|
|
5121
|
-
|
|
5122
|
-
target: FlywheelStatsCriterionValue,
|
|
5123
|
-
status: FlywheelStatsCriterionStatus,
|
|
5124
|
-
trend: Schema.optional(FlywheelStatsTrend),
|
|
5125
|
-
sampleSize: Schema.Number,
|
|
5126
|
-
dataSufficient: Schema.Boolean
|
|
5127
|
-
});
|
|
5128
|
-
const FlywheelStatsCriteria = Schema.Struct({
|
|
5129
|
-
c1_bugRate: FlywheelStatsCriterion,
|
|
5130
|
-
c2_p0Bugs: FlywheelStatsCriterion,
|
|
5131
|
-
c3_passRate: FlywheelStatsCriterion,
|
|
5132
|
-
c4_mttr: FlywheelStatsCriterion,
|
|
5133
|
-
c5_intervention: FlywheelStatsCriterion,
|
|
5134
|
-
c6_timeConsistency: FlywheelStatsCriterion,
|
|
5135
|
-
c7_flake: FlywheelStatsCriterion
|
|
4897
|
+
const FlywheelOrchestrator = Schema.Struct({
|
|
4898
|
+
harness: FlywheelHarness,
|
|
4899
|
+
model: Schema.String,
|
|
4900
|
+
effort: FlywheelEffort,
|
|
4901
|
+
ctxPercent: Schema.Number
|
|
5136
4902
|
});
|
|
5137
|
-
const
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
4903
|
+
const FlywheelScope = Schema.Literals(["pan-only", "all-tracked-projects"]);
|
|
4904
|
+
const FlywheelHeadline = Schema.Struct({
|
|
4905
|
+
bugsFixed: Schema.Number,
|
|
4906
|
+
swarmItemsMerged: Schema.Number,
|
|
4907
|
+
swarmItemsTotal: Schema.Number,
|
|
4908
|
+
prsMerged: Schema.Number,
|
|
4909
|
+
awaitingUat: Schema.Number
|
|
5141
4910
|
});
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
|
|
4911
|
+
/**
|
|
4912
|
+
* Pipeline verbs — display state only. They no longer gate the merge queue.
|
|
4913
|
+
*
|
|
4914
|
+
* History worth keeping (PAN-1736 / PAN-1759): the merge queue used to be
|
|
4915
|
+
* derived by filtering these verbs, treating only "shipping" or "merging" as
|
|
4916
|
+
* "at the merge gate". Any other verb on an issue that was ready_for_merge in
|
|
4917
|
+
* the review DB silently dropped it from the queue and from UAT batch
|
|
4918
|
+
* assembly — RUN-18 shipped an empty queue with five ready issues exactly that
|
|
4919
|
+
* way — and the queue existed only while a run was emitting a pipeline at all.
|
|
4920
|
+
*
|
|
4921
|
+
* PAN-1696 removed that coupling. The ready set is now sourced from the
|
|
4922
|
+
* review-status records per project (`listEligibleCandidatesByProject` +
|
|
4923
|
+
* `computeMergeQueueFromCandidates` in src/lib/flywheel-merge-order.ts), which
|
|
4924
|
+
* needs no flywheel run and cannot be affected by which verb an orchestrator
|
|
4925
|
+
* chose to report. Adding a verb here therefore has no merge-queue consequence;
|
|
4926
|
+
* it only changes what the dashboard displays.
|
|
4927
|
+
*/
|
|
4928
|
+
const FlywheelPipelineVerb = Schema.Literals([
|
|
4929
|
+
"planning",
|
|
4930
|
+
"working",
|
|
4931
|
+
"reviewing",
|
|
4932
|
+
"testing",
|
|
4933
|
+
"shipping",
|
|
4934
|
+
"merging",
|
|
4935
|
+
"blocked",
|
|
4936
|
+
"parked"
|
|
4937
|
+
]);
|
|
4938
|
+
const FlywheelPipelineStatus = Schema.Literals([
|
|
4939
|
+
"queued",
|
|
4940
|
+
"running",
|
|
4941
|
+
"blocked",
|
|
4942
|
+
"passed",
|
|
4943
|
+
"failed",
|
|
4944
|
+
"merged",
|
|
4945
|
+
"parked"
|
|
4946
|
+
]);
|
|
4947
|
+
const FlywheelPipelineItem = Schema.Struct({
|
|
4948
|
+
issueId: Schema.String,
|
|
4949
|
+
title: Schema.String,
|
|
4950
|
+
verb: FlywheelPipelineVerb,
|
|
4951
|
+
status: FlywheelPipelineStatus,
|
|
4952
|
+
progressPercent: Schema.optional(Schema.Number),
|
|
4953
|
+
agentId: Schema.optional(Schema.String),
|
|
4954
|
+
pr: Schema.optional(Schema.Number),
|
|
4955
|
+
mergeOrder: Schema.optional(Schema.Number),
|
|
4956
|
+
conflictsWith: Schema.optional(Schema.Array(Schema.String))
|
|
4957
|
+
});
|
|
4958
|
+
const FlywheelSubstrateBugStatus = Schema.Literals([
|
|
4959
|
+
"filed",
|
|
4960
|
+
"fixed",
|
|
4961
|
+
"workaround"
|
|
4962
|
+
]);
|
|
4963
|
+
const FlywheelSubstrateBug = Schema.Struct({
|
|
4964
|
+
issueId: Schema.String,
|
|
4965
|
+
title: Schema.String,
|
|
4966
|
+
status: FlywheelSubstrateBugStatus,
|
|
4967
|
+
commitSha: Schema.optional(Schema.String),
|
|
4968
|
+
url: Schema.optional(FlywheelHttpUrl)
|
|
4969
|
+
});
|
|
4970
|
+
const FlywheelAgentStatus = Schema.Literals([
|
|
4971
|
+
"starting",
|
|
4972
|
+
"running",
|
|
4973
|
+
"waiting",
|
|
4974
|
+
"idle",
|
|
4975
|
+
"stopped",
|
|
4976
|
+
"error"
|
|
4977
|
+
]);
|
|
4978
|
+
const FlywheelAgent = Schema.Struct({
|
|
4979
|
+
id: Schema.String,
|
|
4980
|
+
label: Schema.String,
|
|
4981
|
+
status: FlywheelAgentStatus,
|
|
4982
|
+
issueId: Schema.optional(Schema.String),
|
|
4983
|
+
role: Schema.optional(Schema.String),
|
|
4984
|
+
model: Schema.optional(Schema.String),
|
|
4985
|
+
ctxPercent: Schema.optional(Schema.Number),
|
|
4986
|
+
currentAction: Schema.optional(Schema.String)
|
|
4987
|
+
});
|
|
4988
|
+
const FlywheelParkedItem = Schema.Struct({
|
|
4989
|
+
issueId: Schema.String,
|
|
4990
|
+
title: Schema.String,
|
|
4991
|
+
reason: Schema.String,
|
|
4992
|
+
parkedAt: Schema.optional(Schema.String)
|
|
4993
|
+
});
|
|
4994
|
+
const FlywheelSuggestionAction = Schema.Literals([
|
|
4995
|
+
"start",
|
|
4996
|
+
"resume",
|
|
4997
|
+
"plan",
|
|
4998
|
+
"review",
|
|
4999
|
+
"merge",
|
|
5000
|
+
"unblock",
|
|
5001
|
+
"park",
|
|
5002
|
+
"investigate",
|
|
5003
|
+
"wait"
|
|
5004
|
+
]);
|
|
5005
|
+
const FlywheelSuggestionPriority = Schema.Literals([
|
|
5006
|
+
"urgent",
|
|
5007
|
+
"high",
|
|
5008
|
+
"medium",
|
|
5009
|
+
"low"
|
|
5010
|
+
]);
|
|
5011
|
+
const FlywheelSuggestion = Schema.Struct({
|
|
5012
|
+
action: FlywheelSuggestionAction,
|
|
5013
|
+
issueId: Schema.optional(Schema.String),
|
|
5014
|
+
rationale: Schema.String,
|
|
5015
|
+
priority: FlywheelSuggestionPriority,
|
|
5016
|
+
filedBy: Schema.optional(Schema.Literals(["agent", "operator"])),
|
|
5017
|
+
weight: Schema.optional(Schema.Number),
|
|
5018
|
+
weightReason: Schema.optional(Schema.String)
|
|
5019
|
+
});
|
|
5020
|
+
const FlywheelSystemStatus = Schema.Struct({
|
|
5021
|
+
mainHead: Schema.String,
|
|
5022
|
+
ramUsedMb: Schema.Number,
|
|
5023
|
+
ramTotalMb: Schema.Number,
|
|
5024
|
+
swapUsedMb: Schema.Number,
|
|
5025
|
+
swapTotalMb: Schema.Number,
|
|
5026
|
+
agentsActive: Schema.Number,
|
|
5027
|
+
agentsCap: Schema.Number
|
|
5028
|
+
});
|
|
5029
|
+
const FlywheelOrders = Schema.Struct({
|
|
5030
|
+
bookId: Schema.String,
|
|
5031
|
+
bookName: Schema.String,
|
|
5032
|
+
landed: Schema.Number,
|
|
5033
|
+
total: Schema.Number,
|
|
5034
|
+
laneAInFlight: Schema.Array(Schema.String),
|
|
5035
|
+
laneBInFlight: Schema.optional(Schema.String),
|
|
5036
|
+
drained: Schema.Boolean
|
|
5037
|
+
});
|
|
5038
|
+
const FlywheelStatus = Schema.Struct({
|
|
5039
|
+
runId: FlywheelRunId,
|
|
5040
|
+
startedAt: Schema.String,
|
|
5041
|
+
elapsedMs: Schema.Number,
|
|
5042
|
+
orchestrator: FlywheelOrchestrator,
|
|
5043
|
+
headline: FlywheelHeadline,
|
|
5044
|
+
activePipeline: Schema.Array(FlywheelPipelineItem),
|
|
5045
|
+
substrateBugs: Schema.Array(FlywheelSubstrateBug),
|
|
5046
|
+
agents: Schema.Array(FlywheelAgent),
|
|
5047
|
+
parked: Schema.Array(FlywheelParkedItem),
|
|
5048
|
+
suggestions: Schema.Array(FlywheelSuggestion).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
5049
|
+
system: FlywheelSystemStatus,
|
|
5050
|
+
openQuestions: Schema.Array(Schema.String),
|
|
5051
|
+
orders: Schema.optional(FlywheelOrders),
|
|
5052
|
+
scope: Schema.optional(FlywheelScope),
|
|
5053
|
+
ticks: Schema.Number,
|
|
5054
|
+
lastTickAt: Schema.String
|
|
5055
|
+
});
|
|
5056
|
+
//#endregion
|
|
5057
|
+
//#region src/flywheel-stats.ts
|
|
5058
|
+
const FlywheelStatsCriterionStatus = Schema.Literals([
|
|
5059
|
+
"green",
|
|
5060
|
+
"yellow",
|
|
5061
|
+
"red",
|
|
5062
|
+
"insufficient_data"
|
|
5063
|
+
]);
|
|
5064
|
+
const FlywheelStatsTrend = Schema.Literals([
|
|
5065
|
+
"up",
|
|
5066
|
+
"down",
|
|
5067
|
+
"flat"
|
|
5068
|
+
]);
|
|
5069
|
+
const FlywheelStatsCriterionValueObject = Schema.Record(Schema.String, Schema.Json);
|
|
5070
|
+
const FlywheelStatsCriterionValue = Schema.Union([Schema.Number, FlywheelStatsCriterionValueObject]);
|
|
5071
|
+
const FlywheelStatsCriterion = Schema.Struct({
|
|
5072
|
+
label: Schema.String,
|
|
5073
|
+
value: FlywheelStatsCriterionValue,
|
|
5074
|
+
target: FlywheelStatsCriterionValue,
|
|
5075
|
+
status: FlywheelStatsCriterionStatus,
|
|
5076
|
+
trend: Schema.optional(FlywheelStatsTrend),
|
|
5077
|
+
sampleSize: Schema.Number,
|
|
5078
|
+
dataSufficient: Schema.Boolean
|
|
5079
|
+
});
|
|
5080
|
+
const FlywheelStatsCriteria = Schema.Struct({
|
|
5081
|
+
c1_bugRate: FlywheelStatsCriterion,
|
|
5082
|
+
c2_p0Bugs: FlywheelStatsCriterion,
|
|
5083
|
+
c3_passRate: FlywheelStatsCriterion,
|
|
5084
|
+
c4_mttr: FlywheelStatsCriterion,
|
|
5085
|
+
c5_intervention: FlywheelStatsCriterion,
|
|
5086
|
+
c6_timeConsistency: FlywheelStatsCriterion,
|
|
5087
|
+
c7_flake: FlywheelStatsCriterion
|
|
5088
|
+
});
|
|
5089
|
+
const FlywheelStats = Schema.Struct({
|
|
5090
|
+
window: Schema.String,
|
|
5091
|
+
generatedAt: Schema.String,
|
|
5092
|
+
criteria: FlywheelStatsCriteria
|
|
5093
|
+
});
|
|
5094
|
+
const decodeFlywheelStats = Schema.decodeUnknownSync(FlywheelStats);
|
|
5095
|
+
const encodeFlywheelStats = Schema.encodeSync(FlywheelStats);
|
|
5096
|
+
//#endregion
|
|
5097
|
+
//#region src/orders.ts
|
|
5098
|
+
const OrderBookLane = Schema.Literals(["A", "B"]);
|
|
5099
|
+
const OrderBookStatus = Schema.Literals([
|
|
5148
5100
|
"draft",
|
|
5149
5101
|
"ready",
|
|
5150
5102
|
"running",
|
|
@@ -5493,6 +5445,18 @@ const FeatureRegistryEntry = Schema.Struct({
|
|
|
5493
5445
|
});
|
|
5494
5446
|
//#endregion
|
|
5495
5447
|
//#region src/harness-behavior.ts
|
|
5448
|
+
const AGENT_SESSION_PREFIXES = [
|
|
5449
|
+
"agent-",
|
|
5450
|
+
"planning-",
|
|
5451
|
+
"specialist-",
|
|
5452
|
+
"strike-",
|
|
5453
|
+
"inspect-"
|
|
5454
|
+
];
|
|
5455
|
+
const AGENT_SESSION_SINGLETONS = new Set(["flywheel-orchestrator", "conv-flywheel-orchestrator"]);
|
|
5456
|
+
/** Canonical synthetic agent-session identity shared by dashboard client/server. */
|
|
5457
|
+
function isAgentSessionName(name) {
|
|
5458
|
+
return AGENT_SESSION_SINGLETONS.has(name) || AGENT_SESSION_PREFIXES.some((prefix) => name.startsWith(prefix));
|
|
5459
|
+
}
|
|
5496
5460
|
const CLAUDE_CODE_BEHAVIOR = {
|
|
5497
5461
|
displayName: "Claude Code",
|
|
5498
5462
|
nativeCommands: [
|
|
@@ -5884,6 +5848,7 @@ const TELEMETRY_PROPERTY_DOMAINS = {
|
|
|
5884
5848
|
"sessions",
|
|
5885
5849
|
"awaiting-merge",
|
|
5886
5850
|
"workspace-new",
|
|
5851
|
+
"project-new",
|
|
5887
5852
|
"workspace"
|
|
5888
5853
|
],
|
|
5889
5854
|
decision_subject: ["agent", "conversation"],
|
|
@@ -5926,7 +5891,11 @@ const TELEMETRY_PROPERTY_DOMAINS = {
|
|
|
5926
5891
|
"merged",
|
|
5927
5892
|
"closed_out"
|
|
5928
5893
|
],
|
|
5929
|
-
project_mode: [
|
|
5894
|
+
project_mode: [
|
|
5895
|
+
"clone",
|
|
5896
|
+
"existing",
|
|
5897
|
+
"new"
|
|
5898
|
+
]
|
|
5930
5899
|
};
|
|
5931
5900
|
const TELEMETRY_EVENT_CATALOG = {
|
|
5932
5901
|
dashboard_tab_viewed: { tab: "dashboard_tab" },
|
|
@@ -6246,12 +6215,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6246
6215
|
"required": false,
|
|
6247
6216
|
"valueHint": null
|
|
6248
6217
|
},
|
|
6249
|
-
{
|
|
6250
|
-
"flags": "--shadow-only",
|
|
6251
|
-
"description": "Show only shadowed issues",
|
|
6252
|
-
"required": false,
|
|
6253
|
-
"valueHint": null
|
|
6254
|
-
},
|
|
6255
6218
|
{
|
|
6256
6219
|
"flags": "--triage",
|
|
6257
6220
|
"description": "Show triage queue",
|
|
@@ -6266,19 +6229,13 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6266
6229
|
"id": "pan-show",
|
|
6267
6230
|
"path": ["show"],
|
|
6268
6231
|
"display": "/pan show",
|
|
6269
|
-
"description": "Unified lens:
|
|
6232
|
+
"description": "Unified lens: derived issue state, CV, context, health for one issue",
|
|
6270
6233
|
"args": [{
|
|
6271
6234
|
"name": "id",
|
|
6272
6235
|
"required": true,
|
|
6273
6236
|
"variadic": false
|
|
6274
6237
|
}],
|
|
6275
6238
|
"options": [
|
|
6276
|
-
{
|
|
6277
|
-
"flags": "--shadow",
|
|
6278
|
-
"description": "Shadow state details only",
|
|
6279
|
-
"required": false,
|
|
6280
|
-
"valueHint": null
|
|
6281
|
-
},
|
|
6282
6239
|
{
|
|
6283
6240
|
"flags": "--cv",
|
|
6284
6241
|
"description": "Agent work history only",
|
|
@@ -6330,32 +6287,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6330
6287
|
"id": "pan-review",
|
|
6331
6288
|
"path": ["review"],
|
|
6332
6289
|
"display": "/pan review",
|
|
6333
|
-
"description": "Review-loop management:
|
|
6290
|
+
"description": "Review-loop management: request re-review, abort reviewers, restart a round",
|
|
6334
6291
|
"args": [],
|
|
6335
6292
|
"options": [],
|
|
6336
6293
|
"aliases": [],
|
|
6337
6294
|
"category": "Review"
|
|
6338
6295
|
},
|
|
6339
|
-
{
|
|
6340
|
-
"id": "pan-review-pending",
|
|
6341
|
-
"path": ["review", "pending"],
|
|
6342
|
-
"display": "/pan review pending",
|
|
6343
|
-
"description": "List completed work awaiting review",
|
|
6344
|
-
"args": [],
|
|
6345
|
-
"options": [{
|
|
6346
|
-
"flags": "--ready",
|
|
6347
|
-
"description": "List issues ready for merge (review+test green, not merged) regardless of origin",
|
|
6348
|
-
"required": false,
|
|
6349
|
-
"valueHint": null
|
|
6350
|
-
}, {
|
|
6351
|
-
"flags": "--blocked",
|
|
6352
|
-
"description": "List issues blocked in review/test/merge from the SQLite review-status store",
|
|
6353
|
-
"required": false,
|
|
6354
|
-
"valueHint": null
|
|
6355
|
-
}],
|
|
6356
|
-
"aliases": [],
|
|
6357
|
-
"category": "Review"
|
|
6358
|
-
},
|
|
6359
6296
|
{
|
|
6360
6297
|
"id": "pan-review-request",
|
|
6361
6298
|
"path": ["review", "request"],
|
|
@@ -6375,39 +6312,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6375
6312
|
"aliases": [],
|
|
6376
6313
|
"category": "Review"
|
|
6377
6314
|
},
|
|
6378
|
-
{
|
|
6379
|
-
"id": "pan-review-reset",
|
|
6380
|
-
"path": ["review", "reset"],
|
|
6381
|
-
"display": "/pan review reset",
|
|
6382
|
-
"description": "Reset review/test/merge cycles (human override)",
|
|
6383
|
-
"args": [{
|
|
6384
|
-
"name": "id",
|
|
6385
|
-
"required": true,
|
|
6386
|
-
"variadic": false
|
|
6387
|
-
}],
|
|
6388
|
-
"options": [{
|
|
6389
|
-
"flags": "--session",
|
|
6390
|
-
"description": "Also clear all saved Claude review-session pointers",
|
|
6391
|
-
"required": false,
|
|
6392
|
-
"valueHint": null
|
|
6393
|
-
}],
|
|
6394
|
-
"aliases": [],
|
|
6395
|
-
"category": "Review"
|
|
6396
|
-
},
|
|
6397
|
-
{
|
|
6398
|
-
"id": "pan-review-resync",
|
|
6399
|
-
"path": ["review", "resync"],
|
|
6400
|
-
"display": "/pan review resync",
|
|
6401
|
-
"description": "Re-emit canonical review status (heal a lost pipeline event)",
|
|
6402
|
-
"args": [{
|
|
6403
|
-
"name": "id",
|
|
6404
|
-
"required": true,
|
|
6405
|
-
"variadic": false
|
|
6406
|
-
}],
|
|
6407
|
-
"options": [],
|
|
6408
|
-
"aliases": [],
|
|
6409
|
-
"category": "Review"
|
|
6410
|
-
},
|
|
6411
6315
|
{
|
|
6412
6316
|
"id": "pan-review-abort",
|
|
6413
6317
|
"path": ["review", "abort"],
|
|
@@ -6422,24 +6326,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6422
6326
|
"aliases": [],
|
|
6423
6327
|
"category": "Review"
|
|
6424
6328
|
},
|
|
6425
|
-
{
|
|
6426
|
-
"id": "pan-review-mode",
|
|
6427
|
-
"path": ["review", "mode"],
|
|
6428
|
-
"display": "/pan review mode",
|
|
6429
|
-
"description": "Set per-issue review mode (quick, full, or none)",
|
|
6430
|
-
"args": [{
|
|
6431
|
-
"name": "id",
|
|
6432
|
-
"required": true,
|
|
6433
|
-
"variadic": false
|
|
6434
|
-
}, {
|
|
6435
|
-
"name": "mode",
|
|
6436
|
-
"required": true,
|
|
6437
|
-
"variadic": false
|
|
6438
|
-
}],
|
|
6439
|
-
"options": [],
|
|
6440
|
-
"aliases": [],
|
|
6441
|
-
"category": "Review"
|
|
6442
|
-
},
|
|
6443
6329
|
{
|
|
6444
6330
|
"id": "pan-review-restart",
|
|
6445
6331
|
"path": ["review", "restart"],
|
|
@@ -6468,23 +6354,13 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6468
6354
|
"id": "pan-staffing",
|
|
6469
6355
|
"path": ["staffing"],
|
|
6470
6356
|
"display": "/pan staffing",
|
|
6471
|
-
"description": "Show
|
|
6357
|
+
"description": "Show the work model and swarm policy in effect for an issue",
|
|
6472
6358
|
"args": [{
|
|
6473
6359
|
"name": "id",
|
|
6474
6360
|
"required": true,
|
|
6475
6361
|
"variadic": false
|
|
6476
6362
|
}],
|
|
6477
|
-
"options": [
|
|
6478
|
-
"flags": "--model <model>",
|
|
6479
|
-
"description": "Set the work model, or default to clear the override",
|
|
6480
|
-
"required": true,
|
|
6481
|
-
"valueHint": "model"
|
|
6482
|
-
}, {
|
|
6483
|
-
"flags": "--swarm <mode>",
|
|
6484
|
-
"description": "Set swarm mode (off, auto, always), or default to clear the override",
|
|
6485
|
-
"required": true,
|
|
6486
|
-
"valueHint": "mode"
|
|
6487
|
-
}],
|
|
6363
|
+
"options": [],
|
|
6488
6364
|
"aliases": [],
|
|
6489
6365
|
"category": "Lifecycle"
|
|
6490
6366
|
},
|
|
@@ -6502,7 +6378,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6502
6378
|
"id": "pan-backlog-write-sequence",
|
|
6503
6379
|
"path": ["backlog", "write-sequence"],
|
|
6504
6380
|
"display": "/pan backlog write-sequence",
|
|
6505
|
-
"description": "Validate a SequenceDoc JSON file
|
|
6381
|
+
"description": "Validate a SequenceDoc JSON file, write it to .pan/backlog/sequence.md, and commit it",
|
|
6506
6382
|
"args": [{
|
|
6507
6383
|
"name": "file",
|
|
6508
6384
|
"required": true,
|
|
@@ -6517,21 +6393,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6517
6393
|
"aliases": [],
|
|
6518
6394
|
"category": "Lifecycle"
|
|
6519
6395
|
},
|
|
6520
|
-
{
|
|
6521
|
-
"id": "pan-backlog-forecast",
|
|
6522
|
-
"path": ["backlog", "forecast"],
|
|
6523
|
-
"display": "/pan backlog forecast",
|
|
6524
|
-
"description": "Pickup forecast (waves / needs-planning / cohort / stats) from sequence.md + SQLite — no HTTP (sandbox-safe)",
|
|
6525
|
-
"args": [],
|
|
6526
|
-
"options": [{
|
|
6527
|
-
"flags": "-n, --n <n>",
|
|
6528
|
-
"description": "Wave size (default 5)",
|
|
6529
|
-
"required": true,
|
|
6530
|
-
"valueHint": "n"
|
|
6531
|
-
}],
|
|
6532
|
-
"aliases": [],
|
|
6533
|
-
"category": "Lifecycle"
|
|
6534
|
-
},
|
|
6535
6396
|
{
|
|
6536
6397
|
"id": "pan-plan",
|
|
6537
6398
|
"path": ["plan"],
|
|
@@ -6743,25 +6604,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6743
6604
|
"aliases": ["stop"],
|
|
6744
6605
|
"category": "Lifecycle"
|
|
6745
6606
|
},
|
|
6746
|
-
{
|
|
6747
|
-
"id": "pan-reset-to-planned",
|
|
6748
|
-
"path": ["reset-to-planned"],
|
|
6749
|
-
"display": "/pan reset-to-planned",
|
|
6750
|
-
"description": "Return a finalized issue to post-planning without deleting its workspace, plan, commits, or branch",
|
|
6751
|
-
"args": [{
|
|
6752
|
-
"name": "id",
|
|
6753
|
-
"required": true,
|
|
6754
|
-
"variadic": false
|
|
6755
|
-
}],
|
|
6756
|
-
"options": [{
|
|
6757
|
-
"flags": "--dry-run",
|
|
6758
|
-
"description": "Show the exact reset without changing state",
|
|
6759
|
-
"required": false,
|
|
6760
|
-
"valueHint": null
|
|
6761
|
-
}],
|
|
6762
|
-
"aliases": [],
|
|
6763
|
-
"category": "Lifecycle"
|
|
6764
|
-
},
|
|
6765
6607
|
{
|
|
6766
6608
|
"id": "pan-reset-session",
|
|
6767
6609
|
"path": ["reset-session"],
|
|
@@ -6809,34 +6651,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6809
6651
|
"aliases": [],
|
|
6810
6652
|
"category": "Lifecycle"
|
|
6811
6653
|
},
|
|
6812
|
-
{
|
|
6813
|
-
"id": "pan-untroubled",
|
|
6814
|
-
"path": ["untroubled"],
|
|
6815
|
-
"display": "/pan untroubled",
|
|
6816
|
-
"description": "Clear an agent troubled gate without spawning it",
|
|
6817
|
-
"args": [{
|
|
6818
|
-
"name": "id",
|
|
6819
|
-
"required": true,
|
|
6820
|
-
"variadic": false
|
|
6821
|
-
}],
|
|
6822
|
-
"options": [],
|
|
6823
|
-
"aliases": [],
|
|
6824
|
-
"category": "Lifecycle"
|
|
6825
|
-
},
|
|
6826
|
-
{
|
|
6827
|
-
"id": "pan-unstick",
|
|
6828
|
-
"path": ["unstick"],
|
|
6829
|
-
"display": "/pan unstick",
|
|
6830
|
-
"description": "Clear an issue stuck gate without resetting a merged lifecycle",
|
|
6831
|
-
"args": [{
|
|
6832
|
-
"name": "id",
|
|
6833
|
-
"required": true,
|
|
6834
|
-
"variadic": false
|
|
6835
|
-
}],
|
|
6836
|
-
"options": [],
|
|
6837
|
-
"aliases": [],
|
|
6838
|
-
"category": "CLI"
|
|
6839
|
-
},
|
|
6840
6654
|
{
|
|
6841
6655
|
"id": "pan-fork",
|
|
6842
6656
|
"path": ["fork"],
|
|
@@ -7080,13 +6894,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7080
6894
|
},
|
|
7081
6895
|
{
|
|
7082
6896
|
"flags": "--strike",
|
|
7083
|
-
"description": "Strike
|
|
7084
|
-
"required": false,
|
|
7085
|
-
"valueHint": null
|
|
7086
|
-
},
|
|
7087
|
-
{
|
|
7088
|
-
"flags": "--json",
|
|
7089
|
-
"description": "Output as JSON",
|
|
6897
|
+
"description": "Strike shape: verify the strike branch is contained in origin/main; no PR is opened",
|
|
7090
6898
|
"required": false,
|
|
7091
6899
|
"valueHint": null
|
|
7092
6900
|
}
|
|
@@ -7094,20 +6902,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7094
6902
|
"aliases": [],
|
|
7095
6903
|
"category": "Lifecycle"
|
|
7096
6904
|
},
|
|
7097
|
-
{
|
|
7098
|
-
"id": "pan-approve",
|
|
7099
|
-
"path": ["approve"],
|
|
7100
|
-
"display": "/pan approve",
|
|
7101
|
-
"description": "[REMOVED] Use dashboard MERGE button instead",
|
|
7102
|
-
"args": [{
|
|
7103
|
-
"name": "id",
|
|
7104
|
-
"required": true,
|
|
7105
|
-
"variadic": false
|
|
7106
|
-
}],
|
|
7107
|
-
"options": [],
|
|
7108
|
-
"aliases": [],
|
|
7109
|
-
"category": "Lifecycle"
|
|
7110
|
-
},
|
|
7111
6905
|
{
|
|
7112
6906
|
"id": "pan-reopen",
|
|
7113
6907
|
"path": ["reopen"],
|
|
@@ -7156,27 +6950,36 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7156
6950
|
"aliases": [],
|
|
7157
6951
|
"category": "Lifecycle"
|
|
7158
6952
|
},
|
|
7159
|
-
{
|
|
7160
|
-
"id": "pan-destroy",
|
|
7161
|
-
"path": ["destroy"],
|
|
7162
|
-
"display": "/pan destroy",
|
|
7163
|
-
"description": "Alias for workspace destroy: remove the issue workspace worktree and branch",
|
|
7164
|
-
"args": [{
|
|
7165
|
-
"name": "id",
|
|
7166
|
-
"required": true,
|
|
7167
|
-
"variadic": false
|
|
7168
|
-
}],
|
|
7169
|
-
"options": [{
|
|
7170
|
-
"flags": "--force",
|
|
7171
|
-
"description": "Force removal even with uncommitted changes",
|
|
7172
|
-
"required": false,
|
|
7173
|
-
"valueHint": null
|
|
7174
|
-
}, {
|
|
7175
|
-
"flags": "--project <path>",
|
|
7176
|
-
"description": "Explicit project path (overrides registry)",
|
|
6953
|
+
{
|
|
6954
|
+
"id": "pan-destroy",
|
|
6955
|
+
"path": ["destroy"],
|
|
6956
|
+
"display": "/pan destroy",
|
|
6957
|
+
"description": "Alias for workspace destroy: remove the issue workspace worktree and branch",
|
|
6958
|
+
"args": [{
|
|
6959
|
+
"name": "id",
|
|
7177
6960
|
"required": true,
|
|
7178
|
-
"
|
|
6961
|
+
"variadic": false
|
|
7179
6962
|
}],
|
|
6963
|
+
"options": [
|
|
6964
|
+
{
|
|
6965
|
+
"flags": "--force",
|
|
6966
|
+
"description": "Force removal even with uncommitted changes",
|
|
6967
|
+
"required": false,
|
|
6968
|
+
"valueHint": null
|
|
6969
|
+
},
|
|
6970
|
+
{
|
|
6971
|
+
"flags": "--project <path>",
|
|
6972
|
+
"description": "Explicit project path (overrides registry)",
|
|
6973
|
+
"required": true,
|
|
6974
|
+
"valueHint": "path"
|
|
6975
|
+
},
|
|
6976
|
+
{
|
|
6977
|
+
"flags": "--shape <shape>",
|
|
6978
|
+
"description": "Limit to one shape: base|strike|slot|all (default: all)",
|
|
6979
|
+
"required": true,
|
|
6980
|
+
"valueHint": "shape"
|
|
6981
|
+
}
|
|
6982
|
+
],
|
|
7180
6983
|
"aliases": [],
|
|
7181
6984
|
"category": "Workspace"
|
|
7182
6985
|
},
|
|
@@ -7280,25 +7083,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7280
7083
|
"options": [
|
|
7281
7084
|
{
|
|
7282
7085
|
"flags": "--model <model>",
|
|
7283
|
-
"description": "Work model
|
|
7284
|
-
"required": true,
|
|
7285
|
-
"valueHint": "model"
|
|
7286
|
-
},
|
|
7287
|
-
{
|
|
7288
|
-
"flags": "--swarm <mode>",
|
|
7289
|
-
"description": "Per-issue swarm policy: off | auto | always",
|
|
7290
|
-
"required": true,
|
|
7291
|
-
"valueHint": "mode"
|
|
7292
|
-
},
|
|
7293
|
-
{
|
|
7294
|
-
"flags": "--review-mode <mode>",
|
|
7295
|
-
"description": "Per-issue review mode: quick | full | none",
|
|
7296
|
-
"required": true,
|
|
7297
|
-
"valueHint": "mode"
|
|
7298
|
-
},
|
|
7299
|
-
{
|
|
7300
|
-
"flags": "--review-model <model>",
|
|
7301
|
-
"description": "Per-issue review model override",
|
|
7086
|
+
"description": "Work model for this session (defaults to Cloister config)",
|
|
7302
7087
|
"required": true,
|
|
7303
7088
|
"valueHint": "model"
|
|
7304
7089
|
},
|
|
@@ -7326,18 +7111,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7326
7111
|
"required": false,
|
|
7327
7112
|
"valueHint": null
|
|
7328
7113
|
},
|
|
7329
|
-
{
|
|
7330
|
-
"flags": "--shadow",
|
|
7331
|
-
"description": "Enable shadow mode",
|
|
7332
|
-
"required": false,
|
|
7333
|
-
"valueHint": null
|
|
7334
|
-
},
|
|
7335
|
-
{
|
|
7336
|
-
"flags": "--no-shadow",
|
|
7337
|
-
"description": "Disable shadow mode",
|
|
7338
|
-
"required": false,
|
|
7339
|
-
"valueHint": null
|
|
7340
|
-
},
|
|
7341
7114
|
{
|
|
7342
7115
|
"flags": "--remote",
|
|
7343
7116
|
"description": "Use remote workspace (Fly.io)",
|
|
@@ -7393,8 +7166,8 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7393
7166
|
"valueHint": null
|
|
7394
7167
|
},
|
|
7395
7168
|
{
|
|
7396
|
-
"flags": "--
|
|
7397
|
-
"description": "
|
|
7169
|
+
"flags": "--skip-freshness",
|
|
7170
|
+
"description": "Bypass the plan-freshness preflight and spawn even if the plan names files that no longer exist",
|
|
7398
7171
|
"required": false,
|
|
7399
7172
|
"valueHint": null
|
|
7400
7173
|
}
|
|
@@ -7406,7 +7179,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7406
7179
|
"id": "pan-strike",
|
|
7407
7180
|
"path": ["strike"],
|
|
7408
7181
|
"display": "/pan strike",
|
|
7409
|
-
"description": "Spawn strike agent(s) — implement
|
|
7182
|
+
"description": "Spawn strike agent(s) — implement a fix on a strike branch and open a PR against main for the operator to merge. Bypasses plan/review/test/ship.",
|
|
7410
7183
|
"args": [{
|
|
7411
7184
|
"name": "ids",
|
|
7412
7185
|
"required": true,
|
|
@@ -7441,20 +7214,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7441
7214
|
"aliases": [],
|
|
7442
7215
|
"category": "Lifecycle"
|
|
7443
7216
|
},
|
|
7444
|
-
{
|
|
7445
|
-
"id": "pan-strike-ready",
|
|
7446
|
-
"path": ["strike-ready"],
|
|
7447
|
-
"display": "/pan strike-ready",
|
|
7448
|
-
"description": "Persist readiness for a pushed strike branch so Deacon can land it",
|
|
7449
|
-
"args": [{
|
|
7450
|
-
"name": "id",
|
|
7451
|
-
"required": true,
|
|
7452
|
-
"variadic": false
|
|
7453
|
-
}],
|
|
7454
|
-
"options": [],
|
|
7455
|
-
"aliases": [],
|
|
7456
|
-
"category": "Lifecycle"
|
|
7457
|
-
},
|
|
7458
7217
|
{
|
|
7459
7218
|
"id": "pan-knowledge",
|
|
7460
7219
|
"path": ["knowledge"],
|
|
@@ -7721,7 +7480,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7721
7480
|
"id": "pan-task",
|
|
7722
7481
|
"path": ["task"],
|
|
7723
7482
|
"display": "/pan task",
|
|
7724
|
-
"description": "Read and update xBRIEF
|
|
7483
|
+
"description": "Read and update xBRIEF item state for one issue",
|
|
7725
7484
|
"args": [],
|
|
7726
7485
|
"options": [],
|
|
7727
7486
|
"aliases": [],
|
|
@@ -7783,32 +7542,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7783
7542
|
"required": true,
|
|
7784
7543
|
"variadic": false
|
|
7785
7544
|
}],
|
|
7786
|
-
"options": [
|
|
7787
|
-
|
|
7788
|
-
|
|
7789
|
-
|
|
7790
|
-
|
|
7791
|
-
|
|
7792
|
-
},
|
|
7793
|
-
{
|
|
7794
|
-
"flags": "--expected-sequence <n>",
|
|
7795
|
-
"description": "Require the current task sequence",
|
|
7796
|
-
"required": true,
|
|
7797
|
-
"valueHint": "n"
|
|
7798
|
-
},
|
|
7799
|
-
{
|
|
7800
|
-
"flags": "--force",
|
|
7801
|
-
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7802
|
-
"required": false,
|
|
7803
|
-
"valueHint": null
|
|
7804
|
-
},
|
|
7805
|
-
{
|
|
7806
|
-
"flags": "--json",
|
|
7807
|
-
"description": "Print JSON",
|
|
7808
|
-
"required": false,
|
|
7809
|
-
"valueHint": null
|
|
7810
|
-
}
|
|
7811
|
-
],
|
|
7545
|
+
"options": [{
|
|
7546
|
+
"flags": "--json",
|
|
7547
|
+
"description": "Print JSON",
|
|
7548
|
+
"required": false,
|
|
7549
|
+
"valueHint": null
|
|
7550
|
+
}],
|
|
7812
7551
|
"aliases": [],
|
|
7813
7552
|
"category": "Lifecycle"
|
|
7814
7553
|
},
|
|
@@ -7816,7 +7555,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7816
7555
|
"id": "pan-task-done",
|
|
7817
7556
|
"path": ["task", "done"],
|
|
7818
7557
|
"display": "/pan task done",
|
|
7819
|
-
"description": "",
|
|
7558
|
+
"description": "Record an item as done. Requires a commit carrying \"Item: <item>\" on a pushed branch.",
|
|
7820
7559
|
"args": [{
|
|
7821
7560
|
"name": "issue",
|
|
7822
7561
|
"required": true,
|
|
@@ -7826,32 +7565,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7826
7565
|
"required": true,
|
|
7827
7566
|
"variadic": false
|
|
7828
7567
|
}],
|
|
7829
|
-
"options": [
|
|
7830
|
-
|
|
7831
|
-
|
|
7832
|
-
|
|
7833
|
-
|
|
7834
|
-
|
|
7835
|
-
},
|
|
7836
|
-
{
|
|
7837
|
-
"flags": "--expected-sequence <n>",
|
|
7838
|
-
"description": "Require the current task sequence",
|
|
7839
|
-
"required": true,
|
|
7840
|
-
"valueHint": "n"
|
|
7841
|
-
},
|
|
7842
|
-
{
|
|
7843
|
-
"flags": "--force",
|
|
7844
|
-
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7845
|
-
"required": false,
|
|
7846
|
-
"valueHint": null
|
|
7847
|
-
},
|
|
7848
|
-
{
|
|
7849
|
-
"flags": "--json",
|
|
7850
|
-
"description": "Print JSON",
|
|
7851
|
-
"required": false,
|
|
7852
|
-
"valueHint": null
|
|
7853
|
-
}
|
|
7854
|
-
],
|
|
7568
|
+
"options": [{
|
|
7569
|
+
"flags": "--json",
|
|
7570
|
+
"description": "Print JSON",
|
|
7571
|
+
"required": false,
|
|
7572
|
+
"valueHint": null
|
|
7573
|
+
}],
|
|
7855
7574
|
"aliases": [],
|
|
7856
7575
|
"category": "Lifecycle"
|
|
7857
7576
|
},
|
|
@@ -7869,32 +7588,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7869
7588
|
"required": true,
|
|
7870
7589
|
"variadic": false
|
|
7871
7590
|
}],
|
|
7872
|
-
"options": [
|
|
7873
|
-
|
|
7874
|
-
|
|
7875
|
-
|
|
7876
|
-
|
|
7877
|
-
|
|
7878
|
-
},
|
|
7879
|
-
{
|
|
7880
|
-
"flags": "--expected-sequence <n>",
|
|
7881
|
-
"description": "Require the current task sequence",
|
|
7882
|
-
"required": true,
|
|
7883
|
-
"valueHint": "n"
|
|
7884
|
-
},
|
|
7885
|
-
{
|
|
7886
|
-
"flags": "--force",
|
|
7887
|
-
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7888
|
-
"required": false,
|
|
7889
|
-
"valueHint": null
|
|
7890
|
-
},
|
|
7891
|
-
{
|
|
7892
|
-
"flags": "--json",
|
|
7893
|
-
"description": "Print JSON",
|
|
7894
|
-
"required": false,
|
|
7895
|
-
"valueHint": null
|
|
7896
|
-
}
|
|
7897
|
-
],
|
|
7591
|
+
"options": [{
|
|
7592
|
+
"flags": "--json",
|
|
7593
|
+
"description": "Print JSON",
|
|
7594
|
+
"required": false,
|
|
7595
|
+
"valueHint": null
|
|
7596
|
+
}],
|
|
7898
7597
|
"aliases": [],
|
|
7899
7598
|
"category": "Lifecycle"
|
|
7900
7599
|
},
|
|
@@ -7912,32 +7611,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7912
7611
|
"required": true,
|
|
7913
7612
|
"variadic": false
|
|
7914
7613
|
}],
|
|
7915
|
-
"options": [
|
|
7916
|
-
|
|
7917
|
-
|
|
7918
|
-
|
|
7919
|
-
|
|
7920
|
-
|
|
7921
|
-
},
|
|
7922
|
-
{
|
|
7923
|
-
"flags": "--expected-sequence <n>",
|
|
7924
|
-
"description": "Require the current task sequence",
|
|
7925
|
-
"required": true,
|
|
7926
|
-
"valueHint": "n"
|
|
7927
|
-
},
|
|
7928
|
-
{
|
|
7929
|
-
"flags": "--force",
|
|
7930
|
-
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7931
|
-
"required": false,
|
|
7932
|
-
"valueHint": null
|
|
7933
|
-
},
|
|
7934
|
-
{
|
|
7935
|
-
"flags": "--json",
|
|
7936
|
-
"description": "Print JSON",
|
|
7937
|
-
"required": false,
|
|
7938
|
-
"valueHint": null
|
|
7939
|
-
}
|
|
7940
|
-
],
|
|
7614
|
+
"options": [{
|
|
7615
|
+
"flags": "--json",
|
|
7616
|
+
"description": "Print JSON",
|
|
7617
|
+
"required": false,
|
|
7618
|
+
"valueHint": null
|
|
7619
|
+
}],
|
|
7941
7620
|
"aliases": [],
|
|
7942
7621
|
"category": "Lifecycle"
|
|
7943
7622
|
},
|
|
@@ -7955,32 +7634,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7955
7634
|
"required": true,
|
|
7956
7635
|
"variadic": false
|
|
7957
7636
|
}],
|
|
7958
|
-
"options": [
|
|
7959
|
-
|
|
7960
|
-
|
|
7961
|
-
|
|
7962
|
-
|
|
7963
|
-
|
|
7964
|
-
},
|
|
7965
|
-
{
|
|
7966
|
-
"flags": "--expected-sequence <n>",
|
|
7967
|
-
"description": "Require the current task sequence",
|
|
7968
|
-
"required": true,
|
|
7969
|
-
"valueHint": "n"
|
|
7970
|
-
},
|
|
7971
|
-
{
|
|
7972
|
-
"flags": "--force",
|
|
7973
|
-
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7974
|
-
"required": false,
|
|
7975
|
-
"valueHint": null
|
|
7976
|
-
},
|
|
7977
|
-
{
|
|
7978
|
-
"flags": "--json",
|
|
7979
|
-
"description": "Print JSON",
|
|
7980
|
-
"required": false,
|
|
7981
|
-
"valueHint": null
|
|
7982
|
-
}
|
|
7983
|
-
],
|
|
7637
|
+
"options": [{
|
|
7638
|
+
"flags": "--json",
|
|
7639
|
+
"description": "Print JSON",
|
|
7640
|
+
"required": false,
|
|
7641
|
+
"valueHint": null
|
|
7642
|
+
}],
|
|
7984
7643
|
"aliases": [],
|
|
7985
7644
|
"category": "Lifecycle"
|
|
7986
7645
|
},
|
|
@@ -7998,32 +7657,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7998
7657
|
"required": true,
|
|
7999
7658
|
"variadic": false
|
|
8000
7659
|
}],
|
|
8001
|
-
"options": [
|
|
8002
|
-
|
|
8003
|
-
|
|
8004
|
-
|
|
8005
|
-
|
|
8006
|
-
|
|
8007
|
-
},
|
|
8008
|
-
{
|
|
8009
|
-
"flags": "--expected-sequence <n>",
|
|
8010
|
-
"description": "Require the current task sequence",
|
|
8011
|
-
"required": true,
|
|
8012
|
-
"valueHint": "n"
|
|
8013
|
-
},
|
|
8014
|
-
{
|
|
8015
|
-
"flags": "--force",
|
|
8016
|
-
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
8017
|
-
"required": false,
|
|
8018
|
-
"valueHint": null
|
|
8019
|
-
},
|
|
8020
|
-
{
|
|
8021
|
-
"flags": "--json",
|
|
8022
|
-
"description": "Print JSON",
|
|
8023
|
-
"required": false,
|
|
8024
|
-
"valueHint": null
|
|
8025
|
-
}
|
|
8026
|
-
],
|
|
7660
|
+
"options": [{
|
|
7661
|
+
"flags": "--json",
|
|
7662
|
+
"description": "Print JSON",
|
|
7663
|
+
"required": false,
|
|
7664
|
+
"valueHint": null
|
|
7665
|
+
}],
|
|
8027
7666
|
"aliases": [],
|
|
8028
7667
|
"category": "Lifecycle"
|
|
8029
7668
|
},
|
|
@@ -8213,6 +7852,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
8213
7852
|
"description": "Include archived workspaces (only applies with --kind)",
|
|
8214
7853
|
"required": false,
|
|
8215
7854
|
"valueHint": null
|
|
7855
|
+
},
|
|
7856
|
+
{
|
|
7857
|
+
"flags": "--stale",
|
|
7858
|
+
"description": "Show reclaim candidates: merged branches still on disk, with sizes",
|
|
7859
|
+
"required": false,
|
|
7860
|
+
"valueHint": null
|
|
8216
7861
|
}
|
|
8217
7862
|
],
|
|
8218
7863
|
"aliases": [],
|
|
@@ -8222,7 +7867,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
8222
7867
|
"id": "pan-workspace-destroy",
|
|
8223
7868
|
"path": ["workspace", "destroy"],
|
|
8224
7869
|
"display": "/pan workspace destroy",
|
|
8225
|
-
"description": "Destroy workspace",
|
|
7870
|
+
"description": "Destroy workspace (all shapes by default: base, strike, and slot worktrees)",
|
|
8226
7871
|
"args": [{
|
|
8227
7872
|
"name": "issueId",
|
|
8228
7873
|
"required": true,
|
|
@@ -8241,6 +7886,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
8241
7886
|
"required": true,
|
|
8242
7887
|
"valueHint": "path"
|
|
8243
7888
|
},
|
|
7889
|
+
{
|
|
7890
|
+
"flags": "--shape <shape>",
|
|
7891
|
+
"description": "Limit to one shape: base|strike|slot|all (default: all)",
|
|
7892
|
+
"required": true,
|
|
7893
|
+
"valueHint": "shape"
|
|
7894
|
+
},
|
|
8244
7895
|
{
|
|
8245
7896
|
"flags": "--purge-memory",
|
|
8246
7897
|
"description": "Also permanently delete the workspace's memory home (irreversible)",
|
|
@@ -8958,7 +8609,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
8958
8609
|
"id": "pan-rollout-status",
|
|
8959
8610
|
"path": ["rollout", "status"],
|
|
8960
8611
|
"display": "/pan rollout status",
|
|
8961
|
-
"description": "Print the release set for an issue (
|
|
8612
|
+
"description": "Print the release set for an issue (overall + per-component status)",
|
|
8962
8613
|
"args": [{
|
|
8963
8614
|
"name": "issueId",
|
|
8964
8615
|
"required": true,
|
|
@@ -9828,47 +9479,18 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
9828
9479
|
"aliases": [],
|
|
9829
9480
|
"category": "Flywheel"
|
|
9830
9481
|
},
|
|
9831
|
-
{
|
|
9832
|
-
"id": "pan-parked",
|
|
9833
|
-
"path": ["parked"],
|
|
9834
|
-
"display": "/pan parked",
|
|
9835
|
-
"description": "List every issue parked in a stall orbit (
|
|
9836
|
-
"args": [],
|
|
9837
|
-
"options": [{
|
|
9838
|
-
"flags": "--json",
|
|
9839
|
-
"description": "Print the raw parked rows as JSON",
|
|
9840
|
-
"required": false,
|
|
9841
|
-
"valueHint": null
|
|
9842
|
-
}],
|
|
9843
|
-
"aliases": [],
|
|
9844
|
-
"category": "CLI"
|
|
9845
|
-
},
|
|
9846
|
-
{
|
|
9847
|
-
"id": "pan-parked-ack",
|
|
9848
|
-
"path": ["parked", "ack"],
|
|
9849
|
-
"display": "/pan parked ack",
|
|
9850
|
-
"description": "Batch-acknowledge parked rows (default orbit: needs-you), then print the flywheel hand-off",
|
|
9851
|
-
"args": [],
|
|
9852
|
-
"options": [
|
|
9853
|
-
{
|
|
9854
|
-
"flags": "--orbit <orbit>",
|
|
9855
|
-
"description": "Parked orbit to acknowledge",
|
|
9856
|
-
"required": true,
|
|
9857
|
-
"valueHint": "orbit"
|
|
9858
|
-
},
|
|
9859
|
-
{
|
|
9860
|
-
"flags": "--older-than <days>",
|
|
9861
|
-
"description": "Only rows parked at least this many days",
|
|
9862
|
-
"required": true,
|
|
9863
|
-
"valueHint": "days"
|
|
9864
|
-
},
|
|
9865
|
-
{
|
|
9866
|
-
"flags": "--dry-run",
|
|
9867
|
-
"description": "List what would be acknowledged without writing",
|
|
9868
|
-
"required": false,
|
|
9869
|
-
"valueHint": null
|
|
9870
|
-
}
|
|
9871
|
-
],
|
|
9482
|
+
{
|
|
9483
|
+
"id": "pan-parked",
|
|
9484
|
+
"path": ["parked"],
|
|
9485
|
+
"display": "/pan parked",
|
|
9486
|
+
"description": "List every issue parked in a stall orbit (operator gates, zombie sessions, idle-running agents), oldest first, with why + release condition",
|
|
9487
|
+
"args": [],
|
|
9488
|
+
"options": [{
|
|
9489
|
+
"flags": "--json",
|
|
9490
|
+
"description": "Print the raw parked rows as JSON",
|
|
9491
|
+
"required": false,
|
|
9492
|
+
"valueHint": null
|
|
9493
|
+
}],
|
|
9872
9494
|
"aliases": [],
|
|
9873
9495
|
"category": "CLI"
|
|
9874
9496
|
},
|
|
@@ -9992,32 +9614,18 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
9992
9614
|
"category": "Admin"
|
|
9993
9615
|
},
|
|
9994
9616
|
{
|
|
9995
|
-
"id": "pan-admin-
|
|
9996
|
-
"path": ["admin", "
|
|
9997
|
-
"display": "/pan admin
|
|
9998
|
-
"description": "
|
|
9999
|
-
"args": [],
|
|
10000
|
-
"options": [],
|
|
10001
|
-
"aliases": [],
|
|
10002
|
-
"category": "Admin"
|
|
10003
|
-
},
|
|
10004
|
-
{
|
|
10005
|
-
"id": "pan-admin-state-migrate",
|
|
10006
|
-
"path": [
|
|
10007
|
-
"admin",
|
|
10008
|
-
"state",
|
|
10009
|
-
"migrate"
|
|
10010
|
-
],
|
|
10011
|
-
"display": "/pan admin state migrate",
|
|
10012
|
-
"description": "Move permanent state to the orphan overdeck-state branch",
|
|
9617
|
+
"id": "pan-admin-seed-uat-fixtures",
|
|
9618
|
+
"path": ["admin", "seed-uat-fixtures"],
|
|
9619
|
+
"display": "/pan admin seed-uat-fixtures",
|
|
9620
|
+
"description": "Seed the obviously-fake FIX-1 issue fixture into a workspace container for UI UAT. Host mode: `pan admin seed-uat-fixtures <issue-id>` seeds and restarts that issue's workspace container from the host. `--local` runs the seed itself against the current OVERDECK_HOME — used by the host wrapper, or manually inside a container.",
|
|
10013
9621
|
"args": [{
|
|
10014
|
-
"name": "
|
|
10015
|
-
"required":
|
|
9622
|
+
"name": "issue-id",
|
|
9623
|
+
"required": false,
|
|
10016
9624
|
"variadic": false
|
|
10017
9625
|
}],
|
|
10018
9626
|
"options": [{
|
|
10019
|
-
"flags": "--
|
|
10020
|
-
"description": "
|
|
9627
|
+
"flags": "--local",
|
|
9628
|
+
"description": "Seed the current (container-local) OVERDECK_HOME directly, without a host wrapper step",
|
|
10021
9629
|
"required": false,
|
|
10022
9630
|
"valueHint": null
|
|
10023
9631
|
}],
|
|
@@ -10025,91 +9633,79 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10025
9633
|
"category": "Admin"
|
|
10026
9634
|
},
|
|
10027
9635
|
{
|
|
10028
|
-
"id": "pan-admin-
|
|
10029
|
-
"path": [
|
|
10030
|
-
|
|
10031
|
-
|
|
10032
|
-
"migrate-xbrief"
|
|
10033
|
-
],
|
|
10034
|
-
"display": "/pan admin state migrate-xbrief",
|
|
10035
|
-
"description": "Rename state documents to .xbrief.json and migrate legacy envelopes",
|
|
9636
|
+
"id": "pan-admin-migrate-plan-home",
|
|
9637
|
+
"path": ["admin", "migrate-plan-home"],
|
|
9638
|
+
"display": "/pan admin migrate-plan-home",
|
|
9639
|
+
"description": "One-time bridge: copy open-issue planning artifacts and item progress from ~/.overdeck/state/<project>/ into <planHome>/.pan/ (PAN-3917 D8)",
|
|
10036
9640
|
"args": [{
|
|
10037
|
-
"name": "project",
|
|
9641
|
+
"name": "project-key",
|
|
10038
9642
|
"required": true,
|
|
10039
9643
|
"variadic": false
|
|
10040
9644
|
}],
|
|
10041
|
-
"options": [
|
|
10042
|
-
|
|
10043
|
-
|
|
10044
|
-
|
|
10045
|
-
|
|
10046
|
-
|
|
10047
|
-
|
|
10048
|
-
|
|
10049
|
-
|
|
10050
|
-
|
|
10051
|
-
|
|
10052
|
-
|
|
10053
|
-
|
|
10054
|
-
|
|
10055
|
-
|
|
9645
|
+
"options": [
|
|
9646
|
+
{
|
|
9647
|
+
"flags": "--commit",
|
|
9648
|
+
"description": "Commit the copied artifacts in the plan home",
|
|
9649
|
+
"required": false,
|
|
9650
|
+
"valueHint": null
|
|
9651
|
+
},
|
|
9652
|
+
{
|
|
9653
|
+
"flags": "--dry-run",
|
|
9654
|
+
"description": "Preview what would be copied without writing anything",
|
|
9655
|
+
"required": false,
|
|
9656
|
+
"valueHint": null
|
|
9657
|
+
},
|
|
9658
|
+
{
|
|
9659
|
+
"flags": "--state-root <dir>",
|
|
9660
|
+
"description": "Override the state worktree root (tests / odd setups)",
|
|
9661
|
+
"required": true,
|
|
9662
|
+
"valueHint": "dir"
|
|
9663
|
+
},
|
|
9664
|
+
{
|
|
9665
|
+
"flags": "--plan-home <dir>",
|
|
9666
|
+
"description": "Override the plan home (tests / odd setups)",
|
|
9667
|
+
"required": true,
|
|
9668
|
+
"valueHint": "dir"
|
|
9669
|
+
},
|
|
9670
|
+
{
|
|
9671
|
+
"flags": "--open-issues <file>",
|
|
9672
|
+
"description": "Read open issue ids from a file instead of calling the tracker",
|
|
9673
|
+
"required": true,
|
|
9674
|
+
"valueHint": "file"
|
|
9675
|
+
}
|
|
10056
9676
|
],
|
|
10057
|
-
"display": "/pan admin state backfill-agents",
|
|
10058
|
-
"description": "Reconstruct durable agent runtime records from local and retained state",
|
|
10059
|
-
"args": [{
|
|
10060
|
-
"name": "project",
|
|
10061
|
-
"required": false,
|
|
10062
|
-
"variadic": false
|
|
10063
|
-
}],
|
|
10064
|
-
"options": [{
|
|
10065
|
-
"flags": "--dry-run",
|
|
10066
|
-
"description": "Report the records and sessions that would be written",
|
|
10067
|
-
"required": false,
|
|
10068
|
-
"valueHint": null
|
|
10069
|
-
}],
|
|
10070
|
-
"aliases": [],
|
|
10071
|
-
"category": "Admin"
|
|
10072
|
-
},
|
|
10073
|
-
{
|
|
10074
|
-
"id": "pan-admin-reconcile-labels",
|
|
10075
|
-
"path": ["admin", "reconcile-labels"],
|
|
10076
|
-
"display": "/pan admin reconcile-labels",
|
|
10077
|
-
"description": "Reconcile pipeline labels from permanent issue truth",
|
|
10078
|
-
"args": [],
|
|
10079
|
-
"options": [{
|
|
10080
|
-
"flags": "--dry-run",
|
|
10081
|
-
"description": "Print changes without mutating labels",
|
|
10082
|
-
"required": false,
|
|
10083
|
-
"valueHint": null
|
|
10084
|
-
}],
|
|
10085
9677
|
"aliases": [],
|
|
10086
9678
|
"category": "Admin"
|
|
10087
9679
|
},
|
|
10088
9680
|
{
|
|
10089
|
-
"id": "pan-admin-
|
|
10090
|
-
"path": ["admin", "
|
|
10091
|
-
"display": "/pan admin
|
|
10092
|
-
"description": "
|
|
9681
|
+
"id": "pan-admin-agents",
|
|
9682
|
+
"path": ["admin", "agents"],
|
|
9683
|
+
"display": "/pan admin agents",
|
|
9684
|
+
"description": "Agent state plumbing",
|
|
10093
9685
|
"args": [],
|
|
10094
9686
|
"options": [],
|
|
10095
9687
|
"aliases": [],
|
|
10096
9688
|
"category": "Admin"
|
|
10097
9689
|
},
|
|
10098
9690
|
{
|
|
10099
|
-
"id": "pan-admin-
|
|
10100
|
-
"path": [
|
|
10101
|
-
|
|
10102
|
-
|
|
9691
|
+
"id": "pan-admin-agents-exited",
|
|
9692
|
+
"path": [
|
|
9693
|
+
"admin",
|
|
9694
|
+
"agents",
|
|
9695
|
+
"exited"
|
|
9696
|
+
],
|
|
9697
|
+
"display": "/pan admin agents exited",
|
|
9698
|
+
"description": "Record that an agent process exited (reported by its launcher; PAN-3848)",
|
|
10103
9699
|
"args": [{
|
|
10104
|
-
"name": "
|
|
10105
|
-
"required":
|
|
9700
|
+
"name": "agentId",
|
|
9701
|
+
"required": true,
|
|
10106
9702
|
"variadic": false
|
|
10107
9703
|
}],
|
|
10108
9704
|
"options": [{
|
|
10109
|
-
"flags": "--
|
|
10110
|
-
"description": "
|
|
10111
|
-
"required":
|
|
10112
|
-
"valueHint":
|
|
9705
|
+
"flags": "--code <n>",
|
|
9706
|
+
"description": "Process exit code",
|
|
9707
|
+
"required": true,
|
|
9708
|
+
"valueHint": "n"
|
|
10113
9709
|
}],
|
|
10114
9710
|
"aliases": [],
|
|
10115
9711
|
"category": "Admin"
|
|
@@ -10185,53 +9781,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10185
9781
|
"aliases": [],
|
|
10186
9782
|
"category": "Admin"
|
|
10187
9783
|
},
|
|
10188
|
-
{
|
|
10189
|
-
"id": "pan-admin-cloister-brake",
|
|
10190
|
-
"path": [
|
|
10191
|
-
"admin",
|
|
10192
|
-
"cloister",
|
|
10193
|
-
"brake"
|
|
10194
|
-
],
|
|
10195
|
-
"display": "/pan admin cloister brake",
|
|
10196
|
-
"description": "Emergency brake - trim running work agents down to the concurrency cap (idle-first, resumable)",
|
|
10197
|
-
"args": [],
|
|
10198
|
-
"options": [{
|
|
10199
|
-
"flags": "--json",
|
|
10200
|
-
"description": "Output in JSON format",
|
|
10201
|
-
"required": false,
|
|
10202
|
-
"valueHint": null
|
|
10203
|
-
}],
|
|
10204
|
-
"aliases": [],
|
|
10205
|
-
"category": "Admin"
|
|
10206
|
-
},
|
|
10207
|
-
{
|
|
10208
|
-
"id": "pan-admin-cloister-freeze",
|
|
10209
|
-
"path": [
|
|
10210
|
-
"admin",
|
|
10211
|
-
"cloister",
|
|
10212
|
-
"freeze"
|
|
10213
|
-
],
|
|
10214
|
-
"display": "/pan admin cloister freeze",
|
|
10215
|
-
"description": "Globally pause the Deacon (patrols run but skip all actions); running agents unaffected",
|
|
10216
|
-
"args": [],
|
|
10217
|
-
"options": [],
|
|
10218
|
-
"aliases": [],
|
|
10219
|
-
"category": "Admin"
|
|
10220
|
-
},
|
|
10221
|
-
{
|
|
10222
|
-
"id": "pan-admin-cloister-unfreeze",
|
|
10223
|
-
"path": [
|
|
10224
|
-
"admin",
|
|
10225
|
-
"cloister",
|
|
10226
|
-
"unfreeze"
|
|
10227
|
-
],
|
|
10228
|
-
"display": "/pan admin cloister unfreeze",
|
|
10229
|
-
"description": "Resume the Deacon from a global pause",
|
|
10230
|
-
"args": [],
|
|
10231
|
-
"options": [],
|
|
10232
|
-
"aliases": [],
|
|
10233
|
-
"category": "Admin"
|
|
10234
|
-
},
|
|
10235
9784
|
{
|
|
10236
9785
|
"id": "pan-admin-specialists",
|
|
10237
9786
|
"path": ["admin", "specialists"],
|
|
@@ -10320,7 +9869,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10320
9869
|
"done"
|
|
10321
9870
|
],
|
|
10322
9871
|
"display": "/pan admin specialists done",
|
|
10323
|
-
"description": "
|
|
9872
|
+
"description": "Post a specialist verdict to the issue's pull/merge request (review, test, uat)",
|
|
10324
9873
|
"args": [{
|
|
10325
9874
|
"name": "type",
|
|
10326
9875
|
"required": true,
|
|
@@ -10337,12 +9886,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10337
9886
|
"required": true,
|
|
10338
9887
|
"valueHint": "status"
|
|
10339
9888
|
},
|
|
10340
|
-
{
|
|
10341
|
-
"flags": "--item <itemId>",
|
|
10342
|
-
"description": "xBRIEF item ID (required for inspect verdicts)",
|
|
10343
|
-
"required": true,
|
|
10344
|
-
"valueHint": "itemId"
|
|
10345
|
-
},
|
|
10346
9889
|
{
|
|
10347
9890
|
"flags": "--notes <notes>",
|
|
10348
9891
|
"description": "Optional notes about the result",
|
|
@@ -10706,30 +10249,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10706
10249
|
"aliases": [],
|
|
10707
10250
|
"category": "Admin"
|
|
10708
10251
|
},
|
|
10709
|
-
{
|
|
10710
|
-
"id": "pan-admin-db-rebuild-agents",
|
|
10711
|
-
"path": [
|
|
10712
|
-
"admin",
|
|
10713
|
-
"db",
|
|
10714
|
-
"rebuild-agents"
|
|
10715
|
-
],
|
|
10716
|
-
"display": "/pan admin db rebuild-agents",
|
|
10717
|
-
"description": "Rebuild the SQLite agents table from state.json rollback sources (PAN-1908)",
|
|
10718
|
-
"args": [],
|
|
10719
|
-
"options": [{
|
|
10720
|
-
"flags": "--dry-run",
|
|
10721
|
-
"description": "Show what would be backfilled without writing",
|
|
10722
|
-
"required": false,
|
|
10723
|
-
"valueHint": null
|
|
10724
|
-
}, {
|
|
10725
|
-
"flags": "--verbose",
|
|
10726
|
-
"description": "Log each processed agent",
|
|
10727
|
-
"required": false,
|
|
10728
|
-
"valueHint": null
|
|
10729
|
-
}],
|
|
10730
|
-
"aliases": [],
|
|
10731
|
-
"category": "Admin"
|
|
10732
|
-
},
|
|
10733
10252
|
{
|
|
10734
10253
|
"id": "pan-admin-db-rebuild-workspaces",
|
|
10735
10254
|
"path": [
|
|
@@ -10792,105 +10311,6 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10792
10311
|
"aliases": [],
|
|
10793
10312
|
"category": "Admin"
|
|
10794
10313
|
},
|
|
10795
|
-
{
|
|
10796
|
-
"id": "pan-admin-db-backfill-records",
|
|
10797
|
-
"path": [
|
|
10798
|
-
"admin",
|
|
10799
|
-
"db",
|
|
10800
|
-
"backfill-records"
|
|
10801
|
-
],
|
|
10802
|
-
"display": "/pan admin db backfill-records",
|
|
10803
|
-
"description": "Backfill per-issue permanent records into the infra repo (PAN-1908)",
|
|
10804
|
-
"args": [],
|
|
10805
|
-
"options": [
|
|
10806
|
-
{
|
|
10807
|
-
"flags": "--issue-id <id>",
|
|
10808
|
-
"description": "Backfill only this issue",
|
|
10809
|
-
"required": true,
|
|
10810
|
-
"valueHint": "id"
|
|
10811
|
-
},
|
|
10812
|
-
{
|
|
10813
|
-
"flags": "--force",
|
|
10814
|
-
"description": "Overwrite records even if unchanged",
|
|
10815
|
-
"required": false,
|
|
10816
|
-
"valueHint": null
|
|
10817
|
-
},
|
|
10818
|
-
{
|
|
10819
|
-
"flags": "--verbose",
|
|
10820
|
-
"description": "Log each processed issue",
|
|
10821
|
-
"required": false,
|
|
10822
|
-
"valueHint": null
|
|
10823
|
-
}
|
|
10824
|
-
],
|
|
10825
|
-
"aliases": [],
|
|
10826
|
-
"category": "Admin"
|
|
10827
|
-
},
|
|
10828
|
-
{
|
|
10829
|
-
"id": "pan-admin-db-restore-verdicts",
|
|
10830
|
-
"path": [
|
|
10831
|
-
"admin",
|
|
10832
|
-
"db",
|
|
10833
|
-
"restore-verdicts"
|
|
10834
|
-
],
|
|
10835
|
-
"display": "/pan admin db restore-verdicts",
|
|
10836
|
-
"description": "Rebuild review_status verdicts from per-issue records + live GitHub PR state (PAN-1922)",
|
|
10837
|
-
"args": [],
|
|
10838
|
-
"options": [
|
|
10839
|
-
{
|
|
10840
|
-
"flags": "--issue-id <id>",
|
|
10841
|
-
"description": "Restore only this issue",
|
|
10842
|
-
"required": true,
|
|
10843
|
-
"valueHint": "id"
|
|
10844
|
-
},
|
|
10845
|
-
{
|
|
10846
|
-
"flags": "--dry-run",
|
|
10847
|
-
"description": "Show what would be restored without writing",
|
|
10848
|
-
"required": false,
|
|
10849
|
-
"valueHint": null
|
|
10850
|
-
},
|
|
10851
|
-
{
|
|
10852
|
-
"flags": "--verbose",
|
|
10853
|
-
"description": "Log each processed issue",
|
|
10854
|
-
"required": false,
|
|
10855
|
-
"valueHint": null
|
|
10856
|
-
}
|
|
10857
|
-
],
|
|
10858
|
-
"aliases": [],
|
|
10859
|
-
"category": "Admin"
|
|
10860
|
-
},
|
|
10861
|
-
{
|
|
10862
|
-
"id": "pan-admin-db-reconcile-merges",
|
|
10863
|
-
"path": [
|
|
10864
|
-
"admin",
|
|
10865
|
-
"db",
|
|
10866
|
-
"reconcile-merges"
|
|
10867
|
-
],
|
|
10868
|
-
"display": "/pan admin db reconcile-merges",
|
|
10869
|
-
"description": "Backfill fulfilled merge state from tracked PR and branch ancestry evidence (PAN-2311)",
|
|
10870
|
-
"args": [],
|
|
10871
|
-
"options": [
|
|
10872
|
-
{
|
|
10873
|
-
"flags": "--issue-id <id>",
|
|
10874
|
-
"description": "Reconcile only this issue",
|
|
10875
|
-
"required": true,
|
|
10876
|
-
"valueHint": "id"
|
|
10877
|
-
},
|
|
10878
|
-
{
|
|
10879
|
-
"flags": "--dry-run",
|
|
10880
|
-
"description": "Show what would be reconciled without writing",
|
|
10881
|
-
"required": false,
|
|
10882
|
-
"valueHint": null
|
|
10883
|
-
},
|
|
10884
|
-
{
|
|
10885
|
-
"flags": "--verbose",
|
|
10886
|
-
"description": "Log each processed issue",
|
|
10887
|
-
"required": false,
|
|
10888
|
-
"valueHint": null
|
|
10889
|
-
}
|
|
10890
|
-
],
|
|
10891
|
-
"aliases": [],
|
|
10892
|
-
"category": "Admin"
|
|
10893
|
-
},
|
|
10894
10314
|
{
|
|
10895
10315
|
"id": "pan-admin-config",
|
|
10896
10316
|
"path": ["admin", "config"],
|
|
@@ -11729,47 +11149,20 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
11729
11149
|
"valueHint": null
|
|
11730
11150
|
},
|
|
11731
11151
|
{
|
|
11732
|
-
"flags": "--skip-tts-daemon",
|
|
11733
|
-
"description": "Skip Qwen TTS daemon venv install (CUDA torch download is large)",
|
|
11734
|
-
"required": false,
|
|
11735
|
-
"valueHint": null
|
|
11736
|
-
}
|
|
11737
|
-
|
|
11738
|
-
|
|
11739
|
-
|
|
11740
|
-
},
|
|
11741
|
-
{
|
|
11742
|
-
"id": "pan-inspect",
|
|
11743
|
-
"path": ["inspect"],
|
|
11744
|
-
"display": "/pan inspect",
|
|
11745
|
-
"description": "Request inspection of a completed xBRIEF item before proceeding to the next",
|
|
11746
|
-
"args": [{
|
|
11747
|
-
"name": "issueId",
|
|
11748
|
-
"required": true,
|
|
11749
|
-
"variadic": false
|
|
11750
|
-
}],
|
|
11751
|
-
"options": [
|
|
11752
|
-
{
|
|
11753
|
-
"flags": "--item <itemId>",
|
|
11754
|
-
"description": "xBRIEF item ID to inspect",
|
|
11755
|
-
"required": true,
|
|
11756
|
-
"valueHint": "itemId"
|
|
11757
|
-
},
|
|
11758
|
-
{
|
|
11759
|
-
"flags": "--workspace <path>",
|
|
11760
|
-
"description": "Workspace path (auto-detected if not provided)",
|
|
11761
|
-
"required": true,
|
|
11762
|
-
"valueHint": "path"
|
|
11763
|
-
},
|
|
11764
|
-
{
|
|
11765
|
-
"flags": "--deep",
|
|
11766
|
-
"description": "Use the deep inspection sub-role",
|
|
11152
|
+
"flags": "--skip-tts-daemon",
|
|
11153
|
+
"description": "Skip Qwen TTS daemon venv install (CUDA torch download is large)",
|
|
11154
|
+
"required": false,
|
|
11155
|
+
"valueHint": null
|
|
11156
|
+
},
|
|
11157
|
+
{
|
|
11158
|
+
"flags": "--skip-herdr",
|
|
11159
|
+
"description": "Skip Herdr terminal backend install/verify (tmux-only hosts)",
|
|
11767
11160
|
"required": false,
|
|
11768
11161
|
"valueHint": null
|
|
11769
11162
|
}
|
|
11770
11163
|
],
|
|
11771
11164
|
"aliases": [],
|
|
11772
|
-
"category": "
|
|
11165
|
+
"category": "Core"
|
|
11773
11166
|
},
|
|
11774
11167
|
{
|
|
11775
11168
|
"id": "pan-caveman-compress",
|
|
@@ -11925,111 +11318,86 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
11925
11318
|
"category": "Lifecycle"
|
|
11926
11319
|
},
|
|
11927
11320
|
{
|
|
11928
|
-
"id": "pan-
|
|
11929
|
-
"path": ["
|
|
11930
|
-
"display": "/pan
|
|
11931
|
-
"description": "
|
|
11932
|
-
"args": [],
|
|
11933
|
-
"options": [],
|
|
11934
|
-
"aliases": [],
|
|
11935
|
-
"category": "Flywheel"
|
|
11936
|
-
},
|
|
11937
|
-
{
|
|
11938
|
-
"id": "pan-flywheel-merge-blockers",
|
|
11939
|
-
"path": ["flywheel", "merge-blockers"],
|
|
11940
|
-
"display": "/pan flywheel merge-blockers",
|
|
11941
|
-
"description": "PRs that passed review but cannot merge (GitHub-native reasons) — reads SQLite directly, no HTTP (sandbox-safe)",
|
|
11942
|
-
"args": [],
|
|
11943
|
-
"options": [{
|
|
11944
|
-
"flags": "--json",
|
|
11945
|
-
"description": "Output JSON",
|
|
11946
|
-
"required": false,
|
|
11947
|
-
"valueHint": null
|
|
11948
|
-
}],
|
|
11949
|
-
"aliases": [],
|
|
11950
|
-
"category": "Flywheel"
|
|
11951
|
-
},
|
|
11952
|
-
{
|
|
11953
|
-
"id": "pan-flywheel-weights",
|
|
11954
|
-
"path": ["flywheel", "weights"],
|
|
11955
|
-
"display": "/pan flywheel weights",
|
|
11956
|
-
"description": "Weighted substrate bugs by affected v1.0 criterion — reads SQLite directly, no HTTP (sandbox-safe)",
|
|
11321
|
+
"id": "pan-spawn",
|
|
11322
|
+
"path": ["spawn"],
|
|
11323
|
+
"display": "/pan spawn",
|
|
11324
|
+
"description": "Create a worker pane for one xBRIEF item in the issue workspace",
|
|
11957
11325
|
"args": [],
|
|
11958
11326
|
"options": [
|
|
11959
11327
|
{
|
|
11960
11328
|
"flags": "--issue <id>",
|
|
11961
|
-
"description": "
|
|
11329
|
+
"description": "Issue the worker belongs to",
|
|
11962
11330
|
"required": true,
|
|
11963
11331
|
"valueHint": "id"
|
|
11964
11332
|
},
|
|
11965
11333
|
{
|
|
11966
|
-
"flags": "--
|
|
11967
|
-
"description": "
|
|
11334
|
+
"flags": "--item <item>",
|
|
11335
|
+
"description": "xBRIEF item the worker takes",
|
|
11968
11336
|
"required": true,
|
|
11969
|
-
"valueHint": "
|
|
11337
|
+
"valueHint": "item"
|
|
11970
11338
|
},
|
|
11971
11339
|
{
|
|
11972
|
-
"flags": "--
|
|
11973
|
-
"description": "
|
|
11974
|
-
"required":
|
|
11975
|
-
"valueHint":
|
|
11340
|
+
"flags": "--model <model>",
|
|
11341
|
+
"description": "Model the worker runs on",
|
|
11342
|
+
"required": true,
|
|
11343
|
+
"valueHint": "model"
|
|
11344
|
+
},
|
|
11345
|
+
{
|
|
11346
|
+
"flags": "--harness <harness>",
|
|
11347
|
+
"description": "Coding-agent harness (default: claude-code)",
|
|
11348
|
+
"required": true,
|
|
11349
|
+
"valueHint": "harness"
|
|
11976
11350
|
}
|
|
11977
11351
|
],
|
|
11978
11352
|
"aliases": [],
|
|
11979
|
-
"category": "
|
|
11353
|
+
"category": "CLI"
|
|
11980
11354
|
},
|
|
11981
11355
|
{
|
|
11982
|
-
"id": "pan-flywheel
|
|
11983
|
-
"path": ["flywheel"
|
|
11984
|
-
"display": "/pan flywheel
|
|
11985
|
-
"description": "Start the
|
|
11356
|
+
"id": "pan-flywheel",
|
|
11357
|
+
"path": ["flywheel"],
|
|
11358
|
+
"display": "/pan flywheel",
|
|
11359
|
+
"description": "Start, stop, or check the flywheel conversation",
|
|
11986
11360
|
"args": [],
|
|
11987
|
-
"options": [
|
|
11988
|
-
"flags": "--brief <path>",
|
|
11989
|
-
"description": "Path to the Flywheel brief",
|
|
11990
|
-
"required": true,
|
|
11991
|
-
"valueHint": "path"
|
|
11992
|
-
}, {
|
|
11993
|
-
"flags": "--orders <book-id>",
|
|
11994
|
-
"description": "Bind the run to a validated order book",
|
|
11995
|
-
"required": true,
|
|
11996
|
-
"valueHint": "book-id"
|
|
11997
|
-
}],
|
|
11361
|
+
"options": [],
|
|
11998
11362
|
"aliases": [],
|
|
11999
11363
|
"category": "Flywheel"
|
|
12000
11364
|
},
|
|
12001
11365
|
{
|
|
12002
|
-
"id": "pan-flywheel-
|
|
12003
|
-
"path": ["flywheel", "
|
|
12004
|
-
"display": "/pan flywheel
|
|
12005
|
-
"description": "
|
|
11366
|
+
"id": "pan-flywheel-start",
|
|
11367
|
+
"path": ["flywheel", "start"],
|
|
11368
|
+
"display": "/pan flywheel start",
|
|
11369
|
+
"description": "Launch a conversation running /pan-flywheel",
|
|
12006
11370
|
"args": [],
|
|
12007
|
-
"options": [
|
|
12008
|
-
|
|
12009
|
-
|
|
12010
|
-
|
|
12011
|
-
|
|
12012
|
-
|
|
11371
|
+
"options": [
|
|
11372
|
+
{
|
|
11373
|
+
"flags": "--model <model>",
|
|
11374
|
+
"description": "Model for the flywheel conversation",
|
|
11375
|
+
"required": true,
|
|
11376
|
+
"valueHint": "model"
|
|
11377
|
+
},
|
|
11378
|
+
{
|
|
11379
|
+
"flags": "--harness <harness>",
|
|
11380
|
+
"description": "Harness for the flywheel conversation",
|
|
11381
|
+
"required": true,
|
|
11382
|
+
"valueHint": "harness"
|
|
11383
|
+
},
|
|
11384
|
+
{
|
|
11385
|
+
"flags": "--cwd <path>",
|
|
11386
|
+
"description": "Working directory (default: cwd)",
|
|
11387
|
+
"required": true,
|
|
11388
|
+
"valueHint": "path"
|
|
11389
|
+
}
|
|
11390
|
+
],
|
|
12013
11391
|
"aliases": [],
|
|
12014
11392
|
"category": "Flywheel"
|
|
12015
11393
|
},
|
|
12016
11394
|
{
|
|
12017
|
-
"id": "pan-flywheel-
|
|
12018
|
-
"path": ["flywheel", "
|
|
12019
|
-
"display": "/pan flywheel
|
|
12020
|
-
"description": "
|
|
11395
|
+
"id": "pan-flywheel-stop",
|
|
11396
|
+
"path": ["flywheel", "stop"],
|
|
11397
|
+
"display": "/pan flywheel stop",
|
|
11398
|
+
"description": "Stop the flywheel conversation",
|
|
12021
11399
|
"args": [],
|
|
12022
|
-
"options": [
|
|
12023
|
-
"flags": "--get [key]",
|
|
12024
|
-
"description": "Print Flywheel config values",
|
|
12025
|
-
"required": false,
|
|
12026
|
-
"valueHint": "key"
|
|
12027
|
-
}, {
|
|
12028
|
-
"flags": "--set <key=value>",
|
|
12029
|
-
"description": "Set a Flywheel config boolean",
|
|
12030
|
-
"required": true,
|
|
12031
|
-
"valueHint": "key=value"
|
|
12032
|
-
}],
|
|
11400
|
+
"options": [],
|
|
12033
11401
|
"aliases": [],
|
|
12034
11402
|
"category": "Flywheel"
|
|
12035
11403
|
},
|
|
@@ -12037,107 +11405,17 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12037
11405
|
"id": "pan-flywheel-status",
|
|
12038
11406
|
"path": ["flywheel", "status"],
|
|
12039
11407
|
"display": "/pan flywheel status",
|
|
12040
|
-
"description": "
|
|
12041
|
-
"args": [],
|
|
12042
|
-
"options": [{
|
|
12043
|
-
"flags": "--json",
|
|
12044
|
-
"description": "Emit the raw FlywheelStatus JSON",
|
|
12045
|
-
"required": false,
|
|
12046
|
-
"valueHint": null
|
|
12047
|
-
}],
|
|
12048
|
-
"aliases": [],
|
|
12049
|
-
"category": "Flywheel"
|
|
12050
|
-
},
|
|
12051
|
-
{
|
|
12052
|
-
"id": "pan-flywheel-stats",
|
|
12053
|
-
"path": ["flywheel", "stats"],
|
|
12054
|
-
"display": "/pan flywheel stats",
|
|
12055
|
-
"description": "Show Flywheel v1.0 readiness stats",
|
|
11408
|
+
"description": "Say whether the flywheel conversation is running",
|
|
12056
11409
|
"args": [],
|
|
12057
11410
|
"options": [{
|
|
12058
|
-
"flags": "--window <duration>",
|
|
12059
|
-
"description": "Stats window duration",
|
|
12060
|
-
"required": true,
|
|
12061
|
-
"valueHint": "duration"
|
|
12062
|
-
}, {
|
|
12063
11411
|
"flags": "--json",
|
|
12064
|
-
"description": "
|
|
12065
|
-
"required": false,
|
|
12066
|
-
"valueHint": null
|
|
12067
|
-
}],
|
|
12068
|
-
"aliases": [],
|
|
12069
|
-
"category": "Flywheel"
|
|
12070
|
-
},
|
|
12071
|
-
{
|
|
12072
|
-
"id": "pan-flywheel-pause",
|
|
12073
|
-
"path": ["flywheel", "pause"],
|
|
12074
|
-
"display": "/pan flywheel pause",
|
|
12075
|
-
"description": "Pause the active Flywheel orchestrator run",
|
|
12076
|
-
"args": [],
|
|
12077
|
-
"options": [],
|
|
12078
|
-
"aliases": [],
|
|
12079
|
-
"category": "Flywheel"
|
|
12080
|
-
},
|
|
12081
|
-
{
|
|
12082
|
-
"id": "pan-flywheel-resume",
|
|
12083
|
-
"path": ["flywheel", "resume"],
|
|
12084
|
-
"display": "/pan flywheel resume",
|
|
12085
|
-
"description": "Resume the paused Flywheel orchestrator run",
|
|
12086
|
-
"args": [],
|
|
12087
|
-
"options": [],
|
|
12088
|
-
"aliases": [],
|
|
12089
|
-
"category": "Flywheel"
|
|
12090
|
-
},
|
|
12091
|
-
{
|
|
12092
|
-
"id": "pan-flywheel-report",
|
|
12093
|
-
"path": ["flywheel", "report"],
|
|
12094
|
-
"display": "/pan flywheel report",
|
|
12095
|
-
"description": "Finalize the active Flywheel run: write report.md, compact over-threshold FLYWHEEL-STATE.md history, commit State changes, and clear the active-run gate. Refuses to run while the orchestrator session is alive (pause or abort first).",
|
|
12096
|
-
"args": [],
|
|
12097
|
-
"options": [{
|
|
12098
|
-
"flags": "--force",
|
|
12099
|
-
"description": "Bypass the orchestrator-alive guard. Intended for the orchestrator role's own end-of-run call.",
|
|
12100
|
-
"required": false,
|
|
12101
|
-
"valueHint": null
|
|
12102
|
-
}],
|
|
12103
|
-
"aliases": [],
|
|
12104
|
-
"category": "Flywheel"
|
|
12105
|
-
},
|
|
12106
|
-
{
|
|
12107
|
-
"id": "pan-flywheel-complete",
|
|
12108
|
-
"path": ["flywheel", "complete"],
|
|
12109
|
-
"display": "/pan flywheel complete",
|
|
12110
|
-
"description": "Complete a drained order-book run, write its report and retrospective, then continue mechanically",
|
|
12111
|
-
"args": [],
|
|
12112
|
-
"options": [{
|
|
12113
|
-
"flags": "--force",
|
|
12114
|
-
"description": "Complete even when the order book still has non-terminal items",
|
|
11412
|
+
"description": "Output as JSON",
|
|
12115
11413
|
"required": false,
|
|
12116
11414
|
"valueHint": null
|
|
12117
11415
|
}],
|
|
12118
11416
|
"aliases": [],
|
|
12119
11417
|
"category": "Flywheel"
|
|
12120
11418
|
},
|
|
12121
|
-
{
|
|
12122
|
-
"id": "pan-flywheel-stop",
|
|
12123
|
-
"path": ["flywheel", "stop"],
|
|
12124
|
-
"display": "/pan flywheel stop",
|
|
12125
|
-
"description": "Stop the Flywheel orchestrator gracefully: kill any live session, write report.md, commit FLYWHEEL-STATE.md changes, and clear the active-run gate",
|
|
12126
|
-
"args": [],
|
|
12127
|
-
"options": [],
|
|
12128
|
-
"aliases": [],
|
|
12129
|
-
"category": "Flywheel"
|
|
12130
|
-
},
|
|
12131
|
-
{
|
|
12132
|
-
"id": "pan-flywheel-abort",
|
|
12133
|
-
"path": ["flywheel", "abort"],
|
|
12134
|
-
"display": "/pan flywheel abort",
|
|
12135
|
-
"description": "Discard the active Flywheel run without writing a report",
|
|
12136
|
-
"args": [],
|
|
12137
|
-
"options": [],
|
|
12138
|
-
"aliases": [],
|
|
12139
|
-
"category": "Flywheel"
|
|
12140
|
-
},
|
|
12141
11419
|
{
|
|
12142
11420
|
"id": "pan-merge",
|
|
12143
11421
|
"path": ["merge"],
|
|
@@ -12718,11 +11996,75 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12718
11996
|
"description": "Rally project OID (e.g., /project/822404704163)",
|
|
12719
11997
|
"required": true,
|
|
12720
11998
|
"valueHint": "oid"
|
|
11999
|
+
},
|
|
12000
|
+
{
|
|
12001
|
+
"flags": "--dry-run",
|
|
12002
|
+
"description": "Validate without creating (resolve-before-create pattern)",
|
|
12003
|
+
"required": false,
|
|
12004
|
+
"valueHint": null
|
|
12005
|
+
}
|
|
12006
|
+
],
|
|
12007
|
+
"aliases": [],
|
|
12008
|
+
"category": "Project"
|
|
12009
|
+
},
|
|
12010
|
+
{
|
|
12011
|
+
"id": "pan-project-clone",
|
|
12012
|
+
"path": ["project", "clone"],
|
|
12013
|
+
"display": "/pan project clone",
|
|
12014
|
+
"description": "Clone a GitHub or GitLab repository and register it as a project",
|
|
12015
|
+
"args": [{
|
|
12016
|
+
"name": "url",
|
|
12017
|
+
"required": true,
|
|
12018
|
+
"variadic": false
|
|
12019
|
+
}],
|
|
12020
|
+
"options": [
|
|
12021
|
+
{
|
|
12022
|
+
"flags": "--parent <dir>",
|
|
12023
|
+
"description": "Parent directory (default: ~/Projects)",
|
|
12024
|
+
"required": true,
|
|
12025
|
+
"valueHint": "dir"
|
|
12026
|
+
},
|
|
12027
|
+
{
|
|
12028
|
+
"flags": "--name <name>",
|
|
12029
|
+
"description": "Project name (default: repository name)",
|
|
12030
|
+
"required": true,
|
|
12031
|
+
"valueHint": "name"
|
|
12032
|
+
},
|
|
12033
|
+
{
|
|
12034
|
+
"flags": "--issue-prefix <prefix>",
|
|
12035
|
+
"description": "Issue prefix (default: derived from the name)",
|
|
12036
|
+
"required": true,
|
|
12037
|
+
"valueHint": "prefix"
|
|
12038
|
+
},
|
|
12039
|
+
{
|
|
12040
|
+
"flags": "--dry-run",
|
|
12041
|
+
"description": "Print the resolved intent as JSON and create nothing",
|
|
12042
|
+
"required": false,
|
|
12043
|
+
"valueHint": null
|
|
12721
12044
|
}
|
|
12722
12045
|
],
|
|
12723
12046
|
"aliases": [],
|
|
12724
12047
|
"category": "Project"
|
|
12725
12048
|
},
|
|
12049
|
+
{
|
|
12050
|
+
"id": "pan-project-finish-setup",
|
|
12051
|
+
"path": ["project", "finish-setup"],
|
|
12052
|
+
"display": "/pan project finish-setup",
|
|
12053
|
+
"description": "Finish setup for a registered project whose creation did not complete",
|
|
12054
|
+
"args": [{
|
|
12055
|
+
"name": "key",
|
|
12056
|
+
"required": true,
|
|
12057
|
+
"variadic": false
|
|
12058
|
+
}],
|
|
12059
|
+
"options": [{
|
|
12060
|
+
"flags": "--path <path>",
|
|
12061
|
+
"description": "Expected project path; refuses if it does not match the registration",
|
|
12062
|
+
"required": true,
|
|
12063
|
+
"valueHint": "path"
|
|
12064
|
+
}],
|
|
12065
|
+
"aliases": [],
|
|
12066
|
+
"category": "Project"
|
|
12067
|
+
},
|
|
12726
12068
|
{
|
|
12727
12069
|
"id": "pan-project-list",
|
|
12728
12070
|
"path": ["project", "list"],
|
|
@@ -12862,11 +12204,75 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12862
12204
|
"description": "Rally project OID (e.g., /project/822404704163)",
|
|
12863
12205
|
"required": true,
|
|
12864
12206
|
"valueHint": "oid"
|
|
12207
|
+
},
|
|
12208
|
+
{
|
|
12209
|
+
"flags": "--dry-run",
|
|
12210
|
+
"description": "Validate without creating (resolve-before-create pattern)",
|
|
12211
|
+
"required": false,
|
|
12212
|
+
"valueHint": null
|
|
12213
|
+
}
|
|
12214
|
+
],
|
|
12215
|
+
"aliases": [],
|
|
12216
|
+
"category": "Project"
|
|
12217
|
+
},
|
|
12218
|
+
{
|
|
12219
|
+
"id": "pan-projects-clone",
|
|
12220
|
+
"path": ["projects", "clone"],
|
|
12221
|
+
"display": "/pan projects clone",
|
|
12222
|
+
"description": "Clone a GitHub or GitLab repository and register it as a project",
|
|
12223
|
+
"args": [{
|
|
12224
|
+
"name": "url",
|
|
12225
|
+
"required": true,
|
|
12226
|
+
"variadic": false
|
|
12227
|
+
}],
|
|
12228
|
+
"options": [
|
|
12229
|
+
{
|
|
12230
|
+
"flags": "--parent <dir>",
|
|
12231
|
+
"description": "Parent directory (default: ~/Projects)",
|
|
12232
|
+
"required": true,
|
|
12233
|
+
"valueHint": "dir"
|
|
12234
|
+
},
|
|
12235
|
+
{
|
|
12236
|
+
"flags": "--name <name>",
|
|
12237
|
+
"description": "Project name (default: repository name)",
|
|
12238
|
+
"required": true,
|
|
12239
|
+
"valueHint": "name"
|
|
12240
|
+
},
|
|
12241
|
+
{
|
|
12242
|
+
"flags": "--issue-prefix <prefix>",
|
|
12243
|
+
"description": "Issue prefix (default: derived from the name)",
|
|
12244
|
+
"required": true,
|
|
12245
|
+
"valueHint": "prefix"
|
|
12246
|
+
},
|
|
12247
|
+
{
|
|
12248
|
+
"flags": "--dry-run",
|
|
12249
|
+
"description": "Print the resolved intent as JSON and create nothing",
|
|
12250
|
+
"required": false,
|
|
12251
|
+
"valueHint": null
|
|
12865
12252
|
}
|
|
12866
12253
|
],
|
|
12867
12254
|
"aliases": [],
|
|
12868
12255
|
"category": "Project"
|
|
12869
12256
|
},
|
|
12257
|
+
{
|
|
12258
|
+
"id": "pan-projects-finish-setup",
|
|
12259
|
+
"path": ["projects", "finish-setup"],
|
|
12260
|
+
"display": "/pan projects finish-setup",
|
|
12261
|
+
"description": "Finish setup for a registered project whose creation did not complete",
|
|
12262
|
+
"args": [{
|
|
12263
|
+
"name": "key",
|
|
12264
|
+
"required": true,
|
|
12265
|
+
"variadic": false
|
|
12266
|
+
}],
|
|
12267
|
+
"options": [{
|
|
12268
|
+
"flags": "--path <path>",
|
|
12269
|
+
"description": "Expected project path; refuses if it does not match the registration",
|
|
12270
|
+
"required": true,
|
|
12271
|
+
"valueHint": "path"
|
|
12272
|
+
}],
|
|
12273
|
+
"aliases": [],
|
|
12274
|
+
"category": "Project"
|
|
12275
|
+
},
|
|
12870
12276
|
{
|
|
12871
12277
|
"id": "pan-projects-list",
|
|
12872
12278
|
"path": ["projects", "list"],
|
|
@@ -13330,14 +12736,6 @@ const COMPOSER_COMMAND_VARIANTS = [
|
|
|
13330
12736
|
"insert": "/pan plan --auto --auto-start ",
|
|
13331
12737
|
"category": "Lifecycle"
|
|
13332
12738
|
},
|
|
13333
|
-
{
|
|
13334
|
-
"id": "pan-review-reset-session",
|
|
13335
|
-
"path": ["review", "reset"],
|
|
13336
|
-
"display": "/pan review reset --session",
|
|
13337
|
-
"description": "Reset review and clear saved Claude session",
|
|
13338
|
-
"insert": "/pan review reset --session",
|
|
13339
|
-
"category": "Review"
|
|
13340
|
-
},
|
|
13341
12739
|
{
|
|
13342
12740
|
"id": "pan-fork-plain",
|
|
13343
12741
|
"path": ["fork"],
|
|
@@ -13472,6 +12870,24 @@ const HOOK_INVENTORY = [
|
|
|
13472
12870
|
const WIRED_HOOK_INVENTORY = HOOK_INVENTORY.filter((hook) => hook.wired);
|
|
13473
12871
|
const WIRED_HOOK_NAMES = WIRED_HOOK_INVENTORY.map((hook) => hook.name);
|
|
13474
12872
|
//#endregion
|
|
13475
|
-
|
|
12873
|
+
//#region src/terminal-backend.ts
|
|
12874
|
+
const TERMINAL_BACKEND_NAMES = ["herdr", "tmux"];
|
|
12875
|
+
const AGENT_ROLES = [
|
|
12876
|
+
"work",
|
|
12877
|
+
"worker",
|
|
12878
|
+
"review",
|
|
12879
|
+
"test",
|
|
12880
|
+
"uat",
|
|
12881
|
+
"strike",
|
|
12882
|
+
"plan"
|
|
12883
|
+
];
|
|
12884
|
+
function isTerminalBackendName(value) {
|
|
12885
|
+
return typeof value === "string" && TERMINAL_BACKEND_NAMES.includes(value);
|
|
12886
|
+
}
|
|
12887
|
+
function isAgentRole(value) {
|
|
12888
|
+
return typeof value === "string" && AGENT_ROLES.includes(value);
|
|
12889
|
+
}
|
|
12890
|
+
//#endregion
|
|
12891
|
+
export { ACP_BEHAVIOR, AGENT_ROLES, Activity, ActivityDetailedEvent, ActivityEntryEvent, ActivityTtsEvent, ActivityUpdatedEvent, AdmissionState, AgentActivityChangedEvent, AgentChannelReply, AgentChannelReplyEvent, AgentCompletedEvent, AgentContextSaturationChangedEvent, AgentCreatedEvent, AgentCurrentIssueSetEvent, AgentEnrichmentChangedEvent, AgentHealthKind, AgentHealthSnapshot, AgentHealthStatus, AgentHeartbeatDeadEvent, AgentHookFiredEvent, AgentId, AgentMessageReceivedEvent, AgentModelSetEvent, AgentOutput, AgentOutputReceivedEvent, AgentPermissionRequestedEvent, AgentPermissionResolvedEvent, AgentResolution, AgentResolutionChangedEvent, AgentRuntimeSnapshot, AgentSnapshot, AgentStartedEvent, AgentStateRestoredEvent, AgentStatus, AgentStatusChangedEvent, AgentStoppedEvent, AgentThinkingStartedEvent, AgentThinkingStoppedEvent, AgentTurnDiffCompletedEvent, AgentWaitingClearedEvent, AgentWaitingStartedEvent, ArtifactAgentHarness, ArtifactAgentRole, ArtifactCreateResponse, ArtifactDetailResponse, ArtifactHash, ArtifactId, ArtifactLifecycleState, ArtifactListEntry, ArtifactListResponse, ArtifactMetadata, ArtifactPublishResponse, ArtifactSlug, ArtifactStatusResponse, ArtifactUnshareResponse, ArtifactUrls, ArtifactValidationCode, ArtifactValidationFinding, ArtifactValidationResult, BackendPane, BackendPaneChangedEvent, BackendPaneRemovedEvent, BeadsFreshnessChangedEvent, CHANNEL_REPLY_KIND_VALUES, CLAUDE_CODE_BEHAVIOR, CODEX_BEHAVIOR, COMPOSER_COMMAND_INSERT_OVERRIDES, COMPOSER_COMMAND_MANIFEST, COMPOSER_COMMAND_VARIANTS, CONTEXT_LAYER_KINDS, CONTEXT_PREVIEW_HARNESSES, ChannelPermissionRequestSnapshot, ChannelReplyArtifactRef, ChannelReplyKind, ChatMessage, ClaudeChannelPermissionBehavior, CompactBoundary, ContextEditableLayerRecord, ContextHarnessPreviews, ContextLayerDraft, ContextLayerKind, ContextLayerSaveRequest, ContextLayerSaveResponse, ContextLayerTarget, ContextLayersResponse, ContextPreviewDiagnostic, ContextPreviewHarness, ContextPreviewRequest, ContextPreviewResponse, ContextProjectSummary, ContextSyncRequest, ContextSyncResponse, ContextSyncTarget, ContextUsage, ContextWorkspaceSummary, ConversationCompactingChangedEvent, ConversationCostSummary, ConversationCreatedEvent, ConversationEvent, ConversationFilter, ConversationMovedEvent, ConversationPermissionChangedEvent, ConversationResponse, ConversationTitleChangedEvent, CostEventRecordedEvent, DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE, DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, DashboardLifecycleStartedEvent, DashboardSnapshot, DeepWipeRpc, DeployStalenessSnapshot, DerivedBranchState, DerivedIssueState, DerivedPrState, DiscoveredSessionSnapshot, DomainEvent, EDITORS, EditorIdSchema, EmbedProgressEvent, EmbedProgressSnapshot, EmbedSessionsRpc, EnrichCompleteEvent, EnrichProgressEvent, EnrichProgressSnapshot, EnrichSessionsRpc, EnrichStatsSnapshot, ExtractionProviderConfig, ExtractionProviderTarget, FeatureNode, FeatureRegistryEntry, FeatureRegistryStatus, FlywheelAgent, FlywheelAgentStatus, FlywheelEffort, FlywheelHarness, FlywheelHeadline, FlywheelHttpUrl, FlywheelOrchestrator, FlywheelOrders, FlywheelParkedItem, FlywheelPipelineItem, FlywheelPipelineStatus, FlywheelPipelineVerb, FlywheelRunId, FlywheelScope, FlywheelStats, FlywheelStatsCriteria, FlywheelStatsCriterion, FlywheelStatsCriterionStatus, FlywheelStatsCriterionValue, FlywheelStatsCriterionValueObject, FlywheelStatsTrend, FlywheelStatus, FlywheelSubstrateBug, FlywheelSubstrateBugStatus, FlywheelSuggestion, FlywheelSuggestionAction, FlywheelSuggestionPriority, FlywheelSystemStatus, GetAvailableEditorsRpc, GetConversationCostByWorkspaceRpc, GetConversationCostRpc, GetConversationStatsRpc, GetDiscoveredSessionRpc, GetSessionsFeedFacetsRpc, GetSnapshotRpc, GlobalContextLayerRecord, GlobalContextLayerTarget, HOOK_INVENTORY, HealthReason, HealthState, HostHealthMetrics, HostPlatform, HygieneFinding, HygienePullRequest, HygieneReport, INITIAL_READ_MODEL_STATE, ISSUE_ATTENTIONS, ISSUE_STATES, ISSUE_STATE_PRECEDENCE, IssueAttention, IssueId, IssueState, IssueStateChangedEvent, IssueStatusChangedEvent, IssueTransitionedEvent, IssuesDeltaEvent, IssuesSnapshotEvent, IssuesUpdatedEvent, KIMI_CODE_BEHAVIOR, KNOWN_HARNESSES, LegacySystemHealthSummary, LegacyWebhookRelaySummary, LinearMcpAuthCallbackRelayedEvent, LinearMcpAuthHealthyEvent, LinearMcpAuthNotifiedEvent, LinearMcpAuthRequiredEvent, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH, MAX_CHANNEL_REPLY_ARTIFACT_REFS, MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH, MAX_CHANNEL_REPLY_SUMMARY_LENGTH, MEMBERSHIP_UNAVAILABLE_REASONS, MUSE_BEHAVIOR, MemoryAgentRole, MemoryHealthChangedEvent, MemoryIdentity, MemoryObservation, MemoryObservationCreatedEvent, MemoryResetMarkerCreatedEvent, MemoryRollupTriggeredEvent, MemoryStatus, MemoryStatusPhase, MemoryStatusUpdatedEvent, MemoryTokenUsage, MergeReadyEvent, ModelOrigin, ModelOriginEntry, OHMYPI_BEHAVIOR, OPENCODE_BEHAVIOR, OVERDECK_AGENT_PROTOCOL_VERSION, OVERDECK_DASHBOARD_PROTOCOL_VERSION, OpenInEditorInput, OperatorInterventionEvent, OrderBook, OrderBookIndexEntry, OrderBookItem, OrderBookLane, OrderBookPosture, OrderBookSettings, OrderBookStatus, PanRpcError, PanRpcGroup, PendingTurn, PipelineReviewCompletedEvent, PipelineReviewStartedEvent, PipelineTestCompletedEvent, PipelineTestStartedEvent, PipelineVerificationFailedEvent, PipelineVerificationStartedEvent, PlanItemStatusChangedEvent, PlanItemsUnblockedEvent, PlanSubitemStatusChangedEvent, PlanningFailedEvent, PlanningStartedEvent, PlanningSyncEvent, PrChecksState, PrReviewState, ProjectCiHeadObservedEvent, ProjectCiSnapshot, ProjectCiSuite, ProjectCiSuiteObservedEvent, ProjectContextLayerRecord, ProjectContextLayerTarget, ProjectSessionTree, ProposedPlan, RagDecision, RagDecisionSource, ReadFileAtPathInput, ReadFileAtPathResult, ReadFileAtPathRpc, ReadWorkspaceFileInput, ReadWorkspaceFileResult, ReadWorkspaceFileRpc, ReplayEventsRpc, ResetMarker, ResetMarkerScope, ResizeTerminalRpc, ResolveFilePathExistsInput, ResolveFilePathExistsResult, ResolveFilePathExistsRpc, ResourceStats, ResourcesUpdatedEvent, RestartGateChangedEvent, RestartGateKind, RestartGateOutcome, RestartGateRequest, RestartGateSnapshot, ReviewApprovedEvent, ReviewCoordinatorDiedEvent, ReviewCoordinatorStartedEvent, ReviewReviewerCompletedEvent, ReviewReviewerStartedEvent, ReviewSpecialistTimedOutEvent, ReviewVerdictDispatchedEvent, ReviewVerdictRejectedEvent, ReviewVerdictRestoreBlockedEvent, ReviewerRoundMetadata, ReviewerRoundSummary, Role, ScanCompleteEvent, ScanConversationsRpc, ScanProgressEvent, ScanProgressSnapshot, ScanResult, ScanStartedEvent, SearchConversationsRpc, SendTerminalInputRpc, SequenceNumber, ServiceHealthSnapshot, ServiceHealthStatus, SessionNode, SessionNodePresence, SessionNodeType, SessionTreeDelta, SessionsFeedFacetsSnapshot, SessionsFeedRowSnapshot, SessionsFeedSource, ShadowInferenceUpdateEvent, ShellOpenInEditorRpc, SpecialistCompletedEvent, SpecialistFailedEvent, SpecialistLifecycle, SpecialistStartedEvent, StartAgentRpc, StartPlanningRpc, SubagentSummary, SubscribeAgentOutputRpc, SubscribeConversationMessagesRpc, SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeProjectSessionTreeRpc, SubscribeTerminalRpc, SubstrateBugFiledEvent, SweepEscalatedEvent, SweepRecommendationEvent, SweepScanEvent, SystemHealthConsumer, SystemHealthSeverityChangedEvent, SystemHealthSnapshot, SystemHeartbeatEvent, TELEMETRY_CLI_VERBS, TELEMETRY_EVENT_CATALOG, TELEMETRY_EVENT_NAMES, TELEMETRY_PROPERTY_DOMAINS, TERMINAL_BACKEND_NAMES, TerminalCloseRpc, TerminalOpenRpc, TerminalOutput, TerminalResizeRpc, TerminalWriteRpc, TestPassedEvent, ThinkingState, TurnDiffFileChange, TurnDiffSummary, WIRED_HOOK_INVENTORY, WIRED_HOOK_NAMES, WS_METHODS, WaitingReason, WaitingState, WorkCompletedEvent, WorkLogEntry, WorkspaceAbortedEvent, WorkspaceArtifactsResponse, WorkspaceContextLayerRecord, WorkspaceContextLayerTarget, WorkspaceCreatedEvent, WorkspaceDeletedEvent, WorkspaceDestroyedEvent, WorkspaceWipeStartedEvent, WriteFileAtPathInput, WriteFileAtPathResult, WriteFileAtPathRpc, applyEvent, applyEvents, applyIssueDelta, compareIssueIds, createIssueDelta, decodeFlywheelStats, deriveProjectCi, encodeFlywheelStats, getHarness, getHarnessBehavior, getMaxMemoryObservationsPerIssue, getMaxTurnDiffSummariesPerAgent, getRuntimeBehavior, isAgentRole, isAgentSessionName, isChannelReplyKind, isIssueAttention, isIssueState, isTerminalBackendName, isTerminalTurnDiffSummaryStatus, normalizeChannelReplyPayload, omitTurnDiffSummariesForAgent, projectLegacySystemHealthSummary, syncSnapshot, trimMemoryObservations, trimTurnDiffSummaries };
|
|
13476
12892
|
|
|
13477
12893
|
//# sourceMappingURL=index.mjs.map
|