@anhlp/alp-paseo 0.0.1-beta.4 → 0.0.1-beta.5

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 (49) hide show
  1. package/README.md +6 -0
  2. package/client/tasks-panel.tsx +14 -6
  3. package/client/team-model-settings.tsx +1 -1
  4. package/package.json +6 -6
  5. package/server/dist/THIRD-PARTY-NOTICES.txt +26 -1
  6. package/server/dist/alpd.js +11047 -3021
  7. package/server/dist/index.js +11443 -3324
  8. package/server/dist/library.js +611 -200
  9. package/server/dist/main.js +8064 -1931
  10. package/server/dist/mapping.js +668 -317
  11. package/server/dist/panel/library.js +611 -200
  12. package/server/dist/panel/mapping.js +668 -317
  13. package/server/dist/panel/tasks.js +364 -222
  14. package/server/dist/panel/usage.js +34 -7
  15. package/server/dist/paseo/agents.js +598 -174
  16. package/server/dist/paseo/create-receipts.js +15 -4
  17. package/server/dist/paseo/files.js +143 -246
  18. package/server/dist/paseo/git.js +27 -10
  19. package/server/dist/paseo/index.js +7620 -1726
  20. package/server/dist/paseo/plugins.js +1121 -569
  21. package/server/dist/paseo/providers.js +283 -79
  22. package/server/dist/paseo/relay.js +8 -1
  23. package/server/dist/paseo/terminals.js +5347 -50
  24. package/server/dist/paseo/workspaces.js +60 -15
  25. package/server/dist/provider-core.js +156 -46
  26. package/server/dist/provider.js +10758 -2886
  27. package/server/dist/remote/index.js +187 -57
  28. package/server/dist/remote/link.js +6 -5
  29. package/server/dist/remote/panels.js +14 -11
  30. package/server/dist/remote/provider.js +179 -51
  31. package/server/dist/shutdown.js +39 -0
  32. package/server/dist/tasks.js +364 -222
  33. package/server/dist/terminal-native/README.md +201 -0
  34. package/server/dist/terminal-native/prebuilt/darwin-arm64/manifest.json +11 -0
  35. package/server/dist/terminal-native/prebuilt/darwin-arm64/terminal-owner +0 -0
  36. package/server/dist/terminal-native/prebuilt/darwin-x64/manifest.json +11 -0
  37. package/server/dist/terminal-native/prebuilt/darwin-x64/terminal-owner +0 -0
  38. package/server/dist/terminal-native/prebuilt/linux-arm64-glibc/manifest.json +10 -0
  39. package/server/dist/terminal-native/prebuilt/linux-arm64-glibc/terminal-owner +0 -0
  40. package/server/dist/terminal-native/prebuilt/linux-arm64-musl/manifest.json +10 -0
  41. package/server/dist/terminal-native/prebuilt/linux-arm64-musl/terminal-owner +0 -0
  42. package/server/dist/terminal-native/prebuilt/linux-x64-glibc/manifest.json +10 -0
  43. package/server/dist/terminal-native/prebuilt/linux-x64-glibc/terminal-owner +0 -0
  44. package/server/dist/terminal-native/prebuilt/linux-x64-musl/manifest.json +10 -0
  45. package/server/dist/terminal-native/prebuilt/linux-x64-musl/terminal-owner +0 -0
  46. package/server/dist/terminal-native/terminal-owner.c +389 -0
  47. package/server/dist/usage.js +34 -7
  48. package/server/dist/web.js +25 -8
  49. package/shared/tasks.ts +5 -3
