@indigoai-us/hq-cli 5.126.0 → 5.127.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/CHANGELOG.md +211 -0
- package/assets/lanes-hooks/hq-lanes-drain.json +15 -0
- package/assets/lanes-hooks/hq-lanes-drain.mjs +254 -0
- package/assets/lanes-hooks/hq-lanes-drain.sh +21 -0
- package/assets/lanes-reconcile/hq-lanes-reconcile.service +11 -0
- package/assets/lanes-reconcile/hq-lanes-reconcile.timer +12 -0
- package/dist/command-catalog.generated.d.ts +245 -11
- package/dist/command-catalog.generated.js +323 -11
- package/dist/command-registration-plan.d.ts +1 -0
- package/dist/command-registration-plan.js +11 -2
- package/dist/commands/agents.d.ts +12 -0
- package/dist/commands/agents.js +46 -2
- package/dist/commands/lanes.d.ts +55 -16
- package/dist/commands/lanes.js +1187 -250
- package/dist/commands/mesh.js +254 -19
- package/dist/lib/lanes/accounts.d.ts +67 -7
- package/dist/lib/lanes/accounts.js +233 -43
- package/dist/lib/lanes/compaction.d.ts +96 -0
- package/dist/lib/lanes/compaction.js +197 -0
- package/dist/lib/lanes/config.d.ts +15 -0
- package/dist/lib/lanes/config.js +65 -8
- package/dist/lib/lanes/delivery.d.ts +151 -0
- package/dist/lib/lanes/delivery.js +354 -0
- package/dist/lib/lanes/dropbox.d.ts +96 -0
- package/dist/lib/lanes/dropbox.js +408 -0
- package/dist/lib/lanes/effort.d.ts +50 -0
- package/dist/lib/lanes/effort.js +109 -0
- package/dist/lib/lanes/errors.d.ts +2 -2
- package/dist/lib/lanes/hooks-install.d.ts +81 -0
- package/dist/lib/lanes/hooks-install.js +326 -0
- package/dist/lib/lanes/hq-root.d.ts +19 -0
- package/dist/lib/lanes/hq-root.js +28 -0
- package/dist/lib/lanes/index.d.ts +35 -5
- package/dist/lib/lanes/index.js +19 -4
- package/dist/lib/lanes/liveness.d.ts +7 -1
- package/dist/lib/lanes/liveness.js +64 -5
- package/dist/lib/lanes/machine-identity.d.ts +34 -0
- package/dist/lib/lanes/machine-identity.js +92 -0
- package/dist/lib/lanes/mesh-events.d.ts +109 -0
- package/dist/lib/lanes/mesh-events.js +275 -0
- package/dist/lib/lanes/outpost-dispatch.d.ts +65 -0
- package/dist/lib/lanes/outpost-dispatch.js +90 -0
- package/dist/lib/lanes/questions.d.ts +75 -0
- package/dist/lib/lanes/questions.js +243 -0
- package/dist/lib/lanes/quota.d.ts +95 -0
- package/dist/lib/lanes/quota.js +320 -0
- package/dist/lib/lanes/reconcile-install.d.ts +69 -0
- package/dist/lib/lanes/reconcile-install.js +221 -0
- package/dist/lib/lanes/reconcile.d.ts +102 -0
- package/dist/lib/lanes/reconcile.js +985 -0
- package/dist/lib/lanes/registry.d.ts +18 -5
- package/dist/lib/lanes/registry.js +293 -19
- package/dist/lib/lanes/spawn.d.ts +274 -0
- package/dist/lib/lanes/spawn.js +1363 -0
- package/dist/lib/lanes/store.d.ts +7 -3
- package/dist/lib/lanes/store.js +150 -32
- package/dist/lib/lanes/types.d.ts +346 -4
- package/dist/lib/lanes/types.js +138 -5
- package/dist/lib/lanes/watcher-main.d.ts +9 -0
- package/dist/lib/lanes/watcher-main.js +22 -0
- package/dist/lib/lanes/watcher.d.ts +216 -0
- package/dist/lib/lanes/watcher.js +859 -0
- package/dist/lib/mesh/api.d.ts +71 -7
- package/dist/lib/mesh/api.js +167 -28
- package/dist/lib/mesh/live/backfill-held.d.ts +18 -7
- package/dist/lib/mesh/live/backfill-held.js +66 -21
- package/dist/lib/mesh/live/daemon/run.d.ts +2 -0
- package/dist/lib/mesh/live/daemon/run.js +111 -54
- package/dist/lib/mesh/live/daemon/state.d.ts +2 -0
- package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +3 -0
- package/dist/lib/mesh/live/daemon/transcript-watch.js +31 -8
- package/dist/lib/scan-packages/index.d.ts +2 -0
- package/dist/lib/scan-packages/index.js +1 -1
- package/dist/lib/work-context/state.d.ts +12 -0
- package/dist/lib/work-context/state.js +131 -3
- package/package.json +3 -1
|
@@ -7250,7 +7250,7 @@ export const COMMAND_CATALOG = [
|
|
|
7250
7250
|
},
|
|
7251
7251
|
{
|
|
7252
7252
|
"name": "story",
|
|
7253
|
-
"description": "PATCH one Board story status",
|
|
7253
|
+
"description": "PATCH one Board story status and/or assignee",
|
|
7254
7254
|
"aliases": [],
|
|
7255
7255
|
"hidden": false,
|
|
7256
7256
|
"usage": "[options]",
|
|
@@ -7264,6 +7264,10 @@ export const COMMAND_CATALOG = [
|
|
|
7264
7264
|
"flags": "--status <status>",
|
|
7265
7265
|
"description": "queued|in_progress|review|done"
|
|
7266
7266
|
},
|
|
7267
|
+
{
|
|
7268
|
+
"flags": "--assignee <uid|me|none>",
|
|
7269
|
+
"description": "Assign a person or agent uid, yourself, or clear"
|
|
7270
|
+
},
|
|
7267
7271
|
{
|
|
7268
7272
|
"flags": "--company <slug|uid>",
|
|
7269
7273
|
"description": "Company slug or cloud uid"
|
|
@@ -7283,6 +7287,95 @@ export const COMMAND_CATALOG = [
|
|
|
7283
7287
|
],
|
|
7284
7288
|
"subcommands": []
|
|
7285
7289
|
},
|
|
7290
|
+
{
|
|
7291
|
+
"name": "project",
|
|
7292
|
+
"description": "Set a project Board view or register its project channel",
|
|
7293
|
+
"aliases": [],
|
|
7294
|
+
"hidden": false,
|
|
7295
|
+
"usage": "[options] [command]",
|
|
7296
|
+
"arguments": [],
|
|
7297
|
+
"options": [],
|
|
7298
|
+
"subcommands": [
|
|
7299
|
+
{
|
|
7300
|
+
"name": "set",
|
|
7301
|
+
"description": "PUT the project Board view from flags or a PRD JSON file",
|
|
7302
|
+
"aliases": [],
|
|
7303
|
+
"hidden": false,
|
|
7304
|
+
"usage": "[options] <projectId>",
|
|
7305
|
+
"arguments": [
|
|
7306
|
+
{
|
|
7307
|
+
"name": "projectId",
|
|
7308
|
+
"required": true,
|
|
7309
|
+
"variadic": false
|
|
7310
|
+
}
|
|
7311
|
+
],
|
|
7312
|
+
"options": [
|
|
7313
|
+
{
|
|
7314
|
+
"flags": "--company <slug|uid>",
|
|
7315
|
+
"description": "Company slug or cloud uid"
|
|
7316
|
+
},
|
|
7317
|
+
{
|
|
7318
|
+
"flags": "--name <name>",
|
|
7319
|
+
"description": "Project name"
|
|
7320
|
+
},
|
|
7321
|
+
{
|
|
7322
|
+
"flags": "--description <text>",
|
|
7323
|
+
"description": "Project description"
|
|
7324
|
+
},
|
|
7325
|
+
{
|
|
7326
|
+
"flags": "--stories-file <path>",
|
|
7327
|
+
"description": "PRD JSON file with userStories"
|
|
7328
|
+
},
|
|
7329
|
+
{
|
|
7330
|
+
"flags": "--stories-json <json>",
|
|
7331
|
+
"description": "Story array or JSON object with userStories"
|
|
7332
|
+
},
|
|
7333
|
+
{
|
|
7334
|
+
"flags": "--repos-json <json>",
|
|
7335
|
+
"description": "Repository array, such as [{path,branch}]"
|
|
7336
|
+
},
|
|
7337
|
+
{
|
|
7338
|
+
"flags": "--repo <path[@branch]>",
|
|
7339
|
+
"description": "Repository binding (repeatable)"
|
|
7340
|
+
},
|
|
7341
|
+
{
|
|
7342
|
+
"flags": "--json",
|
|
7343
|
+
"description": "Print machine-readable JSON"
|
|
7344
|
+
}
|
|
7345
|
+
],
|
|
7346
|
+
"subcommands": []
|
|
7347
|
+
},
|
|
7348
|
+
{
|
|
7349
|
+
"name": "register",
|
|
7350
|
+
"description": "POST project registration to create or bind its project channel and Board",
|
|
7351
|
+
"aliases": [],
|
|
7352
|
+
"hidden": false,
|
|
7353
|
+
"usage": "[options] <projectId>",
|
|
7354
|
+
"arguments": [
|
|
7355
|
+
{
|
|
7356
|
+
"name": "projectId",
|
|
7357
|
+
"required": true,
|
|
7358
|
+
"variadic": false
|
|
7359
|
+
}
|
|
7360
|
+
],
|
|
7361
|
+
"options": [
|
|
7362
|
+
{
|
|
7363
|
+
"flags": "--company <slug|uid>",
|
|
7364
|
+
"description": "Company slug or cloud uid"
|
|
7365
|
+
},
|
|
7366
|
+
{
|
|
7367
|
+
"flags": "--channel <channelId>",
|
|
7368
|
+
"description": "Reserved: the current server chooses the project channel"
|
|
7369
|
+
},
|
|
7370
|
+
{
|
|
7371
|
+
"flags": "--json",
|
|
7372
|
+
"description": "Print machine-readable JSON"
|
|
7373
|
+
}
|
|
7374
|
+
],
|
|
7375
|
+
"subcommands": []
|
|
7376
|
+
}
|
|
7377
|
+
]
|
|
7378
|
+
},
|
|
7286
7379
|
{
|
|
7287
7380
|
"name": "doctor",
|
|
7288
7381
|
"description": "Warm ~/.hq/work-mesh/cache from hq-pro (directory, inbox, pair DMs). Not `hq doctor`.",
|
|
@@ -7379,7 +7472,7 @@ export const COMMAND_CATALOG = [
|
|
|
7379
7472
|
"options": [
|
|
7380
7473
|
{
|
|
7381
7474
|
"flags": "--dry-run",
|
|
7382
|
-
"description": "Report what would be reconciled; write nothing
|
|
7475
|
+
"description": "Report what would be reconciled; write nothing or deliver events"
|
|
7383
7476
|
},
|
|
7384
7477
|
{
|
|
7385
7478
|
"flags": "--offline",
|
|
@@ -8482,7 +8575,7 @@ export const COMMAND_CATALOG = [
|
|
|
8482
8575
|
"name": "lanes",
|
|
8483
8576
|
"description": "Create, supervise, and steer worker lanes; routed decision queue",
|
|
8484
8577
|
"aliases": [],
|
|
8485
|
-
"hidden":
|
|
8578
|
+
"hidden": true,
|
|
8486
8579
|
"usage": "[options] [command]",
|
|
8487
8580
|
"arguments": [],
|
|
8488
8581
|
"options": [],
|
|
@@ -8497,7 +8590,7 @@ export const COMMAND_CATALOG = [
|
|
|
8497
8590
|
"options": [
|
|
8498
8591
|
{
|
|
8499
8592
|
"flags": "--company <slug|uid>",
|
|
8500
|
-
"description": "Company slug or cloud uid"
|
|
8593
|
+
"description": "Company slug or cloud uid; omit for a core/personal lane"
|
|
8501
8594
|
},
|
|
8502
8595
|
{
|
|
8503
8596
|
"flags": "--project <slug>",
|
|
@@ -8523,6 +8616,14 @@ export const COMMAND_CATALOG = [
|
|
|
8523
8616
|
"flags": "--account <id>",
|
|
8524
8617
|
"description": "Provider account id"
|
|
8525
8618
|
},
|
|
8619
|
+
{
|
|
8620
|
+
"flags": "--model <id>",
|
|
8621
|
+
"description": "Model id for the provider CLI"
|
|
8622
|
+
},
|
|
8623
|
+
{
|
|
8624
|
+
"flags": "--effort <level>",
|
|
8625
|
+
"description": "Effort level; claude: low|medium|high|xhigh|max, codex: minimal|low|medium|high|xhigh|max|ultra, grok: low|medium|high|xhigh"
|
|
8626
|
+
},
|
|
8526
8627
|
{
|
|
8527
8628
|
"flags": "--senior <ref>",
|
|
8528
8629
|
"description": "session:<id> | lane:<id> | user"
|
|
@@ -8538,6 +8639,10 @@ export const COMMAND_CATALOG = [
|
|
|
8538
8639
|
{
|
|
8539
8640
|
"flags": "--outpost <id>",
|
|
8540
8641
|
"description": "Run on this Outpost instead of the local host"
|
|
8642
|
+
},
|
|
8643
|
+
{
|
|
8644
|
+
"flags": "--json",
|
|
8645
|
+
"description": "JSON on stdout (always)"
|
|
8541
8646
|
}
|
|
8542
8647
|
],
|
|
8543
8648
|
"subcommands": []
|
|
@@ -8569,6 +8674,10 @@ export const COMMAND_CATALOG = [
|
|
|
8569
8674
|
{
|
|
8570
8675
|
"flags": "--senior <ref>",
|
|
8571
8676
|
"description": "Filter by senior ref"
|
|
8677
|
+
},
|
|
8678
|
+
{
|
|
8679
|
+
"flags": "--json",
|
|
8680
|
+
"description": "JSON on stdout (always)"
|
|
8572
8681
|
}
|
|
8573
8682
|
],
|
|
8574
8683
|
"subcommands": []
|
|
@@ -8586,7 +8695,12 @@ export const COMMAND_CATALOG = [
|
|
|
8586
8695
|
"variadic": false
|
|
8587
8696
|
}
|
|
8588
8697
|
],
|
|
8589
|
-
"options": [
|
|
8698
|
+
"options": [
|
|
8699
|
+
{
|
|
8700
|
+
"flags": "--json",
|
|
8701
|
+
"description": "JSON on stdout (always)"
|
|
8702
|
+
}
|
|
8703
|
+
],
|
|
8590
8704
|
"subcommands": []
|
|
8591
8705
|
},
|
|
8592
8706
|
{
|
|
@@ -8614,6 +8728,51 @@ export const COMMAND_CATALOG = [
|
|
|
8614
8728
|
{
|
|
8615
8729
|
"flags": "--story <id>",
|
|
8616
8730
|
"description": "Re-point story attribution from this message"
|
|
8731
|
+
},
|
|
8732
|
+
{
|
|
8733
|
+
"flags": "--no-compact",
|
|
8734
|
+
"description": "Skip the resume-time compaction check for this message"
|
|
8735
|
+
},
|
|
8736
|
+
{
|
|
8737
|
+
"flags": "--json",
|
|
8738
|
+
"description": "JSON on stdout (always)"
|
|
8739
|
+
}
|
|
8740
|
+
],
|
|
8741
|
+
"subcommands": []
|
|
8742
|
+
},
|
|
8743
|
+
{
|
|
8744
|
+
"name": "resume",
|
|
8745
|
+
"description": "Resume an interrupted, done or blocked lane on its recorded provider session",
|
|
8746
|
+
"aliases": [],
|
|
8747
|
+
"hidden": false,
|
|
8748
|
+
"usage": "[options] <lane-id>",
|
|
8749
|
+
"arguments": [
|
|
8750
|
+
{
|
|
8751
|
+
"name": "lane-id",
|
|
8752
|
+
"required": true,
|
|
8753
|
+
"variadic": false
|
|
8754
|
+
}
|
|
8755
|
+
],
|
|
8756
|
+
"options": [
|
|
8757
|
+
{
|
|
8758
|
+
"flags": "--text <msg>",
|
|
8759
|
+
"description": "Operator message for the resumed turn"
|
|
8760
|
+
},
|
|
8761
|
+
{
|
|
8762
|
+
"flags": "--project <slug>",
|
|
8763
|
+
"description": "Re-point project attribution from this resume"
|
|
8764
|
+
},
|
|
8765
|
+
{
|
|
8766
|
+
"flags": "--story <id>",
|
|
8767
|
+
"description": "Re-point story attribution from this resume"
|
|
8768
|
+
},
|
|
8769
|
+
{
|
|
8770
|
+
"flags": "--no-compact",
|
|
8771
|
+
"description": "Skip the resume-time compaction check for this resume"
|
|
8772
|
+
},
|
|
8773
|
+
{
|
|
8774
|
+
"flags": "--json",
|
|
8775
|
+
"description": "JSON on stdout (always)"
|
|
8617
8776
|
}
|
|
8618
8777
|
],
|
|
8619
8778
|
"subcommands": []
|
|
@@ -8639,6 +8798,10 @@ export const COMMAND_CATALOG = [
|
|
|
8639
8798
|
{
|
|
8640
8799
|
"flags": "--reason <text>",
|
|
8641
8800
|
"description": "Why the senior changed"
|
|
8801
|
+
},
|
|
8802
|
+
{
|
|
8803
|
+
"flags": "--json",
|
|
8804
|
+
"description": "JSON on stdout (always)"
|
|
8642
8805
|
}
|
|
8643
8806
|
],
|
|
8644
8807
|
"subcommands": []
|
|
@@ -8660,6 +8823,10 @@ export const COMMAND_CATALOG = [
|
|
|
8660
8823
|
{
|
|
8661
8824
|
"flags": "--tail <n>",
|
|
8662
8825
|
"description": "Last N lines"
|
|
8826
|
+
},
|
|
8827
|
+
{
|
|
8828
|
+
"flags": "--json",
|
|
8829
|
+
"description": "JSON on stdout (always)"
|
|
8663
8830
|
}
|
|
8664
8831
|
],
|
|
8665
8832
|
"subcommands": []
|
|
@@ -8677,7 +8844,12 @@ export const COMMAND_CATALOG = [
|
|
|
8677
8844
|
"variadic": false
|
|
8678
8845
|
}
|
|
8679
8846
|
],
|
|
8680
|
-
"options": [
|
|
8847
|
+
"options": [
|
|
8848
|
+
{
|
|
8849
|
+
"flags": "--json",
|
|
8850
|
+
"description": "JSON on stdout (always)"
|
|
8851
|
+
}
|
|
8852
|
+
],
|
|
8681
8853
|
"subcommands": []
|
|
8682
8854
|
},
|
|
8683
8855
|
{
|
|
@@ -8703,6 +8875,10 @@ export const COMMAND_CATALOG = [
|
|
|
8703
8875
|
{
|
|
8704
8876
|
"flags": "--recommended <text>",
|
|
8705
8877
|
"description": "Recommended option"
|
|
8878
|
+
},
|
|
8879
|
+
{
|
|
8880
|
+
"flags": "--json",
|
|
8881
|
+
"description": "JSON on stdout (always)"
|
|
8706
8882
|
}
|
|
8707
8883
|
],
|
|
8708
8884
|
"subcommands": []
|
|
@@ -8747,6 +8923,10 @@ export const COMMAND_CATALOG = [
|
|
|
8747
8923
|
{
|
|
8748
8924
|
"flags": "--status <status>",
|
|
8749
8925
|
"description": "Filter by status (pending|answered|cancelled|expired)"
|
|
8926
|
+
},
|
|
8927
|
+
{
|
|
8928
|
+
"flags": "--json",
|
|
8929
|
+
"description": "JSON on stdout (always)"
|
|
8750
8930
|
}
|
|
8751
8931
|
],
|
|
8752
8932
|
"subcommands": []
|
|
@@ -8764,7 +8944,12 @@ export const COMMAND_CATALOG = [
|
|
|
8764
8944
|
"variadic": false
|
|
8765
8945
|
}
|
|
8766
8946
|
],
|
|
8767
|
-
"options": [
|
|
8947
|
+
"options": [
|
|
8948
|
+
{
|
|
8949
|
+
"flags": "--json",
|
|
8950
|
+
"description": "JSON on stdout (always)"
|
|
8951
|
+
}
|
|
8952
|
+
],
|
|
8768
8953
|
"subcommands": []
|
|
8769
8954
|
},
|
|
8770
8955
|
{
|
|
@@ -8790,8 +8975,12 @@ export const COMMAND_CATALOG = [
|
|
|
8790
8975
|
"description": "Free-text notes stored with the body"
|
|
8791
8976
|
},
|
|
8792
8977
|
{
|
|
8793
|
-
"flags": "--freeform",
|
|
8794
|
-
"description": "
|
|
8978
|
+
"flags": "--freeform <text>",
|
|
8979
|
+
"description": "Supply a free-form answer for a question with options"
|
|
8980
|
+
},
|
|
8981
|
+
{
|
|
8982
|
+
"flags": "--json",
|
|
8983
|
+
"description": "JSON on stdout (always)"
|
|
8795
8984
|
}
|
|
8796
8985
|
],
|
|
8797
8986
|
"subcommands": []
|
|
@@ -8813,6 +9002,10 @@ export const COMMAND_CATALOG = [
|
|
|
8813
9002
|
{
|
|
8814
9003
|
"flags": "--note <text>",
|
|
8815
9004
|
"description": "Note recorded with the escalation"
|
|
9005
|
+
},
|
|
9006
|
+
{
|
|
9007
|
+
"flags": "--json",
|
|
9008
|
+
"description": "JSON on stdout (always)"
|
|
8816
9009
|
}
|
|
8817
9010
|
],
|
|
8818
9011
|
"subcommands": []
|
|
@@ -8834,6 +9027,10 @@ export const COMMAND_CATALOG = [
|
|
|
8834
9027
|
{
|
|
8835
9028
|
"flags": "--reason <text>",
|
|
8836
9029
|
"description": "Why it was cancelled"
|
|
9030
|
+
},
|
|
9031
|
+
{
|
|
9032
|
+
"flags": "--json",
|
|
9033
|
+
"description": "JSON on stdout (always)"
|
|
8837
9034
|
}
|
|
8838
9035
|
],
|
|
8839
9036
|
"subcommands": []
|
|
@@ -8860,6 +9057,10 @@ export const COMMAND_CATALOG = [
|
|
|
8860
9057
|
{
|
|
8861
9058
|
"flags": "--provider <name>",
|
|
8862
9059
|
"description": "claude | codex | grok"
|
|
9060
|
+
},
|
|
9061
|
+
{
|
|
9062
|
+
"flags": "--json",
|
|
9063
|
+
"description": "JSON on stdout (always)"
|
|
8863
9064
|
}
|
|
8864
9065
|
],
|
|
8865
9066
|
"subcommands": []
|
|
@@ -8886,6 +9087,10 @@ export const COMMAND_CATALOG = [
|
|
|
8886
9087
|
{
|
|
8887
9088
|
"flags": "--home <path>",
|
|
8888
9089
|
"description": "Account home directory"
|
|
9090
|
+
},
|
|
9091
|
+
{
|
|
9092
|
+
"flags": "--json",
|
|
9093
|
+
"description": "JSON on stdout (always)"
|
|
8889
9094
|
}
|
|
8890
9095
|
],
|
|
8891
9096
|
"subcommands": []
|
|
@@ -8908,7 +9113,12 @@ export const COMMAND_CATALOG = [
|
|
|
8908
9113
|
"variadic": false
|
|
8909
9114
|
}
|
|
8910
9115
|
],
|
|
8911
|
-
"options": [
|
|
9116
|
+
"options": [
|
|
9117
|
+
{
|
|
9118
|
+
"flags": "--json",
|
|
9119
|
+
"description": "JSON on stdout (always)"
|
|
9120
|
+
}
|
|
9121
|
+
],
|
|
8912
9122
|
"subcommands": []
|
|
8913
9123
|
},
|
|
8914
9124
|
{
|
|
@@ -8933,6 +9143,10 @@ export const COMMAND_CATALOG = [
|
|
|
8933
9143
|
{
|
|
8934
9144
|
"flags": "--reason <text>",
|
|
8935
9145
|
"description": "Why the account is disabled"
|
|
9146
|
+
},
|
|
9147
|
+
{
|
|
9148
|
+
"flags": "--json",
|
|
9149
|
+
"description": "JSON on stdout (always)"
|
|
8936
9150
|
}
|
|
8937
9151
|
],
|
|
8938
9152
|
"subcommands": []
|
|
@@ -8963,6 +9177,10 @@ export const COMMAND_CATALOG = [
|
|
|
8963
9177
|
{
|
|
8964
9178
|
"flags": "--company <slug>",
|
|
8965
9179
|
"description": "Filter by session meta company_slug"
|
|
9180
|
+
},
|
|
9181
|
+
{
|
|
9182
|
+
"flags": "--json",
|
|
9183
|
+
"description": "JSON on stdout (always)"
|
|
8966
9184
|
}
|
|
8967
9185
|
],
|
|
8968
9186
|
"subcommands": []
|
|
@@ -8980,7 +9198,101 @@ export const COMMAND_CATALOG = [
|
|
|
8980
9198
|
"variadic": false
|
|
8981
9199
|
}
|
|
8982
9200
|
],
|
|
8983
|
-
"options": [
|
|
9201
|
+
"options": [
|
|
9202
|
+
{
|
|
9203
|
+
"flags": "--json",
|
|
9204
|
+
"description": "JSON on stdout (always)"
|
|
9205
|
+
}
|
|
9206
|
+
],
|
|
9207
|
+
"subcommands": []
|
|
9208
|
+
}
|
|
9209
|
+
]
|
|
9210
|
+
},
|
|
9211
|
+
{
|
|
9212
|
+
"name": "pickup",
|
|
9213
|
+
"description": "Ingest an Outpost-dispatched lane payload and start it on this host",
|
|
9214
|
+
"aliases": [],
|
|
9215
|
+
"hidden": true,
|
|
9216
|
+
"usage": "[options]",
|
|
9217
|
+
"arguments": [],
|
|
9218
|
+
"options": [
|
|
9219
|
+
{
|
|
9220
|
+
"flags": "--payload-file <path>",
|
|
9221
|
+
"description": "Local pickup payload JSON"
|
|
9222
|
+
},
|
|
9223
|
+
{
|
|
9224
|
+
"flags": "--payload-url <url>",
|
|
9225
|
+
"description": "HTTPS URL of a staged pickup payload"
|
|
9226
|
+
},
|
|
9227
|
+
{
|
|
9228
|
+
"flags": "--json",
|
|
9229
|
+
"description": "JSON on stdout (always)"
|
|
9230
|
+
}
|
|
9231
|
+
],
|
|
9232
|
+
"subcommands": []
|
|
9233
|
+
},
|
|
9234
|
+
{
|
|
9235
|
+
"name": "reconcile",
|
|
9236
|
+
"description": "Run one machine-owned reconcile pass and exit",
|
|
9237
|
+
"aliases": [],
|
|
9238
|
+
"hidden": true,
|
|
9239
|
+
"usage": "[options] [command]",
|
|
9240
|
+
"arguments": [],
|
|
9241
|
+
"options": [
|
|
9242
|
+
{
|
|
9243
|
+
"flags": "--dry-run",
|
|
9244
|
+
"description": "Report what would change and write nothing"
|
|
9245
|
+
},
|
|
9246
|
+
{
|
|
9247
|
+
"flags": "--json",
|
|
9248
|
+
"description": "JSON on stdout (always)"
|
|
9249
|
+
}
|
|
9250
|
+
],
|
|
9251
|
+
"subcommands": [
|
|
9252
|
+
{
|
|
9253
|
+
"name": "install",
|
|
9254
|
+
"description": "Write systemd user unit and timer files (idempotent)",
|
|
9255
|
+
"aliases": [],
|
|
9256
|
+
"hidden": false,
|
|
9257
|
+
"usage": "[options]",
|
|
9258
|
+
"arguments": [],
|
|
9259
|
+
"options": [
|
|
9260
|
+
{
|
|
9261
|
+
"flags": "--systemd-root <dir>",
|
|
9262
|
+
"description": "Directory for unit files (default ~/.config/systemd/user)"
|
|
9263
|
+
},
|
|
9264
|
+
{
|
|
9265
|
+
"flags": "--enable",
|
|
9266
|
+
"description": "Enable the timer via systemctl --user"
|
|
9267
|
+
},
|
|
9268
|
+
{
|
|
9269
|
+
"flags": "--json",
|
|
9270
|
+
"description": "JSON on stdout (always)"
|
|
9271
|
+
}
|
|
9272
|
+
],
|
|
9273
|
+
"subcommands": []
|
|
9274
|
+
},
|
|
9275
|
+
{
|
|
9276
|
+
"name": "uninstall",
|
|
9277
|
+
"description": "Remove systemd user unit and timer files (idempotent)",
|
|
9278
|
+
"aliases": [],
|
|
9279
|
+
"hidden": false,
|
|
9280
|
+
"usage": "[options]",
|
|
9281
|
+
"arguments": [],
|
|
9282
|
+
"options": [
|
|
9283
|
+
{
|
|
9284
|
+
"flags": "--systemd-root <dir>",
|
|
9285
|
+
"description": "Directory for unit files"
|
|
9286
|
+
},
|
|
9287
|
+
{
|
|
9288
|
+
"flags": "--disable",
|
|
9289
|
+
"description": "Disable the timer via systemctl --user"
|
|
9290
|
+
},
|
|
9291
|
+
{
|
|
9292
|
+
"flags": "--json",
|
|
9293
|
+
"description": "JSON on stdout (always)"
|
|
9294
|
+
}
|
|
9295
|
+
],
|
|
8984
9296
|
"subcommands": []
|
|
8985
9297
|
}
|
|
8986
9298
|
]
|
|
@@ -406,6 +406,7 @@ export declare const REGISTRATION_PLAN: readonly [{
|
|
|
406
406
|
readonly parent: "program";
|
|
407
407
|
readonly module: "./commands/lanes.js";
|
|
408
408
|
readonly exportName: "registerLanesCommand";
|
|
409
|
+
readonly hidden: true;
|
|
409
410
|
}, {
|
|
410
411
|
readonly type: "registrar";
|
|
411
412
|
readonly root: "bot";
|
|
@@ -69,14 +69,15 @@ export const REGISTRATION_PLAN = [
|
|
|
69
69
|
{ type: "registrar", root: "index", parent: "program", module: "./commands/index-cmd.js", exportName: "registerIndexCommand" },
|
|
70
70
|
{ type: "registrar", root: "doctor", parent: "program", module: "./commands/doctor.js", exportName: "registerDoctorCommand" },
|
|
71
71
|
{ type: "registrar", root: "mesh", parent: "program", module: "./commands/mesh.js", exportName: "registerMeshCommand" },
|
|
72
|
-
{ type: "registrar", root: "lanes", parent: "program", module: "./commands/lanes.js", exportName: "registerLanesCommand" },
|
|
72
|
+
{ type: "registrar", root: "lanes", parent: "program", module: "./commands/lanes.js", exportName: "registerLanesCommand", hidden: true },
|
|
73
73
|
{ type: "registrar", root: "bot", parent: "program", module: "./commands/bot.js", exportName: "registerBotCommand" },
|
|
74
74
|
];
|
|
75
75
|
async function executePlan(program, steps) {
|
|
76
76
|
const parents = new Map([["program", program]]);
|
|
77
77
|
for (const step of steps) {
|
|
78
78
|
if (step.type === "group") {
|
|
79
|
-
|
|
79
|
+
const group = program.command(step.name, step.hidden ? { hidden: true } : {});
|
|
80
|
+
parents.set(step.id, group.description(step.description));
|
|
80
81
|
continue;
|
|
81
82
|
}
|
|
82
83
|
const parent = parents.get(step.parent);
|
|
@@ -87,6 +88,14 @@ async function executePlan(program, steps) {
|
|
|
87
88
|
if (!register)
|
|
88
89
|
throw new Error(`Missing command registrar '${step.exportName}' from '${step.module}'`);
|
|
89
90
|
const result = register(parent);
|
|
91
|
+
if (step.hidden) {
|
|
92
|
+
const command = result ??
|
|
93
|
+
parent.commands.find((candidate) => candidate.name() === step.root);
|
|
94
|
+
if (!command) {
|
|
95
|
+
throw new Error(`Command registrar '${step.exportName}' did not register hidden command '${step.root}'`);
|
|
96
|
+
}
|
|
97
|
+
command._hidden = true;
|
|
98
|
+
}
|
|
90
99
|
if (step.result) {
|
|
91
100
|
if (!result)
|
|
92
101
|
throw new Error(`Command registrar '${step.exportName}' did not return '${step.result}'`);
|
|
@@ -130,6 +130,18 @@ export interface CompanyAgentView {
|
|
|
130
130
|
};
|
|
131
131
|
[key: string]: unknown;
|
|
132
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* STATUS column for `hq agents list`.
|
|
135
|
+
*
|
|
136
|
+
* `agentStatus` is the agent's own stored runtime status and is NOT rewritten
|
|
137
|
+
* when a teardown starts — an agent that never finished provisioning and is
|
|
138
|
+
* now being removed keeps reading `provisioning` until the teardown completes
|
|
139
|
+
* and archives it. Observed live on liverecover/sean 2026-09-21: a removal that
|
|
140
|
+
* stalled on an object-locked vault bucket sat in the roster as `provisioning`,
|
|
141
|
+
* so the operator believed the removal had never been accepted. The roster
|
|
142
|
+
* already carries `setupPhase`, so prefer it whenever a teardown is in flight.
|
|
143
|
+
*/
|
|
144
|
+
export declare function rosterStatusLabel(agent: CompanyAgentView): string;
|
|
133
145
|
export interface ProfilePatch {
|
|
134
146
|
displayName?: string;
|
|
135
147
|
title?: string;
|
package/dist/commands/agents.js
CHANGED
|
@@ -216,6 +216,24 @@ export class AgentsHttpError extends Error {
|
|
|
216
216
|
this.agentCreatePlanLimit = agentCreatePlanLimit;
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* STATUS column for `hq agents list`.
|
|
221
|
+
*
|
|
222
|
+
* `agentStatus` is the agent's own stored runtime status and is NOT rewritten
|
|
223
|
+
* when a teardown starts — an agent that never finished provisioning and is
|
|
224
|
+
* now being removed keeps reading `provisioning` until the teardown completes
|
|
225
|
+
* and archives it. Observed live on liverecover/sean 2026-09-21: a removal that
|
|
226
|
+
* stalled on an object-locked vault bucket sat in the roster as `provisioning`,
|
|
227
|
+
* so the operator believed the removal had never been accepted. The roster
|
|
228
|
+
* already carries `setupPhase`, so prefer it whenever a teardown is in flight.
|
|
229
|
+
*/
|
|
230
|
+
export function rosterStatusLabel(agent) {
|
|
231
|
+
if (agent.setupPhase === "deprovisioning")
|
|
232
|
+
return "removing";
|
|
233
|
+
if (agent.setupPhase === "deprovisioned")
|
|
234
|
+
return "removed";
|
|
235
|
+
return agent.agentStatus ?? "";
|
|
236
|
+
}
|
|
219
237
|
/**
|
|
220
238
|
* Authenticated JSON round-trip against the agents control plane. Throws
|
|
221
239
|
* `AgentsHttpError` on any non-2xx (never swallows — hq-never-swallow-errors),
|
|
@@ -466,11 +484,37 @@ function signInProviderName(url) {
|
|
|
466
484
|
return "Claude";
|
|
467
485
|
return "your provider";
|
|
468
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* Brain slot a device sign-in URL belongs to, or null when the provider has no
|
|
489
|
+
* per-brain slot (Claude) or the host is unknown.
|
|
490
|
+
*/
|
|
491
|
+
function signInBrainSlot(url) {
|
|
492
|
+
const provider = signInProviderName(url);
|
|
493
|
+
if (provider === "Grok")
|
|
494
|
+
return "grok";
|
|
495
|
+
if (provider === "Codex")
|
|
496
|
+
return "codex";
|
|
497
|
+
return null;
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* True when the box probe already reports that brain as signed in. A device
|
|
501
|
+
* pairing file can outlive the sign-in it started, so the probe — not the
|
|
502
|
+
* leftover code — decides whether a human still has work to do.
|
|
503
|
+
*/
|
|
504
|
+
function brainAlreadySignedIn(status, url) {
|
|
505
|
+
const slot = signInBrainSlot(url);
|
|
506
|
+
if (!slot)
|
|
507
|
+
return false;
|
|
508
|
+
const brains = recordValue(recordValue(status.agent)?.brains);
|
|
509
|
+
return brains?.[slot] === "signed-in";
|
|
510
|
+
}
|
|
469
511
|
function currentDeviceSignInAction(status) {
|
|
470
512
|
const pairing = recordValue(status.pairing);
|
|
471
513
|
const url = safeActionUrl(pairing?.url);
|
|
472
514
|
if (!url)
|
|
473
515
|
return null;
|
|
516
|
+
if (brainAlreadySignedIn(status, url))
|
|
517
|
+
return null;
|
|
474
518
|
const rawCode = nonEmptyString(pairing?.code);
|
|
475
519
|
const code = rawCode && /^[A-Z0-9]{4,8}-[A-Z0-9]{4,8}$/i.test(rawCode)
|
|
476
520
|
? rawCode
|
|
@@ -1370,7 +1414,7 @@ export function registerAgentsCommand(program) {
|
|
|
1370
1414
|
}
|
|
1371
1415
|
const nameW = Math.max(4, ...roster.map((a) => (a.name ?? "").length));
|
|
1372
1416
|
const slugW = Math.max(4, ...roster.map((a) => (a.slug ?? "").length));
|
|
1373
|
-
const statusW = Math.max(6, ...roster.map((a) => (a
|
|
1417
|
+
const statusW = Math.max(6, ...roster.map((a) => rosterStatusLabel(a).length));
|
|
1374
1418
|
const modelW = Math.max(5, ...roster.map((a) => (a.codexModel ?? "").length));
|
|
1375
1419
|
console.log(chalk.bold([
|
|
1376
1420
|
"NAME".padEnd(nameW),
|
|
@@ -1383,7 +1427,7 @@ export function registerAgentsCommand(program) {
|
|
|
1383
1427
|
console.log([
|
|
1384
1428
|
(a.name ?? "").padEnd(nameW),
|
|
1385
1429
|
(a.slug ?? "").padEnd(slugW),
|
|
1386
|
-
(a
|
|
1430
|
+
rosterStatusLabel(a).padEnd(statusW),
|
|
1387
1431
|
(a.codexModel ?? "").padEnd(modelW),
|
|
1388
1432
|
a.uid,
|
|
1389
1433
|
].join(" "));
|