@bf-meishijian/aip 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +3 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +263 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/daemon.d.ts +5 -0
  7. package/dist/daemon.d.ts.map +1 -0
  8. package/dist/daemon.js +166 -0
  9. package/dist/daemon.js.map +1 -0
  10. package/dist/diagnostics.d.ts +22 -0
  11. package/dist/diagnostics.d.ts.map +1 -0
  12. package/dist/diagnostics.js +167 -0
  13. package/dist/diagnostics.js.map +1 -0
  14. package/dist/installer.d.ts +31 -0
  15. package/dist/installer.d.ts.map +1 -0
  16. package/dist/installer.js +226 -0
  17. package/dist/installer.js.map +1 -0
  18. package/dist/open-browser.d.ts +2 -0
  19. package/dist/open-browser.d.ts.map +1 -0
  20. package/dist/open-browser.js +20 -0
  21. package/dist/open-browser.js.map +1 -0
  22. package/dist/paths.d.ts +16 -0
  23. package/dist/paths.d.ts.map +1 -0
  24. package/dist/paths.js +23 -0
  25. package/dist/paths.js.map +1 -0
  26. package/dist/pi-model-service.d.ts +54 -0
  27. package/dist/pi-model-service.d.ts.map +1 -0
  28. package/dist/pi-model-service.js +239 -0
  29. package/dist/pi-model-service.js.map +1 -0
  30. package/dist/platform-client.d.ts +48 -0
  31. package/dist/platform-client.d.ts.map +1 -0
  32. package/dist/platform-client.js +64 -0
  33. package/dist/platform-client.js.map +1 -0
  34. package/dist/platform.d.ts +2 -0
  35. package/dist/platform.d.ts.map +1 -0
  36. package/dist/platform.js +15 -0
  37. package/dist/platform.js.map +1 -0
  38. package/dist/secure-json.d.ts +4 -0
  39. package/dist/secure-json.d.ts.map +1 -0
  40. package/dist/secure-json.js +37 -0
  41. package/dist/secure-json.js.map +1 -0
  42. package/dist/self-check.d.ts +3 -0
  43. package/dist/self-check.d.ts.map +1 -0
  44. package/dist/self-check.js +9 -0
  45. package/dist/self-check.js.map +1 -0
  46. package/dist/state.d.ts +35 -0
  47. package/dist/state.d.ts.map +1 -0
  48. package/dist/state.js +33 -0
  49. package/dist/state.js.map +1 -0
  50. package/package.json +39 -0
