@tendrilapp/cli 0.1.50 → 0.1.51
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/SKILL.md +22 -1
- package/dist/tendril-mcp.js +17 -0
- package/dist/tendril.js +1167 -348
- package/package.json +1 -1
package/dist/SKILL.md
CHANGED
|
@@ -279,7 +279,19 @@ Batch runs (several components in one session):
|
|
|
279
279
|
scanned" never reads as "no relationship".
|
|
280
280
|
CONNECTING COMPONENTS THAT ALREADY EXIST (both recorded, both
|
|
281
281
|
generated): step ONE is putting both recording sets in one scanned
|
|
282
|
-
root (co-locate, or --library). If
|
|
282
|
+
root (co-locate, or --library). If a set is not on this machine at
|
|
283
|
+
all — a fresh checkout, a different laptop, a component a teammate
|
|
284
|
+
published — do NOT conclude the work needs the original machine:
|
|
285
|
+
`tendril_pull <component name>` downloads the recording set the
|
|
286
|
+
published verdict was measured against, into
|
|
287
|
+
`./recordings/<component>/`. One call per component; the name is
|
|
288
|
+
exact, and a name that does not resolve comes back with the
|
|
289
|
+
account's real component names to pick from. It needs a portal
|
|
290
|
+
session (`tendril_login`) because a recording set belongs to the
|
|
291
|
+
account that published it — everything after the pull is local and
|
|
292
|
+
account-less as always. A publication published before recording
|
|
293
|
+
sets travelled, or published with `--no-recordings`, says so: that
|
|
294
|
+
is an honest stop, not a retry. If the pairing then shows as
|
|
283
295
|
NAME-ONLY (the host was recorded over MCP, so Figma's instance→
|
|
284
296
|
component bindings were never captured), run
|
|
285
297
|
`tendril_record_bindings` on the HOST set — one or two batched
|
|
@@ -496,6 +508,15 @@ automatically) → `tendril_publish` → surface what it returns:
|
|
|
496
508
|
moment for a step no click will confirm.
|
|
497
509
|
- Not signed in? Surface `tendril_login` first — the sequence pauses at
|
|
498
510
|
sign-in; it never silently skips publishing.
|
|
511
|
+
- A publish also carries the RECORDING SET the verdict was measured
|
|
512
|
+
against, so the work can be picked up on any machine the user signs
|
|
513
|
+
in from (`tendril_pull`). It is private to their account — no share
|
|
514
|
+
link and no public page reaches it — and it rides the same deletion
|
|
515
|
+
as everything else. If the publish result says it went without the
|
|
516
|
+
recording set, relay that line as-is: it names why, and it is never
|
|
517
|
+
a failed publish. The first time an account carries one, the portal
|
|
518
|
+
asks for one browser Accept naming the new custody; relay that link
|
|
519
|
+
the way you relay an approve link, and never urge the decision.
|
|
499
520
|
|
|
500
521
|
Sub-bar runs do NOT publish — the CLI refuses a declined run, and the
|
|
501
522
|
honest failure report is that run's correct terminal state. The
|
package/dist/tendril-mcp.js
CHANGED
|
@@ -138,6 +138,23 @@ var TOOLS = [
|
|
|
138
138
|
}),
|
|
139
139
|
argv: (i) => ["publish", i["bundleDir"], "--approve-wait", "--wait-window", "55", ...typeof i["portal"] === "string" ? ["--to", i["portal"]] : []]
|
|
140
140
|
},
|
|
141
|
+
{
|
|
142
|
+
name: "tendril_pull",
|
|
143
|
+
description: "Bring a published component's RECORDING SET onto this machine \u2014 the recorded design truth its verdict was measured against. Use it when the recordings are not here: a fresh machine, a clone with no recordings/ directory, or a component someone else on the team published. ONE bounded call, no wait twin. Needs a portal session (tendril_login) because a recording set belongs to the account that published it; everything afterwards \u2014 verify, compose, republish \u2014 is local, offline and account-less as always. The name is EXACT and the portal's refusals list the user's real component names, so a name that does not resolve is a one-step correction rather than a dead end; when one name spans two design systems, pass `figmaFile`. It writes to ./recordings/<component>/ and never overwrites a different set already there. AFTER pulling, call tendril_record_status on each set you pulled, then continue the connect prompt from its step 3.",
|
|
144
|
+
schema: z.object({
|
|
145
|
+
component: str("the component name, exactly as the user's library shows it"),
|
|
146
|
+
figmaFile: optStr("the design system's Figma file key \u2014 only when one name spans several of the user's design systems (the portal's refusal says when)"),
|
|
147
|
+
dest: optStr("where the set lands (default: ./recordings/<component>)"),
|
|
148
|
+
portal: optStr("portal origin override for self-hosted portals (defaults to the stored session's portal)")
|
|
149
|
+
}),
|
|
150
|
+
argv: (i) => [
|
|
151
|
+
"pull",
|
|
152
|
+
i["component"],
|
|
153
|
+
...typeof i["figmaFile"] === "string" ? ["--figma-file", i["figmaFile"]] : [],
|
|
154
|
+
...typeof i["dest"] === "string" ? ["--dest", i["dest"]] : [],
|
|
155
|
+
...typeof i["portal"] === "string" ? ["--to", i["portal"]] : []
|
|
156
|
+
]
|
|
157
|
+
},
|
|
141
158
|
{
|
|
142
159
|
name: "tendril_record_next",
|
|
143
160
|
annotations: { readOnlyHint: true },
|