@cjhyy/code-shell-server 0.9.22 → 0.9.25
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 +45 -1
- package/dist/bin/code-shell-settings-recovery.d.ts +2 -0
- package/dist/bin/code-shell-settings-recovery.js +4 -0
- package/dist/desktop-web/http-api.js +14 -0
- package/dist/environment-identity.d.ts +4 -0
- package/dist/environment-identity.js +67 -0
- package/dist/hub/auth-store.d.ts +2 -0
- package/dist/hub/auth-store.js +7 -0
- package/dist/index.auth.d.ts +3 -0
- package/dist/index.auth.js +2 -0
- package/dist/index.links.d.ts +1 -0
- package/dist/index.links.js +1 -0
- package/dist/index.panels.d.ts +7 -0
- package/dist/index.panels.js +7 -0
- package/dist/index.remote-relay.d.ts +5 -0
- package/dist/index.remote-relay.js +6 -0
- package/dist/index.serve.d.ts +2 -0
- package/dist/index.serve.js +2 -0
- package/dist/links/http.d.ts +3 -0
- package/dist/links/http.js +11 -2
- package/dist/links/remote-configuration.d.ts +4 -0
- package/dist/links/remote-configuration.js +32 -0
- package/dist/links/service.d.ts +6 -1
- package/dist/links/service.js +241 -19
- package/dist/mobile-remote/mobile-upload-service.d.ts +4 -0
- package/dist/mobile-remote/mobile-upload-service.js +69 -11
- package/dist/mobile-remote/remote-host-manager.d.ts +10 -5
- package/dist/mobile-remote/remote-host-manager.js +53 -5
- package/dist/panels/agent-task-service.js +9 -2
- package/dist/panels/automations.d.ts +49 -0
- package/dist/panels/automations.js +134 -0
- package/dist/panels/bridge-contract.d.ts +5 -3
- package/dist/panels/bridge-contract.js +11 -1
- package/dist/panels/directory-bookmarks.d.ts +9 -1
- package/dist/panels/directory-bookmarks.js +64 -5
- package/dist/panels/execution-gate.d.ts +26 -0
- package/dist/panels/execution-gate.js +70 -0
- package/dist/panels/http.d.ts +26 -2
- package/dist/panels/http.js +7 -1
- package/dist/panels/hub-automations.d.ts +31 -0
- package/dist/panels/hub-automations.js +352 -0
- package/dist/panels/management-http.d.ts +20 -2
- package/dist/panels/management-http.js +15 -2
- package/dist/panels/management.d.ts +26 -4
- package/dist/panels/management.js +382 -39
- package/dist/panels/package-mutation.d.ts +8 -0
- package/dist/panels/package-mutation.js +23 -0
- package/dist/panels/process-service.d.ts +3 -0
- package/dist/panels/process-service.js +77 -4
- package/dist/panels/resources/clone.d.ts +13 -0
- package/dist/panels/resources/clone.js +99 -0
- package/dist/panels/resources/http.d.ts +11 -0
- package/dist/panels/resources/http.js +74 -0
- package/dist/panels/resources/references.d.ts +5 -0
- package/dist/panels/resources/references.js +26 -0
- package/dist/panels/resources/service.js +63 -27
- package/dist/panels/runtime-services.js +16 -3
- package/dist/panels/runtime.d.ts +16 -4
- package/dist/panels/runtime.js +522 -64
- package/dist/panels/shared-tool-jobs.d.ts +40 -0
- package/dist/panels/shared-tool-jobs.js +37 -0
- package/dist/panels/storage-store.d.ts +21 -0
- package/dist/panels/storage-store.js +43 -0
- package/dist/panels/task-cookie-host.d.ts +26 -0
- package/dist/panels/task-cookie-host.js +145 -0
- package/dist/panels/task-cookies.d.ts +51 -0
- package/dist/panels/task-cookies.js +183 -0
- package/dist/panels/tool-executor.d.ts +21 -5
- package/dist/panels/tool-executor.js +171 -30
- package/dist/panels/tool-jobs-storage.d.ts +2 -0
- package/dist/panels/tool-jobs-storage.js +34 -0
- package/dist/panels/tool-jobs.d.ts +49 -3
- package/dist/panels/tool-jobs.js +270 -15
- package/dist/panels/types.d.ts +43 -0
- package/dist/project-runtime/backup.d.ts +26 -0
- package/dist/project-runtime/backup.js +500 -0
- package/dist/project-runtime/control-server.d.ts +4 -0
- package/dist/project-runtime/control-server.js +19 -1
- package/dist/project-runtime/docker-provider.d.ts +4 -0
- package/dist/project-runtime/docker-provider.js +16 -1
- package/dist/project-runtime/managed-entry.js +4 -0
- package/dist/project-runtime/registry.d.ts +2 -0
- package/dist/project-runtime/registry.js +15 -0
- package/dist/project-runtime/seccomp.d.ts +8 -0
- package/dist/project-runtime/seccomp.js +72 -0
- package/dist/project-runtime/types.d.ts +2 -0
- package/dist/remote-relay/byte-stream.d.ts +9 -0
- package/dist/remote-relay/byte-stream.js +71 -0
- package/dist/remote-relay/connector.d.ts +27 -0
- package/dist/remote-relay/connector.js +197 -0
- package/dist/remote-relay/local-stream.d.ts +10 -0
- package/dist/remote-relay/local-stream.js +120 -0
- package/dist/remote-relay/protocol.d.ts +39 -0
- package/dist/remote-relay/protocol.js +64 -0
- package/dist/serve/automation-worker.d.ts +16 -0
- package/dist/serve/automation-worker.js +126 -0
- package/dist/serve/cli.d.ts +3 -0
- package/dist/serve/cli.js +17 -0
- package/dist/serve/headless-server.d.ts +3 -0
- package/dist/serve/headless-server.js +140 -10
- package/dist/serve/settings-recovery-cli.d.ts +29 -0
- package/dist/serve/settings-recovery-cli.js +128 -0
- package/dist/session-http-responses.d.ts +7 -0
- package/dist/session-http-responses.js +40 -0
- package/dist/sessions-service.d.ts +6 -2
- package/dist/sessions-service.js +23 -4
- package/dist/worker-bridge-core.d.ts +5 -0
- package/dist/worker-bridge-core.js +23 -0
- package/package.json +15 -6
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
const HELP = `Usage: code-shell-settings-recovery <inspect|repair|restore> [options]
|
|
3
|
+
|
|
4
|
+
Offline administrator recovery for a stopped project's settings.
|
|
5
|
+
Stop the project and all its workers before repair or restore.
|
|
6
|
+
This command does not start a server, authenticate remote users or stop workers.
|
|
7
|
+
|
|
8
|
+
Options:
|
|
9
|
+
--project <directory> Actual project directory (default: current directory)
|
|
10
|
+
--scope <project|local> Configuration layer (default: project)
|
|
11
|
+
--from <file> Complete reviewed JSON candidate (inspect or repair)
|
|
12
|
+
--expected-revision <sha256> Revision returned by inspect (repair or restore)
|
|
13
|
+
--candidate-sha256 <sha256> Candidate hash returned by inspect (repair)
|
|
14
|
+
--backup-id <id> Backup returned by repair/restore (restore)
|
|
15
|
+
-h, --help Show this help without reading configuration
|
|
16
|
+
|
|
17
|
+
Inspection reports metadata and hashes, never configuration values.
|
|
18
|
+
Repair preserves original bytes before replacement. Restore also backs up current
|
|
19
|
+
bytes; restoring a damaged original restores that fault too. Keep backups private.
|
|
20
|
+
`;
|
|
21
|
+
export function parseSettingsRecoveryArgs(argv, cwd) {
|
|
22
|
+
const invalid = () => new Error("Invalid recovery arguments; use --help for usage.");
|
|
23
|
+
let parsed;
|
|
24
|
+
try {
|
|
25
|
+
parsed = parseArgs({
|
|
26
|
+
args: argv,
|
|
27
|
+
strict: true,
|
|
28
|
+
allowPositionals: true,
|
|
29
|
+
tokens: true,
|
|
30
|
+
options: {
|
|
31
|
+
project: { type: "string" },
|
|
32
|
+
scope: { type: "string" },
|
|
33
|
+
from: { type: "string" },
|
|
34
|
+
"expected-revision": { type: "string" },
|
|
35
|
+
"candidate-sha256": { type: "string" },
|
|
36
|
+
"backup-id": { type: "string" },
|
|
37
|
+
help: { type: "boolean", short: "h" },
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Parser errors can reflect unrecognized argument values. Do not echo them.
|
|
43
|
+
throw invalid();
|
|
44
|
+
}
|
|
45
|
+
const { values, positionals, tokens } = parsed;
|
|
46
|
+
const names = new Set();
|
|
47
|
+
for (const token of tokens ?? []) {
|
|
48
|
+
if (token.kind !== "option")
|
|
49
|
+
continue;
|
|
50
|
+
if (names.has(token.name))
|
|
51
|
+
throw invalid();
|
|
52
|
+
names.add(token.name);
|
|
53
|
+
}
|
|
54
|
+
const action = positionals[0];
|
|
55
|
+
if (positionals.length > 1 || (action && !["inspect", "repair", "restore"].includes(action)))
|
|
56
|
+
throw invalid();
|
|
57
|
+
if (values.help)
|
|
58
|
+
return { action: "help" };
|
|
59
|
+
if (!action)
|
|
60
|
+
throw invalid();
|
|
61
|
+
const allowed = new Set(["project", "scope"]);
|
|
62
|
+
if (action === "inspect" || action === "repair")
|
|
63
|
+
allowed.add("from");
|
|
64
|
+
if (action !== "inspect")
|
|
65
|
+
allowed.add("expected-revision");
|
|
66
|
+
if (action === "repair")
|
|
67
|
+
allowed.add("candidate-sha256");
|
|
68
|
+
if (action === "restore")
|
|
69
|
+
allowed.add("backup-id");
|
|
70
|
+
for (const name of names)
|
|
71
|
+
if (!allowed.has(name))
|
|
72
|
+
throw invalid();
|
|
73
|
+
const value = (name, required = false) => {
|
|
74
|
+
const result = values[name];
|
|
75
|
+
if (result === undefined && !required)
|
|
76
|
+
return undefined;
|
|
77
|
+
if (typeof result !== "string" || !result.trim())
|
|
78
|
+
throw invalid();
|
|
79
|
+
return result;
|
|
80
|
+
};
|
|
81
|
+
const scope = value("scope") ?? "project";
|
|
82
|
+
if (scope !== "project" && scope !== "local")
|
|
83
|
+
throw invalid();
|
|
84
|
+
const target = { cwd: value("project") ?? cwd(), scope };
|
|
85
|
+
if (action === "inspect")
|
|
86
|
+
return { action, ...target, candidatePath: value("from") };
|
|
87
|
+
const expectedRevision = value("expected-revision", true);
|
|
88
|
+
if (!/^[a-f0-9]{64}$/.test(expectedRevision))
|
|
89
|
+
throw invalid();
|
|
90
|
+
if (action === "repair") {
|
|
91
|
+
const candidateSha256 = value("candidate-sha256", true);
|
|
92
|
+
if (!/^[a-f0-9]{64}$/.test(candidateSha256))
|
|
93
|
+
throw invalid();
|
|
94
|
+
return {
|
|
95
|
+
action,
|
|
96
|
+
...target,
|
|
97
|
+
candidatePath: value("from", true),
|
|
98
|
+
expectedRevision,
|
|
99
|
+
candidateSha256,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return { action: "restore", ...target, backupId: value("backup-id", true), expectedRevision };
|
|
103
|
+
}
|
|
104
|
+
export async function runSettingsRecoveryCli(argv = process.argv.slice(2), io = {}) {
|
|
105
|
+
const write = io.write ?? ((text) => process.stdout.write(text));
|
|
106
|
+
const error = io.error ?? ((text) => process.stderr.write(text));
|
|
107
|
+
try {
|
|
108
|
+
const args = parseSettingsRecoveryArgs(argv, io.cwd ?? (() => process.cwd()));
|
|
109
|
+
if (args.action === "help") {
|
|
110
|
+
write(HELP);
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
// Load only the reviewed Host recovery operations, after argument validation.
|
|
114
|
+
// In particular, do not start serve/bootstrap or require TUI/model setup.
|
|
115
|
+
const core = await import("@cjhyy/code-shell-core/internal");
|
|
116
|
+
const result = args.action === "inspect"
|
|
117
|
+
? core.inspectProjectSettingsRecovery(args)
|
|
118
|
+
: args.action === "repair"
|
|
119
|
+
? core.repairProjectSettings(args)
|
|
120
|
+
: core.restoreProjectSettings(args);
|
|
121
|
+
write(JSON.stringify(result, null, 2) + "\n");
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
catch (cause) {
|
|
125
|
+
error(`[settings-recovery] ${cause instanceof Error ? cause.message : "Recovery failed"}\n`);
|
|
126
|
+
return 1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ServerResponse } from "node:http";
|
|
2
|
+
/** Response lifetimes are session-owned; accepted background work is not. */
|
|
3
|
+
export declare function createSessionHttpResponses(): {
|
|
4
|
+
track(sessionId: string, response: ServerResponse): void;
|
|
5
|
+
cancelOwner: (sessionId: string) => void;
|
|
6
|
+
clear(): void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Response lifetimes are session-owned; accepted background work is not. */
|
|
2
|
+
export function createSessionHttpResponses() {
|
|
3
|
+
const owners = new Map();
|
|
4
|
+
function cancelOwner(sessionId) {
|
|
5
|
+
const responses = owners.get(sessionId);
|
|
6
|
+
if (!responses)
|
|
7
|
+
return;
|
|
8
|
+
for (const [response, release] of responses) {
|
|
9
|
+
release();
|
|
10
|
+
response.destroy();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
track(sessionId, response) {
|
|
15
|
+
if (response.destroyed || response.writableFinished)
|
|
16
|
+
return;
|
|
17
|
+
let responses = owners.get(sessionId);
|
|
18
|
+
if (!responses)
|
|
19
|
+
owners.set(sessionId, (responses = new Map()));
|
|
20
|
+
const owned = responses;
|
|
21
|
+
const release = () => {
|
|
22
|
+
response.off("finish", release);
|
|
23
|
+
response.off("close", release);
|
|
24
|
+
owned.delete(response);
|
|
25
|
+
if (owned.size === 0)
|
|
26
|
+
owners.delete(sessionId);
|
|
27
|
+
};
|
|
28
|
+
owned.set(response, release);
|
|
29
|
+
// A handler may return before its stream finishes. Follow the actual
|
|
30
|
+
// response, so revocation still aborts the upstream pipeline and its files.
|
|
31
|
+
response.once("finish", release);
|
|
32
|
+
response.once("close", release);
|
|
33
|
+
},
|
|
34
|
+
cancelOwner,
|
|
35
|
+
clear() {
|
|
36
|
+
for (const sessionId of owners.keys())
|
|
37
|
+
cancelOwner(sessionId);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -39,9 +39,11 @@ export interface DiskSessionMeta {
|
|
|
39
39
|
cwd: string;
|
|
40
40
|
title: string;
|
|
41
41
|
updatedAt: number;
|
|
42
|
-
/**
|
|
42
|
+
/** Durable creation time, when supplied by the engine's state schema. */
|
|
43
|
+
createdAt?: number;
|
|
44
|
+
/** Sub-agents require an explicit parent query or the host's includeSubagents scan. */
|
|
43
45
|
origin: "desktop" | "automation" | "subagent";
|
|
44
|
-
/** Present
|
|
46
|
+
/** Present for direct-child queries and the host's complete task scan. */
|
|
45
47
|
parentSessionId?: string;
|
|
46
48
|
/** Normalized durable status for Pet/display consumers. */
|
|
47
49
|
status?: "active" | "paused" | "completed" | "failed" | "cancelled";
|
|
@@ -68,6 +70,8 @@ export declare function listDiskSessions(opts: {
|
|
|
68
70
|
limit: number;
|
|
69
71
|
cursor?: string;
|
|
70
72
|
includeArchived?: boolean;
|
|
73
|
+
/** Host read models may include children; ordinary sidebar queries stay top-level. */
|
|
74
|
+
includeSubagents?: boolean;
|
|
71
75
|
parentSessionId?: string;
|
|
72
76
|
}, baseDir?: string): Promise<ListDiskSessionsResult>;
|
|
73
77
|
/**
|
package/dist/sessions-service.js
CHANGED
|
@@ -279,7 +279,7 @@ export async function listDiskSessions(opts, baseDir = sessionsRoot()) {
|
|
|
279
279
|
if (state.parentSessionId !== parentSessionId)
|
|
280
280
|
continue;
|
|
281
281
|
}
|
|
282
|
-
else if (state.parentSessionId) {
|
|
282
|
+
else if (state.parentSessionId && !opts.includeSubagents) {
|
|
283
283
|
continue;
|
|
284
284
|
}
|
|
285
285
|
// Only desktop + automation belong in the desktop sidebar. Targeted
|
|
@@ -288,7 +288,7 @@ export async function listDiskSessions(opts, baseDir = sessionsRoot()) {
|
|
|
288
288
|
const origin = state.origin;
|
|
289
289
|
if (origin !== "desktop" &&
|
|
290
290
|
origin !== "automation" &&
|
|
291
|
-
!(parentSessionId !== undefined && origin === "subagent")) {
|
|
291
|
+
!((parentSessionId !== undefined || opts.includeSubagents) && origin === "subagent")) {
|
|
292
292
|
continue;
|
|
293
293
|
}
|
|
294
294
|
// Skip sessions whose project root has been deleted. Listing them led the
|
|
@@ -300,7 +300,21 @@ export async function listDiskSessions(opts, baseDir = sessionsRoot()) {
|
|
|
300
300
|
const cwdStr = typeof state.cwd === "string" ? state.cwd : "";
|
|
301
301
|
// A child transcript remains useful after its temporary worktree is gone;
|
|
302
302
|
// targeted reads do not rebuild projects in the sidebar.
|
|
303
|
-
|
|
303
|
+
const childParentId = typeof state.parentSessionId === "string" && state.parentSessionId
|
|
304
|
+
? state.parentSessionId
|
|
305
|
+
: undefined;
|
|
306
|
+
if (childParentId &&
|
|
307
|
+
(!SAFE_ID.test(childParentId) ||
|
|
308
|
+
childParentId.length > 128 ||
|
|
309
|
+
childParentId.includes("..") ||
|
|
310
|
+
childParentId === "."))
|
|
311
|
+
continue;
|
|
312
|
+
if (state.parentSessionId && !childParentId)
|
|
313
|
+
continue;
|
|
314
|
+
if (parentSessionId === undefined &&
|
|
315
|
+
!(opts.includeSubagents && childParentId) &&
|
|
316
|
+
cwdStr &&
|
|
317
|
+
!(await pathExists(cwdStr)))
|
|
304
318
|
continue;
|
|
305
319
|
// Archived sessions are hidden from the default catalog. Filtering happens
|
|
306
320
|
// before the push (like every other skip above), so the mtime cursor —
|
|
@@ -328,8 +342,13 @@ export async function listDiskSessions(opts, baseDir = sessionsRoot()) {
|
|
|
328
342
|
title: (typeof state.title === "string" && state.title ? state.title : undefined) ??
|
|
329
343
|
(typeof state.summary === "string" && state.summary ? state.summary : id),
|
|
330
344
|
updatedAt: mtime,
|
|
345
|
+
...(typeof state.startedAt === "number" &&
|
|
346
|
+
Number.isFinite(state.startedAt) &&
|
|
347
|
+
state.startedAt >= 0
|
|
348
|
+
? { createdAt: state.startedAt }
|
|
349
|
+
: {}),
|
|
331
350
|
origin,
|
|
332
|
-
...(
|
|
351
|
+
...(childParentId ? { parentSessionId: childParentId } : {}),
|
|
333
352
|
status: state.status === "active" || state.status === "paused" || state.status === "completed"
|
|
334
353
|
? state.status
|
|
335
354
|
: state.status === "aborted_streaming" || state.status === "aborted_tools"
|
|
@@ -159,6 +159,11 @@ export declare class WorkerBridgeCore {
|
|
|
159
159
|
* to map onto its own semantics.
|
|
160
160
|
*/
|
|
161
161
|
request(method: string, params: unknown, options: WorkerRequestOptions): Promise<WorkerRpcOutcome>;
|
|
162
|
+
/** Request shutdown and retain ownership until this exact child exits.
|
|
163
|
+
* Does not resolve merely because SIGTERM was sent; an uncooperative child
|
|
164
|
+
* remains owned so a caller cannot start competing work prematurely.
|
|
165
|
+
*/
|
|
166
|
+
stopAndWait(): Promise<void>;
|
|
162
167
|
/** Graceful shutdown: SIGTERM the worker (no-op when none is alive). */
|
|
163
168
|
kill(): void;
|
|
164
169
|
}
|
|
@@ -365,6 +365,29 @@ export class WorkerBridgeCore {
|
|
|
365
365
|
}
|
|
366
366
|
});
|
|
367
367
|
}
|
|
368
|
+
/** Request shutdown and retain ownership until this exact child exits.
|
|
369
|
+
* Does not resolve merely because SIGTERM was sent; an uncooperative child
|
|
370
|
+
* remains owned so a caller cannot start competing work prematurely.
|
|
371
|
+
*/
|
|
372
|
+
async stopAndWait() {
|
|
373
|
+
const child = this.child;
|
|
374
|
+
if (!child || child.exitCode !== null || child.signalCode !== null)
|
|
375
|
+
return;
|
|
376
|
+
await new Promise((resolve) => {
|
|
377
|
+
const done = () => {
|
|
378
|
+
child.off("exit", done);
|
|
379
|
+
child.off("error", spawnFailed);
|
|
380
|
+
resolve();
|
|
381
|
+
};
|
|
382
|
+
const spawnFailed = () => {
|
|
383
|
+
if (!child.pid)
|
|
384
|
+
done();
|
|
385
|
+
};
|
|
386
|
+
child.once("exit", done);
|
|
387
|
+
child.on("error", spawnFailed);
|
|
388
|
+
child.kill("SIGTERM");
|
|
389
|
+
});
|
|
390
|
+
}
|
|
368
391
|
/** Graceful shutdown: SIGTERM the worker (no-op when none is alive). */
|
|
369
392
|
kill() {
|
|
370
393
|
this.log("kill", { pid: this.child?.pid });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cjhyy/code-shell-server",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.25",
|
|
4
4
|
"description": "CodeShell server transport layer — mobile remote HTTP/WS host, pairing, passcode gate, tunnel, rooms, uploads, and session/attachment services. Electron-free; precursor of the auth gateway.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
"types": "./dist/index.worker.d.ts",
|
|
19
19
|
"import": "./dist/index.worker.js"
|
|
20
20
|
},
|
|
21
|
+
"./remote-relay": {
|
|
22
|
+
"types": "./dist/index.remote-relay.d.ts",
|
|
23
|
+
"import": "./dist/index.remote-relay.js"
|
|
24
|
+
},
|
|
25
|
+
"./auth": {
|
|
26
|
+
"types": "./dist/index.auth.d.ts",
|
|
27
|
+
"import": "./dist/index.auth.js"
|
|
28
|
+
},
|
|
21
29
|
"./mobile-remote": {
|
|
22
30
|
"types": "./dist/index.mobile-remote.d.ts",
|
|
23
31
|
"import": "./dist/index.mobile-remote.js"
|
|
@@ -40,7 +48,8 @@
|
|
|
40
48
|
}
|
|
41
49
|
},
|
|
42
50
|
"bin": {
|
|
43
|
-
"code-shell-serve": "./dist/bin/code-shell-serve.js"
|
|
51
|
+
"code-shell-serve": "./dist/bin/code-shell-serve.js",
|
|
52
|
+
"code-shell-settings-recovery": "./dist/bin/code-shell-settings-recovery.js"
|
|
44
53
|
},
|
|
45
54
|
"files": [
|
|
46
55
|
"dist"
|
|
@@ -51,13 +60,13 @@
|
|
|
51
60
|
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\""
|
|
52
61
|
},
|
|
53
62
|
"dependencies": {
|
|
54
|
-
"@cjhyy/code-shell-capability-coding": "0.9.
|
|
55
|
-
"@cjhyy/code-shell-core": "0.9.
|
|
56
|
-
"@cjhyy/code-shell-web": "0.9.
|
|
63
|
+
"@cjhyy/code-shell-capability-coding": "0.9.25",
|
|
64
|
+
"@cjhyy/code-shell-core": "0.9.25",
|
|
65
|
+
"@cjhyy/code-shell-web": "0.9.25",
|
|
57
66
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
58
67
|
"@types/ws": "^8.18.1",
|
|
59
68
|
"ws": "^8.21.0",
|
|
60
|
-
"@cjhyy/code-shell-link": "0.9.
|
|
69
|
+
"@cjhyy/code-shell-link": "0.9.25"
|
|
61
70
|
},
|
|
62
71
|
"engines": {
|
|
63
72
|
"node": ">=20.10"
|