@overdeck/contracts 0.63.0 → 0.64.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 */
@@ -4056,7 +4079,8 @@ function applyEvent(state, event) {
4056
4079
  pendingAskUserQuestion: event.payload.pendingAskUserQuestion,
4057
4080
  pendingProposedPlan: event.payload.pendingProposedPlan,
4058
4081
  resolution: event.payload.resolution,
4059
- resolutionCount: event.payload.resolutionCount
4082
+ resolutionCount: event.payload.resolutionCount,
4083
+ turnEndAssessment: event.payload.turnEndAssessment
4060
4084
  }
4061
4085
  }
4062
4086
  };
@@ -4194,6 +4218,7 @@ function applyEvent(state, event) {
4194
4218
  delete base["pendingInputKinds"];
4195
4219
  delete base["pendingAskUserQuestion"];
4196
4220
  delete base["pendingProposedPlan"];
4221
+ delete base["turnEndAssessment"];
4197
4222
  }
4198
4223
  return base;
4199
4224
  })();
@@ -6911,30 +6936,261 @@ const COMPOSER_COMMAND_MANIFEST = [
6911
6936
  "id": "pan-skills-set",
6912
6937
  "path": ["skills", "set"],
6913
6938
  "display": "/pan skills set",
6914
- "description": "Set a skill on, off, or inherit (global unless --project/--issue)",
6939
+ "description": "Set a skill (<skill> <state>) or a pack (--pack <id> <state>) on, off, or inherit",
6940
+ "args": [{
6941
+ "name": "args",
6942
+ "required": true,
6943
+ "variadic": true
6944
+ }],
6945
+ "options": [
6946
+ {
6947
+ "flags": "--project <key>",
6948
+ "description": "Project override",
6949
+ "required": true,
6950
+ "valueHint": "key"
6951
+ },
6952
+ {
6953
+ "flags": "--issue <id>",
6954
+ "description": "Issue override",
6955
+ "required": true,
6956
+ "valueHint": "id"
6957
+ },
6958
+ {
6959
+ "flags": "--pack <id>",
6960
+ "description": "Set a whole skill pack instead of one skill",
6961
+ "required": true,
6962
+ "valueHint": "id"
6963
+ }
6964
+ ],
6965
+ "aliases": [],
6966
+ "category": "Core"
6967
+ },
6968
+ {
6969
+ "id": "pan-skills-pack",
6970
+ "path": ["skills", "pack"],
6971
+ "display": "/pan skills pack",
6972
+ "description": "Register, update, and cache external skill packs pinned to a commit",
6973
+ "args": [],
6974
+ "options": [],
6975
+ "aliases": [],
6976
+ "category": "Core"
6977
+ },
6978
+ {
6979
+ "id": "pan-skills-pack-add",
6980
+ "path": [
6981
+ "skills",
6982
+ "pack",
6983
+ "add"
6984
+ ],
6985
+ "display": "/pan skills pack add",
6986
+ "description": "Register a git skill pack at the commit a ref resolves to (enables nothing)",
6915
6987
  "args": [{
6916
- "name": "skill",
6988
+ "name": "id",
6917
6989
  "required": true,
6918
6990
  "variadic": false
6919
6991
  }, {
6920
- "name": "state",
6992
+ "name": "url",
6993
+ "required": true,
6994
+ "variadic": false
6995
+ }],
6996
+ "options": [
6997
+ {
6998
+ "flags": "--ref <ref>",
6999
+ "description": "Tag or branch to pin",
7000
+ "required": true,
7001
+ "valueHint": "ref"
7002
+ },
7003
+ {
7004
+ "flags": "--adapter <adapter>",
7005
+ "description": "plain or claude-plugin",
7006
+ "required": true,
7007
+ "valueHint": "adapter"
7008
+ },
7009
+ {
7010
+ "flags": "--yes",
7011
+ "description": "Trust the resolved commit without asking",
7012
+ "required": false,
7013
+ "valueHint": null
7014
+ }
7015
+ ],
7016
+ "aliases": [],
7017
+ "category": "Core"
7018
+ },
7019
+ {
7020
+ "id": "pan-skills-pack-update",
7021
+ "path": [
7022
+ "skills",
7023
+ "pack",
7024
+ "update"
7025
+ ],
7026
+ "display": "/pan skills pack update",
7027
+ "description": "Move a pack to the commit its ref (or --ref) now resolves to",
7028
+ "args": [{
7029
+ "name": "id",
6921
7030
  "required": true,
6922
7031
  "variadic": false
6923
7032
  }],
6924
7033
  "options": [{
6925
- "flags": "--project <key>",
6926
- "description": "Project override",
7034
+ "flags": "--ref <ref>",
7035
+ "description": "Switch to a different tag or branch",
6927
7036
  "required": true,
6928
- "valueHint": "key"
7037
+ "valueHint": "ref"
6929
7038
  }, {
6930
- "flags": "--issue <id>",
6931
- "description": "Issue override",
7039
+ "flags": "--yes",
7040
+ "description": "Trust the new commit without asking",
7041
+ "required": false,
7042
+ "valueHint": null
7043
+ }],
7044
+ "aliases": [],
7045
+ "category": "Core"
7046
+ },
7047
+ {
7048
+ "id": "pan-skills-pack-list",
7049
+ "path": [
7050
+ "skills",
7051
+ "pack",
7052
+ "list"
7053
+ ],
7054
+ "display": "/pan skills pack list",
7055
+ "description": "List registered skill packs",
7056
+ "args": [],
7057
+ "options": [{
7058
+ "flags": "--json",
7059
+ "description": "Output as JSON",
7060
+ "required": false,
7061
+ "valueHint": null
7062
+ }, {
7063
+ "flags": "--offline",
7064
+ "description": "Skip the update check (no network)",
7065
+ "required": false,
7066
+ "valueHint": null
7067
+ }],
7068
+ "aliases": [],
7069
+ "category": "Core"
7070
+ },
7071
+ {
7072
+ "id": "pan-skills-pack-remove",
7073
+ "path": [
7074
+ "skills",
7075
+ "pack",
7076
+ "remove"
7077
+ ],
7078
+ "display": "/pan skills pack remove",
7079
+ "description": "Unregister a pack, clear its global toggles, and delete its cache",
7080
+ "args": [{
7081
+ "name": "id",
6932
7082
  "required": true,
6933
- "valueHint": "id"
7083
+ "variadic": false
7084
+ }],
7085
+ "options": [],
7086
+ "aliases": [],
7087
+ "category": "Core"
7088
+ },
7089
+ {
7090
+ "id": "pan-skills-pack-sync",
7091
+ "path": [
7092
+ "skills",
7093
+ "pack",
7094
+ "sync"
7095
+ ],
7096
+ "display": "/pan skills pack sync",
7097
+ "description": "Re-fetch packs and extract their trusted commits (all packs when omitted)",
7098
+ "args": [{
7099
+ "name": "id",
7100
+ "required": false,
7101
+ "variadic": false
7102
+ }],
7103
+ "options": [],
7104
+ "aliases": [],
7105
+ "category": "Core"
7106
+ },
7107
+ {
7108
+ "id": "pan-skills-pack-gc",
7109
+ "path": [
7110
+ "skills",
7111
+ "pack",
7112
+ "gc"
7113
+ ],
7114
+ "display": "/pan skills pack gc",
7115
+ "description": "Remove unused skill pack mounts and dangling launch links",
7116
+ "args": [],
7117
+ "options": [{
7118
+ "flags": "--max-age-days <n>",
7119
+ "description": "Keep unused mounts younger than this",
7120
+ "required": true,
7121
+ "valueHint": "n"
6934
7122
  }],
6935
7123
  "aliases": [],
6936
7124
  "category": "Core"
6937
7125
  },
