@debian777/kairos-mcp 3.2.0-pre.0 → 3.2.0-pre.1

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 (195) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli/api-client.d.ts +18 -18
  3. package/dist/cli/api-client.d.ts.map +1 -1
  4. package/dist/cli/api-client.js +64 -20
  5. package/dist/cli/api-client.js.map +1 -1
  6. package/dist/cli/auth-error.d.ts +17 -0
  7. package/dist/cli/auth-error.d.ts.map +1 -0
  8. package/dist/cli/auth-error.js +51 -0
  9. package/dist/cli/auth-error.js.map +1 -0
  10. package/dist/cli/commands/attest.d.ts.map +1 -1
  11. package/dist/cli/commands/attest.js +3 -11
  12. package/dist/cli/commands/attest.js.map +1 -1
  13. package/dist/cli/commands/begin.d.ts.map +1 -1
  14. package/dist/cli/commands/begin.js +4 -13
  15. package/dist/cli/commands/begin.js.map +1 -1
  16. package/dist/cli/commands/delete.d.ts.map +1 -1
  17. package/dist/cli/commands/delete.js +4 -13
  18. package/dist/cli/commands/delete.js.map +1 -1
  19. package/dist/cli/commands/login.d.ts +16 -0
  20. package/dist/cli/commands/login.d.ts.map +1 -0
  21. package/dist/cli/commands/login.js +203 -0
  22. package/dist/cli/commands/login.js.map +1 -0
  23. package/dist/cli/commands/logout.d.ts +6 -0
  24. package/dist/cli/commands/logout.d.ts.map +1 -0
  25. package/dist/cli/commands/logout.js +17 -0
  26. package/dist/cli/commands/logout.js.map +1 -0
  27. package/dist/cli/commands/mint.d.ts.map +1 -1
  28. package/dist/cli/commands/mint.js +4 -14
  29. package/dist/cli/commands/mint.js.map +1 -1
  30. package/dist/cli/commands/next.d.ts.map +1 -1
  31. package/dist/cli/commands/next.js +5 -18
  32. package/dist/cli/commands/next.js.map +1 -1
  33. package/dist/cli/commands/search.d.ts.map +1 -1
  34. package/dist/cli/commands/search.js +4 -13
  35. package/dist/cli/commands/search.js.map +1 -1
  36. package/dist/cli/commands/token.d.ts +6 -0
  37. package/dist/cli/commands/token.d.ts.map +1 -0
  38. package/dist/cli/commands/token.js +45 -0
  39. package/dist/cli/commands/token.js.map +1 -0
  40. package/dist/cli/commands/update.d.ts.map +1 -1
  41. package/dist/cli/commands/update.js +4 -14
  42. package/dist/cli/commands/update.js.map +1 -1
  43. package/dist/cli/config-file.d.ts +47 -0
  44. package/dist/cli/config-file.d.ts.map +1 -0
  45. package/dist/cli/config-file.js +257 -0
  46. package/dist/cli/config-file.js.map +1 -0
  47. package/dist/cli/index.js +7 -0
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/keyring.d.ts +22 -0
  50. package/dist/cli/keyring.d.ts.map +1 -0
  51. package/dist/cli/keyring.js +76 -0
  52. package/dist/cli/keyring.js.map +1 -0
  53. package/dist/config.d.ts +2 -0
  54. package/dist/config.d.ts.map +1 -1
  55. package/dist/config.js +12 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002001.md +1 -1
  58. package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002002.md +1 -1
  59. package/dist/http/http-api-attest.d.ts +2 -1
  60. package/dist/http/http-api-attest.d.ts.map +1 -1
  61. package/dist/http/http-api-attest.js +18 -87
  62. package/dist/http/http-api-attest.js.map +1 -1
  63. package/dist/http/http-api-begin-step.d.ts +2 -1
  64. package/dist/http/http-api-begin-step.d.ts.map +1 -1
  65. package/dist/http/http-api-begin-step.js +17 -91
  66. package/dist/http/http-api-begin-step.js.map +1 -1
  67. package/dist/http/http-api-begin.d.ts +2 -1
  68. package/dist/http/http-api-begin.d.ts.map +1 -1
  69. package/dist/http/http-api-begin.js +18 -157
  70. package/dist/http/http-api-begin.js.map +1 -1
  71. package/dist/http/http-api-delete.d.ts +1 -3
  72. package/dist/http/http-api-delete.d.ts.map +1 -1
  73. package/dist/http/http-api-delete.js +12 -47
  74. package/dist/http/http-api-delete.js.map +1 -1
  75. package/dist/http/http-api-dump.d.ts.map +1 -1
  76. package/dist/http/http-api-dump.js +1 -3
  77. package/dist/http/http-api-dump.js.map +1 -1
  78. package/dist/http/http-api-mint.d.ts +2 -3
  79. package/dist/http/http-api-mint.d.ts.map +1 -1
  80. package/dist/http/http-api-mint.js +42 -54
  81. package/dist/http/http-api-mint.js.map +1 -1
  82. package/dist/http/http-api-next.d.ts +2 -2
  83. package/dist/http/http-api-next.d.ts.map +1 -1
  84. package/dist/http/http-api-next.js +26 -216
  85. package/dist/http/http-api-next.js.map +1 -1
  86. package/dist/http/http-api-spaces.d.ts +1 -0
  87. package/dist/http/http-api-spaces.d.ts.map +1 -1
  88. package/dist/http/http-api-spaces.js +5 -4
  89. package/dist/http/http-api-spaces.js.map +1 -1
  90. package/dist/http/http-api-update.d.ts +1 -3
  91. package/dist/http/http-api-update.d.ts.map +1 -1
  92. package/dist/http/http-api-update.js +12 -85
  93. package/dist/http/http-api-update.js.map +1 -1
  94. package/dist/http/http-auth-callback.d.ts.map +1 -1
  95. package/dist/http/http-auth-callback.js +5 -3
  96. package/dist/http/http-auth-callback.js.map +1 -1
  97. package/dist/http/http-auth-middleware.d.ts.map +1 -1
  98. package/dist/http/http-auth-middleware.js +4 -2
  99. package/dist/http/http-auth-middleware.js.map +1 -1
  100. package/dist/http/http-well-known.d.ts.map +1 -1
  101. package/dist/http/http-well-known.js +10 -1
  102. package/dist/http/http-well-known.js.map +1 -1
  103. package/dist/tools/kairos_attest.d.ts +4 -1
  104. package/dist/tools/kairos_attest.d.ts.map +1 -1
  105. package/dist/tools/kairos_attest.js +90 -152
  106. package/dist/tools/kairos_attest.js.map +1 -1
  107. package/dist/tools/kairos_attest_schema.d.ts +25 -0
  108. package/dist/tools/kairos_attest_schema.d.ts.map +1 -0
  109. package/dist/tools/kairos_attest_schema.js +23 -0
  110. package/dist/tools/kairos_attest_schema.js.map +1 -0
  111. package/dist/tools/kairos_begin.d.ts +45 -0
  112. package/dist/tools/kairos_begin.d.ts.map +1 -1
  113. package/dist/tools/kairos_begin.js +43 -67
  114. package/dist/tools/kairos_begin.js.map +1 -1
  115. package/dist/tools/kairos_delete.d.ts +4 -0
  116. package/dist/tools/kairos_delete.d.ts.map +1 -1
  117. package/dist/tools/kairos_delete.js +51 -91
  118. package/dist/tools/kairos_delete.js.map +1 -1
  119. package/dist/tools/kairos_delete_schema.d.ts +19 -0
  120. package/dist/tools/kairos_delete_schema.d.ts.map +1 -0
  121. package/dist/tools/kairos_delete_schema.js +20 -0
  122. package/dist/tools/kairos_delete_schema.js.map +1 -0
  123. package/dist/tools/kairos_dump.d.ts.map +1 -1
  124. package/dist/tools/kairos_dump.js +3 -6
  125. package/dist/tools/kairos_dump.js.map +1 -1
  126. package/dist/tools/kairos_dump_schema.d.ts +22 -0
  127. package/dist/tools/kairos_dump_schema.d.ts.map +1 -0
  128. package/dist/tools/kairos_dump_schema.js +21 -0
  129. package/dist/tools/kairos_dump_schema.js.map +1 -0
  130. package/dist/tools/kairos_mint.d.ts +13 -0
  131. package/dist/tools/kairos_mint.d.ts.map +1 -1
  132. package/dist/tools/kairos_mint.js +91 -170
  133. package/dist/tools/kairos_mint.js.map +1 -1
  134. package/dist/tools/kairos_mint_schema.d.ts +20 -0
  135. package/dist/tools/kairos_mint_schema.d.ts.map +1 -0
  136. package/dist/tools/kairos_mint_schema.js +21 -0
  137. package/dist/tools/kairos_mint_schema.js.map +1 -0
  138. package/dist/tools/kairos_next.d.ts +19 -0
  139. package/dist/tools/kairos_next.d.ts.map +1 -1
  140. package/dist/tools/kairos_next.js +137 -164
  141. package/dist/tools/kairos_next.js.map +1 -1
  142. package/dist/tools/kairos_next_schema.d.ts +30 -0
  143. package/dist/tools/kairos_next_schema.d.ts.map +1 -1
  144. package/dist/tools/kairos_next_schema.js +1 -1
  145. package/dist/tools/kairos_next_schema.js.map +1 -1
  146. package/dist/tools/kairos_search.d.ts +8 -0
  147. package/dist/tools/kairos_search.d.ts.map +1 -1
  148. package/dist/tools/kairos_search.js +62 -102
  149. package/dist/tools/kairos_search.js.map +1 -1
  150. package/dist/tools/kairos_search_schema.d.ts +29 -0
  151. package/dist/tools/kairos_search_schema.d.ts.map +1 -0
  152. package/dist/tools/kairos_search_schema.js +34 -0
  153. package/dist/tools/kairos_search_schema.js.map +1 -0
  154. package/dist/tools/kairos_spaces.d.ts.map +1 -1
  155. package/dist/tools/kairos_spaces.js +3 -17
  156. package/dist/tools/kairos_spaces.js.map +1 -1
  157. package/dist/tools/kairos_spaces_schema.d.ts +18 -0
  158. package/dist/tools/kairos_spaces_schema.d.ts.map +1 -0
  159. package/dist/tools/kairos_spaces_schema.js +18 -0
  160. package/dist/tools/kairos_spaces_schema.js.map +1 -0
  161. package/dist/tools/kairos_update.d.ts +4 -0
  162. package/dist/tools/kairos_update.d.ts.map +1 -1
  163. package/dist/tools/kairos_update.js +86 -136
  164. package/dist/tools/kairos_update.js.map +1 -1
  165. package/dist/tools/kairos_update_schema.d.ts +21 -0
  166. package/dist/tools/kairos_update_schema.d.ts.map +1 -0
  167. package/dist/tools/kairos_update_schema.js +19 -0
  168. package/dist/tools/kairos_update_schema.js.map +1 -0
  169. package/dist/ui/assets/{AccountPage-ABQtEvrl.js → AccountPage-BL6axdSM.js} +1 -1
  170. package/dist/ui/assets/{ErrorAlert-mWXE_ybA.js → ErrorAlert-BZ9fcFra.js} +1 -1
  171. package/dist/ui/assets/HomePage-DW0pRc7p.js +1 -0
  172. package/dist/ui/assets/KairosPage-DmLqoGH6.js +1 -0
  173. package/dist/ui/assets/{NotFoundPage-CFLCpS7F.js → NotFoundPage-D_pmwlaP.js} +1 -1
  174. package/dist/ui/assets/{ProtocolDetailPage-PM8MMjGn.js → ProtocolDetailPage-CJNogAl5.js} +1 -1
  175. package/dist/ui/assets/ProtocolEditPage-Bkzigacr.js +1 -0
  176. package/dist/ui/assets/RenderedMarkdown-aCE5th2O.js +1 -0
  177. package/dist/ui/assets/RunGuidedPage-D4bM9Ydy.js +1 -0
  178. package/dist/ui/assets/{RunsPage-B05ZgMbz.js → RunsPage-DkKysBby.js} +1 -1
  179. package/dist/ui/assets/{SkillBundlePage-BGil3a6Z.js → SkillBundlePage-BuqWxuKQ.js} +1 -1
  180. package/dist/ui/assets/{index-BIjAxCcH.css → index-BKt9Ajxh.css} +1 -1
  181. package/dist/ui/assets/index-CEw29yv9.js +8 -0
  182. package/dist/ui/assets/tiptap-TmXkXpg-.js +208 -0
  183. package/dist/ui/assets/{useProtocol-BeICXNOH.js → useProtocol-DRmomlxF.js} +1 -1
  184. package/dist/ui/assets/useSpaces-s_4tANjH.js +1 -0
  185. package/dist/ui/assets/{vendor-BsznKrmc.js → vendor-B9cF_9Dh.js} +23 -8
  186. package/dist/ui/index.html +3 -3
  187. package/package.json +8 -1
  188. package/dist/ui/assets/HomePage-CzSCu1zr.js +0 -1
  189. package/dist/ui/assets/KairosPage-CQPPSXnp.js +0 -1
  190. package/dist/ui/assets/ProtocolEditPage-DZ3Y4CuH.js +0 -1
  191. package/dist/ui/assets/RenderedMarkdown-BW0nFg56.js +0 -1
  192. package/dist/ui/assets/RunGuidedPage-id4Rq3wv.js +0 -1
  193. package/dist/ui/assets/index-CLE0f6T2.js +0 -8
  194. package/dist/ui/assets/tiptap-B72-Jr8c.js +0 -204
  195. /package/dist/ui/assets/{useRunSession-Bo27WurC.js → useRunSession-CciNdgs6.js} +0 -0
