@getrift/rift 0.1.0-beta.17 → 0.1.0-beta.19

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 (156) hide show
  1. package/dist/src/capture/auto-repair.d.ts +110 -0
  2. package/dist/src/capture/auto-repair.d.ts.map +1 -0
  3. package/dist/src/capture/auto-repair.js +269 -0
  4. package/dist/src/capture/auto-repair.js.map +1 -0
  5. package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -1
  6. package/dist/src/capture/codex-cli-triage-provider.js +4 -3
  7. package/dist/src/capture/codex-cli-triage-provider.js.map +1 -1
  8. package/dist/src/capture/recover-quarantine.d.ts +11 -0
  9. package/dist/src/capture/recover-quarantine.d.ts.map +1 -1
  10. package/dist/src/capture/recover-quarantine.js +30 -4
  11. package/dist/src/capture/recover-quarantine.js.map +1 -1
  12. package/dist/src/cli/commands/capture-recover.d.ts.map +1 -1
  13. package/dist/src/cli/commands/capture-recover.js +7 -0
  14. package/dist/src/cli/commands/capture-recover.js.map +1 -1
  15. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  16. package/dist/src/cli/commands/capture.js +48 -1
  17. package/dist/src/cli/commands/capture.js.map +1 -1
  18. package/dist/src/cli/commands/feedback.d.ts +12 -0
  19. package/dist/src/cli/commands/feedback.d.ts.map +1 -1
  20. package/dist/src/cli/commands/feedback.js +87 -2
  21. package/dist/src/cli/commands/feedback.js.map +1 -1
  22. package/dist/src/cli/commands/onboard.d.ts +68 -1
  23. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  24. package/dist/src/cli/commands/onboard.js +415 -54
  25. package/dist/src/cli/commands/onboard.js.map +1 -1
  26. package/dist/src/cli/commands/search.d.ts +2 -0
  27. package/dist/src/cli/commands/search.d.ts.map +1 -1
  28. package/dist/src/cli/commands/search.js +6 -0
  29. package/dist/src/cli/commands/search.js.map +1 -1
  30. package/dist/src/cli/feedback/feedback-config.d.ts +46 -0
  31. package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -1
  32. package/dist/src/cli/feedback/feedback-config.js +130 -4
  33. package/dist/src/cli/feedback/feedback-config.js.map +1 -1
  34. package/dist/src/cli/feedback/feedback-history.d.ts +7 -0
  35. package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -1
  36. package/dist/src/cli/feedback/feedback-history.js +39 -9
  37. package/dist/src/cli/feedback/feedback-history.js.map +1 -1
  38. package/dist/src/cli/feedback/feedback-payload.d.ts +22 -1
  39. package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -1
  40. package/dist/src/cli/feedback/feedback-payload.js.map +1 -1
  41. package/dist/src/cli/feedback/feedback-relay.d.ts +2 -2
  42. package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -1
  43. package/dist/src/cli/feedback/feedback-relay.js.map +1 -1
  44. package/dist/src/cli/feedback/invite.d.ts +17 -0
  45. package/dist/src/cli/feedback/invite.d.ts.map +1 -0
  46. package/dist/src/cli/feedback/invite.js +67 -0
  47. package/dist/src/cli/feedback/invite.js.map +1 -0
  48. package/dist/src/cli/feedback/relay-secret-store.d.ts +32 -0
  49. package/dist/src/cli/feedback/relay-secret-store.d.ts.map +1 -0
  50. package/dist/src/cli/feedback/relay-secret-store.js +137 -0
  51. package/dist/src/cli/feedback/relay-secret-store.js.map +1 -0
  52. package/dist/src/cli/http-client.d.ts +17 -4
  53. package/dist/src/cli/http-client.d.ts.map +1 -1
  54. package/dist/src/cli/http-client.js +18 -7
  55. package/dist/src/cli/http-client.js.map +1 -1
  56. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  57. package/dist/src/cli/status/friend-header.js +75 -23
  58. package/dist/src/cli/status/friend-header.js.map +1 -1
  59. package/dist/src/config/schema.d.ts +79 -0
  60. package/dist/src/config/schema.d.ts.map +1 -1
  61. package/dist/src/config/schema.js +44 -0
  62. package/dist/src/config/schema.js.map +1 -1
  63. package/dist/src/diagnostics/codex-preflight.d.ts +33 -0
  64. package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -0
  65. package/dist/src/diagnostics/codex-preflight.js +63 -0
  66. package/dist/src/diagnostics/codex-preflight.js.map +1 -0
  67. package/dist/src/diagnostics/doctor.d.ts +1 -1
  68. package/dist/src/diagnostics/doctor.d.ts.map +1 -1
  69. package/dist/src/diagnostics/doctor.js +69 -20
  70. package/dist/src/diagnostics/doctor.js.map +1 -1
  71. package/dist/src/diagnostics/repair-prompt.d.ts.map +1 -1
  72. package/dist/src/diagnostics/repair-prompt.js +10 -1
  73. package/dist/src/diagnostics/repair-prompt.js.map +1 -1
  74. package/dist/src/jobs/handlers/compact.js +4 -0
  75. package/dist/src/jobs/handlers/compact.js.map +1 -1
  76. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  77. package/dist/src/jobs/handlers/ingest.js +53 -3
  78. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  79. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  80. package/dist/src/jobs/handlers/reconcile.js +7 -0
  81. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  82. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  83. package/dist/src/jobs/handlers/save.js +10 -0
  84. package/dist/src/jobs/handlers/save.js.map +1 -1
  85. package/dist/src/jobs/worker-entry.d.ts.map +1 -1
  86. package/dist/src/jobs/worker-entry.js +33 -7
  87. package/dist/src/jobs/worker-entry.js.map +1 -1
  88. package/dist/src/jobs/worker-process.d.ts +11 -0
  89. package/dist/src/jobs/worker-process.d.ts.map +1 -1
  90. package/dist/src/jobs/worker-process.js +37 -4
  91. package/dist/src/jobs/worker-process.js.map +1 -1
  92. package/dist/src/main.js +122 -42
  93. package/dist/src/main.js.map +1 -1
  94. package/dist/src/mcp/tools/search.d.ts.map +1 -1
  95. package/dist/src/mcp/tools/search.js +1 -0
  96. package/dist/src/mcp/tools/search.js.map +1 -1
  97. package/dist/src/observability/onboarding-metric.d.ts +16 -0
  98. package/dist/src/observability/onboarding-metric.d.ts.map +1 -1
  99. package/dist/src/observability/onboarding-metric.js +8 -1
  100. package/dist/src/observability/onboarding-metric.js.map +1 -1
  101. package/dist/src/providers/basic-metadata-extraction.d.ts +60 -0
  102. package/dist/src/providers/basic-metadata-extraction.d.ts.map +1 -0
  103. package/dist/src/providers/basic-metadata-extraction.js +114 -0
  104. package/dist/src/providers/basic-metadata-extraction.js.map +1 -0
  105. package/dist/src/providers/codex-cli-metadata-extraction.d.ts +1 -0
  106. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -1
  107. package/dist/src/providers/codex-cli-metadata-extraction.js +6 -2
  108. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -1
  109. package/dist/src/providers/codex-cli-model.d.ts +61 -0
  110. package/dist/src/providers/codex-cli-model.d.ts.map +1 -0
  111. package/dist/src/providers/codex-cli-model.js +194 -0
  112. package/dist/src/providers/codex-cli-model.js.map +1 -0
  113. package/dist/src/providers/codex-cli-runner.d.ts +25 -0
  114. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
  115. package/dist/src/providers/codex-cli-runner.js +78 -12
  116. package/dist/src/providers/codex-cli-runner.js.map +1 -1
  117. package/dist/src/providers/conversation-generation.d.ts.map +1 -1
  118. package/dist/src/providers/conversation-generation.js +43 -6
  119. package/dist/src/providers/conversation-generation.js.map +1 -1
  120. package/dist/src/providers/placeholder-embed.d.ts +56 -0
  121. package/dist/src/providers/placeholder-embed.d.ts.map +1 -0
  122. package/dist/src/providers/placeholder-embed.js +64 -0
  123. package/dist/src/providers/placeholder-embed.js.map +1 -0
  124. package/dist/src/retrieval/compact.d.ts +1 -0
  125. package/dist/src/retrieval/compact.d.ts.map +1 -1
  126. package/dist/src/retrieval/compact.js +4 -0
  127. package/dist/src/retrieval/compact.js.map +1 -1
  128. package/dist/src/retrieval/lexical.d.ts.map +1 -1
  129. package/dist/src/retrieval/lexical.js +19 -3
  130. package/dist/src/retrieval/lexical.js.map +1 -1
  131. package/dist/src/retrieval/vector.d.ts.map +1 -1
  132. package/dist/src/retrieval/vector.js +11 -2
  133. package/dist/src/retrieval/vector.js.map +1 -1
  134. package/dist/src/server/app.d.ts.map +1 -1
  135. package/dist/src/server/app.js +26 -17
  136. package/dist/src/server/app.js.map +1 -1
  137. package/dist/src/server/routes/conversations-search.d.ts.map +1 -1
  138. package/dist/src/server/routes/conversations-search.js +28 -3
  139. package/dist/src/server/routes/conversations-search.js.map +1 -1
  140. package/dist/src/server/routes/friend-status.d.ts +40 -0
  141. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  142. package/dist/src/server/routes/friend-status.js +52 -11
  143. package/dist/src/server/routes/friend-status.js.map +1 -1
  144. package/dist/src/server/routes/ingest.js +1 -1
  145. package/dist/src/server/routes/ingest.js.map +1 -1
  146. package/dist/src/server/routes/search.d.ts.map +1 -1
  147. package/dist/src/server/routes/search.js +65 -4
  148. package/dist/src/server/routes/search.js.map +1 -1
  149. package/dist/src/storage/rebuild.d.ts.map +1 -1
  150. package/dist/src/storage/rebuild.js +7 -0
  151. package/dist/src/storage/rebuild.js.map +1 -1
  152. package/dist/src/storage/tables.d.ts +20 -0
  153. package/dist/src/storage/tables.d.ts.map +1 -1
  154. package/dist/src/storage/tables.js +22 -12
  155. package/dist/src/storage/tables.js.map +1 -1
  156. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import type { FeedbackPayload } from "./feedback-payload.js";