package/README.md CHANGED
@@ -74,6 +74,12 @@ Requires Paseo `>=0.11.1 <1.0.0` (the published `0.0.1-beta.3` declares `<0.13.0
74
74
  (Windows and Node.js 26 are experimental), and an authenticated native Codex or Claude Code
75
75
  executable on PATH.
76
76
 
77
+ Terminals (after `alp terminal allow --paseo`) are guaranteed only on macOS, where the shipped
78
+ native owner ends every process the shell started. Linux and Windows are best-effort: Linux
79
+ falls back to root-only cleanup when full protection is unavailable, and Windows uses the
80
+ platform PTY (ConPTY via node-pty) with no protection helper. Background processes may survive
81
+ close there; the terminal shows a one-line notice when protection is reduced.
82
+
77
83
  ALP sessions run in `alpd`, a per-user daemon from the `@anhlp/alp` package; Paseo
78
84
  only views them. Install the CLI and start the daemon once, so it records where
79
85
  it is installed:
@@ -16,7 +16,7 @@ const POLL_MS = 5000;
16
16
  /** At this width the list and the selected task's detail sit side by side. */
17
17
  const SPLIT_FROM = 820;
18
18
 
19
- type Action = { id: string; action: 'close' | 'reopen' | 'approve'; gate?: string };
19
+ type Action = { id: string; action: 'close' | 'reopen' | 'approve' | 'reject'; gate?: string; choice?: string };
20
20
  export type View_ = 'list' | 'board' | 'epics';
21
21
  export type Filter = 'open' | 'ready' | 'closed' | 'all';
22
22
 
@@ -75,11 +75,11 @@ function useTasks(directory: string | null) {
75
75
  }
76
76
  }, [add, directory, refresh, toast]);
77
77
 
78
- const onAction = useCallback(async ({ id, action, gate }: Action) => {
78
+ const onAction = useCallback(async ({ id, action, gate, choice }: Action) => {
79
79
  if (!directory) return;
80
80
  try {
81
- const { landed } = await change({ directory, id, action, ...(gate ? { gate } : {}) });
82
- toast.show(landed ?? (action === 'approve' ? `Approved ${id}` : action === 'close' ? `Closed ${id}` : `Reopened ${id}`), { variant: 'success' });
81
+ const { landed } = await change({ directory, id, action, ...(gate ? { gate } : {}), ...(choice ? { choice } : {}) });
82
+ toast.show(landed ?? (action === 'approve' ? `Approved ${id}${choice ? `: ${choice}` : ''}` : action === 'reject' ? `Rejected ${id}; the gate stays open` : action === 'close' ? `Closed ${id}` : `Reopened ${id}`), { variant: 'success' });
83
83
  refresh();
84
84
  } catch (cause) {
85
85
  toast.error(cause instanceof Error ? cause.message : String(cause));
@@ -331,7 +331,10 @@ function ListView({ theme, styles, tasks, selected, onOpen, onAction }: { theme:
331
331
  {section.key === 'approve' ? task.approvals!.map(approval => (
332
332
  <View key={approval.gate} style={styles.inlineAction}>
333
333
  <Text style={styles.small} numberOfLines={2}>{approval.note || 'Waiting for your approval'}</Text>
334
- <SmallButton styles={styles} label="Approve" primary onPress={() => onAction({ id: task.id, action: 'approve', gate: approval.gate })} />
334
+ {approval.options?.length
335
+ ? approval.options.map(option => <SmallButton key={option} styles={styles} label={option.slice(0, 40)} primary onPress={() => onAction({ id: task.id, action: 'approve', gate: approval.gate, choice: option })} />)
336
+ : <SmallButton styles={styles} label="Approve" primary onPress={() => onAction({ id: task.id, action: 'approve', gate: approval.gate })} />}
337
+ {!approval.rejected ? <SmallButton styles={styles} label="Reject" onPress={() => onAction({ id: task.id, action: 'reject', gate: approval.gate })} /> : <Text style={styles.small}>Rejected</Text>}
335
338
  </View>
336
339
  )) : null}
337
340
  </View>
@@ -474,7 +477,12 @@ export function TaskDetail({ theme, styles, task, tasks, onBack, onOpen, onActio
474
477
  </View>
475
478
  ) : null}
476
479
  <View style={styles.detailActions}>
477
- {(task.approvals ?? []).map(approval => <SmallButton key={approval.gate} styles={styles} primary label={`Approve${approval.note ? `: ${approval.note.slice(0, 40)}` : ''}`} onPress={() => onAction({ id: task.id, action: 'approve', gate: approval.gate })} />)}
480
+ {(task.approvals ?? []).flatMap(approval => [
481
+ ...(approval.options?.length
482
+ ? approval.options.map(option => <SmallButton key={`${approval.gate}-${option}`} styles={styles} primary label={option.slice(0, 40)} onPress={() => onAction({ id: task.id, action: 'approve', gate: approval.gate, choice: option })} />)
483
+ : [<SmallButton key={approval.gate} styles={styles} primary label={`Approve${approval.note ? `: ${approval.note.slice(0, 40)}` : ''}`} onPress={() => onAction({ id: task.id, action: 'approve', gate: approval.gate })} />]),
484
+ ...(!approval.rejected ? [<SmallButton key={`${approval.gate}-reject`} styles={styles} label="Reject" onPress={() => onAction({ id: task.id, action: 'reject', gate: approval.gate })} />] : []),
485
+ ])}
478
486
  {state === 'review' ? <SmallButton styles={styles} primary label="Accept and close" onPress={() => onAction({ id: task.id, action: 'close' })} /> : null}
479
487
  {task.status !== 'closed' && state !== 'review' && task.type !== 'epic' ? <SmallButton styles={styles} label="Close" onPress={() => onAction({ id: task.id, action: 'close' })} /> : null}
480
488
  {task.status === 'closed' ? <SmallButton styles={styles} label="Reopen" onPress={() => onAction({ id: task.id, action: 'reopen' })} /> : null}
@@ -86,6 +86,6 @@ export function TeamModelSettings({ team, theme, onChange }: { team: Team; theme
86
86
  setCustomFields(previous => ({ ...previous, [`oracle-${lenses.length}`]: true })); })} /> : null}
87
87
  </> : null}
88
88
  </Fragment>}
89
- {JSON.stringify(team).includes('antigravity:') ? <SettingsSection title="Antigravity"><SettingsRow label="Advisory roles" hint={'Reviewer, Oracle and Supervisor require readOnlyMode: "instructions" in the Antigravity provider. Review copies and custom permission rules are unsupported.'} /></SettingsSection> : null}
89
+ {JSON.stringify(team).includes('antigravity:') ? <SettingsSection title="Antigravity"><SettingsRow label="Advisory roles" hint={'agy enforces read-only, workspace-write and full-access itself; a tool the mode does not allow is denied. Review copies and custom permission rules are unsupported.'} /></SettingsSection> : null}
90
90
  </>;
91
91
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anhlp/alp-paseo",
3
- "version": "0.0.1-beta.4",
3
+ "version": "0.0.1-beta.5",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "paseo-plugin.json",
@@ -17,11 +17,11 @@
17
17
  "@anthropic-ai/sdk": "0.131.0",
18
18
  "@modelcontextprotocol/sdk": "1.32.1",
19
19
  "zod": "4.4.3",
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",
20
+ "@anhlp/alp-protocol": "0.0.1-beta.5",
21
+ "@anhlp/alp-core": "0.0.1-beta.5",
22
+ "@anhlp/alp-runtime": "0.0.1-beta.5",
23
+ "@anhlp/alp-daemon": "0.0.1-beta.5",
24
+ "@anhlp/alp-client": "0.0.1-beta.5",
25
25
  "ws": "^8.22.0"
26
26
  },
27
27
  "peerDependencies": {
@@ -461,6 +461,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
461
461
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
462
462
  SOFTWARE.
463
463
 
464
+ ================================================================================
465
+ @xterm/headless@6.0.0 (MIT)
466
+ ================================================================================
467
+
468
+ The package ships no licence file; its package.json declares MIT and the repository https://github.com/xtermjs/xterm.js. The standard MIT text (SPDX):
469
+
470
+ MIT License
471
+
472
+ Copyright (c) <year> <copyright holders>
473
+
474
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
475
+ associated documentation files (the "Software"), to deal in the Software without restriction, including
476
+ without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
477
+ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
478
+ following conditions:
479
+
480
+ The above copyright notice and this permission notice shall be included in all copies or substantial
481
+ portions of the Software.
482
+
483
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
484
+ LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
485
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
486
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
487
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
488
+
464
489
  ================================================================================
465
490
  ajv@8.20.0 (MIT)
466
491
  ================================================================================
@@ -645,7 +670,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
645
670
  SOFTWARE.
646
671
 
647
672
  ================================================================================
648
- fast-uri@3.1.8 (BSD-3-Clause)
673
+ fast-uri@3.1.9 (BSD-3-Clause)
649
674
  ================================================================================
650
675
 
651
676
  Copyright (c) 2011-2021, Gary Court until https://github.com/garycourt/uri-js/commit/a1acf730b4bba3f1097c9f52e7d9d3aba8cdcaae