sqlew 3.6.0 → 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/assets/config.example.toml +9 -0
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database.d.ts +14 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +128 -5
- package/dist/database.js.map +1 -1
- package/dist/index.js +136 -82
- package/dist/index.js.map +1 -1
- 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/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/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +11 -7
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +73 -16
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +23 -1
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +8 -5
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +4 -1
- 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/cleanup.d.ts +3 -1
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +6 -3
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +57 -2
- package/dist/utils/debug-logger.d.ts.map +1 -1
- package/dist/utils/debug-logger.js +155 -4
- package/dist/utils/debug-logger.js.map +1 -1
- 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 +3 -3
- package/dist/utils/help-tracking.d.ts.map +1 -1
- package/dist/utils/help-tracking.js.map +1 -1
- 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 +10 -0
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +19 -0
- package/dist/utils/retention.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Migration: Add agent reuse system
|
|
4
|
+
*
|
|
5
|
+
* Adds columns to m_agents to support reusing generic agent slots while
|
|
6
|
+
* preserving user-specified agent names.
|
|
7
|
+
*
|
|
8
|
+
* - is_reusable: Whether this agent slot can be reused (generic agents)
|
|
9
|
+
* - in_use: Whether the agent is currently active
|
|
10
|
+
* - last_active_ts: Last activity timestamp for cleanup
|
|
11
|
+
*/
|
|
12
|
+
export declare function up(knex: Knex): Promise<void>;
|
|
13
|
+
export declare function down(knex: Knex): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=20251027000000_add_agent_reuse_system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20251027000000_add_agent_reuse_system.d.ts","sourceRoot":"","sources":["../../../src/migrations/knex/20251027000000_add_agent_reuse_system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC;;;;;;;;;GASG;AACH,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAalD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration: Add agent reuse system
|
|
3
|
+
*
|
|
4
|
+
* Adds columns to m_agents to support reusing generic agent slots while
|
|
5
|
+
* preserving user-specified agent names.
|
|
6
|
+
*
|
|
7
|
+
* - is_reusable: Whether this agent slot can be reused (generic agents)
|
|
8
|
+
* - in_use: Whether the agent is currently active
|
|
9
|
+
* - last_active_ts: Last activity timestamp for cleanup
|
|
10
|
+
*/
|
|
11
|
+
export async function up(knex) {
|
|
12
|
+
// Add columns for agent reuse system
|
|
13
|
+
await knex.schema.alterTable('m_agents', (table) => {
|
|
14
|
+
table.boolean('is_reusable').defaultTo(false);
|
|
15
|
+
table.boolean('in_use').defaultTo(false);
|
|
16
|
+
table.integer('last_active_ts').defaultTo(0);
|
|
17
|
+
});
|
|
18
|
+
// Create index for finding inactive reusable agents
|
|
19
|
+
await knex.raw('CREATE INDEX IF NOT EXISTS idx_agents_reusable ON m_agents(is_reusable, in_use, last_active_ts)');
|
|
20
|
+
console.log('✓ Added agent reuse columns to m_agents');
|
|
21
|
+
console.log('✓ Created index idx_agents_reusable');
|
|
22
|
+
}
|
|
23
|
+
export async function down(knex) {
|
|
24
|
+
// Drop index
|
|
25
|
+
await knex.raw('DROP INDEX IF EXISTS idx_agents_reusable');
|
|
26
|
+
// Remove columns
|
|
27
|
+
await knex.schema.alterTable('m_agents', (table) => {
|
|
28
|
+
table.dropColumn('is_reusable');
|
|
29
|
+
table.dropColumn('in_use');
|
|
30
|
+
table.dropColumn('last_active_ts');
|
|
31
|
+
});
|
|
32
|
+
console.log('✓ Removed agent reuse system');
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=20251027000000_add_agent_reuse_system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20251027000000_add_agent_reuse_system.js","sourceRoot":"","sources":["../../../src/migrations/knex/20251027000000_add_agent_reuse_system.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,qCAAqC;IACrC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,IAAI,CAAC,GAAG,CAAC,iGAAiG,CAAC,CAAC;IAElH,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,aAAa;IACb,MAAM,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAE3D,iBAAiB;IACjB,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAChC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3B,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20251027010000_add_task_constraint_to_decision_context.d.ts","sourceRoot":"","sources":["../../../src/migrations/knex/20251027010000_add_task_constraint_to_decision_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export async function up(knex) {
|
|
2
|
+
// Check if columns already exist
|
|
3
|
+
const hasColumns = await knex.schema.hasColumn('t_decision_context', 'related_task_id');
|
|
4
|
+
if (hasColumns) {
|
|
5
|
+
console.log('✓ Columns already exist, skipping migration');
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
// Add columns without foreign key constraints for RDBMS compatibility
|
|
9
|
+
// SQLite doesn't support adding FK constraints via ALTER TABLE
|
|
10
|
+
await knex.schema.alterTable('t_decision_context', (table) => {
|
|
11
|
+
table.integer('related_task_id').nullable();
|
|
12
|
+
table.integer('related_constraint_id').nullable();
|
|
13
|
+
});
|
|
14
|
+
console.log('✅ Added related_task_id and related_constraint_id to t_decision_context');
|
|
15
|
+
}
|
|
16
|
+
export async function down(knex) {
|
|
17
|
+
// Remove the columns (no foreign keys to drop)
|
|
18
|
+
await knex.schema.alterTable('t_decision_context', (table) => {
|
|
19
|
+
table.dropColumn('related_task_id');
|
|
20
|
+
table.dropColumn('related_constraint_id');
|
|
21
|
+
});
|
|
22
|
+
console.log('✅ Removed related_task_id and related_constraint_id from t_decision_context');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=20251027010000_add_task_constraint_to_decision_context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20251027010000_add_task_constraint_to_decision_context.js","sourceRoot":"","sources":["../../../src/migrations/knex/20251027010000_add_task_constraint_to_decision_context.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,iCAAiC;IACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IAExF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,sEAAsE;IACtE,+DAA+D;IAC/D,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3D,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,+CAA+C;IAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3D,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACpC,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration: Update agent reusability flags
|
|
3
|
+
*
|
|
4
|
+
* Marks all agents as reusable except core system agents.
|
|
5
|
+
* This enables agent ID reuse to prevent unnecessary proliferation.
|
|
6
|
+
*
|
|
7
|
+
* Agent Classification:
|
|
8
|
+
* - System agents: 'system', 'migration-manager' (not reusable)
|
|
9
|
+
* - Built-in agents: Claude Code defaults like 'Explore' (reusable)
|
|
10
|
+
* - User-defined agents: Custom agents like 'rust-architecture-expert' (reusable)
|
|
11
|
+
* - Generic pool: 'generic-N' pattern (reusable)
|
|
12
|
+
*/
|
|
13
|
+
import { Knex } from 'knex';
|
|
14
|
+
export declare function up(knex: Knex): Promise<void>;
|
|
15
|
+
export declare function down(knex: Knex): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=20251027020000_update_agent_reusability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20251027020000_update_agent_reusability.d.ts","sourceRoot":"","sources":["../../../src/migrations/knex/20251027020000_update_agent_reusability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration: Update agent reusability flags
|
|
3
|
+
*
|
|
4
|
+
* Marks all agents as reusable except core system agents.
|
|
5
|
+
* This enables agent ID reuse to prevent unnecessary proliferation.
|
|
6
|
+
*
|
|
7
|
+
* Agent Classification:
|
|
8
|
+
* - System agents: 'system', 'migration-manager' (not reusable)
|
|
9
|
+
* - Built-in agents: Claude Code defaults like 'Explore' (reusable)
|
|
10
|
+
* - User-defined agents: Custom agents like 'rust-architecture-expert' (reusable)
|
|
11
|
+
* - Generic pool: 'generic-N' pattern (reusable)
|
|
12
|
+
*/
|
|
13
|
+
export async function up(knex) {
|
|
14
|
+
// Core system agents that should NOT be reusable
|
|
15
|
+
const systemAgents = ['system', 'migration-manager'];
|
|
16
|
+
// Mark all agents as reusable except system agents
|
|
17
|
+
await knex('m_agents')
|
|
18
|
+
.whereNotIn('name', systemAgents)
|
|
19
|
+
.update({ is_reusable: true });
|
|
20
|
+
console.log('✅ Updated agents to reusable (except system/migration-manager)');
|
|
21
|
+
}
|
|
22
|
+
export async function down(knex) {
|
|
23
|
+
// Revert: mark all agents as non-reusable
|
|
24
|
+
await knex('m_agents').update({ is_reusable: false });
|
|
25
|
+
console.log('↩️ Reverted all agents to non-reusable');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=20251027020000_update_agent_reusability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20251027020000_update_agent_reusability.js","sourceRoot":"","sources":["../../../src/migrations/knex/20251027020000_update_agent_reusability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,iDAAiD;IACjD,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAErD,mDAAmD;IACnD,MAAM,IAAI,CAAC,UAAU,CAAC;SACnB,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC;SAChC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,0CAA0C;IAC1C,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -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"}
|