@overdeck/contracts 0.64.0 → 0.65.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.mjs CHANGED
@@ -3195,6 +3195,30 @@ const OpenInEditorInput = Schema.Struct({
3195
3195
  editor: EditorIdSchema
3196
3196
  });
3197
3197
  //#endregion
3198
+ //#region src/effort.ts
3199
+ /**
3200
+ * Canonical reasoning-effort levels, end to end. `xhigh` was added in Opus 4.7
3201
+ * (between `high` and `max`); `max` predates it (Opus 4.6+/Sonnet 4.6). This is
3202
+ * the single source of truth for the enum — every other copy in the codebase
3203
+ * derives from it.
3204
+ */
3205
+ const EFFORT_LEVELS = [
3206
+ "low",
3207
+ "medium",
3208
+ "high",
3209
+ "xhigh",
3210
+ "max"
3211
+ ];
3212
+ const DEFAULT_EFFORT = "high";
3213
+ const EffortLevelSchema = Schema.Literals(EFFORT_LEVELS);
3214
+ function isEffortLevel(value) {
3215
+ return typeof value === "string" && EFFORT_LEVELS.includes(value);
3216
+ }
3217
+ /** Compares two effort levels by rank; negative when `a` is lower than `b`. */
3218
+ function compareEffort(a, b) {
3219
+ return EFFORT_LEVELS.indexOf(a) - EFFORT_LEVELS.indexOf(b);
3220
+ }
3221
+ //#endregion
3198
3222
  //#region src/rpc.ts
