@join-pantheon/cli 0.29.1 → 0.30.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.
Files changed (46) hide show
  1. package/README.md +45 -22
  2. package/bin/pantheon.js +12 -0
  3. package/dist/accounts.js +151 -26
  4. package/dist/agents.js +197 -14
  5. package/dist/claude-confine.js +283 -0
  6. package/dist/cli.js +725 -120
  7. package/dist/client.js +37 -2
  8. package/dist/command-state.js +79 -0
  9. package/dist/config.js +211 -10
  10. package/dist/doctor.js +103 -13
  11. package/dist/grants.js +1 -1
  12. package/dist/history-view.js +2 -1
  13. package/dist/home-guard.js +210 -0
  14. package/dist/hooks-install.js +2 -1
  15. package/dist/identity.js +24 -0
  16. package/dist/install.js +76 -26
  17. package/dist/kiro-files.js +2 -2
  18. package/dist/ledger.js +111 -28
  19. package/dist/machine.js +494 -32
  20. package/dist/mcp-supervisor.js +25 -6
  21. package/dist/mcp-windows.js +47 -25
  22. package/dist/mcp.js +25 -10
  23. package/dist/network.js +39 -8
  24. package/dist/notify.js +17 -6
  25. package/dist/pending.js +8 -14
  26. package/dist/persona.js +21 -0
  27. package/dist/profile.js +4 -1
  28. package/dist/quickstart.js +82 -14
  29. package/dist/reads.js +30 -0
  30. package/dist/refusal.js +14 -1
  31. package/dist/relay.js +1143 -180
  32. package/dist/roster-file.js +169 -23
  33. package/dist/run-failure.js +83 -3
  34. package/dist/secret-guard.js +141 -0
  35. package/dist/service.js +84 -34
  36. package/dist/setup-guide.js +28 -9
  37. package/dist/spend.js +6 -2
  38. package/dist/store.js +94 -10
  39. package/dist/text-file.js +74 -0
  40. package/dist/tray.js +11 -2
  41. package/dist/update-check.js +2 -0
  42. package/dist/which.js +69 -12
  43. package/dist/worker-policy.js +137 -3
  44. package/dist/worker.js +702 -81
  45. package/helper/macos/menubar.swift +15 -1
  46. package/package.json +2 -2
@@ -119,7 +119,7 @@ func run(_ launchPath: String, _ args: [String], timeout: Double = 10) -> (out:
119
119
 
120
120
  func fetchState() -> TrayState {
121
121
  var s = TrayState()
122
- guard let r = run(pantheonBin, ["tray-status"]), r.code == 0,
122
+ guard let r = run(pantheonBin, ["tray-status"], timeout: 20), r.code == 0,
123
123
  let data = r.out.data(using: .utf8),
124
124
  let j = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { return s }
125
125
  s.reachable = true
@@ -477,12 +477,26 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
477
477
  }
478
478
  }
479
479
 
480
+ /// Consecutive checks that did not come back (timed out, or did not parse).
481
+ private var missedChecks = 0
480
482
  @objc func refresh() {
481
483
  guard !refreshing else { return }
482
484
  refreshing = true
483
485
  DispatchQueue.global().async {
484
486
  let next = fetchState()
485
487
  DispatchQueue.main.async {
488
+ // A check that did not come back is not news that the relay is down: on a
489
+ // busy machine `pantheon tray-status` can take longer than its limit, and
490
+ // the mark flipped to the slashed "unreachable" state with a "!" — while
491
+ // the relay, the team and every decision were fine. What was last known is
492
+ // kept through two misses; only a third in a row is shown as "unable to
493
+ // check". A check that did come back always wins.
494
+ if !next.reachable && self.hasLoaded && self.state.reachable && self.missedChecks < 2 {
495
+ self.missedChecks += 1
496
+ self.refreshing = false
497
+ return
498
+ }
499
+ self.missedChecks = next.reachable ? 0 : self.missedChecks + 1
486
500
  self.state = next
487
501
  self.hasLoaded = true
488
502
  self.refreshing = false
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@join-pantheon/cli",
3
- "version": "0.29.1",
3
+ "version": "0.30.0",
4
4
  "description": "Let your coding agent collaborate directly with your teammates' agents — ask, agree an interface, and deliver, without a human relaying messages.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "pantheon": "bin/pantheon.js"
8
8
  },
9
9
  "engines": {
10
- "node": ">=22"
10
+ "node": ">=22.13"
11
11
  },
12
12
  "scripts": {
13
13
  "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p .",