@@ -1,31 +1,31 @@
1
1
  /**
2
- * API Client for KAIROS REST API
2
+ * API Client for KAIROS REST API.
3
+ * Returns canonical response shapes (no metadata wrapper).
3
4
  */
4
- export interface ApiResponse<T = any> {
5
- data?: T;
6
- error?: string;
7
- message?: string;
8
- metadata?: {
9
- duration_ms?: number;
10
- cached?: boolean;
11
- };
12
- }
5
+ import type { SearchOutput } from '../tools/kairos_search_schema.js';
6
+ import type { BeginOutput } from '../tools/kairos_begin.js';
7
+ import type { NextOutput } from '../tools/kairos_next.js';
8
+ import type { AttestOutput } from '../tools/kairos_attest_schema.js';
9
+ import type { MintOutput } from '../tools/kairos_mint_schema.js';
10
+ import type { UpdateOutput } from '../tools/kairos_update_schema.js';
11
+ import type { DeleteOutput } from '../tools/kairos_delete_schema.js';
13
12
  export declare class ApiClient {
14
13
  private baseUrl;
15
- constructor(baseUrl?: string);
14
+ private openInBrowser;
15
+ constructor(baseUrl?: string, openInBrowser?: boolean);
16
16
  private request;
17
- search(query: string): Promise<ApiResponse>;
18
- begin(uri: string): Promise<ApiResponse>;
19
- next(uri: string, solution?: any): Promise<ApiResponse>;
17
+ search(query: string): Promise<SearchOutput>;
18
+ begin(uri: string): Promise<BeginOutput>;
19
+ next(uri: string, solution?: unknown): Promise<NextOutput>;
20
20
  mint(markdown: string, options?: {
21
21
  llmModelId?: string;
22
22
  force?: boolean;
23
- }): Promise<ApiResponse>;
24
- update(uris: string[], markdownDoc?: string[], updates?: Record<string, any>): Promise<ApiResponse>;
25
- delete(uris: string[]): Promise<ApiResponse>;
23
+ }, isRetryAfterLogin?: boolean): Promise<MintOutput>;
24
+ update(uris: string[], markdownDoc?: string[], updates?: Record<string, unknown>): Promise<UpdateOutput>;
25
+ delete(uris: string[]): Promise<DeleteOutput>;
26
26
  attest(uri: string, outcome: 'success' | 'failure', message: string, options?: {
27
27
  qualityBonus?: number;
28
28
  llmModelId?: string;
29
- }): Promise<ApiResponse>;
29
+ }): Promise<AttestOutput>;
30
30
  }
