@fleettools/shared
v0.2.1
Published
Shared utilities and configuration for FleetTools
Maintainers
Readme
@fleettools/fleet-shared
Shared utilities and configuration for FleetTools
Installation
npm install @fleettools/fleet-shared
# or
bun install @fleettools/fleet-sharedFeatures
Runtime Detection
import { detectRuntime, getRuntimeInfo } from '@fleettools/fleet-shared/runtime';
const runtime = detectRuntime(); // 'bun' | 'node' | 'unknown'
const info = getRuntimeInfo();
// {
// type: 'bun',
// version: '1.0.0',
// platform: 'linux',
// arch: 'x64',
// supported: true,
// isBun: true,
// isNode: false
// }Configuration Management
import {
loadGlobalConfig,
saveGlobalConfig,
loadProjectConfig,
isFleetProject
} from '@fleettools/fleet-shared/config';
const globalConfig = loadGlobalConfig();
const projectConfig = loadProjectConfig();
const isProject = isFleetProject();Project Initialization
import {
initializeProject,
getAvailableTemplates
} from '@fleettools/fleet-shared/project';
const templates = getAvailableTemplates(); // ['basic', 'agent']
const config = initializeProject('./my-project', 'basic', {
name: 'My Project',
services: { squawk: { enabled: true } }
});Utilities
import {
commandExists,
sleep,
retry,
formatBytes,
formatDuration,
generateId
} from '@fleettools/fleet-shared/utils';
const hasNode = commandExists('node');
await sleep(1000);
const result = await retry(() => riskyOperation(), 3);API Reference
Runtime Detection
detectRuntime(): RuntimeType- Detect current JavaScript runtimegetRuntimeInfo(): RuntimeInfo- Get detailed runtime informationisSupportedRuntime(): boolean- Check if runtime is supportedgetPreferredRuntime(): 'bun' | 'node'- Get preferred runtime
Configuration
loadGlobalConfig(): FleetGlobalConfig- Load global configurationsaveGlobalConfig(config: FleetGlobalConfig): void- Save global configurationloadProjectConfig(): FleetProjectConfig | null- Load project configurationsaveProjectConfig(config: FleetProjectConfig): void- Save project configurationisFleetProject(): boolean- Check if directory is a FleetTools project
Project Management
initializeProject(path, template, config): FleetProjectConfig- Initialize new projectgetAvailableTemplates(): string[]- Get available project templatesgetTemplateInfo(name): ProjectTemplate | null- Get template informationisValidProject(path): boolean- Validate project structuregetProjectRoot(): string | null- Find project root directory
Utilities
commandExists(command): boolean- Check if command exists in PATHsleep(ms): Promise<void>- Sleep for specified millisecondsretry(fn, maxAttempts, baseDelay): Promise<T>- Retry with exponential backoffformatBytes(bytes): string- Format bytes to human readable stringformatDuration(ms): string- Format duration to human readable stringgenerateId(length): string- Generate random IDdeepClone(obj): T- Deep clone objectisPromise(value): boolean- Check if value is a promiseEventEmitter- Simple event emitter class
Types
RuntimeInfo
interface RuntimeInfo {
type: RuntimeType;
version: string;
platform: string;
arch: string;
supported: boolean;
isBun: boolean;
isNode: boolean;
}FleetGlobalConfig
interface FleetGlobalConfig {
version: string;
defaultRuntime: 'bun' | 'node';
telemetry: {
enabled: boolean;
endpoint?: string;
};
services: {
autoStart: boolean;
squawkPort: number;
apiPort: number;
};
paths: {
configDir: string;
dataDir: string;
logDir: string;
};
}FleetProjectConfig
interface FleetProjectConfig {
name: string;
version: string;
fleet: {
version: string;
mode: 'local' | 'synced';
workspaceId?: string;
};
services: {
squawk: {
enabled: boolean;
port: number;
dataDir: string;
};
api: {
enabled: boolean;
port: number;
};
postgres: {
enabled: boolean;
provider: 'podman' | 'docker' | 'local';
port: number;
container?: string;
dataDir: string;
};
};
plugins: {
claudeCode: boolean;
openCode: boolean;
};
}Development
git clone https://github.com/v1truvius/fleettools.git
cd fleettools/packages/fleet-shared
bun install
bun run dev # Development mode with watchTesting
bun test
bun run test:coverageLicense
MIT License - see LICENSE file for details.