@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.cjs CHANGED
@@ -3220,6 +3220,30 @@ const OpenInEditorInput = effect.Schema.Struct({
3220
3220
  editor: EditorIdSchema
3221
3221
  });
3222
3222
  //#endregion
3223
+ //#region src/effort.ts
3224
+ /**
3225
+ * Canonical reasoning-effort levels, end to end. `xhigh` was added in Opus 4.7
3226
+ * (between `high` and `max`); `max` predates it (Opus 4.6+/Sonnet 4.6). This is
3227
+ * the single source of truth for the enum — every other copy in the codebase
3228
+ * derives from it.
3229
+ */
3230
+ const EFFORT_LEVELS = [
3231
+ "low",
3232
+ "medium",
3233
+ "high",
3234
+ "xhigh",
3235
+ "max"
3236
+ ];
3237
+ const DEFAULT_EFFORT = "high";
3238
+ const EffortLevelSchema = effect.Schema.Literals(EFFORT_LEVELS);
3239
+ function isEffortLevel(value) {
3240
+ return typeof value === "string" && EFFORT_LEVELS.includes(value);
3241
+ }
3242
+ /** Compares two effort levels by rank; negative when `a` is lower than `b`. */
3243
+ function compareEffort(a, b) {
3244
+ return EFFORT_LEVELS.indexOf(a) - EFFORT_LEVELS.indexOf(b);
3245
+ }
3246
+ //#endregion
3223
3247
  //#region src/rpc.ts
3224
3248
  const WS_METHODS = {
3225
3249
  scanConversations: "pan.scanConversations",
@@ -3305,6 +3329,8 @@ const ContextUsage = effect.Schema.Struct({
3305
3329
  maxObservedInputTokens: effect.Schema.optional(effect.Schema.Number),
3306
3330
  /** Model the most recent assistant turn ran under (from JSONL). */
3307
3331
  lastModel: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.String)),
3332
+ /** PAN-4255: effort observed in the transcript (assistant `effort` or an /effort confirmation). Claude Code only. */
3333
+ lastEffort: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.String)),
3308
3334
  /** ISO timestamp of the most recent assistant turn. */
3309
3335
  lastTurnAt: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.String))
3310
3336
  });
@@ -3375,7 +3401,14 @@ const ConversationResponse = effect.Schema.Struct({
3375
3401
  proposedPlan: effect.Schema.optional(ProposedPlan),
3376
3402
  compactBoundaries: effect.Schema.optional(effect.Schema.Array(CompactBoundary)),
3377
3403
  contextUsage: effect.Schema.optional(effect.Schema.NullOr(ContextUsage)),
3378
- subagents: effect.Schema.optional(effect.Schema.Array(SubagentSummary))
3404
+ subagents: effect.Schema.optional(effect.Schema.Array(SubagentSummary)),
3405
+ /** PAN-4255: effort read from the agent's transcript (claude-code only). */
3406
+ observedEffort: effect.Schema.optional(effect.Schema.NullOr(EffortLevelSchema)),
3407
+ /** PAN-4255: the effort the agent was launched/pinned with and its EffortSource layer. */
3408
+ effortResolution: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.Struct({
3409
+ effort: EffortLevelSchema,
3410
+ source: effect.Schema.String
3411
+ })))
3379
3412
  });
