openpaean 0.4.1 → 0.5.0

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 (75) hide show
  1. package/README.md +16 -1
  2. package/dist/api/client.d.ts +13 -3
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +130 -24
  5. package/dist/api/client.js.map +1 -1
  6. package/dist/api/gateway-api.d.ts +46 -0
  7. package/dist/api/gateway-api.d.ts.map +1 -0
  8. package/dist/api/gateway-api.js +50 -0
  9. package/dist/api/gateway-api.js.map +1 -0
  10. package/dist/api/worker-api.d.ts +94 -0
  11. package/dist/api/worker-api.d.ts.map +1 -0
  12. package/dist/api/worker-api.js +85 -0
  13. package/dist/api/worker-api.js.map +1 -0
  14. package/dist/cli.js +15 -2
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/agent.d.ts +4 -0
  17. package/dist/commands/agent.d.ts.map +1 -1
  18. package/dist/commands/agent.js +57 -5
  19. package/dist/commands/agent.js.map +1 -1
  20. package/dist/commands/gateway.d.ts +8 -0
  21. package/dist/commands/gateway.d.ts.map +1 -0
  22. package/dist/commands/gateway.js +86 -0
  23. package/dist/commands/gateway.js.map +1 -0
  24. package/dist/commands/update.d.ts +7 -0
  25. package/dist/commands/update.d.ts.map +1 -0
  26. package/dist/commands/update.js +92 -0
  27. package/dist/commands/update.js.map +1 -0
  28. package/dist/commands/worker.d.ts +7 -0
  29. package/dist/commands/worker.d.ts.map +1 -0
  30. package/dist/commands/worker.js +283 -0
  31. package/dist/commands/worker.js.map +1 -0
  32. package/dist/gateway/service.d.ts +94 -0
  33. package/dist/gateway/service.d.ts.map +1 -0
  34. package/dist/gateway/service.js +331 -0
  35. package/dist/gateway/service.js.map +1 -0
  36. package/dist/index.d.ts +5 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +7 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/mcp/client.d.ts.map +1 -1
  41. package/dist/mcp/client.js +12 -1
  42. package/dist/mcp/client.js.map +1 -1
  43. package/dist/utils/config.d.ts +13 -0
  44. package/dist/utils/config.d.ts.map +1 -1
  45. package/dist/utils/config.js +24 -0
  46. package/dist/utils/config.js.map +1 -1
  47. package/dist/utils/output.d.ts +4 -0
  48. package/dist/utils/output.d.ts.map +1 -1
  49. package/dist/utils/output.js +17 -0
  50. package/dist/utils/output.js.map +1 -1
  51. package/dist/worker/executors/articulate.d.ts +19 -0
  52. package/dist/worker/executors/articulate.d.ts.map +1 -0
  53. package/dist/worker/executors/articulate.js +147 -0
  54. package/dist/worker/executors/articulate.js.map +1 -0
  55. package/dist/worker/executors/claude.d.ts +17 -0
  56. package/dist/worker/executors/claude.d.ts.map +1 -0
  57. package/dist/worker/executors/claude.js +102 -0
  58. package/dist/worker/executors/claude.js.map +1 -0
  59. package/dist/worker/executors/index.d.ts +26 -0
  60. package/dist/worker/executors/index.d.ts.map +1 -0
  61. package/dist/worker/executors/index.js +81 -0
  62. package/dist/worker/executors/index.js.map +1 -0
  63. package/dist/worker/index.d.ts +9 -0
  64. package/dist/worker/index.d.ts.map +1 -0
  65. package/dist/worker/index.js +9 -0
  66. package/dist/worker/index.js.map +1 -0
  67. package/dist/worker/service.d.ts +48 -0
  68. package/dist/worker/service.d.ts.map +1 -0
  69. package/dist/worker/service.js +551 -0
  70. package/dist/worker/service.js.map +1 -0
  71. package/dist/worker/types.d.ts +133 -0
  72. package/dist/worker/types.d.ts.map +1 -0
  73. package/dist/worker/types.js +70 -0
  74. package/dist/worker/types.js.map +1 -0
  75. package/package.json +8 -3
