@fleettools/cli 0.2.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 ADDED
@@ -0,0 +1,202 @@
1
+ # @fleettools/fleet-cli
2
+
3
+ Global CLI for FleetTools - AI Agent Coordination System
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Global installation
9
+ npm install -g @fleettools/fleet-cli
10
+ # or
11
+ bun install -g @fleettools/fleet-cli
12
+
13
+ # Development installation
14
+ git clone https://github.com/v1truvius/fleettools.git
15
+ cd fleettools
16
+ bun install
17
+ bun run build:packages
18
+ cd packages/fleet-cli
19
+ bun run build
20
+ npm link # or bun link
21
+ ```
22
+
23
+ ## Quick Start
24
+
25
+ ```bash
26
+ # Initialize a new project
27
+ fleet init my-project
28
+
29
+ # Start services
30
+ cd my-project
31
+ fleet start
32
+
33
+ # Check status
34
+ fleet status
35
+ ```
36
+
37
+ ## Commands
38
+
39
+ ### Project Management
40
+
41
+ - `fleet init [path]` - Initialize a new FleetTools project
42
+ - `fleet start` - Start FleetTools services
43
+ - `fleet stop` - Stop FleetTools services
44
+ - `fleet restart` - Restart FleetTools services
45
+ - `fleet status` - Show fleet status and configuration
46
+
47
+ ### Configuration
48
+
49
+ - `fleet config list` - Show current configuration
50
+ - `fleet config set <key> <value>` - Set configuration value
51
+ - `fleet config edit` - Interactive configuration editor
52
+
53
+ ### Services
54
+
55
+ - `fleet services start [service]` - Start specific service
56
+ - `fleet services stop [service]` - Stop specific service
57
+ - `fleet services logs [service]` - Show service logs
58
+
59
+ ### Utilities
60
+
61
+ - `fleet logs` - Show FleetTools logs
62
+ - `fleet clean` - Clean FleetTools data and caches
63
+
64
+ ## Project Templates
65
+
66
+ ### Basic Template
67
+ ```bash
68
+ fleet init --template basic
69
+ ```
70
+
71
+ Basic FleetTools setup with:
72
+ - Squawk coordination service
73
+ - API server
74
+ - Git-backed work tracking
75
+
76
+ ### Agent Template
77
+ ```bash
78
+ fleet init --template agent
79
+ ```
80
+
81
+ Template for developing AI agents with:
82
+ - Agent development structure
83
+ - Task definitions
84
+ - Tool implementations
85
+
86
+ ## Runtime Support
87
+
88
+ FleetTools CLI supports both Bun and Node.js runtimes:
89
+
90
+ - **Bun** (default): Optimal performance and built-in TypeScript support
91
+ - **Node.js**: Compatibility with existing Node.js workflows
92
+
93
+ The CLI automatically detects the runtime and optimizes for the best performance.
94
+
95
+ ## Configuration
96
+
97
+ ### Global Configuration
98
+
99
+ Located at `~/.config/fleet/config.yaml`:
100
+
101
+ ```yaml
102
+ version: "1.0.0"
103
+ defaultRuntime: "bun"
104
+ telemetry:
105
+ enabled: false
106
+ services:
107
+ autoStart: false
108
+ squawkPort: 3000
109
+ apiPort: 3001
110
+ paths:
111
+ configDir: "~/.config/fleet"
112
+ dataDir: "~/.local/share/fleet"
113
+ logDir: "~/.local/state/fleet/logs"
114
+ ```
115
+
116
+ ### Project Configuration
117
+
118
+ Located at `fleet.yaml` in project root:
119
+
120
+ ```yaml
121
+ name: "my-fleet-project"
122
+ version: "1.0.0"
123
+ fleet:
124
+ version: "0.1.0"
125
+ mode: "local"
126
+ services:
127
+ squawk:
128
+ enabled: true
129
+ port: 3000
130
+ dataDir: "./.fleet/squawk"
131
+ api:
132
+ enabled: true
133
+ port: 3001
134
+ postgres:
135
+ enabled: false
136
+ provider: "podman"
137
+ port: 5432
138
+ dataDir: "./.fleet/postgres"
139
+ plugins:
140
+ claudeCode: true
141
+ openCode: true
142
+ ```
143
+
144
+ ## Integration with Editors
145
+
146
+ FleetTools provides plugins for popular code editors:
147
+
148
+ - **Claude Code**: Fleet commands available via `/fleet`
149
+ - **OpenCode**: Fleet commands available via `/fleet`
150
+
151
+ ## Environment Variables
152
+
153
+ - `FLEET_CONFIG_PATH` - Path to global configuration file
154
+ - `FLEET_DATA_DIR` - Override for data directory
155
+ - `FLEET_LOG_LEVEL` - Log level (debug, info, warn, error)
156
+
157
+ ## Examples
158
+
159
+ ### Initialize Project with Custom Settings
160
+
161
+ ```bash
162
+ fleet init my-project --template agent --yes
163
+ cd my-project
164
+ fleet config set services.squawk.port 3005
165
+ fleet config set services.api.port 3006
166
+ ```
167
+
168
+ ### Start Specific Services
169
+
170
+ ```bash
171
+ fleet start
172
+ fleet services start api
173
+ fleet services logs squawk --follow
174
+ ```
175
+
176
+ ### Check Status
177
+
178
+ ```bash
179
+ fleet status --json # JSON output
180
+ fleet status # Human-readable output
181
+ ```
182
+
183
+ ## Development
184
+
185
+ ```bash
186
+ git clone https://github.com/v1truvius/fleettools.git
187
+ cd fleettools/packages/fleet-cli
188
+ bun install
189
+ bun run dev # Development mode with watch
190
+ ```
191
+
192
+ ## Contributing
193
+
194
+ 1. Fork the repository
195
+ 2. Create a feature branch
196
+ 3. Make your changes
197
+ 4. Add tests
198
+ 5. Submit a pull request
199
+
200
+ ## License
201
+
202
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Fleet Config Command
3
+ *
4
+ * Manage FleetTools configuration
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function registerConfigCommand(program: Command): void;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0H5D"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Fleet Config Command
3
+ *
4
+ * Manage FleetTools configuration
5
+ */
6
+ import chalk from 'chalk';
7
+ import { loadGlobalConfig, saveGlobalConfig, loadProjectConfig, saveProjectConfig, isFleetProject } from '@fleettools/fleet-shared';
8
+ export function registerConfigCommand(program) {
9
+ const configCmd = program
10
+ .command('config')
11
+ .description('Manage FleetTools configuration');
12
+ // List configuration
13
+ configCmd
14
+ .command('list')
15
+ .description('Show current configuration')
16
+ .option('--global', 'Show global configuration')
17
+ .option('--project', 'Show project configuration (default)')
18
+ .action((options) => {
19
+ try {
20
+ if (options.global) {
21
+ const config = loadGlobalConfig();
22
+ console.log(chalk.blue.bold('Global Configuration'));
23
+ console.log(chalk.gray('โ•'.repeat(30)));
24
+ console.log(JSON.stringify(config, null, 2));
25
+ }
26
+ else {
27
+ if (!isFleetProject()) {
28
+ console.error(chalk.red('โŒ Not in a FleetTools project.'));
29
+ console.log(chalk.yellow('Use --global to view global configuration.'));
30
+ return;
31
+ }
32
+ const config = loadProjectConfig();
33
+ if (!config) {
34
+ console.error(chalk.red('โŒ Failed to load project configuration.'));
35
+ return;
36
+ }
37
+ console.log(chalk.blue.bold('Project Configuration'));
38
+ console.log(chalk.gray('โ•'.repeat(30)));
39
+ console.log(JSON.stringify(config, null, 2));
40
+ }
41
+ }
42
+ catch (error) {
43
+ console.error(chalk.red('โŒ Failed to load configuration:'), error.message);
44
+ }
45
+ });
46
+ // Set configuration values
47
+ configCmd
48
+ .command('set')
49
+ .description('Set configuration values')
50
+ .option('--global', 'Set global configuration')
51
+ .argument('<key>', 'Configuration key (e.g., services.squawk.port)')
52
+ .argument('<value>', 'Configuration value')
53
+ .action(async (key, value, options) => {
54
+ try {
55
+ if (options.global) {
56
+ const config = loadGlobalConfig();
57
+ // Parse nested key and set value
58
+ const keys = key.split('.');
59
+ let current = config;
60
+ for (let i = 0; i < keys.length - 1; i++) {
61
+ if (!(keys[i] in current)) {
62
+ current[keys[i]] = {};
63
+ }
64
+ current = current[keys[i]];
65
+ }
66
+ // Type conversion
67
+ if (value === 'true')
68
+ current[keys[keys.length - 1]] = true;
69
+ else if (value === 'false')
70
+ current[keys[keys.length - 1]] = false;
71
+ else if (!isNaN(Number(value)))
72
+ current[keys[keys.length - 1]] = Number(value);
73
+ else
74
+ current[keys[keys.length - 1]] = value;
75
+ saveGlobalConfig(config);
76
+ console.log(chalk.green(`โœ… Set global config: ${key} = ${value}`));
77
+ }
78
+ else {
79
+ if (!isFleetProject()) {
80
+ console.error(chalk.red('โŒ Not in a FleetTools project.'));
81
+ console.log(chalk.yellow('Use --global to set global configuration.'));
82
+ return;
83
+ }
84
+ const config = loadProjectConfig();
85
+ if (!config) {
86
+ console.error(chalk.red('โŒ Failed to load project configuration.'));
87
+ return;
88
+ }
89
+ // Parse nested key and set value
90
+ const keys = key.split('.');
91
+ let current = config;
92
+ for (let i = 0; i < keys.length - 1; i++) {
93
+ if (!(keys[i] in current)) {
94
+ current[keys[i]] = {};
95
+ }
96
+ current = current[keys[i]];
97
+ }
98
+ // Type conversion
99
+ if (value === 'true')
100
+ current[keys[keys.length - 1]] = true;
101
+ else if (value === 'false')
102
+ current[keys[keys.length - 1]] = false;
103
+ else if (!isNaN(Number(value)))
104
+ current[keys[keys.length - 1]] = Number(value);
105
+ else
106
+ current[keys[keys.length - 1]] = value;
107
+ saveProjectConfig(config);
108
+ console.log(chalk.green(`โœ… Set project config: ${key} = ${value}`));
109
+ }
110
+ }
111
+ catch (error) {
112
+ console.error(chalk.red('โŒ Failed to set configuration:'), error.message);
113
+ }
114
+ });
115
+ // Interactive configuration
116
+ configCmd
117
+ .command('edit')
118
+ .description('Interactive configuration editor (simplified for now)')
119
+ .option('--global', 'Edit global configuration')
120
+ .action(async (options) => {
121
+ try {
122
+ console.log(chalk.yellow('โš ๏ธ Interactive configuration editing not implemented yet.'));
123
+ console.log(chalk.gray('Use fleet config set <key> <value> for now.'));
124
+ }
125
+ catch (error) {
126
+ console.error(chalk.red('โŒ Failed to edit configuration:'), error.message);
127
+ }
128
+ });
129
+ }
130
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Fleet Init Command
3
+ *
4
+ * Initialize a new FleetTools project
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function registerInitCommand(program: Command): void;
8
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE1D"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Fleet Init Command
3
+ *
4
+ * Initialize a new FleetTools project
5
+ */
6
+ import chalk from 'chalk';
7
+ import { join } from 'node:path';
8
+ import { initializeProject, getAvailableTemplates, getTemplateInfo, saveProjectConfig, loadGlobalConfig, ensureDirectories, colorize } from '@fleettools/fleet-shared';
9
+ export function registerInitCommand(program) {
10
+ program
11
+ .command('init')
12
+ .description('Initialize a new FleetTools project')
13
+ .option('-t, --template <template>', 'Project template to use', 'basic')
14
+ .option('-n, --name <name>', 'Project name')
15
+ .option('-y, --yes', 'Accept all defaults')
16
+ .argument('[path]', 'Directory to initialize (default: current directory)', '.')
17
+ .action(async (projectPath, options) => {
18
+ try {
19
+ console.log(chalk.blue.bold('๐Ÿš€ FleetTools Project Initialization'));
20
+ console.log(chalk.gray('โ•'.repeat(50)));
21
+ console.log();
22
+ // Ensure global config exists
23
+ const globalConfig = loadGlobalConfig();
24
+ ensureDirectories(globalConfig);
25
+ // Validate template
26
+ const availableTemplates = getAvailableTemplates();
27
+ if (!availableTemplates.includes(options.template)) {
28
+ console.error(chalk.red(`โŒ Unknown template: ${options.template}`));
29
+ console.log(chalk.yellow('Available templates:'));
30
+ availableTemplates.forEach(template => {
31
+ const info = getTemplateInfo(template);
32
+ console.log(` ${template}: ${info?.description}`);
33
+ });
34
+ process.exit(1);
35
+ }
36
+ // For now, use defaults only - interactive prompts will be fixed later
37
+ let projectConfig = {
38
+ name: options.name || join(process.cwd(), projectPath).split('/').pop() || 'fleet-project',
39
+ template: options.template
40
+ };
41
+ // Initialize project
42
+ console.log(chalk.blue(`๐Ÿ“ Initializing project in: ${projectPath}`));
43
+ const project = initializeProject(join(process.cwd(), projectPath), projectConfig.template || options.template, projectConfig);
44
+ // Save configuration
45
+ saveProjectConfig(project);
46
+ // Display success message
47
+ console.log();
48
+ console.log(chalk.green.bold('โœ… Project initialized successfully!'));
49
+ console.log();
50
+ console.log(chalk.blue('Next steps:'));
51
+ console.log(` 1. ${colorize('cd', 'cyan')} ${projectPath}`);
52
+ console.log(` 2. ${colorize('fleet start', 'cyan')} - Start FleetTools services`);
53
+ console.log(` 3. ${colorize('fleet status', 'cyan')} - Check fleet status`);
54
+ console.log();
55
+ console.log(chalk.blue('Available commands:'));
56
+ console.log(' fleet start - Start all services');
57
+ console.log(' fleet stop - Stop all services');
58
+ console.log(' fleet status - Show status');
59
+ console.log(' fleet config - Manage configuration');
60
+ console.log(' fleet --help - Show all commands');
61
+ console.log();
62
+ }
63
+ catch (error) {
64
+ console.error(chalk.red('โŒ Initialization failed:'), error.message);
65
+ if (process.argv.includes('--verbose')) {
66
+ console.error(error.stack);
67
+ }
68
+ process.exit(1);
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Fleet Project Commands
3
+ *
4
+ * Project-specific commands
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function registerProjectCommands(program: Command): void;
8
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF9D"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Fleet Project Commands
3
+ *
4
+ * Project-specific commands
5
+ */
6
+ import chalk from 'chalk';
7
+ import { isFleetProject } from '@fleettools/fleet-shared';
8
+ export function registerProjectCommands(program) {
9
+ program
10
+ .command('stop')
11
+ .description('Stop all FleetTools services')
12
+ .action(async () => {
13
+ try {
14
+ if (!isFleetProject()) {
15
+ console.error(chalk.red('โŒ Not in a FleetTools project.'));
16
+ console.log(chalk.yellow('Use fleet services stop to manage services globally.'));
17
+ return;
18
+ }
19
+ console.log(chalk.blue('๐Ÿ›‘ Stopping FleetTools services...'));
20
+ console.log(chalk.yellow('โš ๏ธ Service stopping not implemented yet.'));
21
+ console.log(chalk.gray('Use Ctrl+C to stop running services.'));
22
+ }
23
+ catch (error) {
24
+ console.error(chalk.red('โŒ Failed to stop services:'), error.message);
25
+ }
26
+ });
27
+ program
28
+ .command('restart')
29
+ .description('Restart all FleetTools services')
30
+ .action(async () => {
31
+ try {
32
+ if (!isFleetProject()) {
33
+ console.error(chalk.red('โŒ Not in a FleetTools project.'));
34
+ return;
35
+ }
36
+ console.log(chalk.blue('๐Ÿ”„ Restarting FleetTools services...'));
37
+ console.log(chalk.yellow('โš ๏ธ Service restart not implemented yet.'));
38
+ console.log(chalk.gray('Use fleet stop && fleet start to restart services.'));
39
+ }
40
+ catch (error) {
41
+ console.error(chalk.red('โŒ Failed to restart services:'), error.message);
42
+ }
43
+ });
44
+ program
45
+ .command('logs')
46
+ .description('Show FleetTools logs')
47
+ .option('-f, --follow', 'Follow log output')
48
+ .option('-s, --service <service>', 'Show logs for specific service')
49
+ .action(async (options) => {
50
+ try {
51
+ if (!isFleetProject()) {
52
+ console.error(chalk.red('โŒ Not in a FleetTools project.'));
53
+ return;
54
+ }
55
+ console.log(chalk.blue('๐Ÿ“‹ FleetTools Logs'));
56
+ console.log(chalk.yellow('โš ๏ธ Service logs not implemented yet.'));
57
+ console.log(chalk.gray('Check .fleet/logs/ directory for log files.'));
58
+ }
59
+ catch (error) {
60
+ console.error(chalk.red('โŒ Failed to show logs:'), error.message);
61
+ }
62
+ });
63
+ program
64
+ .command('clean')
65
+ .description('Clean FleetTools data and caches')
66
+ .option('--services', 'Clean service data only')
67
+ .option('--logs', 'Clean logs only')
68
+ .option('--all', 'Clean all data (including configuration)')
69
+ .action(async (options) => {
70
+ try {
71
+ if (!isFleetProject()) {
72
+ console.error(chalk.red('โŒ Not in a FleetTools project.'));
73
+ return;
74
+ }
75
+ console.log(chalk.blue('๐Ÿงน Cleaning FleetTools data...'));
76
+ console.log(chalk.yellow('โš ๏ธ Data cleaning not implemented yet.'));
77
+ console.log(chalk.gray('Manual cleanup: Remove .fleet/ directory if needed.'));
78
+ }
79
+ catch (error) {
80
+ console.error(chalk.red('โŒ Failed to clean data:'), error.message);
81
+ }
82
+ });
83
+ }
84
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Fleet Services Command
3
+ *
4
+ * Manage individual FleetTools services
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function registerServiceCommands(program: Command): void;
8
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/commands/services.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyG9D"}