@overdeck/contracts 0.49.1 → 0.50.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 +428 -3
- package/dist/index.d.ts +619 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +419 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -435,6 +435,72 @@ const EmbedProgressSnapshot = effect.Schema.Struct({
|
|
|
435
435
|
error: effect.Schema.optional(effect.Schema.String),
|
|
436
436
|
timestamp: effect.Schema.String
|
|
437
437
|
});
|
|
438
|
+
const ProjectCiSuite = effect.Schema.Struct({
|
|
439
|
+
status: effect.Schema.String,
|
|
440
|
+
conclusion: effect.Schema.NullOr(effect.Schema.String),
|
|
441
|
+
htmlUrl: effect.Schema.optional(effect.Schema.String),
|
|
442
|
+
/** GitHub's suite/run update time, used to reject delayed same-SHA events. */
|
|
443
|
+
observedAt: effect.Schema.optional(effect.Schema.String)
|
|
444
|
+
});
|
|
445
|
+
const ProjectCiSnapshot = effect.Schema.Struct({
|
|
446
|
+
projectKey: effect.Schema.String,
|
|
447
|
+
repo: effect.Schema.String,
|
|
448
|
+
branch: effect.Schema.String,
|
|
449
|
+
headSha: effect.Schema.String,
|
|
450
|
+
/** suiteId → suite. Only GitHub Actions suites ever appear here. */
|
|
451
|
+
suites: effect.Schema.Record(effect.Schema.String, ProjectCiSuite),
|
|
452
|
+
/** Newest `observedAt` folded into this record. */
|
|
453
|
+
updatedAt: effect.Schema.String
|
|
454
|
+
});
|
|
455
|
+
/** What kind of process asked for the voluntary dashboard restart. */
|
|
456
|
+
const RestartGateKind = effect.Schema.Literals([
|
|
457
|
+
"deploy",
|
|
458
|
+
"reload",
|
|
459
|
+
"restart"
|
|
460
|
+
]);
|
|
461
|
+
/**
|
|
462
|
+
* One live restart request. `requesterId` is stable for a single requester
|
|
463
|
+
* invocation (e.g. `deploy:PAN-3724:<pid>`), so a re-poll refreshes the same
|
|
464
|
+
* row instead of adding another.
|
|
465
|
+
*/
|
|
466
|
+
const RestartGateRequest = effect.Schema.Struct({
|
|
467
|
+
requesterId: effect.Schema.String,
|
|
468
|
+
kind: RestartGateKind,
|
|
469
|
+
reason: effect.Schema.String,
|
|
470
|
+
builtSha: effect.Schema.optional(effect.Schema.String),
|
|
471
|
+
requestedAt: effect.Schema.String
|
|
472
|
+
});
|
|
473
|
+
/**
|
|
474
|
+
* How the last approval cycle ended, when the ending is worth telling the
|
|
475
|
+
* operator about (PAN-3731). Present only inside the brief window after it
|
|
476
|
+
* happened, so the banner can explain a click that restarted nothing.
|
|
477
|
+
*
|
|
478
|
+
* `pruned-unclaimed` — an approved epoch expired with nobody left to perform
|
|
479
|
+
* the restart: every requester died before claiming, or a claimant lapsed and
|
|
480
|
+
* the rest gave up. Either way nothing was restarted.
|
|
481
|
+
*/
|
|
482
|
+
const RestartGateOutcome = effect.Schema.Struct({
|
|
483
|
+
type: effect.Schema.Literals(["pruned-unclaimed"]),
|
|
484
|
+
at: effect.Schema.String
|
|
485
|
+
});
|
|
486
|
+
/**
|
|
487
|
+
* The operator-facing view of the restart gate — identical to the body of
|
|
488
|
+
* `GET /api/restart-gate`, so the banner and the CLI read the same shape.
|
|
489
|
+
*
|
|
490
|
+
* `idle` no live requests; `pending` requests are waiting for approval;
|
|
491
|
+
* `approved` the operator approved an epoch that nobody has claimed yet;
|
|
492
|
+
* `claimed` one requester holds the exclusive right to perform the restart.
|
|
493
|
+
*/
|
|
494
|
+
const RestartGateSnapshot = effect.Schema.Struct({
|
|
495
|
+
status: effect.Schema.Literals([
|
|
496
|
+
"idle",
|
|
497
|
+
"pending",
|
|
498
|
+
"approved",
|
|
499
|
+
"claimed"
|
|
500
|
+
]),
|
|
501
|
+
pending: effect.Schema.Array(RestartGateRequest),
|
|
502
|
+
lastOutcome: effect.Schema.optional(RestartGateOutcome)
|
|
503
|
+
});
|
|
438
504
|
const DashboardSnapshot = effect.Schema.Struct({
|
|
439
505
|
sequence: SequenceNumber,
|
|
440
506
|
agents: effect.Schema.Array(AgentSnapshot),
|
|
@@ -450,6 +516,8 @@ const DashboardSnapshot = effect.Schema.Struct({
|
|
|
450
516
|
enrichStats: effect.Schema.optional(effect.Schema.NullOr(EnrichStatsSnapshot)),
|
|
451
517
|
enrichProgressBySessionId: effect.Schema.optional(effect.Schema.Record(effect.Schema.String, EnrichProgressSnapshot)),
|
|
452
518
|
embedProgressBySessionId: effect.Schema.optional(effect.Schema.Record(effect.Schema.String, EmbedProgressSnapshot)),
|
|
519
|
+
ciByProjectKey: effect.Schema.optional(effect.Schema.Record(effect.Schema.String, ProjectCiSnapshot)),
|
|
520
|
+
restartGate: effect.Schema.optional(RestartGateSnapshot),
|
|
453
521
|
timestamp: effect.Schema.String
|
|
454
522
|
});
|
|
455
523
|
const WorkspaceDetail = effect.Schema.Struct({
|
|
@@ -1173,6 +1241,76 @@ const BeadsFreshnessChangedEvent = effect.Schema.Struct({
|
|
|
1173
1241
|
lastSyncedAt: effect.Schema.String
|
|
1174
1242
|
})
|
|
1175
1243
|
});
|
|
1244
|
+
/**
|
|
1245
|
+
* One GitHub Actions check suite observed on a project's default branch
|
|
1246
|
+
* (PAN-3537).
|
|
1247
|
+
*
|
|
1248
|
+
* Emitted by the `check_suite` webhook handler for live updates, only after an
|
|
1249
|
+
* independent branch-head lookup verifies the payload SHA is still current.
|
|
1250
|
+
* `suiteId` is the check suite id — for GitHub Actions that is one suite per
|
|
1251
|
+
* workflow run. The webhook payload does not carry `htmlUrl`.
|
|
1252
|
+
*
|
|
1253
|
+
* Boot and periodic repair use `project.ci_head_observed`, which replaces the
|
|
1254
|
+
* complete projection after pagination. Both events feed
|
|
1255
|
+
* `ReadModelState.ciByProjectKey`, a disposable cache rebuilt from REST on every
|
|
1256
|
+
* boot — there is no durable CI store.
|
|
1257
|
+
*/
|
|
1258
|
+
const ProjectCiSuiteObservedEvent = effect.Schema.Struct({
|
|
1259
|
+
type: effect.Schema.Literal("project.ci_suite_observed"),
|
|
1260
|
+
sequence: SequenceNumber,
|
|
1261
|
+
timestamp: effect.Schema.String,
|
|
1262
|
+
payload: effect.Schema.Struct({
|
|
1263
|
+
projectKey: effect.Schema.String,
|
|
1264
|
+
repo: effect.Schema.String,
|
|
1265
|
+
branch: effect.Schema.String,
|
|
1266
|
+
headSha: effect.Schema.String,
|
|
1267
|
+
suiteId: effect.Schema.String,
|
|
1268
|
+
status: effect.Schema.String,
|
|
1269
|
+
conclusion: effect.Schema.NullOr(effect.Schema.String),
|
|
1270
|
+
htmlUrl: effect.Schema.optional(effect.Schema.String),
|
|
1271
|
+
observedAt: effect.Schema.String,
|
|
1272
|
+
/** True only after the emitter verified headSha against the branch head. */
|
|
1273
|
+
authoritativeHead: effect.Schema.optional(effect.Schema.Boolean)
|
|
1274
|
+
})
|
|
1275
|
+
});
|
|
1276
|
+
/**
|
|
1277
|
+
* Complete GitHub Actions projection for the verified default-branch head.
|
|
1278
|
+
* The REST seed/repair emits one event after paginating every run and verifying
|
|
1279
|
+
* the branch head a second time. An empty suites record explicitly clears stale
|
|
1280
|
+
* CI when the current commit has no Actions runs.
|
|
1281
|
+
*/
|
|
1282
|
+
const ProjectCiHeadObservedEvent = effect.Schema.Struct({
|
|
1283
|
+
type: effect.Schema.Literal("project.ci_head_observed"),
|
|
1284
|
+
sequence: SequenceNumber,
|
|
1285
|
+
timestamp: effect.Schema.String,
|
|
1286
|
+
payload: effect.Schema.Struct({
|
|
1287
|
+
projectKey: effect.Schema.String,
|
|
1288
|
+
repo: effect.Schema.String,
|
|
1289
|
+
branch: effect.Schema.String,
|
|
1290
|
+
headSha: effect.Schema.String,
|
|
1291
|
+
suites: effect.Schema.Record(effect.Schema.String, ProjectCiSuite),
|
|
1292
|
+
observedAt: effect.Schema.String
|
|
1293
|
+
})
|
|
1294
|
+
});
|
|
1295
|
+
/**
|
|
1296
|
+
* The restart gate changed (PAN-3729).
|
|
1297
|
+
*
|
|
1298
|
+
* The payload is the COMPLETE gate projection, not a delta, so the reducer is a
|
|
1299
|
+
* plain replace and no ordering logic is needed. Emitted by the gate writer
|
|
1300
|
+
* (`src/dashboard/server/services/restart-gate.ts`) on every mutation and on
|
|
1301
|
+
* every sweep tick that drops an expired request, so the approval banner clears
|
|
1302
|
+
* itself when a requester dies without polling again.
|
|
1303
|
+
*
|
|
1304
|
+
* The gate is runtime-plane state (like `~/.overdeck/dashboard-restarting.json`),
|
|
1305
|
+
* so this event is emitted in-memory only — it is never persisted to the event
|
|
1306
|
+
* log and never replayed at boot.
|
|
1307
|
+
*/
|
|
1308
|
+
const RestartGateChangedEvent = effect.Schema.Struct({
|
|
1309
|
+
type: effect.Schema.Literal("restart_gate.changed"),
|
|
1310
|
+
sequence: SequenceNumber,
|
|
1311
|
+
timestamp: effect.Schema.String,
|
|
1312
|
+
payload: RestartGateSnapshot
|
|
1313
|
+
});
|
|
1176
1314
|
/** Replaces socket.io `agents:changed` (event: 'started') */
|
|
1177
1315
|
const AgentStartedEvent = effect.Schema.Struct({
|
|
1178
1316
|
type: effect.Schema.Literal("agent.started"),
|
|
@@ -2441,6 +2579,9 @@ const SweepRecommendationEvent = effect.Schema.Struct({
|
|
|
2441
2579
|
const DomainEvent = effect.Schema.Union([
|
|
2442
2580
|
SystemHeartbeatEvent,
|
|
2443
2581
|
BeadsFreshnessChangedEvent,
|
|
2582
|
+
ProjectCiSuiteObservedEvent,
|
|
2583
|
+
ProjectCiHeadObservedEvent,
|
|
2584
|
+
RestartGateChangedEvent,
|
|
2444
2585
|
AgentCreatedEvent,
|
|
2445
2586
|
AgentEnrichmentChangedEvent,
|
|
2446
2587
|
AgentStartedEvent,
|
|
@@ -3509,6 +3650,8 @@ const INITIAL_READ_MODEL_STATE = {
|
|
|
3509
3650
|
enrichStats: null,
|
|
3510
3651
|
enrichProgressBySessionId: {},
|
|
3511
3652
|
embedProgressBySessionId: {},
|
|
3653
|
+
ciByProjectKey: {},
|
|
3654
|
+
restartGate: null,
|
|
3512
3655
|
agentIdBySessionId: {},
|
|
3513
3656
|
dashboardLifecycle: {
|
|
3514
3657
|
active: false,
|
|
@@ -3634,6 +3777,8 @@ function syncSnapshot(state, snapshot) {
|
|
|
3634
3777
|
enrichStats: snapshot.enrichStats ?? null,
|
|
3635
3778
|
enrichProgressBySessionId: snapshot.enrichProgressBySessionId ?? {},
|
|
3636
3779
|
embedProgressBySessionId: snapshot.embedProgressBySessionId ?? {},
|
|
3780
|
+
ciByProjectKey: snapshot.ciByProjectKey ?? state.ciByProjectKey,
|
|
3781
|
+
restartGate: snapshot.restartGate ?? state.restartGate,
|
|
3637
3782
|
agentIdBySessionId
|
|
3638
3783
|
};
|
|
3639
3784
|
}
|
|
@@ -3974,6 +4119,97 @@ function applyEvent(state, event) {
|
|
|
3974
4119
|
...state,
|
|
3975
4120
|
sequence: Math.max(state.sequence, event.sequence)
|
|
3976
4121
|
};
|
|
4122
|
+
case "project.ci_suite_observed": {
|
|
4123
|
+
const p = event.payload;
|
|
4124
|
+
const existing = state.ciByProjectKey[p.projectKey];
|
|
4125
|
+
const suite = {
|
|
4126
|
+
status: p.status,
|
|
4127
|
+
conclusion: p.conclusion,
|
|
4128
|
+
htmlUrl: p.htmlUrl,
|
|
4129
|
+
observedAt: p.observedAt
|
|
4130
|
+
};
|
|
4131
|
+
let next;
|
|
4132
|
+
if (!existing) {
|
|
4133
|
+
if (p.authoritativeHead !== true) return {
|
|
4134
|
+
...state,
|
|
4135
|
+
sequence: Math.max(state.sequence, event.sequence)
|
|
4136
|
+
};
|
|
4137
|
+
next = {
|
|
4138
|
+
projectKey: p.projectKey,
|
|
4139
|
+
repo: p.repo,
|
|
4140
|
+
branch: p.branch,
|
|
4141
|
+
headSha: p.headSha,
|
|
4142
|
+
suites: { [p.suiteId]: suite },
|
|
4143
|
+
updatedAt: p.observedAt
|
|
4144
|
+
};
|
|
4145
|
+
} else if (existing.headSha === p.headSha) {
|
|
4146
|
+
const existingSuite = existing.suites[p.suiteId];
|
|
4147
|
+
const existingSuiteObservedAt = existingSuite?.observedAt ?? existing.updatedAt;
|
|
4148
|
+
if (existingSuite && p.observedAt < existingSuiteObservedAt) return {
|
|
4149
|
+
...state,
|
|
4150
|
+
sequence: Math.max(state.sequence, event.sequence)
|
|
4151
|
+
};
|
|
4152
|
+
next = {
|
|
4153
|
+
...existing,
|
|
4154
|
+
suites: {
|
|
4155
|
+
...existing.suites,
|
|
4156
|
+
[p.suiteId]: suite
|
|
4157
|
+
},
|
|
4158
|
+
updatedAt: p.observedAt > existing.updatedAt ? p.observedAt : existing.updatedAt
|
|
4159
|
+
};
|
|
4160
|
+
} else if (p.authoritativeHead === true && p.observedAt >= existing.updatedAt) next = {
|
|
4161
|
+
projectKey: p.projectKey,
|
|
4162
|
+
repo: p.repo,
|
|
4163
|
+
branch: p.branch,
|
|
4164
|
+
headSha: p.headSha,
|
|
4165
|
+
suites: { [p.suiteId]: suite },
|
|
4166
|
+
updatedAt: p.observedAt
|
|
4167
|
+
};
|
|
4168
|
+
else return {
|
|
4169
|
+
...state,
|
|
4170
|
+
sequence: Math.max(state.sequence, event.sequence)
|
|
4171
|
+
};
|
|
4172
|
+
return {
|
|
4173
|
+
...state,
|
|
4174
|
+
sequence: Math.max(state.sequence, event.sequence),
|
|
4175
|
+
ciByProjectKey: {
|
|
4176
|
+
...state.ciByProjectKey,
|
|
4177
|
+
[p.projectKey]: next
|
|
4178
|
+
}
|
|
4179
|
+
};
|
|
4180
|
+
}
|
|
4181
|
+
case "project.ci_head_observed": {
|
|
4182
|
+
const p = event.payload;
|
|
4183
|
+
const existing = state.ciByProjectKey[p.projectKey];
|
|
4184
|
+
if (existing && p.observedAt < existing.updatedAt) return {
|
|
4185
|
+
...state,
|
|
4186
|
+
sequence: Math.max(state.sequence, event.sequence)
|
|
4187
|
+
};
|
|
4188
|
+
return {
|
|
4189
|
+
...state,
|
|
4190
|
+
sequence: Math.max(state.sequence, event.sequence),
|
|
4191
|
+
ciByProjectKey: {
|
|
4192
|
+
...state.ciByProjectKey,
|
|
4193
|
+
[p.projectKey]: {
|
|
4194
|
+
projectKey: p.projectKey,
|
|
4195
|
+
repo: p.repo,
|
|
4196
|
+
branch: p.branch,
|
|
4197
|
+
headSha: p.headSha,
|
|
4198
|
+
suites: p.suites,
|
|
4199
|
+
updatedAt: p.observedAt
|
|
4200
|
+
}
|
|
4201
|
+
}
|
|
4202
|
+
};
|
|
4203
|
+
}
|
|
4204
|
+
case "restart_gate.changed": return {
|
|
4205
|
+
...state,
|
|
4206
|
+
sequence: Math.max(state.sequence, event.sequence),
|
|
4207
|
+
restartGate: {
|
|
4208
|
+
status: event.payload.status,
|
|
4209
|
+
pending: event.payload.pending,
|
|
4210
|
+
...event.payload.lastOutcome === void 0 ? {} : { lastOutcome: event.payload.lastOutcome }
|
|
4211
|
+
}
|
|
4212
|
+
};
|
|
3977
4213
|
case "resources.updated": return {
|
|
3978
4214
|
...state,
|
|
3979
4215
|
sequence: Math.max(state.sequence, event.sequence),
|
|
@@ -4822,6 +5058,29 @@ function applyEvents(state, events) {
|
|
|
4822
5058
|
return events.reduce(applyEvent, state);
|
|
4823
5059
|
}
|
|
4824
5060
|
//#endregion
|
|
5061
|
+
//#region src/project-ci.ts
|
|
5062
|
+
/** Conclusions that mean the suite failed. Mirrors FAILING_CHECK_CONCLUSIONS
|
|
5063
|
+
* in src/lib/webhook-handlers.ts:196. */
|
|
5064
|
+
const FAILED = new Set([
|
|
5065
|
+
"failure",
|
|
5066
|
+
"timed_out",
|
|
5067
|
+
"cancelled",
|
|
5068
|
+
"action_required",
|
|
5069
|
+
"startup_failure",
|
|
5070
|
+
"stale"
|
|
5071
|
+
]);
|
|
5072
|
+
function deriveProjectCi(record) {
|
|
5073
|
+
const suites = Object.values(record.suites);
|
|
5074
|
+
const total = suites.length;
|
|
5075
|
+
const completed = suites.filter((s) => s.status === "completed").length;
|
|
5076
|
+
return {
|
|
5077
|
+
state: suites.some((s) => s.conclusion != null && FAILED.has(s.conclusion.toLowerCase())) ? "failure" : suites.some((s) => s.status === "in_progress") ? "in_progress" : completed < total || total === 0 ? "queued" : "success",
|
|
5078
|
+
completed,
|
|
5079
|
+
total,
|
|
5080
|
+
href: (total === 1 ? suites[0] : void 0)?.htmlUrl ?? `https://github.com/${record.repo}/commit/${record.headSha}/checks`
|
|
5081
|
+
};
|
|
5082
|
+
}
|
|
5083
|
+
//#endregion
|
|
4825
5084
|
//#region src/flywheel-stats.ts
|
|
4826
5085
|
const FlywheelStatsCriterionStatus = effect.Schema.Literals([
|
|
4827
5086
|
"green",
|
|
@@ -5565,6 +5824,7 @@ const TELEMETRY_PROPERTY_DOMAINS = {
|
|
|
5565
5824
|
"deacon",
|
|
5566
5825
|
"sessions",
|
|
5567
5826
|
"awaiting-merge",
|
|
5827
|
+
"workspace-new",
|
|
5568
5828
|
"workspace"
|
|
5569
5829
|
],
|
|
5570
5830
|
decision_subject: ["agent", "conversation"],
|
|
@@ -6539,7 +6799,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6539
6799
|
"id": "pan-handoff",
|
|
6540
6800
|
"path": ["handoff"],
|
|
6541
6801
|
"display": "/pan handoff",
|
|
6542
|
-
"description": "Conversation handoff that spawns a new conversation; omit <conv> (or pass \"self\") to hand off the conversation you are in; trailing text becomes the focus — MAX
|
|
6802
|
+
"description": "Conversation handoff that spawns a new conversation; omit <conv> (or pass \"self\") to hand off the conversation you are in; trailing text becomes the focus — MAX 10000 characters (keep it short; long briefs belong in a file the focus points at). Very large source conversations are auto-degraded (truncated smart summary → heuristic → focus-only) and still hand off without aborting.",
|
|
6543
6803
|
"args": [{
|
|
6544
6804
|
"name": "conv",
|
|
6545
6805
|
"required": false,
|
|
@@ -6580,6 +6840,12 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
6580
6840
|
"required": true,
|
|
6581
6841
|
"valueHint": "id"
|
|
6582
6842
|
},
|
|
6843
|
+
{
|
|
6844
|
+
"flags": "--title <title>",
|
|
6845
|
+
"description": "Title for the new conversation; defaults to \"Handoff: <focus>\" (first ~70 chars) or \"Handoff: <source title>\" without focus",
|
|
6846
|
+
"required": true,
|
|
6847
|
+
"valueHint": "title"
|
|
6848
|
+
},
|
|
6583
6849
|
{
|
|
6584
6850
|
"flags": "--author <author>",
|
|
6585
6851
|
"description": "Who authors the handoff doc: external (default) or source",
|
|
@@ -7181,6 +7447,48 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7181
7447
|
"aliases": [],
|
|
7182
7448
|
"category": "Lifecycle"
|
|
7183
7449
|
},
|
|
7450
|
+
{
|
|
7451
|
+
"id": "pan-swarm-dispatch",
|
|
7452
|
+
"path": ["swarm", "dispatch"],
|
|
7453
|
+
"display": "/pan swarm dispatch",
|
|
7454
|
+
"description": "Run one gated swarm dispatch pass",
|
|
7455
|
+
"args": [{
|
|
7456
|
+
"name": "id",
|
|
7457
|
+
"required": true,
|
|
7458
|
+
"variadic": false
|
|
7459
|
+
}],
|
|
7460
|
+
"options": [{
|
|
7461
|
+
"flags": "--json",
|
|
7462
|
+
"description": "Print structured dispatch results",
|
|
7463
|
+
"required": false,
|
|
7464
|
+
"valueHint": null
|
|
7465
|
+
}],
|
|
7466
|
+
"aliases": [],
|
|
7467
|
+
"category": "Lifecycle"
|
|
7468
|
+
},
|
|
7469
|
+
{
|
|
7470
|
+
"id": "pan-swarm-merge",
|
|
7471
|
+
"path": ["swarm", "merge"],
|
|
7472
|
+
"display": "/pan swarm merge",
|
|
7473
|
+
"description": "Verify and merge one completed swarm slot",
|
|
7474
|
+
"args": [{
|
|
7475
|
+
"name": "id",
|
|
7476
|
+
"required": true,
|
|
7477
|
+
"variadic": false
|
|
7478
|
+
}, {
|
|
7479
|
+
"name": "slotIndex",
|
|
7480
|
+
"required": true,
|
|
7481
|
+
"variadic": false
|
|
7482
|
+
}],
|
|
7483
|
+
"options": [{
|
|
7484
|
+
"flags": "--json",
|
|
7485
|
+
"description": "Print structured merge results",
|
|
7486
|
+
"required": false,
|
|
7487
|
+
"valueHint": null
|
|
7488
|
+
}],
|
|
7489
|
+
"aliases": [],
|
|
7490
|
+
"category": "Lifecycle"
|
|
7491
|
+
},
|
|
7184
7492
|
{
|
|
7185
7493
|
"id": "pan-swarm-recover",
|
|
7186
7494
|
"path": ["swarm", "recover"],
|
|
@@ -7197,9 +7505,14 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7197
7505
|
}],
|
|
7198
7506
|
"options": [{
|
|
7199
7507
|
"flags": "--action <action>",
|
|
7200
|
-
"description": "Recovery action: retry, drop, or
|
|
7508
|
+
"description": "Recovery action: retry, drop, handoff, or reclaim",
|
|
7201
7509
|
"required": true,
|
|
7202
7510
|
"valueHint": "action"
|
|
7511
|
+
}, {
|
|
7512
|
+
"flags": "--operator",
|
|
7513
|
+
"description": "Override the three-intervention limit for this failure class",
|
|
7514
|
+
"required": false,
|
|
7515
|
+
"valueHint": null
|
|
7203
7516
|
}],
|
|
7204
7517
|
"aliases": [],
|
|
7205
7518
|
"category": "Lifecycle"
|
|
@@ -7247,7 +7560,36 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7247
7560
|
"required": true,
|
|
7248
7561
|
"variadic": false
|
|
7249
7562
|
}],
|
|
7250
|
-
"options": [
|
|
7563
|
+
"options": [{
|
|
7564
|
+
"flags": "--json",
|
|
7565
|
+
"description": "Print structured status including foreman, hold, and interventions",
|
|
7566
|
+
"required": false,
|
|
7567
|
+
"valueHint": null
|
|
7568
|
+
}],
|
|
7569
|
+
"aliases": [],
|
|
7570
|
+
"category": "Lifecycle"
|
|
7571
|
+
},
|
|
7572
|
+
{
|
|
7573
|
+
"id": "pan-swarm-wait",
|
|
7574
|
+
"path": ["swarm", "wait"],
|
|
7575
|
+
"display": "/pan swarm wait",
|
|
7576
|
+
"description": "Wait for a swarm slot, foreman, or hold state transition",
|
|
7577
|
+
"args": [{
|
|
7578
|
+
"name": "id",
|
|
7579
|
+
"required": true,
|
|
7580
|
+
"variadic": false
|
|
7581
|
+
}],
|
|
7582
|
+
"options": [{
|
|
7583
|
+
"flags": "--timeout <seconds>",
|
|
7584
|
+
"description": "Maximum wait in seconds",
|
|
7585
|
+
"required": true,
|
|
7586
|
+
"valueHint": "seconds"
|
|
7587
|
+
}, {
|
|
7588
|
+
"flags": "--json",
|
|
7589
|
+
"description": "Print the structured status delta",
|
|
7590
|
+
"required": false,
|
|
7591
|
+
"valueHint": null
|
|
7592
|
+
}],
|
|
7251
7593
|
"aliases": [],
|
|
7252
7594
|
"category": "Lifecycle"
|
|
7253
7595
|
},
|
|
@@ -7518,6 +7860,49 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7518
7860
|
"aliases": [],
|
|
7519
7861
|
"category": "Lifecycle"
|
|
7520
7862
|
},
|
|
7863
|
+
{
|
|
7864
|
+
"id": "pan-task-reopen",
|
|
7865
|
+
"path": ["task", "reopen"],
|
|
7866
|
+
"display": "/pan task reopen",
|
|
7867
|
+
"description": "",
|
|
7868
|
+
"args": [{
|
|
7869
|
+
"name": "issue",
|
|
7870
|
+
"required": true,
|
|
7871
|
+
"variadic": false
|
|
7872
|
+
}, {
|
|
7873
|
+
"name": "item",
|
|
7874
|
+
"required": true,
|
|
7875
|
+
"variadic": false
|
|
7876
|
+
}],
|
|
7877
|
+
"options": [
|
|
7878
|
+
{
|
|
7879
|
+
"flags": "--reason <text>",
|
|
7880
|
+
"description": "Reason for the status change",
|
|
7881
|
+
"required": true,
|
|
7882
|
+
"valueHint": "text"
|
|
7883
|
+
},
|
|
7884
|
+
{
|
|
7885
|
+
"flags": "--expected-sequence <n>",
|
|
7886
|
+
"description": "Require the current task sequence",
|
|
7887
|
+
"required": true,
|
|
7888
|
+
"valueHint": "n"
|
|
7889
|
+
},
|
|
7890
|
+
{
|
|
7891
|
+
"flags": "--force",
|
|
7892
|
+
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7893
|
+
"required": false,
|
|
7894
|
+
"valueHint": null
|
|
7895
|
+
},
|
|
7896
|
+
{
|
|
7897
|
+
"flags": "--json",
|
|
7898
|
+
"description": "Print JSON",
|
|
7899
|
+
"required": false,
|
|
7900
|
+
"valueHint": null
|
|
7901
|
+
}
|
|
7902
|
+
],
|
|
7903
|
+
"aliases": [],
|
|
7904
|
+
"category": "Lifecycle"
|
|
7905
|
+
},
|
|
7521
7906
|
{
|
|
7522
7907
|
"id": "pan-task-cancel",
|
|
7523
7908
|
"path": ["task", "cancel"],
|
|
@@ -10999,6 +11384,20 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10999
11384
|
"aliases": [],
|
|
11000
11385
|
"category": "Conversation"
|
|
11001
11386
|
},
|
|
11387
|
+
{
|
|
11388
|
+
"id": "pan-conversations-heal",
|
|
11389
|
+
"path": ["conversations", "heal"],
|
|
11390
|
+
"display": "/pan conversations heal",
|
|
11391
|
+
"description": "Clear stale fork/spawn failure state for a live conversation",
|
|
11392
|
+
"args": [{
|
|
11393
|
+
"name": "query",
|
|
11394
|
+
"required": true,
|
|
11395
|
+
"variadic": false
|
|
11396
|
+
}],
|
|
11397
|
+
"options": [],
|
|
11398
|
+
"aliases": [],
|
|
11399
|
+
"category": "Conversation"
|
|
11400
|
+
},
|
|
11002
11401
|
{
|
|
11003
11402
|
"id": "pan-conversations-current",
|
|
11004
11403
|
"path": ["conversations", "current"],
|
|
@@ -12173,11 +12572,27 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12173
12572
|
"description": "Disable agent auto-resume on restart (opt out of the default-on auto-resume)",
|
|
12174
12573
|
"required": false,
|
|
12175
12574
|
"valueHint": null
|
|
12575
|
+
},
|
|
12576
|
+
{
|
|
12577
|
+
"flags": "--now",
|
|
12578
|
+
"description": "Skip the operator-approval wait: approve everything already waiting, then restart the dashboard immediately",
|
|
12579
|
+
"required": false,
|
|
12580
|
+
"valueHint": null
|
|
12176
12581
|
}
|
|
12177
12582
|
],
|
|
12178
12583
|
"aliases": [],
|
|
12179
12584
|
"category": "Core"
|
|
12180
12585
|
},
|
|
12586
|
+
{
|
|
12587
|
+
"id": "pan-restart-approve",
|
|
12588
|
+
"path": ["restart", "approve"],
|
|
12589
|
+
"display": "/pan restart approve",
|
|
12590
|
+
"description": "Approve every dashboard restart request that is waiting for the operator",
|
|
12591
|
+
"args": [],
|
|
12592
|
+
"options": [],
|
|
12593
|
+
"aliases": [],
|
|
12594
|
+
"category": "Core"
|
|
12595
|
+
},
|
|
12181
12596
|
{
|
|
12182
12597
|
"id": "pan-project",
|
|
12183
12598
|
"path": ["project"],
|
|
@@ -13213,6 +13628,10 @@ exports.PlanSubitemStatusChangedEvent = PlanSubitemStatusChangedEvent;
|
|
|
13213
13628
|
exports.PlanningFailedEvent = PlanningFailedEvent;
|
|
13214
13629
|
exports.PlanningStartedEvent = PlanningStartedEvent;
|
|
13215
13630
|
exports.PlanningSyncEvent = PlanningSyncEvent;
|
|
13631
|
+
exports.ProjectCiHeadObservedEvent = ProjectCiHeadObservedEvent;
|
|
13632
|
+
exports.ProjectCiSnapshot = ProjectCiSnapshot;
|
|
13633
|
+
exports.ProjectCiSuite = ProjectCiSuite;
|
|
13634
|
+
exports.ProjectCiSuiteObservedEvent = ProjectCiSuiteObservedEvent;
|
|
13216
13635
|
exports.ProjectContextLayerRecord = ProjectContextLayerRecord;
|
|
13217
13636
|
exports.ProjectContextLayerTarget = ProjectContextLayerTarget;
|
|
13218
13637
|
exports.ProjectSessionTree = ProjectSessionTree;
|
|
@@ -13235,6 +13654,11 @@ exports.ResolveFilePathExistsResult = ResolveFilePathExistsResult;
|
|
|
13235
13654
|
exports.ResolveFilePathExistsRpc = ResolveFilePathExistsRpc;
|
|
13236
13655
|
exports.ResourceStats = ResourceStats;
|
|
13237
13656
|
exports.ResourcesUpdatedEvent = ResourcesUpdatedEvent;
|
|
13657
|
+
exports.RestartGateChangedEvent = RestartGateChangedEvent;
|
|
13658
|
+
exports.RestartGateKind = RestartGateKind;
|
|
13659
|
+
exports.RestartGateOutcome = RestartGateOutcome;
|
|
13660
|
+
exports.RestartGateRequest = RestartGateRequest;
|
|
13661
|
+
exports.RestartGateSnapshot = RestartGateSnapshot;
|
|
13238
13662
|
exports.ReviewApprovedEvent = ReviewApprovedEvent;
|
|
13239
13663
|
exports.ReviewCoordinatorDiedEvent = ReviewCoordinatorDiedEvent;
|
|
13240
13664
|
exports.ReviewCoordinatorStartedEvent = ReviewCoordinatorStartedEvent;
|
|
@@ -13332,6 +13756,7 @@ exports.applyEvent = applyEvent;
|
|
|
13332
13756
|
exports.applyEvents = applyEvents;
|
|
13333
13757
|
exports.compareIssueIds = compareIssueIds;
|
|
13334
13758
|
exports.decodeFlywheelStats = decodeFlywheelStats;
|
|
13759
|
+
exports.deriveProjectCi = deriveProjectCi;
|
|
13335
13760
|
exports.encodeFlywheelStats = encodeFlywheelStats;
|
|
13336
13761
|
exports.getHarness = getHarness;
|
|
13337
13762
|
exports.getHarnessBehavior = getHarnessBehavior;
|