@overdeck/contracts 0.60.0 → 0.61.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
@@ -30,6 +30,8 @@ effect_unstable_rpc_RpcGroup = __toESM(effect_unstable_rpc_RpcGroup, 1);
30
30
  const BackendPane = effect.Schema.Struct({
31
31
  /** Stable pane identity: the backend-native pane handle. */
32
32
  id: effect.Schema.String,
33
+ /** Overdeck agent id: Herdr `agentId` token or live agent name; tmux session name (PAN-3920). */
34
+ agentId: effect.Schema.optional(effect.Schema.String),
33
35
  /** Issue the pane belongs to; absent for operator conversations. */
34
36
  issue: effect.Schema.optional(effect.Schema.String),
35
37
  role: effect.Schema.Literals([
@@ -191,7 +193,8 @@ const Role = effect.Schema.Literals([
191
193
  "flywheel",
192
194
  "strike",
193
195
  "sequencer",
194
- "knowledge"
196
+ "knowledge",
197
+ "worker"
195
198
  ]);
196
199
  const AgentResolution = effect.Schema.Literals([
197
200
  "working",
@@ -5091,34 +5094,142 @@ const FlywheelStatsTrend = effect.Schema.Literals([
5091
5094
  "down",
5092
5095
  "flat"
5093
5096
  ]);
5094
- const FlywheelStatsCriterionValueObject = effect.Schema.Record(effect.Schema.String, effect.Schema.Json);
5095
- const FlywheelStatsCriterionValue = effect.Schema.Union([effect.Schema.Number, FlywheelStatsCriterionValueObject]);
5096
- const FlywheelStatsCriterion = effect.Schema.Struct({
5097
- label: effect.Schema.String,
5098
- value: FlywheelStatsCriterionValue,
5099
- target: FlywheelStatsCriterionValue,
5097
+ const FlywheelSubstrateSeverity = effect.Schema.Literals([
5098
+ "P0",
5099
+ "P1",
5100
+ "P2",
5101
+ "unknown"
5102
+ ]);
5103
+ const FlywheelStatsWindow = effect.Schema.Struct({
5104
+ days: effect.Schema.Number,
5105
+ since: effect.Schema.String,
5106
+ until: effect.Schema.String
5107
+ });
5108
+ /** c1: substrate bugs filed per merged PR in the window. */
5109
+ const FlywheelBugRateCriterion = effect.Schema.Struct({
5110
+ /** `null` when no PR merged in the window (the rate is undefined). */
5111
+ value: effect.Schema.NullOr(effect.Schema.Number),
5112
+ count: effect.Schema.Number,
5113
+ denominator: effect.Schema.Number,
5114
+ status: FlywheelStatsCriterionStatus,
5115
+ trend: FlywheelStatsTrend,
5116
+ dataSufficient: effect.Schema.Boolean
5117
+ });
5118
+ /** c2: P0 substrate bugs filed in the window. */
5119
+ const FlywheelP0Criterion = effect.Schema.Struct({
5120
+ value: effect.Schema.Number,
5100
5121
  status: FlywheelStatsCriterionStatus,
5101
- trend: effect.Schema.optional(FlywheelStatsTrend),
5102
- sampleSize: effect.Schema.Number,
5122
+ trend: FlywheelStatsTrend,
5103
5123
  dataSufficient: effect.Schema.Boolean
5104
5124
  });
5105
- const FlywheelStatsCriteria = effect.Schema.Struct({
5106
- c1_bugRate: FlywheelStatsCriterion,
5107
- c2_p0Bugs: FlywheelStatsCriterion,
5108
- c3_passRate: FlywheelStatsCriterion,
5109
- c4_mttr: FlywheelStatsCriterion,
5110
- c5_intervention: FlywheelStatsCriterion,
5111
- c6_timeConsistency: FlywheelStatsCriterion,
5112
- c7_flake: FlywheelStatsCriterion
5125
+ const FlywheelSubstrateBugRow = effect.Schema.Struct({
5126
+ number: effect.Schema.Number,
5127
+ title: effect.Schema.String,
5128
+ createdAt: effect.Schema.String,
5129
+ closedAt: effect.Schema.NullOr(effect.Schema.String),
5130
+ severity: FlywheelSubstrateSeverity
5113
5131
  });
5114
5132
  const FlywheelStats = effect.Schema.Struct({
5115
- window: effect.Schema.String,
5133
+ window: FlywheelStatsWindow,
5116
5134
  generatedAt: effect.Schema.String,
5117
- criteria: FlywheelStatsCriteria
5135
+ criteria: effect.Schema.Struct({
5136
+ c1_bugRate: FlywheelBugRateCriterion,
5137
+ c2_p0Bugs: FlywheelP0Criterion
5138
+ }),
5139
+ bugs: effect.Schema.Array(FlywheelSubstrateBugRow)
5118
5140
  });
5119
5141
  const decodeFlywheelStats = effect.Schema.decodeUnknownSync(FlywheelStats);
5120
5142
  const encodeFlywheelStats = effect.Schema.encodeSync(FlywheelStats);
5121
5143
  //#endregion
5144
+ //#region src/flywheel-derived.ts
5145
+ /** The loop's phases, as the skill reports them in its tick marker. */
5146
+ const TickMarkerPhase = effect.Schema.Literals([
5147
+ "orient",
5148
+ "pick",
5149
+ "launch",
5150
+ "watch",
5151
+ "park",
5152
+ "idle",
5153
+ "stopping"
5154
+ ]);
5155
+ /**
5156
+ * One parsed tick marker line:
5157
+ * `flywheel-tick: tick=<n> pick=<ID|none> phase=<phase> in-flight=<ID,…|none> needs-you=<text|none>`.
5158
+ */
5159
+ const TickMarker = effect.Schema.Struct({
5160
+ tick: effect.Schema.Number,
5161
+ pick: effect.Schema.NullOr(effect.Schema.String),
5162
+ phase: TickMarkerPhase,
5163
+ inFlight: effect.Schema.Array(effect.Schema.String),
5164
+ needsYou: effect.Schema.NullOr(effect.Schema.String)
5165
+ });
5166
+ /** `running` = row + live session; `paused` = row, no live session; `idle` = no row. */
5167
+ const FlywheelRunState = effect.Schema.Literals([
5168
+ "running",
5169
+ "paused",
5170
+ "idle"
5171
+ ]);
5172
+ /** Age of the last tick: ≤ 60 s live, ≤ 20 min breathing, older stalled. */
5173
+ const FlywheelFreshness = effect.Schema.Literals([
5174
+ "live",
5175
+ "breathing",
5176
+ "stalled"
5177
+ ]);
5178
+ const FlywheelConversationSummary = effect.Schema.Struct({
5179
+ name: effect.Schema.String,
5180
+ id: effect.Schema.Number,
5181
+ title: effect.Schema.NullOr(effect.Schema.String),
5182
+ model: effect.Schema.NullOr(effect.Schema.String),
5183
+ harness: effect.Schema.NullOr(effect.Schema.String),
5184
+ cwd: effect.Schema.String,
5185
+ sessionAlive: effect.Schema.Boolean
5186
+ });
5187
+ const FlywheelLastTick = effect.Schema.Struct({
5188
+ tick: effect.Schema.Number,
5189
+ pick: effect.Schema.NullOr(effect.Schema.String),
5190
+ phase: TickMarkerPhase,
5191
+ inFlight: effect.Schema.Array(effect.Schema.String),
5192
+ needsYou: effect.Schema.NullOr(effect.Schema.String),
5193
+ /** The assistant message's `createdAt`. */
5194
+ at: effect.Schema.String
5195
+ });
5196
+ const FlywheelPolicies = effect.Schema.Struct({
5197
+ auto_pickup_backlog: effect.Schema.Boolean,
5198
+ require_uat_before_merge: effect.Schema.Boolean,
5199
+ merge_train_enabled: effect.Schema.Boolean
5200
+ });
5201
+ const FlywheelJournalSummary = effect.Schema.Struct({
5202
+ at: effect.Schema.String,
5203
+ type: effect.Schema.String,
5204
+ source: effect.Schema.optional(effect.Schema.String)
5205
+ });
5206
+ const FlywheelInFlightRow = effect.Schema.Struct({
5207
+ issueId: effect.Schema.String,
5208
+ state: IssueState,
5209
+ attention: effect.Schema.optional(IssueAttention),
5210
+ pr: effect.Schema.optional(DerivedPrState),
5211
+ lastJournal: effect.Schema.NullOr(FlywheelJournalSummary)
5212
+ });
5213
+ const FlywheelOrderBookSummary = effect.Schema.Struct({
5214
+ id: effect.Schema.String,
5215
+ name: effect.Schema.String,
5216
+ status: effect.Schema.String,
5217
+ landed: effect.Schema.Number,
5218
+ total: effect.Schema.Number
5219
+ });
5220
+ const FlywheelDerivedStatus = effect.Schema.Struct({
5221
+ run: FlywheelRunState,
5222
+ conversation: effect.Schema.NullOr(FlywheelConversationSummary),
5223
+ lastTick: effect.Schema.NullOr(FlywheelLastTick),
5224
+ freshness: effect.Schema.NullOr(FlywheelFreshness),
5225
+ policies: FlywheelPolicies,
5226
+ inFlight: effect.Schema.Array(FlywheelInFlightRow),
5227
+ orderBook: effect.Schema.NullOr(FlywheelOrderBookSummary),
5228
+ projectRoot: effect.Schema.String,
5229
+ generatedAt: effect.Schema.String
5230
+ });
5231
+ const decodeFlywheelDerivedStatus = effect.Schema.decodeUnknownSync(FlywheelDerivedStatus);
5232
+ //#endregion
5122
5233
  //#region src/orders.ts
5123
5234
  const OrderBookLane = effect.Schema.Literals(["A", "B"]);
5124
5235
  const OrderBookStatus = effect.Schema.Literals([
@@ -9680,6 +9791,12 @@ const COMPOSER_COMMAND_MANIFEST = [
9680
9791
  "required": false,
9681
9792
  "valueHint": null
9682
9793
  },
9794
+ {
9795
+ "flags": "--repair-ignore",
9796
+ "description": "Only remove Overdeck's legacy .pan/ line from .gitignore and commit that file (no copy)",
9797
+ "required": false,
9798
+ "valueHint": null
9799
+ },
9683
9800
  {
9684
9801
  "flags": "--state-root <dir>",
9685
9802
  "description": "Override the state worktree root (tests / odd setups)",
@@ -9929,6 +10046,12 @@ const COMPOSER_COMMAND_MANIFEST = [
9929
10046
  "required": true,
9930
10047
  "valueHint": "notes"
9931
10048
  },
10049
+ {
10050
+ "flags": "--tested-sha <sha>",
10051
+ "description": "Test/UAT only: the commit the run exercised (git rev-parse HEAD before the gates)",
10052
+ "required": true,
10053
+ "valueHint": "sha"
10054
+ },
9932
10055
  {
9933
10056
  "flags": "--run-id <runId>",
9934
10057
  "description": "Review cycle ID used to deduplicate review feedback",
@@ -11377,11 +11500,273 @@ const COMPOSER_COMMAND_MANIFEST = [
11377
11500
  "aliases": [],
11378
11501
  "category": "CLI"
11379
11502
  },
11503
+ {
11504
+ "id": "pan-worker",
11505
+ "path": ["worker"],
11506
+ "display": "/pan worker",
11507
+ "description": "Registered workers: spawn an issue-linked agent and get its report back; register external agents",
11508
+ "args": [],
11509
+ "options": [],
11510
+ "aliases": [],
11511
+ "category": "CLI"
11512
+ },
11513
+ {
11514
+ "id": "pan-worker-run",
11515
+ "path": ["worker", "run"],
11516
+ "display": "/pan worker run",
11517
+ "description": "Start a worker for an issue and wait for its report (exit 0 done, 4 blocked/failed, 2 no report, 3 timeout, 1 error)",
11518
+ "args": [],
11519
+ "options": [
11520
+ {
11521
+ "flags": "--issue <id>",
11522
+ "description": "Issue the worker belongs to (required)",
11523
+ "required": true,
11524
+ "valueHint": "id"
11525
+ },
11526
+ {
11527
+ "flags": "--prompt <text>",
11528
+ "description": "The brief, inline",
11529
+ "required": true,
11530
+ "valueHint": "text"
11531
+ },
11532
+ {
11533
+ "flags": "--brief <file>",
11534
+ "description": "The brief, from a file",
11535
+ "required": true,
11536
+ "valueHint": "file"
11537
+ },
11538
+ {
11539
+ "flags": "--model <model>",
11540
+ "description": "Model override (default: roles.worker.model)",
11541
+ "required": true,
11542
+ "valueHint": "model"
11543
+ },
11544
+ {
11545
+ "flags": "--harness <harness>",
11546
+ "description": "Harness override (default: routed from the model)",
11547
+ "required": true,
11548
+ "valueHint": "harness"
11549
+ },
11550
+ {
11551
+ "flags": "--read-only",
11552
+ "description": "Run in the issue workspace with git writes blocked",
11553
+ "required": false,
11554
+ "valueHint": null
11555
+ },
11556
+ {
11557
+ "flags": "--cwd <path>",
11558
+ "description": "Working directory inside the issue workspace",
11559
+ "required": true,
11560
+ "valueHint": "path"
11561
+ },
11562
+ {
11563
+ "flags": "--parent <id>",
11564
+ "description": "Spawning agent or conversation (default: $OVERDECK_AGENT_ID, then $OVERDECK_CONVERSATION)",
11565
+ "required": true,
11566
+ "valueHint": "id"
11567
+ },
11568
+ {
11569
+ "flags": "--name <label>",
11570
+ "description": "Label shown in the Agents Directory",
11571
+ "required": true,
11572
+ "valueHint": "label"
11573
+ },
11574
+ {
11575
+ "flags": "--detach",
11576
+ "description": "Print the worker id and return without waiting",
11577
+ "required": false,
11578
+ "valueHint": null
11579
+ },
11580
+ {
11581
+ "flags": "--timeout <seconds>",
11582
+ "description": "Stop waiting after this many seconds (exit 3; the worker keeps running)",
11583
+ "required": true,
11584
+ "valueHint": "seconds"
11585
+ },
11586
+ {
11587
+ "flags": "--stop-after-report",
11588
+ "description": "Stop the worker after its first report",
11589
+ "required": false,
11590
+ "valueHint": null
11591
+ }
11592
+ ],
11593
+ "aliases": [],
11594
+ "category": "CLI"
11595
+ },
11596
+ {
11597
+ "id": "pan-worker-wait",
11598
+ "path": ["worker", "wait"],
11599
+ "display": "/pan worker wait",
11600
+ "description": "Wait for a worker's report (same exit codes as run); the status line names its seq",
11601
+ "args": [{
11602
+ "name": "worker-id",
11603
+ "required": true,
11604
+ "variadic": false
11605
+ }],
11606
+ "options": [{
11607
+ "flags": "--after <seq>",
11608
+ "description": "Return the next report after this seq (default: the newest report, whenever written)",
11609
+ "required": true,
11610
+ "valueHint": "seq"
11611
+ }, {
11612
+ "flags": "--timeout <seconds>",
11613
+ "description": "Stop waiting after this many seconds (exit 3)",
11614
+ "required": true,
11615
+ "valueHint": "seconds"
11616
+ }],
11617
+ "aliases": [],
11618
+ "category": "CLI"
11619
+ },
11620
+ {
11621
+ "id": "pan-worker-report",
11622
+ "path": ["worker", "report"],
11623
+ "display": "/pan worker report",
11624
+ "description": "Record a worker's report (run by the worker itself)",
11625
+ "args": [{
11626
+ "name": "worker-id",
11627
+ "required": true,
11628
+ "variadic": false
11629
+ }],
11630
+ "options": [
11631
+ {
11632
+ "flags": "--file <path>",
11633
+ "description": "Read the Markdown report from a file",
11634
+ "required": true,
11635
+ "valueHint": "path"
11636
+ },
11637
+ {
11638
+ "flags": "--stdin",
11639
+ "description": "Read the Markdown report from stdin",
11640
+ "required": false,
11641
+ "valueHint": null
11642
+ },
11643
+ {
11644
+ "flags": "--status <status>",
11645
+ "description": "done | blocked | failed (default: done)",
11646
+ "required": true,
11647
+ "valueHint": "status"
11648
+ }
11649
+ ],
11650
+ "aliases": [],
11651
+ "category": "CLI"
11652
+ },
11653
+ {
11654
+ "id": "pan-worker-list",
11655
+ "path": ["worker", "list"],
11656
+ "display": "/pan worker list",
11657
+ "description": "List workers with their parent, live state and newest report",
11658
+ "args": [],
11659
+ "options": [
11660
+ {
11661
+ "flags": "--issue <id>",
11662
+ "description": "Only this issue's workers",
11663
+ "required": true,
11664
+ "valueHint": "id"
11665
+ },
11666
+ {
11667
+ "flags": "--parent <id>",
11668
+ "description": "Only workers of this parent",
11669
+ "required": true,
11670
+ "valueHint": "id"
11671
+ },
11672
+ {
11673
+ "flags": "--json",
11674
+ "description": "Print JSON",
11675
+ "required": false,
11676
+ "valueHint": null
11677
+ }
11678
+ ],
11679
+ "aliases": [],
11680
+ "category": "CLI"
11681
+ },
11682
+ {
11683
+ "id": "pan-worker-register",
11684
+ "path": ["worker", "register"],
11685
+ "display": "/pan worker register",
11686
+ "description": "Record an agent another tool launched so the Agents Directory shows it (read-only; prints its id)",
11687
+ "args": [],
11688
+ "options": [
11689
+ {
11690
+ "flags": "--source <name>",
11691
+ "description": "Who launched it ([a-z0-9-], not codex-plugin) (required)",
11692
+ "required": true,
11693
+ "valueHint": "name"
11694
+ },
11695
+ {
11696
+ "flags": "--external-id <id>",
11697
+ "description": "The launcher's id for it (required)",
11698
+ "required": true,
11699
+ "valueHint": "id"
11700
+ },
11701
+ {
11702
+ "flags": "--harness <harness>",
11703
+ "description": "codex, claude-code, … (required)",
11704
+ "required": true,
11705
+ "valueHint": "harness"
11706
+ },
11707
+ {
11708
+ "flags": "--model <model>",
11709
+ "description": "Model it runs",
11710
+ "required": true,
11711
+ "valueHint": "model"
11712
+ },
11713
+ {
11714
+ "flags": "--cwd <path>",
11715
+ "description": "Its working directory",
11716
+ "required": true,
11717
+ "valueHint": "path"
11718
+ },
11719
+ {
11720
+ "flags": "--issue <id>",
11721
+ "description": "Issue it works on",
11722
+ "required": true,
11723
+ "valueHint": "id"
11724
+ },
11725
+ {
11726
+ "flags": "--parent <id>",
11727
+ "description": "Spawning agent id, conversation tmux session, or claude-session:<uuid>",
11728
+ "required": true,
11729
+ "valueHint": "id"
11730
+ },
11731
+ {
11732
+ "flags": "--label <text>",
11733
+ "description": "Label shown in the Agents Directory",
11734
+ "required": true,
11735
+ "valueHint": "text"
11736
+ },
11737
+ {
11738
+ "flags": "--pid <n>",
11739
+ "description": "Its process id (liveness is read from it)",
11740
+ "required": true,
11741
+ "valueHint": "n"
11742
+ },
11743
+ {
11744
+ "flags": "--transcript <path>",
11745
+ "description": "Its transcript file",
11746
+ "required": true,
11747
+ "valueHint": "path"
11748
+ },
11749
+ {
11750
+ "flags": "--session-id <id>",
11751
+ "description": "Its session or thread id",
11752
+ "required": true,
11753
+ "valueHint": "id"
11754
+ },
11755
+ {
11756
+ "flags": "--json",
11757
+ "description": "Print { id, created }",
11758
+ "required": false,
11759
+ "valueHint": null
11760
+ }
11761
+ ],
11762
+ "aliases": [],
11763
+ "category": "CLI"
11764
+ },
11380
11765
  {
11381
11766
  "id": "pan-flywheel",
11382
11767
  "path": ["flywheel"],
11383
11768
  "display": "/pan flywheel",
11384
- "description": "Start, stop, or check the flywheel conversation",
11769
+ "description": "Start, stop, pause, resume, or inspect the flywheel conversation",
11385
11770
  "args": [],
11386
11771
  "options": [],
11387
11772
  "aliases": [],
@@ -11411,6 +11796,18 @@ const COMPOSER_COMMAND_MANIFEST = [
11411
11796
  "description": "Working directory (default: cwd)",
11412
11797
  "required": true,
11413
11798
  "valueHint": "path"
11799
+ },
11800
+ {
11801
+ "flags": "--orders <book-id>",
11802
+ "description": "Order book the flywheel works from",
11803
+ "required": true,
11804
+ "valueHint": "book-id"
11805
+ },
11806
+ {
11807
+ "flags": "--fresh",
11808
+ "description": "Replace a paused flywheel conversation instead of refusing",
11809
+ "required": false,
11810
+ "valueHint": null
11414
11811
  }
11415
11812
  ],
11416
11813
  "aliases": [],
@@ -11420,7 +11817,52 @@ const COMPOSER_COMMAND_MANIFEST = [
11420
11817
  "id": "pan-flywheel-stop",
11421
11818
  "path": ["flywheel", "stop"],
11422
11819
  "display": "/pan flywheel stop",
11423
- "description": "Stop the flywheel conversation",
11820
+ "description": "Ask the loop to write its report, wait for it, then pause",
11821
+ "args": [],
11822
+ "options": [{
11823
+ "flags": "--timeout <ms>",
11824
+ "description": "How long to wait for the report (default 120000)",
11825
+ "required": true,
11826
+ "valueHint": "ms"
11827
+ }],
11828
+ "aliases": [],
11829
+ "category": "Flywheel"
11830
+ },
11831
+ {
11832
+ "id": "pan-flywheel-abort",
11833
+ "path": ["flywheel", "abort"],
11834
+ "display": "/pan flywheel abort",
11835
+ "description": "Stop the flywheel conversation without a report",
11836
+ "args": [],
11837
+ "options": [],
11838
+ "aliases": [],
11839
+ "category": "Flywheel"
11840
+ },
11841
+ {
11842
+ "id": "pan-flywheel-pause",
11843
+ "path": ["flywheel", "pause"],
11844
+ "display": "/pan flywheel pause",
11845
+ "description": "Stop the flywheel session, keeping its conversation and transcript",
11846
+ "args": [],
11847
+ "options": [],
11848
+ "aliases": [],
11849
+ "category": "Flywheel"
11850
+ },
11851
+ {
11852
+ "id": "pan-flywheel-resume",
11853
+ "path": ["flywheel", "resume"],
11854
+ "display": "/pan flywheel resume",
11855
+ "description": "Respawn a paused flywheel and re-send /pan-flywheel",
11856
+ "args": [],
11857
+ "options": [],
11858
+ "aliases": [],
11859
+ "category": "Flywheel"
11860
+ },
11861
+ {
11862
+ "id": "pan-flywheel-report",
11863
+ "path": ["flywheel", "report"],
11864
+ "display": "/pan flywheel report",
11865
+ "description": "Ask a running loop for its report, or print .pan/flywheel/report.md",
11424
11866
  "args": [],
11425
11867
  "options": [],
11426
11868
  "aliases": [],
@@ -11430,7 +11872,7 @@ const COMPOSER_COMMAND_MANIFEST = [
11430
11872
  "id": "pan-flywheel-status",
11431
11873
  "path": ["flywheel", "status"],
11432
11874
  "display": "/pan flywheel status",
11433
- "description": "Say whether the flywheel conversation is running",
11875
+ "description": "Show the derived flywheel status: run, last tick, policies, in-flight issues, order book",
11434
11876
  "args": [],
11435
11877
  "options": [{
11436
11878
  "flags": "--json",
@@ -11441,6 +11883,26 @@ const COMPOSER_COMMAND_MANIFEST = [
11441
11883
  "aliases": [],
11442
11884
  "category": "Flywheel"
11443
11885
  },
11886
+ {
11887
+ "id": "pan-flywheel-stats",
11888
+ "path": ["flywheel", "stats"],
11889
+ "display": "/pan flywheel stats",
11890
+ "description": "Substrate-bug discovery rate and P0 count, computed from the tracker and forge",
11891
+ "args": [],
11892
+ "options": [{
11893
+ "flags": "--json",
11894
+ "description": "Output as JSON",
11895
+ "required": false,
11896
+ "valueHint": null
11897
+ }, {
11898
+ "flags": "--window <days>",
11899
+ "description": "Window in days (default 30)",
11900
+ "required": true,
11901
+ "valueHint": "days"
11902
+ }],
11903
+ "aliases": [],
11904
+ "category": "Flywheel"
11905
+ },
11444
11906
  {
11445
11907
  "id": "pan-merge",
11446
11908
  "path": ["merge"],
@@ -12913,6 +13375,97 @@ function isAgentRole(value) {
12913
13375
  return typeof value === "string" && AGENT_ROLES.includes(value);
12914
13376
  }
12915
13377
  //#endregion
13378
+ //#region src/agent-directory.ts
13379
+ const DirectoryEntryKind = effect.Schema.Literals([
13380
+ "agent",
13381
+ "conversation",
13382
+ "subagent",
13383
+ "external"
13384
+ ]);
13385
+ const DirectoryEntryState = effect.Schema.Literals([
13386
+ "working",
13387
+ "idle",
13388
+ "blocked",
13389
+ "done",
13390
+ "stopped",
13391
+ "unknown"
13392
+ ]);
13393
+ const DirectoryEntrySource = effect.Schema.Literals([
13394
+ "overdeck",
13395
+ "pane",
13396
+ "conversation",
13397
+ "claude-subagent",
13398
+ "codex-subagent",
13399
+ "registered",
13400
+ "codex-plugin"
13401
+ ]);
13402
+ const DirectoryTranscriptRef = effect.Schema.Union([
13403
+ effect.Schema.Struct({
13404
+ route: effect.Schema.Literal("agent"),
13405
+ agentId: effect.Schema.String
13406
+ }),
13407
+ effect.Schema.Struct({
13408
+ route: effect.Schema.Literal("agent-subagent"),
13409
+ agentId: effect.Schema.String,
13410
+ subagentId: effect.Schema.String
13411
+ }),
13412
+ effect.Schema.Struct({
13413
+ route: effect.Schema.Literal("conversation"),
13414
+ conversationName: effect.Schema.String
13415
+ }),
13416
+ effect.Schema.Struct({
13417
+ route: effect.Schema.Literal("conversation-subagent"),
13418
+ conversationName: effect.Schema.String,
13419
+ subagentId: effect.Schema.String
13420
+ })
13421
+ ]);
13422
+ const DirectoryEntryLocation = effect.Schema.Literals(["local", "remote"]);
13423
+ const DirectoryEntry = effect.Schema.Struct({
13424
+ id: effect.Schema.String,
13425
+ kind: DirectoryEntryKind,
13426
+ label: effect.Schema.String,
13427
+ location: DirectoryEntryLocation,
13428
+ /** projects.yaml key; `unassigned` when none (D5). */
13429
+ projectKey: effect.Schema.String,
13430
+ /** Uppercase issue id, e.g. `PAN-3920`. */
13431
+ issueId: effect.Schema.NullOr(effect.Schema.String),
13432
+ /** The issue's title from the dashboard's tracker cache; null when unknown. */
13433
+ issueTitle: effect.Schema.NullOr(effect.Schema.String),
13434
+ parentId: effect.Schema.NullOr(effect.Schema.String),
13435
+ role: effect.Schema.NullOr(effect.Schema.String),
13436
+ /** `unknown` when not known. */
13437
+ harness: effect.Schema.String,
13438
+ /** `unknown` when not known. */
13439
+ model: effect.Schema.String,
13440
+ state: DirectoryEntryState,
13441
+ startedAt: effect.Schema.NullOr(effect.Schema.String),
13442
+ lastActivityAt: effect.Schema.NullOr(effect.Schema.String),
13443
+ costUsd: effect.Schema.NullOr(effect.Schema.Number),
13444
+ source: DirectoryEntrySource,
13445
+ transcript: effect.Schema.NullOr(DirectoryTranscriptRef)
13446
+ });
13447
+ const AgentDirectoryResponse = effect.Schema.Struct({
13448
+ generatedAt: effect.Schema.String,
13449
+ windowHours: effect.Schema.Number,
13450
+ entries: effect.Schema.Array(DirectoryEntry)
13451
+ });
13452
+ //#endregion
13453
+ //#region src/companion-terminal.ts
13454
+ /**
13455
+ * Which companion terminal a conversation gets, or `null` for "keep the
13456
+ * owner pane as TERMINAL". A Codex conversation still on the legacy
13457
+ * `codex.transport: tui` runs the native TUI in its owner pane; the server
13458
+ * adapter reports that as `unsupported` and points at the runtime pane.
13459
+ */
13460
+ function companionTerminalKindFor(conversation) {
13461
+ if (conversation.harness === "opencode") return "opencode-attach";
13462
+ if (conversation.harness === "codex") return "codex-resume-remote";
13463
+ return null;
13464
+ }
13465
+ /** Body keys each mutation accepts. Anything else is rejected as target injection. */
13466
+ const COMPANION_TERMINAL_OPEN_BODY_KEYS = [];
13467
+ const COMPANION_TERMINAL_CLOSE_BODY_KEYS = ["generation"];
13468
+ //#endregion
12916
13469
  exports.ACP_BEHAVIOR = ACP_BEHAVIOR;
12917
13470
  exports.AGENT_ROLES = AGENT_ROLES;
12918
13471
  exports.Activity = Activity;
@@ -12928,6 +13481,7 @@ exports.AgentCompletedEvent = AgentCompletedEvent;
12928
13481
  exports.AgentContextSaturationChangedEvent = AgentContextSaturationChangedEvent;
12929
13482
  exports.AgentCreatedEvent = AgentCreatedEvent;
12930
13483
  exports.AgentCurrentIssueSetEvent = AgentCurrentIssueSetEvent;
13484
+ exports.AgentDirectoryResponse = AgentDirectoryResponse;
12931
13485
  exports.AgentEnrichmentChangedEvent = AgentEnrichmentChangedEvent;
12932
13486
  exports.AgentHealthKind = AgentHealthKind;
12933
13487
  exports.AgentHealthSnapshot = AgentHealthSnapshot;
@@ -12980,6 +13534,8 @@ exports.BeadsFreshnessChangedEvent = BeadsFreshnessChangedEvent;
12980
13534
  exports.CHANNEL_REPLY_KIND_VALUES = CHANNEL_REPLY_KIND_VALUES;
12981
13535
  exports.CLAUDE_CODE_BEHAVIOR = CLAUDE_CODE_BEHAVIOR;
12982
13536
  exports.CODEX_BEHAVIOR = CODEX_BEHAVIOR;
13537
+ exports.COMPANION_TERMINAL_CLOSE_BODY_KEYS = COMPANION_TERMINAL_CLOSE_BODY_KEYS;
13538
+ exports.COMPANION_TERMINAL_OPEN_BODY_KEYS = COMPANION_TERMINAL_OPEN_BODY_KEYS;
12983
13539
  exports.COMPOSER_COMMAND_INSERT_OVERRIDES = COMPOSER_COMMAND_INSERT_OVERRIDES;
12984
13540
  exports.COMPOSER_COMMAND_MANIFEST = COMPOSER_COMMAND_MANIFEST;
12985
13541
  exports.COMPOSER_COMMAND_VARIANTS = COMPOSER_COMMAND_VARIANTS;
@@ -13030,6 +13586,12 @@ exports.DeployStalenessSnapshot = DeployStalenessSnapshot;
13030
13586
  exports.DerivedBranchState = DerivedBranchState;
13031
13587
  exports.DerivedIssueState = DerivedIssueState;
13032
13588
  exports.DerivedPrState = DerivedPrState;
13589
+ exports.DirectoryEntry = DirectoryEntry;
13590
+ exports.DirectoryEntryKind = DirectoryEntryKind;
13591
+ exports.DirectoryEntryLocation = DirectoryEntryLocation;
13592
+ exports.DirectoryEntrySource = DirectoryEntrySource;
13593
+ exports.DirectoryEntryState = DirectoryEntryState;
13594
+ exports.DirectoryTranscriptRef = DirectoryTranscriptRef;
13033
13595
  exports.DiscoveredSessionSnapshot = DiscoveredSessionSnapshot;
13034
13596
  exports.DomainEvent = DomainEvent;
13035
13597
  exports.EDITORS = EDITORS;
@@ -13049,28 +13611,38 @@ exports.FeatureRegistryEntry = FeatureRegistryEntry;
13049
13611
  exports.FeatureRegistryStatus = FeatureRegistryStatus;
13050
13612
  exports.FlywheelAgent = FlywheelAgent;
13051
13613
  exports.FlywheelAgentStatus = FlywheelAgentStatus;
13614
+ exports.FlywheelBugRateCriterion = FlywheelBugRateCriterion;
13615
+ exports.FlywheelConversationSummary = FlywheelConversationSummary;
13616
+ exports.FlywheelDerivedStatus = FlywheelDerivedStatus;
13052
13617
  exports.FlywheelEffort = FlywheelEffort;
13618
+ exports.FlywheelFreshness = FlywheelFreshness;
13053
13619
  exports.FlywheelHarness = FlywheelHarness;
13054
13620
  exports.FlywheelHeadline = FlywheelHeadline;
13055
13621
  exports.FlywheelHttpUrl = FlywheelHttpUrl;
13622
+ exports.FlywheelInFlightRow = FlywheelInFlightRow;
13623
+ exports.FlywheelJournalSummary = FlywheelJournalSummary;
13624
+ exports.FlywheelLastTick = FlywheelLastTick;
13056
13625
  exports.FlywheelOrchestrator = FlywheelOrchestrator;
13626
+ exports.FlywheelOrderBookSummary = FlywheelOrderBookSummary;
13057
13627
  exports.FlywheelOrders = FlywheelOrders;
13628
+ exports.FlywheelP0Criterion = FlywheelP0Criterion;
13058
13629
  exports.FlywheelParkedItem = FlywheelParkedItem;
13059
13630
  exports.FlywheelPipelineItem = FlywheelPipelineItem;
13060
13631
  exports.FlywheelPipelineStatus = FlywheelPipelineStatus;
13061
13632
  exports.FlywheelPipelineVerb = FlywheelPipelineVerb;
13633
+ exports.FlywheelPolicies = FlywheelPolicies;
13062
13634
  exports.FlywheelRunId = FlywheelRunId;
13635
+ exports.FlywheelRunState = FlywheelRunState;
13063
13636
  exports.FlywheelScope = FlywheelScope;
13064
13637
  exports.FlywheelStats = FlywheelStats;
13065
- exports.FlywheelStatsCriteria = FlywheelStatsCriteria;
13066
- exports.FlywheelStatsCriterion = FlywheelStatsCriterion;
13067
13638
  exports.FlywheelStatsCriterionStatus = FlywheelStatsCriterionStatus;
13068
- exports.FlywheelStatsCriterionValue = FlywheelStatsCriterionValue;
13069
- exports.FlywheelStatsCriterionValueObject = FlywheelStatsCriterionValueObject;
13070
13639
  exports.FlywheelStatsTrend = FlywheelStatsTrend;
13640
+ exports.FlywheelStatsWindow = FlywheelStatsWindow;
13071
13641
  exports.FlywheelStatus = FlywheelStatus;
13072
13642
  exports.FlywheelSubstrateBug = FlywheelSubstrateBug;
13643
+ exports.FlywheelSubstrateBugRow = FlywheelSubstrateBugRow;
13073
13644
  exports.FlywheelSubstrateBugStatus = FlywheelSubstrateBugStatus;
13645
+ exports.FlywheelSubstrateSeverity = FlywheelSubstrateSeverity;
13074
13646
  exports.FlywheelSuggestion = FlywheelSuggestion;
13075
13647
  exports.FlywheelSuggestionAction = FlywheelSuggestionAction;
13076
13648
  exports.FlywheelSuggestionPriority = FlywheelSuggestionPriority;
@@ -13260,6 +13832,8 @@ exports.TerminalResizeRpc = TerminalResizeRpc;
13260
13832
  exports.TerminalWriteRpc = TerminalWriteRpc;
13261
13833
  exports.TestPassedEvent = TestPassedEvent;
13262
13834
  exports.ThinkingState = ThinkingState;
13835
+ exports.TickMarker = TickMarker;
13836
+ exports.TickMarkerPhase = TickMarkerPhase;
13263
13837
  exports.TurnDiffFileChange = TurnDiffFileChange;
13264
13838
  exports.TurnDiffSummary = TurnDiffSummary;
13265
13839
  exports.WIRED_HOOK_INVENTORY = WIRED_HOOK_INVENTORY;
@@ -13283,8 +13857,10 @@ exports.WriteFileAtPathRpc = WriteFileAtPathRpc;
13283
13857
  exports.applyEvent = applyEvent;
13284
13858
  exports.applyEvents = applyEvents;
13285
13859
  exports.applyIssueDelta = applyIssueDelta;
13860
+ exports.companionTerminalKindFor = companionTerminalKindFor;
13286
13861
  exports.compareIssueIds = compareIssueIds;
13287
13862
  exports.createIssueDelta = createIssueDelta;
13863
+ exports.decodeFlywheelDerivedStatus = decodeFlywheelDerivedStatus;
13288
13864
  exports.decodeFlywheelStats = decodeFlywheelStats;
13289
13865
  exports.deriveProjectCi = deriveProjectCi;
13290
13866
  exports.encodeFlywheelStats = encodeFlywheelStats;