@kaitranntt/ccs 7.50.0-dev.1 → 7.50.0-dev.4
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/README.md +12 -0
- package/dist/api/services/profile-writer.d.ts +1 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +18 -5
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/ccs.js +46 -8
- package/dist/ccs.js.map +1 -1
- package/dist/targets/droid-adapter.d.ts +1 -1
- package/dist/targets/droid-adapter.d.ts.map +1 -1
- package/dist/targets/droid-adapter.js +16 -4
- package/dist/targets/droid-adapter.js.map +1 -1
- package/dist/targets/droid-config-manager.d.ts +9 -1
- package/dist/targets/droid-config-manager.d.ts.map +1 -1
- package/dist/targets/droid-config-manager.js +131 -3
- package/dist/targets/droid-config-manager.js.map +1 -1
- package/dist/targets/droid-provider.d.ts +40 -0
- package/dist/targets/droid-provider.d.ts.map +1 -0
- package/dist/targets/droid-provider.js +140 -0
- package/dist/targets/droid-provider.js.map +1 -0
- package/dist/targets/droid-reasoning-runtime.d.ts +14 -0
- package/dist/targets/droid-reasoning-runtime.d.ts.map +1 -0
- package/dist/targets/droid-reasoning-runtime.js +42 -0
- package/dist/targets/droid-reasoning-runtime.js.map +1 -0
- package/dist/targets/index.d.ts +2 -0
- package/dist/targets/index.d.ts.map +1 -1
- package/dist/targets/index.js +4 -1
- package/dist/targets/index.js.map +1 -1
- package/dist/targets/target-adapter.d.ts +6 -0
- package/dist/targets/target-adapter.d.ts.map +1 -1
- package/dist/ui/assets/accounts-B3RlymZc.js +1 -0
- package/dist/ui/assets/{alert-dialog-DmrIcJav.js → alert-dialog-CuEMPUz1.js} +1 -1
- package/dist/ui/assets/api-B2ICvWzi.js +1 -0
- package/dist/ui/assets/{auth-section-CP_2r8oJ.js → auth-section-47vsG_g9.js} +1 -1
- package/dist/ui/assets/{backups-section-jwtuA5Ay.js → backups-section-D-sat7Ti.js} +1 -1
- package/dist/ui/assets/{checkbox-CNqHZx7Z.js → checkbox-C-12mTDT.js} +1 -1
- package/dist/ui/assets/{cliproxy-CtO9BwgG.js → cliproxy-CAR-zTil.js} +1 -1
- package/dist/ui/assets/{cliproxy-control-panel--WUVyBIk.js → cliproxy-control-panel-3uthxEI-.js} +1 -1
- package/dist/ui/assets/{confirm-dialog-CQNxkz9X.js → confirm-dialog-BfiBvMqW.js} +1 -1
- package/dist/ui/assets/{copilot-DLxxmnsW.js → copilot-Dz0B1ZUz.js} +1 -1
- package/dist/ui/assets/{cursor-YRIza7sP.js → cursor-DdPXjHsr.js} +1 -1
- package/dist/ui/assets/droid-DE-zbt4u.js +2 -0
- package/dist/ui/assets/globalenv-section-BKbOddIv.js +1 -0
- package/dist/ui/assets/{health-BWPd6F4h.js → health-Bu6uaf__.js} +1 -1
- package/dist/ui/assets/icons-ErRLeJ3U.js +1 -0
- package/dist/ui/assets/index-CjJDhkhP.css +1 -0
- package/dist/ui/assets/{index-D244tv89.js → index-Cl-418Sf.js} +1 -1
- package/dist/ui/assets/{index-BlldLmNl.js → index-D1DFI7Lj.js} +1 -1
- package/dist/ui/assets/{index-BZdHAol5.js → index-DNyQOJ27.js} +1 -1
- package/dist/ui/assets/index-Dzby9K4O.js +1 -0
- package/dist/ui/assets/{index-PWMOllOf.js → index-zgEA-GkK.js} +11 -11
- package/dist/ui/assets/{proxy-status-widget-MlyNgoPh.js → proxy-status-widget-BtL-jVdm.js} +1 -1
- package/dist/ui/assets/{separator-OcJLDgYQ.js → separator-sNDYgSUT.js} +1 -1
- package/dist/ui/assets/{shared-LxAdbm4g.js → shared-qWuCxx8B.js} +1 -1
- package/dist/ui/assets/{switch-s8pp-m8L.js → switch-BdRPtxoo.js} +1 -1
- package/dist/ui/assets/{updates-BQRhDVbP.js → updates-BIpeiM6l.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/web-server/routes/droid-routes.d.ts +3 -0
- package/dist/web-server/routes/droid-routes.d.ts.map +1 -0
- package/dist/web-server/routes/droid-routes.js +61 -0
- package/dist/web-server/routes/droid-routes.js.map +1 -0
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +3 -0
- package/dist/web-server/routes/index.js.map +1 -1
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
- package/dist/web-server/routes/profile-routes.js +29 -3
- package/dist/web-server/routes/profile-routes.js.map +1 -1
- package/dist/web-server/routes/route-helpers.d.ts +2 -1
- package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
- package/dist/web-server/routes/route-helpers.js +20 -1
- package/dist/web-server/routes/route-helpers.js.map +1 -1
- package/dist/web-server/services/compatible-cli-docs-registry.d.ts +23 -0
- package/dist/web-server/services/compatible-cli-docs-registry.d.ts.map +1 -0
- package/dist/web-server/services/compatible-cli-docs-registry.js +81 -0
- package/dist/web-server/services/compatible-cli-docs-registry.js.map +1 -0
- package/dist/web-server/services/compatible-cli-json-file-service.d.ts +41 -0
- package/dist/web-server/services/compatible-cli-json-file-service.d.ts.map +1 -0
- package/dist/web-server/services/compatible-cli-json-file-service.js +205 -0
- package/dist/web-server/services/compatible-cli-json-file-service.js.map +1 -0
- package/dist/web-server/services/compatible-cli-types.d.ts +82 -0
- package/dist/web-server/services/compatible-cli-types.d.ts.map +1 -0
- package/dist/web-server/services/compatible-cli-types.js +3 -0
- package/dist/web-server/services/compatible-cli-types.js.map +1 -0
- package/dist/web-server/services/droid-dashboard-service.d.ts +29 -0
- package/dist/web-server/services/droid-dashboard-service.d.ts.map +1 -0
- package/dist/web-server/services/droid-dashboard-service.js +238 -0
- package/dist/web-server/services/droid-dashboard-service.js.map +1 -0
- package/package.json +1 -1
- package/dist/ui/assets/accounts-BKK-Lc16.js +0 -1
- package/dist/ui/assets/api-DzTwRtww.js +0 -1
- package/dist/ui/assets/globalenv-section-vUSIK5rf.js +0 -1
- package/dist/ui/assets/icons-Dk2sL3Mr.js +0 -1
- package/dist/ui/assets/index-B9dJZNls.js +0 -1
- package/dist/ui/assets/index-DEDy1J8t.css +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCompatibleCliDocsReference = void 0;
|
|
4
|
+
const COMPATIBLE_CLI_DOCS_REGISTRY = {
|
|
5
|
+
droid: {
|
|
6
|
+
cliId: 'droid',
|
|
7
|
+
displayName: 'Droid CLI',
|
|
8
|
+
docsReference: {
|
|
9
|
+
providerValues: ['anthropic', 'openai', 'generic-chat-completion-api'],
|
|
10
|
+
settingsHierarchy: [
|
|
11
|
+
'project-level config',
|
|
12
|
+
'user-level config',
|
|
13
|
+
'home-level config',
|
|
14
|
+
'CLI flags and env vars',
|
|
15
|
+
],
|
|
16
|
+
notes: [
|
|
17
|
+
'BYOK custom models are read from ~/.factory/settings.json customModels[]',
|
|
18
|
+
'Legacy key style (custom_models, model_display_name, base_url, api_key, max_tokens) remains in circulation',
|
|
19
|
+
'Factory docs mention legacy support for ~/.factory/config.json',
|
|
20
|
+
'Interactive model selection uses settings.model (custom:<alias>)',
|
|
21
|
+
'Provider-specific reasoning keys in extraArgs: generic-chat-completion-api => reasoning_effort, openai => reasoning.effort, anthropic => thinking.{type,budget_tokens}',
|
|
22
|
+
'droid exec supports --model for one-off execution mode',
|
|
23
|
+
],
|
|
24
|
+
links: [
|
|
25
|
+
{
|
|
26
|
+
id: 'droid-cli-overview',
|
|
27
|
+
label: 'Droid CLI Overview',
|
|
28
|
+
url: 'https://docs.factory.ai/cli/',
|
|
29
|
+
category: 'overview',
|
|
30
|
+
source: 'factory',
|
|
31
|
+
description: 'Primary entry docs for setup, auth, and core CLI usage.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'droid-byok-overview',
|
|
35
|
+
label: 'BYOK Overview',
|
|
36
|
+
url: 'https://docs.factory.ai/cli/byok/overview/',
|
|
37
|
+
category: 'byok',
|
|
38
|
+
source: 'factory',
|
|
39
|
+
description: 'BYOK model/provider shape, provider values, and migration notes.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: 'droid-settings-reference',
|
|
43
|
+
label: 'settings.json Reference',
|
|
44
|
+
url: 'https://docs.factory.ai/cli/configuration/settings/',
|
|
45
|
+
category: 'configuration',
|
|
46
|
+
source: 'factory',
|
|
47
|
+
description: 'Supported settings keys, defaults, and allowed values.',
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
providerDocs: [
|
|
51
|
+
{
|
|
52
|
+
provider: 'anthropic',
|
|
53
|
+
label: 'Anthropic Messages API',
|
|
54
|
+
apiFormat: 'Messages API',
|
|
55
|
+
url: 'https://docs.anthropic.com/en/api/messages',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
provider: 'openai',
|
|
59
|
+
label: 'OpenAI Responses API',
|
|
60
|
+
apiFormat: 'Responses API',
|
|
61
|
+
url: 'https://platform.openai.com/docs/api-reference/responses',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
provider: 'generic-chat-completion-api',
|
|
65
|
+
label: 'OpenAI Chat Completions Spec',
|
|
66
|
+
apiFormat: 'Chat Completions API',
|
|
67
|
+
url: 'https://platform.openai.com/docs/api-reference/chat',
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
function getCompatibleCliDocsReference(cliId) {
|
|
74
|
+
const entry = COMPATIBLE_CLI_DOCS_REGISTRY[cliId];
|
|
75
|
+
if (!entry) {
|
|
76
|
+
throw new Error(`Unsupported compatible CLI docs reference: ${cliId}`);
|
|
77
|
+
}
|
|
78
|
+
return entry.docsReference;
|
|
79
|
+
}
|
|
80
|
+
exports.getCompatibleCliDocsReference = getCompatibleCliDocsReference;
|
|
81
|
+
//# sourceMappingURL=compatible-cli-docs-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatible-cli-docs-registry.js","sourceRoot":"","sources":["../../../src/web-server/services/compatible-cli-docs-registry.ts"],"names":[],"mappings":";;;AA8BA,MAAM,4BAA4B,GAAmD;IACnF,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,WAAW;QACxB,aAAa,EAAE;YACb,cAAc,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,6BAA6B,CAAC;YACtE,iBAAiB,EAAE;gBACjB,sBAAsB;gBACtB,mBAAmB;gBACnB,mBAAmB;gBACnB,wBAAwB;aACzB;YACD,KAAK,EAAE;gBACL,0EAA0E;gBAC1E,4GAA4G;gBAC5G,gEAAgE;gBAChE,kEAAkE;gBAClE,wKAAwK;gBACxK,wDAAwD;aACzD;YACD,KAAK,EAAE;gBACL;oBACE,EAAE,EAAE,oBAAoB;oBACxB,KAAK,EAAE,oBAAoB;oBAC3B,GAAG,EAAE,8BAA8B;oBACnC,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,yDAAyD;iBACvE;gBACD;oBACE,EAAE,EAAE,qBAAqB;oBACzB,KAAK,EAAE,eAAe;oBACtB,GAAG,EAAE,4CAA4C;oBACjD,QAAQ,EAAE,MAAM;oBAChB,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,kEAAkE;iBAChF;gBACD;oBACE,EAAE,EAAE,0BAA0B;oBAC9B,KAAK,EAAE,yBAAyB;oBAChC,GAAG,EAAE,qDAAqD;oBAC1D,QAAQ,EAAE,eAAe;oBACzB,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,wDAAwD;iBACtE;aACF;YACD,YAAY,EAAE;gBACZ;oBACE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,wBAAwB;oBAC/B,SAAS,EAAE,cAAc;oBACzB,GAAG,EAAE,4CAA4C;iBAClD;gBACD;oBACE,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,sBAAsB;oBAC7B,SAAS,EAAE,eAAe;oBAC1B,GAAG,EAAE,0DAA0D;iBAChE;gBACD;oBACE,QAAQ,EAAE,6BAA6B;oBACvC,KAAK,EAAE,8BAA8B;oBACrC,SAAS,EAAE,sBAAsB;oBACjC,GAAG,EAAE,qDAAqD;iBAC3D;aACF;SACF;KACF;CACF,CAAC;AAEF,SAAgB,6BAA6B,CAAC,KAAa;IACzD,MAAM,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAND,sEAMC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface JsonFileDiagnostics {
|
|
2
|
+
label: string;
|
|
3
|
+
path: string;
|
|
4
|
+
resolvedPath: string;
|
|
5
|
+
exists: boolean;
|
|
6
|
+
isSymlink: boolean;
|
|
7
|
+
isRegularFile: boolean;
|
|
8
|
+
sizeBytes: number | null;
|
|
9
|
+
mtimeMs: number | null;
|
|
10
|
+
parseError: string | null;
|
|
11
|
+
readError: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface JsonFileProbe {
|
|
14
|
+
diagnostics: JsonFileDiagnostics;
|
|
15
|
+
json: Record<string, unknown> | null;
|
|
16
|
+
rawText: string;
|
|
17
|
+
}
|
|
18
|
+
interface WriteJsonObjectFileInput {
|
|
19
|
+
filePath: string;
|
|
20
|
+
rawText: string;
|
|
21
|
+
expectedMtime?: number;
|
|
22
|
+
fileLabel?: string;
|
|
23
|
+
dirMode?: number;
|
|
24
|
+
fileMode?: number;
|
|
25
|
+
}
|
|
26
|
+
interface WriteJsonObjectFileResult {
|
|
27
|
+
mtime: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class JsonFileValidationError extends Error {
|
|
30
|
+
constructor(message: string);
|
|
31
|
+
}
|
|
32
|
+
export declare class JsonFileConflictError extends Error {
|
|
33
|
+
readonly code = "CONFLICT";
|
|
34
|
+
readonly mtime: number;
|
|
35
|
+
constructor(message: string, mtime: number);
|
|
36
|
+
}
|
|
37
|
+
export declare function probeJsonObjectFile(filePath: string, label: string, displayPath: string): Promise<JsonFileProbe>;
|
|
38
|
+
export declare function parseJsonObjectText(rawText: string, fieldName?: string): Record<string, unknown>;
|
|
39
|
+
export declare function writeJsonObjectFileAtomic(input: WriteJsonObjectFileInput): Promise<WriteJsonObjectFileResult>;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=compatible-cli-json-file-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatible-cli-json-file-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/compatible-cli-json-file-service.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,mBAAmB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAK3C;AAiBD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CA6DxB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,SAAY,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,yBAAyB,CAAC,CA2EpC"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.writeJsonObjectFileAtomic = exports.parseJsonObjectText = exports.probeJsonObjectFile = exports.JsonFileConflictError = exports.JsonFileValidationError = void 0;
|
|
27
|
+
const fs_1 = require("fs");
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
class JsonFileValidationError extends Error {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.name = 'JsonFileValidationError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.JsonFileValidationError = JsonFileValidationError;
|
|
36
|
+
class JsonFileConflictError extends Error {
|
|
37
|
+
constructor(message, mtime) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.code = 'CONFLICT';
|
|
40
|
+
this.name = 'JsonFileConflictError';
|
|
41
|
+
this.mtime = mtime;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.JsonFileConflictError = JsonFileConflictError;
|
|
45
|
+
function isObject(value) {
|
|
46
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
47
|
+
}
|
|
48
|
+
async function statPath(filePath) {
|
|
49
|
+
try {
|
|
50
|
+
return await fs_1.promises.lstat(filePath);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (error.code === 'ENOENT') {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function probeJsonObjectFile(filePath, label, displayPath) {
|
|
60
|
+
const stat = await statPath(filePath);
|
|
61
|
+
if (!stat) {
|
|
62
|
+
return {
|
|
63
|
+
diagnostics: {
|
|
64
|
+
label,
|
|
65
|
+
path: displayPath,
|
|
66
|
+
resolvedPath: filePath,
|
|
67
|
+
exists: false,
|
|
68
|
+
isSymlink: false,
|
|
69
|
+
isRegularFile: false,
|
|
70
|
+
sizeBytes: null,
|
|
71
|
+
mtimeMs: null,
|
|
72
|
+
parseError: null,
|
|
73
|
+
readError: null,
|
|
74
|
+
},
|
|
75
|
+
json: null,
|
|
76
|
+
rawText: '{}',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const diagnostics = {
|
|
80
|
+
label,
|
|
81
|
+
path: displayPath,
|
|
82
|
+
resolvedPath: filePath,
|
|
83
|
+
exists: true,
|
|
84
|
+
isSymlink: stat.isSymbolicLink(),
|
|
85
|
+
isRegularFile: stat.isFile(),
|
|
86
|
+
sizeBytes: stat.size,
|
|
87
|
+
mtimeMs: stat.mtimeMs,
|
|
88
|
+
parseError: null,
|
|
89
|
+
readError: null,
|
|
90
|
+
};
|
|
91
|
+
if (diagnostics.isSymlink) {
|
|
92
|
+
diagnostics.readError = 'Refusing symlink file for safety.';
|
|
93
|
+
return { diagnostics, json: null, rawText: '{}' };
|
|
94
|
+
}
|
|
95
|
+
if (!diagnostics.isRegularFile) {
|
|
96
|
+
diagnostics.readError = 'Target is not a regular file.';
|
|
97
|
+
return { diagnostics, json: null, rawText: '{}' };
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const rawText = await fs_1.promises.readFile(filePath, 'utf8');
|
|
101
|
+
try {
|
|
102
|
+
const parsed = JSON.parse(rawText);
|
|
103
|
+
if (!isObject(parsed)) {
|
|
104
|
+
diagnostics.parseError = 'JSON root must be an object.';
|
|
105
|
+
return { diagnostics, json: null, rawText };
|
|
106
|
+
}
|
|
107
|
+
return { diagnostics, json: parsed, rawText };
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
diagnostics.parseError = error.message;
|
|
111
|
+
return { diagnostics, json: null, rawText };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
diagnostics.readError = error.message;
|
|
116
|
+
return { diagnostics, json: null, rawText: '{}' };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.probeJsonObjectFile = probeJsonObjectFile;
|
|
120
|
+
function parseJsonObjectText(rawText, fieldName = 'rawText') {
|
|
121
|
+
let parsed;
|
|
122
|
+
try {
|
|
123
|
+
parsed = JSON.parse(rawText);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new JsonFileValidationError(`Invalid JSON in ${fieldName}: ${error.message}`);
|
|
127
|
+
}
|
|
128
|
+
if (!isObject(parsed)) {
|
|
129
|
+
throw new JsonFileValidationError(`${fieldName} JSON root must be an object.`);
|
|
130
|
+
}
|
|
131
|
+
return parsed;
|
|
132
|
+
}
|
|
133
|
+
exports.parseJsonObjectText = parseJsonObjectText;
|
|
134
|
+
async function writeJsonObjectFileAtomic(input) {
|
|
135
|
+
const fileLabel = input.fileLabel || path.basename(input.filePath);
|
|
136
|
+
const parsed = parseJsonObjectText(input.rawText, fileLabel);
|
|
137
|
+
const targetPath = input.filePath;
|
|
138
|
+
const targetDir = path.dirname(targetPath);
|
|
139
|
+
const tempPath = targetPath + '.tmp';
|
|
140
|
+
const dirMode = input.dirMode ?? 0o700;
|
|
141
|
+
const fileMode = input.fileMode ?? 0o600;
|
|
142
|
+
await fs_1.promises.mkdir(targetDir, { recursive: true, mode: dirMode });
|
|
143
|
+
const targetStat = await statPath(targetPath);
|
|
144
|
+
if (targetStat) {
|
|
145
|
+
const stat = targetStat;
|
|
146
|
+
if (stat.isSymbolicLink()) {
|
|
147
|
+
throw new Error(`Refusing to write: ${fileLabel} is a symlink.`);
|
|
148
|
+
}
|
|
149
|
+
if (!stat.isFile()) {
|
|
150
|
+
throw new Error(`Refusing to write: ${fileLabel} is not a regular file.`);
|
|
151
|
+
}
|
|
152
|
+
if (typeof input.expectedMtime !== 'number' || !Number.isFinite(input.expectedMtime)) {
|
|
153
|
+
throw new JsonFileConflictError('File metadata not loaded. Refresh and retry.', stat.mtimeMs);
|
|
154
|
+
}
|
|
155
|
+
if (Math.abs(stat.mtimeMs - input.expectedMtime) > 1000) {
|
|
156
|
+
throw new JsonFileConflictError('File modified externally.', stat.mtimeMs);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
let wroteTemp = false;
|
|
160
|
+
try {
|
|
161
|
+
const existingTempStat = await statPath(tempPath);
|
|
162
|
+
if (existingTempStat) {
|
|
163
|
+
const tempStat = existingTempStat;
|
|
164
|
+
if (tempStat.isSymbolicLink()) {
|
|
165
|
+
throw new Error(`Refusing to write: ${fileLabel}.tmp is a symlink.`);
|
|
166
|
+
}
|
|
167
|
+
if (!tempStat.isFile()) {
|
|
168
|
+
throw new Error(`Refusing to write: ${fileLabel}.tmp is not a regular file.`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
await fs_1.promises.writeFile(tempPath, JSON.stringify(parsed, null, 2) + '\n', { mode: fileMode });
|
|
172
|
+
wroteTemp = true;
|
|
173
|
+
const tempStat = await fs_1.promises.lstat(tempPath);
|
|
174
|
+
if (tempStat.isSymbolicLink()) {
|
|
175
|
+
throw new Error(`Refusing to write: ${fileLabel}.tmp is a symlink.`);
|
|
176
|
+
}
|
|
177
|
+
if (!tempStat.isFile()) {
|
|
178
|
+
throw new Error(`Refusing to write: ${fileLabel}.tmp is not a regular file.`);
|
|
179
|
+
}
|
|
180
|
+
await fs_1.promises.rename(tempPath, targetPath);
|
|
181
|
+
wroteTemp = false;
|
|
182
|
+
try {
|
|
183
|
+
await fs_1.promises.chmod(targetPath, fileMode);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Best-effort permission hardening.
|
|
187
|
+
}
|
|
188
|
+
const stat = await fs_1.promises.stat(targetPath);
|
|
189
|
+
return { mtime: stat.mtimeMs };
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
if (wroteTemp) {
|
|
193
|
+
try {
|
|
194
|
+
await fs_1.promises.unlink(tempPath);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
if (error.code !== 'ENOENT') {
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.writeJsonObjectFileAtomic = writeJsonObjectFileAtomic;
|
|
205
|
+
//# sourceMappingURL=compatible-cli-json-file-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatible-cli-json-file-service.js","sourceRoot":"","sources":["../../../src/web-server/services/compatible-cli-json-file-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export type DroidBinarySource = 'CCS_DROID_PATH' | 'PATH' | 'missing';
|
|
2
|
+
export interface DroidBinaryDiagnostics {
|
|
3
|
+
installed: boolean;
|
|
4
|
+
path: string | null;
|
|
5
|
+
installDir: string | null;
|
|
6
|
+
source: DroidBinarySource;
|
|
7
|
+
version: string | null;
|
|
8
|
+
overridePath: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface DroidConfigFileDiagnostics {
|
|
11
|
+
label: string;
|
|
12
|
+
path: string;
|
|
13
|
+
resolvedPath: string;
|
|
14
|
+
exists: boolean;
|
|
15
|
+
isSymlink: boolean;
|
|
16
|
+
isRegularFile: boolean;
|
|
17
|
+
sizeBytes: number | null;
|
|
18
|
+
mtimeMs: number | null;
|
|
19
|
+
parseError: string | null;
|
|
20
|
+
readError: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface DroidCustomModelDiagnostics {
|
|
23
|
+
displayName: string;
|
|
24
|
+
model: string;
|
|
25
|
+
provider: string;
|
|
26
|
+
baseUrl: string;
|
|
27
|
+
host: string | null;
|
|
28
|
+
maxOutputTokens: number | null;
|
|
29
|
+
isCcsManaged: boolean;
|
|
30
|
+
apiKeyState: 'set' | 'missing';
|
|
31
|
+
apiKeyPreview: string | null;
|
|
32
|
+
}
|
|
33
|
+
export interface DroidByokDiagnostics {
|
|
34
|
+
activeModelSelector: string | null;
|
|
35
|
+
customModelCount: number;
|
|
36
|
+
ccsManagedCount: number;
|
|
37
|
+
userManagedCount: number;
|
|
38
|
+
invalidModelEntryCount: number;
|
|
39
|
+
providerBreakdown: Record<string, number>;
|
|
40
|
+
customModels: DroidCustomModelDiagnostics[];
|
|
41
|
+
}
|
|
42
|
+
export interface CompatibleCliDocLink {
|
|
43
|
+
id: string;
|
|
44
|
+
label: string;
|
|
45
|
+
url: string;
|
|
46
|
+
category: 'overview' | 'configuration' | 'byok' | 'reference';
|
|
47
|
+
source: 'factory' | 'provider';
|
|
48
|
+
description: string;
|
|
49
|
+
}
|
|
50
|
+
export interface CompatibleCliProviderDocLink {
|
|
51
|
+
provider: string;
|
|
52
|
+
label: string;
|
|
53
|
+
apiFormat: string;
|
|
54
|
+
url: string;
|
|
55
|
+
}
|
|
56
|
+
export interface CompatibleCliDocsReference {
|
|
57
|
+
providerValues: string[];
|
|
58
|
+
settingsHierarchy: string[];
|
|
59
|
+
notes: string[];
|
|
60
|
+
links: CompatibleCliDocLink[];
|
|
61
|
+
providerDocs: CompatibleCliProviderDocLink[];
|
|
62
|
+
}
|
|
63
|
+
export interface DroidDashboardDiagnostics {
|
|
64
|
+
binary: DroidBinaryDiagnostics;
|
|
65
|
+
files: {
|
|
66
|
+
settings: DroidConfigFileDiagnostics;
|
|
67
|
+
legacyConfig: DroidConfigFileDiagnostics;
|
|
68
|
+
};
|
|
69
|
+
byok: DroidByokDiagnostics;
|
|
70
|
+
warnings: string[];
|
|
71
|
+
docsReference: CompatibleCliDocsReference;
|
|
72
|
+
}
|
|
73
|
+
export interface DroidRawSettingsResponse {
|
|
74
|
+
path: string;
|
|
75
|
+
resolvedPath: string;
|
|
76
|
+
exists: boolean;
|
|
77
|
+
mtime: number;
|
|
78
|
+
rawText: string;
|
|
79
|
+
settings: Record<string, unknown> | null;
|
|
80
|
+
parseError: string | null;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=compatible-cli-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatible-cli-types.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/compatible-cli-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatible-cli-types.js","sourceRoot":"","sources":["../../../src/web-server/services/compatible-cli-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { DroidByokDiagnostics, DroidDashboardDiagnostics, DroidRawSettingsResponse } from './compatible-cli-types';
|
|
3
|
+
import { JsonFileConflictError, JsonFileValidationError } from './compatible-cli-json-file-service';
|
|
4
|
+
interface DroidConfigPaths {
|
|
5
|
+
settingsPath: string;
|
|
6
|
+
settingsDisplayPath: string;
|
|
7
|
+
legacyConfigPath: string;
|
|
8
|
+
legacyConfigDisplayPath: string;
|
|
9
|
+
}
|
|
10
|
+
interface SaveDroidRawSettingsInput {
|
|
11
|
+
rawText: string;
|
|
12
|
+
expectedMtime?: number;
|
|
13
|
+
}
|
|
14
|
+
interface SaveDroidRawSettingsResult {
|
|
15
|
+
success: true;
|
|
16
|
+
mtime: number;
|
|
17
|
+
}
|
|
18
|
+
export { JsonFileConflictError as DroidRawSettingsConflictError, JsonFileValidationError as DroidRawSettingsValidationError, };
|
|
19
|
+
export declare function maskApiKeyPreview(value: string): string;
|
|
20
|
+
export declare function resolveDroidConfigPaths(options?: {
|
|
21
|
+
platform?: NodeJS.Platform;
|
|
22
|
+
env?: NodeJS.ProcessEnv;
|
|
23
|
+
homeDir?: string;
|
|
24
|
+
}): DroidConfigPaths;
|
|
25
|
+
export declare function summarizeDroidCustomModels(customModelsValue: unknown): DroidByokDiagnostics;
|
|
26
|
+
export declare function getDroidDashboardDiagnostics(): Promise<DroidDashboardDiagnostics>;
|
|
27
|
+
export declare function getDroidRawSettings(): Promise<DroidRawSettingsResponse>;
|
|
28
|
+
export declare function saveDroidRawSettings(input: SaveDroidRawSettingsInput): Promise<SaveDroidRawSettingsResult>;
|
|
29
|
+
//# sourceMappingURL=droid-dashboard-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"droid-dashboard-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/droid-dashboard-service.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EACV,oBAAoB,EAEpB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EAGxB,MAAM,oCAAoC,CAAC;AAG5C,UAAU,gBAAgB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EACL,qBAAqB,IAAI,6BAA6B,EACtD,uBAAuB,IAAI,+BAA+B,GAC3D,CAAC;AA0BF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAMD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,gBAAgB,CAclB;AAiBD,wBAAgB,0BAA0B,CAAC,iBAAiB,EAAE,OAAO,GAAG,oBAAoB,CAuD3F;AAqBD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CA2DvF;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAiB7E;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,0BAA0B,CAAC,CAarC"}
|