@compilr-dev/cli 0.5.6 → 0.5.8

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/dist/agent.d.ts CHANGED
@@ -45,9 +45,17 @@ export interface AgentOptions {
45
45
  */
46
46
  onIterationLimitReached?: (context: IterationLimitContext) => Promise<number | false>;
47
47
  /**
48
- * Active project name (displayed explicitly in system prompt).
48
+ * Active project display name (e.g. "Hr Manager").
49
49
  */
50
50
  projectName?: string;
51
+ /**
52
+ * Active project slug — unique identifier (e.g. "hr-manager").
53
+ */
54
+ projectSlug?: string;
55
+ /**
56
+ * Active project ID (numeric database identifier).
57
+ */
58
+ projectId?: number;
51
59
  /**
52
60
  * Project context from COMPILR.md or CLAUDE.md.
53
61
  * This is appended to the system prompt to give the agent project-specific knowledge.
package/dist/agent.js CHANGED
@@ -385,6 +385,8 @@ export function createAgent(options = {}) {
385
385
  enableMetaTools: capabilityManager ? false : useMetaTools,
386
386
  hasGit: capabilityManager ? false : undefined, // false = skip git-safety; undefined = auto-detect
387
387
  projectName: options.projectName,
388
+ projectSlug: options.projectSlug,
389
+ projectId: options.projectId,
388
390
  projectContext: options.projectContext,
389
391
  guidedModeContext: options.guidedModeContext,
390
392
  planModeContext: options.planModeContext,
Binary file
package/dist/index.js CHANGED
@@ -70,6 +70,10 @@ function parseArgs() {
70
70
  else if (arg === '--update') {
71
71
  options.update = true;
72
72
  }
73
+ else if (arg === '--version' || arg === '-v' || arg === '-V') {
74
+ console.log(VERSION);
75
+ process.exit(0);
76
+ }
73
77
  else if (arg === '--help' || arg === '-h') {
74
78
  showHelp();
75
79
  process.exit(0);
@@ -85,10 +89,11 @@ Usage: npm run dev [options]
85
89
 
86
90
  Options:
87
91
  --provider, -p <provider> LLM provider (claude, openai, gemini, ollama)
88
- --model, -m <model> Model name (e.g., claude-3-5-haiku-20241022)
92
+ --model, -m <model> Model name (e.g., claude-sonnet-4-6)
89
93
  --minimal Use minimal tool set
90
94
  --show-filtering Show tool filtering analysis
91
95
  --update Check for and install updates
96
+ --version, -v Show version number
92
97
  --help, -h Show this help
93
98
 
94
99
  Environment Variables:
@@ -98,7 +103,7 @@ Environment Variables:
98
103
 
99
104
  Examples:
100
105
  npm run dev
101
- npm run dev -- --model claude-3-5-haiku-20241022
106
+ npm run dev -- --model claude-sonnet-4-6
102
107
  npm run dev -- --provider gemini --model gemini-2.0-flash
103
108
  npm run dev -- --minimal --show-filtering
104
109
  npm run dev -- --update
@@ -523,6 +528,8 @@ async function main() {
523
528
  sharedState.pendingSuggestion = event.action;
524
529
  },
525
530
  projectName: liveProjectState.dbProject?.displayName,
531
+ projectSlug: liveProjectState.dbProject?.name,
532
+ projectId: liveProjectState.dbProject?.id,
526
533
  projectContext: liveProjectState.projectContext,
527
534
  guidedModeContext: liveProjectState.guidedModeContext,
528
535
  // Anchors - library handles re-injection on every LLM call
@@ -578,6 +585,8 @@ async function main() {
578
585
  sharedState.pendingSuggestion = event.action;
579
586
  },
580
587
  projectName: liveProjectState.dbProject?.displayName,
588
+ projectSlug: liveProjectState.dbProject?.name,
589
+ projectId: liveProjectState.dbProject?.id,
581
590
  projectContext: liveProjectState.projectContext,
582
591
  guidedModeContext: liveProjectState.guidedModeContext,
583
592
  enableAnchors: true,
@@ -833,7 +842,7 @@ function detectProvider() {
833
842
  function getDefaultModel(provider) {
834
843
  switch (provider) {
835
844
  case 'claude':
836
- return 'claude-sonnet-4-5-20250929';
845
+ return 'claude-sonnet-4-6';
837
846
  case 'openai':
838
847
  return 'gpt-5-mini-2025-08-07';
839
848
  case 'gemini':
@@ -841,7 +850,7 @@ function getDefaultModel(provider) {
841
850
  case 'ollama':
842
851
  return 'llama3.2:8b';
843
852
  default:
844
- return 'claude-sonnet-4-5-20250929';
853
+ return 'claude-sonnet-4-6';
845
854
  }
846
855
  }
847
856
  // =============================================================================
@@ -12,9 +12,29 @@
12
12
  * 4. A transparent fallback handler that routes calls to the registry
13
13
  */
14
14
  import { MetaToolsRegistry, createMetaTools, META_TOOLS_SYSTEM_PROMPT_PREFIX as SDK_META_TOOLS_SYSTEM_PROMPT_PREFIX, } from '@compilr-dev/sdk';
15
+ import { getCapabilityManager } from '../multi-agent/capability-loader.js';
15
16
  // Singleton registry for the CLI process
16
17
  const registry = new MetaToolsRegistry();
17
- const metaToolSet = createMetaTools(registry);
18
+ /**
19
+ * Auto-load callback shared by both use_tool and createFallback paths.
20
+ * When a tool is blocked by the capability filter, this loads the pack
21
+ * and updates the filter so the tool executes in the same turn.
22
+ */
23
+ function onFilteredTool(toolName) {
24
+ const manager = getCapabilityManager();
25
+ if (!manager)
26
+ return false;
27
+ const packId = manager.findPackForTool(toolName);
28
+ if (!packId || manager.isLoaded(packId))
29
+ return false;
30
+ if (manager.getTier(packId) !== 'loadable')
31
+ return false;
32
+ manager.load(packId, 'auto-load');
33
+ // Minimal filter rebuild — next BeforeLLM turn does the full rebuild with orphans
34
+ registry.setFilter(manager.getActiveToolNames());
35
+ return true;
36
+ }
37
+ const metaToolSet = createMetaTools(registry, { onFilteredTool });
18
38
  // =============================================================================
19
39
  // Module-level API (same signatures as before)
20
40
  // =============================================================================
@@ -42,7 +62,7 @@ export const getToolInfoTool = metaToolSet.getToolInfoTool;
42
62
  export const useToolTool = metaToolSet.useToolTool;
43
63
  export const metaTools = [listToolsTool, getToolInfoTool, useToolTool];
44
64
  export function createMetaToolFallback() {
45
- return metaToolSet.createFallback();
65
+ return metaToolSet.createFallback({ onFilteredTool });
46
66
  }
47
67
  /**
48
68
  * Generate a filtered tool index showing only tools in the given set.
package/dist/tools.d.ts CHANGED
@@ -51,6 +51,10 @@ export declare function getMetaTools(): Tool[];
51
51
  * Create a fallback handler for the tool registry.
52
52
  * When the agent calls a tool not in the direct registry, this handler
53
53
  * checks the meta-registry and executes it transparently.
54
+ *
55
+ * Auto-loading of capability packs for filtered tools is handled by the
56
+ * shared onFilteredTool callback in meta-tools.ts (covers both use_tool
57
+ * and direct fallback paths).
54
58
  */
55
59
  export declare function createToolFallback(): (name: string, input: Record<string, unknown>) => Promise<import('@compilr-dev/sdk').ToolExecutionResult | null>;
56
60
  /**
package/dist/tools.js CHANGED
@@ -289,6 +289,10 @@ export function getMetaTools() {
289
289
  * Create a fallback handler for the tool registry.
290
290
  * When the agent calls a tool not in the direct registry, this handler
291
291
  * checks the meta-registry and executes it transparently.
292
+ *
293
+ * Auto-loading of capability packs for filtered tools is handled by the
294
+ * shared onFilteredTool callback in meta-tools.ts (covers both use_tool
295
+ * and direct fallback paths).
292
296
  */
293
297
  export function createToolFallback() {
294
298
  return createMetaToolFallback();
@@ -41,9 +41,9 @@ export const designTutorial = (s) => ({
41
41
  ` multi-question workflows.`,
42
42
  '',
43
43
  ` Current: ${s.muted('claude-haiku-4-5-20251001 (medium tier)')}`,
44
- ` Recommended: ${s.primary('claude-sonnet-4-5-20250929 (large tier)')}`,
44
+ ` Recommended: ${s.primary('claude-sonnet-4-6 (large tier)')}`,
45
45
  '',
46
- ` ${s.primary('>')} 1. Switch to claude-sonnet-4-5-20250929 and continue`,
46
+ ` ${s.primary('>')} 1. Switch to claude-sonnet-4-6 and continue`,
47
47
  ` 2. Use /sketch instead (simpler, works with any model)`,
48
48
  ` 3. Continue with current model anyway`,
49
49
  '',
@@ -68,7 +68,7 @@ export const scaffoldTutorial = (s) => ({
68
68
  ` ${s.warning('! Model Recommendation')}`,
69
69
  '',
70
70
  ` /scaffold works best with larger models.`,
71
- ` Current: ${s.muted('claude-haiku-4-5-20251001 (medium tier)')}`,
71
+ ` Current: ${s.muted('claude-haiku-4-5 (medium tier)')}`,
72
72
  '',
73
73
  ` ${s.primary('>')} 1. Switch model and continue`,
74
74
  ` 2. Use /sketch instead`,
@@ -938,7 +938,7 @@ export class ModelOverlayV2 extends TabbedListOverlayV2 {
938
938
  };
939
939
  minHeight = 18;
940
940
  constructor(options = {}) {
941
- const activeModel = options.currentModel ?? 'claude-sonnet-4-5-20250929';
941
+ const activeModel = options.currentModel ?? 'claude-sonnet-4-6';
942
942
  const activeProvider = options.currentProvider ?? 'claude';
943
943
  // Find the initial tab based on current provider
944
944
  const initialTabIndex = PROVIDER_TABS.findIndex((t) => t.id === activeProvider);
@@ -86,11 +86,15 @@ class DetailScreen extends BaseScreen {
86
86
  confirmDelete = false;
87
87
  confirmCrossProject = false;
88
88
  confirmSelected = 1; // 0 = Yes, 1 = No (for both confirmations)
89
- constructor(item, styles, onDelete) {
89
+ constructor(item, styles, onDelete, startInDeleteMode = false) {
90
90
  super();
91
91
  this.item = item;
92
92
  this.styles = styles;
93
93
  this.onDelete = onDelete;
94
+ if (startInDeleteMode && onDelete) {
95
+ this.confirmDelete = true;
96
+ this.confirmSelected = 1; // Default to "No"
97
+ }
94
98
  }
95
99
  render() {
96
100
  const s = this.styles;
@@ -387,6 +391,18 @@ export class ResumeOverlayV2 extends TabbedListOverlayV2 {
387
391
  showCount: true,
388
392
  emptyMessage: 'No saved sessions found.',
389
393
  noResultsMessage: 'No sessions match the search.',
394
+ // Handle 'd' key to delete session from list view
395
+ handleCustomKey: (key) => {
396
+ const char = extractPrintable(key);
397
+ if (char === 'd' && options.onDelete && this.state.filteredItems.length > 0) {
398
+ const item = this.state.filteredItems[this.state.selectedIndex];
399
+ return {
400
+ handled: true,
401
+ pushScreen: new DetailScreen(item, this.getStyles(), options.onDelete, true),
402
+ };
403
+ }
404
+ return { handled: false };
405
+ },
390
406
  footerHints: (searchMode) => {
391
407
  if (searchMode) {
392
408
  return 'Type to search Enter Select Esc Exit search';
@@ -18,17 +18,19 @@
18
18
  // Model Tier Mappings
19
19
  // =============================================================================
20
20
  const MODEL_TIERS = {
21
- // Claude (Anthropic) - 4.5 series (current)
21
+ // Claude (Anthropic) - 4.6 series (current)
22
+ 'claude-opus-4-6': { tier: 'large', provider: 'anthropic' },
23
+ 'claude-sonnet-4-6': { tier: 'large', provider: 'anthropic' },
24
+ 'claude-haiku-4-5': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-6' },
25
+ // Claude legacy (for backward compatibility)
22
26
  'claude-opus-4-5': { tier: 'large', provider: 'anthropic' },
23
27
  'claude-sonnet-4-5': { tier: 'large', provider: 'anthropic' },
24
- 'claude-haiku-4-5': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
25
- // Claude legacy (for backward compatibility)
26
- 'claude-3-opus': { tier: 'large', provider: 'anthropic' },
28
+ 'claude-opus-4-1': { tier: 'large', provider: 'anthropic' },
27
29
  'claude-opus-4': { tier: 'large', provider: 'anthropic' },
28
30
  'claude-sonnet-4': { tier: 'large', provider: 'anthropic' },
29
31
  'claude-3-5-sonnet': { tier: 'large', provider: 'anthropic' },
30
- 'claude-3-5-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
31
- 'claude-3-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
32
+ 'claude-3-5-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-6' },
33
+ 'claude-3-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-6' },
32
34
  // OpenAI - GPT-5 series (current)
33
35
  'gpt-5.2': { tier: 'large', provider: 'openai' },
34
36
  'gpt-5-mini': { tier: 'large', provider: 'openai' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compilr-dev/cli",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "AI-powered coding assistant CLI using @compilr-dev/agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -54,11 +54,11 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "@anthropic-ai/sdk": "^0.74.0",
57
- "@compilr-dev/agents": "^0.3.24",
57
+ "@compilr-dev/agents": "^0.3.25",
58
58
  "@compilr-dev/agents-coding": "^1.0.4",
59
59
  "@compilr-dev/editor-core": "^0.0.2",
60
60
  "@compilr-dev/factory": "^0.1.12",
61
- "@compilr-dev/sdk": "^0.1.21",
61
+ "@compilr-dev/sdk": "^0.1.28",
62
62
  "@compilr-dev/ui-core": "^0.0.1",
63
63
  "@modelcontextprotocol/sdk": "^1.23.0",
64
64
  "better-sqlite3": "^12.5.0",