@calliopelabs/cli 0.4.6 → 0.6.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.
Files changed (112) hide show
  1. package/README.md +258 -105
  2. package/dist/branching.d.ts +56 -0
  3. package/dist/branching.d.ts.map +1 -0
  4. package/dist/branching.js +211 -0
  5. package/dist/branching.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +235 -2
  8. package/dist/cli.js.map +1 -1
  9. package/dist/completion.d.ts +75 -0
  10. package/dist/completion.d.ts.map +1 -0
  11. package/dist/completion.js +234 -0
  12. package/dist/completion.js.map +1 -0
  13. package/dist/config.d.ts +36 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +90 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/diff.d.ts +73 -0
  18. package/dist/diff.d.ts.map +1 -0
  19. package/dist/diff.js +317 -0
  20. package/dist/diff.js.map +1 -0
  21. package/dist/errors.d.ts +41 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +199 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/file-watcher.d.ts +91 -0
  26. package/dist/file-watcher.d.ts.map +1 -0
  27. package/dist/file-watcher.js +269 -0
  28. package/dist/file-watcher.js.map +1 -0
  29. package/dist/files.d.ts +49 -0
  30. package/dist/files.d.ts.map +1 -0
  31. package/dist/files.js +191 -0
  32. package/dist/files.js.map +1 -0
  33. package/dist/fuzzy-search.d.ts +75 -0
  34. package/dist/fuzzy-search.d.ts.map +1 -0
  35. package/dist/fuzzy-search.js +240 -0
  36. package/dist/fuzzy-search.js.map +1 -0
  37. package/dist/hooks.d.ts +79 -0
  38. package/dist/hooks.d.ts.map +1 -0
  39. package/dist/hooks.js +271 -0
  40. package/dist/hooks.js.map +1 -0
  41. package/dist/keyboard.d.ts +57 -0
  42. package/dist/keyboard.d.ts.map +1 -0
  43. package/dist/keyboard.js +265 -0
  44. package/dist/keyboard.js.map +1 -0
  45. package/dist/markdown.d.ts +14 -0
  46. package/dist/markdown.d.ts.map +1 -0
  47. package/dist/markdown.js +248 -0
  48. package/dist/markdown.js.map +1 -0
  49. package/dist/mcp.d.ts +90 -0
  50. package/dist/mcp.d.ts.map +1 -0
  51. package/dist/mcp.js +290 -0
  52. package/dist/mcp.js.map +1 -0
  53. package/dist/memory.d.ts +104 -0
  54. package/dist/memory.d.ts.map +1 -0
  55. package/dist/memory.js +394 -0
  56. package/dist/memory.js.map +1 -0
  57. package/dist/model-router.d.ts +67 -0
  58. package/dist/model-router.d.ts.map +1 -0
  59. package/dist/model-router.js +289 -0
  60. package/dist/model-router.js.map +1 -0
  61. package/dist/parallel-tools.d.ts +51 -0
  62. package/dist/parallel-tools.d.ts.map +1 -0
  63. package/dist/parallel-tools.js +278 -0
  64. package/dist/parallel-tools.js.map +1 -0
  65. package/dist/project-config.d.ts +84 -0
  66. package/dist/project-config.d.ts.map +1 -0
  67. package/dist/project-config.js +250 -0
  68. package/dist/project-config.js.map +1 -0
  69. package/dist/providers.d.ts +10 -2
  70. package/dist/providers.d.ts.map +1 -1
  71. package/dist/providers.js +240 -38
  72. package/dist/providers.js.map +1 -1
  73. package/dist/risk.d.ts +31 -0
  74. package/dist/risk.d.ts.map +1 -0
  75. package/dist/risk.js +367 -0
  76. package/dist/risk.js.map +1 -0
  77. package/dist/sandbox.d.ts +49 -0
  78. package/dist/sandbox.d.ts.map +1 -0
  79. package/dist/sandbox.js +347 -0
  80. package/dist/sandbox.js.map +1 -0
  81. package/dist/skills.d.ts +71 -0
  82. package/dist/skills.d.ts.map +1 -0
  83. package/dist/skills.js +383 -0
  84. package/dist/skills.js.map +1 -0
  85. package/dist/storage.d.ts +139 -0
  86. package/dist/storage.d.ts.map +1 -0
  87. package/dist/storage.js +508 -0
  88. package/dist/storage.js.map +1 -0
  89. package/dist/streaming.d.ts +94 -0
  90. package/dist/streaming.d.ts.map +1 -0
  91. package/dist/streaming.js +305 -0
  92. package/dist/streaming.js.map +1 -0
  93. package/dist/summarization.d.ts +76 -0
  94. package/dist/summarization.d.ts.map +1 -0
  95. package/dist/summarization.js +242 -0
  96. package/dist/summarization.js.map +1 -0
  97. package/dist/themes.d.ts +110 -0
  98. package/dist/themes.d.ts.map +1 -0
  99. package/dist/themes.js +329 -0
  100. package/dist/themes.js.map +1 -0
  101. package/dist/tools.d.ts.map +1 -1
  102. package/dist/tools.js +335 -1
  103. package/dist/tools.js.map +1 -1
  104. package/dist/types.d.ts +56 -1
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js +105 -0
  107. package/dist/types.js.map +1 -1
  108. package/dist/ui-cli.d.ts +9 -2
  109. package/dist/ui-cli.d.ts.map +1 -1
  110. package/dist/ui-cli.js +1315 -220
  111. package/dist/ui-cli.js.map +1 -1
  112. package/package.json +1 -1
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Calliope CLI - Code Execution Sandbox
3
+ *
4
+ * Secure code execution using Docker containers.
5
+ */
6
+ import { spawn, execSync } from 'child_process';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ // ============================================================================
11
+ // Default Configuration
12
+ // ============================================================================
13
+ const DEFAULT_CONFIG = {
14
+ enabled: true,
15
+ image: 'calliope-sandbox', // Custom image or use language-specific
16
+ timeout: 30000,
17
+ memoryLimit: '256m',
18
+ cpuLimit: '1',
19
+ networkEnabled: false,
20
+ mountWorkdir: true,
21
+ readOnly: true,
22
+ };
23
+ // Language-specific Docker images
24
+ const LANGUAGE_IMAGES = {
25
+ python: 'python:3.11-slim',
26
+ node: 'node:20-slim',
27
+ bash: 'alpine:latest',
28
+ ruby: 'ruby:3.2-slim',
29
+ go: 'golang:1.21-alpine',
30
+ rust: 'rust:1.74-slim',
31
+ };
32
+ // ============================================================================
33
+ // Docker Detection
34
+ // ============================================================================
35
+ let dockerAvailable = null;
36
+ /**
37
+ * Check if Docker is available
38
+ */
39
+ export function isDockerAvailable() {
40
+ if (dockerAvailable !== null)
41
+ return dockerAvailable;
42
+ try {
43
+ execSync('docker --version', { stdio: 'pipe' });
44
+ dockerAvailable = true;
45
+ }
46
+ catch {
47
+ dockerAvailable = false;
48
+ }
49
+ return dockerAvailable;
50
+ }
51
+ /**
52
+ * Check if Docker image exists
53
+ */
54
+ export function imageExists(image) {
55
+ try {
56
+ execSync(`docker image inspect ${image}`, { stdio: 'pipe' });
57
+ return true;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ /**
64
+ * Pull Docker image if needed
65
+ */
66
+ export async function ensureImage(image) {
67
+ if (imageExists(image))
68
+ return true;
69
+ return new Promise((resolve) => {
70
+ const proc = spawn('docker', ['pull', image], { stdio: 'pipe' });
71
+ proc.on('close', (code) => resolve(code === 0));
72
+ proc.on('error', () => resolve(false));
73
+ });
74
+ }
75
+ // ============================================================================
76
+ // Sandbox Execution
77
+ // ============================================================================
78
+ /**
79
+ * Execute code in Docker sandbox
80
+ */
81
+ export async function executeInSandbox(language, code, config = {}) {
82
+ const cfg = { ...DEFAULT_CONFIG, ...config };
83
+ const startTime = Date.now();
84
+ // Check Docker availability
85
+ if (!isDockerAvailable()) {
86
+ return {
87
+ success: false,
88
+ exitCode: 1,
89
+ stdout: '',
90
+ stderr: 'Docker is not available. Install Docker to enable sandboxed execution.',
91
+ duration: 0,
92
+ sandboxed: false,
93
+ };
94
+ }
95
+ // Get language-specific image
96
+ const image = LANGUAGE_IMAGES[language] || cfg.image;
97
+ // Ensure image exists
98
+ const imageReady = await ensureImage(image);
99
+ if (!imageReady) {
100
+ return {
101
+ success: false,
102
+ exitCode: 1,
103
+ stdout: '',
104
+ stderr: `Failed to pull Docker image: ${image}`,
105
+ duration: Date.now() - startTime,
106
+ sandboxed: false,
107
+ };
108
+ }
109
+ // Create temp directory for code
110
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'calliope-sandbox-'));
111
+ const codeFile = getCodeFilename(language);
112
+ const codePath = path.join(tempDir, codeFile);
113
+ fs.writeFileSync(codePath, code);
114
+ // Build Docker command
115
+ const dockerArgs = buildDockerArgs(language, cfg, tempDir, codeFile);
116
+ return new Promise((resolve) => {
117
+ let stdout = '';
118
+ let stderr = '';
119
+ let timedOut = false;
120
+ const proc = spawn('docker', dockerArgs, {
121
+ stdio: ['pipe', 'pipe', 'pipe'],
122
+ });
123
+ const timer = setTimeout(() => {
124
+ timedOut = true;
125
+ proc.kill('SIGKILL');
126
+ }, cfg.timeout);
127
+ proc.stdout?.on('data', (data) => {
128
+ stdout += data.toString();
129
+ });
130
+ proc.stderr?.on('data', (data) => {
131
+ stderr += data.toString();
132
+ });
133
+ proc.on('close', (exitCode) => {
134
+ clearTimeout(timer);
135
+ // Cleanup
136
+ try {
137
+ fs.rmSync(tempDir, { recursive: true });
138
+ }
139
+ catch {
140
+ // Ignore cleanup errors
141
+ }
142
+ const duration = Date.now() - startTime;
143
+ if (timedOut) {
144
+ resolve({
145
+ success: false,
146
+ exitCode: 124,
147
+ stdout,
148
+ stderr: stderr + '\nExecution timed out',
149
+ duration,
150
+ sandboxed: true,
151
+ });
152
+ }
153
+ else {
154
+ resolve({
155
+ success: exitCode === 0,
156
+ exitCode: exitCode || 0,
157
+ stdout,
158
+ stderr,
159
+ duration,
160
+ sandboxed: true,
161
+ });
162
+ }
163
+ });
164
+ proc.on('error', (err) => {
165
+ clearTimeout(timer);
166
+ try {
167
+ fs.rmSync(tempDir, { recursive: true });
168
+ }
169
+ catch {
170
+ // Ignore
171
+ }
172
+ resolve({
173
+ success: false,
174
+ exitCode: 1,
175
+ stdout: '',
176
+ stderr: err.message,
177
+ duration: Date.now() - startTime,
178
+ sandboxed: false,
179
+ });
180
+ });
181
+ });
182
+ }
183
+ /**
184
+ * Get appropriate filename for language
185
+ */
186
+ function getCodeFilename(language) {
187
+ switch (language) {
188
+ case 'python': return 'code.py';
189
+ case 'node': return 'code.js';
190
+ case 'bash': return 'code.sh';
191
+ case 'ruby': return 'code.rb';
192
+ case 'go': return 'main.go';
193
+ case 'rust': return 'main.rs';
194
+ default: return 'code.txt';
195
+ }
196
+ }
197
+ /**
198
+ * Build Docker run arguments
199
+ */
200
+ function buildDockerArgs(language, config, tempDir, codeFile) {
201
+ const image = LANGUAGE_IMAGES[language];
202
+ const args = ['run', '--rm'];
203
+ // Resource limits
204
+ args.push('--memory', config.memoryLimit);
205
+ args.push('--cpus', config.cpuLimit);
206
+ // Network
207
+ if (!config.networkEnabled) {
208
+ args.push('--network', 'none');
209
+ }
210
+ // Security
211
+ args.push('--security-opt', 'no-new-privileges');
212
+ args.push('--cap-drop', 'ALL');
213
+ // Mount temp directory with code
214
+ args.push('-v', `${tempDir}:/workspace:ro`);
215
+ args.push('-w', '/workspace');
216
+ // Mount workdir if enabled
217
+ if (config.mountWorkdir) {
218
+ const rwFlag = config.readOnly ? 'ro' : 'rw';
219
+ args.push('-v', `${process.cwd()}:/project:${rwFlag}`);
220
+ }
221
+ // Image
222
+ args.push(image);
223
+ // Command based on language
224
+ switch (language) {
225
+ case 'python':
226
+ args.push('python', `/workspace/${codeFile}`);
227
+ break;
228
+ case 'node':
229
+ args.push('node', `/workspace/${codeFile}`);
230
+ break;
231
+ case 'bash':
232
+ args.push('sh', `/workspace/${codeFile}`);
233
+ break;
234
+ case 'ruby':
235
+ args.push('ruby', `/workspace/${codeFile}`);
236
+ break;
237
+ case 'go':
238
+ args.push('sh', '-c', `cd /workspace && go run ${codeFile}`);
239
+ break;
240
+ case 'rust':
241
+ args.push('sh', '-c', `cd /workspace && rustc ${codeFile} -o /tmp/prog && /tmp/prog`);
242
+ break;
243
+ }
244
+ return args;
245
+ }
246
+ // ============================================================================
247
+ // Fallback Execution (without Docker)
248
+ // ============================================================================
249
+ /**
250
+ * Execute code without sandbox (fallback)
251
+ */
252
+ export function executeUnsafe(language, code, timeout = 30000) {
253
+ const startTime = Date.now();
254
+ // Create temp file
255
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'calliope-exec-'));
256
+ const codeFile = getCodeFilename(language);
257
+ const codePath = path.join(tempDir, codeFile);
258
+ fs.writeFileSync(codePath, code);
259
+ // Get command
260
+ let cmd;
261
+ let args;
262
+ switch (language) {
263
+ case 'python':
264
+ cmd = 'python3';
265
+ args = [codePath];
266
+ break;
267
+ case 'node':
268
+ cmd = 'node';
269
+ args = [codePath];
270
+ break;
271
+ case 'bash':
272
+ cmd = 'bash';
273
+ args = [codePath];
274
+ break;
275
+ case 'ruby':
276
+ cmd = 'ruby';
277
+ args = [codePath];
278
+ break;
279
+ default:
280
+ return Promise.resolve({
281
+ success: false,
282
+ exitCode: 1,
283
+ stdout: '',
284
+ stderr: `Unsupported language: ${language}`,
285
+ duration: 0,
286
+ sandboxed: false,
287
+ });
288
+ }
289
+ return new Promise((resolve) => {
290
+ let stdout = '';
291
+ let stderr = '';
292
+ let timedOut = false;
293
+ const proc = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'pipe'] });
294
+ const timer = setTimeout(() => {
295
+ timedOut = true;
296
+ proc.kill('SIGKILL');
297
+ }, timeout);
298
+ proc.stdout?.on('data', (data) => stdout += data.toString());
299
+ proc.stderr?.on('data', (data) => stderr += data.toString());
300
+ proc.on('close', (exitCode) => {
301
+ clearTimeout(timer);
302
+ try {
303
+ fs.rmSync(tempDir, { recursive: true });
304
+ }
305
+ catch { }
306
+ resolve({
307
+ success: !timedOut && exitCode === 0,
308
+ exitCode: timedOut ? 124 : (exitCode || 0),
309
+ stdout,
310
+ stderr: timedOut ? stderr + '\nExecution timed out' : stderr,
311
+ duration: Date.now() - startTime,
312
+ sandboxed: false,
313
+ });
314
+ });
315
+ proc.on('error', (err) => {
316
+ clearTimeout(timer);
317
+ try {
318
+ fs.rmSync(tempDir, { recursive: true });
319
+ }
320
+ catch { }
321
+ resolve({
322
+ success: false,
323
+ exitCode: 1,
324
+ stdout: '',
325
+ stderr: err.message,
326
+ duration: Date.now() - startTime,
327
+ sandboxed: false,
328
+ });
329
+ });
330
+ });
331
+ }
332
+ // ============================================================================
333
+ // Main Execute Function
334
+ // ============================================================================
335
+ /**
336
+ * Execute code (with or without sandbox based on availability)
337
+ */
338
+ export async function execute(language, code, config = {}) {
339
+ const cfg = { ...DEFAULT_CONFIG, ...config };
340
+ if (cfg.enabled && isDockerAvailable()) {
341
+ return executeInSandbox(language, code, cfg);
342
+ }
343
+ else {
344
+ return executeUnsafe(language, code, cfg.timeout);
345
+ }
346
+ }
347
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Calliope CLI - AgentSkills.io Integration
3
+ *
4
+ * Implements AgentSkills standard for extending agent capabilities.
5
+ * See: https://agentskills.io/specification
6
+ */
7
+ export interface SkillMetadata {
8
+ name: string;
9
+ description: string;
10
+ license?: string;
11
+ compatibility?: string;
12
+ metadata?: Record<string, string>;
13
+ allowedTools?: string[];
14
+ [key: string]: string | string[] | Record<string, string> | undefined;
15
+ }
16
+ export interface Skill {
17
+ id: string;
18
+ path: string;
19
+ metadata: SkillMetadata;
20
+ instructions?: string;
21
+ loaded: boolean;
22
+ source: 'local' | 'registry' | 'github';
23
+ sourceUrl?: string;
24
+ }
25
+ export interface SkillReference {
26
+ type: 'script' | 'reference' | 'asset';
27
+ name: string;
28
+ path: string;
29
+ content?: string;
30
+ }
31
+ /**
32
+ * Load a skill from a directory
33
+ */
34
+ export declare function loadSkillFromDir(dir: string): Skill | null;
35
+ /**
36
+ * Get all loaded skills
37
+ */
38
+ export declare function getSkills(): Skill[];
39
+ /**
40
+ * Get skill by name
41
+ */
42
+ export declare function getSkill(name: string): Skill | null;
43
+ /**
44
+ * Get skill references (scripts, references, assets)
45
+ */
46
+ export declare function getSkillReferences(skill: Skill): SkillReference[];
47
+ /**
48
+ * Install skill from a local directory
49
+ */
50
+ export declare function installLocalSkill(dir: string): Skill | null;
51
+ /**
52
+ * Install skill from GitHub URL
53
+ */
54
+ export declare function installFromGithub(url: string): Promise<Skill | null>;
55
+ /**
56
+ * Install from agentskills.io registry
57
+ */
58
+ export declare function installFromRegistry(skillName: string): Promise<Skill | null>;
59
+ /**
60
+ * Uninstall a skill
61
+ */
62
+ export declare function uninstallSkill(name: string): boolean;
63
+ /**
64
+ * Get skill context for the LLM system prompt
65
+ */
66
+ export declare function getSkillsContext(): string;
67
+ /**
68
+ * Get full skill instructions when activated
69
+ */
70
+ export declare function getSkillInstructions(name: string): string | null;
71
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACvE;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsHD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAoB1D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,KAAK,EAAE,CAenC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAWnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,EAAE,CAmBjE;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAmB3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA2C1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA+ClF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAepD;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAezC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhE"}