paean 0.4.2 → 0.6.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.
- package/CHANGELOG.md +114 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/worker.d.ts +7 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +321 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/system.d.ts +30 -0
- package/dist/mcp/system.d.ts.map +1 -0
- package/dist/mcp/system.js +530 -0
- package/dist/mcp/system.js.map +1 -0
- package/dist/mcp/tools.d.ts +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +5 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/ui/theme/branding.d.ts.map +1 -1
- package/dist/ui/theme/branding.js +2 -7
- package/dist/ui/theme/branding.js.map +1 -1
- package/dist/worker/executors/claude.d.ts +29 -0
- package/dist/worker/executors/claude.d.ts.map +1 -0
- package/dist/worker/executors/claude.js +114 -0
- package/dist/worker/executors/claude.js.map +1 -0
- package/dist/worker/executors/codex.d.ts +29 -0
- package/dist/worker/executors/codex.d.ts.map +1 -0
- package/dist/worker/executors/codex.js +126 -0
- package/dist/worker/executors/codex.js.map +1 -0
- package/dist/worker/executors/cursor.d.ts +29 -0
- package/dist/worker/executors/cursor.d.ts.map +1 -0
- package/dist/worker/executors/cursor.js +136 -0
- package/dist/worker/executors/cursor.js.map +1 -0
- package/dist/worker/executors/gemini.d.ts +29 -0
- package/dist/worker/executors/gemini.d.ts.map +1 -0
- package/dist/worker/executors/gemini.js +129 -0
- package/dist/worker/executors/gemini.js.map +1 -0
- package/dist/worker/executors/index.d.ts +56 -0
- package/dist/worker/executors/index.d.ts.map +1 -0
- package/dist/worker/executors/index.js +108 -0
- package/dist/worker/executors/index.js.map +1 -0
- package/dist/worker/executors/internal.d.ts +23 -0
- package/dist/worker/executors/internal.d.ts.map +1 -0
- package/dist/worker/executors/internal.js +77 -0
- package/dist/worker/executors/internal.js.map +1 -0
- package/dist/worker/executors/opencode.d.ts +31 -0
- package/dist/worker/executors/opencode.d.ts.map +1 -0
- package/dist/worker/executors/opencode.js +129 -0
- package/dist/worker/executors/opencode.js.map +1 -0
- package/dist/worker/index.d.ts +14 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +17 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/service.d.ts +72 -0
- package/dist/worker/service.d.ts.map +1 -0
- package/dist/worker/service.js +435 -0
- package/dist/worker/service.js.map +1 -0
- package/dist/worker/supervisor.d.ts +83 -0
- package/dist/worker/supervisor.d.ts.map +1 -0
- package/dist/worker/supervisor.js +412 -0
- package/dist/worker/supervisor.js.map +1 -0
- package/dist/worker/types.d.ts +278 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +71 -0
- package/dist/worker/types.js.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,119 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.0] - Intelligent Worker Sub-Agent (2026-01-21)
|
|
4
|
+
|
|
5
|
+
### 🚀 Major Features
|
|
6
|
+
|
|
7
|
+
#### Natural Language Prompt Mode (`paean worker prompt`)
|
|
8
|
+
- **New Command**: `paean worker prompt "Your task"` - Execute tasks using natural language
|
|
9
|
+
- **Supervisor Agent**: Intelligent task grooming and executor routing
|
|
10
|
+
- **Multi-Agent Support**: Route tasks to Claude, Gemini, Cursor, or Codex based on complexity
|
|
11
|
+
- **Dry-Run Mode**: Preview execution plan without running (`--dry-run`)
|
|
12
|
+
- **Persistent Tasks**: Create tasks for later execution (`--create-task`)
|
|
13
|
+
|
|
14
|
+
#### Multi-Agent Executor Framework
|
|
15
|
+
- **Internal Executor**: Built-in Paean agent for standard tasks
|
|
16
|
+
- **Claude CLI Executor**: Integration with Claude Code CLI for complex refactoring
|
|
17
|
+
- **Gemini CLI Executor**: Integration with Gemini CLI for analysis tasks
|
|
18
|
+
- **Cursor CLI Executor**: Integration with Cursor Agent for context-aware edits
|
|
19
|
+
- **Codex CLI Executor**: Integration with OpenAI Codex CLI for code generation
|
|
20
|
+
- **OpenCode CLI Executor**: Integration with OpenCode CLI for AI-assisted coding
|
|
21
|
+
|
|
22
|
+
#### Supervisor Architecture
|
|
23
|
+
- **Task Grooming**: Transforms natural language into structured prompts
|
|
24
|
+
- **Intelligent Routing**: Selects executor based on task complexity and tags
|
|
25
|
+
- **Semantic Verification**: LLM-based diff analysis for completion validation
|
|
26
|
+
- **Failure Recovery**: Smart retry strategies including executor switching
|
|
27
|
+
|
|
28
|
+
### 📦 New Exports
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// Supervisor Agent
|
|
32
|
+
export { SupervisorAgent, getSupervisor } from 'paean';
|
|
33
|
+
export type { SupervisorDecision, VerificationResult, RecoveryStrategy } from 'paean';
|
|
34
|
+
|
|
35
|
+
// Executor Framework
|
|
36
|
+
export { ExecutorRegistry, getExecutorRegistry } from 'paean';
|
|
37
|
+
export { InternalExecutor, ClaudeExecutor, GeminiExecutor, CursorExecutor, CodexExecutor } from 'paean';
|
|
38
|
+
export type { AgentExecutor, ExecutorType, ExecutorConfig, ExecutorResult } from 'paean';
|
|
39
|
+
|
|
40
|
+
// Prompt Command Types
|
|
41
|
+
export type { PromptCommandOptions, PromptResult } from 'paean';
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 🔧 Configuration Options
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Natural language prompt execution
|
|
48
|
+
paean worker prompt "Refactor the auth module"
|
|
49
|
+
paean worker prompt -p "Fix login bug" --executor claude
|
|
50
|
+
paean worker prompt "Analyze code" --dry-run
|
|
51
|
+
paean worker prompt "Add feature" --create-task --priority high
|
|
52
|
+
paean worker prompt "Task" -v --auto-approve
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 🏗️ Architecture Improvements
|
|
56
|
+
|
|
57
|
+
- **SupervisorAgent Class**: Cloud-based and local heuristic task grooming
|
|
58
|
+
- **ExecutorRegistry**: Modular executor registration and availability checking
|
|
59
|
+
- **Shell Spawning**: Safe subprocess management with timeout handling
|
|
60
|
+
- **Graceful Degradation**: Falls back to internal executor if external unavailable
|
|
61
|
+
|
|
62
|
+
### 🔧 New MCP Tools
|
|
63
|
+
|
|
64
|
+
- **paean_worker_execute_prompt**: Main agent can delegate tasks to local sub-agents
|
|
65
|
+
- Supports background execution for async task spawning
|
|
66
|
+
- Choices: internal/claude/gemini/cursor/codex executors
|
|
67
|
+
- Dry-run mode for task analysis without execution
|
|
68
|
+
- **paean_worker_status**: Monitor background worker tasks by PID
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## [0.5.0] - Local Autonomous Worker Extension (2026-01-21)
|
|
73
|
+
|
|
74
|
+
### 🚀 Major Features
|
|
75
|
+
|
|
76
|
+
#### Local Autonomous Worker (`paean worker`)
|
|
77
|
+
- **New Command**: `paean worker start` - Start autonomous task execution loop
|
|
78
|
+
- **24-Hour Operation**: Persistent task polling and execution without manual intervention
|
|
79
|
+
- **Self-Healing**: Automatic retry with failure context for failed tasks
|
|
80
|
+
- **Verification Loop**: Built-in task verification after execution
|
|
81
|
+
- **Graceful Shutdown**: Ctrl+C to stop with proper task release
|
|
82
|
+
|
|
83
|
+
#### Shell Execution Tools (System MCP)
|
|
84
|
+
- **New Tool**: `paean_execute_shell` - Execute shell commands with whitelist protection
|
|
85
|
+
- **New Tool**: `paean_check_process` - Check if a process is running by name or PID
|
|
86
|
+
- **New Tool**: `paean_kill_process` - Terminate processes gracefully
|
|
87
|
+
- **Security**: Command whitelist mechanism prevents dangerous operations in autonomous mode
|
|
88
|
+
- **Background Mode**: Support for detached process execution
|
|
89
|
+
|
|
90
|
+
### 🏗️ Architecture
|
|
91
|
+
|
|
92
|
+
- **WorkerService Class**: Core worker loop with polling, execution, and verification
|
|
93
|
+
- **Task Context Building**: Automatic failure summary injection for retries
|
|
94
|
+
- **MCP Integration**: Shell tools seamlessly integrated with existing MCP toolset
|
|
95
|
+
- **Agent Subprocess Model**: Each task executed in isolated agent context
|
|
96
|
+
|
|
97
|
+
### 📦 New Exports
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
// Worker Module
|
|
101
|
+
export { WorkerService, getWorker, resetWorker } from 'paean';
|
|
102
|
+
export type { WorkerConfig, WorkerState, TaskContext, WorkerEvent } from 'paean';
|
|
103
|
+
|
|
104
|
+
// Shell Tools
|
|
105
|
+
export { getSystemTools, executeSystemTool, isCommandWhitelisted } from 'paean';
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 🔧 Configuration Options
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
paean worker start --interval 30000 # Poll every 30s (default)
|
|
112
|
+
paean worker start --max-retries 3 # Max retry attempts
|
|
113
|
+
paean worker start --timeout 600000 # Task timeout (10min)
|
|
114
|
+
paean worker start --no-verification # Disable verification step
|
|
115
|
+
```
|
|
116
|
+
|
|
3
117
|
## [0.4.1] - Bug Fixes and Optimizations (2026-01-21)
|
|
4
118
|
|
|
5
119
|
### 🐛 Bug Fixes
|
package/dist/cli.js
CHANGED
|
@@ -15,6 +15,7 @@ import { serveCommand } from './commands/serve.js';
|
|
|
15
15
|
import { validateCommand } from './commands/validate.js';
|
|
16
16
|
import { agentCommand, runAgentMode } from './commands/agent.js';
|
|
17
17
|
import { traceCommand } from './commands/trace.js';
|
|
18
|
+
import { workerCommand } from './commands/worker.js';
|
|
18
19
|
import { getConfigPath } from './utils/config.js';
|
|
19
20
|
// Read version from package.json
|
|
20
21
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -50,6 +51,7 @@ program.addCommand(contextCommand);
|
|
|
50
51
|
program.addCommand(serveCommand);
|
|
51
52
|
program.addCommand(validateCommand);
|
|
52
53
|
program.addCommand(traceCommand);
|
|
54
|
+
program.addCommand(workerCommand);
|
|
53
55
|
// Temporarily disabled for publishing
|
|
54
56
|
// program.addCommand(accessibilityCommand);
|
|
55
57
|
// Parse arguments
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,iCAAiC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC3C,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,yBAAyB,EAAE,gCAAgC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,CAAC;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,sCAAsC;AACtC,4CAA4C;AAE5C,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,iCAAiC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC3C,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,yBAAyB,EAAE,gCAAgC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,CAAC;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,sCAAsC;AACtC,4CAA4C;AAE5C,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,aAAa,SAC8C,CAAC"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Command
|
|
3
|
+
* CLI commands for the Local Autonomous Worker
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { WorkerService, DEFAULT_WORKER_CONFIG, getSupervisor, getExecutorRegistry, InternalExecutor, ClaudeExecutor, GeminiExecutor, CursorExecutor, CodexExecutor, OpenCodeExecutor, } from '../worker/index.js';
|
|
8
|
+
import { isAuthenticated } from '../utils/config.js';
|
|
9
|
+
import * as output from '../utils/output.js';
|
|
10
|
+
import { createTodoItem } from '../api/todo.js';
|
|
11
|
+
export const workerCommand = new Command('worker')
|
|
12
|
+
.description('Autonomous worker mode for continuous task execution');
|
|
13
|
+
// Subcommand: worker start
|
|
14
|
+
workerCommand
|
|
15
|
+
.command('start')
|
|
16
|
+
.description('Start the autonomous worker loop')
|
|
17
|
+
.option('-i, --interval <ms>', 'Poll interval in milliseconds', String(DEFAULT_WORKER_CONFIG.pollInterval))
|
|
18
|
+
.option('-r, --max-retries <n>', 'Maximum retries per task', String(DEFAULT_WORKER_CONFIG.maxRetries))
|
|
19
|
+
.option('-t, --timeout <ms>', 'Task timeout in milliseconds', String(DEFAULT_WORKER_CONFIG.taskTimeout))
|
|
20
|
+
.option('--no-verification', 'Disable verification step')
|
|
21
|
+
.option('-d, --debug', 'Enable debug logging')
|
|
22
|
+
.action(async (options) => {
|
|
23
|
+
requireAuth();
|
|
24
|
+
const config = {
|
|
25
|
+
pollInterval: parseInt(options.interval, 10),
|
|
26
|
+
maxRetries: parseInt(options.maxRetries, 10),
|
|
27
|
+
taskTimeout: parseInt(options.timeout, 10),
|
|
28
|
+
verificationEnabled: options.verification !== false,
|
|
29
|
+
debug: options.debug ?? false,
|
|
30
|
+
autonomousMode: true,
|
|
31
|
+
};
|
|
32
|
+
console.log('');
|
|
33
|
+
console.log(chalk.bold.cyan(' ╔════════════════════════════════════════════╗'));
|
|
34
|
+
console.log(chalk.bold.cyan(' ║') + chalk.bold.white(' PAEAN WORKER ') + chalk.green('●') + chalk.white(' Starting...') + chalk.bold.cyan(' ║'));
|
|
35
|
+
console.log(chalk.bold.cyan(' ╚════════════════════════════════════════════╝'));
|
|
36
|
+
console.log('');
|
|
37
|
+
output.tableRow('Poll Interval', `${config.pollInterval / 1000}s`, 20);
|
|
38
|
+
output.tableRow('Max Retries', String(config.maxRetries), 20);
|
|
39
|
+
output.tableRow('Task Timeout', `${config.taskTimeout / 60000}min`, 20);
|
|
40
|
+
output.tableRow('Verification', config.verificationEnabled ? 'Enabled' : 'Disabled', 20);
|
|
41
|
+
console.log('');
|
|
42
|
+
const worker = new WorkerService(config);
|
|
43
|
+
// Track statistics
|
|
44
|
+
const startTime = Date.now();
|
|
45
|
+
// Event handler for UI updates
|
|
46
|
+
worker.onEvent((event) => {
|
|
47
|
+
const elapsed = formatDuration(Date.now() - startTime);
|
|
48
|
+
switch (event.type) {
|
|
49
|
+
case 'started':
|
|
50
|
+
console.log(chalk.green('✓') + chalk.dim(' Worker started'));
|
|
51
|
+
console.log(chalk.dim(` Press Ctrl+C to stop\n`));
|
|
52
|
+
break;
|
|
53
|
+
case 'stopped':
|
|
54
|
+
console.log(chalk.yellow('●') + chalk.dim(' Worker stopped'));
|
|
55
|
+
break;
|
|
56
|
+
case 'task_claimed':
|
|
57
|
+
console.log(chalk.cyan('▶') + ` Task claimed: ${chalk.white(truncate(event.task.content, 50))}`);
|
|
58
|
+
console.log(chalk.dim(` ID: ${event.task.id} | Priority: ${event.task.priority}`));
|
|
59
|
+
break;
|
|
60
|
+
case 'task_started':
|
|
61
|
+
console.log(chalk.blue('◉') + ` Executing (attempt ${event.attempt}/${config.maxRetries})...`);
|
|
62
|
+
break;
|
|
63
|
+
case 'task_completed':
|
|
64
|
+
console.log(chalk.green('✓') + ` Task completed in ${formatDuration(event.duration)}`);
|
|
65
|
+
console.log('');
|
|
66
|
+
break;
|
|
67
|
+
case 'task_failed':
|
|
68
|
+
console.log(chalk.red('✗') + ` Task failed: ${chalk.dim(truncate(event.error, 60))}`);
|
|
69
|
+
if (event.willRetry) {
|
|
70
|
+
console.log(chalk.yellow('↻') + chalk.dim(' Will retry...'));
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
case 'task_verification_failed':
|
|
74
|
+
console.log(chalk.yellow('⚠') + ' Verification failed, will retry...');
|
|
75
|
+
break;
|
|
76
|
+
case 'poll_empty':
|
|
77
|
+
// Silent - no tasks available
|
|
78
|
+
if (config.debug) {
|
|
79
|
+
console.log(chalk.dim(` [${elapsed}] No pending tasks`));
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
case 'error':
|
|
83
|
+
console.log(chalk.red('✗') + ` Error: ${event.error}`);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// Handle graceful shutdown
|
|
88
|
+
const cleanup = async () => {
|
|
89
|
+
console.log('');
|
|
90
|
+
console.log(chalk.yellow('Stopping worker...'));
|
|
91
|
+
await worker.stop();
|
|
92
|
+
const state = worker.getState();
|
|
93
|
+
console.log('');
|
|
94
|
+
console.log(chalk.bold('Session Summary:'));
|
|
95
|
+
output.tableRow('Completed', String(state.completedCount), 15);
|
|
96
|
+
output.tableRow('Failed', String(state.failedCount), 15);
|
|
97
|
+
output.tableRow('Uptime', formatDuration(Date.now() - startTime), 15);
|
|
98
|
+
console.log('');
|
|
99
|
+
process.exit(0);
|
|
100
|
+
};
|
|
101
|
+
process.on('SIGINT', cleanup);
|
|
102
|
+
process.on('SIGTERM', cleanup);
|
|
103
|
+
// Start worker
|
|
104
|
+
try {
|
|
105
|
+
await worker.start();
|
|
106
|
+
// Keep process alive
|
|
107
|
+
await new Promise(() => { });
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.log(chalk.red('✗') + ` Failed to start worker: ${error.message}`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Subcommand: worker status
|
|
115
|
+
workerCommand
|
|
116
|
+
.command('status')
|
|
117
|
+
.description('Check worker status')
|
|
118
|
+
.action(() => {
|
|
119
|
+
// Worker status is stored in memory, so we can only check if one is running
|
|
120
|
+
// in this process. For a persistent status, we'd need IPC or a pid file.
|
|
121
|
+
console.log(chalk.dim('Worker status is only available when running in the same process.'));
|
|
122
|
+
console.log(chalk.dim('Use `paean worker start` to start a worker.'));
|
|
123
|
+
});
|
|
124
|
+
// Subcommand: worker prompt
|
|
125
|
+
workerCommand
|
|
126
|
+
.command('prompt')
|
|
127
|
+
.description('Execute a natural language task with intelligent routing')
|
|
128
|
+
.argument('[prompt...]', 'Natural language task prompt')
|
|
129
|
+
.option('-p, --prompt <text>', 'Prompt text (alternative to positional)')
|
|
130
|
+
.option('-e, --executor <type>', 'Force specific executor (internal|claude|gemini|cursor|codex|opencode)')
|
|
131
|
+
.option('--auto-approve', 'Skip confirmation prompts')
|
|
132
|
+
.option('--dry-run', 'Show plan without execution')
|
|
133
|
+
.option('-w, --workspace <path>', 'Working directory')
|
|
134
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
135
|
+
.option('--create-task', 'Create as persistent task instead of immediate execution')
|
|
136
|
+
.option('--priority <level>', 'Task priority if creating (high|medium|low)', 'medium')
|
|
137
|
+
.action(async (promptArgs, options) => {
|
|
138
|
+
requireAuth();
|
|
139
|
+
// Combine prompt from various sources
|
|
140
|
+
const promptText = options.prompt || promptArgs.join(' ');
|
|
141
|
+
if (!promptText.trim()) {
|
|
142
|
+
output.error('No prompt provided. Usage: paean worker prompt "Your task"');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
console.log('');
|
|
146
|
+
console.log(chalk.bold.cyan(' ╔════════════════════════════════════════════╗'));
|
|
147
|
+
console.log(chalk.bold.cyan(' ║') + chalk.bold.white(' PAEAN WORKER ') + chalk.magenta('◆') + chalk.white(' Prompt Mode') + chalk.bold.cyan(' ║'));
|
|
148
|
+
console.log(chalk.bold.cyan(' ╚════════════════════════════════════════════╝'));
|
|
149
|
+
console.log('');
|
|
150
|
+
const debug = options.verbose ?? false;
|
|
151
|
+
const cwd = options.workspace || process.cwd();
|
|
152
|
+
// Initialize supervisor
|
|
153
|
+
const supervisor = getSupervisor({ debug, cloudEnabled: true });
|
|
154
|
+
// Show input prompt
|
|
155
|
+
console.log(chalk.cyan('▶') + chalk.bold(' Prompt:'));
|
|
156
|
+
console.log(chalk.dim(` ${truncate(promptText, 70)}`));
|
|
157
|
+
console.log('');
|
|
158
|
+
// Grooming phase
|
|
159
|
+
console.log(chalk.blue('◉') + ' Analyzing task...');
|
|
160
|
+
const startTime = Date.now();
|
|
161
|
+
const decision = await supervisor.groomTask(promptText, {
|
|
162
|
+
projectPath: cwd,
|
|
163
|
+
});
|
|
164
|
+
console.log(chalk.green('✓') + ' Task analyzed');
|
|
165
|
+
console.log('');
|
|
166
|
+
// Display decision
|
|
167
|
+
console.log(chalk.bold('📋 Supervisor Decision:'));
|
|
168
|
+
output.tableRow('Executor', decision.selectedExecutor, 18);
|
|
169
|
+
output.tableRow('Confidence', `${(decision.confidence * 100).toFixed(0)}%`, 18);
|
|
170
|
+
output.tableRow('Strategy', decision.verificationStrategy || 'none', 18);
|
|
171
|
+
if (decision.tags?.length) {
|
|
172
|
+
output.tableRow('Tags', decision.tags.join(', '), 18);
|
|
173
|
+
}
|
|
174
|
+
console.log('');
|
|
175
|
+
if (debug) {
|
|
176
|
+
console.log(chalk.dim('Reasoning: ' + decision.reasoning));
|
|
177
|
+
console.log('');
|
|
178
|
+
}
|
|
179
|
+
// Show groomed prompt
|
|
180
|
+
console.log(chalk.bold('📝 Groomed Prompt:'));
|
|
181
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
182
|
+
const lines = decision.groomedPrompt.split('\n').slice(0, 5);
|
|
183
|
+
for (const line of lines) {
|
|
184
|
+
console.log(chalk.dim(' ' + truncate(line, 60)));
|
|
185
|
+
}
|
|
186
|
+
if (decision.groomedPrompt.split('\n').length > 5) {
|
|
187
|
+
console.log(chalk.dim(' ... (truncated)'));
|
|
188
|
+
}
|
|
189
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
190
|
+
console.log('');
|
|
191
|
+
// Subtasks if any
|
|
192
|
+
if (decision.subtasks?.length) {
|
|
193
|
+
console.log(chalk.bold('📂 Subtasks:'));
|
|
194
|
+
for (const subtask of decision.subtasks) {
|
|
195
|
+
console.log(chalk.dim(` • ${truncate(subtask, 60)}`));
|
|
196
|
+
}
|
|
197
|
+
console.log('');
|
|
198
|
+
}
|
|
199
|
+
// Dry run mode - stop here
|
|
200
|
+
if (options.dryRun) {
|
|
201
|
+
console.log(chalk.yellow('●') + ' Dry run mode - execution skipped');
|
|
202
|
+
console.log(chalk.dim(` Duration: ${formatDuration(Date.now() - startTime)}`));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
// Create as persistent task
|
|
206
|
+
if (options.createTask) {
|
|
207
|
+
console.log(chalk.blue('◉') + ' Creating persistent task...');
|
|
208
|
+
try {
|
|
209
|
+
const result = await createTodoItem({
|
|
210
|
+
content: promptText,
|
|
211
|
+
description: decision.groomedPrompt,
|
|
212
|
+
priority: options.priority,
|
|
213
|
+
tags: decision.tags,
|
|
214
|
+
});
|
|
215
|
+
console.log(chalk.green('✓') + ` Task created: ${result.data.id}`);
|
|
216
|
+
console.log(chalk.dim(` Use 'paean worker start' to process this task.`));
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
console.log(chalk.red('✗') + ` Failed to create task: ${err.message}`);
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
// Initialize executor registry
|
|
224
|
+
const registry = getExecutorRegistry();
|
|
225
|
+
// Register all executors
|
|
226
|
+
registry.register(new InternalExecutor());
|
|
227
|
+
registry.register(new ClaudeExecutor());
|
|
228
|
+
registry.register(new GeminiExecutor());
|
|
229
|
+
registry.register(new CursorExecutor());
|
|
230
|
+
registry.register(new CodexExecutor());
|
|
231
|
+
registry.register(new OpenCodeExecutor());
|
|
232
|
+
// Determine which executor to use
|
|
233
|
+
const executorType = options.executor || decision.selectedExecutor;
|
|
234
|
+
// Check availability
|
|
235
|
+
const available = await registry.getAvailable();
|
|
236
|
+
if (debug) {
|
|
237
|
+
console.log(chalk.dim(`Available executors: ${available.join(', ')}`));
|
|
238
|
+
}
|
|
239
|
+
if (!available.includes(executorType) && executorType !== 'internal') {
|
|
240
|
+
console.log(chalk.yellow('⚠') + ` Executor '${executorType}' not available, falling back to internal`);
|
|
241
|
+
}
|
|
242
|
+
const finalExecutor = available.includes(executorType) ? executorType : 'internal';
|
|
243
|
+
// Execute
|
|
244
|
+
console.log(chalk.blue('◉') + ` Executing with ${chalk.bold(finalExecutor)} executor...`);
|
|
245
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
246
|
+
const result = await registry.execute(finalExecutor, decision.groomedPrompt, {
|
|
247
|
+
cwd,
|
|
248
|
+
skipPermissions: options.autoApprove,
|
|
249
|
+
timeout: 600000,
|
|
250
|
+
onOutput: (text, stream) => {
|
|
251
|
+
// Display streaming output with nice formatting
|
|
252
|
+
const lines = text.split('\n');
|
|
253
|
+
for (const line of lines) {
|
|
254
|
+
if (line.trim()) {
|
|
255
|
+
const prefix = stream === 'stderr' ? chalk.yellow('│') : chalk.dim('│');
|
|
256
|
+
const displayLine = line.length > 70 ? line.slice(0, 67) + '...' : line;
|
|
257
|
+
console.log(prefix + ' ' + displayLine);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
263
|
+
const totalDuration = Date.now() - startTime;
|
|
264
|
+
// Display result
|
|
265
|
+
if (result.success) {
|
|
266
|
+
console.log(chalk.green('✓') + ` Execution completed`);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
console.log(chalk.red('✗') + ` Execution failed`);
|
|
270
|
+
if (result.error) {
|
|
271
|
+
console.log(chalk.dim(` Error: ${truncate(result.error, 60)}`));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
console.log('');
|
|
275
|
+
console.log(chalk.bold('📊 Summary:'));
|
|
276
|
+
output.tableRow('Status', result.success ? 'Success' : 'Failed', 15);
|
|
277
|
+
output.tableRow('Executor', finalExecutor, 15);
|
|
278
|
+
output.tableRow('Duration', formatDuration(totalDuration), 15);
|
|
279
|
+
console.log('');
|
|
280
|
+
// Show output preview if verbose
|
|
281
|
+
if (debug && result.output) {
|
|
282
|
+
console.log(chalk.bold('Output Preview:'));
|
|
283
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
284
|
+
const outputLines = result.output.split('\n').slice(0, 10);
|
|
285
|
+
for (const line of outputLines) {
|
|
286
|
+
console.log(chalk.dim(truncate(line, 70)));
|
|
287
|
+
}
|
|
288
|
+
if (result.output.split('\n').length > 10) {
|
|
289
|
+
console.log(chalk.dim('... (truncated)'));
|
|
290
|
+
}
|
|
291
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
292
|
+
}
|
|
293
|
+
process.exit(result.success ? 0 : 1);
|
|
294
|
+
});
|
|
295
|
+
// Helper functions
|
|
296
|
+
function requireAuth() {
|
|
297
|
+
if (!isAuthenticated()) {
|
|
298
|
+
output.error('Not authenticated. Please run "paean login" first.');
|
|
299
|
+
process.exit(1);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
function truncate(str, maxLen) {
|
|
303
|
+
if (str.length <= maxLen)
|
|
304
|
+
return str;
|
|
305
|
+
return str.slice(0, maxLen - 3) + '...';
|
|
306
|
+
}
|
|
307
|
+
function formatDuration(ms) {
|
|
308
|
+
if (ms < 1000)
|
|
309
|
+
return `${ms}ms`;
|
|
310
|
+
if (ms < 60000)
|
|
311
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
312
|
+
if (ms < 3600000) {
|
|
313
|
+
const mins = Math.floor(ms / 60000);
|
|
314
|
+
const secs = Math.floor((ms % 60000) / 1000);
|
|
315
|
+
return `${mins}m ${secs}s`;
|
|
316
|
+
}
|
|
317
|
+
const hours = Math.floor(ms / 3600000);
|
|
318
|
+
const mins = Math.floor((ms % 3600000) / 60000);
|
|
319
|
+
return `${hours}h ${mins}m`;
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,4 +12,6 @@ export { getMcpResources, readMcpResource } from './mcp/resources.js';
|
|
|
12
12
|
export { getMcpTools, executeMcpTool } from './mcp/tools.js';
|
|
13
13
|
export { McpClient } from './mcp/client.js';
|
|
14
14
|
export { AgentService, agentService, startChat, sendMessage, renderMarkdown, type AgentStreamEvent, type AgentStreamCallbacks, type McpState, type McpToolResult, } from './agent/index.js';
|
|
15
|
+
export { getSystemTools, executeSystemTool, isCommandWhitelisted, getCommandWhitelist, } from './mcp/system.js';
|
|
16
|
+
export { WorkerService, getWorker, resetWorker, type WorkerConfig, type WorkerState, type TaskContext, type WorkerEvent, DEFAULT_WORKER_CONFIG, } from './worker/index.js';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,8 @@ export { getMcpTools, executeMcpTool } from './mcp/tools.js';
|
|
|
20
20
|
export { McpClient } from './mcp/client.js';
|
|
21
21
|
// Agent Mode
|
|
22
22
|
export { AgentService, agentService, startChat, sendMessage, renderMarkdown, } from './agent/index.js';
|
|
23
|
+
// System/Shell Tools
|
|
24
|
+
export { getSystemTools, executeSystemTool, isCommandWhitelisted, getCommandWhitelist, } from './mcp/system.js';
|
|
25
|
+
// Worker Module
|
|
26
|
+
export { WorkerService, getWorker, resetWorker, DEFAULT_WORKER_CONFIG, } from './worker/index.js';
|
|
23
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,iBAAiB;AACjB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,GAGP,MAAM,eAAe,CAAC;AAEvB,WAAW;AACX,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,GAKb,MAAM,eAAe,CAAC;AAEvB,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAE5B,aAAa;AACb,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE7D,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,aAAa;AACb,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,GAKf,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,iBAAiB;AACjB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,GAGP,MAAM,eAAe,CAAC;AAEvB,WAAW;AACX,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,GAKb,MAAM,eAAe,CAAC;AAEvB,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAE5B,aAAa;AACb,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE7D,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,aAAa;AACb,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,GAKf,MAAM,kBAAkB,CAAC;AAE1B,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EAKX,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System/Shell MCP Tools
|
|
3
|
+
* Provides controlled shell execution and process management capabilities
|
|
4
|
+
* for the Local Autonomous Worker
|
|
5
|
+
*/
|
|
6
|
+
import { type Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if a command is in the whitelist
|
|
9
|
+
*/
|
|
10
|
+
export declare function isCommandWhitelisted(command: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a command contains dangerous patterns
|
|
13
|
+
*/
|
|
14
|
+
export declare function isDangerousCommand(command: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* System MCP Tools definition
|
|
17
|
+
*/
|
|
18
|
+
export declare function getSystemTools(): Tool[];
|
|
19
|
+
/**
|
|
20
|
+
* Execute a system tool
|
|
21
|
+
*/
|
|
22
|
+
export declare function executeSystemTool(toolName: string, args: Record<string, unknown>, options?: {
|
|
23
|
+
autonomousMode?: boolean;
|
|
24
|
+
debug?: boolean;
|
|
25
|
+
}): Promise<unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* Get the whitelist for display/debugging
|
|
28
|
+
*/
|
|
29
|
+
export declare function getCommandWhitelist(): string[];
|
|
30
|
+
//# sourceMappingURL=system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/mcp/system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAsC/D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAK7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,EAAE,CAkIvC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAuMD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}
|