@anhlp/alp-paseo 0.0.0-beta.2 → 0.0.1-beta.4

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 (106) hide show
  1. package/NOTICE +9 -6
  2. package/README.md +86 -26
  3. package/client/library.tsx +22 -6
  4. package/package.json +21 -16
  5. package/paseo-plugin.json +1 -1
  6. package/server/dist/THIRD-PARTY-NOTICES.txt +2 -2
  7. package/server/dist/alpd.js +10897 -3514
  8. package/server/dist/compat.js +76 -0
  9. package/server/dist/index.js +23033 -6235
  10. package/server/dist/library.js +148 -42
  11. package/server/dist/main.js +12316 -2191
  12. package/server/dist/mapping.js +96 -44
  13. package/server/dist/panel/library.js +148 -42
  14. package/server/dist/panel/mapping.js +96 -44
  15. package/server/dist/panel/tasks.js +32 -2
  16. package/server/dist/panel/usage.js +38 -5
  17. package/server/dist/paseo/agents.js +9020 -335
  18. package/server/dist/paseo/checkout.js +111 -208
  19. package/server/dist/paseo/create-receipts.js +281 -0
  20. package/server/dist/paseo/files.js +137 -18
  21. package/server/dist/paseo/gateway.js +42 -6
  22. package/server/dist/paseo/git.js +375 -0
  23. package/server/dist/paseo/index.js +11737 -1821
  24. package/server/dist/paseo/plugins.js +173 -67
  25. package/server/dist/paseo/prompt-content.js +43 -0
  26. package/server/dist/paseo/providers.js +44 -3
  27. package/server/dist/paseo/quiet.js +1 -5
  28. package/server/dist/paseo/relay.js +3 -2
  29. package/server/dist/paseo/terminals.js +23618 -0
  30. package/server/dist/paseo/timeline-store.js +2 -2
  31. package/server/dist/paseo/uploads.js +22303 -0
  32. package/server/dist/paseo/workspaces.js +876 -192
  33. package/server/dist/provider-core.js +457 -9
  34. package/server/dist/provider-prompt.js +220 -0
  35. package/server/dist/provider.js +10495 -3016
  36. package/server/dist/remote/index.js +460 -19
  37. package/server/dist/remote/link.js +32 -2
  38. package/server/dist/remote/panels.js +51 -6
  39. package/server/dist/remote/provider.js +1219 -793
  40. package/server/dist/session-usage.js +15 -0
  41. package/server/dist/tasks.js +32 -2
  42. package/server/dist/upload-names.js +30 -0
  43. package/server/dist/uploads.js +84 -0
  44. package/server/dist/usage.js +38 -5
  45. package/server/dist/web.js +59 -102
  46. package/shared/library.ts +2 -0
  47. package/server/dist/web-app/NOTICE.txt +0 -18
  48. package/server/dist/web-app/THIRD-PARTY-NOTICES.txt +0 -5483
  49. package/server/dist/web-app/THIRD-PARTY-NOTICES.txt.br +0 -0
  50. package/server/dist/web-app/THIRD-PARTY-NOTICES.txt.gz +0 -0
  51. package/server/dist/web-app/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +0 -1
  52. package/server/dist/web-app/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
  53. package/server/dist/web-app/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
  54. package/server/dist/web-app/_expo/static/js/web/desktop-attachment-bridge-6af9b585f6d25fdb5938533f7aa5a167.js +0 -2
  55. package/server/dist/web-app/_expo/static/js/web/desktop-attachment-store-4ae9267243fd80b0b9605252601a21f3.js +0 -2
  56. package/server/dist/web-app/_expo/static/js/web/desktop-attachment-store-4ae9267243fd80b0b9605252601a21f3.js.br +0 -0
  57. package/server/dist/web-app/_expo/static/js/web/desktop-attachment-store-4ae9267243fd80b0b9605252601a21f3.js.gz +0 -0
  58. package/server/dist/web-app/_expo/static/js/web/index-c01174e6924afca25f226efae0b2a3ae.js +0 -18742
  59. package/server/dist/web-app/_expo/static/js/web/index-c01174e6924afca25f226efae0b2a3ae.js.br +0 -0
  60. package/server/dist/web-app/_expo/static/js/web/index-c01174e6924afca25f226efae0b2a3ae.js.gz +0 -0
  61. package/server/dist/web-app/_expo/static/js/web/indexeddb-attachment-store-5c75739712558f24273a6497f02f315b.js +0 -2
  62. package/server/dist/web-app/_expo/static/js/web/indexeddb-attachment-store-5c75739712558f24273a6497f02f315b.js.br +0 -0
  63. package/server/dist/web-app/_expo/static/js/web/indexeddb-attachment-store-5c75739712558f24273a6497f02f315b.js.gz +0 -0
  64. package/server/dist/web-app/_expo/static/js/web/native-file-attachment-store-e614dc34238b4482a273236cd9c323b6.js +0 -4
  65. package/server/dist/web-app/_expo/static/js/web/native-file-attachment-store-e614dc34238b4482a273236cd9c323b6.js.br +0 -0
  66. package/server/dist/web-app/_expo/static/js/web/native-file-attachment-store-e614dc34238b4482a273236cd9c323b6.js.gz +0 -0
  67. package/server/dist/web-app/alp-token.js +0 -12
  68. package/server/dist/web-app/alp-web-app.json +0 -26
  69. package/server/dist/web-app/apple-touch-icon.png +0 -0
  70. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  71. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  72. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  73. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  74. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  75. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  76. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  77. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  78. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  79. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  80. package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  81. package/server/dist/web-app/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  82. package/server/dist/web-app/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  83. package/server/dist/web-app/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  84. package/server/dist/web-app/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  85. package/server/dist/web-app/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  86. package/server/dist/web-app/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  87. package/server/dist/web-app/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  88. package/server/dist/web-app/assets/assets/images/favicon-dark-attention.7b1f41432deecb841fbf71fe6fe81258.png +0 -0
  89. package/server/dist/web-app/assets/assets/images/favicon-dark-running.a4ee272abf692e713606fbcffb2eaadb.png +0 -0
  90. package/server/dist/web-app/assets/assets/images/favicon-dark.e781e045425270913385c8e26c706dc7.png +0 -0
  91. package/server/dist/web-app/assets/assets/images/favicon-light-attention.7b1f41432deecb841fbf71fe6fe81258.png +0 -0
  92. package/server/dist/web-app/assets/assets/images/favicon-light-running.a4ee272abf692e713606fbcffb2eaadb.png +0 -0
  93. package/server/dist/web-app/assets/assets/images/favicon-light.e781e045425270913385c8e26c706dc7.png +0 -0
  94. package/server/dist/web-app/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
  95. package/server/dist/web-app/favicon.ico +0 -0
  96. package/server/dist/web-app/favicon.ico.br +0 -0
  97. package/server/dist/web-app/favicon.ico.gz +0 -0
  98. package/server/dist/web-app/index.html +0 -101
  99. package/server/dist/web-app/index.html.br +0 -0
  100. package/server/dist/web-app/index.html.gz +0 -0
  101. package/server/dist/web-app/manifest.json +0 -31
  102. package/server/dist/web-app/metadata.json +0 -1
  103. package/server/dist/web-app/pwa-icon-192.png +0 -0
  104. package/server/dist/web-app/pwa-icon-512.png +0 -0
  105. package/server/dist/web-app/robots.txt +0 -2
  106. /package/{server/dist/web-app/LICENSE.paseo.txt → LICENSE.paseo.txt} +0 -0
