bitwrench 2.0.31 → 2.1.0
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/README.md +210 -125
- package/dist/bitwrench-bccl.cjs.js +349 -188
- package/dist/bitwrench-bccl.cjs.min.js +2 -39
- package/dist/bitwrench-bccl.cjs.min.js.gz +0 -0
- package/dist/bitwrench-bccl.esm.js +349 -188
- package/dist/bitwrench-bccl.esm.min.js +2 -39
- package/dist/bitwrench-bccl.esm.min.js.gz +0 -0
- package/dist/bitwrench-bccl.umd.js +349 -188
- package/dist/bitwrench-bccl.umd.min.js +2 -39
- package/dist/bitwrench-bccl.umd.min.js.gz +0 -0
- package/dist/bitwrench-code-edit.cjs.js +17 -6
- package/dist/bitwrench-code-edit.cjs.min.js +2 -20
- package/dist/bitwrench-code-edit.es5.js +8 -3
- package/dist/bitwrench-code-edit.es5.min.js +2 -19
- package/dist/bitwrench-code-edit.esm.js +17 -6
- package/dist/bitwrench-code-edit.esm.min.js +2 -19
- package/dist/bitwrench-code-edit.umd.js +17 -6
- package/dist/bitwrench-code-edit.umd.min.js +2 -19
- package/dist/bitwrench-code-edit.umd.min.js.gz +0 -0
- package/dist/bitwrench-debug.js +1 -1
- package/dist/bitwrench-debug.min.js +1 -1
- package/dist/bitwrench-lean.cjs.js +2492 -1628
- package/dist/bitwrench-lean.cjs.min.js +2 -80
- package/dist/bitwrench-lean.cjs.min.js.gz +0 -0
- package/dist/bitwrench-lean.es5.js +2740 -1838
- package/dist/bitwrench-lean.es5.min.js +2 -49
- package/dist/bitwrench-lean.es5.min.js.gz +0 -0
- package/dist/bitwrench-lean.esm.js +2492 -1628
- package/dist/bitwrench-lean.esm.min.js +2 -80
- package/dist/bitwrench-lean.esm.min.js.gz +0 -0
- package/dist/bitwrench-lean.umd.js +2492 -1628
- package/dist/bitwrench-lean.umd.min.js +2 -80
- package/dist/bitwrench-lean.umd.min.js.gz +0 -0
- package/dist/bitwrench-util-color.cjs.js +251 -0
- package/dist/bitwrench-util-color.cjs.min.js +3 -0
- package/dist/bitwrench-util-color.es5.js +256 -0
- package/dist/bitwrench-util-color.es5.min.js +3 -0
- package/dist/bitwrench-util-color.esm.js +241 -0
- package/dist/bitwrench-util-color.esm.min.js +3 -0
- package/dist/bitwrench-util-color.umd.js +257 -0
- package/dist/bitwrench-util-color.umd.min.js +3 -0
- package/dist/bitwrench-util-css.cjs.js +2 -1
- package/dist/bitwrench-util-css.cjs.min.js +2 -21
- package/dist/bitwrench-util-css.es5.js +2 -1
- package/dist/bitwrench-util-css.es5.min.js +2 -20
- package/dist/bitwrench-util-css.esm.js +2 -1
- package/dist/bitwrench-util-css.esm.min.js +1 -19
- package/dist/bitwrench-util-css.umd.js +2 -1
- package/dist/bitwrench-util-css.umd.min.js +2 -20
- package/dist/bitwrench-util-css.umd.min.js.gz +0 -0
- package/dist/bitwrench.cjs.js +2826 -1801
- package/dist/bitwrench.cjs.min.js +2 -99
- package/dist/bitwrench.cjs.min.js.gz +0 -0
- package/dist/bitwrench.css +403 -479
- package/dist/bitwrench.d.ts +70 -73
- package/dist/bitwrench.es5.js +3106 -2020
- package/dist/bitwrench.es5.min.js +2 -67
- package/dist/bitwrench.es5.min.js.gz +0 -0
- package/dist/bitwrench.esm.js +2826 -1801
- package/dist/bitwrench.esm.min.js +2 -99
- package/dist/bitwrench.esm.min.js.gz +0 -0
- package/dist/bitwrench.min.css +1 -1
- package/dist/bitwrench.umd.js +2826 -1801
- package/dist/bitwrench.umd.min.js +2 -99
- package/dist/bitwrench.umd.min.js.gz +0 -0
- package/dist/builds.json +222 -134
- package/dist/bwserve.cjs.js +308 -298
- package/dist/bwserve.d.ts +157 -0
- package/dist/bwserve.esm.js +309 -299
- package/dist/sri.json +54 -46
- package/docs/README.md +6 -3
- package/docs/app-patterns.md +7 -6
- package/docs/bitwrench-for-wasm.md +53 -54
- package/docs/bitwrench-mcp.md +2 -2
- package/docs/bitwrench-northstar-principles.md +406 -0
- package/docs/bitwrench-taco-schema-discussion.md +2 -2
- package/docs/bitwrench_api.md +191 -106
- package/docs/bitwrench_typescript_usage.md +5 -5
- package/docs/bw-attach.md +29 -75
- package/docs/bwserve.md +200 -168
- package/docs/cli.md +36 -12
- package/docs/component-cheatsheet.md +2 -2
- package/docs/component-library.md +4 -4
- package/docs/component-lifecycle.md +234 -0
- package/docs/drift-lint.md +268 -0
- package/docs/framework-translation-table.md +4 -4
- package/docs/llm-bitwrench-guide.md +60 -50
- package/docs/routing.md +11 -13
- package/docs/state-management.md +110 -109
- package/docs/taco-format.md +13 -14
- package/docs/theming.md +13 -3
- package/docs/thinking-in-bitwrench.md +858 -983
- package/docs/tutorial-bwserve.md +37 -36
- package/docs/tutorial-embedded.md +10 -21
- package/docs/tutorial-website.md +2 -2
- package/package.json +38 -7
- package/readme.html +262 -160
- package/src/bitwrench-bccl-entry.js +2 -2
- package/src/bitwrench-bccl.js +346 -185
- package/src/bitwrench-code-edit.js +16 -5
- package/src/bitwrench-color-utils.js +117 -181
- package/src/bitwrench-file-ops.js +2 -2
- package/src/bitwrench-lean.js +4 -3
- package/src/bitwrench-router.js +5 -2
- package/src/bitwrench-styles.js +420 -504
- package/src/bitwrench-util-color.js +240 -0
- package/src/bitwrench-util-css.js +1 -0
- package/src/bitwrench-utils.js +4 -0
- package/src/bitwrench.d.ts +70 -73
- package/src/bitwrench.h +5 -0
- package/src/bitwrench.js +1939 -933
- package/src/bwserve/attach.js +0 -1
- package/src/bwserve/bwclient.js +172 -32
- package/src/bwserve/bwshell.js +0 -4
- package/src/bwserve/client.js +59 -220
- package/src/bwserve/index.js +78 -42
- package/src/bwserve.d.ts +157 -0
- package/src/bwserve.h +5 -0
- package/src/cli/attach.js +12 -75
- package/src/cli/convert.js +2 -2
- package/src/cli/serve.js +37 -35
- package/src/generate-css.js +1 -1
- package/src/mcp/knowledge.js +4 -4
- package/src/mcp/live.js +21 -13
- package/src/mcp/tools.js +0 -1
- package/src/version.js +3 -7
package/docs/bw-attach.md
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
`bwcli attach` is a built-in terminal-based debugger for any bitwrench page. It starts a bwserve server, waits for a browser to connect via a drop-in `<script>` tag, then gives you an interactive REPL where you can:
|
|
6
6
|
|
|
7
|
-
- **Evaluate JavaScript** in the connected browser and see results
|
|
8
7
|
- **Inspect the DOM** with `/tree` — a structured tree view of elements
|
|
9
8
|
- **Take screenshots** with `/screenshot` — capture any element to a PNG file
|
|
10
9
|
- **Listen to events** with `/listen` — watch clicks, inputs, and other DOM events in real time
|
|
@@ -25,7 +24,7 @@ bwcli attach
|
|
|
25
24
|
You'll see:
|
|
26
25
|
|
|
27
26
|
```
|
|
28
|
-
bwcli attach v2.
|
|
27
|
+
bwcli attach v2.1.x
|
|
29
28
|
Server: http://localhost:7902
|
|
30
29
|
Drop-in: <script src="http://localhost:7902/bw/attach.js"></script>
|
|
31
30
|
|
|
@@ -59,18 +58,18 @@ bw>
|
|
|
59
58
|
### 3. Start debugging
|
|
60
59
|
|
|
61
60
|
```
|
|
62
|
-
bw> document.title
|
|
63
|
-
"My Page Title"
|
|
64
|
-
|
|
65
|
-
bw> bw.$('.bw-card').length
|
|
66
|
-
3
|
|
67
|
-
|
|
68
61
|
bw> /tree #app 2
|
|
69
62
|
div#app
|
|
70
63
|
div.main-panel
|
|
71
64
|
h1#title
|
|
72
65
|
ul#list
|
|
73
66
|
div.footer
|
|
67
|
+
|
|
68
|
+
bw> /mount #app statCard {"value":"42","label":"Users"}
|
|
69
|
+
Mounted statCard at #app
|
|
70
|
+
|
|
71
|
+
bw> /patch status Online
|
|
72
|
+
Patched status
|
|
74
73
|
```
|
|
75
74
|
|
|
76
75
|
## Installation
|
|
@@ -117,37 +116,6 @@ bwcli attach -v
|
|
|
117
116
|
|
|
118
117
|
## REPL Command Reference
|
|
119
118
|
|
|
120
|
-
### JavaScript Expressions
|
|
121
|
-
|
|
122
|
-
Any input that doesn't start with `/` is treated as a JavaScript expression. It is evaluated in the connected browser and the result is printed.
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
bw> document.title
|
|
126
|
-
"My Page Title"
|
|
127
|
-
|
|
128
|
-
bw> window.innerWidth
|
|
129
|
-
1440
|
|
130
|
-
|
|
131
|
-
bw> bw.$('.bw-card').length
|
|
132
|
-
3
|
|
133
|
-
|
|
134
|
-
bw> bw.$('.bw-btn').map(function(b) { return b.textContent; })
|
|
135
|
-
["Save", "Cancel", "Delete"]
|
|
136
|
-
|
|
137
|
-
bw> location.href
|
|
138
|
-
"http://localhost:3000/dashboard"
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
**Expression wrapping**: Expressions are automatically wrapped in `return(...)` so the result comes back. Statements (starting with `var`, `let`, `const`, `if`, `for`, `while`, `function`, `try`, `switch`, `throw`, `class`, or `{`) are sent without wrapping.
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
bw> var x = 42
|
|
145
|
-
undefined
|
|
146
|
-
|
|
147
|
-
bw> x
|
|
148
|
-
42
|
|
149
|
-
```
|
|
150
|
-
|
|
151
119
|
### `/tree [selector] [depth]`
|
|
152
120
|
|
|
153
121
|
Shows a DOM tree summary. Defaults: selector = `body`, depth = `3`.
|
|
@@ -168,11 +136,11 @@ div#app
|
|
|
168
136
|
ul#list
|
|
169
137
|
div.footer
|
|
170
138
|
|
|
171
|
-
bw> /tree .
|
|
172
|
-
div.
|
|
173
|
-
div.
|
|
174
|
-
div.
|
|
175
|
-
div.
|
|
139
|
+
bw> /tree .bw_bccl_card 1
|
|
140
|
+
div.bw_bccl_card
|
|
141
|
+
div.bw_bccl_card_header
|
|
142
|
+
div.bw_bccl_card_body
|
|
143
|
+
div.bw_bccl_card_footer
|
|
176
144
|
```
|
|
177
145
|
|
|
178
146
|
The tree shows tag name, id, and CSS classes for each element. Child elements are indented. Limited to 20 children per level to prevent flooding.
|
|
@@ -190,8 +158,8 @@ bw> /screenshot body page.png
|
|
|
190
158
|
Capturing body ...
|
|
191
159
|
Saved: page.png (1440x900, 245832 bytes)
|
|
192
160
|
|
|
193
|
-
bw> /screenshot .
|
|
194
|
-
Capturing .
|
|
161
|
+
bw> /screenshot .bw_bccl_card card.png
|
|
162
|
+
Capturing .bw_bccl_card ...
|
|
195
163
|
Saved: card.png (400x300, 48291 bytes)
|
|
196
164
|
```
|
|
197
165
|
|
|
@@ -214,13 +182,13 @@ Mounted statCard at #main
|
|
|
214
182
|
|
|
215
183
|
### `/render <selector> <taco-json>`
|
|
216
184
|
|
|
217
|
-
Renders a TACO object at the specified selector. Use for quick UI injection.
|
|
185
|
+
Renders a TACO object at the specified selector using `client.mount()`. Use for quick UI injection.
|
|
218
186
|
|
|
219
187
|
```
|
|
220
188
|
bw> /render #app {"t":"h1","c":"Hello from REPL"}
|
|
221
189
|
Rendered at #app
|
|
222
190
|
|
|
223
|
-
bw> /render #app {"t":"div","a":{"class":"
|
|
191
|
+
bw> /render #app {"t":"div","a":{"class":"bw_bccl_alert bw_info"},"c":"Injected alert"}
|
|
224
192
|
Rendered at #app
|
|
225
193
|
```
|
|
226
194
|
|
|
@@ -250,10 +218,10 @@ Listening for click on button
|
|
|
250
218
|
[event] click on button → BUTTON#save-btn "Save"
|
|
251
219
|
[event] click on button → BUTTON#cancel-btn "Cancel"
|
|
252
220
|
|
|
253
|
-
bw> /listen .
|
|
254
|
-
Listening for mouseover on .
|
|
221
|
+
bw> /listen .bw_bccl_card mouseover
|
|
222
|
+
Listening for mouseover on .bw_bccl_card
|
|
255
223
|
|
|
256
|
-
[event] mouseover on .
|
|
224
|
+
[event] mouseover on .bw_bccl_card → DIV "Card Title"
|
|
257
225
|
|
|
258
226
|
bw> /listen input change
|
|
259
227
|
Listening for change on input
|
|
@@ -274,18 +242,6 @@ bw> /unlisten button click
|
|
|
274
242
|
Stopped listening for click on button
|
|
275
243
|
```
|
|
276
244
|
|
|
277
|
-
### `/exec <code>`
|
|
278
|
-
|
|
279
|
-
Executes JavaScript on the client without capturing the return value. Fire-and-forget.
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
bw> /exec alert('Hello from the REPL!')
|
|
283
|
-
Executed.
|
|
284
|
-
|
|
285
|
-
bw> /exec document.body.style.background = 'lightyellow'
|
|
286
|
-
Executed.
|
|
287
|
-
```
|
|
288
|
-
|
|
289
245
|
### `/clients`
|
|
290
246
|
|
|
291
247
|
Lists all connected clients. The most recently connected client is marked as active — all commands target this client.
|
|
@@ -313,8 +269,8 @@ Exit the REPL and stop the server.
|
|
|
313
269
|
│ bwcli attach │ │ Target Browser Page │
|
|
314
270
|
│ │ │ │
|
|
315
271
|
│ readline REPL ──────────────┼─SSE─┤ bwclient.attach() │
|
|
316
|
-
│ /
|
|
317
|
-
│
|
|
272
|
+
│ /tree, /mount, /patch, etc. │ │ _bw_tree, _bw_mount │
|
|
273
|
+
│ slash commands → call/mount │◄POST┤ respond() │
|
|
318
274
|
│ │ │ │
|
|
319
275
|
│ bwserve (port 7902) │ │ <script src= │
|
|
320
276
|
│ /bw/events/:id (SSE out) │ │ .../bw/attach.js> │
|
|
@@ -327,25 +283,23 @@ Exit the REPL and stop the server.
|
|
|
327
283
|
1. **Server starts**: `bwcli attach` creates a bwserve instance on the specified port (default 7902)
|
|
328
284
|
2. **Drop-in script**: The browser loads `/bw/attach.js` which:
|
|
329
285
|
- Checks if bitwrench is already loaded; if not, injects the UMD bundle from `/bw/lib/bitwrench.umd.js`
|
|
330
|
-
- Evaluates the bwclient.js source inline (including builtins for
|
|
286
|
+
- Evaluates the bwclient.js source inline (including builtins for tree, listen, mount, screenshot)
|
|
331
287
|
- Calls `bw._bwClient.attach()` to connect via SSE
|
|
332
288
|
3. **SSE connection**: The browser opens `GET /bw/events/:clientId` — the server registers the client
|
|
333
|
-
4. **REPL interaction**: You type
|
|
334
|
-
5. **Response**: The client
|
|
289
|
+
4. **REPL interaction**: You type slash commands → the server sends protocol messages via SSE
|
|
290
|
+
5. **Response**: The client processes the command and POSTs the result back via `/bw/return/query/:clientId`
|
|
335
291
|
6. **Events**: When `/listen` is active, DOM events POST back via `/bw/return/event/:clientId`
|
|
336
292
|
|
|
337
293
|
### Protocol Messages Used
|
|
338
294
|
|
|
339
295
|
| REPL Action | Protocol | Route |
|
|
340
296
|
|-------------|----------|-------|
|
|
341
|
-
| JS expression | `call _bw_query` | `/bw/return/query/:id` |
|
|
342
297
|
| `/tree` | `call _bw_tree` | `/bw/return/query/:id` |
|
|
343
298
|
| `/screenshot` | `call _bw_screenshot` | `/bw/return/screenshot/:id` |
|
|
344
299
|
| `/mount` | `call _bw_mount` | `/bw/return/mount/:id` |
|
|
345
|
-
| `/render` | SSE `
|
|
346
|
-
| `/patch` | SSE `patch` |
|
|
300
|
+
| `/render` | SSE `mount` (v:1, ref + taco) | -- (one-way) |
|
|
301
|
+
| `/patch` | SSE `patch` (v:1, ref + discriminated fields) | -- (one-way) |
|
|
347
302
|
| `/listen` | `call _bw_listen` | `/bw/return/event/:id` |
|
|
348
|
-
| `/exec` | SSE `exec` | — (one-way) |
|
|
349
303
|
|
|
350
304
|
### Client Builtins
|
|
351
305
|
|
|
@@ -371,12 +325,12 @@ OPTIONS preflight requests on `/bw/return/*` are handled with a 204 response and
|
|
|
371
325
|
|
|
372
326
|
## Security
|
|
373
327
|
|
|
374
|
-
- **
|
|
328
|
+
- **No code-over-wire**: In v2.1, bare JS evaluation (`exec`, `register`, `query`) was removed from the wire protocol. Attach mode uses only the structured protocol verbs (`mount`, `patch`, `call` to named builtins, etc.).
|
|
375
329
|
- **Local-only by default**: The server binds to `localhost`. Do not expose to a network without understanding the implications.
|
|
376
330
|
- **CORS headers**: All endpoints include `Access-Control-Allow-Origin: *` to support cross-origin attach. This is intentional for debugging workflows.
|
|
377
331
|
- **No authentication**: Anyone who can reach the port can attach. Use firewall rules if needed.
|
|
378
332
|
|
|
379
|
-
**Do not run `bwcli attach` on a production server or expose it to the public internet.**
|
|
333
|
+
**Do not run `bwcli attach` on a production server or expose it to the public internet.** The attach REPL can mount components, patch content, and inspect the DOM. It should only be used for local development and debugging.
|
|
380
334
|
|
|
381
335
|
## Use Cases
|
|
382
336
|
|
|
@@ -385,7 +339,7 @@ OPTIONS preflight requests on `/bw/return/*` are handled with a 204 response and
|
|
|
385
339
|
- **Event debugging**: Listen to click, input, submit, and other DOM events in real time
|
|
386
340
|
- **Visual regression**: Take screenshots of specific components for comparison
|
|
387
341
|
- **Remote inspection**: Attach to a page running on another machine (within your local network)
|
|
388
|
-
- **AI-driven UI**: Script the REPL from another process for automated UI
|
|
342
|
+
- **AI-driven UI**: Script the REPL from another process for automated UI workflows
|
|
389
343
|
|
|
390
344
|
## Multiple Clients
|
|
391
345
|
|