@markusylisiurunen/tau 0.3.31 → 0.3.33
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 +9 -14
- package/dist/core/agent/agent_runtime.js +1505 -0
- package/dist/core/agent/agent_runtime.js.map +1 -0
- package/dist/core/agent/events.js +2 -0
- package/dist/core/agent/events.js.map +1 -0
- package/dist/core/auth/auth_manager.js.map +1 -1
- package/dist/core/auth/auth_storage.js +1 -4
- package/dist/core/auth/auth_storage.js.map +1 -1
- package/dist/core/auth/credential_store.js.map +1 -1
- package/dist/core/commands/registry.js +0 -42
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/content_loader.js +3 -1
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/diff_review/bridge.js.map +1 -1
- package/dist/core/diff_review/snapshot.js.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/install/cli.js.map +1 -1
- package/dist/core/models/catalog.js +7 -1
- package/dist/core/models/catalog.js.map +1 -1
- package/dist/core/models/tau_extensions.js.map +1 -1
- package/dist/core/models/tau_model_overrides.js +10 -0
- package/dist/core/models/tau_model_overrides.js.map +1 -0
- package/dist/core/modes/index.js.map +1 -1
- package/dist/core/modes/websocket_server.js.map +1 -1
- package/dist/core/nook/cli.js.map +1 -1
- package/dist/core/nook/client.js +57 -10
- package/dist/core/nook/client.js.map +1 -1
- package/dist/core/nook/deploy.js +24 -7
- package/dist/core/nook/deploy.js.map +1 -1
- package/dist/core/nook/setup.js.map +1 -1
- package/dist/core/personas.js +2 -1
- package/dist/core/personas.js.map +1 -1
- package/dist/core/runtime/agent_model.js +50 -0
- package/dist/core/runtime/agent_model.js.map +1 -0
- package/dist/core/runtime/chat_runtime.js +173 -63
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/runtime/model_executor.js +2 -0
- package/dist/core/runtime/model_executor.js.map +1 -0
- package/dist/core/runtime/model_sampler.js +21 -0
- package/dist/core/runtime/model_sampler.js.map +1 -0
- package/dist/core/session/compaction.js +1 -1
- package/dist/core/session/compaction.js.map +1 -1
- package/dist/core/session/direct_bash.js.map +1 -1
- package/dist/core/session/message_accumulator.js +3 -5
- package/dist/core/session/message_accumulator.js.map +1 -1
- package/dist/core/session/runner.js +197 -98
- package/dist/core/session/runner.js.map +1 -1
- package/dist/core/static/code_mode/nook/documentation.md +214 -0
- package/dist/core/static/code_mode/nook/sandbox_runner.mjs +144 -0
- package/dist/core/static/index.js.map +1 -1
- package/dist/core/subagents/agent_supervisor.js +337 -0
- package/dist/core/subagents/agent_supervisor.js.map +1 -0
- package/dist/core/telegram/adapter.js +2 -5
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/telegram/cli.js.map +1 -1
- package/dist/core/telegram/session_manager.js.map +1 -1
- package/dist/core/tool/cli.js.map +1 -1
- package/dist/core/tool/pdf_unpack.js.map +1 -1
- package/dist/core/tools/activity.js +2 -0
- package/dist/core/tools/activity.js.map +1 -0
- package/dist/core/tools/bash.js +64 -67
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/catalog.js +46 -24
- package/dist/core/tools/catalog.js.map +1 -1
- package/dist/core/tools/code_mode.js +65 -58
- package/dist/core/tools/code_mode.js.map +1 -1
- package/dist/core/tools/code_mode_worker.js +182 -0
- package/dist/core/tools/code_mode_worker.js.map +1 -0
- package/dist/core/tools/edit.js +11 -12
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/nook.js +234 -217
- package/dist/core/tools/nook.js.map +1 -1
- package/dist/core/tools/registry.js +27 -13
- package/dist/core/tools/registry.js.map +1 -1
- package/dist/core/tools/send_input_to_agent.js +75 -90
- package/dist/core/tools/send_input_to_agent.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +95 -100
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/tools/terminate_agent.js +75 -82
- package/dist/core/tools/terminate_agent.js.map +1 -1
- package/dist/core/tools/view_image.js +11 -16
- package/dist/core/tools/view_image.js.map +1 -1
- package/dist/core/tools/wait_for_agents.js +61 -68
- package/dist/core/tools/wait_for_agents.js.map +1 -1
- package/dist/core/tools/web.js +10 -147
- package/dist/core/tools/web.js.map +1 -1
- package/dist/core/tools/write.js +10 -11
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/usage/cli.js.map +1 -1
- package/dist/core/usage/logs.js.map +1 -1
- package/dist/core/utils/model_stream.js.map +1 -1
- package/dist/core/utils/project_files.js.map +1 -1
- package/dist/core/utils/spawn_capture.js.map +1 -1
- package/dist/core/utils/subagent_utils.js.map +1 -1
- package/dist/core/utils/tool_preview.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-html-D8c6NJtn.js → angular-html-DbgxQryr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-CKOHcqki.js → angular-ts-Dzjq8SvI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-CQNGWx_V.js → apl-6AmEMJr-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-DtaLiRs1.js → astro-BM8EbfIg.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-8lF6vUn0.js → blade-DiKMnN3e.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-C4UbPC2L.js → c-DMT5X-u9.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-B-SqiS-l.js → cobol-CACNMc1O.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-Dd1E2KHP.js → coffee-D_WUFE0g.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-fmh9U4o8.js → cpp-BcU9r9kv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-ZMQ-EyMz.js → crystal-wh93mtUe.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-3Sj4Fmhw.js → css-CCfuUqEr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge-CwGnyfEm.js → edge-DP-spcJf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-B4YFjqQ-.js → elixir-BXBkaEtJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-DmUdvg9q.js → elm-BXr8OwKP.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-CMpzjtLy.js → erb-Cu5Zacs_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-EqdynY_f.js → git-rebase-DO8LWld4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-C04Hkqrn.js → glimmer-js-Bh-OAIDW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-BYuV-E66.js → glimmer-ts-DI9lHU4q.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-Dw8Wzaba.js → glsl--zoY4RCO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-CKOWRasR.js → graphql-C8h2T_SC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-DSoYuKAw.js → hack-DAsjGmmw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-CW2clvKn.js → haml-C2BBBsDW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-Dt42oUMG.js → handlebars-cZMztphK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-BssM8xm3.js → html-BtccomkJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-7ty0Z2kF.js → html-derivative-qjeUe52-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-CzGxCb-E.js → http-Dv8OQO33.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-DMjbA1F9.js → hurl-B6Fnr2ae.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-U7G4V3LV.js +1579 -0
- package/dist/diff_tool/app/dist/assets/{java-BVtLVPoR.js → java-BuadWMcp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-CmzoS6sL.js → javascript-BIKxmHeL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-MpkGgATF.js → jinja-Cm_guvgu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-BJkiJV2g.js → jison-Sst29gJb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-ByAo1NYt.js → json-Bg6l2vym.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-DNzVmx9w.js → jsx-BiREAxkr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-rksgfDyz.js → julia-DAhrWFzr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-Bf6HaeeV.js → just-xBwbf5aT.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-Cql66cfm.js → latex-Bydg2zYo.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-wULyfiX7.js → liquid-BTsCzVvF.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-B1VfQC3R.js → lua-BJt9x0JP.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-D8Hd5-bx.js → marko-CWdJkbvC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-DmQ944Ag.js → mdc-B6ddHTKx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-BDob-g0F.js → nginx-BwS0G4IK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-Det1uggZ.js → nim-B2VFbcs9.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-Dcgc5L27.js → perl-BTeqR-l8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-BjwNWaG2.js → php-Crua7nbA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-BNSHQAJG.js → pug-CUlgPjMU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-5kU4d63S.js → qml-DI0IjNUw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-T1WpUQOu.js → r-DRexFFDh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-Dp-yzXAB.js → razor-DrkKtFm5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-CIsu-B9m.js → regexp-DRmxJil7.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-ro17CyW2.js → rst-DiRke36z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-DU34BtJN.js → ruby-t7r9jzAg.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-DvM2ogJU.js → sas-CR7Z4kg-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-lF64kkIV.js → scss--CnPWaDv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-WmDXBLCa.js → shellscript-Bz7H5174.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession--GggGr4o.js → shellsession-mlKnHJfN.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-CxEGzs-_.js → soy-CKu9y9G1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-D8qrGuIn.js → sql-DcvKi3Jj.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-5W1sjsQI.js → stata-Yo25QZyV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-DprXW366.js → surrealql-CUddZ4Qk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-CzjcC8Mf.js → svelte-BIhEVbnP.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-BOYl0ITc.js → templ-D6FrV4mZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-fc_nK7Hm.js → tex-BOTYELrL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-q7RBsUYS.js → ts-tags-Kqn1PP6m.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-4vmj3sX4.js → tsx-L3TEJWGL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-67g55beP.js → twig-BpzmhnWz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-Bx4zhx0M.js → typescript-Dvc5RX4H.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-G4plfR7G.js → vue-X1uI3I2A.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-BiigD-BR.js → vue-html-BMpHEoeQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-Cbdk3EZl.js → vue-vine-DnTGaA4r.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-B3vUkid0.js → xml-QlPQXP0d.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-ClW1O00E.js → xsl-JpRU16Li.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-DBUv6oV4.js → yaml-Djukn3_s.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/diff_tool/http_server.js.map +1 -1
- package/dist/diff_tool/index.js.map +1 -1
- package/dist/diff_tool/protocol_client.js.map +1 -1
- package/dist/diff_tool/review_state.js.map +1 -1
- package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
- package/dist/execution/execution_environment.js.map +1 -1
- package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
- package/dist/execution/tool_backend_execution_environment.js +1 -7
- package/dist/execution/tool_backend_execution_environment.js.map +1 -1
- package/dist/host/client_tool_broker.js +26 -20
- package/dist/host/client_tool_broker.js.map +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js +104 -167
- package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
- package/dist/host/local_session_host.js +313 -197
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/host/session_host.js.map +1 -1
- package/dist/host/session_protocol_handler.js +121 -101
- package/dist/host/session_protocol_handler.js.map +1 -1
- package/dist/main.js +10 -2
- package/dist/main.js.map +1 -1
- package/dist/nook/README.md +1 -1
- package/dist/protocol/index.d.ts +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/session_protocol.d.ts +19 -21
- package/dist/protocol/session_protocol.js +150 -56
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/client.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/session.js +4 -21
- package/dist/sdk/session.js.map +1 -1
- package/dist/sdk/types.d.ts +2 -7
- package/dist/store/file_session_store.js +13 -9
- package/dist/store/file_session_store.js.map +1 -1
- package/dist/store/memory_session_store.js.map +1 -1
- package/dist/store/session_snapshot_migrations.js +133 -0
- package/dist/store/session_snapshot_migrations.js.map +1 -0
- package/dist/store/session_store.js.map +1 -1
- package/dist/transport/session_protocol_transport_helpers.js.map +1 -1
- package/dist/tui/chat_controller/command_hints.js +0 -6
- package/dist/tui/chat_controller/command_hints.js.map +1 -1
- package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
- package/dist/tui/chat_view.js +19 -12
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/session_chat_app.js +0 -8
- package/dist/tui/session_chat_app.js.map +1 -1
- package/dist/tui/session_chat_controller.js +94 -115
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/terminal.js.map +1 -1
- package/dist/tui/tool_ui_router.js +12 -226
- package/dist/tui/tool_ui_router.js.map +1 -1
- package/dist/tui/ui/bash_execution.js +3 -3
- package/dist/tui/ui/bash_execution.js.map +1 -1
- package/dist/tui/ui/chat_message_model.js +2 -2
- package/dist/tui/ui/chat_message_model.js.map +1 -1
- package/dist/tui/ui/components/dynamic_border.js.map +1 -1
- package/dist/tui/ui/components/editor.js.map +1 -1
- package/dist/tui/ui/components/header_box.js.map +1 -1
- package/dist/tui/ui/components/header_line.js.map +1 -1
- package/dist/tui/ui/components/one_line_segments.js.map +1 -1
- package/dist/tui/ui/components/padded_container.js.map +1 -1
- package/dist/tui/ui/footer.js.map +1 -1
- package/dist/tui/ui/pending_messages.js.map +1 -1
- package/dist/tui/ui/session_divider.js.map +1 -1
- package/dist/tui/ui/slash_autocomplete.js.map +1 -1
- package/dist/tui/ui/subagent_editor_pane.js.map +1 -1
- package/dist/tui/ui/subagent_panel.js +39 -2
- package/dist/tui/ui/subagent_panel.js.map +1 -1
- package/dist/tui/ui/theme/theme.js.map +1 -1
- package/dist/tui/ui/tool_ui_model.js +2 -0
- package/dist/tui/ui/tool_ui_model.js.map +1 -0
- package/dist/tui/ui/tool_ui_registry.js +256 -31
- package/dist/tui/ui/tool_ui_registry.js.map +1 -1
- package/package.json +10 -10
- package/dist/core/events/types.js +0 -2
- package/dist/core/events/types.js.map +0 -1
- package/dist/core/modes/mode_adapter.js +0 -2
- package/dist/core/modes/mode_adapter.js.map +0 -1
- package/dist/core/runtime/conversation_turn_runtime.js +0 -88
- package/dist/core/runtime/conversation_turn_runtime.js.map +0 -1
- package/dist/core/session/core_session.js +0 -86
- package/dist/core/session/core_session.js.map +0 -1
- package/dist/core/session/pruning.js +0 -587
- package/dist/core/session/pruning.js.map +0 -1
- package/dist/core/session/session_engine.js +0 -1246
- package/dist/core/session/session_engine.js.map +0 -1
- package/dist/core/subagents/control_plane.js +0 -339
- package/dist/core/subagents/control_plane.js.map +0 -1
- package/dist/core/subagents/subagent_engine.js +0 -258
- package/dist/core/subagents/subagent_engine.js.map +0 -1
- package/dist/diff_tool/app/dist/assets/index-BiNqgTgO.js +0 -1579
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
The one-shot JavaScript runtime provides these globals:
|
|
2
|
+
|
|
3
|
+
- `nook.skill()`: load the configured Nook deployment's version-matched app-authoring skill.
|
|
4
|
+
- `nook.sites`: list, copy, deploy, and delete sites.
|
|
5
|
+
- `nook.templates`: list, copy, save, and delete editable templates.
|
|
6
|
+
- `nook.kv`: get, put, import, export, delete, and list per-site JSON KV entries.
|
|
7
|
+
- `docs`: this agent-facing SDK document.
|
|
8
|
+
- `console`: program output. Only text written through console methods is returned; return values are ignored.
|
|
9
|
+
|
|
10
|
+
Top-level `await` is supported. Calls may run concurrently with `Promise.all`.
|
|
11
|
+
|
|
12
|
+
Use absolute file system paths. Generated code has no direct filesystem, process, environment, network, credential, import, timer, or `fetch` access. Nook methods are the only platform capability.
|
|
13
|
+
|
|
14
|
+
## App-authoring guidance
|
|
15
|
+
|
|
16
|
+
`docs` describes this agent-facing management SDK. `nook.skill()` is separate and returns the configured Nook deployment's app-authoring guide, including its browser SDK and KV contract.
|
|
17
|
+
|
|
18
|
+
When authoring or modifying a Nook app, print the skill before writing the app:
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
console.log(await nook.skill());
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Sites
|
|
25
|
+
|
|
26
|
+
### `nook.sites.list()`
|
|
27
|
+
|
|
28
|
+
Return the configured target's sites as an array.
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
const sites = await nook.sites.list();
|
|
32
|
+
for (const site of sites) {
|
|
33
|
+
console.log(`${site.slug}: ${site.url} (${site.visibility ?? "not deployed"})`);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Each site may contain:
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
{
|
|
41
|
+
slug: string,
|
|
42
|
+
url: string,
|
|
43
|
+
createdAt?: string,
|
|
44
|
+
updatedAt?: string,
|
|
45
|
+
latestDeploymentId?: string,
|
|
46
|
+
visibility?: "private" | "public",
|
|
47
|
+
kv?: {
|
|
48
|
+
keyCount: number,
|
|
49
|
+
bytesUsed: number,
|
|
50
|
+
maxKeys: number,
|
|
51
|
+
maxBytes: number,
|
|
52
|
+
},
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### `nook.sites.copy(site, directory)`
|
|
57
|
+
|
|
58
|
+
Copy the active deployment into an existing empty directory. The site slug must be a valid non-reserved Nook slug. Files are downloaded and verified against the deployment manifest before any file is written.
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
const copied = await nook.sites.copy("demo", "/tmp/demo-source");
|
|
62
|
+
console.log(`copied ${copied.fileCount} files to ${copied.directory}`);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The result contains `site`, `directory`, `deploymentId`, `visibility`, `fileCount`, and `byteCount`.
|
|
66
|
+
|
|
67
|
+
### `nook.sites.deploy(site, directory, options)`
|
|
68
|
+
|
|
69
|
+
Deploy a static directory as the site's new active deployment. `options.visibility` is required and must be `"private"` or `"public"`; visibility never defaults implicitly. The directory must contain a root `index.html` and satisfy Nook's path, file-count, and size limits.
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
const deployed = await nook.sites.deploy("demo", "/tmp/demo-dist", {
|
|
73
|
+
visibility: "private",
|
|
74
|
+
});
|
|
75
|
+
console.log(`deployed ${deployed.url} as ${deployed.visibility}`);
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The result contains `site`, `url`, `visibility`, `deploymentId`, `fileCount`, and `byteCount`.
|
|
79
|
+
|
|
80
|
+
Build app artifacts before deploying. When creating a new app, put the complete working tree under a fresh temporary directory rather than scattering files into the project, then deploy its built static output directory.
|
|
81
|
+
|
|
82
|
+
### `nook.sites.delete(site)`
|
|
83
|
+
|
|
84
|
+
Delete a site and its managed state.
|
|
85
|
+
|
|
86
|
+
```js
|
|
87
|
+
const deleted = await nook.sites.delete("demo");
|
|
88
|
+
console.log(`deleted ${deleted.site}: ${deleted.deleted}`);
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Templates
|
|
92
|
+
|
|
93
|
+
### `nook.templates.list()`
|
|
94
|
+
|
|
95
|
+
Return templates as an array.
|
|
96
|
+
|
|
97
|
+
```js
|
|
98
|
+
const templates = await nook.templates.list();
|
|
99
|
+
for (const template of templates) {
|
|
100
|
+
console.log(`${template.name}: ${template.fileCount} files, revision ${template.revisionId}`);
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Each template contains `name`, `revisionId`, `createdAt`, `updatedAt`, `fileCount`, and `byteCount`.
|
|
105
|
+
|
|
106
|
+
### `nook.templates.copy(name, directory)`
|
|
107
|
+
|
|
108
|
+
Copy a verified template revision into an existing empty directory.
|
|
109
|
+
|
|
110
|
+
```js
|
|
111
|
+
const copied = await nook.templates.copy("starter", "/tmp/new-app");
|
|
112
|
+
console.log(`copied ${copied.name} to ${copied.directory}`);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The result contains the template summary fields plus `directory`.
|
|
116
|
+
|
|
117
|
+
### `nook.templates.save(name, directory)`
|
|
118
|
+
|
|
119
|
+
Save a directory as the template's new active revision. Templates use the same path, file-count, and size validation as deployments but do not require `index.html`.
|
|
120
|
+
|
|
121
|
+
```js
|
|
122
|
+
const saved = await nook.templates.save("starter", "/tmp/app-source");
|
|
123
|
+
console.log(`saved ${saved.name} revision ${saved.revisionId}`);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### `nook.templates.delete(name)`
|
|
127
|
+
|
|
128
|
+
Delete a template.
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
const deleted = await nook.templates.delete("starter");
|
|
132
|
+
console.log(`deleted ${deleted.template}: ${deleted.deleted}`);
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Per-site KV
|
|
136
|
+
|
|
137
|
+
KV values must be JSON-serializable. Keys must contain 1-256 characters.
|
|
138
|
+
|
|
139
|
+
### `nook.kv.get(site, key)`
|
|
140
|
+
|
|
141
|
+
Return the stored JSON value directly.
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
const settings = await nook.kv.get("demo", "settings");
|
|
145
|
+
console.log(`theme: ${settings.theme}`);
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### `nook.kv.getToFile(site, key, file)`
|
|
149
|
+
|
|
150
|
+
Write the stored JSON value to a file in the session execution environment. Parent directories are created as needed. Return `{ site, key, file, bytes }`.
|
|
151
|
+
|
|
152
|
+
```js
|
|
153
|
+
const saved = await nook.kv.getToFile("demo", "settings", "/tmp/settings.json");
|
|
154
|
+
console.log(`wrote ${saved.bytes} bytes to ${saved.file}`);
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### `nook.kv.put(site, key, value)`
|
|
158
|
+
|
|
159
|
+
Store a JSON value and return `{ site, key }`.
|
|
160
|
+
|
|
161
|
+
```js
|
|
162
|
+
const stored = await nook.kv.put("demo", "settings", { theme: "dark" });
|
|
163
|
+
console.log(`stored ${stored.site}/${stored.key}`);
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### `nook.kv.putFromFile(site, key, file)`
|
|
167
|
+
|
|
168
|
+
Parse a JSON file from the session execution environment, store its value, and return `{ site, key, file }`. Files are limited to the 64 KiB maximum size of a KV value.
|
|
169
|
+
|
|
170
|
+
```js
|
|
171
|
+
const stored = await nook.kv.putFromFile("demo", "settings", "/tmp/settings.json");
|
|
172
|
+
console.log(`stored ${stored.site}/${stored.key} from ${stored.file}`);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### `nook.kv.delete(site, key)`
|
|
176
|
+
|
|
177
|
+
Delete a value and return `{ site, key, deleted }`.
|
|
178
|
+
|
|
179
|
+
```js
|
|
180
|
+
const deleted = await nook.kv.delete("demo", "settings");
|
|
181
|
+
console.log(`deleted: ${deleted.deleted}`);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### `nook.kv.list(site, options?)`
|
|
185
|
+
|
|
186
|
+
Return matching key metadata as an array. `options.prefix` optionally filters keys.
|
|
187
|
+
|
|
188
|
+
```js
|
|
189
|
+
const keys = await nook.kv.list("demo", { prefix: "todos/" });
|
|
190
|
+
for (const entry of keys) {
|
|
191
|
+
console.log(`${entry.key}: ${entry.sizeBytes} bytes, updated ${entry.updatedAt}`);
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Each entry contains `key`, `sizeBytes`, and `updatedAt`.
|
|
196
|
+
|
|
197
|
+
## Common patterns
|
|
198
|
+
|
|
199
|
+
List sites and templates concurrently:
|
|
200
|
+
|
|
201
|
+
```js
|
|
202
|
+
const [sites, templates] = await Promise.all([
|
|
203
|
+
nook.sites.list(),
|
|
204
|
+
nook.templates.list(),
|
|
205
|
+
]);
|
|
206
|
+
console.log(`sites: ${sites.map((site) => site.slug).join(", ") || "none"}`);
|
|
207
|
+
console.log(`templates: ${templates.map((template) => template.name).join(", ") || "none"}`);
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Copy, inspect or modify with filesystem tools in later calls, build with Bash, then deploy the built directory in a later Nook call. Do not deploy an editable source directory unless it is already the complete static artifact.
|
|
211
|
+
|
|
212
|
+
## Output guidance
|
|
213
|
+
|
|
214
|
+
Print only information needed for the task. Prefer concise labeled text over serialized response objects. Select relevant fields when possible; when all fields matter, flatten and label them compactly. Emit JSON only when the user explicitly requests JSON or another machine-readable result.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { parentPort, workerData } from "node:worker_threads";
|
|
2
|
+
import "ses";
|
|
3
|
+
|
|
4
|
+
if (!parentPort) {
|
|
5
|
+
throw new Error("nook sandbox requires a parent port");
|
|
6
|
+
}
|
|
7
|
+
if (
|
|
8
|
+
typeof workerData !== "object" ||
|
|
9
|
+
workerData === null ||
|
|
10
|
+
typeof workerData.code !== "string" ||
|
|
11
|
+
typeof workerData.docs !== "string"
|
|
12
|
+
) {
|
|
13
|
+
throw new Error("nook sandbox received invalid worker data");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
lockdown();
|
|
17
|
+
|
|
18
|
+
const pending = new Map();
|
|
19
|
+
let nextRequestId = 1;
|
|
20
|
+
|
|
21
|
+
parentPort.on("message", (message) => {
|
|
22
|
+
if (message?.type !== "response" || typeof message.id !== "number") return;
|
|
23
|
+
const request = pending.get(message.id);
|
|
24
|
+
if (!request) return;
|
|
25
|
+
pending.delete(message.id);
|
|
26
|
+
if (message.ok) {
|
|
27
|
+
request.resolve(message.value);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const error = new Error(message.error?.message || "Nook request failed");
|
|
32
|
+
if (message.error?.name) error.name = message.error.name;
|
|
33
|
+
request.reject(error);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
function requestNook(method, argsJson) {
|
|
37
|
+
if (typeof method !== "string" || typeof argsJson !== "string") {
|
|
38
|
+
return Promise.reject(new Error("invalid nook bridge request"));
|
|
39
|
+
}
|
|
40
|
+
const id = nextRequestId++;
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
pending.set(id, { resolve, reject });
|
|
43
|
+
parentPort.postMessage({ type: "request", id, method, argsJson });
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function writeOutput(stream, text) {
|
|
48
|
+
if ((stream !== "stdout" && stream !== "stderr") || typeof text !== "string") {
|
|
49
|
+
throw new Error("invalid console bridge output");
|
|
50
|
+
}
|
|
51
|
+
const output = stream === "stderr" ? process.stderr : process.stdout;
|
|
52
|
+
output.write(text + "\n");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const compartment = new Compartment({
|
|
56
|
+
globals: {
|
|
57
|
+
_requestNook: harden(requestNook),
|
|
58
|
+
_writeOutput: harden(writeOutput),
|
|
59
|
+
docs: workerData.docs,
|
|
60
|
+
},
|
|
61
|
+
__options__: true,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
compartment.evaluate(String.raw`
|
|
65
|
+
(() => {
|
|
66
|
+
const requestNookBridge = _requestNook;
|
|
67
|
+
const writeOutputBridge = _writeOutput;
|
|
68
|
+
delete globalThis._requestNook;
|
|
69
|
+
delete globalThis._writeOutput;
|
|
70
|
+
|
|
71
|
+
function formatOutputValue(value) {
|
|
72
|
+
if (typeof value === "string") return value;
|
|
73
|
+
if (value instanceof Error) return value.stack || value.message;
|
|
74
|
+
try {
|
|
75
|
+
const serialized = JSON.stringify(value);
|
|
76
|
+
if (serialized !== undefined) return serialized;
|
|
77
|
+
} catch {}
|
|
78
|
+
return String(value);
|
|
79
|
+
}
|
|
80
|
+
function writeConsole(stream, values) {
|
|
81
|
+
writeOutputBridge(stream, values.map(formatOutputValue).join(" "));
|
|
82
|
+
}
|
|
83
|
+
Object.defineProperty(globalThis, "console", {
|
|
84
|
+
value: Object.freeze({
|
|
85
|
+
debug: (...values) => writeConsole("stdout", values),
|
|
86
|
+
error: (...values) => writeConsole("stderr", values),
|
|
87
|
+
info: (...values) => writeConsole("stdout", values),
|
|
88
|
+
log: (...values) => writeConsole("stdout", values),
|
|
89
|
+
warn: (...values) => writeConsole("stderr", values),
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
function serializeArguments(args) {
|
|
93
|
+
return JSON.stringify(args, (_key, value) => {
|
|
94
|
+
if (
|
|
95
|
+
value === undefined ||
|
|
96
|
+
typeof value === "function" ||
|
|
97
|
+
typeof value === "symbol" ||
|
|
98
|
+
typeof value === "bigint" ||
|
|
99
|
+
(typeof value === "number" && !Number.isFinite(value))
|
|
100
|
+
) {
|
|
101
|
+
throw new TypeError("Nook arguments must be JSON-serializable values");
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function callNook(method, args) {
|
|
107
|
+
return requestNookBridge(method, serializeArguments(args));
|
|
108
|
+
}
|
|
109
|
+
Object.defineProperty(globalThis, "nook", {
|
|
110
|
+
value: Object.freeze({
|
|
111
|
+
skill: (...args) => callNook("skill", args),
|
|
112
|
+
sites: Object.freeze({
|
|
113
|
+
list: (...args) => callNook("sites.list", args),
|
|
114
|
+
copy: (...args) => callNook("sites.copy", args),
|
|
115
|
+
deploy: (...args) => callNook("sites.deploy", args),
|
|
116
|
+
delete: (...args) => callNook("sites.delete", args),
|
|
117
|
+
}),
|
|
118
|
+
templates: Object.freeze({
|
|
119
|
+
list: (...args) => callNook("templates.list", args),
|
|
120
|
+
copy: (...args) => callNook("templates.copy", args),
|
|
121
|
+
save: (...args) => callNook("templates.save", args),
|
|
122
|
+
delete: (...args) => callNook("templates.delete", args),
|
|
123
|
+
}),
|
|
124
|
+
kv: Object.freeze({
|
|
125
|
+
get: (...args) => callNook("kv.get", args),
|
|
126
|
+
getToFile: (...args) => callNook("kv.getToFile", args),
|
|
127
|
+
put: (...args) => callNook("kv.put", args),
|
|
128
|
+
putFromFile: (...args) => callNook("kv.putFromFile", args),
|
|
129
|
+
delete: (...args) => callNook("kv.delete", args),
|
|
130
|
+
list: (...args) => callNook("kv.list", args),
|
|
131
|
+
}),
|
|
132
|
+
}),
|
|
133
|
+
});
|
|
134
|
+
})();
|
|
135
|
+
`);
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
await compartment.evaluate("(async () => {\n" + workerData.code + "\n})()");
|
|
139
|
+
} catch (error) {
|
|
140
|
+
writeOutput("stderr", error instanceof Error ? error.stack || error.message : String(error));
|
|
141
|
+
process.exitCode = 1;
|
|
142
|
+
} finally {
|
|
143
|
+
parentPort.close();
|
|
144
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/static/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,4BAA4B,GAAG,0BAA0B,CAAC;AAEhE,MAAM,mBAAmB,GAAG;IAC1B,0BAA0B,EAAE,uCAAuC;CAC3D,CAAC;AAIX,MAAM,UAAU,mBAAmB,CAAC,QAAwB;IAC1D,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/static/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,4BAA4B,GAAG,0BAA0B,CAAC;AAEhE,MAAM,mBAAmB,GAAG;IAC1B,0BAA0B,EAAE,uCAAuC;CAC3D,CAAC;AAIX,MAAM,UAAU,mBAAmB,CAAC,QAAwB;IAC1D,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,OAAO,YAAY,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,MAA8B;IAC3E,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;SACrF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxB,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC3D,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAEjE,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SAC5C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC9B,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC;SAClE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC9B,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yCAAyC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,+BAA+B,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,CAAC;AAE5F,MAAM,UAAU,gCAAgC;IAC9C,OAAO,+BAA+B,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,IAElD;IACC,OAAO,mBAAmB,CAAC,+BAA+B,EAAE;QAC1D,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;KAC1D,CAAC,CAAC;AACL,CAAC"}
|