@overdeck/contracts 0.62.1 → 0.63.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 +905 -35
- package/dist/index.d.ts +895 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +875 -36
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -36,6 +36,27 @@ const BackendPane = Schema.Struct({
|
|
|
36
36
|
/** Working directory of the pane (the issue workspace path). */
|
|
37
37
|
workspace: Schema.optional(Schema.String)
|
|
38
38
|
});
|
|
39
|
+
/**
|
|
40
|
+
* The agent id a pane answers for (PAN-4320). On Herdr `id` (`w1:p1`) and
|
|
41
|
+
* `terminalId` (`term_…`) are backend handles, never agent ids, so the
|
|
42
|
+
* `agentId` token decides; tmux panes carry `agentId` = session name.
|
|
43
|
+
*/
|
|
44
|
+
function paneAgentKey(pane) {
|
|
45
|
+
return pane.agentId ?? pane.terminalId ?? pane.id;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Panes by agent key. When two panes answer for one agent (a restarted Herdr
|
|
49
|
+
* agent beside its exited pane), a non-exited pane wins, never the reverse.
|
|
50
|
+
*/
|
|
51
|
+
function indexPanesByAgentKey(panes) {
|
|
52
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const pane of panes) {
|
|
54
|
+
const key = paneAgentKey(pane);
|
|
55
|
+
const prior = byKey.get(key);
|
|
56
|
+
if (!prior || prior.state === "exited" && pane.state !== "exited") byKey.set(key, pane);
|
|
57
|
+
}
|
|
58
|
+
return byKey;
|
|
59
|
+
}
|
|
39
60
|
//#endregion
|
|
40
61
|
//#region src/derived-issue-state.ts
|
|
41
62
|
/**
|
|
@@ -84,7 +105,9 @@ const DerivedPrState = Schema.Struct({
|
|
|
84
105
|
reviewState: PrReviewState,
|
|
85
106
|
checks: PrChecksState,
|
|
86
107
|
/** Forge mergeability. `null` when the forge has not computed it yet. */
|
|
87
|
-
mergeable: Schema.NullOr(Schema.Boolean)
|
|
108
|
+
mergeable: Schema.NullOr(Schema.Boolean),
|
|
109
|
+
/** Present only when true; survives state: closed (PAN-4290). */
|
|
110
|
+
merged: Schema.optional(Schema.Boolean)
|
|
88
111
|
});
|
|
89
112
|
/** The issue's feature branch as git reports it. */
|
|
90
113
|
const DerivedBranchState = Schema.Struct({
|
|
@@ -141,6 +164,119 @@ function isIssueAttention(value) {
|
|
|
141
164
|
return typeof value === "string" && ISSUE_ATTENTIONS.includes(value);
|
|
142
165
|
}
|
|
143
166
|
//#endregion
|
|
167
|
+
//#region src/github-quota.ts
|
|
168
|
+
/**
|
|
169
|
+
* The closed list of logical GitHub callers. A call made outside any
|
|
170
|
+
* `withGitHubCaller` context is recorded as `other` (or `app-rest` when it
|
|
171
|
+
* goes through the GitHub App REST door).
|
|
172
|
+
*/
|
|
173
|
+
const GITHUB_QUOTA_CALLERS = [
|
|
174
|
+
"pipeline-membership",
|
|
175
|
+
"pr-cache",
|
|
176
|
+
"pr-sync",
|
|
177
|
+
"ci-repair",
|
|
178
|
+
"issue-poller",
|
|
179
|
+
"close-out",
|
|
180
|
+
"tracker-client",
|
|
181
|
+
"app-rest",
|
|
182
|
+
"quota-sampler",
|
|
183
|
+
"agent",
|
|
184
|
+
"other"
|
|
185
|
+
];
|
|
186
|
+
const GitHubQuotaCaller = Schema.Literals(GITHUB_QUOTA_CALLERS);
|
|
187
|
+
/**
|
|
188
|
+
* Read-model pollers whose data can be stale for minutes without harm. Only
|
|
189
|
+
* these callers are skipped while a pause is active; every other caller
|
|
190
|
+
* (merge, verdict recording, tracker writes, agents) is essential and never
|
|
191
|
+
* paused.
|
|
192
|
+
*/
|
|
193
|
+
const NON_ESSENTIAL_GITHUB_CALLERS = new Set([
|
|
194
|
+
"pipeline-membership",
|
|
195
|
+
"pr-cache",
|
|
196
|
+
"pr-sync",
|
|
197
|
+
"ci-repair",
|
|
198
|
+
"issue-poller",
|
|
199
|
+
"close-out"
|
|
200
|
+
]);
|
|
201
|
+
/**
|
|
202
|
+
* The GitHub identity whose limit a call spends: `user` is the `gh` CLI token,
|
|
203
|
+
* `pat` is the `GITHUB_TOKEN` personal access token, `app` is a GitHub App
|
|
204
|
+
* installation token.
|
|
205
|
+
*/
|
|
206
|
+
const GITHUB_QUOTA_POOLS = [
|
|
207
|
+
"user",
|
|
208
|
+
"pat",
|
|
209
|
+
"app"
|
|
210
|
+
];
|
|
211
|
+
const GitHubQuotaPool = Schema.Literals(GITHUB_QUOTA_POOLS);
|
|
212
|
+
/** The limit counter inside a pool. `rest` is what GitHub calls `core`. */
|
|
213
|
+
const GITHUB_QUOTA_BUCKETS = ["graphql", "rest"];
|
|
214
|
+
const GitHubQuotaBucket = Schema.Literals(GITHUB_QUOTA_BUCKETS);
|
|
215
|
+
/** Primary = the hourly budget; secondary = GitHub's burst/abuse limit. */
|
|
216
|
+
const GitHubRateLimitKind = Schema.Literals(["primary", "secondary"]);
|
|
217
|
+
/** Points spent and calls made in one bucket. */
|
|
218
|
+
const GitHubQuotaUsage = Schema.Struct({
|
|
219
|
+
points: Schema.Number,
|
|
220
|
+
calls: Schema.Number
|
|
221
|
+
});
|
|
222
|
+
/** One caller's metered usage over the last hour. */
|
|
223
|
+
const GitHubQuotaCallerUsage = Schema.Struct({
|
|
224
|
+
caller: GitHubQuotaCaller,
|
|
225
|
+
graphql: GitHubQuotaUsage,
|
|
226
|
+
rest: GitHubQuotaUsage,
|
|
227
|
+
/** True when any counted call had an estimated (not GitHub-reported) cost. */
|
|
228
|
+
estimated: Schema.Boolean
|
|
229
|
+
});
|
|
230
|
+
/** The latest `/rate_limit` (or header) reading for one pool and bucket. */
|
|
231
|
+
const GitHubQuotaSample = Schema.Struct({
|
|
232
|
+
pool: GitHubQuotaPool,
|
|
233
|
+
bucket: GitHubQuotaBucket,
|
|
234
|
+
/** ISO time the sample was taken. */
|
|
235
|
+
ts: Schema.String,
|
|
236
|
+
remaining: Schema.Number,
|
|
237
|
+
limit: Schema.Number,
|
|
238
|
+
/** ISO time the bucket's hourly window resets. */
|
|
239
|
+
resetAt: Schema.optional(Schema.String)
|
|
240
|
+
});
|
|
241
|
+
/** An active pause on one pool and bucket (`~/.overdeck/github-quota/pause.json`). */
|
|
242
|
+
const GitHubQuotaPause = Schema.Struct({
|
|
243
|
+
pool: GitHubQuotaPool,
|
|
244
|
+
bucket: GitHubQuotaBucket,
|
|
245
|
+
kind: GitHubRateLimitKind,
|
|
246
|
+
/** The caller whose refused call started the pause. */
|
|
247
|
+
caller: GitHubQuotaCaller,
|
|
248
|
+
/** ISO time the pause started. */
|
|
249
|
+
since: Schema.String,
|
|
250
|
+
/** ISO time the pause ends. */
|
|
251
|
+
until: Schema.String
|
|
252
|
+
});
|
|
253
|
+
/**
|
|
254
|
+
* The operator-facing quota view — identical to the body of
|
|
255
|
+
* `GET /api/github-quota`, so the pill, the banner and the CLI read one shape.
|
|
256
|
+
* Derived runtime state: published with `emitOnly`, never persisted.
|
|
257
|
+
*/
|
|
258
|
+
const GitHubQuotaSnapshot = Schema.Struct({
|
|
259
|
+
/** ISO time the snapshot was built. */
|
|
260
|
+
generatedAt: Schema.String,
|
|
261
|
+
/** The `gh` account login. Local display only; never sent to telemetry. */
|
|
262
|
+
login: Schema.NullOr(Schema.String),
|
|
263
|
+
/** Per-caller usage in the last hour, highest total points first. */
|
|
264
|
+
callers: Schema.Array(GitHubQuotaCallerUsage),
|
|
265
|
+
/** The latest sample per pool and bucket. */
|
|
266
|
+
samples: Schema.Array(GitHubQuotaSample),
|
|
267
|
+
/** Active pauses; empty when GitHub calls are not paused. */
|
|
268
|
+
pauses: Schema.Array(GitHubQuotaPause),
|
|
269
|
+
/** True when this machine's own metered usage cannot explain a primary limit. */
|
|
270
|
+
ownUsageLow: Schema.Boolean,
|
|
271
|
+
/** User-pool GraphQL points the latest sample shows spent but no metered caller claims. */
|
|
272
|
+
unattributed: Schema.Number,
|
|
273
|
+
/** Refusals observed in the last hour. */
|
|
274
|
+
refusals: Schema.Struct({
|
|
275
|
+
primary: Schema.Number,
|
|
276
|
+
secondary: Schema.Number
|
|
277
|
+
})
|
|
278
|
+
});
|
|
279
|
+
//#endregion
|
|
144
280
|
//#region src/types.ts
|
|
145
281
|
const IssueId = Schema.String;
|
|
146
282
|
const MEMBERSHIP_UNAVAILABLE_REASONS = [
|
|
@@ -197,7 +333,8 @@ const KNOWN_HARNESSES = new Set([
|
|
|
197
333
|
"acp",
|
|
198
334
|
"kimi-code",
|
|
199
335
|
"opencode",
|
|
200
|
-
"muse"
|
|
336
|
+
"muse",
|
|
337
|
+
"prime-agent"
|
|
201
338
|
]);
|
|
202
339
|
/**
|
|
203
340
|
* Normalize a snapshot's runtime field to a known Harness value.
|
|
@@ -296,6 +433,7 @@ const AgentRuntimeSnapshot = Schema.Struct({
|
|
|
296
433
|
activity: Activity,
|
|
297
434
|
lastActivity: Schema.String,
|
|
298
435
|
currentTool: Schema.optional(Schema.String),
|
|
436
|
+
currentToolDescription: Schema.optional(Schema.String),
|
|
299
437
|
thinking: Schema.optional(ThinkingState),
|
|
300
438
|
waiting: Schema.optional(WaitingState),
|
|
301
439
|
claudeSessionId: Schema.optional(Schema.String),
|
|
@@ -559,6 +697,8 @@ const DashboardSnapshot = Schema.Struct({
|
|
|
559
697
|
embedProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EmbedProgressSnapshot)),
|
|
560
698
|
ciByProjectKey: Schema.optional(Schema.Record(Schema.String, ProjectCiSnapshot)),
|
|
561
699
|
restartGate: Schema.optional(RestartGateSnapshot),
|
|
700
|
+
/** PAN-4264 — GitHub API quota use, samples and pauses; derived, never stored. */
|
|
701
|
+
githubQuota: Schema.optional(GitHubQuotaSnapshot),
|
|
562
702
|
/** PAN-3751 — in-flight deploys keyed by project key. */
|
|
563
703
|
deployByProjectKey: Schema.optional(Schema.Record(Schema.String, ProjectDeploySnapshot)),
|
|
564
704
|
timestamp: Schema.String
|
|
@@ -1432,6 +1572,20 @@ const RestartGateChangedEvent = Schema.Struct({
|
|
|
1432
1572
|
payload: RestartGateSnapshot
|
|
1433
1573
|
});
|
|
1434
1574
|
/**
|
|
1575
|
+
* The GitHub API quota view changed (PAN-4264).
|
|
1576
|
+
*
|
|
1577
|
+
* The payload is the complete snapshot, so the reducer is a plain replace.
|
|
1578
|
+
* The server derives it from the quota ledger and pause file under
|
|
1579
|
+
* `~/.overdeck/github-quota/` and emits it in-memory only, like
|
|
1580
|
+
* `restart_gate.changed`: it is never persisted and never replayed at boot.
|
|
1581
|
+
*/
|
|
1582
|
+
const GitHubQuotaChangedEvent = Schema.Struct({
|
|
1583
|
+
type: Schema.Literal("github_quota.changed"),
|
|
1584
|
+
sequence: SequenceNumber,
|
|
1585
|
+
timestamp: Schema.String,
|
|
1586
|
+
payload: GitHubQuotaSnapshot
|
|
1587
|
+
});
|
|
1588
|
+
/**
|
|
1435
1589
|
* The set of in-flight project deploys changed (PAN-3751).
|
|
1436
1590
|
*
|
|
1437
1591
|
* The payload is the COMPLETE projection keyed by project key, so the reducer
|
|
@@ -1646,6 +1800,7 @@ const AgentActivityChangedEvent = Schema.Struct({
|
|
|
1646
1800
|
agentId: AgentId,
|
|
1647
1801
|
activity: Activity,
|
|
1648
1802
|
currentTool: Schema.optional(Schema.String),
|
|
1803
|
+
toolDescription: Schema.optional(Schema.String),
|
|
1649
1804
|
hookName: Schema.optional(Schema.String)
|
|
1650
1805
|
})
|
|
1651
1806
|
});
|
|
@@ -2748,6 +2903,7 @@ const DomainEvent = Schema.Union([
|
|
|
2748
2903
|
ProjectCiSuiteObservedEvent,
|
|
2749
2904
|
ProjectCiHeadObservedEvent,
|
|
2750
2905
|
RestartGateChangedEvent,
|
|
2906
|
+
GitHubQuotaChangedEvent,
|
|
2751
2907
|
ProjectDeployChangedEvent,
|
|
2752
2908
|
AgentCreatedEvent,
|
|
2753
2909
|
AgentEnrichmentChangedEvent,
|
|
@@ -3138,13 +3294,23 @@ const WorkLogEntry = Schema.Struct({
|
|
|
3138
3294
|
toolInput: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),
|
|
3139
3295
|
sequence: Schema.optional(Schema.Number)
|
|
3140
3296
|
});
|
|
3297
|
+
/** A human-origin message read from a subagent's own sidechain transcript (PAN-4247). */
|
|
3298
|
+
const SubagentHumanInput = Schema.Struct({
|
|
3299
|
+
id: Schema.String,
|
|
3300
|
+
text: Schema.String,
|
|
3301
|
+
createdAt: Schema.String
|
|
3302
|
+
});
|
|
3141
3303
|
const SubagentSummary = Schema.Struct({
|
|
3142
3304
|
agentId: Schema.String,
|
|
3143
3305
|
agentType: Schema.String,
|
|
3144
3306
|
description: Schema.String,
|
|
3145
3307
|
toolUseId: Schema.String,
|
|
3146
3308
|
spawnDepth: Schema.Number,
|
|
3147
|
-
status: Schema.Literals(["running", "done"])
|
|
3309
|
+
status: Schema.Literals(["running", "done"]),
|
|
3310
|
+
/** True for a background subagent, launched with `requestShape: "background"` (PAN-4247). */
|
|
3311
|
+
background: Schema.optional(Schema.Boolean),
|
|
3312
|
+
/** Recent human-origin sidechain inputs, most useful when a message routed into this subagent instead of the main conversation (PAN-4247). */
|
|
3313
|
+
humanInputs: Schema.optional(Schema.Array(SubagentHumanInput))
|
|
3148
3314
|
});
|
|
3149
3315
|
/**
|
|
3150
3316
|
* Response shape for GET /api/agents/:id/conversation.
|
|
@@ -3653,6 +3819,7 @@ const INITIAL_READ_MODEL_STATE = {
|
|
|
3653
3819
|
embedProgressBySessionId: {},
|
|
3654
3820
|
ciByProjectKey: {},
|
|
3655
3821
|
restartGate: null,
|
|
3822
|
+
githubQuota: null,
|
|
3656
3823
|
deployByProjectKey: {},
|
|
3657
3824
|
agentIdBySessionId: {},
|
|
3658
3825
|
dashboardLifecycle: {
|
|
@@ -3784,6 +3951,7 @@ function syncSnapshot(state, snapshot) {
|
|
|
3784
3951
|
embedProgressBySessionId: snapshot.embedProgressBySessionId ?? {},
|
|
3785
3952
|
ciByProjectKey: snapshot.ciByProjectKey ?? state.ciByProjectKey,
|
|
3786
3953
|
restartGate: snapshot.restartGate ?? state.restartGate,
|
|
3954
|
+
githubQuota: snapshot.githubQuota ?? state.githubQuota,
|
|
3787
3955
|
deployByProjectKey: snapshot.deployByProjectKey ?? state.deployByProjectKey,
|
|
3788
3956
|
agentIdBySessionId
|
|
3789
3957
|
};
|
|
@@ -3888,6 +4056,7 @@ function applyEvent(state, event) {
|
|
|
3888
4056
|
...prevRuntime,
|
|
3889
4057
|
activity: "stopped",
|
|
3890
4058
|
currentTool: void 0,
|
|
4059
|
+
currentToolDescription: void 0,
|
|
3891
4060
|
thinking: void 0,
|
|
3892
4061
|
waiting: void 0,
|
|
3893
4062
|
channelReply: void 0,
|
|
@@ -4031,6 +4200,7 @@ function applyEvent(state, event) {
|
|
|
4031
4200
|
...prevRuntime,
|
|
4032
4201
|
activity: "stopped",
|
|
4033
4202
|
currentTool: void 0,
|
|
4203
|
+
currentToolDescription: void 0,
|
|
4034
4204
|
thinking: void 0,
|
|
4035
4205
|
waiting: void 0,
|
|
4036
4206
|
channelReply: void 0,
|
|
@@ -4199,6 +4369,11 @@ function applyEvent(state, event) {
|
|
|
4199
4369
|
...event.payload.lastOutcome === void 0 ? {} : { lastOutcome: event.payload.lastOutcome }
|
|
4200
4370
|
}
|
|
4201
4371
|
};
|
|
4372
|
+
case "github_quota.changed": return {
|
|
4373
|
+
...state,
|
|
4374
|
+
sequence: Math.max(state.sequence, event.sequence),
|
|
4375
|
+
githubQuota: event.payload
|
|
4376
|
+
};
|
|
4202
4377
|
case "project.deploy_changed": return {
|
|
4203
4378
|
...state,
|
|
4204
4379
|
sequence: Math.max(state.sequence, event.sequence),
|
|
@@ -4452,12 +4627,13 @@ function applyEvent(state, event) {
|
|
|
4452
4627
|
sequence: Math.max(state.sequence, event.sequence)
|
|
4453
4628
|
};
|
|
4454
4629
|
case "agent.activity_changed": {
|
|
4455
|
-
const { agentId, activity, currentTool } = event.payload;
|
|
4630
|
+
const { agentId, activity, currentTool, toolDescription } = event.payload;
|
|
4456
4631
|
const prev = state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence);
|
|
4457
4632
|
const next = {
|
|
4458
4633
|
...prev,
|
|
4459
4634
|
activity,
|
|
4460
4635
|
currentTool: activity === "working" ? currentTool : void 0,
|
|
4636
|
+
currentToolDescription: activity === "working" ? toolDescription : void 0,
|
|
4461
4637
|
thinking: activity === "thinking" ? prev.thinking : void 0,
|
|
4462
4638
|
waiting: activity === "waiting" ? prev.waiting : void 0,
|
|
4463
4639
|
channelReply: activity === "working" ? void 0 : prev.channelReply,
|
|
@@ -4480,6 +4656,7 @@ function applyEvent(state, event) {
|
|
|
4480
4656
|
...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
|
|
4481
4657
|
activity: "thinking",
|
|
4482
4658
|
currentTool: void 0,
|
|
4659
|
+
currentToolDescription: void 0,
|
|
4483
4660
|
thinking: {
|
|
4484
4661
|
since: event.timestamp,
|
|
4485
4662
|
lastToolAt
|
|
@@ -4528,6 +4705,7 @@ function applyEvent(state, event) {
|
|
|
4528
4705
|
...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
|
|
4529
4706
|
activity: "waiting",
|
|
4530
4707
|
currentTool: void 0,
|
|
4708
|
+
currentToolDescription: void 0,
|
|
4531
4709
|
thinking: void 0,
|
|
4532
4710
|
waiting: {
|
|
4533
4711
|
reason,
|
|
@@ -5084,6 +5262,30 @@ function deriveProjectCi(record) {
|
|
|
5084
5262
|
};
|
|
5085
5263
|
}
|
|
5086
5264
|
//#endregion
|
|
5265
|
+
//#region src/effort.ts
|
|
5266
|
+
/**
|
|
5267
|
+
* Canonical reasoning-effort levels, end to end. `xhigh` was added in Opus 4.7
|
|
5268
|
+
* (between `high` and `max`); `max` predates it (Opus 4.6+/Sonnet 4.6). This is
|
|
5269
|
+
* the single source of truth for the enum — every other copy in the codebase
|
|
5270
|
+
* derives from it.
|
|
5271
|
+
*/
|
|
5272
|
+
const EFFORT_LEVELS = [
|
|
5273
|
+
"low",
|
|
5274
|
+
"medium",
|
|
5275
|
+
"high",
|
|
5276
|
+
"xhigh",
|
|
5277
|
+
"max"
|
|
5278
|
+
];
|
|
5279
|
+
const DEFAULT_EFFORT = "high";
|
|
5280
|
+
const EffortLevelSchema = Schema.Literals(EFFORT_LEVELS);
|
|
5281
|
+
function isEffortLevel(value) {
|
|
5282
|
+
return typeof value === "string" && EFFORT_LEVELS.includes(value);
|
|
5283
|
+
}
|
|
5284
|
+
/** Compares two effort levels by rank; negative when `a` is lower than `b`. */
|
|
5285
|
+
function compareEffort(a, b) {
|
|
5286
|
+
return EFFORT_LEVELS.indexOf(a) - EFFORT_LEVELS.indexOf(b);
|
|
5287
|
+
}
|
|
5288
|
+
//#endregion
|
|
5087
5289
|
//#region src/flywheel.ts
|
|
5088
5290
|
const FlywheelRunId = Schema.String.check(Schema.isPattern(/^RUN-\d+$/));
|
|
5089
5291
|
const FlywheelHttpUrl = Schema.String.check(Schema.isPattern(/^https?:\/\/\S+$/i));
|
|
@@ -5095,15 +5297,10 @@ const FlywheelHarness = Schema.Literals([
|
|
|
5095
5297
|
"acp",
|
|
5096
5298
|
"kimi-code",
|
|
5097
5299
|
"opencode",
|
|
5098
|
-
"muse"
|
|
5099
|
-
|
|
5100
|
-
const FlywheelEffort = Schema.Literals([
|
|
5101
|
-
"low",
|
|
5102
|
-
"medium",
|
|
5103
|
-
"high",
|
|
5104
|
-
"xhigh",
|
|
5105
|
-
"max"
|
|
5300
|
+
"muse",
|
|
5301
|
+
"prime-agent"
|
|
5106
5302
|
]);
|
|
5303
|
+
const FlywheelEffort = EffortLevelSchema;
|
|
5107
5304
|
const FlywheelOrchestrator = Schema.Struct({
|
|
5108
5305
|
harness: FlywheelHarness,
|
|
5109
5306
|
model: Schema.String,
|
|
@@ -5364,6 +5561,8 @@ const FlywheelConversationSummary = Schema.Struct({
|
|
|
5364
5561
|
model: Schema.NullOr(Schema.String),
|
|
5365
5562
|
harness: Schema.NullOr(Schema.String),
|
|
5366
5563
|
cwd: Schema.String,
|
|
5564
|
+
/** When the conversation row was created — the page's elapsed run time. */
|
|
5565
|
+
createdAt: Schema.String,
|
|
5367
5566
|
sessionAlive: Schema.Boolean
|
|
5368
5567
|
});
|
|
5369
5568
|
const FlywheelLastTick = Schema.Struct({
|
|
@@ -5385,11 +5584,28 @@ const FlywheelJournalSummary = Schema.Struct({
|
|
|
5385
5584
|
type: Schema.String,
|
|
5386
5585
|
source: Schema.optional(Schema.String)
|
|
5387
5586
|
});
|
|
5587
|
+
/** One live agent pane in the flywheel's project, as the backend inventory reports it. */
|
|
5588
|
+
const FlywheelAgentSummary = Schema.Struct({
|
|
5589
|
+
issueId: Schema.String,
|
|
5590
|
+
role: Schema.String,
|
|
5591
|
+
harness: Schema.String,
|
|
5592
|
+
model: Schema.String,
|
|
5593
|
+
state: Schema.String,
|
|
5594
|
+
agentId: Schema.optional(Schema.String)
|
|
5595
|
+
});
|
|
5388
5596
|
const FlywheelInFlightRow = Schema.Struct({
|
|
5389
5597
|
issueId: Schema.String,
|
|
5598
|
+
/** The tracker's title, or `null` when no tracker answered for this issue. */
|
|
5599
|
+
title: Schema.NullOr(Schema.String),
|
|
5390
5600
|
state: IssueState,
|
|
5391
5601
|
attention: Schema.optional(IssueAttention),
|
|
5392
5602
|
pr: Schema.optional(DerivedPrState),
|
|
5603
|
+
/** Set when no configured tracker answered: the state is a guess, not a fact. */
|
|
5604
|
+
trackerUnknown: Schema.optional(Schema.Literal(true)),
|
|
5605
|
+
/** Live agent panes on this issue. `working` with 0 means nobody is driving it. */
|
|
5606
|
+
liveAgents: Schema.Number,
|
|
5607
|
+
/** The loop named this id in its newest tick marker's in-flight list. */
|
|
5608
|
+
inTick: Schema.Boolean,
|
|
5393
5609
|
lastJournal: Schema.NullOr(FlywheelJournalSummary)
|
|
5394
5610
|
});
|
|
5395
5611
|
const FlywheelOrderBookSummary = Schema.Struct({
|
|
@@ -5406,6 +5622,13 @@ const FlywheelDerivedStatus = Schema.Struct({
|
|
|
5406
5622
|
freshness: Schema.NullOr(FlywheelFreshness),
|
|
5407
5623
|
policies: FlywheelPolicies,
|
|
5408
5624
|
inFlight: Schema.Array(FlywheelInFlightRow),
|
|
5625
|
+
/** Every live agent on an in-flight issue, by issue then role. */
|
|
5626
|
+
agents: Schema.Array(FlywheelAgentSummary),
|
|
5627
|
+
/**
|
|
5628
|
+
* Which list the header counts: `tick` when a running loop named its own
|
|
5629
|
+
* in-flight ids, `census` when the rows are just the feature workspaces.
|
|
5630
|
+
*/
|
|
5631
|
+
inFlightSource: Schema.Literals(["tick", "census"]),
|
|
5409
5632
|
orderBook: Schema.NullOr(FlywheelOrderBookSummary),
|
|
5410
5633
|
projectRoot: Schema.String,
|
|
5411
5634
|
generatedAt: Schema.String
|
|
@@ -5471,7 +5694,8 @@ const CONTEXT_PREVIEW_HARNESSES = [
|
|
|
5471
5694
|
"acp",
|
|
5472
5695
|
"kimi-code",
|
|
5473
5696
|
"opencode",
|
|
5474
|
-
"muse"
|
|
5697
|
+
"muse",
|
|
5698
|
+
"prime-agent"
|
|
5475
5699
|
];
|
|
5476
5700
|
const ContextLayerKind = Schema.Literals(CONTEXT_LAYER_KINDS);
|
|
5477
5701
|
const ContextPreviewHarness = Schema.Literals(CONTEXT_PREVIEW_HARNESSES);
|
|
@@ -5581,6 +5805,7 @@ const ContextHarnessPreviews = Schema.Struct({
|
|
|
5581
5805
|
"kimi-code": Schema.String,
|
|
5582
5806
|
opencode: Schema.optional(Schema.String),
|
|
5583
5807
|
muse: Schema.String,
|
|
5808
|
+
"prime-agent": Schema.String,
|
|
5584
5809
|
fullPrompt: Schema.String
|
|
5585
5810
|
});
|
|
5586
5811
|
const ContextPreviewDiagnostic = Schema.Struct({
|
|
@@ -5639,6 +5864,7 @@ const ArtifactAgentHarness = Schema.Literals([
|
|
|
5639
5864
|
"kimi-code",
|
|
5640
5865
|
"opencode",
|
|
5641
5866
|
"muse",
|
|
5867
|
+
"prime-agent",
|
|
5642
5868
|
"user"
|
|
5643
5869
|
]);
|
|
5644
5870
|
const ArtifactLifecycleState = Schema.Literals([
|
|
@@ -5816,7 +6042,8 @@ const CLAUDE_CODE_BEHAVIOR = {
|
|
|
5816
6042
|
usesCodexHome: false,
|
|
5817
6043
|
injectsPromptTimeMemory: false,
|
|
5818
6044
|
workAgentMode: "claude-code",
|
|
5819
|
-
readyTimeoutSeconds: 30
|
|
6045
|
+
readyTimeoutSeconds: 30,
|
|
6046
|
+
steerKind: "send-now-keys"
|
|
5820
6047
|
};
|
|
5821
6048
|
const OHMYPI_BEHAVIOR = {
|
|
5822
6049
|
displayName: "Pi",
|
|
@@ -5838,7 +6065,14 @@ const OHMYPI_BEHAVIOR = {
|
|
|
5838
6065
|
usesCodexHome: false,
|
|
5839
6066
|
injectsPromptTimeMemory: true,
|
|
5840
6067
|
workAgentMode: "ohmypi-rpc",
|
|
5841
|
-
readyTimeoutSeconds: 120
|
|
6068
|
+
readyTimeoutSeconds: 120,
|
|
6069
|
+
steerKind: "control-channel",
|
|
6070
|
+
effortLevels: [
|
|
6071
|
+
"low",
|
|
6072
|
+
"medium",
|
|
6073
|
+
"high",
|
|
6074
|
+
"xhigh"
|
|
6075
|
+
]
|
|
5842
6076
|
};
|
|
5843
6077
|
const CODEX_BEHAVIOR = {
|
|
5844
6078
|
displayName: "Codex",
|
|
@@ -5860,7 +6094,8 @@ const CODEX_BEHAVIOR = {
|
|
|
5860
6094
|
usesCodexHome: true,
|
|
5861
6095
|
injectsPromptTimeMemory: false,
|
|
5862
6096
|
workAgentMode: "codex-work-tui",
|
|
5863
|
-
readyTimeoutSeconds: 30
|
|
6097
|
+
readyTimeoutSeconds: 30,
|
|
6098
|
+
steerKind: null
|
|
5864
6099
|
};
|
|
5865
6100
|
const ACP_BEHAVIOR = {
|
|
5866
6101
|
displayName: "ACP",
|
|
@@ -5882,7 +6117,8 @@ const ACP_BEHAVIOR = {
|
|
|
5882
6117
|
usesCodexHome: false,
|
|
5883
6118
|
injectsPromptTimeMemory: false,
|
|
5884
6119
|
workAgentMode: "acp-host",
|
|
5885
|
-
readyTimeoutSeconds: 30
|
|
6120
|
+
readyTimeoutSeconds: 30,
|
|
6121
|
+
steerKind: null
|
|
5886
6122
|
};
|
|
5887
6123
|
const KIMI_CODE_BEHAVIOR = {
|
|
5888
6124
|
displayName: "Kimi Code",
|
|
@@ -5904,7 +6140,8 @@ const KIMI_CODE_BEHAVIOR = {
|
|
|
5904
6140
|
usesCodexHome: false,
|
|
5905
6141
|
injectsPromptTimeMemory: false,
|
|
5906
6142
|
workAgentMode: "kimi-code-tui",
|
|
5907
|
-
readyTimeoutSeconds: 60
|
|
6143
|
+
readyTimeoutSeconds: 60,
|
|
6144
|
+
steerKind: null
|
|
5908
6145
|
};
|
|
5909
6146
|
const OPENCODE_BEHAVIOR = {
|
|
5910
6147
|
...ACP_BEHAVIOR,
|
|
@@ -5933,7 +6170,37 @@ const MUSE_BEHAVIOR = {
|
|
|
5933
6170
|
usesCodexHome: false,
|
|
5934
6171
|
injectsPromptTimeMemory: false,
|
|
5935
6172
|
workAgentMode: "muse-tui",
|
|
5936
|
-
readyTimeoutSeconds: 60
|
|
6173
|
+
readyTimeoutSeconds: 60,
|
|
6174
|
+
steerKind: null,
|
|
6175
|
+
effortLevels: [
|
|
6176
|
+
"low",
|
|
6177
|
+
"medium",
|
|
6178
|
+
"high",
|
|
6179
|
+
"xhigh"
|
|
6180
|
+
]
|
|
6181
|
+
};
|
|
6182
|
+
const PRIME_AGENT_BEHAVIOR = {
|
|
6183
|
+
displayName: "Prime Agent",
|
|
6184
|
+
nativeCommands: [],
|
|
6185
|
+
executableName: "prime-agent",
|
|
6186
|
+
processNames: ["prime-agent"],
|
|
6187
|
+
launchCommandKind: "prime-agent-host",
|
|
6188
|
+
deliveryKind: "prime-agent-host-rpc",
|
|
6189
|
+
readinessKind: "prime-agent-host-ready",
|
|
6190
|
+
transcriptKind: "prime-agent-jsonl",
|
|
6191
|
+
sessionIdSource: "prime-agent-session-id",
|
|
6192
|
+
contextLayerKind: "prime-agent",
|
|
6193
|
+
feedKind: "prime_agent",
|
|
6194
|
+
supportsPtySupervisor: false,
|
|
6195
|
+
supportsChannelsBridge: false,
|
|
6196
|
+
supportsConversationStreaming: true,
|
|
6197
|
+
supportsPatchProjection: false,
|
|
6198
|
+
usesRpcFifo: false,
|
|
6199
|
+
usesCodexHome: false,
|
|
6200
|
+
injectsPromptTimeMemory: false,
|
|
6201
|
+
workAgentMode: "prime-agent-host",
|
|
6202
|
+
readyTimeoutSeconds: 60,
|
|
6203
|
+
steerKind: null
|
|
5937
6204
|
};
|
|
5938
6205
|
const BEHAVIORS = {
|
|
5939
6206
|
"opencode": OPENCODE_BEHAVIOR,
|
|
@@ -5942,7 +6209,8 @@ const BEHAVIORS = {
|
|
|
5942
6209
|
codex: CODEX_BEHAVIOR,
|
|
5943
6210
|
acp: ACP_BEHAVIOR,
|
|
5944
6211
|
"kimi-code": KIMI_CODE_BEHAVIOR,
|
|
5945
|
-
muse: MUSE_BEHAVIOR
|
|
6212
|
+
muse: MUSE_BEHAVIOR,
|
|
6213
|
+
"prime-agent": PRIME_AGENT_BEHAVIOR
|
|
5946
6214
|
};
|
|
5947
6215
|
function getHarnessBehavior(harness) {
|
|
5948
6216
|
if (harness === "ohmypi" || harness === "pi") return OHMYPI_BEHAVIOR;
|
|
@@ -5951,6 +6219,7 @@ function getHarnessBehavior(harness) {
|
|
|
5951
6219
|
if (harness === "acp") return ACP_BEHAVIOR;
|
|
5952
6220
|
if (harness === "kimi-code") return KIMI_CODE_BEHAVIOR;
|
|
5953
6221
|
if (harness === "muse") return MUSE_BEHAVIOR;
|
|
6222
|
+
if (harness === "prime-agent") return PRIME_AGENT_BEHAVIOR;
|
|
5954
6223
|
return CLAUDE_CODE_BEHAVIOR;
|
|
5955
6224
|
}
|
|
5956
6225
|
function getRuntimeBehavior(runtime) {
|
|
@@ -6065,7 +6334,10 @@ const TELEMETRY_EVENT_NAMES = [
|
|
|
6065
6334
|
"agent_question_answered",
|
|
6066
6335
|
"server_boot",
|
|
6067
6336
|
"cli_command_run",
|
|
6068
|
-
"pipeline_stage_changed"
|
|
6337
|
+
"pipeline_stage_changed",
|
|
6338
|
+
"github_quota_sample",
|
|
6339
|
+
"github_rate_limited",
|
|
6340
|
+
"instance_heartbeat"
|
|
6069
6341
|
];
|
|
6070
6342
|
const TELEMETRY_CLI_VERBS = [
|
|
6071
6343
|
"abort",
|
|
@@ -6182,6 +6454,19 @@ const TELEMETRY_PROPERTY_DOMAINS = {
|
|
|
6182
6454
|
"handoff",
|
|
6183
6455
|
"plain"
|
|
6184
6456
|
],
|
|
6457
|
+
github_caller: [
|
|
6458
|
+
"pipeline_membership",
|
|
6459
|
+
"pr_cache",
|
|
6460
|
+
"pr_sync",
|
|
6461
|
+
"ci_repair",
|
|
6462
|
+
"issue_poller",
|
|
6463
|
+
"close_out",
|
|
6464
|
+
"tracker_client",
|
|
6465
|
+
"app_rest",
|
|
6466
|
+
"quota_sampler",
|
|
6467
|
+
"agent",
|
|
6468
|
+
"other"
|
|
6469
|
+
],
|
|
6185
6470
|
harness: [
|
|
6186
6471
|
"claude-code",
|
|
6187
6472
|
"ohmypi",
|
|
@@ -6189,7 +6474,8 @@ const TELEMETRY_PROPERTY_DOMAINS = {
|
|
|
6189
6474
|
"acp",
|
|
6190
6475
|
"kimi-code",
|
|
6191
6476
|
"opencode",
|
|
6192
|
-
"muse"
|
|
6477
|
+
"muse",
|
|
6478
|
+
"prime-agent"
|
|
6193
6479
|
],
|
|
6194
6480
|
merge_kind: ["pipeline"],
|
|
6195
6481
|
model_family: [
|
|
@@ -6213,7 +6499,26 @@ const TELEMETRY_PROPERTY_DOMAINS = {
|
|
|
6213
6499
|
"clone",
|
|
6214
6500
|
"existing",
|
|
6215
6501
|
"new"
|
|
6216
|
-
]
|
|
6502
|
+
],
|
|
6503
|
+
quota_points_bucket: [
|
|
6504
|
+
"0",
|
|
6505
|
+
"1-49",
|
|
6506
|
+
"50-199",
|
|
6507
|
+
"200-499",
|
|
6508
|
+
"500-999",
|
|
6509
|
+
"1000-2499",
|
|
6510
|
+
"2500+"
|
|
6511
|
+
],
|
|
6512
|
+
quota_remaining_bucket: [
|
|
6513
|
+
"0",
|
|
6514
|
+
"1-99",
|
|
6515
|
+
"100-499",
|
|
6516
|
+
"500-999",
|
|
6517
|
+
"1000-2499",
|
|
6518
|
+
"2500+",
|
|
6519
|
+
"unknown"
|
|
6520
|
+
],
|
|
6521
|
+
rate_limit_kind: ["primary", "secondary"]
|
|
6217
6522
|
};
|
|
6218
6523
|
const TELEMETRY_EVENT_CATALOG = {
|
|
6219
6524
|
dashboard_tab_viewed: { tab: "dashboard_tab" },
|
|
@@ -6256,8 +6561,65 @@ const TELEMETRY_EVENT_CATALOG = {
|
|
|
6256
6561
|
stage: "pipeline_stage",
|
|
6257
6562
|
harness: "harness",
|
|
6258
6563
|
model: "model_family"
|
|
6564
|
+
},
|
|
6565
|
+
github_quota_sample: {
|
|
6566
|
+
graphql_pipeline_membership: "quota_points_bucket",
|
|
6567
|
+
rest_pipeline_membership: "quota_points_bucket",
|
|
6568
|
+
graphql_pr_cache: "quota_points_bucket",
|
|
6569
|
+
rest_pr_cache: "quota_points_bucket",
|
|
6570
|
+
graphql_pr_sync: "quota_points_bucket",
|
|
6571
|
+
rest_pr_sync: "quota_points_bucket",
|
|
6572
|
+
graphql_ci_repair: "quota_points_bucket",
|
|
6573
|
+
rest_ci_repair: "quota_points_bucket",
|
|
6574
|
+
graphql_issue_poller: "quota_points_bucket",
|
|
6575
|
+
rest_issue_poller: "quota_points_bucket",
|
|
6576
|
+
graphql_close_out: "quota_points_bucket",
|
|
6577
|
+
rest_close_out: "quota_points_bucket",
|
|
6578
|
+
graphql_tracker_client: "quota_points_bucket",
|
|
6579
|
+
rest_tracker_client: "quota_points_bucket",
|
|
6580
|
+
graphql_app_rest: "quota_points_bucket",
|
|
6581
|
+
rest_app_rest: "quota_points_bucket",
|
|
6582
|
+
graphql_agent: "quota_points_bucket",
|
|
6583
|
+
rest_agent: "quota_points_bucket",
|
|
6584
|
+
graphql_other: "quota_points_bucket",
|
|
6585
|
+
rest_other: "quota_points_bucket",
|
|
6586
|
+
graphql_unattributed: "quota_points_bucket",
|
|
6587
|
+
min_remaining_graphql: "quota_remaining_bucket",
|
|
6588
|
+
min_remaining_rest: "quota_remaining_bucket",
|
|
6589
|
+
primary_limit_errors: "count_bucket",
|
|
6590
|
+
secondary_limit_errors: "count_bucket"
|
|
6591
|
+
},
|
|
6592
|
+
github_rate_limited: {
|
|
6593
|
+
caller: "github_caller",
|
|
6594
|
+
kind: "rate_limit_kind",
|
|
6595
|
+
own_usage_low: "boolean"
|
|
6596
|
+
},
|
|
6597
|
+
instance_heartbeat: {
|
|
6598
|
+
project_count: "count_bucket",
|
|
6599
|
+
active_agent_count: "count_bucket",
|
|
6600
|
+
dashboard_running: "boolean"
|
|
6259
6601
|
}
|
|
6260
6602
|
};
|
|
6603
|
+
/** PAN-4264: GitHub quota points as a coarse bucket (raw counts are never sent). */
|
|
6604
|
+
function bucketQuotaPoints(points) {
|
|
6605
|
+
if (!(points > 0)) return "0";
|
|
6606
|
+
if (points < 50) return "1-49";
|
|
6607
|
+
if (points < 200) return "50-199";
|
|
6608
|
+
if (points < 500) return "200-499";
|
|
6609
|
+
if (points < 1e3) return "500-999";
|
|
6610
|
+
if (points < 2500) return "1000-2499";
|
|
6611
|
+
return "2500+";
|
|
6612
|
+
}
|
|
6613
|
+
/** PAN-4264: GitHub quota remaining as a coarse bucket; `unknown` without a sample. */
|
|
6614
|
+
function bucketQuotaRemaining(remaining) {
|
|
6615
|
+
if (remaining === void 0 || !Number.isFinite(remaining)) return "unknown";
|
|
6616
|
+
if (remaining <= 0) return "0";
|
|
6617
|
+
if (remaining < 100) return "1-99";
|
|
6618
|
+
if (remaining < 500) return "100-499";
|
|
6619
|
+
if (remaining < 1e3) return "500-999";
|
|
6620
|
+
if (remaining < 2500) return "1000-2499";
|
|
6621
|
+
return "2500+";
|
|
6622
|
+
}
|
|
6261
6623
|
//#endregion
|
|
6262
6624
|
//#region src/composer-commands.generated.ts
|
|
6263
6625
|
const COMPOSER_COMMAND_MANIFEST = [
|
|
@@ -6485,13 +6847,65 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6485
6847
|
"id": "pan-skills",
|
|
6486
6848
|
"path": ["skills"],
|
|
6487
6849
|
"display": "/pan skills",
|
|
6488
|
-
"description": "List and
|
|
6850
|
+
"description": "List skills and set per-level on/off overrides",
|
|
6489
6851
|
"args": [],
|
|
6852
|
+
"options": [],
|
|
6853
|
+
"aliases": [],
|
|
6854
|
+
"category": "Core"
|
|
6855
|
+
},
|
|
6856
|
+
{
|
|
6857
|
+
"id": "pan-skills-list",
|
|
6858
|
+
"path": ["skills", "list"],
|
|
6859
|
+
"display": "/pan skills list",
|
|
6860
|
+
"description": "List skills with effective on/off state and its source",
|
|
6861
|
+
"args": [],
|
|
6862
|
+
"options": [
|
|
6863
|
+
{
|
|
6864
|
+
"flags": "--project <key>",
|
|
6865
|
+
"description": "Resolve for a project",
|
|
6866
|
+
"required": true,
|
|
6867
|
+
"valueHint": "key"
|
|
6868
|
+
},
|
|
6869
|
+
{
|
|
6870
|
+
"flags": "--issue <id>",
|
|
6871
|
+
"description": "Resolve for an issue",
|
|
6872
|
+
"required": true,
|
|
6873
|
+
"valueHint": "id"
|
|
6874
|
+
},
|
|
6875
|
+
{
|
|
6876
|
+
"flags": "--json",
|
|
6877
|
+
"description": "Output as JSON",
|
|
6878
|
+
"required": false,
|
|
6879
|
+
"valueHint": null
|
|
6880
|
+
}
|
|
6881
|
+
],
|
|
6882
|
+
"aliases": [],
|
|
6883
|
+
"category": "Core"
|
|
6884
|
+
},
|
|
6885
|
+
{
|
|
6886
|
+
"id": "pan-skills-set",
|
|
6887
|
+
"path": ["skills", "set"],
|
|
6888
|
+
"display": "/pan skills set",
|
|
6889
|
+
"description": "Set a skill on, off, or inherit (global unless --project/--issue)",
|
|
6890
|
+
"args": [{
|
|
6891
|
+
"name": "skill",
|
|
6892
|
+
"required": true,
|
|
6893
|
+
"variadic": false
|
|
6894
|
+
}, {
|
|
6895
|
+
"name": "state",
|
|
6896
|
+
"required": true,
|
|
6897
|
+
"variadic": false
|
|
6898
|
+
}],
|
|
6490
6899
|
"options": [{
|
|
6491
|
-
"flags": "--
|
|
6492
|
-
"description": "
|
|
6493
|
-
"required":
|
|
6494
|
-
"valueHint":
|
|
6900
|
+
"flags": "--project <key>",
|
|
6901
|
+
"description": "Project override",
|
|
6902
|
+
"required": true,
|
|
6903
|
+
"valueHint": "key"
|
|
6904
|
+
}, {
|
|
6905
|
+
"flags": "--issue <id>",
|
|
6906
|
+
"description": "Issue override",
|
|
6907
|
+
"required": true,
|
|
6908
|
+
"valueHint": "id"
|
|
6495
6909
|
}],
|
|
6496
6910
|
"aliases": [],
|
|
6497
6911
|
"category": "Core"
|
|
@@ -6748,7 +7162,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6748
7162
|
},
|
|
6749
7163
|
{
|
|
6750
7164
|
"flags": "--harness <harness>",
|
|
6751
|
-
"description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code | opencode | muse (defaults to role/provider settings)",
|
|
7165
|
+
"description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code | opencode | muse | prime-agent (defaults to role/provider settings)",
|
|
6752
7166
|
"required": true,
|
|
6753
7167
|
"valueHint": "harness"
|
|
6754
7168
|
},
|
|
@@ -6848,7 +7262,17 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6848
7262
|
"required": true,
|
|
6849
7263
|
"variadic": false
|
|
6850
7264
|
}],
|
|
6851
|
-
"options": [
|
|
7265
|
+
"options": [{
|
|
7266
|
+
"flags": "--force",
|
|
7267
|
+
"description": "Deliver even to a critic or verifier lane that already filed its verdict",
|
|
7268
|
+
"required": false,
|
|
7269
|
+
"valueHint": null
|
|
7270
|
+
}, {
|
|
7271
|
+
"flags": "--steer",
|
|
7272
|
+
"description": "Interrupt the running turn and send now (Claude Code send-now; Ctrl+X Ctrl+S)",
|
|
7273
|
+
"required": false,
|
|
7274
|
+
"valueHint": null
|
|
7275
|
+
}],
|
|
6852
7276
|
"aliases": [],
|
|
6853
7277
|
"category": "Lifecycle"
|
|
6854
7278
|
},
|
|
@@ -7427,7 +7851,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7427
7851
|
},
|
|
7428
7852
|
{
|
|
7429
7853
|
"flags": "--harness <harness>",
|
|
7430
|
-
"description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code | opencode | muse (defaults to role/provider settings)",
|
|
7854
|
+
"description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code | opencode | muse | prime-agent (defaults to role/provider settings)",
|
|
7431
7855
|
"required": true,
|
|
7432
7856
|
"valueHint": "harness"
|
|
7433
7857
|
},
|
|
@@ -7505,7 +7929,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7505
7929
|
},
|
|
7506
7930
|
{
|
|
7507
7931
|
"flags": "--skip-freshness",
|
|
7508
|
-
"description": "Bypass the plan-freshness preflight and spawn even if the plan names files
|
|
7932
|
+
"description": "Bypass the plan-freshness preflight and spawn even if the plan names files deleted since it was written",
|
|
7509
7933
|
"required": false,
|
|
7510
7934
|
"valueHint": null
|
|
7511
7935
|
}
|
|
@@ -7532,7 +7956,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7532
7956
|
},
|
|
7533
7957
|
{
|
|
7534
7958
|
"flags": "--harness <harness>",
|
|
7535
|
-
"description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code | opencode | muse (defaults to role/provider settings)",
|
|
7959
|
+
"description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code | opencode | muse | prime-agent (defaults to role/provider settings)",
|
|
7536
7960
|
"required": true,
|
|
7537
7961
|
"valueHint": "harness"
|
|
7538
7962
|
},
|
|
@@ -10629,6 +11053,20 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10629
11053
|
"aliases": [],
|
|
10630
11054
|
"category": "Admin"
|
|
10631
11055
|
},
|
|
11056
|
+
{
|
|
11057
|
+
"id": "pan-admin-config-tiers",
|
|
11058
|
+
"path": [
|
|
11059
|
+
"admin",
|
|
11060
|
+
"config",
|
|
11061
|
+
"tiers"
|
|
11062
|
+
],
|
|
11063
|
+
"display": "/pan admin config tiers",
|
|
11064
|
+
"description": "Show the effective model per tiered_execution tier and whether it overrides roles.work",
|
|
11065
|
+
"args": [],
|
|
11066
|
+
"options": [],
|
|
11067
|
+
"aliases": [],
|
|
11068
|
+
"category": "Admin"
|
|
11069
|
+
},
|
|
10632
11070
|
{
|
|
10633
11071
|
"id": "pan-admin-hooks",
|
|
10634
11072
|
"path": ["admin", "hooks"],
|
|
@@ -11502,6 +11940,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
11502
11940
|
"description": "Skip Herdr terminal backend install/verify (tmux-only hosts)",
|
|
11503
11941
|
"required": false,
|
|
11504
11942
|
"valueHint": null
|
|
11943
|
+
},
|
|
11944
|
+
{
|
|
11945
|
+
"flags": "--skip-ollama",
|
|
11946
|
+
"description": "Skip Ollama local-model detection and optional gemma4:12b pull",
|
|
11947
|
+
"required": false,
|
|
11948
|
+
"valueHint": null
|
|
11505
11949
|
}
|
|
11506
11950
|
],
|
|
11507
11951
|
"aliases": [],
|
|
@@ -11957,6 +12401,333 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
11957
12401
|
"aliases": [],
|
|
11958
12402
|
"category": "CLI"
|
|
11959
12403
|
},
|
|
12404
|
+
{
|
|
12405
|
+
"id": "pan-lane",
|
|
12406
|
+
"path": ["lane"],
|
|
12407
|
+
"display": "/pan lane",
|
|
12408
|
+
"description": "Gauntlet lanes: launch, list, show, wait on, report from, stop and reap lane conversations",
|
|
12409
|
+
"args": [],
|
|
12410
|
+
"options": [],
|
|
12411
|
+
"aliases": [],
|
|
12412
|
+
"category": "CLI"
|
|
12413
|
+
},
|
|
12414
|
+
{
|
|
12415
|
+
"id": "pan-lane-start",
|
|
12416
|
+
"path": ["lane", "start"],
|
|
12417
|
+
"display": "/pan lane start",
|
|
12418
|
+
"description": "Launch a lane conversation under the calling conversation (any harness)",
|
|
12419
|
+
"args": [],
|
|
12420
|
+
"options": [
|
|
12421
|
+
{
|
|
12422
|
+
"flags": "--key <key>",
|
|
12423
|
+
"description": "Lane key inside the run (required unless --for)",
|
|
12424
|
+
"required": true,
|
|
12425
|
+
"valueHint": "key"
|
|
12426
|
+
},
|
|
12427
|
+
{
|
|
12428
|
+
"flags": "--for <builder-key>",
|
|
12429
|
+
"description": "Critic (required) or verifier: the builder lane judged; --key defaults to it",
|
|
12430
|
+
"required": true,
|
|
12431
|
+
"valueHint": "builder-key"
|
|
12432
|
+
},
|
|
12433
|
+
{
|
|
12434
|
+
"flags": "--role <role>",
|
|
12435
|
+
"description": "builder | critic | verifier | play | orchestrator (required)",
|
|
12436
|
+
"required": true,
|
|
12437
|
+
"valueHint": "role"
|
|
12438
|
+
},
|
|
12439
|
+
{
|
|
12440
|
+
"flags": "--brief <file>",
|
|
12441
|
+
"description": "The brief, from a file",
|
|
12442
|
+
"required": true,
|
|
12443
|
+
"valueHint": "file"
|
|
12444
|
+
},
|
|
12445
|
+
{
|
|
12446
|
+
"flags": "--prompt <text>",
|
|
12447
|
+
"description": "The brief, inline",
|
|
12448
|
+
"required": true,
|
|
12449
|
+
"valueHint": "text"
|
|
12450
|
+
},
|
|
12451
|
+
{
|
|
12452
|
+
"flags": "--run <key>",
|
|
12453
|
+
"description": "Run key (required from a root; inherited inside an orchestrator lane)",
|
|
12454
|
+
"required": true,
|
|
12455
|
+
"valueHint": "key"
|
|
12456
|
+
},
|
|
12457
|
+
{
|
|
12458
|
+
"flags": "--parent <conv>",
|
|
12459
|
+
"description": "Launching conversation (default: $OVERDECK_CONVERSATION)",
|
|
12460
|
+
"required": true,
|
|
12461
|
+
"valueHint": "conv"
|
|
12462
|
+
},
|
|
12463
|
+
{
|
|
12464
|
+
"flags": "--project <key>",
|
|
12465
|
+
"description": "Project (default: the parent's project)",
|
|
12466
|
+
"required": true,
|
|
12467
|
+
"valueHint": "key"
|
|
12468
|
+
},
|
|
12469
|
+
{
|
|
12470
|
+
"flags": "--model <model>",
|
|
12471
|
+
"description": "Model (default: projects.<key>.gauntlet.roles.<role>.model)",
|
|
12472
|
+
"required": true,
|
|
12473
|
+
"valueHint": "model"
|
|
12474
|
+
},
|
|
12475
|
+
{
|
|
12476
|
+
"flags": "--harness <harness>",
|
|
12477
|
+
"description": "Harness (default: role config, else routed from the model)",
|
|
12478
|
+
"required": true,
|
|
12479
|
+
"valueHint": "harness"
|
|
12480
|
+
},
|
|
12481
|
+
{
|
|
12482
|
+
"flags": "--effort <effort>",
|
|
12483
|
+
"description": "low | medium | high",
|
|
12484
|
+
"required": true,
|
|
12485
|
+
"valueHint": "effort"
|
|
12486
|
+
},
|
|
12487
|
+
{
|
|
12488
|
+
"flags": "--title <title>",
|
|
12489
|
+
"description": "Conversation title (default: <run> <key> · <role>)",
|
|
12490
|
+
"required": true,
|
|
12491
|
+
"valueHint": "title"
|
|
12492
|
+
},
|
|
12493
|
+
{
|
|
12494
|
+
"flags": "--branch <branch>",
|
|
12495
|
+
"description": "Builder branch (default: <run>/<key>, <run>/<key>-i<n> after)",
|
|
12496
|
+
"required": true,
|
|
12497
|
+
"valueHint": "branch"
|
|
12498
|
+
},
|
|
12499
|
+
{
|
|
12500
|
+
"flags": "--from <ref>",
|
|
12501
|
+
"description": "Base ref for a new builder branch",
|
|
12502
|
+
"required": true,
|
|
12503
|
+
"valueHint": "ref"
|
|
12504
|
+
},
|
|
12505
|
+
{
|
|
12506
|
+
"flags": "--at <ref>",
|
|
12507
|
+
"description": "Commit a critic or verifier judges (default with --for: the builder's newest done head)",
|
|
12508
|
+
"required": true,
|
|
12509
|
+
"valueHint": "ref"
|
|
12510
|
+
},
|
|
12511
|
+
{
|
|
12512
|
+
"flags": "--reuse",
|
|
12513
|
+
"description": "Continue in the directory of the latest earlier lane with the same run, key and role",
|
|
12514
|
+
"required": false,
|
|
12515
|
+
"valueHint": null
|
|
12516
|
+
},
|
|
12517
|
+
{
|
|
12518
|
+
"flags": "--replace",
|
|
12519
|
+
"description": "Stop the live lane with the same run, key and role first",
|
|
12520
|
+
"required": false,
|
|
12521
|
+
"valueHint": null
|
|
12522
|
+
},
|
|
12523
|
+
{
|
|
12524
|
+
"flags": "--no-wait",
|
|
12525
|
+
"description": "Return without waiting for the lane to start",
|
|
12526
|
+
"required": false,
|
|
12527
|
+
"valueHint": null
|
|
12528
|
+
},
|
|
12529
|
+
{
|
|
12530
|
+
"flags": "--json",
|
|
12531
|
+
"description": "Print the launch result as JSON",
|
|
12532
|
+
"required": false,
|
|
12533
|
+
"valueHint": null
|
|
12534
|
+
}
|
|
12535
|
+
],
|
|
12536
|
+
"aliases": [],
|
|
12537
|
+
"category": "CLI"
|
|
12538
|
+
},
|
|
12539
|
+
{
|
|
12540
|
+
"id": "pan-lane-list",
|
|
12541
|
+
"path": ["lane", "list"],
|
|
12542
|
+
"display": "/pan lane list",
|
|
12543
|
+
"description": "List lanes with their activity, newest report, git facts and cost",
|
|
12544
|
+
"args": [],
|
|
12545
|
+
"options": [
|
|
12546
|
+
{
|
|
12547
|
+
"flags": "--run <key>",
|
|
12548
|
+
"description": "Only this run's lanes",
|
|
12549
|
+
"required": true,
|
|
12550
|
+
"valueHint": "key"
|
|
12551
|
+
},
|
|
12552
|
+
{
|
|
12553
|
+
"flags": "--parent <conv>",
|
|
12554
|
+
"description": "Only lanes launched by this conversation",
|
|
12555
|
+
"required": true,
|
|
12556
|
+
"valueHint": "conv"
|
|
12557
|
+
},
|
|
12558
|
+
{
|
|
12559
|
+
"flags": "--json",
|
|
12560
|
+
"description": "Print JSON",
|
|
12561
|
+
"required": false,
|
|
12562
|
+
"valueHint": null
|
|
12563
|
+
}
|
|
12564
|
+
],
|
|
12565
|
+
"aliases": [],
|
|
12566
|
+
"category": "CLI"
|
|
12567
|
+
},
|
|
12568
|
+
{
|
|
12569
|
+
"id": "pan-lane-show",
|
|
12570
|
+
"path": ["lane", "show"],
|
|
12571
|
+
"display": "/pan lane show",
|
|
12572
|
+
"description": "Print the builder → critic chain of a run and key, then one line per lane",
|
|
12573
|
+
"args": [{
|
|
12574
|
+
"name": "lane",
|
|
12575
|
+
"required": false,
|
|
12576
|
+
"variadic": false
|
|
12577
|
+
}],
|
|
12578
|
+
"options": [
|
|
12579
|
+
{
|
|
12580
|
+
"flags": "--run <key>",
|
|
12581
|
+
"description": "Run key (with --key)",
|
|
12582
|
+
"required": true,
|
|
12583
|
+
"valueHint": "key"
|
|
12584
|
+
},
|
|
12585
|
+
{
|
|
12586
|
+
"flags": "--key <key>",
|
|
12587
|
+
"description": "Lane key (with --run)",
|
|
12588
|
+
"required": true,
|
|
12589
|
+
"valueHint": "key"
|
|
12590
|
+
},
|
|
12591
|
+
{
|
|
12592
|
+
"flags": "--json",
|
|
12593
|
+
"description": "Print { run, key, steps }",
|
|
12594
|
+
"required": false,
|
|
12595
|
+
"valueHint": null
|
|
12596
|
+
}
|
|
12597
|
+
],
|
|
12598
|
+
"aliases": [],
|
|
12599
|
+
"category": "CLI"
|
|
12600
|
+
},
|
|
12601
|
+
{
|
|
12602
|
+
"id": "pan-lane-wait",
|
|
12603
|
+
"path": ["lane", "wait"],
|
|
12604
|
+
"display": "/pan lane wait",
|
|
12605
|
+
"description": "Wait for a lane report (exit 0 done, 4 blocked/failed, 2 no report, 3 timeout, 1 error)",
|
|
12606
|
+
"args": [{
|
|
12607
|
+
"name": "lane",
|
|
12608
|
+
"required": false,
|
|
12609
|
+
"variadic": false
|
|
12610
|
+
}],
|
|
12611
|
+
"options": [
|
|
12612
|
+
{
|
|
12613
|
+
"flags": "--run <key>",
|
|
12614
|
+
"description": "Wait for the next report of any lane in this run",
|
|
12615
|
+
"required": true,
|
|
12616
|
+
"valueHint": "key"
|
|
12617
|
+
},
|
|
12618
|
+
{
|
|
12619
|
+
"flags": "--parent <conv>",
|
|
12620
|
+
"description": "Wait for the next report of any lane launched by this conversation",
|
|
12621
|
+
"required": true,
|
|
12622
|
+
"valueHint": "conv"
|
|
12623
|
+
},
|
|
12624
|
+
{
|
|
12625
|
+
"flags": "--after <seq-or-cursor>",
|
|
12626
|
+
"description": "Report seq for one lane; cursor <atMs>.<name>.<seq> for a run or parent",
|
|
12627
|
+
"required": true,
|
|
12628
|
+
"valueHint": "seq-or-cursor"
|
|
12629
|
+
},
|
|
12630
|
+
{
|
|
12631
|
+
"flags": "--timeout <seconds>",
|
|
12632
|
+
"description": "Stop waiting after this many seconds (exit 3)",
|
|
12633
|
+
"required": true,
|
|
12634
|
+
"valueHint": "seconds"
|
|
12635
|
+
}
|
|
12636
|
+
],
|
|
12637
|
+
"aliases": [],
|
|
12638
|
+
"category": "CLI"
|
|
12639
|
+
},
|
|
12640
|
+
{
|
|
12641
|
+
"id": "pan-lane-report",
|
|
12642
|
+
"path": ["lane", "report"],
|
|
12643
|
+
"display": "/pan lane report",
|
|
12644
|
+
"description": "Record this lane's report (run inside the lane)",
|
|
12645
|
+
"args": [],
|
|
12646
|
+
"options": [
|
|
12647
|
+
{
|
|
12648
|
+
"flags": "--file <path>",
|
|
12649
|
+
"description": "Read the Markdown report from a file",
|
|
12650
|
+
"required": true,
|
|
12651
|
+
"valueHint": "path"
|
|
12652
|
+
},
|
|
12653
|
+
{
|
|
12654
|
+
"flags": "--stdin",
|
|
12655
|
+
"description": "Read the Markdown report from stdin",
|
|
12656
|
+
"required": false,
|
|
12657
|
+
"valueHint": null
|
|
12658
|
+
},
|
|
12659
|
+
{
|
|
12660
|
+
"flags": "--status <status>",
|
|
12661
|
+
"description": "done | blocked | failed (default: done)",
|
|
12662
|
+
"required": true,
|
|
12663
|
+
"valueHint": "status"
|
|
12664
|
+
},
|
|
12665
|
+
{
|
|
12666
|
+
"flags": "--allow-unpushed",
|
|
12667
|
+
"description": "Let a builder report done with commits not on its upstream",
|
|
12668
|
+
"required": false,
|
|
12669
|
+
"valueHint": null
|
|
12670
|
+
},
|
|
12671
|
+
{
|
|
12672
|
+
"flags": "--verdict <value>",
|
|
12673
|
+
"description": "Critic or verifier done report: WOWED | IMPRESSED | NOT_YET | PASS | DEFECTS",
|
|
12674
|
+
"required": true,
|
|
12675
|
+
"valueHint": "value"
|
|
12676
|
+
},
|
|
12677
|
+
{
|
|
12678
|
+
"flags": "--defects <n>",
|
|
12679
|
+
"description": "Defect count (default: the verdict file's defects array length)",
|
|
12680
|
+
"required": true,
|
|
12681
|
+
"valueHint": "n"
|
|
12682
|
+
},
|
|
12683
|
+
{
|
|
12684
|
+
"flags": "--verdict-file <path>",
|
|
12685
|
+
"description": "The verdict JSON the lane wrote",
|
|
12686
|
+
"required": true,
|
|
12687
|
+
"valueHint": "path"
|
|
12688
|
+
}
|
|
12689
|
+
],
|
|
12690
|
+
"aliases": [],
|
|
12691
|
+
"category": "CLI"
|
|
12692
|
+
},
|
|
12693
|
+
{
|
|
12694
|
+
"id": "pan-lane-stop",
|
|
12695
|
+
"path": ["lane", "stop"],
|
|
12696
|
+
"display": "/pan lane stop",
|
|
12697
|
+
"description": "Stop a lane through the conversation stop door",
|
|
12698
|
+
"args": [{
|
|
12699
|
+
"name": "lane",
|
|
12700
|
+
"required": true,
|
|
12701
|
+
"variadic": false
|
|
12702
|
+
}],
|
|
12703
|
+
"options": [],
|
|
12704
|
+
"aliases": [],
|
|
12705
|
+
"category": "CLI"
|
|
12706
|
+
},
|
|
12707
|
+
{
|
|
12708
|
+
"id": "pan-lane-reap",
|
|
12709
|
+
"path": ["lane", "reap"],
|
|
12710
|
+
"display": "/pan lane reap",
|
|
12711
|
+
"description": "Remove a lane's directory and archive its conversation (never kills, never discards work)",
|
|
12712
|
+
"args": [{
|
|
12713
|
+
"name": "lane",
|
|
12714
|
+
"required": true,
|
|
12715
|
+
"variadic": false
|
|
12716
|
+
}],
|
|
12717
|
+
"options": [{
|
|
12718
|
+
"flags": "--park",
|
|
12719
|
+
"description": "Save uncommitted work to a verified patch before removing a dirty worktree",
|
|
12720
|
+
"required": false,
|
|
12721
|
+
"valueHint": null
|
|
12722
|
+
}, {
|
|
12723
|
+
"flags": "--keep",
|
|
12724
|
+
"description": "Keep the conversation listed instead of archiving it",
|
|
12725
|
+
"required": false,
|
|
12726
|
+
"valueHint": null
|
|
12727
|
+
}],
|
|
12728
|
+
"aliases": [],
|
|
12729
|
+
"category": "CLI"
|
|
12730
|
+
},
|
|
11960
12731
|
{
|
|
11961
12732
|
"id": "pan-flywheel",
|
|
11962
12733
|
"path": ["flywheel"],
|
|
@@ -12163,7 +12934,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12163
12934
|
},
|
|
12164
12935
|
{
|
|
12165
12936
|
"flags": "--agent-harness <harness>",
|
|
12166
|
-
"description": "Agent harness: claude-code, pi, ohmypi, codex, acp, kimi-code, opencode, muse, or user",
|
|
12937
|
+
"description": "Agent harness: claude-code, pi, ohmypi, codex, acp, kimi-code, opencode, muse, prime-agent, or user",
|
|
12167
12938
|
"required": true,
|
|
12168
12939
|
"valueHint": "harness"
|
|
12169
12940
|
},
|
|
@@ -13093,6 +13864,21 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
13093
13864
|
"aliases": [],
|
|
13094
13865
|
"category": "Core"
|
|
13095
13866
|
},
|
|
13867
|
+
{
|
|
13868
|
+
"id": "pan-doctor-github-quota",
|
|
13869
|
+
"path": ["doctor", "github-quota"],
|
|
13870
|
+
"display": "/pan doctor github-quota",
|
|
13871
|
+
"description": "Show GitHub API quota use per caller, active pauses, and skipped projects",
|
|
13872
|
+
"args": [],
|
|
13873
|
+
"options": [{
|
|
13874
|
+
"flags": "--json",
|
|
13875
|
+
"description": "Print JSON",
|
|
13876
|
+
"required": false,
|
|
13877
|
+
"valueHint": null
|
|
13878
|
+
}],
|
|
13879
|
+
"aliases": [],
|
|
13880
|
+
"category": "Core"
|
|
13881
|
+
},
|
|
13096
13882
|
{
|
|
13097
13883
|
"id": "pan-resources",
|
|
13098
13884
|
"path": ["resources"],
|
|
@@ -13642,6 +14428,11 @@ const DirectoryPause = Schema.Struct({
|
|
|
13642
14428
|
reason: Schema.NullOr(Schema.String),
|
|
13643
14429
|
since: Schema.NullOr(Schema.String)
|
|
13644
14430
|
});
|
|
14431
|
+
/** A provider error (billing, usage limit, ...) detected at the end of a transcript (PAN-4222). */
|
|
14432
|
+
const DirectoryProviderError = Schema.Struct({
|
|
14433
|
+
message: Schema.String,
|
|
14434
|
+
at: Schema.String
|
|
14435
|
+
});
|
|
13645
14436
|
const DirectoryEntry = Schema.Struct({
|
|
13646
14437
|
id: Schema.String,
|
|
13647
14438
|
kind: DirectoryEntryKind,
|
|
@@ -13666,7 +14457,29 @@ const DirectoryEntry = Schema.Struct({
|
|
|
13666
14457
|
source: DirectoryEntrySource,
|
|
13667
14458
|
transcript: Schema.NullOr(DirectoryTranscriptRef),
|
|
13668
14459
|
/** The pause gate from state.json, native agents only (PAN-4197). */
|
|
13669
|
-
pause: Schema.optional(DirectoryPause)
|
|
14460
|
+
pause: Schema.optional(DirectoryPause),
|
|
14461
|
+
/** PAN-4223: gauntlet lane facts; conversation entries that are lanes only. */
|
|
14462
|
+
lane: Schema.optional(Schema.Struct({
|
|
14463
|
+
run: Schema.String,
|
|
14464
|
+
key: Schema.String,
|
|
14465
|
+
role: Schema.String,
|
|
14466
|
+
iteration: Schema.Number,
|
|
14467
|
+
reportStatus: Schema.NullOr(Schema.Literals([
|
|
14468
|
+
"done",
|
|
14469
|
+
"blocked",
|
|
14470
|
+
"failed"
|
|
14471
|
+
])),
|
|
14472
|
+
/** Critic/verifier: its verdict (or `pending`); builder: the newest critic verdict. */
|
|
14473
|
+
verdict: Schema.optional(Schema.NullOr(Schema.String)),
|
|
14474
|
+
/** Critic/verifier: the judged builder's legacy conversation id. */
|
|
14475
|
+
criticOf: Schema.optional(Schema.Number)
|
|
14476
|
+
})),
|
|
14477
|
+
/** PAN-4223: the predecessor's legacy conversation id; successors only (links to /conv/<id>). */
|
|
14478
|
+
continuesFrom: Schema.optional(Schema.Number),
|
|
14479
|
+
/** The id runtime events (agentRuntimeById) are keyed under, when it differs from `id` (PAN-4222). */
|
|
14480
|
+
runtimeId: Schema.optional(Schema.String),
|
|
14481
|
+
/** A provider error detected at the transcript's end, conversations only (PAN-4222). */
|
|
14482
|
+
providerError: Schema.optional(DirectoryProviderError)
|
|
13670
14483
|
});
|
|
13671
14484
|
/**
|
|
13672
14485
|
* `window`: live entries plus finished ones active inside `windowHours`.
|
|
@@ -13763,6 +14576,32 @@ function isConfiguredPullRequestRepo(ref, repos) {
|
|
|
13763
14576
|
return repos.some((repo) => repo.host === ref.host && repo.repository === ref.repository);
|
|
13764
14577
|
}
|
|
13765
14578
|
//#endregion
|
|
13766
|
-
|
|
14579
|
+
//#region src/conversation-rows.ts
|
|
14580
|
+
/**
|
|
14581
|
+
* Conversation-row classifiers shared by the dashboard server (`src/lib`) and
|
|
14582
|
+
* the frontend (PAN-4301). One rule per question: which rows are singleton
|
|
14583
|
+
* runners, and what a lane conversation is doing right now (D10).
|
|
14584
|
+
*/
|
|
14585
|
+
/** Singleton runners spawn under their bare id (see src/lib/agents/identity.ts normalizeAgentId). */
|
|
14586
|
+
const SINGLETON_AGENT_IDS = new Set(["flywheel-orchestrator", "sequencer-runner"]);
|
|
14587
|
+
function isSingletonConversation(row) {
|
|
14588
|
+
return SINGLETON_AGENT_IDS.has(row.name.toLowerCase()) || row.issueId != null && SINGLETON_AGENT_IDS.has(row.issueId.toLowerCase());
|
|
14589
|
+
}
|
|
14590
|
+
/** D10 `starting`: not alive, not ended, created less than this long ago. */
|
|
14591
|
+
const LANE_STARTING_GRACE_MS = 3 * 6e4;
|
|
14592
|
+
/** D10, first match wins. */
|
|
14593
|
+
function laneActivityOf(row, now) {
|
|
14594
|
+
if (row.archivedAt != null) return "stopped";
|
|
14595
|
+
if (row.spawnError) return "failed-to-start";
|
|
14596
|
+
if (row.sessionAlive) {
|
|
14597
|
+
if ((row.pendingInputCount ?? 0) > 0) return "needs-you";
|
|
14598
|
+
if (row.isWorking) return "working";
|
|
14599
|
+
return "idle";
|
|
14600
|
+
}
|
|
14601
|
+
if (row.status === "active" && now - Date.parse(row.createdAt) < 18e4) return "starting";
|
|
14602
|
+
return "stopped";
|
|
14603
|
+
}
|
|
14604
|
+
//#endregion
|
|
14605
|
+
export { ACP_BEHAVIOR, AGENT_ROLES, Activity, ActivityDetailedEvent, ActivityEntryEvent, ActivityTtsEvent, ActivityUpdatedEvent, AdmissionState, AgentActivityChangedEvent, AgentChannelReply, AgentChannelReplyEvent, AgentCompletedEvent, AgentContextSaturationChangedEvent, AgentCreatedEvent, AgentCurrentIssueSetEvent, AgentDirectoryResponse, 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, COMPANION_TERMINAL_CLOSE_BODY_KEYS, COMPANION_TERMINAL_OPEN_BODY_KEYS, 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, ConversationPullRequests, ConversationPullRequestsChangedEvent, ConversationResponse, ConversationTitleChangedEvent, CostEventRecordedEvent, DEFAULT_EFFORT, DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE, DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, DashboardLifecycleStartedEvent, DashboardSnapshot, DeepWipeRpc, DeployStalenessSnapshot, DerivedBranchState, DerivedIssueState, DerivedPrState, DirectoryEntry, DirectoryEntryKind, DirectoryEntryLocation, DirectoryEntrySource, DirectoryEntryState, DirectoryPause, DirectoryPauseBy, DirectoryProviderError, DirectoryScope, DirectoryTranscriptRef, DiscoveredSessionSnapshot, DomainEvent, EDITORS, EFFORT_LEVELS, EditorIdSchema, EffortLevelSchema, EmbedProgressEvent, EmbedProgressSnapshot, EmbedSessionsRpc, EnrichCompleteEvent, EnrichProgressEvent, EnrichProgressSnapshot, EnrichSessionsRpc, EnrichStatsSnapshot, ExtractionProviderConfig, ExtractionProviderTarget, FeatureNode, FeatureRegistryEntry, FeatureRegistryStatus, FlywheelAgent, FlywheelAgentStatus, FlywheelAgentSummary, FlywheelBugRateCriterion, FlywheelConversationSummary, FlywheelDerivedStatus, FlywheelEffort, FlywheelFreshness, FlywheelHarness, FlywheelHeadline, FlywheelHttpUrl, FlywheelInFlightRow, FlywheelJournalSummary, FlywheelLastTick, FlywheelOrchestrator, FlywheelOrderBookSummary, FlywheelOrders, FlywheelP0Criterion, FlywheelParkedItem, FlywheelPipelineItem, FlywheelPipelineStatus, FlywheelPipelineVerb, FlywheelPolicies, FlywheelRunId, FlywheelRunState, FlywheelScope, FlywheelStats, FlywheelStatsCriterionStatus, FlywheelStatsTrend, FlywheelStatsWindow, FlywheelStatus, FlywheelSubstrateBug, FlywheelSubstrateBugRow, FlywheelSubstrateBugStatus, FlywheelSubstrateSeverity, FlywheelSuggestion, FlywheelSuggestionAction, FlywheelSuggestionPriority, FlywheelSystemStatus, GITHUB_QUOTA_BUCKETS, GITHUB_QUOTA_CALLERS, GITHUB_QUOTA_POOLS, GetAvailableEditorsRpc, GetConversationCostByWorkspaceRpc, GetConversationCostRpc, GetConversationStatsRpc, GetDiscoveredSessionRpc, GetSessionsFeedFacetsRpc, GetSnapshotRpc, GitHubQuotaBucket, GitHubQuotaCaller, GitHubQuotaCallerUsage, GitHubQuotaChangedEvent, GitHubQuotaPause, GitHubQuotaPool, GitHubQuotaSample, GitHubQuotaSnapshot, GitHubQuotaUsage, GitHubRateLimitKind, 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, LANE_STARTING_GRACE_MS, 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, NON_ESSENTIAL_GITHUB_CALLERS, OHMYPI_BEHAVIOR, OPENCODE_BEHAVIOR, OVERDECK_AGENT_PROTOCOL_VERSION, OVERDECK_DASHBOARD_PROTOCOL_VERSION, OpenInEditorInput, OperatorInterventionEvent, OrderBook, OrderBookIndexEntry, OrderBookItem, OrderBookLane, OrderBookPosture, OrderBookSettings, OrderBookStatus, PIPELINE_MEMBERSHIP_LOADING_CODE, PRIME_AGENT_BEHAVIOR, PanRpcError, PanRpcGroup, PendingTurn, PipelineReviewCompletedEvent, PipelineReviewStartedEvent, PipelineTestCompletedEvent, PipelineTestStartedEvent, PipelineVerificationFailedEvent, PipelineVerificationStartedEvent, PlanItemStatusChangedEvent, PlanItemsUnblockedEvent, PlanSubitemStatusChangedEvent, PlanningFailedEvent, PlanningStartedEvent, PlanningSyncEvent, PrChecksState, PrReviewState, ProjectCiHeadObservedEvent, ProjectCiSnapshot, ProjectCiSuite, ProjectCiSuiteObservedEvent, ProjectContextLayerRecord, ProjectContextLayerTarget, ProjectDeployChangedEvent, ProjectDeployPhase, ProjectDeploySnapshot, ProjectSessionTree, ProposedPlan, PullRequestKey, PullRequestLink, PullRequestLinkListing, PullRequestLinkSource, PullRequestLinkedConversation, PullRequestSnapshot, PullRequestState, 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, SINGLETON_AGENT_IDS, 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, SubagentHumanInput, 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, TickMarker, TickMarkerPhase, 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, bucketQuotaPoints, bucketQuotaRemaining, canonicalPullRequestUrl, companionTerminalKindFor, compareEffort, compareIssueIds, createIssueDelta, decodeFlywheelDerivedStatus, decodeFlywheelStats, deriveProjectCi, encodeFlywheelStats, getHarness, getHarnessBehavior, getMaxMemoryObservationsPerIssue, getMaxTurnDiffSummariesPerAgent, getRuntimeBehavior, indexPanesByAgentKey, isAgentRole, isAgentSessionName, isChannelReplyKind, isConfiguredPullRequestRepo, isEffortLevel, isIssueAttention, isIssueState, isSingletonConversation, isTerminalBackendName, isTerminalTurnDiffSummaryStatus, laneActivityOf, normalizeChannelReplyPayload, omitTurnDiffSummariesForAgent, paneAgentKey, parsePullRequestRef, projectLegacySystemHealthSummary, repoFromRemoteUrl, resolveEffectivePullRequest, syncSnapshot, trimMemoryObservations, trimTurnDiffSummaries, withPaneLivenessAlias };
|
|
13767
14606
|
|
|
13768
14607
|
//# sourceMappingURL=index.mjs.map
|