3380
3413
  const ConversationEvent = effect.Schema.Union([
3381
3414
  effect.Schema.Struct({
@@ -3816,6 +3849,39 @@ const GetConversationStatsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.getConve
3816
3849
  /** All Overdeck WebSocket RPC methods */
3817
3850
  const PanRpcGroup = effect_unstable_rpc_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);
3818
3851
  //#endregion
3852
+ //#region src/agent-runtime-merge.ts
3853
+ function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
3854
+ return {
3855
+ id: agentId,
3856
+ activity: "idle",
3857
+ lastActivity: timestamp,
3858
+ updatedAtSequence: sequence
3859
+ };
3860
+ }
3861
+ /**
3862
+ * Merge a snapshot's runtime map into the client's, per agent. A freshly booted
3863
+ * server may serve an older or missing entry; a client entry with a strictly
3864
+ * newer `lastActivity` (or an equal stamp with a higher `updatedAtSequence`)
3865
+ * survives, and an agent the snapshot omits keeps its entry.
3866
+ */
3867
+ function mergeSnapshotRuntimeById(current, incoming) {
3868
+ if (!incoming) return { ...current };
3869
+ const merged = { ...current };
3870
+ for (const [agentId, next] of Object.entries(incoming)) {
3871
+ const held = current[agentId];
3872
+ merged[agentId] = held && heldIsNewer(held, next) ? held : next;
3873
+ }
3874
+ return merged;
3875
+ }
3876
+ /** Newer `lastActivity` wins; equal stamps fall to the higher `updatedAtSequence`. */
3877
+ function heldIsNewer(held, next) {
3878
+ const heldAt = Date.parse(held.lastActivity);
3879
+ const nextAt = Date.parse(next.lastActivity);
3880
+ if (heldAt > nextAt) return true;
3881
+ if (heldAt !== nextAt) return false;
3882
+ return Number.isFinite(held.updatedAtSequence) && Number.isFinite(next.updatedAtSequence) && held.updatedAtSequence > next.updatedAtSequence;
3883
+ }
3884
+ //#endregion
3819
3885
  //#region src/issue-delta.ts
3820
3886
  function createIssueDelta(previous, next) {
3821
3887
  const changes = [];
@@ -3931,14 +3997,6 @@ function removeAgentFromSessionIndex(agentIdBySessionId, agentId) {
3931
3997
  for (const [sessionId, id] of Object.entries(agentIdBySessionId ?? {})) if (id !== agentId) next[sessionId] = id;
3932
3998
  return next;
3933
3999
  }
3934
- function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
3935
- return {
3936
- id: agentId,
3937
- activity: "idle",
3938
- lastActivity: timestamp,
3939
- updatedAtSequence: sequence
3940
- };
3941
- }
3942
4000
  /**
3943
4001
  * Bump runtimeSnapshotSequence on the corresponding AgentSnapshot (if present)
3944
4002
  * so low-frequency subscribers can cheaply detect a runtime change. No-op if
@@ -3971,16 +4029,17 @@ function syncSnapshot(state, snapshot) {
3971
4029
  channelPermissionRequestIdsByAgentId[request.agentId] = [...existing, request.requestId];
3972
4030
  }
3973
4031
  const memory = snapshot.memory;
4032
+ const agentRuntimeById = mergeSnapshotRuntimeById(state.agentRuntimeById, snapshot.agentRuntimeById);
3974
4033
  const agentIdBySessionId = {};
3975
4034
  for (const agent of snapshot.agents) if (agent.sessionId) agentIdBySessionId[agent.sessionId] = agent.id;
3976
- for (const [agentId, runtime] of Object.entries(snapshot.agentRuntimeById ?? {})) if (runtime.claudeSessionId) agentIdBySessionId[runtime.claudeSessionId] = agentId;
4035
+ for (const [agentId, runtime] of Object.entries(agentRuntimeById)) if (runtime.claudeSessionId) agentIdBySessionId[runtime.claudeSessionId] = agentId;
3977
4036
  return {
3978
4037
  ...state,
3979
4038
  sequence: snapshot.sequence,
3980
4039
  agentsById,
3981
4040
  derivedIssueStateByIssueId,
3982
4041
  backendPanesById,
3983
- agentRuntimeById: snapshot.agentRuntimeById ?? state.agentRuntimeById,
4042
+ agentRuntimeById,
3984
4043
  channelPermissionRequestsById,
3985
4044
  channelPermissionRequestIdsByAgentId,
3986
4045
  resolvedChannelPermissionDecisionsById: {},
@@ -5312,30 +5371,6 @@ function deriveProjectCi(record) {
5312
5371
  };
5313
5372
  }
5314
5373
  //#endregion
5315
- //#region src/effort.ts
5316
- /**
5317
- * Canonical reasoning-effort levels, end to end. `xhigh` was added in Opus 4.7
5318
- * (between `high` and `max`); `max` predates it (Opus 4.6+/Sonnet 4.6). This is
5319
- * the single source of truth for the enum — every other copy in the codebase
5320
- * derives from it.
5321
- */
5322
- const EFFORT_LEVELS = [
5323
- "low",
5324
- "medium",
5325
- "high",
5326
- "xhigh",
5327
- "max"
5328
- ];
5329
- const DEFAULT_EFFORT = "high";
5330
- const EffortLevelSchema = effect.Schema.Literals(EFFORT_LEVELS);
5331
- function isEffortLevel(value) {
5332
- return typeof value === "string" && EFFORT_LEVELS.includes(value);
5333
- }
5334
- /** Compares two effort levels by rank; negative when `a` is lower than `b`. */
5335
- function compareEffort(a, b) {
5336
- return EFFORT_LEVELS.indexOf(a) - EFFORT_LEVELS.indexOf(b);
5337
- }
5338
- //#endregion
5339
5374
  //#region src/flywheel.ts
5340
5375
  const FlywheelRunId = effect.Schema.String.check(effect.Schema.isPattern(/^RUN-\d+$/));
5341
5376
  const FlywheelHttpUrl = effect.Schema.String.check(effect.Schema.isPattern(/^https?:\/\/\S+$/i));
@@ -7002,7 +7037,7 @@ const COMPOSER_COMMAND_MANIFEST = [
7002
7037
  },
7003
7038
  {
7004
7039
  "flags": "--adapter <adapter>",
7005
- "description": "plain or claude-plugin",
7040
+ "description": "plain, claude-plugin, or deft-readonly",
7006
7041
  "required": true,
7007
7042
  "valueHint": "adapter"
7008
7043
  },
@@ -7123,6 +7158,146 @@ const COMPOSER_COMMAND_MANIFEST = [
7123
7158
  "aliases": [],
7124
7159
  "category": "Core"
7125
7160
  },
7161
+ {
7162
+ "id": "pan-skills-pack-sageox",
7163
+ "path": [
7164
+ "skills",
7165
+ "pack",
7166
+ "sageox"
7167
+ ],
7168
+ "display": "/pan skills pack sageox",
7169
+ "description": "SageOx pack state and per-project upload opt-in (PAN-2444)",
7170
+ "args": [],
7171
+ "options": [],
7172
+ "aliases": [],
7173
+ "category": "Core"
7174
+ },
7175
+ {
7176
+ "id": "pan-skills-pack-sageox-status",
7177
+ "path": [
7178
+ "skills",
7179
+ "pack",
7180
+ "sageox",
7181
+ "status"
7182
+ ],
7183
+ "display": "/pan skills pack sageox status",
7184
+ "description": "Show, per project, the sageox pack state and the upload state",
7185
+ "args": [],
7186
+ "options": [{
7187
+ "flags": "--project <key>",
7188
+ "description": "Only this project",
7189
+ "required": true,
7190
+ "valueHint": "key"
7191
+ }, {
7192
+ "flags": "--json",
7193
+ "description": "Output as JSON",
7194
+ "required": false,
7195
+ "valueHint": null
7196
+ }],
7197
+ "aliases": [],
7198
+ "category": "Core"
7199
+ },
7200
+ {
7201
+ "id": "pan-skills-pack-sageox-upload",
7202
+ "path": [
7203
+ "skills",
7204
+ "pack",
7205
+ "sageox",
7206
+ "upload"
7207
+ ],
7208
+ "display": "/pan skills pack sageox upload",
7209
+ "description": "Turn SageOx uploads on or off for a project (off by default)",
7210
+ "args": [{
7211
+ "name": "state",
7212
+ "required": true,
7213
+ "variadic": false
7214
+ }],
7215
+ "options": [{
7216
+ "flags": "--project <key>",
7217
+ "description": "Project key",
7218
+ "required": true,
7219
+ "valueHint": "key"
7220
+ }],
7221
+ "aliases": [],
7222
+ "category": "Core"
7223
+ },
7224
+ {
7225
+ "id": "pan-skills-deft",
7226
+ "path": ["skills", "deft"],
7227
+ "display": "/pan skills deft",
7228
+ "description": "Deft Directive detection, ownership report, and managed mode",
7229
+ "args": [],
7230
+ "options": [],
7231
+ "aliases": [],
7232
+ "category": "Core"
7233
+ },
7234
+ {
7235
+ "id": "pan-skills-deft-status",
7236
+ "path": [
7237
+ "skills",
7238
+ "deft",
7239
+ "status"
7240
+ ],
7241
+ "display": "/pan skills deft status",
7242
+ "description": "Show Directive detection, the deft pack, the skill map, managed mode, and the ownership report",
7243
+ "args": [],
7244
+ "options": [{
7245
+ "flags": "--project <key>",
7246
+ "description": "Registered project (default: the current repo)",
7247
+ "required": true,
7248
+ "valueHint": "key"
7249
+ }, {
7250
+ "flags": "--json",
7251
+ "description": "Output as JSON",
7252
+ "required": false,
7253
+ "valueHint": null
7254
+ }],
7255
+ "aliases": [],
7256
+ "category": "Core"
7257
+ },
7258
+ {
7259
+ "id": "pan-skills-deft-enable",
7260
+ "path": [
7261
+ "skills",
7262
+ "deft",
7263
+ "enable"
7264
+ ],
7265
+ "display": "/pan skills deft enable",
7266
+ "description": "Enable Deft managed mode for a Directive project after showing the ownership plan",
7267
+ "args": [],
7268
+ "options": [{
7269
+ "flags": "--project <key>",
7270
+ "description": "Registered project",
7271
+ "required": true,
7272
+ "valueHint": "key"
7273
+ }, {
7274
+ "flags": "--yes",
7275
+ "description": "Accept the printed plan without asking",
7276
+ "required": false,
7277
+ "valueHint": null
7278
+ }],
7279
+ "aliases": [],
7280
+ "category": "Core"
7281
+ },
7282
+ {
7283
+ "id": "pan-skills-deft-disable",
7284
+ "path": [
7285
+ "skills",
7286
+ "deft",
7287
+ "disable"
7288
+ ],
7289
+ "display": "/pan skills deft disable",
7290
+ "description": "Disable Deft managed mode; project files are untouched",
7291
+ "args": [],
7292
+ "options": [{
7293
+ "flags": "--project <key>",
7294
+ "description": "Registered project",
7295
+ "required": true,
7296
+ "valueHint": "key"
7297
+ }],
7298
+ "aliases": [],
7299
+ "category": "Core"
7300
+ },
7126
7301
  {
7127
7302
  "id": "pan-pair",
7128
7303
  "path": ["pair"],
@@ -7191,6 +7366,69 @@ const COMPOSER_COMMAND_MANIFEST = [
7191
7366
  "aliases": [],
7192
7367
  "category": "CLI"
7193
7368
  },
7369
+ {
7370
+ "id": "pan-token",
7371
+ "path": ["token"],
7372
+ "display": "/pan token",
7373
+ "description": "Create, list or revoke scoped access tokens (see configuration/remote-access.mdx)",
7374
+ "args": [],
7375
+ "options": [],
7376
+ "aliases": [],
7377
+ "category": "CLI"
7378
+ },
7379
+ {
7380
+ "id": "pan-token-create",
7381
+ "path": ["token", "create"],
7382
+ "display": "/pan token create",
7383
+ "description": "Create a scoped access token and print it once",
7384
+ "args": [{
7385
+ "name": "name",
7386
+ "required": true,
7387
+ "variadic": false
7388
+ }],
7389
+ "options": [{
7390
+ "flags": "--scopes <list>",
7391
+ "description": "Comma-separated scopes: read:events, read:state, read:conversations, tell, operate, admin",
7392
+ "required": true,
7393
+ "valueHint": "list"
7394
+ }, {
7395
+ "flags": "--json",
7396
+ "description": "Print { id, name, scopes, token } as JSON",
7397
+ "required": false,
7398
+ "valueHint": null
7399
+ }],
7400
+ "aliases": [],
7401
+ "category": "CLI"
7402
+ },
7403
+ {
7404
+ "id": "pan-token-list",
7405
+ "path": ["token", "list"],
7406
+ "display": "/pan token list",
7407
+ "description": "List access tokens with scopes and created, last-used and revoked times",
7408
+ "args": [],
7409
+ "options": [{
7410
+ "flags": "--json",
7411
+ "description": "Print the tokens as JSON",
7412
+ "required": false,
7413
+ "valueHint": null
7414
+ }],
7415
+ "aliases": [],
7416
+ "category": "CLI"
7417
+ },
7418
+ {
7419
+ "id": "pan-token-revoke",
7420
+ "path": ["token", "revoke"],
7421
+ "display": "/pan token revoke",
7422
+ "description": "Revoke an access token and close its live connections",
7423
+ "args": [{
7424
+ "name": "id",
7425
+ "required": true,
7426
+ "variadic": false
7427
+ }],
7428
+ "options": [],
7429
+ "aliases": [],
7430
+ "category": "CLI"
7431
+ },
7194
7432
  {
7195
7433
  "id": "pan-issues",
7196
7434
  "path": ["issues"],
@@ -7325,6 +7563,25 @@ const COMPOSER_COMMAND_MANIFEST = [
7325
7563
  "aliases": [],
7326
7564
  "category": "Review"
7327
7565
  },
7566
+ {
7567
+ "id": "pan-review-waive-test-removal",
7568
+ "path": ["review", "waive-test-removal"],
7569
+ "display": "/pan review waive-test-removal",
7570
+ "description": "Operator-only: let a net test removal past the test-skip gate at the current head",
7571
+ "args": [{
7572
+ "name": "id",
7573
+ "required": true,
7574
+ "variadic": false
7575
+ }],
7576
+ "options": [{
7577
+ "flags": "--reason <text>",
7578
+ "description": "Why the removed tests are gone and nothing replaces them",
7579
+ "required": true,
7580
+ "valueHint": "text"
7581
+ }],
7582
+ "aliases": [],
7583
+ "category": "Review"
7584
+ },
7328
7585
  {
7329
7586
  "id": "pan-review-abort",
7330
7587
  "path": ["review", "abort"],
@@ -7449,7 +7706,7 @@ const COMPOSER_COMMAND_MANIFEST = [
7449
7706
  },
7450
7707
  {
7451
7708
  "flags": "--effort <level>",
7452
- "description": "Planning effort: low | medium | high",
7709
+ "description": "Planning effort: low | medium | high | xhigh | max",
7453
7710
  "required": true,
7454
7711
  "valueHint": "level"
7455
7712
  },
@@ -7563,6 +7820,43 @@ const COMPOSER_COMMAND_MANIFEST = [
7563
7820
  "aliases": [],
7564
7821
  "category": "Lifecycle"
7565
7822
  },
7823
+ {
7824
+ "id": "pan-ask",
7825
+ "path": ["ask"],
7826
+ "display": "/pan ask",
7827
+ "description": "Ask the operator a blocking decision; it appears in the dashboard Needs-you",
7828
+ "args": [{
7829
+ "name": "id",
7830
+ "required": true,
7831
+ "variadic": false
7832
+ }, {
7833
+ "name": "question",
7834
+ "required": false,
7835
+ "variadic": false
7836
+ }],
7837
+ "options": [
7838
+ {
7839
+ "flags": "--option <label>",
7840
+ "description": "A choice the operator can pick (repeat 2-4 times)",
7841
+ "required": true,
7842
+ "valueHint": "label"
7843
+ },
7844
+ {
7845
+ "flags": "--context <text>",
7846
+ "description": "What you already tried or know, shown with the question",
7847
+ "required": true,
7848
+ "valueHint": "text"
7849
+ },
7850
+ {
7851
+ "flags": "--withdraw",
7852
+ "description": "Close your open decision request (answered another way, or no longer needed)",
7853
+ "required": false,
7854
+ "valueHint": null
7855
+ }
7856
+ ],
7857
+ "aliases": [],
7858
+ "category": "CLI"
7859
+ },
7566
7860
  {
7567
7861
  "id": "pan-answer",
7568
7862
  "path": ["answer"],
@@ -7711,6 +8005,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7711
8005
  "required": true,
7712
8006
  "valueHint": "model"
7713
8007
  },
8008
+ {
8009
+ "flags": "--effort <level>",
8010
+ "description": "Reasoning effort for the new conversation: low, medium, high, xhigh or max; defaults to the source conversation's effort",
8011
+ "required": true,
8012
+ "valueHint": "level"
8013
+ },
7714
8014
  {
7715
8015
  "flags": "--cwd <path>",
7716
8016
  "description": "Working directory for the summary-forked session",
@@ -7760,6 +8060,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7760
8060
  "required": true,
7761
8061
  "valueHint": "model"
7762
8062
  },
8063
+ {
8064
+ "flags": "--effort <level>",
8065
+ "description": "Reasoning effort for the new conversation: low, medium, high, xhigh or max; defaults to the source conversation's effort",
8066
+ "required": true,
8067
+ "valueHint": "level"
8068
+ },
7763
8069
  {
7764
8070
  "flags": "--harness <harness>",
7765
8071
  "description": "Ignored: harness is provider-default-only (PAN-1984)",
@@ -7819,6 +8125,24 @@ const COMPOSER_COMMAND_MANIFEST = [
7819
8125
  "description": "Ignored: author harness is provider-default-only (PAN-1984)",
7820
8126
  "required": true,
7821
8127
  "valueHint": "harness"
8128
+ },
8129
+ {
8130
+ "flags": "--skill <name>",
8131
+ "description": "Turn this skill on for the new conversation only (repeatable); a pack skill is <pack>/<skill>",
8132
+ "required": true,
8133
+ "valueHint": "name"
8134
+ },
8135
+ {
8136
+ "flags": "--pack <id>",
8137
+ "description": "Turn every skill of this cached skill pack on for the new conversation only (repeatable)",
8138
+ "required": true,
8139
+ "valueHint": "id"
8140
+ },
8141
+ {
8142
+ "flags": "--hold",
8143
+ "description": "Create and launch the new conversation without sending the kickoff; start it with Send in the dashboard or pan handoff start <conv>",
8144
+ "required": false,
8145
+ "valueHint": null
7822
8146
  }
7823
8147
  ],
7824
8148
  "aliases": [],
@@ -8659,6 +8983,11 @@ const COMPOSER_COMMAND_MANIFEST = [
8659
8983
  "description": "Print JSON",
8660
8984
  "required": false,
8661
8985
  "valueHint": null
8986
+ }, {
8987
+ "flags": "--on <refs...>",
8988
+ "description": "Issues or PRs this item waits on (PAN-123, #45, owner/repo#45, PR URL); Overdeck wakes the agent when all have merged",
8989
+ "required": true,
8990
+ "valueHint": "refs..."
8662
8991
  }],
8663
8992
  "aliases": [],
8664
8993
  "category": "Lifecycle"
@@ -10975,6 +11304,124 @@ const COMPOSER_COMMAND_MANIFEST = [
10975
11304
  "aliases": [],
10976
11305
  "category": "Flywheel"
10977
11306
  },
11307
+ {
11308
+ "id": "pan-models",
11309
+ "path": ["models"],
11310
+ "display": "/pan models",
11311
+ "description": "Model settings: provider presets",
11312
+ "args": [],
11313
+ "options": [],
11314
+ "aliases": [],
11315
+ "category": "CLI"
11316
+ },
11317
+ {
11318
+ "id": "pan-models-preset",
11319
+ "path": ["models", "preset"],
11320
+ "display": "/pan models preset",
11321
+ "description": "Apply eval-backed provider model presets (writes explicit values once; never auto-applies)",
11322
+ "args": [],
11323
+ "options": [],
11324
+ "aliases": [],
11325
+ "category": "CLI"
11326
+ },
11327
+ {
11328
+ "id": "pan-models-preset-list",
11329
+ "path": [
11330
+ "models",
11331
+ "preset",
11332
+ "list"
11333
+ ],
11334
+ "display": "/pan models preset list",
11335
+ "description": "List presets, their versions and what was last applied",
11336
+ "args": [],
11337
+ "options": [{
11338
+ "flags": "--json",
11339
+ "description": "Print JSON",
11340
+ "required": false,
11341
+ "valueHint": null
11342
+ }],
11343
+ "aliases": [],
11344
+ "category": "CLI"
11345
+ },
11346
+ {
11347
+ "id": "pan-models-preset-show",
11348
+ "path": [
11349
+ "models",
11350
+ "preset",
11351
+ "show"
11352
+ ],
11353
+ "display": "/pan models preset show",
11354
+ "description": "Show the per-setting diff a preset would make to config.yaml",
11355
+ "args": [{
11356
+ "name": "id",
11357
+ "required": true,
11358
+ "variadic": false
11359
+ }],
11360
+ "options": [{
11361
+ "flags": "--json",
11362
+ "description": "Print the plan JSON (same body as GET /api/model-presets/:id/plan)",
11363
+ "required": false,
11364
+ "valueHint": null
11365
+ }],
11366
+ "aliases": [],
11367
+ "category": "CLI"
11368
+ },
11369
+ {
11370
+ "id": "pan-models-preset-apply",
11371
+ "path": [
11372
+ "models",
11373
+ "preset",
11374
+ "apply"
11375
+ ],
11376
+ "display": "/pan models preset apply",
11377
+ "description": "Apply a preset: print the diff, confirm, then write only the changed settings",
11378
+ "args": [{
11379
+ "name": "id",
11380
+ "required": true,
11381
+ "variadic": false
11382
+ }],
11383
+ "options": [
11384
+ {
11385
+ "flags": "--dry-run",
11386
+ "description": "Print the diff and write nothing",
11387
+ "required": false,
11388
+ "valueHint": null
11389
+ },
11390
+ {
11391
+ "flags": "--yes",
11392
+ "description": "Apply without the confirmation prompt",
11393
+ "required": false,
11394
+ "valueHint": null
11395
+ },
11396
+ {
11397
+ "flags": "--json",
11398
+ "description": "Print JSON",
11399
+ "required": false,
11400
+ "valueHint": null
11401
+ }
11402
+ ],
11403
+ "aliases": [],
11404
+ "category": "CLI"
11405
+ },
11406
+ {
11407
+ "id": "pan-models-preset-undo",
11408
+ "path": [
11409
+ "models",
11410
+ "preset",
11411
+ "undo"
11412
+ ],
11413
+ "display": "/pan models preset undo",
11414
+ "description": "Restore the values the last preset apply replaced",
11415
+ "args": [],
11416
+ "options": [{
11417
+ "flags": "--json",
11418
+ "description": "Print JSON",
11419
+ "required": false,
11420
+ "valueHint": null
11421
+ }],
11422
+ "aliases": [],
11423
+ "category": "CLI"
11424
+ },
10978
11425
  {
10979
11426
  "id": "pan-parked",
10980
11427
  "path": ["parked"],
@@ -11849,29 +12296,6 @@ const COMPOSER_COMMAND_MANIFEST = [
11849
12296
  "aliases": [],
11850
12297
  "category": "Admin"
11851
12298
  },
11852
- {
11853
- "id": "pan-admin-tldr",
11854
- "path": ["admin", "tldr"],
11855
- "display": "/pan admin tldr",
11856
- "description": "TLDR daemon: status, start, stop, warm",
11857
- "args": [{
11858
- "name": "action",
11859
- "required": false,
11860
- "variadic": false
11861
- }, {
11862
- "name": "workspace",
11863
- "required": false,
11864
- "variadic": false
11865
- }],
11866
- "options": [{
11867
- "flags": "--json",
11868
- "description": "Output as JSON",
11869
- "required": false,
11870
- "valueHint": null
11871
- }],
11872
- "aliases": [],
11873
- "category": "Admin"
11874
- },
11875
12299
  {
11876
12300
  "id": "pan-admin-fpp",
11877
12301
  "path": ["admin", "fpp"],
@@ -12869,6 +13293,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12869
13293
  "required": true,
12870
13294
  "valueHint": "harness"
12871
13295
  },
13296
+ {
13297
+ "flags": "--effort <level>",
13298
+ "description": "Reasoning effort: low | medium | high | xhigh | max (defaults to the item/plan metadata, then roles.worker.effort)",
13299
+ "required": true,
13300
+ "valueHint": "level"
13301
+ },
12872
13302
  {
12873
13303
  "flags": "--shared",
12874
13304
  "description": "Run the worker in the issue workspace instead of an item worktree (foreman/operator only; serial use)",
@@ -12926,6 +13356,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12926
13356
  "required": true,
12927
13357
  "valueHint": "harness"
12928
13358
  },
13359
+ {
13360
+ "flags": "--effort <level>",
13361
+ "description": "Reasoning effort: low | medium | high | xhigh | max (defaults to roles.worker.effort)",
13362
+ "required": true,
13363
+ "valueHint": "level"
13364
+ },
12929
13365
  {
12930
13366
  "flags": "--read-only",
12931
13367
  "description": "Run in the issue workspace with git writes blocked",
@@ -13903,26 +14339,17 @@ const COMPOSER_COMMAND_MANIFEST = [
13903
14339
  "display": "/pan status",
13904
14340
  "description": "Show running agents",
13905
14341
  "args": [],
13906
- "options": [
13907
- {
13908
- "flags": "--json",
13909
- "description": "Output as JSON",
13910
- "required": false,
13911
- "valueHint": null
13912
- },
13913
- {
13914
- "flags": "--tldr",
13915
- "description": "Show TLDR index health across all workspaces",
13916
- "required": false,
13917
- "valueHint": null
13918
- },
13919
- {
13920
- "flags": "--context",
13921
- "description": "Show context window usage % for each agent",
13922
- "required": false,
13923
- "valueHint": null
13924
- }
13925
- ],
14342
+ "options": [{
14343
+ "flags": "--json",
14344
+ "description": "Output as JSON",
14345
+ "required": false,
14346
+ "valueHint": null
14347
+ }, {
14348
+ "flags": "--context",
14349
+ "description": "Show context window usage % for each agent",
14350
+ "required": false,
14351
+ "valueHint": null
14352
+ }],
13926
14353
  "aliases": [],
13927
14354
  "category": "Core"
13928
14355
  },
@@ -14086,7 +14513,7 @@ const COMPOSER_COMMAND_MANIFEST = [
14086
14513
  "id": "pan-restart",
14087
14514
  "path": ["restart"],
14088
14515
  "display": "/pan restart",
14089
- "description": "Restart a platform component (default: dashboard only — leaves CLIProxy, Traefik, TLDR running)",
14516
+ "description": "Restart a platform component (default: dashboard only — leaves CLIProxy and Traefik running)",
14090
14517
  "args": [],
14091
14518
  "options": [
14092
14519
  {
@@ -14791,6 +15218,26 @@ const COMPOSER_COMMAND_MANIFEST = [
14791
15218
  "aliases": [],
14792
15219
  "category": "Data"
14793
15220
  },
15221
+ {
15222
+ "id": "pan-cost-effort",
15223
+ "path": ["cost", "effort"],
15224
+ "display": "/pan cost effort",
15225
+ "description": "Show costs grouped by reasoning effort",
15226
+ "args": [],
15227
+ "options": [{
15228
+ "flags": "-i, --issue <issueId>",
15229
+ "description": "Limit to one issue",
15230
+ "required": true,
15231
+ "valueHint": "issueId"
15232
+ }, {
15233
+ "flags": "--json",
15234
+ "description": "Print JSON",
15235
+ "required": false,
15236
+ "valueHint": null
15237
+ }],
15238
+ "aliases": [],
15239
+ "category": "Data"
15240
+ },
14794
15241
  {
14795
15242
  "id": "pan-cost-budget",
14796
15243
  "path": ["cost", "budget"],
@@ -15196,6 +15643,10 @@ const DirectoryEntry = effect.Schema.Struct({
15196
15643
  harness: effect.Schema.String,
15197
15644
  /** `unknown` when not known. */
15198
15645
  model: effect.Schema.String,
15646
+ /** The launch effort from state.json, native agents only (PAN-4259). */
15647
+ effort: effect.Schema.optional(EffortLevelSchema),
15648
+ /** Where `effort` came from (an EffortSource), native agents only. */
15649
+ effortSource: effect.Schema.optional(effect.Schema.String),
15199
15650
  state: DirectoryEntryState,
15200
15651
  startedAt: effect.Schema.NullOr(effect.Schema.String),
15201
15652
  lastActivityAt: effect.Schema.NullOr(effect.Schema.String),