@overdeck/contracts 0.71.0 → 0.73.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 +2437 -142
- package/dist/index.d.ts +1140 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +2360 -143
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -539,6 +539,7 @@ const AgentSnapshot = Schema.Struct({
|
|
|
539
539
|
askedAt: Schema.String,
|
|
540
540
|
questions: Schema.Array(Schema.Struct({
|
|
541
541
|
question: Schema.String,
|
|
542
|
+
context: Schema.optional(Schema.String),
|
|
542
543
|
header: Schema.optional(Schema.String),
|
|
543
544
|
multiSelect: Schema.optional(Schema.Boolean),
|
|
544
545
|
options: Schema.Array(Schema.Struct({
|
|
@@ -1799,6 +1800,7 @@ const AgentEnrichmentChangedEvent = Schema.Struct({
|
|
|
1799
1800
|
askedAt: Schema.String,
|
|
1800
1801
|
questions: Schema.Array(Schema.Struct({
|
|
1801
1802
|
question: Schema.String,
|
|
1803
|
+
context: Schema.optional(Schema.String),
|
|
1802
1804
|
header: Schema.optional(Schema.String),
|
|
1803
1805
|
multiSelect: Schema.optional(Schema.Boolean),
|
|
1804
1806
|
options: Schema.Array(Schema.Struct({
|
|
@@ -2806,6 +2808,14 @@ const ConversationPullRequestsChangedEvent = Schema.Struct({
|
|
|
2806
2808
|
effective: Schema.NullOr(PullRequestLink)
|
|
2807
2809
|
})
|
|
2808
2810
|
});
|
|
2811
|
+
/** Emitted (in-memory only) when a conversation's schedules change (PAN-4657), so the
|
|
2812
|
+
* list and the schedule dialog refresh the next-run badge. */
|
|
2813
|
+
const ConversationSchedulesChangedEvent = Schema.Struct({
|
|
2814
|
+
type: Schema.Literal("conversation.schedules_changed"),
|
|
2815
|
+
sequence: SequenceNumber,
|
|
2816
|
+
timestamp: Schema.String,
|
|
2817
|
+
payload: Schema.Struct({ conversationName: Schema.String })
|
|
2818
|
+
});
|
|
2809
2819
|
/** Emitted (in-memory only) when a PermissionRequest hook fires or resolves for a conversation. */
|
|
2810
2820
|
const ConversationPermissionChangedEvent = Schema.Struct({
|
|
2811
2821
|
type: Schema.Literal("conversation.permission_changed"),
|
|
@@ -3033,6 +3043,7 @@ const DomainEvent = Schema.Union([
|
|
|
3033
3043
|
ConversationMovedEvent,
|
|
3034
3044
|
ConversationTitleChangedEvent,
|
|
3035
3045
|
ConversationPullRequestsChangedEvent,
|
|
3046
|
+
ConversationSchedulesChangedEvent,
|
|
3036
3047
|
ConversationPermissionChangedEvent,
|
|
3037
3048
|
ScanStartedEvent,
|
|
3038
3049
|
ScanProgressEvent,
|
|
@@ -3209,6 +3220,63 @@ const OpenInEditorInput = Schema.Struct({
|
|
|
3209
3220
|
editor: EditorIdSchema,
|
|
3210
3221
|
reveal: Schema.optional(Schema.Boolean)
|
|
3211
3222
|
});
|
|
3223
|
+
const BROWSERS = [
|
|
3224
|
+
{
|
|
3225
|
+
id: "default-browser",
|
|
3226
|
+
label: "browser",
|
|
3227
|
+
linuxCommands: [],
|
|
3228
|
+
macApp: null
|
|
3229
|
+
},
|
|
3230
|
+
{
|
|
3231
|
+
id: "chrome",
|
|
3232
|
+
label: "Google Chrome",
|
|
3233
|
+
linuxCommands: ["google-chrome"],
|
|
3234
|
+
macApp: "Google Chrome"
|
|
3235
|
+
},
|
|
3236
|
+
{
|
|
3237
|
+
id: "chromium",
|
|
3238
|
+
label: "Chromium",
|
|
3239
|
+
linuxCommands: ["chromium", "chromium-browser"],
|
|
3240
|
+
macApp: "Chromium"
|
|
3241
|
+
},
|
|
3242
|
+
{
|
|
3243
|
+
id: "firefox",
|
|
3244
|
+
label: "Firefox",
|
|
3245
|
+
linuxCommands: ["firefox"],
|
|
3246
|
+
macApp: "Firefox"
|
|
3247
|
+
},
|
|
3248
|
+
{
|
|
3249
|
+
id: "brave",
|
|
3250
|
+
label: "Brave",
|
|
3251
|
+
linuxCommands: ["brave-browser"],
|
|
3252
|
+
macApp: "Brave Browser"
|
|
3253
|
+
},
|
|
3254
|
+
{
|
|
3255
|
+
id: "edge",
|
|
3256
|
+
label: "Microsoft Edge",
|
|
3257
|
+
linuxCommands: ["microsoft-edge"],
|
|
3258
|
+
macApp: "Microsoft Edge"
|
|
3259
|
+
},
|
|
3260
|
+
{
|
|
3261
|
+
id: "vivaldi",
|
|
3262
|
+
label: "Vivaldi",
|
|
3263
|
+
linuxCommands: ["vivaldi"],
|
|
3264
|
+
macApp: "Vivaldi"
|
|
3265
|
+
}
|
|
3266
|
+
];
|
|
3267
|
+
const BrowserIdSchema = Schema.Literals([
|
|
3268
|
+
"default-browser",
|
|
3269
|
+
"chrome",
|
|
3270
|
+
"chromium",
|
|
3271
|
+
"firefox",
|
|
3272
|
+
"brave",
|
|
3273
|
+
"edge",
|
|
3274
|
+
"vivaldi"
|
|
3275
|
+
]);
|
|
3276
|
+
const OpenInBrowserInput = Schema.Struct({
|
|
3277
|
+
path: Schema.String,
|
|
3278
|
+
browser: BrowserIdSchema
|
|
3279
|
+
});
|
|
3212
3280
|
//#endregion
|
|
3213
3281
|
//#region src/effort.ts
|
|
3214
3282
|
/**
|
|
@@ -3269,7 +3337,9 @@ const WS_METHODS = {
|
|
|
3269
3337
|
sendTerminalInput: "pan.sendTerminalInput",
|
|
3270
3338
|
resizeTerminal: "pan.resizeTerminal",
|
|
3271
3339
|
shellOpenInEditor: "pan.shellOpenInEditor",
|
|
3272
|
-
getAvailableEditors: "pan.getAvailableEditors"
|
|
3340
|
+
getAvailableEditors: "pan.getAvailableEditors",
|
|
3341
|
+
shellOpenInBrowser: "pan.shellOpenInBrowser",
|
|
3342
|
+
getAvailableBrowsers: "pan.getAvailableBrowsers"
|
|
3273
3343
|
};
|
|
3274
3344
|
var PanRpcError = class extends Schema.TaggedErrorClass()("PanRpcError", {
|
|
3275
3345
|
message: Schema.String,
|
|
@@ -3715,6 +3785,16 @@ const GetAvailableEditorsRpc = Rpc.make(WS_METHODS.getAvailableEditors, {
|
|
|
3715
3785
|
}),
|
|
3716
3786
|
error: PanRpcError
|
|
3717
3787
|
});
|
|
3788
|
+
/** Open a local file in a browser (PAN-4762) */
|
|
3789
|
+
const ShellOpenInBrowserRpc = Rpc.make(WS_METHODS.shellOpenInBrowser, {
|
|
3790
|
+
payload: OpenInBrowserInput,
|
|
3791
|
+
error: PanRpcError
|
|
3792
|
+
});
|
|
3793
|
+
/** Get available (installed) browsers (PAN-4762) */
|
|
3794
|
+
const GetAvailableBrowsersRpc = Rpc.make(WS_METHODS.getAvailableBrowsers, {
|
|
3795
|
+
success: Schema.Struct({ browsers: Schema.Array(BrowserIdSchema) }),
|
|
3796
|
+
error: PanRpcError
|
|
3797
|
+
});
|
|
3718
3798
|
const DiscoveredSessionListResult = Schema.Struct({
|
|
3719
3799
|
sessions: Schema.Array(DiscoveredSessionSnapshot),
|
|
3720
3800
|
count: Schema.Number,
|
|
@@ -3875,7 +3955,7 @@ const GetConversationStatsRpc = Rpc.make(WS_METHODS.getConversationStats, {
|
|
|
3875
3955
|
error: PanRpcError
|
|
3876
3956
|
});
|
|
3877
3957
|
/** All Overdeck WebSocket RPC methods */
|
|
3878
|
-
const PanRpcGroup = RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, ReadWorkspaceFileRpc, ReadFileAtPathRpc, WriteFileAtPathRpc, ResolveFilePathExistsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc);
|
|
3958
|
+
const PanRpcGroup = RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, ReadWorkspaceFileRpc, ReadFileAtPathRpc, WriteFileAtPathRpc, ResolveFilePathExistsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, ShellOpenInBrowserRpc, GetAvailableBrowsersRpc, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc);
|
|
3879
3959
|
//#endregion
|
|
3880
3960
|
//#region src/agent-runtime-merge.ts
|
|
3881
3961
|
function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
|
|
@@ -5206,6 +5286,10 @@ function applyEvent(state, event) {
|
|
|
5206
5286
|
...state,
|
|
5207
5287
|
conversationsListRevision: state.conversationsListRevision + 1
|
|
5208
5288
|
};
|
|
5289
|
+
case "conversation.schedules_changed": return {
|
|
5290
|
+
...state,
|
|
5291
|
+
conversationsListRevision: state.conversationsListRevision + 1
|
|
5292
|
+
};
|
|
5209
5293
|
case "conversation.permission_changed": {
|
|
5210
5294
|
const { conversationName, waiting } = event.payload;
|
|
5211
5295
|
if (!waiting) {
|
|
@@ -5656,7 +5740,9 @@ const FlywheelLastTick = Schema.Struct({
|
|
|
5656
5740
|
inFlight: Schema.Array(Schema.String),
|
|
5657
5741
|
needsYou: Schema.NullOr(Schema.String),
|
|
5658
5742
|
/** The assistant message's `createdAt`. */
|
|
5659
|
-
at: Schema.String
|
|
5743
|
+
at: Schema.String,
|
|
5744
|
+
/** The assistant message's id, when the harness records one. */
|
|
5745
|
+
messageId: Schema.optional(Schema.String)
|
|
5660
5746
|
});
|
|
5661
5747
|
const FlywheelPolicies = Schema.Struct({
|
|
5662
5748
|
auto_pickup_backlog: Schema.Boolean,
|
|
@@ -5686,6 +5772,8 @@ const FlywheelInFlightRow = Schema.Struct({
|
|
|
5686
5772
|
pr: Schema.optional(DerivedPrState),
|
|
5687
5773
|
/** Set when no configured tracker answered: the state is a guess, not a fact. */
|
|
5688
5774
|
trackerUnknown: Schema.optional(Schema.Literal(true)),
|
|
5775
|
+
/** The row folds a feature-<id>-strike workspace onto its base issue (PAN-4752). */
|
|
5776
|
+
strike: Schema.optional(Schema.Literal(true)),
|
|
5689
5777
|
/** Live agent panes on this issue. `working` with 0 means nobody is driving it. */
|
|
5690
5778
|
liveAgents: Schema.Number,
|
|
5691
5779
|
/** The loop named this id in its newest tick marker's in-flight list. */
|
|
@@ -6086,10 +6174,15 @@ const HARNESS_CAPABILITY_KEYS = [
|
|
|
6086
6174
|
"hostEffortFlag",
|
|
6087
6175
|
"binaryLabel",
|
|
6088
6176
|
"installHint",
|
|
6177
|
+
"updateArgs",
|
|
6178
|
+
"npmPackage",
|
|
6089
6179
|
"binaryConfigKey",
|
|
6090
6180
|
"launchPreflight",
|
|
6091
6181
|
"workspaceResolution",
|
|
6092
|
-
"correlatesBySessionId"
|
|
6182
|
+
"correlatesBySessionId",
|
|
6183
|
+
"answersQuestionByMessage",
|
|
6184
|
+
"askAnswerDelivery",
|
|
6185
|
+
"runsOnFlyMachine"
|
|
6093
6186
|
];
|
|
6094
6187
|
const CLAUDE_CODE_CAPABILITIES = {
|
|
6095
6188
|
contextChannel: "append-system-prompt-file",
|
|
@@ -6104,10 +6197,15 @@ const CLAUDE_CODE_CAPABILITIES = {
|
|
|
6104
6197
|
hostEffortFlag: false,
|
|
6105
6198
|
binaryLabel: "Claude Code",
|
|
6106
6199
|
installHint: "curl -fsSL https://claude.ai/install.sh | bash",
|
|
6200
|
+
updateArgs: ["update"],
|
|
6201
|
+
npmPackage: "@anthropic-ai/claude-code",
|
|
6107
6202
|
binaryConfigKey: null,
|
|
6108
6203
|
launchPreflight: "claude-code-model-minimum",
|
|
6109
6204
|
workspaceResolution: "claude-project-hash",
|
|
6110
|
-
correlatesBySessionId: false
|
|
6205
|
+
correlatesBySessionId: false,
|
|
6206
|
+
answersQuestionByMessage: true,
|
|
6207
|
+
askAnswerDelivery: "message",
|
|
6208
|
+
runsOnFlyMachine: true
|
|
6111
6209
|
};
|
|
6112
6210
|
const OHMYPI_CAPABILITIES = {
|
|
6113
6211
|
contextChannel: "append-system-prompt",
|
|
@@ -6122,10 +6220,15 @@ const OHMYPI_CAPABILITIES = {
|
|
|
6122
6220
|
hostEffortFlag: false,
|
|
6123
6221
|
binaryLabel: "OhMyPi",
|
|
6124
6222
|
installHint: null,
|
|
6223
|
+
updateArgs: null,
|
|
6224
|
+
npmPackage: null,
|
|
6125
6225
|
binaryConfigKey: null,
|
|
6126
6226
|
launchPreflight: null,
|
|
6127
6227
|
workspaceResolution: "first-message-only",
|
|
6128
|
-
correlatesBySessionId: true
|
|
6228
|
+
correlatesBySessionId: true,
|
|
6229
|
+
answersQuestionByMessage: false,
|
|
6230
|
+
askAnswerDelivery: "pi-ask-modal",
|
|
6231
|
+
runsOnFlyMachine: false
|
|
6129
6232
|
};
|
|
6130
6233
|
const CODEX_CAPABILITIES = {
|
|
6131
6234
|
contextChannel: "developer_instructions",
|
|
@@ -6140,10 +6243,15 @@ const CODEX_CAPABILITIES = {
|
|
|
6140
6243
|
hostEffortFlag: false,
|
|
6141
6244
|
binaryLabel: "Codex CLI",
|
|
6142
6245
|
installHint: null,
|
|
6246
|
+
updateArgs: ["update"],
|
|
6247
|
+
npmPackage: "@openai/codex",
|
|
6143
6248
|
binaryConfigKey: null,
|
|
6144
6249
|
launchPreflight: null,
|
|
6145
6250
|
workspaceResolution: "agent-dir",
|
|
6146
|
-
correlatesBySessionId: true
|
|
6251
|
+
correlatesBySessionId: true,
|
|
6252
|
+
answersQuestionByMessage: false,
|
|
6253
|
+
askAnswerDelivery: "message",
|
|
6254
|
+
runsOnFlyMachine: true
|
|
6147
6255
|
};
|
|
6148
6256
|
const ACP_CAPABILITIES = {
|
|
6149
6257
|
contextChannel: "acp-initial-context",
|
|
@@ -6158,10 +6266,15 @@ const ACP_CAPABILITIES = {
|
|
|
6158
6266
|
hostEffortFlag: false,
|
|
6159
6267
|
binaryLabel: "Kimi Code CLI",
|
|
6160
6268
|
installHint: null,
|
|
6269
|
+
updateArgs: ["upgrade", "--yes"],
|
|
6270
|
+
npmPackage: null,
|
|
6161
6271
|
binaryConfigKey: "acp.kimi.binaryPath",
|
|
6162
6272
|
launchPreflight: null,
|
|
6163
6273
|
workspaceResolution: "agent-dir",
|
|
6164
|
-
correlatesBySessionId: true
|
|
6274
|
+
correlatesBySessionId: true,
|
|
6275
|
+
answersQuestionByMessage: false,
|
|
6276
|
+
askAnswerDelivery: "message",
|
|
6277
|
+
runsOnFlyMachine: false
|
|
6165
6278
|
};
|
|
6166
6279
|
const KIMI_CODE_CAPABILITIES = {
|
|
6167
6280
|
contextChannel: "initial-message-envelope",
|
|
@@ -6176,10 +6289,15 @@ const KIMI_CODE_CAPABILITIES = {
|
|
|
6176
6289
|
hostEffortFlag: false,
|
|
6177
6290
|
binaryLabel: "Kimi Code CLI",
|
|
6178
6291
|
installHint: null,
|
|
6292
|
+
updateArgs: ["upgrade", "--yes"],
|
|
6293
|
+
npmPackage: null,
|
|
6179
6294
|
binaryConfigKey: "kimiCode.binaryPath",
|
|
6180
6295
|
launchPreflight: null,
|
|
6181
6296
|
workspaceResolution: "first-message-only",
|
|
6182
|
-
correlatesBySessionId: true
|
|
6297
|
+
correlatesBySessionId: true,
|
|
6298
|
+
answersQuestionByMessage: false,
|
|
6299
|
+
askAnswerDelivery: "message",
|
|
6300
|
+
runsOnFlyMachine: false
|
|
6183
6301
|
};
|
|
6184
6302
|
const OPENCODE_CAPABILITIES = {
|
|
6185
6303
|
contextChannel: "acp-initial-context",
|
|
@@ -6194,10 +6312,15 @@ const OPENCODE_CAPABILITIES = {
|
|
|
6194
6312
|
hostEffortFlag: true,
|
|
6195
6313
|
binaryLabel: "OpenCode",
|
|
6196
6314
|
installHint: null,
|
|
6315
|
+
updateArgs: ["upgrade"],
|
|
6316
|
+
npmPackage: "opencode-ai",
|
|
6197
6317
|
binaryConfigKey: null,
|
|
6198
6318
|
launchPreflight: null,
|
|
6199
6319
|
workspaceResolution: "agent-dir",
|
|
6200
|
-
correlatesBySessionId: true
|
|
6320
|
+
correlatesBySessionId: true,
|
|
6321
|
+
answersQuestionByMessage: false,
|
|
6322
|
+
askAnswerDelivery: "message",
|
|
6323
|
+
runsOnFlyMachine: false
|
|
6201
6324
|
};
|
|
6202
6325
|
const MUSE_CAPABILITIES = {
|
|
6203
6326
|
contextChannel: "append-system-prompt-file",
|
|
@@ -6212,10 +6335,15 @@ const MUSE_CAPABILITIES = {
|
|
|
6212
6335
|
hostEffortFlag: false,
|
|
6213
6336
|
binaryLabel: "Muse Code",
|
|
6214
6337
|
installHint: null,
|
|
6338
|
+
updateArgs: null,
|
|
6339
|
+
npmPackage: null,
|
|
6215
6340
|
binaryConfigKey: null,
|
|
6216
6341
|
launchPreflight: null,
|
|
6217
6342
|
workspaceResolution: "first-message-only",
|
|
6218
|
-
correlatesBySessionId: true
|
|
6343
|
+
correlatesBySessionId: true,
|
|
6344
|
+
answersQuestionByMessage: false,
|
|
6345
|
+
askAnswerDelivery: "message",
|
|
6346
|
+
runsOnFlyMachine: false
|
|
6219
6347
|
};
|
|
6220
6348
|
const PRIME_AGENT_CAPABILITIES = {
|
|
6221
6349
|
contextChannel: "prime-agent-append-system-prompt",
|
|
@@ -6230,10 +6358,15 @@ const PRIME_AGENT_CAPABILITIES = {
|
|
|
6230
6358
|
hostEffortFlag: false,
|
|
6231
6359
|
binaryLabel: "Prime Agent",
|
|
6232
6360
|
installHint: null,
|
|
6361
|
+
updateArgs: null,
|
|
6362
|
+
npmPackage: null,
|
|
6233
6363
|
binaryConfigKey: null,
|
|
6234
6364
|
launchPreflight: null,
|
|
6235
6365
|
workspaceResolution: "first-message-only",
|
|
6236
|
-
correlatesBySessionId: true
|
|
6366
|
+
correlatesBySessionId: true,
|
|
6367
|
+
answersQuestionByMessage: false,
|
|
6368
|
+
askAnswerDelivery: "message",
|
|
6369
|
+
runsOnFlyMachine: false
|
|
6237
6370
|
};
|
|
6238
6371
|
//#endregion
|
|
6239
6372
|
//#region src/harness-behavior.ts
|
|
@@ -6661,7 +6794,12 @@ const TELEMETRY_CLI_VERBS = [
|
|
|
6661
6794
|
];
|
|
6662
6795
|
const TELEMETRY_PROPERTY_DOMAINS = {
|
|
6663
6796
|
agent_spawn_mode: ["spawn-and-send", "spawn-work-and-send"],
|
|
6664
|
-
answer_type: [
|
|
6797
|
+
answer_type: [
|
|
6798
|
+
"custom",
|
|
6799
|
+
"selection",
|
|
6800
|
+
"note",
|
|
6801
|
+
"selection+note"
|
|
6802
|
+
],
|
|
6665
6803
|
auto_merge_variant: ["segmented", "badge"],
|
|
6666
6804
|
boolean: [false, true],
|
|
6667
6805
|
cli_verb: TELEMETRY_CLI_VERBS,
|
|
@@ -7194,29 +7332,35 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7194
7332
|
"add"
|
|
7195
7333
|
],
|
|
7196
7334
|
"display": "/pan skills pack add",
|
|
7197
|
-
"description": "Register a git skill pack at the commit a ref resolves to (enables nothing)",
|
|
7335
|
+
"description": "Register a git skill pack at the commit a ref resolves to (enables nothing); known packs default the url and ref",
|
|
7198
7336
|
"args": [{
|
|
7199
7337
|
"name": "id",
|
|
7200
7338
|
"required": true,
|
|
7201
7339
|
"variadic": false
|
|
7202
7340
|
}, {
|
|
7203
7341
|
"name": "url",
|
|
7204
|
-
"required":
|
|
7342
|
+
"required": false,
|
|
7205
7343
|
"variadic": false
|
|
7206
7344
|
}],
|
|
7207
7345
|
"options": [
|
|
7208
7346
|
{
|
|
7209
7347
|
"flags": "--ref <ref>",
|
|
7210
|
-
"description": "Tag or
|
|
7348
|
+
"description": "Tag, branch or commit to pin (default: the known pack ref)",
|
|
7211
7349
|
"required": true,
|
|
7212
7350
|
"valueHint": "ref"
|
|
7213
7351
|
},
|
|
7214
7352
|
{
|
|
7215
7353
|
"flags": "--adapter <adapter>",
|
|
7216
|
-
"description": "plain, claude-plugin, or
|
|
7354
|
+
"description": "plain, claude-plugin, deft-readonly, or gstack-runtime",
|
|
7217
7355
|
"required": true,
|
|
7218
7356
|
"valueHint": "adapter"
|
|
7219
7357
|
},
|
|
7358
|
+
{
|
|
7359
|
+
"flags": "--browser",
|
|
7360
|
+
"description": "Also build the browser runtime (gstack; asks separately)",
|
|
7361
|
+
"required": false,
|
|
7362
|
+
"valueHint": null
|
|
7363
|
+
},
|
|
7220
7364
|
{
|
|
7221
7365
|
"flags": "--yes",
|
|
7222
7366
|
"description": "Trust the resolved commit without asking",
|
|
@@ -7255,6 +7399,33 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7255
7399
|
"aliases": [],
|
|
7256
7400
|
"category": "Core"
|
|
7257
7401
|
},
|
|
7402
|
+
{
|
|
7403
|
+
"id": "pan-skills-pack-browser",
|
|
7404
|
+
"path": [
|
|
7405
|
+
"skills",
|
|
7406
|
+
"pack",
|
|
7407
|
+
"browser"
|
|
7408
|
+
],
|
|
7409
|
+
"display": "/pan skills pack browser",
|
|
7410
|
+
"description": "Turn a runtime pack's browser runtime on or off (gstack)",
|
|
7411
|
+
"args": [{
|
|
7412
|
+
"name": "id",
|
|
7413
|
+
"required": true,
|
|
7414
|
+
"variadic": false
|
|
7415
|
+
}, {
|
|
7416
|
+
"name": "state",
|
|
7417
|
+
"required": false,
|
|
7418
|
+
"variadic": false
|
|
7419
|
+
}],
|
|
7420
|
+
"options": [{
|
|
7421
|
+
"flags": "--yes",
|
|
7422
|
+
"description": "Trust without asking",
|
|
7423
|
+
"required": false,
|
|
7424
|
+
"valueHint": null
|
|
7425
|
+
}],
|
|
7426
|
+
"aliases": [],
|
|
7427
|
+
"category": "Core"
|
|
7428
|
+
},
|
|
7258
7429
|
{
|
|
7259
7430
|
"id": "pan-skills-pack-list",
|
|
7260
7431
|
"path": [
|
|
@@ -7323,7 +7494,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7323
7494
|
"gc"
|
|
7324
7495
|
],
|
|
7325
7496
|
"display": "/pan skills pack gc",
|
|
7326
|
-
"description": "Remove unused skill pack mounts
|
|
7497
|
+
"description": "Remove unused skill pack mounts, dangling launch links, stale renders and orphaned pack state",
|
|
7327
7498
|
"args": [],
|
|
7328
7499
|
"options": [{
|
|
7329
7500
|
"flags": "--max-age-days <n>",
|
|
@@ -7401,7 +7572,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7401
7572
|
"id": "pan-skills-deft",
|
|
7402
7573
|
"path": ["skills", "deft"],
|
|
7403
7574
|
"display": "/pan skills deft",
|
|
7404
|
-
"description": "Deft Directive detection,
|
|
7575
|
+
"description": "Deft Directive detection, managed mode, and running an issue on Deft",
|
|
7405
7576
|
"args": [],
|
|
7406
7577
|
"options": [],
|
|
7407
7578
|
"aliases": [],
|
|
@@ -7474,6 +7645,98 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7474
7645
|
"aliases": [],
|
|
7475
7646
|
"category": "Core"
|
|
7476
7647
|
},
|
|
7648
|
+
{
|
|
7649
|
+
"id": "pan-skills-deft-use",
|
|
7650
|
+
"path": [
|
|
7651
|
+
"skills",
|
|
7652
|
+
"deft",
|
|
7653
|
+
"use"
|
|
7654
|
+
],
|
|
7655
|
+
"display": "/pan skills deft use",
|
|
7656
|
+
"description": "Run an issue on Deft Directive's pipeline: install Directive into its workspace, hidden from git",
|
|
7657
|
+
"args": [{
|
|
7658
|
+
"name": "issue",
|
|
7659
|
+
"required": true,
|
|
7660
|
+
"variadic": false
|
|
7661
|
+
}],
|
|
7662
|
+
"options": [{
|
|
7663
|
+
"flags": "--start",
|
|
7664
|
+
"description": "Start the work agent afterwards (pan start)",
|
|
7665
|
+
"required": false,
|
|
7666
|
+
"valueHint": null
|
|
7667
|
+
}, {
|
|
7668
|
+
"flags": "--json",
|
|
7669
|
+
"description": "Output as JSON",
|
|
7670
|
+
"required": false,
|
|
7671
|
+
"valueHint": null
|
|
7672
|
+
}],
|
|
7673
|
+
"aliases": [],
|
|
7674
|
+
"category": "Core"
|
|
7675
|
+
},
|
|
7676
|
+
{
|
|
7677
|
+
"id": "pan-skills-deft-back",
|
|
7678
|
+
"path": [
|
|
7679
|
+
"skills",
|
|
7680
|
+
"deft",
|
|
7681
|
+
"back"
|
|
7682
|
+
],
|
|
7683
|
+
"display": "/pan skills deft back",
|
|
7684
|
+
"description": "Switch an issue back to Overdeck's pipeline: save the Deft state, then remove the install",
|
|
7685
|
+
"args": [{
|
|
7686
|
+
"name": "issue",
|
|
7687
|
+
"required": true,
|
|
7688
|
+
"variadic": false
|
|
7689
|
+
}],
|
|
7690
|
+
"options": [{
|
|
7691
|
+
"flags": "--json",
|
|
7692
|
+
"description": "Output as JSON",
|
|
7693
|
+
"required": false,
|
|
7694
|
+
"valueHint": null
|
|
7695
|
+
}],
|
|
7696
|
+
"aliases": [],
|
|
7697
|
+
"category": "Core"
|
|
7698
|
+
},
|
|
7699
|
+
{
|
|
7700
|
+
"id": "pan-skills-deft-save",
|
|
7701
|
+
"path": [
|
|
7702
|
+
"skills",
|
|
7703
|
+
"deft",
|
|
7704
|
+
"save"
|
|
7705
|
+
],
|
|
7706
|
+
"display": "/pan skills deft save",
|
|
7707
|
+
"description": "Commit the issue's Deft state archive under .pan/deft/<ISSUE>/",
|
|
7708
|
+
"args": [{
|
|
7709
|
+
"name": "issue",
|
|
7710
|
+
"required": true,
|
|
7711
|
+
"variadic": false
|
|
7712
|
+
}],
|
|
7713
|
+
"options": [],
|
|
7714
|
+
"aliases": [],
|
|
7715
|
+
"category": "Core"
|
|
7716
|
+
},
|
|
7717
|
+
{
|
|
7718
|
+
"id": "pan-skills-deft-show",
|
|
7719
|
+
"path": [
|
|
7720
|
+
"skills",
|
|
7721
|
+
"deft",
|
|
7722
|
+
"show"
|
|
7723
|
+
],
|
|
7724
|
+
"display": "/pan skills deft show",
|
|
7725
|
+
"description": "Show an issue's pipeline, Deft install, drift, and merge-guard verdict",
|
|
7726
|
+
"args": [{
|
|
7727
|
+
"name": "issue",
|
|
7728
|
+
"required": true,
|
|
7729
|
+
"variadic": false
|
|
7730
|
+
}],
|
|
7731
|
+
"options": [{
|
|
7732
|
+
"flags": "--json",
|
|
7733
|
+
"description": "Output as JSON",
|
|
7734
|
+
"required": false,
|
|
7735
|
+
"valueHint": null
|
|
7736
|
+
}],
|
|
7737
|
+
"aliases": [],
|
|
7738
|
+
"category": "Core"
|
|
7739
|
+
},
|
|
7477
7740
|
{
|
|
7478
7741
|
"id": "pan-pair",
|
|
7479
7742
|
"path": ["pair"],
|
|
@@ -7543,48 +7806,63 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7543
7806
|
"category": "CLI"
|
|
7544
7807
|
},
|
|
7545
7808
|
{
|
|
7546
|
-
"id": "pan-
|
|
7547
|
-
"path": ["
|
|
7548
|
-
"display": "/pan
|
|
7549
|
-
"description": "
|
|
7809
|
+
"id": "pan-machines",
|
|
7810
|
+
"path": ["machines"],
|
|
7811
|
+
"display": "/pan machines",
|
|
7812
|
+
"description": "Link this dashboard to other machines and manage the links (see configuration/linked-machines.mdx)",
|
|
7550
7813
|
"args": [],
|
|
7551
7814
|
"options": [],
|
|
7552
7815
|
"aliases": [],
|
|
7553
7816
|
"category": "CLI"
|
|
7554
7817
|
},
|
|
7555
7818
|
{
|
|
7556
|
-
"id": "pan-
|
|
7557
|
-
"path": ["
|
|
7558
|
-
"display": "/pan
|
|
7559
|
-
"description": "
|
|
7819
|
+
"id": "pan-machines-link",
|
|
7820
|
+
"path": ["machines", "link"],
|
|
7821
|
+
"display": "/pan machines link",
|
|
7822
|
+
"description": "Link to the machine whose `pan pair` link this is (links both ways unless --one-way)",
|
|
7560
7823
|
"args": [{
|
|
7561
|
-
"name": "
|
|
7824
|
+
"name": "pairing-url",
|
|
7562
7825
|
"required": true,
|
|
7563
7826
|
"variadic": false
|
|
7564
7827
|
}],
|
|
7565
|
-
"options": [
|
|
7566
|
-
|
|
7567
|
-
|
|
7568
|
-
|
|
7569
|
-
|
|
7570
|
-
|
|
7571
|
-
|
|
7572
|
-
|
|
7573
|
-
|
|
7574
|
-
|
|
7575
|
-
|
|
7828
|
+
"options": [
|
|
7829
|
+
{
|
|
7830
|
+
"flags": "--one-way",
|
|
7831
|
+
"description": "Only this machine reaches the other; do not give it a link back",
|
|
7832
|
+
"required": false,
|
|
7833
|
+
"valueHint": null
|
|
7834
|
+
},
|
|
7835
|
+
{
|
|
7836
|
+
"flags": "--agent-fenced",
|
|
7837
|
+
"description": "Agent-fenced access: forwarded requests are never operator-level",
|
|
7838
|
+
"required": false,
|
|
7839
|
+
"valueHint": null
|
|
7840
|
+
},
|
|
7841
|
+
{
|
|
7842
|
+
"flags": "--allow-loopback",
|
|
7843
|
+
"description": "Accept a localhost pairing link (both servers on this host)",
|
|
7844
|
+
"required": false,
|
|
7845
|
+
"valueHint": null
|
|
7846
|
+
},
|
|
7847
|
+
{
|
|
7848
|
+
"flags": "--json",
|
|
7849
|
+
"description": "Print the new link as JSON",
|
|
7850
|
+
"required": false,
|
|
7851
|
+
"valueHint": null
|
|
7852
|
+
}
|
|
7853
|
+
],
|
|
7576
7854
|
"aliases": [],
|
|
7577
7855
|
"category": "CLI"
|
|
7578
7856
|
},
|
|
7579
7857
|
{
|
|
7580
|
-
"id": "pan-
|
|
7581
|
-
"path": ["
|
|
7582
|
-
"display": "/pan
|
|
7583
|
-
"description": "List
|
|
7858
|
+
"id": "pan-machines-list",
|
|
7859
|
+
"path": ["machines", "list"],
|
|
7860
|
+
"display": "/pan machines list",
|
|
7861
|
+
"description": "List linked machines with state and route, then the machines that link here",
|
|
7584
7862
|
"args": [],
|
|
7585
7863
|
"options": [{
|
|
7586
7864
|
"flags": "--json",
|
|
7587
|
-
"description": "Print
|
|
7865
|
+
"description": "Print { self, links, inbound } as JSON",
|
|
7588
7866
|
"required": false,
|
|
7589
7867
|
"valueHint": null
|
|
7590
7868
|
}],
|
|
@@ -7592,84 +7870,758 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7592
7870
|
"category": "CLI"
|
|
7593
7871
|
},
|
|
7594
7872
|
{
|
|
7595
|
-
"id": "pan-
|
|
7596
|
-
"path": ["
|
|
7597
|
-
"display": "/pan
|
|
7598
|
-
"description": "
|
|
7873
|
+
"id": "pan-machines-unlink",
|
|
7874
|
+
"path": ["machines", "unlink"],
|
|
7875
|
+
"display": "/pan machines unlink",
|
|
7876
|
+
"description": "Remove a link by label, environment id or link id, revoking the token the other machine holds",
|
|
7599
7877
|
"args": [{
|
|
7600
|
-
"name": "
|
|
7878
|
+
"name": "target",
|
|
7601
7879
|
"required": true,
|
|
7602
7880
|
"variadic": false
|
|
7603
7881
|
}],
|
|
7604
|
-
"options": [
|
|
7882
|
+
"options": [{
|
|
7883
|
+
"flags": "--keep-server",
|
|
7884
|
+
"description": "For an SSH machine this dashboard started: leave its Overdeck server running; for a Fly machine: do not destroy it",
|
|
7885
|
+
"required": false,
|
|
7886
|
+
"valueHint": null
|
|
7887
|
+
}, {
|
|
7888
|
+
"flags": "--json",
|
|
7889
|
+
"description": "Print { ok, peerNotified, ssh, fly } as JSON",
|
|
7890
|
+
"required": false,
|
|
7891
|
+
"valueHint": null
|
|
7892
|
+
}],
|
|
7605
7893
|
"aliases": [],
|
|
7606
7894
|
"category": "CLI"
|
|
7607
7895
|
},
|
|
7608
7896
|
{
|
|
7609
|
-
"id": "pan-
|
|
7610
|
-
"path": ["
|
|
7611
|
-
"display": "/pan
|
|
7612
|
-
"description": "
|
|
7613
|
-
"args": [
|
|
7897
|
+
"id": "pan-machines-forward",
|
|
7898
|
+
"path": ["machines", "forward"],
|
|
7899
|
+
"display": "/pan machines forward",
|
|
7900
|
+
"description": "Forward a TCP port of a linked machine to 127.0.0.1 here and print the URL (for a dev-server preview)",
|
|
7901
|
+
"args": [{
|
|
7902
|
+
"name": "machine",
|
|
7903
|
+
"required": false,
|
|
7904
|
+
"variadic": false
|
|
7905
|
+
}, {
|
|
7906
|
+
"name": "port",
|
|
7907
|
+
"required": false,
|
|
7908
|
+
"variadic": false
|
|
7909
|
+
}],
|
|
7614
7910
|
"options": [
|
|
7615
7911
|
{
|
|
7616
|
-
"flags": "--
|
|
7617
|
-
"description": "
|
|
7618
|
-
"required": false,
|
|
7619
|
-
"valueHint": null
|
|
7620
|
-
},
|
|
7621
|
-
{
|
|
7622
|
-
"flags": "--mine",
|
|
7623
|
-
"description": "Show only my assigned issues",
|
|
7624
|
-
"required": false,
|
|
7625
|
-
"valueHint": null
|
|
7626
|
-
},
|
|
7627
|
-
{
|
|
7628
|
-
"flags": "--json",
|
|
7629
|
-
"description": "Output as JSON",
|
|
7912
|
+
"flags": "--list",
|
|
7913
|
+
"description": "List the open forwards",
|
|
7630
7914
|
"required": false,
|
|
7631
7915
|
"valueHint": null
|
|
7632
7916
|
},
|
|
7633
7917
|
{
|
|
7634
|
-
"flags": "--
|
|
7635
|
-
"description": "
|
|
7918
|
+
"flags": "--stop <id>",
|
|
7919
|
+
"description": "Close a forward",
|
|
7636
7920
|
"required": true,
|
|
7637
|
-
"valueHint": "
|
|
7638
|
-
},
|
|
7639
|
-
{
|
|
7640
|
-
"flags": "--all-trackers",
|
|
7641
|
-
"description": "Query all configured trackers",
|
|
7642
|
-
"required": false,
|
|
7643
|
-
"valueHint": null
|
|
7921
|
+
"valueHint": "id"
|
|
7644
7922
|
},
|
|
7645
7923
|
{
|
|
7646
|
-
"flags": "--
|
|
7647
|
-
"description": "
|
|
7924
|
+
"flags": "--json",
|
|
7925
|
+
"description": "Print JSON",
|
|
7648
7926
|
"required": false,
|
|
7649
7927
|
"valueHint": null
|
|
7650
7928
|
}
|
|
7651
7929
|
],
|
|
7652
7930
|
"aliases": [],
|
|
7653
|
-
"category": "
|
|
7931
|
+
"category": "CLI"
|
|
7654
7932
|
},
|
|
7655
7933
|
{
|
|
7656
|
-
"id": "pan-
|
|
7657
|
-
"path": ["
|
|
7658
|
-
"display": "/pan
|
|
7659
|
-
"description": "
|
|
7660
|
-
"args": [
|
|
7661
|
-
|
|
7662
|
-
"
|
|
7663
|
-
"
|
|
7934
|
+
"id": "pan-machines-directory",
|
|
7935
|
+
"path": ["machines", "directory"],
|
|
7936
|
+
"display": "/pan machines directory",
|
|
7937
|
+
"description": "List this account's machines in the overdeck.ai directory, with pending approvals and joins",
|
|
7938
|
+
"args": [],
|
|
7939
|
+
"options": [{
|
|
7940
|
+
"flags": "--json",
|
|
7941
|
+
"description": "Print the GET /api/directory response as JSON",
|
|
7942
|
+
"required": false,
|
|
7943
|
+
"valueHint": null
|
|
7664
7944
|
}],
|
|
7665
|
-
"
|
|
7666
|
-
|
|
7667
|
-
|
|
7668
|
-
|
|
7669
|
-
|
|
7670
|
-
|
|
7671
|
-
|
|
7672
|
-
|
|
7945
|
+
"aliases": [],
|
|
7946
|
+
"category": "CLI"
|
|
7947
|
+
},
|
|
7948
|
+
{
|
|
7949
|
+
"id": "pan-machines-join",
|
|
7950
|
+
"path": ["machines", "join"],
|
|
7951
|
+
"display": "/pan machines join",
|
|
7952
|
+
"description": "Ask your other machines (or one) to link with this one; confirm the code on both screens",
|
|
7953
|
+
"args": [],
|
|
7954
|
+
"options": [{
|
|
7955
|
+
"flags": "--to <machine>",
|
|
7956
|
+
"description": "Ask only this machine (label or environment id)",
|
|
7957
|
+
"required": true,
|
|
7958
|
+
"valueHint": "machine"
|
|
7959
|
+
}, {
|
|
7960
|
+
"flags": "--json",
|
|
7961
|
+
"description": "Print { requestId, sas, fingerprint, approver } as JSON once a machine opens the request",
|
|
7962
|
+
"required": false,
|
|
7963
|
+
"valueHint": null
|
|
7964
|
+
}],
|
|
7965
|
+
"aliases": [],
|
|
7966
|
+
"category": "CLI"
|
|
7967
|
+
},
|
|
7968
|
+
{
|
|
7969
|
+
"id": "pan-machines-accept",
|
|
7970
|
+
"path": ["machines", "accept"],
|
|
7971
|
+
"display": "/pan machines accept",
|
|
7972
|
+
"description": "Accept a join request after checking that both screens show the same code",
|
|
7973
|
+
"args": [{
|
|
7974
|
+
"name": "request-id",
|
|
7975
|
+
"required": true,
|
|
7976
|
+
"variadic": false
|
|
7977
|
+
}],
|
|
7978
|
+
"options": [],
|
|
7979
|
+
"aliases": [],
|
|
7980
|
+
"category": "CLI"
|
|
7981
|
+
},
|
|
7982
|
+
{
|
|
7983
|
+
"id": "pan-machines-reject",
|
|
7984
|
+
"path": ["machines", "reject"],
|
|
7985
|
+
"display": "/pan machines reject",
|
|
7986
|
+
"description": "Reject an approval or join request",
|
|
7987
|
+
"args": [{
|
|
7988
|
+
"name": "request-id",
|
|
7989
|
+
"required": true,
|
|
7990
|
+
"variadic": false
|
|
7991
|
+
}],
|
|
7992
|
+
"options": [],
|
|
7993
|
+
"aliases": [],
|
|
7994
|
+
"category": "CLI"
|
|
7995
|
+
},
|
|
7996
|
+
{
|
|
7997
|
+
"id": "pan-machines-approve",
|
|
7998
|
+
"path": ["machines", "approve"],
|
|
7999
|
+
"display": "/pan machines approve",
|
|
8000
|
+
"description": "Open an approval request, show its code and approve it",
|
|
8001
|
+
"args": [{
|
|
8002
|
+
"name": "request-id",
|
|
8003
|
+
"required": true,
|
|
8004
|
+
"variadic": false
|
|
8005
|
+
}],
|
|
8006
|
+
"options": [{
|
|
8007
|
+
"flags": "--yes",
|
|
8008
|
+
"description": "Approve without asking",
|
|
8009
|
+
"required": false,
|
|
8010
|
+
"valueHint": null
|
|
8011
|
+
}],
|
|
8012
|
+
"aliases": [],
|
|
8013
|
+
"category": "CLI"
|
|
8014
|
+
},
|
|
8015
|
+
{
|
|
8016
|
+
"id": "pan-machines-forget",
|
|
8017
|
+
"path": ["machines", "forget"],
|
|
8018
|
+
"display": "/pan machines forget",
|
|
8019
|
+
"description": "Remove a machine from the overdeck.ai directory (label or environment id)",
|
|
8020
|
+
"args": [{
|
|
8021
|
+
"name": "machine",
|
|
8022
|
+
"required": true,
|
|
8023
|
+
"variadic": false
|
|
8024
|
+
}],
|
|
8025
|
+
"options": [],
|
|
8026
|
+
"aliases": [],
|
|
8027
|
+
"category": "CLI"
|
|
8028
|
+
},
|
|
8029
|
+
{
|
|
8030
|
+
"id": "pan-machines-versions",
|
|
8031
|
+
"path": ["machines", "versions"],
|
|
8032
|
+
"display": "/pan machines versions",
|
|
8033
|
+
"description": "Show Overdeck and harness CLI versions on every machine",
|
|
8034
|
+
"args": [],
|
|
8035
|
+
"options": [{
|
|
8036
|
+
"flags": "--json",
|
|
8037
|
+
"description": "Print { rows } as JSON",
|
|
8038
|
+
"required": false,
|
|
8039
|
+
"valueHint": null
|
|
8040
|
+
}],
|
|
8041
|
+
"aliases": [],
|
|
8042
|
+
"category": "CLI"
|
|
8043
|
+
},
|
|
8044
|
+
{
|
|
8045
|
+
"id": "pan-machines-update",
|
|
8046
|
+
"path": ["machines", "update"],
|
|
8047
|
+
"display": "/pan machines update",
|
|
8048
|
+
"description": "Update Overdeck and the harness CLIs on every online machine, after running turns end",
|
|
8049
|
+
"args": [],
|
|
8050
|
+
"options": [
|
|
8051
|
+
{
|
|
8052
|
+
"flags": "--now",
|
|
8053
|
+
"description": "Do not wait for running turns to end",
|
|
8054
|
+
"required": false,
|
|
8055
|
+
"valueHint": null
|
|
8056
|
+
},
|
|
8057
|
+
{
|
|
8058
|
+
"flags": "--machine <label>",
|
|
8059
|
+
"description": "Only this machine; repeat for more",
|
|
8060
|
+
"required": true,
|
|
8061
|
+
"valueHint": "label"
|
|
8062
|
+
},
|
|
8063
|
+
{
|
|
8064
|
+
"flags": "--cancel",
|
|
8065
|
+
"description": "Cancel waiting updates",
|
|
8066
|
+
"required": false,
|
|
8067
|
+
"valueHint": null
|
|
8068
|
+
},
|
|
8069
|
+
{
|
|
8070
|
+
"flags": "--json",
|
|
8071
|
+
"description": "Print { started, skipped } as JSON",
|
|
8072
|
+
"required": false,
|
|
8073
|
+
"valueHint": null
|
|
8074
|
+
}
|
|
8075
|
+
],
|
|
8076
|
+
"aliases": [],
|
|
8077
|
+
"category": "CLI"
|
|
8078
|
+
},
|
|
8079
|
+
{
|
|
8080
|
+
"id": "pan-machines-add-ssh",
|
|
8081
|
+
"path": ["machines", "add-ssh"],
|
|
8082
|
+
"display": "/pan machines add-ssh",
|
|
8083
|
+
"description": "Link a machine reached over SSH: this dashboard starts or adopts Overdeck there and forwards a port to it",
|
|
8084
|
+
"args": [{
|
|
8085
|
+
"name": "host",
|
|
8086
|
+
"required": true,
|
|
8087
|
+
"variadic": false
|
|
8088
|
+
}],
|
|
8089
|
+
"options": [
|
|
8090
|
+
{
|
|
8091
|
+
"flags": "--pan-path <path>",
|
|
8092
|
+
"description": "Absolute path to pan on the host (default: pan from its login PATH)",
|
|
8093
|
+
"required": true,
|
|
8094
|
+
"valueHint": "path"
|
|
8095
|
+
},
|
|
8096
|
+
{
|
|
8097
|
+
"flags": "--one-way",
|
|
8098
|
+
"description": "Only this machine reaches the other; do not give it a link back",
|
|
8099
|
+
"required": false,
|
|
8100
|
+
"valueHint": null
|
|
8101
|
+
},
|
|
8102
|
+
{
|
|
8103
|
+
"flags": "--agent-fenced",
|
|
8104
|
+
"description": "Agent-fenced access: forwarded requests are never operator-level",
|
|
8105
|
+
"required": false,
|
|
8106
|
+
"valueHint": null
|
|
8107
|
+
},
|
|
8108
|
+
{
|
|
8109
|
+
"flags": "--json",
|
|
8110
|
+
"description": "Print the new link as JSON",
|
|
8111
|
+
"required": false,
|
|
8112
|
+
"valueHint": null
|
|
8113
|
+
}
|
|
8114
|
+
],
|
|
8115
|
+
"aliases": [],
|
|
8116
|
+
"category": "CLI"
|
|
8117
|
+
},
|
|
8118
|
+
{
|
|
8119
|
+
"id": "pan-machines-test-ssh",
|
|
8120
|
+
"path": ["machines", "test-ssh"],
|
|
8121
|
+
"display": "/pan machines test-ssh",
|
|
8122
|
+
"description": "Check that this dashboard reaches <host> over SSH and that it has the same pan version",
|
|
8123
|
+
"args": [{
|
|
8124
|
+
"name": "host",
|
|
8125
|
+
"required": true,
|
|
8126
|
+
"variadic": false
|
|
8127
|
+
}],
|
|
8128
|
+
"options": [{
|
|
8129
|
+
"flags": "--pan-path <path>",
|
|
8130
|
+
"description": "Absolute path to pan on the host (default: pan from its login PATH)",
|
|
8131
|
+
"required": true,
|
|
8132
|
+
"valueHint": "path"
|
|
8133
|
+
}, {
|
|
8134
|
+
"flags": "--json",
|
|
8135
|
+
"description": "Print { reachable, panVersion, localVersion, versionMatches, error, message } as JSON",
|
|
8136
|
+
"required": false,
|
|
8137
|
+
"valueHint": null
|
|
8138
|
+
}],
|
|
8139
|
+
"aliases": [],
|
|
8140
|
+
"category": "CLI"
|
|
8141
|
+
},
|
|
8142
|
+
{
|
|
8143
|
+
"id": "pan-machines-add-project",
|
|
8144
|
+
"path": ["machines", "add-project"],
|
|
8145
|
+
"display": "/pan machines add-project",
|
|
8146
|
+
"description": "Clone a linked machine's project here (or, with --to, this machine's project there) and copy its .env-style files (0600, never overwriting)",
|
|
8147
|
+
"args": [{
|
|
8148
|
+
"name": "machine",
|
|
8149
|
+
"required": true,
|
|
8150
|
+
"variadic": false
|
|
8151
|
+
}, {
|
|
8152
|
+
"name": "project-key",
|
|
8153
|
+
"required": true,
|
|
8154
|
+
"variadic": false
|
|
8155
|
+
}],
|
|
8156
|
+
"options": [
|
|
8157
|
+
{
|
|
8158
|
+
"flags": "--to <machine>",
|
|
8159
|
+
"description": "Add this machine's project <project-key> to <machine> instead",
|
|
8160
|
+
"required": true,
|
|
8161
|
+
"valueHint": "machine"
|
|
8162
|
+
},
|
|
8163
|
+
{
|
|
8164
|
+
"flags": "--file <path>",
|
|
8165
|
+
"description": "Also copy this git-ignored file; repeat for more",
|
|
8166
|
+
"required": true,
|
|
8167
|
+
"valueHint": "path"
|
|
8168
|
+
},
|
|
8169
|
+
{
|
|
8170
|
+
"flags": "--no-env",
|
|
8171
|
+
"description": "Do not copy .env, .envrc and .dev.vars",
|
|
8172
|
+
"required": false,
|
|
8173
|
+
"valueHint": null
|
|
8174
|
+
},
|
|
8175
|
+
{
|
|
8176
|
+
"flags": "--parent-dir <dir>",
|
|
8177
|
+
"description": "Clone under this directory (default: the projects folder)",
|
|
8178
|
+
"required": true,
|
|
8179
|
+
"valueHint": "dir"
|
|
8180
|
+
},
|
|
8181
|
+
{
|
|
8182
|
+
"flags": "--json",
|
|
8183
|
+
"description": "Print the finished add job as JSON",
|
|
8184
|
+
"required": false,
|
|
8185
|
+
"valueHint": null
|
|
8186
|
+
}
|
|
8187
|
+
],
|
|
8188
|
+
"aliases": [],
|
|
8189
|
+
"category": "CLI"
|
|
8190
|
+
},
|
|
8191
|
+
{
|
|
8192
|
+
"id": "pan-machines-who",
|
|
8193
|
+
"path": ["machines", "who"],
|
|
8194
|
+
"display": "/pan machines who",
|
|
8195
|
+
"description": "Show which machines run agents or conversations for an issue",
|
|
8196
|
+
"args": [{
|
|
8197
|
+
"name": "issue",
|
|
8198
|
+
"required": true,
|
|
8199
|
+
"variadic": false
|
|
8200
|
+
}],
|
|
8201
|
+
"options": [{
|
|
8202
|
+
"flags": "--json",
|
|
8203
|
+
"description": "Print the fleet answer as JSON",
|
|
8204
|
+
"required": false,
|
|
8205
|
+
"valueHint": null
|
|
8206
|
+
}],
|
|
8207
|
+
"aliases": [],
|
|
8208
|
+
"category": "CLI"
|
|
8209
|
+
},
|
|
8210
|
+
{
|
|
8211
|
+
"id": "pan-machines-add-fly",
|
|
8212
|
+
"path": ["machines", "add-fly"],
|
|
8213
|
+
"display": "/pan machines add-fly",
|
|
8214
|
+
"description": "Start a Fly.io VM that runs Overdeck, link it from here, and optionally start a Claude Code or Codex conversation on it",
|
|
8215
|
+
"args": [],
|
|
8216
|
+
"options": [
|
|
8217
|
+
{
|
|
8218
|
+
"flags": "--project <key>",
|
|
8219
|
+
"description": "Clone this project onto the VM (GitHub projects only)",
|
|
8220
|
+
"required": true,
|
|
8221
|
+
"valueHint": "key"
|
|
8222
|
+
},
|
|
8223
|
+
{
|
|
8224
|
+
"flags": "--message <text>",
|
|
8225
|
+
"description": "Start a conversation with this first message (needs --project)",
|
|
8226
|
+
"required": true,
|
|
8227
|
+
"valueHint": "text"
|
|
8228
|
+
},
|
|
8229
|
+
{
|
|
8230
|
+
"flags": "--harness <name>",
|
|
8231
|
+
"description": "Harness for the conversation: claude-code (default) or codex",
|
|
8232
|
+
"required": true,
|
|
8233
|
+
"valueHint": "name"
|
|
8234
|
+
},
|
|
8235
|
+
{
|
|
8236
|
+
"flags": "--model <id>",
|
|
8237
|
+
"description": "Model for the conversation (required with --harness codex)",
|
|
8238
|
+
"required": true,
|
|
8239
|
+
"valueHint": "id"
|
|
8240
|
+
},
|
|
8241
|
+
{
|
|
8242
|
+
"flags": "--effort <level>",
|
|
8243
|
+
"description": "Reasoning effort for the conversation",
|
|
8244
|
+
"required": true,
|
|
8245
|
+
"valueHint": "level"
|
|
8246
|
+
},
|
|
8247
|
+
{
|
|
8248
|
+
"flags": "--region <code>",
|
|
8249
|
+
"description": "Fly region (default: remote.fly.region, else iad)",
|
|
8250
|
+
"required": true,
|
|
8251
|
+
"valueHint": "code"
|
|
8252
|
+
},
|
|
8253
|
+
{
|
|
8254
|
+
"flags": "--image <ref>",
|
|
8255
|
+
"description": "Image (default: remote.fly.image, else registry.fly.io/<app>:latest)",
|
|
8256
|
+
"required": true,
|
|
8257
|
+
"valueHint": "ref"
|
|
8258
|
+
},
|
|
8259
|
+
{
|
|
8260
|
+
"flags": "--json",
|
|
8261
|
+
"description": "Print { link, record, conversation? } as JSON",
|
|
8262
|
+
"required": false,
|
|
8263
|
+
"valueHint": null
|
|
8264
|
+
}
|
|
8265
|
+
],
|
|
8266
|
+
"aliases": [],
|
|
8267
|
+
"category": "CLI"
|
|
8268
|
+
},
|
|
8269
|
+
{
|
|
8270
|
+
"id": "pan-connect",
|
|
8271
|
+
"path": ["connect"],
|
|
8272
|
+
"display": "/pan connect",
|
|
8273
|
+
"description": "Install this machine's server as a lasting service and print one link that links it from another machine (see cli/machines.mdx)",
|
|
8274
|
+
"args": [],
|
|
8275
|
+
"options": [
|
|
8276
|
+
{
|
|
8277
|
+
"flags": "--url <base>",
|
|
8278
|
+
"description": "Address another machine reaches this one at (default: picked automatically)",
|
|
8279
|
+
"required": true,
|
|
8280
|
+
"valueHint": "base"
|
|
8281
|
+
},
|
|
8282
|
+
{
|
|
8283
|
+
"flags": "--label <name>",
|
|
8284
|
+
"description": "Name recorded for the pairing in the activity log",
|
|
8285
|
+
"required": true,
|
|
8286
|
+
"valueHint": "name"
|
|
8287
|
+
},
|
|
8288
|
+
{
|
|
8289
|
+
"flags": "--json",
|
|
8290
|
+
"description": "Print the result as JSON",
|
|
8291
|
+
"required": false,
|
|
8292
|
+
"valueHint": null
|
|
8293
|
+
}
|
|
8294
|
+
],
|
|
8295
|
+
"aliases": [],
|
|
8296
|
+
"category": "CLI"
|
|
8297
|
+
},
|
|
8298
|
+
{
|
|
8299
|
+
"id": "pan-tailscale",
|
|
8300
|
+
"path": ["tailscale"],
|
|
8301
|
+
"display": "/pan tailscale",
|
|
8302
|
+
"description": "Reach this machine over Tailscale: state, setup and tailnet peers (see configuration/tailscale.mdx)",
|
|
8303
|
+
"args": [],
|
|
8304
|
+
"options": [],
|
|
8305
|
+
"aliases": [],
|
|
8306
|
+
"category": "CLI"
|
|
8307
|
+
},
|
|
8308
|
+
{
|
|
8309
|
+
"id": "pan-tailscale-status",
|
|
8310
|
+
"path": ["tailscale", "status"],
|
|
8311
|
+
"display": "/pan tailscale status",
|
|
8312
|
+
"description": "Show Tailscale state, the next setup step and Overdeck machines on the tailnet",
|
|
8313
|
+
"args": [],
|
|
8314
|
+
"options": [{
|
|
8315
|
+
"flags": "--json",
|
|
8316
|
+
"description": "Print { state, peers } as JSON",
|
|
8317
|
+
"required": false,
|
|
8318
|
+
"valueHint": null
|
|
8319
|
+
}],
|
|
8320
|
+
"aliases": [],
|
|
8321
|
+
"category": "CLI"
|
|
8322
|
+
},
|
|
8323
|
+
{
|
|
8324
|
+
"id": "pan-tailscale-setup",
|
|
8325
|
+
"path": ["tailscale", "setup"],
|
|
8326
|
+
"display": "/pan tailscale setup",
|
|
8327
|
+
"description": "Install Tailscale, sign in and turn on protected HTTPS access to this dashboard",
|
|
8328
|
+
"args": [],
|
|
8329
|
+
"options": [{
|
|
8330
|
+
"flags": "--userspace",
|
|
8331
|
+
"description": "On Linux, install for this user without an administrator password",
|
|
8332
|
+
"required": false,
|
|
8333
|
+
"valueHint": null
|
|
8334
|
+
}],
|
|
8335
|
+
"aliases": [],
|
|
8336
|
+
"category": "CLI"
|
|
8337
|
+
},
|
|
8338
|
+
{
|
|
8339
|
+
"id": "pan-token",
|
|
8340
|
+
"path": ["token"],
|
|
8341
|
+
"display": "/pan token",
|
|
8342
|
+
"description": "Create, list or revoke scoped access tokens (see configuration/remote-access.mdx)",
|
|
8343
|
+
"args": [],
|
|
8344
|
+
"options": [],
|
|
8345
|
+
"aliases": [],
|
|
8346
|
+
"category": "CLI"
|
|
8347
|
+
},
|
|
8348
|
+
{
|
|
8349
|
+
"id": "pan-token-create",
|
|
8350
|
+
"path": ["token", "create"],
|
|
8351
|
+
"display": "/pan token create",
|
|
8352
|
+
"description": "Create a scoped access token and print it once",
|
|
8353
|
+
"args": [{
|
|
8354
|
+
"name": "name",
|
|
8355
|
+
"required": true,
|
|
8356
|
+
"variadic": false
|
|
8357
|
+
}],
|
|
8358
|
+
"options": [{
|
|
8359
|
+
"flags": "--scopes <list>",
|
|
8360
|
+
"description": "Comma-separated scopes: read:events, read:state, read:conversations, read:costs, read:settings, tell, operate, approve, forward, admin",
|
|
8361
|
+
"required": true,
|
|
8362
|
+
"valueHint": "list"
|
|
8363
|
+
}, {
|
|
8364
|
+
"flags": "--json",
|
|
8365
|
+
"description": "Print { id, name, scopes, token } as JSON",
|
|
8366
|
+
"required": false,
|
|
8367
|
+
"valueHint": null
|
|
8368
|
+
}],
|
|
8369
|
+
"aliases": [],
|
|
8370
|
+
"category": "CLI"
|
|
8371
|
+
},
|
|
8372
|
+
{
|
|
8373
|
+
"id": "pan-token-list",
|
|
8374
|
+
"path": ["token", "list"],
|
|
8375
|
+
"display": "/pan token list",
|
|
8376
|
+
"description": "List access tokens with scopes and created, last-used and revoked times",
|
|
8377
|
+
"args": [],
|
|
8378
|
+
"options": [{
|
|
8379
|
+
"flags": "--json",
|
|
8380
|
+
"description": "Print the tokens as JSON",
|
|
8381
|
+
"required": false,
|
|
8382
|
+
"valueHint": null
|
|
8383
|
+
}],
|
|
8384
|
+
"aliases": [],
|
|
8385
|
+
"category": "CLI"
|
|
8386
|
+
},
|
|
8387
|
+
{
|
|
8388
|
+
"id": "pan-token-revoke",
|
|
8389
|
+
"path": ["token", "revoke"],
|
|
8390
|
+
"display": "/pan token revoke",
|
|
8391
|
+
"description": "Revoke an access token and close its live connections",
|
|
8392
|
+
"args": [{
|
|
8393
|
+
"name": "id",
|
|
8394
|
+
"required": true,
|
|
8395
|
+
"variadic": false
|
|
8396
|
+
}],
|
|
8397
|
+
"options": [],
|
|
8398
|
+
"aliases": [],
|
|
8399
|
+
"category": "CLI"
|
|
8400
|
+
},
|
|
8401
|
+
{
|
|
8402
|
+
"id": "pan-mcp",
|
|
8403
|
+
"path": ["mcp"],
|
|
8404
|
+
"display": "/pan mcp",
|
|
8405
|
+
"description": "Serve Overdeck to MCP clients (see configuration/mcp.mdx)",
|
|
8406
|
+
"args": [],
|
|
8407
|
+
"options": [],
|
|
8408
|
+
"aliases": [],
|
|
8409
|
+
"category": "CLI"
|
|
8410
|
+
},
|
|
8411
|
+
{
|
|
8412
|
+
"id": "pan-mcp-serve",
|
|
8413
|
+
"path": ["mcp", "serve"],
|
|
8414
|
+
"display": "/pan mcp serve",
|
|
8415
|
+
"description": "Serve Overdeck as an MCP server over stdio (token from OVERDECK_MCP_TOKEN; see configuration/mcp.mdx)",
|
|
8416
|
+
"args": [],
|
|
8417
|
+
"options": [],
|
|
8418
|
+
"aliases": [],
|
|
8419
|
+
"category": "CLI"
|
|
8420
|
+
},
|
|
8421
|
+
{
|
|
8422
|
+
"id": "pan-triggers",
|
|
8423
|
+
"path": ["triggers"],
|
|
8424
|
+
"display": "/pan triggers",
|
|
8425
|
+
"description": "Manage webhook triggers that message or start conversations (see configuration/triggers.mdx)",
|
|
8426
|
+
"args": [],
|
|
8427
|
+
"options": [],
|
|
8428
|
+
"aliases": [],
|
|
8429
|
+
"category": "CLI"
|
|
8430
|
+
},
|
|
8431
|
+
{
|
|
8432
|
+
"id": "pan-triggers-add",
|
|
8433
|
+
"path": ["triggers", "add"],
|
|
8434
|
+
"display": "/pan triggers add",
|
|
8435
|
+
"description": "Create a trigger and print its secret URL once",
|
|
8436
|
+
"args": [{
|
|
8437
|
+
"name": "name",
|
|
8438
|
+
"required": true,
|
|
8439
|
+
"variadic": false
|
|
8440
|
+
}],
|
|
8441
|
+
"options": [
|
|
8442
|
+
{
|
|
8443
|
+
"flags": "--conversation <name-or-id>",
|
|
8444
|
+
"description": "Send each event as a message to this conversation",
|
|
8445
|
+
"required": true,
|
|
8446
|
+
"valueHint": "name-or-id"
|
|
8447
|
+
},
|
|
8448
|
+
{
|
|
8449
|
+
"flags": "--project <key>",
|
|
8450
|
+
"description": "Start a new conversation in this project for each event",
|
|
8451
|
+
"required": true,
|
|
8452
|
+
"valueHint": "key"
|
|
8453
|
+
},
|
|
8454
|
+
{
|
|
8455
|
+
"flags": "--prompt <text>",
|
|
8456
|
+
"description": "Prompt template placed before the event (required for --project)",
|
|
8457
|
+
"required": true,
|
|
8458
|
+
"valueHint": "text"
|
|
8459
|
+
},
|
|
8460
|
+
{
|
|
8461
|
+
"flags": "--prompt-file <path>",
|
|
8462
|
+
"description": "Read the prompt template from a file",
|
|
8463
|
+
"required": true,
|
|
8464
|
+
"valueHint": "path"
|
|
8465
|
+
},
|
|
8466
|
+
{
|
|
8467
|
+
"flags": "--verify <kind>",
|
|
8468
|
+
"description": "Signature check: none, github or stripe",
|
|
8469
|
+
"required": true,
|
|
8470
|
+
"valueHint": "kind"
|
|
8471
|
+
},
|
|
8472
|
+
{
|
|
8473
|
+
"flags": "--signing-secret <value>",
|
|
8474
|
+
"description": "HMAC signing secret (github generates one when omitted)",
|
|
8475
|
+
"required": true,
|
|
8476
|
+
"valueHint": "value"
|
|
8477
|
+
},
|
|
8478
|
+
{
|
|
8479
|
+
"flags": "--model <id>",
|
|
8480
|
+
"description": "Model for conversations a project trigger starts",
|
|
8481
|
+
"required": true,
|
|
8482
|
+
"valueHint": "id"
|
|
8483
|
+
},
|
|
8484
|
+
{
|
|
8485
|
+
"flags": "--harness <name>",
|
|
8486
|
+
"description": "Harness for conversations a project trigger starts",
|
|
8487
|
+
"required": true,
|
|
8488
|
+
"valueHint": "name"
|
|
8489
|
+
},
|
|
8490
|
+
{
|
|
8491
|
+
"flags": "--effort <level>",
|
|
8492
|
+
"description": "Reasoning effort for conversations a project trigger starts",
|
|
8493
|
+
"required": true,
|
|
8494
|
+
"valueHint": "level"
|
|
8495
|
+
},
|
|
8496
|
+
{
|
|
8497
|
+
"flags": "--inbox",
|
|
8498
|
+
"description": "Hold events while this machine is offline in an overdeck.ai inbox (Anywhere plan; needs the dashboard)",
|
|
8499
|
+
"required": false,
|
|
8500
|
+
"valueHint": null
|
|
8501
|
+
},
|
|
8502
|
+
{
|
|
8503
|
+
"flags": "--json",
|
|
8504
|
+
"description": "Print { trigger, hookPath, url, localUrl, funnelCommand, generatedSigningSecret } as JSON",
|
|
8505
|
+
"required": false,
|
|
8506
|
+
"valueHint": null
|
|
8507
|
+
}
|
|
8508
|
+
],
|
|
8509
|
+
"aliases": [],
|
|
8510
|
+
"category": "CLI"
|
|
8511
|
+
},
|
|
8512
|
+
{
|
|
8513
|
+
"id": "pan-triggers-list",
|
|
8514
|
+
"path": ["triggers", "list"],
|
|
8515
|
+
"display": "/pan triggers list",
|
|
8516
|
+
"description": "List triggers with their targets and verification; never prints secrets",
|
|
8517
|
+
"args": [],
|
|
8518
|
+
"options": [{
|
|
8519
|
+
"flags": "--json",
|
|
8520
|
+
"description": "Print the triggers as JSON",
|
|
8521
|
+
"required": false,
|
|
8522
|
+
"valueHint": null
|
|
8523
|
+
}],
|
|
8524
|
+
"aliases": [],
|
|
8525
|
+
"category": "CLI"
|
|
8526
|
+
},
|
|
8527
|
+
{
|
|
8528
|
+
"id": "pan-triggers-remove",
|
|
8529
|
+
"path": ["triggers", "remove"],
|
|
8530
|
+
"display": "/pan triggers remove",
|
|
8531
|
+
"description": "Remove a trigger; its URL answers 404 at once",
|
|
8532
|
+
"args": [{
|
|
8533
|
+
"name": "id",
|
|
8534
|
+
"required": true,
|
|
8535
|
+
"variadic": false
|
|
8536
|
+
}],
|
|
8537
|
+
"options": [],
|
|
8538
|
+
"aliases": [],
|
|
8539
|
+
"category": "CLI"
|
|
8540
|
+
},
|
|
8541
|
+
{
|
|
8542
|
+
"id": "pan-triggers-set-secret",
|
|
8543
|
+
"path": ["triggers", "set-secret"],
|
|
8544
|
+
"display": "/pan triggers set-secret",
|
|
8545
|
+
"description": "Set the signing secret of a github or stripe trigger (reads one line from stdin without --secret)",
|
|
8546
|
+
"args": [{
|
|
8547
|
+
"name": "id",
|
|
8548
|
+
"required": true,
|
|
8549
|
+
"variadic": false
|
|
8550
|
+
}],
|
|
8551
|
+
"options": [{
|
|
8552
|
+
"flags": "--secret <value>",
|
|
8553
|
+
"description": "The signing secret",
|
|
8554
|
+
"required": true,
|
|
8555
|
+
"valueHint": "value"
|
|
8556
|
+
}],
|
|
8557
|
+
"aliases": [],
|
|
8558
|
+
"category": "CLI"
|
|
8559
|
+
},
|
|
8560
|
+
{
|
|
8561
|
+
"id": "pan-issues",
|
|
8562
|
+
"path": ["issues"],
|
|
8563
|
+
"display": "/pan issues",
|
|
8564
|
+
"description": "List and triage work across configured trackers",
|
|
8565
|
+
"args": [],
|
|
8566
|
+
"options": [
|
|
8567
|
+
{
|
|
8568
|
+
"flags": "--all",
|
|
8569
|
+
"description": "Include closed issues",
|
|
8570
|
+
"required": false,
|
|
8571
|
+
"valueHint": null
|
|
8572
|
+
},
|
|
8573
|
+
{
|
|
8574
|
+
"flags": "--mine",
|
|
8575
|
+
"description": "Show only my assigned issues",
|
|
8576
|
+
"required": false,
|
|
8577
|
+
"valueHint": null
|
|
8578
|
+
},
|
|
8579
|
+
{
|
|
8580
|
+
"flags": "--json",
|
|
8581
|
+
"description": "Output as JSON",
|
|
8582
|
+
"required": false,
|
|
8583
|
+
"valueHint": null
|
|
8584
|
+
},
|
|
8585
|
+
{
|
|
8586
|
+
"flags": "--tracker <type>",
|
|
8587
|
+
"description": "Query specific tracker (linear/github/gitlab)",
|
|
8588
|
+
"required": true,
|
|
8589
|
+
"valueHint": "type"
|
|
8590
|
+
},
|
|
8591
|
+
{
|
|
8592
|
+
"flags": "--all-trackers",
|
|
8593
|
+
"description": "Query all configured trackers",
|
|
8594
|
+
"required": false,
|
|
8595
|
+
"valueHint": null
|
|
8596
|
+
},
|
|
8597
|
+
{
|
|
8598
|
+
"flags": "--triage",
|
|
8599
|
+
"description": "Show triage queue",
|
|
8600
|
+
"required": false,
|
|
8601
|
+
"valueHint": null
|
|
8602
|
+
}
|
|
8603
|
+
],
|
|
8604
|
+
"aliases": [],
|
|
8605
|
+
"category": "Lifecycle"
|
|
8606
|
+
},
|
|
8607
|
+
{
|
|
8608
|
+
"id": "pan-show",
|
|
8609
|
+
"path": ["show"],
|
|
8610
|
+
"display": "/pan show",
|
|
8611
|
+
"description": "Unified lens: derived issue state, CV, context, health for one issue",
|
|
8612
|
+
"args": [{
|
|
8613
|
+
"name": "id",
|
|
8614
|
+
"required": true,
|
|
8615
|
+
"variadic": false
|
|
8616
|
+
}],
|
|
8617
|
+
"options": [
|
|
8618
|
+
{
|
|
8619
|
+
"flags": "--cv",
|
|
8620
|
+
"description": "Agent work history only",
|
|
8621
|
+
"required": false,
|
|
8622
|
+
"valueHint": null
|
|
8623
|
+
},
|
|
8624
|
+
{
|
|
7673
8625
|
"flags": "--context",
|
|
7674
8626
|
"description": "Context engineering state only",
|
|
7675
8627
|
"required": false,
|
|
@@ -7972,7 +8924,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7972
8924
|
"id": "pan-tell",
|
|
7973
8925
|
"path": ["tell"],
|
|
7974
8926
|
"display": "/pan tell",
|
|
7975
|
-
"description": "Send message to running agent",
|
|
8927
|
+
"description": "Send message to running agent, or to a linked machine's conversation as @<machine>/<conv>",
|
|
7976
8928
|
"args": [{
|
|
7977
8929
|
"name": "id",
|
|
7978
8930
|
"required": true,
|
|
@@ -7982,17 +8934,32 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
7982
8934
|
"required": true,
|
|
7983
8935
|
"variadic": false
|
|
7984
8936
|
}],
|
|
7985
|
-
"options": [
|
|
7986
|
-
|
|
7987
|
-
|
|
7988
|
-
|
|
7989
|
-
|
|
7990
|
-
|
|
7991
|
-
|
|
7992
|
-
|
|
7993
|
-
|
|
7994
|
-
|
|
7995
|
-
|
|
8937
|
+
"options": [
|
|
8938
|
+
{
|
|
8939
|
+
"flags": "--force",
|
|
8940
|
+
"description": "Deliver even to a critic or verifier lane that already filed its verdict",
|
|
8941
|
+
"required": false,
|
|
8942
|
+
"valueHint": null
|
|
8943
|
+
},
|
|
8944
|
+
{
|
|
8945
|
+
"flags": "--steer",
|
|
8946
|
+
"description": "Interrupt the running turn and send now (Claude Code send-now; Ctrl+X Ctrl+S)",
|
|
8947
|
+
"required": false,
|
|
8948
|
+
"valueHint": null
|
|
8949
|
+
},
|
|
8950
|
+
{
|
|
8951
|
+
"flags": "--when-limit-resets",
|
|
8952
|
+
"description": "Queue the message on the server; it sends when the conversation's usage limit resets (conversations only)",
|
|
8953
|
+
"required": false,
|
|
8954
|
+
"valueHint": null
|
|
8955
|
+
},
|
|
8956
|
+
{
|
|
8957
|
+
"flags": "--message-id <id>",
|
|
8958
|
+
"description": "Idempotency key: a repeat with the same id is delivered once",
|
|
8959
|
+
"required": true,
|
|
8960
|
+
"valueHint": "id"
|
|
8961
|
+
}
|
|
8962
|
+
],
|
|
7996
8963
|
"aliases": [],
|
|
7997
8964
|
"category": "Lifecycle"
|
|
7998
8965
|
},
|
|
@@ -8721,20 +9688,44 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
8721
9688
|
"valueHint": null
|
|
8722
9689
|
},
|
|
8723
9690
|
{
|
|
8724
|
-
"flags": "--host",
|
|
8725
|
-
"description": "Bypass workspace docker stack-health gate and spawn on the host",
|
|
8726
|
-
"required": false,
|
|
8727
|
-
"valueHint": null
|
|
9691
|
+
"flags": "--host",
|
|
9692
|
+
"description": "Bypass workspace docker stack-health gate and spawn on the host",
|
|
9693
|
+
"required": false,
|
|
9694
|
+
"valueHint": null
|
|
9695
|
+
},
|
|
9696
|
+
{
|
|
9697
|
+
"flags": "--yes",
|
|
9698
|
+
"description": "Confirm --host in non-interactive contexts",
|
|
9699
|
+
"required": false,
|
|
9700
|
+
"valueHint": null
|
|
9701
|
+
},
|
|
9702
|
+
{
|
|
9703
|
+
"flags": "--skip-freshness",
|
|
9704
|
+
"description": "Bypass the plan-freshness preflight and spawn even if the plan names files deleted since it was written",
|
|
9705
|
+
"required": false,
|
|
9706
|
+
"valueHint": null
|
|
9707
|
+
},
|
|
9708
|
+
{
|
|
9709
|
+
"flags": "--machine <label|auto>",
|
|
9710
|
+
"description": "Start the issue agent on a linked machine (label or environment id), or auto to place it by load",
|
|
9711
|
+
"required": true,
|
|
9712
|
+
"valueHint": "label|auto"
|
|
8728
9713
|
},
|
|
8729
9714
|
{
|
|
8730
|
-
"flags": "--
|
|
8731
|
-
"description": "
|
|
9715
|
+
"flags": "--needs <tags>",
|
|
9716
|
+
"description": "Comma-separated capability tags the machine must have (docker, gpu, ios-sim, …)",
|
|
9717
|
+
"required": true,
|
|
9718
|
+
"valueHint": "tags"
|
|
9719
|
+
},
|
|
9720
|
+
{
|
|
9721
|
+
"flags": "--push-first",
|
|
9722
|
+
"description": "With --machine: push unpushed workspace commits before starting on the other machine",
|
|
8732
9723
|
"required": false,
|
|
8733
9724
|
"valueHint": null
|
|
8734
9725
|
},
|
|
8735
9726
|
{
|
|
8736
|
-
"flags": "--
|
|
8737
|
-
"description": "
|
|
9727
|
+
"flags": "--ignore-unpushed",
|
|
9728
|
+
"description": "With --machine: start even though local workspace commits are not pushed",
|
|
8738
9729
|
"required": false,
|
|
8739
9730
|
"valueHint": null
|
|
8740
9731
|
}
|
|
@@ -10211,6 +11202,56 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
10211
11202
|
"aliases": [],
|
|
10212
11203
|
"category": "CLI"
|
|
10213
11204
|
},
|
|
11205
|
+
{
|
|
11206
|
+
"id": "pan-account",
|
|
11207
|
+
"path": ["account"],
|
|
11208
|
+
"display": "/pan account",
|
|
11209
|
+
"description": "Optional overdeck.ai sign-in for this machine (directory and hosted features)",
|
|
11210
|
+
"args": [],
|
|
11211
|
+
"options": [],
|
|
11212
|
+
"aliases": [],
|
|
11213
|
+
"category": "CLI"
|
|
11214
|
+
},
|
|
11215
|
+
{
|
|
11216
|
+
"id": "pan-account-login",
|
|
11217
|
+
"path": ["account", "login"],
|
|
11218
|
+
"display": "/pan account login",
|
|
11219
|
+
"description": "Sign in to overdeck.ai with the device flow and store this machine's device token",
|
|
11220
|
+
"args": [],
|
|
11221
|
+
"options": [{
|
|
11222
|
+
"flags": "--base-url <url>",
|
|
11223
|
+
"description": "Account service URL (default https://account.overdeck.ai, or OVERDECK_ACCOUNT_URL)",
|
|
11224
|
+
"required": true,
|
|
11225
|
+
"valueHint": "url"
|
|
11226
|
+
}],
|
|
11227
|
+
"aliases": [],
|
|
11228
|
+
"category": "CLI"
|
|
11229
|
+
},
|
|
11230
|
+
{
|
|
11231
|
+
"id": "pan-account-status",
|
|
11232
|
+
"path": ["account", "status"],
|
|
11233
|
+
"display": "/pan account status",
|
|
11234
|
+
"description": "Show the signed-in GitHub account and this device",
|
|
11235
|
+
"args": [],
|
|
11236
|
+
"options": [{
|
|
11237
|
+
"flags": "--json",
|
|
11238
|
+
"description": "Output in JSON format",
|
|
11239
|
+
"required": false,
|
|
11240
|
+
"valueHint": null
|
|
11241
|
+
}],
|
|
11242
|
+
"aliases": [],
|
|
11243
|
+
"category": "CLI"
|
|
11244
|
+
},
|
|
11245
|
+
{
|
|
11246
|
+
"id": "pan-account-logout",
|
|
11247
|
+
"path": ["account", "logout"],
|
|
11248
|
+
"display": "/pan account logout",
|
|
11249
|
+
"description": "Revoke this machine's device token and delete it locally",
|
|
11250
|
+
"args": [],
|
|
11251
|
+
"options": [],
|
|
11252
|
+
"aliases": [],
|
|
11253
|
+
"category": "CLI"
|
|
11254
|
+
},
|
|
10214
11255
|
{
|
|
10215
11256
|
"id": "pan-test",
|
|
10216
11257
|
"path": ["test"],
|
|
@@ -12752,6 +13793,28 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
12752
13793
|
"aliases": [],
|
|
12753
13794
|
"category": "Admin"
|
|
12754
13795
|
},
|
|
13796
|
+
{
|
|
13797
|
+
"id": "pan-admin-config-set",
|
|
13798
|
+
"path": [
|
|
13799
|
+
"admin",
|
|
13800
|
+
"config",
|
|
13801
|
+
"set"
|
|
13802
|
+
],
|
|
13803
|
+
"display": "/pan admin config set",
|
|
13804
|
+
"description": "Set one config.yaml value (dotted snake_case key; the value is parsed as YAML), keeping comments",
|
|
13805
|
+
"args": [{
|
|
13806
|
+
"name": "key",
|
|
13807
|
+
"required": true,
|
|
13808
|
+
"variadic": false
|
|
13809
|
+
}, {
|
|
13810
|
+
"name": "value",
|
|
13811
|
+
"required": true,
|
|
13812
|
+
"variadic": false
|
|
13813
|
+
}],
|
|
13814
|
+
"options": [],
|
|
13815
|
+
"aliases": [],
|
|
13816
|
+
"category": "Admin"
|
|
13817
|
+
},
|
|
12755
13818
|
{
|
|
12756
13819
|
"id": "pan-admin-hooks",
|
|
12757
13820
|
"path": ["admin", "hooks"],
|
|
@@ -13236,6 +14299,68 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
13236
14299
|
"aliases": ["transcript"],
|
|
13237
14300
|
"category": "Conversation"
|
|
13238
14301
|
},
|
|
14302
|
+
{
|
|
14303
|
+
"id": "pan-conversations-pending",
|
|
14304
|
+
"path": ["conversations", "pending"],
|
|
14305
|
+
"display": "/pan conversations pending",
|
|
14306
|
+
"description": "List messages queued to send when the conversation's usage limit resets",
|
|
14307
|
+
"args": [{
|
|
14308
|
+
"name": "conv",
|
|
14309
|
+
"required": true,
|
|
14310
|
+
"variadic": false
|
|
14311
|
+
}],
|
|
14312
|
+
"options": [{
|
|
14313
|
+
"flags": "--json",
|
|
14314
|
+
"description": "Print JSON",
|
|
14315
|
+
"required": false,
|
|
14316
|
+
"valueHint": null
|
|
14317
|
+
}],
|
|
14318
|
+
"aliases": [],
|
|
14319
|
+
"category": "Conversation"
|
|
14320
|
+
},
|
|
14321
|
+
{
|
|
14322
|
+
"id": "pan-conversations-pull",
|
|
14323
|
+
"path": ["conversations", "pull"],
|
|
14324
|
+
"display": "/pan conversations pull",
|
|
14325
|
+
"description": "Make this machine own a conversation that runs on a linked machine (@<machine>/<conv>)",
|
|
14326
|
+
"args": [{
|
|
14327
|
+
"name": "conv",
|
|
14328
|
+
"required": true,
|
|
14329
|
+
"variadic": false
|
|
14330
|
+
}],
|
|
14331
|
+
"options": [{
|
|
14332
|
+
"flags": "--stop-turn",
|
|
14333
|
+
"description": "Stop a running turn instead of waiting for it",
|
|
14334
|
+
"required": false,
|
|
14335
|
+
"valueHint": null
|
|
14336
|
+
}, {
|
|
14337
|
+
"flags": "--json",
|
|
14338
|
+
"description": "Print the final job state as JSON",
|
|
14339
|
+
"required": false,
|
|
14340
|
+
"valueHint": null
|
|
14341
|
+
}],
|
|
14342
|
+
"aliases": [],
|
|
14343
|
+
"category": "Conversation"
|
|
14344
|
+
},
|
|
14345
|
+
{
|
|
14346
|
+
"id": "pan-conversations-reclaim",
|
|
14347
|
+
"path": ["conversations", "reclaim"],
|
|
14348
|
+
"display": "/pan conversations reclaim",
|
|
14349
|
+
"description": "Take back a conversation this machine released when the other machine does not run it",
|
|
14350
|
+
"args": [{
|
|
14351
|
+
"name": "conv",
|
|
14352
|
+
"required": true,
|
|
14353
|
+
"variadic": false
|
|
14354
|
+
}],
|
|
14355
|
+
"options": [{
|
|
14356
|
+
"flags": "--force",
|
|
14357
|
+
"description": "Reclaim even when the other machine cannot be asked",
|
|
14358
|
+
"required": false,
|
|
14359
|
+
"valueHint": null
|
|
14360
|
+
}],
|
|
14361
|
+
"aliases": [],
|
|
14362
|
+
"category": "Conversation"
|
|
14363
|
+
},
|
|
13239
14364
|
{
|
|
13240
14365
|
"id": "pan-conversations-move",
|
|
13241
14366
|
"path": ["conversations", "move"],
|
|
@@ -13283,11 +14408,206 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
13283
14408
|
"display": "/pan conversations unlink-pr",
|
|
13284
14409
|
"description": "Unlink a pull request from a conversation (the sweep will not re-add it)",
|
|
13285
14410
|
"args": [{
|
|
13286
|
-
"name": "query",
|
|
13287
|
-
"required": true,
|
|
13288
|
-
"variadic": false
|
|
13289
|
-
}, {
|
|
13290
|
-
"name": "ref",
|
|
14411
|
+
"name": "query",
|
|
14412
|
+
"required": true,
|
|
14413
|
+
"variadic": false
|
|
14414
|
+
}, {
|
|
14415
|
+
"name": "ref",
|
|
14416
|
+
"required": true,
|
|
14417
|
+
"variadic": false
|
|
14418
|
+
}],
|
|
14419
|
+
"options": [],
|
|
14420
|
+
"aliases": [],
|
|
14421
|
+
"category": "Conversation"
|
|
14422
|
+
},
|
|
14423
|
+
{
|
|
14424
|
+
"id": "pan-conversations-prs",
|
|
14425
|
+
"path": ["conversations", "prs"],
|
|
14426
|
+
"display": "/pan conversations prs",
|
|
14427
|
+
"description": "List the pull requests linked to a conversation (* = the one shown)",
|
|
14428
|
+
"args": [{
|
|
14429
|
+
"name": "query",
|
|
14430
|
+
"required": true,
|
|
14431
|
+
"variadic": false
|
|
14432
|
+
}],
|
|
14433
|
+
"options": [{
|
|
14434
|
+
"flags": "--json",
|
|
14435
|
+
"description": "Output { links, effective } as JSON",
|
|
14436
|
+
"required": false,
|
|
14437
|
+
"valueHint": null
|
|
14438
|
+
}],
|
|
14439
|
+
"aliases": [],
|
|
14440
|
+
"category": "Conversation"
|
|
14441
|
+
},
|
|
14442
|
+
{
|
|
14443
|
+
"id": "pan-conversations-auto-settle-on-merge",
|
|
14444
|
+
"path": ["conversations", "auto-settle-on-merge"],
|
|
14445
|
+
"display": "/pan conversations auto-settle-on-merge",
|
|
14446
|
+
"description": "Show or set (on|off) settling conversations once all their linked PRs are merged or closed (default on)",
|
|
14447
|
+
"args": [{
|
|
14448
|
+
"name": "value",
|
|
14449
|
+
"required": false,
|
|
14450
|
+
"variadic": false
|
|
14451
|
+
}],
|
|
14452
|
+
"options": [],
|
|
14453
|
+
"aliases": [],
|
|
14454
|
+
"category": "Conversation"
|
|
14455
|
+
},
|
|
14456
|
+
{
|
|
14457
|
+
"id": "pan-conversations-auto-settle",
|
|
14458
|
+
"path": ["conversations", "auto-settle"],
|
|
14459
|
+
"display": "/pan conversations auto-settle",
|
|
14460
|
+
"description": "Show or set (on|off|inherit) one conversation's auto-settle-on-merge override",
|
|
14461
|
+
"args": [{
|
|
14462
|
+
"name": "query",
|
|
14463
|
+
"required": true,
|
|
14464
|
+
"variadic": false
|
|
14465
|
+
}, {
|
|
14466
|
+
"name": "value",
|
|
14467
|
+
"required": false,
|
|
14468
|
+
"variadic": false
|
|
14469
|
+
}],
|
|
14470
|
+
"options": [],
|
|
14471
|
+
"aliases": [],
|
|
14472
|
+
"category": "Conversation"
|
|
14473
|
+
},
|
|
14474
|
+
{
|
|
14475
|
+
"id": "pan-conversations-auto-settle-idle-days",
|
|
14476
|
+
"path": ["conversations", "auto-settle-idle-days"],
|
|
14477
|
+
"display": "/pan conversations auto-settle-idle-days",
|
|
14478
|
+
"description": "Show or set how many days without activity before an operator conversation is settled (0 = off, default 3)",
|
|
14479
|
+
"args": [{
|
|
14480
|
+
"name": "days",
|
|
14481
|
+
"required": false,
|
|
14482
|
+
"variadic": false
|
|
14483
|
+
}],
|
|
14484
|
+
"options": [],
|
|
14485
|
+
"aliases": [],
|
|
14486
|
+
"category": "Conversation"
|
|
14487
|
+
},
|
|
14488
|
+
{
|
|
14489
|
+
"id": "pan-conversations-schedule",
|
|
14490
|
+
"path": ["conversations", "schedule"],
|
|
14491
|
+
"display": "/pan conversations schedule",
|
|
14492
|
+
"description": "Run a prompt in a conversation on a recurring schedule (Overdeck fires it, even after restarts)",
|
|
14493
|
+
"args": [],
|
|
14494
|
+
"options": [],
|
|
14495
|
+
"aliases": [],
|
|
14496
|
+
"category": "Conversation"
|
|
14497
|
+
},
|
|
14498
|
+
{
|
|
14499
|
+
"id": "pan-conversations-schedule-add",
|
|
14500
|
+
"path": [
|
|
14501
|
+
"conversations",
|
|
14502
|
+
"schedule",
|
|
14503
|
+
"add"
|
|
14504
|
+
],
|
|
14505
|
+
"display": "/pan conversations schedule add",
|
|
14506
|
+
"description": "Add a schedule; <conv> is self, a conversation number, a name, or a title match",
|
|
14507
|
+
"args": [{
|
|
14508
|
+
"name": "conv",
|
|
14509
|
+
"required": true,
|
|
14510
|
+
"variadic": false
|
|
14511
|
+
}],
|
|
14512
|
+
"options": [
|
|
14513
|
+
{
|
|
14514
|
+
"flags": "--cron <expr>",
|
|
14515
|
+
"description": "5-field cron expression, evaluated in --tz",
|
|
14516
|
+
"required": true,
|
|
14517
|
+
"valueHint": "expr"
|
|
14518
|
+
},
|
|
14519
|
+
{
|
|
14520
|
+
"flags": "--hourly",
|
|
14521
|
+
"description": "Every hour on the hour",
|
|
14522
|
+
"required": false,
|
|
14523
|
+
"valueHint": null
|
|
14524
|
+
},
|
|
14525
|
+
{
|
|
14526
|
+
"flags": "--daily <HH:MM>",
|
|
14527
|
+
"description": "Every day at HH:MM",
|
|
14528
|
+
"required": true,
|
|
14529
|
+
"valueHint": "HH:MM"
|
|
14530
|
+
},
|
|
14531
|
+
{
|
|
14532
|
+
"flags": "--weekdays <HH:MM>",
|
|
14533
|
+
"description": "Monday to Friday at HH:MM",
|
|
14534
|
+
"required": true,
|
|
14535
|
+
"valueHint": "HH:MM"
|
|
14536
|
+
},
|
|
14537
|
+
{
|
|
14538
|
+
"flags": "--weekly <spec>",
|
|
14539
|
+
"description": "Once a week: \"<day> HH:MM\", e.g. \"mon 09:00\"",
|
|
14540
|
+
"required": true,
|
|
14541
|
+
"valueHint": "spec"
|
|
14542
|
+
},
|
|
14543
|
+
{
|
|
14544
|
+
"flags": "--prompt <text>",
|
|
14545
|
+
"description": "The prompt to send",
|
|
14546
|
+
"required": true,
|
|
14547
|
+
"valueHint": "text"
|
|
14548
|
+
},
|
|
14549
|
+
{
|
|
14550
|
+
"flags": "--prompt-file <path>",
|
|
14551
|
+
"description": "Read the prompt from a file",
|
|
14552
|
+
"required": true,
|
|
14553
|
+
"valueHint": "path"
|
|
14554
|
+
},
|
|
14555
|
+
{
|
|
14556
|
+
"flags": "--tz <zone>",
|
|
14557
|
+
"description": "IANA time zone (default: this machine's zone)",
|
|
14558
|
+
"required": true,
|
|
14559
|
+
"valueHint": "zone"
|
|
14560
|
+
},
|
|
14561
|
+
{
|
|
14562
|
+
"flags": "--paused",
|
|
14563
|
+
"description": "Create the schedule paused",
|
|
14564
|
+
"required": false,
|
|
14565
|
+
"valueHint": null
|
|
14566
|
+
},
|
|
14567
|
+
{
|
|
14568
|
+
"flags": "--json",
|
|
14569
|
+
"description": "Output the created schedule as JSON",
|
|
14570
|
+
"required": false,
|
|
14571
|
+
"valueHint": null
|
|
14572
|
+
}
|
|
14573
|
+
],
|
|
14574
|
+
"aliases": [],
|
|
14575
|
+
"category": "Conversation"
|
|
14576
|
+
},
|
|
14577
|
+
{
|
|
14578
|
+
"id": "pan-conversations-schedule-list",
|
|
14579
|
+
"path": [
|
|
14580
|
+
"conversations",
|
|
14581
|
+
"schedule",
|
|
14582
|
+
"list"
|
|
14583
|
+
],
|
|
14584
|
+
"display": "/pan conversations schedule list",
|
|
14585
|
+
"description": "List schedules (all, or one conversation's)",
|
|
14586
|
+
"args": [{
|
|
14587
|
+
"name": "conv",
|
|
14588
|
+
"required": false,
|
|
14589
|
+
"variadic": false
|
|
14590
|
+
}],
|
|
14591
|
+
"options": [{
|
|
14592
|
+
"flags": "--json",
|
|
14593
|
+
"description": "Output as JSON",
|
|
14594
|
+
"required": false,
|
|
14595
|
+
"valueHint": null
|
|
14596
|
+
}],
|
|
14597
|
+
"aliases": [],
|
|
14598
|
+
"category": "Conversation"
|
|
14599
|
+
},
|
|
14600
|
+
{
|
|
14601
|
+
"id": "pan-conversations-schedule-pause",
|
|
14602
|
+
"path": [
|
|
14603
|
+
"conversations",
|
|
14604
|
+
"schedule",
|
|
14605
|
+
"pause"
|
|
14606
|
+
],
|
|
14607
|
+
"display": "/pan conversations schedule pause",
|
|
14608
|
+
"description": "Pause a schedule",
|
|
14609
|
+
"args": [{
|
|
14610
|
+
"name": "id",
|
|
13291
14611
|
"required": true,
|
|
13292
14612
|
"variadic": false
|
|
13293
14613
|
}],
|
|
@@ -13296,32 +14616,35 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
13296
14616
|
"category": "Conversation"
|
|
13297
14617
|
},
|
|
13298
14618
|
{
|
|
13299
|
-
"id": "pan-conversations-
|
|
13300
|
-
"path": [
|
|
13301
|
-
|
|
13302
|
-
|
|
14619
|
+
"id": "pan-conversations-schedule-resume",
|
|
14620
|
+
"path": [
|
|
14621
|
+
"conversations",
|
|
14622
|
+
"schedule",
|
|
14623
|
+
"resume"
|
|
14624
|
+
],
|
|
14625
|
+
"display": "/pan conversations schedule resume",
|
|
14626
|
+
"description": "Resume a paused schedule; the next run is computed from now",
|
|
13303
14627
|
"args": [{
|
|
13304
|
-
"name": "
|
|
14628
|
+
"name": "id",
|
|
13305
14629
|
"required": true,
|
|
13306
14630
|
"variadic": false
|
|
13307
14631
|
}],
|
|
13308
|
-
"options": [
|
|
13309
|
-
"flags": "--json",
|
|
13310
|
-
"description": "Output { links, effective } as JSON",
|
|
13311
|
-
"required": false,
|
|
13312
|
-
"valueHint": null
|
|
13313
|
-
}],
|
|
14632
|
+
"options": [],
|
|
13314
14633
|
"aliases": [],
|
|
13315
14634
|
"category": "Conversation"
|
|
13316
14635
|
},
|
|
13317
14636
|
{
|
|
13318
|
-
"id": "pan-conversations-
|
|
13319
|
-
"path": [
|
|
13320
|
-
|
|
13321
|
-
|
|
14637
|
+
"id": "pan-conversations-schedule-rm",
|
|
14638
|
+
"path": [
|
|
14639
|
+
"conversations",
|
|
14640
|
+
"schedule",
|
|
14641
|
+
"rm"
|
|
14642
|
+
],
|
|
14643
|
+
"display": "/pan conversations schedule rm",
|
|
14644
|
+
"description": "Delete a schedule",
|
|
13322
14645
|
"args": [{
|
|
13323
|
-
"name": "
|
|
13324
|
-
"required":
|
|
14646
|
+
"name": "id",
|
|
14647
|
+
"required": true,
|
|
13325
14648
|
"variadic": false
|
|
13326
14649
|
}],
|
|
13327
14650
|
"options": [],
|
|
@@ -13907,6 +15230,30 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
13907
15230
|
"description": "Stop the worker after its first report",
|
|
13908
15231
|
"required": false,
|
|
13909
15232
|
"valueHint": null
|
|
15233
|
+
},
|
|
15234
|
+
{
|
|
15235
|
+
"flags": "--machine <label|auto>",
|
|
15236
|
+
"description": "Run on a linked machine (label or environment id), or auto to place it by load",
|
|
15237
|
+
"required": true,
|
|
15238
|
+
"valueHint": "label|auto"
|
|
15239
|
+
},
|
|
15240
|
+
{
|
|
15241
|
+
"flags": "--needs <tags>",
|
|
15242
|
+
"description": "Comma-separated capability tags the machine must have (docker, gpu, ios-sim, …)",
|
|
15243
|
+
"required": true,
|
|
15244
|
+
"valueHint": "tags"
|
|
15245
|
+
},
|
|
15246
|
+
{
|
|
15247
|
+
"flags": "--push-first",
|
|
15248
|
+
"description": "With --machine: push unpushed commits before starting on the other machine",
|
|
15249
|
+
"required": false,
|
|
15250
|
+
"valueHint": null
|
|
15251
|
+
},
|
|
15252
|
+
{
|
|
15253
|
+
"flags": "--ignore-unpushed",
|
|
15254
|
+
"description": "With --machine: start even though local commits are not pushed",
|
|
15255
|
+
"required": false,
|
|
15256
|
+
"valueHint": null
|
|
13910
15257
|
}
|
|
13911
15258
|
],
|
|
13912
15259
|
"aliases": [],
|
|
@@ -14206,6 +15553,18 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
14206
15553
|
"required": false,
|
|
14207
15554
|
"valueHint": null
|
|
14208
15555
|
},
|
|
15556
|
+
{
|
|
15557
|
+
"flags": "--machine <label|auto>",
|
|
15558
|
+
"description": "Where to run: a linked machine's label or environment id, or auto",
|
|
15559
|
+
"required": true,
|
|
15560
|
+
"valueHint": "label|auto"
|
|
15561
|
+
},
|
|
15562
|
+
{
|
|
15563
|
+
"flags": "--needs <tags>",
|
|
15564
|
+
"description": "With --machine auto: comma-separated capability tags the machine must have",
|
|
15565
|
+
"required": true,
|
|
15566
|
+
"valueHint": "tags"
|
|
15567
|
+
},
|
|
14209
15568
|
{
|
|
14210
15569
|
"flags": "--no-wait",
|
|
14211
15570
|
"description": "Return without waiting for the lane to start",
|
|
@@ -14380,7 +15739,7 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
14380
15739
|
"id": "pan-lane-stop",
|
|
14381
15740
|
"path": ["lane", "stop"],
|
|
14382
15741
|
"display": "/pan lane stop",
|
|
14383
|
-
"description": "Stop a lane through the conversation stop door",
|
|
15742
|
+
"description": "Stop a lane through the conversation stop door (on its own machine for a remote lane)",
|
|
14384
15743
|
"args": [{
|
|
14385
15744
|
"name": "lane",
|
|
14386
15745
|
"required": true,
|
|
@@ -15537,6 +16896,11 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
15537
16896
|
"description": "Exit non-zero if any optional dependency is missing (e.g. Pi binary)",
|
|
15538
16897
|
"required": false,
|
|
15539
16898
|
"valueHint": null
|
|
16899
|
+
}, {
|
|
16900
|
+
"flags": "--json",
|
|
16901
|
+
"description": "Print every check as JSON (name, status, message, fix); same exit code as text mode",
|
|
16902
|
+
"required": false,
|
|
16903
|
+
"valueHint": null
|
|
15540
16904
|
}],
|
|
15541
16905
|
"aliases": [],
|
|
15542
16906
|
"category": "Core"
|
|
@@ -15556,6 +16920,47 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
15556
16920
|
"aliases": [],
|
|
15557
16921
|
"category": "Core"
|
|
15558
16922
|
},
|
|
16923
|
+
{
|
|
16924
|
+
"id": "pan-diagnose",
|
|
16925
|
+
"path": ["diagnose"],
|
|
16926
|
+
"display": "/pan diagnose",
|
|
16927
|
+
"description": "Collect a redacted diagnostic bundle and start Claude Code or Codex to fix the problem",
|
|
16928
|
+
"args": [],
|
|
16929
|
+
"options": [
|
|
16930
|
+
{
|
|
16931
|
+
"flags": "--harness <harness>",
|
|
16932
|
+
"description": "Harness to start",
|
|
16933
|
+
"required": true,
|
|
16934
|
+
"valueHint": "harness"
|
|
16935
|
+
},
|
|
16936
|
+
{
|
|
16937
|
+
"flags": "--describe <text>",
|
|
16938
|
+
"description": "What went wrong, in your words (saved in the bundle)",
|
|
16939
|
+
"required": true,
|
|
16940
|
+
"valueHint": "text"
|
|
16941
|
+
},
|
|
16942
|
+
{
|
|
16943
|
+
"flags": "--bundle-only",
|
|
16944
|
+
"description": "Write the bundle and print its path; do not start a harness",
|
|
16945
|
+
"required": false,
|
|
16946
|
+
"valueHint": null
|
|
16947
|
+
},
|
|
16948
|
+
{
|
|
16949
|
+
"flags": "--no-issue",
|
|
16950
|
+
"description": "Do not let the session draft or create an upstream issue",
|
|
16951
|
+
"required": false,
|
|
16952
|
+
"valueHint": null
|
|
16953
|
+
},
|
|
16954
|
+
{
|
|
16955
|
+
"flags": "--yes",
|
|
16956
|
+
"description": "Start the harness without asking to confirm the bundle",
|
|
16957
|
+
"required": false,
|
|
16958
|
+
"valueHint": null
|
|
16959
|
+
}
|
|
16960
|
+
],
|
|
16961
|
+
"aliases": [],
|
|
16962
|
+
"category": "CLI"
|
|
16963
|
+
},
|
|
15559
16964
|
{
|
|
15560
16965
|
"id": "pan-resources",
|
|
15561
16966
|
"path": ["resources"],
|
|
@@ -15875,6 +17280,11 @@ const COMPOSER_COMMAND_MANIFEST = [
|
|
|
15875
17280
|
"description": "Port to listen on",
|
|
15876
17281
|
"required": true,
|
|
15877
17282
|
"valueHint": "port"
|
|
17283
|
+
}, {
|
|
17284
|
+
"flags": "--no-open",
|
|
17285
|
+
"description": "Do not open a browser",
|
|
17286
|
+
"required": false,
|
|
17287
|
+
"valueHint": null
|
|
15878
17288
|
}],
|
|
15879
17289
|
"aliases": [],
|
|
15880
17290
|
"category": "CLI"
|
|
@@ -16277,6 +17687,39 @@ function isConfiguredPullRequestRepo(ref, repos) {
|
|
|
16277
17687
|
return repos.some((repo) => repo.host === ref.host && repo.repository === ref.repository);
|
|
16278
17688
|
}
|
|
16279
17689
|
//#endregion
|
|
17690
|
+
//#region src/tracker-issue-ref.ts
|
|
17691
|
+
const GITHUB_ISSUE = /^(?:https?:\/\/)?github\.com\/([\w.-]+\/[\w.-]+)\/issues\/(\d+)\/?(?:[?#].*)?$/i;
|
|
17692
|
+
const LINEAR_ISSUE = /^(?:https?:\/\/)?linear\.app\/[\w.-]+\/issue\/([A-Za-z]+-\d+)(?:\/[^?#]*)?(?:[?#].*)?$/i;
|
|
17693
|
+
function parseTrackerIssueUrl(input) {
|
|
17694
|
+
const text = input.trim();
|
|
17695
|
+
const github = GITHUB_ISSUE.exec(text);
|
|
17696
|
+
if (github) {
|
|
17697
|
+
const number = Number(github[2]);
|
|
17698
|
+
if (!Number.isSafeInteger(number) || number <= 0) return null;
|
|
17699
|
+
return {
|
|
17700
|
+
tracker: "github",
|
|
17701
|
+
repository: github[1].toLowerCase().replace(/\.git$/, ""),
|
|
17702
|
+
number
|
|
17703
|
+
};
|
|
17704
|
+
}
|
|
17705
|
+
const linear = LINEAR_ISSUE.exec(text);
|
|
17706
|
+
if (linear) return {
|
|
17707
|
+
tracker: "linear",
|
|
17708
|
+
identifier: linear[1].toUpperCase()
|
|
17709
|
+
};
|
|
17710
|
+
return null;
|
|
17711
|
+
}
|
|
17712
|
+
function resolveTrackerIssueId(ref, projects) {
|
|
17713
|
+
for (const project of projects) {
|
|
17714
|
+
const prefix = typeof project?.linearTeam === "string" ? project.linearTeam.trim().toUpperCase() : "";
|
|
17715
|
+
if (!prefix || project.tracker !== ref.tracker) continue;
|
|
17716
|
+
if (ref.tracker === "github") {
|
|
17717
|
+
if (project.githubRepo?.toLowerCase() === ref.repository) return `${prefix}-${ref.number}`;
|
|
17718
|
+
} else if (ref.identifier.slice(0, ref.identifier.lastIndexOf("-")) === prefix) return ref.identifier;
|
|
17719
|
+
}
|
|
17720
|
+
return null;
|
|
17721
|
+
}
|
|
17722
|
+
//#endregion
|
|
16280
17723
|
//#region src/conversation-rows.ts
|
|
16281
17724
|
/**
|
|
16282
17725
|
* Conversation-row classifiers shared by the dashboard server (`src/lib`) and
|
|
@@ -16380,6 +17823,241 @@ function hasToolResult(e) {
|
|
|
16380
17823
|
return !!e.result || (e.resultBytes ?? 0) > 0;
|
|
16381
17824
|
}
|
|
16382
17825
|
//#endregion
|
|
17826
|
+
//#region src/machines.ts
|
|
17827
|
+
/**
|
|
17828
|
+
* Secure-channel link protocol version (D-4645-11). Independent of
|
|
17829
|
+
* `ENVIRONMENT_PROTOCOL_VERSION`: a peer whose descriptor reports another value,
|
|
17830
|
+
* or no `capabilities.machineLinks`, is `unsupported`.
|
|
17831
|
+
*/
|
|
17832
|
+
const LINK_PROTOCOL_VERSION = 1;
|
|
17833
|
+
/** The exact command that installs one Overdeck version (PAN-4654 FR-1, D-2). */
|
|
17834
|
+
function overdeckInstallCommand(version) {
|
|
17835
|
+
return `npm install -g @overdeck/core@${version}`;
|
|
17836
|
+
}
|
|
17837
|
+
/** Route kinds, ranked best to worst (D-10 of the Anywhere PRD). */
|
|
17838
|
+
const ROUTE_KINDS = [
|
|
17839
|
+
"lan",
|
|
17840
|
+
"tailnet",
|
|
17841
|
+
"ssh",
|
|
17842
|
+
"public",
|
|
17843
|
+
"direct",
|
|
17844
|
+
"relay"
|
|
17845
|
+
];
|
|
17846
|
+
const RouteKind = Schema.Literals(ROUTE_KINDS);
|
|
17847
|
+
/**
|
|
17848
|
+
* Where a route on a link came from. `directory` routes (PAN-2356) are dynamic: offered while the
|
|
17849
|
+
* overdeck.ai directory lists the peer, never stored in machine-links.json.
|
|
17850
|
+
*/
|
|
17851
|
+
const RouteSource = Schema.Literals([
|
|
17852
|
+
"pairing",
|
|
17853
|
+
"manual",
|
|
17854
|
+
"advertised",
|
|
17855
|
+
"directory"
|
|
17856
|
+
]);
|
|
17857
|
+
/** An endpoint a machine advertises in its descriptor (`lan` and `tailnet` only in this issue). */
|
|
17858
|
+
const AdvertisedEndpoint = Schema.Struct({
|
|
17859
|
+
kind: Schema.Literals(["lan", "tailnet"]),
|
|
17860
|
+
/** `tcp://host:port` or `wss://host[:port]/ws/link`. */
|
|
17861
|
+
url: Schema.String
|
|
17862
|
+
});
|
|
17863
|
+
/** Link supervisor state (FR-3). */
|
|
17864
|
+
const LinkState = Schema.Literals([
|
|
17865
|
+
"online",
|
|
17866
|
+
"connecting",
|
|
17867
|
+
"offline",
|
|
17868
|
+
"unsupported",
|
|
17869
|
+
"revoked"
|
|
17870
|
+
]);
|
|
17871
|
+
/** Access level of a link (FR-4). */
|
|
17872
|
+
const LinkAccess = Schema.Literals(["operator", "agent-fenced"]);
|
|
17873
|
+
/** Last known result of probing one route. */
|
|
17874
|
+
const LinkRouteStatus = Schema.Literals([
|
|
17875
|
+
"untried",
|
|
17876
|
+
"current",
|
|
17877
|
+
"reachable",
|
|
17878
|
+
"unreachable"
|
|
17879
|
+
]);
|
|
17880
|
+
const LinkRouteView = Schema.Struct({
|
|
17881
|
+
url: Schema.String,
|
|
17882
|
+
kind: RouteKind,
|
|
17883
|
+
source: RouteSource,
|
|
17884
|
+
status: LinkRouteStatus
|
|
17885
|
+
});
|
|
17886
|
+
/** A heartbeat gap, diagnosed as a peer freeze or a network failure (FR-9). */
|
|
17887
|
+
const LinkIncident = Schema.Struct({
|
|
17888
|
+
kind: Schema.Literals(["froze", "network"]),
|
|
17889
|
+
durationMs: Schema.Number,
|
|
17890
|
+
/** ISO-8601 UTC time the gap ended, in the linking machine's clock. */
|
|
17891
|
+
at: Schema.String
|
|
17892
|
+
});
|
|
17893
|
+
/** Whether the linking server started the SSH host's Overdeck or adopted one already running (PAN-4404). */
|
|
17894
|
+
const SshLaunch = Schema.Literals(["managed", "external"]);
|
|
17895
|
+
/** State of the local SSH port forward that carries an SSH machine's link (PAN-4404 D-4404-10). */
|
|
17896
|
+
const SshForwardState = Schema.Literals([
|
|
17897
|
+
"starting",
|
|
17898
|
+
"up",
|
|
17899
|
+
"down",
|
|
17900
|
+
"attention"
|
|
17901
|
+
]);
|
|
17902
|
+
/** The SSH side of a link that this server set up over SSH. */
|
|
17903
|
+
const SshLinkInfo = Schema.Struct({
|
|
17904
|
+
destination: Schema.String,
|
|
17905
|
+
launch: SshLaunch,
|
|
17906
|
+
forward: SshForwardState,
|
|
17907
|
+
forwardDetail: Schema.NullOr(Schema.String),
|
|
17908
|
+
localPort: Schema.Number,
|
|
17909
|
+
remotePort: Schema.Number
|
|
17910
|
+
});
|
|
17911
|
+
/** PAN-4651 D-4651-8: a machine's load, sampled every 15 s and carried in the link heartbeat. */
|
|
17912
|
+
const LoadSample = Schema.Struct({
|
|
17913
|
+
/** CPU PSI `some avg10` (percent); null off Linux. */
|
|
17914
|
+
cpuPsiSomeAvg10: Schema.NullOr(Schema.Number),
|
|
17915
|
+
cpuSaturated: Schema.Boolean,
|
|
17916
|
+
memAvailableBytes: Schema.NullOr(Schema.Number),
|
|
17917
|
+
workingAgents: Schema.Number,
|
|
17918
|
+
sampledAt: Schema.String
|
|
17919
|
+
});
|
|
17920
|
+
/** PAN-4651 FR-7: `on-request` reserves a machine — Auto skips it unless only it has a needed tag. */
|
|
17921
|
+
const MachinePlacementMode = Schema.Literals(["auto", "on-request"]);
|
|
17922
|
+
/** PAN-4651 FR-6: `CPU 3% · 41 GB · 2 agents` (unknown parts `n/a`); null without a sample. */
|
|
17923
|
+
function formatMachineLoad(load) {
|
|
17924
|
+
if (!load) return null;
|
|
17925
|
+
return `CPU ${load.cpuPsiSomeAvg10 === null ? "n/a" : `${Math.round(load.cpuPsiSomeAvg10)}%`} · ${load.memAvailableBytes === null ? "n/a" : `${Math.floor(load.memAvailableBytes / 2 ** 30)}`} GB · ${load.workingAgents} agents`;
|
|
17926
|
+
}
|
|
17927
|
+
/** PAN-4651 FR-7: `tags: docker, linux · reserved`; null when there is neither. */
|
|
17928
|
+
function formatMachineProfile(tags, placement) {
|
|
17929
|
+
const parts = [...tags && tags.length > 0 ? [`tags: ${tags.join(", ")}`] : [], ...placement === "on-request" ? ["reserved"] : []];
|
|
17930
|
+
return parts.length > 0 ? parts.join(" · ") : null;
|
|
17931
|
+
}
|
|
17932
|
+
/** PAN-4651 D-4651-9: why Auto placement skipped one machine. */
|
|
17933
|
+
const PlacementRejection = Schema.Struct({
|
|
17934
|
+
environmentId: Schema.String,
|
|
17935
|
+
label: Schema.String,
|
|
17936
|
+
/** `offline`, `unsupported`, `no project`, `no <tag>`, `CPU saturated` or `reserved`. */
|
|
17937
|
+
reason: Schema.String
|
|
17938
|
+
});
|
|
17939
|
+
/** PAN-4651 D-4651-9: the machine Auto chose (with the one-line reason), or why none fits. */
|
|
17940
|
+
const PlacementAnswer = Schema.Union([Schema.Struct({
|
|
17941
|
+
ok: Schema.Literal(true),
|
|
17942
|
+
environmentId: Schema.String,
|
|
17943
|
+
label: Schema.String,
|
|
17944
|
+
self: Schema.Boolean,
|
|
17945
|
+
reason: Schema.String,
|
|
17946
|
+
rejections: Schema.Array(PlacementRejection)
|
|
17947
|
+
}), Schema.Struct({
|
|
17948
|
+
ok: Schema.Literal(false),
|
|
17949
|
+
rejections: Schema.Array(PlacementRejection)
|
|
17950
|
+
})]);
|
|
17951
|
+
/** PAN-4651 D-4651-11: one project a machine has registered, as linked machines see it (never a path). */
|
|
17952
|
+
const MachineProject = Schema.Struct({
|
|
17953
|
+
key: Schema.String,
|
|
17954
|
+
name: Schema.String,
|
|
17955
|
+
/** `github.com/<owner>/<repo>` or `gitlab.com/<path>`; null when the project has no remote repo. */
|
|
17956
|
+
gitOrigin: Schema.NullOr(Schema.String)
|
|
17957
|
+
});
|
|
17958
|
+
/** PAN-4651 D-4651-13: one repository across machines, as `GET /api/fleet/projects` lists it. */
|
|
17959
|
+
const FleetProjectRow = Schema.Struct({
|
|
17960
|
+
/** The git origin slug; null for a local project without one (its own row). */
|
|
17961
|
+
gitOrigin: Schema.NullOr(Schema.String),
|
|
17962
|
+
name: Schema.String,
|
|
17963
|
+
/** This machine's project for the slug, or null when only other machines have it. */
|
|
17964
|
+
local: Schema.NullOr(Schema.Struct({ key: Schema.String })),
|
|
17965
|
+
machines: Schema.Array(Schema.Struct({
|
|
17966
|
+
environmentId: Schema.String,
|
|
17967
|
+
label: Schema.String,
|
|
17968
|
+
key: Schema.String,
|
|
17969
|
+
state: LinkState
|
|
17970
|
+
}))
|
|
17971
|
+
});
|
|
17972
|
+
const FleetProjectsResponse = Schema.Struct({
|
|
17973
|
+
combine: Schema.Boolean,
|
|
17974
|
+
projects: Schema.Array(FleetProjectRow)
|
|
17975
|
+
});
|
|
17976
|
+
/** One outbound link as shown by `GET /api/machines` and `pan machines list`. */
|
|
17977
|
+
const MachineLinkView = Schema.Struct({
|
|
17978
|
+
id: Schema.String,
|
|
17979
|
+
environmentId: Schema.String,
|
|
17980
|
+
label: Schema.String,
|
|
17981
|
+
/** Fingerprint of the pinned machine key: five dash-separated groups of four hex. */
|
|
17982
|
+
fingerprint: Schema.String,
|
|
17983
|
+
access: LinkAccess,
|
|
17984
|
+
state: LinkState,
|
|
17985
|
+
stateDetail: Schema.NullOr(Schema.String),
|
|
17986
|
+
currentRoute: Schema.NullOr(Schema.String),
|
|
17987
|
+
routes: Schema.Array(LinkRouteView),
|
|
17988
|
+
lastHeartbeatAt: Schema.NullOr(Schema.String),
|
|
17989
|
+
incident: Schema.NullOr(LinkIncident),
|
|
17990
|
+
peerVersion: Schema.NullOr(Schema.String),
|
|
17991
|
+
createdAt: Schema.String,
|
|
17992
|
+
/** PAN-4650: Hide this machine — its conversations are left out of the conversation list. */
|
|
17993
|
+
hidden: Schema.optional(Schema.Boolean),
|
|
17994
|
+
/** Present only on links this server set up over SSH. */
|
|
17995
|
+
ssh: Schema.optional(SshLinkInfo),
|
|
17996
|
+
/** PAN-4651: the peer's last heartbeat load sample; null before one arrives or from a peer that predates it. */
|
|
17997
|
+
load: Schema.optional(Schema.NullOr(LoadSample)),
|
|
17998
|
+
/** PAN-4651: the peer's capability tags (detected plus `anywhere.machine.tags`). */
|
|
17999
|
+
tags: Schema.optional(Schema.Array(Schema.String)),
|
|
18000
|
+
placement: Schema.optional(MachinePlacementMode)
|
|
18001
|
+
});
|
|
18002
|
+
/** One `machine` token this machine issued to another machine (inbound access). */
|
|
18003
|
+
const InboundMachineView = Schema.Struct({
|
|
18004
|
+
tokenId: Schema.String,
|
|
18005
|
+
environmentId: Schema.String,
|
|
18006
|
+
label: Schema.String,
|
|
18007
|
+
fingerprint: Schema.String,
|
|
18008
|
+
access: LinkAccess,
|
|
18009
|
+
createdAt: Schema.String,
|
|
18010
|
+
lastUsedAt: Schema.NullOr(Schema.String)
|
|
18011
|
+
});
|
|
18012
|
+
const MachinesResponse = Schema.Struct({
|
|
18013
|
+
self: Schema.Struct({
|
|
18014
|
+
environmentId: Schema.String,
|
|
18015
|
+
label: Schema.String,
|
|
18016
|
+
fingerprint: Schema.String,
|
|
18017
|
+
/** PAN-4650 D-4: linked machines list this machine's conversations (anywhere.json, default on). */
|
|
18018
|
+
shareConversations: Schema.Boolean,
|
|
18019
|
+
/** PAN-4651 D-4651-13: one project per git origin across machines (anywhere.json, default on). */
|
|
18020
|
+
combineRepositories: Schema.optional(Schema.Boolean),
|
|
18021
|
+
/** PAN-4651: this machine's own load sample, tags and placement mode. */
|
|
18022
|
+
load: Schema.optional(Schema.NullOr(LoadSample)),
|
|
18023
|
+
tags: Schema.optional(Schema.Array(Schema.String)),
|
|
18024
|
+
placement: Schema.optional(MachinePlacementMode)
|
|
18025
|
+
}),
|
|
18026
|
+
links: Schema.Array(MachineLinkView),
|
|
18027
|
+
inbound: Schema.Array(InboundMachineView)
|
|
18028
|
+
});
|
|
18029
|
+
/**
|
|
18030
|
+
* Version of the `OVERDECK_SSH_HELPER` result line that `pan machines ssh-helper`
|
|
18031
|
+
* prints on the SSH host (PAN-4404).
|
|
18032
|
+
*/
|
|
18033
|
+
const SSH_HELPER_PROTOCOL = 1;
|
|
18034
|
+
/** Error codes of the SSH machine flow (PAN-4404 D-4404-9). */
|
|
18035
|
+
const SSH_MACHINE_ERROR_CODES = [
|
|
18036
|
+
"bad-destination",
|
|
18037
|
+
"busy",
|
|
18038
|
+
"unresolvable",
|
|
18039
|
+
"unreachable",
|
|
18040
|
+
"host-key",
|
|
18041
|
+
"auth-failed",
|
|
18042
|
+
"pan-missing",
|
|
18043
|
+
"version-mismatch",
|
|
18044
|
+
"helper-failed",
|
|
18045
|
+
"start-failed",
|
|
18046
|
+
"forward-failed",
|
|
18047
|
+
"self-link",
|
|
18048
|
+
"not-found"
|
|
18049
|
+
];
|
|
18050
|
+
const SshMachineErrorCode = Schema.Literals(SSH_MACHINE_ERROR_CODES);
|
|
18051
|
+
/** Answer of `POST /api/machines/ssh/test` and `pan machines test-ssh`. */
|
|
18052
|
+
const SshTestResult = Schema.Struct({
|
|
18053
|
+
reachable: Schema.Boolean,
|
|
18054
|
+
panVersion: Schema.NullOr(Schema.String),
|
|
18055
|
+
localVersion: Schema.String,
|
|
18056
|
+
versionMatches: Schema.Boolean,
|
|
18057
|
+
error: Schema.NullOr(SshMachineErrorCode),
|
|
18058
|
+
message: Schema.NullOr(Schema.String)
|
|
18059
|
+
});
|
|
18060
|
+
//#endregion
|
|
16383
18061
|
//#region src/environment.ts
|
|
16384
18062
|
/** Wire protocol version a client and server must agree on. */
|
|
16385
18063
|
const ENVIRONMENT_PROTOCOL_VERSION = 1;
|
|
@@ -16390,7 +18068,9 @@ const EnvironmentCapabilities = Schema.Struct({
|
|
|
16390
18068
|
/** `GET/DELETE /api/devices` is available. */
|
|
16391
18069
|
deviceSessions: Schema.Boolean,
|
|
16392
18070
|
/** `/ws/*` upgrades require a credential (PAN-1166). */
|
|
16393
|
-
terminalAuth: Schema.Boolean
|
|
18071
|
+
terminalAuth: Schema.Boolean,
|
|
18072
|
+
/** Secure machine links are accepted (PAN-4645). Absent on older servers ⇒ `unsupported`. */
|
|
18073
|
+
machineLinks: Schema.optional(Schema.Boolean)
|
|
16394
18074
|
});
|
|
16395
18075
|
const EnvironmentDescriptor = Schema.Struct({
|
|
16396
18076
|
descriptorVersion: Schema.Literal(1),
|
|
@@ -16404,7 +18084,13 @@ const EnvironmentDescriptor = Schema.Struct({
|
|
|
16404
18084
|
serverVersion: Schema.String,
|
|
16405
18085
|
/** The server's `ENVIRONMENT_PROTOCOL_VERSION`. */
|
|
16406
18086
|
protocolVersion: Schema.Number,
|
|
16407
|
-
capabilities: EnvironmentCapabilities
|
|
18087
|
+
capabilities: EnvironmentCapabilities,
|
|
18088
|
+
/** Long-term X25519 machine public key, 64 lowercase hex (PAN-4645). */
|
|
18089
|
+
machineKey: Schema.optional(Schema.String),
|
|
18090
|
+
/** The server's `LINK_PROTOCOL_VERSION`; optional so older descriptors still decode (D-4645-11). */
|
|
18091
|
+
linkProtocol: Schema.optional(Schema.Number),
|
|
18092
|
+
/** Endpoints this machine advertises for secure channels. */
|
|
18093
|
+
endpoints: Schema.optional(Schema.Array(AdvertisedEndpoint))
|
|
16408
18094
|
});
|
|
16409
18095
|
/** A server-local id qualified by the environment that owns it. */
|
|
16410
18096
|
const ScopedRef = (localId) => Schema.Struct({
|
|
@@ -16421,6 +18107,537 @@ function isProtocolCompatible(descriptor, clientProtocolVersion) {
|
|
|
16421
18107
|
return descriptor.protocolVersion === clientProtocolVersion;
|
|
16422
18108
|
}
|
|
16423
18109
|
//#endregion
|
|
16424
|
-
export { ACP_BEHAVIOR, ACP_CAPABILITIES, 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, CLAUDE_CODE_CAPABILITIES, CODEX_BEHAVIOR, CODEX_CAPABILITIES, 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, CONVERSATION_PAGE_DEFAULT_LIMIT, CONVERSATION_PAGE_MAX_LIMIT, CONVERSATION_PAYLOAD_BUDGET_BYTES, CONVERSATION_WINDOW_MAX_BYTES, CONVERSATION_WINDOW_MAX_ROWS, 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, ConversationResume, ConversationTitleChangedEvent, ConversationWindow, CostEventRecordedEvent, DEFAULT_EFFORT, DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE, DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, DashboardLifecycleStartedEvent, DashboardSnapshot, DeepWipeRpc, DeployStalenessSnapshot, DerivedBranchState, DerivedIssueState, DerivedPrOutsidePipeline, DerivedPrState, DerivedWorkStart, DirectoryEntry, DirectoryEntryKind, DirectoryEntryLocation, DirectoryEntrySource, DirectoryEntryState, DirectoryPause, DirectoryPauseBy, DirectoryProviderError, DirectoryScope, DirectoryTranscriptRef, DiscoveredSessionSnapshot, DomainEvent, EDITORS, EFFORT_LEVELS, ENVIRONMENT_PROTOCOL_VERSION, EditorIdSchema, EffortLevelSchema, EmbedProgressEvent, EmbedProgressSnapshot, EmbedSessionsRpc, EnrichCompleteEvent, EnrichProgressEvent, EnrichProgressSnapshot, EnrichSessionsRpc, EnrichStatsSnapshot, EnvironmentCapabilities, EnvironmentDescriptor, EnvironmentId, 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, HARNESS_CAPABILITY_KEYS, 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, KIMI_CODE_CAPABILITIES, 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, MUSE_CAPABILITIES, MemoryAgentRole, MemoryHealthChangedEvent, MemoryIdentity, MemoryObservation, MemoryObservationCreatedEvent, MemoryResetMarkerCreatedEvent, MemoryRollupTriggeredEvent, MemoryStatus, MemoryStatusPhase, MemoryStatusUpdatedEvent, MemoryTokenUsage, MergeReadyEvent, ModelOrigin, ModelOriginEntry, NON_ESSENTIAL_GITHUB_CALLERS, OHMYPI_BEHAVIOR, OHMYPI_CAPABILITIES, OPENCODE_BEHAVIOR, OPENCODE_CAPABILITIES, OVERDECK_AGENT_PROTOCOL_VERSION, OVERDECK_DASHBOARD_PROTOCOL_VERSION, OpenInEditorInput, OperatorInterventionEvent, OrderBook, OrderBookIndexEntry, OrderBookItem, OrderBookLane, OrderBookPosture, OrderBookSettings, OrderBookStatus, PIPELINE_MEMBERSHIP_LOADING_CODE, PRIME_AGENT_BEHAVIOR, PRIME_AGENT_CAPABILITIES, 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, RESUME_OPEN_IDS_MAX, RagDecision, RagDecisionSource, ReadFileAtPathInput, ReadFileAtPathResult, ReadFileAtPathRpc, ReadWorkspaceFileInput, ReadWorkspaceFileResult, ReadWorkspaceFileRpc, ReplayEventsResult, ReplayEventsRpc, ReplayTooFarBehind, 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, ScopedAgentRef, ScopedConversationRef, ScopedIssueRef, ScopedProjectRef, ScopedRef, ScopedTerminalRef, 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, TOOL_BODY_INLINE_MAX_BYTES, TOOL_BODY_PREVIEW_CHARS, TerminalCloseRpc, TerminalOpenRpc, TerminalOutput, TerminalResizeRpc, TerminalWriteRpc, TestPassedEvent, ThinkingState, TickMarker, TickMarkerPhase, TurnDiffFileChange, TurnDiffSummary, TurnEndAssessment, WINDOW_PINNED_OPEN_TOOLS_MAX, 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, compareTimelineKeys, createIssueDelta, decodeFlywheelDerivedStatus, decodeFlywheelStats, decodeTimelineCursor, deriveProjectCi, encodeFlywheelStats, encodeTimelineCursor, getHarness, getHarnessBehavior, getMaxMemoryObservationsPerIssue, getMaxTurnDiffSummariesPerAgent, getRuntimeBehavior, hasToolResult, indexPanesByAgentKey, isAgentRole, isAgentSessionName, isChannelReplyKind, isConfiguredPullRequestRepo, isEffortLevel, isIssueAttention, isIssueState, isLegacyPiHarnessName, isProtocolCompatible, isSingletonConversation, isTerminalBackendName, isTerminalTurnDiffSummaryStatus, laneActivityOf, normalizeChannelReplyPayload, normalizeHarnessName, omitTurnDiffSummariesForAgent, paneAgentKey, parsePullRequestRef, projectLegacySystemHealthSummary, repoFromRemoteUrl, resolveEffectivePullRequest, syncSnapshot, timelineKeyOfMessage, timelineKeyOfWork, trimMemoryObservations, trimTurnDiffSummaries, withPaneLivenessAlias };
|
|
18110
|
+
//#region src/linked-conversations.ts
|
|
18111
|
+
/** The viewing machine's name for a linked conversation: `@<environmentId>/<name>`. */
|
|
18112
|
+
function linkedConversationName(environmentId, name) {
|
|
18113
|
+
return `@${environmentId}/${name}`;
|
|
18114
|
+
}
|
|
18115
|
+
const LINKED_NAME = /^@([^/]+)\/([^/]+)$/;
|
|
18116
|
+
/**
|
|
18117
|
+
* Parse `@<target>/<name>`, where target is an environment id or a machine
|
|
18118
|
+
* label. Returns null for a local name or a malformed value.
|
|
18119
|
+
*/
|
|
18120
|
+
function parseLinkedConversationName(value) {
|
|
18121
|
+
const match = LINKED_NAME.exec(value);
|
|
18122
|
+
if (!match) return null;
|
|
18123
|
+
return {
|
|
18124
|
+
target: match[1],
|
|
18125
|
+
name: match[2]
|
|
18126
|
+
};
|
|
18127
|
+
}
|
|
18128
|
+
//#endregion
|
|
18129
|
+
//#region src/connect.ts
|
|
18130
|
+
const CONNECT_PROTOCOL_VERSION = 1;
|
|
18131
|
+
/** Relay allowance per account per UTC calendar month (OD-3): 50 GB. */
|
|
18132
|
+
const RELAY_MONTHLY_CAP_BYTES = 5e10;
|
|
18133
|
+
/** Largest webhook body the directory inbox accepts (D-2356-14). */
|
|
18134
|
+
const INBOX_BODY_MAX_BYTES = 262144;
|
|
18135
|
+
/** How long the inbox holds a sealed event before it expires (D-2356-18). */
|
|
18136
|
+
const INBOX_HOLD_MS = 864e5;
|
|
18137
|
+
/** How long an approval request stays live (D-2356-9). */
|
|
18138
|
+
const APPROVAL_TTL_MS = 6e5;
|
|
18139
|
+
const FREE_MACHINE_LIMIT_MESSAGE = "The free account includes 3 machines";
|
|
18140
|
+
const NO_DIRECT_PATH_MESSAGE = "No direct path; install Tailscale or use the relay plan";
|
|
18141
|
+
const RELAY_CAP_MESSAGE = "Relay allowance used; install Tailscale or add 50 GB";
|
|
18142
|
+
/** WebSocket close codes the directory uses. */
|
|
18143
|
+
const CONNECT_CLOSE_CODES = {
|
|
18144
|
+
unauthorized: 4001,
|
|
18145
|
+
grantExpired: 4003,
|
|
18146
|
+
machineLimit: 4009,
|
|
18147
|
+
unsupportedProtocol: 4010,
|
|
18148
|
+
/** Replaced by a newer socket for the same machine. */
|
|
18149
|
+
replaced: 4011,
|
|
18150
|
+
forgotten: 4012
|
|
18151
|
+
};
|
|
18152
|
+
//#endregion
|
|
18153
|
+
//#region src/connect-view.ts
|
|
18154
|
+
const DirectoryClientState = Schema.Literals([
|
|
18155
|
+
"off",
|
|
18156
|
+
"connecting",
|
|
18157
|
+
"online",
|
|
18158
|
+
"refused"
|
|
18159
|
+
]);
|
|
18160
|
+
const DirectoryPlan = Schema.Literals(["free", "tester"]);
|
|
18161
|
+
/** One machine of the account, as the directory lists it. */
|
|
18162
|
+
const DirectoryMachineView = Schema.Struct({
|
|
18163
|
+
environmentId: Schema.String,
|
|
18164
|
+
label: Schema.String,
|
|
18165
|
+
publicKeyHex: Schema.String,
|
|
18166
|
+
fingerprint: Schema.String,
|
|
18167
|
+
online: Schema.Boolean,
|
|
18168
|
+
/** ISO-8601 UTC. */
|
|
18169
|
+
lastSeenAt: Schema.String,
|
|
18170
|
+
serverVersion: Schema.String,
|
|
18171
|
+
endpoints: Schema.Array(AdvertisedEndpoint),
|
|
18172
|
+
/** This machine holds a link to it. */
|
|
18173
|
+
linked: Schema.Boolean
|
|
18174
|
+
});
|
|
18175
|
+
/**
|
|
18176
|
+
* Approver side: `pending` (request arrived), `open` (approval channel open, SAS known),
|
|
18177
|
+
* `approving` (this operator approved; waiting for the other machine to accept), `failed`.
|
|
18178
|
+
*/
|
|
18179
|
+
const DirectoryApprovalState = Schema.Literals([
|
|
18180
|
+
"pending",
|
|
18181
|
+
"open",
|
|
18182
|
+
"approving",
|
|
18183
|
+
"failed"
|
|
18184
|
+
]);
|
|
18185
|
+
/** Requester side: `waiting` (no approver yet), `open` (SAS known), `accepted`, `rejected`. */
|
|
18186
|
+
const DirectoryJoinState = Schema.Literals([
|
|
18187
|
+
"waiting",
|
|
18188
|
+
"open",
|
|
18189
|
+
"accepted",
|
|
18190
|
+
"rejected"
|
|
18191
|
+
]);
|
|
18192
|
+
/** An incoming approval request: another machine asks to link with this one. */
|
|
18193
|
+
const DirectoryApprovalView = Schema.Struct({
|
|
18194
|
+
requestId: Schema.String,
|
|
18195
|
+
/** Environment id of the requesting machine. */
|
|
18196
|
+
from: Schema.String,
|
|
18197
|
+
label: Schema.String,
|
|
18198
|
+
fingerprint: Schema.String,
|
|
18199
|
+
/** Unix milliseconds. */
|
|
18200
|
+
expiresAt: Schema.Number,
|
|
18201
|
+
/** Six-digit code, set once the approval channel is open. */
|
|
18202
|
+
sas: Schema.NullOr(Schema.String),
|
|
18203
|
+
state: DirectoryApprovalState,
|
|
18204
|
+
/** Why the approval failed, when `state` is `failed`. */
|
|
18205
|
+
error: Schema.NullOr(Schema.String)
|
|
18206
|
+
});
|
|
18207
|
+
/** An outgoing join request this machine made. */
|
|
18208
|
+
const DirectoryJoinView = Schema.Struct({
|
|
18209
|
+
requestId: Schema.String,
|
|
18210
|
+
/** Target environment id, or null for every machine of the account. */
|
|
18211
|
+
to: Schema.NullOr(Schema.String),
|
|
18212
|
+
/** Unix milliseconds. */
|
|
18213
|
+
expiresAt: Schema.Number,
|
|
18214
|
+
/** Six-digit code, set once an approver opened the approval channel. */
|
|
18215
|
+
sas: Schema.NullOr(Schema.String),
|
|
18216
|
+
/** The approver's fingerprint, from the handshake key (never from the directory). */
|
|
18217
|
+
fingerprint: Schema.NullOr(Schema.String),
|
|
18218
|
+
state: DirectoryJoinState
|
|
18219
|
+
});
|
|
18220
|
+
const RelayStatusView = Schema.Struct({
|
|
18221
|
+
/** UTC calendar month, `YYYY-MM`. */
|
|
18222
|
+
month: Schema.String,
|
|
18223
|
+
bytesUsed: Schema.Number,
|
|
18224
|
+
capBytes: Schema.Number,
|
|
18225
|
+
stopped: Schema.Boolean
|
|
18226
|
+
});
|
|
18227
|
+
const DirectoryResponse = Schema.Struct({
|
|
18228
|
+
signedIn: Schema.Boolean,
|
|
18229
|
+
state: DirectoryClientState,
|
|
18230
|
+
/** The configured directory URL, or null when it is invalid. */
|
|
18231
|
+
url: Schema.NullOr(Schema.String),
|
|
18232
|
+
plan: Schema.NullOr(DirectoryPlan),
|
|
18233
|
+
refusal: Schema.NullOr(Schema.String),
|
|
18234
|
+
machines: Schema.Array(DirectoryMachineView),
|
|
18235
|
+
approvals: Schema.Array(DirectoryApprovalView),
|
|
18236
|
+
joins: Schema.Array(DirectoryJoinView),
|
|
18237
|
+
relay: Schema.NullOr(RelayStatusView)
|
|
18238
|
+
});
|
|
18239
|
+
//#endregion
|
|
18240
|
+
//#region src/fleet-versions.ts
|
|
18241
|
+
const FleetInstallMode = Schema.Literals([
|
|
18242
|
+
"npm-global",
|
|
18243
|
+
"development",
|
|
18244
|
+
"desktop"
|
|
18245
|
+
]);
|
|
18246
|
+
const FleetComponentStatus = Schema.Literals([
|
|
18247
|
+
"pending",
|
|
18248
|
+
"running",
|
|
18249
|
+
"updated",
|
|
18250
|
+
"current",
|
|
18251
|
+
"skipped",
|
|
18252
|
+
"failed"
|
|
18253
|
+
]);
|
|
18254
|
+
const FleetJobPhase = Schema.Literals([
|
|
18255
|
+
"waiting",
|
|
18256
|
+
"updating",
|
|
18257
|
+
"restarting",
|
|
18258
|
+
"done",
|
|
18259
|
+
"failed",
|
|
18260
|
+
"cancelled"
|
|
18261
|
+
]);
|
|
18262
|
+
const FleetUpdateMode = Schema.Literals(["when-idle", "now"]);
|
|
18263
|
+
/** Fleet-table column order (D-16): these binaries first, then any other binary alphabetically. */
|
|
18264
|
+
const FLEET_BINARY_ORDER = [
|
|
18265
|
+
"claude",
|
|
18266
|
+
"codex",
|
|
18267
|
+
"kimi",
|
|
18268
|
+
"opencode",
|
|
18269
|
+
"muse",
|
|
18270
|
+
"prime-agent",
|
|
18271
|
+
"omp"
|
|
18272
|
+
];
|
|
18273
|
+
/** Sort comparator for harness binary names in D-16 order. */
|
|
18274
|
+
function compareFleetBinaries(a, b) {
|
|
18275
|
+
const rank = (binary) => {
|
|
18276
|
+
const index = FLEET_BINARY_ORDER.indexOf(binary);
|
|
18277
|
+
return index === -1 ? FLEET_BINARY_ORDER.length : index;
|
|
18278
|
+
};
|
|
18279
|
+
return rank(a) - rank(b) || a.localeCompare(b);
|
|
18280
|
+
}
|
|
18281
|
+
/** After this long waiting for turns, the row says it is still waiting and points at Update now (FR-8). */
|
|
18282
|
+
const FLEET_UPDATE_STILL_WAITING_MS = 30 * 6e4;
|
|
18283
|
+
const FleetComponentSchema = Schema.Struct({
|
|
18284
|
+
name: Schema.String,
|
|
18285
|
+
label: Schema.String,
|
|
18286
|
+
before: Schema.NullOr(Schema.String),
|
|
18287
|
+
after: Schema.NullOr(Schema.String),
|
|
18288
|
+
status: FleetComponentStatus,
|
|
18289
|
+
detail: Schema.NullOr(Schema.String)
|
|
18290
|
+
});
|
|
18291
|
+
/** Decodes a persisted job file. */
|
|
18292
|
+
const FleetUpdateJobSchema = Schema.Struct({
|
|
18293
|
+
id: Schema.String,
|
|
18294
|
+
mode: FleetUpdateMode,
|
|
18295
|
+
phase: FleetJobPhase,
|
|
18296
|
+
requestedBy: Schema.String,
|
|
18297
|
+
startedAt: Schema.String,
|
|
18298
|
+
waitingTurns: Schema.Number,
|
|
18299
|
+
waitingSince: Schema.NullOr(Schema.String),
|
|
18300
|
+
finishedAt: Schema.NullOr(Schema.String),
|
|
18301
|
+
components: Schema.Array(FleetComponentSchema)
|
|
18302
|
+
});
|
|
18303
|
+
/** Decodes a peer's `GET /api/versions/self` body. */
|
|
18304
|
+
const MachineVersionsReportSchema = Schema.Struct({
|
|
18305
|
+
environmentId: Schema.String,
|
|
18306
|
+
label: Schema.String,
|
|
18307
|
+
overdeck: Schema.Struct({
|
|
18308
|
+
version: Schema.String,
|
|
18309
|
+
installMode: FleetInstallMode,
|
|
18310
|
+
linkProtocol: Schema.Number
|
|
18311
|
+
}),
|
|
18312
|
+
harnesses: Schema.Array(Schema.Struct({
|
|
18313
|
+
binary: Schema.String,
|
|
18314
|
+
label: Schema.String,
|
|
18315
|
+
harnesses: Schema.Array(Schema.String),
|
|
18316
|
+
version: Schema.NullOr(Schema.String),
|
|
18317
|
+
updatable: Schema.Boolean,
|
|
18318
|
+
command: Schema.String,
|
|
18319
|
+
reason: Schema.NullOr(Schema.String)
|
|
18320
|
+
})),
|
|
18321
|
+
job: Schema.NullOr(FleetUpdateJobSchema)
|
|
18322
|
+
});
|
|
18323
|
+
//#endregion
|
|
18324
|
+
//#region src/color-theme.ts
|
|
18325
|
+
const TERMINAL_PALETTE_KEYS = [
|
|
18326
|
+
"background",
|
|
18327
|
+
"foreground",
|
|
18328
|
+
"cursor",
|
|
18329
|
+
"cursorAccent",
|
|
18330
|
+
"selectionBackground",
|
|
18331
|
+
"black",
|
|
18332
|
+
"red",
|
|
18333
|
+
"green",
|
|
18334
|
+
"yellow",
|
|
18335
|
+
"blue",
|
|
18336
|
+
"magenta",
|
|
18337
|
+
"cyan",
|
|
18338
|
+
"white",
|
|
18339
|
+
"brightBlack",
|
|
18340
|
+
"brightRed",
|
|
18341
|
+
"brightGreen",
|
|
18342
|
+
"brightYellow",
|
|
18343
|
+
"brightBlue",
|
|
18344
|
+
"brightMagenta",
|
|
18345
|
+
"brightCyan",
|
|
18346
|
+
"brightWhite"
|
|
18347
|
+
];
|
|
18348
|
+
const UI_KEYS = [
|
|
18349
|
+
"background",
|
|
18350
|
+
"surface",
|
|
18351
|
+
"overlay",
|
|
18352
|
+
"border",
|
|
18353
|
+
"foreground",
|
|
18354
|
+
"muted",
|
|
18355
|
+
"accent"
|
|
18356
|
+
];
|
|
18357
|
+
const COLOR_THEME_ID_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
18358
|
+
const RESERVED_COLOR_THEME_IDS = ["overdeck-dark", "overdeck-light"];
|
|
18359
|
+
const HEX_COLOR_RE = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
|
|
18360
|
+
const FONT_STYLE_RE = /^[a-z ]*$/i;
|
|
18361
|
+
const BUILTIN_COLOR_THEMES = {
|
|
18362
|
+
"overdeck-dark": {
|
|
18363
|
+
id: "overdeck-dark",
|
|
18364
|
+
name: "Overdeck Dark",
|
|
18365
|
+
type: "dark",
|
|
18366
|
+
builtin: true,
|
|
18367
|
+
terminal: {
|
|
18368
|
+
background: "#1a1a2e",
|
|
18369
|
+
foreground: "#eaeaea",
|
|
18370
|
+
cursor: "#eaeaea",
|
|
18371
|
+
cursorAccent: "#1a1a2e",
|
|
18372
|
+
selectionBackground: "#3a3a5e",
|
|
18373
|
+
black: "#1a1a2e",
|
|
18374
|
+
red: "#ff5555",
|
|
18375
|
+
green: "#50fa7b",
|
|
18376
|
+
yellow: "#f1fa8c",
|
|
18377
|
+
blue: "#6272a4",
|
|
18378
|
+
magenta: "#ff79c6",
|
|
18379
|
+
cyan: "#8be9fd",
|
|
18380
|
+
white: "#f8f8f2",
|
|
18381
|
+
brightBlack: "#6272a4",
|
|
18382
|
+
brightRed: "#ff6e6e",
|
|
18383
|
+
brightGreen: "#69ff94",
|
|
18384
|
+
brightYellow: "#ffffa5",
|
|
18385
|
+
brightBlue: "#d6acff",
|
|
18386
|
+
brightMagenta: "#ff92df",
|
|
18387
|
+
brightCyan: "#a4ffff",
|
|
18388
|
+
brightWhite: "#ffffff"
|
|
18389
|
+
}
|
|
18390
|
+
},
|
|
18391
|
+
"overdeck-light": {
|
|
18392
|
+
id: "overdeck-light",
|
|
18393
|
+
name: "Overdeck Light",
|
|
18394
|
+
type: "light",
|
|
18395
|
+
builtin: true,
|
|
18396
|
+
terminal: {
|
|
18397
|
+
background: "#ffffff",
|
|
18398
|
+
foreground: "#24292e",
|
|
18399
|
+
cursor: "#24292e",
|
|
18400
|
+
cursorAccent: "#ffffff",
|
|
18401
|
+
selectionBackground: "#bcd3f5",
|
|
18402
|
+
black: "#24292e",
|
|
18403
|
+
red: "#d73a49",
|
|
18404
|
+
green: "#22863a",
|
|
18405
|
+
yellow: "#b08800",
|
|
18406
|
+
blue: "#0366d6",
|
|
18407
|
+
magenta: "#6f42c1",
|
|
18408
|
+
cyan: "#1b7c83",
|
|
18409
|
+
white: "#6a737d",
|
|
18410
|
+
brightBlack: "#959da5",
|
|
18411
|
+
brightRed: "#cb2431",
|
|
18412
|
+
brightGreen: "#28a745",
|
|
18413
|
+
brightYellow: "#dbab09",
|
|
18414
|
+
brightBlue: "#2188ff",
|
|
18415
|
+
brightMagenta: "#8a63d2",
|
|
18416
|
+
brightCyan: "#3192aa",
|
|
18417
|
+
brightWhite: "#24292e"
|
|
18418
|
+
}
|
|
18419
|
+
}
|
|
18420
|
+
};
|
|
18421
|
+
function builtinFor(type) {
|
|
18422
|
+
return type === "dark" ? BUILTIN_COLOR_THEMES["overdeck-dark"] : BUILTIN_COLOR_THEMES["overdeck-light"];
|
|
18423
|
+
}
|
|
18424
|
+
/** Expands "#rgb" to "#rrggbb" and drops an alpha channel, lowercased, so xterm and tmux render the same opaque color. */
|
|
18425
|
+
function toOpaqueHex(hex) {
|
|
18426
|
+
const lower = hex.toLowerCase();
|
|
18427
|
+
const digits = lower.slice(1);
|
|
18428
|
+
if (digits.length === 3) return `#${digits[0]}${digits[0]}${digits[1]}${digits[1]}${digits[2]}${digits[2]}`;
|
|
18429
|
+
if (digits.length === 4) return `#${digits[0]}${digits[0]}${digits[1]}${digits[1]}${digits[2]}${digits[2]}`;
|
|
18430
|
+
if (digits.length === 8) return `#${digits.slice(0, 6)}`;
|
|
18431
|
+
return lower;
|
|
18432
|
+
}
|
|
18433
|
+
/** WCAG-contrast-based readable text color for a background hex: whichever of black/white has the higher contrast ratio. */
|
|
18434
|
+
function readableForeground(hex) {
|
|
18435
|
+
const opaque = toOpaqueHex(hex);
|
|
18436
|
+
const r = parseInt(opaque.slice(1, 3), 16) / 255;
|
|
18437
|
+
const g = parseInt(opaque.slice(3, 5), 16) / 255;
|
|
18438
|
+
const b = parseInt(opaque.slice(5, 7), 16) / 255;
|
|
18439
|
+
const channel = (c) => c <= .03928 ? c / 12.92 : Math.pow((c + .055) / 1.055, 2.4);
|
|
18440
|
+
const luminance = .2126 * channel(r) + .7152 * channel(g) + .0722 * channel(b);
|
|
18441
|
+
const contrastWithWhite = 1.05 / (luminance + .05);
|
|
18442
|
+
return (luminance + .05) / .05 >= contrastWithWhite ? "#000000" : "#ffffff";
|
|
18443
|
+
}
|
|
18444
|
+
/** Lowercase slug: runs of non-[a-z0-9] become "-", trimmed, capped at 64 chars, "theme" if empty. */
|
|
18445
|
+
function slugifyThemeId(name) {
|
|
18446
|
+
const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 64);
|
|
18447
|
+
return slug.length > 0 ? slug : "theme";
|
|
18448
|
+
}
|
|
18449
|
+
/** The built-in palette for the theme's type, overlaid with the theme's own terminal colors. */
|
|
18450
|
+
function effectiveTerminalPalette(theme) {
|
|
18451
|
+
const palette = {
|
|
18452
|
+
...builtinFor(theme.type).terminal,
|
|
18453
|
+
...theme.terminal
|
|
18454
|
+
};
|
|
18455
|
+
return {
|
|
18456
|
+
...palette,
|
|
18457
|
+
background: toOpaqueHex(palette.background)
|
|
18458
|
+
};
|
|
18459
|
+
}
|
|
18460
|
+
function isPlainObject(value) {
|
|
18461
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
18462
|
+
}
|
|
18463
|
+
function normalizeSource(raw) {
|
|
18464
|
+
if (!isPlainObject(raw)) return void 0;
|
|
18465
|
+
if (raw.kind !== "vscode-import") return void 0;
|
|
18466
|
+
if (typeof raw.fileName !== "string" || typeof raw.importedAt !== "string") return void 0;
|
|
18467
|
+
return {
|
|
18468
|
+
kind: "vscode-import",
|
|
18469
|
+
fileName: raw.fileName,
|
|
18470
|
+
importedAt: raw.importedAt
|
|
18471
|
+
};
|
|
18472
|
+
}
|
|
18473
|
+
function normalizeTerminal(raw, warnings) {
|
|
18474
|
+
if (raw === void 0) return void 0;
|
|
18475
|
+
if (!isPlainObject(raw)) {
|
|
18476
|
+
warnings.push("terminal must be an object; ignoring");
|
|
18477
|
+
return;
|
|
18478
|
+
}
|
|
18479
|
+
const result = {};
|
|
18480
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
18481
|
+
if (!TERMINAL_PALETTE_KEYS.includes(key)) {
|
|
18482
|
+
warnings.push(`unknown terminal key terminal.${key}; dropping`);
|
|
18483
|
+
continue;
|
|
18484
|
+
}
|
|
18485
|
+
if (typeof value !== "string" || !HEX_COLOR_RE.test(value)) {
|
|
18486
|
+
warnings.push(`invalid color for terminal.${key}; dropping`);
|
|
18487
|
+
continue;
|
|
18488
|
+
}
|
|
18489
|
+
result[key] = value;
|
|
18490
|
+
}
|
|
18491
|
+
return Object.keys(result).length > 0 ? result : void 0;
|
|
18492
|
+
}
|
|
18493
|
+
function normalizeUi(raw, warnings) {
|
|
18494
|
+
if (raw === void 0) return void 0;
|
|
18495
|
+
if (!isPlainObject(raw)) {
|
|
18496
|
+
warnings.push("ui must be an object; ignoring");
|
|
18497
|
+
return;
|
|
18498
|
+
}
|
|
18499
|
+
const result = {};
|
|
18500
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
18501
|
+
if (!UI_KEYS.includes(key)) {
|
|
18502
|
+
warnings.push(`unknown ui key ui.${key}; dropping`);
|
|
18503
|
+
continue;
|
|
18504
|
+
}
|
|
18505
|
+
if (typeof value !== "string" || !HEX_COLOR_RE.test(value)) {
|
|
18506
|
+
warnings.push(`invalid color for ui.${key}; dropping`);
|
|
18507
|
+
continue;
|
|
18508
|
+
}
|
|
18509
|
+
result[key] = value;
|
|
18510
|
+
}
|
|
18511
|
+
return Object.keys(result).length > 0 ? result : void 0;
|
|
18512
|
+
}
|
|
18513
|
+
function normalizeTokenColors(raw, warnings) {
|
|
18514
|
+
if (raw === void 0) return [];
|
|
18515
|
+
if (!Array.isArray(raw)) {
|
|
18516
|
+
warnings.push("syntax.tokenColors must be an array; ignoring");
|
|
18517
|
+
return [];
|
|
18518
|
+
}
|
|
18519
|
+
const entries = [];
|
|
18520
|
+
for (const entry of raw.slice(0, 2e3)) {
|
|
18521
|
+
if (!isPlainObject(entry) || !isPlainObject(entry.settings)) continue;
|
|
18522
|
+
const settings = {};
|
|
18523
|
+
const rawSettings = entry.settings;
|
|
18524
|
+
if (typeof rawSettings.foreground === "string" && HEX_COLOR_RE.test(rawSettings.foreground)) settings.foreground = rawSettings.foreground;
|
|
18525
|
+
if (typeof rawSettings.background === "string" && HEX_COLOR_RE.test(rawSettings.background)) settings.background = rawSettings.background;
|
|
18526
|
+
if (typeof rawSettings.fontStyle === "string" && FONT_STYLE_RE.test(rawSettings.fontStyle)) settings.fontStyle = rawSettings.fontStyle;
|
|
18527
|
+
const result = { settings };
|
|
18528
|
+
if (typeof entry.scope === "string") result.scope = entry.scope;
|
|
18529
|
+
else if (Array.isArray(entry.scope) && entry.scope.every((s) => typeof s === "string")) result.scope = entry.scope;
|
|
18530
|
+
entries.push(result);
|
|
18531
|
+
}
|
|
18532
|
+
return entries;
|
|
18533
|
+
}
|
|
18534
|
+
function normalizeSyntax(raw, warnings) {
|
|
18535
|
+
if (raw === void 0) return void 0;
|
|
18536
|
+
if (!isPlainObject(raw)) {
|
|
18537
|
+
warnings.push("syntax must be an object; ignoring");
|
|
18538
|
+
return;
|
|
18539
|
+
}
|
|
18540
|
+
const tokenColors = normalizeTokenColors(raw.tokenColors, warnings);
|
|
18541
|
+
let colors;
|
|
18542
|
+
if (isPlainObject(raw.colors)) {
|
|
18543
|
+
const filtered = {};
|
|
18544
|
+
const background = raw.colors["editor.background"];
|
|
18545
|
+
const foreground = raw.colors["editor.foreground"];
|
|
18546
|
+
if (typeof background === "string" && HEX_COLOR_RE.test(background)) filtered["editor.background"] = background;
|
|
18547
|
+
if (typeof foreground === "string" && HEX_COLOR_RE.test(foreground)) filtered["editor.foreground"] = foreground;
|
|
18548
|
+
if (Object.keys(filtered).length > 0) colors = filtered;
|
|
18549
|
+
}
|
|
18550
|
+
if (tokenColors.length === 0 && colors === void 0) return void 0;
|
|
18551
|
+
return {
|
|
18552
|
+
tokenColors,
|
|
18553
|
+
...colors !== void 0 ? { colors } : {}
|
|
18554
|
+
};
|
|
18555
|
+
}
|
|
18556
|
+
/**
|
|
18557
|
+
* Validates and sanitizes a raw theme. An invalid color or unknown key is
|
|
18558
|
+
* dropped with a warning naming it — never an error. A missing/invalid
|
|
18559
|
+
* `name` or `type` is an error: there is no sensible default for either.
|
|
18560
|
+
*/
|
|
18561
|
+
function normalizeColorTheme(raw, id) {
|
|
18562
|
+
const errors = [];
|
|
18563
|
+
if (!isPlainObject(raw)) return { errors: ["theme must be an object"] };
|
|
18564
|
+
const rawName = raw.name;
|
|
18565
|
+
let name;
|
|
18566
|
+
if (typeof rawName === "string" && rawName.trim().length > 0) name = rawName.trim().slice(0, 80);
|
|
18567
|
+
else errors.push("name is required");
|
|
18568
|
+
const rawType = raw.type;
|
|
18569
|
+
let type;
|
|
18570
|
+
if (rawType === "light" || rawType === "dark") type = rawType;
|
|
18571
|
+
else errors.push("type must be \"light\" or \"dark\"");
|
|
18572
|
+
if (errors.length > 0 || name === void 0 || type === void 0) return { errors };
|
|
18573
|
+
const warnings = [];
|
|
18574
|
+
const terminal = normalizeTerminal(raw.terminal, warnings);
|
|
18575
|
+
const ui = normalizeUi(raw.ui, warnings);
|
|
18576
|
+
const syntax = normalizeSyntax(raw.syntax, warnings);
|
|
18577
|
+
const source = normalizeSource(raw.source);
|
|
18578
|
+
return {
|
|
18579
|
+
theme: {
|
|
18580
|
+
id,
|
|
18581
|
+
builtin: false,
|
|
18582
|
+
name,
|
|
18583
|
+
type,
|
|
18584
|
+
...terminal !== void 0 ? { terminal } : {},
|
|
18585
|
+
...syntax !== void 0 ? { syntax } : {},
|
|
18586
|
+
...ui !== void 0 ? { ui } : {},
|
|
18587
|
+
...source !== void 0 ? { source } : {}
|
|
18588
|
+
},
|
|
18589
|
+
warnings
|
|
18590
|
+
};
|
|
18591
|
+
}
|
|
18592
|
+
//#endregion
|
|
18593
|
+
//#region src/conversation-schedule-presets.ts
|
|
18594
|
+
const SCHEDULE_PRESET_DAYS = [
|
|
18595
|
+
"mon",
|
|
18596
|
+
"tue",
|
|
18597
|
+
"wed",
|
|
18598
|
+
"thu",
|
|
18599
|
+
"fri",
|
|
18600
|
+
"sat",
|
|
18601
|
+
"sun"
|
|
18602
|
+
];
|
|
18603
|
+
const TIME_PATTERN = /^([01]\d|2[0-3]):([0-5]\d)$/;
|
|
18604
|
+
const DAY_NUMBERS = {
|
|
18605
|
+
sun: 0,
|
|
18606
|
+
mon: 1,
|
|
18607
|
+
tue: 2,
|
|
18608
|
+
wed: 3,
|
|
18609
|
+
thu: 4,
|
|
18610
|
+
fri: 5,
|
|
18611
|
+
sat: 6
|
|
18612
|
+
};
|
|
18613
|
+
function parseTime(time) {
|
|
18614
|
+
const match = TIME_PATTERN.exec(time);
|
|
18615
|
+
if (!match) throw new Error(`Invalid time "${time}": expected HH:MM (24-hour)`);
|
|
18616
|
+
return {
|
|
18617
|
+
hour: Number(match[1]),
|
|
18618
|
+
minute: Number(match[2])
|
|
18619
|
+
};
|
|
18620
|
+
}
|
|
18621
|
+
function presetToCron(preset) {
|
|
18622
|
+
switch (preset.kind) {
|
|
18623
|
+
case "hourly": return "0 * * * *";
|
|
18624
|
+
case "daily": {
|
|
18625
|
+
const { hour, minute } = parseTime(preset.time);
|
|
18626
|
+
return `${minute} ${hour} * * *`;
|
|
18627
|
+
}
|
|
18628
|
+
case "weekdays": {
|
|
18629
|
+
const { hour, minute } = parseTime(preset.time);
|
|
18630
|
+
return `${minute} ${hour} * * 1-5`;
|
|
18631
|
+
}
|
|
18632
|
+
case "weekly": {
|
|
18633
|
+
const day = DAY_NUMBERS[preset.day.toLowerCase()];
|
|
18634
|
+
if (day === void 0) throw new Error(`Invalid day "${preset.day}": expected sun, mon, tue, wed, thu, fri or sat`);
|
|
18635
|
+
const { hour, minute } = parseTime(preset.time);
|
|
18636
|
+
return `${minute} ${hour} * * ${day}`;
|
|
18637
|
+
}
|
|
18638
|
+
}
|
|
18639
|
+
}
|
|
18640
|
+
//#endregion
|
|
18641
|
+
export { ACP_BEHAVIOR, ACP_CAPABILITIES, AGENT_ROLES, APPROVAL_TTL_MS, Activity, ActivityDetailedEvent, ActivityEntryEvent, ActivityTtsEvent, ActivityUpdatedEvent, AdmissionState, AdvertisedEndpoint, 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, BROWSERS, BUILTIN_COLOR_THEMES, BackendPane, BackendPaneChangedEvent, BackendPaneRemovedEvent, BeadsFreshnessChangedEvent, BrowserIdSchema, CHANNEL_REPLY_KIND_VALUES, CLAUDE_CODE_BEHAVIOR, CLAUDE_CODE_CAPABILITIES, CODEX_BEHAVIOR, CODEX_CAPABILITIES, COLOR_THEME_ID_RE, COMPANION_TERMINAL_CLOSE_BODY_KEYS, COMPANION_TERMINAL_OPEN_BODY_KEYS, COMPOSER_COMMAND_INSERT_OVERRIDES, COMPOSER_COMMAND_MANIFEST, COMPOSER_COMMAND_VARIANTS, CONNECT_CLOSE_CODES, CONNECT_PROTOCOL_VERSION, CONTEXT_LAYER_KINDS, CONTEXT_PREVIEW_HARNESSES, CONVERSATION_PAGE_DEFAULT_LIMIT, CONVERSATION_PAGE_MAX_LIMIT, CONVERSATION_PAYLOAD_BUDGET_BYTES, CONVERSATION_WINDOW_MAX_BYTES, CONVERSATION_WINDOW_MAX_ROWS, 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, ConversationResume, ConversationSchedulesChangedEvent, ConversationTitleChangedEvent, ConversationWindow, CostEventRecordedEvent, DEFAULT_EFFORT, DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE, DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, DashboardLifecycleStartedEvent, DashboardSnapshot, DeepWipeRpc, DeployStalenessSnapshot, DerivedBranchState, DerivedIssueState, DerivedPrOutsidePipeline, DerivedPrState, DerivedWorkStart, DirectoryApprovalState, DirectoryApprovalView, DirectoryClientState, DirectoryEntry, DirectoryEntryKind, DirectoryEntryLocation, DirectoryEntrySource, DirectoryEntryState, DirectoryJoinState, DirectoryJoinView, DirectoryMachineView, DirectoryPause, DirectoryPauseBy, DirectoryPlan, DirectoryProviderError, DirectoryResponse, DirectoryScope, DirectoryTranscriptRef, DiscoveredSessionSnapshot, DomainEvent, EDITORS, EFFORT_LEVELS, ENVIRONMENT_PROTOCOL_VERSION, EditorIdSchema, EffortLevelSchema, EmbedProgressEvent, EmbedProgressSnapshot, EmbedSessionsRpc, EnrichCompleteEvent, EnrichProgressEvent, EnrichProgressSnapshot, EnrichSessionsRpc, EnrichStatsSnapshot, EnvironmentCapabilities, EnvironmentDescriptor, EnvironmentId, ExtractionProviderConfig, ExtractionProviderTarget, FLEET_BINARY_ORDER, FLEET_UPDATE_STILL_WAITING_MS, FREE_MACHINE_LIMIT_MESSAGE, FeatureNode, FeatureRegistryEntry, FeatureRegistryStatus, FleetComponentStatus, FleetInstallMode, FleetJobPhase, FleetProjectRow, FleetProjectsResponse, FleetUpdateJobSchema, FleetUpdateMode, 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, GetAvailableBrowsersRpc, GetAvailableEditorsRpc, GetConversationCostByWorkspaceRpc, GetConversationCostRpc, GetConversationStatsRpc, GetDiscoveredSessionRpc, GetSessionsFeedFacetsRpc, GetSnapshotRpc, GitHubQuotaBucket, GitHubQuotaCaller, GitHubQuotaCallerUsage, GitHubQuotaChangedEvent, GitHubQuotaPause, GitHubQuotaPool, GitHubQuotaSample, GitHubQuotaSnapshot, GitHubQuotaUsage, GitHubRateLimitKind, GlobalContextLayerRecord, GlobalContextLayerTarget, HARNESS_CAPABILITY_KEYS, HOOK_INVENTORY, HealthReason, HealthState, HostHealthMetrics, HostPlatform, HygieneFinding, HygienePullRequest, HygieneReport, INBOX_BODY_MAX_BYTES, INBOX_HOLD_MS, INITIAL_READ_MODEL_STATE, ISSUE_ATTENTIONS, ISSUE_STATES, ISSUE_STATE_PRECEDENCE, InboundMachineView, IssueAttention, IssueId, IssueState, IssueStateChangedEvent, IssueStatusChangedEvent, IssueTransitionedEvent, IssuesDeltaEvent, IssuesSnapshotEvent, IssuesUpdatedEvent, KIMI_CODE_BEHAVIOR, KIMI_CODE_CAPABILITIES, KNOWN_HARNESSES, LANE_STARTING_GRACE_MS, LINK_PROTOCOL_VERSION, LegacySystemHealthSummary, LegacyWebhookRelaySummary, LinearMcpAuthCallbackRelayedEvent, LinearMcpAuthHealthyEvent, LinearMcpAuthNotifiedEvent, LinearMcpAuthRequiredEvent, LinkAccess, LinkIncident, LinkRouteStatus, LinkRouteView, LinkState, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, LoadSample, 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, MUSE_CAPABILITIES, MachineLinkView, MachinePlacementMode, MachineProject, MachineVersionsReportSchema, MachinesResponse, MemoryAgentRole, MemoryHealthChangedEvent, MemoryIdentity, MemoryObservation, MemoryObservationCreatedEvent, MemoryResetMarkerCreatedEvent, MemoryRollupTriggeredEvent, MemoryStatus, MemoryStatusPhase, MemoryStatusUpdatedEvent, MemoryTokenUsage, MergeReadyEvent, ModelOrigin, ModelOriginEntry, NON_ESSENTIAL_GITHUB_CALLERS, NO_DIRECT_PATH_MESSAGE, OHMYPI_BEHAVIOR, OHMYPI_CAPABILITIES, OPENCODE_BEHAVIOR, OPENCODE_CAPABILITIES, OVERDECK_AGENT_PROTOCOL_VERSION, OVERDECK_DASHBOARD_PROTOCOL_VERSION, OpenInBrowserInput, OpenInEditorInput, OperatorInterventionEvent, OrderBook, OrderBookIndexEntry, OrderBookItem, OrderBookLane, OrderBookPosture, OrderBookSettings, OrderBookStatus, PIPELINE_MEMBERSHIP_LOADING_CODE, PRIME_AGENT_BEHAVIOR, PRIME_AGENT_CAPABILITIES, PanRpcError, PanRpcGroup, PendingTurn, PipelineReviewCompletedEvent, PipelineReviewStartedEvent, PipelineTestCompletedEvent, PipelineTestStartedEvent, PipelineVerificationFailedEvent, PipelineVerificationStartedEvent, PlacementAnswer, PlacementRejection, 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, RELAY_CAP_MESSAGE, RELAY_MONTHLY_CAP_BYTES, RESERVED_COLOR_THEME_IDS, RESUME_OPEN_IDS_MAX, ROUTE_KINDS, RagDecision, RagDecisionSource, ReadFileAtPathInput, ReadFileAtPathResult, ReadFileAtPathRpc, ReadWorkspaceFileInput, ReadWorkspaceFileResult, ReadWorkspaceFileRpc, RelayStatusView, ReplayEventsResult, ReplayEventsRpc, ReplayTooFarBehind, 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, RouteKind, RouteSource, SCHEDULE_PRESET_DAYS, SINGLETON_AGENT_IDS, SSH_HELPER_PROTOCOL, SSH_MACHINE_ERROR_CODES, ScanCompleteEvent, ScanConversationsRpc, ScanProgressEvent, ScanProgressSnapshot, ScanResult, ScanStartedEvent, ScopedAgentRef, ScopedConversationRef, ScopedIssueRef, ScopedProjectRef, ScopedRef, ScopedTerminalRef, SearchConversationsRpc, SendTerminalInputRpc, SequenceNumber, ServiceHealthSnapshot, ServiceHealthStatus, SessionNode, SessionNodePresence, SessionNodeType, SessionTreeDelta, SessionsFeedFacetsSnapshot, SessionsFeedRowSnapshot, SessionsFeedSource, ShadowInferenceUpdateEvent, ShellOpenInBrowserRpc, ShellOpenInEditorRpc, SpecialistCompletedEvent, SpecialistFailedEvent, SpecialistLifecycle, SpecialistStartedEvent, SshForwardState, SshLaunch, SshLinkInfo, SshMachineErrorCode, SshTestResult, 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, TOOL_BODY_INLINE_MAX_BYTES, TOOL_BODY_PREVIEW_CHARS, TerminalCloseRpc, TerminalOpenRpc, TerminalOutput, TerminalResizeRpc, TerminalWriteRpc, TestPassedEvent, ThinkingState, TickMarker, TickMarkerPhase, TurnDiffFileChange, TurnDiffSummary, TurnEndAssessment, WINDOW_PINNED_OPEN_TOOLS_MAX, 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, builtinFor, canonicalPullRequestUrl, companionTerminalKindFor, compareEffort, compareFleetBinaries, compareIssueIds, compareTimelineKeys, createIssueDelta, decodeFlywheelDerivedStatus, decodeFlywheelStats, decodeTimelineCursor, deriveProjectCi, effectiveTerminalPalette, encodeFlywheelStats, encodeTimelineCursor, formatMachineLoad, formatMachineProfile, getHarness, getHarnessBehavior, getMaxMemoryObservationsPerIssue, getMaxTurnDiffSummariesPerAgent, getRuntimeBehavior, hasToolResult, indexPanesByAgentKey, isAgentRole, isAgentSessionName, isChannelReplyKind, isConfiguredPullRequestRepo, isEffortLevel, isIssueAttention, isIssueState, isLegacyPiHarnessName, isProtocolCompatible, isSingletonConversation, isTerminalBackendName, isTerminalTurnDiffSummaryStatus, laneActivityOf, linkedConversationName, normalizeChannelReplyPayload, normalizeColorTheme, normalizeHarnessName, omitTurnDiffSummariesForAgent, overdeckInstallCommand, paneAgentKey, parseLinkedConversationName, parsePullRequestRef, parseTrackerIssueUrl, presetToCron, projectLegacySystemHealthSummary, readableForeground, repoFromRemoteUrl, resolveEffectivePullRequest, resolveTrackerIssueId, slugifyThemeId, syncSnapshot, timelineKeyOfMessage, timelineKeyOfWork, toOpaqueHex, trimMemoryObservations, trimTurnDiffSummaries, withPaneLivenessAlias };
|
|
16425
18642
|
|
|
16426
18643
|
//# sourceMappingURL=index.mjs.map
|