funolio-agent 0.1.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.
- package/README.md +55 -0
- package/dist/clerk/index.d.ts +62 -0
- package/dist/clerk/index.d.ts.map +1 -0
- package/dist/clerk/index.js +186 -0
- package/dist/clerk/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +42 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/configure.d.ts +2 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +252 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +151 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +170 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/start.d.ts +8 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +179 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +55 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +113 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +83 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +338 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/registry.d.ts +32 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +139 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/message-loop.d.ts +18 -0
- package/dist/message-loop.d.ts.map +1 -0
- package/dist/message-loop.js +165 -0
- package/dist/message-loop.js.map +1 -0
- package/dist/mqtt-client.d.ts +67 -0
- package/dist/mqtt-client.d.ts.map +1 -0
- package/dist/mqtt-client.js +148 -0
- package/dist/mqtt-client.js.map +1 -0
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +183 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/google.d.ts +10 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +161 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +42 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +10 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +173 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/retry.d.ts +6 -0
- package/dist/providers/retry.d.ts.map +1 -0
- package/dist/providers/retry.js +38 -0
- package/dist/providers/retry.js.map +1 -0
- package/dist/subagent/index.d.ts +8 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +14 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/orchestrator.d.ts +67 -0
- package/dist/subagent/orchestrator.d.ts.map +1 -0
- package/dist/subagent/orchestrator.js +152 -0
- package/dist/subagent/orchestrator.js.map +1 -0
- package/dist/subagent/queue.d.ts +66 -0
- package/dist/subagent/queue.d.ts.map +1 -0
- package/dist/subagent/queue.js +298 -0
- package/dist/subagent/queue.js.map +1 -0
- package/dist/subagent/types.d.ts +76 -0
- package/dist/subagent/types.d.ts.map +1 -0
- package/dist/subagent/types.js +14 -0
- package/dist/subagent/types.js.map +1 -0
- package/dist/tools/edit-file.d.ts +3 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +112 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/git-tools.d.ts +5 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +144 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/index.d.ts +40 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +126 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/installer.d.ts +41 -0
- package/dist/tools/installer.d.ts.map +1 -0
- package/dist/tools/installer.js +227 -0
- package/dist/tools/installer.js.map +1 -0
- package/dist/tools/list-directory.d.ts +3 -0
- package/dist/tools/list-directory.d.ts.map +1 -0
- package/dist/tools/list-directory.js +107 -0
- package/dist/tools/list-directory.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +89 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/run-command.d.ts +3 -0
- package/dist/tools/run-command.d.ts.map +1 -0
- package/dist/tools/run-command.js +86 -0
- package/dist/tools/run-command.js.map +1 -0
- package/dist/tools/sandbox.d.ts +17 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +78 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/write-file.d.ts +3 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +88 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/verification/index.d.ts +17 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +224 -0
- package/dist/verification/index.js.map +1 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# funolio-agent
|
|
2
|
+
|
|
3
|
+
The official CLI for [Funolio](https://funolio.com) ā run AI agent tasks locally using your own API keys.
|
|
4
|
+
|
|
5
|
+
Funolio Agent connects your machine to the Funolio platform, letting you execute AI-powered tasks with full control over your data, models, and tools.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm i -g funolio-agent
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# 1. Initialize ā set up API key and test connection
|
|
17
|
+
funolio-agent init
|
|
18
|
+
|
|
19
|
+
# 2. Configure your LLM provider (OpenAI, Anthropic, etc.)
|
|
20
|
+
funolio-agent configure
|
|
21
|
+
|
|
22
|
+
# 3. Start the agent
|
|
23
|
+
funolio-agent start
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
| Command | Description |
|
|
29
|
+
|---------|-------------|
|
|
30
|
+
| `funolio-agent init` | Set up the agent: API key, connection test, tool installation |
|
|
31
|
+
| `funolio-agent login` | Authenticate with funolio.com |
|
|
32
|
+
| `funolio-agent configure` | Configure LLM providers (API keys, models) |
|
|
33
|
+
| `funolio-agent start` | Start the agent and connect to Funolio |
|
|
34
|
+
| `funolio-agent status` | Show agent and connection status |
|
|
35
|
+
|
|
36
|
+
### Options
|
|
37
|
+
|
|
38
|
+
- `init --lite` ā Skip heavy tools (Playwright, Docker) for constrained environments
|
|
39
|
+
- `login --token <token>` ā Use an API token directly instead of browser login
|
|
40
|
+
- `start <project-dir>` ā Start in a specific project directory
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
|
|
44
|
+
- **Node.js 18+**
|
|
45
|
+
- A [Funolio](https://funolio.com) account
|
|
46
|
+
|
|
47
|
+
## Links
|
|
48
|
+
|
|
49
|
+
- [Funolio Platform](https://funolio.com)
|
|
50
|
+
- [GitHub](https://github.com/mpalmi3/Funolio)
|
|
51
|
+
- [Report Issues](https://github.com/mpalmi3/Funolio/issues)
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
|
|
55
|
+
MIT
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3F: Agent-Side Clerk (Memory Extraction)
|
|
3
|
+
*
|
|
4
|
+
* After each completed agentic loop:
|
|
5
|
+
* 1. Package conversation + tool results + file diffs
|
|
6
|
+
* 2. POST to Funolio /api/v1/bot/extract endpoint
|
|
7
|
+
* 3. Funolio server processes with GPT-4o-mini
|
|
8
|
+
* 4. Extracted facts/decisions stored in Funolio
|
|
9
|
+
*
|
|
10
|
+
* All extraction is async and non-blocking.
|
|
11
|
+
*/
|
|
12
|
+
import { AgentConversationTurn, FileDiff, CommandLog, ToolResult } from '../types';
|
|
13
|
+
export interface ClerkConfig {
|
|
14
|
+
/** Funolio API base URL */
|
|
15
|
+
apiBaseUrl: string;
|
|
16
|
+
/** Funolio API key for authentication */
|
|
17
|
+
apiKey: string;
|
|
18
|
+
/** Project identifier */
|
|
19
|
+
projectId?: string;
|
|
20
|
+
/** Whether clerk is enabled (default: true) */
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
/** Callback for errors (non-blocking, so we log rather than throw) */
|
|
23
|
+
onError?: (error: Error) => void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The Clerk collects data during an agentic loop and sends it for extraction.
|
|
27
|
+
*/
|
|
28
|
+
export declare class AgentClerk {
|
|
29
|
+
private config;
|
|
30
|
+
private turns;
|
|
31
|
+
private fileDiffs;
|
|
32
|
+
private commandLogs;
|
|
33
|
+
private gitChanges;
|
|
34
|
+
constructor(config: ClerkConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Record a conversation turn.
|
|
37
|
+
*/
|
|
38
|
+
addTurn(turn: AgentConversationTurn): void;
|
|
39
|
+
/**
|
|
40
|
+
* Record a file diff from an edit/write operation.
|
|
41
|
+
*/
|
|
42
|
+
addFileDiff(diff: FileDiff): void;
|
|
43
|
+
/**
|
|
44
|
+
* Record a command execution log.
|
|
45
|
+
*/
|
|
46
|
+
addCommandLog(log: CommandLog): void;
|
|
47
|
+
/**
|
|
48
|
+
* Record a git change summary.
|
|
49
|
+
*/
|
|
50
|
+
addGitChange(change: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Convenience: record a tool result, automatically categorizing it.
|
|
53
|
+
*/
|
|
54
|
+
recordToolResult(result: ToolResult, args: Record<string, unknown>): void;
|
|
55
|
+
/**
|
|
56
|
+
* Send collected data to the extraction API.
|
|
57
|
+
* Non-blocking: fires and forgets. Errors are logged, not thrown.
|
|
58
|
+
*/
|
|
59
|
+
flush(taskId?: string): Promise<void>;
|
|
60
|
+
private sendExtraction;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clerk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAgB,qBAAqB,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEjG,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,UAAU,CAAgB;gBAEtB,MAAM,EAAE,WAAW;IAI/B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAI1C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAIjC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAIpC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA0BzE;;;OAGG;IACG,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA2B7B,cAAc;CA8B7B"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 3F: Agent-Side Clerk (Memory Extraction)
|
|
4
|
+
*
|
|
5
|
+
* After each completed agentic loop:
|
|
6
|
+
* 1. Package conversation + tool results + file diffs
|
|
7
|
+
* 2. POST to Funolio /api/v1/bot/extract endpoint
|
|
8
|
+
* 3. Funolio server processes with GPT-4o-mini
|
|
9
|
+
* 4. Extracted facts/decisions stored in Funolio
|
|
10
|
+
*
|
|
11
|
+
* All extraction is async and non-blocking.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.AgentClerk = void 0;
|
|
15
|
+
/**
|
|
16
|
+
* The Clerk collects data during an agentic loop and sends it for extraction.
|
|
17
|
+
*/
|
|
18
|
+
class AgentClerk {
|
|
19
|
+
config;
|
|
20
|
+
turns = [];
|
|
21
|
+
fileDiffs = [];
|
|
22
|
+
commandLogs = [];
|
|
23
|
+
gitChanges = [];
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.config = config;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Record a conversation turn.
|
|
29
|
+
*/
|
|
30
|
+
addTurn(turn) {
|
|
31
|
+
this.turns.push(turn);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Record a file diff from an edit/write operation.
|
|
35
|
+
*/
|
|
36
|
+
addFileDiff(diff) {
|
|
37
|
+
this.fileDiffs.push(diff);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Record a command execution log.
|
|
41
|
+
*/
|
|
42
|
+
addCommandLog(log) {
|
|
43
|
+
this.commandLogs.push(log);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Record a git change summary.
|
|
47
|
+
*/
|
|
48
|
+
addGitChange(change) {
|
|
49
|
+
this.gitChanges.push(change);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convenience: record a tool result, automatically categorizing it.
|
|
53
|
+
*/
|
|
54
|
+
recordToolResult(result, args) {
|
|
55
|
+
// Record file diffs
|
|
56
|
+
if (result.diff && (result.name === 'edit_file' || result.name === 'write_file')) {
|
|
57
|
+
this.addFileDiff({
|
|
58
|
+
path: args.path,
|
|
59
|
+
diff: result.diff,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Record command logs
|
|
63
|
+
if (result.name === 'run_command') {
|
|
64
|
+
this.addCommandLog({
|
|
65
|
+
command: args.command,
|
|
66
|
+
exit_code: result.exit_code ?? -1,
|
|
67
|
+
stdout: result.output,
|
|
68
|
+
stderr: result.stderr || '',
|
|
69
|
+
duration_ms: 0, // Could be extracted from output if needed
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Record git changes
|
|
73
|
+
if (result.name === 'git_commit' && result.success) {
|
|
74
|
+
this.addGitChange(result.output);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Send collected data to the extraction API.
|
|
79
|
+
* Non-blocking: fires and forgets. Errors are logged, not thrown.
|
|
80
|
+
*/
|
|
81
|
+
async flush(taskId) {
|
|
82
|
+
if (this.config.enabled === false)
|
|
83
|
+
return;
|
|
84
|
+
if (this.turns.length === 0)
|
|
85
|
+
return;
|
|
86
|
+
const payload = {
|
|
87
|
+
conversation: [...this.turns],
|
|
88
|
+
file_diffs: [...this.fileDiffs],
|
|
89
|
+
commands_executed: [...this.commandLogs],
|
|
90
|
+
git_changes: [...this.gitChanges],
|
|
91
|
+
task_id: taskId,
|
|
92
|
+
project_id: this.config.projectId,
|
|
93
|
+
};
|
|
94
|
+
// Clear state immediately (don't wait for request)
|
|
95
|
+
this.turns = [];
|
|
96
|
+
this.fileDiffs = [];
|
|
97
|
+
this.commandLogs = [];
|
|
98
|
+
this.gitChanges = [];
|
|
99
|
+
// Fire and forget
|
|
100
|
+
this.sendExtraction(payload).catch((err) => {
|
|
101
|
+
if (this.config.onError) {
|
|
102
|
+
this.config.onError(err instanceof Error ? err : new Error(String(err)));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async sendExtraction(payload) {
|
|
107
|
+
const url = `${this.config.apiBaseUrl}/api/v1/bot/extract`;
|
|
108
|
+
// Format conversation for extraction
|
|
109
|
+
const formattedContent = formatForExtraction(payload);
|
|
110
|
+
const response = await fetch(url, {
|
|
111
|
+
method: 'POST',
|
|
112
|
+
headers: {
|
|
113
|
+
'Content-Type': 'application/json',
|
|
114
|
+
'Authorization': `Bearer ${this.config.apiKey}`,
|
|
115
|
+
},
|
|
116
|
+
body: JSON.stringify({
|
|
117
|
+
content: formattedContent,
|
|
118
|
+
source: 'funolio-agent',
|
|
119
|
+
project_id: payload.project_id,
|
|
120
|
+
task_id: payload.task_id,
|
|
121
|
+
metadata: {
|
|
122
|
+
file_diffs_count: payload.file_diffs.length,
|
|
123
|
+
commands_count: payload.commands_executed.length,
|
|
124
|
+
git_changes_count: payload.git_changes.length,
|
|
125
|
+
},
|
|
126
|
+
}),
|
|
127
|
+
signal: AbortSignal.timeout(30000), // 30s timeout for extraction
|
|
128
|
+
});
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
throw new Error(`Extraction API returned ${response.status}: ${await response.text()}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.AgentClerk = AgentClerk;
|
|
135
|
+
/**
|
|
136
|
+
* Format the clerk payload into a readable string for the extraction LLM.
|
|
137
|
+
*/
|
|
138
|
+
function formatForExtraction(payload) {
|
|
139
|
+
const parts = [];
|
|
140
|
+
// Conversation
|
|
141
|
+
parts.push('## Conversation');
|
|
142
|
+
for (const turn of payload.conversation) {
|
|
143
|
+
parts.push(`### ${turn.role}`);
|
|
144
|
+
parts.push(turn.content);
|
|
145
|
+
if (turn.tool_calls) {
|
|
146
|
+
for (const tc of turn.tool_calls) {
|
|
147
|
+
parts.push(`[Tool Call: ${tc.name}(${JSON.stringify(tc.arguments)})]`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (turn.tool_results) {
|
|
151
|
+
for (const tr of turn.tool_results) {
|
|
152
|
+
parts.push(`[Tool Result: ${tr.name} - ${tr.success ? 'success' : 'failed'}]`);
|
|
153
|
+
if (tr.output)
|
|
154
|
+
parts.push(tr.output.slice(0, 2000));
|
|
155
|
+
if (tr.error)
|
|
156
|
+
parts.push(`Error: ${tr.error}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// File diffs
|
|
161
|
+
if (payload.file_diffs.length > 0) {
|
|
162
|
+
parts.push('\n## File Changes');
|
|
163
|
+
for (const diff of payload.file_diffs) {
|
|
164
|
+
parts.push(`### ${diff.path}`);
|
|
165
|
+
parts.push(diff.diff.slice(0, 3000));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Commands
|
|
169
|
+
if (payload.commands_executed.length > 0) {
|
|
170
|
+
parts.push('\n## Commands Executed');
|
|
171
|
+
for (const cmd of payload.commands_executed) {
|
|
172
|
+
parts.push(`$ ${cmd.command} ā exit ${cmd.exit_code}`);
|
|
173
|
+
if (cmd.stderr)
|
|
174
|
+
parts.push(`stderr: ${cmd.stderr.slice(0, 500)}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Git changes
|
|
178
|
+
if (payload.git_changes.length > 0) {
|
|
179
|
+
parts.push('\n## Git Changes');
|
|
180
|
+
for (const change of payload.git_changes) {
|
|
181
|
+
parts.push(change.slice(0, 1000));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return parts.join('\n');
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clerk/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const login_1 = require("./commands/login");
|
|
6
|
+
const init_1 = require("./commands/init");
|
|
7
|
+
const start_1 = require("./commands/start");
|
|
8
|
+
const status_1 = require("./commands/status");
|
|
9
|
+
const configure_1 = require("./commands/configure");
|
|
10
|
+
const program = new commander_1.Command();
|
|
11
|
+
program
|
|
12
|
+
.name('funolio-agent')
|
|
13
|
+
.description('Funolio AI agent - run AI tasks locally with your own API keys')
|
|
14
|
+
.version('0.1.0');
|
|
15
|
+
program
|
|
16
|
+
.command('init')
|
|
17
|
+
.description('Set up the agent: API key, connection test, tool installation')
|
|
18
|
+
.option('--lite', 'Skip heavy tools (Playwright, Docker) for constrained environments')
|
|
19
|
+
.action(init_1.initCommand);
|
|
20
|
+
program
|
|
21
|
+
.command('login')
|
|
22
|
+
.description('Authenticate with funolio.com')
|
|
23
|
+
.option('--token <token>', 'Use an API token directly instead of browser login')
|
|
24
|
+
.action(login_1.loginCommand);
|
|
25
|
+
program
|
|
26
|
+
.command('start')
|
|
27
|
+
.description('Start the agent and connect to Funolio')
|
|
28
|
+
.argument('[project-dir]', 'Project directory to work in', '.')
|
|
29
|
+
.option('--provider <provider>', 'LLM provider (anthropic, openai, google)')
|
|
30
|
+
.option('--model <model>', 'LLM model to use')
|
|
31
|
+
.option('--api-key <key>', 'LLM API key (or set via env: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY)')
|
|
32
|
+
.action(start_1.startCommand);
|
|
33
|
+
program
|
|
34
|
+
.command('configure')
|
|
35
|
+
.description('Configure LLM providers (API keys, models)')
|
|
36
|
+
.action(configure_1.configureCommand);
|
|
37
|
+
program
|
|
38
|
+
.command('status')
|
|
39
|
+
.description('Show agent and connection status')
|
|
40
|
+
.action(status_1.statusCommand);
|
|
41
|
+
program.parse();
|
|
42
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,oDAAwD;AAExD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,QAAQ,EAAE,oEAAoE,CAAC;KACtF,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;KAC/E,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wCAAwC,CAAC;KACrD,QAAQ,CAAC,eAAe,EAAE,8BAA8B,EAAE,GAAG,CAAC;KAC9D,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,MAAM,CAAC,iBAAiB,EAAE,iFAAiF,CAAC;KAC5G,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,4BAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"AAqJA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8EtD"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.configureCommand = configureCommand;
|
|
40
|
+
const readline = __importStar(require("readline"));
|
|
41
|
+
const https = __importStar(require("https"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const config_1 = require("../config");
|
|
44
|
+
function createRl() {
|
|
45
|
+
return readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
46
|
+
}
|
|
47
|
+
function ask(rl, question) {
|
|
48
|
+
return new Promise((resolve) => rl.question(question, (answer) => resolve(answer.trim())));
|
|
49
|
+
}
|
|
50
|
+
function askChoice(rl, question, choices) {
|
|
51
|
+
return new Promise((resolve) => {
|
|
52
|
+
const choiceList = choices.map((c, i) => ` ${i + 1}) ${c}`).join('\n');
|
|
53
|
+
rl.question(`${question}\n${choiceList}\n> `, (answer) => {
|
|
54
|
+
const idx = parseInt(answer.trim(), 10) - 1;
|
|
55
|
+
if (idx >= 0 && idx < choices.length) {
|
|
56
|
+
resolve(choices[idx]);
|
|
57
|
+
}
|
|
58
|
+
else if (choices.includes(answer.trim())) {
|
|
59
|
+
resolve(answer.trim());
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
resolve(choices[0]);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async function validateFunolioToken(token) {
|
|
68
|
+
return new Promise((resolve) => {
|
|
69
|
+
const url = new URL('/api/v1/identity/me', config_1.FUNOLIO_API_URL);
|
|
70
|
+
const req = https.get(url, { headers: { Authorization: `Bearer ${token}` } }, (res) => {
|
|
71
|
+
resolve(res.statusCode === 200);
|
|
72
|
+
res.resume();
|
|
73
|
+
});
|
|
74
|
+
req.on('error', () => resolve(false));
|
|
75
|
+
req.setTimeout(5000, () => { req.destroy(); resolve(false); });
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async function validateApiKey(providerId, apiKey) {
|
|
79
|
+
return new Promise((resolve) => {
|
|
80
|
+
let options;
|
|
81
|
+
switch (providerId) {
|
|
82
|
+
case 'anthropic':
|
|
83
|
+
options = {
|
|
84
|
+
hostname: 'api.anthropic.com',
|
|
85
|
+
path: '/v1/models',
|
|
86
|
+
headers: { 'x-api-key': apiKey, 'anthropic-version': '2023-06-01' },
|
|
87
|
+
};
|
|
88
|
+
break;
|
|
89
|
+
case 'openai':
|
|
90
|
+
options = {
|
|
91
|
+
hostname: 'api.openai.com',
|
|
92
|
+
path: '/v1/models?limit=1',
|
|
93
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
94
|
+
};
|
|
95
|
+
break;
|
|
96
|
+
case 'google':
|
|
97
|
+
options = {
|
|
98
|
+
hostname: 'generativelanguage.googleapis.com',
|
|
99
|
+
path: `/v1/models?key=${apiKey}&pageSize=1`,
|
|
100
|
+
headers: {},
|
|
101
|
+
};
|
|
102
|
+
break;
|
|
103
|
+
default:
|
|
104
|
+
// Can't validate unknown providers
|
|
105
|
+
resolve(true);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const req = https.get({ ...options, port: 443 }, (res) => {
|
|
109
|
+
resolve(res.statusCode === 200);
|
|
110
|
+
res.resume();
|
|
111
|
+
});
|
|
112
|
+
req.on('error', () => resolve(false));
|
|
113
|
+
req.setTimeout(10000, () => { req.destroy(); resolve(false); });
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function addProvider(rl) {
|
|
117
|
+
const knownProviders = ['anthropic', 'openai', 'google', 'other'];
|
|
118
|
+
const providerChoice = await askChoice(rl, chalk_1.default.cyan('\nSelect provider:'), knownProviders);
|
|
119
|
+
let providerId;
|
|
120
|
+
if (providerChoice === 'other') {
|
|
121
|
+
providerId = await ask(rl, chalk_1.default.cyan('Enter provider ID: '));
|
|
122
|
+
if (!providerId)
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
providerId = providerChoice;
|
|
127
|
+
}
|
|
128
|
+
const authChoice = await askChoice(rl, chalk_1.default.cyan('Authentication type:'), ['apiKey', 'oauth']);
|
|
129
|
+
let apiKey;
|
|
130
|
+
let oauthToken;
|
|
131
|
+
let oauthRefreshToken;
|
|
132
|
+
if (authChoice === 'apiKey') {
|
|
133
|
+
apiKey = await ask(rl, chalk_1.default.cyan(`Enter API key for ${providerId}: `));
|
|
134
|
+
if (!apiKey) {
|
|
135
|
+
console.log(chalk_1.default.red(' API key is required.'));
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
console.log(chalk_1.default.gray(' Validating API key...'));
|
|
139
|
+
const valid = await validateApiKey(providerId, apiKey);
|
|
140
|
+
if (!valid) {
|
|
141
|
+
console.log(chalk_1.default.red(' ā API key validation failed. Add anyway? (y/N)'));
|
|
142
|
+
const force = await ask(rl, '> ');
|
|
143
|
+
if (force.toLowerCase() !== 'y')
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.log(chalk_1.default.green(' ā API key validated'));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
oauthToken = await ask(rl, chalk_1.default.cyan('Enter OAuth token (or leave blank to set up later): '));
|
|
152
|
+
if (oauthToken) {
|
|
153
|
+
oauthRefreshToken = await ask(rl, chalk_1.default.cyan('Enter OAuth refresh token (optional): '));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const defaultModel = config_1.DEFAULT_MODELS[providerId] || '';
|
|
157
|
+
const modelInput = await ask(rl, chalk_1.default.cyan(`Default model [${defaultModel}]: `));
|
|
158
|
+
const model = modelInput || defaultModel;
|
|
159
|
+
if (!model) {
|
|
160
|
+
console.log(chalk_1.default.red(' Model is required.'));
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const label = await ask(rl, chalk_1.default.cyan('Label (optional, e.g. "My Claude"): '));
|
|
164
|
+
const provider = {
|
|
165
|
+
id: providerId,
|
|
166
|
+
authType: authChoice,
|
|
167
|
+
defaultModel: model,
|
|
168
|
+
};
|
|
169
|
+
if (apiKey)
|
|
170
|
+
provider.apiKey = apiKey;
|
|
171
|
+
if (oauthToken)
|
|
172
|
+
provider.oauthToken = oauthToken;
|
|
173
|
+
if (oauthRefreshToken)
|
|
174
|
+
provider.oauthRefreshToken = oauthRefreshToken;
|
|
175
|
+
if (label)
|
|
176
|
+
provider.label = label;
|
|
177
|
+
return provider;
|
|
178
|
+
}
|
|
179
|
+
async function configureCommand() {
|
|
180
|
+
const rl = createRl();
|
|
181
|
+
let config = (0, config_1.migrateConfig)((0, config_1.loadConfig)());
|
|
182
|
+
console.log(chalk_1.default.blue('\nš§ Funolio Agent Configuration\n'));
|
|
183
|
+
// Step 1: Funolio auth
|
|
184
|
+
if (!config.auth?.token) {
|
|
185
|
+
console.log(chalk_1.default.yellow('No Funolio authentication found.'));
|
|
186
|
+
console.log(chalk_1.default.gray('Run `funolio-agent login` to authenticate first.\n'));
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.log(chalk_1.default.green(`ā Logged in as ${config.auth.username}\n`));
|
|
190
|
+
}
|
|
191
|
+
// Step 2: Show existing providers
|
|
192
|
+
if (config.providers && config.providers.length > 0) {
|
|
193
|
+
console.log(chalk_1.default.blue('Current providers:'));
|
|
194
|
+
for (const p of config.providers) {
|
|
195
|
+
const isDefault = p.id === config.defaultProvider ? chalk_1.default.green(' (default)') : '';
|
|
196
|
+
const label = p.label ? ` ā ${p.label}` : '';
|
|
197
|
+
console.log(chalk_1.default.gray(` ⢠${p.id} / ${p.defaultModel}${label}${isDefault}`));
|
|
198
|
+
}
|
|
199
|
+
const action = await askChoice(rl, chalk_1.default.cyan('\nWhat would you like to do?'), [
|
|
200
|
+
'Add another provider',
|
|
201
|
+
'Replace all providers',
|
|
202
|
+
'Keep existing and exit',
|
|
203
|
+
]);
|
|
204
|
+
if (action === 'Keep existing and exit') {
|
|
205
|
+
rl.close();
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (action === 'Replace all providers') {
|
|
209
|
+
config.providers = [];
|
|
210
|
+
config.defaultProvider = undefined;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
config.providers = [];
|
|
215
|
+
}
|
|
216
|
+
// Step 3: Add providers loop
|
|
217
|
+
let addMore = true;
|
|
218
|
+
while (addMore) {
|
|
219
|
+
const provider = await addProvider(rl);
|
|
220
|
+
if (provider) {
|
|
221
|
+
// Replace existing provider with same id, or add new
|
|
222
|
+
const existingIdx = config.providers.findIndex((p) => p.id === provider.id);
|
|
223
|
+
if (existingIdx >= 0) {
|
|
224
|
+
config.providers[existingIdx] = provider;
|
|
225
|
+
console.log(chalk_1.default.green(` ā Updated provider: ${provider.id}`));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
config.providers.push(provider);
|
|
229
|
+
console.log(chalk_1.default.green(` ā Added provider: ${provider.id}`));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const more = await ask(rl, chalk_1.default.cyan('\nAdd another provider? (y/N): '));
|
|
233
|
+
addMore = more.toLowerCase() === 'y';
|
|
234
|
+
}
|
|
235
|
+
// Step 4: Set default provider
|
|
236
|
+
if (config.providers.length > 0) {
|
|
237
|
+
if (config.providers.length === 1) {
|
|
238
|
+
config.defaultProvider = config.providers[0].id;
|
|
239
|
+
console.log(chalk_1.default.gray(`\nDefault provider: ${config.defaultProvider}`));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
const ids = config.providers.map((p) => p.id);
|
|
243
|
+
const defaultChoice = await askChoice(rl, chalk_1.default.cyan('\nSelect default provider:'), ids);
|
|
244
|
+
config.defaultProvider = defaultChoice;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Save
|
|
248
|
+
(0, config_1.saveConfig)(config);
|
|
249
|
+
console.log(chalk_1.default.green('\nā Configuration saved to ~/.funolio/config.json\n'));
|
|
250
|
+
rl.close();
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAYD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GrE"}
|