sqlew 3.5.3 → 3.6.1
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/CHANGELOG.md +247 -1772
- package/README.md +70 -304
- package/assets/config.example.toml +106 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mysql-adapter.d.ts +31 -0
- package/dist/adapters/mysql-adapter.d.ts.map +1 -0
- package/dist/adapters/mysql-adapter.js +63 -0
- package/dist/adapters/mysql-adapter.js.map +1 -0
- package/dist/adapters/postgresql-adapter.d.ts +31 -0
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
- package/dist/adapters/postgresql-adapter.js +63 -0
- package/dist/adapters/postgresql-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +37 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +129 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +33 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.js +55 -54
- package/dist/cli.js.map +1 -1
- package/dist/config/example-generator.d.ts +11 -0
- package/dist/config/example-generator.d.ts.map +1 -0
- package/dist/config/example-generator.js +48 -0
- package/dist/config/example-generator.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +11 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database.d.ts +56 -121
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +266 -414
- package/dist/database.js.map +1 -1
- package/dist/index.js +329 -245
- package/dist/index.js.map +1 -1
- package/dist/knexfile.d.ts +6 -0
- package/dist/knexfile.d.ts.map +1 -0
- package/dist/knexfile.js +85 -0
- package/dist/knexfile.js.map +1 -0
- package/dist/migrations/add-help-system-tables.d.ts +35 -0
- package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
- package/dist/migrations/add-help-system-tables.js +206 -0
- package/dist/migrations/add-help-system-tables.js.map +1 -0
- package/dist/migrations/add-token-tracking.d.ts +28 -0
- package/dist/migrations/add-token-tracking.d.ts.map +1 -0
- package/dist/migrations/add-token-tracking.js +108 -0
- package/dist/migrations/add-token-tracking.js.map +1 -0
- package/dist/migrations/index.d.ts +25 -12
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +147 -20
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.js +143 -0
- package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts +14 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js +34 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js +24 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts +16 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js +27 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/migrations/seed-help-data.d.ts +48 -0
- package/dist/migrations/seed-help-data.d.ts.map +1 -0
- package/dist/migrations/seed-help-data.js +1466 -0
- package/dist/migrations/seed-help-data.js.map +1 -0
- package/dist/migrations/seed-tool-metadata.d.ts +24 -0
- package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
- package/dist/migrations/seed-tool-metadata.js +392 -0
- package/dist/migrations/seed-tool-metadata.js.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -1
- package/dist/tests/agent-reuse.test.d.ts +6 -0
- package/dist/tests/agent-reuse.test.d.ts.map +1 -0
- package/dist/tests/agent-reuse.test.js +242 -0
- package/dist/tests/agent-reuse.test.js.map +1 -0
- package/dist/tests/all-features.test.d.ts +7 -0
- package/dist/tests/all-features.test.d.ts.map +1 -0
- package/dist/tests/all-features.test.js +514 -0
- package/dist/tests/all-features.test.js.map +1 -0
- package/dist/tests/git-aware-completion.test.js +89 -70
- package/dist/tests/git-aware-completion.test.js.map +1 -1
- package/dist/tests/help-system.test.d.ts +23 -0
- package/dist/tests/help-system.test.d.ts.map +1 -0
- package/dist/tests/help-system.test.js +374 -0
- package/dist/tests/help-system.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
- package/dist/tests/tasks.dependencies.test.js +338 -307
- package/dist/tests/tasks.dependencies.test.js.map +1 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-action.test.js +122 -101
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
- package/dist/tests/two-step-git-completion.test.js +176 -133
- package/dist/tests/two-step-git-completion.test.js.map +1 -1
- package/dist/tests/vcs-staging.test.js +1 -1
- package/dist/tests/vcs-staging.test.js.map +1 -1
- package/dist/tools/config.d.ts +9 -6
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +16 -14
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +10 -7
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +73 -51
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +36 -33
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +441 -340
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +12 -9
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +173 -95
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/help-queries.d.ts +130 -0
- package/dist/tools/help-queries.d.ts.map +1 -0
- package/dist/tools/help-queries.js +393 -0
- package/dist/tools/help-queries.js.map +1 -0
- package/dist/tools/messaging.d.ts +14 -11
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +239 -133
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +18 -16
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +519 -442
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +14 -11
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +90 -122
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/activity-logging.d.ts +114 -0
- package/dist/utils/activity-logging.d.ts.map +1 -0
- package/dist/utils/activity-logging.js +162 -0
- package/dist/utils/activity-logging.js.map +1 -0
- package/dist/utils/batch.d.ts +2 -2
- package/dist/utils/batch.d.ts.map +1 -1
- package/dist/utils/batch.js +8 -8
- package/dist/utils/batch.js.map +1 -1
- package/dist/utils/cleanup.d.ts +24 -14
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +37 -27
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +99 -0
- package/dist/utils/debug-logger.d.ts.map +1 -0
- package/dist/utils/debug-logger.js +267 -0
- package/dist/utils/debug-logger.js.map +1 -0
- package/dist/utils/error-handler.d.ts +28 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +121 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/help-tracking.d.ts +55 -0
- package/dist/utils/help-tracking.d.ts.map +1 -0
- package/dist/utils/help-tracking.js +88 -0
- package/dist/utils/help-tracking.js.map +1 -0
- package/dist/utils/param-parser.d.ts +23 -0
- package/dist/utils/param-parser.d.ts.map +1 -0
- package/dist/utils/param-parser.js +52 -0
- package/dist/utils/param-parser.js.map +1 -0
- package/dist/utils/retention.d.ts +17 -7
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +31 -12
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +15 -13
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +100 -302
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/token-estimation.d.ts +72 -0
- package/dist/utils/token-estimation.d.ts.map +1 -0
- package/dist/utils/token-estimation.js +71 -0
- package/dist/utils/token-estimation.js.map +1 -0
- package/dist/utils/token-logging.d.ts +48 -0
- package/dist/utils/token-logging.d.ts.map +1 -0
- package/dist/utils/token-logging.js +112 -0
- package/dist/utils/token-logging.js.map +1 -0
- package/dist/utils/view-queries.d.ts +34 -0
- package/dist/utils/view-queries.d.ts.map +1 -0
- package/dist/utils/view-queries.js +192 -0
- package/dist/utils/view-queries.js.map +1 -0
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +25 -11
- package/dist/watcher/file-watcher.js.map +1 -1
- package/docs/BEST_PRACTICES.md +56 -448
- package/docs/MIGRATION_v3.6.0.md +170 -0
- package/docs/SHARED_CONCEPTS.md +63 -208
- package/docs/TASK_OVERVIEW.md +2 -2
- package/docs/TOOL_SELECTION.md +41 -248
- package/package.json +17 -4
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration: Help System Schema Refactor (v3.5.x -> v3.6.0)
|
|
3
|
+
*
|
|
4
|
+
* This migration refactors the help system schema:
|
|
5
|
+
* 1. Renames tables: t_help_* → m_help_* for static/master data
|
|
6
|
+
* 2. Creates 5 new junction tables for normalized many-to-many relationships
|
|
7
|
+
* 3. Parses JSON action_sequence → normalized m_help_use_case_actions rows
|
|
8
|
+
* 4. Populates m_help_sequences with 10 workflow patterns
|
|
9
|
+
* 5. Generates and normalizes tags from categories/titles
|
|
10
|
+
* 6. Creates indexes on all foreign keys
|
|
11
|
+
* 7. Validates zero data loss (41 use cases preserved)
|
|
12
|
+
*
|
|
13
|
+
* Execution time: <5 seconds
|
|
14
|
+
* Safety: Single transaction with rollback on error
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'fs';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
/**
|
|
19
|
+
* Check if migration is needed
|
|
20
|
+
*/
|
|
21
|
+
export function needsMigration(db) {
|
|
22
|
+
// Check if old table exists (t_help_use_cases) with action_sequence column
|
|
23
|
+
const oldTableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_help_use_cases'").get();
|
|
24
|
+
// Check if new junction table doesn't exist
|
|
25
|
+
const newTableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_help_use_case_actions'").get();
|
|
26
|
+
// Check if t_help_use_cases has action_sequence column
|
|
27
|
+
let hasActionSequenceColumn = false;
|
|
28
|
+
if (oldTableExists) {
|
|
29
|
+
const columns = db.prepare("PRAGMA table_info(t_help_use_cases)").all();
|
|
30
|
+
hasActionSequenceColumn = columns.some(col => col.name === 'action_sequence');
|
|
31
|
+
}
|
|
32
|
+
return oldTableExists !== undefined && newTableExists === undefined && hasActionSequenceColumn;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run the migration
|
|
36
|
+
*/
|
|
37
|
+
export function runMigration(db) {
|
|
38
|
+
const details = [];
|
|
39
|
+
const validationResults = [];
|
|
40
|
+
try {
|
|
41
|
+
// Read SQL migration file
|
|
42
|
+
const sqlPath = path.join(__dirname, 'v3.6.0-help-system-refactor.sql');
|
|
43
|
+
const sql = fs.readFileSync(sqlPath, 'utf-8');
|
|
44
|
+
details.push('Loaded migration SQL from file');
|
|
45
|
+
// Execute migration in a single transaction
|
|
46
|
+
// Note: The SQL file already contains BEGIN/COMMIT
|
|
47
|
+
db.exec(sql);
|
|
48
|
+
details.push('Migration SQL executed successfully');
|
|
49
|
+
// Extract validation results from the database
|
|
50
|
+
// The SQL includes validation queries that output results
|
|
51
|
+
// We'll re-run them to capture the results in TypeScript
|
|
52
|
+
// Validation 1: Use case count
|
|
53
|
+
const useCaseCount = db.prepare('SELECT COUNT(*) as count FROM m_help_use_cases').get();
|
|
54
|
+
validationResults.push({
|
|
55
|
+
test: 'Use Case Count',
|
|
56
|
+
actual: useCaseCount.count,
|
|
57
|
+
expected: 41,
|
|
58
|
+
status: useCaseCount.count === 41 ? 'PASS' : 'FAIL'
|
|
59
|
+
});
|
|
60
|
+
// Validation 2: Use cases with actions
|
|
61
|
+
const useCasesWithActions = db.prepare('SELECT COUNT(DISTINCT use_case_id) as count FROM m_help_use_case_actions').get();
|
|
62
|
+
validationResults.push({
|
|
63
|
+
test: 'Use Cases with Actions',
|
|
64
|
+
actual: useCasesWithActions.count,
|
|
65
|
+
expected: 41,
|
|
66
|
+
status: useCasesWithActions.count === 41 ? 'PASS' : 'FAIL'
|
|
67
|
+
});
|
|
68
|
+
// Validation 3: Sequences with actions
|
|
69
|
+
const sequencesWithActions = db.prepare('SELECT COUNT(DISTINCT sequence_id) as count FROM m_help_sequence_actions').get();
|
|
70
|
+
validationResults.push({
|
|
71
|
+
test: 'Sequences with Actions',
|
|
72
|
+
actual: sequencesWithActions.count,
|
|
73
|
+
expected: 10,
|
|
74
|
+
status: sequencesWithActions.count === 10 ? 'PASS' : 'FAIL'
|
|
75
|
+
});
|
|
76
|
+
// Validation 4: Tag count
|
|
77
|
+
const tagCount = db.prepare('SELECT COUNT(*) as count FROM m_help_tags').get();
|
|
78
|
+
validationResults.push({
|
|
79
|
+
test: 'Tag Count',
|
|
80
|
+
actual: tagCount.count,
|
|
81
|
+
expected: '> 20',
|
|
82
|
+
status: tagCount.count > 20 ? 'PASS' : 'FAIL'
|
|
83
|
+
});
|
|
84
|
+
// Validation 5: FK integrity
|
|
85
|
+
const orphanedRecords = db.prepare(`
|
|
86
|
+
SELECT COUNT(*) as count
|
|
87
|
+
FROM m_help_use_case_actions uca
|
|
88
|
+
LEFT JOIN m_help_actions ha ON uca.action_id = ha.action_id
|
|
89
|
+
WHERE ha.action_id IS NULL
|
|
90
|
+
`).get();
|
|
91
|
+
validationResults.push({
|
|
92
|
+
test: 'FK Integrity (use_case_actions)',
|
|
93
|
+
actual: orphanedRecords.count,
|
|
94
|
+
expected: 0,
|
|
95
|
+
status: orphanedRecords.count === 0 ? 'PASS' : 'FAIL'
|
|
96
|
+
});
|
|
97
|
+
// Validation 6: Index count
|
|
98
|
+
const indexCount = db.prepare("SELECT COUNT(*) as count FROM sqlite_master WHERE type='index' AND name LIKE 'idx_help_%'").get();
|
|
99
|
+
validationResults.push({
|
|
100
|
+
test: 'Index Count',
|
|
101
|
+
actual: indexCount.count,
|
|
102
|
+
expected: '> 15',
|
|
103
|
+
status: indexCount.count > 15 ? 'PASS' : 'FAIL'
|
|
104
|
+
});
|
|
105
|
+
// Check if all validations passed
|
|
106
|
+
const allPassed = validationResults.every(v => v.status === 'PASS');
|
|
107
|
+
if (!allPassed) {
|
|
108
|
+
const failedTests = validationResults.filter(v => v.status === 'FAIL');
|
|
109
|
+
details.push(`WARNING: ${failedTests.length} validation test(s) failed`);
|
|
110
|
+
failedTests.forEach(test => {
|
|
111
|
+
details.push(` - ${test.test}: expected ${test.expected}, got ${test.actual}`);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Get migration statistics
|
|
115
|
+
const stats = {
|
|
116
|
+
useCases: useCaseCount.count,
|
|
117
|
+
actionsNormalized: db.prepare('SELECT COUNT(*) as count FROM m_help_use_case_actions').get(),
|
|
118
|
+
sequencesCreated: db.prepare('SELECT COUNT(*) as count FROM m_help_sequences').get(),
|
|
119
|
+
tagsGenerated: tagCount.count,
|
|
120
|
+
indexesCreated: indexCount.count
|
|
121
|
+
};
|
|
122
|
+
details.push('');
|
|
123
|
+
details.push('Migration Statistics:');
|
|
124
|
+
details.push(` - Tables Renamed: 3 (t_ → m_)`);
|
|
125
|
+
details.push(` - New Tables Created: 6`);
|
|
126
|
+
details.push(` - Use Cases Migrated: ${stats.useCases}`);
|
|
127
|
+
details.push(` - Actions Normalized: ${stats.actionsNormalized.count}`);
|
|
128
|
+
details.push(` - Sequences Created: ${stats.sequencesCreated.count}`);
|
|
129
|
+
details.push(` - Tags Generated: ${stats.tagsGenerated}`);
|
|
130
|
+
details.push(` - Indexes Created: ${stats.indexesCreated}`);
|
|
131
|
+
return {
|
|
132
|
+
success: allPassed,
|
|
133
|
+
message: allPassed
|
|
134
|
+
? 'Migration v3.6.0 completed successfully. All validations passed.'
|
|
135
|
+
: 'Migration v3.6.0 completed with validation warnings. Review details.',
|
|
136
|
+
details,
|
|
137
|
+
validationResults
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
142
|
+
details.push(`ERROR: ${message}`);
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
message: `Migration failed: ${message}`,
|
|
146
|
+
details,
|
|
147
|
+
validationResults
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get migration info
|
|
153
|
+
*/
|
|
154
|
+
export function getMigrationInfo() {
|
|
155
|
+
return `
|
|
156
|
+
Migration: Help System Schema Refactor (v3.5.x -> v3.6.0)
|
|
157
|
+
|
|
158
|
+
This migration refactors the help system for better normalization and queryability:
|
|
159
|
+
|
|
160
|
+
Schema Changes:
|
|
161
|
+
- Renames 3 tables: t_help_* → m_help_* (static/master data)
|
|
162
|
+
- Creates 6 new tables:
|
|
163
|
+
* m_help_tags (normalized tag master)
|
|
164
|
+
* m_help_sequences (reusable workflow patterns)
|
|
165
|
+
* m_help_use_case_actions (replaces JSON action_sequence)
|
|
166
|
+
* m_help_sequence_actions (sequence steps)
|
|
167
|
+
* m_help_example_tags (example categorization)
|
|
168
|
+
* m_help_use_case_tags (use case categorization)
|
|
169
|
+
* m_help_sequence_tags (sequence categorization)
|
|
170
|
+
|
|
171
|
+
Data Transformations:
|
|
172
|
+
- Parses JSON action_sequence arrays → normalized relational rows
|
|
173
|
+
- Generates 24+ tags from categories, complexity levels, and concepts
|
|
174
|
+
- Populates 10 workflow sequences (task state machine, rich decision flow, etc.)
|
|
175
|
+
- Auto-tags all use cases and sequences
|
|
176
|
+
|
|
177
|
+
Performance Optimizations:
|
|
178
|
+
- Creates 15+ indexes on all foreign keys and junction tables
|
|
179
|
+
- Enables efficient tag-based queries and workflow discovery
|
|
180
|
+
|
|
181
|
+
Safety Guarantees:
|
|
182
|
+
- Single atomic transaction (all-or-nothing)
|
|
183
|
+
- 6 validation tests ensure zero data loss
|
|
184
|
+
- Rollback on any error
|
|
185
|
+
- Execution time: <5 seconds
|
|
186
|
+
|
|
187
|
+
All 41 existing use cases are preserved with enhanced metadata.
|
|
188
|
+
`.trim();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Rollback migration (restore from backup)
|
|
192
|
+
*/
|
|
193
|
+
export function rollbackMigration(db, backupPath) {
|
|
194
|
+
const details = [];
|
|
195
|
+
try {
|
|
196
|
+
if (!fs.existsSync(backupPath)) {
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
message: `Backup file not found: ${backupPath}`,
|
|
200
|
+
details
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// Close current database connection
|
|
204
|
+
db.close();
|
|
205
|
+
// Restore backup (this would need to be handled by the caller)
|
|
206
|
+
details.push(`Backup file located: ${backupPath}`);
|
|
207
|
+
details.push('Note: Database restoration must be performed manually by copying the backup file.');
|
|
208
|
+
return {
|
|
209
|
+
success: true,
|
|
210
|
+
message: 'Rollback instructions prepared. Restore the backup file manually.',
|
|
211
|
+
details
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
216
|
+
return {
|
|
217
|
+
success: false,
|
|
218
|
+
message: `Rollback failed: ${message}`,
|
|
219
|
+
details
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=v3.6.0-help-system-refactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3.6.0-help-system-refactor.js","sourceRoot":"","sources":["../../src/migrations/v3.6.0-help-system-refactor.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ1C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAyBnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAUzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAwBA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ1C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAyBnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAUzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAwBA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA+GA"}
|
package/dist/schema.js
CHANGED
|
@@ -107,6 +107,8 @@ export function verifySchemaIntegrity(db) {
|
|
|
107
107
|
't_activity_log', 't_decision_templates',
|
|
108
108
|
't_tasks', 't_task_details', 't_task_tags', 't_task_decision_links',
|
|
109
109
|
't_task_constraint_links', 't_task_file_links', 't_task_dependencies',
|
|
110
|
+
'm_help_tools', 'm_help_actions', 't_help_action_params', 't_help_action_examples',
|
|
111
|
+
'm_help_use_case_categories', 't_help_use_cases', 't_help_action_sequences',
|
|
110
112
|
];
|
|
111
113
|
const requiredViews = [
|
|
112
114
|
'v_tagged_decisions', 'v_active_context', 'v_layer_summary',
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-reuse.test.d.ts","sourceRoot":"","sources":["../../src/tests/agent-reuse.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test suite for agent reuse system
|
|
3
|
+
* Tests generic agent slot reuse and user-specified agent preservation
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
6
|
+
import assert from 'node:assert';
|
|
7
|
+
import { initializeDatabase, getOrCreateAgent, releaseAgent, updateAgentActivity, closeDatabase } from '../database.js';
|
|
8
|
+
import { releaseInactiveAgents } from '../utils/retention.js';
|
|
9
|
+
import { clearOldData } from '../tools/utils.js';
|
|
10
|
+
describe('Agent Reuse System', () => {
|
|
11
|
+
let adapter;
|
|
12
|
+
beforeEach(async () => {
|
|
13
|
+
adapter = await initializeDatabase({
|
|
14
|
+
databaseType: 'sqlite',
|
|
15
|
+
connection: { filename: ':memory:' }
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
afterEach(async () => {
|
|
19
|
+
await closeDatabase();
|
|
20
|
+
});
|
|
21
|
+
describe('User-specified agents', () => {
|
|
22
|
+
it('should create user-specified agents as non-reusable', async () => {
|
|
23
|
+
const agentId = await getOrCreateAgent(adapter, 'rust-expert');
|
|
24
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
25
|
+
.where({ id: agentId })
|
|
26
|
+
.first();
|
|
27
|
+
assert.strictEqual(agent.name, 'rust-expert');
|
|
28
|
+
assert.strictEqual(agent.is_reusable, 0); // SQLite stores false as 0
|
|
29
|
+
assert.strictEqual(agent.in_use, 1); // SQLite stores true as 1
|
|
30
|
+
assert.ok(agent.last_active_ts > 0);
|
|
31
|
+
});
|
|
32
|
+
it('should preserve user-specified agent names', async () => {
|
|
33
|
+
const agentId1 = await getOrCreateAgent(adapter, 'typescript-expert');
|
|
34
|
+
const agentId2 = await getOrCreateAgent(adapter, 'typescript-expert');
|
|
35
|
+
assert.strictEqual(agentId1, agentId2);
|
|
36
|
+
const count = await adapter.getKnex()('m_agents')
|
|
37
|
+
.where({ name: 'typescript-expert' })
|
|
38
|
+
.count('* as count')
|
|
39
|
+
.first();
|
|
40
|
+
assert.strictEqual(count?.count, 1);
|
|
41
|
+
});
|
|
42
|
+
it('should update activity timestamp on reuse', async () => {
|
|
43
|
+
const agentId1 = await getOrCreateAgent(adapter, 'scrum-master');
|
|
44
|
+
const agent1 = await adapter.getKnex()('m_agents')
|
|
45
|
+
.where({ id: agentId1 })
|
|
46
|
+
.first();
|
|
47
|
+
// Wait a moment
|
|
48
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
49
|
+
const agentId2 = await getOrCreateAgent(adapter, 'scrum-master');
|
|
50
|
+
const agent2 = await adapter.getKnex()('m_agents')
|
|
51
|
+
.where({ id: agentId2 })
|
|
52
|
+
.first();
|
|
53
|
+
assert.strictEqual(agentId1, agentId2);
|
|
54
|
+
assert.ok(agent2.last_active_ts >= agent1.last_active_ts);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('Generic agents', () => {
|
|
58
|
+
it('should create first generic agent as generic-1', async () => {
|
|
59
|
+
const agentId = await getOrCreateAgent(adapter, '');
|
|
60
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
61
|
+
.where({ id: agentId })
|
|
62
|
+
.first();
|
|
63
|
+
assert.strictEqual(agent.name, 'generic-1');
|
|
64
|
+
assert.strictEqual(agent.is_reusable, 1);
|
|
65
|
+
assert.strictEqual(agent.in_use, 1);
|
|
66
|
+
});
|
|
67
|
+
it('should create multiple generic agents sequentially', async () => {
|
|
68
|
+
const agentId1 = await getOrCreateAgent(adapter, '');
|
|
69
|
+
const agentId2 = await getOrCreateAgent(adapter, '');
|
|
70
|
+
const agentId3 = await getOrCreateAgent(adapter, '');
|
|
71
|
+
const agents = await adapter.getKnex()('m_agents')
|
|
72
|
+
.whereIn('id', [agentId1, agentId2, agentId3])
|
|
73
|
+
.orderBy('id');
|
|
74
|
+
assert.strictEqual(agents[0].name, 'generic-1');
|
|
75
|
+
assert.strictEqual(agents[1].name, 'generic-2');
|
|
76
|
+
assert.strictEqual(agents[2].name, 'generic-3');
|
|
77
|
+
agents.forEach(agent => {
|
|
78
|
+
assert.strictEqual(agent.is_reusable, 1);
|
|
79
|
+
assert.strictEqual(agent.in_use, 1);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
it('should reuse released generic agent slots', async () => {
|
|
83
|
+
const agentId1 = await getOrCreateAgent(adapter, '');
|
|
84
|
+
const agentId2 = await getOrCreateAgent(adapter, '');
|
|
85
|
+
// Release the first agent
|
|
86
|
+
await releaseAgent(adapter, agentId1);
|
|
87
|
+
// Next generic agent request should reuse slot 1
|
|
88
|
+
const agentId3 = await getOrCreateAgent(adapter, '');
|
|
89
|
+
assert.strictEqual(agentId3, agentId1);
|
|
90
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
91
|
+
.where({ id: agentId3 })
|
|
92
|
+
.first();
|
|
93
|
+
assert.strictEqual(agent.name, 'generic-1');
|
|
94
|
+
assert.strictEqual(agent.in_use, 1);
|
|
95
|
+
});
|
|
96
|
+
it('should recognize generic-N pattern as reusable', async () => {
|
|
97
|
+
const agentId = await getOrCreateAgent(adapter, 'generic-5');
|
|
98
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
99
|
+
.where({ id: agentId })
|
|
100
|
+
.first();
|
|
101
|
+
assert.strictEqual(agent.name, 'generic-5');
|
|
102
|
+
assert.strictEqual(agent.is_reusable, 1);
|
|
103
|
+
});
|
|
104
|
+
it('should recognize agent-N pattern as reusable', async () => {
|
|
105
|
+
const agentId = await getOrCreateAgent(adapter, 'agent-123');
|
|
106
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
107
|
+
.where({ id: agentId })
|
|
108
|
+
.first();
|
|
109
|
+
assert.strictEqual(agent.name, 'agent-123');
|
|
110
|
+
assert.strictEqual(agent.is_reusable, 1);
|
|
111
|
+
});
|
|
112
|
+
it('should recognize subagent-N pattern as reusable', async () => {
|
|
113
|
+
const agentId = await getOrCreateAgent(adapter, 'subagent-42');
|
|
114
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
115
|
+
.where({ id: agentId })
|
|
116
|
+
.first();
|
|
117
|
+
assert.strictEqual(agent.name, 'subagent-42');
|
|
118
|
+
assert.strictEqual(agent.is_reusable, 1);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('Agent release and cleanup', () => {
|
|
122
|
+
it('should mark generic agent as not in use', async () => {
|
|
123
|
+
const agentId = await getOrCreateAgent(adapter, '');
|
|
124
|
+
await releaseAgent(adapter, agentId);
|
|
125
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
126
|
+
.where({ id: agentId })
|
|
127
|
+
.first();
|
|
128
|
+
assert.strictEqual(agent.in_use, 0);
|
|
129
|
+
});
|
|
130
|
+
it('should not release user-specified agents', async () => {
|
|
131
|
+
const agentId = await getOrCreateAgent(adapter, 'important-agent');
|
|
132
|
+
await releaseAgent(adapter, agentId);
|
|
133
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
134
|
+
.where({ id: agentId })
|
|
135
|
+
.first();
|
|
136
|
+
// User-specified agents (is_reusable=false) should not be released
|
|
137
|
+
assert.strictEqual(agent.in_use, 1);
|
|
138
|
+
});
|
|
139
|
+
it('should release inactive agents after timeout', async () => {
|
|
140
|
+
const agentId1 = await getOrCreateAgent(adapter, '');
|
|
141
|
+
const agentId2 = await getOrCreateAgent(adapter, '');
|
|
142
|
+
// Set agent1 as inactive (old timestamp)
|
|
143
|
+
const oldTimestamp = Math.floor(Date.now() / 1000) - (25 * 3600); // 25 hours ago
|
|
144
|
+
await adapter.getKnex()('m_agents')
|
|
145
|
+
.where({ id: agentId1 })
|
|
146
|
+
.update({ last_active_ts: oldTimestamp });
|
|
147
|
+
// Release inactive agents (24 hour threshold)
|
|
148
|
+
const releasedCount = await releaseInactiveAgents(adapter, 24);
|
|
149
|
+
assert.strictEqual(releasedCount, 1);
|
|
150
|
+
const agent1 = await adapter.getKnex()('m_agents')
|
|
151
|
+
.where({ id: agentId1 })
|
|
152
|
+
.first();
|
|
153
|
+
const agent2 = await adapter.getKnex()('m_agents')
|
|
154
|
+
.where({ id: agentId2 })
|
|
155
|
+
.first();
|
|
156
|
+
assert.strictEqual(agent1.in_use, 0);
|
|
157
|
+
assert.strictEqual(agent2.in_use, 1);
|
|
158
|
+
});
|
|
159
|
+
it('should update agent activity timestamp', async () => {
|
|
160
|
+
const agentId = await getOrCreateAgent(adapter, 'test-agent');
|
|
161
|
+
const initialAgent = await adapter.getKnex()('m_agents')
|
|
162
|
+
.where({ id: agentId })
|
|
163
|
+
.first();
|
|
164
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
165
|
+
await updateAgentActivity(adapter, agentId);
|
|
166
|
+
const updatedAgent = await adapter.getKnex()('m_agents')
|
|
167
|
+
.where({ id: agentId })
|
|
168
|
+
.first();
|
|
169
|
+
assert.ok(updatedAgent.last_active_ts > initialAgent.last_active_ts);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('Integration with cleanup', () => {
|
|
173
|
+
it('should include agent release in clearOldData', async () => {
|
|
174
|
+
// Create some generic agents
|
|
175
|
+
const agentId1 = await getOrCreateAgent(adapter, '');
|
|
176
|
+
const agentId2 = await getOrCreateAgent(adapter, '');
|
|
177
|
+
const agentId3 = await getOrCreateAgent(adapter, '');
|
|
178
|
+
// Set agent1 and agent2 as old
|
|
179
|
+
const oldTimestamp = Math.floor(Date.now() / 1000) - (25 * 3600);
|
|
180
|
+
await adapter.getKnex()('m_agents')
|
|
181
|
+
.whereIn('id', [agentId1, agentId2])
|
|
182
|
+
.update({ last_active_ts: oldTimestamp });
|
|
183
|
+
// Run cleanup
|
|
184
|
+
const result = await clearOldData(undefined, adapter);
|
|
185
|
+
assert.strictEqual(result.agents_released, 2);
|
|
186
|
+
assert.strictEqual(result.success, true);
|
|
187
|
+
const agents = await adapter.getKnex()('m_agents')
|
|
188
|
+
.whereIn('id', [agentId1, agentId2, agentId3]);
|
|
189
|
+
assert.strictEqual(agents[0].in_use, false);
|
|
190
|
+
assert.strictEqual(agents[1].in_use, false);
|
|
191
|
+
assert.strictEqual(agents[2].in_use, true);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('Edge cases', () => {
|
|
195
|
+
it('should handle mixed user and generic agents', async () => {
|
|
196
|
+
const userAgent = await getOrCreateAgent(adapter, 'custom-agent');
|
|
197
|
+
const genericAgent1 = await getOrCreateAgent(adapter, '');
|
|
198
|
+
const genericAgent2 = await getOrCreateAgent(adapter, 'agent-5');
|
|
199
|
+
const agents = await adapter.getKnex()('m_agents')
|
|
200
|
+
.orderBy('id');
|
|
201
|
+
assert.strictEqual(agents.length, 3);
|
|
202
|
+
assert.strictEqual(agents[0].is_reusable, 0); // custom-agent
|
|
203
|
+
assert.strictEqual(agents[1].is_reusable, 1); // generic-1
|
|
204
|
+
assert.strictEqual(agents[2].is_reusable, 1); // agent-5
|
|
205
|
+
});
|
|
206
|
+
it('should handle concurrent agent creation', async () => {
|
|
207
|
+
// Create multiple agents concurrently
|
|
208
|
+
const promises = [
|
|
209
|
+
getOrCreateAgent(adapter, ''),
|
|
210
|
+
getOrCreateAgent(adapter, ''),
|
|
211
|
+
getOrCreateAgent(adapter, ''),
|
|
212
|
+
];
|
|
213
|
+
const agentIds = await Promise.all(promises);
|
|
214
|
+
// All should be created (no slot reuse since all concurrent)
|
|
215
|
+
assert.strictEqual(agentIds.length, 3);
|
|
216
|
+
assert.strictEqual(new Set(agentIds).size, 3); // All unique
|
|
217
|
+
const agents = await adapter.getKnex()('m_agents')
|
|
218
|
+
.whereIn('id', agentIds)
|
|
219
|
+
.orderBy('name');
|
|
220
|
+
assert.strictEqual(agents[0].name, 'generic-1');
|
|
221
|
+
assert.strictEqual(agents[1].name, 'generic-2');
|
|
222
|
+
assert.strictEqual(agents[2].name, 'generic-3');
|
|
223
|
+
});
|
|
224
|
+
it('should handle empty string as generic', async () => {
|
|
225
|
+
const agentId = await getOrCreateAgent(adapter, '');
|
|
226
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
227
|
+
.where({ id: agentId })
|
|
228
|
+
.first();
|
|
229
|
+
assert.strictEqual(agent.is_reusable, 1);
|
|
230
|
+
assert.strictEqual(agent.name, 'generic-1');
|
|
231
|
+
});
|
|
232
|
+
it('should preserve system agent as non-reusable', async () => {
|
|
233
|
+
const agentId = await getOrCreateAgent(adapter, 'system');
|
|
234
|
+
const agent = await adapter.getKnex()('m_agents')
|
|
235
|
+
.where({ id: agentId })
|
|
236
|
+
.first();
|
|
237
|
+
assert.strictEqual(agent.name, 'system');
|
|
238
|
+
assert.strictEqual(agent.is_reusable, 0);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
//# sourceMappingURL=agent-reuse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-reuse.test.js","sourceRoot":"","sources":["../../src/tests/agent-reuse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all-features.test.d.ts","sourceRoot":"","sources":["../../src/tests/all-features.test.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|