@overdeck/contracts 0.63.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
@@ -107,7 +107,8 @@ const IssueState = effect.Schema.Literals([
107
107
  const IssueAttention = effect.Schema.Literals([
108
108
  "needs-you",
109
109
  "stuck",
110
- "api-error"
110
+ "api-error",
111
+ "work-not-started"
111
112
  ]);
112
113
  /** Latest review decision on the PR, as the forge reports it. */
113
114
  const PrReviewState = effect.Schema.Literals([
@@ -140,6 +141,16 @@ const DerivedBranchState = effect.Schema.Struct({
140
141
  aheadOfMain: effect.Schema.Number,
141
142
  pushed: effect.Schema.Boolean
142
143
  });
144
+ /** The workspace journal's read on a post-planning auto-start (PAN-4399). */
145
+ const DerivedWorkStart = effect.Schema.Struct({
146
+ status: effect.Schema.Literals(["retrying", "not-started"]),
147
+ /** ISO time of the journal entry the status was read from. */
148
+ at: effect.Schema.String,
149
+ error: effect.Schema.optional(effect.Schema.String),
150
+ nextRetryAt: effect.Schema.optional(effect.Schema.String),
151
+ /** The retry is journaled but not actually running because the Deacon is frozen (PAN-4210). Present only when true. */
152
+ held: effect.Schema.optional(effect.Schema.Literal(true))
153
+ });
143
154
  /** Everything the dashboard needs to render an issue's pipeline position. */
144
155
  const DerivedIssueState = effect.Schema.Struct({
145
156
  issueId: effect.Schema.String,
@@ -152,7 +163,9 @@ const DerivedIssueState = effect.Schema.Struct({
152
163
  * precedence — could not be ruled in or out. Present only in that case; an
153
164
  * unresolved tracker read is never reported as an open issue.
154
165
  */
155
- trackerUnknown: effect.Schema.optional(effect.Schema.Literal(true))
166
+ trackerUnknown: effect.Schema.optional(effect.Schema.Literal(true)),
167
+ /** A deferred or gave-up post-planning auto-start read from the workspace journal (PAN-4399). */
168
+ workStart: effect.Schema.optional(DerivedWorkStart)
156
169
  });
157
170
  const ISSUE_STATES = [
158
171
  "backlog",
@@ -180,7 +193,8 @@ const ISSUE_STATE_PRECEDENCE = [
180
193
  const ISSUE_ATTENTIONS = [
181
194
  "needs-you",
182
195
  "stuck",
183
- "api-error"
196
+ "api-error",
197
+ "work-not-started"
184
198
  ];
185
199
  function isIssueState(value) {
186
200
  return typeof value === "string" && ISSUE_STATES.includes(value);
@@ -483,6 +497,13 @@ const ChannelPermissionRequestSnapshot = effect.Schema.Struct({
483
497
  inputPreview: effect.Schema.String,
484
498
  createdAt: effect.Schema.String
485
499
  });
500
+ /** PAN-4371 — advisory Jev reading of why an idle agent ended its turn. kind is a string (append-only store). */
501
+ const TurnEndAssessment = effect.Schema.Struct({
502
+ kind: effect.Schema.String,
503
+ confidence: effect.Schema.Number,
504
+ needsAnswer: effect.Schema.Boolean,
505
+ model: effect.Schema.String
506
+ });
486
507
  const AgentSnapshot = effect.Schema.Struct({
487
508
  id: AgentId,
488
509
  issueId: IssueId,
@@ -545,6 +566,7 @@ const AgentSnapshot = effect.Schema.Struct({
545
566
  })),
546
567
  resolution: effect.Schema.optional(AgentResolution),
547
568
  resolutionCount: effect.Schema.optional(effect.Schema.Number),
569
+ turnEndAssessment: effect.Schema.optional(TurnEndAssessment),
548
570
  runtimeSnapshotSequence: effect.Schema.optional(SequenceNumber)
549
571
  });
550
572
  /** PAN-3151: A recorded cycle in the review convergence tracking series */
@@ -1802,7 +1824,8 @@ const AgentEnrichmentChangedEvent = effect.Schema.Struct({
1802
1824
  plan: effect.Schema.String
1803
1825
  })),
1804
1826
  resolution: effect.Schema.optional(AgentResolution),
1805
- resolutionCount: effect.Schema.optional(effect.Schema.Number)
1827
+ resolutionCount: effect.Schema.optional(effect.Schema.Number),
1828
+ turnEndAssessment: effect.Schema.optional(TurnEndAssessment)
1806
1829
  })
1807
1830
  });
1808
1831
  /** New — agent created in database */
@@ -3197,6 +3220,30 @@ const OpenInEditorInput = effect.Schema.Struct({
3197
3220
  editor: EditorIdSchema
3198
3221
  });
3199
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
3200
3247
  //#region src/rpc.ts
3201
3248
  const WS_METHODS = {
3202
3249
  scanConversations: "pan.scanConversations",
@@ -3282,6 +3329,8 @@ const ContextUsage = effect.Schema.Struct({
3282
3329
  maxObservedInputTokens: effect.Schema.optional(effect.Schema.Number),
3283
3330
  /** Model the most recent assistant turn ran under (from JSONL). */
3284
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)),
3285
3334
  /** ISO timestamp of the most recent assistant turn. */
3286
3335
  lastTurnAt: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.String))
3287
3336
  });
@@ -3352,7 +3401,14 @@ const ConversationResponse = effect.Schema.Struct({
3352
3401
  proposedPlan: effect.Schema.optional(ProposedPlan),
3353
3402
  compactBoundaries: effect.Schema.optional(effect.Schema.Array(CompactBoundary)),
3354
3403
  contextUsage: effect.Schema.optional(effect.Schema.NullOr(ContextUsage)),
3355
- 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
+ })))
3356
3412
  });
