@chipschat/harness 0.0.0-stage → 1.0.0
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/LICENSE +201 -0
- package/README.md +66 -2
- package/dist/asks.d.ts +75 -0
- package/dist/asks.d.ts.map +1 -0
- package/dist/asks.js +103 -0
- package/dist/asks.js.map +1 -0
- package/dist/connect.d.ts +406 -0
- package/dist/connect.d.ts.map +1 -0
- package/dist/connect.js +883 -0
- package/dist/connect.js.map +1 -0
- package/dist/events.d.ts +89 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +36 -0
- package/dist/events.js.map +1 -0
- package/dist/files.d.ts +34 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +78 -0
- package/dist/files.js.map +1 -0
- package/dist/heard.d.ts +22 -0
- package/dist/heard.d.ts.map +1 -0
- package/dist/heard.js +32 -0
- package/dist/heard.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/join.d.ts +101 -0
- package/dist/join.d.ts.map +1 -0
- package/dist/join.js +289 -0
- package/dist/join.js.map +1 -0
- package/dist/keep.d.ts +33 -0
- package/dist/keep.d.ts.map +1 -0
- package/dist/keep.js +160 -0
- package/dist/keep.js.map +1 -0
- package/dist/lane.d.ts +73 -0
- package/dist/lane.d.ts.map +1 -0
- package/dist/lane.js +105 -0
- package/dist/lane.js.map +1 -0
- package/dist/outbox.d.ts +50 -0
- package/dist/outbox.d.ts.map +1 -0
- package/dist/outbox.js +52 -0
- package/dist/outbox.js.map +1 -0
- package/dist/project.d.ts +224 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +619 -0
- package/dist/project.js.map +1 -0
- package/dist/prompt.d.ts +61 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +87 -0
- package/dist/prompt.js.map +1 -0
- package/dist/rules.d.ts +18 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +25 -0
- package/dist/rules.js.map +1 -0
- package/dist/run.d.ts +246 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +295 -0
- package/dist/run.js.map +1 -0
- package/dist/sending.d.ts +78 -0
- package/dist/sending.d.ts.map +1 -0
- package/dist/sending.js +149 -0
- package/dist/sending.js.map +1 -0
- package/dist/service.d.ts +124 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +349 -0
- package/dist/service.js.map +1 -0
- package/dist/settings.d.ts +137 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +228 -0
- package/dist/settings.js.map +1 -0
- package/dist/steps.d.ts +27 -0
- package/dist/steps.d.ts.map +1 -0
- package/dist/steps.js +26 -0
- package/dist/steps.js.map +1 -0
- package/dist/store.d.ts +35 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +52 -0
- package/dist/store.js.map +1 -0
- package/package.json +37 -3
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `connect`: one socket to `chipsd`, the handshake, a subscription that resumes from where it
|
|
3
|
+
* got to, and the outbox that makes every send safe to repeat. Node 22's own `WebSocket` is
|
|
4
|
+
* enough; there is nothing to install beyond `@chipschat/protocol`. Two calls go over HTTP, with
|
|
5
|
+
* Node 22's own `fetch` and the same token: the rooms a person asked this harness for, read at
|
|
6
|
+
* connect, and the claim that makes one of them the harness's own.
|
|
7
|
+
*/
|
|
8
|
+
import type { SignedAttachment } from "@chipschat/protocol";
|
|
9
|
+
import { type ContextBudget, type Hello, type RoomContext, type RunRequested } from "@chipschat/protocol";
|
|
10
|
+
import { type ClaimedSpace, type SpaceAsked } from "./asks.js";
|
|
11
|
+
import { type ChipsEvents, type ConnectionState, type Handler } from "./events.js";
|
|
12
|
+
import { type Uploaded, type UploadInput } from "./files.js";
|
|
13
|
+
import { type Ack } from "./outbox.js";
|
|
14
|
+
import { Project, type ProjectOptions } from "./project.js";
|
|
15
|
+
import { type PlannedStep, Run } from "./run.js";
|
|
16
|
+
import { Settings, type SettingsHandlers } from "./settings.js";
|
|
17
|
+
import type { HarnessStore } from "./store.js";
|
|
18
|
+
export interface ConnectOptions {
|
|
19
|
+
/** `http://127.0.0.1:4432`, or wherever chipsd is. `ws://` and `wss://` are taken as given. */
|
|
20
|
+
readonly url: string;
|
|
21
|
+
/** The harness token, `chips_at_…`, from the app's Add harness or `.chips/demo.json` in dev. */
|
|
22
|
+
readonly token: string;
|
|
23
|
+
/** Who is connecting, for the connection list. */
|
|
24
|
+
readonly client?: {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly version: string;
|
|
27
|
+
} | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Replay from this `seq` before streaming live. Absent, the harness hears only what happens
|
|
30
|
+
* after it connects; a harness that persists the last `seq` it saw passes it here so a
|
|
31
|
+
* decision made while it was down still reaches it.
|
|
32
|
+
*/
|
|
33
|
+
readonly since?: number | undefined;
|
|
34
|
+
/** Reconnect with backoff when the socket drops. On unless said otherwise. */
|
|
35
|
+
readonly reconnect?: boolean | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* How much of a room this harness is handed with each message for it, as `message.new`'s
|
|
38
|
+
* `context` (ADR 0088): 20 lines and 4,000 characters unless said otherwise, 200 and 32,000 at
|
|
39
|
+
* most, and none for `{ lines: 0 }`.
|
|
40
|
+
*/
|
|
41
|
+
readonly context?: ContextBudget | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* The harness's own restart (ADR 0094), run when a person asks for one from its page in Chips.
|
|
44
|
+
* Given, this connection says `restart` in its `hello`, so Chips may ask; declaring `restarts`
|
|
45
|
+
* on the harness stays the harness's own act, as for `forks`. Start the restart detached, since
|
|
46
|
+
* it may replace this very process, and say nothing more until it is back — a new connection,
|
|
47
|
+
* or `reportOk` — or until it knows it couldn't be, with `reportTrouble`.
|
|
48
|
+
*/
|
|
49
|
+
readonly onRestart?: ((ask: RestartAsk) => void | Promise<void>) | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* The changes a person makes from an agent's page, or the harness's, for the capabilities the
|
|
52
|
+
* harness declares (`context_files`, `models`, `heartbeats`, `context_windows`, `jobs`): each
|
|
53
|
+
* handler makes one in the
|
|
54
|
+
* harness's own way and returns the copy as it is now, and the answer is sent for it. Each
|
|
55
|
+
* given says its word in `hello`; send the copies themselves with `chips.settings`.
|
|
56
|
+
*/
|
|
57
|
+
readonly settings?: SettingsHandlers | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Where to keep what must survive a restart: the last `seq` heard, events the server never
|
|
60
|
+
* answered, and runs not yet ended, which are ended for the harness when it comes back
|
|
61
|
+
* (`fileStore(path)`). Without one, a restart starts from `since` and forgets the rest.
|
|
62
|
+
*/
|
|
63
|
+
readonly store?: HarnessStore | undefined;
|
|
64
|
+
/** For tests: how to open a socket. */
|
|
65
|
+
readonly createSocket?: ((url: string) => SocketLike) | undefined;
|
|
66
|
+
/** For tests: how to make an HTTP request. Node 22's own `fetch` otherwise. */
|
|
67
|
+
readonly fetch?: typeof fetch | undefined;
|
|
68
|
+
}
|
|
69
|
+
/** A person asking the harness to restart (ADR 0094): who, and when. */
|
|
70
|
+
export interface RestartAsk {
|
|
71
|
+
readonly askedBy: string;
|
|
72
|
+
readonly askedAt: string;
|
|
73
|
+
}
|
|
74
|
+
/** The part of a WebSocket this client uses, so a test can hand in a fake. */
|
|
75
|
+
export interface SocketLike {
|
|
76
|
+
readonly send: (data: string) => void;
|
|
77
|
+
readonly close: () => void;
|
|
78
|
+
readonly addEventListener: (name: "open" | "close" | "error" | "message", handler: (message: {
|
|
79
|
+
readonly data?: unknown;
|
|
80
|
+
}) => void) => void;
|
|
81
|
+
}
|
|
82
|
+
export interface StartRunInput {
|
|
83
|
+
readonly spaceId: string;
|
|
84
|
+
readonly goal: string;
|
|
85
|
+
readonly plan?: readonly PlannedStep[] | undefined;
|
|
86
|
+
readonly sessionRef?: string | undefined;
|
|
87
|
+
/** Minted when absent. */
|
|
88
|
+
readonly runId?: string | undefined;
|
|
89
|
+
}
|
|
90
|
+
export interface PostInput {
|
|
91
|
+
readonly spaceId: string;
|
|
92
|
+
readonly text: string;
|
|
93
|
+
/** Upload ids from `POST /v1/uploads`; Chips fills in the attachments. */
|
|
94
|
+
readonly uploadIds?: readonly string[] | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* Which version of the room's file each upload was made from (ADR 0099): an upload id to the
|
|
97
|
+
* `attachment_id` `context.files` listed for that name. A file made from a version that is no
|
|
98
|
+
* longer current is refused, `stale_file`, saying who changed it: fetch it and redo.
|
|
99
|
+
*/
|
|
100
|
+
readonly replaces?: Readonly<Record<string, string>> | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* The commit the turn's push left the room's project at (ADR 0222), from `Project.push`: the
|
|
103
|
+
* room shows the change with this reply. Kept only when it was this agent's push to this room.
|
|
104
|
+
*/
|
|
105
|
+
readonly change?: string | undefined;
|
|
106
|
+
readonly replyTo?: string | undefined;
|
|
107
|
+
readonly runId?: string | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* The harnesses this is for, by id, or `all` (ADR 0081). What a harness says names nobody
|
|
110
|
+
* unless its text @mentions one, it answers one, or it says so here: answer another harness
|
|
111
|
+
* with its id, so the answer reaches it whether or not the words name it.
|
|
112
|
+
*/
|
|
113
|
+
readonly to?: readonly string[] | "all" | undefined;
|
|
114
|
+
}
|
|
115
|
+
/** One of the harness's agents (ADR 0087), as `chips.agents` hands it back. */
|
|
116
|
+
export interface Agent {
|
|
117
|
+
readonly agentId: string;
|
|
118
|
+
/** The harness's own name for it: the id of the thing it is, in the harness's terms. */
|
|
119
|
+
readonly key: string;
|
|
120
|
+
readonly name: string;
|
|
121
|
+
readonly lead: boolean;
|
|
122
|
+
readonly state: "active" | "archived";
|
|
123
|
+
/** The rooms it is in. */
|
|
124
|
+
readonly spaces: readonly string[];
|
|
125
|
+
/** The open room it is in (ADR 0087: one at a time), or `null` while it is free. */
|
|
126
|
+
readonly room: string | null;
|
|
127
|
+
/** While free, the room an archive took it out of, which an unarchive brings it back to. */
|
|
128
|
+
readonly releasedFrom: string | null;
|
|
129
|
+
/** How many of its words Chips is holding, said while it was in no room. */
|
|
130
|
+
readonly held: number;
|
|
131
|
+
/** The agent it is a copy of, when it is a fork's copy (ADR 0087, Fork). */
|
|
132
|
+
readonly forkedFrom: string | null;
|
|
133
|
+
}
|
|
134
|
+
/** What `chips.as(agentId)` speaks with: the same sends, as that agent. */
|
|
135
|
+
export interface Speaker {
|
|
136
|
+
readonly post: (input: PostInput) => Promise<Ack>;
|
|
137
|
+
readonly runs: {
|
|
138
|
+
readonly start: (input: StartRunInput) => Promise<Run>;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export declare class ConnectError extends Error {
|
|
142
|
+
readonly name = "ConnectError";
|
|
143
|
+
}
|
|
144
|
+
export declare class Chips {
|
|
145
|
+
private readonly options;
|
|
146
|
+
private readonly emitter;
|
|
147
|
+
private readonly outbox;
|
|
148
|
+
private readonly ids;
|
|
149
|
+
private readonly waiters;
|
|
150
|
+
private readonly activeRuns;
|
|
151
|
+
/** Pings in flight, by their `ts`, for `subscribed`. */
|
|
152
|
+
private readonly pongs;
|
|
153
|
+
/** Makes each ping's `ts` its own, so two in one millisecond are still told apart. */
|
|
154
|
+
private pings;
|
|
155
|
+
/**
|
|
156
|
+
* Events held back, and why: one hold until the harness could attach a handler after connect,
|
|
157
|
+
* and one for each catch-up on asked rooms still reading, so that a room's first words heard
|
|
158
|
+
* live and read from its history are handed over once. Delivered in order when none is left.
|
|
159
|
+
*/
|
|
160
|
+
private held;
|
|
161
|
+
private holds;
|
|
162
|
+
private readonly askHandlers;
|
|
163
|
+
private readonly asks;
|
|
164
|
+
private socket;
|
|
165
|
+
private ready;
|
|
166
|
+
private closed;
|
|
167
|
+
private retry;
|
|
168
|
+
private timer;
|
|
169
|
+
private since;
|
|
170
|
+
private connectionState;
|
|
171
|
+
private helloEvent;
|
|
172
|
+
/** What this harness last said is wrong on its side, said again whenever it reconnects. */
|
|
173
|
+
private trouble;
|
|
174
|
+
/** The runs this process started or took up and has not ended, for the store. */
|
|
175
|
+
private readonly openRuns;
|
|
176
|
+
/** Runs a process before this one left open, ended once this one has said hello. */
|
|
177
|
+
private orphans;
|
|
178
|
+
private saving;
|
|
179
|
+
private constructor();
|
|
180
|
+
/**
|
|
181
|
+
* The harness's copies of what a person changes from an agent's page (ADRs 0134, 0140, 0143,
|
|
182
|
+
* 0146): send each when connected and whenever it changes on the harness's side. Handlers for
|
|
183
|
+
* a person's changes are `connect({ settings })`'s.
|
|
184
|
+
*/
|
|
185
|
+
readonly settings: Settings;
|
|
186
|
+
/** Open the socket, say hello, subscribe. Resolves once the server has said who you are. */
|
|
187
|
+
static connect(options: ConnectOptions): Promise<Chips>;
|
|
188
|
+
get state(): ConnectionState;
|
|
189
|
+
/** The server's half of the handshake: who this connection is, and what it may do. */
|
|
190
|
+
get hello(): Hello;
|
|
191
|
+
get harnessId(): string;
|
|
192
|
+
/** Who this connection is: `hello.harness`, or the list's first from a server before it. */
|
|
193
|
+
private me;
|
|
194
|
+
get workspaceId(): string;
|
|
195
|
+
/**
|
|
196
|
+
* The harness's agents (ADR 0087): `register` makes one, or finds it by your key for it,
|
|
197
|
+
* renames it when the name has changed, and archives it or brings it back as `state` says;
|
|
198
|
+
* `list` reads them with their rooms; `attach` puts one in a room in the place of another of
|
|
199
|
+
* yours there, or of the harness itself. One connection speaks for all of them:
|
|
200
|
+
* `chips.as(agentId)`. A harness that declares `agents` is told them at `hello` too
|
|
201
|
+
* (`chips.hello.agents`).
|
|
202
|
+
*/
|
|
203
|
+
readonly agents: {
|
|
204
|
+
register: (input: {
|
|
205
|
+
/**
|
|
206
|
+
* Your own name for it. `harnessId` names the agent Chips made for you when you joined,
|
|
207
|
+
* your default, in your own room: register it with `lead: true` as your Main agent, rather
|
|
208
|
+
* than a second agent beside it (ADR 0183).
|
|
209
|
+
*/
|
|
210
|
+
readonly key: string;
|
|
211
|
+
readonly name: string;
|
|
212
|
+
readonly lead?: boolean | undefined;
|
|
213
|
+
/** The thing the agent is, archived in your harness or in use; unsaid, it stays as it is. */
|
|
214
|
+
readonly state?: Agent["state"] | undefined;
|
|
215
|
+
/** For a fork's copy (`agent.fork`): the agent it copies. */
|
|
216
|
+
readonly forkedFrom?: string | undefined;
|
|
217
|
+
/** For a new agent a person asked for (`agent.asked`, ADR 0108): the ask's id. */
|
|
218
|
+
readonly madeFor?: string | undefined;
|
|
219
|
+
/**
|
|
220
|
+
* For a fork's copy or a new agent: the room it was asked for, which it joins while the
|
|
221
|
+
* room waits.
|
|
222
|
+
*/
|
|
223
|
+
readonly spaceId?: string | undefined;
|
|
224
|
+
}) => Promise<Agent & {
|
|
225
|
+
readonly created: boolean;
|
|
226
|
+
readonly renamed: boolean;
|
|
227
|
+
/** For a fork's copy or a new agent: whether it joined its room, and why not when it didn't. */
|
|
228
|
+
readonly attached?: boolean;
|
|
229
|
+
readonly why?: string;
|
|
230
|
+
}>;
|
|
231
|
+
list: () => Promise<Agent[]>;
|
|
232
|
+
/**
|
|
233
|
+
* An agent of yours in a room, in the place of `replacing`: the harness's own id, or another
|
|
234
|
+
* of its agents there. What that one said in the room reads as the agent's from then on.
|
|
235
|
+
* `attached` is false when it was there already.
|
|
236
|
+
*/
|
|
237
|
+
attach: (agentId: string, where: {
|
|
238
|
+
readonly spaceId: string;
|
|
239
|
+
readonly replacing: string;
|
|
240
|
+
}) => Promise<{
|
|
241
|
+
readonly attached: boolean;
|
|
242
|
+
}>;
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Speak as one of this harness's agents (ADR 0087): a post, and a run with everything sent on
|
|
246
|
+
* it, carry the agent as their actor. A harness with one agent in a room need not say which:
|
|
247
|
+
* what it sends as itself is read as that agent there. Where it has several, it must.
|
|
248
|
+
*/
|
|
249
|
+
as(agentId: string): Speaker;
|
|
250
|
+
/**
|
|
251
|
+
* A room's project for one of this harness's agents (ADR 0221): its copy in the agent's folder,
|
|
252
|
+
* brought up to date before each turn (`pull`) and sent after it (`push`).
|
|
253
|
+
*/
|
|
254
|
+
project(input: Omit<ProjectOptions, "url" | "token">): Project;
|
|
255
|
+
get autonomy(): 0 | 1 | 2 | 3;
|
|
256
|
+
get policy(): Hello["policy"];
|
|
257
|
+
/** The highest `seq` heard, to persist for `since` on the next start. */
|
|
258
|
+
get lastSeq(): number | undefined;
|
|
259
|
+
on<K extends keyof ChipsEvents>(name: K, handler: Handler<ChipsEvents[K]>): () => void;
|
|
260
|
+
/** Say something in a space. */
|
|
261
|
+
post(input: PostInput): Promise<Ack>;
|
|
262
|
+
private postAs;
|
|
263
|
+
/**
|
|
264
|
+
* A room a person asked this harness for: their first words in it, once per room. Registering
|
|
265
|
+
* reads the rooms asked while the harness was away (`GET /v1/harnesses/:id/spaces`) and their
|
|
266
|
+
* history, and every reconnect reads them again; a room asked while connected is heard live.
|
|
267
|
+
* The first words are the ask's, and are not heard again as `message.new`; what is said in the
|
|
268
|
+
* room after them is. Only a harness that declares `new_spaces` is ever asked. Make what the
|
|
269
|
+
* room is for, then `claimSpace` it under a key of your own and answer in it.
|
|
270
|
+
*/
|
|
271
|
+
onSpaceAsked(handler: Handler<SpaceAsked>): () => void;
|
|
272
|
+
/**
|
|
273
|
+
* Make a room a person asked for this harness's own, under `key`, the harness's name for what
|
|
274
|
+
* it made of it: an agent, a session, a Space. The title names the room unless a person named
|
|
275
|
+
* it first. Asking for the key afterwards finds the room, as for a room the harness opened.
|
|
276
|
+
* A retry with the same key finds the room claimed already; a refusal throws `RefusedError`.
|
|
277
|
+
*/
|
|
278
|
+
claimSpace(spaceId: string, key: string, title?: string): Promise<ClaimedSpace>;
|
|
279
|
+
/**
|
|
280
|
+
* A room of this harness's own, under `key`: opened the first time, found again after. Chips puts
|
|
281
|
+
* the agent registered under the same key in it, or the harness's default agent (ADR 0087's
|
|
282
|
+
* addendum of 30 September, point 5). The title names a new room; untitled, it is called what
|
|
283
|
+
* its agent is.
|
|
284
|
+
*/
|
|
285
|
+
openSpace(key: string, title?: string): Promise<string>;
|
|
286
|
+
/**
|
|
287
|
+
* A room's lines, older than `before` (a line's `seq`, or a context's `before`), up to `limit`
|
|
288
|
+
* of them: 20 unless said otherwise, 200 at most (ADR 0088). Only a room this harness is in.
|
|
289
|
+
* What a harness reads to catch up on a room it was just added to, or to look further back
|
|
290
|
+
* than a message's context went.
|
|
291
|
+
*/
|
|
292
|
+
roomContext(spaceId: string, page?: {
|
|
293
|
+
readonly before?: number | undefined;
|
|
294
|
+
readonly limit?: number | undefined;
|
|
295
|
+
}): Promise<RoomContext>;
|
|
296
|
+
/**
|
|
297
|
+
* Send a file, for a post's `uploadIds`: in pieces when it is large, picking up where it got to
|
|
298
|
+
* after a piece is lost (ADR 0052). Resolves with what the server stored.
|
|
299
|
+
*/
|
|
300
|
+
upload(input: UploadInput): Promise<Uploaded>;
|
|
301
|
+
/** Send a file from disk, under its own name unless given another. */
|
|
302
|
+
uploadFile(path: string, filename?: string): Promise<Uploaded>;
|
|
303
|
+
/**
|
|
304
|
+
* An attachment's bytes: a message's, or a room file's. Its URL is bound to this harness's
|
|
305
|
+
* token, so it is fetched with it.
|
|
306
|
+
*/
|
|
307
|
+
download(attachment: Pick<SignedAttachment, "url"> | string): Promise<Uint8Array>;
|
|
308
|
+
/**
|
|
309
|
+
* Say what is wrong on this harness's side: the part Chips cannot see, such as a back end it
|
|
310
|
+
* cannot reach (ADR 0083). People see the agent marked, and these words under a message it
|
|
311
|
+
* hasn't picked up. One line, up to 200 characters. It holds until `reportOk`, or until the
|
|
312
|
+
* connection closes; the SDK says it again whenever it reconnects, so say it once.
|
|
313
|
+
*/
|
|
314
|
+
reportTrouble(reason: string): Promise<void>;
|
|
315
|
+
/** Say that nothing is wrong on this harness's side any more (ADR 0083). */
|
|
316
|
+
reportOk(): Promise<void>;
|
|
317
|
+
private status;
|
|
318
|
+
/** The lane side of the connection, for the `Lane` a `run.task()` hands back. */
|
|
319
|
+
private readonly lanes;
|
|
320
|
+
/** A `Run` over the wire for this run id, registered so what people do to it reaches it. */
|
|
321
|
+
private runFor;
|
|
322
|
+
/**
|
|
323
|
+
* Runs: `chips.runs.start({...})` opens one and resolves once the server has accepted it;
|
|
324
|
+
* `chips.runs.accept(requested)` takes up the run a lead routed here as a lane (M3.5) — the
|
|
325
|
+
* run is already seeded, so nothing is sent — and everything sent on it is the lane's.
|
|
326
|
+
*/
|
|
327
|
+
readonly runs: {
|
|
328
|
+
start: (input: StartRunInput) => Promise<Run>;
|
|
329
|
+
accept: (requested: Pick<RunRequested, "run_id" | "space_id" | "lane_id">) => Run;
|
|
330
|
+
};
|
|
331
|
+
private startAs;
|
|
332
|
+
/** Send any event. The envelope's actor, ts and workspace are the server's to fill in. */
|
|
333
|
+
send(type: string, envelope: Readonly<Record<string, unknown>>, payload: Readonly<Record<string, unknown>>, key?: string): Promise<Ack>;
|
|
334
|
+
private opened;
|
|
335
|
+
private ended;
|
|
336
|
+
/**
|
|
337
|
+
* End the runs a process before this one left open: its work died with it, and a run nobody
|
|
338
|
+
* ends keeps its thinking bubble until the harness's next one. Refused for one Chips had ended
|
|
339
|
+
* already, which is just as well.
|
|
340
|
+
*/
|
|
341
|
+
private endOrphans;
|
|
342
|
+
/** Keep the state soon, once for however many changes come together. */
|
|
343
|
+
private save;
|
|
344
|
+
private saveNow;
|
|
345
|
+
/** Resolve with the first event that matches, now or later. */
|
|
346
|
+
waitFor<T>(match: (event: Record<string, unknown>) => T | undefined): Promise<T>;
|
|
347
|
+
close(): void;
|
|
348
|
+
/**
|
|
349
|
+
* The socket's URL, with a single-use ticket in it (SEC-22). The token goes to
|
|
350
|
+
* `POST /v1/socket-tickets` in a header, as every other call sends it; what comes back is
|
|
351
|
+
* spent on the upgrade and worth nothing afterwards. Node's `WebSocket` sets no headers on
|
|
352
|
+
* the upgrade, and a token in the URL would be a durable credential in every proxy log the
|
|
353
|
+
* URL crosses.
|
|
354
|
+
*/
|
|
355
|
+
private socketUrl;
|
|
356
|
+
private open;
|
|
357
|
+
/** The handshake's outcome: the hello, a refusal, or the socket gone before either. */
|
|
358
|
+
private settled;
|
|
359
|
+
/** The socket's four events. `settled` fires once: with the hello, a refusal, or nothing. */
|
|
360
|
+
private listen;
|
|
361
|
+
/** The frames beyond the base set this connection takes: a restart, and the settings it handles. */
|
|
362
|
+
private accepts;
|
|
363
|
+
/** During the handshake: the server's hello, or its refusal. Anything else is a frame. */
|
|
364
|
+
private handshakeOutcome;
|
|
365
|
+
private onHello;
|
|
366
|
+
/**
|
|
367
|
+
* The server answers frames in order, so a pong to a ping sent after `subscribe` means the
|
|
368
|
+
* subscription is live: an event appended from here on is delivered, not missed as history.
|
|
369
|
+
*/
|
|
370
|
+
private subscribed;
|
|
371
|
+
/** Hand a person's ask to the harness's own restart; what it does after is its business. */
|
|
372
|
+
private restart;
|
|
373
|
+
private handleFrame;
|
|
374
|
+
/** Let one hold go; with none left, deliver what was held, in order. */
|
|
375
|
+
private release;
|
|
376
|
+
private onEvent;
|
|
377
|
+
/**
|
|
378
|
+
* The rooms asked of this harness and not yet claimed, each with its history, handed over
|
|
379
|
+
* when their first words are there. Live events wait meanwhile. A failure is left for the next
|
|
380
|
+
* connect: a room stays asked until it is claimed.
|
|
381
|
+
*/
|
|
382
|
+
private catchUp;
|
|
383
|
+
/** What a person first said in a room, read from its beginning a page at a time. */
|
|
384
|
+
private firstWordsIn;
|
|
385
|
+
/**
|
|
386
|
+
* One call to chipsd with the harness's token: JSON, or a file's bytes. A refusal throws with
|
|
387
|
+
* the server's words.
|
|
388
|
+
*/
|
|
389
|
+
/**
|
|
390
|
+
* Any route, with this harness's token: for one the SDK has no call for yet. The answer's JSON,
|
|
391
|
+
* or `RefusedError` with the server's code and words.
|
|
392
|
+
*/
|
|
393
|
+
request(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", path: string, body?: Readonly<Record<string, unknown>> | Uint8Array): Promise<Record<string, unknown>>;
|
|
394
|
+
private settleWaiters;
|
|
395
|
+
/**
|
|
396
|
+
* An event into a run reaches that run; a message for this harness in a run's room reaches the
|
|
397
|
+
* run too. One it overheard does not: it was for somebody else (ADR 0081).
|
|
398
|
+
*/
|
|
399
|
+
private routeToRuns;
|
|
400
|
+
private readonly named;
|
|
401
|
+
private setState;
|
|
402
|
+
private scheduleReconnect;
|
|
403
|
+
}
|
|
404
|
+
/** Connect to chipsd. `const chips = await connect({ url, token })`. */
|
|
405
|
+
export declare function connect(options: ConnectOptions): Promise<Chips>;
|
|
406
|
+
//# sourceMappingURL=connect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|