@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.
- package/LICENSE +201 -0
- package/README.md +274 -0
- package/bin/fluxra +6 -0
- package/dist/cli/command-context.d.ts +17 -0
- package/dist/cli/command-context.d.ts.map +1 -0
- package/dist/cli/command-context.js +26 -0
- package/dist/cli/command-context.js.map +1 -0
- package/dist/cli/commands/auth/index.d.ts +3 -0
- package/dist/cli/commands/auth/index.d.ts.map +1 -0
- package/dist/cli/commands/auth/index.js +165 -0
- package/dist/cli/commands/auth/index.js.map +1 -0
- package/dist/cli/commands/chat/index.d.ts +3 -0
- package/dist/cli/commands/chat/index.d.ts.map +1 -0
- package/dist/cli/commands/chat/index.js +1201 -0
- package/dist/cli/commands/chat/index.js.map +1 -0
- package/dist/cli/commands/config/index.d.ts +3 -0
- package/dist/cli/commands/config/index.d.ts.map +1 -0
- package/dist/cli/commands/config/index.js +66 -0
- package/dist/cli/commands/config/index.js.map +1 -0
- package/dist/cli/commands/help.d.ts +7 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +106 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/local/doctor.d.ts +26 -0
- package/dist/cli/commands/local/doctor.d.ts.map +1 -0
- package/dist/cli/commands/local/doctor.js +265 -0
- package/dist/cli/commands/local/doctor.js.map +1 -0
- package/dist/cli/commands/local/export.d.ts +41 -0
- package/dist/cli/commands/local/export.d.ts.map +1 -0
- package/dist/cli/commands/local/export.js +83 -0
- package/dist/cli/commands/local/export.js.map +1 -0
- package/dist/cli/commands/local/index.d.ts +6 -0
- package/dist/cli/commands/local/index.d.ts.map +1 -0
- package/dist/cli/commands/local/index.js +116 -0
- package/dist/cli/commands/local/index.js.map +1 -0
- package/dist/cli/commands/local/inspect.d.ts +42 -0
- package/dist/cli/commands/local/inspect.d.ts.map +1 -0
- package/dist/cli/commands/local/inspect.js +125 -0
- package/dist/cli/commands/local/inspect.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +8 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +253 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/profile/index.d.ts +3 -0
- package/dist/cli/commands/profile/index.d.ts.map +1 -0
- package/dist/cli/commands/profile/index.js +114 -0
- package/dist/cli/commands/profile/index.js.map +1 -0
- package/dist/cli/commands/schema.d.ts +7 -0
- package/dist/cli/commands/schema.d.ts.map +1 -0
- package/dist/cli/commands/schema.js +33 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/errors.d.ts +16 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +15 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/fluxra.d.ts +9 -0
- package/dist/cli/fluxra.d.ts.map +1 -0
- package/dist/cli/fluxra.js +55 -0
- package/dist/cli/fluxra.js.map +1 -0
- package/dist/cli/helpers.d.ts +13 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +32 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/output.d.ts +14 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +55 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/version.d.ts +6 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +8 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/core/auth/auth-service.d.ts +35 -0
- package/dist/core/auth/auth-service.d.ts.map +1 -0
- package/dist/core/auth/auth-service.js +116 -0
- package/dist/core/auth/auth-service.js.map +1 -0
- package/dist/core/config/global-config.d.ts +38 -0
- package/dist/core/config/global-config.d.ts.map +1 -0
- package/dist/core/config/global-config.js +75 -0
- package/dist/core/config/global-config.js.map +1 -0
- package/dist/core/errors/error-model.d.ts +48 -0
- package/dist/core/errors/error-model.d.ts.map +1 -0
- package/dist/core/errors/error-model.js +152 -0
- package/dist/core/errors/error-model.js.map +1 -0
- package/dist/core/filesystem/paths.d.ts +45 -0
- package/dist/core/filesystem/paths.d.ts.map +1 -0
- package/dist/core/filesystem/paths.js +77 -0
- package/dist/core/filesystem/paths.js.map +1 -0
- package/dist/core/http/auth-api.d.ts +71 -0
- package/dist/core/http/auth-api.d.ts.map +1 -0
- package/dist/core/http/auth-api.js +91 -0
- package/dist/core/http/auth-api.js.map +1 -0
- package/dist/core/http/block-api.d.ts +37 -0
- package/dist/core/http/block-api.d.ts.map +1 -0
- package/dist/core/http/block-api.js +36 -0
- package/dist/core/http/block-api.js.map +1 -0
- package/dist/core/http/chat-api.d.ts +41 -0
- package/dist/core/http/chat-api.d.ts.map +1 -0
- package/dist/core/http/chat-api.js +88 -0
- package/dist/core/http/chat-api.js.map +1 -0
- package/dist/core/http/conversation-management-api.d.ts +65 -0
- package/dist/core/http/conversation-management-api.d.ts.map +1 -0
- package/dist/core/http/conversation-management-api.js +59 -0
- package/dist/core/http/conversation-management-api.js.map +1 -0
- package/dist/core/http/directory-api.d.ts +32 -0
- package/dist/core/http/directory-api.d.ts.map +1 -0
- package/dist/core/http/directory-api.js +36 -0
- package/dist/core/http/directory-api.js.map +1 -0
- package/dist/core/http/directory-profile-api.d.ts +32 -0
- package/dist/core/http/directory-profile-api.d.ts.map +1 -0
- package/dist/core/http/directory-profile-api.js +39 -0
- package/dist/core/http/directory-profile-api.js.map +1 -0
- package/dist/core/http/http-client.d.ts +41 -0
- package/dist/core/http/http-client.d.ts.map +1 -0
- package/dist/core/http/http-client.js +127 -0
- package/dist/core/http/http-client.js.map +1 -0
- package/dist/core/http/message-api.d.ts +55 -0
- package/dist/core/http/message-api.d.ts.map +1 -0
- package/dist/core/http/message-api.js +64 -0
- package/dist/core/http/message-api.js.map +1 -0
- package/dist/core/http/rate-limit.d.ts +22 -0
- package/dist/core/http/rate-limit.d.ts.map +1 -0
- package/dist/core/http/rate-limit.js +66 -0
- package/dist/core/http/rate-limit.js.map +1 -0
- package/dist/core/http/token-lifecycle.d.ts +18 -0
- package/dist/core/http/token-lifecycle.d.ts.map +1 -0
- package/dist/core/http/token-lifecycle.js +73 -0
- package/dist/core/http/token-lifecycle.js.map +1 -0
- package/dist/core/locking/profile-lock.d.ts +32 -0
- package/dist/core/locking/profile-lock.d.ts.map +1 -0
- package/dist/core/locking/profile-lock.js +104 -0
- package/dist/core/locking/profile-lock.js.map +1 -0
- package/dist/core/profiles/profile-service.d.ts +35 -0
- package/dist/core/profiles/profile-service.d.ts.map +1 -0
- package/dist/core/profiles/profile-service.js +119 -0
- package/dist/core/profiles/profile-service.js.map +1 -0
- package/dist/core/profiles/profile-types.d.ts +28 -0
- package/dist/core/profiles/profile-types.d.ts.map +1 -0
- package/dist/core/profiles/profile-types.js +13 -0
- package/dist/core/profiles/profile-types.js.map +1 -0
- package/dist/core/secrets/secrets-service.d.ts +25 -0
- package/dist/core/secrets/secrets-service.d.ts.map +1 -0
- package/dist/core/secrets/secrets-service.js +67 -0
- package/dist/core/secrets/secrets-service.js.map +1 -0
- package/dist/core/secrets/secrets-types.d.ts +29 -0
- package/dist/core/secrets/secrets-types.d.ts.map +1 -0
- package/dist/core/secrets/secrets-types.js +33 -0
- package/dist/core/secrets/secrets-types.js.map +1 -0
- package/dist/core/sqlite/chat-schema.d.ts +14 -0
- package/dist/core/sqlite/chat-schema.d.ts.map +1 -0
- package/dist/core/sqlite/chat-schema.js +172 -0
- package/dist/core/sqlite/chat-schema.js.map +1 -0
- package/dist/core/sqlite/core-schema.d.ts +14 -0
- package/dist/core/sqlite/core-schema.d.ts.map +1 -0
- package/dist/core/sqlite/core-schema.js +54 -0
- package/dist/core/sqlite/core-schema.js.map +1 -0
- package/dist/core/sqlite/database.d.ts +40 -0
- package/dist/core/sqlite/database.d.ts.map +1 -0
- package/dist/core/sqlite/database.js +68 -0
- package/dist/core/sqlite/database.js.map +1 -0
- package/dist/core/sqlite/migrations.d.ts +22 -0
- package/dist/core/sqlite/migrations.d.ts.map +1 -0
- package/dist/core/sqlite/migrations.js +64 -0
- package/dist/core/sqlite/migrations.js.map +1 -0
- package/dist/modules/chat/inbox/conversation-service.d.ts +35 -0
- package/dist/modules/chat/inbox/conversation-service.d.ts.map +1 -0
- package/dist/modules/chat/inbox/conversation-service.js +54 -0
- package/dist/modules/chat/inbox/conversation-service.js.map +1 -0
- package/dist/modules/chat/inbox/history-service.d.ts +25 -0
- package/dist/modules/chat/inbox/history-service.d.ts.map +1 -0
- package/dist/modules/chat/inbox/history-service.js +57 -0
- package/dist/modules/chat/inbox/history-service.js.map +1 -0
- package/dist/modules/chat/inbox/index.d.ts +9 -0
- package/dist/modules/chat/inbox/index.d.ts.map +1 -0
- package/dist/modules/chat/inbox/index.js +9 -0
- package/dist/modules/chat/inbox/index.js.map +1 -0
- package/dist/modules/chat/inbox/read-service.d.ts +36 -0
- package/dist/modules/chat/inbox/read-service.d.ts.map +1 -0
- package/dist/modules/chat/inbox/read-service.js +91 -0
- package/dist/modules/chat/inbox/read-service.js.map +1 -0
- package/dist/modules/chat/inbox/search-service.d.ts +20 -0
- package/dist/modules/chat/inbox/search-service.d.ts.map +1 -0
- package/dist/modules/chat/inbox/search-service.js +23 -0
- package/dist/modules/chat/inbox/search-service.js.map +1 -0
- package/dist/modules/chat/inbox/unread-service.d.ts +38 -0
- package/dist/modules/chat/inbox/unread-service.d.ts.map +1 -0
- package/dist/modules/chat/inbox/unread-service.js +65 -0
- package/dist/modules/chat/inbox/unread-service.js.map +1 -0
- package/dist/modules/chat/render/message-render.d.ts +35 -0
- package/dist/modules/chat/render/message-render.d.ts.map +1 -0
- package/dist/modules/chat/render/message-render.js +129 -0
- package/dist/modules/chat/render/message-render.js.map +1 -0
- package/dist/modules/chat/send/conversation-service.d.ts +53 -0
- package/dist/modules/chat/send/conversation-service.d.ts.map +1 -0
- package/dist/modules/chat/send/conversation-service.js +110 -0
- package/dist/modules/chat/send/conversation-service.js.map +1 -0
- package/dist/modules/chat/send/directory-cache-service.d.ts +37 -0
- package/dist/modules/chat/send/directory-cache-service.d.ts.map +1 -0
- package/dist/modules/chat/send/directory-cache-service.js +49 -0
- package/dist/modules/chat/send/directory-cache-service.js.map +1 -0
- package/dist/modules/chat/send/send-service.d.ts +36 -0
- package/dist/modules/chat/send/send-service.d.ts.map +1 -0
- package/dist/modules/chat/send/send-service.js +113 -0
- package/dist/modules/chat/send/send-service.js.map +1 -0
- package/dist/modules/chat/store/conversation-repo.d.ts +53 -0
- package/dist/modules/chat/store/conversation-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/conversation-repo.js +75 -0
- package/dist/modules/chat/store/conversation-repo.js.map +1 -0
- package/dist/modules/chat/store/directory-cache-repo.d.ts +41 -0
- package/dist/modules/chat/store/directory-cache-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/directory-cache-repo.js +64 -0
- package/dist/modules/chat/store/directory-cache-repo.js.map +1 -0
- package/dist/modules/chat/store/job-repo.d.ts +72 -0
- package/dist/modules/chat/store/job-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/job-repo.js +140 -0
- package/dist/modules/chat/store/job-repo.js.map +1 -0
- package/dist/modules/chat/store/message-repo.d.ts +98 -0
- package/dist/modules/chat/store/message-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/message-repo.js +231 -0
- package/dist/modules/chat/store/message-repo.js.map +1 -0
- package/dist/modules/chat/store/outbox-repo.d.ts +73 -0
- package/dist/modules/chat/store/outbox-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/outbox-repo.js +112 -0
- package/dist/modules/chat/store/outbox-repo.js.map +1 -0
- package/dist/modules/chat/store/read-state-repo.d.ts +83 -0
- package/dist/modules/chat/store/read-state-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/read-state-repo.js +210 -0
- package/dist/modules/chat/store/read-state-repo.js.map +1 -0
- package/dist/modules/chat/store/sync-state-repo.d.ts +45 -0
- package/dist/modules/chat/store/sync-state-repo.d.ts.map +1 -0
- package/dist/modules/chat/store/sync-state-repo.js +67 -0
- package/dist/modules/chat/store/sync-state-repo.js.map +1 -0
- package/dist/modules/chat/sync/backfill.d.ts +13 -0
- package/dist/modules/chat/sync/backfill.d.ts.map +1 -0
- package/dist/modules/chat/sync/backfill.js +37 -0
- package/dist/modules/chat/sync/backfill.js.map +1 -0
- package/dist/modules/chat/sync/cron-manager.d.ts +50 -0
- package/dist/modules/chat/sync/cron-manager.d.ts.map +1 -0
- package/dist/modules/chat/sync/cron-manager.js +164 -0
- package/dist/modules/chat/sync/cron-manager.js.map +1 -0
- package/dist/modules/chat/sync/index.d.ts +8 -0
- package/dist/modules/chat/sync/index.d.ts.map +1 -0
- package/dist/modules/chat/sync/index.js +7 -0
- package/dist/modules/chat/sync/index.js.map +1 -0
- package/dist/modules/chat/sync/job-logger.d.ts +44 -0
- package/dist/modules/chat/sync/job-logger.d.ts.map +1 -0
- package/dist/modules/chat/sync/job-logger.js +139 -0
- package/dist/modules/chat/sync/job-logger.js.map +1 -0
- package/dist/modules/chat/sync/sync-service.d.ts +14 -0
- package/dist/modules/chat/sync/sync-service.d.ts.map +1 -0
- package/dist/modules/chat/sync/sync-service.js +174 -0
- package/dist/modules/chat/sync/sync-service.js.map +1 -0
- package/dist/modules/chat/sync/sync-status.d.ts +14 -0
- package/dist/modules/chat/sync/sync-status.d.ts.map +1 -0
- package/dist/modules/chat/sync/sync-status.js +77 -0
- package/dist/modules/chat/sync/sync-status.js.map +1 -0
- package/dist/modules/chat/sync/sync-types.d.ts +80 -0
- package/dist/modules/chat/sync/sync-types.d.ts.map +1 -0
- package/dist/modules/chat/sync/sync-types.js +5 -0
- package/dist/modules/chat/sync/sync-types.js.map +1 -0
- package/dist/modules/chat/sync/watch-mode.d.ts +45 -0
- package/dist/modules/chat/sync/watch-mode.d.ts.map +1 -0
- package/dist/modules/chat/sync/watch-mode.js +161 -0
- package/dist/modules/chat/sync/watch-mode.js.map +1 -0
- package/package.json +67 -0
- 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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|