@cortexkit/aft-opencode 0.10.1 → 0.11.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/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25395 -345
- package/dist/pool.d.ts +1 -1
- package/dist/pool.d.ts.map +1 -1
- package/dist/shared/tui-config.d.ts.map +1 -1
- package/dist/shared/url-fetch.d.ts +11 -0
- package/dist/shared/url-fetch.d.ts.map +1 -0
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/shared/tui-config.ts +3 -100
- package/src/shared/url-fetch.ts +237 -0
- package/dist/bridge.js +0 -325
- package/dist/bridge.js.map +0 -1
- package/dist/config.js +0 -304
- package/dist/config.js.map +0 -1
- package/dist/downloader.js +0 -198
- package/dist/downloader.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js +0 -78
- package/dist/logger.js.map +0 -1
- package/dist/lsp.js +0 -79
- package/dist/lsp.js.map +0 -1
- package/dist/metadata-store.js +0 -53
- package/dist/metadata-store.js.map +0 -1
- package/dist/normalize-schemas.js +0 -45
- package/dist/normalize-schemas.js.map +0 -1
- package/dist/notifications.js +0 -307
- package/dist/notifications.js.map +0 -1
- package/dist/onnx-runtime.js +0 -203
- package/dist/onnx-runtime.js.map +0 -1
- package/dist/patch-parser.js +0 -247
- package/dist/patch-parser.js.map +0 -1
- package/dist/platform.js +0 -31
- package/dist/platform.js.map +0 -1
- package/dist/pool.js +0 -130
- package/dist/pool.js.map +0 -1
- package/dist/resolver.js +0 -179
- package/dist/resolver.js.map +0 -1
- package/dist/shared/opencode-config-dir.js +0 -26
- package/dist/shared/opencode-config-dir.js.map +0 -1
- package/dist/shared/rpc-client.js +0 -108
- package/dist/shared/rpc-client.js.map +0 -1
- package/dist/shared/rpc-server.js +0 -120
- package/dist/shared/rpc-server.js.map +0 -1
- package/dist/shared/rpc-utils.js +0 -20
- package/dist/shared/rpc-utils.js.map +0 -1
- package/dist/shared/runtime.js +0 -14
- package/dist/shared/runtime.js.map +0 -1
- package/dist/shared/status.js +0 -135
- package/dist/shared/status.js.map +0 -1
- package/dist/shared/tui-config.js +0 -134
- package/dist/shared/tui-config.js.map +0 -1
- package/dist/tools/ast.js +0 -200
- package/dist/tools/ast.js.map +0 -1
- package/dist/tools/conflicts.js +0 -20
- package/dist/tools/conflicts.js.map +0 -1
- package/dist/tools/hoisted.js +0 -870
- package/dist/tools/hoisted.js.map +0 -1
- package/dist/tools/imports.js +0 -90
- package/dist/tools/imports.js.map +0 -1
- package/dist/tools/lsp.js +0 -58
- package/dist/tools/lsp.js.map +0 -1
- package/dist/tools/navigation.js +0 -58
- package/dist/tools/navigation.js.map +0 -1
- package/dist/tools/permissions.js +0 -50
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/reading.js +0 -229
- package/dist/tools/reading.js.map +0 -1
- package/dist/tools/refactoring.js +0 -129
- package/dist/tools/refactoring.js.map +0 -1
- package/dist/tools/safety.js +0 -83
- package/dist/tools/safety.js.map +0 -1
- package/dist/tools/search.js +0 -108
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/semantic.js +0 -35
- package/dist/tools/semantic.js.map +0 -1
- package/dist/tools/structure.js +0 -157
- package/dist/tools/structure.js.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
|
@@ -1,108 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/shared/rpc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,120 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-server.js","sourceRoot":"","sources":["../../src/shared/rpc-server.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/rpc-utils.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/shared/runtime.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/shared/status.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
function asRecord(value) {
|
|
2
|
-
return typeof value === "object" && value !== null ? value : {};
|
|
3
|
-
}
|
|
4
|
-
function readString(value, fallback = "") {
|
|
5
|
-
return typeof value === "string" ? value : fallback;
|
|
6
|
-
}
|
|
7
|
-
function readNullableString(value) {
|
|
8
|
-
return typeof value === "string" ? value : null;
|
|
9
|
-
}
|
|
10
|
-
function readBoolean(value, fallback = false) {
|
|
11
|
-
return typeof value === "boolean" ? value : fallback;
|
|
12
|
-
}
|
|
13
|
-
function readNumber(value, fallback = 0) {
|
|
14
|
-
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
15
|
-
}
|
|
16
|
-
function readOptionalNumber(value) {
|
|
17
|
-
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
18
|
-
}
|
|
19
|
-
function formatFlag(enabled) {
|
|
20
|
-
return enabled ? "enabled" : "disabled";
|
|
21
|
-
}
|
|
22
|
-
function formatCount(value) {
|
|
23
|
-
return value == null ? "—" : value.toLocaleString("en-US");
|
|
24
|
-
}
|
|
25
|
-
export function formatBytes(bytes) {
|
|
26
|
-
if (!Number.isFinite(bytes) || bytes <= 0)
|
|
27
|
-
return "0 B";
|
|
28
|
-
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
29
|
-
let value = bytes;
|
|
30
|
-
let unitIndex = 0;
|
|
31
|
-
while (value >= 1024 && unitIndex < units.length - 1) {
|
|
32
|
-
value /= 1024;
|
|
33
|
-
unitIndex++;
|
|
34
|
-
}
|
|
35
|
-
const decimals = value >= 10 || unitIndex === 0 ? 0 : 1;
|
|
36
|
-
return `${value.toFixed(decimals)} ${units[unitIndex]}`;
|
|
37
|
-
}
|
|
38
|
-
export function coerceAftStatus(response) {
|
|
39
|
-
const features = asRecord(response.features);
|
|
40
|
-
const searchIndex = asRecord(response.search_index);
|
|
41
|
-
const semanticIndex = asRecord(response.semantic_index);
|
|
42
|
-
const disk = asRecord(response.disk);
|
|
43
|
-
const symbolCache = asRecord(response.symbol_cache);
|
|
44
|
-
return {
|
|
45
|
-
version: readString(response.version, "unknown"),
|
|
46
|
-
project_root: readNullableString(response.project_root),
|
|
47
|
-
features: {
|
|
48
|
-
format_on_edit: readBoolean(features.format_on_edit),
|
|
49
|
-
validate_on_edit: readString(features.validate_on_edit, "off"),
|
|
50
|
-
restrict_to_project_root: readBoolean(features.restrict_to_project_root),
|
|
51
|
-
experimental_search_index: readBoolean(features.experimental_search_index),
|
|
52
|
-
experimental_semantic_search: readBoolean(features.experimental_semantic_search),
|
|
53
|
-
},
|
|
54
|
-
search_index: {
|
|
55
|
-
status: readString(searchIndex.status, "unknown"),
|
|
56
|
-
files: readOptionalNumber(searchIndex.files),
|
|
57
|
-
trigrams: readOptionalNumber(searchIndex.trigrams),
|
|
58
|
-
},
|
|
59
|
-
semantic_index: {
|
|
60
|
-
status: readString(semanticIndex.status, "unknown"),
|
|
61
|
-
entries: readOptionalNumber(semanticIndex.entries),
|
|
62
|
-
dimension: readOptionalNumber(semanticIndex.dimension),
|
|
63
|
-
},
|
|
64
|
-
disk: {
|
|
65
|
-
storage_dir: readNullableString(disk.storage_dir),
|
|
66
|
-
trigram_disk_bytes: readNumber(disk.trigram_disk_bytes),
|
|
67
|
-
semantic_disk_bytes: readNumber(disk.semantic_disk_bytes),
|
|
68
|
-
},
|
|
69
|
-
lsp_servers: readNumber(response.lsp_servers),
|
|
70
|
-
symbol_cache: {
|
|
71
|
-
local_entries: readNumber(symbolCache.local_entries),
|
|
72
|
-
warm_entries: readNumber(symbolCache.warm_entries),
|
|
73
|
-
},
|
|
74
|
-
storage_dir: readNullableString(response.storage_dir),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
export function formatStatusDialogMessage(status) {
|
|
78
|
-
const lines = [
|
|
79
|
-
`AFT version: ${status.version}`,
|
|
80
|
-
`Project root: ${status.project_root ?? "(not configured)"}`,
|
|
81
|
-
"",
|
|
82
|
-
"Enabled features",
|
|
83
|
-
`- format_on_edit: ${formatFlag(status.features.format_on_edit)}`,
|
|
84
|
-
`- experimental_search_index: ${formatFlag(status.features.experimental_search_index)}`,
|
|
85
|
-
`- experimental_semantic_search: ${formatFlag(status.features.experimental_semantic_search)}`,
|
|
86
|
-
"",
|
|
87
|
-
"Search index",
|
|
88
|
-
`- status: ${status.search_index.status}`,
|
|
89
|
-
`- files: ${formatCount(status.search_index.files)}`,
|
|
90
|
-
`- trigrams: ${formatCount(status.search_index.trigrams)}`,
|
|
91
|
-
"",
|
|
92
|
-
"Semantic index",
|
|
93
|
-
`- status: ${status.semantic_index.status}`,
|
|
94
|
-
`- entries: ${formatCount(status.semantic_index.entries)}`,
|
|
95
|
-
];
|
|
96
|
-
if (status.semantic_index.dimension != null) {
|
|
97
|
-
lines.push(`- dimension: ${formatCount(status.semantic_index.dimension)}`);
|
|
98
|
-
}
|
|
99
|
-
lines.push("", "Disk usage", `- trigram index: ${formatBytes(status.disk.trigram_disk_bytes)}`, `- semantic index: ${formatBytes(status.disk.semantic_disk_bytes)}`, "", "Runtime", `- LSP servers: ${formatCount(status.lsp_servers)}`, `- symbol cache: ${formatCount(status.symbol_cache.local_entries)} local / ${formatCount(status.symbol_cache.warm_entries)} warm`);
|
|
100
|
-
if (status.storage_dir ?? status.disk.storage_dir) {
|
|
101
|
-
lines.push(`- storage dir: ${status.storage_dir ?? status.disk.storage_dir}`);
|
|
102
|
-
}
|
|
103
|
-
return lines.join("\n");
|
|
104
|
-
}
|
|
105
|
-
export function formatStatusMarkdown(status) {
|
|
106
|
-
const lines = [
|
|
107
|
-
"## AFT Status",
|
|
108
|
-
"",
|
|
109
|
-
`- **Version:** \`${status.version}\``,
|
|
110
|
-
`- **Project root:** \`${status.project_root ?? "(not configured)"}\``,
|
|
111
|
-
"",
|
|
112
|
-
"### Enabled features",
|
|
113
|
-
`- \`format_on_edit\`: ${formatFlag(status.features.format_on_edit)}`,
|
|
114
|
-
`- \`experimental_search_index\`: ${formatFlag(status.features.experimental_search_index)}`,
|
|
115
|
-
`- \`experimental_semantic_search\`: ${formatFlag(status.features.experimental_semantic_search)}`,
|
|
116
|
-
"",
|
|
117
|
-
"### Search index",
|
|
118
|
-
`- **Status:** \`${status.search_index.status}\``,
|
|
119
|
-
`- **Files:** ${formatCount(status.search_index.files)}`,
|
|
120
|
-
`- **Trigrams:** ${formatCount(status.search_index.trigrams)}`,
|
|
121
|
-
"",
|
|
122
|
-
"### Semantic index",
|
|
123
|
-
`- **Status:** \`${status.semantic_index.status}\``,
|
|
124
|
-
`- **Entries:** ${formatCount(status.semantic_index.entries)}`,
|
|
125
|
-
];
|
|
126
|
-
if (status.semantic_index.dimension != null) {
|
|
127
|
-
lines.push(`- **Dimension:** ${formatCount(status.semantic_index.dimension)}`);
|
|
128
|
-
}
|
|
129
|
-
lines.push("", "### Disk usage", `- **Trigram index:** ${formatBytes(status.disk.trigram_disk_bytes)}`, `- **Semantic index:** ${formatBytes(status.disk.semantic_disk_bytes)}`, "", "### Runtime", `- **LSP servers:** ${formatCount(status.lsp_servers)}`, `- **Symbol cache:** ${formatCount(status.symbol_cache.local_entries)} local / ${formatCount(status.symbol_cache.warm_entries)} warm`);
|
|
130
|
-
if (status.storage_dir ?? status.disk.storage_dir) {
|
|
131
|
-
lines.push(`- **Storage dir:** \`${status.storage_dir ?? status.disk.storage_dir}\``);
|
|
132
|
-
}
|
|
133
|
-
return lines.join("\n");
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=status.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/shared/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
3
|
-
import { log } from "../logger.js";
|
|
4
|
-
import { getOpenCodeConfigPaths } from "./opencode-config-dir.js";
|
|
5
|
-
const PLUGIN_NAME = "@cortexkit/aft-opencode";
|
|
6
|
-
const PLUGIN_ENTRY = `${PLUGIN_NAME}@latest`;
|
|
7
|
-
function stripJsoncComments(text) {
|
|
8
|
-
let result = "";
|
|
9
|
-
let i = 0;
|
|
10
|
-
let inString = false;
|
|
11
|
-
let escaped = false;
|
|
12
|
-
while (i < text.length) {
|
|
13
|
-
const ch = text[i];
|
|
14
|
-
if (inString) {
|
|
15
|
-
result += ch;
|
|
16
|
-
if (escaped) {
|
|
17
|
-
escaped = false;
|
|
18
|
-
}
|
|
19
|
-
else if (ch === "\\") {
|
|
20
|
-
escaped = true;
|
|
21
|
-
}
|
|
22
|
-
else if (ch === '"') {
|
|
23
|
-
inString = false;
|
|
24
|
-
}
|
|
25
|
-
i++;
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
if (ch === '"') {
|
|
29
|
-
inString = true;
|
|
30
|
-
result += ch;
|
|
31
|
-
i++;
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
if (ch === "/" && text[i + 1] === "/") {
|
|
35
|
-
i += 2;
|
|
36
|
-
while (i < text.length && text[i] !== "\n")
|
|
37
|
-
i++;
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
if (ch === "/" && text[i + 1] === "*") {
|
|
41
|
-
i += 2;
|
|
42
|
-
while (i < text.length && !(text[i] === "*" && text[i + 1] === "/"))
|
|
43
|
-
i++;
|
|
44
|
-
i += 2;
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
result += ch;
|
|
48
|
-
i++;
|
|
49
|
-
}
|
|
50
|
-
return result;
|
|
51
|
-
}
|
|
52
|
-
function stripTrailingCommas(text) {
|
|
53
|
-
let result = "";
|
|
54
|
-
let i = 0;
|
|
55
|
-
let inString = false;
|
|
56
|
-
let escaped = false;
|
|
57
|
-
while (i < text.length) {
|
|
58
|
-
const ch = text[i];
|
|
59
|
-
if (inString) {
|
|
60
|
-
result += ch;
|
|
61
|
-
if (escaped) {
|
|
62
|
-
escaped = false;
|
|
63
|
-
}
|
|
64
|
-
else if (ch === "\\") {
|
|
65
|
-
escaped = true;
|
|
66
|
-
}
|
|
67
|
-
else if (ch === '"') {
|
|
68
|
-
inString = false;
|
|
69
|
-
}
|
|
70
|
-
i++;
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (ch === '"') {
|
|
74
|
-
inString = true;
|
|
75
|
-
result += ch;
|
|
76
|
-
i++;
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
if (ch === ",") {
|
|
80
|
-
let j = i + 1;
|
|
81
|
-
while (j < text.length && /\s/.test(text[j]))
|
|
82
|
-
j++;
|
|
83
|
-
if (text[j] === "}" || text[j] === "]") {
|
|
84
|
-
i++;
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
result += ch;
|
|
89
|
-
i++;
|
|
90
|
-
}
|
|
91
|
-
return result;
|
|
92
|
-
}
|
|
93
|
-
function parseJsonc(content) {
|
|
94
|
-
return JSON.parse(stripTrailingCommas(stripJsoncComments(content)));
|
|
95
|
-
}
|
|
96
|
-
function resolveTuiConfigPath() {
|
|
97
|
-
const configDir = getOpenCodeConfigPaths({ binary: "opencode" }).configDir;
|
|
98
|
-
const jsoncPath = join(configDir, "tui.jsonc");
|
|
99
|
-
const jsonPath = join(configDir, "tui.json");
|
|
100
|
-
if (existsSync(jsoncPath))
|
|
101
|
-
return jsoncPath;
|
|
102
|
-
if (existsSync(jsonPath))
|
|
103
|
-
return jsonPath;
|
|
104
|
-
return jsonPath;
|
|
105
|
-
}
|
|
106
|
-
export function ensureTuiPluginEntry() {
|
|
107
|
-
try {
|
|
108
|
-
const configPath = resolveTuiConfigPath();
|
|
109
|
-
let config = {};
|
|
110
|
-
if (existsSync(configPath)) {
|
|
111
|
-
config = parseJsonc(readFileSync(configPath, "utf-8")) ?? {};
|
|
112
|
-
}
|
|
113
|
-
const plugins = Array.isArray(config.plugin)
|
|
114
|
-
? config.plugin.filter((value) => typeof value === "string")
|
|
115
|
-
: [];
|
|
116
|
-
if (plugins.some((plugin) => plugin === PLUGIN_NAME ||
|
|
117
|
-
plugin.startsWith(`${PLUGIN_NAME}@`) ||
|
|
118
|
-
plugin.includes("opencode-plugin") ||
|
|
119
|
-
plugin.includes("aft-opencode"))) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
plugins.push(PLUGIN_ENTRY);
|
|
123
|
-
config.plugin = plugins;
|
|
124
|
-
mkdirSync(dirname(configPath), { recursive: true });
|
|
125
|
-
writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`);
|
|
126
|
-
log(`[aft-plugin] added TUI plugin entry to ${configPath}`);
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
log(`[aft-plugin] failed to update tui.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=tui-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tui-config.js","sourceRoot":"","sources":["../../src/shared/tui-config.ts"],"names":[],"mappings":"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"}
|