@stringsync/splates 0.0.0-stage → 0.0.45
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 +21 -0
- package/README.md +308 -2
- package/acp-extensions.d.ts +82 -0
- package/add.d.ts +53 -0
- package/adherence.d.ts +49 -0
- package/age.d.ts +2 -0
- package/agent-connection.d.ts +171 -0
- package/agent-errors.d.ts +2 -0
- package/agent-process.d.ts +65 -0
- package/agent-stream.d.ts +91 -0
- package/agents.d.ts +15 -0
- package/artifact-room.d.ts +47 -0
- package/artifact-viewers.d.ts +6 -0
- package/artifact.d.ts +30 -0
- package/artifacts.d.ts +161 -0
- package/asked.d.ts +146 -0
- package/asked.js +7 -0
- package/assumed.d.ts +34 -0
- package/attach.d.ts +30 -0
- package/attachments.d.ts +43 -0
- package/baselines.d.ts +55 -0
- package/claim.d.ts +17 -0
- package/cloudflare-api.d.ts +25 -0
- package/cloudflare-error.d.ts +5 -0
- package/cloudflared-tunnel-provider.d.ts +27 -0
- package/codex-limits.d.ts +19 -0
- package/compaction.d.ts +17 -0
- package/config-source.d.ts +13 -0
- package/config.d.ts +98 -0
- package/config.js +7 -0
- package/conversation-archive.d.ts +6 -0
- package/conversation-background.d.ts +21 -0
- package/conversation-choice.d.ts +4 -0
- package/conversation-files.d.ts +51 -0
- package/conversation-given.d.ts +8 -0
- package/conversation-host.d.ts +102 -0
- package/conversation-listing.d.ts +15 -0
- package/conversation-log.d.ts +301 -0
- package/conversation-messages.d.ts +18 -0
- package/conversation-name.d.ts +28 -0
- package/conversation-options.d.ts +73 -0
- package/conversation-reference.d.ts +2 -0
- package/conversation-state.d.ts +472 -0
- package/conversation-turns.d.ts +115 -0
- package/conversation.d.ts +209 -0
- package/conversations.d.ts +140 -0
- package/coordinator-state.d.ts +28 -0
- package/creds.d.ts +123 -0
- package/darwin-temperature.d.ts +7 -0
- package/decided.d.ts +18 -0
- package/demo.d.ts +29 -0
- package/dev/api.d.ts +209 -0
- package/dev/assets.d.ts +24 -0
- package/dev/conversation-address.d.ts +47 -0
- package/dev/conversation-feed.d.ts +166 -0
- package/dev/live-stream.d.ts +29 -0
- package/dev/worker.d.ts +33 -0
- package/dev-access.d.ts +61 -0
- package/dev-artifacts.d.ts +22 -0
- package/dev-budgets.d.ts +18 -0
- package/dev-conversation-events.d.ts +39 -0
- package/dev-conversation-routes.d.ts +90 -0
- package/dev-creds.d.ts +17 -0
- package/dev-dictation-connection.d.ts +18 -0
- package/dev-dictation.d.ts +17 -0
- package/dev-http.d.ts +76 -0
- package/dev-open.d.ts +15 -0
- package/dev-options.d.ts +133 -0
- package/dev-outcomes.d.ts +21 -0
- package/dev-pages.d.ts +16 -0
- package/dev-picker.d.ts +57 -0
- package/dev-port-socket.d.ts +26 -0
- package/dev-ports.d.ts +11 -0
- package/dev-project-watch.d.ts +44 -0
- package/dev-project.d.ts +168 -0
- package/dev-push.d.ts +59 -0
- package/dev-restart.d.ts +141 -0
- package/dev-servers.d.ts +30 -0
- package/dev-setup-native.d.ts +23 -0
- package/dev-setup-opencode.d.ts +29 -0
- package/dev-setup.d.ts +16 -0
- package/dev-shell.d.ts +70 -0
- package/dev-slot.d.ts +28 -0
- package/dev-sockets.d.ts +13 -0
- package/dev-task-ports.d.ts +73 -0
- package/dev-tasks.d.ts +20 -0
- package/dev-terminal-connection.d.ts +19 -0
- package/dev-terminal.d.ts +42 -0
- package/dev-todos.d.ts +35 -0
- package/dev-transcriber.d.ts +15 -0
- package/dev-tunnel.d.ts +38 -0
- package/dev-versions.d.ts +53 -0
- package/dev-workers.d.ts +55 -0
- package/dev.d.ts +24 -0
- package/diff.d.ts +29 -0
- package/dispatched.d.ts +16 -0
- package/editors.d.ts +22 -0
- package/escalate.d.ts +27 -0
- package/events.d.ts +311 -0
- package/everywhere.d.ts +41 -0
- package/exhibit.d.ts +21 -0
- package/exit.d.ts +54 -0
- package/fact-todos.d.ts +18 -0
- package/fake-agent.d.ts +107 -0
- package/fake-agent.js +284 -0
- package/finding-facts.d.ts +38 -0
- package/findings.d.ts +84 -0
- package/fold.d.ts +43 -0
- package/follow.d.ts +41 -0
- package/format.d.ts +68 -0
- package/git.d.ts +112 -0
- package/handed-out.d.ts +79 -0
- package/handoff.d.ts +23 -0
- package/heavy-run.d.ts +12 -0
- package/heavy.d.ts +28 -0
- package/heavy.js +16 -0
- package/held.d.ts +22 -0
- package/index-0tfvy823.js +272 -0
- package/index-43pq33n4.js +157 -0
- package/index-4776671w.js +698 -0
- package/index-d4hjrzaq.js +464 -0
- package/index-gcfq7awr.js +740 -0
- package/index-k73tsw5g.js +101 -0
- package/index-kaa44k7q.js +59 -0
- package/index-vcv9m93e.js +1265 -0
- package/index-xmfmy729.js +249 -0
- package/index.d.ts +2 -0
- package/index.js +26928 -0
- package/init.d.ts +28 -0
- package/journal.d.ts +57 -0
- package/landed.d.ts +14 -0
- package/lane-todos.d.ts +44 -0
- package/lane.d.ts +55 -0
- package/lanes-from-tags.d.ts +17 -0
- package/lanes.d.ts +96 -0
- package/legacy-names.d.ts +70 -0
- package/legacy-ps.d.ts +31 -0
- package/limits.d.ts +32 -0
- package/list.d.ts +18 -0
- package/load-config.d.ts +44 -0
- package/log.d.ts +14 -0
- package/machine.d.ts +42 -0
- package/merge.d.ts +35 -0
- package/migrate-config.d.ts +31 -0
- package/models.d.ts +24 -0
- package/needs.d.ts +115 -0
- package/notices.d.ts +39 -0
- package/offered.d.ts +39 -0
- package/opencode-usage.d.ts +37 -0
- package/outcomes.d.ts +114 -0
- package/package.json +74 -5
- package/path.d.ts +13 -0
- package/plan.d.ts +236 -0
- package/port-forward.d.ts +22 -0
- package/port-pipe.d.ts +36 -0
- package/ports-list.d.ts +19 -0
- package/probe-runtime.d.ts +5 -0
- package/probe-runtime.js +13 -0
- package/project-reaches.d.ts +23 -0
- package/projects.d.ts +136 -0
- package/prompts.d.ts +128 -0
- package/pty.d.ts +39 -0
- package/pulse.d.ts +8 -0
- package/recommend.d.ts +31 -0
- package/release.d.ts +41 -0
- package/remote-process.d.ts +26 -0
- package/remote-pty.d.ts +29 -0
- package/remote-worker.d.ts +77 -0
- package/remove.d.ts +31 -0
- package/repository.d.ts +91 -0
- package/retry.d.ts +34 -0
- package/roster.d.ts +63 -0
- package/saved-ports-host.d.ts +25 -0
- package/saved-tunnel.d.ts +44 -0
- package/server-worker-socket.d.ts +21 -0
- package/setup-areas.d.ts +7 -0
- package/setup-opencode-model-error.d.ts +3 -0
- package/setup-opencode-models.d.ts +54 -0
- package/setup-opencode-recipe.d.ts +26 -0
- package/setup-opencode.d.ts +46 -0
- package/setup.d.ts +102 -0
- package/shared-browser.d.ts +50 -0
- package/shell.d.ts +17 -0
- package/show.d.ts +106 -0
- package/skill-checks.d.ts +73 -0
- package/skill-checks.js +10 -0
- package/skills.d.ts +16 -0
- package/slot-tunnel.d.ts +27 -0
- package/slots.d.ts +135 -0
- package/snapshot.d.ts +75 -0
- package/splates-artifact.d.ts +3 -0
- package/splates-creds.d.ts +3 -0
- package/splates-dev.d.ts +22 -0
- package/splates-flags.d.ts +34 -0
- package/splates-lane.d.ts +3 -0
- package/splates-projects.d.ts +3 -0
- package/splates-setup.d.ts +17 -0
- package/splates-slots.d.ts +3 -0
- package/splates-todo.d.ts +3 -0
- package/splates-tunnel.d.ts +3 -0
- package/splates-worker.d.ts +3 -0
- package/splates.d.ts +28 -0
- package/stats.d.ts +186 -0
- package/supervise.d.ts +50 -0
- package/system-changes.d.ts +67 -0
- package/system.d.ts +28 -0
- package/systems.d.ts +119 -0
- package/systems.js +21 -0
- package/table.d.ts +5 -0
- package/task-log.d.ts +35 -0
- package/task-ports.d.ts +25 -0
- package/tell.d.ts +47 -0
- package/todo-edit.d.ts +60 -0
- package/todo-file.d.ts +6 -0
- package/todo-lanes.d.ts +82 -0
- package/todo-list.d.ts +26 -0
- package/todo-take.d.ts +27 -0
- package/todo.d.ts +146 -0
- package/todos.d.ts +157 -0
- package/tool-calls.d.ts +18 -0
- package/tunnel-provider.d.ts +37 -0
- package/tunnel-provider.js +0 -0
- package/tunnel-remove.d.ts +28 -0
- package/tunnel-setup.d.ts +104 -0
- package/unix-worker-listener.d.ts +23 -0
- package/unix-worker-socket.d.ts +30 -0
- package/update.d.ts +29 -0
- package/update.js +10 -0
- package/vocabulary.d.ts +9 -0
- package/wait.d.ts +36 -0
- package/watch.d.ts +46 -0
- package/watched.d.ts +43 -0
- package/websocket-worker-socket.d.ts +18 -0
- package/worker-call-host.d.ts +51 -0
- package/worker-channel.d.ts +83 -0
- package/worker-connection.d.ts +24 -0
- package/worker-daemon.d.ts +64 -0
- package/worker-git.d.ts +18 -0
- package/worker-list.d.ts +49 -0
- package/worker-machine.d.ts +34 -0
- package/worker-port-host.d.ts +21 -0
- package/worker-process-host.d.ts +29 -0
- package/worker-protocol.d.ts +104 -0
- package/worker-pty-host.d.ts +34 -0
- package/worker-registry.d.ts +68 -0
- package/worker-replay.d.ts +25 -0
- package/worker-run.d.ts +20 -0
- package/worker-session.d.ts +189 -0
- package/worker-socket.d.ts +15 -0
- package/worktree-service.d.ts +113 -0
- package/worktree.d.ts +232 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LEGACY_DIR
|
|
3
|
+
} from "./index-k73tsw5g.js";
|
|
4
|
+
import {
|
|
5
|
+
splatesHome
|
|
6
|
+
} from "./index-43pq33n4.js";
|
|
7
|
+
|
|
8
|
+
// heavy.ts
|
|
9
|
+
import { HeavyJobs } from "webappwiz/system";
|
|
10
|
+
|
|
11
|
+
// slots.ts
|
|
12
|
+
import { FileLock } from "webappwiz/system";
|
|
13
|
+
import { Duration, sleep } from "webappwiz/time";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
var SERVER_PID = "server.pid";
|
|
16
|
+
var SLOT = "SPLATES_SLOT";
|
|
17
|
+
var MACHINE_HOME = "SPLATES_MACHINE_HOME";
|
|
18
|
+
var STOP_WAIT = Duration.secs(5);
|
|
19
|
+
var FORMAT = 1;
|
|
20
|
+
|
|
21
|
+
class Slots {
|
|
22
|
+
path;
|
|
23
|
+
deps;
|
|
24
|
+
constructor(path, deps) {
|
|
25
|
+
this.path = path;
|
|
26
|
+
this.deps = deps;
|
|
27
|
+
}
|
|
28
|
+
static ofMachine({ fs, ps, log }) {
|
|
29
|
+
const home = ps.env(MACHINE_HOME) ?? splatesHome(ps);
|
|
30
|
+
return new Slots(`${home}/slots.json`, {
|
|
31
|
+
fs,
|
|
32
|
+
ps,
|
|
33
|
+
lock: new FileLock(`${home}/slots.lock`, { fs, ps, log })
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async owns(tree) {
|
|
37
|
+
const { fs } = this.deps;
|
|
38
|
+
return await fs.exists(tree) && !await fs.exists(`${tree}/.git/splates`) && !await fs.exists(`${tree}/.git/${LEGACY_DIR}`);
|
|
39
|
+
}
|
|
40
|
+
async claim(tree) {
|
|
41
|
+
const { fs, lock, pool = SLOT_POOL } = this.deps;
|
|
42
|
+
await fs.mkdir(this.path.slice(0, this.path.lastIndexOf("/")));
|
|
43
|
+
await lock.acquire();
|
|
44
|
+
try {
|
|
45
|
+
const claims = await this.read();
|
|
46
|
+
const held = pool.find(({ word }) => claims[word] === tree);
|
|
47
|
+
if (held !== undefined) {
|
|
48
|
+
return held;
|
|
49
|
+
}
|
|
50
|
+
const holders = [];
|
|
51
|
+
for (const slot of pool) {
|
|
52
|
+
const holder = claims[slot.word];
|
|
53
|
+
if (holder !== undefined && await this.owns(holder)) {
|
|
54
|
+
holders.push(` ${slot.word}: ${holder}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const pid = await this.server(slot);
|
|
58
|
+
if (pid !== null) {
|
|
59
|
+
holders.push(` ${slot.word}: pid ${pid}${holder === undefined ? "" : `, run from ${holder}`}`);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
await this.write({ ...claims, [slot.word]: tree });
|
|
63
|
+
return slot;
|
|
64
|
+
}
|
|
65
|
+
throw new Error([
|
|
66
|
+
"every dev slot is held:",
|
|
67
|
+
...holders,
|
|
68
|
+
"each is another task's: `splates slots prune` frees those no task owns any more, and stops their servers; never stop another task's server or edit its claim"
|
|
69
|
+
].join(`
|
|
70
|
+
`));
|
|
71
|
+
} finally {
|
|
72
|
+
await lock.release();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
home(slot) {
|
|
76
|
+
return `${this.path.slice(0, this.path.lastIndexOf("/"))}/slots/${slot.word}`;
|
|
77
|
+
}
|
|
78
|
+
async server(slot) {
|
|
79
|
+
const { fs, ps } = this.deps;
|
|
80
|
+
const file = `${this.home(slot)}/${SERVER_PID}`;
|
|
81
|
+
if (!await fs.exists(file)) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const pid = Number.parseInt((await fs.read(file)).trim(), 10);
|
|
85
|
+
if (!Number.isInteger(pid) || pid === ps.pid || !ps.alive(pid)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const running = (await ps.processes()).find((each) => each.pid === pid);
|
|
89
|
+
if (running !== undefined && !/\bdev\b/.test(running.command)) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return pid;
|
|
93
|
+
}
|
|
94
|
+
async list() {
|
|
95
|
+
const { pool = SLOT_POOL } = this.deps;
|
|
96
|
+
const claims = await this.read();
|
|
97
|
+
const held = [];
|
|
98
|
+
for (const slot of pool) {
|
|
99
|
+
const tree = claims[slot.word];
|
|
100
|
+
if (tree !== undefined && await this.owns(tree)) {
|
|
101
|
+
held.push({ slot, tree });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return held;
|
|
105
|
+
}
|
|
106
|
+
async status() {
|
|
107
|
+
const { pool = SLOT_POOL } = this.deps;
|
|
108
|
+
const claims = await this.read();
|
|
109
|
+
const held = [];
|
|
110
|
+
for (const slot of pool) {
|
|
111
|
+
const tree = claims[slot.word];
|
|
112
|
+
if (tree !== undefined) {
|
|
113
|
+
held.push({
|
|
114
|
+
slot,
|
|
115
|
+
tree,
|
|
116
|
+
pid: await this.server(slot),
|
|
117
|
+
orphaned: !await this.owns(tree)
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return held;
|
|
122
|
+
}
|
|
123
|
+
async stop(slot) {
|
|
124
|
+
const { ps } = this.deps;
|
|
125
|
+
const pid = await this.server(slot);
|
|
126
|
+
if (pid === null) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
await ps.spawnCapture(["kill", String(pid)]);
|
|
130
|
+
const deadline = Date.now() + STOP_WAIT.ms;
|
|
131
|
+
while (ps.alive(pid)) {
|
|
132
|
+
if (Date.now() >= deadline) {
|
|
133
|
+
await ps.spawnCapture(["kill", "-KILL", String(pid)]);
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
await sleep(Duration.ms(100));
|
|
137
|
+
}
|
|
138
|
+
return pid;
|
|
139
|
+
}
|
|
140
|
+
async release(tree) {
|
|
141
|
+
const { lock, pool = SLOT_POOL } = this.deps;
|
|
142
|
+
if (!Object.values(await this.read()).includes(tree)) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
await lock.acquire();
|
|
146
|
+
try {
|
|
147
|
+
const claims = await this.read();
|
|
148
|
+
const slot = pool.find(({ word }) => claims[word] === tree);
|
|
149
|
+
if (slot === undefined) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const stopped = await this.stop(slot);
|
|
153
|
+
const { [slot.word]: _, ...rest } = claims;
|
|
154
|
+
await this.write(rest);
|
|
155
|
+
return { slot, stopped };
|
|
156
|
+
} finally {
|
|
157
|
+
await lock.release();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async prune() {
|
|
161
|
+
const { lock } = this.deps;
|
|
162
|
+
if (!await this.deps.fs.exists(this.path)) {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
await lock.acquire();
|
|
166
|
+
try {
|
|
167
|
+
const orphans = (await this.status()).filter(({ orphaned }) => orphaned);
|
|
168
|
+
const claims = await this.read();
|
|
169
|
+
for (const orphan of orphans) {
|
|
170
|
+
await this.stop(orphan.slot);
|
|
171
|
+
delete claims[orphan.slot.word];
|
|
172
|
+
}
|
|
173
|
+
if (orphans.length > 0) {
|
|
174
|
+
await this.write(claims);
|
|
175
|
+
}
|
|
176
|
+
return orphans;
|
|
177
|
+
} finally {
|
|
178
|
+
await lock.release();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async read() {
|
|
182
|
+
const raw = await this.deps.fs.read(this.path).catch(() => null);
|
|
183
|
+
if (raw === null) {
|
|
184
|
+
return {};
|
|
185
|
+
}
|
|
186
|
+
const parsed = Claims.safeParse(JSON.parse(raw));
|
|
187
|
+
if (!parsed.success || parsed.data.format > FORMAT) {
|
|
188
|
+
throw new Error(`${this.path} is not slots this splates reads: remove it to start over`);
|
|
189
|
+
}
|
|
190
|
+
return parsed.data.claims;
|
|
191
|
+
}
|
|
192
|
+
async write(claims) {
|
|
193
|
+
const tmp = `${this.path}.${crypto.randomUUID()}.tmp`;
|
|
194
|
+
await this.deps.fs.write(tmp, `${JSON.stringify({ format: FORMAT, claims }, null, "\t")}
|
|
195
|
+
`);
|
|
196
|
+
await this.deps.fs.rename(tmp, this.path);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
var SLOT_POOL = [
|
|
200
|
+
{ word: "cat", emoji: "\uD83D\uDE38" },
|
|
201
|
+
{ word: "bee", emoji: "\uD83D\uDC1D" },
|
|
202
|
+
{ word: "dog", emoji: "\uD83D\uDC36" },
|
|
203
|
+
{ word: "fox", emoji: "\uD83E\uDD8A" },
|
|
204
|
+
{ word: "owl", emoji: "\uD83E\uDD89" },
|
|
205
|
+
{ word: "pig", emoji: "\uD83D\uDC37" },
|
|
206
|
+
{ word: "lion", emoji: "\uD83E\uDD81" },
|
|
207
|
+
{ word: "wolf", emoji: "\uD83D\uDC3A" },
|
|
208
|
+
{ word: "bear", emoji: "\uD83D\uDC3B" },
|
|
209
|
+
{ word: "frog", emoji: "\uD83D\uDC38" },
|
|
210
|
+
{ word: "duck", emoji: "\uD83E\uDD86" },
|
|
211
|
+
{ word: "crab", emoji: "\uD83E\uDD80" }
|
|
212
|
+
];
|
|
213
|
+
function freedLine({
|
|
214
|
+
slot,
|
|
215
|
+
stopped
|
|
216
|
+
}) {
|
|
217
|
+
return `${slot.word} ${slot.emoji} given back${stopped === null ? "" : `, its server (pid ${stopped}) stopped`}`;
|
|
218
|
+
}
|
|
219
|
+
function slotOf(word) {
|
|
220
|
+
return SLOT_POOL.find((each) => each.word === word) ?? null;
|
|
221
|
+
}
|
|
222
|
+
var Claims = z.object({
|
|
223
|
+
format: z.number(),
|
|
224
|
+
claims: z.record(z.string(), z.string())
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// heavy.ts
|
|
228
|
+
var HEAVY_JOBS_DEFAULT2 = 2;
|
|
229
|
+
var HEAVY_JOBS2 = "SPLATES_HEAVY_JOBS";
|
|
230
|
+
var HEAVY_HELD2 = "SPLATES_HEAVY";
|
|
231
|
+
function heavyJobsOfMachine2({
|
|
232
|
+
fs,
|
|
233
|
+
ps,
|
|
234
|
+
log
|
|
235
|
+
}) {
|
|
236
|
+
return HeavyJobs.under(ps.env(MACHINE_HOME) ?? splatesHome(ps), {
|
|
237
|
+
fs,
|
|
238
|
+
ps,
|
|
239
|
+
log,
|
|
240
|
+
cap: capOf2(ps.env(HEAVY_JOBS2)),
|
|
241
|
+
held: HEAVY_HELD2
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
function capOf2(value) {
|
|
245
|
+
const cap = Number(value);
|
|
246
|
+
return Number.isInteger(cap) && cap > 0 ? cap : HEAVY_JOBS_DEFAULT2;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export { SERVER_PID, SLOT, MACHINE_HOME, Slots, SLOT_POOL, freedLine, slotOf, HEAVY_JOBS_DEFAULT2, HEAVY_JOBS2, HEAVY_HELD2, heavyJobsOfMachine2, capOf2 };
|
package/index.d.ts
ADDED