@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.
- package/NOTICE +9 -6
- package/README.md +86 -26
- package/client/library.tsx +22 -6
- package/package.json +21 -16
- package/paseo-plugin.json +1 -1
- package/server/dist/THIRD-PARTY-NOTICES.txt +2 -2
- package/server/dist/alpd.js +10897 -3514
- package/server/dist/compat.js +76 -0
- package/server/dist/index.js +23033 -6235
- package/server/dist/library.js +148 -42
- package/server/dist/main.js +12316 -2191
- package/server/dist/mapping.js +96 -44
- package/server/dist/panel/library.js +148 -42
- package/server/dist/panel/mapping.js +96 -44
- package/server/dist/panel/tasks.js +32 -2
- package/server/dist/panel/usage.js +38 -5
- package/server/dist/paseo/agents.js +9020 -335
- package/server/dist/paseo/checkout.js +111 -208
- package/server/dist/paseo/create-receipts.js +281 -0
- package/server/dist/paseo/files.js +137 -18
- package/server/dist/paseo/gateway.js +42 -6
- package/server/dist/paseo/git.js +375 -0
- package/server/dist/paseo/index.js +11737 -1821
- package/server/dist/paseo/plugins.js +173 -67
- package/server/dist/paseo/prompt-content.js +43 -0
- package/server/dist/paseo/providers.js +44 -3
- package/server/dist/paseo/quiet.js +1 -5
- package/server/dist/paseo/relay.js +3 -2
- package/server/dist/paseo/terminals.js +23618 -0
- package/server/dist/paseo/timeline-store.js +2 -2
- package/server/dist/paseo/uploads.js +22303 -0
- package/server/dist/paseo/workspaces.js +876 -192
- package/server/dist/provider-core.js +457 -9
- package/server/dist/provider-prompt.js +220 -0
- package/server/dist/provider.js +10495 -3016
- package/server/dist/remote/index.js +460 -19
- package/server/dist/remote/link.js +32 -2
- package/server/dist/remote/panels.js +51 -6
- package/server/dist/remote/provider.js +1219 -793
- package/server/dist/session-usage.js +15 -0
- package/server/dist/tasks.js +32 -2
- package/server/dist/upload-names.js +30 -0
- package/server/dist/uploads.js +84 -0
- package/server/dist/usage.js +38 -5
- package/server/dist/web.js +59 -102
- package/shared/library.ts +2 -0
- package/server/dist/web-app/NOTICE.txt +0 -18
- package/server/dist/web-app/THIRD-PARTY-NOTICES.txt +0 -5483
- package/server/dist/web-app/THIRD-PARTY-NOTICES.txt.br +0 -0
- package/server/dist/web-app/THIRD-PARTY-NOTICES.txt.gz +0 -0
- package/server/dist/web-app/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +0 -1
- package/server/dist/web-app/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
- package/server/dist/web-app/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
- package/server/dist/web-app/_expo/static/js/web/desktop-attachment-bridge-6af9b585f6d25fdb5938533f7aa5a167.js +0 -2
- package/server/dist/web-app/_expo/static/js/web/desktop-attachment-store-4ae9267243fd80b0b9605252601a21f3.js +0 -2
- package/server/dist/web-app/_expo/static/js/web/desktop-attachment-store-4ae9267243fd80b0b9605252601a21f3.js.br +0 -0
- package/server/dist/web-app/_expo/static/js/web/desktop-attachment-store-4ae9267243fd80b0b9605252601a21f3.js.gz +0 -0
- package/server/dist/web-app/_expo/static/js/web/index-c01174e6924afca25f226efae0b2a3ae.js +0 -18742
- package/server/dist/web-app/_expo/static/js/web/index-c01174e6924afca25f226efae0b2a3ae.js.br +0 -0
- package/server/dist/web-app/_expo/static/js/web/index-c01174e6924afca25f226efae0b2a3ae.js.gz +0 -0
- package/server/dist/web-app/_expo/static/js/web/indexeddb-attachment-store-5c75739712558f24273a6497f02f315b.js +0 -2
- package/server/dist/web-app/_expo/static/js/web/indexeddb-attachment-store-5c75739712558f24273a6497f02f315b.js.br +0 -0
- package/server/dist/web-app/_expo/static/js/web/indexeddb-attachment-store-5c75739712558f24273a6497f02f315b.js.gz +0 -0
- package/server/dist/web-app/_expo/static/js/web/native-file-attachment-store-e614dc34238b4482a273236cd9c323b6.js +0 -4
- package/server/dist/web-app/_expo/static/js/web/native-file-attachment-store-e614dc34238b4482a273236cd9c323b6.js.br +0 -0
- package/server/dist/web-app/_expo/static/js/web/native-file-attachment-store-e614dc34238b4482a273236cd9c323b6.js.gz +0 -0
- package/server/dist/web-app/alp-token.js +0 -12
- package/server/dist/web-app/alp-web-app.json +0 -26
- package/server/dist/web-app/apple-touch-icon.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/server/dist/web-app/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/server/dist/web-app/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/server/dist/web-app/assets/assets/images/favicon-dark-attention.7b1f41432deecb841fbf71fe6fe81258.png +0 -0
- package/server/dist/web-app/assets/assets/images/favicon-dark-running.a4ee272abf692e713606fbcffb2eaadb.png +0 -0
- package/server/dist/web-app/assets/assets/images/favicon-dark.e781e045425270913385c8e26c706dc7.png +0 -0
- package/server/dist/web-app/assets/assets/images/favicon-light-attention.7b1f41432deecb841fbf71fe6fe81258.png +0 -0
- package/server/dist/web-app/assets/assets/images/favicon-light-running.a4ee272abf692e713606fbcffb2eaadb.png +0 -0
- package/server/dist/web-app/assets/assets/images/favicon-light.e781e045425270913385c8e26c706dc7.png +0 -0
- package/server/dist/web-app/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
- package/server/dist/web-app/favicon.ico +0 -0
- package/server/dist/web-app/favicon.ico.br +0 -0
- package/server/dist/web-app/favicon.ico.gz +0 -0
- package/server/dist/web-app/index.html +0 -101
- package/server/dist/web-app/index.html.br +0 -0
- package/server/dist/web-app/index.html.gz +0 -0
- package/server/dist/web-app/manifest.json +0 -31
- package/server/dist/web-app/metadata.json +0 -1
- package/server/dist/web-app/pwa-icon-192.png +0 -0
- package/server/dist/web-app/pwa-icon-512.png +0 -0
- package/server/dist/web-app/robots.txt +0 -2
- /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
|
-
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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`)
|
|
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
|
-
|
|
189
|
+
<a id="optional-web-installation"></a>
|
|
157
190
|
|
|
158
|
-
|
|
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-
|
|
163
|
-
alp web --
|
|
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-
|
|
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
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
|
192
|
-
|
|
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.
|
package/client/library.tsx
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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=
|
|
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.
|
|
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.
|
|
20
|
-
"@anhlp/alp-core": "0.0.
|
|
21
|
-
"@anhlp/alp-runtime": "0.0.
|
|
22
|
-
"@anhlp/alp-daemon": "0.0.
|
|
23
|
-
"@anhlp/alp-client": "0.0.
|
|
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.
|
|
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.
|
|
31
|
-
"@getpaseo/protocol": ">=0.11.1 <0.
|
|
32
|
-
"@getpaseo/relay": ">=0.11.1 <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
|
|
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.
|
|
92
|
-
"@getpaseo/plugin": "0.
|
|
93
|
-
"@getpaseo/protocol": "0.
|
|
94
|
-
"@getpaseo/relay": "0.
|
|
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
|
@@ -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.
|
|
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.
|
|
223
|
+
@getpaseo/relay@0.12.0 (Apache-2.0)
|
|
224
224
|
================================================================================
|
|
225
225
|
|
|
226
226
|
Copyright (c) 2025-present Mohamed Boudra
|