@moxt-ai/mobius 0.0.4 → 0.0.6
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/acp/native-session.d.ts +30 -0
- package/dist/acp/native-session.d.ts.map +1 -0
- package/dist/acp/native-session.js +25 -0
- package/dist/acp/native-session.js.map +1 -0
- package/dist/acp/session-history.d.ts +9 -0
- package/dist/acp/session-history.d.ts.map +1 -0
- package/dist/acp/session-history.js +69 -0
- package/dist/acp/session-history.js.map +1 -0
- package/dist/acp/session-manager.d.ts +16 -5
- package/dist/acp/session-manager.d.ts.map +1 -1
- package/dist/acp/session-manager.js +226 -41
- package/dist/acp/session-manager.js.map +1 -1
- package/dist/acp/session-store.d.ts +9 -0
- package/dist/acp/session-store.d.ts.map +1 -1
- package/dist/acp/session-store.js +43 -0
- package/dist/acp/session-store.js.map +1 -1
- package/dist/agent-catalog/agent-diagnostics.d.ts +3 -0
- package/dist/agent-catalog/agent-diagnostics.d.ts.map +1 -0
- package/dist/agent-catalog/agent-diagnostics.js +62 -0
- package/dist/agent-catalog/agent-diagnostics.js.map +1 -0
- package/dist/agent-catalog/discover-local-agents.d.ts +77 -0
- package/dist/agent-catalog/discover-local-agents.d.ts.map +1 -0
- package/dist/agent-catalog/discover-local-agents.js +467 -0
- package/dist/agent-catalog/discover-local-agents.js.map +1 -0
- package/dist/agent-catalog/local-agent.d.ts +38 -0
- package/dist/agent-catalog/local-agent.d.ts.map +1 -0
- package/dist/agent-catalog/local-agent.js +93 -0
- package/dist/agent-catalog/local-agent.js.map +1 -0
- package/dist/agent-catalog/publish-agent-catalog.d.ts +3 -0
- package/dist/agent-catalog/publish-agent-catalog.d.ts.map +1 -0
- package/dist/agent-catalog/publish-agent-catalog.js +58 -0
- package/dist/agent-catalog/publish-agent-catalog.js.map +1 -0
- package/dist/agent-installation/agent-installation-manager.d.ts +60 -0
- package/dist/agent-installation/agent-installation-manager.d.ts.map +1 -0
- package/dist/agent-installation/agent-installation-manager.js +242 -0
- package/dist/agent-installation/agent-installation-manager.js.map +1 -0
- package/dist/agent-installation/automatic-adapter-provisioner.d.ts +18 -0
- package/dist/agent-installation/automatic-adapter-provisioner.d.ts.map +1 -0
- package/dist/agent-installation/automatic-adapter-provisioner.js +116 -0
- package/dist/agent-installation/automatic-adapter-provisioner.js.map +1 -0
- package/dist/agent-installation/fixed-agent-install-recipes.d.ts +20 -0
- package/dist/agent-installation/fixed-agent-install-recipes.d.ts.map +1 -0
- package/dist/agent-installation/fixed-agent-install-recipes.js +163 -0
- package/dist/agent-installation/fixed-agent-install-recipes.js.map +1 -0
- package/dist/agent-installation/fixed-installation-executor.d.ts +20 -0
- package/dist/agent-installation/fixed-installation-executor.d.ts.map +1 -0
- package/dist/agent-installation/fixed-installation-executor.js +204 -0
- package/dist/agent-installation/fixed-installation-executor.js.map +1 -0
- package/dist/agent-installation/installation-grants.d.ts +2 -0
- package/dist/agent-installation/installation-grants.d.ts.map +1 -0
- package/dist/agent-installation/installation-grants.js +52 -0
- package/dist/agent-installation/installation-grants.js.map +1 -0
- package/dist/agent-installation/local-installation-authorizer.d.ts +7 -0
- package/dist/agent-installation/local-installation-authorizer.d.ts.map +1 -0
- package/dist/agent-installation/local-installation-authorizer.js +32 -0
- package/dist/agent-installation/local-installation-authorizer.js.map +1 -0
- package/dist/agent-installation/managed-adapter-installer.d.ts +20 -0
- package/dist/agent-installation/managed-adapter-installer.d.ts.map +1 -0
- package/dist/agent-installation/managed-adapter-installer.js +159 -0
- package/dist/agent-installation/managed-adapter-installer.js.map +1 -0
- package/dist/agent-installation/verified-download.d.ts +24 -0
- package/dist/agent-installation/verified-download.d.ts.map +1 -0
- package/dist/agent-installation/verified-download.js +158 -0
- package/dist/agent-installation/verified-download.js.map +1 -0
- package/dist/audit/audit-store.d.ts +1 -0
- package/dist/audit/audit-store.d.ts.map +1 -1
- package/dist/audit/audit-store.js +12 -4
- package/dist/audit/audit-store.js.map +1 -1
- package/dist/authorization/local-authorization-error.d.ts +5 -0
- package/dist/authorization/local-authorization-error.d.ts.map +1 -0
- package/dist/authorization/local-authorization-error.js +8 -0
- package/dist/authorization/local-authorization-error.js.map +1 -0
- package/dist/authorization/workspace-directory.d.ts +16 -5
- package/dist/authorization/workspace-directory.d.ts.map +1 -1
- package/dist/authorization/workspace-directory.js +109 -119
- package/dist/authorization/workspace-directory.js.map +1 -1
- package/dist/cli.js +6289 -2124
- package/dist/cli.js.map +4 -4
- package/dist/config.d.ts +8 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -55
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4894 -852
- package/dist/index.js.map +4 -4
- package/dist/native-sessions/codex-history.d.ts +11 -0
- package/dist/native-sessions/codex-history.d.ts.map +1 -0
- package/dist/native-sessions/codex-history.js +223 -0
- package/dist/native-sessions/codex-history.js.map +1 -0
- package/dist/native-sessions/service.d.ts +14 -0
- package/dist/native-sessions/service.d.ts.map +1 -0
- package/dist/native-sessions/service.js +249 -0
- package/dist/native-sessions/service.js.map +1 -0
- package/dist/pairing/pair-local-machine.d.ts +2 -2
- package/dist/pairing/pair-local-machine.d.ts.map +1 -1
- package/dist/pairing/pair-local-machine.js +65 -41
- package/dist/pairing/pair-local-machine.js.map +1 -1
- package/dist/process/executable.d.ts +40 -0
- package/dist/process/executable.d.ts.map +1 -0
- package/dist/process/executable.js +305 -0
- package/dist/process/executable.js.map +1 -0
- package/dist/run-daemon.d.ts +1 -1
- package/dist/run-daemon.d.ts.map +1 -1
- package/dist/run-daemon.js +431 -180
- package/dist/run-daemon.js.map +1 -1
- package/dist/storage/state-directory.d.ts +2 -0
- package/dist/storage/state-directory.d.ts.map +1 -0
- package/dist/storage/state-directory.js +10 -0
- package/dist/storage/state-directory.js.map +1 -0
- package/package.json +5 -6
- package/dist/authorization/authorize-binding.d.ts +0 -6
- package/dist/authorization/authorize-binding.d.ts.map +0 -1
- package/dist/authorization/authorize-binding.js +0 -30
- package/dist/authorization/authorize-binding.js.map +0 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { readdir, realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
2
3
|
import { basename, dirname, isAbsolute, join, normalize, relative, } from "node:path";
|
|
3
|
-
import { LocalAuthorizationError } from "./
|
|
4
|
-
const ROOT_DIRECTORY_ID = "root";
|
|
5
|
-
const DIRECTORY_ID_PREFIX = "dir-";
|
|
6
|
-
const DIRECTORY_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
4
|
+
import { LocalAuthorizationError } from "./local-authorization-error.js";
|
|
7
5
|
export class WorkspaceDirectoryListing {
|
|
8
6
|
directoryId;
|
|
9
7
|
directoryLabel;
|
|
@@ -16,149 +14,141 @@ export class WorkspaceDirectoryListing {
|
|
|
16
14
|
this.parentDirectoryId = parentDirectoryId;
|
|
17
15
|
}
|
|
18
16
|
}
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
function encodePath(path) {
|
|
18
|
+
const encoded = Buffer.from(path, "utf8").toString("base64url");
|
|
19
|
+
if (encoded.length === 0 || encoded.length > 2_000) {
|
|
20
|
+
throw new LocalAuthorizationError("The local directory path is too long to select");
|
|
22
21
|
}
|
|
23
|
-
return
|
|
22
|
+
return `path-${encoded}`;
|
|
24
23
|
}
|
|
25
|
-
function
|
|
26
|
-
|
|
27
|
-
return "";
|
|
28
|
-
}
|
|
29
|
-
if (!value.startsWith(DIRECTORY_ID_PREFIX)) {
|
|
30
|
-
throw new LocalAuthorizationError("The workspace directory is invalid");
|
|
31
|
-
}
|
|
32
|
-
const encoded = value.slice(DIRECTORY_ID_PREFIX.length);
|
|
24
|
+
function decodePath(value, prefix) {
|
|
25
|
+
const encoded = value.slice(prefix.length);
|
|
33
26
|
if (encoded.length === 0 ||
|
|
34
27
|
encoded.length > 2_000 ||
|
|
35
|
-
|
|
36
|
-
throw new LocalAuthorizationError("The
|
|
37
|
-
}
|
|
28
|
+
!/^[a-zA-Z0-9_-]+$/.test(encoded))
|
|
29
|
+
throw new LocalAuthorizationError("The directory identifier is invalid");
|
|
38
30
|
const decoded = Buffer.from(encoded, "base64url").toString("utf8");
|
|
39
|
-
if (Buffer.from(decoded, "utf8").toString("base64url") !== encoded
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
isAbsolute(decoded) ||
|
|
45
|
-
normalized === ".." ||
|
|
46
|
-
normalized.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) ||
|
|
47
|
-
normalized !== decoded) {
|
|
48
|
-
throw new LocalAuthorizationError("The workspace directory is invalid");
|
|
49
|
-
}
|
|
50
|
-
return normalized;
|
|
51
|
-
}
|
|
52
|
-
function isContained(root, target) {
|
|
53
|
-
const remainder = relative(root, target);
|
|
54
|
-
return (remainder.length === 0 ||
|
|
55
|
-
(!isAbsolute(remainder) &&
|
|
56
|
-
remainder !== ".." &&
|
|
57
|
-
!remainder.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`)));
|
|
31
|
+
if (Buffer.from(decoded, "utf8").toString("base64url") !== encoded ||
|
|
32
|
+
decoded.includes("\0") ||
|
|
33
|
+
normalize(decoded) !== decoded)
|
|
34
|
+
throw new LocalAuthorizationError("The directory identifier is invalid");
|
|
35
|
+
return decoded;
|
|
58
36
|
}
|
|
37
|
+
/** Pairing authorizes the machine. Directory identifiers select a working
|
|
38
|
+
* directory; they do not grant additional filesystem capabilities. */
|
|
59
39
|
export class WorkspaceDirectoryService {
|
|
60
|
-
#
|
|
61
|
-
#
|
|
62
|
-
constructor(
|
|
63
|
-
this.#
|
|
64
|
-
this.#
|
|
40
|
+
#bindingId;
|
|
41
|
+
#defaultWorkspace;
|
|
42
|
+
constructor(bindingId, defaultWorkspace) {
|
|
43
|
+
this.#bindingId = bindingId;
|
|
44
|
+
this.#defaultWorkspace = defaultWorkspace;
|
|
65
45
|
}
|
|
66
|
-
|
|
67
|
-
if (
|
|
46
|
+
authorizeMachine = (bindingId) => {
|
|
47
|
+
if (bindingId !== this.#bindingId)
|
|
68
48
|
throw new LocalAuthorizationError("The runtime binding is not authorized");
|
|
49
|
+
};
|
|
50
|
+
requestedPath = (id) => {
|
|
51
|
+
if (id === "default")
|
|
52
|
+
return this.#defaultWorkspace;
|
|
53
|
+
if (id === "home")
|
|
54
|
+
return homedir();
|
|
55
|
+
if (id.startsWith("path-")) {
|
|
56
|
+
const path = decodePath(id, "path-");
|
|
57
|
+
if (isAbsolute(path))
|
|
58
|
+
return path;
|
|
69
59
|
}
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
throw new LocalAuthorizationError("The directory identifier is invalid");
|
|
61
|
+
};
|
|
62
|
+
resolvePath = async (requested, signal) => {
|
|
63
|
+
signal.throwIfAborted();
|
|
64
|
+
if (!isAbsolute(requested) ||
|
|
65
|
+
requested.includes("\0") ||
|
|
66
|
+
normalize(requested) !== requested)
|
|
67
|
+
throw new LocalAuthorizationError("The local directory path is invalid");
|
|
72
68
|
try {
|
|
73
|
-
const target = await realpath(
|
|
69
|
+
const target = await realpath(requested);
|
|
70
|
+
signal.throwIfAborted();
|
|
74
71
|
const metadata = await stat(target);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
signal.throwIfAborted();
|
|
73
|
+
if (!isAbsolute(target) ||
|
|
74
|
+
normalize(target) !== target ||
|
|
75
|
+
!metadata.isDirectory())
|
|
76
|
+
throw new LocalAuthorizationError("The selected location is not a directory");
|
|
78
77
|
return target;
|
|
79
78
|
}
|
|
80
|
-
catch (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
throw new LocalAuthorizationError("
|
|
79
|
+
catch (cause) {
|
|
80
|
+
signal.throwIfAborted();
|
|
81
|
+
if (cause instanceof LocalAuthorizationError)
|
|
82
|
+
throw cause;
|
|
83
|
+
throw new LocalAuthorizationError("This directory is missing or unavailable to your user account", { cause });
|
|
85
84
|
}
|
|
86
85
|
};
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
label = (path) => {
|
|
87
|
+
const suffix = relative(homedir(), path);
|
|
88
|
+
return suffix === ""
|
|
89
|
+
? "~"
|
|
90
|
+
: !isAbsolute(suffix) &&
|
|
91
|
+
suffix !== ".." &&
|
|
92
|
+
!suffix.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`)
|
|
93
|
+
? `~/${suffix.replaceAll("\\", "/")}`
|
|
94
|
+
: path;
|
|
95
|
+
};
|
|
96
|
+
identify = async (bindingId, requestedPath, signal) => {
|
|
97
|
+
this.authorizeMachine(bindingId);
|
|
98
|
+
const path = await this.resolvePath(requestedPath, signal);
|
|
99
|
+
return {
|
|
100
|
+
path,
|
|
101
|
+
directoryId: encodePath(path),
|
|
102
|
+
name: basename(path) || path,
|
|
103
|
+
label: this.label(path),
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
resolve = async (bindingId, id, signal) => {
|
|
107
|
+
this.authorizeMachine(bindingId);
|
|
108
|
+
return await this.resolvePath(this.requestedPath(id), signal);
|
|
109
|
+
};
|
|
110
|
+
list = async (bindingId, id, signal) => {
|
|
111
|
+
const target = await this.resolve(bindingId, id, signal);
|
|
91
112
|
try {
|
|
92
|
-
const entries = [];
|
|
93
113
|
const children = await readdir(target, { withFileTypes: true });
|
|
114
|
+
signal.throwIfAborted();
|
|
115
|
+
const entries = [];
|
|
94
116
|
for (const child of children) {
|
|
95
|
-
if (entries.length === 500)
|
|
117
|
+
if (entries.length === 500)
|
|
96
118
|
break;
|
|
119
|
+
if (child.isFile() ||
|
|
120
|
+
child.isBlockDevice() ||
|
|
121
|
+
child.isCharacterDevice() ||
|
|
122
|
+
child.isFIFO() ||
|
|
123
|
+
child.isSocket()) {
|
|
124
|
+
continue;
|
|
97
125
|
}
|
|
98
|
-
const logicalChild = logicalRelativePath.length === 0
|
|
99
|
-
? child.name
|
|
100
|
-
: join(logicalRelativePath, child.name);
|
|
101
126
|
try {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
if (metadata.isDirectory() && isContained(root, resolvedChild)) {
|
|
105
|
-
entries.push({
|
|
106
|
-
directoryId: directoryId(logicalChild),
|
|
107
|
-
name: child.name,
|
|
108
|
-
});
|
|
109
|
-
}
|
|
127
|
+
const path = await this.resolvePath(join(target, child.name), signal);
|
|
128
|
+
entries.push({ directoryId: encodePath(path), name: child.name });
|
|
110
129
|
}
|
|
111
|
-
catch {
|
|
112
|
-
|
|
130
|
+
catch (cause) {
|
|
131
|
+
signal.throwIfAborted();
|
|
132
|
+
if (!(cause instanceof LocalAuthorizationError))
|
|
133
|
+
throw cause;
|
|
113
134
|
}
|
|
114
135
|
}
|
|
115
|
-
entries.sort((
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
? ""
|
|
119
|
-
: dirname(logicalRelativePath);
|
|
120
|
-
return new WorkspaceDirectoryListing(requestedDirectoryId, labelSuffix.length === 0
|
|
121
|
-
? basename(root)
|
|
122
|
-
: `${basename(root)}/${labelSuffix}`, entries, requestedDirectoryId === ROOT_DIRECTORY_ID
|
|
123
|
-
? ""
|
|
124
|
-
: directoryId(parentRelative));
|
|
136
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
137
|
+
const parent = dirname(target);
|
|
138
|
+
return new WorkspaceDirectoryListing(id, this.label(target), entries, parent === target ? "" : encodePath(parent));
|
|
125
139
|
}
|
|
126
|
-
catch (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
throw new LocalAuthorizationError("
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
resolveMany = async (requestedBindingId, directoryIds) => {
|
|
134
|
-
const resolved = [];
|
|
135
|
-
const unique = new Set();
|
|
136
|
-
for (const requestedDirectoryId of directoryIds) {
|
|
137
|
-
const directory = await this.resolve(requestedBindingId, requestedDirectoryId);
|
|
138
|
-
if (!unique.has(directory)) {
|
|
139
|
-
unique.add(directory);
|
|
140
|
-
resolved.push(directory);
|
|
141
|
-
}
|
|
140
|
+
catch (cause) {
|
|
141
|
+
signal.throwIfAborted();
|
|
142
|
+
if (cause instanceof LocalAuthorizationError)
|
|
143
|
+
throw cause;
|
|
144
|
+
throw new LocalAuthorizationError("This directory cannot be browsed by your user account", { cause });
|
|
142
145
|
}
|
|
143
|
-
return resolved;
|
|
144
146
|
};
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
throw new LocalAuthorizationError("The approved root is not a directory");
|
|
151
|
-
}
|
|
152
|
-
return root;
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
if (error instanceof LocalAuthorizationError) {
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
throw new LocalAuthorizationError("The approved root cannot be resolved", {
|
|
159
|
-
cause: error,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
147
|
+
resolveMany = async (bindingId, ids, signal) => {
|
|
148
|
+
const paths = new Set();
|
|
149
|
+
for (const id of ids)
|
|
150
|
+
paths.add(await this.resolve(bindingId, id, signal));
|
|
151
|
+
return [...paths];
|
|
162
152
|
};
|
|
163
153
|
}
|
|
164
154
|
//# sourceMappingURL=workspace-directory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-directory.js","sourceRoot":"","sources":["../../src/authorization/workspace-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,GACT,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-directory.js","sourceRoot":"","sources":["../../src/authorization/workspace-directory.ts"],"names":[],"mappings":"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"}
|