@fleettools/opencode-plugin 1.0.1 → 1.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 +46 -38
- package/dist/index.d.ts +76 -60
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +200 -174
- package/dist/index.js.map +1 -0
- package/package.json +20 -20
- package/dist/plugin.d.ts +0 -69
- package/dist/plugin.js +0 -141
- package/manifest.json +0 -28
- package/scripts/package.js +0 -55
- package/tsconfig.json +0 -31
package/README.md
CHANGED
|
@@ -1,71 +1,79 @@
|
|
|
1
1
|
# FleetTools OpenCode Plugin
|
|
2
2
|
|
|
3
|
-
Integrates FleetTools
|
|
3
|
+
Integrates FleetTools CLI functionality into OpenCode.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
```bash
|
|
9
|
-
npm install @fleettools/opencode-plugin
|
|
10
|
-
```
|
|
7
|
+
Add this plugin to your OpenCode config:
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"plugin": ["@fleettools/opencode-plugin"]
|
|
12
|
+
}
|
|
15
13
|
```
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
After restarting OpenCode, the plugin will provide tools and commands for FleetTools management.
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
## Tools
|
|
20
18
|
|
|
21
|
-
###
|
|
22
|
-
|
|
19
|
+
### 📊 `fleet-status`
|
|
20
|
+
Get FleetTools service status and configuration
|
|
21
|
+
|
|
22
|
+
**Parameters:**
|
|
23
|
+
- `format` (optional, enum: text|json, default: text) - Output format
|
|
23
24
|
|
|
25
|
+
**Examples:**
|
|
24
26
|
```bash
|
|
25
|
-
#
|
|
26
|
-
fleet-
|
|
27
|
+
# Human-readable status
|
|
28
|
+
/fleet-status
|
|
27
29
|
|
|
28
|
-
#
|
|
29
|
-
fleet-
|
|
30
|
+
# JSON format
|
|
31
|
+
/fleet-status --format json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 🚀 `fleet-start`
|
|
35
|
+
Start FleetTools services
|
|
30
36
|
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
**Parameters:**
|
|
38
|
+
- `services` (optional, array: api,squawk) - Services to start (default: all enabled)
|
|
39
|
+
|
|
40
|
+
**Examples:**
|
|
41
|
+
```bash
|
|
42
|
+
# Start specific services
|
|
43
|
+
/fleet-start --services api,squawk
|
|
33
44
|
```
|
|
34
45
|
|
|
35
46
|
### 🛑 `fleet-stop`
|
|
36
47
|
Stop FleetTools services
|
|
37
48
|
|
|
49
|
+
**Parameters:**
|
|
50
|
+
- `services` (optional, array: api,squawk) - Services to stop (default: all running)
|
|
51
|
+
- `force` (optional, boolean) - Force stop without graceful shutdown
|
|
52
|
+
- `timeoutMs` (optional, number) - Timeout for graceful shutdown (ms)
|
|
53
|
+
- `format` (optional, enum: text|json, default: text) - Output format
|
|
54
|
+
|
|
55
|
+
**Examples:**
|
|
38
56
|
```bash
|
|
39
|
-
# Graceful stop
|
|
40
|
-
fleet-stop
|
|
57
|
+
# Graceful stop specific services
|
|
58
|
+
/fleet-stop --services api,squawk
|
|
41
59
|
|
|
42
60
|
# Force stop
|
|
43
|
-
fleet-stop --force
|
|
61
|
+
/fleet-stop --force api,squawk --timeout 5000
|
|
44
62
|
```
|
|
45
63
|
|
|
46
|
-
|
|
47
|
-
Get FleetTools service status and configuration
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# Human-readable status
|
|
51
|
-
fleet-status
|
|
52
|
-
|
|
53
|
-
# JSON format
|
|
54
|
-
fleet-status --format json
|
|
55
|
-
```
|
|
64
|
+
## Commands
|
|
56
65
|
|
|
57
|
-
|
|
66
|
+
The plugin also provides these slash commands for quick access:
|
|
58
67
|
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- ✅ **Service Selection**: Start specific services or all services
|
|
68
|
+
- **/fleet-status** - Show FleetTools status
|
|
69
|
+
- **/fleet-start** - Start FleetTools services
|
|
70
|
+
- **/fleet-stop** - Stop FleetTools services
|
|
71
|
+
- **/fleet-help** - Show FleetTools help and usage
|
|
64
72
|
|
|
65
73
|
## Requirements
|
|
66
74
|
|
|
67
75
|
- OpenCode >= 1.0.0
|
|
68
|
-
- FleetTools CLI
|
|
76
|
+
- FleetTools CLI (must be available in PATH)
|
|
69
77
|
- Node.js >= 18.0.0
|
|
70
78
|
|
|
71
79
|
## License
|
package/dist/index.d.ts
CHANGED
|
@@ -1,65 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
/**
|
|
2
|
+
* FleetTools OpenCode Plugin
|
|
3
|
+
*
|
|
4
|
+
* Integrates FleetTools CLI functionality into OpenCode via tools and commands
|
|
5
|
+
*/
|
|
6
|
+
export declare const FleetToolsPlugin: ({ client, $, directory, worktree }: any) => Promise<{
|
|
7
|
+
tool: {
|
|
8
|
+
'fleet-status': {
|
|
9
|
+
description: string;
|
|
10
|
+
parameters: {
|
|
11
|
+
type: string;
|
|
12
|
+
properties: {
|
|
13
|
+
format: {
|
|
14
|
+
type: string;
|
|
15
|
+
enum: string[];
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
execute: ({ format }: {
|
|
21
|
+
format?: string | undefined;
|
|
22
|
+
}) => Promise<any>;
|
|
21
23
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
'fleet-start': {
|
|
25
|
+
description: string;
|
|
26
|
+
parameters: {
|
|
27
|
+
type: string;
|
|
28
|
+
properties: {
|
|
29
|
+
services: {
|
|
30
|
+
type: string;
|
|
31
|
+
items: {
|
|
32
|
+
type: string;
|
|
33
|
+
enum: string[];
|
|
34
|
+
};
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
execute: ({ services }: {
|
|
40
|
+
services?: never[] | undefined;
|
|
41
|
+
}) => Promise<any>;
|
|
35
42
|
};
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
'fleet-stop': {
|
|
44
|
+
description: string;
|
|
45
|
+
parameters: {
|
|
46
|
+
type: string;
|
|
47
|
+
properties: {
|
|
48
|
+
services: {
|
|
49
|
+
type: string;
|
|
50
|
+
items: {
|
|
51
|
+
type: string;
|
|
52
|
+
enum: string[];
|
|
53
|
+
};
|
|
54
|
+
description: string;
|
|
55
|
+
};
|
|
56
|
+
force: {
|
|
57
|
+
type: string;
|
|
58
|
+
description: string;
|
|
59
|
+
};
|
|
60
|
+
timeoutMs: {
|
|
61
|
+
type: string;
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
format: {
|
|
65
|
+
type: string;
|
|
66
|
+
enum: string[];
|
|
67
|
+
description: string;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
execute: ({ services, force, timeoutMs, format }: {
|
|
72
|
+
services?: never[] | undefined;
|
|
73
|
+
force?: boolean | undefined;
|
|
74
|
+
timeoutMs?: undefined;
|
|
75
|
+
format?: string | undefined;
|
|
76
|
+
}) => Promise<any>;
|
|
38
77
|
};
|
|
39
78
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
/** Plugin name */
|
|
43
|
-
name: string;
|
|
44
|
-
/** Plugin version */
|
|
45
|
-
version: string;
|
|
46
|
-
registerCommands(commands: OpenCodeCommandRegistry): Promise<void>;
|
|
47
|
-
private handleStatus;
|
|
48
|
-
private handleSetup;
|
|
49
|
-
private handleDoctor;
|
|
50
|
-
private handleServices;
|
|
51
|
-
private handleHelp;
|
|
52
|
-
private showMessage;
|
|
53
|
-
private showError;
|
|
54
|
-
private showOutput;
|
|
55
|
-
private showInOutputPane;
|
|
56
|
-
}
|
|
57
|
-
export declare function createPlugin(): FleetToolsOpenCodePluginImpl;
|
|
58
|
-
export declare const fleetToolsPlugin: {
|
|
59
|
-
name: string;
|
|
60
|
-
version: string;
|
|
61
|
-
register: (commands: OpenCodeCommandRegistry) => Promise<void>;
|
|
62
|
-
};
|
|
63
|
-
export declare function fallbackRegister(): Promise<void>;
|
|
64
|
-
export default fleetToolsPlugin;
|
|
79
|
+
config(config: any): Promise<void>;
|
|
80
|
+
}>;
|
|
65
81
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAU,oCAAoC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA0IrD,GAAG;EAoE3B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,180 +1,206 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
async handleStatus() {
|
|
47
|
-
this.showMessage('Fetching FleetTools status...');
|
|
48
|
-
try {
|
|
49
|
-
const { stdout } = await execAsync('fleet status --json');
|
|
50
|
-
try {
|
|
51
|
-
const status = JSON.parse(stdout);
|
|
52
|
-
const output = [
|
|
53
|
-
'FleetTools Status',
|
|
54
|
-
'================',
|
|
55
|
-
'',
|
|
56
|
-
`Mode: ${status.mode?.toUpperCase() || 'LOCAL'}`,
|
|
57
|
-
'',
|
|
58
|
-
`User: ${status.config?.fleet?.user_id || 'Not enrolled'}`,
|
|
59
|
-
'',
|
|
60
|
-
];
|
|
61
|
-
if (status.mode === 'synced') {
|
|
62
|
-
output.push('Sync Status:');
|
|
63
|
-
output.push(` Zero: ${status.sync?.zero?.url ? 'Connected' : 'Not configured'}`);
|
|
64
|
-
output.push(` API: ${status.sync?.api?.url || 'Not configured'}`);
|
|
1
|
+
/**
|
|
2
|
+
* FleetTools OpenCode Plugin
|
|
3
|
+
*
|
|
4
|
+
* Integrates FleetTools CLI functionality into OpenCode via tools and commands
|
|
5
|
+
*/
|
|
6
|
+
export const FleetToolsPlugin = async ({ client, $, directory, worktree }) => {
|
|
7
|
+
// Register custom tools for LLM to call
|
|
8
|
+
return {
|
|
9
|
+
tool: {
|
|
10
|
+
'fleet-status': {
|
|
11
|
+
description: 'Get FleetTools service status and configuration',
|
|
12
|
+
parameters: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
format: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
enum: ['text', 'json'],
|
|
18
|
+
description: 'Output format (default: text)'
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
execute: async ({ format = 'text' }) => {
|
|
23
|
+
try {
|
|
24
|
+
const effectiveCwd = worktree ?? directory;
|
|
25
|
+
const result = await $ `fleet status${format === 'json' ? ' --json' : ''}`.cwd(effectiveCwd).nothrow().text();
|
|
26
|
+
if (format === 'json') {
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(result);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { success: false, error: 'Failed to parse status JSON' };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
await client.app.log({
|
|
38
|
+
service: 'fleettools',
|
|
39
|
+
level: 'error',
|
|
40
|
+
message: 'Failed to get FleetTools status',
|
|
41
|
+
extra: { error: error.message || String(error) }
|
|
42
|
+
});
|
|
43
|
+
return { success: false, error: error.message || String(error) };
|
|
44
|
+
}
|
|
65
45
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
46
|
+
},
|
|
47
|
+
'fleet-start': {
|
|
48
|
+
description: 'Start FleetTools services',
|
|
49
|
+
parameters: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
services: {
|
|
53
|
+
type: 'array',
|
|
54
|
+
items: { type: 'string', enum: ['api', 'squawk'] },
|
|
55
|
+
description: 'Services to start (api, squawk)'
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
execute: async ({ services = [] }) => {
|
|
60
|
+
try {
|
|
61
|
+
const effectiveCwd = worktree ?? directory;
|
|
62
|
+
const servicesArg = services.length > 0 ? `--services ${services.join(',')}` : '';
|
|
63
|
+
const result = await $ `fleet start ${servicesArg}`.cwd(effectiveCwd).nothrow().text();
|
|
64
|
+
await client.app.log({
|
|
65
|
+
service: 'fleettools',
|
|
66
|
+
level: 'info',
|
|
67
|
+
message: 'FleetTools services started',
|
|
68
|
+
extra: { services: services.length > 0 ? services : ['all'], result }
|
|
69
|
+
});
|
|
70
|
+
return result || 'FleetTools services started successfully';
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
await client.app.log({
|
|
74
|
+
service: 'fleettools',
|
|
75
|
+
level: 'error',
|
|
76
|
+
message: 'Failed to start FleetTools services',
|
|
77
|
+
extra: { error: error.message || String(error) }
|
|
78
|
+
});
|
|
79
|
+
return { success: false, error: error.message || String(error) };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
'fleet-stop': {
|
|
84
|
+
description: 'Stop FleetTools services',
|
|
85
|
+
parameters: {
|
|
86
|
+
type: 'object',
|
|
87
|
+
properties: {
|
|
88
|
+
services: {
|
|
89
|
+
type: 'array',
|
|
90
|
+
items: { type: 'string', enum: ['api', 'squawk'] },
|
|
91
|
+
description: 'Services to stop (api, squawk)'
|
|
92
|
+
},
|
|
93
|
+
force: {
|
|
94
|
+
type: 'boolean',
|
|
95
|
+
description: 'Force stop without waiting for graceful shutdown'
|
|
96
|
+
},
|
|
97
|
+
timeoutMs: {
|
|
98
|
+
type: 'number',
|
|
99
|
+
description: 'Timeout for graceful shutdown in milliseconds'
|
|
100
|
+
},
|
|
101
|
+
format: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
enum: ['text', 'json'],
|
|
104
|
+
description: 'Output format (default: text)'
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
execute: async ({ services = [], force = false, timeoutMs = undefined, format = 'text' }) => {
|
|
109
|
+
try {
|
|
110
|
+
const effectiveCwd = worktree ?? directory;
|
|
111
|
+
const flags = [
|
|
112
|
+
services.length > 0 ? `--services ${services.join(',')}` : '',
|
|
113
|
+
force ? '--force' : '',
|
|
114
|
+
timeoutMs ? `--timeout ${timeoutMs}` : '',
|
|
115
|
+
format === 'json' ? '--json' : ''
|
|
116
|
+
].filter(Boolean).join(' ');
|
|
117
|
+
const result = await $ `fleet stop ${flags}`.cwd(effectiveCwd).nothrow().text();
|
|
118
|
+
if (format === 'json') {
|
|
119
|
+
try {
|
|
120
|
+
return JSON.parse(result);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return { success: false, error: 'Failed to parse stop JSON' };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
await client.app.log({
|
|
130
|
+
service: 'fleettools',
|
|
131
|
+
level: 'error',
|
|
132
|
+
message: 'Failed to stop FleetTools services',
|
|
133
|
+
extra: { error: error.message || String(error) }
|
|
134
|
+
});
|
|
135
|
+
return { success: false, error: error.message || String(error) };
|
|
136
|
+
}
|
|
70
137
|
}
|
|
71
|
-
this.showOutput(output);
|
|
72
|
-
const details = JSON.stringify(status, null, 2);
|
|
73
|
-
this.showInOutputPane('Status Details', details);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
this.showOutput(['Failed to parse status output']);
|
|
77
|
-
this.showInOutputPane('Status Details', stdout);
|
|
78
138
|
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// ==========================================================================
|
|
135
|
-
showMessage(message) {
|
|
136
|
-
this.showOutput(`\n${message}\n`);
|
|
137
|
-
}
|
|
138
|
-
showError(message, error) {
|
|
139
|
-
this.showOutput(`\n❌ Error: ${message}\n`);
|
|
140
|
-
this.showOutput(` ${error.message}\n`);
|
|
141
|
-
}
|
|
142
|
-
showOutput(message) {
|
|
143
|
-
if (Array.isArray(message)) {
|
|
144
|
-
message.forEach((line) => console.log(line));
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
console.log(message);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
showInOutputPane(title, content) {
|
|
151
|
-
console.log(`\n--- ${title} ---\n${content}\n`);
|
|
152
|
-
}
|
|
139
|
+
},
|
|
140
|
+
// Register custom slash commands via config hook
|
|
141
|
+
async config(config) {
|
|
142
|
+
// Initialize command registry if it doesn't exist
|
|
143
|
+
config.command = config.command ?? {};
|
|
144
|
+
// /fleet-status [format] - Show FleetTools status
|
|
145
|
+
config.command['fleet-status'] = {
|
|
146
|
+
template: `Use the fleet-status tool to get FleetTools status and configuration$ARGUMENTS ? \` with format: $ARGUMENTS\` : ''.`,
|
|
147
|
+
description: 'Show FleetTools status and configuration',
|
|
148
|
+
agent: 'build'
|
|
149
|
+
};
|
|
150
|
+
// /fleet-start [services] - Start FleetTools services
|
|
151
|
+
config.command['fleet-start'] = {
|
|
152
|
+
template: `Use the fleet-start tool to start FleetTools services$ARGUMENTS ? \` with services: $ARGUMENTS\` : ''.\n\nThis runs services in the background. For foreground execution or other options, use the fleet-start tool directly.`,
|
|
153
|
+
description: 'Start FleetTools services',
|
|
154
|
+
agent: 'build'
|
|
155
|
+
};
|
|
156
|
+
// /fleet-stop [services] [force] [timeout] [format] - Stop FleetTools services
|
|
157
|
+
config.command['fleet-stop'] = {
|
|
158
|
+
template: `Use the fleet-stop tool to stop FleetTools services$ARGUMENTS ? \` with: $ARGUMENTS\` : ''.\n\nThis supports selective service stopping and graceful shutdown options. Use the fleet-stop tool directly for advanced options.`,
|
|
159
|
+
description: 'Stop FleetTools services',
|
|
160
|
+
agent: 'build'
|
|
161
|
+
};
|
|
162
|
+
// /fleet-help - Show FleetTools help
|
|
163
|
+
config.command['fleet-help'] = {
|
|
164
|
+
template: `# FleetTools Plugin for OpenCode
|
|
165
|
+
|
|
166
|
+
## Available Tools
|
|
167
|
+
- **fleet-status** - Get FleetTools service status and configuration
|
|
168
|
+
- **fleet-start** - Start FleetTools services
|
|
169
|
+
- **fleet-stop** - Stop FleetTools services
|
|
170
|
+
|
|
171
|
+
## Slash Commands
|
|
172
|
+
- **/fleet-status [format]** - Show status (format: text|json)
|
|
173
|
+
- **/fleet-start [services]** - Start services (services: api,squawk)
|
|
174
|
+
- **/fleet-stop [services]** - Stop services (services: api,squawk)
|
|
175
|
+
- **/fleet-help** - Show this help
|
|
176
|
+
|
|
177
|
+
## Examples
|
|
178
|
+
\`\`\`bash
|
|
179
|
+
# Check FleetTools status
|
|
180
|
+
/fleet-status
|
|
181
|
+
|
|
182
|
+
# Start specific services
|
|
183
|
+
/fleet-start api,squawk
|
|
184
|
+
|
|
185
|
+
# Stop services with force
|
|
186
|
+
/fleet-stop --force api,squawk --timeout 3000
|
|
187
|
+
\`\`\`
|
|
188
|
+
|
|
189
|
+
## Installation
|
|
190
|
+
Add this plugin to your OpenCode config:
|
|
191
|
+
\`\`\`json
|
|
192
|
+
{
|
|
193
|
+
"plugin": ["@fleettools/opencode-plugin"]
|
|
153
194
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
version: '0.1.0',
|
|
165
|
-
register: async (commands) => {
|
|
166
|
-
const fleetPlugin = createPlugin();
|
|
167
|
-
await fleetPlugin.registerCommands(commands);
|
|
168
|
-
},
|
|
195
|
+
\`\`\`
|
|
196
|
+
|
|
197
|
+
After restarting OpenCode, the tools and commands will be available in your session.
|
|
198
|
+
|
|
199
|
+
For more information, see: https://github.com/v1truv1us/fleettools`,
|
|
200
|
+
description: 'Show FleetTools help and usage',
|
|
201
|
+
agent: 'build'
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
};
|
|
169
205
|
};
|
|
170
|
-
async function fallbackRegister() {
|
|
171
|
-
console.warn('[FleetTools] OpenCode SDK not available. Running in CLI fallback mode.');
|
|
172
|
-
console.warn('[FleetTools] The following commands are available via fleet CLI:');
|
|
173
|
-
console.warn(' - fleet status');
|
|
174
|
-
console.warn(' - fleet setup');
|
|
175
|
-
console.warn(' - fleet doctor');
|
|
176
|
-
console.warn(' - fleet services');
|
|
177
|
-
console.warn(' - fleet help');
|
|
178
|
-
}
|
|
179
|
-
exports.default = exports.fleetToolsPlugin;
|
|
180
206
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fleettools/opencode-plugin",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "FleetTools OpenCode Plugin - AI Agent Coordination System",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"default": "./dist/index.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
7
12
|
"scripts": {
|
|
8
13
|
"build": "tsc",
|
|
9
14
|
"dev": "tsc --watch",
|
|
10
|
-
"
|
|
15
|
+
"clean": "rm -rf dist",
|
|
16
|
+
"test": "bun test-contract.ts && bun test-exists.ts && bun test-smoke.ts --cwd test",
|
|
17
|
+
"package": "npm run build && npm publish"
|
|
11
18
|
},
|
|
12
19
|
"keywords": [
|
|
13
20
|
"fleettools",
|
|
@@ -21,23 +28,16 @@
|
|
|
21
28
|
"license": "MIT",
|
|
22
29
|
"dependencies": {},
|
|
23
30
|
"devDependencies": {
|
|
24
|
-
"typescript": "^5.
|
|
31
|
+
"typescript": "^5.9.3",
|
|
25
32
|
"@types/node": "^20.0.0"
|
|
26
33
|
},
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"description": "AI Agent Coordination System for FleetTools",
|
|
36
|
-
"icon": "assets/icon.svg",
|
|
37
|
-
"permissions": [
|
|
38
|
-
"bash",
|
|
39
|
-
"read",
|
|
40
|
-
"write"
|
|
41
|
-
]
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"assets",
|
|
37
|
+
"README.md",
|
|
38
|
+
"package.json"
|
|
39
|
+
],
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
42
|
}
|
|
43
43
|
}
|
package/dist/plugin.d.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FleetTools OpenCode Plugin
|
|
3
|
-
*
|
|
4
|
-
* Integrates FleetTools CLI functionality into OpenCode
|
|
5
|
-
*/
|
|
6
|
-
export default function FleetToolsPlugin(): Promise<{
|
|
7
|
-
tool: {
|
|
8
|
-
'fleet-status': {
|
|
9
|
-
description: string;
|
|
10
|
-
parameters: {
|
|
11
|
-
type: string;
|
|
12
|
-
properties: {
|
|
13
|
-
format: {
|
|
14
|
-
type: string;
|
|
15
|
-
enum: string[];
|
|
16
|
-
description: string;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
execute: ({ format }: {
|
|
21
|
-
format?: string;
|
|
22
|
-
}) => Promise<{
|
|
23
|
-
success: boolean;
|
|
24
|
-
data: string;
|
|
25
|
-
error?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
success: boolean;
|
|
28
|
-
error: string;
|
|
29
|
-
data?: undefined;
|
|
30
|
-
}>;
|
|
31
|
-
};
|
|
32
|
-
'fleet-start': {
|
|
33
|
-
description: string;
|
|
34
|
-
parameters: {
|
|
35
|
-
type: string;
|
|
36
|
-
properties: {
|
|
37
|
-
services: {
|
|
38
|
-
type: string;
|
|
39
|
-
description: string;
|
|
40
|
-
};
|
|
41
|
-
foreground: {
|
|
42
|
-
type: string;
|
|
43
|
-
description: string;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
|
-
execute: ({ services, foreground }: {
|
|
48
|
-
services?: string;
|
|
49
|
-
foreground?: boolean;
|
|
50
|
-
}) => Promise<unknown>;
|
|
51
|
-
};
|
|
52
|
-
'fleet-stop': {
|
|
53
|
-
description: string;
|
|
54
|
-
parameters: {
|
|
55
|
-
type: string;
|
|
56
|
-
properties: {
|
|
57
|
-
force: {
|
|
58
|
-
type: string;
|
|
59
|
-
description: string;
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
execute: ({ force }: {
|
|
64
|
-
force?: boolean;
|
|
65
|
-
}) => Promise<unknown>;
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
}>;
|
|
69
|
-
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.js
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* FleetTools OpenCode Plugin
|
|
4
|
-
*
|
|
5
|
-
* Integrates FleetTools CLI functionality into OpenCode
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.default = FleetToolsPlugin;
|
|
9
|
-
async function FleetToolsPlugin() {
|
|
10
|
-
console.log('FleetTools plugin initialized!');
|
|
11
|
-
// Return tool definitions for FleetTools
|
|
12
|
-
return {
|
|
13
|
-
tool: {
|
|
14
|
-
'fleet-status': {
|
|
15
|
-
description: 'Get FleetTools service status and configuration',
|
|
16
|
-
parameters: {
|
|
17
|
-
type: 'object',
|
|
18
|
-
properties: {
|
|
19
|
-
format: {
|
|
20
|
-
type: 'string',
|
|
21
|
-
enum: ['json', 'text'],
|
|
22
|
-
description: 'Output format (default: text)'
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
execute: async ({ format = 'text' }) => {
|
|
27
|
-
const { execSync } = await import('node:child_process');
|
|
28
|
-
try {
|
|
29
|
-
const result = execSync(`fleet status${format === 'json' ? ' --json' : ''}`, {
|
|
30
|
-
encoding: 'utf-8'
|
|
31
|
-
});
|
|
32
|
-
return { success: true, data: result };
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
return {
|
|
36
|
-
success: false,
|
|
37
|
-
error: error instanceof Error ? error.message : String(error)
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
'fleet-start': {
|
|
43
|
-
description: 'Start FleetTools services',
|
|
44
|
-
parameters: {
|
|
45
|
-
type: 'object',
|
|
46
|
-
properties: {
|
|
47
|
-
services: {
|
|
48
|
-
type: 'string',
|
|
49
|
-
description: 'Comma-separated list of services to start (api,squawk)'
|
|
50
|
-
},
|
|
51
|
-
foreground: {
|
|
52
|
-
type: 'boolean',
|
|
53
|
-
description: 'Run in foreground instead of background'
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
execute: async ({ services, foreground }) => {
|
|
58
|
-
const { spawn } = await import('node:child_process');
|
|
59
|
-
return new Promise((resolve) => {
|
|
60
|
-
const args = ['start'];
|
|
61
|
-
if (services)
|
|
62
|
-
args.push('--services', services);
|
|
63
|
-
if (foreground)
|
|
64
|
-
args.push('--foreground');
|
|
65
|
-
const process = spawn('fleet', args, { stdio: 'pipe' });
|
|
66
|
-
let stdout = '';
|
|
67
|
-
let stderr = '';
|
|
68
|
-
process.stdout?.on('data', (data) => stdout += data);
|
|
69
|
-
process.stderr?.on('data', (data) => stderr += data);
|
|
70
|
-
process.on('close', (code) => {
|
|
71
|
-
if (code === 0) {
|
|
72
|
-
resolve({
|
|
73
|
-
success: true,
|
|
74
|
-
data: stdout || 'FleetTools services started successfully'
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
resolve({
|
|
79
|
-
success: false,
|
|
80
|
-
error: stderr || `Process exited with code ${code}`
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
process.on('error', (error) => {
|
|
85
|
-
resolve({
|
|
86
|
-
success: false,
|
|
87
|
-
error: error.message
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
'fleet-stop': {
|
|
94
|
-
description: 'Stop FleetTools services',
|
|
95
|
-
parameters: {
|
|
96
|
-
type: 'object',
|
|
97
|
-
properties: {
|
|
98
|
-
force: {
|
|
99
|
-
type: 'boolean',
|
|
100
|
-
description: 'Force stop services'
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
execute: async ({ force }) => {
|
|
105
|
-
const { spawn } = await import('node:child_process');
|
|
106
|
-
return new Promise((resolve) => {
|
|
107
|
-
const args = ['stop'];
|
|
108
|
-
if (force)
|
|
109
|
-
args.push('--force');
|
|
110
|
-
const process = spawn('fleet', args, { stdio: 'pipe' });
|
|
111
|
-
let stdout = '';
|
|
112
|
-
let stderr = '';
|
|
113
|
-
process.stdout?.on('data', (data) => stdout += data);
|
|
114
|
-
process.stderr?.on('data', (data) => stderr += data);
|
|
115
|
-
process.on('close', (code) => {
|
|
116
|
-
if (code === 0) {
|
|
117
|
-
resolve({
|
|
118
|
-
success: true,
|
|
119
|
-
data: stdout || 'FleetTools services stopped successfully'
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
resolve({
|
|
124
|
-
success: false,
|
|
125
|
-
error: stderr || `Process exited with code ${code}`
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
process.on('error', (error) => {
|
|
130
|
-
resolve({
|
|
131
|
-
success: false,
|
|
132
|
-
error: error.message
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=plugin.js.map
|
package/manifest.json
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "FleetTools",
|
|
3
|
-
"description": "AI Agent Coordination System",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"author": "FleetTools",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"entry": "dist/plugin.js",
|
|
8
|
-
"icon": "assets/icon.svg",
|
|
9
|
-
"permissions": [
|
|
10
|
-
"bash",
|
|
11
|
-
"read",
|
|
12
|
-
"write"
|
|
13
|
-
],
|
|
14
|
-
"hooks": [
|
|
15
|
-
"tool.execute.before",
|
|
16
|
-
"chat.params"
|
|
17
|
-
],
|
|
18
|
-
"tools": [
|
|
19
|
-
"fleet-status",
|
|
20
|
-
"fleet-start",
|
|
21
|
-
"fleet-stop"
|
|
22
|
-
],
|
|
23
|
-
"categories": [
|
|
24
|
-
"development",
|
|
25
|
-
"automation",
|
|
26
|
-
"ai"
|
|
27
|
-
]
|
|
28
|
-
}
|
package/scripts/package.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Plugin Packaging Script
|
|
5
|
-
*
|
|
6
|
-
* Creates a distributable plugin package
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { readFileSync, writeFileSync, createWriteStream } from 'node:fs';
|
|
10
|
-
import { join } from 'node:path';
|
|
11
|
-
import { execSync } from 'node:child_process';
|
|
12
|
-
import { fileURLToPath } from 'node:url';
|
|
13
|
-
import { dirname } from 'node:path';
|
|
14
|
-
import archiver from 'archiver';
|
|
15
|
-
|
|
16
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
-
const __dirname = dirname(__filename);
|
|
18
|
-
|
|
19
|
-
async function createPluginPackage() {
|
|
20
|
-
console.log('📦 Creating FleetTools OpenCode plugin package...');
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
// Ensure the build is up to date
|
|
24
|
-
execSync('npm run build', { stdio: 'inherit' });
|
|
25
|
-
|
|
26
|
-
// Create a zip file
|
|
27
|
-
const output = createWriteStream(join(__dirname, '../fleettools-opencode-plugin.zip'));
|
|
28
|
-
const archive = archiver('zip', { zlib: { level: 9 } });
|
|
29
|
-
|
|
30
|
-
output.on('close', () => {
|
|
31
|
-
console.log(`✅ Plugin package created: ${archive.pointer()} bytes`);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
archive.on('error', (err) => {
|
|
35
|
-
throw err;
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
archive.pipe(output);
|
|
39
|
-
|
|
40
|
-
// Add essential files
|
|
41
|
-
archive.file(join(__dirname, '../dist/plugin.js'), { name: 'plugin.js' });
|
|
42
|
-
archive.file(join(__dirname, '../dist/plugin.d.ts'), { name: 'plugin.d.ts' });
|
|
43
|
-
archive.file(join(__dirname, '../package.json'), { name: 'package.json' });
|
|
44
|
-
archive.file(join(__dirname, '../manifest.json'), { name: 'manifest.json' });
|
|
45
|
-
archive.file(join(__dirname, '../README.md'), { name: 'README.md' });
|
|
46
|
-
|
|
47
|
-
await archive.finalize();
|
|
48
|
-
|
|
49
|
-
} catch (error) {
|
|
50
|
-
console.error('❌ Failed to create plugin package:', error);
|
|
51
|
-
process.exit(1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
createPluginPackage();
|
package/tsconfig.json
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "NodeNext",
|
|
5
|
-
"moduleResolution": "NodeNext",
|
|
6
|
-
"lib": ["ES2022"],
|
|
7
|
-
"outDir": "./dist",
|
|
8
|
-
"rootDir": "./src",
|
|
9
|
-
"strict": true,
|
|
10
|
-
"esModuleInterop": true,
|
|
11
|
-
"skipLibCheck": true,
|
|
12
|
-
"forceConsistentCasingInFileNames": true,
|
|
13
|
-
"resolveJsonModule": true,
|
|
14
|
-
"declaration": true,
|
|
15
|
-
"declarationMap": true,
|
|
16
|
-
"sourceMap": true,
|
|
17
|
-
"noImplicitAny": true,
|
|
18
|
-
"noUnusedLocals": true,
|
|
19
|
-
"noUnusedParameters": true,
|
|
20
|
-
"noImplicitReturns": true,
|
|
21
|
-
"noFallthroughCasesInSwitch": true,
|
|
22
|
-
"noUncheckedIndexedAccess": true
|
|
23
|
-
},
|
|
24
|
-
"include": [
|
|
25
|
-
"src/**/*.ts"
|
|
26
|
-
],
|
|
27
|
-
"exclude": [
|
|
28
|
-
"node_modules",
|
|
29
|
-
"dist"
|
|
30
|
-
]
|
|
31
|
-
}
|