@getpaseo/cli 0.1.2

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 (170) hide show
  1. package/bin/paseo +2 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +150 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/agent/archive.d.ts +17 -0
  7. package/dist/commands/agent/archive.d.ts.map +1 -0
  8. package/dist/commands/agent/archive.js +91 -0
  9. package/dist/commands/agent/archive.js.map +1 -0
  10. package/dist/commands/agent/attach.d.ts +10 -0
  11. package/dist/commands/agent/attach.d.ts.map +1 -0
  12. package/dist/commands/agent/attach.js +166 -0
  13. package/dist/commands/agent/attach.js.map +1 -0
  14. package/dist/commands/agent/index.d.ts +3 -0
  15. package/dist/commands/agent/index.d.ts.map +1 -0
  16. package/dist/commands/agent/index.js +112 -0
  17. package/dist/commands/agent/index.js.map +1 -0
  18. package/dist/commands/agent/inspect.d.ts +14 -0
  19. package/dist/commands/agent/inspect.d.ts.map +1 -0
  20. package/dist/commands/agent/inspect.js +185 -0
  21. package/dist/commands/agent/inspect.js.map +1 -0
  22. package/dist/commands/agent/logs.d.ts +11 -0
  23. package/dist/commands/agent/logs.d.ts.map +1 -0
  24. package/dist/commands/agent/logs.js +207 -0
  25. package/dist/commands/agent/logs.js.map +1 -0
  26. package/dist/commands/agent/ls.d.ts +34 -0
  27. package/dist/commands/agent/ls.d.ts.map +1 -0
  28. package/dist/commands/agent/ls.js +153 -0
  29. package/dist/commands/agent/ls.js.map +1 -0
  30. package/dist/commands/agent/mode.d.ts +18 -0
  31. package/dist/commands/agent/mode.d.ts.map +1 -0
  32. package/dist/commands/agent/mode.js +97 -0
  33. package/dist/commands/agent/mode.js.map +1 -0
  34. package/dist/commands/agent/run.d.ts +27 -0
  35. package/dist/commands/agent/run.d.ts.map +1 -0
  36. package/dist/commands/agent/run.js +146 -0
  37. package/dist/commands/agent/run.js.map +1 -0
  38. package/dist/commands/agent/send.d.ts +16 -0
  39. package/dist/commands/agent/send.d.ts.map +1 -0
  40. package/dist/commands/agent/send.js +172 -0
  41. package/dist/commands/agent/send.js.map +1 -0
  42. package/dist/commands/agent/stop.d.ts +16 -0
  43. package/dist/commands/agent/stop.d.ts.map +1 -0
  44. package/dist/commands/agent/stop.js +104 -0
  45. package/dist/commands/agent/stop.js.map +1 -0
  46. package/dist/commands/agent/wait.d.ts +16 -0
  47. package/dist/commands/agent/wait.d.ts.map +1 -0
  48. package/dist/commands/agent/wait.js +171 -0
  49. package/dist/commands/agent/wait.js.map +1 -0
  50. package/dist/commands/daemon/index.d.ts +3 -0
  51. package/dist/commands/daemon/index.d.ts.map +1 -0
  52. package/dist/commands/daemon/index.js +41 -0
  53. package/dist/commands/daemon/index.js.map +1 -0
  54. package/dist/commands/daemon/local-daemon.d.ts +51 -0
  55. package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
  56. package/dist/commands/daemon/local-daemon.js +298 -0
  57. package/dist/commands/daemon/local-daemon.js.map +1 -0
  58. package/dist/commands/daemon/pair.d.ts +8 -0
  59. package/dist/commands/daemon/pair.d.ts.map +1 -0
  60. package/dist/commands/daemon/pair.js +34 -0
  61. package/dist/commands/daemon/pair.js.map +1 -0
  62. package/dist/commands/daemon/restart.d.ts +12 -0
  63. package/dist/commands/daemon/restart.d.ts.map +1 -0
  64. package/dist/commands/daemon/restart.js +97 -0
  65. package/dist/commands/daemon/restart.js.map +1 -0
  66. package/dist/commands/daemon/start.d.ts +6 -0
  67. package/dist/commands/daemon/start.d.ts.map +1 -0
  68. package/dist/commands/daemon/start.js +121 -0
  69. package/dist/commands/daemon/start.js.map +1 -0
  70. package/dist/commands/daemon/status.d.ts +10 -0
  71. package/dist/commands/daemon/status.d.ts.map +1 -0
  72. package/dist/commands/daemon/status.js +119 -0
  73. package/dist/commands/daemon/status.js.map +1 -0
  74. package/dist/commands/daemon/stop.d.ts +12 -0
  75. package/dist/commands/daemon/stop.d.ts.map +1 -0
  76. package/dist/commands/daemon/stop.js +56 -0
  77. package/dist/commands/daemon/stop.js.map +1 -0
  78. package/dist/commands/permit/allow.d.ts +20 -0
  79. package/dist/commands/permit/allow.d.ts.map +1 -0
  80. package/dist/commands/permit/allow.js +133 -0
  81. package/dist/commands/permit/allow.js.map +1 -0
  82. package/dist/commands/permit/deny.d.ts +12 -0
  83. package/dist/commands/permit/deny.d.ts.map +1 -0
  84. package/dist/commands/permit/deny.js +105 -0
  85. package/dist/commands/permit/deny.js.map +1 -0
  86. package/dist/commands/permit/index.d.ts +3 -0
  87. package/dist/commands/permit/index.d.ts.map +1 -0
  88. package/dist/commands/permit/index.js +37 -0
  89. package/dist/commands/permit/index.js.map +1 -0
  90. package/dist/commands/permit/ls.d.ts +18 -0
  91. package/dist/commands/permit/ls.d.ts.map +1 -0
  92. package/dist/commands/permit/ls.js +65 -0
  93. package/dist/commands/permit/ls.js.map +1 -0
  94. package/dist/commands/provider/index.d.ts +3 -0
  95. package/dist/commands/provider/index.d.ts.map +1 -0
  96. package/dist/commands/provider/index.js +22 -0
  97. package/dist/commands/provider/index.js.map +1 -0
  98. package/dist/commands/provider/ls.d.ts +17 -0
  99. package/dist/commands/provider/ls.d.ts.map +1 -0
  100. package/dist/commands/provider/ls.js +51 -0
  101. package/dist/commands/provider/ls.js.map +1 -0
  102. package/dist/commands/provider/models.d.ts +16 -0
  103. package/dist/commands/provider/models.d.ts.map +1 -0
  104. package/dist/commands/provider/models.js +45 -0
  105. package/dist/commands/provider/models.js.map +1 -0
  106. package/dist/commands/speech/download.d.ts +14 -0
  107. package/dist/commands/speech/download.d.ts.map +1 -0
  108. package/dist/commands/speech/download.js +46 -0
  109. package/dist/commands/speech/download.js.map +1 -0
  110. package/dist/commands/speech/index.d.ts +3 -0
  111. package/dist/commands/speech/index.d.ts.map +1 -0
  112. package/dist/commands/speech/index.js +25 -0
  113. package/dist/commands/speech/index.js.map +1 -0
  114. package/dist/commands/speech/models.d.ts +16 -0
  115. package/dist/commands/speech/models.d.ts.map +1 -0
  116. package/dist/commands/speech/models.js +49 -0
  117. package/dist/commands/speech/models.js.map +1 -0
  118. package/dist/commands/worktree/archive.d.ts +16 -0
  119. package/dist/commands/worktree/archive.d.ts.map +1 -0
  120. package/dist/commands/worktree/archive.js +98 -0
  121. package/dist/commands/worktree/archive.js.map +1 -0
  122. package/dist/commands/worktree/index.d.ts +3 -0
  123. package/dist/commands/worktree/index.d.ts.map +1 -0
  124. package/dist/commands/worktree/index.js +22 -0
  125. package/dist/commands/worktree/index.js.map +1 -0
  126. package/dist/commands/worktree/ls.d.ts +17 -0
  127. package/dist/commands/worktree/ls.d.ts.map +1 -0
  128. package/dist/commands/worktree/ls.js +89 -0
  129. package/dist/commands/worktree/ls.js.map +1 -0
  130. package/dist/index.d.ts +2 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +7 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/output/index.d.ts +45 -0
  135. package/dist/output/index.d.ts.map +1 -0
  136. package/dist/output/index.js +47 -0
  137. package/dist/output/index.js.map +1 -0
  138. package/dist/output/json.d.ts +11 -0
  139. package/dist/output/json.d.ts.map +1 -0
  140. package/dist/output/json.js +37 -0
  141. package/dist/output/json.js.map +1 -0
  142. package/dist/output/quiet.d.ts +9 -0
  143. package/dist/output/quiet.d.ts.map +1 -0
  144. package/dist/output/quiet.js +22 -0
  145. package/dist/output/quiet.js.map +1 -0
  146. package/dist/output/render.d.ts +15 -0
  147. package/dist/output/render.d.ts.map +1 -0
  148. package/dist/output/render.js +80 -0
  149. package/dist/output/render.js.map +1 -0
  150. package/dist/output/table.d.ts +13 -0
  151. package/dist/output/table.d.ts.map +1 -0
  152. package/dist/output/table.js +135 -0
  153. package/dist/output/table.js.map +1 -0
  154. package/dist/output/types.d.ts +71 -0
  155. package/dist/output/types.d.ts.map +1 -0
  156. package/dist/output/types.js +8 -0
  157. package/dist/output/types.js.map +1 -0
  158. package/dist/output/with-output.d.ts +37 -0
  159. package/dist/output/with-output.d.ts.map +1 -0
  160. package/dist/output/with-output.js +78 -0
  161. package/dist/output/with-output.js.map +1 -0
  162. package/dist/output/yaml.d.ts +11 -0
  163. package/dist/output/yaml.d.ts.map +1 -0
  164. package/dist/output/yaml.js +38 -0
  165. package/dist/output/yaml.js.map +1 -0
  166. package/dist/utils/client.d.ts +35 -0
  167. package/dist/utils/client.d.ts.map +1 -0
  168. package/dist/utils/client.js +110 -0
  169. package/dist/utils/client.js.map +1 -0
  170. package/package.json +39 -0