31
31
  //# sourceMappingURL=api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/cli/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAChC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACL;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;YAOd,OAAO;IAmCf,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO3C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAOvD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAsChG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAOnG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAO5C,MAAM,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACzD,OAAO,CAAC,WAAW,CAAC;CAY1B"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/cli/api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,qBAAa,SAAS;IAClB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAU;gBAEnB,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO;YASvC,OAAO;IA8Df,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAO5C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAO1D,IAAI,CACN,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAClD,iBAAiB,UAAQ,GAC1B,OAAO,CAAC,UAAU,CAAC;IA8ChB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAOxG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAO7C,MAAM,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACzD,OAAO,CAAC,YAAY,CAAC;CAY3B"}
@@ -1,37 +1,73 @@
1
1
  /**
2
- * API Client for KAIROS REST API
2
+ * API Client for KAIROS REST API.
3
+ * Returns canonical response shapes (no metadata wrapper).
3
4
  */
5
+ import { AuthRequiredError } from './auth-error.js';
4
6
  import { getApiUrl } from './config.js';
7
+ import { getDefaultApiUrlFromFile, readConfig } from './config-file.js';
8
+ import { loginWithBrowser } from './commands/login.js';
5
9
  export class ApiClient {
6
10
  baseUrl;
7
- constructor(baseUrl) {
8
- // Check environment variable first (set by CLI hook), then parameter, then default
9
- this.baseUrl = process.env['KAIROS_API_URL'] || baseUrl || getApiUrl();
10
- // Remove trailing slash
11
+ openInBrowser;
12
+ constructor(baseUrl, openInBrowser) {
13
+ // Precedence: env, then parameter, then config file (sync URL only), then default. openInBrowser true = auto-login on 401 or no token
14
+ const configUrl = getDefaultApiUrlFromFile();
15
+ this.baseUrl = process.env['KAIROS_API_URL'] || baseUrl || configUrl || getApiUrl();
11
16
  this.baseUrl = this.baseUrl.replace(/\/$/, '');
17
+ const noAutoLogin = process.env['KAIROS_CLI_NO_AUTO_LOGIN'] === '1' || process.env['KAIROS_CLI_NO_AUTO_LOGIN'] === 'true';
18
+ this.openInBrowser = !noAutoLogin && (openInBrowser !== false);
12
19
  }
13
- async request(endpoint, options = {}) {
20
+ async request(endpoint, options = {}, isRetryAfterLogin = false) {
14
21
  const url = `${this.baseUrl}${endpoint}`;
15
22
  const defaultHeaders = {
16
23
  'Content-Type': 'application/json',
17
24
  };
18
- const bearer = process.env['KAIROS_BEARER_TOKEN'];
25
+ let bearer = (await readConfig(this.baseUrl)).bearerToken;
26
+ if (!bearer && this.openInBrowser && !isRetryAfterLogin) {
27
+ const ok = await loginWithBrowser(this.baseUrl);
28
+ if (ok)
29
+ return this.request(endpoint, options, true);
30
+ }
19
31
  if (bearer) {
20
32
  defaultHeaders['Authorization'] = `Bearer ${bearer}`;
21
33
  }
22
- const response = await fetch(url, {
23
- ...options,
24
- headers: {
25
- ...defaultHeaders,
26
- ...(options.headers || {}),
27
- },
28
- });
34
+ const requestTimeoutMs = 15_000;
35
+ const ac = new AbortController();
36
+ const timeoutId = setTimeout(() => ac.abort(), requestTimeoutMs);
37
+ let response;
38
+ try {
39
+ response = await fetch(url, {
40
+ ...options,
41
+ signal: ac.signal,
42
+ headers: {
43
+ ...defaultHeaders,
44
+ ...(options.headers || {}),
45
+ },
46
+ });
47
+ }
48
+ catch (err) {
49
+ clearTimeout(timeoutId);
50
+ if (err instanceof Error && err.name === 'AbortError') {
51
+ throw new Error(`Request to ${url} timed out after ${requestTimeoutMs / 1000}s`);
52
+ }
53
+ throw err;
54
+ }
55
+ clearTimeout(timeoutId);
29
56
  const data = await response.json().catch(() => {
30
57
  throw new Error(`Failed to parse response from ${url}`);
31
58
  });
32
59
  if (!response.ok) {
33
60
  const errorData = data;
34
- throw new Error(errorData.message || errorData.error || `HTTP ${response.status}: ${response.statusText}`);
61
+ const msg = errorData.message || errorData.error || `HTTP ${response.status}: ${response.statusText}`;
62
+ if (response.status === 401 && errorData.login_url) {
63
+ if (this.openInBrowser && !isRetryAfterLogin) {
64
+ const ok = await loginWithBrowser(this.baseUrl);
65
+ if (ok)
66
+ return this.request(endpoint, options, true);
67
+ }
68
+ throw new AuthRequiredError(`${msg}\n\nLog in at:\n${errorData.login_url}`, errorData.login_url);
69
+ }
70
+ throw new Error(msg);
35
71
  }
36
72
  return data;
37
73
  }
@@ -53,12 +89,12 @@ export class ApiClient {
53
89
  body: JSON.stringify({ uri, solution }),
54
90
  });
55
91
  }
56
- async mint(markdown, options) {
92
+ async mint(markdown, options, isRetryAfterLogin = false) {
57
93
  const url = `${this.baseUrl}/api/kairos_mint/raw`;
58
94
  const headers = {
59
95
  'Content-Type': 'text/markdown',
60
96
  };
61
- const bearer = process.env['KAIROS_BEARER_TOKEN'];
97
+ const bearer = (await readConfig(this.baseUrl)).bearerToken;
62
98
  if (bearer) {
63
99
  headers['Authorization'] = `Bearer ${bearer}`;
64
100
  }
@@ -77,8 +113,16 @@ export class ApiClient {
77
113
  throw new Error(`Failed to parse response from ${url}`);
78
114
  });
79
115
  if (!response.ok) {
80
- const errorData = data;
81
- throw new Error(errorData.message || errorData.error || `HTTP ${response.status}: ${response.statusText}`);
116
+ const msg = data.message || data.error || `HTTP ${response.status}: ${response.statusText}`;
117
+ if (response.status === 401 && data.login_url) {
118
+ if (this.openInBrowser && !isRetryAfterLogin) {
119
+ const ok = await loginWithBrowser(this.baseUrl);
120
+ if (ok)
121
+ return this.mint(markdown, options, true);
122
+ }
123
+ throw new AuthRequiredError(`${msg}\n\nLog in at:\n${data.login_url}`, data.login_url);
124
+ }
125
+ throw new Error(msg);
82
126
  }
83
127
  return data;
84
128
  }
@@ -101,7 +145,7 @@ export class ApiClient {
101
145
  uri,
102
146
  outcome,
103
147
  message,
104
- quality_bonus: options?.qualityBonus || 0,
148
+ quality_bonus: options?.qualityBonus ?? 0,
105
149
  llm_model_id: options?.llmModelId,
106
150
  }),
