@getrift/rift 0.1.0-beta.1 → 0.1.0-beta.10

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 (178) hide show
  1. package/README.md +154 -0
  2. package/dist/src/auth/keychain.d.ts +9 -0
  3. package/dist/src/auth/keychain.d.ts.map +1 -1
  4. package/dist/src/auth/keychain.js +37 -0
  5. package/dist/src/auth/keychain.js.map +1 -1
  6. package/dist/src/capture/recover-quarantine.d.ts +221 -0
  7. package/dist/src/capture/recover-quarantine.d.ts.map +1 -0
  8. package/dist/src/capture/recover-quarantine.js +453 -0
  9. package/dist/src/capture/recover-quarantine.js.map +1 -0
  10. package/dist/src/cli/commands/backfill.d.ts.map +1 -1
  11. package/dist/src/cli/commands/backfill.js +5 -2
  12. package/dist/src/cli/commands/backfill.js.map +1 -1
  13. package/dist/src/cli/commands/capture-recover.d.ts +12 -0
  14. package/dist/src/cli/commands/capture-recover.d.ts.map +1 -0
  15. package/dist/src/cli/commands/capture-recover.js +120 -0
  16. package/dist/src/cli/commands/capture-recover.js.map +1 -0
  17. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  18. package/dist/src/cli/commands/capture.js +10 -4
  19. package/dist/src/cli/commands/capture.js.map +1 -1
  20. package/dist/src/cli/commands/feedback.d.ts.map +1 -1
  21. package/dist/src/cli/commands/feedback.js +6 -2
  22. package/dist/src/cli/commands/feedback.js.map +1 -1
  23. package/dist/src/cli/commands/mcp-install.js +5 -2
  24. package/dist/src/cli/commands/mcp-install.js.map +1 -1
  25. package/dist/src/cli/commands/onboard.d.ts +24 -0
  26. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  27. package/dist/src/cli/commands/onboard.js +119 -21
  28. package/dist/src/cli/commands/onboard.js.map +1 -1
  29. package/dist/src/cli/commands/rebuild.d.ts.map +1 -1
  30. package/dist/src/cli/commands/rebuild.js +6 -3
  31. package/dist/src/cli/commands/rebuild.js.map +1 -1
  32. package/dist/src/cli/commands/review.d.ts.map +1 -1
  33. package/dist/src/cli/commands/review.js +22 -7
  34. package/dist/src/cli/commands/review.js.map +1 -1
  35. package/dist/src/cli/commands/status.d.ts.map +1 -1
  36. package/dist/src/cli/commands/status.js +48 -2
  37. package/dist/src/cli/commands/status.js.map +1 -1
  38. package/dist/src/cli/commands/token-issue.d.ts.map +1 -1
  39. package/dist/src/cli/commands/token-issue.js +9 -1
  40. package/dist/src/cli/commands/token-issue.js.map +1 -1
  41. package/dist/src/cli/commands/triage.d.ts.map +1 -1
  42. package/dist/src/cli/commands/triage.js +7 -5
  43. package/dist/src/cli/commands/triage.js.map +1 -1
  44. package/dist/src/cli/commands/update.d.ts +26 -0
  45. package/dist/src/cli/commands/update.d.ts.map +1 -0
  46. package/dist/src/cli/commands/update.js +130 -0
  47. package/dist/src/cli/commands/update.js.map +1 -0
  48. package/dist/src/cli/default-config-path.d.ts +15 -0
  49. package/dist/src/cli/default-config-path.d.ts.map +1 -0
  50. package/dist/src/cli/default-config-path.js +27 -0
  51. package/dist/src/cli/default-config-path.js.map +1 -0
  52. package/dist/src/cli/http-client.d.ts +56 -1
  53. package/dist/src/cli/http-client.d.ts.map +1 -1
  54. package/dist/src/cli/http-client.js +140 -4
  55. package/dist/src/cli/http-client.js.map +1 -1
  56. package/dist/src/cli/index.d.ts.map +1 -1
  57. package/dist/src/cli/index.js +25 -6
  58. package/dist/src/cli/index.js.map +1 -1
  59. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  60. package/dist/src/cli/status/friend-header.js +117 -7
  61. package/dist/src/cli/status/friend-header.js.map +1 -1
  62. package/dist/src/ingestion/inbox-core/conversation-key.d.ts +2 -0
  63. package/dist/src/ingestion/inbox-core/conversation-key.d.ts.map +1 -0
  64. package/dist/src/ingestion/inbox-core/conversation-key.js +31 -0
  65. package/dist/src/ingestion/inbox-core/conversation-key.js.map +1 -0
  66. package/dist/src/ingestion/inbox-core/extensions.d.ts +3 -0
  67. package/dist/src/ingestion/inbox-core/extensions.d.ts.map +1 -0
  68. package/dist/src/ingestion/inbox-core/extensions.js +16 -0
  69. package/dist/src/ingestion/inbox-core/extensions.js.map +1 -0
  70. package/dist/src/ingestion/inbox-core/idempotency.d.ts +2 -0
  71. package/dist/src/ingestion/inbox-core/idempotency.d.ts.map +1 -0
  72. package/dist/src/ingestion/inbox-core/idempotency.js +22 -0
  73. package/dist/src/ingestion/inbox-core/idempotency.js.map +1 -0
  74. package/dist/src/ingestion/inbox-core/index.d.ts +19 -0
  75. package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -0
  76. package/dist/src/ingestion/inbox-core/index.js +19 -0
  77. package/dist/src/ingestion/inbox-core/index.js.map +1 -0
  78. package/dist/src/ingestion/inbox-core/source-detection.d.ts +2 -0
  79. package/dist/src/ingestion/inbox-core/source-detection.d.ts.map +1 -0
  80. package/dist/src/ingestion/inbox-core/source-detection.js +23 -0
  81. package/dist/src/ingestion/inbox-core/source-detection.js.map +1 -0
  82. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts +11 -0
  83. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts.map +1 -0
  84. package/dist/src/ingestion/inbox-core/source-sniffer.js +69 -0
  85. package/dist/src/ingestion/inbox-core/source-sniffer.js.map +1 -0
  86. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts +70 -0
  87. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts.map +1 -0
  88. package/dist/src/ingestion/inbox-core/zip-sniffer.js +161 -0
  89. package/dist/src/ingestion/inbox-core/zip-sniffer.js.map +1 -0
  90. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -1
  91. package/dist/src/ingestion/inbox-watcher.js +34 -50
  92. package/dist/src/ingestion/inbox-watcher.js.map +1 -1
  93. package/dist/src/ingestion/indexer.d.ts +7 -0
  94. package/dist/src/ingestion/indexer.d.ts.map +1 -1
  95. package/dist/src/ingestion/indexer.js +36 -2
  96. package/dist/src/ingestion/indexer.js.map +1 -1
  97. package/dist/src/ingestion/metadata-extraction.d.ts +8 -5
  98. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -1
  99. package/dist/src/ingestion/metadata-extraction.js +24 -5
  100. package/dist/src/ingestion/metadata-extraction.js.map +1 -1
  101. package/dist/src/ingestion/skip-quarantine.d.ts +10 -0
  102. package/dist/src/ingestion/skip-quarantine.d.ts.map +1 -0
  103. package/dist/src/ingestion/skip-quarantine.js +35 -0
  104. package/dist/src/ingestion/skip-quarantine.js.map +1 -0
  105. package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
  106. package/dist/src/jobs/handlers/compact.js +25 -4
  107. package/dist/src/jobs/handlers/compact.js.map +1 -1
  108. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  109. package/dist/src/jobs/handlers/ingest.js +49 -24
  110. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  111. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  112. package/dist/src/jobs/handlers/reconcile.js +30 -8
  113. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  114. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
  115. package/dist/src/jobs/handlers/reindex.js +12 -2
  116. package/dist/src/jobs/handlers/reindex.js.map +1 -1
  117. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  118. package/dist/src/jobs/handlers/save.js +9 -2
  119. package/dist/src/jobs/handlers/save.js.map +1 -1
  120. package/dist/src/jobs/queue.d.ts +11 -0
  121. package/dist/src/jobs/queue.d.ts.map +1 -1
  122. package/dist/src/jobs/queue.js +18 -0
  123. package/dist/src/jobs/queue.js.map +1 -1
  124. package/dist/src/jobs/worker-entry.d.ts.map +1 -1
  125. package/dist/src/jobs/worker-entry.js +2 -0
  126. package/dist/src/jobs/worker-entry.js.map +1 -1
  127. package/dist/src/main.js +36 -4
  128. package/dist/src/main.js.map +1 -1
  129. package/dist/src/observability/embedding-events.d.ts +52 -0
  130. package/dist/src/observability/embedding-events.d.ts.map +1 -0
  131. package/dist/src/observability/embedding-events.js +149 -0
  132. package/dist/src/observability/embedding-events.js.map +1 -0
  133. package/dist/src/observability/index-events.d.ts +70 -0
  134. package/dist/src/observability/index-events.d.ts.map +1 -0
  135. package/dist/src/observability/index-events.js +148 -0
  136. package/dist/src/observability/index-events.js.map +1 -0
  137. package/dist/src/observability/tool-usage-stats.d.ts +7 -0
  138. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
  139. package/dist/src/observability/tool-usage-stats.js +41 -5
  140. package/dist/src/observability/tool-usage-stats.js.map +1 -1
  141. package/dist/src/observability/tool-usage.d.ts +7 -7
  142. package/dist/src/observability/tool-usage.d.ts.map +1 -1
  143. package/dist/src/observability/tool-usage.js +78 -39
  144. package/dist/src/observability/tool-usage.js.map +1 -1
  145. package/dist/src/observability/version-check.d.ts +70 -0
  146. package/dist/src/observability/version-check.d.ts.map +1 -0
  147. package/dist/src/observability/version-check.js +197 -0
  148. package/dist/src/observability/version-check.js.map +1 -0
  149. package/dist/src/providers/ollama-embed.d.ts +2 -1
  150. package/dist/src/providers/ollama-embed.d.ts.map +1 -1
  151. package/dist/src/providers/ollama-embed.js +1 -0
  152. package/dist/src/providers/ollama-embed.js.map +1 -1
  153. package/dist/src/providers/openai-metadata-extraction.d.ts +3 -3
  154. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
  155. package/dist/src/providers/openai-metadata-extraction.js +18 -3
  156. package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
  157. package/dist/src/providers/stub.d.ts +2 -0
  158. package/dist/src/providers/stub.d.ts.map +1 -1
  159. package/dist/src/providers/stub.js +2 -0
  160. package/dist/src/providers/stub.js.map +1 -1
  161. package/dist/src/providers/types.d.ts +11 -0
  162. package/dist/src/providers/types.d.ts.map +1 -1
  163. package/dist/src/providers/voyage.d.ts +2 -1
  164. package/dist/src/providers/voyage.d.ts.map +1 -1
  165. package/dist/src/providers/voyage.js +1 -0
  166. package/dist/src/providers/voyage.js.map +1 -1
  167. package/dist/src/server/app.d.ts.map +1 -1
  168. package/dist/src/server/app.js +67 -1
  169. package/dist/src/server/app.js.map +1 -1
  170. package/dist/src/server/routes/friend-status.d.ts +202 -3
  171. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  172. package/dist/src/server/routes/friend-status.js +290 -7
  173. package/dist/src/server/routes/friend-status.js.map +1 -1
  174. package/dist/src/storage/rebuild.d.ts +14 -1
  175. package/dist/src/storage/rebuild.d.ts.map +1 -1
  176. package/dist/src/storage/rebuild.js +160 -34
  177. package/dist/src/storage/rebuild.js.map +1 -1
  178. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { Command } from "commander";