@@ -0,0 +1,167 @@
1
+ import { spawn } from "node:child_process";
2
+ import { constants } from "node:fs";
3
+ import { access, lstat, mkdir, readFile } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { launchAgentDefinition, verifyManifest, windowsTaskDefinition, } from "./installer.js";
6
+ import { paths } from "./paths.js";
7
+ import { runtimeArchitecture } from "./platform.js";
8
+ import { isSecureFile, readJson } from "./secure-json.js";
9
+ export async function runDiagnostics(options, dependencies = {}) {
10
+ const local = paths();
11
+ const checks = [];
12
+ checks.push(await runtimeCheck(local.runtimeCurrent));
13
+ checks.push(await backgroundCheck(dependencies.captureCommand ?? captureCommand));
14
+ checks.push(await deviceCredentialCheck(options.deviceCredentialValid));
15
+ checks.push({
16
+ id: "PROVIDER_AUTH",
17
+ status: options.providerReady ? "PASS" : "ACTION_REQUIRED",
18
+ code: options.providerReady ? "PROVIDER_AUTH_OK" : "PROVIDER_LOGIN_REQUIRED",
19
+ nextAction: "登录 ChatGPT 或 Claude",
20
+ });
21
+ checks.push({
22
+ id: "PLATFORM_CONNECTIVITY",
23
+ status: options.platformReachable ? "PASS" : "FAIL",
24
+ code: options.platformReachable ? "PLATFORM_REACHABLE" : "PLATFORM_UNREACHABLE",
25
+ nextAction: "检查网络后重试",
26
+ });
27
+ checks.push({
28
+ id: "HOST_GENERATION",
29
+ status: options.generationValid ? "PASS" : "FAIL",
30
+ code: options.generationValid ? "HOST_GENERATION_OK" : "HOST_FENCED",
31
+ nextAction: "执行 aip host register",
32
+ });
33
+ checks.push(await workspaceCheck(local.workspaceRoot));
34
+ checks.push({
35
+ id: "DEFAULT_MODEL",
36
+ status: options.defaultModelValid ? "PASS" : "ACTION_REQUIRED",
37
+ code: options.defaultModelValid ? "DEFAULT_MODEL_OK" : "DEFAULT_MODEL_INVALID",
38
+ nextAction: "在平台重新选择默认模型",
39
+ });
40
+ return checks;
41
+ }
42
+ async function runtimeCheck(path) {
43
+ try {
44
+ const manifest = JSON.parse(await readFile(join(path, "runtime-manifest.json"), "utf8"));
45
+ if (manifest.platform !== process.platform || manifest.arch !== runtimeArchitecture())
46
+ throw new Error("runtime platform mismatch");
47
+ await verifyManifest(path, manifest);
48
+ return {
49
+ id: "RUNTIME_INTEGRITY",
50
+ status: "PASS",
51
+ code: "RUNTIME_INTEGRITY_OK",
52
+ nextAction: "无需处理",
53
+ };
54
+ }
55
+ catch {
56
+ return {
57
+ id: "RUNTIME_INTEGRITY",
58
+ status: "FAIL",
59
+ code: "RUNTIME_INTEGRITY_FAILED",
60
+ nextAction: "重新执行 aip host install",
61
+ };
62
+ }
63
+ }
64
+ async function deviceCredentialCheck(platformValid) {
65
+ const local = paths();
66
+ const secure = await isSecureFile(local.deviceAuth);
67
+ let expired = false;
68
+ try {
69
+ const credential = await readJson(local.deviceAuth);
70
+ expired = !credential?.expiresAt || new Date(credential.expiresAt).getTime() <= Date.now();
71
+ }
72
+ catch {
73
+ expired = true;
74
+ }
75
+ const valid = secure && !expired && platformValid;
76
+ return {
77
+ id: "DEVICE_CREDENTIAL",
78
+ status: valid ? "PASS" : "FAIL",
79
+ code: valid
80
+ ? "DEVICE_CREDENTIAL_OK"
81
+ : !secure
82
+ ? "DEVICE_CREDENTIAL_PERMISSION_INVALID"
83
+ : expired
84
+ ? "DEVICE_CREDENTIAL_EXPIRED"
85
+ : "DEVICE_CREDENTIAL_REJECTED",
86
+ nextAction: valid ? "无需处理" : "执行 aip login",
87
+ };
88
+ }
89
+ async function backgroundCheck(runCommand) {
90
+ const local = paths();
91
+ const state = await readJson(local.daemonState);
92
+ const processRunning = Boolean(state?.pid && processExists(state.pid));
93
+ let configuredAndLoaded = processRunning;
94
+ if (process.platform === "darwin") {
95
+ const expected = launchAgentDefinition(local.runtimeCurrent);
96
+ const configured = (await readFile(expected.plist, "utf8").catch(() => "")) === expected.xml;
97
+ const launchd = await runCommand("launchctl", [
98
+ "print",
99
+ `${expected.domain}/${expected.label}`,
100
+ ]);
101
+ const expectedEntries = [
102
+ join(local.runtimeCurrent, "bin", "node"),
103
+ join(local.runtimeCurrent, "app", "dist", "daemon.js"),
104
+ local.root,
105
+ ];
106
+ const loaded = launchd.code === 0 && expectedEntries.every((entry) => launchd.output.includes(entry));
107
+ configuredAndLoaded = configured && loaded;
108
+ }
109
+ else if (process.platform === "win32") {
110
+ const expected = windowsTaskDefinition(local.runtimeCurrent, local.root);
111
+ const configured = await readJson(join(local.root, "state", "windows-task.json"));
112
+ const loaded = (await runCommand("schtasks.exe", ["/Query", "/TN", "AI Platform Local Coding Host"]))
113
+ .code === 0;
114
+ configuredAndLoaded = JSON.stringify(configured) === JSON.stringify(expected) && loaded;
115
+ }
116
+ const running = processRunning && configuredAndLoaded;
117
+ return {
118
+ id: "BACKGROUND_SERVICE",
119
+ status: running ? "PASS" : "FAIL",
120
+ code: running ? "BACKGROUND_SERVICE_OK" : "BACKGROUND_SERVICE_STOPPED",
121
+ nextAction: "执行 aip host restart",
122
+ };
123
+ }
124
+ function captureCommand(command, args) {
125
+ return new Promise((resolveResult) => {
126
+ let output = "";
127
+ const child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
128
+ for (const stream of [child.stdout, child.stderr])
129
+ stream.on("data", (chunk) => {
130
+ output = `${output}${chunk.toString()}`.slice(-16_000);
131
+ });
132
+ child.once("error", () => resolveResult({ code: 1, output }));
133
+ child.once("exit", (code) => resolveResult({ code: code ?? 1, output }));
134
+ });
135
+ }
136
+ export async function workspaceCheck(root) {
137
+ try {
138
+ await mkdir(root, { recursive: true, mode: 0o700 });
139
+ if (!(await lstat(root)).isDirectory())
140
+ throw new Error("not directory");
141
+ await access(root, constants.W_OK);
142
+ return {
143
+ id: "WORKSPACE_ROOT",
144
+ status: "PASS",
145
+ code: "WORKSPACE_ROOT_OK",
146
+ nextAction: "无需处理",
147
+ };
148
+ }
149
+ catch {
150
+ return {
151
+ id: "WORKSPACE_ROOT",
152
+ status: "FAIL",
153
+ code: "WORKSPACE_ROOT_UNAVAILABLE",
154
+ nextAction: "修复 ~/.aip/workspaces 目录权限",
155
+ };
156
+ }
157
+ }
158
+ function processExists(pid) {
159
+ try {
160
+ process.kill(pid, 0);
161
+ return true;
162
+ }
163
+ catch {
164
+ return false;
165
+ }
166
+ }
167
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,qBAAqB,EAErB,cAAc,EACd,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAMC,EACD,eAA2D,EAAE;IAE7D,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;IACtB,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,YAAY,CAAC,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,CAAC;QACV,EAAE,EAAE,eAAe;QACnB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;QAC1D,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,yBAAyB;QAC5E,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC;QACV,EAAE,EAAE,uBAAuB;QAC3B,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACnD,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB;QAC/E,UAAU,EAAE,SAAS;KACtB,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC;QACV,EAAE,EAAE,iBAAiB;QACrB,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACjD,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa;QACpE,UAAU,EAAE,sBAAsB;KACnC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC;QACV,EAAE,EAAE,eAAe;QACnB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;QAC9D,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,uBAAuB;QAC9E,UAAU,EAAE,aAAa;KAC1B,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC,CACzC,CAAC;QACrB,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,mBAAmB,EAAE;YACnF,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,mBAAmB;YACvB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,sBAAsB;YAC5B,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,EAAE,EAAE,mBAAmB;YACvB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,0BAA0B;YAChC,UAAU,EAAE,uBAAuB;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AACD,KAAK,UAAU,qBAAqB,CAClC,aAAsB;IAEtB,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAyB,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC,UAAU,EAAE,SAAS,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC;IAClD,OAAO;QACL,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC/B,IAAI,EAAE,KAAK;YACT,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,CAAC,MAAM;gBACP,CAAC,CAAC,sCAAsC;gBACxC,CAAC,CAAC,OAAO;oBACP,CAAC,CAAC,2BAA2B;oBAC7B,CAAC,CAAC,4BAA4B;QACpC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;KAC5C,CAAC;AACJ,CAAC;AACD,KAAK,UAAU,eAAe,CAC5B,UAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAmB,KAAK,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,mBAAmB,GAAG,cAAc,CAAC;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC;QAC7F,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE;YAC5C,OAAO;YACP,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE;SACvC,CAAC,CAAC;QACH,MAAM,eAAe,GAAG;YACtB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;YACtD,KAAK,CAAC,IAAI;SACX,CAAC;QACF,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACzF,mBAAmB,GAAG,UAAU,IAAI,MAAM,CAAC;IAC7C,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GACV,CAAC,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,+BAA+B,CAAC,CAAC,CAAC;aACnF,IAAI,KAAK,CAAC,CAAC;QAChB,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,IAAI,mBAAmB,CAAC;IACtD,OAAO;QACL,EAAE,EAAE,oBAAoB;QACxB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACjC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,4BAA4B;QACtE,UAAU,EAAE,qBAAqB;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,IAAc;IACrD,OAAO,IAAI,OAAO,CAAmC,CAAC,aAAa,EAAE,EAAE;QACrE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACzE,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO;YACL,EAAE,EAAE,gBAAgB;YACpB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mBAAmB;YACzB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,EAAE,EAAE,gBAAgB;YACpB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,4BAA4B;YAClC,UAAU,EAAE,2BAA2B;SACxC,CAAC;IACJ,CAAC;AACH,CAAC;AACD,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface RuntimeManifest {
2
+ version: string;
3
+ platform: string;
4
+ arch: string;
5
+ nodeVersion?: string;
6
+ sourceSha?: string;
7
+ files: Array<{
8
+ path: string;
9
+ sha256: string;
10
+ }>;
11
+ }
12
+ export declare function installRuntime(): Promise<{
13
+ version: string;
14
+ runtime: string;
15
+ }>;
16
+ export declare function verifyManifest(root: string, manifest: RuntimeManifest): Promise<void>;
17
+ export declare function launchAgentDefinition(runtime: string): {
18
+ label: string;
19
+ launchDir: string;
20
+ plist: string;
21
+ xml: string;
22
+ domain: string;
23
+ };
24
+ export declare function windowsTaskDefinition(runtime: string, root: string): {
25
+ executable: string;
26
+ arguments: string[];
27
+ environment: {
28
+ AIP_HOME: string;
29
+ };
30
+ };
31
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,wBAAsB,cAAc;;;GA4DnC;AA8ED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,iBAS3E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM;;;;;;EASpD;AA6CD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;EAMlE"}
@@ -0,0 +1,226 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createHash, randomBytes } from "node:crypto";
3
+ import { chmod, cp, lstat, mkdir, readFile, readlink, rename, rm, stat, symlink, writeFile, } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, join, resolve, win32 } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ import { paths } from "./paths.js";
8
+ import { runtimeArchitecture } from "./platform.js";
9
+ export async function installRuntime() {
10
+ const source = await resolveRuntimePackage();
11
+ const manifest = JSON.parse(await readFile(join(source, "runtime-manifest.json"), "utf8"));
12
+ const architecture = runtimeArchitecture();
13
+ if (manifest.platform !== process.platform || manifest.arch !== architecture)
14
+ throw new Error(`Runtime 架构不匹配:需要 ${process.platform}-${architecture}`);
15
+ await verifyManifest(source, manifest);
16
+ const local = paths();
17
+ const versions = join(local.runtime, "versions");
18
+ const staging = join(versions, `${manifest.version}.staging-${randomBytes(6).toString("hex")}`);
19
+ const target = join(versions, manifest.version);
20
+ const replacedTarget = join(versions, `${manifest.version}.previous-${randomBytes(6).toString("hex")}`);
21
+ const previous = await readlink(local.runtimeCurrent).catch(() => null);
22
+ let targetWasReplaced = false;
23
+ let targetActivated = false;
24
+ await mkdir(versions, { recursive: true, mode: 0o700 });
25
+ try {
26
+ await cp(source, staging, { recursive: true });
27
+ await run(join(staging, "bin", process.platform === "win32" ? "node.exe" : "node"), [join(staging, "app", "dist", "self-check.js")], { AIP_RUNTIME_ROOT: staging });
28
+ if (await exists(target)) {
29
+ await rename(target, replacedTarget);
30
+ targetWasReplaced = true;
31
+ }
32
+ await rename(staging, target);
33
+ targetActivated = true;
34
+ const pending = `${local.runtimeCurrent}.pending`;
35
+ await rm(pending, { force: true });
36
+ await symlink(target, pending, process.platform === "win32" ? "junction" : "dir");
37
+ await rename(pending, local.runtimeCurrent);
38
+ const serviceStartedAfter = Date.now();
39
+ if (process.platform === "darwin")
40
+ await installLaunchAgent(local.runtimeCurrent);
41
+ else if (process.platform === "win32")
42
+ await installWindowsTask(local.runtimeCurrent);
43
+ if (process.env.AIP_SKIP_SERVICE !== "1")
44
+ await waitForDaemon(serviceStartedAfter, local.runtimeCurrent);
45
+ await installStableCli();
46
+ await rm(replacedTarget, { recursive: true, force: true });
47
+ return { version: manifest.version, runtime: target };
48
+ }
49
+ catch (error) {
50
+ await rm(staging, { recursive: true, force: true });
51
+ if (targetActivated)
52
+ await rm(target, { recursive: true, force: true });
53
+ if (targetWasReplaced && !(await exists(target)))
54
+ await rename(replacedTarget, target);
55
+ if (targetActivated) {
56
+ if (previous) {
57
+ const rollback = `${local.runtimeCurrent}.rollback`;
58
+ await rm(rollback, { force: true });
59
+ await symlink(previous, rollback, process.platform === "win32" ? "junction" : "dir");
60
+ await rename(rollback, local.runtimeCurrent);
61
+ }
62
+ else
63
+ await rm(local.runtimeCurrent, { force: true });
64
+ }
65
+ throw error;
66
+ }
67
+ }
68
+ async function installStableCli() {
69
+ const local = paths();
70
+ await mkdir(local.bin, { recursive: true, mode: 0o700 });
71
+ const temporary = `${local.stableCli}.${randomBytes(6).toString("hex")}.tmp`;
72
+ const contents = process.platform === "win32"
73
+ ? '@echo off\r\n"%~dp0..\\runtime\\current\\bin\\node.exe" "%~dp0..\\runtime\\current\\app\\dist\\cli.js" %*\r\n'
74
+ : [
75
+ "#!/bin/sh",
76
+ "aip_bin_dir=$" + "{0%/*}",
77
+ 'if [ "$aip_bin_dir" = "$0" ]; then aip_bin_dir=.; fi',
78
+ 'exec "$aip_bin_dir/../runtime/current/bin/node" "$aip_bin_dir/../runtime/current/app/dist/cli.js" "$@"',
79
+ "",
80
+ ].join("\n");
81
+ await writeFile(temporary, contents, { mode: process.platform === "win32" ? 0o600 : 0o700 });
82
+ await rename(temporary, local.stableCli);
83
+ if (process.platform !== "win32")
84
+ await chmod(local.stableCli, 0o700);
85
+ }
86
+ async function exists(path) {
87
+ return lstat(path)
88
+ .then(() => true)
89
+ .catch(() => false);
90
+ }
91
+ async function waitForDaemon(startedAfter, runtime) {
92
+ const deadline = Date.now() + 30_000;
93
+ while (Date.now() < deadline) {
94
+ const state = await import("./secure-json.js").then(({ readJson }) => readJson(paths().daemonState));
95
+ if (state?.pid && state.startedAt && new Date(state.startedAt).getTime() >= startedAfter) {
96
+ try {
97
+ process.kill(state.pid, 0);
98
+ return;
99
+ }
100
+ catch { }
101
+ }
102
+ await new Promise((resolveWait) => setTimeout(resolveWait, 100));
103
+ }
104
+ throw new Error(`后台 Host 未能启动;${await backgroundStartFailure(runtime)};请执行 aip doctor`);
105
+ }
106
+ async function backgroundStartFailure(runtime) {
107
+ const node = join(runtime, "bin", "node");
108
+ const executableExists = await exists(node);
109
+ const architecture = executableExists
110
+ ? (await capture(node, ["-p", "process.arch"])).trim() || "unknown"
111
+ : "missing";
112
+ const label = `com.ai-platform.local-coding-host${process.env.AIP_INSTANCE_SUFFIX ? `.${process.env.AIP_INSTANCE_SUFFIX}` : ""}`;
113
+ const launchd = await capture("launchctl", ["print", `gui/${process.getuid?.() ?? 0}/${label}`]);
114
+ const launchState = /state = ([^\n]+)/u.exec(launchd)?.[1]?.trim() ?? "unavailable";
115
+ const launchExit = /last exit code = ([^\n]+)/u.exec(launchd)?.[1]?.trim() ?? "unavailable";
116
+ const log = await readFile(paths().log, "utf8").catch(() => "");
117
+ const logTail = log.trim().slice(-1000).replaceAll(/\s+/gu, " ") || "empty";
118
+ return `executable=${executableExists ? "present" : "missing"}, architecture=${architecture}, launchd state=${launchState}, launchd last exit=${launchExit}, host.log=${logTail}`;
119
+ }
120
+ async function resolveRuntimePackage() {
121
+ if (process.env.AIP_RUNTIME_PACKAGE_DIR)
122
+ return resolve(process.env.AIP_RUNTIME_PACKAGE_DIR);
123
+ const packageName = `@bf-meishijian/aip-runtime-${process.platform}-${runtimeArchitecture()}`;
124
+ const scopeDir = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", packageName.split("/")[1] ?? "");
125
+ const runtimeDir = join(scopeDir, "runtime");
126
+ try {
127
+ await lstat(join(runtimeDir, "runtime-manifest.json"));
128
+ return runtimeDir;
129
+ }
130
+ catch { }
131
+ throw new Error(`未安装匹配的 ${packageName},请从同一 Registry 安装对应 Runtime 包`);
132
+ }
133
+ export async function verifyManifest(root, manifest) {
134
+ for (const file of manifest.files) {
135
+ if (file.path.includes("..") || file.path.startsWith("/"))
136
+ throw new Error("Runtime 清单包含非法路径");
137
+ const digest = createHash("sha256")
138
+ .update(await readFile(join(root, file.path)))
139
+ .digest("hex");
140
+ if (digest !== file.sha256)
141
+ throw new Error(`Runtime 文件校验失败:${file.path}`);
142
+ }
143
+ }
144
+ export function launchAgentDefinition(runtime) {
145
+ const local = paths();
146
+ const label = `com.ai-platform.local-coding-host${process.env.AIP_INSTANCE_SUFFIX ? `.${process.env.AIP_INSTANCE_SUFFIX}` : ""}`;
147
+ const launchDir = process.env.AIP_LAUNCH_AGENT_DIR || join(homedir(), "Library", "LaunchAgents");
148
+ const plist = join(launchDir, `${label}.plist`);
149
+ const node = join(runtime, "bin", "node");
150
+ const daemon = join(runtime, "app", "dist", "daemon.js");
151
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0"><dict><key>Label</key><string>${label}</string><key>ProgramArguments</key><array><string>${node}</string><string>${daemon}</string></array><key>EnvironmentVariables</key><dict><key>AIP_HOME</key><string>${local.root}</string>${process.env.AIP_TEST_PI === "1" ? "<key>AIP_TEST_PI</key><string>1</string>" : ""}</dict><key>RunAtLoad</key><true/><key>KeepAlive</key><true/><key>StandardOutPath</key><string>${local.log}</string><key>StandardErrorPath</key><string>${local.log}</string></dict></plist>\n`;
152
+ return { label, launchDir, plist, xml, domain: `gui/${process.getuid?.() ?? 0}` };
153
+ }
154
+ async function installLaunchAgent(runtime) {
155
+ const local = paths();
156
+ const { launchDir, plist, xml, domain } = launchAgentDefinition(runtime);
157
+ await mkdir(launchDir, { recursive: true });
158
+ await mkdir(dirname(local.log), { recursive: true, mode: 0o700 });
159
+ await rotateLog(local.log);
160
+ await import("node:fs/promises").then(({ writeFile }) => writeFile(plist, xml, { mode: 0o600 }));
161
+ if (process.env.AIP_SKIP_SERVICE !== "1") {
162
+ await run("launchctl", ["bootout", domain, plist], undefined, true);
163
+ await run("launchctl", ["bootstrap", domain, plist]);
164
+ }
165
+ }
166
+ async function rotateLog(log) {
167
+ const size = await stat(log)
168
+ .then((value) => value.size)
169
+ .catch(() => 0);
170
+ if (size < 10 * 1024 * 1024)
171
+ return;
172
+ await rm(`${log}.3`, { force: true });
173
+ await rename(`${log}.2`, `${log}.3`).catch(() => undefined);
174
+ await rename(`${log}.1`, `${log}.2`).catch(() => undefined);
175
+ await rename(log, `${log}.1`).catch(() => undefined);
176
+ }
177
+ async function installWindowsTask(runtime) {
178
+ const task = windowsTaskDefinition(runtime, paths().root);
179
+ const { writeSecureJson } = await import("./secure-json.js");
180
+ await writeSecureJson(join(paths().root, "state", "windows-task.json"), task);
181
+ if (process.env.AIP_SKIP_SERVICE !== "1") {
182
+ await run("schtasks.exe", [
183
+ "/Create",
184
+ "/F",
185
+ "/SC",
186
+ "ONLOGON",
187
+ "/TN",
188
+ "AI Platform Local Coding Host",
189
+ "/TR",
190
+ `"${task.executable}" "${task.arguments[0]}"`,
191
+ ]);
192
+ await run("schtasks.exe", ["/Run", "/TN", "AI Platform Local Coding Host"]);
193
+ }
194
+ }
195
+ export function windowsTaskDefinition(runtime, root) {
196
+ return {
197
+ executable: win32.join(runtime, "bin", "node.exe"),
198
+ arguments: [win32.join(runtime, "app", "dist", "daemon.js")],
199
+ environment: { AIP_HOME: root },
200
+ };
201
+ }
202
+ async function run(command, args, env, ignoreFailure = false) {
203
+ const code = await new Promise((resolveCode, reject) => {
204
+ const child = spawn(command, args, {
205
+ stdio: "ignore",
206
+ env: env ? { ...process.env, ...env } : process.env,
207
+ });
208
+ child.once("error", reject);
209
+ child.once("exit", (value) => resolveCode(value ?? 1));
210
+ });
211
+ if (code !== 0 && !ignoreFailure)
212
+ throw new Error(`${command} 执行失败 (${code})`);
213
+ }
214
+ function capture(command, args) {
215
+ return new Promise((resolveOutput) => {
216
+ let output = "";
217
+ const child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
218
+ for (const stream of [child.stdout, child.stderr])
219
+ stream.on("data", (chunk) => {
220
+ output = `${output}${chunk.toString()}`.slice(-16_000);
221
+ });
222
+ child.once("error", () => resolveOutput(output));
223
+ child.once("exit", () => resolveOutput(output));
224
+ });
225
+ }
226
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function openBrowser(url: string): Promise<void>;
2
+ //# sourceMappingURL=open-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../src/open-browser.ts"],"names":[],"mappings":"AAEA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,iBAiB5C"}
@@ -0,0 +1,20 @@
1
+ import { spawn } from "node:child_process";
2
+ export async function openBrowser(url) {
3
+ if (!/^https?:\/\//u.test(url))
4
+ throw new Error("只允许打开 HTTP(S) 授权地址");
5
+ const command = process.platform === "darwin"
6
+ ? "open"
7
+ : process.platform === "win32"
8
+ ? "rundll32.exe"
9
+ : "xdg-open";
10
+ const args = process.platform === "win32" ? ["url.dll,FileProtocolHandler", url] : [url];
11
+ await new Promise((resolve, reject) => {
12
+ const child = spawn(command, args, { detached: true, stdio: "ignore", windowsHide: true });
13
+ child.once("error", reject);
14
+ child.once("spawn", () => {
15
+ child.unref();
16
+ resolve();
17
+ });
18
+ });
19
+ }
20
+ //# sourceMappingURL=open-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../src/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACtE,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,UAAU,CAAC;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare function aipHome(): string;
2
+ export declare function paths(): {
3
+ root: string;
4
+ bin: string;
5
+ stableCli: string;
6
+ deviceAuth: string;
7
+ providerAuth: string;
8
+ modelsStore: string;
9
+ hostState: string;
10
+ daemonState: string;
11
+ workspaceRoot: string;
12
+ runtime: string;
13
+ runtimeCurrent: string;
14
+ log: string;
15
+ };
16
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,WAEtB;AAED,wBAAgB,KAAK;;;;;;;;;;;;;EAgBpB"}
package/dist/paths.js ADDED
@@ -0,0 +1,23 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ export function aipHome() {
4
+ return process.env.AIP_HOME || join(homedir(), ".aip");
5
+ }
6
+ export function paths() {
7
+ const root = aipHome();
8
+ return {
9
+ root,
10
+ bin: join(root, "bin"),
11
+ stableCli: join(root, "bin", process.platform === "win32" ? "aip.cmd" : "aip"),
12
+ deviceAuth: join(root, "device-auth.json"),
13
+ providerAuth: join(root, "pi", "auth.json"),
14
+ modelsStore: join(root, "pi", "models-store.json"),
15
+ hostState: join(root, "state", "host.json"),
16
+ daemonState: join(root, "state", "daemon.json"),
17
+ workspaceRoot: join(root, "workspaces"),
18
+ runtime: join(root, "runtime"),
19
+ runtimeCurrent: join(root, "runtime", "current"),
20
+ log: join(root, "logs", "host.log"),
21
+ };
22
+ }
23
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAC1C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC;QAClD,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QAC/C,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACvC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;QAChD,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { LocalCodingHostDefaultRunConfig, LocalCodingHostModel, LocalCodingHostProviderId, LocalCodingHostProviderStatus, LocalCodingHostThinkingLevel } from "@ai-platform/api-contracts";
2
+ export interface ProviderState {
3
+ providerId: LocalCodingHostProviderId;
4
+ status: LocalCodingHostProviderStatus;
5
+ accountHint: string | null;
6
+ }
7
+ export interface PiModelService {
8
+ login(providerId: LocalCodingHostProviderId, mode: "local" | "remote"): Promise<{
9
+ code: string;
10
+ }>;
11
+ logout(providerId: LocalCodingHostProviderId): Promise<void>;
12
+ readProviderStates(): Promise<ProviderState[]>;
13
+ readAvailableModels(): Promise<LocalCodingHostModel[]>;
14
+ }
15
+ export declare class ProductionPiModelService implements PiModelService {
16
+ private runtime;
17
+ login(providerId: LocalCodingHostProviderId, mode: "local" | "remote"): Promise<{
18
+ code: string;
19
+ }>;
20
+ logout(providerId: LocalCodingHostProviderId): Promise<void>;
21
+ readProviderStates(): Promise<{
22
+ providerId: "openai-codex" | "anthropic";
23
+ status: "SIGNED_OUT" | "AUTHENTICATING" | "READY" | "EXPIRED" | "ERROR";
24
+ accountHint: string | null;
25
+ }[]>;
26
+ readAvailableModels(): Promise<{
27
+ providerId: LocalCodingHostProviderId;
28
+ modelId: string;
29
+ displayName: string;
30
+ reasoning: boolean;
31
+ allowedThinkingLevels: LocalCodingHostThinkingLevel[];
32
+ }[]>;
33
+ }
34
+ export declare class TestPiModelService implements PiModelService {
35
+ login(providerId: LocalCodingHostProviderId): Promise<{
36
+ code: string;
37
+ }>;
38
+ logout(providerId: LocalCodingHostProviderId): Promise<void>;
39
+ readProviderStates(): Promise<{
40
+ providerId: "openai-codex" | "anthropic";
41
+ status: "SIGNED_OUT" | "AUTHENTICATING" | "READY" | "EXPIRED" | "ERROR";
42
+ accountHint: string | null;
43
+ }[]>;
44
+ readAvailableModels(): Promise<{
45
+ providerId: import("@ai-platform/api-contracts").components["schemas"]["LocalCodingHostProviderId"];
46
+ modelId: string;
47
+ displayName: string;
48
+ reasoning: boolean;
49
+ allowedThinkingLevels: import("@ai-platform/api-contracts").components["schemas"]["LocalCodingHostThinkingLevel"][];
50
+ }[]>;
51
+ }
52
+ export declare function createPiModelService(): ProductionPiModelService | TestPiModelService;
53
+ export declare function isDefaultModelValid(saved: Omit<LocalCodingHostDefaultRunConfig, "valid"> | null, models: LocalCodingHostModel[]): boolean;
54
+ //# sourceMappingURL=pi-model-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-model-service.d.ts","sourceRoot":"","sources":["../src/pi-model-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAC/B,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAkBpC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,yBAAyB,CAAC;IACtC,MAAM,EAAE,6BAA6B,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,MAAM,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/C,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;CACxD;AAED,qBAAa,wBAAyB,YAAW,cAAc;YAC/C,OAAO;IAYf,KAAK,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ;;;IA6BrE,MAAM,CAAC,UAAU,EAAE,yBAAyB;IAI5C,kBAAkB;;;;;IAwBlB,mBAAmB;oBAeW,yBAAyB;;;;+BAMvC,4BAA4B,EAAE;;CAGrD;AA8BD,qBAAa,kBAAmB,YAAW,cAAc;IACjD,KAAK,CAAC,UAAU,EAAE,yBAAyB;;;IAe3C,MAAM,CAAC,UAAU,EAAE,yBAAyB;IAM5C,kBAAkB;;;;;IAQlB,mBAAmB;oBA8Gmn5D,0DAAsB;;;;+BAA+J,0DAAsB;;CA/Ex15D;AAED,wBAAgB,oBAAoB,kDAInC;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,IAAI,EAC5D,MAAM,EAAE,oBAAoB,EAAE,WAW/B"}