3199
3223
  const WS_METHODS = {
3200
3224
  scanConversations: "pan.scanConversations",
@@ -3280,6 +3304,8 @@ const ContextUsage = Schema.Struct({
3280
3304
  maxObservedInputTokens: Schema.optional(Schema.Number),
3281
3305
  /** Model the most recent assistant turn ran under (from JSONL). */
3282
3306
  lastModel: Schema.optional(Schema.NullOr(Schema.String)),
3307
+ /** PAN-4255: effort observed in the transcript (assistant `effort` or an /effort confirmation). Claude Code only. */
3308
+ lastEffort: Schema.optional(Schema.NullOr(Schema.String)),
3283
3309
  /** ISO timestamp of the most recent assistant turn. */
3284
3310
  lastTurnAt: Schema.optional(Schema.NullOr(Schema.String))
3285
3311
  });
@@ -3350,7 +3376,14 @@ const ConversationResponse = Schema.Struct({
3350
3376
  proposedPlan: Schema.optional(ProposedPlan),
3351
3377
  compactBoundaries: Schema.optional(Schema.Array(CompactBoundary)),
3352
3378
  contextUsage: Schema.optional(Schema.NullOr(ContextUsage)),
3353
- subagents: Schema.optional(Schema.Array(SubagentSummary))
3379
+ subagents: Schema.optional(Schema.Array(SubagentSummary)),
3380
+ /** PAN-4255: effort read from the agent's transcript (claude-code only). */
3381
+ observedEffort: Schema.optional(Schema.NullOr(EffortLevelSchema)),
3382
+ /** PAN-4255: the effort the agent was launched/pinned with and its EffortSource layer. */
3383
+ effortResolution: Schema.optional(Schema.NullOr(Schema.Struct({
3384
+ effort: EffortLevelSchema,
3385
+ source: Schema.String
3386
+ })))
3354
3387
  });
3355
3388
  const ConversationEvent = Schema.Union([
3356
3389
  Schema.Struct({
@@ -3791,6 +3824,39 @@ const GetConversationStatsRpc = Rpc.make(WS_METHODS.getConversationStats, {
3791
3824
  /** All Overdeck WebSocket RPC methods */
3792
3825
  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);
3793
3826
  //#endregion
3827
+ //#region src/agent-runtime-merge.ts
3828
+ function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
3829
+ return {
3830
+ id: agentId,
3831
+ activity: "idle",
3832
+ lastActivity: timestamp,
3833
+ updatedAtSequence: sequence
3834
+ };
3835
+ }
3836
+ /**
3837
+ * Merge a snapshot's runtime map into the client's, per agent. A freshly booted
3838
+ * server may serve an older or missing entry; a client entry with a strictly
3839
+ * newer `lastActivity` (or an equal stamp with a higher `updatedAtSequence`)
3840
+ * survives, and an agent the snapshot omits keeps its entry.
3841
+ */
3842
+ function mergeSnapshotRuntimeById(current, incoming) {
3843
+ if (!incoming) return { ...current };
3844
+ const merged = { ...current };
3845
+ for (const [agentId, next] of Object.entries(incoming)) {
3846
+ const held = current[agentId];
3847
+ merged[agentId] = held && heldIsNewer(held, next) ? held : next;
3848
+ }
3849
+ return merged;
3850
+ }
3851
+ /** Newer `lastActivity` wins; equal stamps fall to the higher `updatedAtSequence`. */
3852
+ function heldIsNewer(held, next) {
3853
+ const heldAt = Date.parse(held.lastActivity);
3854
+ const nextAt = Date.parse(next.lastActivity);
3855
+ if (heldAt > nextAt) return true;
3856
+ if (heldAt !== nextAt) return false;
3857
+ return Number.isFinite(held.updatedAtSequence) && Number.isFinite(next.updatedAtSequence) && held.updatedAtSequence > next.updatedAtSequence;
3858
+ }
3859
+ //#endregion
3794
3860
  //#region src/issue-delta.ts
3795
3861
  function createIssueDelta(previous, next) {
3796
3862
  const changes = [];
@@ -3906,14 +3972,6 @@ function removeAgentFromSessionIndex(agentIdBySessionId, agentId) {
3906
3972
  for (const [sessionId, id] of Object.entries(agentIdBySessionId ?? {})) if (id !== agentId) next[sessionId] = id;
3907
3973
  return next;
3908
3974
  }
3909
- function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
3910
- return {
3911
- id: agentId,
3912
- activity: "idle",
3913
- lastActivity: timestamp,
3914
- updatedAtSequence: sequence
3915
- };
3916
- }
3917
3975
  /**
3918
3976
  * Bump runtimeSnapshotSequence on the corresponding AgentSnapshot (if present)
3919
3977
  * so low-frequency subscribers can cheaply detect a runtime change. No-op if
@@ -3946,16 +4004,17 @@ function syncSnapshot(state, snapshot) {
3946
4004
  channelPermissionRequestIdsByAgentId[request.agentId] = [...existing, request.requestId];
3947
4005
  }
3948
4006
  const memory = snapshot.memory;
4007
+ const agentRuntimeById = mergeSnapshotRuntimeById(state.agentRuntimeById, snapshot.agentRuntimeById);
3949
4008
  const agentIdBySessionId = {};
3950
4009
  for (const agent of snapshot.agents) if (agent.sessionId) agentIdBySessionId[agent.sessionId] = agent.id;
3951
- for (const [agentId, runtime] of Object.entries(snapshot.agentRuntimeById ?? {})) if (runtime.claudeSessionId) agentIdBySessionId[runtime.claudeSessionId] = agentId;
4010
+ for (const [agentId, runtime] of Object.entries(agentRuntimeById)) if (runtime.claudeSessionId) agentIdBySessionId[runtime.claudeSessionId] = agentId;
3952
4011
  return {
3953
4012
  ...state,
3954
4013
  sequence: snapshot.sequence,
3955
4014
  agentsById,
3956
4015
  derivedIssueStateByIssueId,
3957
4016
  backendPanesById,
3958
- agentRuntimeById: snapshot.agentRuntimeById ?? state.agentRuntimeById,
4017
+ agentRuntimeById,
3959
4018
  channelPermissionRequestsById,
3960
4019
  channelPermissionRequestIdsByAgentId,
3961
4020
  resolvedChannelPermissionDecisionsById: {},
@@ -5287,30 +5346,6 @@ function deriveProjectCi(record) {
5287
5346
  };
5288
5347
  }
5289
5348
  //#endregion
5290
- //#region src/effort.ts
5291
- /**
5292
- * Canonical reasoning-effort levels, end to end. `xhigh` was added in Opus 4.7
5293
- * (between `high` and `max`); `max` predates it (Opus 4.6+/Sonnet 4.6). This is
5294
- * the single source of truth for the enum — every other copy in the codebase
5295
- * derives from it.
5296
- */
5297
- const EFFORT_LEVELS = [
5298
- "low",
5299
- "medium",
5300
- "high",
5301
- "xhigh",
5302
- "max"
5303
- ];
5304
- const DEFAULT_EFFORT = "high";
5305
- const EffortLevelSchema = Schema.Literals(EFFORT_LEVELS);
5306
- function isEffortLevel(value) {
5307
- return typeof value === "string" && EFFORT_LEVELS.includes(value);
5308
- }
5309
- /** Compares two effort levels by rank; negative when `a` is lower than `b`. */
5310
- function compareEffort(a, b) {
5311
- return EFFORT_LEVELS.indexOf(a) - EFFORT_LEVELS.indexOf(b);
5312
- }
5313
- //#endregion
5314
5349
  //#region src/flywheel.ts
5315
5350
  const FlywheelRunId = Schema.String.check(Schema.isPattern(/^RUN-\d+$/));
5316
5351
  const FlywheelHttpUrl = Schema.String.check(Schema.isPattern(/^https?:\/\/\S+$/i));
@@ -6977,7 +7012,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6977
7012
  },
6978
7013
  {
6979
7014
  "flags": "--adapter <adapter>",
6980
- "description": "plain or claude-plugin",
7015
+ "description": "plain, claude-plugin, or deft-readonly",
6981
7016
  "required": true,
6982
7017
  "valueHint": "adapter"
6983
7018
  },
@@ -7098,6 +7133,146 @@ const COMPOSER_COMMAND_MANIFEST = [
7098
7133
  "aliases": [],
7099
7134
  "category": "Core"
7100
7135
  },
7136
+ {
7137
+ "id": "pan-skills-pack-sageox",
7138
+ "path": [
7139
+ "skills",
7140
+ "pack",
7141
+ "sageox"
7142
+ ],
7143
+ "display": "/pan skills pack sageox",
7144
+ "description": "SageOx pack state and per-project upload opt-in (PAN-2444)",
7145
+ "args": [],
7146
+ "options": [],
7147
+ "aliases": [],
7148
+ "category": "Core"
7149
+ },
7150
+ {
7151
+ "id": "pan-skills-pack-sageox-status",
7152
+ "path": [
7153
+ "skills",
7154
+ "pack",
7155
+ "sageox",
7156
+ "status"
7157
+ ],
7158
+ "display": "/pan skills pack sageox status",
7159
+ "description": "Show, per project, the sageox pack state and the upload state",
7160
+ "args": [],
7161
+ "options": [{
7162
+ "flags": "--project <key>",
7163
+ "description": "Only this project",
7164
+ "required": true,
7165
+ "valueHint": "key"
7166
+ }, {
7167
+ "flags": "--json",
7168
+ "description": "Output as JSON",
7169
+ "required": false,
7170
+ "valueHint": null
7171
+ }],
7172
+ "aliases": [],
7173
+ "category": "Core"
7174
+ },
7175
+ {
7176
+ "id": "pan-skills-pack-sageox-upload",
7177
+ "path": [
7178
+ "skills",
7179
+ "pack",
7180
+ "sageox",
7181
+ "upload"
7182
+ ],
7183
+ "display": "/pan skills pack sageox upload",
7184
+ "description": "Turn SageOx uploads on or off for a project (off by default)",
7185
+ "args": [{
7186
+ "name": "state",
7187
+ "required": true,
7188
+ "variadic": false
7189
+ }],
7190
+ "options": [{
7191
+ "flags": "--project <key>",
7192
+ "description": "Project key",
7193
+ "required": true,
7194
+ "valueHint": "key"
7195
+ }],
7196
+ "aliases": [],
7197
+ "category": "Core"
7198
+ },
7199
+ {
7200
+ "id": "pan-skills-deft",
7201
+ "path": ["skills", "deft"],
7202
+ "display": "/pan skills deft",
7203
+ "description": "Deft Directive detection, ownership report, and managed mode",
7204
+ "args": [],
7205
+ "options": [],
7206
+ "aliases": [],
7207
+ "category": "Core"
7208
+ },
7209
+ {
7210
+ "id": "pan-skills-deft-status",
7211
+ "path": [
7212
+ "skills",
7213
+ "deft",
7214
+ "status"
7215
+ ],
7216
+ "display": "/pan skills deft status",
7217
+ "description": "Show Directive detection, the deft pack, the skill map, managed mode, and the ownership report",
7218
+ "args": [],
7219
+ "options": [{
7220
+ "flags": "--project <key>",
7221
+ "description": "Registered project (default: the current repo)",
7222
+ "required": true,
7223
+ "valueHint": "key"
7224
+ }, {
7225
+ "flags": "--json",
7226
+ "description": "Output as JSON",
7227
+ "required": false,
7228
+ "valueHint": null
7229
+ }],
7230
+ "aliases": [],
7231
+ "category": "Core"
7232
+ },
7233
+ {
7234
+ "id": "pan-skills-deft-enable",
7235
+ "path": [
7236
+ "skills",
7237
+ "deft",
7238
+ "enable"
7239
+ ],
7240
+ "display": "/pan skills deft enable",
7241
+ "description": "Enable Deft managed mode for a Directive project after showing the ownership plan",
7242
+ "args": [],
7243
+ "options": [{
7244
+ "flags": "--project <key>",
7245
+ "description": "Registered project",
7246
+ "required": true,
7247
+ "valueHint": "key"
7248
+ }, {
7249
+ "flags": "--yes",
7250
+ "description": "Accept the printed plan without asking",
7251
+ "required": false,
7252
+ "valueHint": null
7253
+ }],
7254
+ "aliases": [],
7255
+ "category": "Core"
7256
+ },
7257
+ {
7258
+ "id": "pan-skills-deft-disable",
7259
+ "path": [
7260
+ "skills",
7261
+ "deft",
7262
+ "disable"
7263
+ ],
7264
+ "display": "/pan skills deft disable",
7265
+ "description": "Disable Deft managed mode; project files are untouched",
7266
+ "args": [],
7267
+ "options": [{
7268
+ "flags": "--project <key>",
7269
+ "description": "Registered project",
7270
+ "required": true,
7271
+ "valueHint": "key"
7272
+ }],
7273
+ "aliases": [],
7274
+ "category": "Core"
7275
+ },
7101
7276
  {
7102
7277
  "id": "pan-pair",
7103
7278
  "path": ["pair"],
@@ -7166,6 +7341,69 @@ const COMPOSER_COMMAND_MANIFEST = [
7166
7341
  "aliases": [],
7167
7342
  "category": "CLI"
7168
7343
  },
7344
+ {
7345
+ "id": "pan-token",
7346
+ "path": ["token"],
7347
+ "display": "/pan token",
7348
+ "description": "Create, list or revoke scoped access tokens (see configuration/remote-access.mdx)",
7349
+ "args": [],
7350
+ "options": [],
7351
+ "aliases": [],
7352
+ "category": "CLI"
7353
+ },
7354
+ {
7355
+ "id": "pan-token-create",
7356
+ "path": ["token", "create"],
7357
+ "display": "/pan token create",
7358
+ "description": "Create a scoped access token and print it once",
7359
+ "args": [{
7360
+ "name": "name",
7361
+ "required": true,
7362
+ "variadic": false
7363
+ }],
7364
+ "options": [{
7365
+ "flags": "--scopes <list>",
7366
+ "description": "Comma-separated scopes: read:events, read:state, read:conversations, tell, operate, admin",
7367
+ "required": true,
7368
+ "valueHint": "list"
7369
+ }, {
7370
+ "flags": "--json",
7371
+ "description": "Print { id, name, scopes, token } as JSON",
7372
+ "required": false,
7373
+ "valueHint": null
7374
+ }],
7375
+ "aliases": [],
7376
+ "category": "CLI"
7377
+ },
7378
+ {
7379
+ "id": "pan-token-list",
7380
+ "path": ["token", "list"],
7381
+ "display": "/pan token list",
7382
+ "description": "List access tokens with scopes and created, last-used and revoked times",
7383
+ "args": [],
7384
+ "options": [{
7385
+ "flags": "--json",
7386
+ "description": "Print the tokens as JSON",
7387
+ "required": false,
7388
+ "valueHint": null
7389
+ }],
7390
+ "aliases": [],
7391
+ "category": "CLI"
7392
+ },
7393
+ {
7394
+ "id": "pan-token-revoke",
7395
+ "path": ["token", "revoke"],
7396
+ "display": "/pan token revoke",
7397
+ "description": "Revoke an access token and close its live connections",
7398
+ "args": [{
7399
+ "name": "id",
7400
+ "required": true,
7401
+ "variadic": false
7402
+ }],
7403
+ "options": [],
7404
+ "aliases": [],
7405
+ "category": "CLI"
7406
+ },
7169
7407
  {
7170
7408
  "id": "pan-issues",
7171
7409
  "path": ["issues"],
@@ -7300,6 +7538,25 @@ const COMPOSER_COMMAND_MANIFEST = [
7300
7538
  "aliases": [],
7301
7539
  "category": "Review"
7302
7540
  },
7541
+ {
7542
+ "id": "pan-review-waive-test-removal",
7543
+ "path": ["review", "waive-test-removal"],
7544
+ "display": "/pan review waive-test-removal",
7545
+ "description": "Operator-only: let a net test removal past the test-skip gate at the current head",
7546
+ "args": [{
7547
+ "name": "id",
7548
+ "required": true,
7549
+ "variadic": false
7550
+ }],
7551
+ "options": [{
7552
+ "flags": "--reason <text>",
7553
+ "description": "Why the removed tests are gone and nothing replaces them",
7554
+ "required": true,
7555
+ "valueHint": "text"
7556
+ }],
7557
+ "aliases": [],
7558
+ "category": "Review"
7559
+ },
7303
7560
  {
7304
7561
  "id": "pan-review-abort",
7305
7562
  "path": ["review", "abort"],
@@ -7424,7 +7681,7 @@ const COMPOSER_COMMAND_MANIFEST = [
7424
7681
  },
7425
7682
  {
7426
7683
  "flags": "--effort <level>",
7427
- "description": "Planning effort: low | medium | high",
7684
+ "description": "Planning effort: low | medium | high | xhigh | max",
7428
7685
  "required": true,
7429
7686
  "valueHint": "level"
7430
7687
  },
@@ -7538,6 +7795,43 @@ const COMPOSER_COMMAND_MANIFEST = [
7538
7795
  "aliases": [],
7539
7796
  "category": "Lifecycle"
7540
7797
  },
7798
+ {
7799
+ "id": "pan-ask",
7800
+ "path": ["ask"],
7801
+ "display": "/pan ask",
7802
+ "description": "Ask the operator a blocking decision; it appears in the dashboard Needs-you",
7803
+ "args": [{
7804
+ "name": "id",
7805
+ "required": true,
7806
+ "variadic": false
7807
+ }, {
7808
+ "name": "question",
7809
+ "required": false,
7810
+ "variadic": false
7811
+ }],
7812
+ "options": [
7813
+ {
7814
+ "flags": "--option <label>",
7815
+ "description": "A choice the operator can pick (repeat 2-4 times)",
7816
+ "required": true,
7817
+ "valueHint": "label"
7818
+ },
7819
+ {
7820
+ "flags": "--context <text>",
7821
+ "description": "What you already tried or know, shown with the question",
7822
+ "required": true,
7823
+ "valueHint": "text"
7824
+ },
7825
+ {
7826
+ "flags": "--withdraw",
7827
+ "description": "Close your open decision request (answered another way, or no longer needed)",
7828
+ "required": false,
7829
+ "valueHint": null
7830
+ }
7831
+ ],
7832
+ "aliases": [],
7833
+ "category": "CLI"
7834
+ },
7541
7835
  {
7542
7836
  "id": "pan-answer",
7543
7837
  "path": ["answer"],
@@ -7686,6 +7980,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7686
7980
  "required": true,
7687
7981
  "valueHint": "model"
7688
7982
  },
7983
+ {
7984
+ "flags": "--effort <level>",
7985
+ "description": "Reasoning effort for the new conversation: low, medium, high, xhigh or max; defaults to the source conversation's effort",
7986
+ "required": true,
7987
+ "valueHint": "level"
7988
+ },
7689
7989
  {
7690
7990
  "flags": "--cwd <path>",
7691
7991
  "description": "Working directory for the summary-forked session",
@@ -7735,6 +8035,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7735
8035
  "required": true,
7736
8036
  "valueHint": "model"
7737
8037
  },
8038
+ {
8039
+ "flags": "--effort <level>",
8040
+ "description": "Reasoning effort for the new conversation: low, medium, high, xhigh or max; defaults to the source conversation's effort",
8041
+ "required": true,
8042
+ "valueHint": "level"
8043
+ },
7738
8044
  {
7739
8045
  "flags": "--harness <harness>",
7740
8046
  "description": "Ignored: harness is provider-default-only (PAN-1984)",
@@ -7794,6 +8100,24 @@ const COMPOSER_COMMAND_MANIFEST = [
7794
8100
  "description": "Ignored: author harness is provider-default-only (PAN-1984)",
7795
8101
  "required": true,
7796
8102
  "valueHint": "harness"
8103
+ },
8104
+ {
8105
+ "flags": "--skill <name>",
8106
+ "description": "Turn this skill on for the new conversation only (repeatable); a pack skill is <pack>/<skill>",
8107
+ "required": true,
8108
+ "valueHint": "name"
8109
+ },
8110
+ {
8111
+ "flags": "--pack <id>",
8112
+ "description": "Turn every skill of this cached skill pack on for the new conversation only (repeatable)",
8113
+ "required": true,
8114
+ "valueHint": "id"
8115
+ },
8116
+ {
8117
+ "flags": "--hold",
8118
+ "description": "Create and launch the new conversation without sending the kickoff; start it with Send in the dashboard or pan handoff start <conv>",
8119
+ "required": false,
8120
+ "valueHint": null
7797
8121
  }
7798
8122
  ],
7799
8123
  "aliases": [],
@@ -8634,6 +8958,11 @@ const COMPOSER_COMMAND_MANIFEST = [
8634
8958
  "description": "Print JSON",
8635
8959
  "required": false,
8636
8960
  "valueHint": null
8961
+ }, {
8962
+ "flags": "--on <refs...>",
8963
+ "description": "Issues or PRs this item waits on (PAN-123, #45, owner/repo#45, PR URL); Overdeck wakes the agent when all have merged",
8964
+ "required": true,
8965
+ "valueHint": "refs..."
8637
8966
  }],
8638
8967
  "aliases": [],
8639
8968
  "category": "Lifecycle"
@@ -10950,6 +11279,124 @@ const COMPOSER_COMMAND_MANIFEST = [
10950
11279
  "aliases": [],
10951
11280
  "category": "Flywheel"
10952
11281
  },
11282
+ {
11283
+ "id": "pan-models",
11284
+ "path": ["models"],
11285
+ "display": "/pan models",
11286
+ "description": "Model settings: provider presets",
11287
+ "args": [],
11288
+ "options": [],
11289
+ "aliases": [],
11290
+ "category": "CLI"
11291
+ },
11292
+ {
11293
+ "id": "pan-models-preset",
11294
+ "path": ["models", "preset"],
11295
+ "display": "/pan models preset",
11296
+ "description": "Apply eval-backed provider model presets (writes explicit values once; never auto-applies)",
11297
+ "args": [],
11298
+ "options": [],
11299
+ "aliases": [],
11300
+ "category": "CLI"
11301
+ },
11302
+ {
11303
+ "id": "pan-models-preset-list",
11304
+ "path": [
11305
+ "models",
11306
+ "preset",
11307
+ "list"
11308
+ ],
11309
+ "display": "/pan models preset list",
11310
+ "description": "List presets, their versions and what was last applied",
11311
+ "args": [],
11312
+ "options": [{
11313
+ "flags": "--json",
11314
+ "description": "Print JSON",
11315
+ "required": false,
11316
+ "valueHint": null
11317
+ }],
11318
+ "aliases": [],
11319
+ "category": "CLI"
11320
+ },
11321
+ {
11322
+ "id": "pan-models-preset-show",
11323
+ "path": [
11324
+ "models",
11325
+ "preset",
11326
+ "show"
11327
+ ],
11328
+ "display": "/pan models preset show",
11329
+ "description": "Show the per-setting diff a preset would make to config.yaml",
11330
+ "args": [{
11331
+ "name": "id",
11332
+ "required": true,
11333
+ "variadic": false
11334
+ }],
11335
+ "options": [{
11336
+ "flags": "--json",
11337
+ "description": "Print the plan JSON (same body as GET /api/model-presets/:id/plan)",
11338
+ "required": false,
11339
+ "valueHint": null
11340
+ }],
11341
+ "aliases": [],
11342
+ "category": "CLI"
11343
+ },
11344
+ {
11345
+ "id": "pan-models-preset-apply",
11346
+ "path": [
11347
+ "models",
11348
+ "preset",
11349
+ "apply"
11350
+ ],
11351
+ "display": "/pan models preset apply",
11352
+ "description": "Apply a preset: print the diff, confirm, then write only the changed settings",
11353
+ "args": [{
11354
+ "name": "id",
11355
+ "required": true,
11356
+ "variadic": false
11357
+ }],
11358
+ "options": [
11359
+ {
11360
+ "flags": "--dry-run",
11361
+ "description": "Print the diff and write nothing",
11362
+ "required": false,
11363
+ "valueHint": null
11364
+ },
11365
+ {
11366
+ "flags": "--yes",
11367
+ "description": "Apply without the confirmation prompt",
11368
+ "required": false,
11369
+ "valueHint": null
11370
+ },
11371
+ {
11372
+ "flags": "--json",
11373
+ "description": "Print JSON",
11374
+ "required": false,
11375
+ "valueHint": null
11376
+ }
11377
+ ],
11378
+ "aliases": [],
11379
+ "category": "CLI"
11380
+ },
11381
+ {
11382
+ "id": "pan-models-preset-undo",
11383
+ "path": [
11384
+ "models",
11385
+ "preset",
11386
+ "undo"
11387
+ ],
11388
+ "display": "/pan models preset undo",
11389
+ "description": "Restore the values the last preset apply replaced",
11390
+ "args": [],
11391
+ "options": [{
11392
+ "flags": "--json",
11393
+ "description": "Print JSON",
11394
+ "required": false,
11395
+ "valueHint": null
11396
+ }],
11397
+ "aliases": [],
11398
+ "category": "CLI"
11399
+ },
10953
11400
  {
10954
11401
  "id": "pan-parked",
10955
11402
  "path": ["parked"],
@@ -11824,29 +12271,6 @@ const COMPOSER_COMMAND_MANIFEST = [
11824
12271
  "aliases": [],
11825
12272
  "category": "Admin"
11826
12273
  },
11827
- {
11828
- "id": "pan-admin-tldr",
11829
- "path": ["admin", "tldr"],
11830
- "display": "/pan admin tldr",
11831
- "description": "TLDR daemon: status, start, stop, warm",
11832
- "args": [{
11833
- "name": "action",
11834
- "required": false,
11835
- "variadic": false
11836
- }, {
11837
- "name": "workspace",
11838
- "required": false,
11839
- "variadic": false
11840
- }],
11841
- "options": [{
11842
- "flags": "--json",
11843
- "description": "Output as JSON",
11844
- "required": false,
11845
- "valueHint": null
11846
- }],
11847
- "aliases": [],
11848
- "category": "Admin"
11849
- },
11850
12274
  {
11851
12275
  "id": "pan-admin-fpp",
11852
12276
  "path": ["admin", "fpp"],
@@ -12844,6 +13268,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12844
13268
  "required": true,
12845
13269
  "valueHint": "harness"
12846
13270
  },
13271
+ {
13272
+ "flags": "--effort <level>",
13273
+ "description": "Reasoning effort: low | medium | high | xhigh | max (defaults to the item/plan metadata, then roles.worker.effort)",
13274
+ "required": true,
13275
+ "valueHint": "level"
13276
+ },
12847
13277
  {
12848
13278
  "flags": "--shared",
12849
13279
  "description": "Run the worker in the issue workspace instead of an item worktree (foreman/operator only; serial use)",
@@ -12901,6 +13331,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12901
13331
  "required": true,
12902
13332
  "valueHint": "harness"
12903
13333
  },
13334
+ {
13335
+ "flags": "--effort <level>",
13336
+ "description": "Reasoning effort: low | medium | high | xhigh | max (defaults to roles.worker.effort)",
13337
+ "required": true,
13338
+ "valueHint": "level"
13339
+ },
12904
13340
  {
12905
13341
  "flags": "--read-only",
12906
13342
  "description": "Run in the issue workspace with git writes blocked",
@@ -13878,26 +14314,17 @@ const COMPOSER_COMMAND_MANIFEST = [
13878
14314
  "display": "/pan status",
13879
14315
  "description": "Show running agents",
13880
14316
  "args": [],
13881
- "options": [
13882
- {
13883
- "flags": "--json",
13884
- "description": "Output as JSON",
13885
- "required": false,
13886
- "valueHint": null
13887
- },
13888
- {
13889
- "flags": "--tldr",
13890
- "description": "Show TLDR index health across all workspaces",
13891
- "required": false,
13892
- "valueHint": null
13893
- },
13894
- {
13895
- "flags": "--context",
13896
- "description": "Show context window usage % for each agent",
13897
- "required": false,
13898
- "valueHint": null
13899
- }
13900
- ],
14317
+ "options": [{
14318
+ "flags": "--json",
14319
+ "description": "Output as JSON",
14320
+ "required": false,
14321
+ "valueHint": null
14322
+ }, {
14323
+ "flags": "--context",
14324
+ "description": "Show context window usage % for each agent",
14325
+ "required": false,
14326
+ "valueHint": null
14327
+ }],
13901
14328
  "aliases": [],
13902
14329
  "category": "Core"
13903
14330
  },
@@ -14061,7 +14488,7 @@ const COMPOSER_COMMAND_MANIFEST = [
14061
14488
  "id": "pan-restart",
14062
14489
  "path": ["restart"],
14063
14490
  "display": "/pan restart",
14064
- "description": "Restart a platform component (default: dashboard only — leaves CLIProxy, Traefik, TLDR running)",
14491
+ "description": "Restart a platform component (default: dashboard only — leaves CLIProxy and Traefik running)",
14065
14492
  "args": [],
14066
14493
  "options": [
14067
14494
  {
@@ -14766,6 +15193,26 @@ const COMPOSER_COMMAND_MANIFEST = [
14766
15193
  "aliases": [],
14767
15194
  "category": "Data"
14768
15195
  },
15196
+ {
15197
+ "id": "pan-cost-effort",
15198
+ "path": ["cost", "effort"],
15199
+ "display": "/pan cost effort",
15200
+ "description": "Show costs grouped by reasoning effort",
15201
+ "args": [],
15202
+ "options": [{
15203
+ "flags": "-i, --issue <issueId>",
15204
+ "description": "Limit to one issue",
15205
+ "required": true,
15206
+ "valueHint": "issueId"
15207
+ }, {
15208
+ "flags": "--json",
15209
+ "description": "Print JSON",
15210
+ "required": false,
15211
+ "valueHint": null
15212
+ }],
15213
+ "aliases": [],
15214
+ "category": "Data"
15215
+ },
14769
15216
  {
14770
15217
  "id": "pan-cost-budget",
14771
15218
  "path": ["cost", "budget"],
@@ -15171,6 +15618,10 @@ const DirectoryEntry = Schema.Struct({
15171
15618
  harness: Schema.String,
15172
15619
  /** `unknown` when not known. */
15173
15620
  model: Schema.String,
15621
+ /** The launch effort from state.json, native agents only (PAN-4259). */
15622
+ effort: Schema.optional(EffortLevelSchema),
15623
+ /** Where `effort` came from (an EffortSource), native agents only. */
15624
+ effortSource: Schema.optional(Schema.String),
15174
15625
  state: DirectoryEntryState,
15175
15626
  startedAt: Schema.NullOr(Schema.String),
15176
15627
  lastActivityAt: Schema.NullOr(Schema.String),