@viewportai/daemon 0.1.0 → 0.2.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 (136) hide show
  1. package/dist/cli/commands.d.ts +1 -0
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +1 -0
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/daemon-lifecycle.d.ts +3 -0
  6. package/dist/cli/daemon-lifecycle.d.ts.map +1 -1
  7. package/dist/cli/daemon-lifecycle.js +11 -1
  8. package/dist/cli/daemon-lifecycle.js.map +1 -1
  9. package/dist/cli/daemon-settings.d.ts.map +1 -1
  10. package/dist/cli/daemon-settings.js +115 -3
  11. package/dist/cli/daemon-settings.js.map +1 -1
  12. package/dist/cli/lifecycle-commands.d.ts.map +1 -1
  13. package/dist/cli/lifecycle-commands.js +2 -0
  14. package/dist/cli/lifecycle-commands.js.map +1 -1
  15. package/dist/cli/remote-commands.d.ts +3 -0
  16. package/dist/cli/remote-commands.d.ts.map +1 -0
  17. package/dist/cli/remote-commands.js +236 -0
  18. package/dist/cli/remote-commands.js.map +1 -0
  19. package/dist/cli/setup-command.d.ts.map +1 -1
  20. package/dist/cli/setup-command.js +4 -1
  21. package/dist/cli/setup-command.js.map +1 -1
  22. package/dist/cli/supervisor-protocol.d.ts +12 -0
  23. package/dist/cli/supervisor-protocol.d.ts.map +1 -1
  24. package/dist/cli/supervisor.d.ts.map +1 -1
  25. package/dist/cli/supervisor.js +30 -0
  26. package/dist/cli/supervisor.js.map +1 -1
  27. package/dist/core/config-schema.d.ts +16 -0
  28. package/dist/core/config-schema.d.ts.map +1 -1
  29. package/dist/core/config-schema.js +12 -0
  30. package/dist/core/config-schema.js.map +1 -1
  31. package/dist/core/config.d.ts +23 -0
  32. package/dist/core/config.d.ts.map +1 -1
  33. package/dist/core/config.js +46 -3
  34. package/dist/core/config.js.map +1 -1
  35. package/dist/core/session-state-file.d.ts.map +1 -1
  36. package/dist/core/session-state-file.js +3 -1
  37. package/dist/core/session-state-file.js.map +1 -1
  38. package/dist/core/types.d.ts +7 -0
  39. package/dist/core/types.d.ts.map +1 -1
  40. package/dist/hooks/installers/claude.js +4 -1
  41. package/dist/hooks/installers/claude.js.map +1 -1
  42. package/dist/hooks/router.d.ts.map +1 -1
  43. package/dist/hooks/router.js +11 -0
  44. package/dist/hooks/router.js.map +1 -1
  45. package/dist/hooks/supervision.d.ts +2 -0
  46. package/dist/hooks/supervision.d.ts.map +1 -1
  47. package/dist/hooks/supervision.js +12 -0
  48. package/dist/hooks/supervision.js.map +1 -1
  49. package/dist/index.js +5 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/plugins/loader.d.ts.map +1 -1
  52. package/dist/plugins/loader.js +14 -0
  53. package/dist/plugins/loader.js.map +1 -1
  54. package/dist/relay/bridge-backoff.d.ts +3 -0
  55. package/dist/relay/bridge-backoff.d.ts.map +1 -0
  56. package/dist/relay/bridge-backoff.js +10 -0
  57. package/dist/relay/bridge-backoff.js.map +1 -0
  58. package/dist/relay/bridge-constants.d.ts +12 -0
  59. package/dist/relay/bridge-constants.d.ts.map +1 -0
  60. package/dist/relay/bridge-constants.js +12 -0
  61. package/dist/relay/bridge-constants.js.map +1 -0
  62. package/dist/relay/bridge-crypto.d.ts +18 -0
  63. package/dist/relay/bridge-crypto.d.ts.map +1 -0
  64. package/dist/relay/bridge-crypto.js +63 -0
  65. package/dist/relay/bridge-crypto.js.map +1 -0
  66. package/dist/relay/bridge-errors.d.ts +6 -0
  67. package/dist/relay/bridge-errors.d.ts.map +1 -0
  68. package/dist/relay/bridge-errors.js +9 -0
  69. package/dist/relay/bridge-errors.js.map +1 -0
  70. package/dist/relay/bridge-jwt.d.ts +18 -0
  71. package/dist/relay/bridge-jwt.d.ts.map +1 -0
  72. package/dist/relay/bridge-jwt.js +130 -0
  73. package/dist/relay/bridge-jwt.js.map +1 -0
  74. package/dist/relay/bridge-key-exchange.d.ts +49 -0
  75. package/dist/relay/bridge-key-exchange.d.ts.map +1 -0
  76. package/dist/relay/bridge-key-exchange.js +234 -0
  77. package/dist/relay/bridge-key-exchange.js.map +1 -0
  78. package/dist/relay/bridge-network.d.ts +12 -0
  79. package/dist/relay/bridge-network.d.ts.map +1 -0
  80. package/dist/relay/bridge-network.js +90 -0
  81. package/dist/relay/bridge-network.js.map +1 -0
  82. package/dist/relay/bridge-noise-v3.d.ts +74 -0
  83. package/dist/relay/bridge-noise-v3.d.ts.map +1 -0
  84. package/dist/relay/bridge-noise-v3.js +403 -0
  85. package/dist/relay/bridge-noise-v3.js.map +1 -0
  86. package/dist/relay/daemon-relay-bridge.d.ts +93 -0
  87. package/dist/relay/daemon-relay-bridge.d.ts.map +1 -0
  88. package/dist/relay/daemon-relay-bridge.js +1005 -0
  89. package/dist/relay/daemon-relay-bridge.js.map +1 -0
  90. package/dist/server/auth.d.ts.map +1 -1
  91. package/dist/server/auth.js +9 -7
  92. package/dist/server/auth.js.map +1 -1
  93. package/dist/server/http-server.d.ts +6 -0
  94. package/dist/server/http-server.d.ts.map +1 -1
  95. package/dist/server/http-server.js +102 -15
  96. package/dist/server/http-server.js.map +1 -1
  97. package/dist/server/pairing-offers.d.ts +2 -1
  98. package/dist/server/pairing-offers.d.ts.map +1 -1
  99. package/dist/server/pairing-offers.js +438 -204
  100. package/dist/server/pairing-offers.js.map +1 -1
  101. package/dist/server/ring-buffer.d.ts +48 -7
  102. package/dist/server/ring-buffer.d.ts.map +1 -1
  103. package/dist/server/ring-buffer.js +387 -14
  104. package/dist/server/ring-buffer.js.map +1 -1
  105. package/dist/server/security.d.ts.map +1 -1
  106. package/dist/server/security.js +5 -1
  107. package/dist/server/security.js.map +1 -1
  108. package/dist/server/ws-command-handlers.d.ts.map +1 -1
  109. package/dist/server/ws-command-handlers.js +18 -6
  110. package/dist/server/ws-command-handlers.js.map +1 -1
  111. package/dist/server/ws-daemon-event-bridge.d.ts.map +1 -1
  112. package/dist/server/ws-daemon-event-bridge.js +14 -2
  113. package/dist/server/ws-daemon-event-bridge.js.map +1 -1
  114. package/dist/server/ws-server.d.ts.map +1 -1
  115. package/dist/server/ws-server.js +26 -3
  116. package/dist/server/ws-server.js.map +1 -1
  117. package/dist/startup-relay-security.d.ts +3 -0
  118. package/dist/startup-relay-security.d.ts.map +1 -0
  119. package/dist/startup-relay-security.js +61 -0
  120. package/dist/startup-relay-security.js.map +1 -0
  121. package/dist/startup-session-persistence.d.ts +7 -0
  122. package/dist/startup-session-persistence.d.ts.map +1 -0
  123. package/dist/startup-session-persistence.js +72 -0
  124. package/dist/startup-session-persistence.js.map +1 -0
  125. package/dist/startup.d.ts.map +1 -1
  126. package/dist/startup.js +115 -65
  127. package/dist/startup.js.map +1 -1
  128. package/dist/tracking/git-tracker.d.ts +4 -0
  129. package/dist/tracking/git-tracker.d.ts.map +1 -1
  130. package/dist/tracking/git-tracker.js +80 -15
  131. package/dist/tracking/git-tracker.js.map +1 -1
  132. package/docs/configuration.md +63 -5
  133. package/docs/relay-noise-conformance-vectors.json +41 -0
  134. package/docs/relay-noise-v3-conformance-vectors.json +50 -0
  135. package/docs/security.md +3 -2
  136. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "generatedAt": "2026-03-04",
