@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 CHANGED
@@ -1,16 +1,43 @@
1
1
  # OpenComputer CLI
2
2
 
3
- The agent-only OpenComputer CLI deploys managed agents from templates and runs
4
- them through the public OpenComputer API.
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 deploy email-triage
11
- opencomputer run email-triage "Triage today's inbox."
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
- deploy(templateId: string, agentId?: string, alias?: string): Promise<{
74
- template: ManagedAgentTemplate;
75
- deployment: ManagedAgentDeployment;
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
- deploy(templateId, agentId, alias = "production") {
80
- return this.request(`/api/managed-agents/templates/${encodeURIComponent(templateId)}/deploy`, {
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({ agentId, alias }),
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":"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"}
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":"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"}
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 flag(args, name) {
19
- const index = args.indexOf(name);
20
- if (index < 0)
21
- return false;
22
- args.splice(index, 1);
23
- return true;
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 result = await client.deploy(template, name, alias);
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(result);
231
+ printJSON(deployment);
166
232
  else {
167
- process.stdout.write(`Deployed ${result.template.name}\n` +
168
- `Agent: ${result.deployment.agentId}\n` +
169
- `Alias: ${result.deployment.alias}\n` +
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
@@ -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.0";
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 — deploy and run managed agents
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 deploy <template> [--name <agent>] [--alias <alias>]
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;;;;;;;;;;;;;;;;;CAiBtB,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"}
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"}
@@ -0,0 +1,2 @@
1
+ import type { ResolvedConfig } from "./config.js";
2
+ export declare function runOpenCode(args: string[], config: ResolvedConfig): Promise<void>;
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>;
@@ -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":"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"}
@@ -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.0",
4
- "description": "Deploy and run managed OpenComputer agents.",
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/config.test.js",
15
+ "test": "npm run build && node --test dist/*.test.js",
16
16
  "prepack": "npm test"
17
17
  },
18
18
  "engines": {