@cortexkit/aft-opencode 0.9.0 → 0.10.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 (71) hide show
  1. package/dist/bridge.d.ts +1 -1
  2. package/dist/bridge.d.ts.map +1 -1
  3. package/dist/bridge.js +47 -25
  4. package/dist/bridge.js.map +1 -1
  5. package/dist/config.d.ts +1 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +2 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +182 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/notifications.d.ts +48 -0
  13. package/dist/notifications.d.ts.map +1 -0
  14. package/dist/notifications.js +307 -0
  15. package/dist/notifications.js.map +1 -0
  16. package/dist/onnx-runtime.d.ts +35 -0
  17. package/dist/onnx-runtime.d.ts.map +1 -0
  18. package/dist/onnx-runtime.js +203 -0
  19. package/dist/onnx-runtime.js.map +1 -0
  20. package/dist/pool.d.ts +2 -0
  21. package/dist/pool.d.ts.map +1 -1
  22. package/dist/pool.js +25 -6
  23. package/dist/pool.js.map +1 -1
  24. package/dist/resolver.d.ts.map +1 -1
  25. package/dist/resolver.js +19 -6
  26. package/dist/resolver.js.map +1 -1
  27. package/dist/shared/opencode-config-dir.d.ts +16 -0
  28. package/dist/shared/opencode-config-dir.d.ts.map +1 -0
  29. package/dist/shared/opencode-config-dir.js +26 -0
  30. package/dist/shared/opencode-config-dir.js.map +1 -0
  31. package/dist/shared/rpc-client.d.ts +16 -0
  32. package/dist/shared/rpc-client.d.ts.map +1 -0
  33. package/dist/shared/rpc-client.js +108 -0
  34. package/dist/shared/rpc-client.js.map +1 -0
  35. package/dist/shared/rpc-server.d.ts +17 -0
  36. package/dist/shared/rpc-server.d.ts.map +1 -0
  37. package/dist/shared/rpc-server.js +120 -0
  38. package/dist/shared/rpc-server.js.map +1 -0
  39. package/dist/shared/rpc-utils.d.ts +11 -0
  40. package/dist/shared/rpc-utils.d.ts.map +1 -0
  41. package/dist/shared/rpc-utils.js +20 -0
  42. package/dist/shared/rpc-utils.js.map +1 -0
  43. package/dist/shared/runtime.d.ts +10 -0
  44. package/dist/shared/runtime.d.ts.map +1 -0
  45. package/dist/shared/runtime.js +14 -0
  46. package/dist/shared/runtime.js.map +1 -0
  47. package/dist/shared/status.d.ts +37 -0
  48. package/dist/shared/status.d.ts.map +1 -0
  49. package/dist/shared/status.js +135 -0
  50. package/dist/shared/status.js.map +1 -0
  51. package/dist/shared/tui-config.d.ts +2 -0
  52. package/dist/shared/tui-config.d.ts.map +1 -0
  53. package/dist/shared/tui-config.js +134 -0
  54. package/dist/shared/tui-config.js.map +1 -0
  55. package/dist/tools/search.d.ts.map +1 -1
  56. package/dist/tools/search.js +23 -3
  57. package/dist/tools/search.js.map +1 -1
  58. package/dist/tools/semantic.d.ts +4 -0
  59. package/dist/tools/semantic.d.ts.map +1 -0
  60. package/dist/tools/semantic.js +35 -0
  61. package/dist/tools/semantic.js.map +1 -0
  62. package/package.json +26 -6
  63. package/src/shared/opencode-config-dir.ts +46 -0
  64. package/src/shared/rpc-client.ts +123 -0
  65. package/src/shared/rpc-server.ts +135 -0
  66. package/src/shared/rpc-utils.ts +21 -0
  67. package/src/shared/runtime.ts +26 -0
  68. package/src/shared/status.ts +206 -0
  69. package/src/shared/tui-config.ts +155 -0
  70. package/src/tui/index.tsx +209 -0
  71. package/src/tui/types/opencode-plugin-tui.d.ts +232 -0
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAmDA;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,QAAQ,GAAE,MAAyB,EACnC,IAAI,GAAE,MAAqB,GAC1B,MAAM,CAgBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAuC9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAiClD"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAqDA;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,QAAQ,GAAE,MAAyB,EACnC,IAAI,GAAE,MAAqB,GAC1B,MAAM,CAgBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAiD9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAiClD"}
package/dist/resolver.js CHANGED
@@ -19,9 +19,11 @@ function copyToVersionedCache(npmBinaryPath) {
19
19
  stdio: ["pipe", "pipe", "pipe"],
20
20
  timeout: 5000,
21
21
  });
