@opencomputer/cli 0.4.11 → 0.5.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.
@@ -24,15 +24,16 @@ test("init creates a multi-agent-ready project and React hello world app", async
24
24
  const packageJSON = JSON.parse(await readFile(resolve(root, "package.json"), "utf8"));
25
25
  assert.equal(packageJSON.scripts.dev, "opencomputer dev");
26
26
  assert.equal(packageJSON.scripts["dev:web"], undefined);
27
- assert.equal(packageJSON.dependencies["@opencomputer/agent"], "^0.3.1");
27
+ assert.equal(packageJSON.dependencies["@opencomputer/agent"], "^0.4.0");
28
28
  assert.equal(packageJSON.dependencies["@opencomputer/react"], "^0.1.0");
29
- assert.equal(packageJSON.devDependencies["@opencomputer/cli"], "^0.4.11");
29
+ assert.equal(packageJSON.devDependencies["@opencomputer/cli"], "^0.5.0");
30
30
  assert.ok(packageJSON.devDependencies["@types/node"]);
31
31
  const viteConfig = await readFile(resolve(root, "vite.config.ts"), "utf8");
32
32
  assert.match(viteConfig, /command === "serve"/);
33
33
  assert.match(viteConfig, /resolve\("\.opencomputer\/dev\.json"\)/);
34
34
  assert.doesNotMatch(viteConfig, /opencomputer\/agents\/hello-world\/\.opencomputer\/dev\.json/);
35
- assert.match(await readFile(resolve(root, "README.md"), "utf8"), /Sync agent code to Development \(Cloud\)/);
35
+ assert.match(await readFile(resolve(root, "README.md"), "utf8"), /Sync agent code to Development \(Cloud\)[\s\S]*opencomputer\/\.env\.local/);
36
+ assert.match(await readFile(resolve(root, "opencomputer", ".env.example"), "utf8"), /useSecret\(\)/);
36
37
  assert.equal(await readFile(resolve(root, "NOTES.md"), "utf8"), "# Existing notes\n");
37
38
  await assert.rejects(stat(resolve(root, "opencomputer", "package.json")));
38
39
  const agentRoot = resolve(root, "opencomputer", "agents", "hello-world");
@@ -46,7 +47,6 @@ test("init creates a multi-agent-ready project and React hello world app", async
46
47
  "tools",
47
48
  "connections",
48
49
  "skills",
49
- "channels",
50
50
  "workspace",
51
51
  "evals",
52
52
  ]) {
@@ -54,6 +54,7 @@ test("init creates a multi-agent-ready project and React hello world app", async
54
54
  }
55
55
  assert.deepEqual(initialized.files, [
56
56
  "opencomputer/project.ts",
57
+ "opencomputer/.env.example",
57
58
  "opencomputer/agents/hello-world/agent.ts",
58
59
  "package.json",
59
60
  "vite.config.ts",
@@ -91,6 +92,7 @@ test("init can create an agent-only project", async () => {
91
92
  assert.equal(packageJSON.devDependencies.vite, undefined);
92
93
  assert.deepEqual(initialized.files, [
93
94
  "opencomputer/project.ts",
95
+ "opencomputer/.env.example",
94
96
  "opencomputer/agents/hello-world/agent.ts",
95
97
  "package.json",
96
98
  "README.md",
@@ -107,9 +109,7 @@ test("the code-first compiler records hook resources without config files", asyn
107
109
  try {
108
110
  const initialized = await initializeAgentProject(root);
109
111
  await writeFile(resolve(initialized.agentRoot, "agent.ts"), `import {
110
- connection,
111
112
  defineMcpServer,
112
- useConnection,
113
113
  useInput,
114
114
  useMcpServer,
115
115
  useModel,
@@ -117,11 +117,9 @@ test("the code-first compiler records hook resources without config files", asyn
117
117
  useTool,
118
118
  } from "@opencomputer/agent";
119
119
 
120
- const github = connection("github");
121
120
  const docs = defineMcpServer({
122
121
  id: "docs",
123
122
  url: "https://mcp.example.com",
124
- connection: github,
125
123
  });
126
124
 
127
125
  export default function Agent() {
@@ -129,7 +127,6 @@ export default function Agent() {
129
127
  useModel("anthropic/claude-sonnet-4.6");
130
128
  useTool("search-docs");
131
129
  useSubagent("researcher");
132
- useConnection(github);
133
130
  if (input.text?.includes("docs")) useMcpServer(docs);
134
131
  return "Help with the request.";
135
132
  }
@@ -139,16 +136,15 @@ export default function Agent() {
139
136
  assert.deepEqual(manifest, {
140
137
  version: 2,
141
138
  entry: "../agent.js",
142
- tools: [
143
- "opencomputer_connections_list",
144
- "opencomputer_connections_request",
145
- "search-docs",
146
- ],
147
- toolModules: ["../tools/opencomputer-connections.js"],
139
+ tools: ["search-docs"],
140
+ toolModules: [],
148
141
  subagents: ["researcher"],
149
- connections: ["github"],
142
+ connections: [],
150
143
  httpConnections: [],
151
144
  mcpServers: ["docs"],
145
+ mcpServerDefinitions: [
146
+ { id: "docs", url: "https://mcp.example.com/" },
147
+ ],
152
148
  });
153
149
  await assert.rejects(stat(resolve(initialized.agentRoot, "opencomputer.toml")));
154
150
  }
@@ -169,6 +165,12 @@ export const github = defineConnection({
169
165
  origin: "https://api.github.com",
170
166
  methods: ["GET"],
171
167
  pathPrefix: "/repos/",
168
+ redirectOrigins: [
169
+ {
170
+ origin: "https://codeload.github.com",
171
+ pathPrefix: "/opencomputer/example/",
172
+ },
173
+ ],
172
174
  headers: { Authorization: bearer(useSecret("GITHUB_TOKEN")) },
173
175
  });
174
176
 
@@ -181,11 +183,10 @@ export const repository = defineTool({
181
183
  },
182
184
  });
183
185
  `);
184
- await writeFile(resolve(initialized.agentRoot, "agent.ts"), `import { useConnection, useTool } from "@opencomputer/agent";
185
- import { github, repository } from "./tools/github.js";
186
+ await writeFile(resolve(initialized.agentRoot, "agent.ts"), `import { useTool } from "@opencomputer/agent";
187
+ import { repository } from "./tools/github.js";
186
188
 
187
189
  export default function Agent() {
188
- useConnection(github);
189
190
  useTool(repository);
190
191
  return "Use GitHub when needed.";
191
192
  }
@@ -198,6 +199,12 @@ export default function Agent() {
198
199
  origin: "https://api.github.com",
199
200
  methods: ["GET"],
200
201
  pathPrefix: "/repos/",
202
+ redirectOrigins: [
203
+ {
204
+ origin: "https://codeload.github.com",
205
+ pathPrefix: "/opencomputer/example/",
206
+ },
207
+ ],
201
208
  headers: {
202
209
  Authorization: {
203
210
  kind: "secret",
@@ -214,6 +221,43 @@ export default function Agent() {
214
221
  await rm(parent, { recursive: true, force: true });
215
222
  }
216
223
  });
224
+ test("the compiler records managed MCP server definitions", async () => {
225
+ const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-mcp-"));
226
+ const root = resolve(parent, "app");
227
+ try {
228
+ const initialized = await initializeAgentProject(root);
229
+ await writeFile(resolve(initialized.agentRoot, "agent.ts"), `import { bearer, defineConnection, defineMcpServer, useMcpServer, useSecret } from "@opencomputer/agent";
230
+
231
+ const unleash = defineConnection({
232
+ id: "unleash-api",
233
+ origin: "https://example.getunleash.io",
234
+ pathPrefix: "/api/admin/mcp",
235
+ headers: { Authorization: bearer(useSecret("UNLEASH_TOKEN")) },
236
+ });
237
+ const server = defineMcpServer({
238
+ id: "unleash",
239
+ url: "https://example.getunleash.io/api/admin/mcp",
240
+ connection: unleash,
241
+ });
242
+ export default function Agent() {
243
+ useMcpServer(server);
244
+ return "Use Unleash.";
245
+ }
246
+ `);
247
+ const runtime = await prepareAgent(initialized.agentRoot);
248
+ const manifest = JSON.parse(await readFile(resolve(runtime, ".opencomputer", "reactive.json"), "utf8"));
249
+ assert.deepEqual(manifest.mcpServerDefinitions, [
250
+ {
251
+ id: "unleash",
252
+ url: "https://example.getunleash.io/api/admin/mcp",
253
+ connection: "unleash-api",
254
+ },
255
+ ]);
256
+ }
257
+ finally {
258
+ await rm(parent, { recursive: true, force: true });
259
+ }
260
+ });
217
261
  test("the compiler rejects hard-coded sensitive connection headers", async () => {
218
262
  const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-egress-secret-"));
219
263
  const root = resolve(parent, "app");
@@ -237,7 +281,7 @@ export default function Agent() {
237
281
  await rm(parent, { recursive: true, force: true });
238
282
  }
239
283
  });
240
- test("the compiler packages OpenComputer tools for native OpenCode 2 registration", async () => {
284
+ test("the compiler packages code-defined tools for native OpenCode 2 registration", async () => {
241
285
  const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-v2-tools-"));
242
286
  const root = resolve(parent, "app");
243
287
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"project.test.js","sourceRoot":"","sources":["../src/project.test.ts"],"names":[],"mappings":"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"}
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.4.11",
4
- "description": "Build, test, connect, deploy, and share OpenComputer agents as code.",
3
+ "version": "0.5.1",
4
+ "description": "Build, test, deploy, and share OpenComputer agents as code.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "opencomputer": "dist/index.js",
@@ -1 +0,0 @@
1
- export {};
package/dist/api.test.js DELETED
@@ -1,42 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
- import { OpenComputerClient } from "./api.js";
4
- test("reads channels from the public managed-agents response", async () => {
5
- const originalFetch = globalThis.fetch;
6
- globalThis.fetch = async () => Response.json({
7
- channels: [
8
- {
9
- id: "channel-1",
10
- channel: "slack",
11
- agentId: "agent-1",
12
- alias: "production",
13
- teamName: "OpenComputer",
14
- status: "connected",
15
- createdAt: "2026-08-01T00:00:00.000Z",
16
- updatedAt: "2026-08-01T00:00:00.000Z",
17
- },
18
- ],
19
- });
20
- try {
21
- const client = new OpenComputerClient({
22
- apiUrl: "https://app.opencomputer.dev",
23
- apiKey: "osb_test",
24
- });
25
- assert.deepEqual(await client.channelConnections(), [
26
- {
27
- id: "channel-1",
28
- channel: "slack",
29
- agentId: "agent-1",
30
- alias: "production",
31
- teamName: "OpenComputer",
32
- status: "connected",
33
- createdAt: "2026-08-01T00:00:00.000Z",
34
- updatedAt: "2026-08-01T00:00:00.000Z",
35
- },
36
- ]);
37
- }
38
- finally {
39
- globalThis.fetch = originalFetch;
40
- }
41
- });
42
- //# sourceMappingURL=api.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.test.js","sourceRoot":"","sources":["../src/api.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;IACxE,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IACvC,UAAU,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAC5B,QAAQ,CAAC,IAAI,CAAC;QACZ,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,WAAW;gBACf,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,0BAA0B;aACtC;SACF;KACF,CAAC,CAAC;IAEL,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC;YACpC,MAAM,EAAE,8BAA8B;YACtC,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,kBAAkB,EAAE,EAAE;YAClD;gBACE,EAAE,EAAE,WAAW;gBACf,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,0BAA0B;aACtC;SACF,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC"}
package/dist/slack.d.ts DELETED
@@ -1,24 +0,0 @@
1
- export interface LocalSlackState {
2
- version: 1;
3
- appId: string;
4
- teamId: string;
5
- teamName?: string;
6
- }
7
- export interface RemoteSlackState {
8
- version: 1;
9
- connectionId: string;
10
- agentId: string;
11
- webhookUrl: string;
12
- apiUrl: string;
13
- }
14
- export declare function localSlackStatePath(root: string): string;
15
- export declare function remoteSlackStatePath(root: string): string;
16
- export declare function readLocalSlackState(root: string): Promise<LocalSlackState | undefined>;
17
- export declare function readRemoteSlackState(root: string): Promise<RemoteSlackState | undefined>;
18
- export declare function writeRemoteSlackState(root: string, state: RemoteSlackState): Promise<void>;
19
- export declare function clearSlackState(root: string, mode: "local" | "remote"): Promise<void>;
20
- export declare function ensureSlackHooks(root: string): Promise<void>;
21
- export declare function requireSlackAgentRoot(): Promise<string>;
22
- export declare function slackManifest(root: string, mode: "local" | "remote"): Promise<Record<string, unknown>>;
23
- export declare function runSlackCli(root: string, args: string[], mode: "local" | "remote"): Promise<void>;
24
- export declare function captureLocalSlackState(root: string): Promise<LocalSlackState>;
package/dist/slack.js DELETED
@@ -1,253 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
- import { basename, dirname, resolve } from "node:path";
4
- import { findAgentRoot, readManifest } from "./project.js";
5
- const OPENCOMPUTER_SLACK_HOOKS = {
6
- "get-manifest": "node .opencomputer/slack-hook.mjs manifest",
7
- start: "node .opencomputer/slack-hook.mjs start",
8
- deploy: "node .opencomputer/slack-hook.mjs deploy",
9
- };
10
- const OPENCOMPUTER_SLACK_HOOK_BRIDGE = `#!/usr/bin/env node
11
- import { spawn } from "node:child_process";
12
-
13
- const [action, ...extraArgs] = process.argv.slice(2);
14
- if (!["manifest", "start", "deploy"].includes(action)) {
15
- process.stderr.write("Unsupported OpenComputer Slack hook\\n");
16
- process.exit(1);
17
- }
18
-
19
- const cliEntry = process.env.OPENCOMPUTER_SLACK_CLI_ENTRY;
20
- const command = cliEntry
21
- ? process.env.OPENCOMPUTER_SLACK_NODE_EXECUTABLE || process.execPath
22
- : process.platform === "win32"
23
- ? "npx.cmd"
24
- : "npx";
25
- const args = cliEntry
26
- ? [cliEntry, "slack-hook", action, ...extraArgs]
27
- : [
28
- "-y",
29
- "@opencomputer/cli@latest",
30
- "slack-hook",
31
- action,
32
- ...extraArgs,
33
- ];
34
- const child = spawn(command, args, { stdio: "inherit", env: process.env });
35
- for (const signal of ["SIGINT", "SIGTERM"]) {
36
- process.once(signal, () => child.kill(signal));
37
- }
38
- child.once("error", (error) => {
39
- process.stderr.write(\`opencomputer: \${error.message}\\n\`);
40
- process.exit(1);
41
- });
42
- child.once("exit", (code) => process.exit(code ?? 1));
43
- `;
44
- async function exists(path) {
45
- try {
46
- await access(path);
47
- return true;
48
- }
49
- catch {
50
- return false;
51
- }
52
- }
53
- export function localSlackStatePath(root) {
54
- return resolve(root, ".opencomputer", "channels", "slack.local.json");
55
- }
56
- export function remoteSlackStatePath(root) {
57
- return resolve(root, ".opencomputer", "channels", "slack.remote.json");
58
- }
59
- export async function readLocalSlackState(root) {
60
- try {
61
- return JSON.parse(await readFile(localSlackStatePath(root), "utf8"));
62
- }
63
- catch {
64
- return undefined;
65
- }
66
- }
67
- export async function readRemoteSlackState(root) {
68
- try {
69
- return JSON.parse(await readFile(remoteSlackStatePath(root), "utf8"));
70
- }
71
- catch {
72
- return undefined;
73
- }
74
- }
75
- export async function writeRemoteSlackState(root, state) {
76
- const path = remoteSlackStatePath(root);
77
- await mkdir(dirname(path), { recursive: true });
78
- await writeFile(path, `${JSON.stringify(state, null, 2)}\n`, {
79
- mode: 0o600,
80
- });
81
- }
82
- export async function clearSlackState(root, mode) {
83
- await rm(mode === "local" ? localSlackStatePath(root) : remoteSlackStatePath(root), { force: true });
84
- }
85
- export async function ensureSlackHooks(root) {
86
- const path = resolve(root, ".slack", "hooks.json");
87
- await mkdir(dirname(path), { recursive: true });
88
- let existing = {};
89
- try {
90
- const parsed = JSON.parse(await readFile(path, "utf8"));
91
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
92
- existing = parsed;
93
- }
94
- }
95
- catch {
96
- // A new Slack project does not have hooks yet.
97
- }
98
- const hooks = existing.hooks &&
99
- typeof existing.hooks === "object" &&
100
- !Array.isArray(existing.hooks)
101
- ? existing.hooks
102
- : {};
103
- const startHook = hooks.start;
104
- const managed = startHook === undefined ||
105
- (typeof startHook === "string" &&
106
- (startHook.includes("@opencomputer/cli") ||
107
- startHook.includes(".opencomputer/slack-hook.mjs")));
108
- if (!managed)
109
- return;
110
- const config = existing.config &&
111
- typeof existing.config === "object" &&
112
- !Array.isArray(existing.config)
113
- ? existing.config
114
- : {};
115
- await writeFile(path, `${JSON.stringify({
116
- ...existing,
117
- hooks: { ...hooks, ...OPENCOMPUTER_SLACK_HOOKS },
118
- config: { ...config, "sdk-managed-connection-enabled": true },
119
- }, null, 2)}\n`);
120
- const bridge = resolve(root, ".opencomputer", "slack-hook.mjs");
121
- await mkdir(dirname(bridge), { recursive: true });
122
- await writeFile(bridge, OPENCOMPUTER_SLACK_HOOK_BRIDGE, { mode: 0o755 });
123
- }
124
- export async function requireSlackAgentRoot() {
125
- const root = await findAgentRoot();
126
- if (!root || !(await exists(resolve(root, "channels", "slack.ts")))) {
127
- throw new Error("Run `opencomputer channels add slack` inside an agent repository first.");
128
- }
129
- await ensureSlackHooks(root);
130
- return root;
131
- }
132
- export async function slackManifest(root, mode) {
133
- const manifest = await readManifest(root);
134
- const remote = mode === "remote" ? await readRemoteSlackState(root) : undefined;
135
- if (mode === "remote" && !remote?.webhookUrl) {
136
- throw new Error("Run `opencomputer channels connect slack --remote` first.");
137
- }
138
- const subscriptions = {
139
- bot_events: [
140
- "app_mention",
141
- "app_context_changed",
142
- "app_home_opened",
143
- "message.im",
144
- ],
145
- };
146
- if (remote)
147
- subscriptions.request_url = remote.webhookUrl;
148
- return {
149
- _metadata: { major_version: 1, minor_version: 1 },
150
- display_information: {
151
- name: manifest.name || basename(root),
152
- description: `Run the ${manifest.name} OpenComputer agent from Slack.`,
153
- background_color: "#0B1220",
154
- },
155
- features: {
156
- agent_view: {
157
- agent_description: `Work with the ${manifest.name} agent.`,
158
- suggested_prompts: [
159
- {
160
- title: "Get started",
161
- message: "Tell me what you can help with.",
162
- },
163
- ],
164
- },
165
- bot_user: {
166
- display_name: manifest.name,
167
- always_online: true,
168
- },
169
- },
170
- oauth_config: {
171
- scopes: {
172
- bot: [
173
- "app_mentions:read",
174
- "assistant:write",
175
- "chat:write",
176
- "im:history",
177
- ],
178
- },
179
- },
180
- settings: {
181
- event_subscriptions: subscriptions,
182
- org_deploy_enabled: false,
183
- socket_mode_enabled: mode === "local",
184
- token_rotation_enabled: false,
185
- },
186
- };
187
- }
188
- export async function runSlackCli(root, args, mode) {
189
- const cliEntry = process.argv[1];
190
- await new Promise((resolvePromise, reject) => {
191
- const child = spawn("slack", args, {
192
- cwd: root,
193
- stdio: "inherit",
194
- env: {
195
- ...process.env,
196
- ...(cliEntry
197
- ? {
198
- OPENCOMPUTER_SLACK_CLI_ENTRY: cliEntry,
199
- OPENCOMPUTER_SLACK_NODE_EXECUTABLE: process.execPath,
200
- }
201
- : {}),
202
- OPENCOMPUTER_SLACK_MODE: mode,
203
- },
204
- });
205
- child.once("error", (error) => {
206
- reject(error instanceof Error && "code" in error && error.code === "ENOENT"
207
- ? new Error("Slack CLI is required. Install it from https://docs.slack.dev/tools/slack-cli/.")
208
- : error);
209
- });
210
- child.once("exit", (code, signal) => {
211
- if (code === 0)
212
- resolvePromise();
213
- else {
214
- reject(new Error(`Slack CLI exited ${signal ? `with ${signal}` : `with code ${String(code)}`}`));
215
- }
216
- });
217
- });
218
- }
219
- export async function captureLocalSlackState(root) {
220
- const candidates = [
221
- resolve(root, ".slack", "apps.dev.json"),
222
- resolve(root, ".slack", "apps.json"),
223
- ];
224
- for (const path of candidates) {
225
- if (!(await exists(path)))
226
- continue;
227
- const parsed = JSON.parse(await readFile(path, "utf8"));
228
- const entries = parsed.apps
229
- ? Object.values(parsed.apps)
230
- : Object.values(parsed).filter((entry) => Boolean(entry &&
231
- typeof entry === "object" &&
232
- "app_id" in entry &&
233
- "team_id" in entry));
234
- const selected = entries.find((entry) => entry.team_domain === parsed.default) ??
235
- entries[0];
236
- if (selected?.app_id && selected.team_id) {
237
- const state = {
238
- version: 1,
239
- appId: selected.app_id,
240
- teamId: selected.team_id,
241
- teamName: selected.team_domain,
242
- };
243
- const output = localSlackStatePath(root);
244
- await mkdir(dirname(output), { recursive: true });
245
- await writeFile(output, `${JSON.stringify(state, null, 2)}\n`, {
246
- mode: 0o600,
247
- });
248
- return state;
249
- }
250
- }
251
- throw new Error("Slack CLI did not persist the local app installation.");
252
- }
253
- //# sourceMappingURL=slack.js.map
package/dist/slack.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"slack.js","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,54 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { mkdtemp, readFile, 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 { runCommand } from "./commands.js";
7
- import { addSlackChannel, initializeAgentProject, } from "./project.js";
8
- import { ensureSlackHooks, slackManifest, writeRemoteSlackState, } from "./slack.js";
9
- test("Slack channel state renders local and remote manifests", async () => {
10
- const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-slack-"));
11
- const root = resolve(parent, "research-agent");
12
- try {
13
- const { agentRoot } = await initializeAgentProject(root);
14
- await addSlackChannel(agentRoot);
15
- await ensureSlackHooks(agentRoot);
16
- const local = await slackManifest(agentRoot, "local");
17
- assert.equal(local.settings.socket_mode_enabled, true);
18
- assert.equal((await stat(resolve(agentRoot, ".opencomputer", "slack-hook.mjs"))).isFile(), true);
19
- assert.match(await readFile(resolve(agentRoot, ".slack", "hooks.json"), "utf8"), /@opencomputer|opencomputer/);
20
- await writeRemoteSlackState(agentRoot, {
21
- version: 1,
22
- connectionId: "channel-1",
23
- agentId: "research-agent@production",
24
- webhookUrl: "https://example.com/slack/events",
25
- apiUrl: "https://example.com",
26
- });
27
- const remote = await slackManifest(agentRoot, "remote");
28
- const settings = remote.settings;
29
- const subscriptions = settings.event_subscriptions;
30
- assert.equal(settings.socket_mode_enabled, false);
31
- assert.equal(subscriptions.request_url, "https://example.com/slack/events");
32
- }
33
- finally {
34
- await rm(parent, { recursive: true, force: true });
35
- }
36
- });
37
- test("Slack hooks accept source metadata from the Slack CLI", async () => {
38
- const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-slack-hook-"));
39
- const root = resolve(parent, "research-agent");
40
- const previousDirectory = process.cwd();
41
- try {
42
- const { agentRoot } = await initializeAgentProject(root);
43
- await addSlackChannel(agentRoot);
44
- process.chdir(agentRoot);
45
- await assert.doesNotReject(runCommand("slack-hook", ["manifest", `--source=${agentRoot}`], {
46
- json: false,
47
- }));
48
- }
49
- finally {
50
- process.chdir(previousDirectory);
51
- await rm(parent, { recursive: true, force: true });
52
- }
53
- });
54
- //# sourceMappingURL=slack.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slack.test.js","sourceRoot":"","sources":["../src/slack.test.ts"],"names":[],"mappings":"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"}