openpaean 0.7.12 → 0.7.14

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 (72) hide show
  1. package/dist/api/gateway-api.d.ts +1 -0
  2. package/dist/api/gateway-api.d.ts.map +1 -1
  3. package/dist/api/gateway-api.js +1 -0
  4. package/dist/api/gateway-api.js.map +1 -1
  5. package/dist/api/worker-api.d.ts +6 -76
  6. package/dist/api/worker-api.d.ts.map +1 -1
  7. package/dist/api/worker-api.js +6 -63
  8. package/dist/api/worker-api.js.map +1 -1
  9. package/dist/cli.js +2 -0
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands/agent.d.ts +1 -0
  12. package/dist/commands/agent.d.ts.map +1 -1
  13. package/dist/commands/agent.js +3 -0
  14. package/dist/commands/agent.js.map +1 -1
  15. package/dist/gateway/service.d.ts +2 -0
  16. package/dist/gateway/service.d.ts.map +1 -1
  17. package/dist/gateway/service.js +8 -1
  18. package/dist/gateway/service.js.map +1 -1
  19. package/dist/mcp/client.d.ts +1 -1
  20. package/dist/mcp/client.d.ts.map +1 -1
  21. package/dist/mcp/client.js +25 -2
  22. package/dist/mcp/client.js.map +1 -1
  23. package/dist/mcp/context-tools.d.ts.map +1 -1
  24. package/dist/mcp/context-tools.js +1 -0
  25. package/dist/mcp/context-tools.js.map +1 -1
  26. package/dist/mcp/loop.d.ts.map +1 -1
  27. package/dist/mcp/loop.js +1 -0
  28. package/dist/mcp/loop.js.map +1 -1
  29. package/dist/ui/hooks/useAgentStream.d.ts.map +1 -1
  30. package/dist/ui/hooks/useAgentStream.js +12 -6
  31. package/dist/ui/hooks/useAgentStream.js.map +1 -1
  32. package/package.json +1 -1
  33. package/dist/commands/worker.d.ts +0 -7
  34. package/dist/commands/worker.d.ts.map +0 -1
  35. package/dist/commands/worker.js +0 -284
  36. package/dist/commands/worker.js.map +0 -1
  37. package/dist/ui/terminal/ErrorDisplay.d.ts +0 -63
  38. package/dist/ui/terminal/ErrorDisplay.d.ts.map +0 -1
  39. package/dist/ui/terminal/ErrorDisplay.js +0 -113
  40. package/dist/ui/terminal/ErrorDisplay.js.map +0 -1
  41. package/dist/ui/terminal/HelpDisplay.d.ts +0 -21
  42. package/dist/ui/terminal/HelpDisplay.d.ts.map +0 -1
  43. package/dist/ui/terminal/HelpDisplay.js +0 -89
  44. package/dist/ui/terminal/HelpDisplay.js.map +0 -1
  45. package/dist/worker/executors/articulate.d.ts +0 -19
  46. package/dist/worker/executors/articulate.d.ts.map +0 -1
  47. package/dist/worker/executors/articulate.js +0 -147
  48. package/dist/worker/executors/articulate.js.map +0 -1
  49. package/dist/worker/executors/claude.d.ts +0 -17
  50. package/dist/worker/executors/claude.d.ts.map +0 -1
  51. package/dist/worker/executors/claude.js +0 -102
  52. package/dist/worker/executors/claude.js.map +0 -1
  53. package/dist/worker/executors/index.d.ts +0 -26
  54. package/dist/worker/executors/index.d.ts.map +0 -1
  55. package/dist/worker/executors/index.js +0 -81
  56. package/dist/worker/executors/index.js.map +0 -1
  57. package/dist/worker/executors/paeanclaw.d.ts +0 -22
  58. package/dist/worker/executors/paeanclaw.d.ts.map +0 -1
  59. package/dist/worker/executors/paeanclaw.js +0 -182
  60. package/dist/worker/executors/paeanclaw.js.map +0 -1
  61. package/dist/worker/index.d.ts +0 -10
  62. package/dist/worker/index.d.ts.map +0 -1
  63. package/dist/worker/index.js +0 -10
  64. package/dist/worker/index.js.map +0 -1
  65. package/dist/worker/service.d.ts +0 -48
  66. package/dist/worker/service.d.ts.map +0 -1
  67. package/dist/worker/service.js +0 -559
  68. package/dist/worker/service.js.map +0 -1
  69. package/dist/worker/types.d.ts +0 -134
  70. package/dist/worker/types.d.ts.map +0 -1
  71. package/dist/worker/types.js +0 -71
  72. package/dist/worker/types.js.map +0 -1
