sqlew 3.6.2 → 3.6.5

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 (57) hide show
  1. package/CHANGELOG.md +489 -403
  2. package/README.md +44 -3
  3. package/assets/config.example.toml +69 -0
  4. package/assets/sample-agents/README.md +38 -0
  5. package/assets/sample-agents/sqlew-architect.md +431 -0
  6. package/assets/sample-agents/sqlew-researcher.md +339 -0
  7. package/assets/sample-agents/sqlew-scrum-master.md +239 -0
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +13 -0
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/minimal-generator.d.ts +25 -0
  12. package/dist/config/minimal-generator.d.ts.map +1 -0
  13. package/dist/config/minimal-generator.js +103 -0
  14. package/dist/config/minimal-generator.js.map +1 -0
  15. package/dist/config/types.d.ts +13 -0
  16. package/dist/config/types.d.ts.map +1 -1
  17. package/dist/config/types.js +5 -0
  18. package/dist/config/types.js.map +1 -1
  19. package/dist/database.d.ts +6 -9
  20. package/dist/database.d.ts.map +1 -1
  21. package/dist/database.js +30 -106
  22. package/dist/database.js.map +1 -1
  23. package/dist/index.js +5 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/init-agents.d.ts +7 -0
  26. package/dist/init-agents.d.ts.map +1 -0
  27. package/dist/init-agents.js +207 -0
  28. package/dist/init-agents.js.map +1 -0
  29. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts +23 -0
  30. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
  31. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js +44 -0
  32. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
  33. package/dist/sync-agents.d.ts +13 -0
  34. package/dist/sync-agents.d.ts.map +1 -0
  35. package/dist/sync-agents.js +112 -0
  36. package/dist/sync-agents.js.map +1 -0
  37. package/dist/tests/migrations/test-all-versions.js +210 -210
  38. package/dist/tools/messaging.d.ts +4 -0
  39. package/dist/tools/messaging.d.ts.map +1 -1
  40. package/dist/tools/messaging.js +38 -0
  41. package/dist/tools/messaging.js.map +1 -1
  42. package/dist/tools/tasks.js +2 -2
  43. package/dist/tools/tasks.js.map +1 -1
  44. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  45. package/dist/utils/task-stale-detection.js +79 -4
  46. package/dist/utils/task-stale-detection.js.map +1 -1
  47. package/dist/watcher/file-watcher.d.ts +11 -5
  48. package/dist/watcher/file-watcher.d.ts.map +1 -1
  49. package/dist/watcher/file-watcher.js +43 -10
  50. package/dist/watcher/file-watcher.js.map +1 -1
  51. package/docs/MIGRATION_CHAIN.md +293 -293
  52. package/docs/SPECIALIZED_AGENTS.md +576 -0
  53. package/package.json +86 -85
  54. package/dist/tests/agent-reuse.test.d.ts +0 -6
  55. package/dist/tests/agent-reuse.test.d.ts.map +0 -1
  56. package/dist/tests/agent-reuse.test.js +0 -242
  57. package/dist/tests/agent-reuse.test.js.map +0 -1
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI tool to initialize sqlew specialized agents
4
+ * Usage: npx mcp-sqlew init-agents [--path <custom-path>]
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ import { createMinimalConfigIfNotExists } from './config/minimal-generator.js';
10
+ import { loadConfigFile } from './config/loader.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ function parseArgs() {
14
+ const args = process.argv.slice(2);
15
+ const options = {};
16
+ for (let i = 0; i < args.length; i++) {
17
+ switch (args[i]) {
18
+ case '--path':
19
+ options.targetPath = args[++i];
20
+ break;
21
+ case '--project':
22
+ case '--local':
23
+ options.projectLocal = true;
24
+ break;
25
+ case '--help':
26
+ case '-h':
27
+ printHelp();
28
+ process.exit(0);
29
+ break;
30
+ }
31
+ }
32
+ return options;
33
+ }
34
+ function printHelp() {
35
+ console.log(`
36
+ mcp-sqlew init-agents - Initialize specialized agents for mcp-sqlew
37
+
38
+ USAGE:
39
+ npx mcp-sqlew init-agents [OPTIONS]
40
+
41
+ OPTIONS:
42
+ --path <path> Custom target directory (default: ~/.claude/agents)
43
+ --project, --local Install to current project (.claude/agents)
44
+ --help, -h Show this help message
45
+
46
+ EXAMPLES:
47
+ # Install to global Claude Code agents directory
48
+ npx mcp-sqlew init-agents
49
+
50
+ # Install to current project
51
+ npx mcp-sqlew init-agents --project
52
+
53
+ # Install to custom location
54
+ npx mcp-sqlew init-agents --path /path/to/agents
55
+
56
+ AGENT FILES:
57
+ - sqlew-scrum-master.md Multi-agent coordination, task management
58
+ - sqlew-researcher.md Query decisions, analyze patterns
59
+ - sqlew-architect.md Document decisions, enforce constraints
60
+ - QUICK_START.md Usage guide with examples
61
+ - README.md Overview and best practices
62
+ `);
63
+ }
64
+ function getDefaultTargetPath() {
65
+ const home = process.env.HOME || process.env.USERPROFILE;
66
+ if (!home) {
67
+ throw new Error('Could not determine home directory');
68
+ }
69
+ return path.join(home, '.claude', 'agents');
70
+ }
71
+ function getSourcePath() {
72
+ // When running from npm package: node_modules/mcp-sqlew/dist/init-agents.js
73
+ // Source files are in: node_modules/mcp-sqlew/assets/sample-agents/
74
+ const distDir = __dirname; // .../dist
75
+ const packageRoot = path.dirname(distDir); // .../mcp-sqlew
76
+ return path.join(packageRoot, 'assets', 'sample-agents');
77
+ }
78
+ /**
79
+ * Ensure config.toml exists, create if missing
80
+ */
81
+ function ensureConfigExists() {
82
+ const projectRoot = process.cwd();
83
+ const created = createMinimalConfigIfNotExists(projectRoot);
84
+ if (created) {
85
+ console.log('✓ Created: .sqlew/config.toml (minimal defaults)');
86
+ console.log(' Edit [agents] section to customize agent selection\n');
87
+ }
88
+ }
89
+ /**
90
+ * Get list of agent files to install based on config
91
+ */
92
+ function getAgentsToInstall() {
93
+ const config = loadConfigFile();
94
+ const agentConfig = config.agents || {};
95
+ const files = [];
96
+ const installed = [];
97
+ // Add agents based on config (default: true)
98
+ if (agentConfig.scrum_master !== false) {
99
+ files.push('sqlew-scrum-master.md');
100
+ installed.push('Scrum Master (12KB)');
101
+ }
102
+ if (agentConfig.researcher !== false) {
103
+ files.push('sqlew-researcher.md');
104
+ installed.push('Researcher (14KB)');
105
+ }
106
+ if (agentConfig.architect !== false) {
107
+ files.push('sqlew-architect.md');
108
+ installed.push('Architect (20KB)');
109
+ }
110
+ // NOTE: Documentation is now centralized in docs/SPECIALIZED_AGENTS.md
111
+ // No longer installing README/QUICK_START to agent directories
112
+ const summary = installed.length > 0 ? installed.join(', ') : 'None';
113
+ return { files, summary };
114
+ }
115
+ function copyAgentFiles(sourcePath, targetPath, filesToCopy) {
116
+ // Ensure target directory exists
117
+ if (!fs.existsSync(targetPath)) {
118
+ fs.mkdirSync(targetPath, { recursive: true });
119
+ console.log(`✓ Created directory: ${targetPath}`);
120
+ }
121
+ // Copy only specified files
122
+ const copiedFiles = [];
123
+ for (const file of filesToCopy) {
124
+ const sourceFile = path.join(sourcePath, file);
125
+ const targetFile = path.join(targetPath, file);
126
+ // Skip if source file doesn't exist
127
+ if (!fs.existsSync(sourceFile)) {
128
+ console.warn(`⚠ Skipping missing file: ${file}`);
129
+ continue;
130
+ }
131
+ // Copy file
132
+ fs.copyFileSync(sourceFile, targetFile);
133
+ copiedFiles.push(file);
134
+ }
135
+ console.log(`\n✓ Copied ${copiedFiles.length} files to: ${targetPath}\n`);
136
+ // List copied files
137
+ console.log('Files installed:');
138
+ copiedFiles.forEach(file => {
139
+ console.log(` • ${file}`);
140
+ });
141
+ }
142
+ function main() {
143
+ try {
144
+ console.log('mcp-sqlew Agent Installer\n');
145
+ // STEP 1: Ensure minimal config.toml exists
146
+ ensureConfigExists();
147
+ // STEP 2: Parse arguments
148
+ const options = parseArgs();
149
+ // STEP 3: Get agents to install based on config
150
+ const { files, summary } = getAgentsToInstall();
151
+ if (files.length === 0) {
152
+ console.log('⚠ No agents enabled in .sqlew/config.toml\n');
153
+ console.log('To enable agents, edit .sqlew/config.toml:');
154
+ console.log('[agents]');
155
+ console.log('scrum_master = true');
156
+ console.log('researcher = true');
157
+ console.log('architect = true\n');
158
+ process.exit(1);
159
+ }
160
+ console.log(`Installing agents: ${summary}\n`);
161
+ // STEP 4: Determine target path
162
+ let targetPath;
163
+ if (options.targetPath) {
164
+ targetPath = path.resolve(options.targetPath);
165
+ }
166
+ else if (options.projectLocal) {
167
+ targetPath = path.join(process.cwd(), '.claude', 'agents');
168
+ }
169
+ else {
170
+ targetPath = getDefaultTargetPath();
171
+ }
172
+ // STEP 5: Get source path
173
+ const sourcePath = getSourcePath();
174
+ // Verify source exists
175
+ if (!fs.existsSync(sourcePath)) {
176
+ throw new Error(`Source directory not found: ${sourcePath}\nThis may indicate an installation issue.`);
177
+ }
178
+ console.log(`Source: ${sourcePath}`);
179
+ console.log(`Target: ${targetPath}\n`);
180
+ // STEP 6: Copy selected files
181
+ copyAgentFiles(sourcePath, targetPath, files);
182
+ // STEP 7: Success message
183
+ console.log(`\n✓ Installation complete!\n`);
184
+ console.log('NEXT STEPS:');
185
+ console.log(' 1. Restart Claude Code (if running)');
186
+ console.log(' 2. Use agents with @ prefix:');
187
+ if (files.includes('sqlew-scrum-master.md')) {
188
+ console.log(' @sqlew-scrum-master "Plan the sprint"');
189
+ }
190
+ if (files.includes('sqlew-researcher.md')) {
191
+ console.log(' @sqlew-researcher "Query past decisions"');
192
+ }
193
+ if (files.includes('sqlew-architect.md')) {
194
+ console.log(' @sqlew-architect "Document architecture"');
195
+ }
196
+ console.log('\n 3. Customize agent selection:');
197
+ console.log(' Edit .sqlew/config.toml → [agents] section');
198
+ console.log(' Disable unused agents to reduce token consumption\n');
199
+ console.log('For more info: https://github.com/sin5ddd/mcp-sqlew\n');
200
+ }
201
+ catch (error) {
202
+ console.error(`\n❌ Error: ${error instanceof Error ? error.message : String(error)}\n`);
203
+ process.exit(1);
204
+ }
205
+ }
206
+ main();
207
+ //# sourceMappingURL=init-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-agents.js","sourceRoot":"","sources":["../src/init-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Migration: Simplify Agent System (v3.6.5)
4
+ *
5
+ * Removes unused messaging system. Agent pooling columns (in_use, is_reusable)
6
+ * are left in schema but ignored by application code for backward compatibility.
7
+ *
8
+ * Changes:
9
+ * - Drops t_agent_messages table (messaging system unused)
10
+ * - Code no longer uses in_use/is_reusable columns (but columns remain in DB)
11
+ *
12
+ * Benefits:
13
+ * - Eliminates agent pooling race conditions
14
+ * - Removes UNIQUE constraint errors
15
+ * - Simplifies agent management to basic name registry
16
+ * - Maintains cross-RDBMS compatibility without raw SQL
17
+ *
18
+ * Note: Columns in_use and is_reusable are deprecated but left in m_agents table
19
+ * for backward compatibility and to avoid complex SQLite FK constraint handling.
20
+ */
21
+ export declare function up(knex: Knex): Promise<void>;
22
+ export declare function down(knex: Knex): Promise<void>;
23
+ //# sourceMappingURL=20251028000000_simplify_agent_system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251028000000_simplify_agent_system.d.ts","sourceRoot":"","sources":["../../../../src/migrations/knex/enhancements/20251028000000_simplify_agent_system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC;;;;;;;;;;;;;;;;;;GAkBG;AAEH,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBpD"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Migration: Simplify Agent System (v3.6.5)
3
+ *
4
+ * Removes unused messaging system. Agent pooling columns (in_use, is_reusable)
5
+ * are left in schema but ignored by application code for backward compatibility.
6
+ *
7
+ * Changes:
8
+ * - Drops t_agent_messages table (messaging system unused)
9
+ * - Code no longer uses in_use/is_reusable columns (but columns remain in DB)
10
+ *
11
+ * Benefits:
12
+ * - Eliminates agent pooling race conditions
13
+ * - Removes UNIQUE constraint errors
14
+ * - Simplifies agent management to basic name registry
15
+ * - Maintains cross-RDBMS compatibility without raw SQL
16
+ *
17
+ * Note: Columns in_use and is_reusable are deprecated but left in m_agents table
18
+ * for backward compatibility and to avoid complex SQLite FK constraint handling.
19
+ */
20
+ export async function up(knex) {
21
+ // Drop t_agent_messages table (messaging system not used)
22
+ await knex.schema.dropTableIfExists('t_agent_messages');
23
+ // Note: in_use and is_reusable columns remain in m_agents table but are ignored by code
24
+ // Dropping these columns would require complex table recreation on SQLite due to FK constraints
25
+ // This approach maintains cross-RDBMS compatibility without raw SQL
26
+ }
27
+ export async function down(knex) {
28
+ // Recreate t_agent_messages table
29
+ await knex.schema.createTable('t_agent_messages', (table) => {
30
+ table.increments('id').primary();
31
+ table.integer('from_agent_id').references('id').inTable('m_agents');
32
+ table.integer('to_agent_id').references('id').inTable('m_agents');
33
+ table.integer('msg_type').notNullable();
34
+ table.integer('priority').defaultTo(2);
35
+ table.text('message').notNullable();
36
+ table.text('payload');
37
+ table.boolean('read').defaultTo(false);
38
+ table.integer('ts').notNullable();
39
+ table.index('ts', 'idx_agent_messages_ts');
40
+ table.index(['to_agent_id', 'read'], 'idx_agent_messages_to_unread');
41
+ });
42
+ // Note: in_use and is_reusable columns were not dropped, so no need to restore
43
+ }
44
+ //# sourceMappingURL=20251028000000_simplify_agent_system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251028000000_simplify_agent_system.js","sourceRoot":"","sources":["../../../../src/migrations/knex/enhancements/20251028000000_simplify_agent_system.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,0DAA0D;IAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAExD,wFAAwF;IACxF,gGAAgG;IAChG,oEAAoE;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,kCAAkC;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1D,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACpE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,+EAA+E;AACjF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Agent synchronization module
3
+ * Syncs specialized agents with config.toml on startup
4
+ * - Copies enabled agents (if missing)
5
+ * - Deletes disabled agents (if present)
6
+ */
7
+ /**
8
+ * Synchronize agents with config.toml
9
+ * - Copy enabled agents if missing
10
+ * - Delete disabled agents if present
11
+ */
12
+ export declare function syncAgentsWithConfig(): void;
13
+ //# sourceMappingURL=sync-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-agents.d.ts","sourceRoot":"","sources":["../src/sync-agents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwCH;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAgF3C"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Agent synchronization module
3
+ * Syncs specialized agents with config.toml on startup
4
+ * - Copies enabled agents (if missing)
5
+ * - Deletes disabled agents (if present)
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { createMinimalConfigIfNotExists } from './config/minimal-generator.js';
11
+ import { loadConfigFile } from './config/loader.js';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ const AGENTS = [
15
+ { filename: 'sqlew-scrum-master.md', configKey: 'scrum_master', displayName: 'Scrum Master' },
16
+ { filename: 'sqlew-researcher.md', configKey: 'researcher', displayName: 'Researcher' },
17
+ { filename: 'sqlew-architect.md', configKey: 'architect', displayName: 'Architect' },
18
+ ];
19
+ /**
20
+ * Get source path for agent files
21
+ */
22
+ function getSourcePath() {
23
+ const distDir = __dirname; // .../dist
24
+ const packageRoot = path.dirname(distDir); // .../mcp-sqlew
25
+ return path.join(packageRoot, 'assets', 'sample-agents');
26
+ }
27
+ /**
28
+ * Get target path for agents (project-local .claude/agents)
29
+ */
30
+ function getTargetPath() {
31
+ const projectRoot = process.cwd();
32
+ return path.join(projectRoot, '.claude', 'agents');
33
+ }
34
+ /**
35
+ * Synchronize agents with config.toml
36
+ * - Copy enabled agents if missing
37
+ * - Delete disabled agents if present
38
+ */
39
+ export function syncAgentsWithConfig() {
40
+ try {
41
+ // Ensure minimal config.toml exists
42
+ const projectRoot = process.cwd();
43
+ createMinimalConfigIfNotExists(projectRoot);
44
+ // Load config
45
+ const config = loadConfigFile();
46
+ const agentConfig = config.agents || {};
47
+ const sourcePath = getSourcePath();
48
+ const targetPath = getTargetPath();
49
+ // Verify source directory exists
50
+ if (!fs.existsSync(sourcePath)) {
51
+ console.error(`⚠ Agent source directory not found: ${sourcePath}`);
52
+ return;
53
+ }
54
+ // Ensure target directory exists
55
+ if (!fs.existsSync(targetPath)) {
56
+ fs.mkdirSync(targetPath, { recursive: true });
57
+ }
58
+ const copied = [];
59
+ const deleted = [];
60
+ const skipped = [];
61
+ // Process each agent
62
+ for (const agent of AGENTS) {
63
+ const sourceFile = path.join(sourcePath, agent.filename);
64
+ const targetFile = path.join(targetPath, agent.filename);
65
+ // Check if agent is enabled in config (default: true)
66
+ const isEnabled = agentConfig[agent.configKey] !== false;
67
+ if (isEnabled) {
68
+ // Agent enabled: ensure file exists
69
+ if (!fs.existsSync(targetFile)) {
70
+ // File missing, copy it
71
+ if (fs.existsSync(sourceFile)) {
72
+ fs.copyFileSync(sourceFile, targetFile);
73
+ copied.push(agent.displayName);
74
+ }
75
+ else {
76
+ console.error(`⚠ Source file not found: ${sourceFile}`);
77
+ }
78
+ }
79
+ else {
80
+ // File already exists, skip
81
+ skipped.push(agent.displayName);
82
+ }
83
+ }
84
+ else {
85
+ // Agent disabled: ensure file doesn't exist
86
+ if (fs.existsSync(targetFile)) {
87
+ // File exists, delete it
88
+ fs.unlinkSync(targetFile);
89
+ deleted.push(agent.displayName);
90
+ }
91
+ // else: file doesn't exist, nothing to do
92
+ }
93
+ }
94
+ // Report changes
95
+ if (copied.length > 0) {
96
+ console.log(`✓ Installed agents: ${copied.join(', ')}`);
97
+ console.log(` Location: ${targetPath}`);
98
+ }
99
+ if (deleted.length > 0) {
100
+ console.log(`✓ Removed agents: ${deleted.join(', ')}`);
101
+ }
102
+ // Show usage hint if any agents were copied
103
+ if (copied.length > 0) {
104
+ console.log(` Use agents with @ prefix: @sqlew-scrum-master, @sqlew-researcher, @sqlew-architect`);
105
+ }
106
+ }
107
+ catch (error) {
108
+ // Don't fail startup if sync fails
109
+ console.error(`⚠ Failed to sync agents: ${error instanceof Error ? error.message : String(error)}`);
110
+ }
111
+ }
112
+ //# sourceMappingURL=sync-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-agents.js","sourceRoot":"","sources":["../src/sync-agents.ts"],"names":[],"mappings":"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"}