@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
package/dist/risk.js ADDED
@@ -0,0 +1,367 @@
1
+ /**
2
+ * Calliope CLI - Risk Assessment
3
+ *
4
+ * Evaluates the risk level of tool operations and shell commands.
5
+ */
6
+ /**
7
+ * Shell command patterns by risk level
8
+ */
9
+ const SHELL_PATTERNS = {
10
+ none: [], // Shell commands are never 'none' risk
11
+ low: [
12
+ /^ls(\s|$)/,
13
+ /^cat\s/,
14
+ /^head\s/,
15
+ /^tail\s/,
16
+ /^grep\s/,
17
+ /^find\s/,
18
+ /^pwd$/,
19
+ /^echo\s/,
20
+ /^wc\s/,
21
+ /^sort\s/,
22
+ /^uniq\s/,
23
+ /^diff\s/,
24
+ /^which\s/,
25
+ /^whoami$/,
26
+ /^date$/,
27
+ /^cal(\s|$)/,
28
+ /^git\s+status/,
29
+ /^git\s+log/,
30
+ /^git\s+diff/,
31
+ /^git\s+branch/,
32
+ /^git\s+show/,
33
+ /^git\s+remote\s+-v/,
34
+ /^npm\s+list/,
35
+ /^npm\s+view/,
36
+ /^npm\s+search/,
37
+ /^node\s+--version/,
38
+ /^npm\s+--version/,
39
+ /^tsc\s+--version/,
40
+ /^python\s+--version/,
41
+ /^env$/,
42
+ /^printenv/,
43
+ ],
44
+ medium: [
45
+ /^git\s+add/,
46
+ /^git\s+commit/,
47
+ /^git\s+checkout/,
48
+ /^git\s+branch\s+-[dD]/,
49
+ /^git\s+stash/,
50
+ /^git\s+merge/,
51
+ /^git\s+rebase/,
52
+ /^npm\s+install/,
53
+ /^npm\s+i(\s|$)/,
54
+ /^npm\s+update/,
55
+ /^npm\s+ci/,
56
+ /^yarn(\s+install)?/,
57
+ /^pnpm\s+install/,
58
+ /^pip\s+install/,
59
+ /^mkdir\s/,
60
+ /^touch\s/,
61
+ /^cp\s/,
62
+ /^tsc(\s|$)/,
63
+ /^npx\s/,
64
+ /^node\s/,
65
+ /^python\s/,
66
+ ],
67
+ high: [
68
+ /^rm\s/,
69
+ /^rmdir\s/,
70
+ /^mv\s/,
71
+ /^chmod\s/,
72
+ /^chown\s/,
73
+ /^git\s+push/,
74
+ /^git\s+reset/,
75
+ /^git\s+revert/,
76
+ /^git\s+clean/,
77
+ /^git\s+fetch.*--prune/,
78
+ /^npm\s+publish/,
79
+ /^npm\s+unpublish/,
80
+ /^npm\s+deprecate/,
81
+ /^npm\s+link/,
82
+ /^npm\s+uninstall/,
83
+ /^pip\s+uninstall/,
84
+ /^docker\s+rm/,
85
+ /^docker\s+rmi/,
86
+ /^docker\s+stop/,
87
+ /^docker\s+kill/,
88
+ /^kill\s/,
89
+ /^pkill\s/,
90
+ /^killall\s/,
91
+ ],
92
+ critical: [
93
+ /^sudo\s/,
94
+ /^su\s/,
95
+ /^rm\s+-rf/,
96
+ /^rm\s+-fr/,
97
+ /^rm\s+.*-rf/,
98
+ /^rm\s+.*-fr/,
99
+ /^rm\s+-r\s+\//,
100
+ /^chmod\s+777/,
101
+ /^chmod\s+-R/,
102
+ /^chown\s+-R/,
103
+ /^dd\s/,
104
+ /^mkfs/,
105
+ /^fdisk/,
106
+ /^parted/,
107
+ /^format/,
108
+ />\s*\/dev\//,
109
+ /^git\s+push.*--force/,
110
+ /^git\s+push.*-f/,
111
+ /^git\s+reset\s+--hard/,
112
+ /^npm\s+exec/,
113
+ /^eval\s/,
114
+ /\|\s*sh(\s|$)/,
115
+ /\|\s*bash(\s|$)/,
116
+ /curl.*\|\s*(sh|bash)/,
117
+ /wget.*\|\s*(sh|bash)/,
118
+ ],
119
+ };
120
+ /**
121
+ * Paths that elevate risk to critical
122
+ */
123
+ const CRITICAL_PATHS = [
124
+ '/etc',
125
+ '/usr',
126
+ '/var',
127
+ '/sys',
128
+ '/proc',
129
+ '/boot',
130
+ '/root',
131
+ '/bin',
132
+ '/sbin',
133
+ '/lib',
134
+ '/opt',
135
+ '~/.ssh',
136
+ '~/.gnupg',
137
+ '~/.config',
138
+ ];
139
+ /**
140
+ * Assess risk level for a shell command
141
+ */
142
+ export function assessShellRisk(command) {
143
+ const trimmed = command.trim();
144
+ // Check for critical patterns first
145
+ for (const pattern of SHELL_PATTERNS.critical) {
146
+ if (pattern.test(trimmed)) {
147
+ return {
148
+ level: 'critical',
149
+ reason: 'Potentially destructive or system-altering command',
150
+ requiresConfirmation: true,
151
+ };
152
+ }
153
+ }
154
+ // Check for critical paths
155
+ for (const criticalPath of CRITICAL_PATHS) {
156
+ const expandedPath = criticalPath.replace('~', process.env.HOME || '');
157
+ if (trimmed.includes(expandedPath) || trimmed.includes(criticalPath)) {
158
+ // Only elevate if it's a write operation
159
+ if (/\b(rm|mv|cp|chmod|chown|write|echo.*>)\b/.test(trimmed)) {
160
+ return {
161
+ level: 'critical',
162
+ reason: `Operation targets sensitive path: ${criticalPath}`,
163
+ requiresConfirmation: true,
164
+ };
165
+ }
166
+ }
167
+ }
168
+ // Check high risk
169
+ for (const pattern of SHELL_PATTERNS.high) {
170
+ if (pattern.test(trimmed)) {
171
+ return {
172
+ level: 'high',
173
+ reason: 'Command modifies or deletes files/resources',
174
+ requiresConfirmation: true,
175
+ };
176
+ }
177
+ }
178
+ // Check medium risk
179
+ for (const pattern of SHELL_PATTERNS.medium) {
180
+ if (pattern.test(trimmed)) {
181
+ return {
182
+ level: 'medium',
183
+ reason: 'Command creates or modifies files',
184
+ requiresConfirmation: false,
185
+ };
186
+ }
187
+ }
188
+ // Check low risk
189
+ for (const pattern of SHELL_PATTERNS.low) {
190
+ if (pattern.test(trimmed)) {
191
+ return {
192
+ level: 'low',
193
+ reason: 'Read-only or informational command',
194
+ requiresConfirmation: false,
195
+ };
196
+ }
197
+ }
198
+ // Default to medium for unknown commands
199
+ return {
200
+ level: 'medium',
201
+ reason: 'Unknown command - defaulting to medium risk',
202
+ requiresConfirmation: false,
203
+ };
204
+ }
205
+ /**
206
+ * Base risk levels for each tool type
207
+ */
208
+ const TOOL_BASE_RISK = {
209
+ think: 'none',
210
+ read_file: 'none',
211
+ list_files: 'none',
212
+ write_file: 'medium',
213
+ shell: 'low', // Will be overridden by command analysis
214
+ };
215
+ /**
216
+ * Assess risk level for a tool call
217
+ */
218
+ export function assessToolRisk(toolCall) {
219
+ const { name, arguments: args } = toolCall;
220
+ // Special handling for shell commands
221
+ if (name === 'shell' && typeof args.command === 'string') {
222
+ return assessShellRisk(args.command);
223
+ }
224
+ // Special handling for write_file - check the path
225
+ if (name === 'write_file' && typeof args.path === 'string') {
226
+ const filePath = args.path;
227
+ // Check for critical paths
228
+ for (const criticalPath of CRITICAL_PATHS) {
229
+ const expandedPath = criticalPath.replace('~', process.env.HOME || '');
230
+ if (filePath.startsWith(expandedPath) || filePath.startsWith(criticalPath)) {
231
+ return {
232
+ level: 'critical',
233
+ reason: `Writing to sensitive path: ${criticalPath}`,
234
+ requiresConfirmation: true,
235
+ };
236
+ }
237
+ }
238
+ // Check for sensitive file types
239
+ if (/\.(env|pem|key|crt|ssh|gpg)$/i.test(filePath)) {
240
+ return {
241
+ level: 'high',
242
+ reason: 'Writing to sensitive file type',
243
+ requiresConfirmation: true,
244
+ };
245
+ }
246
+ return {
247
+ level: 'medium',
248
+ reason: 'File write operation',
249
+ requiresConfirmation: false,
250
+ };
251
+ }
252
+ // Default risk based on tool type
253
+ const baseRisk = TOOL_BASE_RISK[name] || 'medium';
254
+ return {
255
+ level: baseRisk,
256
+ reason: getRiskReason(name, baseRisk),
257
+ requiresConfirmation: baseRisk === 'high' || baseRisk === 'critical',
258
+ };
259
+ }
260
+ /**
261
+ * Get a human-readable reason for the risk level
262
+ */
263
+ function getRiskReason(toolName, level) {
264
+ switch (toolName) {
265
+ case 'think':
266
+ return 'Pure reasoning, no side effects';
267
+ case 'read_file':
268
+ return 'Read-only file access';
269
+ case 'list_files':
270
+ return 'Read-only directory listing';
271
+ case 'write_file':
272
+ return 'File write operation';
273
+ case 'shell':
274
+ return 'Shell command execution';
275
+ default:
276
+ return `Tool operation: ${toolName}`;
277
+ }
278
+ }
279
+ /**
280
+ * Format risk level as a visual bar
281
+ */
282
+ export function formatRiskBar(level) {
283
+ const bars = {
284
+ none: '░░░░░',
285
+ low: '█░░░░',
286
+ medium: '███░░',
287
+ high: '████░',
288
+ critical: '█████',
289
+ };
290
+ return bars[level];
291
+ }
292
+ /**
293
+ * Check if an operation requires confirmation regardless of mode
294
+ */
295
+ export function requiresConfirmation(risk, godMode) {
296
+ // Critical operations ALWAYS require confirmation
297
+ if (risk.level === 'critical') {
298
+ return true;
299
+ }
300
+ // In god mode, skip confirmation for non-critical
301
+ if (godMode) {
302
+ return false;
303
+ }
304
+ // Otherwise, defer to the risk assessment
305
+ return risk.requiresConfirmation;
306
+ }
307
+ /**
308
+ * Complexity triggers for hybrid mode planning
309
+ */
310
+ const COMPLEXITY_KEYWORDS = [
311
+ 'refactor',
312
+ 'rewrite',
313
+ 'migrate',
314
+ 'upgrade',
315
+ 'convert',
316
+ 'restructure',
317
+ 'reorganize',
318
+ 'overhaul',
319
+ 'replace all',
320
+ 'delete all',
321
+ 'remove all',
322
+ 'update all',
323
+ 'change all',
324
+ 'fix all',
325
+ 'across all',
326
+ 'entire codebase',
327
+ 'whole project',
328
+ 'every file',
329
+ ];
330
+ const AMBIGUOUS_KEYWORDS = [
331
+ 'clean up',
332
+ 'clean this',
333
+ 'fix this',
334
+ 'improve',
335
+ 'make better',
336
+ 'optimize',
337
+ 'handle',
338
+ 'deal with',
339
+ 'sort out',
340
+ ];
341
+ /**
342
+ * Detect if a user prompt suggests a complex operation
343
+ * that should trigger planning in hybrid mode
344
+ */
345
+ export function detectComplexity(prompt) {
346
+ const lower = prompt.toLowerCase();
347
+ // Check for complexity keywords
348
+ for (const keyword of COMPLEXITY_KEYWORDS) {
349
+ if (lower.includes(keyword)) {
350
+ return {
351
+ isComplex: true,
352
+ reason: `Detected complex operation: "${keyword}"`,
353
+ };
354
+ }
355
+ }
356
+ // Check for ambiguous requests
357
+ for (const keyword of AMBIGUOUS_KEYWORDS) {
358
+ if (lower.includes(keyword)) {
359
+ return {
360
+ isComplex: true,
361
+ reason: `Ambiguous request may need clarification: "${keyword}"`,
362
+ };
363
+ }
364
+ }
365
+ return { isComplex: false };
366
+ }
367
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../src/risk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Calliope CLI - Code Execution Sandbox
3
+ *
4
+ * Secure code execution using Docker containers.
5
+ */
6
+ export interface SandboxConfig {
7
+ enabled: boolean;
8
+ image: string;
9
+ timeout: number;
10
+ memoryLimit: string;
11
+ cpuLimit: string;
12
+ networkEnabled: boolean;
13
+ mountWorkdir: boolean;
14
+ readOnly: boolean;
15
+ }
16
+ export interface ExecutionResult {
17
+ success: boolean;
18
+ exitCode: number;
19
+ stdout: string;
20
+ stderr: string;
21
+ duration: number;
22
+ sandboxed: boolean;
23
+ }
24
+ export type Language = 'python' | 'node' | 'bash' | 'ruby' | 'go' | 'rust';
25
+ /**
26
+ * Check if Docker is available
27
+ */
28
+ export declare function isDockerAvailable(): boolean;
29
+ /**
30
+ * Check if Docker image exists
31
+ */
32
+ export declare function imageExists(image: string): boolean;
33
+ /**
34
+ * Pull Docker image if needed
35
+ */
36
+ export declare function ensureImage(image: string): Promise<boolean>;
37
+ /**
38
+ * Execute code in Docker sandbox
39
+ */
40
+ export declare function executeInSandbox(language: Language, code: string, config?: Partial<SandboxConfig>): Promise<ExecutionResult>;
41
+ /**
42
+ * Execute code without sandbox (fallback)
43
+ */
44
+ export declare function executeUnsafe(language: Language, code: string, timeout?: number): Promise<ExecutionResult>;
45
+ /**
46
+ * Execute code (with or without sandbox based on availability)
47
+ */
48
+ export declare function execute(language: Language, code: string, config?: Partial<SandboxConfig>): Promise<ExecutionResult>;
49
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,GAClC,OAAO,CAAC,eAAe,CAAC,CAmH1B;AAoFD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAoF1B;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,GAClC,OAAO,CAAC,eAAe,CAAC,CAQ1B"}