@opencomputer/cli 0.2.1 → 0.3.2
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 +27 -0
- package/dist/api.d.ts +53 -3
- package/dist/api.js +41 -0
- package/dist/api.js.map +1 -1
- package/dist/commands.js +459 -13
- package/dist/commands.js.map +1 -1
- package/dist/index.js +22 -3
- package/dist/index.js.map +1 -1
- package/dist/local.js +9 -1
- package/dist/local.js.map +1 -1
- package/dist/project.js +225 -9
- package/dist/project.js.map +1 -1
- package/dist/project.test.js +29 -1
- package/dist/project.test.js.map +1 -1
- package/dist/slack.d.ts +24 -0
- package/dist/slack.js +257 -0
- package/dist/slack.js.map +1 -0
- package/dist/slack.test.d.ts +1 -0
- package/dist/slack.test.js +44 -0
- package/dist/slack.test.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,3 +41,30 @@ email-triage/
|
|
|
41
41
|
The directory can be renamed without creating a different deployed agent; each
|
|
42
42
|
`opencomputer deploy` publishes a new immutable deployment and advances the
|
|
43
43
|
selected alias.
|
|
44
|
+
|
|
45
|
+
## Sessions
|
|
46
|
+
|
|
47
|
+
`opencomputer session` runs the current source locally. Deployed sessions have
|
|
48
|
+
their own lifecycle and can be resumed across CLI invocations:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
opencomputer session create --remote \
|
|
52
|
+
--agent gmail-summarizer@production
|
|
53
|
+
opencomputer session list
|
|
54
|
+
opencomputer session send <session-id> "Summarize today's inbox."
|
|
55
|
+
opencomputer session inspect <session-id>
|
|
56
|
+
opencomputer session attach <session-id>
|
|
57
|
+
opencomputer session end <session-id>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Add and manage account connections and agent channels from the same CLI:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
opencomputer connections connect gmail
|
|
64
|
+
opencomputer connections list
|
|
65
|
+
|
|
66
|
+
opencomputer channels add slack
|
|
67
|
+
opencomputer deploy
|
|
68
|
+
opencomputer channels connect slack --remote
|
|
69
|
+
opencomputer channels list
|
|
70
|
+
```
|
package/dist/api.d.ts
CHANGED
|
@@ -28,10 +28,29 @@ export interface ManagedAgentDeployment {
|
|
|
28
28
|
}
|
|
29
29
|
export interface ManagedConnection {
|
|
30
30
|
id: string;
|
|
31
|
+
kind?: "channel" | "tool";
|
|
31
32
|
provider: string;
|
|
32
33
|
label: string;
|
|
34
|
+
agentId?: string;
|
|
35
|
+
alias?: string;
|
|
36
|
+
externalAccountId?: string;
|
|
33
37
|
displayName?: string;
|
|
38
|
+
scopes?: string[];
|
|
34
39
|
status: string;
|
|
40
|
+
createdAt?: string;
|
|
41
|
+
updatedAt?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface ManagedSlackConnection {
|
|
44
|
+
id: string;
|
|
45
|
+
agentId: string;
|
|
46
|
+
alias: string;
|
|
47
|
+
appId?: string;
|
|
48
|
+
teamId?: string;
|
|
49
|
+
teamName?: string;
|
|
50
|
+
botUserId?: string;
|
|
51
|
+
status: string;
|
|
52
|
+
createdAt: string;
|
|
53
|
+
updatedAt: string;
|
|
35
54
|
}
|
|
36
55
|
export interface ManagedAgentEvent {
|
|
37
56
|
id: string;
|
|
@@ -39,12 +58,24 @@ export interface ManagedAgentEvent {
|
|
|
39
58
|
type: string;
|
|
40
59
|
data: Record<string, unknown>;
|
|
41
60
|
}
|
|
42
|
-
interface
|
|
61
|
+
export interface ManagedSessionSnapshot {
|
|
43
62
|
id: string;
|
|
44
63
|
status: string;
|
|
64
|
+
agentId?: string;
|
|
65
|
+
deploymentId?: string;
|
|
66
|
+
microvmState?: string;
|
|
67
|
+
createdAt?: string;
|
|
68
|
+
updatedAt?: string;
|
|
69
|
+
turns?: Array<{
|
|
70
|
+
id: string;
|
|
71
|
+
input: string;
|
|
72
|
+
status: string;
|
|
73
|
+
createdAt: string;
|
|
74
|
+
updatedAt: string;
|
|
75
|
+
}>;
|
|
45
76
|
}
|
|
46
77
|
interface CreateSessionResult {
|
|
47
|
-
session:
|
|
78
|
+
session: ManagedSessionSnapshot;
|
|
48
79
|
deployment?: ManagedAgentDeployment;
|
|
49
80
|
}
|
|
50
81
|
export declare class APIError extends Error {
|
|
@@ -90,6 +121,7 @@ export declare class OpenComputerClient {
|
|
|
90
121
|
};
|
|
91
122
|
}): Promise<ManagedAgentDeployment>;
|
|
92
123
|
connections(): Promise<ManagedConnection[]>;
|
|
124
|
+
disconnectConnection(connectionId: string): Promise<ManagedConnection>;
|
|
93
125
|
linkGoogle(service: string): Promise<{
|
|
94
126
|
service: string;
|
|
95
127
|
toolkit: string;
|
|
@@ -106,12 +138,30 @@ export declare class OpenComputerClient {
|
|
|
106
138
|
authorizationUrl?: string;
|
|
107
139
|
expiresAt?: string;
|
|
108
140
|
}>;
|
|
141
|
+
disconnectGoogle(service: string): Promise<{
|
|
142
|
+
service: string;
|
|
143
|
+
toolkit: string;
|
|
144
|
+
status: "disconnected";
|
|
145
|
+
connectedAccountId?: string;
|
|
146
|
+
}>;
|
|
147
|
+
createSlackConnection(agentId: string): Promise<{
|
|
148
|
+
connection: ManagedSlackConnection;
|
|
149
|
+
webhookUrl: string;
|
|
150
|
+
}>;
|
|
151
|
+
channelConnections(): Promise<ManagedSlackConnection[]>;
|
|
152
|
+
completeSlackConnection(connectionId: string, botToken: string): Promise<ManagedSlackConnection>;
|
|
153
|
+
disconnectSlack(connectionId: string): Promise<ManagedSlackConnection>;
|
|
109
154
|
createSession(agentId: string): Promise<CreateSessionResult>;
|
|
155
|
+
sessions(): Promise<ManagedSessionSnapshot[]>;
|
|
156
|
+
session(sessionId: string): Promise<ManagedSessionSnapshot>;
|
|
110
157
|
createTurn(sessionId: string, input: string): Promise<{
|
|
111
158
|
turnId: string;
|
|
112
159
|
duplicate: boolean;
|
|
113
160
|
}>;
|
|
114
161
|
events(sessionId: string, after: number): Promise<ManagedAgentEvent[]>;
|
|
115
|
-
suspendSession(sessionId: string): Promise<
|
|
162
|
+
suspendSession(sessionId: string): Promise<ManagedSessionSnapshot>;
|
|
163
|
+
resumeSession(sessionId: string): Promise<ManagedSessionSnapshot>;
|
|
164
|
+
endSession(sessionId: string): Promise<ManagedSessionSnapshot>;
|
|
165
|
+
terminateSession(sessionId: string): Promise<ManagedSessionSnapshot>;
|
|
116
166
|
}
|
|
117
167
|
export {};
|
package/dist/api.js
CHANGED
|
@@ -83,6 +83,9 @@ export class OpenComputerClient {
|
|
|
83
83
|
const result = await this.request("/api/managed-agents/connections");
|
|
84
84
|
return result.connections;
|
|
85
85
|
}
|
|
86
|
+
disconnectConnection(connectionId) {
|
|
87
|
+
return this.request(`/api/managed-agents/connections/${encodeURIComponent(connectionId)}`, { method: "DELETE" });
|
|
88
|
+
}
|
|
86
89
|
linkGoogle(service) {
|
|
87
90
|
return this.request("/api/managed-agents/connections/google/link", {
|
|
88
91
|
method: "POST",
|
|
@@ -92,12 +95,41 @@ export class OpenComputerClient {
|
|
|
92
95
|
googleConnection(service) {
|
|
93
96
|
return this.request(`/api/managed-agents/connections/google/status?service=${encodeURIComponent(service)}`);
|
|
94
97
|
}
|
|
98
|
+
disconnectGoogle(service) {
|
|
99
|
+
return this.request(`/api/managed-agents/connections/google?service=${encodeURIComponent(service)}`, { method: "DELETE" });
|
|
100
|
+
}
|
|
101
|
+
createSlackConnection(agentId) {
|
|
102
|
+
return this.request("/api/managed-agents/channels/slack/connections", {
|
|
103
|
+
method: "POST",
|
|
104
|
+
body: JSON.stringify({ agentId }),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
async channelConnections() {
|
|
108
|
+
const result = await this.request("/api/managed-agents/channels");
|
|
109
|
+
return result.connections;
|
|
110
|
+
}
|
|
111
|
+
completeSlackConnection(connectionId, botToken) {
|
|
112
|
+
return this.request(`/api/managed-agents/channels/slack/connections/${encodeURIComponent(connectionId)}`, {
|
|
113
|
+
method: "PUT",
|
|
114
|
+
body: JSON.stringify({ botToken }),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
disconnectSlack(connectionId) {
|
|
118
|
+
return this.request(`/api/managed-agents/channels/slack/connections/${encodeURIComponent(connectionId)}`, { method: "DELETE" });
|
|
119
|
+
}
|
|
95
120
|
createSession(agentId) {
|
|
96
121
|
return this.request("/api/managed-agents/sessions", {
|
|
97
122
|
method: "POST",
|
|
98
123
|
body: JSON.stringify({ agentId }),
|
|
99
124
|
});
|
|
100
125
|
}
|
|
126
|
+
async sessions() {
|
|
127
|
+
const result = await this.request("/api/managed-agents/sessions");
|
|
128
|
+
return result.sessions;
|
|
129
|
+
}
|
|
130
|
+
session(sessionId) {
|
|
131
|
+
return this.request(`/api/managed-agents/sessions/${encodeURIComponent(sessionId)}`);
|
|
132
|
+
}
|
|
101
133
|
createTurn(sessionId, input) {
|
|
102
134
|
return this.request(`/api/managed-agents/sessions/${encodeURIComponent(sessionId)}/turns`, {
|
|
103
135
|
method: "POST",
|
|
@@ -114,5 +146,14 @@ export class OpenComputerClient {
|
|
|
114
146
|
suspendSession(sessionId) {
|
|
115
147
|
return this.request(`/api/managed-agents/sessions/${encodeURIComponent(sessionId)}/suspend`, { method: "POST" });
|
|
116
148
|
}
|
|
149
|
+
resumeSession(sessionId) {
|
|
150
|
+
return this.request(`/api/managed-agents/sessions/${encodeURIComponent(sessionId)}/resume`, { method: "POST" });
|
|
151
|
+
}
|
|
152
|
+
endSession(sessionId) {
|
|
153
|
+
return this.request(`/api/managed-agents/sessions/${encodeURIComponent(sessionId)}/end`, { method: "POST" });
|
|
154
|
+
}
|
|
155
|
+
terminateSession(sessionId) {
|
|
156
|
+
return this.request(`/api/managed-agents/sessions/${encodeURIComponent(sessionId)}/terminate`, { method: "POST" });
|
|
157
|
+
}
|
|
117
158
|
}
|
|
118
159
|
//# sourceMappingURL=api.js.map
|
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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"}
|