@@ -1,134 +0,0 @@
1
- /**
2
- * Worker Types
3
- * Type definitions for the OpenPaean Local Autonomous Worker
4
- */
5
- import type { TodoItem } from '../api/todo.js';
6
- export interface WorkerConfig {
7
- pollInterval: number;
8
- maxRetries: number;
9
- taskTimeout: number;
10
- cooldownOnError: number;
11
- verificationEnabled: boolean;
12
- workingDirectory?: string;
13
- debug?: boolean;
14
- autonomousMode?: boolean;
15
- }
16
- export declare const DEFAULT_WORKER_CONFIG: WorkerConfig;
17
- export interface TaskContext {
18
- task: TodoItem;
19
- attempt: number;
20
- maxRetries: number;
21
- previousFailureSummary?: string;
22
- startedAt: Date;
23
- conversationId?: string;
24
- }
25
- export type WorkerStatus = 'idle' | 'running' | 'paused' | 'stopping' | 'error';
26
- export interface WorkerState {
27
- status: WorkerStatus;
28
- currentTask?: TaskContext;
29
- completedCount: number;
30
- failedCount: number;
31
- startedAt?: Date;
32
- lastError?: string;
33
- lastPollAt?: Date;
34
- }
35
- export interface TaskResult {
36
- success: boolean;
37
- message?: string;
38
- verificationPassed?: boolean;
39
- error?: string;
40
- durationMs?: number;
41
- }
42
- export type WorkerEvent = {
43
- type: 'started';
44
- } | {
45
- type: 'stopped';
46
- } | {
47
- type: 'paused';
48
- } | {
49
- type: 'resumed';
50
- } | {
51
- type: 'task_claimed';
52
- task: TodoItem;
53
- } | {
54
- type: 'task_started';
55
- task: TodoItem;
56
- attempt: number;
57
- } | {
58
- type: 'task_completed';
59
- task: TodoItem;
60
- duration: number;
61
- } | {
62
- type: 'task_failed';
63
- task: TodoItem;
64
- error: string;
65
- willRetry: boolean;
66
- } | {
67
- type: 'task_verification_failed';
68
- task: TodoItem;
69
- } | {
70
- type: 'poll_empty';
71
- } | {
72
- type: 'error';
73
- error: string;
74
- } | {
75
- type: 'worker_content';
76
- text: string;
77
- partial: boolean;
78
- } | {
79
- type: 'worker_tool_call';
80
- id: string;
81
- name: string;
82
- isMcp: boolean;
83
- serverName?: string;
84
- } | {
85
- type: 'worker_tool_result';
86
- id: string;
87
- name: string;
88
- status: 'completed' | 'error';
89
- } | {
90
- type: 'worker_done';
91
- taskId: string;
92
- success: boolean;
93
- output?: string;
94
- };
95
- export type WorkerEventHandler = (event: WorkerEvent) => void;
96
- export type ExecutorType = 'internal' | 'claude' | 'gemini' | 'cursor' | 'codex' | 'opencode' | 'articulate' | 'paeanclaw' | 'shell';
97
- export interface ExecutorConfig {
98
- type: ExecutorType;
99
- enabled: boolean;
100
- path?: string;
101
- defaultArgs?: string[];
102
- timeout?: number;
103
- }
104
- export type AvailabilityAuthStatus = 'authenticated' | 'unauthenticated' | 'expired' | 'unknown';
105
- export interface AvailabilityStatus {
106
- available: boolean;
107
- binaryExists: boolean;
108
- binaryPath?: string;
109
- authStatus: AvailabilityAuthStatus;
110
- authMessage?: string;
111
- version?: string;
112
- error?: string;
113
- }
114
- export interface ExecutorOptions {
115
- cwd?: string;
116
- timeout?: number;
117
- args?: string[];
118
- env?: Record<string, string>;
119
- skipPermissions?: boolean;
120
- captureOutput?: boolean;
121
- onOutput?: (text: string, stream: 'stdout' | 'stderr') => void;
122
- onProgress?: (message: string) => void;
123
- }
124
- export interface ExecutorResult {
125
- success: boolean;
126
- output: string;
127
- error?: string;
128
- exitCode?: number;
129
- durationMs: number;
130
- structured?: Record<string, unknown>;
131
- }
132
- export declare const DEFAULT_EXECUTOR_CONFIG: Partial<Record<ExecutorType, ExecutorConfig>>;
133
- export declare function buildTaskPrompt(ctx: TaskContext): string;
134
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/worker/types.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- /**
2
- * Worker Types
3
- * Type definitions for the OpenPaean Local Autonomous Worker
4
- */
5
- import os from 'os';
6
- export const DEFAULT_WORKER_CONFIG = {
7
- pollInterval: 30000,
8
- maxRetries: 3,
9
- taskTimeout: 600000,
10
- cooldownOnError: 60000,
11
- verificationEnabled: true,
12
- autonomousMode: true,
13
- };
14
- export const DEFAULT_EXECUTOR_CONFIG = {
15
- internal: { type: 'internal', enabled: true },
16
- claude: { type: 'claude', enabled: true, timeout: 900000 },
17
- gemini: { type: 'gemini', enabled: true, timeout: 600000 },
18
- cursor: { type: 'cursor', enabled: true, timeout: 600000 },
19
- codex: { type: 'codex', enabled: true, timeout: 600000 },
20
- opencode: { type: 'opencode', enabled: true, timeout: 600000 },
21
- articulate: { type: 'articulate', enabled: true, timeout: 600000 },
22
- paeanclaw: { type: 'paeanclaw', enabled: true, timeout: 600000 },
23
- };
24
- export function buildTaskPrompt(ctx) {
25
- const task = ctx.task;
26
- const cliPayload = task.cliPayload;
27
- const workingDir = cliPayload?.workingDirectory || process.cwd();
28
- const basePrompt = `You are an autonomous AI assistant running on the user's local machine.
29
- You have access to both local tools (filesystem, terminal, git) and cloud tools (notes, todos, search).
30
-
31
- ## Task
32
- ID: ${ctx.task.id}
33
- Content: ${ctx.task.content}
34
- Priority: ${ctx.task.priority}
35
- ${ctx.task.description ? `\nDetails: ${ctx.task.description}` : ''}
36
- ${ctx.task.tags?.length ? `\nTags: ${ctx.task.tags.join(', ')}` : ''}
37
- ${cliPayload?.hint ? `\nHint: ${cliPayload.hint}` : ''}
38
-
39
- ## Your Environment
40
- - Working Directory: ${workingDir}
41
- - Device: ${process.env.HOSTNAME || os.hostname()}
42
- - Platform: ${process.platform}
43
- ${cliPayload?.context ? `\nAdditional Context: ${JSON.stringify(cliPayload.context)}` : ''}
44
-
45
- ## Instructions
46
- 1. Analyze what needs to be done
47
- 2. Use available tools to complete the task autonomously
48
- 3. Verify your work is correct
49
- 4. Call paean_complete_task when finished
50
-
51
- ## Available Tool Categories
52
- - **Local MCP**: File read/write, shell commands, git operations
53
- - **Cloud MCP**: Notes, todos, search, transcriptions
54
-
55
- ## Important
56
- - You have full autonomy to decide HOW to complete the task
57
- - Use your best judgment on which tools to use
58
- - If you encounter errors, try alternative approaches
59
- - Ask for confirmation only for potentially destructive operations
60
- `;
61
- if (ctx.attempt > 1 && ctx.previousFailureSummary) {
62
- return `${basePrompt}
63
- ## Previous Attempt Failed (Attempt ${ctx.attempt}/${ctx.maxRetries})
64
- ${ctx.previousFailureSummary}
65
-
66
- Please review the previous failure and try a different approach.
67
- `;
68
- }
69
- return basePrompt;
70
- }
71
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/worker/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAcpB,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IAC/C,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,KAAK;IACtB,mBAAmB,EAAE,IAAI;IACzB,cAAc,EAAE,IAAI;CACvB,CAAC;AAyGF,MAAM,CAAC,MAAM,uBAAuB,GAAkD;IAClF,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IACxD,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9D,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;IAClE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;CACnE,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,GAAgB;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAwG,CAAC;IAC1H,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,MAAM,UAAU,GAAG,UAAU,EAAE,gBAAgB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjE,MAAM,UAAU,GAAG;;;;MAIjB,GAAG,CAAC,IAAI,CAAC,EAAE;WACN,GAAG,CAAC,IAAI,CAAC,OAAO;YACf,GAAG,CAAC,IAAI,CAAC,QAAQ;EAC3B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;EAChE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;EAClE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;uBAG/B,UAAU;YACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE;cACnC,OAAO,CAAC,QAAQ;EAC5B,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;CAiBzF,CAAC;IAEE,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAChD,OAAO,GAAG,UAAU;sCACU,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU;EACjE,GAAG,CAAC,sBAAsB;;;CAG3B,CAAC;IACE,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}