107
151
  });
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/cli/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/cli/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Auth-related errors and handling (401 with login_url).
3
+ * Auth message is written without "Error: " prefix; --open can open the URL.
4
+ */
5
+ export declare class AuthRequiredError extends Error {
6
+ readonly loginUrl: string;
7
+ constructor(message: string, loginUrl: string);
8
+ }
9
+ /** When set, used instead of system default (open/xdg-open/start). URL is passed as first argument. */
10
+ export declare function openBrowser(url: string): void;
11
+ /**
12
+ * Handle API errors: AuthRequiredError is printed without "Error: " prefix;
13
+ * if openInBrowser is true, opens the login URL. Other errors use writeError.
14
+ * Never returns (calls process.exit(1)).
15
+ */
16
+ export declare function handleApiError(error: unknown, openInBrowser?: boolean): never;
17
+ //# sourceMappingURL=auth-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-error.d.ts","sourceRoot":"","sources":["../../src/cli/auth-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,iBAAkB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAKhD;AAED,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiB7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAQ7E"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Auth-related errors and handling (401 with login_url).
3
+ * Auth message is written without "Error: " prefix; --open can open the URL.
4
+ */
5
+ import { exec } from 'child_process';
6
+ import { platform } from 'os';
7
+ import { writeError, writeStderr } from './output.js';
8
+ export class AuthRequiredError extends Error {
9
+ loginUrl;
10
+ constructor(message, loginUrl) {
11
+ super(message);
12
+ this.name = 'AuthRequiredError';
13
+ this.loginUrl = loginUrl;
14
+ }
15
+ }
16
+ /** When set, used instead of system default (open/xdg-open/start). URL is passed as first argument. */
17
+ export function openBrowser(url) {
18
+ const browserEnv = process.env['BROWSER'];
19
+ if (browserEnv) {
20
+ exec(`${browserEnv} "${url}"`, (err) => {
21
+ if (err)
22
+ writeStderr(`Could not run BROWSER: ${err.message}. Open this URL manually:\n${url}`);
23
+ });
24
+ return;
25
+ }
26
+ const cmd = platform() === 'win32'
27
+ ? `start "${url}"`
28
+ : platform() === 'darwin'
29
+ ? `open "${url}"`
30
+ : `xdg-open "${url}"`;
31
+ exec(cmd, (err) => {
32
+ if (err)
33
+ writeStderr(`Could not open browser: ${err.message}. Open this URL manually:\n${url}`);
34
+ });
35
+ }
36
+ /**
37
+ * Handle API errors: AuthRequiredError is printed without "Error: " prefix;
38
+ * if openInBrowser is true, opens the login URL. Other errors use writeError.
39
+ * Never returns (calls process.exit(1)).
40
+ */
41
+ export function handleApiError(error, openInBrowser) {
42
+ if (error instanceof AuthRequiredError) {
43
+ writeStderr(error.message);
44
+ if (openInBrowser)
45
+ openBrowser(error.loginUrl);
46
+ process.exit(1);
47
+ }
48
+ writeError(error instanceof Error ? error.message : String(error));
49
+ process.exit(1);
50
+ }
51
+ //# sourceMappingURL=auth-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-error.js","sourceRoot":"","sources":["../../src/cli/auth-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC/B,QAAQ,CAAS;IAE1B,YAAY,OAAe,EAAE,QAAgB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED,uGAAuG;AACvG,MAAM,UAAU,WAAW,CAAC,GAAW;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,UAAU,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACnC,IAAI,GAAG;gBAAE,WAAW,CAAC,0BAA0B,GAAG,CAAC,OAAO,8BAA8B,GAAG,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QACH,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GACL,QAAQ,EAAE,KAAK,OAAO;QAClB,CAAC,CAAC,UAAU,GAAG,GAAG;QAClB,CAAC,CAAC,QAAQ,EAAE,KAAK,QAAQ;YACvB,CAAC,CAAC,SAAS,GAAG,GAAG;YACjB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QACd,IAAI,GAAG;YAAE,WAAW,CAAC,2BAA2B,GAAG,CAAC,OAAO,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,aAAuB;IAClE,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACrC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,aAAa;YAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"attest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/attest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2DpD"}
1
+ {"version":3,"file":"attest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/attest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgDpD"}
@@ -2,6 +2,7 @@
2
2
  * kairos attest command (V2: no final_solution required)
