@opencomputer/cli 0.1.0 → 0.2.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.
- package/README.md +31 -4
- package/dist/api.d.ts +35 -3
- package/dist/api.js +13 -3
- package/dist/api.js.map +1 -1
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/commands.js +138 -19
- package/dist/commands.js.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/local.d.ts +2 -0
- package/dist/local.js +122 -0
- package/dist/local.js.map +1 -0
- package/dist/project.d.ts +28 -0
- package/dist/project.js +423 -0
- package/dist/project.js.map +1 -0
- package/dist/project.test.d.ts +1 -0
- package/dist/project.test.js +46 -0
- package/dist/project.test.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
# OpenComputer CLI
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
|
|
3
|
+
The OpenComputer CLI treats every agent as a normal source repository. A
|
|
4
|
+
template creates editable instructions, OpenCode tools, connection
|
|
5
|
+
declarations, channel code, a sandbox workspace, and committed agent identity.
|
|
5
6
|
|
|
6
7
|
```bash
|
|
7
8
|
npm install --global @opencomputer/cli
|
|
8
9
|
opencomputer login
|
|
9
10
|
opencomputer templates
|
|
10
|
-
opencomputer
|
|
11
|
-
|
|
11
|
+
opencomputer init email-triage
|
|
12
|
+
cd email-triage
|
|
13
|
+
npm install
|
|
14
|
+
opencomputer connect google
|
|
15
|
+
opencomputer dev
|
|
16
|
+
opencomputer session "Triage today's inbox."
|
|
17
|
+
opencomputer deploy
|
|
12
18
|
```
|
|
13
19
|
|
|
14
20
|
Authentication is stored separately from the legacy `oc` CLI in
|
|
15
21
|
`~/.opencomputer/config.json`. `OPENCOMPUTER_API_KEY` and
|
|
16
22
|
`OPENCOMPUTER_API_URL` can be used in CI.
|
|
23
|
+
|
|
24
|
+
The generated repository is deliberately flat:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
email-triage/
|
|
28
|
+
├── opencomputer.toml
|
|
29
|
+
├── package.json
|
|
30
|
+
├── instructions.md
|
|
31
|
+
├── agent.ts
|
|
32
|
+
├── tools/
|
|
33
|
+
├── connections/
|
|
34
|
+
├── channels/
|
|
35
|
+
├── skills/
|
|
36
|
+
├── workspace/
|
|
37
|
+
└── evals/
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`opencomputer.toml` is committed with the agent and contains its stable ID.
|
|
41
|
+
The directory can be renamed without creating a different deployed agent; each
|
|
42
|
+
`opencomputer deploy` publishes a new immutable deployment and advances the
|
|
43
|
+
selected alias.
|
package/dist/api.d.ts
CHANGED
|
@@ -26,6 +26,13 @@ export interface ManagedAgentDeployment {
|
|
|
26
26
|
alias: string;
|
|
27
27
|
createdAt: string;
|
|
28
28
|
}
|
|
29
|
+
export interface ManagedConnection {
|
|
30
|
+
id: string;
|
|
31
|
+
provider: string;
|
|
32
|
+
label: string;
|
|
33
|
+
displayName?: string;
|
|
34
|
+
status: string;
|
|
35
|
+
}
|
|
29
36
|
export interface ManagedAgentEvent {
|
|
30
37
|
id: string;
|
|
31
38
|
seq: number;
|
|
@@ -70,9 +77,34 @@ export declare class OpenComputerClient {
|
|
|
70
77
|
revokeCredential(): Promise<void>;
|
|
71
78
|
templates(): Promise<ManagedAgentTemplate[]>;
|
|
72
79
|
agents(): Promise<ManagedAgentSummary[]>;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
registerDeployment(input: {
|
|
81
|
+
agentId: string;
|
|
82
|
+
alias: string;
|
|
83
|
+
channels: string[];
|
|
84
|
+
connections: string[];
|
|
85
|
+
source: {
|
|
86
|
+
digest: string;
|
|
87
|
+
size: number;
|
|
88
|
+
contentType: string;
|
|
89
|
+
body: string;
|
|
90
|
+
};
|
|
91
|
+
}): Promise<ManagedAgentDeployment>;
|
|
92
|
+
connections(): Promise<ManagedConnection[]>;
|
|
93
|
+
linkGoogle(service: string): Promise<{
|
|
94
|
+
service: string;
|
|
95
|
+
toolkit: string;
|
|
96
|
+
status: "connected" | "pending";
|
|
97
|
+
connectedAccountId?: string;
|
|
98
|
+
authorizationUrl?: string;
|
|
99
|
+
expiresAt?: string;
|
|
100
|
+
}>;
|
|
101
|
+
googleConnection(service: string): Promise<{
|
|
102
|
+
service: string;
|
|
103
|
+
toolkit: string;
|
|
104
|
+
status: "connected" | "pending";
|
|
105
|
+
connectedAccountId?: string;
|
|
106
|
+
authorizationUrl?: string;
|
|
107
|
+
expiresAt?: string;
|
|
76
108
|
}>;
|
|
77
109
|
createSession(agentId: string): Promise<CreateSessionResult>;
|
|
78
110
|
createTurn(sessionId: string, input: string): Promise<{
|
package/dist/api.js
CHANGED
|
@@ -76,12 +76,22 @@ export class OpenComputerClient {
|
|
|
76
76
|
const result = await this.request("/api/managed-agents/agents");
|
|
77
77
|
return result.agents;
|
|
78
78
|
}
|
|
79
|
-
|
|
80
|
-
return this.request(
|
|
79
|
+
registerDeployment(input) {
|
|
80
|
+
return this.request("/api/managed-agents/deployments", { method: "POST", body: JSON.stringify(input) });
|
|
81
|
+
}
|
|
82
|
+
async connections() {
|
|
83
|
+
const result = await this.request("/api/managed-agents/connections");
|
|
84
|
+
return result.connections;
|
|
85
|
+
}
|
|
86
|
+
linkGoogle(service) {
|
|
87
|
+
return this.request("/api/managed-agents/connections/google/link", {
|
|
81
88
|
method: "POST",
|
|
82
|
-
body: JSON.stringify({
|
|
89
|
+
body: JSON.stringify({ service }),
|
|
83
90
|
});
|
|
84
91
|
}
|
|
92
|
+
googleConnection(service) {
|
|
93
|
+
return this.request(`/api/managed-agents/connections/google/status?service=${encodeURIComponent(service)}`);
|
|
94
|
+
}
|
|
85
95
|
createSession(agentId) {
|
|
86
96
|
return this.request("/api/managed-agents/sessions", {
|
|
87
97
|
method: "POST",
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type OpenComputerIdentity } from "./api.js";
|
|
2
2
|
import { type ResolvedConfig } from "./config.js";
|
|
3
|
+
export declare function openBrowser(url: string): boolean;
|
|
3
4
|
export declare function login(config: ResolvedConfig, options: {
|
|
4
5
|
noBrowser: boolean;
|
|
5
6
|
force: boolean;
|
package/dist/auth.js
CHANGED
|
@@ -8,7 +8,7 @@ function credentialName() {
|
|
|
8
8
|
.trim();
|
|
9
9
|
return `opencomputer CLI${cleanHost ? ` on ${cleanHost}` : ""}`.slice(0, 100);
|
|
10
10
|
}
|
|
11
|
-
function openBrowser(url) {
|
|
11
|
+
export function openBrowser(url) {
|
|
12
12
|
const command = platform() === "darwin"
|
|
13
13
|
? ["open", url]
|
|
14
14
|
: platform() === "win32"
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAA6B,MAAM,UAAU,CAAC;AACzE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AAErB,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,QAAQ,EAAE;SACzB,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,IAAI,EAAE,CAAC;IACV,OAAO,mBAAmB,SAAS,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { OpenComputerClient } from "./api.js";
|
|
2
|
-
import { login, logout } from "./auth.js";
|
|
2
|
+
import { login, logout, openBrowser } from "./auth.js";
|
|
3
3
|
import { resolveConfig } from "./config.js";
|
|
4
|
+
import { runOpenCode } from "./local.js";
|
|
5
|
+
import { addGmailTools, addSlackChannel, buildAgentArtifact, findAgentRoot, initializeAgentProject, } from "./project.js";
|
|
4
6
|
function printJSON(value) {
|
|
5
7
|
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
6
8
|
}
|
|
9
|
+
function flag(args, name) {
|
|
10
|
+
const index = args.indexOf(name);
|
|
11
|
+
if (index < 0)
|
|
12
|
+
return false;
|
|
13
|
+
args.splice(index, 1);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
7
16
|
function option(args, name) {
|
|
8
17
|
const index = args.indexOf(name);
|
|
9
18
|
if (index < 0)
|
|
@@ -15,12 +24,35 @@ function option(args, name) {
|
|
|
15
24
|
args.splice(index, 2);
|
|
16
25
|
return value;
|
|
17
26
|
}
|
|
18
|
-
function
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return
|
|
27
|
+
async function requireAgentRoot() {
|
|
28
|
+
const root = await findAgentRoot();
|
|
29
|
+
if (!root) {
|
|
30
|
+
throw new Error("No OpenComputer agent repository found. Run `opencomputer init <template>` first.");
|
|
31
|
+
}
|
|
32
|
+
return root;
|
|
33
|
+
}
|
|
34
|
+
async function connectGoogle(client) {
|
|
35
|
+
const started = await client.linkGoogle("gmail");
|
|
36
|
+
if (started.status === "connected") {
|
|
37
|
+
process.stdout.write("Gmail is already connected.\n");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!started.authorizationUrl) {
|
|
41
|
+
throw new Error("Gmail did not return an authorization link.");
|
|
42
|
+
}
|
|
43
|
+
process.stdout.write(`Authorize Gmail:\n${started.authorizationUrl}\n`);
|
|
44
|
+
openBrowser(started.authorizationUrl);
|
|
45
|
+
const deadline = started.expiresAt
|
|
46
|
+
? Date.parse(started.expiresAt)
|
|
47
|
+
: Date.now() + 5 * 60_000;
|
|
48
|
+
while (Date.now() < deadline) {
|
|
49
|
+
await new Promise((resolve) => setTimeout(resolve, 1_500));
|
|
50
|
+
if ((await client.googleConnection("gmail")).status === "connected") {
|
|
51
|
+
process.stdout.write("Gmail connected.\n");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
throw new Error("Gmail authorization timed out.");
|
|
24
56
|
}
|
|
25
57
|
async function waitForEvent(client, sessionId, after, terminal, onEvent, timeoutMs) {
|
|
26
58
|
const deadline = Date.now() + timeoutMs;
|
|
@@ -137,6 +169,32 @@ export async function runCommand(command, rawArgs, globals) {
|
|
|
137
169
|
}
|
|
138
170
|
return;
|
|
139
171
|
}
|
|
172
|
+
if (command === "init") {
|
|
173
|
+
const templateId = args.shift();
|
|
174
|
+
if (!templateId) {
|
|
175
|
+
throw new Error("Usage: opencomputer init <template> [directory]");
|
|
176
|
+
}
|
|
177
|
+
const directory = args.shift() ?? templateId;
|
|
178
|
+
if (args.length)
|
|
179
|
+
throw new Error(`Unexpected argument: ${args[0]}`);
|
|
180
|
+
const template = (await client.templates()).find((candidate) => candidate.id === templateId);
|
|
181
|
+
if (!template)
|
|
182
|
+
throw new Error(`Unknown agent template: ${templateId}`);
|
|
183
|
+
const initialized = await initializeAgentProject(template, directory);
|
|
184
|
+
if (globals.json)
|
|
185
|
+
printJSON(initialized);
|
|
186
|
+
else {
|
|
187
|
+
process.stdout.write(`Created ${template.name}\n` +
|
|
188
|
+
`Directory: ${initialized.root}\n` +
|
|
189
|
+
`Agent ID: ${initialized.manifest.id}\n` +
|
|
190
|
+
`Identity: opencomputer.toml\n\n` +
|
|
191
|
+
`Next:\n` +
|
|
192
|
+
` cd ${directory}\n` +
|
|
193
|
+
` npm install\n` +
|
|
194
|
+
` opencomputer dev\n`);
|
|
195
|
+
}
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
140
198
|
if (command === "agents") {
|
|
141
199
|
const agents = await client.agents();
|
|
142
200
|
if (globals.json)
|
|
@@ -152,23 +210,29 @@ export async function runCommand(command, rawArgs, globals) {
|
|
|
152
210
|
return;
|
|
153
211
|
}
|
|
154
212
|
if (command === "deploy") {
|
|
155
|
-
const name = option(args, "--name");
|
|
156
213
|
const alias = option(args, "--alias") ?? "production";
|
|
157
|
-
const template = args.shift();
|
|
158
|
-
if (!template) {
|
|
159
|
-
throw new Error("Usage: opencomputer deploy <template> [--name <agent>]");
|
|
160
|
-
}
|
|
161
214
|
if (args.length)
|
|
162
215
|
throw new Error(`Unexpected argument: ${args[0]}`);
|
|
163
|
-
const
|
|
216
|
+
const built = await buildAgentArtifact(await requireAgentRoot());
|
|
217
|
+
process.stderr.write(`Built ${built.agentId} in ${String(built.elapsedMs)}ms\n`);
|
|
218
|
+
const deployment = await client.registerDeployment({
|
|
219
|
+
agentId: built.agentId,
|
|
220
|
+
alias,
|
|
221
|
+
channels: built.channels,
|
|
222
|
+
connections: built.connections,
|
|
223
|
+
source: {
|
|
224
|
+
digest: built.digest,
|
|
225
|
+
size: built.body.byteLength,
|
|
226
|
+
contentType: "application/vnd.opencomputer.agent+json",
|
|
227
|
+
body: built.body.toString("utf8"),
|
|
228
|
+
},
|
|
229
|
+
});
|
|
164
230
|
if (globals.json)
|
|
165
|
-
printJSON(
|
|
231
|
+
printJSON(deployment);
|
|
166
232
|
else {
|
|
167
|
-
process.stdout.write(`Deployed ${
|
|
168
|
-
`
|
|
169
|
-
`
|
|
170
|
-
`Deployment: ${result.deployment.id}\n\n` +
|
|
171
|
-
`Run it:\n opencomputer run ${result.deployment.agentId} "Your prompt"\n`);
|
|
233
|
+
process.stdout.write(`Deployed ${deployment.agentId}@${deployment.alias}\n` +
|
|
234
|
+
`Deployment: ${deployment.id}\n` +
|
|
235
|
+
`Source ID: opencomputer.toml\n`);
|
|
172
236
|
}
|
|
173
237
|
return;
|
|
174
238
|
}
|
|
@@ -184,6 +248,61 @@ export async function runCommand(command, rawArgs, globals) {
|
|
|
184
248
|
printJSON(result);
|
|
185
249
|
return;
|
|
186
250
|
}
|
|
251
|
+
if (command === "dev") {
|
|
252
|
+
if (args.length)
|
|
253
|
+
throw new Error(`Unexpected argument: ${args[0]}`);
|
|
254
|
+
await runOpenCode([], config);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (command === "session") {
|
|
258
|
+
const prompt = args.join(" ").trim();
|
|
259
|
+
await runOpenCode(prompt ? ["run", prompt] : [], config);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (command === "tools") {
|
|
263
|
+
const action = args.shift();
|
|
264
|
+
const tool = args.shift();
|
|
265
|
+
if (action !== "add" || tool !== "gmail" || args.length) {
|
|
266
|
+
throw new Error("Usage: opencomputer tools add gmail");
|
|
267
|
+
}
|
|
268
|
+
const files = await addGmailTools(await requireAgentRoot());
|
|
269
|
+
process.stdout.write(`${files.map((file) => `Created ${file}`).join("\n")}\n`);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (command === "connect") {
|
|
273
|
+
const provider = args.shift();
|
|
274
|
+
if ((provider !== "google" && provider !== "gmail") || args.length) {
|
|
275
|
+
throw new Error("Usage: opencomputer connect google");
|
|
276
|
+
}
|
|
277
|
+
await connectGoogle(client);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (command === "connections") {
|
|
281
|
+
const action = args.shift();
|
|
282
|
+
if (action !== "list" || args.length) {
|
|
283
|
+
throw new Error("Usage: opencomputer connections list");
|
|
284
|
+
}
|
|
285
|
+
const connections = await client.connections();
|
|
286
|
+
if (!connections.length)
|
|
287
|
+
process.stdout.write("No connections.\n");
|
|
288
|
+
else {
|
|
289
|
+
for (const connection of connections) {
|
|
290
|
+
process.stdout.write(`${connection.provider.padEnd(10)} ${connection.status.padEnd(11)} ` +
|
|
291
|
+
`${connection.displayName ?? connection.label}\n`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (command === "channels") {
|
|
297
|
+
const action = args.shift();
|
|
298
|
+
const channel = args.shift();
|
|
299
|
+
if (action !== "add" || channel !== "slack" || args.length) {
|
|
300
|
+
throw new Error("Usage: opencomputer channels add slack");
|
|
301
|
+
}
|
|
302
|
+
const files = await addSlackChannel(await requireAgentRoot());
|
|
303
|
+
process.stdout.write(`${files.map((file) => `Created ${file}`).join("\n")}\n`);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
187
306
|
throw new Error(`Unknown command: ${command}`);
|
|
188
307
|
}
|
|
189
308
|
//# sourceMappingURL=commands.js.map
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runCommand } from "./commands.js";
|
|
3
|
-
const VERSION = "0.1
|
|
3
|
+
const VERSION = "0.2.1";
|
|
4
4
|
function takeOption(args, name) {
|
|
5
5
|
const index = args.indexOf(name);
|
|
6
6
|
if (index < 0)
|
|
@@ -20,7 +20,7 @@ function takeFlag(args, name) {
|
|
|
20
20
|
return true;
|
|
21
21
|
}
|
|
22
22
|
function help() {
|
|
23
|
-
process.stdout.write(`OpenComputer —
|
|
23
|
+
process.stdout.write(`OpenComputer — build, test, connect, and deploy agents as code
|
|
24
24
|
|
|
25
25
|
Usage:
|
|
26
26
|
opencomputer login [--no-browser] [--force]
|
|
@@ -28,7 +28,14 @@ Usage:
|
|
|
28
28
|
opencomputer whoami
|
|
29
29
|
opencomputer templates
|
|
30
30
|
opencomputer agents
|
|
31
|
-
opencomputer
|
|
31
|
+
opencomputer init <template> [directory]
|
|
32
|
+
opencomputer dev
|
|
33
|
+
opencomputer session [prompt] [--local|--remote]
|
|
34
|
+
opencomputer tools add gmail
|
|
35
|
+
opencomputer connect google
|
|
36
|
+
opencomputer channels add slack
|
|
37
|
+
opencomputer channels connect slack [--local|--remote]
|
|
38
|
+
opencomputer deploy [--alias <alias>]
|
|
32
39
|
opencomputer run <agent> <prompt> [--keep]
|
|
33
40
|
|
|
34
41
|
Global options:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAC;AAE/D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAS,UAAU,CAAC,IAAc,EAAE,IAAY;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAC;AAE/D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAS,UAAU,CAAC,IAAc,EAAE,IAAY;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBtB,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7C,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAkB;QAC7B,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC;QACrC,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC;QACrC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;KAC/B,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC5E,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/local.d.ts
ADDED
package/dist/local.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { randomBytes, timingSafeEqual } from "node:crypto";
|
|
3
|
+
import { access } from "node:fs/promises";
|
|
4
|
+
import { createServer } from "node:http";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { findAgentRoot, prepareAgent } from "./project.js";
|
|
7
|
+
function sameToken(left, right) {
|
|
8
|
+
const leftBytes = Buffer.from(left);
|
|
9
|
+
const rightBytes = Buffer.from(right);
|
|
10
|
+
return (leftBytes.length === rightBytes.length &&
|
|
11
|
+
timingSafeEqual(leftBytes, rightBytes));
|
|
12
|
+
}
|
|
13
|
+
async function readBody(request) {
|
|
14
|
+
const chunks = [];
|
|
15
|
+
let size = 0;
|
|
16
|
+
for await (const chunk of request) {
|
|
17
|
+
const buffer = Buffer.from(chunk);
|
|
18
|
+
size += buffer.byteLength;
|
|
19
|
+
if (size > 2 * 1024 * 1024) {
|
|
20
|
+
throw new Error("Connection request is too large");
|
|
21
|
+
}
|
|
22
|
+
chunks.push(buffer);
|
|
23
|
+
}
|
|
24
|
+
return Buffer.concat(chunks);
|
|
25
|
+
}
|
|
26
|
+
async function startConnectionProxy(config) {
|
|
27
|
+
if (!config.apiKey) {
|
|
28
|
+
throw new Error("Not logged in. Run `opencomputer login` before testing connected tools.");
|
|
29
|
+
}
|
|
30
|
+
const token = randomBytes(32).toString("base64url");
|
|
31
|
+
const server = createServer((request, response) => {
|
|
32
|
+
void (async () => {
|
|
33
|
+
if (request.method !== "POST" || request.url !== "/google/fetch") {
|
|
34
|
+
response.writeHead(404).end();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const authorization = request.headers.authorization;
|
|
38
|
+
if (!authorization?.startsWith("Bearer ") ||
|
|
39
|
+
!sameToken(authorization.slice(7), token)) {
|
|
40
|
+
response.writeHead(401).end();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const upstream = await fetch(`${config.apiUrl}/api/managed-agents/connections/google/fetch`, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
headers: {
|
|
46
|
+
"content-type": "application/json",
|
|
47
|
+
"x-api-key": config.apiKey,
|
|
48
|
+
},
|
|
49
|
+
body: await readBody(request),
|
|
50
|
+
signal: AbortSignal.timeout(30_000),
|
|
51
|
+
});
|
|
52
|
+
response.writeHead(upstream.status, {
|
|
53
|
+
"content-type": upstream.headers.get("content-type") ?? "application/json",
|
|
54
|
+
});
|
|
55
|
+
response.end(Buffer.from(await upstream.arrayBuffer()));
|
|
56
|
+
})().catch((error) => {
|
|
57
|
+
response.writeHead(502, { "content-type": "application/json" });
|
|
58
|
+
response.end(JSON.stringify({
|
|
59
|
+
error: {
|
|
60
|
+
message: error instanceof Error
|
|
61
|
+
? error.message
|
|
62
|
+
: "Connection proxy failed",
|
|
63
|
+
},
|
|
64
|
+
}));
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
await new Promise((resolve, reject) => {
|
|
68
|
+
server.once("error", reject);
|
|
69
|
+
server.listen(0, "127.0.0.1", resolve);
|
|
70
|
+
});
|
|
71
|
+
const address = server.address();
|
|
72
|
+
if (!address || typeof address === "string") {
|
|
73
|
+
server.close();
|
|
74
|
+
throw new Error("Could not start the local connection proxy");
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
url: `http://127.0.0.1:${String(address.port)}`,
|
|
78
|
+
token,
|
|
79
|
+
close: () => new Promise((resolve) => server.close(() => resolve())),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export async function runOpenCode(args, config) {
|
|
83
|
+
const root = await findAgentRoot();
|
|
84
|
+
if (!root) {
|
|
85
|
+
throw new Error("No OpenComputer agent repository found. Run `opencomputer init <template>` first.");
|
|
86
|
+
}
|
|
87
|
+
const runtime = await prepareAgent(root);
|
|
88
|
+
const connections = await startConnectionProxy(config);
|
|
89
|
+
const localExecutable = resolve(root, "node_modules", ".bin", process.platform === "win32" ? "opencode.cmd" : "opencode");
|
|
90
|
+
const executable = await access(localExecutable)
|
|
91
|
+
.then(() => localExecutable)
|
|
92
|
+
.catch(() => process.platform === "win32" ? "opencode.cmd" : "opencode");
|
|
93
|
+
try {
|
|
94
|
+
await new Promise((resolve, reject) => {
|
|
95
|
+
const child = spawn(executable, args, {
|
|
96
|
+
cwd: runtime,
|
|
97
|
+
env: {
|
|
98
|
+
...process.env,
|
|
99
|
+
OPENCOMPUTER_CONNECTIONS_URL: connections.url,
|
|
100
|
+
OPENCOMPUTER_CONNECTION_TOKEN: connections.token,
|
|
101
|
+
},
|
|
102
|
+
stdio: "inherit",
|
|
103
|
+
});
|
|
104
|
+
child.once("error", (error) => {
|
|
105
|
+
reject(error instanceof Error && "code" in error && error.code === "ENOENT"
|
|
106
|
+
? new Error("OpenCode is not installed. Run `npm install` first.")
|
|
107
|
+
: error);
|
|
108
|
+
});
|
|
109
|
+
child.once("exit", (code, signal) => {
|
|
110
|
+
if (code === 0)
|
|
111
|
+
resolve();
|
|
112
|
+
else {
|
|
113
|
+
reject(new Error(`OpenCode exited ${signal ? `with ${signal}` : `with code ${String(code)}`}`));
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
await connections.close();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ManagedAgentTemplate } from "./api.js";
|
|
2
|
+
export interface AgentManifest {
|
|
3
|
+
schema: 1;
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
template?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface BuiltAgentArtifact {
|
|
9
|
+
agentId: string;
|
|
10
|
+
channels: string[];
|
|
11
|
+
connections: string[];
|
|
12
|
+
body: Buffer;
|
|
13
|
+
digest: string;
|
|
14
|
+
elapsedMs: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function agentIdFromName(value: string): string;
|
|
17
|
+
export declare function writeManifest(root: string, manifest: AgentManifest): Promise<void>;
|
|
18
|
+
export declare function readManifest(root: string): Promise<AgentManifest>;
|
|
19
|
+
export declare function findAgentRoot(startDirectory?: string): Promise<string | undefined>;
|
|
20
|
+
export declare function addGmailTools(root: string): Promise<string[]>;
|
|
21
|
+
export declare function addSlackChannel(root: string): Promise<string[]>;
|
|
22
|
+
export declare function initializeAgentProject(template: ManagedAgentTemplate, directory: string): Promise<{
|
|
23
|
+
root: string;
|
|
24
|
+
manifest: AgentManifest;
|
|
25
|
+
files: string[];
|
|
26
|
+
}>;
|
|
27
|
+
export declare function prepareAgent(root: string): Promise<string>;
|
|
28
|
+
export declare function buildAgentArtifact(root: string): Promise<BuiltAgentArtifact>;
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { access, cp, mkdir, readFile, readdir, rm, writeFile, } from "node:fs/promises";
|
|
3
|
+
import { basename, dirname, relative, resolve } from "node:path";
|
|
4
|
+
const AGENT_ID_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
5
|
+
async function exists(path) {
|
|
6
|
+
try {
|
|
7
|
+
await access(path);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function agentIdFromName(value) {
|
|
15
|
+
const id = value
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
18
|
+
.replace(/^-+|-+$/g, "");
|
|
19
|
+
if (!id || !AGENT_ID_PATTERN.test(id)) {
|
|
20
|
+
throw new Error("Agent names must contain letters or numbers");
|
|
21
|
+
}
|
|
22
|
+
return id;
|
|
23
|
+
}
|
|
24
|
+
function templateInstructions(template) {
|
|
25
|
+
const integrations = template.integrations.length
|
|
26
|
+
? template.integrations.join(", ")
|
|
27
|
+
: "the tools installed in this repository";
|
|
28
|
+
return `# ${template.name}
|
|
29
|
+
|
|
30
|
+
You are an OpenComputer agent responsible for this job:
|
|
31
|
+
|
|
32
|
+
${template.description}
|
|
33
|
+
|
|
34
|
+
## How to work
|
|
35
|
+
|
|
36
|
+
- Inspect the workspace and available tools before acting.
|
|
37
|
+
- Use connected ${integrations} tools only when they are available.
|
|
38
|
+
- If a required tool or connection is missing, say exactly what is missing.
|
|
39
|
+
- Keep evidence, assumptions, and recommendations clearly separated.
|
|
40
|
+
- Prepare drafts before consequential external actions.
|
|
41
|
+
- Require explicit approval before sending messages, changing records, moving
|
|
42
|
+
money, cancelling services, or publishing content.
|
|
43
|
+
- Finish with what you completed, what remains, and decisions the user must
|
|
44
|
+
make.
|
|
45
|
+
|
|
46
|
+
## Example requests
|
|
47
|
+
|
|
48
|
+
${template.suggestedPrompts.map((prompt) => `- ${prompt}`).join("\n")}
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
function gmailToolSource() {
|
|
52
|
+
return `import { tool } from "@opencode-ai/plugin";
|
|
53
|
+
|
|
54
|
+
async function gmail(input: {
|
|
55
|
+
path: string;
|
|
56
|
+
method?: string;
|
|
57
|
+
body?: unknown;
|
|
58
|
+
connection?: string;
|
|
59
|
+
}): Promise<unknown> {
|
|
60
|
+
const base = process.env.OPENCOMPUTER_CONNECTIONS_URL;
|
|
61
|
+
const token = process.env.OPENCOMPUTER_CONNECTION_TOKEN;
|
|
62
|
+
if (!base || !token) {
|
|
63
|
+
throw new Error("OpenComputer connections are unavailable");
|
|
64
|
+
}
|
|
65
|
+
const response = await fetch(\`\${base}/google/fetch\`, {
|
|
66
|
+
method: "POST",
|
|
67
|
+
headers: {
|
|
68
|
+
authorization: \`Bearer \${token}\`,
|
|
69
|
+
"content-type": "application/json",
|
|
70
|
+
},
|
|
71
|
+
body: JSON.stringify({
|
|
72
|
+
service: "gmail",
|
|
73
|
+
label: input.connection,
|
|
74
|
+
method: input.method,
|
|
75
|
+
path: input.path,
|
|
76
|
+
headers: input.body ? { "content-type": "application/json" } : undefined,
|
|
77
|
+
body: input.body ? JSON.stringify(input.body) : undefined,
|
|
78
|
+
}),
|
|
79
|
+
});
|
|
80
|
+
const result = await response.json() as {
|
|
81
|
+
status?: number;
|
|
82
|
+
body?: string;
|
|
83
|
+
error?: { message?: string };
|
|
84
|
+
};
|
|
85
|
+
if (!response.ok || !result.status || result.status >= 400) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
result.error?.message ??
|
|
88
|
+
result.body ??
|
|
89
|
+
\`Gmail returned \${String(result.status)}\`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
return result.body ? JSON.parse(result.body) : {};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const search = tool({
|
|
96
|
+
description: "Search Gmail messages using a Gmail search query.",
|
|
97
|
+
args: {
|
|
98
|
+
query: tool.schema.string(),
|
|
99
|
+
maxResults: tool.schema.number().min(1).max(100).default(20),
|
|
100
|
+
connection: tool.schema.string().optional(),
|
|
101
|
+
},
|
|
102
|
+
async execute(args) {
|
|
103
|
+
const query = encodeURIComponent(args.query);
|
|
104
|
+
return JSON.stringify(await gmail({
|
|
105
|
+
path: \`/gmail/v1/users/me/messages?q=\${query}&maxResults=\${args.maxResults}\`,
|
|
106
|
+
connection: args.connection,
|
|
107
|
+
}));
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
export const read = tool({
|
|
112
|
+
description: "Read a Gmail message by message ID.",
|
|
113
|
+
args: {
|
|
114
|
+
messageId: tool.schema.string(),
|
|
115
|
+
connection: tool.schema.string().optional(),
|
|
116
|
+
},
|
|
117
|
+
async execute(args) {
|
|
118
|
+
return JSON.stringify(await gmail({
|
|
119
|
+
path: \`/gmail/v1/users/me/messages/\${encodeURIComponent(args.messageId)}?format=full\`,
|
|
120
|
+
connection: args.connection,
|
|
121
|
+
}));
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
export const modify = tool({
|
|
126
|
+
description: "Add or remove Gmail labels on a message.",
|
|
127
|
+
args: {
|
|
128
|
+
messageId: tool.schema.string(),
|
|
129
|
+
addLabelIds: tool.schema.array(tool.schema.string()).default([]),
|
|
130
|
+
removeLabelIds: tool.schema.array(tool.schema.string()).default([]),
|
|
131
|
+
connection: tool.schema.string().optional(),
|
|
132
|
+
},
|
|
133
|
+
async execute(args) {
|
|
134
|
+
return JSON.stringify(await gmail({
|
|
135
|
+
method: "POST",
|
|
136
|
+
path: \`/gmail/v1/users/me/messages/\${encodeURIComponent(args.messageId)}/modify\`,
|
|
137
|
+
body: {
|
|
138
|
+
addLabelIds: args.addLabelIds,
|
|
139
|
+
removeLabelIds: args.removeLabelIds,
|
|
140
|
+
},
|
|
141
|
+
connection: args.connection,
|
|
142
|
+
}));
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
export const send = tool({
|
|
147
|
+
description: "Send an email through Gmail.",
|
|
148
|
+
args: {
|
|
149
|
+
to: tool.schema.string(),
|
|
150
|
+
subject: tool.schema.string(),
|
|
151
|
+
body: tool.schema.string(),
|
|
152
|
+
connection: tool.schema.string().optional(),
|
|
153
|
+
},
|
|
154
|
+
async execute(args) {
|
|
155
|
+
if (/[\\r\\n]/.test(args.to) || /[\\r\\n]/.test(args.subject)) {
|
|
156
|
+
throw new Error("Email recipients and subjects cannot contain newlines");
|
|
157
|
+
}
|
|
158
|
+
const message = [
|
|
159
|
+
\`To: \${args.to}\`,
|
|
160
|
+
\`Subject: \${args.subject}\`,
|
|
161
|
+
"Content-Type: text/plain; charset=utf-8",
|
|
162
|
+
"",
|
|
163
|
+
args.body,
|
|
164
|
+
].join("\\r\\n");
|
|
165
|
+
return JSON.stringify(await gmail({
|
|
166
|
+
method: "POST",
|
|
167
|
+
path: "/gmail/v1/users/me/messages/send",
|
|
168
|
+
body: { raw: Buffer.from(message).toString("base64url") },
|
|
169
|
+
connection: args.connection,
|
|
170
|
+
}));
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
`;
|
|
174
|
+
}
|
|
175
|
+
export async function writeManifest(root, manifest) {
|
|
176
|
+
if (!AGENT_ID_PATTERN.test(manifest.id)) {
|
|
177
|
+
throw new Error("Agent IDs must use lowercase letters, numbers, and single hyphens");
|
|
178
|
+
}
|
|
179
|
+
await writeFile(resolve(root, "opencomputer.toml"), [
|
|
180
|
+
"# Committed agent identity. Keep `id` stable across deployments.",
|
|
181
|
+
"schema = 1",
|
|
182
|
+
`id = ${JSON.stringify(manifest.id)}`,
|
|
183
|
+
`name = ${JSON.stringify(manifest.name)}`,
|
|
184
|
+
...(manifest.template
|
|
185
|
+
? [`template = ${JSON.stringify(manifest.template)}`]
|
|
186
|
+
: []),
|
|
187
|
+
"",
|
|
188
|
+
].join("\n"));
|
|
189
|
+
}
|
|
190
|
+
function tomlString(source, key) {
|
|
191
|
+
const match = source.match(new RegExp(`^\\s*${key}\\s*=\\s*("(?:[^"\\\\]|\\\\.)*")\\s*$`, "m"));
|
|
192
|
+
if (!match?.[1])
|
|
193
|
+
return undefined;
|
|
194
|
+
try {
|
|
195
|
+
const value = JSON.parse(match[1]);
|
|
196
|
+
return typeof value === "string" ? value : undefined;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export async function readManifest(root) {
|
|
203
|
+
const source = await readFile(resolve(root, "opencomputer.toml"), "utf8");
|
|
204
|
+
const schema = Number(source.match(/^\s*schema\s*=\s*(\d+)\s*$/m)?.[1]);
|
|
205
|
+
const id = tomlString(source, "id");
|
|
206
|
+
const name = tomlString(source, "name");
|
|
207
|
+
const template = tomlString(source, "template");
|
|
208
|
+
if (schema !== 1 || !id || !name || !AGENT_ID_PATTERN.test(id)) {
|
|
209
|
+
throw new Error("opencomputer.toml must contain schema = 1 and a valid id and name");
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
schema: 1,
|
|
213
|
+
id,
|
|
214
|
+
name,
|
|
215
|
+
...(template ? { template } : {}),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
export async function findAgentRoot(startDirectory = process.cwd()) {
|
|
219
|
+
let directory = resolve(startDirectory);
|
|
220
|
+
for (;;) {
|
|
221
|
+
if ((await exists(resolve(directory, "opencomputer.toml"))) &&
|
|
222
|
+
(await exists(resolve(directory, "instructions.md")))) {
|
|
223
|
+
return directory;
|
|
224
|
+
}
|
|
225
|
+
const parent = dirname(directory);
|
|
226
|
+
if (parent === directory)
|
|
227
|
+
return undefined;
|
|
228
|
+
directory = parent;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export async function addGmailTools(root) {
|
|
232
|
+
await mkdir(resolve(root, "tools"), { recursive: true });
|
|
233
|
+
await mkdir(resolve(root, "connections"), { recursive: true });
|
|
234
|
+
await writeFile(resolve(root, "tools", "gmail.ts"), gmailToolSource());
|
|
235
|
+
await writeFile(resolve(root, "connections", "google.json"), `${JSON.stringify({
|
|
236
|
+
provider: "google",
|
|
237
|
+
services: ["gmail"],
|
|
238
|
+
scopes: [
|
|
239
|
+
"openid",
|
|
240
|
+
"email",
|
|
241
|
+
"https://www.googleapis.com/auth/gmail.modify",
|
|
242
|
+
],
|
|
243
|
+
}, null, 2)}\n`);
|
|
244
|
+
return ["tools/gmail.ts", "connections/google.json"];
|
|
245
|
+
}
|
|
246
|
+
export async function addSlackChannel(root) {
|
|
247
|
+
await mkdir(resolve(root, "channels"), { recursive: true });
|
|
248
|
+
await mkdir(resolve(root, "slack"), { recursive: true });
|
|
249
|
+
await writeFile(resolve(root, "channels", "slack.ts"), `export default {
|
|
250
|
+
type: "slack",
|
|
251
|
+
events: ["app_mention", "message.im"],
|
|
252
|
+
};
|
|
253
|
+
`);
|
|
254
|
+
const manifest = await readManifest(root);
|
|
255
|
+
await writeFile(resolve(root, "slack", "manifest.json"), `${JSON.stringify({
|
|
256
|
+
_metadata: { major_version: 1, minor_version: 1 },
|
|
257
|
+
display_information: {
|
|
258
|
+
name: manifest.name,
|
|
259
|
+
description: `Run the ${manifest.name} OpenComputer agent from Slack.`,
|
|
260
|
+
background_color: "#0B1220",
|
|
261
|
+
},
|
|
262
|
+
features: {
|
|
263
|
+
bot_user: { display_name: manifest.name, always_online: true },
|
|
264
|
+
},
|
|
265
|
+
oauth_config: {
|
|
266
|
+
scopes: {
|
|
267
|
+
bot: [
|
|
268
|
+
"app_mentions:read",
|
|
269
|
+
"assistant:write",
|
|
270
|
+
"chat:write",
|
|
271
|
+
"im:history",
|
|
272
|
+
],
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
settings: {
|
|
276
|
+
event_subscriptions: {
|
|
277
|
+
bot_events: ["app_mention", "message.im"],
|
|
278
|
+
},
|
|
279
|
+
socket_mode_enabled: true,
|
|
280
|
+
token_rotation_enabled: false,
|
|
281
|
+
},
|
|
282
|
+
}, null, 2)}\n`);
|
|
283
|
+
return ["channels/slack.ts", "slack/manifest.json"];
|
|
284
|
+
}
|
|
285
|
+
export async function initializeAgentProject(template, directory) {
|
|
286
|
+
const root = resolve(directory);
|
|
287
|
+
if (await exists(root))
|
|
288
|
+
throw new Error(`Target already exists: ${root}`);
|
|
289
|
+
for (const path of [
|
|
290
|
+
"tools",
|
|
291
|
+
"connections",
|
|
292
|
+
"skills",
|
|
293
|
+
"channels",
|
|
294
|
+
"workspace",
|
|
295
|
+
"evals",
|
|
296
|
+
]) {
|
|
297
|
+
await mkdir(resolve(root, path), { recursive: true });
|
|
298
|
+
}
|
|
299
|
+
const manifest = {
|
|
300
|
+
schema: 1,
|
|
301
|
+
id: agentIdFromName(basename(root)),
|
|
302
|
+
name: template.name,
|
|
303
|
+
template: template.id,
|
|
304
|
+
};
|
|
305
|
+
await writeManifest(root, manifest);
|
|
306
|
+
await writeFile(resolve(root, "opencomputer.config.ts"), `export default {
|
|
307
|
+
runtime: "opencode",
|
|
308
|
+
region: "auto",
|
|
309
|
+
};
|
|
310
|
+
`);
|
|
311
|
+
await writeFile(resolve(root, "agent.ts"), `export default {
|
|
312
|
+
model: process.env.OPENCOMPUTER_MODEL,
|
|
313
|
+
permissions: {
|
|
314
|
+
shell: "ask",
|
|
315
|
+
files: "allow",
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
`);
|
|
319
|
+
await writeFile(resolve(root, "instructions.md"), templateInstructions(template));
|
|
320
|
+
await writeFile(resolve(root, "workspace", "README.md"), "# Agent workspace\n");
|
|
321
|
+
await writeFile(resolve(root, ".gitignore"), "node_modules/\n.opencomputer/\n.env\n");
|
|
322
|
+
await writeFile(resolve(root, "package.json"), `${JSON.stringify({
|
|
323
|
+
name: `opencomputer-agent-${manifest.id}`,
|
|
324
|
+
version: "0.1.0",
|
|
325
|
+
private: true,
|
|
326
|
+
type: "module",
|
|
327
|
+
scripts: {
|
|
328
|
+
dev: "opencomputer dev",
|
|
329
|
+
test: "opencomputer session",
|
|
330
|
+
deploy: "opencomputer deploy",
|
|
331
|
+
},
|
|
332
|
+
devDependencies: {
|
|
333
|
+
"@opencomputer/cli": "^0.2.1",
|
|
334
|
+
"@opencode-ai/plugin": "^1.18.4",
|
|
335
|
+
"opencode-ai": "1.18.4",
|
|
336
|
+
},
|
|
337
|
+
}, null, 2)}\n`);
|
|
338
|
+
const files = [
|
|
339
|
+
"opencomputer.toml",
|
|
340
|
+
"opencomputer.config.ts",
|
|
341
|
+
"package.json",
|
|
342
|
+
".gitignore",
|
|
343
|
+
"agent.ts",
|
|
344
|
+
"instructions.md",
|
|
345
|
+
"workspace/README.md",
|
|
346
|
+
];
|
|
347
|
+
if (template.integrations.includes("Gmail")) {
|
|
348
|
+
files.push(...(await addGmailTools(root)));
|
|
349
|
+
}
|
|
350
|
+
if (template.integrations.includes("Slack")) {
|
|
351
|
+
files.push(...(await addSlackChannel(root)));
|
|
352
|
+
}
|
|
353
|
+
return { root, manifest, files };
|
|
354
|
+
}
|
|
355
|
+
export async function prepareAgent(root) {
|
|
356
|
+
const runtime = resolve(root, ".opencomputer", "runtime");
|
|
357
|
+
await rm(runtime, { recursive: true, force: true });
|
|
358
|
+
await mkdir(runtime, { recursive: true });
|
|
359
|
+
await writeFile(resolve(runtime, "AGENTS.md"), await readFile(resolve(root, "instructions.md"), "utf8"));
|
|
360
|
+
for (const directory of ["skills", "tools"]) {
|
|
361
|
+
const source = resolve(root, directory);
|
|
362
|
+
if (await exists(source)) {
|
|
363
|
+
await mkdir(resolve(runtime, ".opencode"), { recursive: true });
|
|
364
|
+
await cp(source, resolve(runtime, ".opencode", directory), {
|
|
365
|
+
recursive: true,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
const workspace = resolve(root, "workspace");
|
|
370
|
+
if (await exists(workspace)) {
|
|
371
|
+
await cp(workspace, runtime, { recursive: true });
|
|
372
|
+
}
|
|
373
|
+
return runtime;
|
|
374
|
+
}
|
|
375
|
+
async function collectNames(root, type) {
|
|
376
|
+
try {
|
|
377
|
+
return (await readdir(resolve(root, type), {
|
|
378
|
+
withFileTypes: true,
|
|
379
|
+
}))
|
|
380
|
+
.filter((entry) => entry.isFile())
|
|
381
|
+
.map((entry) => entry.name.replace(/\.[^.]+$/, "").toLowerCase())
|
|
382
|
+
.sort();
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
return [];
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
async function collectFiles(root, directory = root) {
|
|
389
|
+
const result = [];
|
|
390
|
+
for (const entry of (await readdir(directory, { withFileTypes: true })).sort((left, right) => left.name.localeCompare(right.name))) {
|
|
391
|
+
const path = resolve(directory, entry.name);
|
|
392
|
+
if (entry.isDirectory())
|
|
393
|
+
result.push(...(await collectFiles(root, path)));
|
|
394
|
+
else if (entry.isFile()) {
|
|
395
|
+
result.push({
|
|
396
|
+
path: relative(root, path).split("\\").join("/"),
|
|
397
|
+
content: (await readFile(path)).toString("base64"),
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return result;
|
|
402
|
+
}
|
|
403
|
+
export async function buildAgentArtifact(root) {
|
|
404
|
+
const startedAt = performance.now();
|
|
405
|
+
const manifest = await readManifest(root);
|
|
406
|
+
const runtime = await prepareAgent(root);
|
|
407
|
+
const channels = await collectNames(root, "channels");
|
|
408
|
+
const connections = await collectNames(root, "connections");
|
|
409
|
+
const body = Buffer.from(JSON.stringify({
|
|
410
|
+
version: 1,
|
|
411
|
+
channels,
|
|
412
|
+
files: await collectFiles(runtime),
|
|
413
|
+
}));
|
|
414
|
+
return {
|
|
415
|
+
agentId: manifest.id,
|
|
416
|
+
channels,
|
|
417
|
+
connections,
|
|
418
|
+
body,
|
|
419
|
+
digest: createHash("sha256").update(body).digest("hex"),
|
|
420
|
+
elapsedMs: Math.round(performance.now() - startedAt),
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,MAAM,EACN,EAAE,EACF,KAAK,EACL,QAAQ,EACR,OAAO,EACP,EAAE,EACF,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBjE,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAEtD,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,EAAE,GAAG,KAAK;SACb,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA8B;IAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM;QAC/C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,wCAAwC,CAAC;IAC7C,OAAO,KAAK,QAAQ,CAAC,IAAI;;;;EAIzB,QAAQ,CAAC,WAAW;;;;;kBAKJ,YAAY;;;;;;;;;;;EAW5B,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACpE,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyHR,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,QAAuB;IAEvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAClC;QACE,kEAAkE;QAClE,YAAY;QACZ,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QACrC,UAAU,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzC,GAAG,CAAC,QAAQ,CAAC,QAAQ;YACnB,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,CAAC,CAAC,EAAE,CAAC;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,GAAW;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CACxB,IAAI,MAAM,CAAC,QAAQ,GAAG,uCAAuC,EAAE,GAAG,CAAC,CACpE,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC,CACjD,CAAC;IACF,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,CAAC;QACT,EAAE;QACF,IAAI;QACJ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;IAE9B,IAAI,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,SAAS,CAAC;QACR,IACE,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;YACvD,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACrD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,EAC3C,GAAG,IAAI,CAAC,SAAS,CACf;QACE,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,MAAM,EAAE;YACN,QAAQ;YACR,OAAO;YACP,8CAA8C;SAC/C;KACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;IACF,OAAO,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EACrC;;;;CAIH,CACE,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,EACvC,GAAG,IAAI,CAAC,SAAS,CACf;QACE,SAAS,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;QACjD,mBAAmB,EAAE;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,WAAW,QAAQ,CAAC,IAAI,iCAAiC;YACtE,gBAAgB,EAAE,SAAS;SAC5B;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAC/D;QACD,YAAY,EAAE;YACZ,MAAM,EAAE;gBACN,GAAG,EAAE;oBACH,mBAAmB;oBACnB,iBAAiB;oBACjB,YAAY;oBACZ,YAAY;iBACb;aACF;SACF;QACD,QAAQ,EAAE;YACR,mBAAmB,EAAE;gBACnB,UAAU,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;aAC1C;YACD,mBAAmB,EAAE,IAAI;YACzB,sBAAsB,EAAE,KAAK;SAC9B;KACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;IACF,OAAO,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAA8B,EAC9B,SAAiB;IAEjB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAC1E,KAAK,MAAM,IAAI,IAAI;QACjB,OAAO;QACP,aAAa;QACb,QAAQ;QACR,UAAU;QACV,WAAW;QACX,OAAO;KACR,EAAE,CAAC;QACF,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,QAAQ,GAAkB;QAC9B,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,QAAQ,EAAE,QAAQ,CAAC,EAAE;KACtB,CAAC;IACF,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,wBAAwB,CAAC,EACvC;;;;CAIH,CACE,CAAC;IACF,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EACzB;;;;;;;CAOH,CACE,CAAC;IACF,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAChC,oBAAoB,CAAC,QAAQ,CAAC,CAC/B,CAAC;IACF,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,EACvC,qBAAqB,CACtB,CAAC;IACF,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,EAC3B,uCAAuC,CACxC,CAAC;IACF,MAAM,SAAS,CACb,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,EAC7B,GAAG,IAAI,CAAC,SAAS,CACf;QACE,IAAI,EAAE,sBAAsB,QAAQ,CAAC,EAAE,EAAE;QACzC,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,kBAAkB;YACvB,IAAI,EAAE,sBAAsB;YAC5B,MAAM,EAAE,qBAAqB;SAC9B;QACD,eAAe,EAAE;YACf,mBAAmB,EAAE,QAAQ;YAC7B,qBAAqB,EAAE,SAAS;YAChC,aAAa,EAAE,QAAQ;SACxB;KACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,wBAAwB;QACxB,cAAc;QACd,YAAY;QACZ,UAAU;QACV,iBAAiB;QACjB,qBAAqB;KACtB,CAAC;IACF,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,SAAS,CACb,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAC7B,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CACzD,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE;gBACzD,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAAgC;IACxE,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YACzC,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;aACA,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;aAChE,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAAY,EACZ,SAAS,GAAG,IAAI;IAEhB,MAAM,MAAM,GAA6C,EAAE,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAC1E,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACrD,EAAE,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;aACrE,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChD,OAAO,EAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY;IAEZ,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,CAAC;QACV,QAAQ;QACR,KAAK,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC;KACnC,CAAC,CACH,CAAC;IACF,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,EAAE;QACpB,QAAQ;QACR,WAAW;QACX,IAAI;QACJ,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACvD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtemp, readFile, rename, rm, stat } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
import { buildAgentArtifact, initializeAgentProject, prepareAgent, } from "./project.js";
|
|
7
|
+
const emailTemplate = {
|
|
8
|
+
id: "email-triage",
|
|
9
|
+
name: "Email triage",
|
|
10
|
+
description: "Triage email and prepare replies for approval.",
|
|
11
|
+
category: "Comms",
|
|
12
|
+
integrations: ["Gmail", "OpenComputer"],
|
|
13
|
+
suggestedPrompts: ["Triage today's inbox."],
|
|
14
|
+
};
|
|
15
|
+
test("a template creates a flat agent repository with stable identity", async () => {
|
|
16
|
+
const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-agent-"));
|
|
17
|
+
const original = resolve(parent, "my-inbox-agent");
|
|
18
|
+
const renamed = resolve(parent, "renamed-agent-folder");
|
|
19
|
+
try {
|
|
20
|
+
await initializeAgentProject(emailTemplate, original);
|
|
21
|
+
assert.equal((await stat(resolve(original, "instructions.md"))).isFile(), true);
|
|
22
|
+
assert.equal((await stat(resolve(original, "tools"))).isDirectory(), true);
|
|
23
|
+
await assert.rejects(stat(resolve(original, "agent")));
|
|
24
|
+
assert.match(await readFile(resolve(original, "opencomputer.toml"), "utf8"), /id = "my-inbox-agent"/);
|
|
25
|
+
await rename(original, renamed);
|
|
26
|
+
assert.equal((await buildAgentArtifact(renamed)).agentId, "my-inbox-agent");
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await rm(parent, { recursive: true, force: true });
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
test("the compiler maps flat source into an OpenCode runtime", async () => {
|
|
33
|
+
const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-runtime-"));
|
|
34
|
+
const root = resolve(parent, "email-triage");
|
|
35
|
+
try {
|
|
36
|
+
await initializeAgentProject(emailTemplate, root);
|
|
37
|
+
const runtime = await prepareAgent(root);
|
|
38
|
+
assert.match(await readFile(resolve(runtime, "AGENTS.md"), "utf8"), /Email triage/);
|
|
39
|
+
assert.equal((await stat(resolve(runtime, ".opencode", "tools", "gmail.ts"))).isFile(), true);
|
|
40
|
+
assert.equal((await stat(resolve(runtime, "README.md"))).isFile(), true);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await rm(parent, { recursive: true, force: true });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=project.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.test.js","sourceRoot":"","sources":["../src/project.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opencomputer/cli",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Build, test, connect, deploy, and share OpenComputer agents as code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"opencomputer": "dist/index.js"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc -p tsconfig.json",
|
|
15
|
-
"test": "npm run build && node --test dist
|
|
15
|
+
"test": "npm run build && node --test dist/*.test.js",
|
|
16
16
|
"prepack": "npm test"
|
|
17
17
|
},
|
|
18
18
|
"engines": {
|