4
+ "notes": "Deterministic vectors for relay handshake profile validation (noise-ik / noise-ikpsk2).",
5
+ "vectors": [
6
+ {
7
+ "id": "ik-basic",
8
+ "profile": "noise-ik",
9
+ "requestId": "kex-vector-ik-1",
10
+ "clientPrivateKey": "ERERERERERERERERERERERERERERERERERERERERERE",
11
+ "clientPublicKey": "BAIX5hfwtkQ5KCePlpmeaaI6TywVK99tbN9m5bgCgtTtGUp968uXcS0t2jyoWqh2Wlb0X8dYWZZS8ol8ZTBuV5Q",
12
+ "daemonPrivateKey": "IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI",
13
+ "daemonPublicKey": "BNZak5d8qj0bCBhS_1ennkZfFmBXcwS66tUF3TpIWJzzUBheiVNy32Ih6joTdVfkc_3bZ1XwW9UHw8Uz_OnJEoU",
14
+ "clientNonce": "ABEiM0RVZneImaq7zN3u_w",
15
+ "daemonNonce": "_-7dzLuqmYh3ZlVEMyIRAA",
16
+ "sessionId": "rs_vector_ik_001",
17
+ "epoch": 1,
18
+ "expectedClientProof": "V1-7QcRCwkCgpUZdz92mmA",
19
+ "expectedSessionKey": "2Bw_9xNEr7U2bshJajaT6a63Bm77dZmgmGiPw9fbS58",
20
+ "expectedDaemonProof": "m15GgIvhB0WjKzB3oZU3Kw"
21
+ },
22
+ {
23
+ "id": "ikpsk2-basic",
24
+ "profile": "noise-ikpsk2",
25
+ "requestId": "kex-vector-ikpsk2-1",
26
+ "clientPrivateKey": "MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM",
27
+ "clientPublicKey": "BFGnWAgziY6hsYPL1zUKQJkHjG7xweGOlwzXaDA18l59ARBSJxKwtafP8IFoVIaYSpTmgx7axG5zYPqdg0p6gaE",
28
+ "daemonPrivateKey": "REREREREREREREREREREREREREREREREREREREREREQ",
29
+ "daemonPublicKey": "BFs2iQ2svXyalrt0oe4os9LXW3LgmiDvJc-Ob9ip8DUNDhS-2NRoKjTYNTi9_1uW6JpmZuwNtXRdAvoSEAct91o",
30
+ "pairingSecret": "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU",
31
+ "clientNonce": "ECEyQ1RldoeYqbq8vdzt_g",
32
+ "daemonNonce": "ASNFZ4mrze_-3LqYdlQyEA",
33
+ "sessionId": "rs_vector_ikpsk2_001",
34
+ "previousSessionId": "rs_prev_ikpsk2_000",
35
+ "epoch": 2,
36
+ "expectedClientProof": "gxbCj7oTAia0k6YEW5T2PA",
37
+ "expectedSessionKey": "vm3VqaI4W7Ck1qvRYSFQzK4qXr8phYC8D6pNVuAmRmI",
38
+ "expectedDaemonProof": "vLWX1F1A5AIvXwS9E9B3wA"
39
+ }
40
+ ]
41
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "notes": "Deterministic canonical Noise v3 vectors (IK + IKpsk2 over P256/AESGCM/SHA256).",
4
+ "daemonIdentity": {
5
+ "publicKey": "BEjeT9qtvf7dbK9yPDuvSgIT_gIuC9_8DdJNtM6yu70uaCxRVd08fy2qBFGWRo_HfQ_Ic8IWNb0I-PaM9El6Bxw",
6
+ "privateKey": "1V4lEUVCsNxmJrw8SKKiloYegBmQXbjg6ULOYaCbExA"
7
+ },
8
+ "clientDeterministicKeys": {
9
+ "staticPrivateKey": "v4lfwcrqWG-_LamDGhdRAKpVCdMdZH9AYp4yVI7pZgs",
10
+ "ephemeralPrivateKey": "Y4yFYdFFptSiqrsWLNb0BF8FujQ4Gp54yOiuUO2wnSw"
11
+ },
12
+ "daemonDeterministicEphemeralPrivateKey": "xwtFlQfRSqj7TfIfVp2cPcD2TrrzTZc-5E61gdW4XjM",
13
+ "vectors": [
14
+ {
15
+ "id": "noise-v3-ik-basic",
16
+ "profile": "noise-ik",
17
+ "requestId": "kex-v3-vector-1",
18
+ "sessionId": "rs_v3_ik_001",
19
+ "epoch": 1,
20
+ "init": {
21
+ "clientEphemeralPublicKey": "BHErztyDPFhPO3RxajbwuTwrAEesaf3--FHDHImukoCoxQIw6ew2a-qL-c6dnQh2bOvKeVgoJTZT2Zx_PJLD0s4",
22
+ "encryptedClientStatic": "9K4kr_VZJmhalGOiYr_IpvLDm0PEp0jDZtSd6YxdOpuNBD1vGD4C1-Pxv6MBQtYJ6I_9lw6e2qW9sIE2ySIhFFFrC97k2e2tO0wc8c_gZleu"
23
+ },
24
+ "response": {
25
+ "daemonEphemeralPublicKey": "BCFLYWYVAiqwpxnxZm11SNq3fv1hFPtla1C9kBqczCEtnAQbFDtdcg9SzT8ko_YoWCBzcEc-XYe3LVTtDVXTWmk",
26
+ "encryptedMetadata": "kh17Tgmt2gdzgTzpZVQHYr7DJ7FmU8Kx-iF0cSoCilnADs4JMDgnHQ71P4aP4m47y54W_VEK",
27
+ "proof": "EsL1rhQdgvL_2AoOh8BWMxNX4VShoDtt3YRlG2HHbxs"
28
+ },
29
+ "sessionKey": "CtfvOunKO94iXJLzudF7smlvEG5lkoxvMh3fvFRVehw"
30
+ },
31
+ {
32
+ "id": "noise-v3-ikpsk2-basic",
33
+ "profile": "noise-ikpsk2",
34
+ "requestId": "kex-v3-vector-1",
35
+ "pairingSecret": "uMcC7ZiGjk2YUNTDxbfbvhRHAQ59gVld9ip-w6-ho_g",
36
+ "sessionId": "rs_v3_ikpsk2_001",
37
+ "epoch": 1,
38
+ "init": {
39
+ "clientEphemeralPublicKey": "BHErztyDPFhPO3RxajbwuTwrAEesaf3--FHDHImukoCoxQIw6ew2a-qL-c6dnQh2bOvKeVgoJTZT2Zx_PJLD0s4",
40
+ "encryptedClientStatic": "FrVP0AVl8_uQgoHC2KW_7cmtwkv1oSxYam82utmGOxYduS0tjBU4UZQXv-scDEojEsrhkgQwSRoa7gLR97PIfswEjmS9vHlFtiYoRkdzPlMy"
41
+ },
42
+ "response": {
43
+ "daemonEphemeralPublicKey": "BCFLYWYVAiqwpxnxZm11SNq3fv1hFPtla1C9kBqczCEtnAQbFDtdcg9SzT8ko_YoWCBzcEc-XYe3LVTtDVXTWmk",
44
+ "encryptedMetadata": "hd-OUzTSqxTDw0_o3gRF0VbCU7IUDX9aDbQ9WFisV1oRLvZkQp7mPeFDakxNTzappXSiG5IaU2U_vA",
45
+ "proof": "zx6bUnDrHuanKjH9XBOnyx_m-sVfuL6j_esaWMJS9H0"
46
+ },
47
+ "sessionKey": "bgjWrm-nTtATWBYP1ph0wfFbZSlSbLhOQcCvR8PjrOA"
48
+ }
49
+ ]
50
+ }
package/docs/security.md CHANGED
@@ -19,8 +19,9 @@
19
19
  - Host header allowlist enforcement.
20
20
  - Origin allowlist enforcement.
21
21
  - Token auth (`~/.viewport/auth-token`) for protected API/WS.
22
- - WS auth supports `?token=` query fallback for browser compatibility.
23
- - Tradeoff: query tokens can leak via logs/history.
22
+ - WS auth supports `?token=` query fallback only in `local` profile by default.
23
+ - In `lan`/`relay`, query-token auth is disabled unless `VIEWPORT_ALLOW_QUERY_TOKEN_NON_LOCAL=1`.
24
+ - Tradeoff: query tokens can leak via logs/history, so use `Authorization: Bearer ...` whenever possible.
24
25
  - Preferred path is `Authorization: Bearer ...`.
25
26
  - WebSocket payload limits, backpressure handling, and rate limiting.
26
27
  - Path traversal protection for file APIs.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viewportai/daemon",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Viewport daemon — supervision and orchestration layer for AI coding agents",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",