@overdeck/contracts 0.49.1 → 0.49.2
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 +421 -2
- package/dist/index.d.ts +619 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +412 -3
- 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"],
|
|
@@ -7181,6 +7441,48 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7181
7441
|
"aliases": [],
|
|
7182
7442
|
"category": "Lifecycle"
|
|
7183
7443
|
},
|
|
7444
|
+
{
|
|
7445
|
+
"id": "pan-swarm-dispatch",
|
|
7446
|
+
"path": ["swarm", "dispatch"],
|
|
7447
|
+
"display": "/pan swarm dispatch",
|
|
7448
|
+
"description": "Run one gated swarm dispatch pass",
|
|
7449
|
+
"args": [{
|
|
7450
|
+
"name": "id",
|
|
7451
|
+
"required": true,
|
|
7452
|
+
"variadic": false
|
|
7453
|
+
}],
|
|
7454
|
+
"options": [{
|
|
7455
|
+
"flags": "--json",
|
|
7456
|
+
"description": "Print structured dispatch results",
|
|
7457
|
+
"required": false,
|
|
7458
|
+
"valueHint": null
|
|
7459
|
+
}],
|
|
7460
|
+
"aliases": [],
|
|
7461
|
+
"category": "Lifecycle"
|
|
7462
|
+
},
|
|
7463
|
+
{
|
|
7464
|
+
"id": "pan-swarm-merge",
|
|
7465
|
+
"path": ["swarm", "merge"],
|
|
7466
|
+
"display": "/pan swarm merge",
|
|
7467
|
+
"description": "Verify and merge one completed swarm slot",
|
|
7468
|
+
"args": [{
|
|
7469
|
+
"name": "id",
|
|
7470
|
+
"required": true,
|
|
7471
|
+
"variadic": false
|
|
7472
|
+
}, {
|
|
7473
|
+
"name": "slotIndex",
|
|
7474
|
+
"required": true,
|
|
7475
|
+
"variadic": false
|
|
7476
|
+
}],
|
|
7477
|
+
"options": [{
|
|
7478
|
+
"flags": "--json",
|
|
7479
|
+
"description": "Print structured merge results",
|
|
7480
|
+
"required": false,
|
|
7481
|
+
"valueHint": null
|
|
7482
|
+
}],
|
|
7483
|
+
"aliases": [],
|
|
7484
|
+
"category": "Lifecycle"
|
|
7485
|
+
},
|
|
7184
7486
|
{
|
|
7185
7487
|
"id": "pan-swarm-recover",
|
|
7186
7488
|
"path": ["swarm", "recover"],
|
|
@@ -7197,9 +7499,14 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7197
7499
|
}],
|
|
7198
7500
|
"options": [{
|
|
7199
7501
|
"flags": "--action <action>",
|
|
7200
|
-
"description": "Recovery action: retry, drop, or
|
|
7502
|
+
"description": "Recovery action: retry, drop, handoff, or reclaim",
|
|
7201
7503
|
"required": true,
|
|
7202
7504
|
"valueHint": "action"
|
|
7505
|
+
}, {
|
|
7506
|
+
"flags": "--operator",
|
|
7507
|
+
"description": "Override the three-intervention limit for this failure class",
|
|
7508
|
+
"required": false,
|
|
7509
|
+
"valueHint": null
|
|
7203
7510
|
}],
|
|
7204
7511
|
"aliases": [],
|
|
7205
7512
|
"category": "Lifecycle"
|
|
@@ -7247,7 +7554,36 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7247
7554
|
"required": true,
|
|
7248
7555
|
"variadic": false
|
|
7249
7556
|
}],
|
|
7250
|
-
"options": [
|
|
7557
|
+
"options": [{
|
|
7558
|
+
"flags": "--json",
|
|
7559
|
+
"description": "Print structured status including foreman, hold, and interventions",
|
|
7560
|
+
"required": false,
|
|
7561
|
+
"valueHint": null
|
|
7562
|
+
}],
|
|
7563
|
+
"aliases": [],
|
|
7564
|
+
"category": "Lifecycle"
|
|
7565
|
+
},
|
|
7566
|
+
{
|
|
7567
|
+
"id": "pan-swarm-wait",
|
|
7568
|
+
"path": ["swarm", "wait"],
|
|
7569
|
+
"display": "/pan swarm wait",
|
|
7570
|
+
"description": "Wait for a swarm slot, foreman, or hold state transition",
|
|
7571
|
+
"args": [{
|
|
7572
|
+
"name": "id",
|
|
7573
|
+
"required": true,
|
|
7574
|
+
"variadic": false
|
|
7575
|
+
}],
|
|
7576
|
+
"options": [{
|
|
7577
|
+
"flags": "--timeout <seconds>",
|
|
7578
|
+
"description": "Maximum wait in seconds",
|
|
7579
|
+
"required": true,
|
|
7580
|
+
"valueHint": "seconds"
|
|
7581
|
+
}, {
|
|
7582
|
+
"flags": "--json",
|
|
7583
|
+
"description": "Print the structured status delta",
|
|
7584
|
+
"required": false,
|
|
7585
|
+
"valueHint": null
|
|
7586
|
+
}],
|
|
7251
7587
|
"aliases": [],
|
|
7252
7588
|
"category": "Lifecycle"
|
|
7253
7589
|
},
|
|
@@ -7518,6 +7854,49 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7518
7854
|
"aliases": [],
|
|
7519
7855
|
"category": "Lifecycle"
|
|
7520
7856
|
},
|
|
7857
|
+
{
|
|
7858
|
+
"id": "pan-task-reopen",
|
|
7859
|
+
"path": ["task", "reopen"],
|
|
7860
|
+
"display": "/pan task reopen",
|
|
7861
|
+
"description": "",
|
|
7862
|
+
"args": [{
|
|
7863
|
+
"name": "issue",
|
|
7864
|
+
"required": true,
|
|
7865
|
+
"variadic": false
|
|
7866
|
+
}, {
|
|
7867
|
+
"name": "item",
|
|
7868
|
+
"required": true,
|
|
7869
|
+
"variadic": false
|
|
7870
|
+
}],
|
|
7871
|
+
"options": [
|
|
7872
|
+
{
|
|
7873
|
+
"flags": "--reason <text>",
|
|
7874
|
+
"description": "Reason for the status change",
|
|
7875
|
+
"required": true,
|
|
7876
|
+
"valueHint": "text"
|
|
7877
|
+
},
|
|
7878
|
+
{
|
|
7879
|
+
"flags": "--expected-sequence <n>",
|
|
7880
|
+
"description": "Require the current task sequence",
|
|
7881
|
+
"required": true,
|
|
7882
|
+
"valueHint": "n"
|
|
7883
|
+
},
|
|
7884
|
+
{
|
|
7885
|
+
"flags": "--force",
|
|
7886
|
+
"description": "Override a non-terminal transition or claim owner; requires --reason",
|
|
7887
|
+
"required": false,
|
|
7888
|
+
"valueHint": null
|
|
7889
|
+
},
|
|
7890
|
+
{
|
|
7891
|
+
"flags": "--json",
|
|
7892
|
+
"description": "Print JSON",
|
|
7893
|
+
"required": false,
|
|
7894
|
+
"valueHint": null
|
|
7895
|
+
}
|
|
7896
|
+
],
|
|
7897
|
+
"aliases": [],
|
|
7898
|
+
"category": "Lifecycle"
|
|
7899
|
+
},
|
|
7521
7900
|
{
|
|
7522
7901
|
"id": "pan-task-cancel",
|
|
7523
7902
|
"path": ["task", "cancel"],
|
|
@@ -10999,6 +11378,20 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10999
11378
|
"aliases": [],
|
|
11000
11379
|
"category": "Conversation"
|
|
11001
11380
|
},
|
|
11381
|
+
{
|
|
11382
|
+
"id": "pan-conversations-heal",
|
|
11383
|
+
"path": ["conversations", "heal"],
|
|
11384
|
+
"display": "/pan conversations heal",
|
|
11385
|
+
"description": "Clear stale fork/spawn failure state for a live conversation",
|
|
11386
|
+
"args": [{
|
|
11387
|
+
"name": "query",
|
|
11388
|
+
"required": true,
|
|
11389
|
+
"variadic": false
|
|
11390
|
+
}],
|
|
11391
|
+
"options": [],
|
|
11392
|
+
"aliases": [],
|
|
11393
|
+
"category": "Conversation"
|
|
11394
|
+
},
|
|
11002
11395
|
{
|
|
11003
11396
|
"id": "pan-conversations-current",
|
|
11004
11397
|
"path": ["conversations", "current"],
|
|
@@ -12173,11 +12566,27 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12173
12566
|
"description": "Disable agent auto-resume on restart (opt out of the default-on auto-resume)",
|
|
12174
12567
|
"required": false,
|
|
12175
12568
|
"valueHint": null
|
|
12569
|
+
},
|
|
12570
|
+
{
|
|
12571
|
+
"flags": "--now",
|
|
12572
|
+
"description": "Skip the operator-approval wait: approve everything already waiting, then restart the dashboard immediately",
|
|
12573
|
+
"required": false,
|
|
12574
|
+
"valueHint": null
|
|
12176
12575
|
}
|
|
12177
12576
|
],
|
|
12178
12577
|
"aliases": [],
|
|
12179
12578
|
"category": "Core"
|
|
12180
12579
|
},
|
|
12580
|
+
{
|
|
12581
|
+
"id": "pan-restart-approve",
|
|
12582
|
+
"path": ["restart", "approve"],
|
|
12583
|
+
"display": "/pan restart approve",
|
|
12584
|
+
"description": "Approve every dashboard restart request that is waiting for the operator",
|
|
12585
|
+
"args": [],
|
|
12586
|
+
"options": [],
|
|
12587
|
+
"aliases": [],
|
|
12588
|
+
"category": "Core"
|
|
12589
|
+
},
|
|
12181
12590
|
{
|
|
12182
12591
|
"id": "pan-project",
|
|
12183
12592
|
"path": ["project"],
|
|
@@ -13213,6 +13622,10 @@ exports.PlanSubitemStatusChangedEvent = PlanSubitemStatusChangedEvent;
|
|
|
13213
13622
|
exports.PlanningFailedEvent = PlanningFailedEvent;
|
|
13214
13623
|
exports.PlanningStartedEvent = PlanningStartedEvent;
|
|
13215
13624
|
exports.PlanningSyncEvent = PlanningSyncEvent;
|
|
13625
|
+
exports.ProjectCiHeadObservedEvent = ProjectCiHeadObservedEvent;
|
|
13626
|
+
exports.ProjectCiSnapshot = ProjectCiSnapshot;
|
|
13627
|
+
exports.ProjectCiSuite = ProjectCiSuite;
|
|
13628
|
+
exports.ProjectCiSuiteObservedEvent = ProjectCiSuiteObservedEvent;
|
|
13216
13629
|
exports.ProjectContextLayerRecord = ProjectContextLayerRecord;
|
|
13217
13630
|
exports.ProjectContextLayerTarget = ProjectContextLayerTarget;
|
|
13218
13631
|
exports.ProjectSessionTree = ProjectSessionTree;
|
|
@@ -13235,6 +13648,11 @@ exports.ResolveFilePathExistsResult = ResolveFilePathExistsResult;
|
|
|
13235
13648
|
exports.ResolveFilePathExistsRpc = ResolveFilePathExistsRpc;
|
|
13236
13649
|
exports.ResourceStats = ResourceStats;
|
|
13237
13650
|
exports.ResourcesUpdatedEvent = ResourcesUpdatedEvent;
|
|
13651
|
+
exports.RestartGateChangedEvent = RestartGateChangedEvent;
|
|
13652
|
+
exports.RestartGateKind = RestartGateKind;
|
|
13653
|
+
exports.RestartGateOutcome = RestartGateOutcome;
|
|
13654
|
+
exports.RestartGateRequest = RestartGateRequest;
|
|
13655
|
+
exports.RestartGateSnapshot = RestartGateSnapshot;
|
|
13238
13656
|
exports.ReviewApprovedEvent = ReviewApprovedEvent;
|
|
13239
13657
|
exports.ReviewCoordinatorDiedEvent = ReviewCoordinatorDiedEvent;
|
|
13240
13658
|
exports.ReviewCoordinatorStartedEvent = ReviewCoordinatorStartedEvent;
|
|
@@ -13332,6 +13750,7 @@ exports.applyEvent = applyEvent;
|
|
|
13332
13750
|
exports.applyEvents = applyEvents;
|
|
13333
13751
|
exports.compareIssueIds = compareIssueIds;
|
|
13334
13752
|
exports.decodeFlywheelStats = decodeFlywheelStats;
|
|
13753
|
+
exports.deriveProjectCi = deriveProjectCi;
|
|
13335
13754
|
exports.encodeFlywheelStats = encodeFlywheelStats;
|
|
13336
13755
|
exports.getHarness = getHarness;
|
|
13337
13756
|
exports.getHarnessBehavior = getHarnessBehavior;
|