@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 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 the pairing then shows as
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
@@ -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 },