7126
+ {
7127
+ "id": "pan-pair",
7128
+ "path": ["pair"],
7129
+ "display": "/pan pair",
7130
+ "description": "Print a one-time URL that pairs another device with this dashboard (see configuration/remote-access.mdx)",
7131
+ "args": [],
7132
+ "options": [
7133
+ {
7134
+ "flags": "--label <name>",
7135
+ "description": "Name to record for the pairing in the activity log",
7136
+ "required": true,
7137
+ "valueHint": "name"
7138
+ },
7139
+ {
7140
+ "flags": "--url <base>",
7141
+ "description": "Base URL the other device can reach (default: this dashboard's API URL)",
7142
+ "required": true,
7143
+ "valueHint": "base"
7144
+ },
7145
+ {
7146
+ "flags": "--json",
7147
+ "description": "Print { url, credential, expiresAt } as JSON",
7148
+ "required": false,
7149
+ "valueHint": null
7150
+ }
7151
+ ],
7152
+ "aliases": [],
7153
+ "category": "CLI"
7154
+ },
7155
+ {
7156
+ "id": "pan-devices",
7157
+ "path": ["devices"],
7158
+ "display": "/pan devices",
7159
+ "description": "List or revoke paired devices (see configuration/remote-access.mdx)",
7160
+ "args": [],
7161
+ "options": [],
7162
+ "aliases": [],
7163
+ "category": "CLI"
7164
+ },
7165
+ {
7166
+ "id": "pan-devices-list",
7167
+ "path": ["devices", "list"],
7168
+ "display": "/pan devices list",
7169
+ "description": "List paired devices with created, last-used and revoked times",
7170
+ "args": [],
7171
+ "options": [{
7172
+ "flags": "--json",
7173
+ "description": "Print the devices as JSON",
7174
+ "required": false,
7175
+ "valueHint": null
7176
+ }],
7177
+ "aliases": [],
7178
+ "category": "CLI"
7179
+ },
7180
+ {
7181
+ "id": "pan-devices-revoke",
7182
+ "path": ["devices", "revoke"],
7183
+ "display": "/pan devices revoke",
7184
+ "description": "Revoke a paired device and close its live connections",
7185
+ "args": [{
7186
+ "name": "id",
7187
+ "required": true,
7188
+ "variadic": false
7189
+ }],
7190
+ "options": [],
7191
+ "aliases": [],
7192
+ "category": "CLI"
7193
+ },
6938
7194
  {
6939
7195
  "id": "pan-issues",
6940
7196
  "path": ["issues"],
@@ -7249,6 +7505,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7249
7505
  "description": "Bypass the PRD-first gate for a genuinely trivial issue (loud; prefer writing the PRD)",
7250
7506
  "required": false,
7251
7507
  "valueHint": null
7508
+ },
7509
+ {
7510
+ "flags": "--critic",
7511
+ "description": "Require an independent different-family plan critique before promotion (automatic for architecture, substrate-improvement and security labels)",
7512
+ "required": false,
7513
+ "valueHint": null
7252
7514
  }