1
+ import type { FeedbackPayload, SignupPayload } from "./feedback-payload.js";
2
2
  export interface RelayResult {
3
3
  attempted: boolean;
4
4
  ok: boolean;
@@ -11,5 +11,5 @@ export interface RelayOpts {
11
11
  fetchFn?: typeof fetch;
12
12
  timeoutMs?: number;
13
13
  }
14
- export declare function postFeedback(payload: FeedbackPayload, opts: RelayOpts): Promise<RelayResult>;
14
+ export declare function postFeedback(payload: FeedbackPayload | SignupPayload, opts: RelayOpts): Promise<RelayResult>;
15
15
  //# sourceMappingURL=feedback-relay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-relay.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-relay.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,CAAC,CA+BtB"}
1
+ {"version":3,"file":"feedback-relay.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-relay.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,GAAG,aAAa,EACxC,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,CAAC,CA+BtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-relay.js","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAwB,EACxB,IAAe;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,CAAC,kBAAkB,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE;YACX,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;YACnD,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,SAAS,EAAE,IAAI;YACf,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"feedback-relay.js","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAwC,EACxC,IAAe;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,CAAC,kBAAkB,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE;YACX,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;YACnD,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,SAAS,EAAE,IAAI;YACf,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface RiftInvite {
2
+ url: string;
3
+ secret: string;
4
+ label?: string;
5
+ }
6
+ /**
7
+ * Decode an invite code into its parts. Throws a `validation` CliError on any
8
+ * malformation (bad prefix, bad base64, bad JSON, missing/invalid fields) with
9
+ * one friend-facing message — never leaks the decode internals.
10
+ */
11
+ export declare function parseInvite(raw: string): RiftInvite;
12
+ /**
13
+ * Build an invite code from its parts. The operator-side counterpart to
14
+ * `parseInvite` (used to mint codes and to round-trip in tests).
15
+ */
16
+ export declare function formatInvite(invite: RiftInvite): string;
17
+ //# sourceMappingURL=invite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/invite.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAmBnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAWvD"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Feedback-relay invite codes.
3
+ *
4
+ * An invite is a single opaque string the operator hands a friend. It carries
5
+ * the relay URL + the HMAC secret so the friend never sees or types a raw
6
+ * secret — they paste ONE blob and Rift does the rest (URL → config, secret →
7
+ * Keychain). Shape:
8
+ *
9
+ * rift-invite_<base64url(JSON)> where JSON = { v: 1, url, secret, label? }
10
+ *
11
+ * NOTE (deferred, tracked): the invite embeds the *shared* beta secret, so it
12
+ * is only as revocable as that secret. Acceptable for beta (it signs feedback
13
+ * to Clem, low stakes); the revocable per-install token is the future upgrade.
14
+ */
15
+ import { z } from "zod";
16
+ import { CliError } from "../http-client.js";
17
+ const INVITE_PREFIX = "rift-invite_";
18
+ const InvitePayloadSchema = z
19
+ .object({
20
+ v: z.literal(1),
21
+ url: z.string().url(),
22
+ secret: z.string().min(1),
23
+ label: z.string().min(1).optional(),
24
+ })
25
+ .strict();
26
+ const INVALID = "That invite code is not valid. Ask Clem for a fresh `rift-invite_…` code.";
27
+ /**
28
+ * Decode an invite code into its parts. Throws a `validation` CliError on any
29
+ * malformation (bad prefix, bad base64, bad JSON, missing/invalid fields) with
30
+ * one friend-facing message — never leaks the decode internals.
31
+ */
32
+ export function parseInvite(raw) {
33
+ const code = raw.trim();
34
+ if (!code.startsWith(INVITE_PREFIX)) {
35
+ throw new CliError(INVALID, "validation");
36
+ }
37
+ const encoded = code.slice(INVITE_PREFIX.length);
38
+ let json;
39
+ try {
40
+ const decoded = Buffer.from(encoded, "base64url").toString("utf8");
41
+ json = JSON.parse(decoded);
42
+ }
43
+ catch {
44
+ throw new CliError(INVALID, "validation");
45
+ }
46
+ const parsed = InvitePayloadSchema.safeParse(json);
47
+ if (!parsed.success) {
48
+ throw new CliError(INVALID, "validation");
49
+ }
50
+ const { url, secret, label } = parsed.data;
51
+ return { url, secret, ...(label ? { label } : {}) };
52
+ }
53
+ /**
54
+ * Build an invite code from its parts. The operator-side counterpart to
55
+ * `parseInvite` (used to mint codes and to round-trip in tests).
56
+ */
57
+ export function formatInvite(invite) {
58
+ const payload = {
59
+ v: 1,
60
+ url: invite.url,
61
+ secret: invite.secret,
62
+ ...(invite.label ? { label: invite.label } : {}),
63
+ };
64
+ const encoded = Buffer.from(JSON.stringify(payload), "utf8").toString("base64url");
65
+ return `${INVITE_PREFIX}${encoded}`;
66
+ }
67
+ //# sourceMappingURL=invite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite.js","sourceRoot":"","sources":["../../../../src/cli/feedback/invite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpC,CAAC;KACD,MAAM,EAAE,CAAC;AAQZ,MAAM,OAAO,GACX,2EAA2E,CAAC;AAE9E;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,MAAM,OAAO,GAAG;QACd,CAAC,EAAE,CAAU;QACb,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CACnE,WAAW,CACZ,CAAC;IACF,OAAO,GAAG,aAAa,GAAG,OAAO,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,32 @@
1
+ /** Minimal shape of the promisified `execFile` we depend on (stdout only). */
2
+ type ExecFn = (file: string, args: string[]) => Promise<{
3
+ stdout: string;
4
+ }>;
5
+ /**
6
+ * Storage for the relay HMAC secret. Abstracted so the feedback paths can be
7
+ * tested with an in-memory implementation that never shells out to `security`.
8
+ */
9
+ export interface RelaySecretStore {
10
+ /** The stored secret, or null when none is set. */
11
+ read(): Promise<string | null>;
12
+ /** Write (or overwrite) the secret. */
13
+ write(secret: string): Promise<void>;
14
+ /** Remove the secret. No-op when already absent. */
15
+ delete(): Promise<void>;
16
+ }
17
+ /**
18
+ * Production store backed by the macOS `security` CLI. `exec` is injectable so
19
+ * tests can drive the error mapping (locked keychain, item-not-found) without
20
+ * a real Keychain. There is deliberately NO plaintext fallback — if the secret
21
+ * cannot be stored securely, relay signing is simply unavailable.
22
+ */
23
+ export declare function createMacRelaySecretStore(exec?: ExecFn): RelaySecretStore;
24
+ /** Production store backed by the real macOS `security` CLI. */
25
+ export declare const macRelaySecretStore: RelaySecretStore;
26
+ /**
27
+ * In-memory store for tests and any non-Keychain injection point. Holds the
28
+ * secret in a closure — never persisted. Production code never reaches for it.
29
+ */
30
+ export declare function createInMemoryRelaySecretStore(initial?: string | null): RelaySecretStore;
31
+ export {};
32
+ //# sourceMappingURL=relay-secret-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-secret-store.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/relay-secret-store.ts"],"names":[],"mappings":"AAmBA,8EAA8E;AAC9E,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA2C5E;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,uCAAuC;IACvC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,oDAAoD;IACpD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,GAAE,MAAoB,GAAG,gBAAgB,CAmDtF;AAED,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,EAAE,gBAA8C,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,gBAAgB,CAalB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Secure storage for the feedback-relay HMAC secret.
3
+ *
4
+ * The secret proves a feedback POST came from a configured Rift install (the
5
+ * Cloudflare Worker validates the `X-Rift-Signature` HMAC). It is a real
6
+ * secret, so it must NOT sit in plaintext `feedback-config.json`. It lives in
7
+ * the macOS Keychain instead, under the same service as the daemon auth token
8
+ * (`com.getrift.daemon`) so all Rift secrets share one keychain service.
9
+ *
10
+ * The store is an injectable interface: production uses the `security` CLI;
11
+ * tests inject `createInMemoryRelaySecretStore()` (no real Keychain, no GUI
12
+ * session) or `createMacRelaySecretStore(fakeExec)` to exercise the error
13
+ * mapping without shelling out.
14
+ */
15
+ import { execFile } from "node:child_process";
16
+ import { promisify } from "node:util";
17
+ import { LockedKeychainError } from "../../auth/keychain.js";
18
+ const defaultExec = promisify(execFile);
19
+ /** Same keychain service as the daemon auth token — one service per app. */
20
+ const SERVICE = "com.getrift.daemon";
21
+ /** Single (non-versioned) generic-password account for the relay secret. */
22
+ const ACCOUNT = "RELAY_HMAC_SECRET";
23
+ /** macOS `security` exit code for errSecItemNotFound — the only swallowed one. */
24
+ const ERR_SEC_ITEM_NOT_FOUND = 44;
25
+ /** Substring the `security` CLI emits when the login keychain is locked. */
26
+ const LOCKED_KEYCHAIN_SUBSTRING = "User interaction is not allowed";
27
+ // Predicates mirror the private helpers in ../../auth/keychain.ts. Kept local
28
+ // (not exported from there) to avoid refactoring the heavily-tested auth path;
29
+ // the auth token store remains the single owner of those internals.
30
+ function isItemNotFound(err) {
31
+ if (!(err instanceof Error))
32
+ return false;
33
+ return err.code === ERR_SEC_ITEM_NOT_FOUND;
34
+ }
35
+ function isLockedKeychain(err) {
36
+ if (!(err instanceof Error))
37
+ return false;
38
+ if (err.message.includes(LOCKED_KEYCHAIN_SUBSTRING))
39
+ return true;
40
+ const stderr = err.stderr;
41
+ return typeof stderr === "string" && stderr.includes(LOCKED_KEYCHAIN_SUBSTRING);
42
+ }
43
+ /**
44
+ * Normalize a `security` failure: a locked keychain becomes the typed
45
+ * `LockedKeychainError` (so callers render the unlock hint instead of leaking
46
+ * raw `security` output); every other error propagates unchanged. Applied on
47
+ * EVERY path — read, write, and delete — so write failures during invite
48
+ * setup map the same way reads do.
49
+ */
50
+ function rethrowKeychainError(err) {
51
+ if (isLockedKeychain(err)) {
52
+ throw new LockedKeychainError(err instanceof Error ? err.message : String(err));
53
+ }
54
+ throw err;
55
+ }
56
+ /**
57
+ * Production store backed by the macOS `security` CLI. `exec` is injectable so
58
+ * tests can drive the error mapping (locked keychain, item-not-found) without
59
+ * a real Keychain. There is deliberately NO plaintext fallback — if the secret
60
+ * cannot be stored securely, relay signing is simply unavailable.
61
+ */
62
+ export function createMacRelaySecretStore(exec = defaultExec) {
63
+ return {
64
+ async read() {
65
+ try {
66
+ const { stdout } = await exec("security", [
67
+ "find-generic-password",
68
+ "-a",
69
+ ACCOUNT,
70
+ "-s",
71
+ SERVICE,
72
+ "-w",
73
+ ]);
74
+ return stdout.trim() || null;
75
+ }
76
+ catch (err) {
77
+ if (isItemNotFound(err))
78
+ return null;
79
+ rethrowKeychainError(err);
80
+ }
81
+ },
82
+ async write(secret) {
83
+ try {
84
+ await exec("security", [
85
+ "add-generic-password",
86
+ "-a",
87
+ ACCOUNT,
88
+ "-s",
89
+ SERVICE,
90
+ "-w",
91
+ secret,
92
+ "-U", // update in place if it already exists
93
+ ]);
94
+ }
95
+ catch (err) {
96
+ rethrowKeychainError(err);
97
+ }
98
+ },
99
+ async delete() {
100
+ try {
101
+ await exec("security", [
102
+ "delete-generic-password",
103
+ "-a",
104
+ ACCOUNT,
105
+ "-s",
106
+ SERVICE,
107
+ ]);
108
+ }
109
+ catch (err) {
110
+ if (isItemNotFound(err))
111
+ return; // already gone — fine
112
+ rethrowKeychainError(err);
113
+ }
114
+ },
115
+ };
116
+ }
117
+ /** Production store backed by the real macOS `security` CLI. */
118
+ export const macRelaySecretStore = createMacRelaySecretStore();
119
+ /**
120
+ * In-memory store for tests and any non-Keychain injection point. Holds the
121
+ * secret in a closure — never persisted. Production code never reaches for it.
122
+ */
123
+ export function createInMemoryRelaySecretStore(initial) {
124
+ let secret = initial ?? null;
125
+ return {
126
+ async read() {
127
+ return secret;
128
+ },
129
+ async write(value) {
130
+ secret = value;
131
+ },
132
+ async delete() {
133
+ secret = null;
134
+ },
135
+ };
136
+ }
137
+ //# sourceMappingURL=relay-secret-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-secret-store.js","sourceRoot":"","sources":["../../../../src/cli/feedback/relay-secret-store.ts"],"names":[],"mappings":"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"}
@@ -56,10 +56,23 @@ export declare function requireExistingConfigPath(globalOpts: {
56
56
  config?: string;
57
57
  }): string;
58
58
  /**
59
- * No-config, no-auth direct probe of the daemon's /health endpoint.
60
- * Used by `rift status` only every other command needs config and
61
- * auth. Per A-2.3a/A-2.3b: `rift status` MUST NOT hard-fail when the
62
- * config is absent; it renders "config missing" instead, with the
59
+ * No-auth probe of a daemon's /health endpoint at an explicit base URL.
60
+ * `/health` is unauthenticated by design, so this needs neither a token nor
61
+ * a round-trip through the authenticated client. Returns the daemon's own
62
+ * ground truth for `voyage_key_present` the only correct source for any
63
+ * "is a Voyage key loaded?" gate, since the daemon (not the calling shell)
64
+ * is the process that saves and embeds.
65
+ */
66
+ export declare function probeDaemonHealth(baseUrl: string): Promise<{
67
+ up: boolean;
68
+ uptimeSeconds?: number;
69
+ voyageKeyPresent?: boolean;
70
+ }>;
71
+ /**
72
+ * No-config, no-auth direct probe of the daemon's /health endpoint at the
73
+ * default loopback URL. Used by `rift status` only — every other command
74
+ * needs config and auth. Per A-2.3a/A-2.3b: `rift status` MUST NOT hard-fail
75
+ * when the config is absent; it renders "config missing" instead, with the
63
76
  * daemon's actual up/down state taken from this probe.
64
77
  */
65
78
  export declare function probeDefaultDaemonHealth(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/cli/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,MAAM,YAAY,GACpB,oBAAoB,GACpB,cAAc,GACd,WAAW,GACX,SAAS,GACT,UAAU,GACV,cAAc,GACd,YAAY,GACZ,cAAc,GACd,SAAS,CAAC;AAEd,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,EAAE,YAAY;aAClB,UAAU,CAAC,EAAE,MAAM;aACnB,IAAI,CAAC,EAAE,OAAO;gBAH9B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,YAAY,EAClB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,IAAI,CAAC,EAAE,OAAO,YAAA;CAKjC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9C,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC/D;AA6ED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAqGjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAezE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAqBT;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IACxD,EAAE,EAAE,OAAO,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC,CAuBD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqBzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,GAAE,WAAyB,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB"}
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/cli/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,MAAM,YAAY,GACpB,oBAAoB,GACpB,cAAc,GACd,WAAW,GACX,SAAS,GACT,UAAU,GACV,cAAc,GACd,YAAY,GACZ,cAAc,GACd,SAAS,CAAC;AAEd,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,EAAE,YAAY;aAClB,UAAU,CAAC,EAAE,MAAM;aACnB,IAAI,CAAC,EAAE,OAAO;gBAH9B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,YAAY,EAClB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,IAAI,CAAC,EAAE,OAAO,YAAA;CAKjC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9C,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC/D;AA6ED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAqGjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAezE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAqBT;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,EAAE,EAAE,OAAO,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC,CAuBD;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IACxD,EAAE,EAAE,OAAO,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC,CAED;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqBzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,GAAE,WAAyB,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB"}
@@ -186,17 +186,18 @@ export function requireExistingConfigPath(globalOpts) {
186
186
  return resolved;
187
187
  }
188
188
  /**
189
- * No-config, no-auth direct probe of the daemon's /health endpoint.
190
- * Used by `rift status` only every other command needs config and
191
- * auth. Per A-2.3a/A-2.3b: `rift status` MUST NOT hard-fail when the
192
- * config is absent; it renders "config missing" instead, with the
193
- * daemon's actual up/down state taken from this probe.
189
+ * No-auth probe of a daemon's /health endpoint at an explicit base URL.
190
+ * `/health` is unauthenticated by design, so this needs neither a token nor
191
+ * a round-trip through the authenticated client. Returns the daemon's own
192
+ * ground truth for `voyage_key_present` the only correct source for any
193
+ * "is a Voyage key loaded?" gate, since the daemon (not the calling shell)
194
+ * is the process that saves and embeds.
194
195
  */
195
- export async function probeDefaultDaemonHealth() {
196
+ export async function probeDaemonHealth(baseUrl) {
196
197
  const controller = new AbortController();
197
198
  const timer = setTimeout(() => controller.abort(), 2000);
198
199
  try {
199
- const res = await fetch("http://127.0.0.1:3577/health", {
200
+ const res = await fetch(`${baseUrl.replace(/\/$/, "")}/health`, {
200
201
  signal: controller.signal,
201
202
  });
202
203
  if (!res.ok)
@@ -218,6 +219,16 @@ export async function probeDefaultDaemonHealth() {
218
219
  clearTimeout(timer);
219
220
  }
220
221
  }
222
+ /**
223
+ * No-config, no-auth direct probe of the daemon's /health endpoint at the
224
+ * default loopback URL. Used by `rift status` only — every other command
225
+ * needs config and auth. Per A-2.3a/A-2.3b: `rift status` MUST NOT hard-fail
226
+ * when the config is absent; it renders "config missing" instead, with the
227
+ * daemon's actual up/down state taken from this probe.
228
+ */
229
+ export async function probeDefaultDaemonHealth() {
230
+ return probeDaemonHealth("http://127.0.0.1:3577");
231
+ }
221
232
  /**
222
233
  * resolveBaseUrl stays strict — only commands that actually need the
223
234
  * daemon URL call it, and they all need a real config. Per A-2.3a:
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/cli/http-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/cli/http-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"friend-header.d.ts","sourceRoot":"","sources":["../../../../src/cli/status/friend-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,yEAAyE;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qDAAqD;IACrD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAuFrE;AAkSD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,sBAAsB,GAAG,SAAS,EAC9C,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUtD"}
1
+ {"version":3,"file":"friend-header.d.ts","sourceRoot":"","sources":["../../../../src/cli/status/friend-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,yEAAyE;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qDAAqD;IACrD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAiFrE;AA+VD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,sBAAsB,GAAG,SAAS,EAC9C,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUtD"}
@@ -15,7 +15,7 @@ export function renderFriendHeader(input) {
15
15
  // healthy respawn.
16
16
  const daemonStartMs = now - status.daemon.uptime_seconds * 1000;
17
17
  // 1. version + daemon
18
- lines.push(`Rift v${status.build.version} · daemon: running (uptime ${formatDuration(status.daemon.uptime_seconds)}) · port ${status.daemon.port} ${status.daemon.voyage_key_present ? "✓" : "✗"}`);
18
+ lines.push(`Rift v${status.build.version} · daemon: running (uptime ${formatDuration(status.daemon.uptime_seconds)}) · port ${status.daemon.port}${status.daemon.voyage_key_present ? " ✓" : status.daemon.capture_enabled ? " ✗" : ""}`);
19
19
  // 2. voyage
20
20
  lines.push(renderVoyageLine(input, now));
21
21
  // 3. index — distinct from voyage: an embed can succeed but the
@@ -43,9 +43,7 @@ export function renderFriendHeader(input) {
43
43
  // 7. MCP
44
44
  lines.push(renderMcpLine(input.mcpClients));
45
45
  // 8. feedback
46
- lines.push(`Feedback: ${status.feedback.relay_enabled
47
- ? "relay on (local JSONL + Clem-side relay)"
48
- : "relay off (local JSONL only) — opt in via rift onboard"}`);
46
+ lines.push(`Feedback: ${renderFeedbackLine(status.feedback)}`);
49
47
  // 9. update — surfaced only when the daemon's last probe found a
50
48
  // newer beta. Probe failures and up-to-date installs print nothing
51
49
  // so npm reachability cannot make Rift look broken.
@@ -99,6 +97,17 @@ function humanizeErrorClass(reason) {
99
97
  return reason;
100
98
  }
101
99
  }
100
+ function renderFeedbackLine(feedback) {
101
+ if (feedback.relay_enabled) {
102
+ return "relay on (local JSONL + Clem-side relay)";
103
+ }
104
+ if (feedback.contact_opted_in) {
105
+ // Opted in for updates, but no relay endpoint is wired yet — be honest
106
+ // that nothing is transmitting, without telling them to "opt in" again.
107
+ return "opted in — stays local until the beta relay is live";
108
+ }
109
+ return "relay off (local JSONL only) — opt in via rift onboard";
110
+ }
102
111
  function renderUpdateLine(update) {
103
112
  if (!update.available)
104
113
  return null;
@@ -111,7 +120,13 @@ function renderVoyageLine(input, now) {
111
120
  if (!status)
112
121
  return "Voyage: unknown";
113
122
  if (!status.daemon.voyage_key_present) {
114
- return "Voyage: key missing run: rift onboard --reconfigure-voyage";
123
+ // No key is an intentional local mode, not a fault: keyword (lexical)
124
+ // search is fully on; only semantic search is off. We only nudge toward a
125
+ // Voyage key when a feature that actually needs one (auto-capture) is
126
+ // enabled — otherwise the line must read as "working as configured."
127
+ return status.daemon.capture_enabled
128
+ ? "Search: keyword on, semantic off — auto-capture needs a Voyage key: rift onboard --reconfigure-voyage"
129
+ : "Search: keyword on · semantic off (no Voyage key — local mode)";
115
130
  }
116
131
  const last4 = voyageLast4 ? `last 4 …${voyageLast4}` : "key valid";
117
132
  const labelSuffix = status.voyage.project_label
@@ -167,7 +182,13 @@ function renderCodexLine(codex, now) {
167
182
  if (codex.last_preflight_ok === true) {
168
183
  return `Codex CLI: authed ✓ (last checked: ${formatAge(codex.last_preflight_at, now)})`;
169
184
  }
170
- return `Codex CLI: auth expired ✗ (last checked: ${formatAge(codex.last_preflight_at, now)}) — run: codex login`;
185
+ const checked = `last checked: ${formatAge(codex.last_preflight_at, now)}`;
186
+ if (codex.last_preflight_error_class === "auth") {
187
+ return `Codex CLI: auth expired ✗ (${checked}) — run: codex login`;
188
+ }
189
+ // Not auth — say what actually failed and don't nag about login.
190
+ const summary = codex.last_preflight_error_summary ?? "Codex preflight failed.";
191
+ return `Codex CLI: probe failing ✗ (${checked}) — ${summary}`;
171
192
  }
172
193
  /**
173
194
  * True when the daemon's own scheduled loop last failed (during this
@@ -190,6 +211,20 @@ function isDaemonCaptureStale(capture, daemonStartMs) {
190
211
  capture.last_run_ok === true &&
191
212
  capture.last_errors === 0);
192
213
  }
214
+ /**
215
+ * Split the parked-oversized count into "still self-repairing" vs. "exhausted
216
+ * retries, needs a manual save". The daemon ships explicit `oversized_repairing`
217
+ * / `oversized_repair_failed`; an older daemon omits them, so we fall back to
218
+ * treating every parked session as still-repairing (`parked - failed`, with
219
+ * failed defaulting to 0) — the calm, accurate read for a daemon that simply
220
+ * hasn't reported a budget yet.
221
+ */
222
+ function deriveParkedState(capture) {
223
+ const parked = capture.oversized_parked ?? 0;
224
+ const failed = capture.oversized_repair_failed ?? 0;
225
+ const repairing = capture.oversized_repairing ?? Math.max(parked - failed, 0);
226
+ return { parked, repairing, failed };
227
+ }
193
228
  function renderCaptureLine(capture, now, daemonStale) {
194
229
  if (capture.last_run_at === null) {
195
230
  const nextOnly = formatNextRunSuffix(capture.next_run_at, now);
@@ -202,11 +237,16 @@ function renderCaptureLine(capture, now, daemonStale) {
202
237
  // Driven by the parked-session count (state of the world), NOT
203
238
  // `last_quarantined` (the last run's count) — otherwise this visible line
204
239
  // flickers between showing and hiding as a stable oversized file dedups on
205
- // one run and re-quarantines on the next.
206
- const parked = capture.oversized_parked ?? 0;
207
- const parkedSuffix = parked > 0
208
- ? ` · ${parked} large session${parked === 1 ? "" : "s"} to recover`
209
- : "";
240
+ // one run and re-quarantines on the next. Large sessions now self-repair in
241
+ // the background, so the suffix reports honest state: "saving …" while Rift
242
+ // is still recovering them, "need a manual save" only once retries are
243
+ // exhausted never a bare "run the repair command" on a self-healing path.
244
+ const { repairing, failed } = deriveParkedState(capture);
245
+ const parkedSuffix = failed > 0
246
+ ? ` · ${failed} large session${failed === 1 ? "" : "s"} need a manual save`
247
+ : repairing > 0
248
+ ? ` · saving ${repairing} large session${repairing === 1 ? "" : "s"} to memory`
249
+ : "";
210
250
  // When the split "Automatic:" line is shown it carries the daemon's next
211
251
  // tick, so keep it off this line — otherwise a manual run would look
212
252
  // scheduled. With no split, this line keeps the next-tick hint.
@@ -251,11 +291,20 @@ function renderMcpLine(clients) {
251
291
  }
252
292
  function decideNextLine(input) {
253
293
  const { status, mcpClients, daemonStartMs } = input;
254
- if (!status.daemon.voyage_key_present) {
255
- return "Voyage key missing or revoked run: rift onboard --reconfigure-voyage";
294
+ // A missing key is only an action item when something needs it. With
295
+ // auto-capture off, no-key is the intended local mode, so it must not claim
296
+ // the Next: line — that would read as "broken" on a healthy local install.
297
+ if (!status.daemon.voyage_key_present && status.daemon.capture_enabled) {
298
+ return "Auto-capture is on but has no Voyage key to embed with → run: rift onboard --reconfigure-voyage";
256
299
  }
257
300
  if (status.codex.last_preflight_ok === false) {
258
- return "Codex auth expired → run: codex login";
301
+ if (status.codex.last_preflight_error_class === "auth") {
302
+ return "Codex auth expired → run: codex login";
303
+ }
304
+ if (status.codex.last_preflight_error_class === "model") {
305
+ return "Codex rejected the model → set codex_cli.model, then: rift capture";
306
+ }
307
+ return "Codex capture probe failing → re-run: rift capture";
259
308
  }
260
309
  // Recency gating: only errors stamped *after* the current daemon
261
310
  // start can drive the Next: action. A 20h-old schema_mismatch from a
@@ -295,15 +344,18 @@ function decideNextLine(input) {
295
344
  if (missing.length > 0) {
296
345
  return `MCP not installed for ${missing.join(", ")} → run: rift mcp install --client=${missing[0]}`;
297
346
  }
298
- // Oversized Codex sessions parked in quarantine are a graceful skip, not
299
- // an error — so they don't bump `last_errors`. They stay out of memory
300
- // until recovered, so the Next: line surfaces them and points at the
301
- // friend-facing repair (`rift doctor repair capture-large-sessions`), not
302
- // the obscure engine command. Keyed off the parked count, not
303
- // `last_quarantined`, so it doesn't flicker between runs.
304
- const parked = status.capture.oversized_parked ?? 0;
305
- if (parked > 0) {
306
- return `${parked} large Codex session${parked === 1 ? "" : "s"} not in memory yet → run: rift doctor repair capture-large-sessions`;
347
+ // Oversized Codex sessions parked in quarantine are a graceful skip, not an
348
+ // error — and they now SELF-REPAIR in the background. So the default copy is
349
+ // the honest in-progress state ("Rift is saving N to memory"), with NO
350
+ // command for the friend to run. The manual `rift doctor repair
351
+ // capture-large-sessions` is surfaced only once a session has exhausted its
352
+ // bounded retry budget — the genuine "Rift couldn't, you take over" case.
353
+ const { repairing, failed } = deriveParkedState(status.capture);
354
+ if (failed > 0) {
355
+ return `${failed} large Codex session${failed === 1 ? "" : "s"} could not be saved automatically → run: rift doctor repair capture-large-sessions`;
356
+ }
357
+ if (repairing > 0) {
358
+ return `Rift is saving ${repairing} large Codex session${repairing === 1 ? "" : "s"} to memory — no action needed`;
307
359
  }
308
360
  // Update available wins over "nothing broken" — a friend who runs
309
361
  // status precisely to find out what to do next should see the update