3357
3413
  const ConversationEvent = effect.Schema.Union([
3358
3414
  effect.Schema.Struct({
@@ -3793,6 +3849,39 @@ const GetConversationStatsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.getConve
3793
3849
  /** All Overdeck WebSocket RPC methods */
3794
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);
3795
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
3796
3885
  //#region src/issue-delta.ts
3797
3886
  function createIssueDelta(previous, next) {
3798
3887
  const changes = [];
@@ -3908,14 +3997,6 @@ function removeAgentFromSessionIndex(agentIdBySessionId, agentId) {
3908
3997
  for (const [sessionId, id] of Object.entries(agentIdBySessionId ?? {})) if (id !== agentId) next[sessionId] = id;
3909
3998
  return next;
3910
3999
  }
3911
- function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
3912
- return {
3913
- id: agentId,
3914
- activity: "idle",
3915
- lastActivity: timestamp,
3916
- updatedAtSequence: sequence
3917
- };
3918
- }
3919
4000
  /**
3920
4001
  * Bump runtimeSnapshotSequence on the corresponding AgentSnapshot (if present)
3921
4002
  * so low-frequency subscribers can cheaply detect a runtime change. No-op if
@@ -3948,16 +4029,17 @@ function syncSnapshot(state, snapshot) {
3948
4029
  channelPermissionRequestIdsByAgentId[request.agentId] = [...existing, request.requestId];
3949
4030
  }
3950
4031
  const memory = snapshot.memory;
4032
+ const agentRuntimeById = mergeSnapshotRuntimeById(state.agentRuntimeById, snapshot.agentRuntimeById);
3951
4033
  const agentIdBySessionId = {};
3952
4034
  for (const agent of snapshot.agents) if (agent.sessionId) agentIdBySessionId[agent.sessionId] = agent.id;
3953
- 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;
3954
4036
  return {
3955
4037
  ...state,
3956
4038
  sequence: snapshot.sequence,
3957
4039
  agentsById,
3958
4040
  derivedIssueStateByIssueId,
3959
4041
  backendPanesById,
3960
- agentRuntimeById: snapshot.agentRuntimeById ?? state.agentRuntimeById,
4042
+ agentRuntimeById,
3961
4043
  channelPermissionRequestsById,
3962
4044
  channelPermissionRequestIdsByAgentId,
3963
4045
  resolvedChannelPermissionDecisionsById: {},
@@ -4056,7 +4138,8 @@ function applyEvent(state, event) {
4056
4138
  pendingAskUserQuestion: event.payload.pendingAskUserQuestion,
4057
4139
  pendingProposedPlan: event.payload.pendingProposedPlan,
4058
4140
  resolution: event.payload.resolution,
4059
- resolutionCount: event.payload.resolutionCount
4141
+ resolutionCount: event.payload.resolutionCount,
4142
+ turnEndAssessment: event.payload.turnEndAssessment
4060
4143
  }
4061
4144
  }
4062
4145
  };
@@ -4194,6 +4277,7 @@ function applyEvent(state, event) {
4194
4277
  delete base["pendingInputKinds"];
4195
4278
  delete base["pendingAskUserQuestion"];
4196
4279
  delete base["pendingProposedPlan"];
4280
+ delete base["turnEndAssessment"];
4197
4281
  }
4198
4282
  return base;
4199
4283
  })();
@@ -5287,30 +5371,6 @@ function deriveProjectCi(record) {
5287
5371
  };
5288
5372
  }
5289
5373
  //#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 = effect.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
5374
  //#region src/flywheel.ts
5315
5375
  const FlywheelRunId = effect.Schema.String.check(effect.Schema.isPattern(/^RUN-\d+$/));
5316
5376
  const FlywheelHttpUrl = effect.Schema.String.check(effect.Schema.isPattern(/^https?:\/\/\S+$/i));
@@ -6911,196 +6971,649 @@ const COMPOSER_COMMAND_MANIFEST = [
6911
6971
  "id": "pan-skills-set",
6912
6972
  "path": ["skills", "set"],
6913
6973
  "display": "/pan skills set",
6914
- "description": "Set a skill on, off, or inherit (global unless --project/--issue)",
6974
+ "description": "Set a skill (<skill> <state>) or a pack (--pack <id> <state>) on, off, or inherit",
6915
6975
  "args": [{
6916
- "name": "skill",
6917
- "required": true,
6918
- "variadic": false
6919
- }, {
6920
- "name": "state",
6921
- "required": true,
6922
- "variadic": false
6923
- }],
6924
- "options": [{
6925
- "flags": "--project <key>",
6926
- "description": "Project override",
6976
+ "name": "args",
6927
6977
  "required": true,
6928
- "valueHint": "key"
6929
- }, {
6930
- "flags": "--issue <id>",
6931
- "description": "Issue override",
6932
- "required": true,
6933
- "valueHint": "id"
6978
+ "variadic": true
6934
6979
  }],
6935
- "aliases": [],
6936
- "category": "Core"
6937
- },
6938
- {
6939
- "id": "pan-issues",
6940
- "path": ["issues"],
6941
- "display": "/pan issues",
6942
- "description": "List and triage work across configured trackers",
6943
- "args": [],
6944
6980
  "options": [
6945
6981
  {
6946
- "flags": "--all",
6947
- "description": "Include closed issues",
6948
- "required": false,
6949
- "valueHint": null
6950
- },
6951
- {
6952
- "flags": "--mine",
6953
- "description": "Show only my assigned issues",
6954
- "required": false,
6955
- "valueHint": null
6956
- },
6957
- {
6958
- "flags": "--json",
6959
- "description": "Output as JSON",
6960
- "required": false,
6961
- "valueHint": null
6962
- },
6963
- {
6964
- "flags": "--tracker <type>",
6965
- "description": "Query specific tracker (linear/github/gitlab)",
6982
+ "flags": "--project <key>",
6983
+ "description": "Project override",
6966
6984
  "required": true,
6967
- "valueHint": "type"
6985
+ "valueHint": "key"
6968
6986
  },
6969
6987
  {
6970
- "flags": "--all-trackers",
6971
- "description": "Query all configured trackers",
6972
- "required": false,
6973
- "valueHint": null
6988
+ "flags": "--issue <id>",
6989
+ "description": "Issue override",
6990
+ "required": true,
6991
+ "valueHint": "id"
6974
6992
  },
6975
6993
  {
6976
- "flags": "--triage",
6977
- "description": "Show triage queue",
6978
- "required": false,
6979
- "valueHint": null
6994
+ "flags": "--pack <id>",
6995
+ "description": "Set a whole skill pack instead of one skill",
6996
+ "required": true,
6997
+ "valueHint": "id"
6980
6998
  }
6981
6999
  ],
6982
7000
  "aliases": [],
6983
- "category": "Lifecycle"
7001
+ "category": "Core"
6984
7002
  },
6985
7003
  {
6986
- "id": "pan-show",
6987
- "path": ["show"],
6988
- "display": "/pan show",
6989
- "description": "Unified lens: derived issue state, CV, context, health for one issue",
7004
+ "id": "pan-skills-pack",
7005
+ "path": ["skills", "pack"],
7006
+ "display": "/pan skills pack",
7007
+ "description": "Register, update, and cache external skill packs pinned to a commit",
7008
+ "args": [],
7009
+ "options": [],
7010
+ "aliases": [],
7011
+ "category": "Core"
7012
+ },
7013
+ {
7014
+ "id": "pan-skills-pack-add",
7015
+ "path": [
7016
+ "skills",
7017
+ "pack",
7018
+ "add"
7019
+ ],
7020
+ "display": "/pan skills pack add",
7021
+ "description": "Register a git skill pack at the commit a ref resolves to (enables nothing)",
6990
7022
  "args": [{
6991
7023
  "name": "id",
6992
7024
  "required": true,
6993
7025
  "variadic": false
7026
+ }, {
7027
+ "name": "url",
7028
+ "required": true,
7029
+ "variadic": false
6994
7030
  }],
6995
7031
  "options": [
6996
7032
  {
6997
- "flags": "--cv",
6998
- "description": "Agent work history only",
6999
- "required": false,
7000
- "valueHint": null
7001
- },
7002
- {
7003
- "flags": "--context",
7004
- "description": "Context engineering state only",
7005
- "required": false,
7006
- "valueHint": null
7033
+ "flags": "--ref <ref>",
7034
+ "description": "Tag or branch to pin",
7035
+ "required": true,
7036
+ "valueHint": "ref"
7007
7037
  },
7008
7038
  {
7009
- "flags": "--health",
7010
- "description": "Health + heartbeat only",
7011
- "required": false,
7012
- "valueHint": null
7039
+ "flags": "--adapter <adapter>",
7040
+ "description": "plain, claude-plugin, or deft-readonly",
7041
+ "required": true,
7042
+ "valueHint": "adapter"
7013
7043
  },
7014
7044
  {
7015
- "flags": "--json",
7016
- "description": "Output as JSON",
7045
+ "flags": "--yes",
7046
+ "description": "Trust the resolved commit without asking",
7017
7047
  "required": false,
7018
7048
  "valueHint": null
7019
7049
  }
7020
7050
  ],
7021
7051
  "aliases": [],
7022
- "category": "Observation"
7052
+ "category": "Core"
7023
7053
  },
7024
7054
  {
7025
- "id": "pan-open",
7026
- "path": ["open"],
7027
- "display": "/pan open",
7028
- "description": "Open an issue workspace in your preferred editor",
7055
+ "id": "pan-skills-pack-update",
7056
+ "path": [
7057
+ "skills",
7058
+ "pack",
7059
+ "update"
7060
+ ],
7061
+ "display": "/pan skills pack update",
7062
+ "description": "Move a pack to the commit its ref (or --ref) now resolves to",
7029
7063
  "args": [{
7030
7064
  "name": "id",
7031
7065
  "required": true,
7032
7066
  "variadic": false
7033
7067
  }],
7034
7068
  "options": [{
7035
- "flags": "-e, --editor <editor>",
7036
- "description": "Editor to use (cursor, windsurf, vscode, zed, etc.)",
7069
+ "flags": "--ref <ref>",
7070
+ "description": "Switch to a different tag or branch",
7037
7071
  "required": true,
7038
- "valueHint": "editor"
7072
+ "valueHint": "ref"
7073
+ }, {
7074
+ "flags": "--yes",
7075
+ "description": "Trust the new commit without asking",
7076
+ "required": false,
7077
+ "valueHint": null
7039
7078
  }],
7040
7079
  "aliases": [],
7041
- "category": "Observation"
7080
+ "category": "Core"
7042
7081
  },
7043
7082
  {
7044
- "id": "pan-review",
7045
- "path": ["review"],
7046
- "display": "/pan review",
7047
- "description": "Review-loop management: request re-review, abort reviewers, restart a round",
7083
+ "id": "pan-skills-pack-list",
7084
+ "path": [
7085
+ "skills",
7086
+ "pack",
7087
+ "list"
7088
+ ],
7089
+ "display": "/pan skills pack list",
7090
+ "description": "List registered skill packs",
7048
7091
  "args": [],
7049
- "options": [],
7092
+ "options": [{
7093
+ "flags": "--json",
7094
+ "description": "Output as JSON",
7095
+ "required": false,
7096
+ "valueHint": null
7097
+ }, {
7098
+ "flags": "--offline",
7099
+ "description": "Skip the update check (no network)",
7100
+ "required": false,
7101
+ "valueHint": null
7102
+ }],
7050
7103
  "aliases": [],
7051
- "category": "Review"
7104
+ "category": "Core"
7052
7105
  },
7053
7106
  {
7054
- "id": "pan-review-request",
7055
- "path": ["review", "request"],
7056
- "display": "/pan review request",
7057
- "description": "Request re-review after fixing feedback",
7107
+ "id": "pan-skills-pack-remove",
7108
+ "path": [
7109
+ "skills",
7110
+ "pack",
7111
+ "remove"
7112
+ ],
7113
+ "display": "/pan skills pack remove",
7114
+ "description": "Unregister a pack, clear its global toggles, and delete its cache",
7058
7115
  "args": [{
7059
7116
  "name": "id",
7060
7117
  "required": true,
7061
7118
  "variadic": false
7062
7119
  }],
7063
- "options": [{
7064
- "flags": "-m, --message <text>",
7065
- "description": "Message describing the fixes applied",
7066
- "required": true,
7067
- "valueHint": "text"
7068
- }],
7120
+ "options": [],
7069
7121
  "aliases": [],
7070
- "category": "Review"
7122
+ "category": "Core"
7071
7123
  },
7072
7124
  {
7073
- "id": "pan-review-abort",
7074
- "path": ["review", "abort"],
7075
- "display": "/pan review abort",
7076
- "description": "Kill all running reviewer sessions and leave the worker idle",
7125
+ "id": "pan-skills-pack-sync",
7126
+ "path": [
7127
+ "skills",
7128
+ "pack",
7129
+ "sync"
7130
+ ],
7131
+ "display": "/pan skills pack sync",
7132
+ "description": "Re-fetch packs and extract their trusted commits (all packs when omitted)",
7077
7133
  "args": [{
7078
7134
  "name": "id",
7079
- "required": true,
7135
+ "required": false,
7080
7136
  "variadic": false
7081
7137
  }],
7082
7138
  "options": [],
7083
7139
  "aliases": [],
7084
- "category": "Review"
7140
+ "category": "Core"
7085
7141
  },
7086
7142
  {
7087
- "id": "pan-review-restart",
7088
- "path": ["review", "restart"],
7089
- "display": "/pan review restart",
7090
- "description": "Resume review and re-dispatch reviewers missing a report",
7091
- "args": [{
7092
- "name": "id",
7093
- "required": true,
7094
- "variadic": false
7095
- }],
7143
+ "id": "pan-skills-pack-gc",
7144
+ "path": [
7145
+ "skills",
7146
+ "pack",
7147
+ "gc"
7148
+ ],
7149
+ "display": "/pan skills pack gc",
7150
+ "description": "Remove unused skill pack mounts and dangling launch links",
7151
+ "args": [],
7096
7152
  "options": [{
7097
- "flags": "--model <model>",
7098
- "description": "Override model for all reviewers (e.g. gpt-5.4, claude-sonnet-5)",
7153
+ "flags": "--max-age-days <n>",
7154
+ "description": "Keep unused mounts younger than this",
7099
7155
  "required": true,
7100
- "valueHint": "model"
7101
- }, {
7102
- "flags": "--role <role>",
7103
- "description": "Restart only a specific reviewer role (correctness/security/performance/requirements)",
7156
+ "valueHint": "n"
7157
+ }],
7158
+ "aliases": [],
7159
+ "category": "Core"
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
+ },
7301
+ {
7302
+ "id": "pan-pair",
7303
+ "path": ["pair"],
7304
+ "display": "/pan pair",
7305
+ "description": "Print a one-time URL that pairs another device with this dashboard (see configuration/remote-access.mdx)",
7306
+ "args": [],
7307
+ "options": [
7308
+ {
7309
+ "flags": "--label <name>",
7310
+ "description": "Name to record for the pairing in the activity log",
7311
+ "required": true,
7312
+ "valueHint": "name"
7313
+ },
7314
+ {
7315
+ "flags": "--url <base>",
7316
+ "description": "Base URL the other device can reach (default: this dashboard's API URL)",
7317
+ "required": true,
7318
+ "valueHint": "base"
7319
+ },
7320
+ {
7321
+ "flags": "--json",
7322
+ "description": "Print { url, credential, expiresAt } as JSON",
7323
+ "required": false,
7324
+ "valueHint": null
7325
+ }
7326
+ ],
7327
+ "aliases": [],
7328
+ "category": "CLI"
7329
+ },
7330
+ {
7331
+ "id": "pan-devices",
7332
+ "path": ["devices"],
7333
+ "display": "/pan devices",
7334
+ "description": "List or revoke paired devices (see configuration/remote-access.mdx)",
7335
+ "args": [],
7336
+ "options": [],
7337
+ "aliases": [],
7338
+ "category": "CLI"
7339
+ },
7340
+ {
7341
+ "id": "pan-devices-list",
7342
+ "path": ["devices", "list"],
7343
+ "display": "/pan devices list",
7344
+ "description": "List paired devices with created, last-used and revoked times",
7345
+ "args": [],
7346
+ "options": [{
7347
+ "flags": "--json",
7348
+ "description": "Print the devices as JSON",
7349
+ "required": false,
7350
+ "valueHint": null
7351
+ }],
7352
+ "aliases": [],
7353
+ "category": "CLI"
7354
+ },
7355
+ {
7356
+ "id": "pan-devices-revoke",
7357
+ "path": ["devices", "revoke"],
7358
+ "display": "/pan devices revoke",
7359
+ "description": "Revoke a paired device and close its live connections",
7360
+ "args": [{
7361
+ "name": "id",
7362
+ "required": true,
7363
+ "variadic": false
7364
+ }],
7365
+ "options": [],
7366
+ "aliases": [],
7367
+ "category": "CLI"
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
+ },
7432
+ {
7433
+ "id": "pan-issues",
7434
+ "path": ["issues"],
7435
+ "display": "/pan issues",
7436
+ "description": "List and triage work across configured trackers",
7437
+ "args": [],
7438
+ "options": [
7439
+ {
7440
+ "flags": "--all",
7441
+ "description": "Include closed issues",
7442
+ "required": false,
7443
+ "valueHint": null
7444
+ },
7445
+ {
7446
+ "flags": "--mine",
7447
+ "description": "Show only my assigned issues",
7448
+ "required": false,
7449
+ "valueHint": null
7450
+ },
7451
+ {
7452
+ "flags": "--json",
7453
+ "description": "Output as JSON",
7454
+ "required": false,
7455
+ "valueHint": null
7456
+ },
7457
+ {
7458
+ "flags": "--tracker <type>",
7459
+ "description": "Query specific tracker (linear/github/gitlab)",
7460
+ "required": true,
7461
+ "valueHint": "type"
7462
+ },
7463
+ {
7464
+ "flags": "--all-trackers",
7465
+ "description": "Query all configured trackers",
7466
+ "required": false,
7467
+ "valueHint": null
7468
+ },
7469
+ {
7470
+ "flags": "--triage",
7471
+ "description": "Show triage queue",
7472
+ "required": false,
7473
+ "valueHint": null
7474
+ }
7475
+ ],
7476
+ "aliases": [],
7477
+ "category": "Lifecycle"
7478
+ },
7479
+ {
7480
+ "id": "pan-show",
7481
+ "path": ["show"],
7482
+ "display": "/pan show",
7483
+ "description": "Unified lens: derived issue state, CV, context, health for one issue",
7484
+ "args": [{
7485
+ "name": "id",
7486
+ "required": true,
7487
+ "variadic": false
7488
+ }],
7489
+ "options": [
7490
+ {
7491
+ "flags": "--cv",
7492
+ "description": "Agent work history only",
7493
+ "required": false,
7494
+ "valueHint": null
7495
+ },
7496
+ {
7497
+ "flags": "--context",
7498
+ "description": "Context engineering state only",
7499
+ "required": false,
7500
+ "valueHint": null
7501
+ },
7502
+ {
7503
+ "flags": "--health",
7504
+ "description": "Health + heartbeat only",
7505
+ "required": false,
7506
+ "valueHint": null
7507
+ },
7508
+ {
7509
+ "flags": "--json",
7510
+ "description": "Output as JSON",
7511
+ "required": false,
7512
+ "valueHint": null
7513
+ }
7514
+ ],
7515
+ "aliases": [],
7516
+ "category": "Observation"
7517
+ },
7518
+ {
7519
+ "id": "pan-open",
7520
+ "path": ["open"],
7521
+ "display": "/pan open",
7522
+ "description": "Open an issue workspace in your preferred editor",
7523
+ "args": [{
7524
+ "name": "id",
7525
+ "required": true,
7526
+ "variadic": false
7527
+ }],
7528
+ "options": [{
7529
+ "flags": "-e, --editor <editor>",
7530
+ "description": "Editor to use (cursor, windsurf, vscode, zed, etc.)",
7531
+ "required": true,
7532
+ "valueHint": "editor"
7533
+ }],
7534
+ "aliases": [],
7535
+ "category": "Observation"
7536
+ },
7537
+ {
7538
+ "id": "pan-review",
7539
+ "path": ["review"],
7540
+ "display": "/pan review",
7541
+ "description": "Review-loop management: request re-review, abort reviewers, restart a round",
7542
+ "args": [],
7543
+ "options": [],
7544
+ "aliases": [],
7545
+ "category": "Review"
7546
+ },
7547
+ {
7548
+ "id": "pan-review-request",
7549
+ "path": ["review", "request"],
7550
+ "display": "/pan review request",
7551
+ "description": "Request re-review after fixing feedback",
7552
+ "args": [{
7553
+ "name": "id",
7554
+ "required": true,
7555
+ "variadic": false
7556
+ }],
7557
+ "options": [{
7558
+ "flags": "-m, --message <text>",
7559
+ "description": "Message describing the fixes applied",
7560
+ "required": true,
7561
+ "valueHint": "text"
7562
+ }],
7563
+ "aliases": [],
7564
+ "category": "Review"
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
+ },
7585
+ {
7586
+ "id": "pan-review-abort",
7587
+ "path": ["review", "abort"],
7588
+ "display": "/pan review abort",
7589
+ "description": "Kill all running reviewer sessions and leave the worker idle",
7590
+ "args": [{
7591
+ "name": "id",
7592
+ "required": true,
7593
+ "variadic": false
7594
+ }],
7595
+ "options": [],
7596
+ "aliases": [],
7597
+ "category": "Review"
7598
+ },
7599
+ {
7600
+ "id": "pan-review-restart",
7601
+ "path": ["review", "restart"],
7602
+ "display": "/pan review restart",
7603
+ "description": "Resume review and re-dispatch reviewers missing a report",
7604
+ "args": [{
7605
+ "name": "id",
7606
+ "required": true,
7607
+ "variadic": false
7608
+ }],
7609
+ "options": [{
7610
+ "flags": "--model <model>",
7611
+ "description": "Override model for all reviewers (e.g. gpt-5.4, claude-sonnet-5)",
7612
+ "required": true,
7613
+ "valueHint": "model"
7614
+ }, {
7615
+ "flags": "--role <role>",
7616
+ "description": "Restart only a specific reviewer role (correctness/security/performance/requirements)",
7104
7617
  "required": true,
7105
7618
  "valueHint": "role"
7106
7619
  }],
@@ -7193,7 +7706,7 @@ const COMPOSER_COMMAND_MANIFEST = [
7193
7706
  },
7194
7707
  {
7195
7708
  "flags": "--effort <level>",
7196
- "description": "Planning effort: low | medium | high",
7709
+ "description": "Planning effort: low | medium | high | xhigh | max",
7197
7710
  "required": true,
7198
7711
  "valueHint": "level"
7199
7712
  },
@@ -7249,6 +7762,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7249
7762
  "description": "Bypass the PRD-first gate for a genuinely trivial issue (loud; prefer writing the PRD)",
7250
7763
  "required": false,
7251
7764
  "valueHint": null
7765
+ },
7766
+ {
7767
+ "flags": "--critic",
7768
+ "description": "Require an independent different-family plan critique before promotion (automatic for architecture, substrate-improvement and security labels)",
7769
+ "required": false,
7770
+ "valueHint": null
7252
7771
  }
7253
7772
  ],
7254
7773
  "aliases": [],
@@ -7301,6 +7820,43 @@ const COMPOSER_COMMAND_MANIFEST = [
7301
7820
  "aliases": [],
7302
7821
  "category": "Lifecycle"
7303
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
+ },
7304
7860
  {
7305
7861
  "id": "pan-answer",
7306
7862
  "path": ["answer"],
@@ -7449,12 +8005,24 @@ const COMPOSER_COMMAND_MANIFEST = [
7449
8005
  "required": true,
7450
8006
  "valueHint": "model"
7451
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
+ },
7452
8014
  {
7453
8015
  "flags": "--cwd <path>",
7454
8016
  "description": "Working directory for the summary-forked session",
7455
8017
  "required": true,
7456
8018
  "valueHint": "path"
7457
8019
  },
8020
+ {
8021
+ "flags": "--allow-primary",
8022
+ "description": "Operator only: allow --cwd to be a project's primary checkout (refused for agent sessions)",
8023
+ "required": false,
8024
+ "valueHint": null
8025
+ },
7458
8026
  {
7459
8027
  "flags": "--project <key>",
7460
8028
  "description": "Project (yaml key or display name) for the new conversation; defaults to inheriting the source conversation's project",
@@ -7492,6 +8060,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7492
8060
  "required": true,
7493
8061
  "valueHint": "model"
7494
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
+ },
7495
8069
  {
7496
8070
  "flags": "--harness <harness>",
7497
8071
  "description": "Ignored: harness is provider-default-only (PAN-1984)",
@@ -7504,6 +8078,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7504
8078
  "required": true,
7505
8079
  "valueHint": "path"
7506
8080
  },
8081
+ {
8082
+ "flags": "--allow-primary",
8083
+ "description": "Operator only: allow --cwd to be a project's primary checkout (refused for agent sessions)",
8084
+ "required": false,
8085
+ "valueHint": null
8086
+ },
7507
8087
  {
7508
8088
  "flags": "--project <key>",
7509
8089
  "description": "Project (yaml key or display name) for the new conversation; defaults to inheriting the source conversation's project",
@@ -7545,6 +8125,24 @@ const COMPOSER_COMMAND_MANIFEST = [
7545
8125
  "description": "Ignored: author harness is provider-default-only (PAN-1984)",
7546
8126
  "required": true,
7547
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
7548
8146
  }
7549
8147
  ],
7550
8148
  "aliases": [],
@@ -8334,6 +8932,11 @@ const COMPOSER_COMMAND_MANIFEST = [
8334
8932
  "description": "Print JSON",
8335
8933
  "required": false,
8336
8934
  "valueHint": null
8935
+ }, {
8936
+ "flags": "--steal",
8937
+ "description": "Claim even when a running agent holds this item or an overlapping one (foreman/operator override)",
8938
+ "required": false,
8939
+ "valueHint": null
8337
8940
  }],
8338
8941
  "aliases": [],
8339
8942
  "category": "Lifecycle"
@@ -8380,6 +8983,11 @@ const COMPOSER_COMMAND_MANIFEST = [
8380
8983
  "description": "Print JSON",
8381
8984
  "required": false,
8382
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..."
8383
8991
  }],
8384
8992
  "aliases": [],
8385
8993
  "category": "Lifecycle"
@@ -8486,12 +9094,187 @@ const COMPOSER_COMMAND_MANIFEST = [
8486
9094
  "required": false,
8487
9095
  "valueHint": null
8488
9096
  },
8489
- {
8490
- "flags": "--labels <labels>",
8491
- "description": "Comma-separated labels for routing (e.g., docs,marketing)",
8492
- "required": true,
8493
- "valueHint": "labels"
8494
- },
9097
+ {
9098
+ "flags": "--labels <labels>",
9099
+ "description": "Comma-separated labels for routing (e.g., docs,marketing)",
9100
+ "required": true,
9101
+ "valueHint": "labels"
9102
+ },
9103
+ {
9104
+ "flags": "--project <path>",
9105
+ "description": "Explicit project path (overrides registry)",
9106
+ "required": true,
9107
+ "valueHint": "path"
9108
+ },
9109
+ {
9110
+ "flags": "--docker",
9111
+ "description": "Start Docker containers after workspace creation",
9112
+ "required": false,
9113
+ "valueHint": null
9114
+ },
9115
+ {
9116
+ "flags": "--remote",
9117
+ "description": "Create workspace on remote VM (Fly.io)",
9118
+ "required": false,
9119
+ "valueHint": null
9120
+ },
9121
+ {
9122
+ "flags": "--local",
9123
+ "description": "Create workspace locally (explicit override)",
9124
+ "required": false,
9125
+ "valueHint": null
9126
+ }
9127
+ ],
9128
+ "aliases": [],
9129
+ "category": "Workspace"
9130
+ },
9131
+ {
9132
+ "id": "pan-workspace-migrate",
9133
+ "path": ["workspace", "migrate"],
9134
+ "display": "/pan workspace migrate",
9135
+ "description": "Migrate workspace between local and remote (stops+pauses the local agent, commits and pushes all work first)",
9136
+ "args": [{
9137
+ "name": "issueId",
9138
+ "required": true,
9139
+ "variadic": false
9140
+ }],
9141
+ "options": [
9142
+ {
9143
+ "flags": "--to <location>",
9144
+ "description": "Target location: \"remote\" or \"local\" (default: auto-detect from current location)",
9145
+ "required": true,
9146
+ "valueHint": "location"
9147
+ },
9148
+ {
9149
+ "flags": "--keep",
9150
+ "description": "Keep the source workspace after migration",
9151
+ "required": false,
9152
+ "valueHint": null
9153
+ },
9154
+ {
9155
+ "flags": "--force",
9156
+ "description": "Overwrite an existing destination workspace / ignore branch-drift guard",
9157
+ "required": false,
9158
+ "valueHint": null
9159
+ }
9160
+ ],
9161
+ "aliases": [],
9162
+ "category": "Workspace"
9163
+ },
9164
+ {
9165
+ "id": "pan-workspace-ssh",
9166
+ "path": ["workspace", "ssh"],
9167
+ "display": "/pan workspace ssh",
9168
+ "description": "SSH into remote workspace VM",
9169
+ "args": [{
9170
+ "name": "issueId",
9171
+ "required": true,
9172
+ "variadic": false
9173
+ }],
9174
+ "options": [],
9175
+ "aliases": [],
9176
+ "category": "Workspace"
9177
+ },
9178
+ {
9179
+ "id": "pan-workspace-sync-auth",
9180
+ "path": ["workspace", "sync-auth"],
9181
+ "display": "/pan workspace sync-auth",
9182
+ "description": "Sync Claude Code credentials to remote workspace",
9183
+ "args": [{
9184
+ "name": "issueId",
9185
+ "required": true,
9186
+ "variadic": false
9187
+ }],
9188
+ "options": [],
9189
+ "aliases": [],
9190
+ "category": "Workspace"
9191
+ },
9192
+ {
9193
+ "id": "pan-workspace-start",
9194
+ "path": ["workspace", "start"],
9195
+ "display": "/pan workspace start",
9196
+ "description": "Start a stopped remote workspace",
9197
+ "args": [{
9198
+ "name": "issueId",
9199
+ "required": true,
9200
+ "variadic": false
9201
+ }],
9202
+ "options": [],
9203
+ "aliases": [],
9204
+ "category": "Workspace"
9205
+ },
9206
+ {
9207
+ "id": "pan-workspace-stop",
9208
+ "path": ["workspace", "stop"],
9209
+ "display": "/pan workspace stop",
9210
+ "description": "Stop (hibernate) a remote workspace",
9211
+ "args": [{
9212
+ "name": "issueId",
9213
+ "required": true,
9214
+ "variadic": false
9215
+ }],
9216
+ "options": [],
9217
+ "aliases": [],
9218
+ "category": "Workspace"
9219
+ },
9220
+ {
9221
+ "id": "pan-workspace-list",
9222
+ "path": ["workspace", "list"],
9223
+ "display": "/pan workspace list",
9224
+ "description": "List all workspaces",
9225
+ "args": [],
9226
+ "options": [
9227
+ {
9228
+ "flags": "--json",
9229
+ "description": "Output as JSON",
9230
+ "required": false,
9231
+ "valueHint": null
9232
+ },
9233
+ {
9234
+ "flags": "--all",
9235
+ "description": "List workspaces across all registered projects",
9236
+ "required": false,
9237
+ "valueHint": null
9238
+ },
9239
+ {
9240
+ "flags": "--kind <kind>",
9241
+ "description": "Filter by workspace kind (main|issue|scratch), reading through the resolver",
9242
+ "required": true,
9243
+ "valueHint": "kind"
9244
+ },
9245
+ {
9246
+ "flags": "--archived",
9247
+ "description": "Include archived workspaces (only applies with --kind)",
9248
+ "required": false,
9249
+ "valueHint": null
9250
+ },
9251
+ {
9252
+ "flags": "--stale",
9253
+ "description": "Show reclaim candidates: merged branches still on disk, with sizes",
9254
+ "required": false,
9255
+ "valueHint": null
9256
+ }
9257
+ ],
9258
+ "aliases": [],
9259
+ "category": "Workspace"
9260
+ },
9261
+ {
9262
+ "id": "pan-workspace-destroy",
9263
+ "path": ["workspace", "destroy"],
9264
+ "display": "/pan workspace destroy",
9265
+ "description": "Destroy workspace (all shapes by default: base, strike, and slot worktrees)",
9266
+ "args": [{
9267
+ "name": "issueId",
9268
+ "required": true,
9269
+ "variadic": false
9270
+ }],
9271
+ "options": [
9272
+ {
9273
+ "flags": "--force",
9274
+ "description": "Force removal even with uncommitted changes",
9275
+ "required": false,
9276
+ "valueHint": null
9277
+ },
8495
9278
  {
8496
9279
  "flags": "--project <path>",
8497
9280
  "description": "Explicit project path (overrides registry)",
@@ -8499,20 +9282,14 @@ const COMPOSER_COMMAND_MANIFEST = [
8499
9282
  "valueHint": "path"
8500
9283
  },
8501
9284
  {
8502
- "flags": "--docker",
8503
- "description": "Start Docker containers after workspace creation",
8504
- "required": false,
8505
- "valueHint": null
8506
- },
8507
- {
8508
- "flags": "--remote",
8509
- "description": "Create workspace on remote VM (Fly.io)",
8510
- "required": false,
8511
- "valueHint": null
9285
+ "flags": "--shape <shape>",
9286
+ "description": "Limit to one shape: base|strike|slot|all (default: all)",
9287
+ "required": true,
9288
+ "valueHint": "shape"
8512
9289
  },
8513
9290
  {
8514
- "flags": "--local",
8515
- "description": "Create workspace locally (explicit override)",
9291
+ "flags": "--purge-memory",
9292
+ "description": "Also permanently delete the workspace's memory home (irreversible)",
8516
9293
  "required": false,
8517
9294
  "valueHint": null
8518
9295
  }
@@ -8521,31 +9298,43 @@ const COMPOSER_COMMAND_MANIFEST = [
8521
9298
  "category": "Workspace"
8522
9299
  },
8523
9300
  {
8524
- "id": "pan-workspace-migrate",
8525
- "path": ["workspace", "migrate"],
8526
- "display": "/pan workspace migrate",
8527
- "description": "Migrate workspace between local and remote (stops+pauses the local agent, commits and pushes all work first)",
9301
+ "id": "pan-workspace-new",
9302
+ "path": ["workspace", "new"],
9303
+ "display": "/pan workspace new",
9304
+ "description": "Create a scratch workspace (shared dir by default; --isolated for a git worktree)",
8528
9305
  "args": [{
8529
- "name": "issueId",
9306
+ "name": "name",
8530
9307
  "required": true,
8531
9308
  "variadic": false
8532
9309
  }],
8533
9310
  "options": [
8534
9311
  {
8535
- "flags": "--to <location>",
8536
- "description": "Target location: \"remote\" or \"local\" (default: auto-detect from current location)",
9312
+ "flags": "--project <key>",
9313
+ "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
8537
9314
  "required": true,
8538
- "valueHint": "location"
9315
+ "valueHint": "key"
8539
9316
  },
8540
9317
  {
8541
- "flags": "--keep",
8542
- "description": "Keep the source workspace after migration",
9318
+ "flags": "--isolated",
9319
+ "description": "Create an isolated git worktree instead of sharing the project directory",
8543
9320
  "required": false,
8544
9321
  "valueHint": null
8545
9322
  },
8546
9323
  {
8547
- "flags": "--force",
8548
- "description": "Overwrite an existing destination workspace / ignore branch-drift guard",
9324
+ "flags": "--parent-branch <branch>",
9325
+ "description": "Parent branch for the isolated worktree (default: inferred from the project's current branch)",
9326
+ "required": true,
9327
+ "valueHint": "branch"
9328
+ },
9329
+ {
9330
+ "flags": "--target-path <dir>",
9331
+ "description": "Target an existing directory as the workspace path (rejects --isolated)",
9332
+ "required": true,
9333
+ "valueHint": "dir"
9334
+ },
9335
+ {
9336
+ "flags": "--dry-run",
9337
+ "description": "Print the resolved intent as JSON and create nothing",
8549
9338
  "required": false,
8550
9339
  "valueHint": null
8551
9340
  }
@@ -8554,12 +9343,27 @@ const COMPOSER_COMMAND_MANIFEST = [
8554
9343
  "category": "Workspace"
8555
9344
  },
8556
9345
  {
8557
- "id": "pan-workspace-ssh",
8558
- "path": ["workspace", "ssh"],
8559
- "display": "/pan workspace ssh",
8560
- "description": "SSH into remote workspace VM",
9346
+ "id": "pan-workspace-main",
9347
+ "path": ["workspace", "main"],
9348
+ "display": "/pan workspace main",
9349
+ "description": "Resolve or create the project's singleton main workspace",
9350
+ "args": [],
9351
+ "options": [{
9352
+ "flags": "--project <key>",
9353
+ "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
9354
+ "required": true,
9355
+ "valueHint": "key"
9356
+ }],
9357
+ "aliases": [],
9358
+ "category": "Workspace"
9359
+ },
9360
+ {
9361
+ "id": "pan-workspace-get",
9362
+ "path": ["workspace", "get"],
9363
+ "display": "/pan workspace get",
9364
+ "description": "Show a workspace row by id",
8561
9365
  "args": [{
8562
- "name": "issueId",
9366
+ "name": "ws",
8563
9367
  "required": true,
8564
9368
  "variadic": false
8565
9369
  }],
@@ -8568,12 +9372,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8568
9372
  "category": "Workspace"
8569
9373
  },
8570
9374
  {
8571
- "id": "pan-workspace-sync-auth",
8572
- "path": ["workspace", "sync-auth"],
8573
- "display": "/pan workspace sync-auth",
8574
- "description": "Sync Claude Code credentials to remote workspace",
9375
+ "id": "pan-workspace-activate",
9376
+ "path": ["workspace", "activate"],
9377
+ "display": "/pan workspace activate",
9378
+ "description": "Touch a workspace's last-accessed time and print its layout hint",
8575
9379
  "args": [{
8576
- "name": "issueId",
9380
+ "name": "ws",
8577
9381
  "required": true,
8578
9382
  "variadic": false
8579
9383
  }],
@@ -8582,12 +9386,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8582
9386
  "category": "Workspace"
8583
9387
  },
8584
9388
  {
8585
- "id": "pan-workspace-start",
8586
- "path": ["workspace", "start"],
8587
- "display": "/pan workspace start",
8588
- "description": "Start a stopped remote workspace",
9389
+ "id": "pan-workspace-archive",
9390
+ "path": ["workspace", "archive"],
9391
+ "display": "/pan workspace archive",
9392
+ "description": "Archive a workspace (reversible; refuses kind=main)",
8589
9393
  "args": [{
8590
- "name": "issueId",
9394
+ "name": "ws",
8591
9395
  "required": true,
8592
9396
  "variadic": false
8593
9397
  }],
@@ -8596,53 +9400,117 @@ const COMPOSER_COMMAND_MANIFEST = [
8596
9400
  "category": "Workspace"
8597
9401
  },
8598
9402
  {
8599
- "id": "pan-workspace-stop",
8600
- "path": ["workspace", "stop"],
8601
- "display": "/pan workspace stop",
8602
- "description": "Stop (hibernate) a remote workspace",
9403
+ "id": "pan-workspace-relocate",
9404
+ "path": ["workspace", "relocate"],
9405
+ "display": "/pan workspace relocate",
9406
+ "description": "Point a workspace at a new path (refuses kind=issue; kind=main requires --force)",
8603
9407
  "args": [{
8604
- "name": "issueId",
9408
+ "name": "ws",
8605
9409
  "required": true,
8606
9410
  "variadic": false
8607
9411
  }],
8608
- "options": [],
9412
+ "options": [{
9413
+ "flags": "--path <dir>",
9414
+ "description": "New path (must be an existing directory)",
9415
+ "required": true,
9416
+ "valueHint": "dir"
9417
+ }, {
9418
+ "flags": "--force",
9419
+ "description": "Allow relocating the main workspace, diverging it from projects.yaml",
9420
+ "required": false,
9421
+ "valueHint": null
9422
+ }],
8609
9423
  "aliases": [],
8610
9424
  "category": "Workspace"
8611
9425
  },
8612
9426
  {
8613
- "id": "pan-workspace-list",
8614
- "path": ["workspace", "list"],
8615
- "display": "/pan workspace list",
8616
- "description": "List all workspaces",
8617
- "args": [],
9427
+ "id": "pan-workspace-render-devcontainer",
9428
+ "path": ["workspace", "render-devcontainer"],
9429
+ "display": "/pan workspace render-devcontainer",
9430
+ "description": "Re-render <workspace>/.devcontainer/ from the project compose template",
9431
+ "args": [{
9432
+ "name": "featureName",
9433
+ "required": true,
9434
+ "variadic": false
9435
+ }],
8618
9436
  "options": [
8619
9437
  {
8620
- "flags": "--json",
8621
- "description": "Output as JSON",
8622
- "required": false,
8623
- "valueHint": null
9438
+ "flags": "--project <key>",
9439
+ "description": "Project key in projects.yaml (e.g. mind-your-now)",
9440
+ "required": true,
9441
+ "valueHint": "key"
8624
9442
  },
8625
9443
  {
8626
- "flags": "--all",
8627
- "description": "List workspaces across all registered projects",
9444
+ "flags": "--workspace <path>",
9445
+ "description": "Override the inferred workspace path",
9446
+ "required": true,
9447
+ "valueHint": "path"
9448
+ },
9449
+ {
9450
+ "flags": "--json",
9451
+ "description": "Emit JSON instead of human-readable output",
8628
9452
  "required": false,
8629
9453
  "valueHint": null
8630
- },
9454
+ }
9455
+ ],
9456
+ "aliases": [],
9457
+ "category": "Workspace"
9458
+ },
9459
+ {
9460
+ "id": "pan-workspace-deep-clean",
9461
+ "path": ["workspace", "deep-clean"],
9462
+ "display": "/pan workspace deep-clean",
9463
+ "description": "Interactive: git clean -fd against a workspace (preserves protected paths)",
9464
+ "args": [{
9465
+ "name": "issueId",
9466
+ "required": true,
9467
+ "variadic": false
9468
+ }],
9469
+ "options": [{
9470
+ "flags": "--yes",
9471
+ "description": "Skip confirmation prompt (still requires a TTY)",
9472
+ "required": false,
9473
+ "valueHint": null
9474
+ }],
9475
+ "aliases": [],
9476
+ "category": "Workspace"
9477
+ },
9478
+ {
9479
+ "id": "pan-workspace-rebuild",
9480
+ "path": ["workspace", "rebuild"],
9481
+ "display": "/pan workspace rebuild",
9482
+ "description": "Tear down, re-render, and restart a single workspace Docker stack",
9483
+ "args": [{
9484
+ "name": "issueId",
9485
+ "required": true,
9486
+ "variadic": false
9487
+ }],
9488
+ "options": [],
9489
+ "aliases": [],
9490
+ "category": "Workspace"
9491
+ },
9492
+ {
9493
+ "id": "pan-workspace-reap",
9494
+ "path": ["workspace", "reap"],
9495
+ "display": "/pan workspace reap",
9496
+ "description": "List or remove orphaned unhealthy workspace Docker stacks and orphaned workspace networks",
9497
+ "args": [],
9498
+ "options": [
8631
9499
  {
8632
- "flags": "--kind <kind>",
8633
- "description": "Filter by workspace kind (main|issue|scratch), reading through the resolver",
9500
+ "flags": "--days <days>",
9501
+ "description": "Minimum age in days",
8634
9502
  "required": true,
8635
- "valueHint": "kind"
9503
+ "valueHint": "days"
8636
9504
  },
8637
9505
  {
8638
- "flags": "--archived",
8639
- "description": "Include archived workspaces (only applies with --kind)",
9506
+ "flags": "--apply",
9507
+ "description": "Run docker compose down -v --remove-orphans for stack candidates and remove orphaned workspace networks",
8640
9508
  "required": false,
8641
9509
  "valueHint": null
8642
9510
  },
8643
9511
  {
8644
- "flags": "--stale",
8645
- "description": "Show reclaim candidates: merged branches still on disk, with sizes",
9512
+ "flags": "--yes",
9513
+ "description": "Skip confirmation when using --apply",
8646
9514
  "required": false,
8647
9515
  "valueHint": null
8648
9516
  }
@@ -8651,345 +9519,515 @@ const COMPOSER_COMMAND_MANIFEST = [
8651
9519
  "category": "Workspace"
8652
9520
  },
8653
9521
  {
8654
- "id": "pan-workspace-destroy",
8655
- "path": ["workspace", "destroy"],
8656
- "display": "/pan workspace destroy",
8657
- "description": "Destroy workspace (all shapes by default: base, strike, and slot worktrees)",
9522
+ "id": "pan-workspace-update",
9523
+ "path": ["workspace", "update"],
9524
+ "display": "/pan workspace update",
9525
+ "description": "Update skills/agents/rules in an existing workspace",
9526
+ "args": [{
9527
+ "name": "issueId",
9528
+ "required": true,
9529
+ "variadic": false
9530
+ }],
9531
+ "options": [{
9532
+ "flags": "--force",
9533
+ "description": "Overwrite user-modified files",
9534
+ "required": false,
9535
+ "valueHint": null
9536
+ }],
9537
+ "aliases": [],
9538
+ "category": "Workspace"
9539
+ },
9540
+ {
9541
+ "id": "pan-workspace-use-config",
9542
+ "path": ["workspace", "use-config"],
9543
+ "display": "/pan workspace use-config",
9544
+ "description": "Copy installed Overdeck config into workspace (makes it user settings)",
9545
+ "args": [{
9546
+ "name": "issueId",
9547
+ "required": true,
9548
+ "variadic": false
9549
+ }],
9550
+ "options": [{
9551
+ "flags": "--project <path>",
9552
+ "description": "Explicit project path (overrides registry)",
9553
+ "required": true,
9554
+ "valueHint": "path"
9555
+ }],
9556
+ "aliases": [],
9557
+ "category": "Workspace"
9558
+ },
9559
+ {
9560
+ "id": "pan-workspace-add-repo",
9561
+ "path": ["workspace", "add-repo"],
9562
+ "display": "/pan workspace add-repo",
9563
+ "description": "Add configured repositories or register a new repository in a polyrepo workspace",
8658
9564
  "args": [{
8659
- "name": "issueId",
9565
+ "name": "workspaceId",
8660
9566
  "required": true,
8661
9567
  "variadic": false
9568
+ }, {
9569
+ "name": "repoNames",
9570
+ "required": false,
9571
+ "variadic": true
8662
9572
  }],
8663
9573
  "options": [
8664
9574
  {
8665
- "flags": "--force",
8666
- "description": "Force removal even with uncommitted changes",
9575
+ "flags": "--dry-run",
9576
+ "description": "Show what would be added",
8667
9577
  "required": false,
8668
9578
  "valueHint": null
8669
9579
  },
8670
9580
  {
8671
- "flags": "--project <path>",
8672
- "description": "Explicit project path (overrides registry)",
9581
+ "flags": "--group <groupName>",
9582
+ "description": "Add all repos from a named group (from groups_file)",
8673
9583
  "required": true,
8674
- "valueHint": "path"
9584
+ "valueHint": "groupName"
8675
9585
  },
8676
9586
  {
8677
- "flags": "--shape <shape>",
8678
- "description": "Limit to one shape: base|strike|slot|all (default: all)",
9587
+ "flags": "--new <gitUrl>",
9588
+ "description": "Register a repository that was created during this issue",
8679
9589
  "required": true,
8680
- "valueHint": "shape"
9590
+ "valueHint": "gitUrl"
8681
9591
  },
8682
9592
  {
8683
- "flags": "--purge-memory",
8684
- "description": "Also permanently delete the workspace's memory home (irreversible)",
8685
- "required": false,
8686
- "valueHint": null
9593
+ "flags": "--project <key>",
9594
+ "description": "Explicit project key from projects.yaml (overrides registry)",
9595
+ "required": true,
9596
+ "valueHint": "key"
8687
9597
  }
8688
9598
  ],
8689
9599
  "aliases": [],
8690
9600
  "category": "Workspace"
8691
9601
  },
8692
9602
  {
8693
- "id": "pan-workspace-new",
8694
- "path": ["workspace", "new"],
8695
- "display": "/pan workspace new",
8696
- "description": "Create a scratch workspace (shared dir by default; --isolated for a git worktree)",
9603
+ "id": "pan-vault",
9604
+ "path": ["vault"],
9605
+ "display": "/pan vault",
9606
+ "description": "Session Vault: encrypted off-machine storage and cross-machine resume for agent conversations",
9607
+ "args": [],
9608
+ "options": [],
9609
+ "aliases": [],
9610
+ "category": "CLI"
9611
+ },
9612
+ {
9613
+ "id": "pan-vault-setup",
9614
+ "path": ["vault", "setup"],
9615
+ "display": "/pan vault setup",
9616
+ "description": "Enable the vault against your own git remote and print the recovery phrase once",
8697
9617
  "args": [{
8698
- "name": "name",
9618
+ "name": "git-url",
8699
9619
  "required": true,
8700
9620
  "variadic": false
8701
9621
  }],
8702
9622
  "options": [
8703
9623
  {
8704
- "flags": "--project <key>",
8705
- "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
8706
- "required": true,
8707
- "valueHint": "key"
8708
- },
8709
- {
8710
- "flags": "--isolated",
8711
- "description": "Create an isolated git worktree instead of sharing the project directory",
9624
+ "flags": "--hooks",
9625
+ "description": "Also register the Claude Code Stop hook that saves after each turn",
8712
9626
  "required": false,
8713
9627
  "valueHint": null
8714
9628
  },
8715
9629
  {
8716
- "flags": "--parent-branch <branch>",
8717
- "description": "Parent branch for the isolated worktree (default: inferred from the project's current branch)",
9630
+ "flags": "--passphrase-file <path>",
9631
+ "description": "Also enable passphrase unlock with the passphrase in this file",
8718
9632
  "required": true,
8719
- "valueHint": "branch"
9633
+ "valueHint": "path"
8720
9634
  },
8721
9635
  {
8722
- "flags": "--target-path <dir>",
8723
- "description": "Target an existing directory as the workspace path (rejects --isolated)",
8724
- "required": true,
8725
- "valueHint": "dir"
9636
+ "flags": "--generate-passphrase",
9637
+ "description": "Also enable passphrase unlock with a generated 6-word passphrase, printed once",
9638
+ "required": false,
9639
+ "valueHint": null
8726
9640
  },
8727
9641
  {
8728
- "flags": "--dry-run",
8729
- "description": "Print the resolved intent as JSON and create nothing",
9642
+ "flags": "--no-passphrase",
9643
+ "description": "Do not offer passphrase unlock",
8730
9644
  "required": false,
8731
9645
  "valueHint": null
8732
9646
  }
8733
9647
  ],
8734
9648
  "aliases": [],
8735
- "category": "Workspace"
9649
+ "category": "CLI"
8736
9650
  },
8737
9651
  {
8738
- "id": "pan-workspace-main",
8739
- "path": ["workspace", "main"],
8740
- "display": "/pan workspace main",
8741
- "description": "Resolve or create the project's singleton main workspace",
8742
- "args": [],
9652
+ "id": "pan-vault-join",
9653
+ "path": ["vault", "join"],
9654
+ "display": "/pan vault join",
9655
+ "description": "Join an existing vault from another machine with the vault passphrase or the recovery phrase",
9656
+ "args": [{
9657
+ "name": "git-url",
9658
+ "required": true,
9659
+ "variadic": false
9660
+ }],
8743
9661
  "options": [{
8744
- "flags": "--project <key>",
8745
- "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
9662
+ "flags": "--phrase-file <path>",
9663
+ "description": "Read the 24-word recovery phrase from a file instead of prompting",
8746
9664
  "required": true,
8747
- "valueHint": "key"
9665
+ "valueHint": "path"
9666
+ }, {
9667
+ "flags": "--passphrase-file <path>",
9668
+ "description": "Read the vault passphrase from a file instead of prompting",
9669
+ "required": true,
9670
+ "valueHint": "path"
8748
9671
  }],
8749
9672
  "aliases": [],
8750
- "category": "Workspace"
9673
+ "category": "CLI"
8751
9674
  },
8752
9675
  {
8753
- "id": "pan-workspace-get",
8754
- "path": ["workspace", "get"],
8755
- "display": "/pan workspace get",
8756
- "description": "Show a workspace row by id",
8757
- "args": [{
8758
- "name": "ws",
8759
- "required": true,
8760
- "variadic": false
8761
- }],
9676
+ "id": "pan-vault-passphrase",
9677
+ "path": ["vault", "passphrase"],
9678
+ "display": "/pan vault passphrase",
9679
+ "description": "Turn passphrase unlock for new machines on (set) or off (remove); the vault key stays the same",
9680
+ "args": [],
8762
9681
  "options": [],
8763
9682
  "aliases": [],
8764
- "category": "Workspace"
9683
+ "category": "CLI"
8765
9684
  },
8766
9685
  {
8767
- "id": "pan-workspace-activate",
8768
- "path": ["workspace", "activate"],
8769
- "display": "/pan workspace activate",
8770
- "description": "Touch a workspace's last-accessed time and print its layout hint",
8771
- "args": [{
8772
- "name": "ws",
9686
+ "id": "pan-vault-passphrase-set",
9687
+ "path": [
9688
+ "vault",
9689
+ "passphrase",
9690
+ "set"
9691
+ ],
9692
+ "display": "/pan vault passphrase set",
9693
+ "description": "Wrap the vault key under a passphrase so a new machine can join without the recovery phrase",
9694
+ "args": [],
9695
+ "options": [{
9696
+ "flags": "--passphrase-file <path>",
9697
+ "description": "Read the passphrase from a file instead of prompting",
8773
9698
  "required": true,
8774
- "variadic": false
9699
+ "valueHint": "path"
9700
+ }, {
9701
+ "flags": "--generate",
9702
+ "description": "Generate a 6-word passphrase and print it once",
9703
+ "required": false,
9704
+ "valueHint": null
8775
9705
  }],
8776
- "options": [],
8777
9706
  "aliases": [],
8778
- "category": "Workspace"
9707
+ "category": "CLI"
8779
9708
  },
8780
9709
  {
8781
- "id": "pan-workspace-archive",
8782
- "path": ["workspace", "archive"],
8783
- "display": "/pan workspace archive",
8784
- "description": "Archive a workspace (reversible; refuses kind=main)",
8785
- "args": [{
8786
- "name": "ws",
8787
- "required": true,
8788
- "variadic": false
8789
- }],
9710
+ "id": "pan-vault-passphrase-remove",
9711
+ "path": [
9712
+ "vault",
9713
+ "passphrase",
9714
+ "remove"
9715
+ ],
9716
+ "display": "/pan vault passphrase remove",
9717
+ "description": "Delete the passphrase unlock object; joining then needs the recovery phrase",
9718
+ "args": [],
8790
9719
  "options": [],
8791
9720
  "aliases": [],
8792
- "category": "Workspace"
9721
+ "category": "CLI"
8793
9722
  },
8794
9723
  {
8795
- "id": "pan-workspace-relocate",
8796
- "path": ["workspace", "relocate"],
8797
- "display": "/pan workspace relocate",
8798
- "description": "Point a workspace at a new path (refuses kind=issue; kind=main requires --force)",
8799
- "args": [{
8800
- "name": "ws",
8801
- "required": true,
8802
- "variadic": false
8803
- }],
9724
+ "id": "pan-vault-rotate-key",
9725
+ "path": ["vault", "rotate-key"],
9726
+ "display": "/pan vault rotate-key",
9727
+ "description": "Replace the vault key after losing a device: re-encrypt refs under a new key, keep old chunks readable, print a new recovery phrase",
9728
+ "args": [],
9729
+ "options": [
9730
+ {
9731
+ "flags": "--yes",
9732
+ "description": "Rotate without the confirmation prompt",
9733
+ "required": false,
9734
+ "valueHint": null
9735
+ },
9736
+ {
9737
+ "flags": "--passphrase-file <path>",
9738
+ "description": "Re-wrap passphrase unlock under the new key with the passphrase in this file",
9739
+ "required": true,
9740
+ "valueHint": "path"
9741
+ },
9742
+ {
9743
+ "flags": "--generate-passphrase",
9744
+ "description": "Re-wrap passphrase unlock under the new key with a generated 6-word passphrase, printed once",
9745
+ "required": false,
9746
+ "valueHint": null
9747
+ },
9748
+ {
9749
+ "flags": "--no-passphrase",
9750
+ "description": "Turn passphrase unlock off",
9751
+ "required": false,
9752
+ "valueHint": null
9753
+ }
9754
+ ],
9755
+ "aliases": [],
9756
+ "category": "CLI"
9757
+ },
9758
+ {
9759
+ "id": "pan-vault-status",
9760
+ "path": ["vault", "status"],
9761
+ "display": "/pan vault status",
9762
+ "description": "Show backend, this machine, owned records, last sync and the machine list",
9763
+ "args": [],
8804
9764
  "options": [{
8805
- "flags": "--path <dir>",
8806
- "description": "New path (must be an existing directory)",
8807
- "required": true,
8808
- "valueHint": "dir"
8809
- }, {
8810
- "flags": "--force",
8811
- "description": "Allow relocating the main workspace, diverging it from projects.yaml",
9765
+ "flags": "--json",
9766
+ "description": "Output in JSON format",
8812
9767
  "required": false,
8813
9768
  "valueHint": null
8814
9769
  }],
8815
9770
  "aliases": [],
8816
- "category": "Workspace"
9771
+ "category": "CLI"
8817
9772
  },
8818
9773
  {
8819
- "id": "pan-workspace-render-devcontainer",
8820
- "path": ["workspace", "render-devcontainer"],
8821
- "display": "/pan workspace render-devcontainer",
8822
- "description": "Re-render <workspace>/.devcontainer/ from the project compose template",
9774
+ "id": "pan-vault-save",
9775
+ "path": ["vault", "save"],
9776
+ "display": "/pan vault save",
9777
+ "description": "Settle one transcript (by session id or path) or many into the vault",
8823
9778
  "args": [{
8824
- "name": "featureName",
8825
- "required": true,
9779
+ "name": "session-id-or-path",
9780
+ "required": false,
8826
9781
  "variadic": false
8827
9782
  }],
8828
9783
  "options": [
8829
9784
  {
8830
- "flags": "--project <key>",
8831
- "description": "Project key in projects.yaml (e.g. mind-your-now)",
9785
+ "flags": "--all",
9786
+ "description": "Settle every discovered transcript",
9787
+ "required": false,
9788
+ "valueHint": null
9789
+ },
9790
+ {
9791
+ "flags": "--since <date>",
9792
+ "description": "With --all: only transcripts modified on or after this date",
8832
9793
  "required": true,
8833
- "valueHint": "key"
9794
+ "valueHint": "date"
8834
9795
  },
8835
9796
  {
8836
- "flags": "--workspace <path>",
8837
- "description": "Override the inferred workspace path",
9797
+ "flags": "--harness <harness>",
9798
+ "description": "With --all: only this harness (claude-code, codex, ...)",
8838
9799
  "required": true,
8839
- "valueHint": "path"
9800
+ "valueHint": "harness"
8840
9801
  },
8841
9802
  {
8842
- "flags": "--json",
8843
- "description": "Emit JSON instead of human-readable output",
9803
+ "flags": "--hook",
9804
+ "description": "Claude Code Stop-hook mode: read {session_id, transcript_path} JSON from stdin, print nothing, exit 0",
8844
9805
  "required": false,
8845
9806
  "valueHint": null
8846
9807
  }
8847
9808
  ],
8848
9809
  "aliases": [],
8849
- "category": "Workspace"
9810
+ "category": "CLI"
8850
9811
  },
8851
9812
  {
8852
- "id": "pan-workspace-deep-clean",
8853
- "path": ["workspace", "deep-clean"],
8854
- "display": "/pan workspace deep-clean",
8855
- "description": "Interactive: git clean -fd against a workspace (preserves protected paths)",
9813
+ "id": "pan-vault-sync",
9814
+ "path": ["vault", "sync"],
9815
+ "display": "/pan vault sync",
9816
+ "description": "Settle owned transcripts that grew, register this machine and refresh the list",
9817
+ "args": [],
9818
+ "options": [],
9819
+ "aliases": [],
9820
+ "category": "CLI"
9821
+ },
9822
+ {
9823
+ "id": "pan-vault-list",
9824
+ "path": ["vault", "list"],
9825
+ "display": "/pan vault list",
9826
+ "description": "List saved conversations from the local cache (never contacts the backend)",
9827
+ "args": [],
9828
+ "options": [{
9829
+ "flags": "--json",
9830
+ "description": "Output in JSON format",
9831
+ "required": false,
9832
+ "valueHint": null
9833
+ }],
9834
+ "aliases": [],
9835
+ "category": "CLI"
9836
+ },
9837
+ {
9838
+ "id": "pan-vault-show",
9839
+ "path": ["vault", "show"],
9840
+ "display": "/pan vault show",
9841
+ "description": "Print a saved conversation read-only with its versions",
8856
9842
  "args": [{
8857
- "name": "issueId",
9843
+ "name": "id",
8858
9844
  "required": true,
8859
9845
  "variadic": false
8860
9846
  }],
8861
9847
  "options": [{
8862
- "flags": "--yes",
8863
- "description": "Skip confirmation prompt (still requires a TTY)",
9848
+ "flags": "--json",
9849
+ "description": "Output in JSON format",
8864
9850
  "required": false,
8865
9851
  "valueHint": null
8866
9852
  }],
8867
9853
  "aliases": [],
8868
- "category": "Workspace"
9854
+ "category": "CLI"
8869
9855
  },
8870
9856
  {
8871
- "id": "pan-workspace-rebuild",
8872
- "path": ["workspace", "rebuild"],
8873
- "display": "/pan workspace rebuild",
8874
- "description": "Tear down, re-render, and restart a single workspace Docker stack",
9857
+ "id": "pan-vault-resume",
9858
+ "path": ["vault", "resume"],
9859
+ "display": "/pan vault resume",
9860
+ "description": "Continue a saved conversation here: <id> or <id>@<version>; adopts it and launches the harness",
8875
9861
  "args": [{
8876
- "name": "issueId",
9862
+ "name": "id",
8877
9863
  "required": true,
8878
9864
  "variadic": false
8879
9865
  }],
8880
- "options": [],
8881
- "aliases": [],
8882
- "category": "Workspace"
8883
- },
8884
- {
8885
- "id": "pan-workspace-reap",
8886
- "path": ["workspace", "reap"],
8887
- "display": "/pan workspace reap",
8888
- "description": "List or remove orphaned unhealthy workspace Docker stacks and orphaned workspace networks",
8889
- "args": [],
8890
9866
  "options": [
8891
9867
  {
8892
- "flags": "--days <days>",
8893
- "description": "Minimum age in days",
9868
+ "flags": "--cwd <dir>",
9869
+ "description": "Working directory to resume in (default: the saved cwd)",
8894
9870
  "required": true,
8895
- "valueHint": "days"
9871
+ "valueHint": "dir"
8896
9872
  },
8897
9873
  {
8898
- "flags": "--apply",
8899
- "description": "Run docker compose down -v --remove-orphans for stack candidates and remove orphaned workspace networks",
9874
+ "flags": "--no-launch",
9875
+ "description": "Print the launch command instead of running it",
8900
9876
  "required": false,
8901
9877
  "valueHint": null
8902
9878
  },
8903
9879
  {
8904
- "flags": "--yes",
8905
- "description": "Skip confirmation when using --apply",
9880
+ "flags": "--on-drift <choice>",
9881
+ "description": "When the cwd state differs from the saved state: continue | note | cancel",
9882
+ "required": true,
9883
+ "valueHint": "choice"
9884
+ },
9885
+ {
9886
+ "flags": "--no-code",
9887
+ "description": "Do not apply the saved code snapshot; only continue the conversation",
8906
9888
  "required": false,
8907
9889
  "valueHint": null
9890
+ },
9891
+ {
9892
+ "flags": "--worktree <dir>",
9893
+ "description": "Apply the code snapshot into a new git worktree at <dir> instead of the target checkout",
9894
+ "required": true,
9895
+ "valueHint": "dir"
8908
9896
  }
8909
9897
  ],
8910
9898
  "aliases": [],
8911
- "category": "Workspace"
9899
+ "category": "CLI"
8912
9900
  },
8913
9901
  {
8914
- "id": "pan-workspace-update",
8915
- "path": ["workspace", "update"],
8916
- "display": "/pan workspace update",
8917
- "description": "Update skills/agents/rules in an existing workspace",
9902
+ "id": "pan-vault-exclude",
9903
+ "path": ["vault", "exclude"],
9904
+ "display": "/pan vault exclude",
9905
+ "description": "Exclude conversations by cwd path, git origin or session id; an excluded saved record becomes a tombstone",
8918
9906
  "args": [{
8919
- "name": "issueId",
8920
- "required": true,
9907
+ "name": "path",
9908
+ "required": false,
8921
9909
  "variadic": false
8922
9910
  }],
8923
9911
  "options": [{
8924
- "flags": "--force",
8925
- "description": "Overwrite user-modified files",
8926
- "required": false,
8927
- "valueHint": null
9912
+ "flags": "--origin <url>",
9913
+ "description": "Exclude conversations whose git origin is this URL",
9914
+ "required": true,
9915
+ "valueHint": "url"
9916
+ }, {
9917
+ "flags": "--session <id>",
9918
+ "description": "Exclude one session by native session id or vault id",
9919
+ "required": true,
9920
+ "valueHint": "id"
8928
9921
  }],
8929
9922
  "aliases": [],
8930
- "category": "Workspace"
9923
+ "category": "CLI"
8931
9924
  },
8932
9925
  {
8933
- "id": "pan-workspace-use-config",
8934
- "path": ["workspace", "use-config"],
8935
- "display": "/pan workspace use-config",
8936
- "description": "Copy installed Overdeck config into workspace (makes it user settings)",
9926
+ "id": "pan-vault-include",
9927
+ "path": ["vault", "include"],
9928
+ "display": "/pan vault include",
9929
+ "description": "Remove an exclusion added with pan vault exclude",
8937
9930
  "args": [{
8938
- "name": "issueId",
8939
- "required": true,
9931
+ "name": "path",
9932
+ "required": false,
8940
9933
  "variadic": false
8941
9934
  }],
8942
9935
  "options": [{
8943
- "flags": "--project <path>",
8944
- "description": "Explicit project path (overrides registry)",
9936
+ "flags": "--origin <url>",
9937
+ "description": "Include conversations whose git origin is this URL again",
8945
9938
  "required": true,
8946
- "valueHint": "path"
9939
+ "valueHint": "url"
9940
+ }, {
9941
+ "flags": "--session <id>",
9942
+ "description": "Include one session again",
9943
+ "required": true,
9944
+ "valueHint": "id"
8947
9945
  }],
8948
9946
  "aliases": [],
8949
- "category": "Workspace"
9947
+ "category": "CLI"
8950
9948
  },
8951
9949
  {
8952
- "id": "pan-workspace-add-repo",
8953
- "path": ["workspace", "add-repo"],
8954
- "display": "/pan workspace add-repo",
8955
- "description": "Add configured repositories or register a new repository in a polyrepo workspace",
9950
+ "id": "pan-vault-allow-secret",
9951
+ "path": ["vault", "allow-secret"],
9952
+ "display": "/pan vault allow-secret",
9953
+ "description": "Allow one blocked transcript line, or the blocked code lines of one file, for that record only",
8956
9954
  "args": [{
8957
- "name": "workspaceId",
9955
+ "name": "id-or-path",
8958
9956
  "required": true,
8959
9957
  "variadic": false
8960
9958
  }, {
8961
- "name": "repoNames",
9959
+ "name": "line",
8962
9960
  "required": false,
8963
- "variadic": true
9961
+ "variadic": false
9962
+ }],
9963
+ "options": [{
9964
+ "flags": "--file <path>",
9965
+ "description": "Allow the blocked lines of this file in the code snapshot (path relative to the repository root)",
9966
+ "required": true,
9967
+ "valueHint": "path"
8964
9968
  }],
9969
+ "aliases": [],
9970
+ "category": "CLI"
9971
+ },
9972
+ {
9973
+ "id": "pan-vault-evict",
9974
+ "path": ["vault", "evict"],
9975
+ "display": "/pan vault evict",
9976
+ "description": "Review the pending-deletion batch (default) or act on it; nothing is deleted without --confirm",
9977
+ "args": [],
8965
9978
  "options": [
8966
9979
  {
8967
- "flags": "--dry-run",
8968
- "description": "Show what would be added",
9980
+ "flags": "--review",
9981
+ "description": "Scan and print the batch with its fingerprint (default)",
8969
9982
  "required": false,
8970
9983
  "valueHint": null
8971
9984
  },
8972
9985
  {
8973
- "flags": "--group <groupName>",
8974
- "description": "Add all repos from a named group (from groups_file)",
9986
+ "flags": "--confirm <fingerprint>",
9987
+ "description": "Delete the reviewed files if the batch still matches this fingerprint",
8975
9988
  "required": true,
8976
- "valueHint": "groupName"
9989
+ "valueHint": "fingerprint"
8977
9990
  },
8978
9991
  {
8979
- "flags": "--new <gitUrl>",
8980
- "description": "Register a repository that was created during this issue",
9992
+ "flags": "--decline <vaultId>",
9993
+ "description": "Remove an entry from the batch and do not offer it again",
8981
9994
  "required": true,
8982
- "valueHint": "gitUrl"
9995
+ "valueHint": "vaultId"
8983
9996
  },
8984
9997
  {
8985
- "flags": "--project <key>",
8986
- "description": "Explicit project key from projects.yaml (overrides registry)",
9998
+ "flags": "--reoffer <vaultId>",
9999
+ "description": "Allow a declined entry to be offered again",
8987
10000
  "required": true,
8988
- "valueHint": "key"
10001
+ "valueHint": "vaultId"
10002
+ },
10003
+ {
10004
+ "flags": "--clear",
10005
+ "description": "Empty the batch without deleting or declining anything",
10006
+ "required": false,
10007
+ "valueHint": null
8989
10008
  }
8990
10009
  ],
8991
10010
  "aliases": [],
8992
- "category": "Workspace"
10011
+ "category": "CLI"
10012
+ },
10013
+ {
10014
+ "id": "pan-vault-restore",
10015
+ "path": ["vault", "restore"],
10016
+ "display": "/pan vault restore",
10017
+ "description": "Rebuild an evicted transcript byte for byte at its original path",
10018
+ "args": [{
10019
+ "name": "id",
10020
+ "required": true,
10021
+ "variadic": false
10022
+ }],
10023
+ "options": [{
10024
+ "flags": "--to <path>",
10025
+ "description": "Write the rebuilt file here instead of the recorded path",
10026
+ "required": true,
10027
+ "valueHint": "path"
10028
+ }],
10029
+ "aliases": [],
10030
+ "category": "CLI"
8993
10031
  },
8994
10032
  {
8995
10033
  "id": "pan-test",
@@ -10266,6 +11304,124 @@ const COMPOSER_COMMAND_MANIFEST = [
10266
11304
  "aliases": [],
10267
11305
  "category": "Flywheel"
10268
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
+ },
10269
11425
  {
10270
11426
  "id": "pan-parked",
10271
11427
  "path": ["parked"],
@@ -11140,29 +12296,6 @@ const COMPOSER_COMMAND_MANIFEST = [
11140
12296
  "aliases": [],
11141
12297
  "category": "Admin"
11142
12298
  },
11143
- {
11144
- "id": "pan-admin-tldr",
11145
- "path": ["admin", "tldr"],
11146
- "display": "/pan admin tldr",
11147
- "description": "TLDR daemon: status, start, stop, warm",
11148
- "args": [{
11149
- "name": "action",
11150
- "required": false,
11151
- "variadic": false
11152
- }, {
11153
- "name": "workspace",
11154
- "required": false,
11155
- "variadic": false
11156
- }],
11157
- "options": [{
11158
- "flags": "--json",
11159
- "description": "Output as JSON",
11160
- "required": false,
11161
- "valueHint": null
11162
- }],
11163
- "aliases": [],
11164
- "category": "Admin"
11165
- },
11166
12299
  {
11167
12300
  "id": "pan-admin-fpp",
11168
12301
  "path": ["admin", "fpp"],
@@ -12133,7 +13266,7 @@ const COMPOSER_COMMAND_MANIFEST = [
12133
13266
  "id": "pan-spawn",
12134
13267
  "path": ["spawn"],
12135
13268
  "display": "/pan spawn",
12136
- "description": "Create a worker pane for one xBRIEF item in the issue workspace",
13269
+ "description": "Create a worker pane for one xBRIEF item in its own item worktree",
12137
13270
  "args": [],
12138
13271
  "options": [
12139
13272
  {
@@ -12159,6 +13292,18 @@ const COMPOSER_COMMAND_MANIFEST = [
12159
13292
  "description": "Coding-agent harness (default: claude-code)",
12160
13293
  "required": true,
12161
13294
  "valueHint": "harness"
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
+ },
13302
+ {
13303
+ "flags": "--shared",
13304
+ "description": "Run the worker in the issue workspace instead of an item worktree (foreman/operator only; serial use)",
13305
+ "required": false,
13306
+ "valueHint": null
12162
13307
  }
12163
13308
  ],
12164
13309
  "aliases": [],
@@ -12211,6 +13356,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12211
13356
  "required": true,
12212
13357
  "valueHint": "harness"
12213
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
+ },
12214
13365
  {
12215
13366
  "flags": "--read-only",
12216
13367
  "description": "Run in the issue workspace with git writes blocked",
@@ -12545,6 +13696,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12545
13696
  "required": false,
12546
13697
  "valueHint": null
12547
13698
  },
13699
+ {
13700
+ "flags": "--force",
13701
+ "description": "Launch even while the host is CPU-saturated",
13702
+ "required": false,
13703
+ "valueHint": null
13704
+ },
12548
13705
  {
12549
13706
  "flags": "--no-wait",
12550
13707
  "description": "Return without waiting for the lane to start",
@@ -13182,26 +14339,17 @@ const COMPOSER_COMMAND_MANIFEST = [
13182
14339
  "display": "/pan status",
13183
14340
  "description": "Show running agents",
13184
14341
  "args": [],
13185
- "options": [
13186
- {
13187
- "flags": "--json",
13188
- "description": "Output as JSON",
13189
- "required": false,
13190
- "valueHint": null
13191
- },
13192
- {
13193
- "flags": "--tldr",
13194
- "description": "Show TLDR index health across all workspaces",
13195
- "required": false,
13196
- "valueHint": null
13197
- },
13198
- {
13199
- "flags": "--context",
13200
- "description": "Show context window usage % for each agent",
13201
- "required": false,
13202
- "valueHint": null
13203
- }
13204
- ],
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
+ }],
13205
14353
  "aliases": [],
13206
14354
  "category": "Core"
13207
14355
  },
@@ -13365,7 +14513,7 @@ const COMPOSER_COMMAND_MANIFEST = [
13365
14513
  "id": "pan-restart",
13366
14514
  "path": ["restart"],
13367
14515
  "display": "/pan restart",
13368
- "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)",
13369
14517
  "args": [],
13370
14518
  "options": [
13371
14519
  {
@@ -14070,6 +15218,26 @@ const COMPOSER_COMMAND_MANIFEST = [
14070
15218
  "aliases": [],
14071
15219
  "category": "Data"
14072
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
+ },
14073
15241
  {
14074
15242
  "id": "pan-cost-budget",
14075
15243
  "path": ["cost", "budget"],
@@ -14475,6 +15643,10 @@ const DirectoryEntry = effect.Schema.Struct({
14475
15643
  harness: effect.Schema.String,
14476
15644
  /** `unknown` when not known. */
14477
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),
14478
15650
  state: DirectoryEntryState,
14479
15651
  startedAt: effect.Schema.NullOr(effect.Schema.String),
14480
15652
  lastActivityAt: effect.Schema.NullOr(effect.Schema.String),
@@ -14627,6 +15799,47 @@ function laneActivityOf(row, now) {
14627
15799
  return "stopped";
14628
15800
  }
14629
15801
  //#endregion
15802
+ //#region src/environment.ts
15803
+ /** Wire protocol version a client and server must agree on. */
15804
+ const ENVIRONMENT_PROTOCOL_VERSION = 1;
15805
+ const EnvironmentId = effect.Schema.String.pipe(effect.Schema.brand("EnvironmentId"));
15806
+ const EnvironmentCapabilities = effect.Schema.Struct({
15807
+ /** `POST /api/pairing/*` is available. */
15808
+ pairing: effect.Schema.Boolean,
15809
+ /** `GET/DELETE /api/devices` is available. */
15810
+ deviceSessions: effect.Schema.Boolean,
15811
+ /** `/ws/*` upgrades require a credential (PAN-1166). */
15812
+ terminalAuth: effect.Schema.Boolean
15813
+ });
15814
+ const EnvironmentDescriptor = effect.Schema.Struct({
15815
+ descriptorVersion: effect.Schema.Literal(1),
15816
+ environmentId: EnvironmentId,
15817
+ label: effect.Schema.String,
15818
+ platform: effect.Schema.Struct({
15819
+ os: effect.Schema.String,
15820
+ arch: effect.Schema.String
15821
+ }),
15822
+ /** Exact package version of the serving Overdeck. */
15823
+ serverVersion: effect.Schema.String,
15824
+ /** The server's `ENVIRONMENT_PROTOCOL_VERSION`. */
15825
+ protocolVersion: effect.Schema.Number,
15826
+ capabilities: EnvironmentCapabilities
15827
+ });
15828
+ /** A server-local id qualified by the environment that owns it. */
15829
+ const ScopedRef = (localId) => effect.Schema.Struct({
15830
+ environmentId: EnvironmentId,
15831
+ localId
15832
+ });
15833
+ const ScopedProjectRef = ScopedRef(effect.Schema.String);
15834
+ const ScopedIssueRef = ScopedRef(effect.Schema.String);
15835
+ const ScopedAgentRef = ScopedRef(effect.Schema.String);
15836
+ const ScopedConversationRef = ScopedRef(effect.Schema.String);
15837
+ const ScopedTerminalRef = ScopedRef(effect.Schema.String);
15838
+ /** True only when the server speaks exactly the client's protocol version. */
15839
+ function isProtocolCompatible(descriptor, clientProtocolVersion) {
15840
+ return descriptor.protocolVersion === clientProtocolVersion;
15841
+ }
15842
+ //#endregion
14630
15843
  exports.ACP_BEHAVIOR = ACP_BEHAVIOR;
14631
15844
  exports.AGENT_ROLES = AGENT_ROLES;
14632
15845
  exports.Activity = Activity;
@@ -14750,6 +15963,7 @@ exports.DeployStalenessSnapshot = DeployStalenessSnapshot;
14750
15963
  exports.DerivedBranchState = DerivedBranchState;
14751
15964
  exports.DerivedIssueState = DerivedIssueState;
14752
15965
  exports.DerivedPrState = DerivedPrState;
15966
+ exports.DerivedWorkStart = DerivedWorkStart;
14753
15967
  exports.DirectoryEntry = DirectoryEntry;
14754
15968
  exports.DirectoryEntryKind = DirectoryEntryKind;
14755
15969
  exports.DirectoryEntryLocation = DirectoryEntryLocation;
@@ -14764,6 +15978,7 @@ exports.DiscoveredSessionSnapshot = DiscoveredSessionSnapshot;
14764
15978
  exports.DomainEvent = DomainEvent;
14765
15979
  exports.EDITORS = EDITORS;
14766
15980
  exports.EFFORT_LEVELS = EFFORT_LEVELS;
15981
+ exports.ENVIRONMENT_PROTOCOL_VERSION = ENVIRONMENT_PROTOCOL_VERSION;
14767
15982
  exports.EditorIdSchema = EditorIdSchema;
14768
15983
  exports.EffortLevelSchema = EffortLevelSchema;
14769
15984
  exports.EmbedProgressEvent = EmbedProgressEvent;
@@ -14774,6 +15989,9 @@ exports.EnrichProgressEvent = EnrichProgressEvent;
14774
15989
  exports.EnrichProgressSnapshot = EnrichProgressSnapshot;
14775
15990
  exports.EnrichSessionsRpc = EnrichSessionsRpc;
14776
15991
  exports.EnrichStatsSnapshot = EnrichStatsSnapshot;
15992
+ exports.EnvironmentCapabilities = EnvironmentCapabilities;
15993
+ exports.EnvironmentDescriptor = EnvironmentDescriptor;
15994
+ exports.EnvironmentId = EnvironmentId;
14777
15995
  exports.ExtractionProviderConfig = ExtractionProviderConfig;
14778
15996
  exports.ExtractionProviderTarget = ExtractionProviderTarget;
14779
15997
  exports.FeatureNode = FeatureNode;
@@ -14984,6 +16202,12 @@ exports.ScanProgressEvent = ScanProgressEvent;
14984
16202
  exports.ScanProgressSnapshot = ScanProgressSnapshot;
14985
16203
  exports.ScanResult = ScanResult;
14986
16204
  exports.ScanStartedEvent = ScanStartedEvent;
16205
+ exports.ScopedAgentRef = ScopedAgentRef;
16206
+ exports.ScopedConversationRef = ScopedConversationRef;
16207
+ exports.ScopedIssueRef = ScopedIssueRef;
16208
+ exports.ScopedProjectRef = ScopedProjectRef;
16209
+ exports.ScopedRef = ScopedRef;
16210
+ exports.ScopedTerminalRef = ScopedTerminalRef;
14987
16211
  exports.SearchConversationsRpc = SearchConversationsRpc;
14988
16212
  exports.SendTerminalInputRpc = SendTerminalInputRpc;
14989
16213
  exports.SequenceNumber = SequenceNumber;
@@ -15036,6 +16260,7 @@ exports.TickMarker = TickMarker;
15036
16260
  exports.TickMarkerPhase = TickMarkerPhase;
15037
16261
  exports.TurnDiffFileChange = TurnDiffFileChange;
15038
16262
  exports.TurnDiffSummary = TurnDiffSummary;
16263
+ exports.TurnEndAssessment = TurnEndAssessment;
15039
16264
  exports.WIRED_HOOK_INVENTORY = WIRED_HOOK_INVENTORY;
15040
16265
  exports.WIRED_HOOK_NAMES = WIRED_HOOK_NAMES;
15041
16266
  exports.WS_METHODS = WS_METHODS;
@@ -15081,6 +16306,7 @@ exports.isConfiguredPullRequestRepo = isConfiguredPullRequestRepo;
15081
16306
  exports.isEffortLevel = isEffortLevel;
15082
16307
  exports.isIssueAttention = isIssueAttention;
15083
16308
  exports.isIssueState = isIssueState;
16309
+ exports.isProtocolCompatible = isProtocolCompatible;
15084
16310
  exports.isSingletonConversation = isSingletonConversation;
15085
16311
  exports.isTerminalBackendName = isTerminalBackendName;
15086
16312
  exports.isTerminalTurnDiffSummaryStatus = isTerminalTurnDiffSummaryStatus;