package/README.md CHANGED
@@ -24,7 +24,14 @@
24
24
  ## Installation
25
25
 
26
26
  ```bash
27
- # Install globally with bun (recommended)
27
+ # Quick install (recommended)
28
+ curl -fsSL https://paean.ai/openpaean/install.sh | bash
29
+ ```
30
+
31
+ Or install manually with a package manager:
32
+
33
+ ```bash
34
+ # Install globally with bun
28
35
  bun add -g openpaean
29
36
 
30
37
  # Or use npm
@@ -34,6 +41,12 @@ npm install -g openpaean
34
41
  npx openpaean
35
42
  ```
36
43
 
44
+ ### Update
45
+
46
+ ```bash
47
+ openpaean update
48
+ ```
49
+
37
50
  ## Quick Start
38
51
 
39
52
  ### 1. Authenticate
@@ -78,6 +91,8 @@ openpaean --no-fullscreen # Disable fullscreen mode
78
91
  openpaean --no-mcp # Disable local MCP integration
79
92
  openpaean -d, --debug # Enable debug logging
80
93
  openpaean -m "message" # Send a single message
94
+ openpaean update # Update to the latest version
95
+ openpaean update --check # Check for updates without installing
81
96
  ```
82
97
 
83
98
  ## Configuration
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Paean API Client
2
+ * OpenPaean API Client
3
3
  * HTTP client for communicating with the Paean AI backend
4
4
  */
5
5
  import { type AxiosInstance } from 'axios';
@@ -16,8 +16,11 @@ export interface ApiResponse<T> {
16
16
  }
17
17
  /**
18
18
  * Create an authenticated API client
19
+ * @param options.clearAuthOn401 - Clear auth on 401 errors (default: true)
19
20
  */
20
- export declare function createApiClient(): AxiosInstance;
21
+ export declare function createApiClient(options?: {
22
+ clearAuthOn401?: boolean;
23
+ }): AxiosInstance;
21
24
  /**
22
25
  * Create an unauthenticated API client (for login flows)
23
26
  */
@@ -25,7 +28,14 @@ export declare function createPublicApiClient(): AxiosInstance;
25
28
  /**
26
29
  * Get the authenticated API client singleton
27
30
  */
28
- export declare function getApiClient(): AxiosInstance;
31
+ export declare function getApiClient(options?: {
32
+ clearAuthOn401?: boolean;
33
+ }): AxiosInstance;
34
+ /**
35
+ * Create a non-clearing API client (doesn't invalidate auth on transient 401s).
36
+ * Used by worker and gateway operations.
37
+ */
38
+ export declare function createNonClearingApiClient(): AxiosInstance;
29
39
  /**
30
40
  * Get the public API client singleton
31
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAE,KAAK,aAAa,EAAmB,MAAM,OAAO,CAAC;AAGnE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAiD/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAiCrD;AAMD;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAK5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAKlD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAE,KAAK,aAAa,EAAoD,MAAM,OAAO,CAAC;AA+BpG,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,aAAa,CA4ErF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAoCrD;AAqDD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,aAAa,CAKlF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,aAAa,CAE1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAKlD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
@@ -1,42 +1,95 @@
1
1
  /**
2
- * Paean API Client
2
+ * OpenPaean API Client
3
3
  * HTTP client for communicating with the Paean AI backend
4
4
  */
5
5
  import axios from 'axios';
6
- import { getToken, getApiUrl, clearAuth } from '../utils/config.js';
6
+ import { readFileSync } from 'fs';
7
+ import { fileURLToPath } from 'url';
8
+ import { dirname, join } from 'path';
9
+ import { getToken, getApiUrl, clearAuth, getRefreshToken, isTokenNearExpiry, storeAuth } from '../utils/config.js';
10
+ const MAX_RETRIES = 3;
11
+ const RETRY_BASE_DELAY_MS = 1000;
12
+ const RETRYABLE_STATUS_CODES = new Set([408, 429, 500, 502, 503, 504]);
13
+ function isRetryableError(error) {
14
+ if (!error.response)
15
+ return true;
16
+ return RETRYABLE_STATUS_CODES.has(error.response.status);
17
+ }
18
+ function sleep(ms) {
19
+ return new Promise(resolve => setTimeout(resolve, ms));
20
+ }
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = dirname(__filename);
23
+ let cliVersion;
24
+ try {
25
+ const packageJson = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
26
+ cliVersion = packageJson.version;
27
+ }
28
+ catch {
29
+ cliVersion = 'unknown';
30
+ }
7
31
  /**
8
32
  * Create an authenticated API client
33
+ * @param options.clearAuthOn401 - Clear auth on 401 errors (default: true)
9
34
  */
10
- export function createApiClient() {
35
+ export function createApiClient(options) {
36
+ const clearAuthOn401 = options?.clearAuthOn401 !== false;
11
37
  const client = axios.create({
12
38
  baseURL: getApiUrl(),
13
39
  timeout: 30000,
14
40
  headers: {
15
41
  'Content-Type': 'application/json',
16
42
  'Accept': 'application/json',
17
- 'User-Agent': 'OpenPaean-CLI/0.1.0',
43
+ 'User-Agent': `OpenPaean-CLI/${cliVersion}`,
18
44
  },
19
45
  });
20
- // Add auth token to requests
21
- client.interceptors.request.use((config) => {
46
+ client.interceptors.request.use(async (config) => {
47
+ if (isTokenNearExpiry()) {
48
+ await refreshAuthToken();
49
+ }
22
50
  const token = getToken();
23
51
  if (token) {
24
52
  config.headers.Authorization = `Bearer ${token}`;
25
53
  }
26
54
  return config;
27
55
  });
28
- // Handle response errors
29
- client.interceptors.response.use((response) => response, (error) => {
30
- // Handle 401 Unauthorized - clear auth and prompt re-login
31
- if (error.response?.status === 401) {
56
+ client.interceptors.response.use((response) => response, async (error) => {
57
+ if (error.response?.status === 401 && clearAuthOn401) {
58
+ const refreshToken = getRefreshToken();
59
+ if (refreshToken && error.config && !error.config._retried) {
60
+ const refreshed = await refreshAuthToken();
61
+ if (refreshed) {
62
+ const config = error.config;
63
+ config._retried = true;
64
+ const token = getToken();
65
+ if (token) {
66
+ config.headers.Authorization = `Bearer ${token}`;
67
+ }
68
+ return client.request(config);
69
+ }
70
+ }
32
71
  clearAuth();
33
72
  }
34
- // Extract error message
35
- const errorMessage = error.response?.data?.error ||
36
- error.response?.data?.message ||
37
- error.message ||
38
- 'An unknown error occurred';
39
- // Create a more informative error
73
+ if (error.config && isRetryableError(error)) {
74
+ const config = error.config;
75
+ config._retryCount = (config._retryCount || 0) + 1;
76
+ if (config._retryCount <= MAX_RETRIES) {
77
+ const delay = RETRY_BASE_DELAY_MS * Math.pow(2, config._retryCount - 1);
78
+ await sleep(delay);
79
+ return client.request(config);
80
+ }
81
+ }
82
+ const rawError = error.response?.data?.error;
83
+ let errorMessage;
84
+ if (typeof rawError === 'string') {
85
+ errorMessage = rawError;
86
+ }
87
+ else if (rawError && typeof rawError === 'object' && typeof rawError.message === 'string') {
88
+ errorMessage = rawError.message;
89
+ }
90
+ else {
91
+ errorMessage = error.response?.data?.message || error.message || 'An unknown error occurred';
92
+ }
40
93
  const enhancedError = new Error(errorMessage);
41
94
  enhancedError.statusCode = error.response?.status;
42
95
  enhancedError.isApiError = true;
@@ -54,15 +107,21 @@ export function createPublicApiClient() {
54
107
  headers: {
55
108
  'Content-Type': 'application/json',
56
109
  'Accept': 'application/json',
57
- 'User-Agent': 'OpenPaean-CLI/0.1.0',
110
+ 'User-Agent': `OpenPaean-CLI/${cliVersion}`,
58
111
  },
59
112
  });
60
- // Handle response errors
61
113
  client.interceptors.response.use((response) => response, (error) => {
62
- const errorMessage = error.response?.data?.error ||
63
- error.response?.data?.message ||
64
- error.message ||
65
- 'An unknown error occurred';
114
+ const rawError = error.response?.data?.error;
115
+ let errorMessage;
116
+ if (typeof rawError === 'string') {
117
+ errorMessage = rawError;
118
+ }
119
+ else if (rawError && typeof rawError === 'object' && typeof rawError.message === 'string') {
120
+ errorMessage = rawError.message;
121
+ }
122
+ else {
123
+ errorMessage = error.response?.data?.message || error.message || 'An unknown error occurred';
124
+ }
66
125
  const enhancedError = new Error(errorMessage);
67
126
  enhancedError.statusCode = error.response?.status;
68
127
  enhancedError.isApiError = true;
@@ -70,18 +129,65 @@ export function createPublicApiClient() {
70
129
  });
71
130
  return client;
72
131
  }
132
+ let isRefreshing = false;
133
+ let refreshPromise = null;
134
+ async function refreshAuthToken() {
135
+ if (isRefreshing && refreshPromise)
136
+ return refreshPromise;
137
+ const refreshToken = getRefreshToken();
138
+ if (!refreshToken)
139
+ return false;
140
+ isRefreshing = true;
141
+ refreshPromise = (async () => {
142
+ try {
143
+ const response = await axios.post(`${getApiUrl()}/auth/refresh-token`, {
144
+ refreshToken,
145
+ }, {
146
+ headers: {
147
+ 'Content-Type': 'application/json',
148
+ 'User-Agent': `OpenPaean-CLI/${cliVersion}`,
149
+ },
150
+ timeout: 10000,
151
+ });
152
+ const data = response.data;
153
+ if (data.token) {
154
+ storeAuth({
155
+ token: data.token,
156
+ expiresAt: data.expiresAt,
157
+ });
158
+ return true;
159
+ }
160
+ return false;
161
+ }
162
+ catch {
163
+ return false;
164
+ }
165
+ finally {
166
+ isRefreshing = false;
167
+ refreshPromise = null;
168
+ }
169
+ })();
170
+ return refreshPromise;
171
+ }
73
172
  // Singleton instances
74
173
  let apiClient = null;
75
174
  let publicApiClient = null;
76
175
  /**
77
176
  * Get the authenticated API client singleton
78
177
  */
79
- export function getApiClient() {
178
+ export function getApiClient(options) {
80
179
  if (!apiClient) {
81
- apiClient = createApiClient();
180
+ apiClient = createApiClient(options);
82
181
  }
83
182
  return apiClient;
84
183
  }
184
+ /**
185
+ * Create a non-clearing API client (doesn't invalidate auth on transient 401s).
186
+ * Used by worker and gateway operations.
187
+ */
188
+ export function createNonClearingApiClient() {
189
+ return createApiClient({ clearAuthOn401: false });
190
+ }
85
191
  /**
86
192
  * Get the public API client singleton
87
193
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Gateway API
3
+ * Client functions for OpenPaean CLI Gateway operations.
4
+ * Uses a non-clearing API client so that transient 401 errors
5
+ * don't invalidate user auth.
6
+ */
7
+ export interface GatewayRequest {
8
+ requestId: string;
9
+ conversationId: number;
10
+ conversationHashKey?: string;
11
+ message: string;
12
+ references?: Array<{
13
+ type: string;
14
+ hashKey: string;
15
+ title: string;
16
+ }>;
17
+ clientType: string;
18
+ createdAt: string;
19
+ }
20
+ export interface GatewayStreamEvent {
21
+ type: string;
22
+ data: Record<string, unknown>;
23
+ }
24
+ export interface GatewayCompletionResult {
25
+ content: string;
26
+ toolCalls?: unknown[];
27
+ error?: string;
28
+ }
29
+ export declare function pollGatewayRequests(sessionId: string, limit?: number): Promise<{
30
+ requests: GatewayRequest[];
31
+ count: number;
32
+ }>;
33
+ export declare function claimGatewayRequest(requestId: string, sessionId: string, deviceName?: string): Promise<{
34
+ success: boolean;
35
+ request?: GatewayRequest;
36
+ error?: string;
37
+ }>;
38
+ export declare function pushGatewayEvents(requestId: string, sessionId: string, events: GatewayStreamEvent[]): Promise<{
39
+ success: boolean;
40
+ error?: string;
41
+ }>;
42
+ export declare function completeGatewayRequest(requestId: string, sessionId: string, result: GatewayCompletionResult): Promise<{
43
+ success: boolean;
44
+ error?: string;
45
+ }>;
46
+ //# sourceMappingURL=gateway-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-api.d.ts","sourceRoot":"","sources":["../../src/api/gateway-api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAU,GAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAOxD;AAED,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQzE;AAED,wBAAsB,iBAAiB,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,EAAE,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/C;AAED,wBAAsB,sBAAsB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,uBAAuB,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/C"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Gateway API
3
+ * Client functions for OpenPaean CLI Gateway operations.
4
+ * Uses a non-clearing API client so that transient 401 errors
5
+ * don't invalidate user auth.
6
+ */
7
+ import { createNonClearingApiClient } from './client.js';
8
+ function getClient() {
9
+ return createNonClearingApiClient();
10
+ }
11
+ // ============================================
12
+ // API Functions
13
+ // ============================================
14
+ export async function pollGatewayRequests(sessionId, limit = 5) {
15
+ const client = getClient();
16
+ const response = await client.post('/agent/gateway/poll', { sessionId, limit });
17
+ return response.data.data;
18
+ }
19
+ export async function claimGatewayRequest(requestId, sessionId, deviceName) {
20
+ const client = getClient();
21
+ const response = await client.post(`/agent/gateway/claim/${requestId}`, { sessionId, deviceName });
22
+ return response.data;
23
+ }
24
+ export async function pushGatewayEvents(requestId, sessionId, events) {
25
+ const client = getClient();
26
+ try {
27
+ const response = await client.post(`/agent/gateway/events/${requestId}`, { sessionId, events });
28
+ return response.data;
29
+ }
30
+ catch (error) {
31
+ return {
32
+ success: false,
33
+ error: error instanceof Error ? error.message : 'Unknown error',
34
+ };
35
+ }
36
+ }
37
+ export async function completeGatewayRequest(requestId, sessionId, result) {
38
+ const client = getClient();
39
+ try {
40
+ const response = await client.post(`/agent/gateway/complete/${requestId}`, { sessionId, result });
41
+ return response.data;
42
+ }
43
+ catch (error) {
44
+ return {
45
+ success: false,
46
+ error: error instanceof Error ? error.message : 'Unknown error',
47
+ };
48
+ }
49
+ }
50
+ //# sourceMappingURL=gateway-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-api.js","sourceRoot":"","sources":["../../src/api/gateway-api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,SAAS,SAAS;IACd,OAAO,0BAA0B,EAAE,CAAC;AACxC,CAAC;AA2BD,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,SAAiB,EACjB,QAAgB,CAAC;IAEjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAG/B,qBAAqB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,SAAiB,EACjB,SAAiB,EACjB,UAAmB;IAEnB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAI/B,wBAAwB,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IACnE,OAAO,QAAQ,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,SAAiB,EACjB,SAAiB,EACjB,MAA4B;IAE5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,yBAAyB,SAAS,EAAE,EACpC,EAAE,SAAS,EAAE,MAAM,EAAE,CACxB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAClE,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,SAAiB,EACjB,SAAiB,EACjB,MAA+B;IAE/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,2BAA2B,SAAS,EAAE,EACtC,EAAE,SAAS,EAAE,MAAM,EAAE,CACxB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAClE,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Worker API
3
+ * Specialized API client for OpenPaean CLI Worker operations.
4
+ *
5
+ * All Worker API calls use a non-clearing API client so that
6
+ * transient 401 errors don't invalidate the user's auth state.
7
+ */
8
+ import type { TodoItem } from './todo.js';
9
+ export interface CliPayload {
10
+ hint?: string;
11
+ workingDirectory?: string;
12
+ timeout?: number;
13
+ requiresConfirmation?: boolean;
14
+ context?: Record<string, unknown>;
15
+ allowedPaths?: string[];
16
+ }
17
+ export interface WorkerTask extends TodoItem {
18
+ taskType: 'remote-agent';
19
+ cliPayload?: CliPayload;
20
+ claimedBySessionId?: string;
21
+ claimedByDeviceName?: string;
22
+ claimedAt?: string;
23
+ }
24
+ export type WorkerStatus = 'idle' | 'running' | 'paused';
25
+ export interface WorkerHeartbeatInput {
26
+ status: WorkerStatus;
27
+ currentTaskId?: string;
28
+ completedCount?: number;
29
+ failedCount?: number;
30
+ workingDirectory?: string;
31
+ capabilities?: string[];
32
+ }
33
+ export type ProgressStage = 'started' | 'executing' | 'verifying' | 'waiting_confirmation';
34
+ export interface TaskProgressInput {
35
+ stage: ProgressStage;
36
+ message?: string;
37
+ percentage?: number;
38
+ }
39
+ export interface TaskExecutionResult {
40
+ success: boolean;
41
+ output?: string;
42
+ artifacts?: Array<{
43
+ type: 'file' | 'text';
44
+ name: string;
45
+ content: string;
46
+ }>;
47
+ durationMs?: number;
48
+ }
49
+ export interface ActiveWorker {
50
+ sessionId: string;
51
+ deviceName: string;
52
+ deviceType: string;
53
+ status: WorkerStatus;
54
+ capabilities: string[];
55
+ currentTaskId?: string;
56
+ lastHeartbeat?: string;
57
+ }
58
+ export declare function pollWorkerTasks(options?: {
59
+ sessionId: string;
60
+ taskTypes?: Array<'remote-agent'>;
61
+ tags?: string[];
62
+ limit?: number;
63
+ }): Promise<{
64
+ tasks: WorkerTask[];
65
+ count: number;
66
+ }>;
67
+ export declare function claimTask(taskId: string, sessionId: string, deviceName?: string): Promise<{
68
+ success: boolean;
69
+ task?: WorkerTask;
70
+ error?: string;
71
+ }>;
72
+ export declare function releaseTask(taskId: string, sessionId: string, reason?: string): Promise<{
73
+ success: boolean;
74
+ error?: string;
75
+ }>;
76
+ export declare function sendHeartbeat(sessionId: string, input: WorkerHeartbeatInput): Promise<{
77
+ success: boolean;
78
+ error?: string;
79
+ }>;
80
+ export declare function reportProgress(taskId: string, sessionId: string, progress: TaskProgressInput): Promise<{
81
+ success: boolean;
82
+ subtaskId?: string;
83
+ error?: string;
84
+ }>;
85
+ export declare function completeWorkerTask(taskId: string, sessionId: string, result: TaskExecutionResult): Promise<{
86
+ success: boolean;
87
+ error?: string;
88
+ }>;
89
+ export declare function checkConfirmation(taskId: string, subtaskId: string): Promise<{
90
+ approved: boolean;
91
+ error?: string;
92
+ }>;
93
+ export declare function getActiveWorkers(): Promise<ActiveWorker[]>;
94
+ //# sourceMappingURL=worker-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-api.d.ts","sourceRoot":"","sources":["../../src/api/worker-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Worker API
3
+ * Specialized API client for OpenPaean CLI Worker operations.
4
+ *
5
+ * All Worker API calls use a non-clearing API client so that
6
+ * transient 401 errors don't invalidate the user's auth state.
7
+ */
8
+ import { createNonClearingApiClient } from './client.js';
9
+ function getWorkerApiClient() {
10
+ return createNonClearingApiClient();
11
+ }
12
+ // ============================================
13
+ // API Functions
14
+ // ============================================
15
+ export async function pollWorkerTasks(options) {
16
+ const client = getWorkerApiClient();
17
+ const response = await client.post('/sdk/worker/poll', options);
18
+ return response.data.data;
19
+ }
20
+ export async function claimTask(taskId, sessionId, deviceName) {
21
+ const client = getWorkerApiClient();
22
+ const response = await client.post(`/sdk/worker/claim/${taskId}`, { sessionId, deviceName });
23
+ return response.data;
24
+ }
25
+ export async function releaseTask(taskId, sessionId, reason) {
26
+ const client = getWorkerApiClient();
27
+ try {
28
+ const response = await client.post(`/sdk/worker/release/${taskId}`, { sessionId, reason });
29
+ return response.data;
30
+ }
31
+ catch (error) {
32
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
33
+ }
34
+ }
35
+ export async function sendHeartbeat(sessionId, input) {
36
+ const client = getWorkerApiClient();
37
+ try {
38
+ const response = await client.post('/sdk/worker/heartbeat', { sessionId, ...input });
39
+ return response.data;
40
+ }
41
+ catch (error) {
42
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
43
+ }
44
+ }
45
+ export async function reportProgress(taskId, sessionId, progress) {
46
+ const client = getWorkerApiClient();
47
+ try {
48
+ const response = await client.post(`/sdk/worker/progress/${taskId}`, { sessionId, ...progress });
49
+ return response.data;
50
+ }
51
+ catch (error) {
52
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
53
+ }
54
+ }
55
+ export async function completeWorkerTask(taskId, sessionId, result) {
56
+ const client = getWorkerApiClient();
57
+ try {
58
+ const response = await client.post(`/sdk/worker/complete/${taskId}`, { sessionId, result });
59
+ return response.data;
60
+ }
61
+ catch (error) {
62
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
63
+ }
64
+ }
65
+ export async function checkConfirmation(taskId, subtaskId) {
66
+ const client = getWorkerApiClient();
67
+ try {
68
+ const response = await client.get(`/sdk/worker/confirmation/${taskId}/${subtaskId}`);
69
+ return { approved: response.data.approved };
70
+ }
71
+ catch (error) {
72
+ return { approved: false, error: error instanceof Error ? error.message : 'Unknown error' };
73
+ }
74
+ }
75
+ export async function getActiveWorkers() {
76
+ const client = getWorkerApiClient();
77
+ try {
78
+ const response = await client.get('/sdk/worker/active');
79
+ return response.data.data;
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ }
85
+ //# sourceMappingURL=worker-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-api.js","sourceRoot":"","sources":["../../src/api/worker-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,SAAS,kBAAkB;IACvB,OAAO,0BAA0B,EAAE,CAAC;AACxC,CAAC;AA+DD,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAKrC;IACG,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAG/B,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,MAAc,EACd,SAAiB,EACjB,UAAmB;IAEnB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAI/B,qBAAqB,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,MAAc,EACd,SAAiB,EACjB,MAAe;IAEf,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,uBAAuB,MAAM,EAAE,EAC/B,EAAE,SAAS,EAAE,MAAM,EAAE,CACxB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,SAAiB,EACjB,KAA2B;IAE3B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,uBAAuB,EACvB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAC1B,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAc,EACd,SAAiB,EACjB,QAA2B;IAE3B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAI/B,wBAAwB,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,MAAc,EACd,SAAiB,EACjB,MAA2B;IAE3B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,wBAAwB,MAAM,EAAE,EAChC,EAAE,SAAS,EAAE,MAAM,EAAE,CACxB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAc,EACd,SAAiB;IAEjB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAI9B,4BAA4B,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAChG,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAG9B,oBAAoB,CAAC,CAAC;QACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC"}