7253
7515
  ],
7254
7516
  "aliases": [],
@@ -7455,6 +7717,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7455
7717
  "required": true,
7456
7718
  "valueHint": "path"
7457
7719
  },
7720
+ {
7721
+ "flags": "--allow-primary",
7722
+ "description": "Operator only: allow --cwd to be a project's primary checkout (refused for agent sessions)",
7723
+ "required": false,
7724
+ "valueHint": null
7725
+ },
7458
7726
  {
7459
7727
  "flags": "--project <key>",
7460
7728
  "description": "Project (yaml key or display name) for the new conversation; defaults to inheriting the source conversation's project",
@@ -7504,6 +7772,12 @@ const COMPOSER_COMMAND_MANIFEST = [
7504
7772
  "required": true,
7505
7773
  "valueHint": "path"
7506
7774
  },
7775
+ {
7776
+ "flags": "--allow-primary",
7777
+ "description": "Operator only: allow --cwd to be a project's primary checkout (refused for agent sessions)",
7778
+ "required": false,
7779
+ "valueHint": null
7780
+ },
7507
7781
  {
7508
7782
  "flags": "--project <key>",
7509
7783
  "description": "Project (yaml key or display name) for the new conversation; defaults to inheriting the source conversation's project",
@@ -8334,6 +8608,11 @@ const COMPOSER_COMMAND_MANIFEST = [
8334
8608
  "description": "Print JSON",
8335
8609
  "required": false,
8336
8610
  "valueHint": null
8611
+ }, {
8612
+ "flags": "--steal",
8613
+ "description": "Claim even when a running agent holds this item or an overlapping one (foreman/operator override)",
8614
+ "required": false,
8615
+ "valueHint": null
8337
8616
  }],
8338
8617
  "aliases": [],
8339
8618
  "category": "Lifecycle"
@@ -8991,6 +9270,436 @@ const COMPOSER_COMMAND_MANIFEST = [
8991
9270
  "aliases": [],
8992
9271
  "category": "Workspace"
8993
9272
  },
9273
+ {
9274
+ "id": "pan-vault",
9275
+ "path": ["vault"],
9276
+ "display": "/pan vault",
9277
+ "description": "Session Vault: encrypted off-machine storage and cross-machine resume for agent conversations",
9278
+ "args": [],
9279
+ "options": [],
9280
+ "aliases": [],
9281
+ "category": "CLI"
9282
+ },
9283
+ {
9284
+ "id": "pan-vault-setup",
9285
+ "path": ["vault", "setup"],
9286
+ "display": "/pan vault setup",
9287
+ "description": "Enable the vault against your own git remote and print the recovery phrase once",
9288
+ "args": [{
9289
+ "name": "git-url",
9290
+ "required": true,
9291
+ "variadic": false
9292
+ }],
9293
+ "options": [
9294
+ {
9295
+ "flags": "--hooks",
9296
+ "description": "Also register the Claude Code Stop hook that saves after each turn",
9297
+ "required": false,
9298
+ "valueHint": null
9299
+ },
9300
+ {
9301
+ "flags": "--passphrase-file <path>",
9302
+ "description": "Also enable passphrase unlock with the passphrase in this file",
9303
+ "required": true,
9304
+ "valueHint": "path"
9305
+ },
9306
+ {
9307
+ "flags": "--generate-passphrase",
9308
+ "description": "Also enable passphrase unlock with a generated 6-word passphrase, printed once",
9309
+ "required": false,
9310
+ "valueHint": null
9311
+ },
9312
+ {
9313
+ "flags": "--no-passphrase",
9314
+ "description": "Do not offer passphrase unlock",
9315
+ "required": false,
9316
+ "valueHint": null
9317
+ }
9318
+ ],
9319
+ "aliases": [],
9320
+ "category": "CLI"
9321
+ },
9322
+ {
9323
+ "id": "pan-vault-join",
9324
+ "path": ["vault", "join"],
9325
+ "display": "/pan vault join",
9326
+ "description": "Join an existing vault from another machine with the vault passphrase or the recovery phrase",
9327
+ "args": [{
9328
+ "name": "git-url",
9329
+ "required": true,
9330
+ "variadic": false
9331
+ }],
9332
+ "options": [{
9333
+ "flags": "--phrase-file <path>",
9334
+ "description": "Read the 24-word recovery phrase from a file instead of prompting",
9335
+ "required": true,
9336
+ "valueHint": "path"
9337
+ }, {
9338
+ "flags": "--passphrase-file <path>",
9339
+ "description": "Read the vault passphrase from a file instead of prompting",
9340
+ "required": true,
9341
+ "valueHint": "path"
9342
+ }],
9343
+ "aliases": [],
9344
+ "category": "CLI"
9345
+ },
9346
+ {
9347
+ "id": "pan-vault-passphrase",
9348
+ "path": ["vault", "passphrase"],
9349
+ "display": "/pan vault passphrase",
9350
+ "description": "Turn passphrase unlock for new machines on (set) or off (remove); the vault key stays the same",
9351
+ "args": [],
9352
+ "options": [],
9353
+ "aliases": [],
9354
+ "category": "CLI"
9355
+ },
9356
+ {
9357
+ "id": "pan-vault-passphrase-set",
9358
+ "path": [
9359
+ "vault",
9360
+ "passphrase",
9361
+ "set"
9362
+ ],
9363
+ "display": "/pan vault passphrase set",
9364
+ "description": "Wrap the vault key under a passphrase so a new machine can join without the recovery phrase",
9365
+ "args": [],
9366
+ "options": [{
9367
+ "flags": "--passphrase-file <path>",
9368
+ "description": "Read the passphrase from a file instead of prompting",
9369
+ "required": true,
9370
+ "valueHint": "path"
9371
+ }, {
9372
+ "flags": "--generate",
9373
+ "description": "Generate a 6-word passphrase and print it once",
9374
+ "required": false,
9375
+ "valueHint": null
9376
+ }],
9377
+ "aliases": [],
9378
+ "category": "CLI"
9379
+ },
9380
+ {
9381
+ "id": "pan-vault-passphrase-remove",
9382
+ "path": [
9383
+ "vault",
9384
+ "passphrase",
9385
+ "remove"
9386
+ ],
9387
+ "display": "/pan vault passphrase remove",
9388
+ "description": "Delete the passphrase unlock object; joining then needs the recovery phrase",
9389
+ "args": [],
9390
+ "options": [],
9391
+ "aliases": [],
9392
+ "category": "CLI"
9393
+ },
9394
+ {
9395
+ "id": "pan-vault-rotate-key",
9396
+ "path": ["vault", "rotate-key"],
9397
+ "display": "/pan vault rotate-key",
9398
+ "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",
9399
+ "args": [],
9400
+ "options": [
9401
+ {
9402
+ "flags": "--yes",
9403
+ "description": "Rotate without the confirmation prompt",
9404
+ "required": false,
9405
+ "valueHint": null
9406
+ },
9407
+ {
9408
+ "flags": "--passphrase-file <path>",
9409
+ "description": "Re-wrap passphrase unlock under the new key with the passphrase in this file",
9410
+ "required": true,
9411
+ "valueHint": "path"
9412
+ },
9413
+ {
9414
+ "flags": "--generate-passphrase",
9415
+ "description": "Re-wrap passphrase unlock under the new key with a generated 6-word passphrase, printed once",
9416
+ "required": false,
9417
+ "valueHint": null
9418
+ },
9419
+ {
9420
+ "flags": "--no-passphrase",
9421
+ "description": "Turn passphrase unlock off",
9422
+ "required": false,
9423
+ "valueHint": null
9424
+ }
9425
+ ],
9426
+ "aliases": [],
9427
+ "category": "CLI"
9428
+ },
9429
+ {
9430
+ "id": "pan-vault-status",
9431
+ "path": ["vault", "status"],
9432
+ "display": "/pan vault status",
9433
+ "description": "Show backend, this machine, owned records, last sync and the machine list",
9434
+ "args": [],
9435
+ "options": [{
9436
+ "flags": "--json",
9437
+ "description": "Output in JSON format",
9438
+ "required": false,
9439
+ "valueHint": null
9440
+ }],
9441
+ "aliases": [],
9442
+ "category": "CLI"
9443
+ },
9444
+ {
9445
+ "id": "pan-vault-save",
9446
+ "path": ["vault", "save"],
9447
+ "display": "/pan vault save",
9448
+ "description": "Settle one transcript (by session id or path) or many into the vault",
9449
+ "args": [{
9450
+ "name": "session-id-or-path",
9451
+ "required": false,
9452
+ "variadic": false
9453
+ }],
9454
+ "options": [
9455
+ {
9456
+ "flags": "--all",
9457
+ "description": "Settle every discovered transcript",
9458
+ "required": false,
9459
+ "valueHint": null
9460
+ },
9461
+ {
9462
+ "flags": "--since <date>",
9463
+ "description": "With --all: only transcripts modified on or after this date",
9464
+ "required": true,
9465
+ "valueHint": "date"
9466
+ },
9467
+ {
9468
+ "flags": "--harness <harness>",
9469
+ "description": "With --all: only this harness (claude-code, codex, ...)",
9470
+ "required": true,
9471
+ "valueHint": "harness"
9472
+ },
9473
+ {
9474
+ "flags": "--hook",
9475
+ "description": "Claude Code Stop-hook mode: read {session_id, transcript_path} JSON from stdin, print nothing, exit 0",
9476
+ "required": false,
9477
+ "valueHint": null
9478
+ }
9479
+ ],
9480
+ "aliases": [],
9481
+ "category": "CLI"
9482
+ },
9483
+ {
9484
+ "id": "pan-vault-sync",
9485
+ "path": ["vault", "sync"],
9486
+ "display": "/pan vault sync",
9487
+ "description": "Settle owned transcripts that grew, register this machine and refresh the list",
9488
+ "args": [],
9489
+ "options": [],
9490
+ "aliases": [],
9491
+ "category": "CLI"
9492
+ },
9493
+ {
9494
+ "id": "pan-vault-list",
9495
+ "path": ["vault", "list"],
9496
+ "display": "/pan vault list",
9497
+ "description": "List saved conversations from the local cache (never contacts the backend)",
9498
+ "args": [],
9499
+ "options": [{
9500
+ "flags": "--json",
9501
+ "description": "Output in JSON format",
9502
+ "required": false,
9503
+ "valueHint": null
9504
+ }],
9505
+ "aliases": [],
9506
+ "category": "CLI"
9507
+ },
9508
+ {
9509
+ "id": "pan-vault-show",
9510
+ "path": ["vault", "show"],
9511
+ "display": "/pan vault show",
9512
+ "description": "Print a saved conversation read-only with its versions",
9513
+ "args": [{
9514
+ "name": "id",
9515
+ "required": true,
9516
+ "variadic": false
9517
+ }],
9518
+ "options": [{
9519
+ "flags": "--json",
9520
+ "description": "Output in JSON format",
9521
+ "required": false,
9522
+ "valueHint": null
9523
+ }],
9524
+ "aliases": [],
9525
+ "category": "CLI"
9526
+ },
9527
+ {
9528
+ "id": "pan-vault-resume",
9529
+ "path": ["vault", "resume"],
9530
+ "display": "/pan vault resume",
9531
+ "description": "Continue a saved conversation here: <id> or <id>@<version>; adopts it and launches the harness",
9532
+ "args": [{
9533
+ "name": "id",
9534
+ "required": true,
9535
+ "variadic": false
9536
+ }],
9537
+ "options": [
9538
+ {
9539
+ "flags": "--cwd <dir>",
9540
+ "description": "Working directory to resume in (default: the saved cwd)",
9541
+ "required": true,
9542
+ "valueHint": "dir"
9543
+ },
9544
+ {
9545
+ "flags": "--no-launch",
9546
+ "description": "Print the launch command instead of running it",
9547
+ "required": false,
9548
+ "valueHint": null
9549
+ },
9550
+ {
9551
+ "flags": "--on-drift <choice>",
9552
+ "description": "When the cwd state differs from the saved state: continue | note | cancel",
9553
+ "required": true,
9554
+ "valueHint": "choice"
9555
+ },
9556
+ {
9557
+ "flags": "--no-code",
9558
+ "description": "Do not apply the saved code snapshot; only continue the conversation",
9559
+ "required": false,
9560
+ "valueHint": null
9561
+ },
9562
+ {
9563
+ "flags": "--worktree <dir>",
9564
+ "description": "Apply the code snapshot into a new git worktree at <dir> instead of the target checkout",
9565
+ "required": true,
9566
+ "valueHint": "dir"
9567
+ }
9568
+ ],
9569
+ "aliases": [],
9570
+ "category": "CLI"
9571
+ },
9572
+ {
9573
+ "id": "pan-vault-exclude",
9574
+ "path": ["vault", "exclude"],
9575
+ "display": "/pan vault exclude",
9576
+ "description": "Exclude conversations by cwd path, git origin or session id; an excluded saved record becomes a tombstone",
9577
+ "args": [{
9578
+ "name": "path",
9579
+ "required": false,
9580
+ "variadic": false
9581
+ }],
9582
+ "options": [{
9583
+ "flags": "--origin <url>",
9584
+ "description": "Exclude conversations whose git origin is this URL",
9585
+ "required": true,
9586
+ "valueHint": "url"
9587
+ }, {
9588
+ "flags": "--session <id>",
9589
+ "description": "Exclude one session by native session id or vault id",
9590
+ "required": true,
9591
+ "valueHint": "id"
9592
+ }],
9593
+ "aliases": [],
9594
+ "category": "CLI"
9595
+ },
9596
+ {
9597
+ "id": "pan-vault-include",
9598
+ "path": ["vault", "include"],
9599
+ "display": "/pan vault include",
9600
+ "description": "Remove an exclusion added with pan vault exclude",
9601
+ "args": [{
9602
+ "name": "path",
9603
+ "required": false,
9604
+ "variadic": false
9605
+ }],
9606
+ "options": [{
9607
+ "flags": "--origin <url>",
9608
+ "description": "Include conversations whose git origin is this URL again",
9609
+ "required": true,
9610
+ "valueHint": "url"
9611
+ }, {
9612
+ "flags": "--session <id>",
9613
+ "description": "Include one session again",
9614
+ "required": true,
9615
+ "valueHint": "id"
9616
+ }],
9617
+ "aliases": [],
9618
+ "category": "CLI"
9619
+ },
9620
+ {
9621
+ "id": "pan-vault-allow-secret",
9622
+ "path": ["vault", "allow-secret"],
9623
+ "display": "/pan vault allow-secret",
9624
+ "description": "Allow one blocked transcript line, or the blocked code lines of one file, for that record only",
9625
+ "args": [{
9626
+ "name": "id-or-path",
9627
+ "required": true,
9628
+ "variadic": false
9629
+ }, {
9630
+ "name": "line",
9631
+ "required": false,
9632
+ "variadic": false
9633
+ }],
9634
+ "options": [{
9635
+ "flags": "--file <path>",
9636
+ "description": "Allow the blocked lines of this file in the code snapshot (path relative to the repository root)",
9637
+ "required": true,
9638
+ "valueHint": "path"
9639
+ }],
9640
+ "aliases": [],
9641
+ "category": "CLI"
9642
+ },
9643
+ {
9644
+ "id": "pan-vault-evict",
9645
+ "path": ["vault", "evict"],
9646
+ "display": "/pan vault evict",
9647
+ "description": "Review the pending-deletion batch (default) or act on it; nothing is deleted without --confirm",
9648
+ "args": [],
9649
+ "options": [
9650
+ {
9651
+ "flags": "--review",
9652
+ "description": "Scan and print the batch with its fingerprint (default)",
9653
+ "required": false,
9654
+ "valueHint": null
9655
+ },
9656
+ {
9657
+ "flags": "--confirm <fingerprint>",
9658
+ "description": "Delete the reviewed files if the batch still matches this fingerprint",
9659
+ "required": true,
9660
+ "valueHint": "fingerprint"
9661
+ },
9662
+ {
9663
+ "flags": "--decline <vaultId>",
9664
+ "description": "Remove an entry from the batch and do not offer it again",
9665
+ "required": true,
9666
+ "valueHint": "vaultId"
9667
+ },
9668
+ {
9669
+ "flags": "--reoffer <vaultId>",
9670
+ "description": "Allow a declined entry to be offered again",
9671
+ "required": true,
9672
+ "valueHint": "vaultId"
9673
+ },
9674
+ {
9675
+ "flags": "--clear",
9676
+ "description": "Empty the batch without deleting or declining anything",
9677
+ "required": false,
9678
+ "valueHint": null
9679
+ }
9680
+ ],
9681
+ "aliases": [],
9682
+ "category": "CLI"
9683
+ },
9684
+ {
9685
+ "id": "pan-vault-restore",
9686
+ "path": ["vault", "restore"],
9687
+ "display": "/pan vault restore",
9688
+ "description": "Rebuild an evicted transcript byte for byte at its original path",
9689
+ "args": [{
9690
+ "name": "id",
9691
+ "required": true,
9692
+ "variadic": false
9693
+ }],
9694
+ "options": [{
9695
+ "flags": "--to <path>",
9696
+ "description": "Write the rebuilt file here instead of the recorded path",
9697
+ "required": true,
9698
+ "valueHint": "path"
9699
+ }],
9700
+ "aliases": [],
9701
+ "category": "CLI"
9702
+ },
8994
9703
  {
8995
9704
  "id": "pan-test",
8996
9705
  "path": ["test"],
@@ -12133,7 +12842,7 @@ const COMPOSER_COMMAND_MANIFEST = [
12133
12842
  "id": "pan-spawn",
12134
12843
  "path": ["spawn"],
12135
12844
  "display": "/pan spawn",
12136
- "description": "Create a worker pane for one xBRIEF item in the issue workspace",
12845
+ "description": "Create a worker pane for one xBRIEF item in its own item worktree",
12137
12846
  "args": [],
12138
12847
  "options": [
12139
12848
  {
@@ -12159,6 +12868,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12159
12868
  "description": "Coding-agent harness (default: claude-code)",
12160
12869
  "required": true,
12161
12870
  "valueHint": "harness"
12871
+ },
12872
+ {
12873
+ "flags": "--shared",
12874
+ "description": "Run the worker in the issue workspace instead of an item worktree (foreman/operator only; serial use)",
12875
+ "required": false,
12876
+ "valueHint": null
12162
12877
  }
12163
12878
  ],
12164
12879
  "aliases": [],
@@ -12545,6 +13260,12 @@ const COMPOSER_COMMAND_MANIFEST = [
12545
13260
  "required": false,
12546
13261
  "valueHint": null
12547
13262
  },
13263
+ {
13264
+ "flags": "--force",
13265
+ "description": "Launch even while the host is CPU-saturated",
13266
+ "required": false,
13267
+ "valueHint": null
13268
+ },
12548
13269
  {
12549
13270
  "flags": "--no-wait",
12550
13271
  "description": "Return without waiting for the lane to start",
@@ -14627,6 +15348,47 @@ function laneActivityOf(row, now) {
14627
15348
  return "stopped";
14628
15349
  }
14629
15350
  //#endregion
15351
+ //#region src/environment.ts
15352
+ /** Wire protocol version a client and server must agree on. */
15353
+ const ENVIRONMENT_PROTOCOL_VERSION = 1;
15354
+ const EnvironmentId = effect.Schema.String.pipe(effect.Schema.brand("EnvironmentId"));
15355
+ const EnvironmentCapabilities = effect.Schema.Struct({
15356
+ /** `POST /api/pairing/*` is available. */
15357
+ pairing: effect.Schema.Boolean,
15358
+ /** `GET/DELETE /api/devices` is available. */
15359
+ deviceSessions: effect.Schema.Boolean,
15360
+ /** `/ws/*` upgrades require a credential (PAN-1166). */
15361
+ terminalAuth: effect.Schema.Boolean
15362
+ });
15363
+ const EnvironmentDescriptor = effect.Schema.Struct({
15364
+ descriptorVersion: effect.Schema.Literal(1),
15365
+ environmentId: EnvironmentId,
15366
+ label: effect.Schema.String,
15367
+ platform: effect.Schema.Struct({
15368
+ os: effect.Schema.String,
15369
+ arch: effect.Schema.String
15370
+ }),
15371
+ /** Exact package version of the serving Overdeck. */
15372
+ serverVersion: effect.Schema.String,
15373
+ /** The server's `ENVIRONMENT_PROTOCOL_VERSION`. */
15374
+ protocolVersion: effect.Schema.Number,
15375
+ capabilities: EnvironmentCapabilities
15376
+ });
15377
+ /** A server-local id qualified by the environment that owns it. */
15378
+ const ScopedRef = (localId) => effect.Schema.Struct({
15379
+ environmentId: EnvironmentId,
15380
+ localId
15381
+ });
15382
+ const ScopedProjectRef = ScopedRef(effect.Schema.String);
15383
+ const ScopedIssueRef = ScopedRef(effect.Schema.String);
15384
+ const ScopedAgentRef = ScopedRef(effect.Schema.String);
15385
+ const ScopedConversationRef = ScopedRef(effect.Schema.String);
15386
+ const ScopedTerminalRef = ScopedRef(effect.Schema.String);
15387
+ /** True only when the server speaks exactly the client's protocol version. */
15388
+ function isProtocolCompatible(descriptor, clientProtocolVersion) {
15389
+ return descriptor.protocolVersion === clientProtocolVersion;
15390
+ }
15391
+ //#endregion
14630
15392
  exports.ACP_BEHAVIOR = ACP_BEHAVIOR;
14631
15393
  exports.AGENT_ROLES = AGENT_ROLES;
14632
15394
  exports.Activity = Activity;
@@ -14750,6 +15512,7 @@ exports.DeployStalenessSnapshot = DeployStalenessSnapshot;
14750
15512
  exports.DerivedBranchState = DerivedBranchState;
14751
15513
  exports.DerivedIssueState = DerivedIssueState;
14752
15514
  exports.DerivedPrState = DerivedPrState;
15515
+ exports.DerivedWorkStart = DerivedWorkStart;
14753
15516
  exports.DirectoryEntry = DirectoryEntry;
14754
15517
  exports.DirectoryEntryKind = DirectoryEntryKind;
14755
15518
  exports.DirectoryEntryLocation = DirectoryEntryLocation;
@@ -14764,6 +15527,7 @@ exports.DiscoveredSessionSnapshot = DiscoveredSessionSnapshot;
14764
15527
  exports.DomainEvent = DomainEvent;
14765
15528
  exports.EDITORS = EDITORS;
14766
15529
  exports.EFFORT_LEVELS = EFFORT_LEVELS;
15530
+ exports.ENVIRONMENT_PROTOCOL_VERSION = ENVIRONMENT_PROTOCOL_VERSION;
14767
15531
  exports.EditorIdSchema = EditorIdSchema;
14768
15532
  exports.EffortLevelSchema = EffortLevelSchema;
14769
15533
  exports.EmbedProgressEvent = EmbedProgressEvent;
@@ -14774,6 +15538,9 @@ exports.EnrichProgressEvent = EnrichProgressEvent;
14774
15538
  exports.EnrichProgressSnapshot = EnrichProgressSnapshot;
14775
15539
  exports.EnrichSessionsRpc = EnrichSessionsRpc;
14776
15540
  exports.EnrichStatsSnapshot = EnrichStatsSnapshot;
15541
+ exports.EnvironmentCapabilities = EnvironmentCapabilities;
15542
+ exports.EnvironmentDescriptor = EnvironmentDescriptor;
15543
+ exports.EnvironmentId = EnvironmentId;
14777
15544
  exports.ExtractionProviderConfig = ExtractionProviderConfig;
14778
15545
  exports.ExtractionProviderTarget = ExtractionProviderTarget;
14779
15546
  exports.FeatureNode = FeatureNode;
@@ -14984,6 +15751,12 @@ exports.ScanProgressEvent = ScanProgressEvent;
14984
15751
  exports.ScanProgressSnapshot = ScanProgressSnapshot;
14985
15752
  exports.ScanResult = ScanResult;
14986
15753
  exports.ScanStartedEvent = ScanStartedEvent;
15754
+ exports.ScopedAgentRef = ScopedAgentRef;
15755
+ exports.ScopedConversationRef = ScopedConversationRef;
15756
+ exports.ScopedIssueRef = ScopedIssueRef;
15757
+ exports.ScopedProjectRef = ScopedProjectRef;
15758
+ exports.ScopedRef = ScopedRef;
15759
+ exports.ScopedTerminalRef = ScopedTerminalRef;
14987
15760
  exports.SearchConversationsRpc = SearchConversationsRpc;
14988
15761
  exports.SendTerminalInputRpc = SendTerminalInputRpc;
14989
15762
  exports.SequenceNumber = SequenceNumber;
@@ -15036,6 +15809,7 @@ exports.TickMarker = TickMarker;
15036
15809
  exports.TickMarkerPhase = TickMarkerPhase;
15037
15810
  exports.TurnDiffFileChange = TurnDiffFileChange;
15038
15811
  exports.TurnDiffSummary = TurnDiffSummary;
15812
+ exports.TurnEndAssessment = TurnEndAssessment;
15039
15813
  exports.WIRED_HOOK_INVENTORY = WIRED_HOOK_INVENTORY;
15040
15814
  exports.WIRED_HOOK_NAMES = WIRED_HOOK_NAMES;
15041
15815
  exports.WS_METHODS = WS_METHODS;
@@ -15081,6 +15855,7 @@ exports.isConfiguredPullRequestRepo = isConfiguredPullRequestRepo;
15081
15855
  exports.isEffortLevel = isEffortLevel;
15082
15856
  exports.isIssueAttention = isIssueAttention;
15083
15857
  exports.isIssueState = isIssueState;
15858
+ exports.isProtocolCompatible = isProtocolCompatible;
15084
15859
  exports.isSingletonConversation = isSingletonConversation;
15085
15860
  exports.isTerminalBackendName = isTerminalBackendName;
15086
15861
  exports.isTerminalTurnDiffSummaryStatus = isTerminalTurnDiffSummaryStatus;