@lambdacurry/arbor 0.17.6 → 0.19.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/dist/arbor.js +162 -11
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -1671,6 +1671,29 @@ var computerSessions = sqliteTable("computer_sessions", {
|
|
|
1671
1671
|
computerIdx: index("computer_sessions_computer_idx").on(t.computerId, t.attachedAt),
|
|
1672
1672
|
threadIdx: index("computer_sessions_thread_idx").on(t.threadId, t.attachedAt)
|
|
1673
1673
|
}));
|
|
1674
|
+
var computerRuns = sqliteTable("computer_runs", {
|
|
1675
|
+
id: text("id").primaryKey(),
|
|
1676
|
+
computerId: text("computer_id").notNull().references(() => threadComputers.id),
|
|
1677
|
+
threadId: text("thread_id").notNull().references(() => threads.id),
|
|
1678
|
+
computerSessionId: text("computer_session_id").notNull().references(() => computerSessions.id),
|
|
1679
|
+
profileId: text("profile_id").notNull().references(() => profiles.id),
|
|
1680
|
+
executionContextId: text("execution_context_id").notNull().references(() => executionContexts.id),
|
|
1681
|
+
mode: text("mode").$type().notNull(),
|
|
1682
|
+
execution: text("isolation").$type().notNull(),
|
|
1683
|
+
workspaceDir: text("workspace_dir").notNull(),
|
|
1684
|
+
_legacyWorkspaceRef: text("workspace_ref"),
|
|
1685
|
+
baseSnapshotId: text("base_snapshot_id"),
|
|
1686
|
+
status: text("status").$type().notNull().default("active"),
|
|
1687
|
+
label: text("label"),
|
|
1688
|
+
reason: text("reason"),
|
|
1689
|
+
startedAt: ts("started_at").notNull(),
|
|
1690
|
+
endedAt: ts("ended_at")
|
|
1691
|
+
}, (t) => ({
|
|
1692
|
+
computerIdx: index("computer_runs_computer_idx").on(t.computerId, t.startedAt),
|
|
1693
|
+
threadIdx: index("computer_runs_thread_idx").on(t.threadId, t.startedAt),
|
|
1694
|
+
sessionIdx: index("computer_runs_session_idx").on(t.computerSessionId, t.startedAt),
|
|
1695
|
+
statusIdx: index("computer_runs_status_idx").on(t.computerId, t.status)
|
|
1696
|
+
}));
|
|
1674
1697
|
var computerSnapshots = sqliteTable("computer_snapshots", {
|
|
1675
1698
|
id: text("id").primaryKey(),
|
|
1676
1699
|
ownerScope: text("owner_scope").$type().notNull(),
|
|
@@ -2174,6 +2197,9 @@ var watches = sqliteTable("watches", {
|
|
|
2174
2197
|
watchUq: uniqueIndex("watches_watcher_target_uniq").on(t.watcherProfileId, t.targetType, t.targetId),
|
|
2175
2198
|
watchTargetIdx: index("watches_target_idx").on(t.targetType, t.targetId)
|
|
2176
2199
|
}));
|
|
2200
|
+
// ../core/src/ops/computer-run.ts
|
|
2201
|
+
var TERMINAL = new Set(["finished", "failed", "cancelled"]);
|
|
2202
|
+
|
|
2177
2203
|
// ../core/src/ops/computer.ts
|
|
2178
2204
|
var MAX_COMPUTER_REPOSITORIES = 10;
|
|
2179
2205
|
|
|
@@ -16737,6 +16763,42 @@ var computerProfile = exports_external.looseObject({
|
|
|
16737
16763
|
tools: exports_external.array(exports_external.string()),
|
|
16738
16764
|
recommendedEditingPrimitive: exports_external.string()
|
|
16739
16765
|
});
|
|
16766
|
+
var computerRun = exports_external.looseObject({
|
|
16767
|
+
runId: id,
|
|
16768
|
+
computerId: id,
|
|
16769
|
+
threadId: id,
|
|
16770
|
+
computerSessionId: id,
|
|
16771
|
+
profileId: id,
|
|
16772
|
+
executionContextId: id,
|
|
16773
|
+
mode: exports_external.enum(["read", "write"]),
|
|
16774
|
+
execution: exports_external.enum(["shared", "isolated"]),
|
|
16775
|
+
workspaceDir: exports_external.string(),
|
|
16776
|
+
baseSnapshotId: id.nullable(),
|
|
16777
|
+
status: exports_external.enum(["active", "finished", "failed", "cancelled"]),
|
|
16778
|
+
label: exports_external.string().nullable(),
|
|
16779
|
+
reason: exports_external.string().nullable(),
|
|
16780
|
+
startedAt: exports_external.string(),
|
|
16781
|
+
endedAt: exports_external.string().nullable()
|
|
16782
|
+
});
|
|
16783
|
+
var computerRunReceipt = exports_external.looseObject({
|
|
16784
|
+
runId: id,
|
|
16785
|
+
threadId: id,
|
|
16786
|
+
computerId: id,
|
|
16787
|
+
computerSessionId: id,
|
|
16788
|
+
actor: exports_external.looseObject({ profileId: id, executionContextId: id }),
|
|
16789
|
+
label: exports_external.string().nullable(),
|
|
16790
|
+
mode: exports_external.enum(["read", "write"]),
|
|
16791
|
+
execution: exports_external.enum(["shared", "isolated"]),
|
|
16792
|
+
workspace: exports_external.looseObject({ dir: exports_external.string() }),
|
|
16793
|
+
baseSnapshotId: id.nullable(),
|
|
16794
|
+
status: exports_external.enum(["active", "finished", "failed", "cancelled"]),
|
|
16795
|
+
outcome: exports_external.enum(["finished", "failed", "cancelled"]).nullable(),
|
|
16796
|
+
reason: exports_external.string().nullable(),
|
|
16797
|
+
startedAt: exports_external.string(),
|
|
16798
|
+
endedAt: exports_external.string().nullable(),
|
|
16799
|
+
durationMs: exports_external.number().nullable(),
|
|
16800
|
+
lifecycle: exports_external.array(exports_external.looseObject({ type: exports_external.string(), at: exports_external.string() }))
|
|
16801
|
+
});
|
|
16740
16802
|
var computerCapabilityCard = exports_external.looseObject({
|
|
16741
16803
|
capabilities: exports_external.array(exports_external.looseObject({
|
|
16742
16804
|
id: exports_external.string(),
|
|
@@ -17354,6 +17416,28 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
17354
17416
|
toContainerProfileRevision: exports_external.number().int().nullable()
|
|
17355
17417
|
}).optional()
|
|
17356
17418
|
}),
|
|
17419
|
+
computer_run_start: exports_external.looseObject({
|
|
17420
|
+
run: computerRun,
|
|
17421
|
+
workspace: exports_external.looseObject({
|
|
17422
|
+
workspaceRoot: exports_external.string(),
|
|
17423
|
+
repositories: exports_external.array(exports_external.looseObject({ repository: exports_external.string(), path: exports_external.string() })),
|
|
17424
|
+
defaultCwd: exports_external.string(),
|
|
17425
|
+
ref: exports_external.string().nullable().optional(),
|
|
17426
|
+
root: exports_external.string().optional()
|
|
17427
|
+
})
|
|
17428
|
+
}),
|
|
17429
|
+
computer_run_finish: exports_external.looseObject({
|
|
17430
|
+
run: computerRun,
|
|
17431
|
+
replayed: exports_external.boolean()
|
|
17432
|
+
}),
|
|
17433
|
+
computer_run_receipt: exports_external.looseObject({
|
|
17434
|
+
receipt: computerRunReceipt
|
|
17435
|
+
}),
|
|
17436
|
+
computer_runs: exports_external.looseObject({
|
|
17437
|
+
computerId: id,
|
|
17438
|
+
threadId: id,
|
|
17439
|
+
runs: exports_external.array(computerRun)
|
|
17440
|
+
}),
|
|
17357
17441
|
computer_reprovision: exports_external.looseObject({
|
|
17358
17442
|
reprovisionId: id,
|
|
17359
17443
|
threadId: id,
|
|
@@ -17388,6 +17472,7 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
17388
17472
|
stdout: exports_external.string().optional(),
|
|
17389
17473
|
stderr: exports_external.string().optional(),
|
|
17390
17474
|
truncated: exports_external.boolean().optional(),
|
|
17475
|
+
nextCursor: exports_external.string().optional(),
|
|
17391
17476
|
exitCode: exports_external.number().int().nullable().optional()
|
|
17392
17477
|
}),
|
|
17393
17478
|
computer_process_terminate: exports_external.looseObject({
|
|
@@ -17620,6 +17705,10 @@ var MCP_TOOL_ANNOTATIONS = {
|
|
|
17620
17705
|
github_connect_repository: idempotent,
|
|
17621
17706
|
computer_open: additive,
|
|
17622
17707
|
computer_reprovision: destructiveIdempotent,
|
|
17708
|
+
computer_run_start: additive,
|
|
17709
|
+
computer_run_finish: idempotent,
|
|
17710
|
+
computer_run_receipt: readOnly,
|
|
17711
|
+
computer_runs: readOnly,
|
|
17623
17712
|
computer_exec: destructiveOpenWorld,
|
|
17624
17713
|
computer_process_read: readOnly,
|
|
17625
17714
|
computer_process_terminate: destructiveOpenWorld,
|
|
@@ -18020,14 +18109,66 @@ var ACTION_DEFINITIONS = [
|
|
|
18020
18109
|
toolset: "loop",
|
|
18021
18110
|
run: forward("computer_runtime.reprovision")
|
|
18022
18111
|
},
|
|
18112
|
+
{
|
|
18113
|
+
name: "computer_run_start",
|
|
18114
|
+
title: "Start a run",
|
|
18115
|
+
description: "Start one unit of work inside an opened Thread computer. Write Runs default to isolated execution restored from the Computer's current base snapshot, so independent work does not collide. For intentional live collaboration, pass execution='shared' and the Run works directly in the Thread Computer alongside other shared Runs. Read Runs always share. All placements present the same /workspace layout; pass runId to Run-aware Computer operations and Arbor routes them correctly. Finish every Run with computer_run_finish, which destroys its isolated environment. This creates no second Thread or durable Computer.",
|
|
18116
|
+
inputSchema: {
|
|
18117
|
+
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18118
|
+
mode: exports_external.enum(["read", "write"]).describe("write for mutable work; read for shared inspection"),
|
|
18119
|
+
execution: exports_external.enum(["shared", "isolated"]).optional().describe("write Run placement; defaults to isolated. Use shared only for intentional live collaboration on the Thread Computer"),
|
|
18120
|
+
label: exports_external.string().max(120).optional().describe("short factual label for this unit of work")
|
|
18121
|
+
},
|
|
18122
|
+
surfaces: ["computer-mcp", "computer-cli"],
|
|
18123
|
+
toolset: "loop",
|
|
18124
|
+
run: forward("computer_runtime.run_start")
|
|
18125
|
+
},
|
|
18126
|
+
{
|
|
18127
|
+
name: "computer_run_finish",
|
|
18128
|
+
title: "Finish a run",
|
|
18129
|
+
description: "Close a Run with its terminal outcome and the one line that explains it. Finishing an isolated write Run destroys its execution environment, so push or otherwise publish anything that must outlive the Run before finishing it. Repeating the same outcome is a safe no-op, and it keeps the reason the first caller settled — a different one conflicts. Say what happened in reason: it is what computer_run_receipt shows a reader who was not here.",
|
|
18130
|
+
inputSchema: {
|
|
18131
|
+
runId: exports_external.string().describe("the runId returned by computer_run_start, run_…"),
|
|
18132
|
+
outcome: exports_external.enum(["finished", "failed", "cancelled"]).optional().describe("terminal outcome; defaults to finished"),
|
|
18133
|
+
reason: exports_external.string().max(500).optional().describe("one factual line on how this unit of work ended, e.g. what shipped or what broke")
|
|
18134
|
+
},
|
|
18135
|
+
surfaces: ["computer-mcp", "computer-cli"],
|
|
18136
|
+
toolset: "loop",
|
|
18137
|
+
run: forward("computer_runtime.run_finish")
|
|
18138
|
+
},
|
|
18139
|
+
{
|
|
18140
|
+
name: "computer_run_receipt",
|
|
18141
|
+
title: "Read a run receipt",
|
|
18142
|
+
description: "READ ONLY: read one run's compact receipt — its purpose, actor, computer session, the base snapshot it forked from, its workspace and execution placement, how it ended and why, how long it took, and its lifecycle events. This is the normal way to inspect a run you or someone else started, and it stays readable after the run is terminal. Arbor keeps no process state and no command output, so the receipt says what the protocol recorded, not what scrolled past in the shell.",
|
|
18143
|
+
inputSchema: {
|
|
18144
|
+
runId: exports_external.string().describe("the run to read, run_… (from computer_run_start or computer_runs)")
|
|
18145
|
+
},
|
|
18146
|
+
surfaces: ["computer-mcp", "computer-cli"],
|
|
18147
|
+
toolset: "loop",
|
|
18148
|
+
run: forward("computer_runtime.run_receipt")
|
|
18149
|
+
},
|
|
18150
|
+
{
|
|
18151
|
+
name: "computer_runs",
|
|
18152
|
+
title: "List runs",
|
|
18153
|
+
description: "READ ONLY: list the active and recent runs of this Thread computer with each run's mode, execution placement, and workspace identity. Use it to see what other work is in flight on the same computer before starting or finishing your own.",
|
|
18154
|
+
inputSchema: {
|
|
18155
|
+
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18156
|
+
status: exports_external.enum(["active", "finished", "failed", "cancelled"]).optional().describe("filter to one lifecycle status"),
|
|
18157
|
+
limit: exports_external.number().int().min(1).max(100).optional().describe("rows to return (default 20)")
|
|
18158
|
+
},
|
|
18159
|
+
surfaces: ["computer-mcp", "computer-cli"],
|
|
18160
|
+
toolset: "loop",
|
|
18161
|
+
run: forward("computer_runtime.run_list")
|
|
18162
|
+
},
|
|
18023
18163
|
{
|
|
18024
18164
|
name: "computer_exec",
|
|
18025
18165
|
title: "Run a command",
|
|
18026
|
-
description: "Run one bounded logical operation in an opened Thread computer. Omitting cwd
|
|
18166
|
+
description: "Run one bounded logical operation in an opened Thread computer. Omitting cwd uses the environment's defaultCwd; pass cwd explicitly to override it. Pass runId to route the command according to that Run's execution placement; without runId the command executes in the parent Computer. Strict Bash semantics are ON by default. For tests, builds, installs, or any command likely to run long, prefer background=true so the call returns a processId immediately; follow it with computer_process_read using the returned cursor for small incremental tails. For a connected human, Arbor supplies ambient GitHub authorization and Git identity ephemerally without writing credentials into the workspace. Background processes stay in the environment where they were started.",
|
|
18027
18167
|
inputSchema: {
|
|
18028
18168
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18029
18169
|
command: exports_external.string().min(1).describe("the shell command to run"),
|
|
18030
|
-
|
|
18170
|
+
runId: exports_external.string().optional().describe("route this command according to this Run execution placement, run_… (from computer_run_start)"),
|
|
18171
|
+
cwd: exports_external.string().optional().describe("working directory under /workspace, or under the run"),
|
|
18031
18172
|
timeout: exports_external.number().int().min(1000).max(1800000).optional().describe("timeout in milliseconds, from 1,000 through 1,800,000"),
|
|
18032
18173
|
background: exports_external.boolean().optional().describe("start a container process and return its pid"),
|
|
18033
18174
|
strict: exports_external.boolean().optional().describe("fail on the first unhandled command or pipeline failure; defaults to true, set false only for intentional best-effort execution")
|
|
@@ -18039,11 +18180,13 @@ var ACTION_DEFINITIONS = [
|
|
|
18039
18180
|
{
|
|
18040
18181
|
name: "computer_process_read",
|
|
18041
18182
|
title: "Read a background process",
|
|
18042
|
-
description: "READ ONLY:
|
|
18183
|
+
description: "READ ONLY: Tail one process returned by computer_exec(background=true). With no cursor, returns only the latest small output window; pass nextCursor on the next read to receive only newer output. Defaults to 4 KB total and allows an explicit larger read up to 64 KB. Once terminal, also returns the final exit result.",
|
|
18043
18184
|
inputSchema: {
|
|
18044
18185
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18186
|
+
runId: exports_external.string().optional().describe("the Run that owns this process, if it was started inside a Run"),
|
|
18045
18187
|
processId: exports_external.string().min(1).describe("the opaque processId returned by computer_exec(background=true), proc_…"),
|
|
18046
|
-
|
|
18188
|
+
cursor: exports_external.string().optional().describe("continue after nextCursor from the prior process read; omit for a small latest tail"),
|
|
18189
|
+
maxBytes: exports_external.number().int().min(1024).max(65536).optional().describe("maximum combined output bytes to return; default 4,096, opt up only when needed")
|
|
18047
18190
|
},
|
|
18048
18191
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
18049
18192
|
toolset: "loop",
|
|
@@ -18055,6 +18198,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18055
18198
|
description: "Terminate one process returned by computer_exec(background=true), including its provider-owned process tree. Returns the observed terminal state so ChatGPT can stop long verification explicitly without shell PIDs or ps/kill workarounds.",
|
|
18056
18199
|
inputSchema: {
|
|
18057
18200
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18201
|
+
runId: exports_external.string().optional().describe("the Run that owns this process, if it was started inside a Run"),
|
|
18058
18202
|
processId: exports_external.string().min(1).describe("the opaque processId returned by computer_exec(background=true), proc_…")
|
|
18059
18203
|
},
|
|
18060
18204
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
@@ -18090,6 +18234,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18090
18234
|
description: "Outline the symbols a file or directory defines, resolved by the project's language server. Reach for this before reading a large unfamiliar file — unlike a grep through `computer_exec`, it returns the real declarations with their kinds rather than every textual match. Needs the semantic-code capability shown on the computer_status card.",
|
|
18091
18235
|
inputSchema: {
|
|
18092
18236
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18237
|
+
runId: exports_external.string().optional().describe("route this semantic read according to this Run execution placement, run_…"),
|
|
18093
18238
|
path: exports_external.string().max(512).describe("file or directory, absolute under /workspace or workspace-relative")
|
|
18094
18239
|
},
|
|
18095
18240
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
@@ -18102,6 +18247,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18102
18247
|
description: "Locate a declaration by its name path (`ClassName/methodName`) and optionally return its body. Use it instead of a `computer_exec` grep when you want THE definition rather than every line mentioning the name; the language server distinguishes the declaration from its call sites and its string occurrences. Needs the semantic-code capability shown on the computer_status card.",
|
|
18103
18248
|
inputSchema: {
|
|
18104
18249
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18250
|
+
runId: exports_external.string().optional().describe("route this semantic read according to this Run execution placement, run_…"),
|
|
18105
18251
|
namePath: exports_external.string().min(1).max(200).describe("symbol name path within a file, e.g. MyClass/myMethod"),
|
|
18106
18252
|
path: exports_external.string().max(512).optional().describe("optional file or directory to restrict the search to"),
|
|
18107
18253
|
includeBody: exports_external.boolean().optional().describe("include each symbol's source body"),
|
|
@@ -18117,6 +18263,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18117
18263
|
description: 'List the places that actually reference a symbol, each with a short snippet. This is the operation `computer_exec` cannot do: a text search finds the same identifier in comments, unrelated modules, and shadowed scopes, while the language server resolves real references — so it answers "is this safe to change". Needs the semantic-code capability shown on the computer_status card.',
|
|
18118
18264
|
inputSchema: {
|
|
18119
18265
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18266
|
+
runId: exports_external.string().optional().describe("route this semantic read according to this Run execution placement, run_…"),
|
|
18120
18267
|
namePath: exports_external.string().min(1).max(200).describe("name path of the symbol to trace"),
|
|
18121
18268
|
path: exports_external.string().max(512).describe("the file declaring that symbol, absolute under /workspace or workspace-relative")
|
|
18122
18269
|
},
|
|
@@ -18130,6 +18277,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18130
18277
|
description: "List the concrete implementations or subtypes of an interface, abstract type, or method. A `computer_exec` search cannot follow a type relationship — only the language server knows which declarations satisfy this one. Needs the semantic-code capability shown on the computer_status card.",
|
|
18131
18278
|
inputSchema: {
|
|
18132
18279
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18280
|
+
runId: exports_external.string().optional().describe("route this semantic read according to this Run execution placement, run_…"),
|
|
18133
18281
|
namePath: exports_external.string().min(1).max(200).describe("name path of the interface, type, or method"),
|
|
18134
18282
|
path: exports_external.string().max(512).describe("the file declaring that symbol, absolute under /workspace or workspace-relative")
|
|
18135
18283
|
},
|
|
@@ -18143,6 +18291,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18143
18291
|
description: "Return the language server's live errors and warnings for one file, mapped to symbols. Reach for it on a file you just edited: it answers in seconds without the whole-project build a `computer_exec` typecheck runs, though a green result here is not a substitute for that build. Needs the semantic-code capability shown on the computer_status card.",
|
|
18144
18292
|
inputSchema: {
|
|
18145
18293
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18294
|
+
runId: exports_external.string().optional().describe("route this semantic read according to this Run execution placement, run_…"),
|
|
18146
18295
|
path: exports_external.string().max(512).describe("the file to inspect, absolute under /workspace or workspace-relative")
|
|
18147
18296
|
},
|
|
18148
18297
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
@@ -18152,9 +18301,10 @@ var ACTION_DEFINITIONS = [
|
|
|
18152
18301
|
{
|
|
18153
18302
|
name: "computer_export",
|
|
18154
18303
|
title: "Export a Thread file",
|
|
18155
|
-
description: "Move one bounded image, MP4/WebM video, or supported file from an opened
|
|
18304
|
+
description: "Move one bounded image, MP4/WebM video, or supported file from an opened Computer or Run into a durable Thread Attachment. Pass runId to export the exact files visible to that Run execution placement. Describe what it shows so the returned attachments[].markdown has meaningful image alt text or a video/file label; put that Markdown where the media belongs and bind those ids when contributing or responding. Supply one stable idempotencyKey per logical export: safe retries return the original Attachment, while reusing the key for another path or description conflicts.",
|
|
18156
18305
|
inputSchema: {
|
|
18157
18306
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18307
|
+
runId: exports_external.string().optional().describe("route this export according to this Run execution placement, run_…"),
|
|
18158
18308
|
path: exports_external.string().describe("absolute path to one supported file under /workspace"),
|
|
18159
18309
|
description: exports_external.string().min(1).max(500).describe("concise description of what the file shows or contains; becomes image alt text, a video caption, and the Artifact summary"),
|
|
18160
18310
|
idempotencyKey: exports_external.string().min(1).max(200).describe("stable key for this ONE logical export (≤200 chars); reuse it only to retry the same path")
|
|
@@ -18166,10 +18316,11 @@ var ACTION_DEFINITIONS = [
|
|
|
18166
18316
|
{
|
|
18167
18317
|
name: "computer_write",
|
|
18168
18318
|
title: "Write a project file",
|
|
18169
|
-
description: "Write one file under /workspace. Content is UTF-8 by default; pass encoding=base64 only for binary bytes. Prefer normal editing tools for code changes; reach for this when the MCP/CLI computer surface is the only filesystem path.",
|
|
18319
|
+
description: "Write one file under /workspace. Content is UTF-8 by default; pass encoding=base64 only for binary bytes. Pass runId to route the write according to that Run: isolated Runs target their Sandbox, shared Runs target the live parent Computer. Without runId the write targets the parent Computer. Prefer normal editing tools for code changes; reach for this when the MCP/CLI computer surface is the only filesystem path.",
|
|
18170
18320
|
inputSchema: {
|
|
18171
18321
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18172
|
-
path: exports_external.string().describe("absolute path under /workspace"),
|
|
18322
|
+
path: exports_external.string().describe("absolute path under /workspace, or a path inside the run"),
|
|
18323
|
+
runId: exports_external.string().optional().describe("route this write according to this Run execution placement, run_… (from computer_run_start)"),
|
|
18173
18324
|
content: exports_external.string().describe("complete UTF-8 content, or base64 bytes when encoding=base64"),
|
|
18174
18325
|
encoding: exports_external.enum(["utf8", "base64"]).optional().describe("content encoding; defaults to utf8, use base64 for binary files")
|
|
18175
18326
|
},
|
|
@@ -18180,7 +18331,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18180
18331
|
{
|
|
18181
18332
|
name: "computer_checkpoint",
|
|
18182
18333
|
title: "Checkpoint completed work",
|
|
18183
|
-
description: "Save
|
|
18334
|
+
description: "Save the live parent Thread Computer into durable Thread lineage. This is intentionally not Run-scoped: isolated Run publication/integration is a separate contract. If your work is in an isolated Run, do not call this expecting it to save that fork; publish the work through its repository workflow first. A running background process may still be writing the workspace, so checkpointing refuses until it is finished or explicitly terminated; use computer_status to inspect active processes. For the final unit, call computer_stop instead; it performs the final checkpoint before teardown. No checkpoint is needed for computer_verify alone because remote visual capture starts no project runtime.",
|
|
18184
18335
|
inputSchema: {
|
|
18185
18336
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
|
|
18186
18337
|
},
|
|
@@ -18191,7 +18342,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18191
18342
|
{
|
|
18192
18343
|
name: "computer_publish_preview",
|
|
18193
18344
|
title: "Publish an immutable static Preview",
|
|
18194
|
-
description: "Publish one checked HTML file or bounded static build directory as a private immutable Preview after checkpointing its source. The returned arborthreads.dev URL survives computer teardown; put it on its own line to show the interactive Preview card. A directory must contain index.html, use relative local asset URLs, and cannot include dotfiles, source maps, secrets, symlinks, or server code. Supply one stable idempotencyKey per logical publication: safe retries return the original immutable URL, while reusing the key for another path/title conflicts.",
|
|
18345
|
+
description: "Publish one checked HTML file or bounded static build directory from the live parent Thread Computer as a private immutable Preview after checkpointing its source. This is intentionally not Run-scoped yet; an isolated Run must not silently publish stale parent files or imply integration. The returned arborthreads.dev URL survives computer teardown; put it on its own line to show the interactive Preview card. A directory must contain index.html, use relative local asset URLs, and cannot include dotfiles, source maps, secrets, symlinks, or server code. Supply one stable idempotencyKey per logical publication: safe retries return the original immutable URL, while reusing the key for another path/title conflicts.",
|
|
18195
18346
|
inputSchema: {
|
|
18196
18347
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18197
18348
|
path: exports_external.string().describe("absolute path to one HTML file or static build directory under /workspace"),
|
|
@@ -18205,7 +18356,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18205
18356
|
{
|
|
18206
18357
|
name: "computer_publish_app_bundle",
|
|
18207
18358
|
title: "Publish an immutable AppBundle",
|
|
18208
|
-
description: "
|
|
18359
|
+
description: "From the live parent Thread Computer, after a Bun container build is green, verify that entryPath bytes exactly match the referenced ArtifactVersion. This is intentionally not Run-scoped yet; isolated Run publication requires a separate integration/provenance decision. Then capture source hashes plus Git/workspace provenance, then freeze the Worker module and optional static assets into a content-addressed AppBundle. A mismatch is rejected; dirty or untracked source is allowed but returned as an explicit warning. Use the returned bundleId with app_deploy; retries require the same idempotencyKey.",
|
|
18209
18360
|
inputSchema: {
|
|
18210
18361
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
18211
18362
|
artifactVersionId: exports_external.string().describe("the source ArtifactVersion, artv_…"),
|
|
@@ -18238,7 +18389,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18238
18389
|
{
|
|
18239
18390
|
name: "get_computer",
|
|
18240
18391
|
title: "Read a Thread computer",
|
|
18241
|
-
description: "Read a Thread's redacted effective recipe, active materialized generation, compatibility state, historical generation lineage, current Topic/Thread snapshot refs, recent attachment receipts, and replacement outcomes. Recipe metadata includes provider/backend/profile/repositories/config revision and whether setup is configured, never setup content or credentials. This is durable Arbor protocol state, not live process/presence status.",
|
|
18392
|
+
description: "Read a Thread's redacted effective recipe, active materialized generation, compatibility state, historical generation lineage, current Topic/Thread snapshot refs, recent attachment receipts, active and recent runs with each run's mode/execution/workspace, and replacement outcomes. Recipe metadata includes provider/backend/profile/repositories/config revision and whether setup is configured, never setup content or credentials. This is durable Arbor protocol state, not live process/presence status.",
|
|
18242
18393
|
inputSchema: {
|
|
18243
18394
|
threadId: exports_external.string().describe("the Thread, thr_…"),
|
|
18244
18395
|
lineageLimit: exports_external.number().int().min(1).max(100).optional().describe("recent receipts/lineage rows (default 20)")
|
package/package.json
CHANGED