3
3
  */
4
4
  import { ApiClient } from '../api-client.js';
5
+ import { handleApiError } from '../auth-error.js';
5
6
  import { writeError, writeJson } from '../output.js';
6
7
  export function attestCommand(program) {
7
8
  program
@@ -25,7 +26,7 @@ export function attestCommand(program) {
25
26
  process.exit(1);
26
27
  return;
27
28
  }
28
- const client = new ApiClient();
29
+ const client = new ApiClient(undefined, !program.opts()['noBrowser']);
29
30
  const attestOptions = {
30
31
  qualityBonus,
31
32
  };
@@ -33,19 +34,10 @@ export function attestCommand(program) {
33
34
  attestOptions.llmModelId = options.model;
34
35
  }
35
36
  const response = await client.attest(uri, outcome, message, attestOptions);
36
- if (response.error) {
37
- writeError(response.error);
38
- if (response.message) {
39
- writeError(response.message);
40
- }
41
- process.exit(1);
42
- return;
43
- }
44
37
  writeJson(response);
45
38
  }
46
39
  catch (error) {
47
- writeError(error instanceof Error ? error.message : String(error));
48
- process.exit(1);
40
+ handleApiError(error, !program.opts()['noBrowser']);
49
41
  }
50
42
  });
51
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attest.js","sourceRoot":"","sources":["../../../src/cli/commands/attest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC1C,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mDAAmD,CAAC;SAChE,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;SACzD,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;SACpD,QAAQ,CAAC,WAAW,EAAE,0DAA0D,CAAC;SACjF,MAAM,CAAC,0BAA0B,EAAE,gDAAgD,EAAE,GAAG,CAAC;SACzF,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,CAAC;SACrF,MAAM,CAAC,KAAK,EACT,GAAW,EACX,OAAe,EACf,OAAe,EACf,OAAkD,EACpD,EAAE;QACA,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjD,UAAU,CAAC,wCAAwC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtB,UAAU,CAAC,kCAAkC,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAE/B,MAAM,aAAa,GAAmD;gBAClE,YAAY;aACf,CAAC;YACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;YAC7C,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,GAAG,EACH,OAAgC,EAChC,OAAO,EACP,aAAa,CAChB,CAAC;YAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"attest.js","sourceRoot":"","sources":["../../../src/cli/commands/attest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC1C,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mDAAmD,CAAC;SAChE,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;SACzD,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;SACpD,QAAQ,CAAC,WAAW,EAAE,0DAA0D,CAAC;SACjF,MAAM,CAAC,0BAA0B,EAAE,gDAAgD,EAAE,GAAG,CAAC;SACzF,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,CAAC;SACrF,MAAM,CAAC,KAAK,EACT,GAAW,EACX,OAAe,EACf,OAAe,EACf,OAAkD,EACpD,EAAE;QACA,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjD,UAAU,CAAC,wCAAwC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtB,UAAU,CAAC,kCAAkC,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAEtE,MAAM,aAAa,GAAmD;gBAClE,YAAY;aACf,CAAC;YACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;YAC7C,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,GAAG,EACH,OAAgC,EAChC,OAAO,EACP,aAAa,CAChB,CAAC;YACF,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"begin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/begin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0BnD"}
1
+ {"version":3,"file":"begin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/begin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAcnD"}
@@ -2,7 +2,8 @@
2
2
  * kairos begin command - Read step 1 (no proof-of-work required)
3
3
  */
4
4
  import { ApiClient } from '../api-client.js';
5
- import { writeError, writeJson } from '../output.js';
5
+ import { handleApiError } from '../auth-error.js';
6
+ import { writeJson } from '../output.js';
6
7
  export function beginCommand(program) {
7
8
  program
8
9
  .command('begin')
@@ -10,22 +11,12 @@ export function beginCommand(program) {
10
11
  .argument('<uri>', 'KAIROS memory URI (kairos://mem/...)')
11
12
  .action(async (uri) => {
12
13
  try {
13
- const client = new ApiClient();
14
+ const client = new ApiClient(undefined, !program.opts()['noBrowser']);
14
15
  const response = await client.begin(uri);
15
- if (response.error) {
16
- writeError(response.error);
17
- if (response.message) {
18
- writeError(response.message);
19
- }
20
- process.exit(1);
21
- return;
22
- }
23
- // Pretty print the response
24
16
  writeJson(response);
25
17
  }
26
18
  catch (error) {
27
- writeError(error instanceof Error ? error.message : String(error));
28
- process.exit(1);
19
+ handleApiError(error, !program.opts()['noBrowser']);
29
20
  }
30
21
  });
31
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"begin.js","sourceRoot":"","sources":["../../../src/cli/commands/begin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,YAAY,CAAC,OAAgB;IACzC,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4EAA4E,CAAC;SACzF,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC1B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEzC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,4BAA4B;YAC5B,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"begin.js","sourceRoot":"","sources":["../../../src/cli/commands/begin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,OAAgB;IACzC,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4EAA4E,CAAC;SACzF,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC1B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0BpD"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAcpD"}
@@ -2,7 +2,8 @@
2
2
  * kairos delete command
3
3
  */
4
4
  import { ApiClient } from '../api-client.js';
5
- import { writeError, writeJson } from '../output.js';
5
+ import { handleApiError } from '../auth-error.js';
6
+ import { writeJson } from '../output.js';
6
7
  export function deleteCommand(program) {
7
8
  program
8
9
  .command('delete')
@@ -10,22 +11,12 @@ export function deleteCommand(program) {
10
11
  .argument('<uris...>', 'KAIROS memory URIs (kairos://mem/...)')
11
12
  .action(async (uris) => {
12
13
  try {
13
- const client = new ApiClient();
14
+ const client = new ApiClient(undefined, !program.opts()['noBrowser']);
14
15
  const response = await client.delete(uris);
15
- if (response.error) {
16
- writeError(response.error);
17
- if (response.message) {
18
- writeError(response.message);
19
- }
20
- process.exit(1);
21
- return;
22
- }
23
- // Pretty print the response
24
16
  writeJson(response);
25
17
  }
26
18
  catch (error) {
27
- writeError(error instanceof Error ? error.message : String(error));
28
- process.exit(1);
19
+ handleApiError(error, !program.opts()['noBrowser']);
29
20
  }
30
21
  });
31
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC1C,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,WAAW,EAAE,uCAAuC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAAc,EAAE,EAAE;QAC7B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,4BAA4B;YAC5B,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC1C,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,WAAW,EAAE,uCAAuC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAAc,EAAE,EAAE;QAC7B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * kairos login — obtain and store a Bearer token (--token or browser + PKCE).
3
+ */
4
+ import { Command } from 'commander';
5
+ /** Resolve current API base URL (env, then config default, then getApiUrl()). Exported for logout. */
6
+ export declare function getBaseUrl(): string;
7
+ /** Check if token is valid (GET /api/me). Used by login to skip relogin and by ApiClient. */
8
+ export declare function isTokenValid(baseUrl: string, token: string): Promise<boolean>;
9
+ export interface LoginWithBrowserOptions {
10
+ /** If true, only print auth URL to stdout; do not open browser. */
11
+ noBrowser?: boolean;
12
+ }
13
+ /** Run browser PKCE login and store token. Exported for 401+--open retry from ApiClient. */
14
+ export declare function loginWithBrowser(baseUrl: string, options?: LoginWithBrowserOptions): Promise<boolean>;
15
+ export declare function loginCommand(program: Command): void;
16
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,sGAAsG;AACtG,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,6FAA6F;AAC7F,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKnF;AAuBD,MAAM,WAAW,uBAAuB;IACpC,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,4FAA4F;AAC5F,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuI3G;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BnD"}