@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.
Files changed (83) hide show
  1. package/README.md +28 -5
  2. package/client/library.tsx +22 -6
  3. package/client/task-pills.ts +5 -1
  4. package/package.json +14 -20
  5. package/paseo-plugin.json +1 -1
  6. package/server/dist/THIRD-PARTY-NOTICES.txt +2 -2
  7. package/server/dist/alpd.js +2529 -1024
  8. package/server/dist/index.js +2603 -1036
  9. package/server/dist/library.js +68 -10
  10. package/server/dist/main.js +318 -105
  11. package/server/dist/mapping.js +28 -17
  12. package/server/dist/panel/library.js +68 -10
  13. package/server/dist/panel/mapping.js +28 -17
  14. package/server/dist/panel/tasks.js +4 -2
  15. package/server/dist/panel/usage.js +6 -4
  16. package/server/dist/paseo/agents.js +107 -33
  17. package/server/dist/paseo/index.js +198 -70
  18. package/server/dist/paseo/plugins.js +87 -29
  19. package/server/dist/paseo/providers.js +44 -3
  20. package/server/dist/paseo/timeline-items.js +25 -2
  21. package/server/dist/provider-core.js +37 -1
  22. package/server/dist/provider.js +2347 -834
  23. package/server/dist/remote/index.js +60 -7
  24. package/server/dist/remote/link.js +4 -2
  25. package/server/dist/remote/panels.js +23 -6
  26. package/server/dist/remote/provider.js +41 -3
  27. package/server/dist/session-usage.js +15 -0
  28. package/server/dist/tasks.js +4 -2
  29. package/server/dist/tool-detail.js +26 -0
  30. package/server/dist/usage.js +6 -4
  31. package/server/dist/web-app/_expo/static/js/web/{index-185bf24e94a45852b2cfa53666d1cb86.js → index-c01174e6924afca25f226efae0b2a3ae.js} +2 -2
  32. package/server/dist/web-app/_expo/static/js/web/{index-185bf24e94a45852b2cfa53666d1cb86.js.br → index-c01174e6924afca25f226efae0b2a3ae.js.br} +0 -0
  33. package/server/dist/web-app/_expo/static/js/web/{index-185bf24e94a45852b2cfa53666d1cb86.js.gz → index-c01174e6924afca25f226efae0b2a3ae.js.gz} +0 -0
  34. package/server/dist/web-app/alp-web-app.json +2 -1
  35. package/server/dist/web-app/index.html +1 -1
  36. package/server/dist/web-app/index.html.br +0 -0
  37. package/server/dist/web-app/index.html.gz +0 -0
  38. package/server/dist/web.js +4 -2
  39. package/shared/library.ts +2 -0
  40. package/server/dist/alp-templates.d.ts +0 -9
  41. package/server/dist/compat.d.ts +0 -3
  42. package/server/dist/index.d.ts +0 -10
  43. package/server/dist/library.d.ts +0 -1
  44. package/server/dist/main.d.ts +0 -2
  45. package/server/dist/mapping-wire.d.ts +0 -58
  46. package/server/dist/mapping.d.ts +0 -99
  47. package/server/dist/panel/compat.d.ts +0 -3
  48. package/server/dist/panel/library.d.ts +0 -6
  49. package/server/dist/panel/mapping.d.ts +0 -1
  50. package/server/dist/panel/session-tasks.d.ts +0 -6
  51. package/server/dist/panel/tasks.d.ts +0 -8
  52. package/server/dist/panel/usage.d.ts +0 -3
  53. package/server/dist/paseo/agents.d.ts +0 -65
  54. package/server/dist/paseo/chat-search.d.ts +0 -18
  55. package/server/dist/paseo/checkout.d.ts +0 -71
  56. package/server/dist/paseo/files.d.ts +0 -19
  57. package/server/dist/paseo/gateway.d.ts +0 -61
  58. package/server/dist/paseo/git.d.ts +0 -21
  59. package/server/dist/paseo/index.d.ts +0 -56
  60. package/server/dist/paseo/plugins.d.ts +0 -17
  61. package/server/dist/paseo/providers.d.ts +0 -19
  62. package/server/dist/paseo/quiet.d.ts +0 -2
  63. package/server/dist/paseo/relay-transport.d.ts +0 -43
  64. package/server/dist/paseo/relay.d.ts +0 -84
  65. package/server/dist/paseo/timeline-items.d.ts +0 -13
  66. package/server/dist/paseo/timeline-projection.d.ts +0 -96
  67. package/server/dist/paseo/timeline-store.d.ts +0 -60
  68. package/server/dist/paseo/usage.d.ts +0 -12
  69. package/server/dist/paseo/workspaces.d.ts +0 -58
  70. package/server/dist/provider-core.d.ts +0 -68
  71. package/server/dist/provider.d.ts +0 -28
  72. package/server/dist/remote/index.d.ts +0 -10
  73. package/server/dist/remote/link.d.ts +0 -58
  74. package/server/dist/remote/panels.d.ts +0 -29
  75. package/server/dist/remote/provider.d.ts +0 -25
  76. package/server/dist/session-tasks.d.ts +0 -1
  77. package/server/dist/shared/library.d.ts +0 -258
  78. package/server/dist/shared/tasks.d.ts +0 -128
  79. package/server/dist/shared/team-models.d.ts +0 -14
  80. package/server/dist/shared/usage.d.ts +0 -27
  81. package/server/dist/tasks.d.ts +0 -1
  82. package/server/dist/usage.d.ts +0 -1
  83. 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.0-beta.1` (not published yet); name it when you install (`@beta`, or
49
- exactly `@0.0.0-beta.1`). See the
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.12.0`, Node.js 22 (22.12 or later) or 24 on Linux or macOS
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.0-beta.1`**: it needs `@anhlp/alp-gateway`, which is not
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
- The existing `paseo plugin add npm:@anhlp/alp-paseo@beta` route for a Paseo host remains
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`
@@ -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)} />
@@ -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.0-beta.1",
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.0-beta.1",
20
- "@anhlp/alp-core": "0.0.0-beta.1",
21
- "@anhlp/alp-runtime": "0.0.0-beta.1",
22
- "@anhlp/alp-daemon": "0.0.0-beta.1",
23
- "@anhlp/alp-client": "0.0.0-beta.1",
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.12.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.12.0",
31
- "@getpaseo/protocol": ">=0.11.1 <0.12.0",
32
- "@getpaseo/relay": ">=0.11.1 <0.12.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.11.1",
98
- "@getpaseo/plugin": "0.11.1",
99
- "@getpaseo/protocol": "0.11.2",
100
- "@getpaseo/relay": "0.11.1",
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
@@ -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 <0.13.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