@tendrilapp/cli 0.1.52 → 0.1.54
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 +23 -2
- package/dist/tendril-mcp.js +13 -2
- package/dist/tendril.js +1107 -654
- package/package.json +1 -1
package/dist/SKILL.md
CHANGED
|
@@ -206,7 +206,7 @@ Batch runs (several components in one session):
|
|
|
206
206
|
metadata and context response text passed VERBATIM — responses
|
|
207
207
|
often arrive as MULTIPLE output blocks (block counts vary BY
|
|
208
208
|
TRANSPORT: the desktop server has been measured at 2-4 blocks per
|
|
209
|
-
response, the remote server at 1-
|
|
209
|
+
response, the remote server at 1-5 — never treat any count as a
|
|
210
210
|
sanity check), so `metadataParts`/`contextParts` (every block in
|
|
211
211
|
order, never hand-joined) is the normal path; `metadata`/`context`
|
|
212
212
|
only for a genuinely single-block response — plus the screenshot
|
|
@@ -253,7 +253,13 @@ Batch runs (several components in one session):
|
|
|
253
253
|
5. COMPOSITION: read the status output's `composition` block. If it
|
|
254
254
|
lists unconfirmed partner pairs, this recording references OTHER
|
|
255
255
|
recorded components (a segmented control built from a recorded
|
|
256
|
-
Control, a dialog holding a recorded Button).
|
|
256
|
+
Control, a dialog holding a recorded Button). A pair the human
|
|
257
|
+
ALREADY confirmed can legitimately re-open as a GROWTH ask
|
|
258
|
+
(`growsConfirmed: true`): new evidence derived MORE instances of
|
|
259
|
+
the same pairing — say so as an addition, never as a contradiction
|
|
260
|
+
of the settled decision; confirming adds the new instances, the
|
|
261
|
+
standing confirmation is untouched, and growth asks cannot be
|
|
262
|
+
declined (leave them unconfirmed and they simply stay local). Order matters:
|
|
257
263
|
generate the PARTNER bundle first, then put the pairing decision in
|
|
258
264
|
front of the human — it is human-only on either channel, and you
|
|
259
265
|
can never make it. CLICK PATH (lead with this): `tendril_compose`
|
|
@@ -388,6 +394,13 @@ Batch runs (several components in one session):
|
|
|
388
394
|
genuinely headless runs; it cannot tell "nobody is there" from "the
|
|
389
395
|
harness said nobody is there", so it must at least say what it did,
|
|
390
396
|
loudly and first.)
|
|
397
|
+
PRESENCE PROOF OVERRIDES THE NON-INTERACTIVE BRANCH: a browser
|
|
398
|
+
approval decided mid-run — a compose card approved, a publish
|
|
399
|
+
card clicked — is a human at the keyboard, whatever the harness
|
|
400
|
+
said. From the moment one lands, ask the consent gates that
|
|
401
|
+
remain instead of auto-resolving them (measured, 2026-08-30: a
|
|
402
|
+
run auto-resolved the model pick for its THIRD generation while
|
|
403
|
+
the user was demonstrably present, having just clicked Approve).
|
|
391
404
|
Weak models produce honest sub-bar reports, never false passes.
|
|
392
405
|
6. Tell the user roughly what a run costs them: organism-scale
|
|
393
406
|
components have measured 0.3–0.7M tokens of their plan.
|
|
@@ -527,6 +540,14 @@ live at <URL>" (or "done — waiting for your Approve at <link>, as
|
|
|
527
540
|
<account>"), before scores, caveats and file lists. The user should
|
|
528
541
|
never have to ask where their component is.
|
|
529
542
|
|
|
543
|
+
And invite the ONE check only the user can run: right after the
|
|
544
|
+
done-line, ask them to open the live page and say whether the demo
|
|
545
|
+
renders. You cannot execute the published page — a browser can, and
|
|
546
|
+
a served-page defect is invisible to every check this pipeline runs
|
|
547
|
+
(measured, 2026-08-30: two publishes reported "done — live" while
|
|
548
|
+
both live demos showed an error banner nobody had seen). One line,
|
|
549
|
+
no urging: "open it and tell me if anything looks off."
|
|
550
|
+
|
|
530
551
|
A green verify may also print COMPOSE lines: other recorded components
|
|
531
552
|
that embed the one just verified. Relay them after the done-line as
|
|
532
553
|
DISCLOSURES (zero questions — the confirm decision is human-only, in
|
package/dist/tendril-mcp.js
CHANGED
|
@@ -125,9 +125,18 @@ var TOOLS = [
|
|
|
125
125
|
description: "Publish a VERIFIED bundle to the user's portal \u2014 phase one of the browser-approved publish. Re-publishing an already-published component completes in one call. A component's FIRST publish is a human-only decision the portal enforces: this call requests the approval and returns the approve-page link \u2014 RELAY IT to the user verbatim, along with which account the result says to be signed in as (they click Approve in the browser; approving includes accepting the design system's publishing terms, which is their decision to make, never yours to urge). Then call tendril_publish_wait to finish. You cannot approve this yourself: the portal only accepts the decision from their signed-in browser, never from this machine's token. Requires a green verify (the CLI refuses a declined run) and a portal session (tendril_login).",
|
|
126
126
|
schema: z.object({
|
|
127
127
|
bundleDir: str("bundle directory (verified \u2014 carries component.json and verify-evidence)"),
|
|
128
|
-
portal: optStr("portal origin override for self-hosted portals (defaults to the stored session's portal)")
|
|
128
|
+
portal: optStr("portal origin override for self-hosted portals (defaults to the stored session's portal)"),
|
|
129
|
+
designSystemName: optStr(
|
|
130
|
+
"first publish only: a PROPOSED display name for the design system, prefilled on the approve card where the human names or picks it \u2014 pass the design's human name when you know it (the Figma file's title, the design system the user named); without a proposal the card prefills the raw Figma file key, and a plain Approve makes that key the permanent name"
|
|
131
|
+
)
|
|
129
132
|
}),
|
|
130
|
-
argv: (i) => [
|
|
133
|
+
argv: (i) => [
|
|
134
|
+
"publish",
|
|
135
|
+
i["bundleDir"],
|
|
136
|
+
"--approve-start",
|
|
137
|
+
...typeof i["designSystemName"] === "string" ? ["--design-system-name", i["designSystemName"]] : [],
|
|
138
|
+
...typeof i["portal"] === "string" ? ["--to", i["portal"]] : []
|
|
139
|
+
]
|
|
131
140
|
},
|
|
132
141
|
{
|
|
133
142
|
name: "tendril_publish_wait",
|
|
@@ -161,12 +170,14 @@ var TOOLS = [
|
|
|
161
170
|
description: "Fetch the user's living DESIGN-SYSTEM.md \u2014 the portal-assembled file describing one design system: its components with their ruler verdicts, each component's prescribed API and poses, the captured variable vocabulary, the icon inventory, and a changelog. Call it with no arguments first to LIST the design systems and their ids, then again with `ds` to fetch one (pass `out` to write the file where a design agent will read it). The file is a PROJECTION the portal re-assembles fresh on every fetch \u2014 never edit it, re-fetch it. Needs a portal session (tendril_login); it is owner-only because the vocabulary and icons are the customer's design IP.",
|
|
162
171
|
schema: z.object({
|
|
163
172
|
ds: optStr("the design system id \u2014 omit to list them"),
|
|
173
|
+
component: optStr("with ds: one component's id (from the file's inventory links) \u2014 fetches just that component's markdown page, the right scope when building with a single component"),
|
|
164
174
|
out: optStr("write the markdown to this file instead of returning it inline"),
|
|
165
175
|
portal: optStr("portal origin override for self-hosted portals (defaults to the stored session's portal)")
|
|
166
176
|
}),
|
|
167
177
|
argv: (i) => [
|
|
168
178
|
"design-system",
|
|
169
179
|
...typeof i["ds"] === "string" ? ["--ds", i["ds"]] : [],
|
|
180
|
+
...typeof i["component"] === "string" ? ["--component", i["component"]] : [],
|
|
170
181
|
...typeof i["out"] === "string" ? ["--out", i["out"]] : [],
|
|
171
182
|
...typeof i["portal"] === "string" ? ["--to", i["portal"]] : []
|
|
172
183
|
]
|