@lambdacurry/arbor 0.12.1 → 0.12.3
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 +42 -8
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -1803,7 +1803,25 @@ var BASE_MS = Date.parse("2026-07-20T15:00:00.000Z");
|
|
|
1803
1803
|
// ../core/src/ops/agent-pairing.ts
|
|
1804
1804
|
var PAIRING_TTL_MS = 15 * 60 * 1000;
|
|
1805
1805
|
// ../core/src/ops/preview.ts
|
|
1806
|
+
var PREVIEW_ENTRY_MIME = "text/html; charset=utf-8";
|
|
1806
1807
|
var PREVIEW_MAX_BYTES = 2 * 1024 * 1024;
|
|
1808
|
+
var PREVIEW_MAX_FILE_BYTES = 10 * 1024 * 1024;
|
|
1809
|
+
var PREVIEW_MAX_TOTAL_BYTES = 100 * 1024 * 1024;
|
|
1810
|
+
var PREVIEW_MIME_TYPES = new Set([
|
|
1811
|
+
PREVIEW_ENTRY_MIME,
|
|
1812
|
+
"text/css; charset=utf-8",
|
|
1813
|
+
"text/javascript; charset=utf-8",
|
|
1814
|
+
"application/json; charset=utf-8",
|
|
1815
|
+
"application/wasm",
|
|
1816
|
+
"image/png",
|
|
1817
|
+
"image/jpeg",
|
|
1818
|
+
"image/gif",
|
|
1819
|
+
"image/webp",
|
|
1820
|
+
"image/svg+xml",
|
|
1821
|
+
"image/x-icon",
|
|
1822
|
+
"font/woff",
|
|
1823
|
+
"font/woff2"
|
|
1824
|
+
]);
|
|
1807
1825
|
// ../core/src/queries/lane-match.ts
|
|
1808
1826
|
var STOP_WORDS = new Set("a an and are as at be by for from has have here how i in is it me of on or our the their they this to was what when where which who will with you your".split(" "));
|
|
1809
1827
|
// ../core/src/queries/activity.ts
|
|
@@ -1814,9 +1832,12 @@ class InMemoryBlobStore {
|
|
|
1814
1832
|
async put(key, bytes, mimeType) {
|
|
1815
1833
|
this.store.set(key, { bytes: new Uint8Array(bytes), mimeType });
|
|
1816
1834
|
}
|
|
1817
|
-
async get(key) {
|
|
1835
|
+
async get(key, range) {
|
|
1818
1836
|
const blob2 = this.store.get(key);
|
|
1819
|
-
|
|
1837
|
+
if (!blob2)
|
|
1838
|
+
return null;
|
|
1839
|
+
const bytes = range ? blob2.bytes.slice(range.offset, range.offset + range.length) : new Uint8Array(blob2.bytes);
|
|
1840
|
+
return { bytes, mimeType: blob2.mimeType };
|
|
1820
1841
|
}
|
|
1821
1842
|
async delete(key) {
|
|
1822
1843
|
this.store.delete(key);
|
|
@@ -16244,7 +16265,7 @@ var ACTIONS = [
|
|
|
16244
16265
|
{
|
|
16245
16266
|
name: "contribute",
|
|
16246
16267
|
title: "Contribute to a thread",
|
|
16247
|
-
description: "Add your own typed contribution (proposal/critique/question/evidence/…) — ONE point per contribution, on the record. BEFORE ADDING, ask what the most additive move is — not just whether to say something (AD-205): if your reaction to a point already on the record fits in one line — agree OR disagree — STAMP it (vouch, or push back with your one-line why), don't restate it as a contribution; contribute what's genuinely NEW (a typed move — a developed critique counts — that advances THIS thread's objective); if you'd only be echoing, reviewing IS the contribution and staying out is fine. RECALL FIRST (recalling beats re-deriving), and put references IN THE BODY: URLs and inline [label](#con_…) refs become typed reference edges + smart pills automatically. Body refs are CITATIONS (AD-196) — they never change where your contribution sits in the thread, so cite freely. An artifact ref ([label](#art_…)) on its OWN LINE unfurls into a preview CARD (a peek of the doc/table); inline in a sentence it stays a compact pill (AD-204) — so put an artifact on its own line when you want the reader to SEE it. A canonical pvv-….arborthreads.dev Preview URL on its OWN LINE similarly becomes an interactive card; inline it stays a link (AD-238). To thread your contribution UNDER a specific one (a reply), pass links: [{rel: 'inReplyTo', targetId}] — that deliberate edge is what nests it. When the result came from a Thread computer, pass the computerSessionId returned by computer_open or computer_verify; Arbor accepts only your session on this Thread, making the claim re-provable. For
|
|
16268
|
+
description: "Add your own typed contribution (proposal/critique/question/evidence/…) — ONE point per contribution, on the record. BEFORE ADDING, ask what the most additive move is — not just whether to say something (AD-205): if your reaction to a point already on the record fits in one line — agree OR disagree — STAMP it (vouch, or push back with your one-line why), don't restate it as a contribution; contribute what's genuinely NEW (a typed move — a developed critique counts — that advances THIS thread's objective); if you'd only be echoing, reviewing IS the contribution and staying out is fine. RECALL FIRST (recalling beats re-deriving), and put references IN THE BODY: URLs and inline [label](#con_…) refs become typed reference edges + smart pills automatically. Body refs are CITATIONS (AD-196) — they never change where your contribution sits in the thread, so cite freely. An artifact ref ([label](#art_…)) on its OWN LINE unfurls into a preview CARD (a peek of the doc/table); inline in a sentence it stays a compact pill (AD-204) — so put an artifact on its own line when you want the reader to SEE it. A canonical pvv-….arborthreads.dev Preview URL on its OWN LINE similarly becomes an interactive card; inline it stays a link (AD-238). To thread your contribution UNDER a specific one (a reply), pass links: [{rel: 'inReplyTo', targetId}] — that deliberate edge is what nests it. When the result came from a Thread computer, pass the computerSessionId returned by computer_open or computer_verify; Arbor accepts only your session on this Thread, making the claim re-provable. For media evidence, put the ready-to-place attachments[].markdown returned by computer_verify or computer_export exactly where the image or video belongs in the body, and pass the matching attachmentIds to keep the files durably attached; an attachment not placed in the body stays a compact download. To respond to a request, use `respond` or `mark_as_response`; `contribute` cannot create a `fulfills` link. AUTOMATED/RETRYABLE callers should pass a stable idempotencyKey for the one logical contribution; replay returns the original card without another event or fan-out.",
|
|
16248
16269
|
inputSchema: {
|
|
16249
16270
|
threadId: exports_external.string().describe("the thread id, e.g. thr_…"),
|
|
16250
16271
|
type: exports_external.enum(CONTRIBUTION_TYPES).describe("the contribution type (AD-066 taxonomy)"),
|
|
@@ -16531,14 +16552,27 @@ var ACTIONS = [
|
|
|
16531
16552
|
toolset: "loop",
|
|
16532
16553
|
run: forward("computer_runtime.read")
|
|
16533
16554
|
},
|
|
16555
|
+
{
|
|
16556
|
+
name: "computer_export",
|
|
16557
|
+
title: "Export a Thread file",
|
|
16558
|
+
description: "Move one bounded image, MP4/WebM video, or supported file from an opened computer into a durable Thread Attachment. Returns attachmentIds and ready-to-place attachments[].markdown; put the Markdown where the media belongs and bind those ids when contributing or responding.",
|
|
16559
|
+
inputSchema: {
|
|
16560
|
+
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
16561
|
+
path: exports_external.string().describe("absolute path to one supported file under /workspace")
|
|
16562
|
+
},
|
|
16563
|
+
surfaces: ["computer-mcp", "computer-cli"],
|
|
16564
|
+
toolset: "loop",
|
|
16565
|
+
run: forward("computer_runtime.export")
|
|
16566
|
+
},
|
|
16534
16567
|
{
|
|
16535
16568
|
name: "computer_write",
|
|
16536
16569
|
title: "Write a project file",
|
|
16537
|
-
description: "Write one file under /workspace. Prefer normal editing tools for code changes; reach for this when the MCP/CLI computer surface is the only filesystem path.",
|
|
16570
|
+
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.",
|
|
16538
16571
|
inputSchema: {
|
|
16539
16572
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
16540
16573
|
path: exports_external.string().describe("absolute path under /workspace"),
|
|
16541
|
-
content: exports_external.string().describe("complete UTF-8
|
|
16574
|
+
content: exports_external.string().describe("complete UTF-8 content, or base64 bytes when encoding=base64"),
|
|
16575
|
+
encoding: exports_external.enum(["utf8", "base64"]).optional().describe("content encoding; defaults to utf8, use base64 for binary files")
|
|
16542
16576
|
},
|
|
16543
16577
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
16544
16578
|
toolset: "loop",
|
|
@@ -16572,10 +16606,10 @@ var ACTIONS = [
|
|
|
16572
16606
|
{
|
|
16573
16607
|
name: "computer_publish_preview",
|
|
16574
16608
|
title: "Publish an immutable static Preview",
|
|
16575
|
-
description: "Publish one checked HTML
|
|
16609
|
+
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.",
|
|
16576
16610
|
inputSchema: {
|
|
16577
16611
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
16578
|
-
path: exports_external.string().describe("absolute path to one HTML file under /workspace"),
|
|
16612
|
+
path: exports_external.string().describe("absolute path to one HTML file or static build directory under /workspace"),
|
|
16579
16613
|
title: exports_external.string().min(1).max(160).describe("short factual Preview title")
|
|
16580
16614
|
},
|
|
16581
16615
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
@@ -16812,7 +16846,7 @@ var ACTIONS = [
|
|
|
16812
16846
|
{
|
|
16813
16847
|
name: "respond",
|
|
16814
16848
|
title: "Respond to a request",
|
|
16815
|
-
description: "Fulfill a request addressed to you by posting the contribution that responds to it (AD-048 respond-not-claim). Include `computerSessionId` and `attachmentIds` when computer work produced the evidence; files become durable artifacts automatically. For
|
|
16849
|
+
description: "Fulfill a request addressed to you by posting the contribution that responds to it (AD-048 respond-not-claim). Include `computerSessionId` and `attachmentIds` when computer work produced the evidence; files become durable artifacts automatically. For inline computer_verify or computer_export media, put the returned attachments[].markdown exactly where it belongs in the response body. Put a canonical pvv-….arborthreads.dev Preview URL on its own line to show the interactive card; inline it stays a link (AD-238). Reach for this after `inbox` surfaces an obligation. NOTE: a review request is met by `stamp` (AD-130), not `respond`. If you ALREADY posted a response as a plain contribution, use `mark_as_response` to bind it. Returns the request's recomputed status (open | completed | expired).",
|
|
16816
16850
|
inputSchema: {
|
|
16817
16851
|
requestId: exports_external.string().describe("the request id, req_…"),
|
|
16818
16852
|
type: exports_external.enum(CONTRIBUTION_TYPES).describe("the contribution type"),
|
package/package.json
CHANGED