2
2
  import { issueToken } from "../token.js";
3
+ import { requireExistingConfigPath } from "../http-client.js";
3
4
  import { printError, printText } from "../output.js";
4
5
  export function makeTokenIssueCommand() {
5
6
  return new Command("issue")
@@ -7,7 +8,14 @@ export function makeTokenIssueCommand() {
7
8
  .action(async (_opts, cmd) => {
8
9
  const globalOpts = cmd.optsWithGlobals();
9
10
  try {
10
- const result = await issueToken(globalOpts.config);
11
+ // Per A-2.2: validate the config exists before calling
12
+ // issueToken (which loads it without canonical error mapping).
13
+ // This is especially critical because onboard's keychain-locked
14
+ // recovery copy now points users at `rift token issue`; if
15
+ // *that* command itself crashes with raw ENOENT on a missing
16
+ // config, the recovery loop is broken.
17
+ const configPath = requireExistingConfigPath(globalOpts);
18
+ const result = await issueToken(configPath);
11
19
  printText(`v${result.version}: ${result.token}`);
12
20
  if (result.signal.signaled) {
13
21
  process.stderr.write("Daemon notified (SIGHUP).\n");
@@ -1 +1 @@
1
- {"version":3,"file":"token-issue.js","sourceRoot":"","sources":["../../../../src/cli/commands/token-issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAwB,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACnD,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,YAAY,MAAM,CAAC,MAAM,CAAC,OAAO,+CAA+C,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"token-issue.js","sourceRoot":"","sources":["../../../../src/cli/commands/token-issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAwB,CAAC;QAC/D,IAAI,CAAC;YACH,uDAAuD;YACvD,+DAA+D;YAC/D,gEAAgE;YAChE,2DAA2D;YAC3D,6DAA6D;YAC7D,uCAAuC;YACvC,MAAM,UAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5C,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,YAAY,MAAM,CAAC,MAAM,CAAC,OAAO,+CAA+C,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/triage.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,iBAAiB,IAAI,OAAO,CA0H3C"}
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/triage.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CpC,wBAAgB,iBAAiB,IAAI,OAAO,CA4H3C"}
@@ -12,7 +12,7 @@
12
12
  import fs from "node:fs";
13
13
  import path from "node:path";
14
14
  import { Command } from "commander";
15
- import { createHttpClient, readToken, CliError } from "../http-client.js";
15
+ import { createHttpClient, readToken, CliError, requireExistingConfigPath, } from "../http-client.js";
16
16
  import { pollJob } from "../job-poller.js";
17
17
  import { printError, printJson, isJobFailure } from "../output.js";
18
18
  import { loadConfig } from "../../config/loader.js";
@@ -25,10 +25,12 @@ export function makeTriageCommand() {
25
25
  .action(async (opts, cmd) => {
26
26
  const globalOpts = cmd.optsWithGlobals();
27
27
  try {
28
- // Load config to resolve both base URL and data_dir from the same
29
- // source the daemon writes triage-results under data_paths.data_dir,
30
- // so the CLI must read from the same path the daemon used.
31
- const config = loadConfig(globalOpts.config);
28
+ // Per A-2.2 / A-2.3a: route through requireExistingConfigPath so
29
+ // missing config produces the canonical "Config not found at
30
+ // <path>. Run rift onboard…" CliError, not a raw ENOENT trace.
31
+ // Also resolves --config / RIFT_CONFIG / default uniformly.
32
+ const configPath = requireExistingConfigPath(globalOpts);
33
+ const config = loadConfig(configPath);
32
34
  const baseUrl = `http://${config.server.host}:${config.server.port}`;
33
35
  const dataDir = config.data_paths.data_dir;
34
36
  const token = await readToken();
@@ -1 +1 @@
1
- {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../../src/cli/commands/triage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../../src/cli/commands/triage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Command } from "commander";
2
+ import { kickstartDaemon, waitForHealth } from "../../onboarding/daemon-control.js";
3
+ export interface UpdateRunner {
4
+ /**
5
+ * Run `npm install -g <spec>`. Returns the exit code so the command
6
+ * can decide whether to retry with sudo. stderr/stdout pass through
7
+ * to the friend's terminal so progress is visible.
8
+ */
9
+ runNpmInstall: (spec: string, useSudo: boolean) => Promise<number>;
10
+ /** Kickstart the daemon. Defaults to the launchctl helper. */
11
+ kickstart: typeof kickstartDaemon;
12
+ /** Poll /health. Defaults to the onboarding helper. */
13
+ waitForHealth: typeof waitForHealth;
14
+ }
15
+ export declare function makeUpdateCommand(): Command;
16
+ export interface UpdateResult {
17
+ ok: boolean;
18
+ step?: "npm" | "kickstart" | "health";
19
+ transcript: string[];
20
+ }
21
+ /**
22
+ * Pure orchestration so tests can inject a mock runner. The function
23
+ * always returns — exit-code mapping is the caller's job.
24
+ */
25
+ export declare function runUpdate(runner: UpdateRunner): Promise<UpdateResult>;
26
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,eAAe,EACf,aAAa,EACd,MAAM,oCAAoC,CAAC;AAO5C,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,8DAA8D;IAC9D,SAAS,EAAE,OAAO,eAAe,CAAC;IAClC,uDAAuD;IACvD,aAAa,EAAE,OAAO,aAAa,CAAC;CACrC;AAQD,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAwD3E"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * `rift update` — friend-readable in-place upgrade for the npm-installed CLI.
3
+ *
4
+ * Steps (in order, each one printed):
5
+ * 1. `npm install -g @getrift/rift@beta` — pulls the latest beta tag.
6
+ * Falls back to `sudo npm install -g …` exactly like scripts/install.sh
7
+ * does, so friends who installed via the one-liner without nvm don't
8
+ * hit a permission wall.
9
+ * 2. `launchctl kickstart -k gui/$UID/com.getrift.daemon` — restarts the
10
+ * daemon so it picks up the new code on disk.
11
+ * 3. Poll `/health` until 200 (or timeout) — proves the new build can
12
+ * actually start.
13
+ *
14
+ * Failure contract:
15
+ * - npm install failure (step 1): the previous install is left in place.
16
+ * `npm install -g` with the same dist-tag is atomic enough here — npm
17
+ * replaces `bin/rift` only after a successful tarball install.
18
+ * - Kickstart or /health failure (steps 2–3): the new package is already
19
+ * installed on disk; only daemon recovery is needed. The transcript
20
+ * says so explicitly and points at the manual recovery action.
21
+ * In every branch the output is a friend-readable error pointing at the
22
+ * next recovery step; we never drop into "your install is broken" territory.
23
+ *
24
+ * Deliberately not in scope here:
25
+ * - No publishing.
26
+ * - No clean-Mac validation.
27
+ * - No Sparkle / background self-update.
28
+ * - No telemetry. The npm-registry probe lives in the daemon's daily
29
+ * loop (see src/observability/version-check.ts); this command does
30
+ * not write to that snapshot.
31
+ */
32
+ import { spawn } from "node:child_process";
33
+ import { Command } from "commander";
34
+ import { kickstartDaemon, waitForHealth, } from "../../onboarding/daemon-control.js";
35
+ import { printJson, printText } from "../output.js";
36
+ const RIFT_PACKAGE_SPEC = "@getrift/rift@beta";
37
+ const DAEMON_BASE_URL = "http://127.0.0.1:3577";
38
+ const HEALTH_TIMEOUT_MS = 30_000;
39
+ const defaultRunner = {
40
+ runNpmInstall: defaultNpmInstall,
41
+ kickstart: kickstartDaemon,
42
+ waitForHealth,
43
+ };
44
+ export function makeUpdateCommand() {
45
+ return new Command("update")
46
+ .description("Reinstall the latest @getrift/rift@beta and restart the daemon")
47
+ .action(async (_opts, cmd) => {
48
+ const globalOpts = cmd.optsWithGlobals();
49
+ const result = await runUpdate(defaultRunner);
50
+ if (globalOpts.json) {
51
+ printJson(result);
52
+ }
53
+ else {
54
+ for (const line of result.transcript)
55
+ printText(line);
56
+ }
57
+ if (!result.ok)
58
+ process.exitCode = 1;
59
+ });
60
+ }
61
+ /**
62
+ * Pure orchestration so tests can inject a mock runner. The function
63
+ * always returns — exit-code mapping is the caller's job.
64
+ */
65
+ export async function runUpdate(runner) {
66
+ const transcript = [];
67
+ const say = (line) => {
68
+ transcript.push(line);
69
+ };
70
+ // --- Step 1: npm install ---
71
+ say(`==> Installing ${RIFT_PACKAGE_SPEC} via npm`);
72
+ let npmCode = await runner.runNpmInstall(RIFT_PACKAGE_SPEC, false);
73
+ if (npmCode !== 0) {
74
+ // npm exits non-zero on a permission denied error; mirror install.sh
75
+ // and retry under sudo so a non-nvm user on a system Node doesn't get
76
+ // stuck. The sudo prompt itself surfaces inline in the friend's
77
+ // terminal — we don't try to suppress it.
78
+ say(" npm install failed without sudo — retrying with sudo");
79
+ npmCode = await runner.runNpmInstall(RIFT_PACKAGE_SPEC, true);
80
+ }
81
+ if (npmCode !== 0) {
82
+ say("");
83
+ say("Update failed at step 1 (npm install).");
84
+ say("Your existing Rift install is unchanged.");
85
+ say(`Try manually: npm install -g ${RIFT_PACKAGE_SPEC}`);
86
+ return { ok: false, step: "npm", transcript };
87
+ }
88
+ say(" npm install completed.");
89
+ // --- Step 2: kickstart daemon ---
90
+ say("==> Restarting the Rift daemon");
91
+ const kick = await runner.kickstart();
92
+ if (kick.status !== "ok") {
93
+ say("");
94
+ say("Update installed, but the daemon did not restart cleanly.");
95
+ if (kick.hint)
96
+ say(` ${kick.hint}`);
97
+ say("Try: launchctl kickstart -k gui/$UID/com.getrift.daemon");
98
+ return { ok: false, step: "kickstart", transcript };
99
+ }
100
+ say(" Daemon kickstarted.");
101
+ // --- Step 3: wait for /health ---
102
+ say("==> Waiting for the daemon to answer /health");
103
+ const health = await runner.waitForHealth({
104
+ baseUrl: DAEMON_BASE_URL,
105
+ timeoutMs: HEALTH_TIMEOUT_MS,
106
+ });
107
+ if (!health.ok) {
108
+ say("");
109
+ say("Update installed and daemon kickstarted, but /health did not return 200.");
110
+ say(` ${health.reason}`);
111
+ say("Inspect with: rift status");
112
+ return { ok: false, step: "health", transcript };
113
+ }
114
+ say(` Daemon healthy (uptime ${health.uptimeSeconds}s).`);
115
+ say("");
116
+ say("Rift updated. Run `rift status` to confirm the new version.");
117
+ return { ok: true, transcript };
118
+ }
119
+ function defaultNpmInstall(spec, useSudo) {
120
+ return new Promise((resolve) => {
121
+ const cmd = useSudo ? "sudo" : "npm";
122
+ const args = useSudo
123
+ ? ["npm", "install", "-g", spec]
124
+ : ["install", "-g", spec];
125
+ const child = spawn(cmd, args, { stdio: "inherit" });
126
+ child.on("error", () => resolve(1));
127
+ child.on("close", (code) => resolve(code ?? 1));
128
+ });
129
+ }
130
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Canonical config path used when `--config` is not provided.
3
+ *
4
+ * Mirrors the path written by `scripts/install.sh`:
5
+ * $HOME/Library/Application Support/Rift/data/config.json
6
+ *
7
+ * Without this, the CLI default was `config.json` (relative to cwd),
8
+ * which broke every invocation made outside the data dir on a fresh
9
+ * friend install — `rift status` from the home folder would `ENOENT`.
10
+ *
11
+ * Override with the `RIFT_CONFIG` env var (absolute path) for tests
12
+ * or operators running multiple instances side-by-side.
13
+ */
14
+ export declare function defaultConfigPath(): string;
15
+ //# sourceMappingURL=default-config-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config-path.d.ts","sourceRoot":"","sources":["../../../src/cli/default-config-path.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAiB1C"}
@@ -0,0 +1,27 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ /**
4
+ * Canonical config path used when `--config` is not provided.
5
+ *
6
+ * Mirrors the path written by `scripts/install.sh`:
7
+ * $HOME/Library/Application Support/Rift/data/config.json
8
+ *
9
+ * Without this, the CLI default was `config.json` (relative to cwd),
10
+ * which broke every invocation made outside the data dir on a fresh
11
+ * friend install — `rift status` from the home folder would `ENOENT`.
12
+ *
13
+ * Override with the `RIFT_CONFIG` env var (absolute path) for tests
14
+ * or operators running multiple instances side-by-side.
15
+ */
16
+ export function defaultConfigPath() {
17
+ // Per A-2.1: empty or whitespace-only RIFT_CONFIG falls through to the
18
+ // default. Treating " " as set would give the user a confusing
19
+ // `Config not found at /<cwd>` message later, when they think they
20
+ // didn't set the env var at all.
21
+ const override = process.env.RIFT_CONFIG;
22
+ if (typeof override === "string" && override.trim().length > 0) {
23
+ return path.resolve(override);
24
+ }
25
+ return path.join(os.homedir(), "Library", "Application Support", "Rift", "data", "config.json");
26
+ }
27
+ //# sourceMappingURL=default-config-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config-path.js","sourceRoot":"","sources":["../../../src/cli/default-config-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,uEAAuE;IACvE,iEAAiE;IACjE,mEAAmE;IACnE,iCAAiC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,qBAAqB,EACrB,MAAM,EACN,MAAM,EACN,aAAa,CACd,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type KeychainOps } from "../auth/keychain.js";
2
- export type CliErrorCode = "connection_refused" | "unauthorized" | "not_found" | "conflict" | "rate_limited" | "validation" | "server_error" | "unknown";
2
+ export type CliErrorCode = "connection_refused" | "unauthorized" | "not_found" | "invalid" | "conflict" | "rate_limited" | "validation" | "server_error" | "unknown";
3
3
  export declare class CliError extends Error {
4
4
  readonly code: CliErrorCode;
5
5
  readonly statusCode?: number | undefined;
@@ -31,6 +31,61 @@ export interface HttpClient {
31
31
  }>;
32
32
  }
33
33
  export declare function createHttpClient(opts: HttpClientOpts): HttpClient;
34
+ /**
35
+ * Single source of truth for "where is the config file?" — pure path
36
+ * resolution, no I/O. Per A-2.1 / A-2.2:
37
+ * --config wins over RIFT_CONFIG wins over default
38
+ * Empty / whitespace-only RIFT_CONFIG falls through to the default
39
+ * Relative paths are resolved with path.resolve at call time
40
+ *
41
+ * Callers that need the file to actually exist should use
42
+ * `requireExistingConfigPath` instead, which also classifies missing
43
+ * vs invalid distinctly.
44
+ */
45
+ export declare function resolveConfigPath(globalOpts: {
46
+ config?: string;
47
+ }): string;
48
+ /**
49
+ * For commands that need an existing, valid config (search, save,
50
+ * import, ingest, mcp install, feedback, capture, etc.). Throws a
51
+ * `CliError` with code "not_found" or "invalid", whose messages are
52
+ * distinct per A-2.3a / A-2.3c. Caller should let the exception
53
+ * propagate so the top-level CLI handler renders it.
54
+ */
55
+ export declare function requireExistingConfigPath(globalOpts: {
56
+ config?: string;
57
+ }): string;
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
63
+ * daemon's actual up/down state taken from this probe.
64
+ */
65
+ export declare function probeDefaultDaemonHealth(): Promise<{
66
+ up: boolean;
67
+ uptimeSeconds?: number;
68
+ voyageKeyPresent?: boolean;
69
+ }>;
70
+ /**
71
+ * resolveBaseUrl stays strict — only commands that actually need the
72
+ * daemon URL call it, and they all need a real config. Per A-2.3a:
73
+ * status's no-config branch MUST NOT route through here; it uses
74
+ * `probeDefaultDaemonHealth()` instead.
75
+ */
34
76
  export declare function resolveBaseUrl(configPath: string): string;
77
+ /**
78
+ * Read the current auth token. Checks `~/.rift/token` first, then the
79
+ * macOS Keychain. Returns `null` only when no token has been issued —
80
+ * a real "not yet onboarded" state. A locked Keychain (typical over
81
+ * SSH or in CI without a GUI session) is a recoverable *failure*, not
82
+ * a missing token, so it surfaces as a typed `CliError` with the exact
83
+ * `security unlock-keychain` recovery command.
84
+ *
85
+ * Without this conversion, CLI commands that call `readToken()` would
86
+ * leak the raw `security find-generic-password` failure to the user.
87
+ * Confirmed live on `0.1.0-beta.6` against an SSH'd test user, post-
88
+ * publish, before this fix landed.
89
+ */
35
90
  export declare function readToken(keychain?: KeychainOps): Promise<string | null>;
36
91
  //# sourceMappingURL=http-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/cli/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpE,MAAM,MAAM,YAAY,GACpB,oBAAoB,GACpB,cAAc,GACd,WAAW,GACX,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;AAkDD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAqGjE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAsB,SAAS,CAC7B,QAAQ,GAAE,WAAyB,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB"}
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;AAkDD,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"}
@@ -2,7 +2,8 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { loadConfig } from "../config/loader.js";
5
- import { macKeychain } from "../auth/keychain.js";
5
+ import { macKeychain, LockedKeychainError, } from "../auth/keychain.js";
6
+ import { defaultConfigPath } from "./default-config-path.js";
6
7
  export class CliError extends Error {
7
8
  code;
8
9
  statusCode;
@@ -116,18 +117,153 @@ export function createHttpClient(opts) {
116
117
  },
117
118
  };
118
119
  }
120
+ /**
121
+ * Single source of truth for "where is the config file?" — pure path
122
+ * resolution, no I/O. Per A-2.1 / A-2.2:
123
+ * --config wins over RIFT_CONFIG wins over default
124
+ * Empty / whitespace-only RIFT_CONFIG falls through to the default
125
+ * Relative paths are resolved with path.resolve at call time
126
+ *
127
+ * Callers that need the file to actually exist should use
128
+ * `requireExistingConfigPath` instead, which also classifies missing
129
+ * vs invalid distinctly.
130
+ */
131
+ export function resolveConfigPath(globalOpts) {
132
+ // When `--config` is explicitly provided, Commander stores it in
133
+ // globalOpts.config. When the user did not pass `--config`, Commander
134
+ // populates globalOpts.config with the default we registered in
135
+ // src/cli/index.ts (i.e. defaultConfigPath()), so the env-var
136
+ // precedence already happened. We still re-resolve for safety: relative
137
+ // values from --config or env are normalized here.
138
+ const fromOpts = globalOpts.config;
139
+ if (typeof fromOpts === "string" && fromOpts.trim().length > 0) {
140
+ return path.resolve(fromOpts);
141
+ }
142
+ // Fallback path that should be unreachable in practice (Commander
143
+ // always supplies the default), kept as a defensive belt for tests
144
+ // that construct GlobalOpts by hand.
145
+ return defaultConfigPath();
146
+ }
147
+ /**
148
+ * For commands that need an existing, valid config (search, save,
149
+ * import, ingest, mcp install, feedback, capture, etc.). Throws a
150
+ * `CliError` with code "not_found" or "invalid", whose messages are
151
+ * distinct per A-2.3a / A-2.3c. Caller should let the exception
152
+ * propagate so the top-level CLI handler renders it.
153
+ */
154
+ export function requireExistingConfigPath(globalOpts) {
155
+ const resolved = resolveConfigPath(globalOpts);
156
+ try {
157
+ loadConfig(resolved);
158
+ }
159
+ catch (err) {
160
+ if (err instanceof Error &&
161
+ err.code === "ENOENT") {
162
+ throw new CliError(`Config not found at ${resolved}. Run \`rift onboard\` to set it up, or set RIFT_CONFIG to a valid path.`, "not_found");
163
+ }
164
+ const reason = err instanceof Error ? err.message : String(err);
165
+ throw new CliError(`Config invalid at ${resolved}: ${reason}.`, "invalid");
166
+ }
167
+ return resolved;
168
+ }
169
+ /**
170
+ * No-config, no-auth direct probe of the daemon's /health endpoint.
171
+ * Used by `rift status` only — every other command needs config and
172
+ * auth. Per A-2.3a/A-2.3b: `rift status` MUST NOT hard-fail when the
173
+ * config is absent; it renders "config missing" instead, with the
174
+ * daemon's actual up/down state taken from this probe.
175
+ */
176
+ export async function probeDefaultDaemonHealth() {
177
+ const controller = new AbortController();
178
+ const timer = setTimeout(() => controller.abort(), 2000);
179
+ try {
180
+ const res = await fetch("http://127.0.0.1:3577/health", {
181
+ signal: controller.signal,
182
+ });
183
+ if (!res.ok)
184
+ return { up: false };
185
+ const json = (await res.json());
186
+ if (json.status !== "ok")
187
+ return { up: false };
188
+ const result = { up: true };
189
+ if (typeof json.uptime_seconds === "number")
190
+ result.uptimeSeconds = json.uptime_seconds;
191
+ if (typeof json.voyage_key_present === "boolean")
192
+ result.voyageKeyPresent = json.voyage_key_present;
193
+ return result;
194
+ }
195
+ catch {
196
+ return { up: false };
197
+ }
198
+ finally {
199
+ clearTimeout(timer);
200
+ }
201
+ }
202
+ /**
203
+ * resolveBaseUrl stays strict — only commands that actually need the
204
+ * daemon URL call it, and they all need a real config. Per A-2.3a:
205
+ * status's no-config branch MUST NOT route through here; it uses
206
+ * `probeDefaultDaemonHealth()` instead.
207
+ */
119
208
  export function resolveBaseUrl(configPath) {
120
- const config = loadConfig(configPath);
209
+ let config;
210
+ try {
211
+ config = loadConfig(configPath);
212
+ }
213
+ catch (err) {
214
+ if (err instanceof Error &&
215
+ err.code === "ENOENT") {
216
+ throw new CliError(`Config not found at ${configPath}. Run \`rift onboard\` to set it up, or set RIFT_CONFIG to a valid path.`, "not_found");
217
+ }
218
+ const reason = err instanceof Error ? err.message : String(err);
219
+ throw new CliError(`Config invalid at ${configPath}: ${reason}.`, "invalid");
220
+ }
121
221
  return `http://${config.server.host}:${config.server.port}`;
122
222
  }
223
+ /**
224
+ * Read the current auth token. Checks `~/.rift/token` first, then the
225
+ * macOS Keychain. Returns `null` only when no token has been issued —
226
+ * a real "not yet onboarded" state. A locked Keychain (typical over
227
+ * SSH or in CI without a GUI session) is a recoverable *failure*, not
228
+ * a missing token, so it surfaces as a typed `CliError` with the exact
229
+ * `security unlock-keychain` recovery command.
230
+ *
231
+ * Without this conversion, CLI commands that call `readToken()` would
232
+ * leak the raw `security find-generic-password` failure to the user.
233
+ * Confirmed live on `0.1.0-beta.6` against an SSH'd test user, post-
234
+ * publish, before this fix landed.
235
+ */
123
236
  export async function readToken(keychain = macKeychain) {
124
237
  const fileToken = readTokenFromFile();
125
238
  if (fileToken !== null)
126
239
  return fileToken;
127
- const version = await keychain.findLatestVersion();
240
+ let version;
241
+ try {
242
+ version = await keychain.findLatestVersion();
243
+ }
244
+ catch (err) {
245
+ if (err instanceof LockedKeychainError) {
246
+ throw lockedKeychainCliError();
247
+ }
248
+ throw err;
249
+ }
128
250
  if (version === 0)
129
251
  return null;
130
- return keychain.read(version);
252
+ try {
253
+ return await keychain.read(version);
254
+ }
255
+ catch (err) {
256
+ if (err instanceof LockedKeychainError) {
257
+ throw lockedKeychainCliError();
258
+ }
259
+ throw err;
260
+ }
261
+ }
262
+ function lockedKeychainCliError() {
263
+ return new CliError("Login Keychain is locked (typical over SSH). Run: " +
264
+ "`security unlock-keychain ~/Library/Keychains/login.keychain-db` " +
265
+ "(it will prompt for your Mac login password), then re-run the command. " +
266
+ "For local Terminal sessions this should not happen — please file feedback if it does.", "unauthorized");
131
267
  }
132
268
  function readTokenFromFile() {
133
269
  const home = os.homedir();
@@ -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":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,aAAa,IAAI,OAAO,CAkCvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,aAAa,IAAI,OAAO,CAmCvC"}