@nebulr-group/bridge-cli 0.6.6 → 0.6.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/commands/check.command.d.ts +1 -0
- package/dist/commands/check.command.d.ts.map +1 -1
- package/dist/commands/check.command.js +8 -1
- package/dist/commands/check.command.js.map +1 -1
- package/dist/prompts/auth-master-integration-prompt.md +12 -3
- package/dist/prompts/billing/master.md +5 -37
- package/dist/prompts/flags/master.md +9 -29
- package/dist/prompts/integration-success.md +225 -28
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ export declare function checkGates(root: string): {
|
|
|
5
5
|
scanned: number;
|
|
6
6
|
findings: GateFinding[];
|
|
7
7
|
};
|
|
8
|
+
export declare const SUCCESS_MESSAGE_REMINDER: string;
|
|
8
9
|
export declare function formatGateReport(scanned: number, findings: GateFinding[]): string;
|
|
9
10
|
export declare function registerCheckCommands(program: Command): void;
|
|
10
11
|
//# sourceMappingURL=check.command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.command.d.ts","sourceRoot":"","sources":["../../src/commands/check.command.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBzD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAIrF;
|
|
1
|
+
{"version":3,"file":"check.command.d.ts","sourceRoot":"","sources":["../../src/commands/check.command.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBzD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAIrF;AAeD,eAAO,MAAM,wBAAwB,QAEoI,CAAC;AAE1K,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAwBjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB5D"}
|
|
@@ -48,9 +48,16 @@ const KIND_LABEL = {
|
|
|
48
48
|
'plan-name': 'plan-name check',
|
|
49
49
|
'removed-api': 'removed API',
|
|
50
50
|
};
|
|
51
|
+
// TBP-952 — the gate check is the last command of every integration, in every
|
|
52
|
+
// run we looked at, and agents read its output through `tail -N`. The success
|
|
53
|
+
// message was an instruction near the end of a long guide read at the start,
|
|
54
|
+
// and agents dropped it by the time they finished. So the passing line itself
|
|
55
|
+
// says what comes next. One line, so no `tail` cuts it off.
|
|
56
|
+
export const SUCCESS_MESSAGE_REMINDER = "If you just finished adding Bridge sign-in, flags, plans or plan limits for the developer, your reply starts with Bridge's success message: " +
|
|
57
|
+
'`npx @nebulr-group/bridge-cli guide integration-success` (MCP: get_integration_guide topic integration-success) has it and says which one to show and how to fill it.';
|
|
51
58
|
export function formatGateReport(scanned, findings) {
|
|
52
59
|
if (findings.length === 0) {
|
|
53
|
-
return `bridge check gates: ${scanned} files checked, no direct role, privilege, plan or plan-feature checks. Every gate goes through a flag
|
|
60
|
+
return `bridge check gates: ${scanned} files checked, no direct role, privilege, plan or plan-feature checks. Every gate goes through a flag. ${SUCCESS_MESSAGE_REMINDER}\n`;
|
|
54
61
|
}
|
|
55
62
|
const lines = [
|
|
56
63
|
`bridge check gates: ${findings.length} direct check${findings.length === 1 ? '' : 's'} in ${scanned} files.`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.command.js","sourceRoot":"","sources":["../../src/commands/check.command.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAG3E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAEhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9G,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,GAAwC;IACtD,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,iBAAiB;IAC5B,cAAc,EAAE,oBAAoB;IACpC,WAAW,EAAE,iBAAiB;IAC9B,aAAa,EAAE,aAAa;CAC7B,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAuB;IACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,uBAAuB,OAAO,2GAA2G,CAAC;
|
|
1
|
+
{"version":3,"file":"check.command.js","sourceRoot":"","sources":["../../src/commands/check.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ Run `bridge auth login` and wait for it to print "Logged in as <email>". Once it
|
|
|
44
44
|
╚═════╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚══════╝
|
|
45
45
|
|
|
46
46
|
──────────────────────────────────────────────
|
|
47
|
-
Congratulations
|
|
47
|
+
Congratulations! [project-name] now has superpowers.
|
|
48
48
|
...
|
|
49
49
|
✅ You know who's calling
|
|
50
50
|
[token-description]
|
|
@@ -53,6 +53,11 @@ Run `bridge auth login` and wait for it to print "Logged in as <email>". Once it
|
|
|
53
53
|
Here is what I actually did:
|
|
54
54
|
[what-i-actually-did]
|
|
55
55
|
|
|
56
|
+
Bridge's footprint in your code:
|
|
57
|
+
[footprint]
|
|
58
|
+
|
|
59
|
+
[see-every-change]
|
|
60
|
+
|
|
56
61
|
And here is what I changed:
|
|
57
62
|
[what-i-changed]
|
|
58
63
|
──────────────────────────────────────────────
|
|
@@ -63,6 +68,8 @@ As you work through the steps below, track the following so you have it ready:
|
|
|
63
68
|
- **`[token-description]`** — the identifiers the developer uses to access the authenticated user in their framework (e.g. stores for Svelte, hooks for React, decorators for NestJS)
|
|
64
69
|
- **`[what-i-actually-did]`** — high-level outcomes: what works now that didn't before
|
|
65
70
|
- **`[what-i-changed]`** — every package installed, file created or modified, and URL configured, with exact values
|
|
71
|
+
- **`[footprint]`** — as you make each edit, note its file and its changes (one import, one wrapper, one guard, one env var…), whether the file is new, and whether you modified any of the developer's existing code. Count from this record, never estimate it afterwards
|
|
72
|
+
- **`[see-every-change]`** — the git state of each project, recorded in Step 1 before your first edit
|
|
66
73
|
|
|
67
74
|
## Step 1 — Discover projects
|
|
68
75
|
|
|
@@ -96,6 +103,8 @@ Scan the current directory and its immediate subdirectories for `package.json` f
|
|
|
96
103
|
- Package manager
|
|
97
104
|
- Existing auth (if any)
|
|
98
105
|
|
|
106
|
+
6. **Note the git state, before you edit anything.** Run `git status` in each project and record one of: clean; uncommitted changes already there (note which files); not a git repo, or no commits yet. The success message uses it to tell the developer how to see your changes. Never run `git init`, `git add`, `git stash` or `git commit`, and do not ask the developer about git.
|
|
107
|
+
|
|
99
108
|
## Step 1b — Check if Bridge is already integrated
|
|
100
109
|
|
|
101
110
|
If Step 1 detected a Bridge plugin (`@nebulr-group/bridge-<framework>`) in `dependencies`, the integration may already be partially or fully complete. Don't guess from the dependency alone — audit the wiring.
|
|
@@ -228,7 +237,7 @@ If anything fails, including the gate check, diagnose and fix before moving on.
|
|
|
228
237
|
|
|
229
238
|
## Step 6b — Tell the developer what they just got
|
|
230
239
|
|
|
231
|
-
Fetch the success message
|
|
240
|
+
Fetch the success message guide (MCP: `get_integration_guide` topic `integration-success`; CLI: `npx @nebulr-group/bridge-cli guide integration-success`) and output its MESSAGE 1 (sign-in), personalised for this project. Do this even when the gate check's line is the last thing you read: it reminds you of this step.
|
|
232
241
|
|
|
233
242
|
**Substitutions (always apply):**
|
|
234
243
|
|
|
@@ -238,7 +247,7 @@ Fetch the success message template (MCP: `get_integration_guide` topic `integrat
|
|
|
238
247
|
|
|
239
248
|
**Personalisation rules:**
|
|
240
249
|
|
|
241
|
-
- Fill in every `[placeholder]` using the substitution guide at the bottom of the template. For `[what-i-actually-did]` and `[what-i-changed]`, draw from what you actually observed and changed during Steps 1–6
|
|
250
|
+
- Fill in every `[placeholder]` using the substitution guide at the bottom of the template. For `[what-i-actually-did]`, `[footprint]` and `[what-i-changed]`, draw from what you actually observed and changed during Steps 1–6; the examples in the guide are illustrative only. Count the footprint from your record of each edit and pick `[see-every-change]` from the git state you noted in Step 1, as the guide's counting rules say. Output MESSAGE 1 only: never the `WHICH MESSAGE TO SHOW` part, the MESSAGE headings or the `AGENT SUBSTITUTION GUIDE`.
|
|
242
251
|
- If both a frontend and a backend were integrated, group the bottom two sections by project rather than merging them into a flat list.
|
|
243
252
|
- **DO NOT write any text before the banner.** The very first character of your response must be the first character of the ASCII art. No "Perfect!", no "Here's your success message:", no transition sentence, no acknowledgement — nothing. Start with the `█` character. If you find yourself typing an intro, stop and delete it.
|
|
244
253
|
- **If the build is broken** or auth doesn't actually work end-to-end, prepend a single "Heads up:" line before the banner. Never bury bad news under it.
|
|
@@ -51,6 +51,8 @@ Scan the current directory and its immediate subdirectories for `package.json` f
|
|
|
51
51
|
|
|
52
52
|
5. **Existing billing system?** — look for `stripe`, `@stripe/*`, `paddle-*`, `lemon-squeezy`, `chargebee`. Flag any found.
|
|
53
53
|
|
|
54
|
+
6. **Note the git state, before you edit anything.** Run `git status` in each project and record one of: clean; uncommitted changes already there (note which files); not a git repo, or no commits yet. The success message uses it to tell the developer how to see your changes. Never run `git init`, `git add`, `git stash` or `git commit`, and do not ask the developer about git. From your first edit on, keep a record of each change (its file, what it is, whether the file is new): the success message counts its footprint from that record.
|
|
55
|
+
|
|
54
56
|
## Step 1b — Audit existing billing wiring
|
|
55
57
|
|
|
56
58
|
If Step 1 found billing already partially or fully set up, audit it before doing anything:
|
|
@@ -271,44 +273,10 @@ If anything fails, diagnose and fix before moving on.
|
|
|
271
273
|
|
|
272
274
|
## Step 6 — Tell the developer what they just got
|
|
273
275
|
|
|
274
|
-
**Do not skip this step.**
|
|
275
|
-
|
|
276
|
-
```
|
|
277
|
-
██████╗ ██████╗ ██╗██████╗ ██████╗ ███████╗
|
|
278
|
-
██╔══██╗██╔══██╗██║██╔══██╗██╔════╝ ██╔════╝
|
|
279
|
-
██████╔╝██████╔╝██║██║ ██║██║ ███╗█████╗
|
|
280
|
-
██╔══██╗██╔══██╗██║██║ ██║██║ ██║██╔══╝
|
|
281
|
-
██████╔╝██║ ██║██║██████╔╝╚██████╔╝███████╗
|
|
282
|
-
╚═════╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚══════╝
|
|
283
|
-
|
|
284
|
-
──────────────────────────────────────────────
|
|
285
|
-
Billing is live in [project-name].
|
|
286
|
-
|
|
287
|
-
✅ Plans — [plan-names]
|
|
288
|
-
✅ Subscription page — [subscription-route]
|
|
289
|
-
✅ Paywall — [paywall-summary]
|
|
290
|
-
✅ Lifecycle notices — auto-render on trial / payment failure / cancel
|
|
291
|
-
✅ Quotas and entitlements — [quota-summary]
|
|
292
|
-
──────────────────────────────────────────────
|
|
293
|
-
Here is what I actually did:
|
|
294
|
-
[what-i-actually-did]
|
|
295
|
-
|
|
296
|
-
And here is what I changed:
|
|
297
|
-
[what-i-changed]
|
|
298
|
-
──────────────────────────────────────────────
|
|
299
|
-
Plan selection is required by default. To let users into the app without
|
|
300
|
-
picking a plan first, disable the paywall:
|
|
301
|
-
bridge app update --payments-auto-redirect false
|
|
302
|
-
──────────────────────────────────────────────
|
|
303
|
-
```
|
|
276
|
+
**Do not skip this step.** Fetch the integration success guide (MCP: `get_integration_guide` topic `integration-success`; CLI: `npx @nebulr-group/bridge-cli guide integration-success`) and output its MESSAGE 2 (plans, billing or plan limits), personalised. The very first character of your response must be `█`: no intro sentence, no "Here's your summary:", nothing before it. If something is broken, prepend a single "Heads up:" line before the `█`.
|
|
304
277
|
|
|
305
|
-
Fill every `[placeholder]`
|
|
306
|
-
- `
|
|
307
|
-
- `[plan-names]` — the plan keys (e.g. `free`, `premium`)
|
|
308
|
-
- `[subscription-route]` — where the subscription page is served (SvelteKit default `/subscription`)
|
|
309
|
-
- `[paywall-summary]` — e.g. "new users sent to `/subscription/plan` to pick a plan" (or "off — `paymentsAutoRedirect false`")
|
|
310
|
-
- `[quota-summary]` — metric keys, limits and kind, and the backend handlers that enforce them, or "none"
|
|
311
|
-
- `[what-i-actually-did]` / `[what-i-changed]` — every file created or modified, every command run
|
|
278
|
+
- Fill every `[placeholder]` by the guide's substitution rules: the plan keys, the subscription route, the paywall, the plan limits and where each is enforced. Count `[footprint]` from your record of each edit, never estimate; pick `[see-every-change]` from the git state you noted in Step 1; give each line of `[what-i-changed]` its size in changes. Plans, prices and Stripe settings made through the CLI or MCP are app settings, not code
|
|
279
|
+
- Output MESSAGE 2 only: never the `WHICH MESSAGE TO SHOW` part, the MESSAGE headings or the substitution guide
|
|
312
280
|
|
|
313
281
|
## Step 7 — Offer follow-on tracks
|
|
314
282
|
|
|
@@ -33,37 +33,15 @@ If the user is using flags **without Bridge Auth** (bring-your-own identity), th
|
|
|
33
33
|
|
|
34
34
|
---
|
|
35
35
|
|
|
36
|
-
**At the end of this integration you will output a success message:**
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
██████╗ ██████╗ ██╗██████╗ ██████╗ ███████╗
|
|
40
|
-
██╔══██╗██╔══██╗██║██╔══██╗██╔════╝ ██╔════╝
|
|
41
|
-
██████╔╝██████╔╝██║██║ ██║██║ ███╗█████╗
|
|
42
|
-
██╔══██╗██╔══██╗██║██║ ██║██║ ██║██╔══╝
|
|
43
|
-
██████╔╝██║ ██║██║██████╔╝╚██████╔╝███████╗
|
|
44
|
-
╚═════╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚══════╝
|
|
45
|
-
|
|
46
|
-
──────────────────────────────────────────────
|
|
47
|
-
Feature flags are live in [project-name].
|
|
48
|
-
|
|
49
|
-
✅ Flags read from the bulk-evaluate endpoint at boot
|
|
50
|
-
✅ Eval context wired: [identity-source]
|
|
51
|
-
✅ Telemetry batching enabled
|
|
52
|
-
✅ Realtime updates enabled (optional)
|
|
53
|
-
──────────────────────────────────────────────
|
|
54
|
-
Here is what I actually did:
|
|
55
|
-
[what-i-actually-did]
|
|
56
|
-
|
|
57
|
-
And here is what I changed:
|
|
58
|
-
[what-i-changed]
|
|
59
|
-
──────────────────────────────────────────────
|
|
60
|
-
```
|
|
36
|
+
**At the end of this integration you will output a success message:** MESSAGE 3 (feature flags) in the integration success guide (MCP: `get_integration_guide` topic `integration-success`; CLI: `npx @nebulr-group/bridge-cli guide integration-success`). It opens with the Bridge banner, says what now works, then what you did, Bridge's footprint in the code and every change.
|
|
61
37
|
|
|
62
38
|
Track as you work:
|
|
63
39
|
- **`[project-name]`** — folder name and/or `package.json` name for each project
|
|
64
40
|
- **`[identity-source]`** — how `identity` flows in (Bridge Auth `user.id`, your own session, anonymous bucket ID, etc.)
|
|
65
41
|
- **`[what-i-actually-did]`** — high-level outcomes
|
|
66
42
|
- **`[what-i-changed]`** — every package installed, file modified, env var set
|
|
43
|
+
- **`[footprint]`** — as you make each edit, note its file and its changes (one import, one hook call, one decorator, one env var…), whether the file is new, and whether you modified any of the developer's existing code
|
|
44
|
+
- **`[see-every-change]`** — the git state of each project, recorded in Step 1 before your first edit
|
|
67
45
|
|
|
68
46
|
## Mental model (1-minute version)
|
|
69
47
|
|
|
@@ -105,6 +83,8 @@ Scan the current directory and its immediate subdirectories for `package.json` f
|
|
|
105
83
|
|
|
106
84
|
5. **Record** for each project: path, type (frontend/backend), framework, package manager, existing flag system (if any).
|
|
107
85
|
|
|
86
|
+
6. **Note the git state, before you edit anything.** Run `git status` in each project and record one of: clean; uncommitted changes already there (note which files); not a git repo, or no commits yet. The success message uses it to tell the developer how to see your changes. Never run `git init`, `git add`, `git stash` or `git commit`, and do not ask the developer about git.
|
|
87
|
+
|
|
108
88
|
## Step 2 — Present findings and confirm
|
|
109
89
|
|
|
110
90
|
```
|
|
@@ -203,12 +183,12 @@ If anything fails, diagnose and fix before moving on.
|
|
|
203
183
|
|
|
204
184
|
## Step 6 — Tell the developer what they just got
|
|
205
185
|
|
|
206
|
-
|
|
186
|
+
**Do not skip this step.** Fetch the integration success guide (MCP: `get_integration_guide` topic `integration-success`; CLI: `npx @nebulr-group/bridge-cli guide integration-success`) and output its MESSAGE 3 (feature flags), personalised for what you actually did:
|
|
207
187
|
|
|
208
|
-
- Fill every `[placeholder]`
|
|
209
|
-
-
|
|
188
|
+
- Fill every `[placeholder]` by the guide's substitution rules. Count `[footprint]` from your record of each edit, never estimate; pick `[see-every-change]` from the git state you noted in Step 1; give each line of `[what-i-changed]` its size in changes
|
|
189
|
+
- Output MESSAGE 3 only: never the `WHICH MESSAGE TO SHOW` part, the MESSAGE headings or the substitution guide
|
|
210
190
|
- Group by project if both frontend and backend were integrated
|
|
211
|
-
- **Do not** write any text before the banner
|
|
191
|
+
- **Do not** write any text before the banner: start with the `█` character
|
|
212
192
|
- If a build is broken or flag reads return defaults forever, prepend a single "Heads up:" line before the banner
|
|
213
193
|
|
|
214
194
|
After delivering the message, the flags integration is complete.
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
WHICH MESSAGE TO SHOW (for you: never output this part)
|
|
2
|
+
|
|
3
|
+
Show one message, picked by what this request added, then stop:
|
|
4
|
+
- Sign-in (Bridge auth) → MESSAGE 1
|
|
5
|
+
- Plans, billing or plan limits → MESSAGE 2
|
|
6
|
+
- Feature flags → MESSAGE 3
|
|
7
|
+
Several in one request: show the first that applies, in that order, and
|
|
8
|
+
list the rest under what-i-actually-did.
|
|
9
|
+
|
|
10
|
+
The very first character of your reply is the first `█` of the banner: no
|
|
11
|
+
sentence before it. If the build is broken or the feature does not work end
|
|
12
|
+
to end, put a single "Heads up:" line before the banner; never bury bad news
|
|
13
|
+
under it. Fill every [placeholder] by the AGENT SUBSTITUTION GUIDE at the
|
|
14
|
+
bottom. Output the chosen message only: not this part, not the MESSAGE
|
|
15
|
+
headings, not the guide.
|
|
16
|
+
|
|
17
|
+
===== MESSAGE 1: sign-in =====
|
|
18
|
+
|
|
1
19
|
██████╗ ██████╗ ██╗██████╗ ██████╗ ███████╗
|
|
2
20
|
██╔══██╗██╔══██╗██║██╔══██╗██╔════╝ ██╔════╝
|
|
3
21
|
██████╔╝██████╔╝██║██║ ██║██║ ███╗█████╗
|
|
@@ -6,26 +24,26 @@
|
|
|
6
24
|
╚═════╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚══════╝
|
|
7
25
|
|
|
8
26
|
──────────────────────────────────────────────
|
|
9
|
-
Congratulations
|
|
27
|
+
Congratulations! [project-name] now has superpowers.
|
|
10
28
|
|
|
11
29
|
✅ Authentication
|
|
12
|
-
|
|
13
|
-
|
|
30
|
+
Sign-in and signup pages for your users. Turn on
|
|
31
|
+
more ways to sign in from the Control Center.
|
|
14
32
|
|
|
15
33
|
✅ Locked by default
|
|
16
|
-
Every route protected.
|
|
17
|
-
|
|
34
|
+
Every route protected. Signed-out users
|
|
35
|
+
go to the sign-in page automatically.
|
|
18
36
|
|
|
19
37
|
✅ Multi-tenant ready
|
|
20
38
|
Teams · Orgs · Workspaces · RBAC
|
|
21
|
-
|
|
39
|
+
Workspace context flows through every request.
|
|
22
40
|
|
|
23
41
|
✅ You know who's calling
|
|
24
42
|
[token-description]
|
|
25
|
-
One token. Every
|
|
43
|
+
One token. Every way to sign in covered.
|
|
26
44
|
|
|
27
45
|
──────────────────────────────────────────────
|
|
28
|
-
The
|
|
46
|
+
The Control Center gives you even more powers.
|
|
29
47
|
|
|
30
48
|
› Billing Stripe plans & subscriptions → bridge guide [framework] billing
|
|
31
49
|
› Feature flags Per-user, per-plan toggles → bridge guide flags
|
|
@@ -40,31 +58,104 @@
|
|
|
40
58
|
|
|
41
59
|
[what-i-actually-did]
|
|
42
60
|
|
|
61
|
+
Bridge's footprint in your code:
|
|
62
|
+
|
|
63
|
+
[footprint]
|
|
64
|
+
|
|
65
|
+
[see-every-change]
|
|
66
|
+
|
|
43
67
|
And here is what I changed:
|
|
44
68
|
|
|
45
69
|
[what-i-changed]
|
|
46
70
|
──────────────────────────────────────────────
|
|
47
71
|
|
|
72
|
+
===== MESSAGE 2: plans, billing or plan limits =====
|
|
73
|
+
|
|
74
|
+
██████╗ ██████╗ ██╗██████╗ ██████╗ ███████╗
|
|
75
|
+
██╔══██╗██╔══██╗██║██╔══██╗██╔════╝ ██╔════╝
|
|
76
|
+
██████╔╝██████╔╝██║██║ ██║██║ ███╗█████╗
|
|
77
|
+
██╔══██╗██╔══██╗██║██║ ██║██║ ██║██╔══╝
|
|
78
|
+
██████╔╝██║ ██║██║██████╔╝╚██████╔╝███████╗
|
|
79
|
+
╚═════╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚══════╝
|
|
80
|
+
|
|
81
|
+
──────────────────────────────────────────────
|
|
82
|
+
Billing is live in [project-name].
|
|
83
|
+
|
|
84
|
+
✅ Plans: [plan-names]
|
|
85
|
+
✅ Subscription page: [subscription-route]
|
|
86
|
+
✅ Paywall: [paywall-summary]
|
|
87
|
+
✅ Lifecycle notices: auto-render on trial / payment failure / cancel
|
|
88
|
+
✅ Quotas and entitlements: [quota-summary]
|
|
89
|
+
──────────────────────────────────────────────
|
|
90
|
+
Here is what I actually did:
|
|
91
|
+
[what-i-actually-did]
|
|
92
|
+
|
|
93
|
+
Bridge's footprint in your code:
|
|
94
|
+
[footprint]
|
|
95
|
+
|
|
96
|
+
[see-every-change]
|
|
97
|
+
|
|
98
|
+
And here is what I changed:
|
|
99
|
+
[what-i-changed]
|
|
100
|
+
──────────────────────────────────────────────
|
|
101
|
+
Plan selection is required by default. To let users into the app without
|
|
102
|
+
picking a plan first, disable the paywall:
|
|
103
|
+
bridge app update --payments-auto-redirect false
|
|
104
|
+
──────────────────────────────────────────────
|
|
105
|
+
|
|
106
|
+
===== MESSAGE 3: feature flags =====
|
|
107
|
+
|
|
108
|
+
██████╗ ██████╗ ██╗██████╗ ██████╗ ███████╗
|
|
109
|
+
██╔══██╗██╔══██╗██║██╔══██╗██╔════╝ ██╔════╝
|
|
110
|
+
██████╔╝██████╔╝██║██║ ██║██║ ███╗█████╗
|
|
111
|
+
██╔══██╗██╔══██╗██║██║ ██║██║ ██║██╔══╝
|
|
112
|
+
██████╔╝██║ ██║██║██████╔╝╚██████╔╝███████╗
|
|
113
|
+
╚═════╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚══════╝
|
|
114
|
+
|
|
115
|
+
──────────────────────────────────────────────
|
|
116
|
+
Feature flags are live in [project-name].
|
|
117
|
+
|
|
118
|
+
✅ Flags read from the bulk-evaluate endpoint at boot
|
|
119
|
+
✅ Eval context wired: [identity-source]
|
|
120
|
+
✅ Telemetry batching enabled
|
|
121
|
+
✅ Realtime updates enabled (optional)
|
|
122
|
+
──────────────────────────────────────────────
|
|
123
|
+
Here is what I actually did:
|
|
124
|
+
[what-i-actually-did]
|
|
125
|
+
|
|
126
|
+
Bridge's footprint in your code:
|
|
127
|
+
[footprint]
|
|
128
|
+
|
|
129
|
+
[see-every-change]
|
|
130
|
+
|
|
131
|
+
And here is what I changed:
|
|
132
|
+
[what-i-changed]
|
|
133
|
+
──────────────────────────────────────────────
|
|
134
|
+
|
|
48
135
|
---
|
|
49
136
|
AGENT SUBSTITUTION GUIDE (strip this section before outputting)
|
|
50
137
|
|
|
138
|
+
No em dashes (—) anywhere in the text you output. Use a colon, a comma or a
|
|
139
|
+
period instead. In prose say "sign in" and "signup" (not "login"),
|
|
140
|
+
"Control Center", "workspace" (not "tenant") and "app" (not "application").
|
|
141
|
+
|
|
51
142
|
PLACEHOLDER: project-name
|
|
52
143
|
Pick the most human-readable name available. Prefer in this order:
|
|
53
|
-
1. The folder name (e.g. "my-saas-app")
|
|
144
|
+
1. The folder name (e.g. "my-saas-app"), often more meaningful than the package name
|
|
54
145
|
2. The `name` field in package.json if it's descriptive
|
|
55
146
|
If both frontend and backend were integrated, combine them:
|
|
56
147
|
"my-saas-app + my-saas-api" or just the shared root folder name if obvious.
|
|
57
148
|
|
|
58
149
|
PLACEHOLDER: framework
|
|
59
|
-
In the
|
|
150
|
+
In the Control Center next-steps lines, replace `[framework]` with the
|
|
60
151
|
framework slug used by `bridge guide` (`svelte`, `react`, `nextjs`, `angular`,
|
|
61
152
|
`nestjs`, `express`). Use the frontend framework when both frontend and
|
|
62
|
-
backend were integrated. Leave `bridge guide flags` unchanged
|
|
153
|
+
backend were integrated. Leave `bridge guide flags` unchanged: that command
|
|
63
154
|
auto-detects the framework from `package.json`.
|
|
64
155
|
|
|
65
156
|
PLACEHOLDER: token-description
|
|
66
|
-
One short line
|
|
67
|
-
|
|
157
|
+
One short line: the key identifiers the developer uses to access the
|
|
158
|
+
signed-in user in their specific framework. No explanation.
|
|
68
159
|
Examples:
|
|
69
160
|
Svelte: profileStore · isAuthenticated · tokenStore
|
|
70
161
|
React: useProfile() · useIsAuthenticated() · useToken()
|
|
@@ -75,32 +166,138 @@ PLACEHOLDER: token-description
|
|
|
75
166
|
|
|
76
167
|
PLACEHOLDER: what-i-actually-did
|
|
77
168
|
3–5 bullet lines drawn from what actually happened in this session.
|
|
78
|
-
High-level outcomes in plain English
|
|
169
|
+
High-level outcomes in plain English, not file names.
|
|
79
170
|
If both frontend and backend were integrated, group under headings:
|
|
80
171
|
|
|
81
172
|
Frontend (my-saas-app):
|
|
82
|
-
✅
|
|
173
|
+
✅ Sign-in pages live: signup, sign in, password reset
|
|
83
174
|
✅ All routes protected by default
|
|
84
175
|
|
|
85
176
|
Backend (my-saas-api):
|
|
86
177
|
✅ All endpoints require a verified JWT
|
|
87
|
-
✅
|
|
178
|
+
✅ Signed-in user available on every request
|
|
179
|
+
|
|
180
|
+
PLACEHOLDER: plan-names (MESSAGE 2)
|
|
181
|
+
The plan keys, e.g. `free`, `pro`.
|
|
182
|
+
|
|
183
|
+
PLACEHOLDER: subscription-route (MESSAGE 2)
|
|
184
|
+
Where the subscription page is served (default `/subscription`).
|
|
185
|
+
|
|
186
|
+
PLACEHOLDER: paywall-summary (MESSAGE 2)
|
|
187
|
+
e.g. "new users sent to `/subscription/plan` to pick a plan", or
|
|
188
|
+
"off: `paymentsAutoRedirect false`". When the paywall is off, drop the
|
|
189
|
+
closing "Plan selection is required by default" block.
|
|
190
|
+
|
|
191
|
+
PLACEHOLDER: quota-summary (MESSAGE 2)
|
|
192
|
+
Metric keys, limits and kind (hard or billed per extra use), and where each
|
|
193
|
+
is enforced (the backend handler, or the frontend report), or "none".
|
|
194
|
+
Plans, prices and Stripe settings made through the CLI or MCP are app
|
|
195
|
+
settings, not code.
|
|
196
|
+
|
|
197
|
+
PLACEHOLDER: identity-source (MESSAGE 3)
|
|
198
|
+
How `identity` reaches the flags: Bridge Auth `user.id`, the app's own
|
|
199
|
+
session, an anonymous bucket ID.
|
|
200
|
+
|
|
201
|
+
HOW TO COUNT THE FOOTPRINT (used by footprint, see-every-change, what-i-changed)
|
|
202
|
+
- Count only the changes YOU made in this session, from your own record of
|
|
203
|
+
each edit. Never estimate, and never count from `git diff` alone: the tree
|
|
204
|
+
may hold the developer's own work, and `git diff` does not show new
|
|
205
|
+
(untracked) files at all.
|
|
206
|
+
- The unit is a CHANGE, not a line. One change is one logical unit: an
|
|
207
|
+
import, a wrapper, a guard, a hook call, a handler or a button with its
|
|
208
|
+
handler, a component placed, an env var, a dependency, a config entry, a
|
|
209
|
+
route, a decorator or a module registration. An 8-line handler is one
|
|
210
|
+
change; a 3-name import statement is one import.
|
|
211
|
+
- "Imports or config" = imports, env vars, dependencies and config entries.
|
|
212
|
+
- Source files = the code files you created or modified. Env files,
|
|
213
|
+
package.json and lockfiles are config: they appear as env vars and
|
|
214
|
+
dependencies, not as source files. Stylesheets are styling, never code.
|
|
215
|
+
- New files are part of the footprint: count each one as touched and as new.
|
|
216
|
+
- Bridge app settings you changed through the CLI or MCP (callback URL,
|
|
217
|
+
allowed origins, redirect URIs, plans, flags) are listed in what-i-changed
|
|
218
|
+
but are NOT code changes and are not counted.
|
|
219
|
+
- Nothing changed this session (Bridge was already fully integrated): the
|
|
220
|
+
footprint is the single line "Nothing changed this session: Bridge was
|
|
221
|
+
already wired in." Drop see-every-change, and what-i-changed lists only
|
|
222
|
+
the Bridge app settings you changed, or "Nothing to change."
|
|
223
|
+
|
|
224
|
+
PLACEHOLDER: footprint
|
|
225
|
+
Two to four short lines, in this order:
|
|
226
|
+
|
|
227
|
+
1. Size, one line:
|
|
228
|
+
3 source files touched, 1 new · 11 changes, 7 of them imports or config
|
|
229
|
+
Leave out ", 1 new" when no file is new. Use "1 source file" in the
|
|
230
|
+
singular. Frontend and backend both integrated: one line per side,
|
|
231
|
+
headed like the other sections:
|
|
232
|
+
Frontend (my-saas-app): 3 source files touched, 1 new · 8 changes, 5 of them imports or config
|
|
233
|
+
Backend (my-saas-api): 1 source file touched · 4 changes, 3 of them imports or config
|
|
234
|
+
|
|
235
|
+
2. Existing logic, one line. Only when it is TRUE that you added code and
|
|
236
|
+
changed none of the developer's existing statements, write:
|
|
237
|
+
None of your existing logic changed: only additions, plus <body> wrapped.
|
|
238
|
+
naming the one wrapping you did (`<body>`, the app, the root layout), or
|
|
239
|
+
ending at "only additions." when you wrapped nothing. If you modified or
|
|
240
|
+
removed any of their code, say what instead, plainly:
|
|
241
|
+
2 of your lines changed: the old login check in app/page.tsx, now a Bridge guard.
|
|
242
|
+
|
|
243
|
+
3. Styling, one or two lines, kept apart from code. Count CSS in lines.
|
|
244
|
+
Only `--bridge-*` tokens mapped to the app's colors:
|
|
245
|
+
Styling: 16 lines map Bridge to your colors.
|
|
246
|
+
Tokens plus more styling to match the app:
|
|
247
|
+
Styling is optional: 16 lines map Bridge to your colors, and 46 more
|
|
248
|
+
copy your app's borders and shadows.
|
|
249
|
+
No styling: leave the styling line out.
|
|
250
|
+
|
|
251
|
+
PLACEHOLDER: see-every-change
|
|
252
|
+
One line (two at most), chosen from the `git status` you ran in each project
|
|
253
|
+
BEFORE your first edit. Never run `git init`, `git add` or `git commit` for
|
|
254
|
+
the developer, and do not ask them about git.
|
|
255
|
+
- Git repo, clean before you started, no new files:
|
|
256
|
+
See every change: git diff
|
|
257
|
+
- Git repo, clean before you started, you created files (`git diff` does
|
|
258
|
+
not show new files; `git status` lists them):
|
|
259
|
+
See every change: git status, then git diff
|
|
260
|
+
- Git repo, the developer already had uncommitted changes: point only at
|
|
261
|
+
the files you touched, and name new files on their own line:
|
|
262
|
+
See every change: git diff -- app/layout.tsx app/page.tsx
|
|
263
|
+
New files: app/auth/[...bridge]/page.tsx
|
|
264
|
+
If one of those files already had the developer's own uncommitted edits,
|
|
265
|
+
add "(also shows your earlier edits)" after the command.
|
|
266
|
+
- Not a git repo, or a repo with no commits yet:
|
|
267
|
+
Tip: commit before your next integration and git diff shows the whole footprint.
|
|
268
|
+
Frontend and backend in separate repos in different states: one line per
|
|
269
|
+
side, starting "Frontend:" / "Backend:". Files ignored by git (often
|
|
270
|
+
`.env.local`) never show in git; they are listed in what-i-changed anyway.
|
|
88
271
|
|
|
89
272
|
PLACEHOLDER: what-i-changed
|
|
90
|
-
The nitty-gritty. One line per
|
|
91
|
-
session. Real
|
|
92
|
-
anything that was skipped.
|
|
273
|
+
The nitty-gritty. One line per file (or per small group of config files),
|
|
274
|
+
drawn from what you did in this session. Real file paths, real package
|
|
275
|
+
names, real URLs, real values. Omit anything that was skipped.
|
|
276
|
+
End each line with its size in changes, in parentheses, lined up in one
|
|
277
|
+
column where the width allows:
|
|
278
|
+
- the changes in that file, using the units above: (1 import, 1 wrapper)
|
|
279
|
+
- a file you created starts with "new: ": (new: 1 import, 1 component)
|
|
280
|
+
- a stylesheet: (styling only)
|
|
281
|
+
- a Bridge app setting: (app setting, not code)
|
|
282
|
+
The sizes must add up to the totals in the footprint.
|
|
283
|
+
Example (Next.js):
|
|
284
|
+
|
|
285
|
+
✅ app/layout.tsx: <BridgeProvider> around the app (1 import, 1 wrapper)
|
|
286
|
+
✅ app/auth/[...bridge]/page.tsx: every sign-in page (new: 1 import, 1 component)
|
|
287
|
+
✅ app/page.tsx: studio needs sign-in, Sign out button (2 imports, 1 guard, 1 button)
|
|
288
|
+
✅ .env.local, package.json (2 env vars, 1 dependency)
|
|
289
|
+
✅ app/globals.css (styling only)
|
|
290
|
+
✅ Bridge app: http://localhost:3000 as callback + origin (app setting, not code)
|
|
291
|
+
|
|
93
292
|
If both frontend and backend were integrated, group under headings:
|
|
94
293
|
|
|
95
294
|
Frontend (my-saas-app):
|
|
96
|
-
✅
|
|
97
|
-
✅ src/routes/+layout.
|
|
98
|
-
✅ src/routes/+
|
|
99
|
-
✅
|
|
100
|
-
✅
|
|
101
|
-
✅ Bridge app configured for http://localhost:5175
|
|
295
|
+
✅ src/routes/+layout.ts: bridgeBootstrap({ rules }) as the load (1 import, 1 hook call)
|
|
296
|
+
✅ src/routes/+layout.svelte: app wrapped in <BridgeBootstrap> (1 import, 1 wrapper)
|
|
297
|
+
✅ src/routes/auth/[...bridge]/+page.svelte: every sign-in page (new: 1 import, 1 component)
|
|
298
|
+
✅ .env, package.json: VITE_BRIDGE_APP_ID=abc123, bridge-svelte (1 env var, 1 dependency)
|
|
299
|
+
✅ Bridge app: http://localhost:5175 as callback + origin (app setting, not code)
|
|
102
300
|
|
|
103
301
|
Backend (my-saas-api):
|
|
104
|
-
✅
|
|
105
|
-
✅
|
|
106
|
-
✅ .env configured with BRIDGE_APP_ID=abc123
|
|
302
|
+
✅ src/app.module.ts: BridgeModule.forRoot({ guard: { global: true } }) (1 import, 1 module registration)
|
|
303
|
+
✅ .env, package.json: BRIDGE_APP_ID=abc123, bridge-nestjs (1 env var, 1 dependency)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nebulr-group/bridge-cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.7",
|
|
4
4
|
"description": "The Bridge CLI: set up and manage sign-in, roles, plans, feature flags and API tokens from your terminal or AI coding agent.",
|
|
5
5
|
"author": "Nebulr Group",
|
|
6
6
|
"license": "MIT",
|