@fluxra-ai/fluxra-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +274 -0
  3. package/bin/fluxra +6 -0
  4. package/dist/cli/command-context.d.ts +17 -0
  5. package/dist/cli/command-context.d.ts.map +1 -0
  6. package/dist/cli/command-context.js +26 -0
  7. package/dist/cli/command-context.js.map +1 -0
  8. package/dist/cli/commands/auth/index.d.ts +3 -0
  9. package/dist/cli/commands/auth/index.d.ts.map +1 -0
  10. package/dist/cli/commands/auth/index.js +165 -0
  11. package/dist/cli/commands/auth/index.js.map +1 -0
  12. package/dist/cli/commands/chat/index.d.ts +3 -0
  13. package/dist/cli/commands/chat/index.d.ts.map +1 -0
  14. package/dist/cli/commands/chat/index.js +1201 -0
  15. package/dist/cli/commands/chat/index.js.map +1 -0
  16. package/dist/cli/commands/config/index.d.ts +3 -0
  17. package/dist/cli/commands/config/index.d.ts.map +1 -0
  18. package/dist/cli/commands/config/index.js +66 -0
  19. package/dist/cli/commands/config/index.js.map +1 -0
  20. package/dist/cli/commands/help.d.ts +7 -0
  21. package/dist/cli/commands/help.d.ts.map +1 -0
  22. package/dist/cli/commands/help.js +106 -0
  23. package/dist/cli/commands/help.js.map +1 -0
  24. package/dist/cli/commands/local/doctor.d.ts +26 -0
  25. package/dist/cli/commands/local/doctor.d.ts.map +1 -0
  26. package/dist/cli/commands/local/doctor.js +265 -0
  27. package/dist/cli/commands/local/doctor.js.map +1 -0
  28. package/dist/cli/commands/local/export.d.ts +41 -0
  29. package/dist/cli/commands/local/export.d.ts.map +1 -0
  30. package/dist/cli/commands/local/export.js +83 -0
  31. package/dist/cli/commands/local/export.js.map +1 -0
  32. package/dist/cli/commands/local/index.d.ts +6 -0
  33. package/dist/cli/commands/local/index.d.ts.map +1 -0
  34. package/dist/cli/commands/local/index.js +116 -0
  35. package/dist/cli/commands/local/index.js.map +1 -0
  36. package/dist/cli/commands/local/inspect.d.ts +42 -0
  37. package/dist/cli/commands/local/inspect.d.ts.map +1 -0
  38. package/dist/cli/commands/local/inspect.js +125 -0
  39. package/dist/cli/commands/local/inspect.js.map +1 -0
  40. package/dist/cli/commands/mcp.d.ts +8 -0
  41. package/dist/cli/commands/mcp.d.ts.map +1 -0
  42. package/dist/cli/commands/mcp.js +253 -0
  43. package/dist/cli/commands/mcp.js.map +1 -0
  44. package/dist/cli/commands/profile/index.d.ts +3 -0
  45. package/dist/cli/commands/profile/index.d.ts.map +1 -0
  46. package/dist/cli/commands/profile/index.js +114 -0
  47. package/dist/cli/commands/profile/index.js.map +1 -0
  48. package/dist/cli/commands/schema.d.ts +7 -0
  49. package/dist/cli/commands/schema.d.ts.map +1 -0
  50. package/dist/cli/commands/schema.js +33 -0
  51. package/dist/cli/commands/schema.js.map +1 -0
  52. package/dist/cli/errors.d.ts +16 -0
  53. package/dist/cli/errors.d.ts.map +1 -0
  54. package/dist/cli/errors.js +15 -0
  55. package/dist/cli/errors.js.map +1 -0
  56. package/dist/cli/fluxra.d.ts +9 -0
  57. package/dist/cli/fluxra.d.ts.map +1 -0
  58. package/dist/cli/fluxra.js +55 -0
  59. package/dist/cli/fluxra.js.map +1 -0
  60. package/dist/cli/helpers.d.ts +13 -0
  61. package/dist/cli/helpers.d.ts.map +1 -0
  62. package/dist/cli/helpers.js +32 -0
  63. package/dist/cli/helpers.js.map +1 -0
  64. package/dist/cli/output.d.ts +14 -0
  65. package/dist/cli/output.d.ts.map +1 -0
  66. package/dist/cli/output.js +55 -0
  67. package/dist/cli/output.js.map +1 -0
  68. package/dist/cli/version.d.ts +6 -0
  69. package/dist/cli/version.d.ts.map +1 -0
  70. package/dist/cli/version.js +8 -0
  71. package/dist/cli/version.js.map +1 -0
  72. package/dist/core/auth/auth-service.d.ts +35 -0
  73. package/dist/core/auth/auth-service.d.ts.map +1 -0
  74. package/dist/core/auth/auth-service.js +116 -0
  75. package/dist/core/auth/auth-service.js.map +1 -0
  76. package/dist/core/config/global-config.d.ts +38 -0
  77. package/dist/core/config/global-config.d.ts.map +1 -0
  78. package/dist/core/config/global-config.js +75 -0
  79. package/dist/core/config/global-config.js.map +1 -0
  80. package/dist/core/errors/error-model.d.ts +48 -0
  81. package/dist/core/errors/error-model.d.ts.map +1 -0
  82. package/dist/core/errors/error-model.js +152 -0
  83. package/dist/core/errors/error-model.js.map +1 -0
  84. package/dist/core/filesystem/paths.d.ts +45 -0
  85. package/dist/core/filesystem/paths.d.ts.map +1 -0
  86. package/dist/core/filesystem/paths.js +77 -0
  87. package/dist/core/filesystem/paths.js.map +1 -0
  88. package/dist/core/http/auth-api.d.ts +71 -0
  89. package/dist/core/http/auth-api.d.ts.map +1 -0
  90. package/dist/core/http/auth-api.js +91 -0
  91. package/dist/core/http/auth-api.js.map +1 -0
  92. package/dist/core/http/block-api.d.ts +37 -0
  93. package/dist/core/http/block-api.d.ts.map +1 -0
  94. package/dist/core/http/block-api.js +36 -0
  95. package/dist/core/http/block-api.js.map +1 -0
  96. package/dist/core/http/chat-api.d.ts +41 -0
  97. package/dist/core/http/chat-api.d.ts.map +1 -0
  98. package/dist/core/http/chat-api.js +88 -0
  99. package/dist/core/http/chat-api.js.map +1 -0
  100. package/dist/core/http/conversation-management-api.d.ts +65 -0
  101. package/dist/core/http/conversation-management-api.d.ts.map +1 -0
  102. package/dist/core/http/conversation-management-api.js +59 -0
  103. package/dist/core/http/conversation-management-api.js.map +1 -0
  104. package/dist/core/http/directory-api.d.ts +32 -0
  105. package/dist/core/http/directory-api.d.ts.map +1 -0
  106. package/dist/core/http/directory-api.js +36 -0
  107. package/dist/core/http/directory-api.js.map +1 -0
  108. package/dist/core/http/directory-profile-api.d.ts +32 -0
  109. package/dist/core/http/directory-profile-api.d.ts.map +1 -0
  110. package/dist/core/http/directory-profile-api.js +39 -0
  111. package/dist/core/http/directory-profile-api.js.map +1 -0
  112. package/dist/core/http/http-client.d.ts +41 -0
  113. package/dist/core/http/http-client.d.ts.map +1 -0
  114. package/dist/core/http/http-client.js +127 -0
  115. package/dist/core/http/http-client.js.map +1 -0
  116. package/dist/core/http/message-api.d.ts +55 -0
  117. package/dist/core/http/message-api.d.ts.map +1 -0
  118. package/dist/core/http/message-api.js +64 -0
  119. package/dist/core/http/message-api.js.map +1 -0
  120. package/dist/core/http/rate-limit.d.ts +22 -0
  121. package/dist/core/http/rate-limit.d.ts.map +1 -0
  122. package/dist/core/http/rate-limit.js +66 -0
  123. package/dist/core/http/rate-limit.js.map +1 -0
  124. package/dist/core/http/token-lifecycle.d.ts +18 -0
  125. package/dist/core/http/token-lifecycle.d.ts.map +1 -0
  126. package/dist/core/http/token-lifecycle.js +73 -0
  127. package/dist/core/http/token-lifecycle.js.map +1 -0
  128. package/dist/core/locking/profile-lock.d.ts +32 -0
  129. package/dist/core/locking/profile-lock.d.ts.map +1 -0
  130. package/dist/core/locking/profile-lock.js +104 -0
  131. package/dist/core/locking/profile-lock.js.map +1 -0
  132. package/dist/core/profiles/profile-service.d.ts +35 -0
  133. package/dist/core/profiles/profile-service.d.ts.map +1 -0
  134. package/dist/core/profiles/profile-service.js +119 -0
  135. package/dist/core/profiles/profile-service.js.map +1 -0
  136. package/dist/core/profiles/profile-types.d.ts +28 -0
  137. package/dist/core/profiles/profile-types.d.ts.map +1 -0
  138. package/dist/core/profiles/profile-types.js +13 -0
  139. package/dist/core/profiles/profile-types.js.map +1 -0
  140. package/dist/core/secrets/secrets-service.d.ts +25 -0
  141. package/dist/core/secrets/secrets-service.d.ts.map +1 -0
  142. package/dist/core/secrets/secrets-service.js +67 -0
  143. package/dist/core/secrets/secrets-service.js.map +1 -0
  144. package/dist/core/secrets/secrets-types.d.ts +29 -0
  145. package/dist/core/secrets/secrets-types.d.ts.map +1 -0
  146. package/dist/core/secrets/secrets-types.js +33 -0
  147. package/dist/core/secrets/secrets-types.js.map +1 -0
  148. package/dist/core/sqlite/chat-schema.d.ts +14 -0
  149. package/dist/core/sqlite/chat-schema.d.ts.map +1 -0
  150. package/dist/core/sqlite/chat-schema.js +172 -0
  151. package/dist/core/sqlite/chat-schema.js.map +1 -0
  152. package/dist/core/sqlite/core-schema.d.ts +14 -0
  153. package/dist/core/sqlite/core-schema.d.ts.map +1 -0
  154. package/dist/core/sqlite/core-schema.js +54 -0
  155. package/dist/core/sqlite/core-schema.js.map +1 -0
  156. package/dist/core/sqlite/database.d.ts +40 -0
  157. package/dist/core/sqlite/database.d.ts.map +1 -0
  158. package/dist/core/sqlite/database.js +68 -0
  159. package/dist/core/sqlite/database.js.map +1 -0
  160. package/dist/core/sqlite/migrations.d.ts +22 -0
  161. package/dist/core/sqlite/migrations.d.ts.map +1 -0
  162. package/dist/core/sqlite/migrations.js +64 -0
  163. package/dist/core/sqlite/migrations.js.map +1 -0
  164. package/dist/modules/chat/inbox/conversation-service.d.ts +35 -0
  165. package/dist/modules/chat/inbox/conversation-service.d.ts.map +1 -0
  166. package/dist/modules/chat/inbox/conversation-service.js +54 -0
  167. package/dist/modules/chat/inbox/conversation-service.js.map +1 -0
  168. package/dist/modules/chat/inbox/history-service.d.ts +25 -0
  169. package/dist/modules/chat/inbox/history-service.d.ts.map +1 -0
  170. package/dist/modules/chat/inbox/history-service.js +57 -0
  171. package/dist/modules/chat/inbox/history-service.js.map +1 -0
  172. package/dist/modules/chat/inbox/index.d.ts +9 -0
  173. package/dist/modules/chat/inbox/index.d.ts.map +1 -0
  174. package/dist/modules/chat/inbox/index.js +9 -0
  175. package/dist/modules/chat/inbox/index.js.map +1 -0
  176. package/dist/modules/chat/inbox/read-service.d.ts +36 -0
  177. package/dist/modules/chat/inbox/read-service.d.ts.map +1 -0
  178. package/dist/modules/chat/inbox/read-service.js +91 -0
  179. package/dist/modules/chat/inbox/read-service.js.map +1 -0
  180. package/dist/modules/chat/inbox/search-service.d.ts +20 -0
  181. package/dist/modules/chat/inbox/search-service.d.ts.map +1 -0
  182. package/dist/modules/chat/inbox/search-service.js +23 -0
  183. package/dist/modules/chat/inbox/search-service.js.map +1 -0
  184. package/dist/modules/chat/inbox/unread-service.d.ts +38 -0
  185. package/dist/modules/chat/inbox/unread-service.d.ts.map +1 -0
  186. package/dist/modules/chat/inbox/unread-service.js +65 -0
  187. package/dist/modules/chat/inbox/unread-service.js.map +1 -0
  188. package/dist/modules/chat/render/message-render.d.ts +35 -0
  189. package/dist/modules/chat/render/message-render.d.ts.map +1 -0
  190. package/dist/modules/chat/render/message-render.js +129 -0
  191. package/dist/modules/chat/render/message-render.js.map +1 -0
  192. package/dist/modules/chat/send/conversation-service.d.ts +53 -0
  193. package/dist/modules/chat/send/conversation-service.d.ts.map +1 -0
  194. package/dist/modules/chat/send/conversation-service.js +110 -0
  195. package/dist/modules/chat/send/conversation-service.js.map +1 -0
  196. package/dist/modules/chat/send/directory-cache-service.d.ts +37 -0
  197. package/dist/modules/chat/send/directory-cache-service.d.ts.map +1 -0
  198. package/dist/modules/chat/send/directory-cache-service.js +49 -0
  199. package/dist/modules/chat/send/directory-cache-service.js.map +1 -0
  200. package/dist/modules/chat/send/send-service.d.ts +36 -0
  201. package/dist/modules/chat/send/send-service.d.ts.map +1 -0
  202. package/dist/modules/chat/send/send-service.js +113 -0
  203. package/dist/modules/chat/send/send-service.js.map +1 -0
  204. package/dist/modules/chat/store/conversation-repo.d.ts +53 -0
  205. package/dist/modules/chat/store/conversation-repo.d.ts.map +1 -0
  206. package/dist/modules/chat/store/conversation-repo.js +75 -0
  207. package/dist/modules/chat/store/conversation-repo.js.map +1 -0
  208. package/dist/modules/chat/store/directory-cache-repo.d.ts +41 -0
  209. package/dist/modules/chat/store/directory-cache-repo.d.ts.map +1 -0
  210. package/dist/modules/chat/store/directory-cache-repo.js +64 -0
  211. package/dist/modules/chat/store/directory-cache-repo.js.map +1 -0
  212. package/dist/modules/chat/store/job-repo.d.ts +72 -0
  213. package/dist/modules/chat/store/job-repo.d.ts.map +1 -0
  214. package/dist/modules/chat/store/job-repo.js +140 -0
  215. package/dist/modules/chat/store/job-repo.js.map +1 -0
  216. package/dist/modules/chat/store/message-repo.d.ts +98 -0
  217. package/dist/modules/chat/store/message-repo.d.ts.map +1 -0
  218. package/dist/modules/chat/store/message-repo.js +231 -0
  219. package/dist/modules/chat/store/message-repo.js.map +1 -0
  220. package/dist/modules/chat/store/outbox-repo.d.ts +73 -0
  221. package/dist/modules/chat/store/outbox-repo.d.ts.map +1 -0
  222. package/dist/modules/chat/store/outbox-repo.js +112 -0
  223. package/dist/modules/chat/store/outbox-repo.js.map +1 -0
  224. package/dist/modules/chat/store/read-state-repo.d.ts +83 -0
  225. package/dist/modules/chat/store/read-state-repo.d.ts.map +1 -0
  226. package/dist/modules/chat/store/read-state-repo.js +210 -0
  227. package/dist/modules/chat/store/read-state-repo.js.map +1 -0
  228. package/dist/modules/chat/store/sync-state-repo.d.ts +45 -0
  229. package/dist/modules/chat/store/sync-state-repo.d.ts.map +1 -0
  230. package/dist/modules/chat/store/sync-state-repo.js +67 -0
  231. package/dist/modules/chat/store/sync-state-repo.js.map +1 -0
  232. package/dist/modules/chat/sync/backfill.d.ts +13 -0
  233. package/dist/modules/chat/sync/backfill.d.ts.map +1 -0
  234. package/dist/modules/chat/sync/backfill.js +37 -0
  235. package/dist/modules/chat/sync/backfill.js.map +1 -0
  236. package/dist/modules/chat/sync/cron-manager.d.ts +50 -0
  237. package/dist/modules/chat/sync/cron-manager.d.ts.map +1 -0
  238. package/dist/modules/chat/sync/cron-manager.js +164 -0
  239. package/dist/modules/chat/sync/cron-manager.js.map +1 -0
  240. package/dist/modules/chat/sync/index.d.ts +8 -0
  241. package/dist/modules/chat/sync/index.d.ts.map +1 -0
  242. package/dist/modules/chat/sync/index.js +7 -0
  243. package/dist/modules/chat/sync/index.js.map +1 -0
  244. package/dist/modules/chat/sync/job-logger.d.ts +44 -0
  245. package/dist/modules/chat/sync/job-logger.d.ts.map +1 -0
  246. package/dist/modules/chat/sync/job-logger.js +139 -0
  247. package/dist/modules/chat/sync/job-logger.js.map +1 -0
  248. package/dist/modules/chat/sync/sync-service.d.ts +14 -0
  249. package/dist/modules/chat/sync/sync-service.d.ts.map +1 -0
  250. package/dist/modules/chat/sync/sync-service.js +174 -0
  251. package/dist/modules/chat/sync/sync-service.js.map +1 -0
  252. package/dist/modules/chat/sync/sync-status.d.ts +14 -0
  253. package/dist/modules/chat/sync/sync-status.d.ts.map +1 -0
  254. package/dist/modules/chat/sync/sync-status.js +77 -0
  255. package/dist/modules/chat/sync/sync-status.js.map +1 -0
  256. package/dist/modules/chat/sync/sync-types.d.ts +80 -0
  257. package/dist/modules/chat/sync/sync-types.d.ts.map +1 -0
  258. package/dist/modules/chat/sync/sync-types.js +5 -0
  259. package/dist/modules/chat/sync/sync-types.js.map +1 -0
  260. package/dist/modules/chat/sync/watch-mode.d.ts +45 -0
  261. package/dist/modules/chat/sync/watch-mode.d.ts.map +1 -0
  262. package/dist/modules/chat/sync/watch-mode.js +161 -0
  263. package/dist/modules/chat/sync/watch-mode.js.map +1 -0
  264. package/package.json +67 -0
  265. package/tool-schema.json +1039 -0
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Output helpers for the fluxra CLI
3
+ * Support both plain-text and JSON output modes
4
+ */
5
+ export function renderTable(headers, rows) {
6
+ if (rows.length === 0) {
7
+ return 'No data found.';
8
+ }
9
+ const columnWidths = headers.map((header, i) => Math.max(header.length, ...rows.map(row => row[i]?.length || 0)));
10
+ const pad = (text, width) => text.padEnd(width, ' ');
11
+ const headerRow = ` ${headers.map((h, i) => pad(h, columnWidths[i])).join(' ')}`;
12
+ const separator = ` ${columnWidths.map(w => '─'.repeat(w)).join(' ')}`;
13
+ const dataRows = rows.map(row => ` ${row.map((cell, i) => pad(cell, columnWidths[i])).join(' ')}`);
14
+ return [headerRow, separator, ...dataRows].join('\n');
15
+ }
16
+ export function renderJSON(data, statusCode = 0) {
17
+ if (statusCode !== 0) {
18
+ return JSON.stringify({
19
+ error: {
20
+ code: 'COMMAND_ERROR',
21
+ message: typeof data === 'string' ? data : 'Command failed',
22
+ retryable: false,
23
+ }
24
+ }, null, 2);
25
+ }
26
+ return JSON.stringify(data, null, 2);
27
+ }
28
+ export function renderError(message, code = 'GENERAL_ERROR', retryable = false) {
29
+ return JSON.stringify({
30
+ error: { code, message, retryable }
31
+ }, null, 2);
32
+ }
33
+ export function output(data, options = {}) {
34
+ if (options.json) {
35
+ console.log(renderJSON(data));
36
+ }
37
+ else if (typeof data === 'string') {
38
+ console.log(data);
39
+ }
40
+ else if (Array.isArray(data)) {
41
+ console.log(renderJSON(data));
42
+ }
43
+ else {
44
+ console.log(renderJSON(data));
45
+ }
46
+ }
47
+ export function outputError(message, options = {}) {
48
+ if (options.json) {
49
+ console.error(renderError(message));
50
+ }
51
+ else {
52
+ console.error(`Error: ${message}`);
53
+ }
54
+ }
55
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Version information for the fluxra CLI
3
+ */
4
+ export declare const VERSION = "0.1.0";
5
+ export declare function getVersion(): string;
6
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Version information for the fluxra CLI
3
+ */
4
+ export const VERSION = '0.1.0';
5
+ export function getVersion() {
6
+ return `@fluxra-ai/fluxra-cli v${VERSION}`;
7
+ }
8
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,UAAU,UAAU;IACxB,OAAO,0BAA0B,OAAO,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Auth service - high-level auth operations combining HTTP client, profiles, and secrets
3
+ */
4
+ import type { ProfileMetadata } from '../profiles/profile-types.js';
5
+ export interface RegisterResult {
6
+ agentId: string;
7
+ recoveryKey: string;
8
+ verificationToken?: string;
9
+ }
10
+ export interface ImportResult {
11
+ agentId: string;
12
+ authenticated: boolean;
13
+ }
14
+ /**
15
+ * Register a new agent and set up local credentials
16
+ */
17
+ export declare function authRegister(profileName: string, name: string, email: string): Promise<RegisterResult>;
18
+ /**
19
+ * Import existing credentials
20
+ */
21
+ export declare function authImport(profileName: string, options: {
22
+ agentId: string;
23
+ recoveryKey?: string;
24
+ apiKey?: string;
25
+ keyId?: string;
26
+ }): Promise<ImportResult>;
27
+ /**
28
+ * Get current agent identity
29
+ */
30
+ export declare function authWhoami(profileName?: string): Promise<{
31
+ profile: ProfileMetadata;
32
+ agentId?: string;
33
+ authenticated: boolean;
34
+ }>;
35
+ //# sourceMappingURL=auth-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-service.d.ts","sourceRoot":"","sources":["../../../src/core/auth/auth-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAiCzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,YAAY,CAAC,CAwCvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC,CAiCD"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Auth service - high-level auth operations combining HTTP client, profiles, and secrets
3
+ */
4
+ import { loadSecrets, saveSecrets } from '../secrets/secrets-service.js';
5
+ import { showProfile, getActiveProfile } from '../profiles/profile-service.js';
6
+ import { registerAgent, createApiKey, exchangeToken } from '../http/auth-api.js';
7
+ import { ensureValidAccessToken } from '../http/token-lifecycle.js';
8
+ /**
9
+ * Register a new agent and set up local credentials
10
+ */
11
+ export async function authRegister(profileName, name, email) {
12
+ // Call register API
13
+ const result = await registerAgent(name, email);
14
+ // Store recovery key
15
+ const secrets = {
16
+ recoveryKey: result.recovery_key,
17
+ };
18
+ // Try to create API key and exchange for JWT token automatically
19
+ try {
20
+ const keyResult = await createApiKey(result.agent_id, result.recovery_key, 'fluxra-cli-key');
21
+ secrets.activeApiKey = keyResult.api_key;
22
+ secrets.activeKeyId = keyResult.key_id;
23
+ // Exchange API key for JWT token
24
+ const tokenResult = await exchangeToken(result.agent_id, secrets.activeApiKey, secrets.activeKeyId);
25
+ secrets.accessToken = tokenResult.access_token;
26
+ secrets.accessTokenExpiresAt = new Date(Date.now() + tokenResult.expires_in * 1000).toISOString();
27
+ }
28
+ catch (error) {
29
+ // If auto-setup fails, just continue with recovery key only
30
+ // User can manually import later if needed
31
+ console.error(`Warning: Could not automatically set up API key and token: ${error instanceof Error ? error.message : String(error)}`);
32
+ console.error('You may need to run "fluxra auth import" manually with the recovery key.');
33
+ }
34
+ saveSecrets(profileName, secrets);
35
+ return {
36
+ agentId: result.agent_id,
37
+ recoveryKey: result.recovery_key,
38
+ verificationToken: result.verification_token,
39
+ };
40
+ }
41
+ /**
42
+ * Import existing credentials
43
+ */
44
+ export async function authImport(profileName, options) {
45
+ const secrets = {};
46
+ if (options.recoveryKey) {
47
+ secrets.recoveryKey = options.recoveryKey;
48
+ }
49
+ if (options.apiKey && options.keyId) {
50
+ secrets.activeApiKey = options.apiKey;
51
+ secrets.activeKeyId = options.keyId;
52
+ }
53
+ // If we have recovery key but no API key, create one
54
+ if (options.recoveryKey && (!options.apiKey || !options.keyId)) {
55
+ try {
56
+ const keyResult = await createApiKey(options.agentId, options.recoveryKey, 'fluxra-cli-key-import');
57
+ secrets.activeApiKey = keyResult.api_key;
58
+ secrets.activeKeyId = keyResult.key_id;
59
+ }
60
+ catch (error) {
61
+ throw new Error(`Failed to create API key: ${error instanceof Error ? error.message : String(error)}`);
62
+ }
63
+ }
64
+ // If we have API key, try to exchange for JWT token
65
+ if (secrets.activeApiKey && secrets.activeKeyId) {
66
+ try {
67
+ const tokenResult = await exchangeToken(options.agentId, secrets.activeApiKey, secrets.activeKeyId);
68
+ secrets.accessToken = tokenResult.access_token;
69
+ secrets.accessTokenExpiresAt = new Date(Date.now() + tokenResult.expires_in * 1000).toISOString();
70
+ }
71
+ catch (error) {
72
+ throw new Error(`Failed to exchange API key for token: ${error instanceof Error ? error.message : String(error)}`);
73
+ }
74
+ }
75
+ saveSecrets(profileName, secrets);
76
+ return {
77
+ agentId: options.agentId,
78
+ authenticated: !!secrets.accessToken,
79
+ };
80
+ }
81
+ /**
82
+ * Get current agent identity
83
+ */
84
+ export async function authWhoami(profileName) {
85
+ const activeProfile = profileName || getActiveProfile();
86
+ if (!activeProfile) {
87
+ throw new Error('No active profile. Use "fluxra profile use <name>" or create a new profile.');
88
+ }
89
+ const profileInfo = showProfile(activeProfile);
90
+ const secrets = loadSecrets(activeProfile);
91
+ // Try to get agent info from API if we have a token
92
+ let agentInfo;
93
+ if (secrets.accessToken) {
94
+ try {
95
+ // We need agent_id to call getAgentInfo - this is a chicken-and-egg problem
96
+ // In practice, agent_id should be stored in profile metadata during registration/import
97
+ // For now, we'll just check if token is valid
98
+ agentInfo = undefined;
99
+ }
100
+ catch {
101
+ // Token might be expired, try to refresh
102
+ try {
103
+ await ensureValidAccessToken(activeProfile);
104
+ }
105
+ catch {
106
+ // Still failed, not authenticated
107
+ }
108
+ }
109
+ }
110
+ return {
111
+ profile: profileInfo.metadata,
112
+ agentId: profileInfo.metadata.agentId,
113
+ authenticated: !!secrets.accessToken,
114
+ };
115
+ }
116
+ //# sourceMappingURL=auth-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-service.js","sourceRoot":"","sources":["../../../src/core/auth/auth-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAiB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAepE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,IAAY,EACZ,KAAa;IAEb,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhD,qBAAqB;IACrB,MAAM,OAAO,GAAY;QACvB,WAAW,EAAE,MAAM,CAAC,YAAY;KACjC,CAAC;IAEF,iEAAiE;IACjE,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAC7F,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;QACzC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;QAEvC,iCAAiC;QACjC,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACpG,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC;QAC/C,OAAO,CAAC,oBAAoB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4DAA4D;QAC5D,2CAA2C;QAC3C,OAAO,CAAC,KAAK,CAAC,8DAA8D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtI,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC5F,CAAC;IAED,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAElC,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,QAAQ;QACxB,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,iBAAiB,EAAE,MAAM,CAAC,kBAAkB;KAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,OAKC;IAED,MAAM,OAAO,GAAY,EAAE,CAAC;IAE5B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QACtC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IACtC,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;YACpG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;YACzC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YACpG,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC;YAC/C,OAAO,CAAC,oBAAoB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACpG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAElC,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;KACrC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAoB;IAKnD,MAAM,aAAa,GAAG,WAAW,IAAI,gBAAgB,EAAE,CAAC;IAExD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAE3C,oDAAoD;IACpD,IAAI,SAA0D,CAAC;IAC/D,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,4EAA4E;YAC5E,wFAAwF;YACxF,8CAA8C;YAC9C,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,IAAI,CAAC;gBACH,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,QAAQ;QAC7B,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO;QACrC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Global config file handling for ~/.fluxra/config.json
3
+ */
4
+ import { z } from 'zod';
5
+ export declare const GlobalConfigSchema: z.ZodObject<{
6
+ defaultProfile: z.ZodOptional<z.ZodString>;
7
+ defaultEnvironment: z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ baseUrl: z.ZodOptional<z.ZodString>;
9
+ chatHistoryContextSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ defaultEnvironment: string;
12
+ chatHistoryContextSize: number;
13
+ baseUrl?: string | undefined;
14
+ defaultProfile?: string | undefined;
15
+ }, {
16
+ baseUrl?: string | undefined;
17
+ defaultProfile?: string | undefined;
18
+ defaultEnvironment?: string | undefined;
19
+ chatHistoryContextSize?: number | undefined;
20
+ }>;
21
+ export type GlobalConfig = z.infer<typeof GlobalConfigSchema>;
22
+ /**
23
+ * Load the global config file, creating it if it doesn't exist
24
+ */
25
+ export declare function loadGlobalConfig(): GlobalConfig;
26
+ /**
27
+ * Save the global config file
28
+ */
29
+ export declare function saveGlobalConfig(config: GlobalConfig): void;
30
+ /**
31
+ * Update specific config values
32
+ */
33
+ export declare function updateGlobalConfig(updates: Partial<GlobalConfig>): GlobalConfig;
34
+ /**
35
+ * Get the base URL for API calls
36
+ */
37
+ export declare function getBaseUrl(): string;
38
+ //# sourceMappingURL=global-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../../src/core/config/global-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAO9D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAqB/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAW3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAK/E;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Global config file handling for ~/.fluxra/config.json
3
+ */
4
+ import fs from 'node:fs';
5
+ import { CONFIG_FILE, initFluxraHome } from '../filesystem/paths.js';
6
+ import { z } from 'zod';
7
+ // Schema for config validation
8
+ export const GlobalConfigSchema = z.object({
9
+ defaultProfile: z.string().optional(),
10
+ defaultEnvironment: z.string().optional().default('production'),
11
+ baseUrl: z.string().url().optional(),
12
+ chatHistoryContextSize: z.number().int().positive().optional().default(50),
13
+ });
14
+ const DEFAULT_CONFIG = {
15
+ defaultEnvironment: 'production',
16
+ chatHistoryContextSize: 50,
17
+ };
18
+ /**
19
+ * Load the global config file, creating it if it doesn't exist
20
+ */
21
+ export function loadGlobalConfig() {
22
+ try {
23
+ if (!fs.existsSync(CONFIG_FILE)) {
24
+ // Create default config
25
+ initFluxraHome();
26
+ saveGlobalConfig(DEFAULT_CONFIG);
27
+ return DEFAULT_CONFIG;
28
+ }
29
+ const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
30
+ const parsed = JSON.parse(raw);
31
+ return GlobalConfigSchema.parse(parsed);
32
+ }
33
+ catch (error) {
34
+ if (error instanceof z.ZodError) {
35
+ throw new Error(`Invalid config file: ${error.errors.map(e => e.message).join(', ')}`);
36
+ }
37
+ if (error instanceof SyntaxError) {
38
+ throw new Error(`Config file is not valid JSON: ${error.message}`);
39
+ }
40
+ throw new Error(`Failed to load config: ${error instanceof Error ? error.message : String(error)}`);
41
+ }
42
+ }
43
+ /**
44
+ * Save the global config file
45
+ */
46
+ export function saveGlobalConfig(config) {
47
+ try {
48
+ initFluxraHome();
49
+ const validated = GlobalConfigSchema.parse(config);
50
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(validated, null, 2), 'utf-8');
51
+ }
52
+ catch (error) {
53
+ if (error instanceof z.ZodError) {
54
+ throw new Error(`Invalid config: ${error.errors.map(e => e.message).join(', ')}`);
55
+ }
56
+ throw new Error(`Failed to save config: ${error instanceof Error ? error.message : String(error)}`);
57
+ }
58
+ }
59
+ /**
60
+ * Update specific config values
61
+ */
62
+ export function updateGlobalConfig(updates) {
63
+ const current = loadGlobalConfig();
64
+ const merged = { ...current, ...updates };
65
+ saveGlobalConfig(merged);
66
+ return merged;
67
+ }
68
+ /**
69
+ * Get the base URL for API calls
70
+ */
71
+ export function getBaseUrl() {
72
+ const config = loadGlobalConfig();
73
+ return config.baseUrl || 'https://chat.tryfluxra.com';
74
+ }
75
+ //# sourceMappingURL=global-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../../src/core/config/global-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Unified error model - stable exit codes and error classification
3
+ *
4
+ * Exit code classes:
5
+ * - 0: Success
6
+ * - 1: Generic failure
7
+ * - 2: Auth failure (token expired, not logged in)
8
+ * - 3: Network failure (connection timeout, DNS failure)
9
+ * - 4: Local storage failure (DB locked, permission error)
10
+ */
11
+ export declare enum ExitCode {
12
+ Success = 0,
13
+ GenericFailure = 1,
14
+ AuthFailure = 2,
15
+ NetworkFailure = 3,
16
+ StorageFailure = 4
17
+ }
18
+ export interface FluxraError {
19
+ code: ExitCode;
20
+ message: string;
21
+ details?: Record<string, any>;
22
+ }
23
+ export declare class FluxraErrorClass extends Error {
24
+ readonly code: ExitCode;
25
+ readonly details?: Record<string, any> | undefined;
26
+ constructor(message: string, code: ExitCode, details?: Record<string, any> | undefined);
27
+ }
28
+ /**
29
+ * Classify an error into a stable exit code
30
+ */
31
+ export declare function classifyError(error: unknown): FluxraError;
32
+ /**
33
+ * Exit with proper code and message
34
+ */
35
+ export declare function exitWithError(error: unknown, json?: boolean): never;
36
+ /**
37
+ * Format error as JSON string
38
+ */
39
+ export declare function formatJsonError(code: ExitCode, message: string, details?: Record<string, any>): string;
40
+ /**
41
+ * Wrap an async function and classify errors
42
+ */
43
+ export declare function wrapApiError<T>(fn: () => Promise<T>, context?: string): Promise<T>;
44
+ /**
45
+ * Create a typed error with exit code
46
+ */
47
+ export declare function createError(code: ExitCode, message: string, details?: Record<string, any>): FluxraErrorClass;
48
+ //# sourceMappingURL=error-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-model.d.ts","sourceRoot":"","sources":["../../../src/core/errors/error-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,cAAc,IAAI;IAClB,cAAc,IAAI;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,IAAI,EAAE,QAAQ;aACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBAF7C,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAA;CAKhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CA8EzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,OAAe,GAAG,KAAK,CAmB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,CASR;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,MAAoB,GAC5B,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,gBAAgB,CAElB"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Unified error model - stable exit codes and error classification
3
+ *
4
+ * Exit code classes:
5
+ * - 0: Success
6
+ * - 1: Generic failure
7
+ * - 2: Auth failure (token expired, not logged in)
8
+ * - 3: Network failure (connection timeout, DNS failure)
9
+ * - 4: Local storage failure (DB locked, permission error)
10
+ */
11
+ export var ExitCode;
12
+ (function (ExitCode) {
13
+ ExitCode[ExitCode["Success"] = 0] = "Success";
14
+ ExitCode[ExitCode["GenericFailure"] = 1] = "GenericFailure";
15
+ ExitCode[ExitCode["AuthFailure"] = 2] = "AuthFailure";
16
+ ExitCode[ExitCode["NetworkFailure"] = 3] = "NetworkFailure";
17
+ ExitCode[ExitCode["StorageFailure"] = 4] = "StorageFailure";
18
+ })(ExitCode || (ExitCode = {}));
19
+ export class FluxraErrorClass extends Error {
20
+ code;
21
+ details;
22
+ constructor(message, code, details) {
23
+ super(message);
24
+ this.code = code;
25
+ this.details = details;
26
+ this.name = 'FluxraError';
27
+ }
28
+ }
29
+ /**
30
+ * Classify an error into a stable exit code
31
+ */
32
+ export function classifyError(error) {
33
+ if (error instanceof FluxraErrorClass) {
34
+ return {
35
+ code: error.code,
36
+ message: error.message,
37
+ details: error.details,
38
+ };
39
+ }
40
+ if (error instanceof Error) {
41
+ const message = error.message.toLowerCase();
42
+ const name = error.name.toLowerCase();
43
+ // Auth errors
44
+ if (message.includes('auth') ||
45
+ message.includes('unauthorized') ||
46
+ message.includes('401') ||
47
+ message.includes('403') ||
48
+ message.includes('token') ||
49
+ message.includes('not logged in') ||
50
+ message.includes('no active profile')) {
51
+ return {
52
+ code: ExitCode.AuthFailure,
53
+ message: error.message,
54
+ details: { originalError: name },
55
+ };
56
+ }
57
+ // Network errors
58
+ if (message.includes('network') ||
59
+ message.includes('timeout') ||
60
+ message.includes('econnrefused') ||
61
+ message.includes('enotfound') ||
62
+ message.includes('fetch failed') ||
63
+ message.includes('socket') ||
64
+ message.includes('429') ||
65
+ message.includes('rate limit')) {
66
+ return {
67
+ code: ExitCode.NetworkFailure,
68
+ message: error.message,
69
+ details: { originalError: name },
70
+ };
71
+ }
72
+ // Storage errors
73
+ if (message.includes('sqlite') ||
74
+ message.includes('database') ||
75
+ message.includes('locked') ||
76
+ message.includes('permission') ||
77
+ message.includes('enoent') ||
78
+ message.includes('eacces') ||
79
+ message.includes('disk')) {
80
+ return {
81
+ code: ExitCode.StorageFailure,
82
+ message: error.message,
83
+ details: { originalError: name },
84
+ };
85
+ }
86
+ // Generic
87
+ return {
88
+ code: ExitCode.GenericFailure,
89
+ message: error.message,
90
+ details: { originalError: name },
91
+ };
92
+ }
93
+ // Unknown error
94
+ return {
95
+ code: ExitCode.GenericFailure,
96
+ message: String(error),
97
+ };
98
+ }
99
+ /**
100
+ * Exit with proper code and message
101
+ */
102
+ export function exitWithError(error, json = false) {
103
+ const classified = classifyError(error);
104
+ if (json) {
105
+ const output = {
106
+ success: false,
107
+ error: {
108
+ code: classified.code,
109
+ message: classified.message,
110
+ ...(classified.details ? { details: classified.details } : {}),
111
+ },
112
+ };
113
+ console.error(JSON.stringify(output, null, 2));
114
+ }
115
+ else {
116
+ const codeLabel = ExitCode[classified.code] || 'UNKNOWN';
117
+ console.error(`Error [${codeLabel}]: ${classified.message}`);
118
+ }
119
+ process.exit(classified.code);
120
+ }
121
+ /**
122
+ * Format error as JSON string
123
+ */
124
+ export function formatJsonError(code, message, details) {
125
+ return JSON.stringify({
126
+ success: false,
127
+ error: {
128
+ code,
129
+ message,
130
+ ...(details ? { details } : {}),
131
+ },
132
+ }, null, 2);
133
+ }
134
+ /**
135
+ * Wrap an async function and classify errors
136
+ */
137
+ export async function wrapApiError(fn, context = 'Operation') {
138
+ try {
139
+ return await fn();
140
+ }
141
+ catch (error) {
142
+ const classified = classifyError(error);
143
+ throw new FluxraErrorClass(`${context} failed: ${classified.message}`, classified.code, classified.details);
144
+ }
145
+ }
146
+ /**
147
+ * Create a typed error with exit code
148
+ */
149
+ export function createError(code, message, details) {
150
+ return new FluxraErrorClass(message, code, details);
151
+ }
152
+ //# sourceMappingURL=error-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-model.js","sourceRoot":"","sources":["../../../src/core/errors/error-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Path resolution utilities for ~/.fluxra/ layout
3
+ */
4
+ export declare function getFluxraHome(): string;
5
+ export declare function setFluxraHomeOverride(home: string | undefined): void;
6
+ export declare const CONFIG_FILE: string;
7
+ export declare const ENVIRONMENTS_DIR: string;
8
+ export declare const PROFILES_DIR: string;
9
+ /**
10
+ * Get the config file path
11
+ */
12
+ export declare function getConfigPath(): string;
13
+ /**
14
+ * Get a profile directory path
15
+ */
16
+ export declare function getProfilePath(profileName: string): string;
17
+ /**
18
+ * Get a profile's metadata file path
19
+ */
20
+ export declare function getProfileMetaPath(profileName: string): string;
21
+ /**
22
+ * Get a profile's secrets file path
23
+ */
24
+ export declare function getSecretsPath(profileName: string): string;
25
+ /**
26
+ * Get a profile's state directory
27
+ */
28
+ export declare function getStateDir(profileName: string): string;
29
+ /**
30
+ * Get a module directory for a profile (e.g., chat)
31
+ */
32
+ export declare function getModuleDir(profileName: string, moduleName: string): string;
33
+ /**
34
+ * Get an environment directory path
35
+ */
36
+ export declare function getEnvPath(envName: string): string;
37
+ /**
38
+ * Ensure a directory exists (create if needed)
39
+ */
40
+ export declare function ensureDir(dirPath: string): void;
41
+ /**
42
+ * Initialize the fluxra home directory structure
43
+ */
44
+ export declare function initFluxraHome(): void;
45
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/core/filesystem/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEpE;AAED,eAAO,MAAM,WAAW,QAAoD,CAAC;AAC7E,eAAO,MAAM,gBAAgB,QAAqD,CAAC;AACnF,eAAO,MAAM,YAAY,QAAiD,CAAC;AAE3E;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}