@lambdacurry/arbor 0.22.40 → 0.22.41
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 +167 -31
- 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.41",
|
|
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",
|
|
@@ -4921,6 +4921,16 @@ var IDENTITY_COLORS = [
|
|
|
4921
4921
|
"rose",
|
|
4922
4922
|
"cyan"
|
|
4923
4923
|
];
|
|
4924
|
+
var LIFECYCLE_TYPES = [
|
|
4925
|
+
"backlog",
|
|
4926
|
+
"active",
|
|
4927
|
+
"needs-review",
|
|
4928
|
+
"stuck",
|
|
4929
|
+
"standing",
|
|
4930
|
+
"resolved",
|
|
4931
|
+
"canceled",
|
|
4932
|
+
"archived"
|
|
4933
|
+
];
|
|
4924
4934
|
var CONTRIBUTION_TYPES = [
|
|
4925
4935
|
"comment",
|
|
4926
4936
|
"question",
|
|
@@ -6464,13 +6474,15 @@ var threads = sqliteTable("threads", {
|
|
|
6464
6474
|
title: text("title").notNull(),
|
|
6465
6475
|
objective: text("objective").notNull(),
|
|
6466
6476
|
status: text("status").$type().notNull().default("active"),
|
|
6477
|
+
lifecycleType: text("lifecycle_type").$type().notNull().default("active"),
|
|
6467
6478
|
waysToHelp: text("ways_to_help", { mode: "json" }).$type().notNull().default([]),
|
|
6468
6479
|
openQuestions: text("open_questions", { mode: "json" }).$type().notNull().default([]),
|
|
6469
6480
|
expectedOutput: text("expected_output").notNull().default(""),
|
|
6470
6481
|
createdAt: ts("created_at").notNull()
|
|
6471
6482
|
}, (t) => ({
|
|
6472
6483
|
topicIdx: index("threads_topic_idx").on(t.topicId),
|
|
6473
|
-
spaceIdx: index("threads_space_idx").on(t.spaceId)
|
|
6484
|
+
spaceIdx: index("threads_space_idx").on(t.spaceId),
|
|
6485
|
+
lifecycleTypeIdx: index("threads_lifecycle_type_idx").on(t.lifecycleType)
|
|
6474
6486
|
}));
|
|
6475
6487
|
var computerConfigs = sqliteTable("computer_configs", {
|
|
6476
6488
|
id: text("id").primaryKey(),
|
|
@@ -6699,6 +6711,60 @@ var computerRuns = sqliteTable("computer_runs", {
|
|
|
6699
6711
|
statusIdx: index("computer_runs_status_idx").on(t.computerId, t.status),
|
|
6700
6712
|
runtimeIdx: index("computer_runs_runtime_idx").on(t.computerId, t.runtimeState)
|
|
6701
6713
|
}));
|
|
6714
|
+
var packageCacheObjects = sqliteTable("package_cache_objects", {
|
|
6715
|
+
key: text("key").primaryKey(),
|
|
6716
|
+
orgId: text("org_id").notNull().references(() => orgs.id),
|
|
6717
|
+
project: text("project").notNull(),
|
|
6718
|
+
ecosystem: text("ecosystem").notNull(),
|
|
6719
|
+
originId: text("origin_id").notNull(),
|
|
6720
|
+
integrityAlgorithm: text("integrity_algorithm").notNull(),
|
|
6721
|
+
digest: text("digest").notNull(),
|
|
6722
|
+
sri: text("sri").notNull(),
|
|
6723
|
+
byteLength: integer2("byte_length").notNull(),
|
|
6724
|
+
status: text("status").$type().notNull(),
|
|
6725
|
+
uploadId: text("upload_id").notNull(),
|
|
6726
|
+
producerRunId: text("producer_run_id").notNull().references(() => computerRuns.id),
|
|
6727
|
+
producerTrust: text("producer_trust").$type().notNull(),
|
|
6728
|
+
createdAt: ts("created_at").notNull(),
|
|
6729
|
+
readyAt: ts("ready_at"),
|
|
6730
|
+
expiresAt: ts("expires_at").notNull()
|
|
6731
|
+
}, (t) => ({
|
|
6732
|
+
uploadUq: uniqueIndex("package_cache_objects_upload_uniq").on(t.uploadId),
|
|
6733
|
+
projectStatusExpiryIdx: index("package_cache_objects_project_status_expiry_idx").on(t.orgId, t.project, t.status, t.expiresAt)
|
|
6734
|
+
}));
|
|
6735
|
+
var packageCacheProjectUsage = sqliteTable("package_cache_project_usage", {
|
|
6736
|
+
id: text("id").primaryKey(),
|
|
6737
|
+
orgId: text("org_id").notNull().references(() => orgs.id),
|
|
6738
|
+
project: text("project").notNull(),
|
|
6739
|
+
maxStoredBytes: integer2("max_stored_bytes").notNull(),
|
|
6740
|
+
maxObjects: integer2("max_objects").notNull(),
|
|
6741
|
+
maxWriteBytesPerDay: integer2("max_write_bytes_per_day").notNull(),
|
|
6742
|
+
writePeriod: text("write_period").notNull(),
|
|
6743
|
+
writeBytesToday: integer2("write_bytes_today").notNull().default(0),
|
|
6744
|
+
storedBytes: integer2("stored_bytes").notNull().default(0),
|
|
6745
|
+
objectCount: integer2("object_count").notNull().default(0),
|
|
6746
|
+
reservedBytes: integer2("reserved_bytes").notNull().default(0),
|
|
6747
|
+
reservedObjects: integer2("reserved_objects").notNull().default(0),
|
|
6748
|
+
writeBytes: integer2("write_bytes").notNull().default(0),
|
|
6749
|
+
readBytes: integer2("read_bytes").notNull().default(0),
|
|
6750
|
+
hits: integer2("hits").notNull().default(0),
|
|
6751
|
+
misses: integer2("misses").notNull().default(0),
|
|
6752
|
+
rejections: integer2("rejections").notNull().default(0),
|
|
6753
|
+
classAOps: integer2("class_a_ops").notNull().default(0),
|
|
6754
|
+
classBOps: integer2("class_b_ops").notNull().default(0),
|
|
6755
|
+
publicationsNew: integer2("publications_new").notNull().default(0),
|
|
6756
|
+
publicationsDuplicate: integer2("publications_duplicate").notNull().default(0),
|
|
6757
|
+
publicationsConverged: integer2("publications_converged").notNull().default(0),
|
|
6758
|
+
publicationsRejected: integer2("publications_rejected").notNull().default(0),
|
|
6759
|
+
fallbacks: integer2("fallbacks").notNull().default(0),
|
|
6760
|
+
updatedAt: ts("updated_at").notNull()
|
|
6761
|
+
}, (t) => ({
|
|
6762
|
+
projectUq: uniqueIndex("package_cache_project_usage_project_uniq").on(t.orgId, t.project),
|
|
6763
|
+
nonnegative: check("package_cache_project_usage_nonnegative", sql`${t.storedBytes} >= 0 AND ${t.objectCount} >= 0 AND ${t.reservedBytes} >= 0 AND ${t.reservedObjects} >= 0`),
|
|
6764
|
+
byteBudget: check("package_cache_project_usage_byte_budget", sql`${t.storedBytes} + ${t.reservedBytes} <= ${t.maxStoredBytes}`),
|
|
6765
|
+
objectBudget: check("package_cache_project_usage_object_budget", sql`${t.objectCount} + ${t.reservedObjects} <= ${t.maxObjects}`),
|
|
6766
|
+
dailyWriteBudget: check("package_cache_project_usage_daily_write_budget", sql`${t.writeBytesToday} + ${t.reservedBytes} <= ${t.maxWriteBytesPerDay}`)
|
|
6767
|
+
}));
|
|
6702
6768
|
var computerSnapshots = sqliteTable("computer_snapshots", {
|
|
6703
6769
|
id: text("id").primaryKey(),
|
|
6704
6770
|
ownerScope: text("owner_scope").$type().notNull(),
|
|
@@ -7064,6 +7130,22 @@ var artifactTldrawBoards = sqliteTable("artifact_tldraw_boards", {
|
|
|
7064
7130
|
}, (t) => ({
|
|
7065
7131
|
createKeyUq: uniqueIndex("artifact_tldraw_boards_create_key_uq").on(t.createActorProfileId, t.createThreadId, t.createIdempotencyKey)
|
|
7066
7132
|
}));
|
|
7133
|
+
var artifactTldrawLatestPreviews = sqliteTable("artifact_tldraw_latest_previews", {
|
|
7134
|
+
artifactId: text("artifact_id").primaryKey().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
7135
|
+
attachmentId: text("attachment_id").notNull().references(() => attachments.id),
|
|
7136
|
+
documentDigest: text("document_digest").notNull(),
|
|
7137
|
+
documentClock: integer2("document_clock").notNull(),
|
|
7138
|
+
roomGeneration: integer2("room_generation").notNull(),
|
|
7139
|
+
width: integer2("width").notNull(),
|
|
7140
|
+
height: integer2("height").notNull(),
|
|
7141
|
+
generatedAt: ts("generated_at").notNull(),
|
|
7142
|
+
revision: integer2("revision").notNull().default(1),
|
|
7143
|
+
storageSlot: integer2("storage_slot").notNull(),
|
|
7144
|
+
retiredAttachmentId: text("retired_attachment_id"),
|
|
7145
|
+
retiredStorageSlot: integer2("retired_storage_slot")
|
|
7146
|
+
}, (t) => ({
|
|
7147
|
+
attachmentIdx: uniqueIndex("artifact_tldraw_latest_previews_attachment_uniq").on(t.attachmentId)
|
|
7148
|
+
}));
|
|
7067
7149
|
var artifactTldrawCheckpoints = sqliteTable("artifact_tldraw_checkpoints", {
|
|
7068
7150
|
id: text("id").primaryKey(),
|
|
7069
7151
|
artifactId: text("artifact_id").notNull().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
@@ -7589,6 +7671,36 @@ var threadAssignments = sqliteTable("thread_assignments", {
|
|
|
7589
7671
|
assigneeUq: uniqueIndex("thread_assignments_thread_profile_uniq").on(t.threadId, t.profileId),
|
|
7590
7672
|
profileIdx: index("thread_assignments_profile_idx").on(t.profileId, t.createdAt)
|
|
7591
7673
|
}));
|
|
7674
|
+
// ../core/src/db/tldraw-preview-candidate-schema.ts
|
|
7675
|
+
var ts2 = (name) => text(name);
|
|
7676
|
+
var artifactTldrawPreviewCandidates = sqliteTable("artifact_tldraw_preview_candidates", {
|
|
7677
|
+
artifactId: text("artifact_id").primaryKey().references(() => artifacts.id, { onDelete: "cascade" }),
|
|
7678
|
+
generationToken: text("generation_token").notNull(),
|
|
7679
|
+
slot: integer2("slot").notNull(),
|
|
7680
|
+
attachmentId: text("attachment_id").notNull(),
|
|
7681
|
+
r2Key: text("r2_key").notNull(),
|
|
7682
|
+
targetDocumentDigest: text("target_document_digest").notNull(),
|
|
7683
|
+
leaseExpiresAt: ts2("lease_expires_at").notNull(),
|
|
7684
|
+
createdAt: ts2("created_at").notNull()
|
|
7685
|
+
}, (t) => ({
|
|
7686
|
+
generationIdx: uniqueIndex("artifact_tldraw_preview_candidates_generation_uniq").on(t.generationToken),
|
|
7687
|
+
attachmentIdx: uniqueIndex("artifact_tldraw_preview_candidates_attachment_uniq").on(t.attachmentId),
|
|
7688
|
+
r2KeyIdx: uniqueIndex("artifact_tldraw_preview_candidates_r2_key_uniq").on(t.r2Key)
|
|
7689
|
+
}));
|
|
7690
|
+
// ../core/src/lifecycle/thread.ts
|
|
7691
|
+
var STATUS_OPENNESS = {
|
|
7692
|
+
backlog: { working: false, currentWork: false, closed: false },
|
|
7693
|
+
active: { working: true, currentWork: true, closed: false },
|
|
7694
|
+
"needs-review": { working: true, currentWork: true, closed: false },
|
|
7695
|
+
stuck: { working: true, currentWork: true, closed: false },
|
|
7696
|
+
standing: { working: true, currentWork: false, closed: false },
|
|
7697
|
+
resolved: { working: false, currentWork: false, closed: true },
|
|
7698
|
+
canceled: { working: false, currentWork: false, closed: true },
|
|
7699
|
+
archived: { working: false, currentWork: false, closed: true }
|
|
7700
|
+
};
|
|
7701
|
+
var typesWhere = (sense) => Object.keys(STATUS_OPENNESS).filter((s) => STATUS_OPENNESS[s][sense]);
|
|
7702
|
+
var WORKING_THREAD_STATUSES = typesWhere("working");
|
|
7703
|
+
var CURRENT_WORK_THREAD_STATUSES = typesWhere("currentWork");
|
|
7592
7704
|
// ../core/src/ops/secret.ts
|
|
7593
7705
|
var SECRET_PERMISSIONS = [
|
|
7594
7706
|
"create",
|
|
@@ -7671,6 +7783,9 @@ var assigneeColumns = {
|
|
|
7671
7783
|
color: profiles.color,
|
|
7672
7784
|
emoji: profiles.emoji
|
|
7673
7785
|
};
|
|
7786
|
+
// ../core/src/ops/package-cache.ts
|
|
7787
|
+
var PACKAGE_CACHE_PENDING_TTL_MS = 15 * 60 * 1000;
|
|
7788
|
+
var PACKAGE_CACHE_FINAL_TTL_MS = 30 * 24 * 60 * 60 * 1000;
|
|
7674
7789
|
// ../core/src/ops/computer-output.ts
|
|
7675
7790
|
var COMPUTER_OUTPUT_DEFAULT_STALE_MS = 24 * 60 * 60 * 1000;
|
|
7676
7791
|
// ../core/src/ops/computer-recovery.ts
|
|
@@ -7830,6 +7945,20 @@ var recallHit = looseObject({
|
|
|
7830
7945
|
url: nullableString,
|
|
7831
7946
|
createdAt: timestamp
|
|
7832
7947
|
});
|
|
7948
|
+
var tldrawLatestPreview = object({
|
|
7949
|
+
status: _enum(["current", "stale", "missing"]),
|
|
7950
|
+
representedDocumentDigest: string2().optional(),
|
|
7951
|
+
representedDocumentClock: number2().int().min(0).optional(),
|
|
7952
|
+
generatedAt: timestamp.optional(),
|
|
7953
|
+
image: object({
|
|
7954
|
+
attachmentId: id,
|
|
7955
|
+
downloadUrl: string2(),
|
|
7956
|
+
mimeType: literal("image/png"),
|
|
7957
|
+
width: number2().int().positive(),
|
|
7958
|
+
height: number2().int().positive(),
|
|
7959
|
+
size: number2().int().positive()
|
|
7960
|
+
}).strict().optional()
|
|
7961
|
+
});
|
|
7833
7962
|
var artifactLivePreviewThread = looseObject({
|
|
7834
7963
|
id,
|
|
7835
7964
|
title: string2()
|
|
@@ -9000,6 +9129,7 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
9000
9129
|
retryCount: number2().int().min(0)
|
|
9001
9130
|
})
|
|
9002
9131
|
}),
|
|
9132
|
+
preview: tldrawLatestPreview,
|
|
9003
9133
|
script: object({
|
|
9004
9134
|
artifactId: id,
|
|
9005
9135
|
revision: number2().int().min(0),
|
|
@@ -9050,15 +9180,7 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
9050
9180
|
serializedByteLimit: number2().int().positive()
|
|
9051
9181
|
})
|
|
9052
9182
|
}),
|
|
9053
|
-
|
|
9054
|
-
attachmentId: id,
|
|
9055
|
-
downloadUrl: string2(),
|
|
9056
|
-
mimeType: literal("image/png"),
|
|
9057
|
-
width: number2().int().positive(),
|
|
9058
|
-
height: number2().int().positive(),
|
|
9059
|
-
size: number2().int().positive(),
|
|
9060
|
-
sha256: string2()
|
|
9061
|
-
}).strict()
|
|
9183
|
+
preview: tldrawLatestPreview
|
|
9062
9184
|
}),
|
|
9063
9185
|
tldraw_exec: looseObject({
|
|
9064
9186
|
executionId: id,
|
|
@@ -9568,6 +9690,28 @@ function selectedArray(value, fields) {
|
|
|
9568
9690
|
return;
|
|
9569
9691
|
return value.map((entry) => selected(entry, fields) ?? {});
|
|
9570
9692
|
}
|
|
9693
|
+
function compactTldrawPreview(value) {
|
|
9694
|
+
const preview = record2(value);
|
|
9695
|
+
if (!preview)
|
|
9696
|
+
return;
|
|
9697
|
+
return defined([
|
|
9698
|
+
["status", preview.status],
|
|
9699
|
+
["representedDocumentDigest", preview.representedDocumentDigest],
|
|
9700
|
+
["representedDocumentClock", preview.representedDocumentClock],
|
|
9701
|
+
["generatedAt", preview.generatedAt],
|
|
9702
|
+
[
|
|
9703
|
+
"image",
|
|
9704
|
+
selected(preview.image, [
|
|
9705
|
+
"attachmentId",
|
|
9706
|
+
"downloadUrl",
|
|
9707
|
+
"mimeType",
|
|
9708
|
+
"width",
|
|
9709
|
+
"height",
|
|
9710
|
+
"size"
|
|
9711
|
+
])
|
|
9712
|
+
]
|
|
9713
|
+
]);
|
|
9714
|
+
}
|
|
9571
9715
|
function omitNull(value) {
|
|
9572
9716
|
return value === null ? undefined : value;
|
|
9573
9717
|
}
|
|
@@ -9796,18 +9940,7 @@ var OUTPUT_SHAPERS = {
|
|
|
9796
9940
|
["documentClock", result.documentClock],
|
|
9797
9941
|
["documentDigest", result.documentDigest],
|
|
9798
9942
|
["scene", result.scene],
|
|
9799
|
-
[
|
|
9800
|
-
"image",
|
|
9801
|
-
selected(result.image, [
|
|
9802
|
-
"attachmentId",
|
|
9803
|
-
"downloadUrl",
|
|
9804
|
-
"mimeType",
|
|
9805
|
-
"width",
|
|
9806
|
-
"height",
|
|
9807
|
-
"size",
|
|
9808
|
-
"sha256"
|
|
9809
|
-
])
|
|
9810
|
-
]
|
|
9943
|
+
["preview", compactTldrawPreview(result.preview)]
|
|
9811
9944
|
]),
|
|
9812
9945
|
computer_write: (result) => defined([
|
|
9813
9946
|
["ok", result.ok],
|
|
@@ -10608,7 +10741,7 @@ var ACTION_DEFINITIONS = [
|
|
|
10608
10741
|
sourceThreadId: string2().optional().describe("merge: duplicate source Thread id"),
|
|
10609
10742
|
targetThreadId: string2().optional().describe("merge: canonical destination Thread id"),
|
|
10610
10743
|
objective: string2().min(1).optional().describe("create/update: Thread objective"),
|
|
10611
|
-
status: _enum(
|
|
10744
|
+
status: _enum(LIFECYCLE_TYPES).optional().describe("transition/update: target Thread lifecycle type"),
|
|
10612
10745
|
reason: string2().optional().describe("merge: concise auditable rationale")
|
|
10613
10746
|
},
|
|
10614
10747
|
surfaces: ["mcp"],
|
|
@@ -10642,7 +10775,7 @@ var ACTION_DEFINITIONS = [
|
|
|
10642
10775
|
topicId: string2().optional().describe("create/move/update: destination Feedback Topic id"),
|
|
10643
10776
|
title: string2().min(1).optional().describe("create/update: Thread title"),
|
|
10644
10777
|
objective: string2().min(1).optional().describe("create/update: Thread objective"),
|
|
10645
|
-
status: _enum(
|
|
10778
|
+
status: _enum(LIFECYCLE_TYPES).optional().describe("transition/update: target Thread lifecycle type"),
|
|
10646
10779
|
reason: string2().optional().describe("merge: concise auditable rationale")
|
|
10647
10780
|
},
|
|
10648
10781
|
surfaces: ["cli"],
|
|
@@ -10888,13 +11021,15 @@ var ACTION_DEFINITIONS = [
|
|
|
10888
11021
|
status: _enum([
|
|
10889
11022
|
"current",
|
|
10890
11023
|
"all",
|
|
11024
|
+
"backlog",
|
|
10891
11025
|
"active",
|
|
10892
11026
|
"needs-review",
|
|
10893
11027
|
"stuck",
|
|
10894
11028
|
"standing",
|
|
10895
11029
|
"resolved",
|
|
11030
|
+
"canceled",
|
|
10896
11031
|
"archived"
|
|
10897
|
-
]).optional().describe("default current = active + needs-review + stuck; all includes standing/resolved/archived"),
|
|
11032
|
+
]).optional().describe("default current = active + needs-review + stuck; all includes backlog/standing/resolved/canceled/archived"),
|
|
10898
11033
|
limit: number2().int().min(1).max(100).optional().describe("page size (default 20, max 100)"),
|
|
10899
11034
|
cursor: string2().optional().describe("keyset cursor from a prior page's nextCursor")
|
|
10900
11035
|
},
|
|
@@ -11375,10 +11510,10 @@ var ACTION_DEFINITIONS = [
|
|
|
11375
11510
|
{
|
|
11376
11511
|
name: "transition_thread",
|
|
11377
11512
|
title: "Move a thread's lifecycle",
|
|
11378
|
-
description: "Move a Thread among active, needs-review, stuck, standing, resolved, or archived with an optional reason; illegal lifecycle jumps are rejected.
|
|
11513
|
+
description: "Move a Thread among backlog, active, needs-review, stuck, standing, resolved, canceled, or archived with an optional reason; illegal lifecycle jumps are rejected. Park accepted-not-committed work in backlog, resolve finite Decide/Deliver/Investigate/Manage work once its outcome is in, cancel work the room decided not to do, archive retired work (refile misfiled work with `thread_update` instead), use standing only for intentionally open-ended concerns, and curate standout outputs separately.",
|
|
11379
11514
|
inputSchema: {
|
|
11380
11515
|
threadId: string2().describe("the thread to move, thr_…"),
|
|
11381
|
-
to: _enum(
|
|
11516
|
+
to: _enum(LIFECYCLE_TYPES).describe("target Thread lifecycle type"),
|
|
11382
11517
|
reason: string2().optional().describe("optional one-line why, recorded on the event")
|
|
11383
11518
|
},
|
|
11384
11519
|
surfaces: ["mcp", "cli"],
|
|
@@ -12451,7 +12586,7 @@ var ACTION_DEFINITIONS = [
|
|
|
12451
12586
|
{
|
|
12452
12587
|
name: "tldraw_status",
|
|
12453
12588
|
title: "Check tldraw board status",
|
|
12454
|
-
description: "Read compact operational room health and separately reported script sessions for a tldraw board; board geometry/document content stays on tldraw_observe and tldraw_get. Session reports remain per-session observations and are never collapsed into global success.",
|
|
12589
|
+
description: "Read compact operational room health, current latest-preview freshness, and separately reported script sessions for a tldraw board without rendering an image; board geometry/document content stays on tldraw_observe and tldraw_get. Session reports remain per-session observations and are never collapsed into global success.",
|
|
12455
12590
|
inputSchema: { artifactId: string2().describe("the tldraw Artifact, art_…") },
|
|
12456
12591
|
surfaces: ["mcp", "cli"],
|
|
12457
12592
|
toolset: "artifacts",
|
|
@@ -12509,12 +12644,13 @@ var ACTION_DEFINITIONS = [
|
|
|
12509
12644
|
{
|
|
12510
12645
|
name: "tldraw_observe",
|
|
12511
12646
|
title: "Observe a tldraw board",
|
|
12512
|
-
description: `
|
|
12647
|
+
description: `Read a fresh bounded tldraw scene, lint result, document clock/digest, and latest-preview freshness; preview defaults to metadata-only with no screenshot/storage write, while preview=ensure reuses a same-digest preview or explicitly renders the canonical latest PNG when visual composition matters, and lint remains advisory rather than ownership/intent evidence. First use: read the tldraw guide at ${AGENT_GUIDE_URLS.tldraw}.`,
|
|
12513
12648
|
inputSchema: {
|
|
12514
12649
|
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
12515
12650
|
pageId: string2().min(1).max(200).optional().describe("optional page to observe"),
|
|
12516
12651
|
viewportWidth: number2().int().min(320).max(1920).optional(),
|
|
12517
|
-
viewportHeight: number2().int().min(240).max(1080).optional()
|
|
12652
|
+
viewportHeight: number2().int().min(240).max(1080).optional(),
|
|
12653
|
+
preview: _enum(["metadata", "ensure"]).optional().describe("preview behavior; defaults to metadata, while ensure explicitly refreshes only when stale/missing")
|
|
12518
12654
|
},
|
|
12519
12655
|
surfaces: ["mcp", "cli"],
|
|
12520
12656
|
toolset: "artifacts",
|
package/package.json
CHANGED