@@ -0,0 +1,110 @@
1
+ import { DaemonClient } from '@getpaseo/server';
2
+ import WebSocket from 'ws';
3
+ const DEFAULT_HOST = 'localhost:6767';
4
+ const DEFAULT_TIMEOUT = 5000;
5
+ /**
6
+ * Get the daemon host from environment or options
7
+ */
8
+ export function getDaemonHost(options) {
9
+ return options?.host ?? process.env.PASEO_HOST ?? DEFAULT_HOST;
10
+ }
11
+ /**
12
+ * Create a WebSocket factory that works in Node.js
13
+ */
14
+ function createNodeWebSocketFactory() {
15
+ return (url, options) => {
16
+ return new WebSocket(url, { headers: options?.headers });
17
+ };
18
+ }
19
+ /**
20
+ * Create and connect a daemon client
21
+ * Returns the connected client or throws if connection fails
22
+ */
23
+ export async function connectToDaemon(options) {
24
+ const host = getDaemonHost(options);
25
+ const timeout = options?.timeout ?? DEFAULT_TIMEOUT;
26
+ const url = `ws://${host}/ws`;
27
+ const client = new DaemonClient({
28
+ url,
29
+ webSocketFactory: createNodeWebSocketFactory(),
30
+ reconnect: { enabled: false },
31
+ });
32
+ // Connect with timeout
33
+ const connectPromise = client.connect();
34
+ let timeoutHandle = null;
35
+ const timeoutPromise = new Promise((_, reject) => {
36
+ timeoutHandle = setTimeout(() => {
37
+ reject(new Error(`Connection timeout after ${timeout}ms`));
38
+ }, timeout);
39
+ });
40
+ try {
41
+ await Promise.race([connectPromise, timeoutPromise]);
42
+ // Clear the timeout so it doesn't keep the event loop alive
43
+ if (timeoutHandle) {
44
+ clearTimeout(timeoutHandle);
45
+ }
46
+ client.subscribeAgentUpdates({ subscriptionId: `cli:${process.pid}` });
47
+ return client;
48
+ }
49
+ catch (err) {
50
+ // Clear the timeout on error too
51
+ if (timeoutHandle) {
52
+ clearTimeout(timeoutHandle);
53
+ }
54
+ await client.close().catch(() => { });
55
+ throw err;
56
+ }
57
+ }
58
+ /**
59
+ * Try to connect to the daemon, returns null if connection fails
60
+ */
61
+ export async function tryConnectToDaemon(options) {
62
+ try {
63
+ return await connectToDaemon(options);
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ /**
70
+ * Resolve an agent ID from a partial ID or name.
71
+ * Supports:
72
+ * - Full ID match
73
+ * - Prefix match (first N characters)
74
+ * - Title/name match (case-insensitive)
75
+ *
76
+ * Returns the full agent ID if found, null otherwise.
77
+ */
78
+ export function resolveAgentId(idOrName, agents) {
79
+ if (!idOrName || agents.length === 0) {
80
+ return null;
81
+ }
82
+ const query = idOrName.toLowerCase();
83
+ // Try exact ID match first
84
+ const exactMatch = agents.find((a) => a.id === idOrName);
85
+ if (exactMatch) {
86
+ return exactMatch.id;
87
+ }
88
+ // Try ID prefix match
89
+ const prefixMatches = agents.filter((a) => a.id.toLowerCase().startsWith(query));
90
+ if (prefixMatches.length === 1 && prefixMatches[0]) {
91
+ return prefixMatches[0].id;
92
+ }
93
+ // Try title/name match (case-insensitive)
94
+ const titleMatches = agents.filter((a) => a.title?.toLowerCase() === query);
95
+ if (titleMatches.length === 1 && titleMatches[0]) {
96
+ return titleMatches[0].id;
97
+ }
98
+ // Try partial title match
99
+ const partialTitleMatches = agents.filter((a) => a.title?.toLowerCase().includes(query));
100
+ if (partialTitleMatches.length === 1 && partialTitleMatches[0]) {
101
+ return partialTitleMatches[0].id;
102
+ }
103
+ // If we have multiple prefix matches and no unique title match, return first prefix match
104
+ const firstPrefixMatch = prefixMatches[0];
105
+ if (firstPrefixMatch) {
106
+ return firstPrefixMatch.id;
107
+ }
108
+ return null;
109
+ }
110
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@getpaseo/cli",
3
+ "version": "0.1.2",
4
+ "description": "Paseo CLI - control your AI coding agents from the command line",
5
+ "type": "module",
6
+ "files": [
7
+ "bin",
8
+ "dist"
9
+ ],
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "bin": {
14
+ "paseo": "bin/paseo"
15
+ },
16
+ "scripts": {
17
+ "build": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\" && tsc -p tsconfig.json --incremental false",
18
+ "prepack": "npm run build",
19
+ "typecheck": "tsc --noEmit",
20
+ "test:e2e": "npx zx tests/run-all.ts",
21
+ "test:e2e:lifecycle": "npx tsx tests/e2e/agent-lifecycle.test.ts"
22
+ },
23
+ "dependencies": {
24
+ "@getpaseo/relay": "0.1.2",
25
+ "@getpaseo/server": "0.1.2",
26
+ "chalk": "^5.3.0",
27
+ "commander": "^12.0.0",
28
+ "mime-types": "^2.1.35",
29
+ "ws": "^8.14.2",
30
+ "yaml": "^2.8.2"
31
+ },
32
+ "devDependencies": {
33
+ "@types/mime-types": "^3.0.1",
34
+ "@types/ws": "^8.5.8",
35
+ "tsx": "^4.6.0",
36
+ "typescript": "^5.2.2",
37
+ "zx": "^8.8.5"
38
+ }
39
+ }