@lambdacurry/arbor 0.21.4 → 0.21.6
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 +56 -22
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -2247,6 +2247,7 @@ var attachments = sqliteTable("attachments", {
|
|
|
2247
2247
|
r2Key: text("r2_key").notNull(),
|
|
2248
2248
|
uploadedByProfileId: text("uploaded_by_profile_id").notNull().references(() => profiles.id),
|
|
2249
2249
|
computerSessionId: text("computer_session_id").references(() => computerSessions.id),
|
|
2250
|
+
computerPath: text("computer_path"),
|
|
2250
2251
|
idempotencyKey: text("idempotency_key"),
|
|
2251
2252
|
idempotencyFingerprint: text("idempotency_fingerprint"),
|
|
2252
2253
|
sha256: text("sha256"),
|
|
@@ -2307,6 +2308,17 @@ var artifactLivePreviewSurfaces = sqliteTable("artifact_live_preview_surfaces",
|
|
|
2307
2308
|
}, (t) => ({
|
|
2308
2309
|
threadUq: uniqueIndex("artifact_live_preview_surfaces_thread_uniq").on(t.threadId)
|
|
2309
2310
|
}));
|
|
2311
|
+
var artifactFileSnapshots = sqliteTable("artifact_file_snapshots", {
|
|
2312
|
+
artifactId: text("artifact_id").primaryKey().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
2313
|
+
sourceAttachmentId: text("source_attachment_id").notNull().references(() => attachments.id),
|
|
2314
|
+
previewAttachmentId: text("preview_attachment_id").notNull().references(() => attachments.id),
|
|
2315
|
+
capturedByProfileId: text("captured_by_profile_id").notNull().references(() => profiles.id),
|
|
2316
|
+
executionContextId: text("execution_context_id").notNull().references(() => executionContexts.id),
|
|
2317
|
+
capturedAt: ts("captured_at").notNull()
|
|
2318
|
+
}, (t) => ({
|
|
2319
|
+
sourceIdx: index("artifact_file_snapshots_source_attachment_idx").on(t.sourceAttachmentId),
|
|
2320
|
+
previewIdx: index("artifact_file_snapshots_preview_attachment_idx").on(t.previewAttachmentId)
|
|
2321
|
+
}));
|
|
2310
2322
|
var artifactVersions = sqliteTable("artifact_versions", {
|
|
2311
2323
|
id: text("id").primaryKey(),
|
|
2312
2324
|
artifactId: text("artifact_id").notNull().references(() => artifacts.id),
|
|
@@ -17783,6 +17795,8 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
17783
17795
|
type: exports_external.string(),
|
|
17784
17796
|
status: exports_external.string(),
|
|
17785
17797
|
private: exports_external.literal(true),
|
|
17798
|
+
sharedThreadId: id,
|
|
17799
|
+
sharedContributionId: id,
|
|
17786
17800
|
replayed: exports_external.boolean(),
|
|
17787
17801
|
association: jsonObject.nullable(),
|
|
17788
17802
|
message: exports_external.string()
|
|
@@ -18042,6 +18056,8 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
18042
18056
|
appBundles: exports_external.array(jsonObject).optional(),
|
|
18043
18057
|
usedByApps: exports_external.array(jsonObject).optional(),
|
|
18044
18058
|
livePreview: artifactLivePreview.nullable().optional(),
|
|
18059
|
+
snapshot: jsonObject.nullable().optional(),
|
|
18060
|
+
sourceLivePreview: jsonObject.nullable().optional(),
|
|
18045
18061
|
threadId: id.nullable().optional(),
|
|
18046
18062
|
changed: exports_external.boolean().optional()
|
|
18047
18063
|
}),
|
|
@@ -18056,6 +18072,8 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
18056
18072
|
appBundles: exports_external.array(jsonObject),
|
|
18057
18073
|
usedByApps: exports_external.array(jsonObject),
|
|
18058
18074
|
livePreview: artifactLivePreview.nullable(),
|
|
18075
|
+
snapshot: jsonObject.nullable().optional(),
|
|
18076
|
+
sourceLivePreview: jsonObject.nullable().optional(),
|
|
18059
18077
|
watching: exports_external.boolean(),
|
|
18060
18078
|
url: exports_external.string()
|
|
18061
18079
|
}),
|
|
@@ -18814,7 +18832,7 @@ var CONTRIBUTION_ADD_LINK_RELS = [
|
|
|
18814
18832
|
"tracked-as",
|
|
18815
18833
|
"delivered-by"
|
|
18816
18834
|
];
|
|
18817
|
-
var ARBOR_FEEDBACK_GUIDANCE = `ARBOR-SPECIFIC FEEDBACK —
|
|
18835
|
+
var ARBOR_FEEDBACK_GUIDANCE = `ARBOR-SPECIFIC FEEDBACK — File ONE bounded report through \`contribute_arbor_feedback\` when Arbor itself caused meaningful friction: confusing semantics; surprising Arbor UI/MCP/CLI behavior; a missing Arbor capability; repeated Arbor retries; an Arbor-specific workaround; or misleading state, recovery guidance, or ergonomics. Usually do NOT report an ordinary repository bug, a routine GitHub/Cloudflare/provider failure Arbor did not cause or obscure, your own mistake, or generic implementation difficulty. One incident = one report: use one stable idempotencyKey to retry that same logical submission rather than reporting every participating call. Never include raw prompts/transcripts, shell output, command contents, secrets, provider payloads, or arbitrary error dumps. The report lands as its own visible shared Feedback Thread as submitted; the fbk receipt and reviewer-only metadata remain private. \`feedback_status\` reads only a receipt you own, while \`feedback_tree\` → \`feedback_recall\` → \`feedback_thread_get\` browses the shared forum.`;
|
|
18818
18836
|
var ORIENTATION = `Arbor is your team's deliberation room and shared memory — people and agents settle typed work here, and Arbor remembers what's decided. To work well:
|
|
18819
18837
|
|
|
18820
18838
|
${ARBOR_FEEDBACK_GUIDANCE}
|
|
@@ -18841,10 +18859,10 @@ ${ARBOR_FEEDBACK_GUIDANCE}
|
|
|
18841
18859
|
3. ONE RUN PER TASK. A write Run defaults to an isolated execution environment with its own filesystem, processes, ports, and /tmp while preserving /workspace paths; a read Run shares the parent. Pass runId to Run-aware tools. If a response is lost, recover the durable operation/process identity from computer_run_receipt and read it before retrying. Once every operation is settled, computer_run_suspend publishes the exact workspace and releases the provider during an external wait; the next Run-aware operation restores that checkpoint under the same runId automatically. Suspension refuses active processes or unsettled outcomes and never replays unknown work, so reconcile process and Git/publication evidence first. An isolated local commit or Preview is not Git publication; push coherent work and prove it with computer_repo_work_status before computer_run_finish destroys the final placement. discard=true is the explicit choice to destroy proven non-durable work.
|
|
18842
18860
|
4. CHECKPOINT COMPLETE PARENT UNITS. computer_checkpoint advances immutable parent lineage after an intermediate complete unit; computer_stop performs the final checkpoint before teardown. An isolated Run Preview is durable review output, not adoption or a checkpoint. The internal provider-handle publication operations are not agent tools.
|
|
18843
18861
|
5. GIT AND GITHUB ARE ORDINARY COMMANDS AFTER AUTHORIZATION. Clone, fetch, pull, push, and gh run through computer_exec using a connected human's just-in-time ambient GitHub identity. Credentials never enter argv, workspace files, Git config, checkpoints, Events, logs, or receipts. A restored Computer deliberately keeps the checkout age of its snapshot, so fetch/pull before trusting remote state.
|
|
18844
|
-
6. VERIFY, PREVIEW, AND EXPORT. computer_verify captures a public URL directly without opening a project runtime. computer_publish_preview preserves immutable static output from either the parent or an active isolated write Run. computer_export moves bounded files into durable Thread Attachments; place returned Markdown exactly where the media belongs and cite the matching attachment ids.
|
|
18862
|
+
6. VERIFY, PREVIEW, AND EXPORT. computer_verify captures a public URL directly without opening a project runtime. computer_publish_preview preserves immutable static output from either the parent or an active isolated write Run. computer_export moves bounded files into durable Thread Attachments; for a computer:// file Artifact asleep face, export the exact locator path .tldr and a same-Thread PNG, then use artifact set_snapshot. computer_export itself does not call set_snapshot; place returned Markdown exactly where the media belongs and cite the matching attachment ids.
|
|
18845
18863
|
7. PACKAGE, DEPLOY, ACTIVATE, AND OPERATE APPS HERE. computer_publish_app_bundle creates the immutable executable bundle from verified parent bytes. For short-lived public Artifact experiments use preview_app_create/get/retire; for published Space Apps use app_create, app_config_apply, app_deploy, app_deployment_get, app_activate, app_get, app_fetch/app_request, app_rollback, app_set_access, app_reset_state/app_restore_state, and app_archive as one workflow-closed release surface. First-class Organization/Profile Secrets remain on Arbor's collaboration MCP because they are broader identity-owned resources; App configuration here references existing Secret ids and never accepts or returns secret material.
|
|
18846
18864
|
8. FINISH WHAT YOU START. Stop the parent after its final complete unit, finish every Run, and preserve evidence before teardown. When reporting collaboration conclusions through Arbor, pass the producing computerSessionId and attachmentIds to contribute or respond.
|
|
18847
|
-
9. CLOSE OUT ARBOR DOGFOOD. When developing Arbor through Arbor, ask: “Did Arbor itself create meaningful friction or require an Arbor-specific workaround?” If yes, apply the classifier above and
|
|
18865
|
+
9. CLOSE OUT ARBOR DOGFOOD. When developing Arbor through Arbor, ask: “Did Arbor itself create meaningful friction or require an Arbor-specific workaround?” If yes, apply the classifier above and file one bounded report before closing the development loop; keep unrelated product friction out of the implementation Thread. If no, close normally without manufacturing feedback.`;
|
|
18848
18866
|
var PROSE_LISTS = exports_external.registry();
|
|
18849
18867
|
function proseList(description) {
|
|
18850
18868
|
const schema = exports_external.array(exports_external.string()).describe(description);
|
|
@@ -18958,7 +18976,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18958
18976
|
{
|
|
18959
18977
|
name: "feedback_tree",
|
|
18960
18978
|
title: "Browse the shared Arbor Feedback forum",
|
|
18961
|
-
description: "READ ONLY: Browse the global
|
|
18979
|
+
description: "READ ONLY: Browse the global Arbor Feedback forum by Topic and optional Thread roster; the global scope is implied and no Space id is required. New reports appear as their own shared Threads as submitted; private receipt metadata and reviewer diagnostics are never returned.",
|
|
18962
18980
|
inputSchema: {
|
|
18963
18981
|
depth: exports_external.enum(["topics", "threads"]).optional().describe("topics (default) or threads to include each Topic's shared Thread roster"),
|
|
18964
18982
|
includeArchived: exports_external.boolean().optional().describe("include archived Topics/Threads for historical moderation or lookup (default false)")
|
|
@@ -18970,7 +18988,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18970
18988
|
{
|
|
18971
18989
|
name: "feedback_recall",
|
|
18972
18990
|
title: "Find known Arbor feedback",
|
|
18973
|
-
description: "READ ONLY: Search the global shared Arbor Feedback forum for
|
|
18991
|
+
description: "READ ONLY: Search the global shared Arbor Feedback forum for reports, workarounds, and decisions; scope to a Topic after feedback_tree when useful. New report bodies are searchable as submitted; private receipt ids, reporter metadata, and reviewer diagnostics are never returned.",
|
|
18974
18992
|
inputSchema: {
|
|
18975
18993
|
query: exports_external.string().min(1).describe("the Arbor friction, issue, workaround, or idea to find"),
|
|
18976
18994
|
topicId: exports_external.string().optional().describe("optional shared Feedback Topic id from feedback_tree"),
|
|
@@ -18983,7 +19001,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18983
19001
|
{
|
|
18984
19002
|
name: "feedback_thread_get",
|
|
18985
19003
|
title: "Read a shared Arbor Feedback thread",
|
|
18986
|
-
description: "READ ONLY: Read one
|
|
19004
|
+
description: "READ ONLY: Read one shared Arbor Feedback Thread, following a merge redirect to its canonical destination while preserving shared provenance. A newly filed report appears here as submitted; private receipt ids, reporter organization metadata, diagnostics, and private associations are not projected.",
|
|
18987
19005
|
inputSchema: {
|
|
18988
19006
|
threadId: exports_external.string().describe("the shared Feedback Thread id, thr_…")
|
|
18989
19007
|
},
|
|
@@ -18993,16 +19011,16 @@ var ACTION_DEFINITIONS = [
|
|
|
18993
19011
|
},
|
|
18994
19012
|
{
|
|
18995
19013
|
name: "contribute_arbor_feedback",
|
|
18996
|
-
title: "
|
|
18997
|
-
description: "
|
|
19014
|
+
title: "Contribute feedback about Arbor",
|
|
19015
|
+
description: "File one bounded report when Arbor itself caused meaningful product or ergonomics friction; do not use this for ordinary repository bugs, routine un-obscured provider failures, agent mistakes, or generic implementation difficulty. The body lands as the first contribution in its own visible shared Feedback Thread; one incident should produce one report, with a stable idempotencyKey used only to retry that same submission.",
|
|
18998
19016
|
inputSchema: {
|
|
18999
19017
|
type: exports_external.enum(ARBOR_FEEDBACK_TYPES).optional().describe("the contribution move (default comment); decision is reserved for shared forum curation"),
|
|
19000
|
-
body: exports_external.string().min(1).describe("the
|
|
19001
|
-
summary: exports_external.string().max(500).optional().describe("optional
|
|
19018
|
+
body: exports_external.string().min(1).describe("the feedback body, shared as submitted in its own Thread"),
|
|
19019
|
+
summary: exports_external.string().max(500).optional().describe("optional gist, at most 500 characters; also seeds the shared Thread title"),
|
|
19002
19020
|
confidence: exports_external.number().int().min(0).max(100).optional().describe("optional 0–100 confidence"),
|
|
19003
|
-
idempotencyKey: exports_external.string().min(1).max(200).optional().describe("stable key for this ONE
|
|
19004
|
-
threadId: exports_external.string().optional().describe("optional shared Feedback Thread
|
|
19005
|
-
topicId: exports_external.string().optional().describe("optional shared Feedback Topic
|
|
19021
|
+
idempotencyKey: exports_external.string().min(1).max(200).optional().describe("stable key for this ONE report; safe retries return the same receipt and shared Thread"),
|
|
19022
|
+
threadId: exports_external.string().optional().describe("optional related shared Feedback Thread; its Topic becomes the new report Thread's Topic"),
|
|
19023
|
+
topicId: exports_external.string().optional().describe("optional destination shared Feedback Topic for the new report Thread"),
|
|
19006
19024
|
computerSessionId: exports_external.string().optional().describe("optional Arbor Computer session you own; only its id is attached, never shell output or files")
|
|
19007
19025
|
},
|
|
19008
19026
|
surfaces: ["mcp", "cli"],
|
|
@@ -19011,7 +19029,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19011
19029
|
},
|
|
19012
19030
|
{
|
|
19013
19031
|
name: "feedback_status",
|
|
19014
|
-
title: "Check your
|
|
19032
|
+
title: "Check your Arbor feedback receipt",
|
|
19015
19033
|
description: "READ ONLY: Check the useful lifecycle of one private Arbor feedback receipt you own. Missing and not-owned receipts look identical, and this returns no raw body, identities, moderator diagnostics, or shared association targets.",
|
|
19016
19034
|
inputSchema: {
|
|
19017
19035
|
feedbackId: exports_external.string().describe("your private Arbor feedback receipt id, fbk_…")
|
|
@@ -19023,7 +19041,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19023
19041
|
{
|
|
19024
19042
|
name: "admin_feedback_capability",
|
|
19025
19043
|
title: "Manage Arbor Feedback capabilities",
|
|
19026
|
-
description: "Privileged: list or set explicit shared-moderation and
|
|
19044
|
+
description: "Privileged: list or set explicit shared-moderation and receipt-review grants. These capabilities are deliberately separate; granting moderation does not grant access to reporter/reviewer receipt metadata.",
|
|
19027
19045
|
inputSchema: {
|
|
19028
19046
|
verb: exports_external.enum(["list", "set"]).describe("list grants, or set one profile capability"),
|
|
19029
19047
|
profileId: exports_external.string().optional().describe("set: the profile receiving or losing the grant"),
|
|
@@ -19037,7 +19055,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19037
19055
|
{
|
|
19038
19056
|
name: "admin_feedback_evidence",
|
|
19039
19057
|
title: "Review private Arbor feedback evidence",
|
|
19040
|
-
description: "Privileged
|
|
19058
|
+
description: "Privileged receipt-review surface: list/get fbk receipt metadata, associate or disassociate receipts with shared Topics/Threads, and mark review state. Report bodies are already filed in their own shared Threads; this surface additionally exposes reporter/reviewer metadata and does not grant shared-forum moderation.",
|
|
19041
19059
|
inputSchema: {
|
|
19042
19060
|
verb: exports_external.enum(["list", "get", "associate", "disassociate", "status"]).describe("the private-evidence review action"),
|
|
19043
19061
|
feedbackId: exports_external.string().optional().describe("get/associate/disassociate/status: private feedback id"),
|
|
@@ -19074,7 +19092,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19074
19092
|
{
|
|
19075
19093
|
name: "admin_feedback_thread",
|
|
19076
19094
|
title: "Maintain and merge shared Feedback Threads",
|
|
19077
|
-
description: "Privileged shared-forum moderation: create/update/move/transition/archive/restore Threads or merge a duplicate into a canonical destination with redirect and provenance. Merge safely repoints
|
|
19095
|
+
description: "Privileged shared-forum moderation: create/update/move/transition/archive/restore Threads or merge a duplicate into a canonical destination with redirect and provenance. Merge safely repoints receipt associations without duplicating report bodies.",
|
|
19078
19096
|
inputSchema: {
|
|
19079
19097
|
action: exports_external.enum(["create", "update", "move", "transition", "archive", "restore", "merge"]).describe("the Thread lifecycle or merge action"),
|
|
19080
19098
|
threadId: exports_external.string().optional().describe("update/move/transition/archive/restore: Thread id"),
|
|
@@ -19605,7 +19623,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19605
19623
|
{
|
|
19606
19624
|
name: "computer_export",
|
|
19607
19625
|
title: "Export a Thread file",
|
|
19608
|
-
description: "Export one bounded file from the parent Computer or a Run
|
|
19626
|
+
description: "Export one bounded file from the parent Computer or a Run as a durable Thread Attachment, with ready-to-place attachments[].markdown to put exactly where the media belongs and bind by attachment id. For a Layer 1 snapshot, export the exact computer:// .tldr locator path (stamping computerPath) and a same-Thread PNG, then use artifact set_snapshot; this command never mints.",
|
|
19609
19627
|
inputSchema: {
|
|
19610
19628
|
computerSessionId: exports_external.string().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
|
|
19611
19629
|
runId: exports_external.string().optional().describe("route this export according to this Run execution placement, run_…"),
|
|
@@ -19806,6 +19824,19 @@ var ACTION_DEFINITIONS = [
|
|
|
19806
19824
|
verb: Array.isArray(input.patches) ? "patch" : "replace"
|
|
19807
19825
|
})
|
|
19808
19826
|
},
|
|
19827
|
+
{
|
|
19828
|
+
name: "set_artifact_snapshot",
|
|
19829
|
+
title: "Set an Artifact's stored file snapshot",
|
|
19830
|
+
description: "After computer_export of the exact computer:// .tldr locator path and a same-Thread PNG, use this command (the artifact verb=set_snapshot move) to pin those exported bytes as the Computer-backed file Artifact's asleep/share face. This does not change its locator or create runtime.",
|
|
19831
|
+
inputSchema: {
|
|
19832
|
+
artifactId: exports_external.string().describe("the Computer-backed file Artifact, art_…"),
|
|
19833
|
+
sourceAttachmentId: exports_external.string().describe("exported .tldr Attachment, att_…"),
|
|
19834
|
+
previewAttachmentId: exports_external.string().describe("exported PNG Attachment, att_…")
|
|
19835
|
+
},
|
|
19836
|
+
surfaces: ["cli"],
|
|
19837
|
+
toolset: "artifacts",
|
|
19838
|
+
run: forward("artifact.setSnapshot")
|
|
19839
|
+
},
|
|
19809
19840
|
{
|
|
19810
19841
|
name: "set_artifact_live_preview",
|
|
19811
19842
|
title: "Set an Artifact's live Thread surface",
|
|
@@ -20633,9 +20664,9 @@ var ACTION_DEFINITIONS = [
|
|
|
20633
20664
|
{
|
|
20634
20665
|
name: "artifact",
|
|
20635
20666
|
title: "Create or edit an Artifact",
|
|
20636
|
-
description: "Create or edit a durable versioned Artifact, bind its executable Thread Live Preview, or promote a Thread attachment; read artifact_get before changing it, while lifecycle/removal stay in artifact_transition and artifact_delete.
|
|
20667
|
+
description: "Create or edit a durable versioned Artifact, bind its executable Thread Live Preview, set a Computer-file asleep/share snapshot, or promote a Thread attachment; for a computer:// .tldr snapshot mint: computer_export the exact locator path and same-Thread PNG, then use set_snapshot. Board save and TLP do not mint snapshots. set_snapshot does not wake Computer or change the locator; read artifact_get before changing it, while lifecycle/removal stay in artifact_transition and artifact_delete.",
|
|
20637
20668
|
inputSchema: {
|
|
20638
|
-
verb: exports_external.enum(["create", "edit", "set_live_preview", "promote_attachment"]).describe("which artifact move"),
|
|
20669
|
+
verb: exports_external.enum(["create", "edit", "set_live_preview", "set_snapshot", "promote_attachment"]).describe("which artifact move"),
|
|
20639
20670
|
title: exports_external.string().optional().describe("create: the artifact's title"),
|
|
20640
20671
|
kind: exports_external.enum(["doc", "table", "diagram", "html", "file"]).optional().describe("create: structural kind (default file). doc/table/diagram/html are editable text"),
|
|
20641
20672
|
type: exports_external.string().optional().describe("create: semantic type, e.g. decision|summary|plan|markdown|table|research-brief"),
|
|
@@ -20646,11 +20677,13 @@ var ACTION_DEFINITIONS = [
|
|
|
20646
20677
|
sourceThreadId: exports_external.string().optional().describe("create: the thread it came from"),
|
|
20647
20678
|
computerSessionId: exports_external.string().optional().describe("create: the attached computer session that produced it, cms_…"),
|
|
20648
20679
|
sourceContributionIds: exports_external.array(exports_external.string()).optional().describe("create: contributions it distills"),
|
|
20649
|
-
artifactId: exports_external.string().optional().describe("edit/set_live_preview: the Artifact, art_…"),
|
|
20680
|
+
artifactId: exports_external.string().optional().describe("edit/set_live_preview/set_snapshot: the Artifact, art_…"),
|
|
20650
20681
|
threadId: exports_external.string().optional().describe("set_live_preview: the configured Thread Live Preview, thr_…; omit to clear the binding"),
|
|
20651
20682
|
baseVersion: exports_external.number().optional().describe("edit: the version you READ (from get/create) — stale base is rejected with the current source"),
|
|
20652
20683
|
patches: exports_external.array(exports_external.object({ old: exports_external.string(), new: exports_external.string() })).optional().describe("edit: exact-match hunks applied in order, atomically; each old must match exactly once"),
|
|
20653
20684
|
note: exports_external.string().optional().describe("edit: one-line summary of what changed"),
|
|
20685
|
+
sourceAttachmentId: exports_external.string().optional().describe("set_snapshot: computer_export of the exact computer:// locator path; MIME application/vnd.tldraw+json, computerPath stamped and matching defaultCwd + locator"),
|
|
20686
|
+
previewAttachmentId: exports_external.string().optional().describe("set_snapshot: same-Thread computer_export image/png Attachment, used as the asleep face preview"),
|
|
20654
20687
|
attachmentId: exports_external.string().optional().describe("promote_attachment: the upload, att_…")
|
|
20655
20688
|
},
|
|
20656
20689
|
surfaces: ["mcp"],
|
|
@@ -20659,13 +20692,14 @@ var ACTION_DEFINITIONS = [
|
|
|
20659
20692
|
create: "artifact.create",
|
|
20660
20693
|
edit: "artifact.edit",
|
|
20661
20694
|
set_live_preview: "artifact.setLivePreview",
|
|
20695
|
+
set_snapshot: "artifact.setSnapshot",
|
|
20662
20696
|
promote_attachment: "attachment.promote"
|
|
20663
20697
|
}, (verb, input) => verb === "edit" ? { ...input, verb: Array.isArray(input.patches) ? "patch" : "replace" } : input)
|
|
20664
20698
|
},
|
|
20665
20699
|
{
|
|
20666
20700
|
name: "artifact_get",
|
|
20667
20701
|
title: "Read an Artifact",
|
|
20668
|
-
description: "Read an Artifact's current source, version, immutable history, AppBundle references, and current executable Live Preview surface, or pass version for an older content snapshot.
|
|
20702
|
+
description: "Read an Artifact's current source, version, immutable history, AppBundle references, and current executable Live Preview surface, or pass version for an older content snapshot. Computer-file Artifacts return snapshot state from set_snapshot (null until set_snapshot, meaning the asleep face is not checkable); this read cannot edit content, bind a surface, change lifecycle, promote an attachment, or delete an Artifact.",
|
|
20669
20703
|
inputSchema: {
|
|
20670
20704
|
artifactId: exports_external.string().describe("the Artifact, art_…"),
|
|
20671
20705
|
version: exports_external.number().optional().describe("read this old snapshot instead of the current")
|
package/package.json
CHANGED