@lambdacurry/arbor 0.22.6 → 0.22.7
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 +352 -1
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// package.json
|
|
3
3
|
var package_default = {
|
|
4
4
|
name: "@lambdacurry/arbor",
|
|
5
|
-
version: "0.22.
|
|
5
|
+
version: "0.22.7",
|
|
6
6
|
description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
|
|
7
7
|
keywords: [
|
|
8
8
|
"agents",
|
|
@@ -6914,6 +6914,9 @@ var artifactVersions = sqliteTable("artifact_versions", {
|
|
|
6914
6914
|
artifactId: text("artifact_id").notNull().references(() => artifacts.id),
|
|
6915
6915
|
version: integer2("version").notNull(),
|
|
6916
6916
|
source: text("source").notNull(),
|
|
6917
|
+
sourceAttachmentId: text("source_attachment_id").references(() => attachments.id),
|
|
6918
|
+
sourceSha256: text("source_sha256"),
|
|
6919
|
+
tldrawDocumentClock: integer2("tldraw_document_clock"),
|
|
6917
6920
|
editorProfileId: text("editor_profile_id").notNull().references(() => profiles.id),
|
|
6918
6921
|
executionContextId: text("execution_context_id").references(() => executionContexts.id),
|
|
6919
6922
|
note: text("note"),
|
|
@@ -6921,6 +6924,95 @@ var artifactVersions = sqliteTable("artifact_versions", {
|
|
|
6921
6924
|
}, (t) => ({
|
|
6922
6925
|
artifactVersionUq: uniqueIndex("artifact_versions_artifact_version_uq").on(t.artifactId, t.version)
|
|
6923
6926
|
}));
|
|
6927
|
+
var artifactTldrawBoards = sqliteTable("artifact_tldraw_boards", {
|
|
6928
|
+
artifactId: text("artifact_id").primaryKey().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
6929
|
+
roomGeneration: integer2("room_generation").notNull().default(1),
|
|
6930
|
+
documentClock: integer2("document_clock").notNull().default(0),
|
|
6931
|
+
documentDigest: text("document_digest").notNull(),
|
|
6932
|
+
currentVersion: integer2("current_version").notNull().default(0),
|
|
6933
|
+
createIdempotencyKey: text("create_idempotency_key").notNull(),
|
|
6934
|
+
createActorProfileId: text("create_actor_profile_id").notNull().references(() => profiles.id),
|
|
6935
|
+
createThreadId: text("create_thread_id").notNull().references(() => threads.id),
|
|
6936
|
+
createFingerprint: text("create_fingerprint").notNull(),
|
|
6937
|
+
checkpointedAt: ts("checkpointed_at"),
|
|
6938
|
+
updatedAt: ts("updated_at").notNull()
|
|
6939
|
+
}, (t) => ({
|
|
6940
|
+
createKeyUq: uniqueIndex("artifact_tldraw_boards_create_key_uq").on(t.createActorProfileId, t.createThreadId, t.createIdempotencyKey)
|
|
6941
|
+
}));
|
|
6942
|
+
var artifactTldrawCheckpoints = sqliteTable("artifact_tldraw_checkpoints", {
|
|
6943
|
+
id: text("id").primaryKey(),
|
|
6944
|
+
artifactId: text("artifact_id").notNull().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
6945
|
+
actorProfileId: text("actor_profile_id").notNull().references(() => profiles.id),
|
|
6946
|
+
idempotencyKey: text("idempotency_key").notNull(),
|
|
6947
|
+
requestFingerprint: text("request_fingerprint").notNull(),
|
|
6948
|
+
resultArtifactVersionId: text("result_artifact_version_id").notNull().references(() => artifactVersions.id),
|
|
6949
|
+
resultVersion: integer2("result_version").notNull(),
|
|
6950
|
+
createdAt: ts("created_at").notNull()
|
|
6951
|
+
}, (t) => ({
|
|
6952
|
+
requestUq: uniqueIndex("artifact_tldraw_checkpoints_request_uq").on(t.artifactId, t.actorProfileId, t.idempotencyKey)
|
|
6953
|
+
}));
|
|
6954
|
+
var artifactTldrawScriptVersions = sqliteTable("artifact_tldraw_script_versions", {
|
|
6955
|
+
id: text("id").primaryKey(),
|
|
6956
|
+
artifactId: text("artifact_id").notNull().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
6957
|
+
version: integer2("version").notNull(),
|
|
6958
|
+
attachmentId: text("attachment_id").notNull().references(() => attachments.id),
|
|
6959
|
+
digest: text("digest").notNull(),
|
|
6960
|
+
byteLength: integer2("byte_length").notNull(),
|
|
6961
|
+
createdByProfileId: text("created_by_profile_id").notNull().references(() => profiles.id),
|
|
6962
|
+
createdAt: ts("created_at").notNull()
|
|
6963
|
+
}, (t) => ({
|
|
6964
|
+
artifactVersionUq: uniqueIndex("artifact_tldraw_script_versions_artifact_version_uq").on(t.artifactId, t.version),
|
|
6965
|
+
artifactDigestUq: uniqueIndex("artifact_tldraw_script_versions_artifact_digest_uq").on(t.artifactId, t.digest)
|
|
6966
|
+
}));
|
|
6967
|
+
var artifactTldrawDocumentScripts = sqliteTable("artifact_tldraw_document_scripts", {
|
|
6968
|
+
artifactId: text("artifact_id").primaryKey().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
6969
|
+
revision: integer2("revision").notNull().default(0),
|
|
6970
|
+
currentVersion: integer2("current_version"),
|
|
6971
|
+
currentAttachmentId: text("current_attachment_id").references(() => attachments.id),
|
|
6972
|
+
currentDigest: text("current_digest"),
|
|
6973
|
+
currentByteLength: integer2("current_byte_length"),
|
|
6974
|
+
approvedVersion: integer2("approved_version"),
|
|
6975
|
+
approvedDigest: text("approved_digest"),
|
|
6976
|
+
approvedByProfileId: text("approved_by_profile_id").references(() => profiles.id),
|
|
6977
|
+
approvedAt: ts("approved_at"),
|
|
6978
|
+
enabled: integer2("enabled", { mode: "boolean" }).notNull().default(false),
|
|
6979
|
+
updatedAt: ts("updated_at").notNull()
|
|
6980
|
+
});
|
|
6981
|
+
var artifactTldrawExecs = sqliteTable("artifact_tldraw_execs", {
|
|
6982
|
+
id: text("id").primaryKey(),
|
|
6983
|
+
artifactId: text("artifact_id").notNull().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
6984
|
+
requestId: text("request_id").notNull(),
|
|
6985
|
+
sourceDigest: text("source_digest").notNull(),
|
|
6986
|
+
requestFingerprint: text("request_fingerprint").notNull(),
|
|
6987
|
+
expectedDocumentClock: integer2("expected_document_clock"),
|
|
6988
|
+
settleMs: integer2("settle_ms"),
|
|
6989
|
+
startDocumentClock: integer2("start_document_clock").notNull(),
|
|
6990
|
+
startDocumentDigest: text("start_document_digest").notNull(),
|
|
6991
|
+
endDocumentClock: integer2("end_document_clock"),
|
|
6992
|
+
endDocumentDigest: text("end_document_digest"),
|
|
6993
|
+
outcome: text("outcome").notNull(),
|
|
6994
|
+
resultDigest: text("result_digest"),
|
|
6995
|
+
error: text("error"),
|
|
6996
|
+
completionFingerprint: text("completion_fingerprint"),
|
|
6997
|
+
actorProfileId: text("actor_profile_id").notNull().references(() => profiles.id),
|
|
6998
|
+
createdAt: ts("created_at").notNull(),
|
|
6999
|
+
completedAt: ts("completed_at")
|
|
7000
|
+
}, (t) => ({
|
|
7001
|
+
requestUq: uniqueIndex("artifact_tldraw_execs_request_uq").on(t.artifactId, t.actorProfileId, t.requestId),
|
|
7002
|
+
requestLength: check("artifact_tldraw_execs_request_length", sql`length(${t.requestId}) BETWEEN 1 AND 200`),
|
|
7003
|
+
digestLength: check("artifact_tldraw_execs_digest_length", sql`length(${t.sourceDigest}) BETWEEN 1 AND 200`),
|
|
7004
|
+
settleNonnegative: check("artifact_tldraw_execs_settle_nonnegative", sql`${t.settleMs} IS NULL OR ${t.settleMs} >= 0`),
|
|
7005
|
+
resultLength: check("artifact_tldraw_execs_result_length", sql`${t.resultDigest} IS NULL OR length(${t.resultDigest}) <= 200`),
|
|
7006
|
+
errorLength: check("artifact_tldraw_execs_error_length", sql`${t.error} IS NULL OR length(${t.error}) <= 2000`)
|
|
7007
|
+
}));
|
|
7008
|
+
var artifactTldrawViewerGrantUses = sqliteTable("artifact_tldraw_viewer_grant_uses", {
|
|
7009
|
+
id: text("id").primaryKey(),
|
|
7010
|
+
artifactId: text("artifact_id").notNull().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
7011
|
+
grantId: text("grant_id").notNull(),
|
|
7012
|
+
profileId: text("profile_id").notNull().references(() => profiles.id),
|
|
7013
|
+
createdAt: ts("created_at").notNull(),
|
|
7014
|
+
usedAt: ts("used_at")
|
|
7015
|
+
}, (t) => ({ grantUq: uniqueIndex("artifact_tldraw_viewer_grant_uses_grant_uq").on(t.grantId) }));
|
|
6924
7016
|
var secrets = sqliteTable("secrets", {
|
|
6925
7017
|
id: text("id").primaryKey(),
|
|
6926
7018
|
orgId: text("org_id").notNull().references(() => orgs.id),
|
|
@@ -8601,6 +8693,116 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
8601
8693
|
nextLine: number2().int().min(1).nullable().optional(),
|
|
8602
8694
|
totalLines: number2().int().nonnegative().optional()
|
|
8603
8695
|
}),
|
|
8696
|
+
tldraw_import: looseObject({
|
|
8697
|
+
artifactId: id,
|
|
8698
|
+
artifactVersionId: id,
|
|
8699
|
+
version: number2().int().min(1),
|
|
8700
|
+
sourceAttachmentId: id,
|
|
8701
|
+
sourceSha256: string2(),
|
|
8702
|
+
documentClock: number2().int().min(0),
|
|
8703
|
+
replayed: boolean2(),
|
|
8704
|
+
url: string2().optional()
|
|
8705
|
+
}),
|
|
8706
|
+
tldraw_get: looseObject({
|
|
8707
|
+
artifactId: id,
|
|
8708
|
+
title: string2(),
|
|
8709
|
+
summary: string2(),
|
|
8710
|
+
sourceThreadId: id,
|
|
8711
|
+
version: number2().int().min(1),
|
|
8712
|
+
selectedVersion: number2().int().min(1),
|
|
8713
|
+
historical: boolean2(),
|
|
8714
|
+
canEdit: boolean2(),
|
|
8715
|
+
source: jsonObject,
|
|
8716
|
+
current: jsonObject,
|
|
8717
|
+
versionRefs: array(jsonObject),
|
|
8718
|
+
script: jsonObject
|
|
8719
|
+
}),
|
|
8720
|
+
tldraw_workbench: looseObject({
|
|
8721
|
+
artifactId: id,
|
|
8722
|
+
runId: id,
|
|
8723
|
+
TLDRAW_LOCAL_ROOT: string2(),
|
|
8724
|
+
paths: looseObject({
|
|
8725
|
+
board: string2(),
|
|
8726
|
+
script: string2().nullable(),
|
|
8727
|
+
manifest: string2()
|
|
8728
|
+
}),
|
|
8729
|
+
manifest: jsonObject
|
|
8730
|
+
}),
|
|
8731
|
+
tldraw_status: looseObject({
|
|
8732
|
+
artifactId: id,
|
|
8733
|
+
room: jsonObject,
|
|
8734
|
+
script: jsonObject
|
|
8735
|
+
}),
|
|
8736
|
+
tldraw_checkpoint: looseObject({
|
|
8737
|
+
artifactId: id,
|
|
8738
|
+
ok: boolean2(),
|
|
8739
|
+
changed: boolean2().optional(),
|
|
8740
|
+
version: number2().int().min(1).optional(),
|
|
8741
|
+
replayed: boolean2().optional()
|
|
8742
|
+
}),
|
|
8743
|
+
tldraw_publish: looseObject({
|
|
8744
|
+
artifactId: id,
|
|
8745
|
+
artifactVersionId: id.optional(),
|
|
8746
|
+
version: number2().int().min(1).optional(),
|
|
8747
|
+
sourceAttachmentId: id.optional(),
|
|
8748
|
+
documentClock: number2().int().min(0).optional(),
|
|
8749
|
+
replayed: boolean2().optional()
|
|
8750
|
+
}),
|
|
8751
|
+
tldraw_script: looseObject({
|
|
8752
|
+
artifactId: id,
|
|
8753
|
+
revision: number2().int().min(0),
|
|
8754
|
+
status: _enum(["absent", "approval-required", "enabled", "disabled"]),
|
|
8755
|
+
source: jsonObject.nullable(),
|
|
8756
|
+
approval: jsonObject.nullable()
|
|
8757
|
+
}),
|
|
8758
|
+
tldraw_observe: looseObject({
|
|
8759
|
+
artifactId: id,
|
|
8760
|
+
documentClock: number2().int().min(0),
|
|
8761
|
+
documentDigest: string2(),
|
|
8762
|
+
scene: looseObject({
|
|
8763
|
+
shapes: array(jsonObject),
|
|
8764
|
+
bindings: array(jsonObject),
|
|
8765
|
+
lint: array(jsonObject),
|
|
8766
|
+
truncation: looseObject({
|
|
8767
|
+
shapesOmitted: number2().int().nonnegative(),
|
|
8768
|
+
bindingsOmitted: number2().int().nonnegative(),
|
|
8769
|
+
bindingRecordsUninspected: number2().int().nonnegative(),
|
|
8770
|
+
findingsOmitted: number2().int().nonnegative(),
|
|
8771
|
+
textShapesTruncated: number2().int().nonnegative(),
|
|
8772
|
+
pageNameCharactersOmitted: number2().int().nonnegative(),
|
|
8773
|
+
serializedBytes: number2().int().nonnegative(),
|
|
8774
|
+
serializedByteLimit: number2().int().positive()
|
|
8775
|
+
})
|
|
8776
|
+
}),
|
|
8777
|
+
image: looseObject({
|
|
8778
|
+
attachmentId: id.optional(),
|
|
8779
|
+
downloadUrl: string2().optional(),
|
|
8780
|
+
mimeType: literal("image/png"),
|
|
8781
|
+
width: number2().int().positive(),
|
|
8782
|
+
height: number2().int().positive(),
|
|
8783
|
+
size: number2().int().nonnegative().optional(),
|
|
8784
|
+
sha256: string2().optional(),
|
|
8785
|
+
data: string2().optional()
|
|
8786
|
+
})
|
|
8787
|
+
}),
|
|
8788
|
+
tldraw_exec: looseObject({
|
|
8789
|
+
executionId: id,
|
|
8790
|
+
artifactId: id,
|
|
8791
|
+
state: _enum(["succeeded", "failed", "unknown", "running"]),
|
|
8792
|
+
start: jsonObject,
|
|
8793
|
+
end: jsonObject.optional(),
|
|
8794
|
+
result: unknown().optional(),
|
|
8795
|
+
error: string2().optional()
|
|
8796
|
+
}),
|
|
8797
|
+
tldraw_exec_get: looseObject({
|
|
8798
|
+
executionId: id,
|
|
8799
|
+
artifactId: id,
|
|
8800
|
+
state: _enum(["succeeded", "failed", "unknown", "running"]),
|
|
8801
|
+
start: jsonObject,
|
|
8802
|
+
end: jsonObject.optional(),
|
|
8803
|
+
result: unknown().optional(),
|
|
8804
|
+
error: string2().optional()
|
|
8805
|
+
}),
|
|
8604
8806
|
artifact_transition: looseObject({
|
|
8605
8807
|
artifactId: id,
|
|
8606
8808
|
status: string2(),
|
|
@@ -9407,6 +9609,16 @@ var MCP_TOOL_ANNOTATIONS = {
|
|
|
9407
9609
|
curation: additive,
|
|
9408
9610
|
artifact: additive,
|
|
9409
9611
|
artifact_get: readOnly,
|
|
9612
|
+
tldraw_import: idempotent,
|
|
9613
|
+
tldraw_get: readOnly,
|
|
9614
|
+
tldraw_workbench: destructive,
|
|
9615
|
+
tldraw_status: readOnly,
|
|
9616
|
+
tldraw_checkpoint: idempotent,
|
|
9617
|
+
tldraw_publish: idempotent,
|
|
9618
|
+
tldraw_script: destructive,
|
|
9619
|
+
tldraw_observe: additive,
|
|
9620
|
+
tldraw_exec: destructiveOpenWorld,
|
|
9621
|
+
tldraw_exec_get: readOnly,
|
|
9410
9622
|
artifact_transition: additive,
|
|
9411
9623
|
artifact_delete: destructive,
|
|
9412
9624
|
secrets: destructive,
|
|
@@ -11623,6 +11835,145 @@ var ACTION_DEFINITIONS = [
|
|
|
11623
11835
|
toolset: "artifacts",
|
|
11624
11836
|
run: forward("artifact.transition")
|
|
11625
11837
|
},
|
|
11838
|
+
{
|
|
11839
|
+
name: "tldraw_import",
|
|
11840
|
+
title: "Import a tldraw board",
|
|
11841
|
+
description: "Create a durable tldraw Artifact from one uploaded .tldr source after Arbor validates the stored bytes and source thread. Retries with the same idempotencyKey return the original Artifact version.",
|
|
11842
|
+
inputSchema: {
|
|
11843
|
+
sourceAttachmentId: string2().describe("uploaded .tldr Attachment, att_…"),
|
|
11844
|
+
title: string2().min(1).max(200).describe("the board title"),
|
|
11845
|
+
summary: string2().min(1).max(500).describe("one-line description of the board"),
|
|
11846
|
+
sourceThreadId: string2().describe("Thread that owns the source Attachment, thr_…"),
|
|
11847
|
+
idempotencyKey: string2().min(1).max(200).describe("stable key for this import request")
|
|
11848
|
+
},
|
|
11849
|
+
surfaces: ["mcp", "cli"],
|
|
11850
|
+
toolset: "artifacts",
|
|
11851
|
+
run: forward("tldraw.import")
|
|
11852
|
+
},
|
|
11853
|
+
{
|
|
11854
|
+
name: "tldraw_get",
|
|
11855
|
+
title: "Read a tldraw board",
|
|
11856
|
+
description: "Read the current or one historical tldraw board version, its immutable source references, version list, edit access, and document-script state. Historical versions are read-only.",
|
|
11857
|
+
inputSchema: {
|
|
11858
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11859
|
+
version: number2().int().min(1).optional().describe("optional historical version number")
|
|
11860
|
+
},
|
|
11861
|
+
surfaces: ["mcp", "cli"],
|
|
11862
|
+
toolset: "artifacts",
|
|
11863
|
+
run: forward("tldraw.get")
|
|
11864
|
+
},
|
|
11865
|
+
{
|
|
11866
|
+
name: "tldraw_workbench",
|
|
11867
|
+
title: "Materialize a tldraw workbench",
|
|
11868
|
+
description: "Materialize the current live tldraw board and separate document script in an active same-Thread WRITE Run, writing a manifest that pins the exact ArtifactVersion, live clock/digest, and script source tuple without approving or enabling scripts. Each call creates a fresh workbench directory; idempotencyKey makes only the live checkpoint retry-safe.",
|
|
11869
|
+
inputSchema: {
|
|
11870
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11871
|
+
runId: string2().describe("active same-Thread WRITE Run, run_…"),
|
|
11872
|
+
idempotencyKey: string2().min(1).max(120).describe("stable key for this workbench materialization")
|
|
11873
|
+
},
|
|
11874
|
+
surfaces: ["computer-mcp", "computer-cli"],
|
|
11875
|
+
toolset: "loop",
|
|
11876
|
+
run: forward("tldraw.workbench")
|
|
11877
|
+
},
|
|
11878
|
+
{
|
|
11879
|
+
name: "tldraw_status",
|
|
11880
|
+
title: "Check tldraw board status",
|
|
11881
|
+
description: "Read the current room status and separately reported script sessions for a tldraw board. Session reports remain per-session observations and are never collapsed into global success.",
|
|
11882
|
+
inputSchema: { artifactId: string2().describe("the tldraw Artifact, art_…") },
|
|
11883
|
+
surfaces: ["mcp", "cli"],
|
|
11884
|
+
toolset: "artifacts",
|
|
11885
|
+
run: forward("tldraw.status")
|
|
11886
|
+
},
|
|
11887
|
+
{
|
|
11888
|
+
name: "tldraw_checkpoint",
|
|
11889
|
+
title: "Checkpoint a tldraw board",
|
|
11890
|
+
description: "Persist a current tldraw room snapshot as the next immutable Artifact version with compare-and-swap clocks. Repeating the same idempotencyKey returns the existing checkpoint receipt.",
|
|
11891
|
+
inputSchema: {
|
|
11892
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11893
|
+
idempotencyKey: string2().min(1).max(200).describe("stable key for this checkpoint"),
|
|
11894
|
+
reason: _enum(["manual", "autosave", "exec"]).optional().describe("why the room is being checkpointed")
|
|
11895
|
+
},
|
|
11896
|
+
surfaces: ["mcp", "cli"],
|
|
11897
|
+
toolset: "artifacts",
|
|
11898
|
+
run: forward("tldraw.checkpoint")
|
|
11899
|
+
},
|
|
11900
|
+
{
|
|
11901
|
+
name: "tldraw_publish",
|
|
11902
|
+
title: "Publish a tldraw board version",
|
|
11903
|
+
description: "Publish one validated .tldr source into the current board using both the room document clock and Artifact version as compare-and-swap guards. Retries are safe with the same idempotencyKey.",
|
|
11904
|
+
inputSchema: {
|
|
11905
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11906
|
+
sourceAttachmentId: string2().describe("validated .tldr Attachment, att_…"),
|
|
11907
|
+
expectedDocumentClock: number2().int().min(0).describe("room clock observed before publish"),
|
|
11908
|
+
expectedArtifactVersion: number2().int().min(1).describe("Artifact version observed before publish"),
|
|
11909
|
+
idempotencyKey: string2().min(1).max(200).describe("stable key for this publish")
|
|
11910
|
+
},
|
|
11911
|
+
surfaces: ["mcp", "cli"],
|
|
11912
|
+
toolset: "artifacts",
|
|
11913
|
+
run: forward("tldraw.publish")
|
|
11914
|
+
},
|
|
11915
|
+
{
|
|
11916
|
+
name: "tldraw_script",
|
|
11917
|
+
title: "Manage a tldraw document script",
|
|
11918
|
+
description: "Set, approve, disable, or reload the separate document script for a tldraw board. Approval names the exact displayed source version and digest; scripts never run from historical views.",
|
|
11919
|
+
inputSchema: {
|
|
11920
|
+
verb: _enum(["set", "approve", "disable", "reload"]).describe("the script change"),
|
|
11921
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11922
|
+
attachmentId: string2().optional().describe("set: uploaded script Attachment, att_…"),
|
|
11923
|
+
expectedRevision: number2().int().min(0).optional().describe("set: script revision observed before the write"),
|
|
11924
|
+
version: number2().int().min(1).optional().describe("approve: exact displayed source version"),
|
|
11925
|
+
digest: string2().regex(/^[a-f0-9]{64}$/).optional().describe("approve: exact displayed source digest")
|
|
11926
|
+
},
|
|
11927
|
+
surfaces: ["mcp", "cli"],
|
|
11928
|
+
toolset: "artifacts",
|
|
11929
|
+
run: dispatch({
|
|
11930
|
+
set: "tldraw.script",
|
|
11931
|
+
approve: "tldraw.script",
|
|
11932
|
+
disable: "tldraw.script",
|
|
11933
|
+
reload: "tldraw.script"
|
|
11934
|
+
}, (verb, input) => ({ ...input, verb }))
|
|
11935
|
+
},
|
|
11936
|
+
{
|
|
11937
|
+
name: "tldraw_observe",
|
|
11938
|
+
title: "Observe a tldraw board",
|
|
11939
|
+
description: "Capture a fresh bounded tldraw scene, lint result, document clock and digest, plus a PNG attachment for visual review.",
|
|
11940
|
+
inputSchema: {
|
|
11941
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11942
|
+
pageId: string2().min(1).max(200).optional().describe("optional page to observe"),
|
|
11943
|
+
viewportWidth: number2().int().min(320).max(1920).optional(),
|
|
11944
|
+
viewportHeight: number2().int().min(240).max(1080).optional()
|
|
11945
|
+
},
|
|
11946
|
+
surfaces: ["mcp", "cli"],
|
|
11947
|
+
toolset: "artifacts",
|
|
11948
|
+
run: forward("tldraw.observe")
|
|
11949
|
+
},
|
|
11950
|
+
{
|
|
11951
|
+
name: "tldraw_exec",
|
|
11952
|
+
title: "Run a one-shot tldraw program",
|
|
11953
|
+
description: "Run bounded one-shot code against the current live tldraw board without changing its persistent document script, and return a durable execution receipt. An unknown result is reported for recovery and is never replayed automatically.",
|
|
11954
|
+
inputSchema: {
|
|
11955
|
+
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
11956
|
+
code: string2().min(1).max(1e5).describe("the script source to execute"),
|
|
11957
|
+
idempotencyKey: string2().min(1).max(200).describe("stable key for this execution"),
|
|
11958
|
+
expectedDocumentClock: number2().int().min(0).optional().describe("optional current room clock guard"),
|
|
11959
|
+
boundedSettleMs: number2().int().min(400).max(3000).optional().describe("maximum settle time")
|
|
11960
|
+
},
|
|
11961
|
+
surfaces: ["mcp", "cli"],
|
|
11962
|
+
toolset: "artifacts",
|
|
11963
|
+
run: forward("tldraw.exec")
|
|
11964
|
+
},
|
|
11965
|
+
{
|
|
11966
|
+
name: "tldraw_exec_get",
|
|
11967
|
+
title: "Read a tldraw execution receipt",
|
|
11968
|
+
description: "Read one tldraw execution receipt by execution id. The receipt reports success, failure, running, or unknown without starting another execution.",
|
|
11969
|
+
inputSchema: {
|
|
11970
|
+
executionId: string2().describe("the execution receipt, tex_…"),
|
|
11971
|
+
artifactId: string2().optional().describe("optional board id for a scoped lookup")
|
|
11972
|
+
},
|
|
11973
|
+
surfaces: ["mcp", "cli"],
|
|
11974
|
+
toolset: "artifacts",
|
|
11975
|
+
run: forward("tldraw.exec_get")
|
|
11976
|
+
},
|
|
11626
11977
|
{
|
|
11627
11978
|
name: "artifact_delete",
|
|
11628
11979
|
title: "Permanently delete an Artifact",
|
package/package.json
CHANGED