package/NOTICE CHANGED
@@ -12,15 +12,11 @@ This package includes software from Paseo (https://github.com/getpaseo/paseo),
12
12
  Copyright (c) 2025-present Mohamed Boudra, licensed under the Apache License,
13
13
  Version 2.0. Third-party components incorporated into Paseo remain licensed
14
14
  under the licenses provided by their respective copyright holders.
15
+ LICENSE.paseo.txt is Paseo's licence as Paseo ships it.
15
16
 
16
- All of it is taken from Paseo at commit
17
+ Except for provider-prompt.ts noted below, the following is taken from Paseo at commit
17
18
  b63a325be3d3ae444fbd38815658cca01ab1288f (0.11.2) and changed for ALP:
18
19
 
19
- * server/dist/web-app: Paseo's web app (packages/app), built with the patches
20
- in ALP's paseo-web/patches. Its NOTICE.txt says what they change,
21
- LICENSE.paseo.txt is Paseo's licence as Paseo ships it, and
22
- THIRD-PARTY-NOTICES.txt reproduces the licences of the third-party
23
- packages bundled into the app.
24
20
  * server/dist: code from Paseo's daemon (packages/server/src/server), each
25
21
  source file in ALP's integrations/paseo/server/paseo saying what changed:
26
22
  - agent/chat-search/index.ts (chat-search.ts)
@@ -32,3 +28,10 @@ b63a325be3d3ae444fbd38815658cca01ab1288f (0.11.2) and changed for ALP:
32
28
  - utils/diff-highlighter.ts, its unified-diff parser (checkout.ts)
33
29
  * server/dist also bundles Paseo's @getpaseo/protocol and @getpaseo/relay;
34
30
  see server/dist/THIRD-PARTY-NOTICES.txt.
31
+
32
+ * server/provider-prompt.ts adapts renderPromptAttachmentAsText from
33
+ packages/server/src/server/agent/prompt-attachments.ts at
34
+ cafe4b01c8522ff39560241c5deb01427dc8dc5b (0.12.0), identical at
35
+ ab10a6694ccf068959d1a6b67b6c915e21a9fe91 (0.11.1). It renders textual
36
+ context as user text, preserves images and uploads for their dedicated paths,
37
+ and applies the protocol's GitHub default when forge is omitted.
package/README.md CHANGED
@@ -34,24 +34,43 @@ as a full screen from the chat:
34
34
  lists the open tasks. Tapping one opens it; **All tasks** opens the board.
35
35
  - `/alp-tasks` opens the board, and `/alp-tasks <id>` opens that task.
36
36
 
37
- ## Host settings on the ALP web app
38
-
39
- Settings → Host exposes **Templates**, **Agents**, **Skills**, **Hooks**, and
40
- **MCP servers** directly. Templates opens the Phở/Cafe team editor for models,
41
- members, delegation, supervisor, and house rules. Changes are saved in the selected
42
- host's ALP library; saving a built-in entry creates an override. The ALP plugin
43
- settings screen and the ALP project panel remain available for library management
44
- and project overrides.
37
+ ## Host settings
38
+
39
+ The ALP plugin settings screen and the ALP project panel manage the host's ALP
40
+ library (teams, agents, skills, hooks, MCP servers) and project overrides; saving a
41
+ built-in entry creates an override. ALP's patched build of Paseo's web app, which
42
+ also showed these under Settings → Host, was removed (t-55ce.3). ALP's own web app
43
+ (`alp web`) shows the library under Settings, within the limits in
44
+ [web.md](https://github.com/phucanh08/alp/blob/main/docs/alp/web.md).
45
+
46
+ ## Managed worktree removal through the web facade
47
+
48
+ The facade accepts Paseo's native `paseo_worktree_archive_request`. Set
49
+ `scope: "worktree"` to remove an ALP-managed user worktree, targeting its
50
+ `workspaceId` or absolute `worktreePath` (or `repoRoot` and `branchName`). If
51
+ multiple target fields are supplied they must agree. A workspace archived earlier
52
+ can still be targeted explicitly. Removal retains the Git branch.
53
+
54
+ The daemon's `workspace.worktree.remove` is the sole deletion authority. It checks
55
+ the creator, approved mapping, checkout identity, dirty files, runtime admission,
56
+ leases, assignments and saved session history. A refusal leaves workspace metadata
57
+ and checkout files intact; sessions are never archived to bypass these checks.
58
+ External checkouts cannot be deleted. Older daemons return an upgrade error.
59
+
60
+ Omitting `scope`, choosing `scope: "workspace"`, or using
61
+ `archive_workspace_request` only archives the workspace. As in supported Paseo
62
+ 0.11.1–0.12.x, the legacy `deleteWorktreeFromDisk` flag does not request deletion.
63
+ This follows [Paseo's native archive contract](https://github.com/getpaseo/paseo/blob/b63a325be3d3ae444fbd38815658cca01ab1288f/packages/server/src/server/worktree/commands.ts#L121).
45
64
 
46
65
  ## Install
47
66
 
48
- This is the beta `0.0.0-beta.2` (until it is on npm, `@beta` installs `0.0.0-beta.1`; check with
67
+ This is the beta `0.0.1-beta.3` (until it is on npm, `@beta` installs `0.0.0-beta.2`, which Paseo 0.12 refuses; check with
49
68
  `npm view @anhlp/alp-paseo dist-tags`); name it when you install (`@beta`, or
50
- exactly `@0.0.0-beta.2`). See the
69
+ exactly `@0.0.1-beta.3`). See the
51
70
  [release notes](https://github.com/phucanh08/alp/blob/main/docs/alp/beta-release-notes.md) and
52
71
  [install, upgrade and removal steps](https://github.com/phucanh08/alp/blob/main/docs/alp/beta-install.md).
53
72
 
54
- Requires Paseo `>=0.11.1 <0.12.0`, Node.js 22 (22.12 or later) or 24 on Linux or macOS
73
+ Requires Paseo `>=0.11.1 <1.0.0` (the published `0.0.1-beta.3` declares `<0.13.0`, so 0.11.x or 0.12.x), Node.js 22 (22.12 or later) or 24 on Linux or macOS
55
74
  (Windows and Node.js 26 are experimental), and an authenticated native Codex or Claude Code
56
75
  executable on PATH.
57
76
 
@@ -98,6 +117,20 @@ reports that alpd.js was not found, run `alp daemon start` once, or set
98
117
  environment. `ALP_HOME` (default `~/.alp`) selects the daemon's directory and
99
118
  must match between the CLI and Paseo.
100
119
 
120
+ The provider offers images when alpd's connection handshake (or `daemon.hello`
121
+ for an embedded connection) lists `prompt.images`, and Paseo requests them.
122
+ Individual sessions still validate runtime support and image limits. The offer
123
+ is fixed for the provider connection; a replacement backend validates each prompt.
124
+ Missing or failed capability discovery leaves images unavailable.
125
+
126
+ Forge issues and change requests, legacy GitHub attachments, reviews, and text
127
+ context are sent as ordinary user text using Paseo's attachment rendering. Bodies
128
+ and review lines retain their content and order; context metadata grants no system
129
+ authority. Uploaded files continue through alpd's attachment store. Native command prompts
130
+ (`{ type: "command", name, arguments }`) are unsupported: the provider does not
131
+ advertise `prompt.command` and rejects them before waking or contacting a session.
132
+ It does not translate commands into prose.
133
+
101
134
  Closing an agent in Paseo stops watching it; work in progress finishes in
102
135
  alpd. Use interrupt to stop work. You talk with main: when main asks you a
103
136
  question with `alp_ask`, Paseo shows it as a question prompt; your answer, or a
@@ -129,7 +162,7 @@ for existing projects, model selection, permissions, and runtime limitations.
129
162
 
130
163
  ## Remote mode (deferred, not in the beta)
131
164
 
132
- Remote mode is **not part of the beta (`0.0.0-beta.2`)**: it needs `@anhlp/alp-gateway`, which is not
165
+ Remote mode is **not part of the beta (`0.0.1-beta.3`)**: it needs `@anhlp/alp-gateway`, which is not
133
166
  published. The text below describes the code in this repository for development only.
134
167
 
135
168
  To use ALP running on another machine, start the daemon process that loads this plugin with
@@ -151,16 +184,21 @@ npm run test -w @anhlp/alp-paseo
151
184
  npm pack -w @anhlp/alp-paseo
152
185
  ```
153
186
 
154
- `integrations/paseo` owns the plugin client, server, shared types and manifest. The build writes the self-contained server bundles (including the integration entry `server/dist/main.js` and `server/dist/alpd.js`) and the web app to `server/dist`; only the plugin package ships these Paseo artifacts. The npm package is `@anhlp/alp-paseo` (`alp-paseo-plugin` up to 0.10.0); the Paseo plugin ID remains `alp-provider`.
187
+ `integrations/paseo` owns the plugin client, server, shared types and manifest. The build writes the self-contained server bundles (including the integration entry `server/dist/main.js` and `server/dist/alpd.js`) to `server/dist`; only the plugin package ships these Paseo artifacts. It no longer builds or ships Paseo's web app (removed in t-55ce.3); the package ships Paseo's licence as `LICENSE.paseo.txt` for the code it takes from Paseo. The npm package is `@anhlp/alp-paseo` (`alp-paseo-plugin` up to 0.10.0); the Paseo plugin ID remains `alp-provider`.
155
188
 
156
- ## Optional web installation
189
+ <a id="optional-web-installation"></a>
157
190
 
158
- `@anhlp/alp` and the six core packages install without Paseo. To use the web UI:
191
+ ## Optional standalone integration (relay pairing)
192
+
193
+ `@anhlp/alp` and the six core packages install without Paseo. `alp web` no longer needs this
194
+ package: from the release after `0.0.1-beta.3` it runs the CLI's own `alp-web` service
195
+ ([web.md](https://github.com/phucanh08/alp/blob/main/docs/alp/web.md)). This package's standalone
196
+ integration (integration `paseo`) is what pairs Paseo's app on another device through the relay:
159
197
 
160
198
  ```sh
161
199
  npm install -g @anhlp/alp@beta @anhlp/alp-paseo@beta
162
- alp-web-integration --register
163
- alp web --print
200
+ alp-paseo-integration --register
201
+ alp web pair --on # starts the integration, turns the relay on, prints the link and password
164
202
  alp web pair --off
165
203
  ```
166
204
 
@@ -169,17 +207,40 @@ React Native are optional peers that the Paseo app provides, so npm does not ins
169
207
  Do not use `--legacy-peer-deps` for a standalone installation unless you supply the required
170
208
  peers explicitly. The binary is also discoverable on PATH, so registration is optional
171
209
  for a global install. For a local install, run
172
- `./node_modules/.bin/alp-web-integration --register` with the intended `ALP_HOME`.
210
+ `./node_modules/.bin/alp-paseo-integration --register` with the intended `ALP_HOME`.
211
+
212
+ A plugin directory managed by `paseo plugin add npm:…` is not a standalone web
213
+ installation. Paseo installs it without peers and supplies `@getpaseo/plugin` through
214
+ its plugin loader. Running `node <managed-plugin>/server/dist/main.js --register`
215
+ directly bypasses that loader and can fail with `ERR_MODULE_NOT_FOUND` for
216
+ `@getpaseo/plugin`; this invocation from the managed directory is unsupported
217
+ ([#154](https://github.com/phucanh08/alp/issues/154)). Use the normal npm installation
218
+ and `alp-paseo-integration --register` shown above. For a local npm installation with
219
+ required peers, use `./node_modules/.bin/alp-paseo-integration --register` with the
220
+ intended `ALP_HOME`. Registration records the entry path; it does not install missing
221
+ peers or turn a host-managed plugin into a standalone installation.
222
+
173
223
  Adding the plugin to a Paseo host (`npm:` from beta.2; by path in beta.1, see above) remains
174
224
  available independently of this standalone web process.
175
225
 
176
226
  Core upgrades no longer update a bundled plugin: upgrade `@anhlp/alp-paseo`
177
227
  separately, and re-register if its installation location changes. Keep existing
178
- `web` settings, `web.json` token/server identity and ALP session storage.
179
- `alp web`, `alp web --print`, `alp web pair --on/--off`, `ALP_WEB_INTEGRATION`,
180
- `ALP_INTEGRATION_ENTRY`, `ALP_DAEMON_ENTRY`, `ALP_SUPERVISE` and `ALP_HOME` retain
181
- their meanings. Without the plugin, web commands explain how to install it;
182
- CLI, daemon, IPC and ACP remain usable.
228
+ `web` settings and ALP session storage. The integration is named `paseo`: it keeps its token and
229
+ server identity in `paseo.json` (carried over once from a `web.json` written before the rename),
230
+ locks `integrations/paseo.lock`, registers `integrations/paseo.json` and binds a port the system
231
+ picks, since `web.port` and `web.json` now belong to `alp-web`. `alp-web-integration` remains an
232
+ alias of `alp-paseo-integration` for one release, and a home that has only the old
233
+ `integrations/web.json` descriptor still starts it, with a hint to re-register.
234
+ When Paseo's app asks for a password, give it the one `alp web pair` prints.
235
+ `ALP_PASEO_INTEGRATION` names the integration's entry; `ALP_WEB_INTEGRATION` is read for it too,
236
+ after `ALP_PASEO_INTEGRATION`, for one release, and never selects what `alp web` runs.
237
+ `alp web pair --on/--off`, `ALP_INTEGRATION_ENTRY`, `ALP_DAEMON_ENTRY`, `ALP_SUPERVISE` and
238
+ `ALP_HOME` retain their meanings. `alp web` and `alp web --print` now open the CLI's `alp-web`
239
+ service; this package no longer has a web app, and its listener answers plain HTTP with 404 and
240
+ keeps only the token-guarded Paseo socket. The first `alp web` stops a pre-rename integration
241
+ that still holds `integrations/web.lock` (only a provable same-user, same-boot owner). Without the
242
+ plugin, `alp web pair` explains how to install it; CLI, daemon, IPC, ACP and `alp web` remain
243
+ usable.
183
244
 
184
245
  The public provider (`alp`), plugin ID (`alp-provider`), exports (`.`, `/main`,
185
246
  `/web`, `/paseo/*`, `/panel/*`), Phở/Cafe sessions, streaming/cancel, delegation,
@@ -188,6 +249,5 @@ daemon supervision/reconnection are unchanged. `release:tarball-check` runs the
188
249
  existing provider, team, human, web, relay and transport regressions against a
189
250
  separately installed plugin and real SDK peers.
190
251
 
191
- For source builds, `npm run build:paseo` builds the server; `npm run build:web`
192
- builds the pinned web app. Plugin prepack verifies its own web artifact. Neither
193
- step is required by core build/prepack.
252
+ For source builds, `npm run build:paseo` builds the server (plugin prepack runs it). It
253
+ is not required by core build/prepack.
@@ -55,7 +55,7 @@ export const LANGUAGES = [
55
55
  { label: 'Deutsch', value: 'German' }, { label: 'Español', value: 'Spanish' },
56
56
  ];
57
57
  /** librarySkills: for agents, the skills the library gives it by name (role-skills.json). */
58
- type Entry = { kind: Kind; name: string; source: string; overrides?: string; content: Content; revision: string | null; usedBy: string[]; librarySkills?: string[] };
58
+ type Entry = { kind: Kind; name: string; source: string; overrides?: string; content: Content; revision: string | null; usedBy: string[]; librarySkills?: string[]; secrets?: string[] };
59
59
  /** `readOnly`: the library can only be looked at from here (ALP remote mode), and why. */
60
60
  type Where = { projectRoot: string | null; library: string; readOnly?: { reason: string; unlisted?: string } } | null;
61
61
 
@@ -189,7 +189,7 @@ type WorkspaceProps = {
189
189
  };
190
190
 
191
191
  /** The aside's groups: General (the library only), Organisation, Capabilities and Runtimes, each kind with its entries. */
192
- export function navGroups(scope: Scope, lists: Lists, readOnly = false): NavGroup[] {
192
+ export function navGroups(scope: Scope, lists: Lists): NavGroup[] {
193
193
  const groups: NavGroup[] = scope === 'library' ? [{ key: 'General', label: 'General', items: [{ key: 'language', label: 'Language', icon: 'Languages' }] }] : [];
194
194
  for (const item of shownIn(scope)) {
195
195
  let group = groups.find(candidate => candidate.label === item.group);
@@ -197,8 +197,7 @@ export function navGroups(scope: Scope, lists: Lists, readOnly = false): NavGrou
197
197
  const rows = lists[item.kind];
198
198
  group.items.push({
199
199
  key: item.kind, label: item.title, icon: item.icon, ...(rows ? { count: rows.length } : {}),
200
- // A read-only library's entries cannot be opened, so the aside lists kinds only.
201
- children: readOnly ? [] : (rows ?? []).map(row => ({ key: row.name, label: row.name, tone: sourceTone(row.source) })),
200
+ children: (rows ?? []).map(row => ({ key: row.name, label: row.name, tone: sourceTone(row.source) })),
202
201
  });
203
202
  }
204
203
  return groups;
@@ -209,7 +208,7 @@ export function LibraryWorkspace({ theme, compact, scope, where, lists, error, s
209
208
  const styles = useMemo(() => makeStyles(theme, compact), [theme, compact]);
210
209
  const title = scope === 'library' ? 'ALP library' : 'ALP project';
211
210
  const subtitle = scope === 'library' ? where?.library : where?.projectRoot ?? undefined;
212
- const groups = navGroups(scope, lists, !!where?.readOnly);
211
+ const groups = navGroups(scope, lists);
213
212
  const onSelect = (kind: string, name?: string) => actions.select(kind === 'language' ? { kind } : { kind: kind as Kind, ...(name ? { name } : {}) });
214
213
  if (scope === 'project' && where?.readOnly?.unlisted) {
215
214
  return <View style={styles.screen}><Text style={styles.muted}>{where.readOnly.unlisted}</Text></View>;
@@ -221,6 +220,23 @@ export function LibraryWorkspace({ theme, compact, scope, where, lists, error, s
221
220
  return <LanguageSettings theme={theme} compact={compact} language={language ?? null} error={error} actions={actions} layout={{ title, subtitle, groups, onSelect, initialCollapsed, embedded }} styles={styles} />;
222
221
  }
223
222
  const kind = kindOf(selection.kind);
223
+ if (where?.readOnly && (selection.name || selection.creating)) {
224
+ // A selection can change before its async get resolves; never label the previous entry as the new one.
225
+ const viewed = !where.readOnly.unlisted && entry && entry.name === selection.name && entry.kind === selection.kind ? entry : null;
226
+ return <SideNavLayout theme={theme} compact={compact} title={title} subtitle={subtitle} groups={groups} active={{ item: selection.kind, ...(selection.name ? { child: selection.name } : {}) }} onSelect={onSelect} initialCollapsed={initialCollapsed} embedded={embedded}
227
+ breadcrumb={[kind.title, selection.name ?? 'Read only']}
228
+ badges={viewed ? <Pill theme={theme} label={sourceLabel(viewed.source)} tone={sourceTone(viewed.source)} /> : null}
229
+ actions={<Button theme={theme} icon="ArrowLeft" label={`All ${kind.title.toLowerCase()}`} onPress={() => actions.select({ kind: selection.kind })} />}>
230
+ <Text style={styles.muted}>{where.readOnly.reason}</Text>
231
+ {error || where.readOnly.unlisted ? <Text style={styles.muted}>{error ?? where.readOnly.unlisted}</Text> : selection.creating ? <Text style={styles.muted}>Create entries on the ALP host.</Text> : !viewed ? <Text style={styles.muted}>Loading…</Text> : <>
232
+ {viewed.overrides ? <Text style={styles.small}>Overrides {sourceLabel(viewed.overrides)}.</Text> : null}
233
+ {viewed.usedBy.length ? <Text style={styles.small}>Used by {viewed.usedBy.join(', ')}.</Text> : null}
234
+ {viewed.librarySkills?.length ? <Text style={styles.small}>Library skills: {viewed.librarySkills.join(', ')}.</Text> : null}
235
+ {viewed.secrets?.length ? <Text style={styles.muted}>Secrets hidden: {viewed.secrets.join(', ')}. Secret markers stand for values kept on the ALP host.</Text> : null}
236
+ <Text selectable style={styles.small}>{JSON.stringify(viewed.content, null, 2)}</Text>
237
+ </>}
238
+ </SideNavLayout>;
239
+ }
224
240
  if (selection.name || selection.creating) {
225
241
  return <EntryEditor key={`${selection.kind}/${selection.name ?? 'new'}/${entry?.revision ?? 'new'}/${(entry?.librarySkills ?? []).join(',')}`} theme={theme} compact={compact} scope={scope} kind={selection.kind} entry={selection.creating ? null : entry}
226
242
  lists={lists} actions={actions} layout={{ title, subtitle, groups, onSelect, initialCollapsed, embedded }} />;
@@ -306,7 +322,7 @@ export function KindOverview({ theme, compact, scope, kind, rows, error, where,
306
322
  <View style={styles.table}>
307
323
  {shown.map((row, index) => (
308
324
  <View key={row.name} style={[styles.tableRow, index ? styles.tableRowRule : null]}>
309
- <Pressable accessibilityRole={readOnly ? undefined : 'button'} accessibilityLabel={`${readOnly ? '' : 'Open '}${one} ${row.name}`} disabled={!!readOnly} onPress={() => actions.select({ kind, name: row.name })} style={styles.rowMain}>
325
+ <Pressable accessibilityRole="button" accessibilityLabel={`Open ${one} ${row.name}`} onPress={() => actions.select({ kind, name: row.name })} style={styles.rowMain}>
310
326
  <View style={styles.rowTitle}>
311
327
  <Text style={styles.name}>{row.name}</Text>
312
328
  <Pill theme={theme} label={sourceLabel(row.source)} tone={sourceTone(row.source)} />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anhlp/alp-paseo",
3
- "version": "0.0.0-beta.2",
3
+ "version": "0.0.1-beta.4",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "paseo-plugin.json",
@@ -9,27 +9,28 @@
9
9
  "client",
10
10
  "shared",
11
11
  "server/dist",
12
- "NOTICE"
12
+ "NOTICE",
13
+ "LICENSE.paseo.txt"
13
14
  ],
14
15
  "dependencies": {
15
16
  "@anthropic-ai/claude-agent-sdk": "0.3.292",
16
17
  "@anthropic-ai/sdk": "0.131.0",
17
18
  "@modelcontextprotocol/sdk": "1.32.1",
18
19
  "zod": "4.4.3",
19
- "@anhlp/alp-protocol": "0.0.0-beta.2",
20
- "@anhlp/alp-core": "0.0.0-beta.2",
21
- "@anhlp/alp-runtime": "0.0.0-beta.2",
22
- "@anhlp/alp-daemon": "0.0.0-beta.2",
23
- "@anhlp/alp-client": "0.0.0-beta.2",
20
+ "@anhlp/alp-protocol": "0.0.1-beta.4",
21
+ "@anhlp/alp-core": "0.0.1-beta.4",
22
+ "@anhlp/alp-runtime": "0.0.1-beta.4",
23
+ "@anhlp/alp-daemon": "0.0.1-beta.4",
24
+ "@anhlp/alp-client": "0.0.1-beta.4",
24
25
  "ws": "^8.22.0"
25
26
  },
26
27
  "peerDependencies": {
27
- "@getpaseo/plugin": ">=0.11.1 <0.12.0",
28
+ "@getpaseo/plugin": ">=0.11.1 <1.0.0",
28
29
  "react": ">=19 <20",
29
30
  "react-native": ">=0.81 <0.82",
30
- "@getpaseo/client": ">=0.11.1 <0.12.0",
31
- "@getpaseo/protocol": ">=0.11.1 <0.12.0",
32
- "@getpaseo/relay": ">=0.11.1 <0.12.0",
31
+ "@getpaseo/client": ">=0.11.1 <1.0.0",
32
+ "@getpaseo/protocol": ">=0.11.1 <1.0.0",
33
+ "@getpaseo/relay": ">=0.11.1 <1.0.0",
33
34
  "ws": "*"
34
35
  },
35
36
  "peerDependenciesMeta": {
@@ -62,9 +63,10 @@
62
63
  "scripts": {
63
64
  "build": "node ../../scripts/build-workspace.mjs paseo",
64
65
  "test": "node ../../scripts/test-package.mjs paseo",
65
- "prepack": "npm run build && node ../../scripts/check-web-app.mjs"
66
+ "prepack": "npm run build"
66
67
  },
67
68
  "bin": {
69
+ "alp-paseo-integration": "server/dist/main.js",
68
70
  "alp-web-integration": "server/dist/main.js"
69
71
  },
70
72
  "exports": {
@@ -88,11 +90,14 @@
88
90
  }
89
91
  },
90
92
  "devDependencies": {
91
- "@getpaseo/client": "0.11.1",
92
- "@getpaseo/plugin": "0.11.1",
93
- "@getpaseo/protocol": "0.11.2",
94
- "@getpaseo/relay": "0.11.1",
93
+ "@getpaseo/client": "0.12.0",
94
+ "@getpaseo/plugin": "0.12.0",
95
+ "@getpaseo/protocol": "0.12.0",
96
+ "@getpaseo/relay": "0.12.0",
95
97
  "esbuild": "0.25.12",
96
98
  "react-dom": "19.1.0"
99
+ },
100
+ "optionalDependencies": {
101
+ "node-pty": "1.2.0-beta.15"
97
102
  }
98
103
  }
package/paseo-plugin.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "id": "alp-provider",
3
3
  "description": "Run filesystem-defined ALP agents",
4
- "requirements": { "paseo": ">=0.11.1 <0.12.0" }
4
+ "requirements": { "paseo": ">=0.11.1 <1.0.0" }
5
5
  }
@@ -4,7 +4,7 @@ The bundled files of this package include code from the packages below; each kee
4
4
  its own licence, reproduced here.
5
5
 
6
6
  ================================================================================
7
- @getpaseo/protocol@0.11.2 (Apache-2.0)
7
+ @getpaseo/protocol@0.12.0 (Apache-2.0)
8
8
  ================================================================================
9
9
 
10
10
  Copyright (c) 2025-present Mohamed Boudra
@@ -220,7 +220,7 @@ Portions of this software are licensed as follows:
220
220
  limitations under the License.
221
221
 
222
222
  ================================================================================
223
- @getpaseo/relay@0.11.1 (Apache-2.0)
223
+ @getpaseo/relay@0.12.0 (Apache-2.0)
224
224
  ================================================================================
225
225
 
226
226
  Copyright (c) 2025-present Mohamed Boudra