@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.
@@ -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;AAUD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAwBjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB5D"}
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.\n`;
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":"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"}
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 — [project-name] now has superpowers.
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 template (MCP: `get_integration_guide` topic `integration-success`; CLI: `bridge guide integration-success`), then output it personalised for this project.
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 — the examples in the guide are illustrative only. Strip the `AGENT SUBSTITUTION GUIDE` section before outputting — it must never be shown to the developer.
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.** Output the banner below, 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 `█`.
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]` with real values from the integration:
306
- - `[project-name]` — folder name and/or `package.json` name
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
- Output the success message at the top of this prompt, personalised for what you actually did. Same rules as the auth master:
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]` with real values
209
- - Strip any agent-only notes
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 — start with the `█` character
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 — [project-name] now has superpowers.
27
+ Congratulations! [project-name] now has superpowers.
10
28
 
11
29
  ✅ Authentication
12
- UI for users to signup and login. Enable more
13
- alternatives from the control center.
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. Unauth'd users
17
- bounce to login automatically.
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
- Tenant context flows through every request.
39
+ Workspace context flows through every request.
22
40
 
23
41
  ✅ You know who's calling
24
42
  [token-description]
25
- One token. Every auth alternative covered.
43
+ One token. Every way to sign in covered.
26
44
 
27
45
  ──────────────────────────────────────────────
28
- The control center gives you even more powers.
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") — often more meaningful than the package name
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 "control center" next-steps lines, replace `[framework]` with 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 — that command
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 — the key identifiers the developer uses to access the
67
- authenticated user in their specific framework. No explanation.
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 — not file names.
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
- ✅ Auth UI live — signup, login, password reset
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
- ✅ Authenticated user available on every request
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 actual change, drawn from what you did in this
91
- session. Real package names, real file paths, real URLs, real values. Omit
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
- ✅ @nebulr-group/bridge-svelte installed
97
- ✅ src/routes/+layout.ts — export const load = bridgeBootstrap({ rules })
98
- ✅ src/routes/+layout.svelte — app wrapped in <BridgeBootstrap>
99
- ✅ src/routes/auth/[...bridge]/+page.svelte — <BridgeAuthRoutes /> serves every sign-in page
100
- ✅ .env configured with VITE_BRIDGE_APP_ID=abc123
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
- ✅ @nebulr-group/bridge-nestjs installed
105
- ✅ AppModule — BridgeModule.forRoot({ guard: { global: true } }), every route needs a signed-in user
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.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",