@anhlp/alp-paseo 0.0.0-beta.1 → 0.0.1-beta.3
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 +28 -5
- package/client/library.tsx +22 -6
- package/client/task-pills.ts +5 -1
- package/package.json +14 -20
- package/paseo-plugin.json +1 -1
- package/server/dist/THIRD-PARTY-NOTICES.txt +2 -2
- package/server/dist/alpd.js +2529 -1024
- package/server/dist/index.js +2603 -1036
- package/server/dist/library.js +68 -10
- package/server/dist/main.js +318 -105
- package/server/dist/mapping.js +28 -17
- package/server/dist/panel/library.js +68 -10
- package/server/dist/panel/mapping.js +28 -17
- package/server/dist/panel/tasks.js +4 -2
- package/server/dist/panel/usage.js +6 -4
- package/server/dist/paseo/agents.js +107 -33
- package/server/dist/paseo/index.js +198 -70
- package/server/dist/paseo/plugins.js +87 -29
- package/server/dist/paseo/providers.js +44 -3
- package/server/dist/paseo/timeline-items.js +25 -2
- package/server/dist/provider-core.js +37 -1
- package/server/dist/provider.js +2347 -834
- package/server/dist/remote/index.js +60 -7
- package/server/dist/remote/link.js +4 -2
- package/server/dist/remote/panels.js +23 -6
- package/server/dist/remote/provider.js +41 -3
- package/server/dist/session-usage.js +15 -0
- package/server/dist/tasks.js +4 -2
- package/server/dist/tool-detail.js +26 -0
- package/server/dist/usage.js +6 -4
- package/server/dist/web-app/_expo/static/js/web/{index-185bf24e94a45852b2cfa53666d1cb86.js → index-c01174e6924afca25f226efae0b2a3ae.js} +2 -2
- package/server/dist/web-app/_expo/static/js/web/{index-185bf24e94a45852b2cfa53666d1cb86.js.br → index-c01174e6924afca25f226efae0b2a3ae.js.br} +0 -0
- package/server/dist/web-app/_expo/static/js/web/{index-185bf24e94a45852b2cfa53666d1cb86.js.gz → index-c01174e6924afca25f226efae0b2a3ae.js.gz} +0 -0
- package/server/dist/web-app/alp-web-app.json +2 -1
- package/server/dist/web-app/index.html +1 -1
- package/server/dist/web-app/index.html.br +0 -0
- package/server/dist/web-app/index.html.gz +0 -0
- package/server/dist/web.js +4 -2
- package/shared/library.ts +2 -0
- package/server/dist/alp-templates.d.ts +0 -9
- package/server/dist/compat.d.ts +0 -3
- package/server/dist/index.d.ts +0 -10
- package/server/dist/library.d.ts +0 -1
- package/server/dist/main.d.ts +0 -2
- package/server/dist/mapping-wire.d.ts +0 -58
- package/server/dist/mapping.d.ts +0 -99
- package/server/dist/panel/compat.d.ts +0 -3
- package/server/dist/panel/library.d.ts +0 -6
- package/server/dist/panel/mapping.d.ts +0 -1
- package/server/dist/panel/session-tasks.d.ts +0 -6
- package/server/dist/panel/tasks.d.ts +0 -8
- package/server/dist/panel/usage.d.ts +0 -3
- package/server/dist/paseo/agents.d.ts +0 -65
- package/server/dist/paseo/chat-search.d.ts +0 -18
- package/server/dist/paseo/checkout.d.ts +0 -71
- package/server/dist/paseo/files.d.ts +0 -19
- package/server/dist/paseo/gateway.d.ts +0 -61
- package/server/dist/paseo/git.d.ts +0 -21
- package/server/dist/paseo/index.d.ts +0 -56
- package/server/dist/paseo/plugins.d.ts +0 -17
- package/server/dist/paseo/providers.d.ts +0 -19
- package/server/dist/paseo/quiet.d.ts +0 -2
- package/server/dist/paseo/relay-transport.d.ts +0 -43
- package/server/dist/paseo/relay.d.ts +0 -84
- package/server/dist/paseo/timeline-items.d.ts +0 -13
- package/server/dist/paseo/timeline-projection.d.ts +0 -96
- package/server/dist/paseo/timeline-store.d.ts +0 -60
- package/server/dist/paseo/usage.d.ts +0 -12
- package/server/dist/paseo/workspaces.d.ts +0 -58
- package/server/dist/provider-core.d.ts +0 -68
- package/server/dist/provider.d.ts +0 -28
- package/server/dist/remote/index.d.ts +0 -10
- package/server/dist/remote/link.d.ts +0 -58
- package/server/dist/remote/panels.d.ts +0 -29
- package/server/dist/remote/provider.d.ts +0 -25
- package/server/dist/session-tasks.d.ts +0 -1
- package/server/dist/shared/library.d.ts +0 -258
- package/server/dist/shared/tasks.d.ts +0 -128
- package/server/dist/shared/team-models.d.ts +0 -14
- package/server/dist/shared/usage.d.ts +0 -27
- package/server/dist/tasks.d.ts +0 -1
- package/server/dist/usage.d.ts +0 -1
- package/server/dist/web.d.ts +0 -42
package/README.md
CHANGED
|
@@ -45,12 +45,13 @@ and project overrides.
|
|
|
45
45
|
|
|
46
46
|
## Install
|
|
47
47
|
|
|
48
|
-
This is the beta `0.0.
|
|
49
|
-
|
|
48
|
+
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
|
+
`npm view @anhlp/alp-paseo dist-tags`); name it when you install (`@beta`, or
|
|
50
|
+
exactly `@0.0.1-beta.3`). See the
|
|
50
51
|
[release notes](https://github.com/phucanh08/alp/blob/main/docs/alp/beta-release-notes.md) and
|
|
51
52
|
[install, upgrade and removal steps](https://github.com/phucanh08/alp/blob/main/docs/alp/beta-install.md).
|
|
52
53
|
|
|
53
|
-
Requires Paseo `>=0.11.1 <0.
|
|
54
|
+
Requires Paseo `>=0.11.1 <0.13.0` (0.11.x or 0.12.x), Node.js 22 (22.12 or later) or 24 on Linux or macOS
|
|
54
55
|
(Windows and Node.js 26 are experimental), and an authenticated native Codex or Claude Code
|
|
55
56
|
executable on PATH.
|
|
56
57
|
|
|
@@ -74,6 +75,16 @@ paseo plugin add npm:@anhlp/alp-paseo@beta
|
|
|
74
75
|
paseo provider models alp
|
|
75
76
|
```
|
|
76
77
|
|
|
78
|
+
This works from `0.0.0-beta.2`, which ships no type declarations. In `0.0.0-beta.1` the `npm:`
|
|
79
|
+
source fails: Paseo installs it without peers and cannot resolve the `@getpaseo/*` types the
|
|
80
|
+
plugin's declarations import ([#111](https://github.com/phucanh08/alp/issues/111)). With beta.1,
|
|
81
|
+
install it with npm and add it by path:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
npm install -g @anhlp/alp-paseo@beta
|
|
85
|
+
paseo plugin add "$(npm root -g)/@anhlp/alp-paseo"
|
|
86
|
+
```
|
|
87
|
+
|
|
77
88
|
From then on the plugin keeps alpd running while Paseo runs. It starts alpd when
|
|
78
89
|
Paseo starts, checks every 5 seconds, and starts it again when alpd is down; with
|
|
79
90
|
`alp daemon install` (experimental), it starts alpd through that service. Sessions open in Paseo
|
|
@@ -118,7 +129,7 @@ for existing projects, model selection, permissions, and runtime limitations.
|
|
|
118
129
|
|
|
119
130
|
## Remote mode (deferred, not in the beta)
|
|
120
131
|
|
|
121
|
-
Remote mode is **not part of `0.0.
|
|
132
|
+
Remote mode is **not part of the beta (`0.0.1-beta.3`)**: it needs `@anhlp/alp-gateway`, which is not
|
|
122
133
|
published. The text below describes the code in this repository for development only.
|
|
123
134
|
|
|
124
135
|
To use ALP running on another machine, start the daemon process that loads this plugin with
|
|
@@ -159,7 +170,19 @@ Do not use `--legacy-peer-deps` for a standalone installation unless you supply
|
|
|
159
170
|
peers explicitly. The binary is also discoverable on PATH, so registration is optional
|
|
160
171
|
for a global install. For a local install, run
|
|
161
172
|
`./node_modules/.bin/alp-web-integration --register` with the intended `ALP_HOME`.
|
|
162
|
-
|
|
173
|
+
|
|
174
|
+
A plugin directory managed by `paseo plugin add npm:…` is not a standalone web
|
|
175
|
+
installation. Paseo installs it without peers and supplies `@getpaseo/plugin` through
|
|
176
|
+
its plugin loader. Running `node <managed-plugin>/server/dist/main.js --register`
|
|
177
|
+
directly bypasses that loader and can fail with `ERR_MODULE_NOT_FOUND` for
|
|
178
|
+
`@getpaseo/plugin`; this invocation from the managed directory is unsupported
|
|
179
|
+
([#154](https://github.com/phucanh08/alp/issues/154)). Use the normal npm installation
|
|
180
|
+
and `alp-web-integration --register` shown above. For a local npm installation with
|
|
181
|
+
required peers, use `./node_modules/.bin/alp-web-integration --register` with the
|
|
182
|
+
intended `ALP_HOME`. Registration records the entry path; it does not install missing
|
|
183
|
+
peers or turn a host-managed plugin into a standalone installation.
|
|
184
|
+
|
|
185
|
+
Adding the plugin to a Paseo host (`npm:` from beta.2; by path in beta.1, see above) remains
|
|
163
186
|
available independently of this standalone web process.
|
|
164
187
|
|
|
165
188
|
Core upgrades no longer update a bundled plugin: upgrade `@anhlp/alp-paseo`
|
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/client/task-pills.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import type { PaseoAgent, PaseoAgentListResult } from '@getpaseo/client';
|
|
2
1
|
import type { PluginButton, PluginButtonMenuEntry, PluginButtonRegistration, PluginClientContext, PluginOpenScreenInput } from '@getpaseo/plugin/client';
|
|
3
2
|
import { tasksList, type TaskRow } from '../shared/tasks';
|
|
4
3
|
import { stateOf } from './tasks-panel';
|
|
5
4
|
|
|
5
|
+
// Through the host SDK, not `@getpaseo/client`: that is only a peer, which `paseo plugin add npm:`
|
|
6
|
+
// does not install, and Paseo resolves every type import of a plugin's sources (#111).
|
|
7
|
+
type PaseoAgentListResult = Awaited<ReturnType<PluginClientContext['paseo']['agents']['list']>>;
|
|
8
|
+
type PaseoAgent = PaseoAgentListResult['entries'][number]['agent'];
|
|
9
|
+
|
|
6
10
|
/**
|
|
7
11
|
* The Tasks pill in the composer of each ALP agent. On a phone the workspace's "+" tab,
|
|
8
12
|
* and with it the Tasks panel, is out of reach, but the composer is not. The pill shows
|
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.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"paseo-plugin.json",
|
|
@@ -16,20 +16,20 @@
|
|
|
16
16
|
"@anthropic-ai/sdk": "0.131.0",
|
|
17
17
|
"@modelcontextprotocol/sdk": "1.32.1",
|
|
18
18
|
"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.
|
|
19
|
+
"@anhlp/alp-protocol": "0.0.1-beta.3",
|
|
20
|
+
"@anhlp/alp-core": "0.0.1-beta.3",
|
|
21
|
+
"@anhlp/alp-runtime": "0.0.1-beta.3",
|
|
22
|
+
"@anhlp/alp-daemon": "0.0.1-beta.3",
|
|
23
|
+
"@anhlp/alp-client": "0.0.1-beta.3",
|
|
24
24
|
"ws": "^8.22.0"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
|
-
"@getpaseo/plugin": ">=0.11.1 <0.
|
|
27
|
+
"@getpaseo/plugin": ">=0.11.1 <0.13.0",
|
|
28
28
|
"react": ">=19 <20",
|
|
29
29
|
"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.
|
|
30
|
+
"@getpaseo/client": ">=0.11.1 <0.13.0",
|
|
31
|
+
"@getpaseo/protocol": ">=0.11.1 <0.13.0",
|
|
32
|
+
"@getpaseo/relay": ">=0.11.1 <0.13.0",
|
|
33
33
|
"ws": "*"
|
|
34
34
|
},
|
|
35
35
|
"peerDependenciesMeta": {
|
|
@@ -69,35 +69,29 @@
|
|
|
69
69
|
},
|
|
70
70
|
"exports": {
|
|
71
71
|
".": {
|
|
72
|
-
"types": "./server/dist/index.d.ts",
|
|
73
72
|
"default": "./server/dist/index.js"
|
|
74
73
|
},
|
|
75
74
|
"./main": {
|
|
76
|
-
"types": "./server/dist/main.d.ts",
|
|
77
75
|
"default": "./server/dist/main.js"
|
|
78
76
|
},
|
|
79
77
|
"./web": {
|
|
80
|
-
"types": "./server/dist/web.d.ts",
|
|
81
78
|
"default": "./server/dist/web.js"
|
|
82
79
|
},
|
|
83
80
|
"./remote": {
|
|
84
|
-
"types": "./server/dist/remote/index.d.ts",
|
|
85
81
|
"default": "./server/dist/remote/index.js"
|
|
86
82
|
},
|
|
87
83
|
"./paseo/*": {
|
|
88
|
-
"types": "./server/dist/paseo/*.d.ts",
|
|
89
84
|
"default": "./server/dist/paseo/*.js"
|
|
90
85
|
},
|
|
91
86
|
"./panel/*": {
|
|
92
|
-
"types": "./server/dist/panel/*.d.ts",
|
|
93
87
|
"default": "./server/dist/panel/*.js"
|
|
94
88
|
}
|
|
95
89
|
},
|
|
96
90
|
"devDependencies": {
|
|
97
|
-
"@getpaseo/client": "0.
|
|
98
|
-
"@getpaseo/plugin": "0.
|
|
99
|
-
"@getpaseo/protocol": "0.
|
|
100
|
-
"@getpaseo/relay": "0.
|
|
91
|
+
"@getpaseo/client": "0.12.0",
|
|
92
|
+
"@getpaseo/plugin": "0.12.0",
|
|
93
|
+
"@getpaseo/protocol": "0.12.0",
|
|
94
|
+
"@getpaseo/relay": "0.12.0",
|
|
101
95
|
"esbuild": "0.25.12",
|
|
102
96
|
"react-dom": "19.1.0"
|
|
103
97
|
}
|
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
|