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.
Files changed (126) hide show
  1. package/README.md +210 -125
  2. package/dist/bitwrench-bccl.cjs.js +349 -188
  3. package/dist/bitwrench-bccl.cjs.min.js +2 -39
  4. package/dist/bitwrench-bccl.cjs.min.js.gz +0 -0
  5. package/dist/bitwrench-bccl.esm.js +349 -188
  6. package/dist/bitwrench-bccl.esm.min.js +2 -39
  7. package/dist/bitwrench-bccl.esm.min.js.gz +0 -0
  8. package/dist/bitwrench-bccl.umd.js +349 -188
  9. package/dist/bitwrench-bccl.umd.min.js +2 -39
  10. package/dist/bitwrench-bccl.umd.min.js.gz +0 -0
  11. package/dist/bitwrench-code-edit.cjs.js +17 -6
  12. package/dist/bitwrench-code-edit.cjs.min.js +2 -20
  13. package/dist/bitwrench-code-edit.es5.js +8 -3
  14. package/dist/bitwrench-code-edit.es5.min.js +2 -19
  15. package/dist/bitwrench-code-edit.esm.js +17 -6
  16. package/dist/bitwrench-code-edit.esm.min.js +2 -19
  17. package/dist/bitwrench-code-edit.umd.js +17 -6
  18. package/dist/bitwrench-code-edit.umd.min.js +2 -19
  19. package/dist/bitwrench-code-edit.umd.min.js.gz +0 -0
  20. package/dist/bitwrench-debug.js +1 -1
  21. package/dist/bitwrench-debug.min.js +1 -1
  22. package/dist/bitwrench-lean.cjs.js +2492 -1628
  23. package/dist/bitwrench-lean.cjs.min.js +2 -80
  24. package/dist/bitwrench-lean.cjs.min.js.gz +0 -0
  25. package/dist/bitwrench-lean.es5.js +2740 -1838
  26. package/dist/bitwrench-lean.es5.min.js +2 -49
  27. package/dist/bitwrench-lean.es5.min.js.gz +0 -0
  28. package/dist/bitwrench-lean.esm.js +2492 -1628
  29. package/dist/bitwrench-lean.esm.min.js +2 -80
  30. package/dist/bitwrench-lean.esm.min.js.gz +0 -0
  31. package/dist/bitwrench-lean.umd.js +2492 -1628
  32. package/dist/bitwrench-lean.umd.min.js +2 -80
  33. package/dist/bitwrench-lean.umd.min.js.gz +0 -0
  34. package/dist/bitwrench-util-color.cjs.js +251 -0
  35. package/dist/bitwrench-util-color.cjs.min.js +3 -0
  36. package/dist/bitwrench-util-color.es5.js +256 -0
  37. package/dist/bitwrench-util-color.es5.min.js +3 -0
  38. package/dist/bitwrench-util-color.esm.js +241 -0
  39. package/dist/bitwrench-util-color.esm.min.js +3 -0
  40. package/dist/bitwrench-util-color.umd.js +257 -0
  41. package/dist/bitwrench-util-color.umd.min.js +3 -0
  42. package/dist/bitwrench-util-css.cjs.js +2 -1
  43. package/dist/bitwrench-util-css.cjs.min.js +2 -21
  44. package/dist/bitwrench-util-css.es5.js +2 -1
  45. package/dist/bitwrench-util-css.es5.min.js +2 -20
  46. package/dist/bitwrench-util-css.esm.js +2 -1
  47. package/dist/bitwrench-util-css.esm.min.js +1 -19
  48. package/dist/bitwrench-util-css.umd.js +2 -1
  49. package/dist/bitwrench-util-css.umd.min.js +2 -20
  50. package/dist/bitwrench-util-css.umd.min.js.gz +0 -0
  51. package/dist/bitwrench.cjs.js +2826 -1801
  52. package/dist/bitwrench.cjs.min.js +2 -99
  53. package/dist/bitwrench.cjs.min.js.gz +0 -0
  54. package/dist/bitwrench.css +403 -479
  55. package/dist/bitwrench.d.ts +70 -73
  56. package/dist/bitwrench.es5.js +3106 -2020
  57. package/dist/bitwrench.es5.min.js +2 -67
  58. package/dist/bitwrench.es5.min.js.gz +0 -0
  59. package/dist/bitwrench.esm.js +2826 -1801
  60. package/dist/bitwrench.esm.min.js +2 -99
  61. package/dist/bitwrench.esm.min.js.gz +0 -0
  62. package/dist/bitwrench.min.css +1 -1
  63. package/dist/bitwrench.umd.js +2826 -1801
  64. package/dist/bitwrench.umd.min.js +2 -99
  65. package/dist/bitwrench.umd.min.js.gz +0 -0
  66. package/dist/builds.json +222 -134
  67. package/dist/bwserve.cjs.js +308 -298
  68. package/dist/bwserve.d.ts +157 -0
  69. package/dist/bwserve.esm.js +309 -299
  70. package/dist/sri.json +54 -46
  71. package/docs/README.md +6 -3
  72. package/docs/app-patterns.md +7 -6
  73. package/docs/bitwrench-for-wasm.md +53 -54
  74. package/docs/bitwrench-mcp.md +2 -2
  75. package/docs/bitwrench-northstar-principles.md +406 -0
  76. package/docs/bitwrench-taco-schema-discussion.md +2 -2
  77. package/docs/bitwrench_api.md +191 -106
  78. package/docs/bitwrench_typescript_usage.md +5 -5
  79. package/docs/bw-attach.md +29 -75
  80. package/docs/bwserve.md +200 -168
  81. package/docs/cli.md +36 -12
  82. package/docs/component-cheatsheet.md +2 -2
  83. package/docs/component-library.md +4 -4
  84. package/docs/component-lifecycle.md +234 -0
  85. package/docs/drift-lint.md +268 -0
  86. package/docs/framework-translation-table.md +4 -4
  87. package/docs/llm-bitwrench-guide.md +60 -50
  88. package/docs/routing.md +11 -13
  89. package/docs/state-management.md +110 -109
  90. package/docs/taco-format.md +13 -14
  91. package/docs/theming.md +13 -3
  92. package/docs/thinking-in-bitwrench.md +858 -983
  93. package/docs/tutorial-bwserve.md +37 -36
  94. package/docs/tutorial-embedded.md +10 -21
  95. package/docs/tutorial-website.md +2 -2
  96. package/package.json +38 -7
  97. package/readme.html +262 -160
  98. package/src/bitwrench-bccl-entry.js +2 -2
  99. package/src/bitwrench-bccl.js +346 -185
  100. package/src/bitwrench-code-edit.js +16 -5
  101. package/src/bitwrench-color-utils.js +117 -181
  102. package/src/bitwrench-file-ops.js +2 -2
  103. package/src/bitwrench-lean.js +4 -3
  104. package/src/bitwrench-router.js +5 -2
  105. package/src/bitwrench-styles.js +420 -504
  106. package/src/bitwrench-util-color.js +240 -0
  107. package/src/bitwrench-util-css.js +1 -0
  108. package/src/bitwrench-utils.js +4 -0
  109. package/src/bitwrench.d.ts +70 -73
  110. package/src/bitwrench.h +5 -0
  111. package/src/bitwrench.js +1939 -933
  112. package/src/bwserve/attach.js +0 -1
  113. package/src/bwserve/bwclient.js +172 -32
  114. package/src/bwserve/bwshell.js +0 -4
  115. package/src/bwserve/client.js +59 -220
  116. package/src/bwserve/index.js +78 -42
  117. package/src/bwserve.d.ts +157 -0
  118. package/src/bwserve.h +5 -0
  119. package/src/cli/attach.js +12 -75
  120. package/src/cli/convert.js +2 -2
  121. package/src/cli/serve.js +37 -35
  122. package/src/generate-css.js +1 -1
  123. package/src/mcp/knowledge.js +4 -4
  124. package/src/mcp/live.js +21 -13
  125. package/src/mcp/tools.js +0 -1
  126. 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.0.18
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 .bw-card 1
172
- div.bw-card
173
- div.bw-card-header
174
- div.bw-card-body
175
- div.bw-card-footer
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 .bw-card card.png
194
- Capturing .bw-card ...
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":"bw-alert bw-alert-info"},"c":"Injected alert"}
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 .bw-card mouseover
254
- Listening for mouseover on .bw-card
221
+ bw> /listen .bw_bccl_card mouseover
222
+ Listening for mouseover on .bw_bccl_card
255
223
 
256
- [event] mouseover on .bw-card → DIV "Card Title"
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
- │ /screenshot, /tree, etc. │ │ _bw_query, _bw_tree
317
- JS expressionsquery() │◄POST┤ respond() │
272
+ │ /tree, /mount, /patch, etc. │ │ _bw_tree, _bw_mount
273
+ slash commandscall/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 query, tree, listen, screenshot)
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 JS or slash commands → the server sends protocol messages via SSE
334
- 5. **Response**: The client evaluates the code and POSTs the result back via `/bw/return/query/:clientId`
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 `replace` | (one-way) |
346
- | `/patch` | SSE `patch` | (one-way) |
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
- - **allowExec is always true**: Attach mode is a debugging tool. The whole point is to execute arbitrary code on the client.
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.** It provides full JavaScript execution in the browser and should only be used for local development and debugging.
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 testing
342
+ - **AI-driven UI**: Script the REPL from another process for automated UI workflows
389
343
 
390
344
  ## Multiple Clients
391
345