22
- const version = result.stdout?.trim();
23
- if (!version)
22
+ const rawVersion = result.stdout?.trim();
23
+ if (!rawVersion)
24
24
  return null;
25
+ // `aft --version` outputs "aft 0.9.0" — extract just the version number
26
+ const version = rawVersion.replace(/^aft\s+/, "");
25
27
  const tag = version.startsWith("v") ? version : `v${version}`;
26
28
  const cacheDir = getCacheDir();
27
29
  const versionedDir = join(cacheDir, tag);
@@ -81,10 +83,21 @@ export function platformKey(platform = process.platform, arch = process.arch) {
81
83
  */
82
84
  export function findBinarySync() {
83
85
  const ext = process.platform === "win32" ? ".exe" : "";
84
- // 1. Check cached binary from auto-download
85
- const cached = getCachedBinaryPath();
86
- if (cached)
87
- return cached;
86
+ // 1. Check versioned cache for the plugin's own version first
87
+ const pluginVersion = (() => {
88
+ try {
89
+ const req = createRequire(import.meta.url);
90
+ return `v${req("../package.json").version}`;
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ })();
96
+ if (pluginVersion) {
97
+ const versionCached = getCachedBinaryPath(pluginVersion);
98
+ if (versionCached)
99
+ return versionCached;
100
+ }
88
101
  // 2. Check npm platform package — copy to versioned cache to avoid
89
102
  // corruption when npm updates the package while a bridge is running
90
103
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type OpenCodeBinaryType = "opencode" | "opencode-desktop";
2
+ export interface OpenCodeConfigDirOptions {
3
+ binary: OpenCodeBinaryType;
4
+ version?: string | null;
5
+ checkExisting?: boolean;
6
+ }
7
+ export interface OpenCodeConfigPaths {
8
+ configDir: string;
9
+ configJson: string;
10
+ configJsonc: string;
11
+ packageJson: string;
12
+ omoConfig: string;
13
+ }
14
+ export declare function getOpenCodeConfigDir(_options: OpenCodeConfigDirOptions): string;
15
+ export declare function getOpenCodeConfigPaths(options: OpenCodeConfigDirOptions): OpenCodeConfigPaths;
16
+ //# sourceMappingURL=opencode-config-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config-dir.d.ts","sourceRoot":"","sources":["../../src/shared/opencode-config-dir.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,CAE/E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,mBAAmB,CAS7F"}
@@ -0,0 +1,26 @@
1
+ import { homedir } from "node:os";
2
+ import { join, resolve } from "node:path";
3
+ function getCliConfigDir() {
4
+ const envConfigDir = process.env.OPENCODE_CONFIG_DIR?.trim();
5
+ if (envConfigDir) {
6
+ return resolve(envConfigDir);
7
+ }
8
+ if (process.platform === "win32") {
9
+ return join(homedir(), ".config", "opencode");
10
+ }
11
+ return join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "opencode");
12
+ }
13
+ export function getOpenCodeConfigDir(_options) {
14
+ return getCliConfigDir();
15
+ }
16
+ export function getOpenCodeConfigPaths(options) {
17
+ const configDir = getOpenCodeConfigDir(options);
18
+ return {
19
+ configDir,
20
+ configJson: join(configDir, "opencode.json"),
21
+ configJsonc: join(configDir, "opencode.jsonc"),
22
+ packageJson: join(configDir, "package.json"),
23
+ omoConfig: join(configDir, "magic-context.jsonc"),
24
+ };
25
+ }
26
+ //# sourceMappingURL=opencode-config-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config-dir.js","sourceRoot":"","sources":["../../src/shared/opencode-config-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkB1C,SAAS,eAAe;IACtB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAkC;IACrE,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAiC;IACtE,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO;QACL,SAAS;QACT,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QAC5C,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;QAC9C,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare class AftRpcClient {
2
+ private port;
3
+ private portFilePath;
4
+ private healthChecked;
5
+ constructor(storageDir: string, directory: string);
6
+ /** Call an RPC method. Retries port resolution if the server isn't ready yet. */
7
+ call<T = Record<string, unknown>>(method: string, params?: Record<string, unknown>): Promise<T>;
8
+ /** Check if the RPC server is reachable. */
9
+ isAvailable(): Promise<boolean>;
10
+ private resolvePort;
11
+ private readPortFile;
12
+ private healthCheck;
13
+ private fetchWithTimeout;
14
+ reset(): void;
15
+ }
16
+ //# sourceMappingURL=rpc-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../../src/shared/rpc-client.ts"],"names":[],"mappings":"AAOA,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;gBAElB,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAIjD,iFAAiF;IAC3E,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,OAAO,CAAC,CAAC,CAAC;IAoBb,4CAA4C;IACtC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YASvB,WAAW;IAkCzB,OAAO,CAAC,YAAY;YAaN,WAAW;YAWX,gBAAgB;IAU9B,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,108 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { rpcPortFilePath } from "./rpc-utils.js";
3
+ const MAX_RETRIES = 10;
4
+ const RETRY_DELAY_MS = 500;
5
+ const REQUEST_TIMEOUT_MS = 5000;
6
+ export class AftRpcClient {
7
+ port = null;
8
+ portFilePath;
9
+ healthChecked = false;
10
+ constructor(storageDir, directory) {
11
+ this.portFilePath = rpcPortFilePath(storageDir, directory);
12
+ }
13
+ /** Call an RPC method. Retries port resolution if the server isn't ready yet. */
14
+ async call(method, params = {}) {
15
+ const port = await this.resolvePort();
16
+ if (!port) {
17
+ throw new Error("AFT RPC server not available");
18
+ }
19
+ const response = await this.fetchWithTimeout(`http://127.0.0.1:${port}/rpc/${method}`, {
20
+ method: "POST",
21
+ headers: { "Content-Type": "application/json" },
22
+ body: JSON.stringify(params),
23
+ });
24
+ if (!response.ok) {
25
+ const text = await response.text();
26
+ throw new Error(`RPC ${method} failed (${response.status}): ${text}`);
27
+ }
28
+ return (await response.json());
29
+ }
30
+ /** Check if the RPC server is reachable. */
31
+ async isAvailable() {
32
+ try {
33
+ const port = await this.resolvePort();
34
+ return port !== null;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ async resolvePort() {
41
+ if (this.port && this.healthChecked) {
42
+ return this.port;
43
+ }
44
+ if (this.port) {
45
+ const alive = await this.healthCheck(this.port);
46
+ if (alive) {
47
+ this.healthChecked = true;
48
+ return this.port;
49
+ }
50
+ this.port = null;
51
+ this.healthChecked = false;
52
+ }
53
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
54
+ const port = this.readPortFile();
55
+ if (port) {
56
+ const alive = await this.healthCheck(port);
57
+ if (alive) {
58
+ this.port = port;
59
+ this.healthChecked = true;
60
+ return port;
61
+ }
62
+ }
63
+ if (attempt < MAX_RETRIES - 1) {
64
+ await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+ readPortFile() {
70
+ try {
71
+ const content = readFileSync(this.portFilePath, "utf-8").trim();
72
+ const port = Number.parseInt(content, 10);
73
+ if (Number.isNaN(port) || port <= 0 || port > 65535) {
74
+ return null;
75
+ }
76
+ return port;
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ async healthCheck(port) {
83
+ try {
84
+ const response = await this.fetchWithTimeout(`http://127.0.0.1:${port}/health`, {
85
+ method: "GET",
86
+ });
87
+ return response.ok;
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ async fetchWithTimeout(url, options) {
94
+ const controller = new AbortController();
95
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
96
+ try {
97
+ return await fetch(url, { ...options, signal: controller.signal });
98
+ }
99
+ finally {
100
+ clearTimeout(timeout);
101
+ }
102
+ }
103
+ reset() {
104
+ this.port = null;
105
+ this.healthChecked = false;
106
+ }
107
+ }
108
+ //# sourceMappingURL=rpc-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/shared/rpc-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ type RpcHandler = (params: Record<string, unknown>) => Promise<Record<string, unknown>>;
2
+ export declare class AftRpcServer {
3
+ private server;
4
+ private port;
5
+ private handlers;
6
+ private portFilePath;
7
+ constructor(storageDir: string, directory: string);
8
+ /** Register an RPC method handler. */
9
+ handle(method: string, handler: RpcHandler): void;
10
+ /** Start the server on a random port, write port to disk. */
11
+ start(): Promise<number>;
12
+ /** Stop the server and clean up port file. */
13
+ stop(): void;
14
+ private dispatch;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=rpc-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-server.d.ts","sourceRoot":"","sources":["../../src/shared/rpc-server.ts"],"names":[],"mappings":"AAMA,KAAK,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAExF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,YAAY,CAAS;gBAEjB,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAIjD,sCAAsC;IACtC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAIjD,6DAA6D;IACvD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAsC9B,8CAA8C;IAC9C,IAAI,IAAI,IAAI;IAYZ,OAAO,CAAC,QAAQ;CA2DjB"}
@@ -0,0 +1,120 @@
1
+ import { mkdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { createServer } from "node:http";
3
+ import { dirname } from "node:path";
4
+ import { log, warn } from "../logger.js";
5
+ import { rpcPortFilePath } from "./rpc-utils.js";
6
+ export class AftRpcServer {
7
+ server = null;
8
+ port = 0;
9
+ handlers = new Map();
10
+ portFilePath;
11
+ constructor(storageDir, directory) {
12
+ this.portFilePath = rpcPortFilePath(storageDir, directory);
13
+ }
14
+ /** Register an RPC method handler. */
15
+ handle(method, handler) {
16
+ this.handlers.set(method, handler);
17
+ }
18
+ /** Start the server on a random port, write port to disk. */
19
+ async start() {
20
+ return new Promise((resolve, reject) => {
21
+ const server = createServer((req, res) => this.dispatch(req, res));
22
+ server.on("error", (err) => {
23
+ warn(`RPC server error: ${err.message}`);
24
+ reject(err);
25
+ });
26
+ server.listen(0, "127.0.0.1", () => {
27
+ const addr = server.address();
28
+ if (!addr || typeof addr === "string") {
29
+ reject(new Error("Failed to get server address"));
30
+ return;
31
+ }
32
+ this.port = addr.port;
33
+ this.server = server;
34
+ // Write port file atomically
35
+ try {
36
+ const dir = dirname(this.portFilePath);
37
+ mkdirSync(dir, { recursive: true });
38
+ const tmpPath = `${this.portFilePath}.tmp`;
39
+ writeFileSync(tmpPath, String(this.port), "utf-8");
40
+ renameSync(tmpPath, this.portFilePath);
41
+ log(`RPC server listening on 127.0.0.1:${this.port}`);
42
+ }
43
+ catch (err) {
44
+ warn(`Failed to write RPC port file: ${err}`);
45
+ }
46
+ resolve(this.port);
47
+ });
48
+ // Don't keep the process alive just for the RPC server
49
+ server.unref();
50
+ });
51
+ }
52
+ /** Stop the server and clean up port file. */
53
+ stop() {
54
+ if (this.server) {
55
+ this.server.close();
56
+ this.server = null;
57
+ }
58
+ try {
59
+ unlinkSync(this.portFilePath);
60
+ }
61
+ catch {
62
+ // ignore
63
+ }
64
+ }
65
+ dispatch(req, res) {
66
+ const url = req.url ?? "";
67
+ if (req.method === "GET" && url === "/health") {
68
+ res.writeHead(200, { "Content-Type": "application/json" });
69
+ res.end(JSON.stringify({ ok: true, pid: process.pid }));
70
+ return;
71
+ }
72
+ if (req.method !== "POST" || !url.startsWith("/rpc/")) {
73
+ res.writeHead(404);
74
+ res.end("Not Found");
75
+ return;
76
+ }
77
+ const method = url.slice(5);
78
+ const handler = this.handlers.get(method);
79
+ if (!handler) {
80
+ res.writeHead(404, { "Content-Type": "application/json" });
81
+ res.end(JSON.stringify({ error: `Unknown method: ${method}` }));
82
+ return;
83
+ }
84
+ let body = "";
85
+ req.on("data", (chunk) => {
86
+ body += chunk.toString();
87
+ if (body.length > 1_048_576) {
88
+ res.writeHead(413);
89
+ res.end("Request too large");
90
+ req.destroy();
91
+ }
92
+ });
93
+ req.on("end", () => {
94
+ let params = {};
95
+ try {
96
+ if (body.length > 0) {
97
+ params = JSON.parse(body);
98
+ }
99
+ }
100
+ catch {
101
+ res.writeHead(400, { "Content-Type": "application/json" });
102
+ res.end(JSON.stringify({ error: "Invalid JSON" }));
103
+ return;
104
+ }
105
+ log(`RPC call: ${method} params=${JSON.stringify(params).slice(0, 200)}`);
106
+ handler(params)
107
+ .then((result) => {
108
+ log(`RPC result: ${method} => ${JSON.stringify(result).slice(0, 200)}`);
109
+ res.writeHead(200, { "Content-Type": "application/json" });
110
+ res.end(JSON.stringify(result));
111
+ })
112
+ .catch((err) => {
113
+ log(`RPC error: ${method} => ${err}`);
114
+ res.writeHead(500, { "Content-Type": "application/json" });
115
+ res.end(JSON.stringify({ error: String(err) }));
116
+ });
117
+ });
118
+ }
119
+ }
120
+ //# sourceMappingURL=rpc-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-server.js","sourceRoot":"","sources":["../../src/shared/rpc-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Compute a stable hash for a project directory.
3
+ * Used to scope RPC port files per-project so multiple
4
+ * OpenCode Desktop instances don't overwrite each other.
5
+ */
6
+ export declare function projectHash(directory: string): string;
7
+ /**
8
+ * Get the per-project RPC port file path.
9
+ */
10
+ export declare function rpcPortFilePath(storageDir: string, directory: string): string;
11
+ //# sourceMappingURL=rpc-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-utils.d.ts","sourceRoot":"","sources":["../../src/shared/rpc-utils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG7E"}
@@ -0,0 +1,20 @@
1
+ import { createHash } from "node:crypto";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Compute a stable hash for a project directory.
5
+ * Used to scope RPC port files per-project so multiple
6
+ * OpenCode Desktop instances don't overwrite each other.
7
+ */
8
+ export function projectHash(directory) {
9
+ // Normalize: strip trailing slashes
10
+ const normalized = directory.replace(/\/+$/, "");
11
+ return createHash("sha256").update(normalized).digest("hex").slice(0, 16);
12
+ }
13
+ /**
14
+ * Get the per-project RPC port file path.
15
+ */
16
+ export function rpcPortFilePath(storageDir, directory) {
17
+ const hash = projectHash(directory);
18
+ return join(storageDir, "rpc", hash, "port");
19
+ }
20
+ //# sourceMappingURL=rpc-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-utils.js","sourceRoot":"","sources":["../../src/shared/rpc-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,oCAAoC;IACpC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,SAAiB;IACnE,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,10 @@
1
+ type BridgeLike = {
2
+ getBridge: (directory: string, sessionID: string) => {
3
+ send: (command: string, params?: Record<string, unknown>) => Promise<Record<string, unknown>>;
4
+ };
5
+ };
6
+ export declare function setSharedBridgePool(pool: BridgeLike): void;
7
+ export declare function getSharedBridgePool(): BridgeLike | null;
8
+ export declare function clearSharedBridgePool(): void;
9
+ export {};
10
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/shared/runtime.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,KACd;QACH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC/F,CAAC;CACH,CAAC;AAQF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAE1D;AAED,wBAAgB,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAEvD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,14 @@
1
+ const GLOBAL_KEY = "__AFT_SHARED_BRIDGE_POOL__";
2
+ function getGlobalState() {
3
+ return globalThis;
4
+ }
5
+ export function setSharedBridgePool(pool) {
6
+ getGlobalState()[GLOBAL_KEY] = pool;
7
+ }
8
+ export function getSharedBridgePool() {
9
+ return getGlobalState()[GLOBAL_KEY] ?? null;
10
+ }
11
+ export function clearSharedBridgePool() {
12
+ getGlobalState()[GLOBAL_KEY] = null;
13
+ }
14
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/shared/runtime.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAEhD,SAAS,cAAc;IACrB,OAAO,UAAkD,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,cAAc,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,cAAc,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,cAAc,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC"}
@@ -0,0 +1,37 @@
1
+ export interface AftStatusSnapshot {
2
+ version: string;
3
+ project_root: string | null;
4
+ features: {
5
+ format_on_edit: boolean;
6
+ validate_on_edit: string;
7
+ restrict_to_project_root: boolean;
8
+ experimental_search_index: boolean;
9
+ experimental_semantic_search: boolean;
10
+ };
11
+ search_index: {
12
+ status: string;
13
+ files: number | null;
14
+ trigrams: number | null;
15
+ };
16
+ semantic_index: {
17
+ status: string;
18
+ entries: number | null;
19
+ dimension: number | null;
20
+ };
21
+ disk: {
22
+ storage_dir: string | null;
23
+ trigram_disk_bytes: number;
24
+ semantic_disk_bytes: number;
25
+ };
26
+ lsp_servers: number;
27
+ symbol_cache: {
28
+ local_entries: number;
29
+ warm_entries: number;
30
+ };
31
+ storage_dir: string | null;
32
+ }
33
+ export declare function formatBytes(bytes: number): string;
34
+ export declare function coerceAftStatus(response: Record<string, unknown>): AftStatusSnapshot;
35
+ export declare function formatStatusDialogMessage(status: AftStatusSnapshot): string;
36
+ export declare function formatStatusMarkdown(status: AftStatusSnapshot): string;
37
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/shared/status.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE;QACR,cAAc,EAAE,OAAO,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,wBAAwB,EAAE,OAAO,CAAC;QAClC,yBAAyB,EAAE,OAAO,CAAC;QACnC,4BAA4B,EAAE,OAAO,CAAC;KACvC,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAkCD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAajD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAuCpF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAwC3E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA0CtE"}