sage-team 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +180 -0
  3. package/dist/agents/__tests__/personas.test.d.ts +2 -0
  4. package/dist/agents/__tests__/personas.test.d.ts.map +1 -0
  5. package/dist/agents/__tests__/personas.test.js +47 -0
  6. package/dist/agents/__tests__/personas.test.js.map +1 -0
  7. package/dist/agents/personas.d.ts +3 -0
  8. package/dist/agents/personas.d.ts.map +1 -0
  9. package/dist/agents/personas.js +127 -0
  10. package/dist/agents/personas.js.map +1 -0
  11. package/dist/agents/skills-map.d.ts +7 -0
  12. package/dist/agents/skills-map.d.ts.map +1 -0
  13. package/dist/agents/skills-map.js +55 -0
  14. package/dist/agents/skills-map.js.map +1 -0
  15. package/dist/cli/__tests__/cli.test.d.ts +2 -0
  16. package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
  17. package/dist/cli/__tests__/cli.test.js +65 -0
  18. package/dist/cli/__tests__/cli.test.js.map +1 -0
  19. package/dist/cli/commands/config.d.ts +3 -0
  20. package/dist/cli/commands/config.d.ts.map +1 -0
  21. package/dist/cli/commands/config.js +50 -0
  22. package/dist/cli/commands/config.js.map +1 -0
  23. package/dist/cli/commands/doctor.d.ts +9 -0
  24. package/dist/cli/commands/doctor.d.ts.map +1 -0
  25. package/dist/cli/commands/doctor.js +74 -0
  26. package/dist/cli/commands/doctor.js.map +1 -0
  27. package/dist/cli/commands/init.d.ts +3 -0
  28. package/dist/cli/commands/init.d.ts.map +1 -0
  29. package/dist/cli/commands/init.js +67 -0
  30. package/dist/cli/commands/init.js.map +1 -0
  31. package/dist/cli/commands/logs.d.ts +3 -0
  32. package/dist/cli/commands/logs.d.ts.map +1 -0
  33. package/dist/cli/commands/logs.js +51 -0
  34. package/dist/cli/commands/logs.js.map +1 -0
  35. package/dist/cli/commands/resume.d.ts +3 -0
  36. package/dist/cli/commands/resume.d.ts.map +1 -0
  37. package/dist/cli/commands/resume.js +106 -0
  38. package/dist/cli/commands/resume.js.map +1 -0
  39. package/dist/cli/commands/start.d.ts +3 -0
  40. package/dist/cli/commands/start.d.ts.map +1 -0
  41. package/dist/cli/commands/start.js +103 -0
  42. package/dist/cli/commands/start.js.map +1 -0
  43. package/dist/cli/commands/status.d.ts +3 -0
  44. package/dist/cli/commands/status.d.ts.map +1 -0
  45. package/dist/cli/commands/status.js +64 -0
  46. package/dist/cli/commands/status.js.map +1 -0
  47. package/dist/cli/commands/team.d.ts +4 -0
  48. package/dist/cli/commands/team.d.ts.map +1 -0
  49. package/dist/cli/commands/team.js +33 -0
  50. package/dist/cli/commands/team.js.map +1 -0
  51. package/dist/cli/index.d.ts +4 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +35 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/cli/splash.d.ts +2 -0
  56. package/dist/cli/splash.d.ts.map +1 -0
  57. package/dist/cli/splash.js +20 -0
  58. package/dist/cli/splash.js.map +1 -0
  59. package/dist/engine/__tests__/ceo-brain.test.d.ts +2 -0
  60. package/dist/engine/__tests__/ceo-brain.test.d.ts.map +1 -0
  61. package/dist/engine/__tests__/ceo-brain.test.js +57 -0
  62. package/dist/engine/__tests__/ceo-brain.test.js.map +1 -0
  63. package/dist/engine/__tests__/dispatcher.test.d.ts +2 -0
  64. package/dist/engine/__tests__/dispatcher.test.d.ts.map +1 -0
  65. package/dist/engine/__tests__/dispatcher.test.js +60 -0
  66. package/dist/engine/__tests__/dispatcher.test.js.map +1 -0
  67. package/dist/engine/__tests__/orchestrator.test.d.ts +2 -0
  68. package/dist/engine/__tests__/orchestrator.test.d.ts.map +1 -0
  69. package/dist/engine/__tests__/orchestrator.test.js +83 -0
  70. package/dist/engine/__tests__/orchestrator.test.js.map +1 -0
  71. package/dist/engine/__tests__/pr-manager.test.d.ts +2 -0
  72. package/dist/engine/__tests__/pr-manager.test.d.ts.map +1 -0
  73. package/dist/engine/__tests__/pr-manager.test.js +44 -0
  74. package/dist/engine/__tests__/pr-manager.test.js.map +1 -0
  75. package/dist/engine/__tests__/prompt-builder.test.d.ts +2 -0
  76. package/dist/engine/__tests__/prompt-builder.test.d.ts.map +1 -0
  77. package/dist/engine/__tests__/prompt-builder.test.js +42 -0
  78. package/dist/engine/__tests__/prompt-builder.test.js.map +1 -0
  79. package/dist/engine/ceo-brain.d.ts +33 -0
  80. package/dist/engine/ceo-brain.d.ts.map +1 -0
  81. package/dist/engine/ceo-brain.js +94 -0
  82. package/dist/engine/ceo-brain.js.map +1 -0
  83. package/dist/engine/dispatcher.d.ts +40 -0
  84. package/dist/engine/dispatcher.d.ts.map +1 -0
  85. package/dist/engine/dispatcher.js +125 -0
  86. package/dist/engine/dispatcher.js.map +1 -0
  87. package/dist/engine/orchestrator.d.ts +49 -0
  88. package/dist/engine/orchestrator.d.ts.map +1 -0
  89. package/dist/engine/orchestrator.js +303 -0
  90. package/dist/engine/orchestrator.js.map +1 -0
  91. package/dist/engine/pr-manager.d.ts +14 -0
  92. package/dist/engine/pr-manager.d.ts.map +1 -0
  93. package/dist/engine/pr-manager.js +67 -0
  94. package/dist/engine/pr-manager.js.map +1 -0
  95. package/dist/engine/prompt-builder.d.ts +27 -0
  96. package/dist/engine/prompt-builder.d.ts.map +1 -0
  97. package/dist/engine/prompt-builder.js +73 -0
  98. package/dist/engine/prompt-builder.js.map +1 -0
  99. package/dist/server/__tests__/server.test.d.ts +2 -0
  100. package/dist/server/__tests__/server.test.d.ts.map +1 -0
  101. package/dist/server/__tests__/server.test.js +87 -0
  102. package/dist/server/__tests__/server.test.js.map +1 -0
  103. package/dist/server/index.d.ts +4 -0
  104. package/dist/server/index.d.ts.map +1 -0
  105. package/dist/server/index.js +72 -0
  106. package/dist/server/index.js.map +1 -0
  107. package/dist/server/routes/api.d.ts +4 -0
  108. package/dist/server/routes/api.d.ts.map +1 -0
  109. package/dist/server/routes/api.js +60 -0
  110. package/dist/server/routes/api.js.map +1 -0
  111. package/dist/skills/__tests__/loader.test.d.ts +2 -0
  112. package/dist/skills/__tests__/loader.test.d.ts.map +1 -0
  113. package/dist/skills/__tests__/loader.test.js +50 -0
  114. package/dist/skills/__tests__/loader.test.js.map +1 -0
  115. package/dist/skills/loader.d.ts +21 -0
  116. package/dist/skills/loader.d.ts.map +1 -0
  117. package/dist/skills/loader.js +190 -0
  118. package/dist/skills/loader.js.map +1 -0
  119. package/dist/state/__tests__/database.test.d.ts +2 -0
  120. package/dist/state/__tests__/database.test.d.ts.map +1 -0
  121. package/dist/state/__tests__/database.test.js +50 -0
  122. package/dist/state/__tests__/database.test.js.map +1 -0
  123. package/dist/state/database.d.ts +14 -0
  124. package/dist/state/database.d.ts.map +1 -0
  125. package/dist/state/database.js +164 -0
  126. package/dist/state/database.js.map +1 -0
  127. package/dist/state/repositories/__tests__/repositories.test.d.ts +2 -0
  128. package/dist/state/repositories/__tests__/repositories.test.d.ts.map +1 -0
  129. package/dist/state/repositories/__tests__/repositories.test.js +162 -0
  130. package/dist/state/repositories/__tests__/repositories.test.js.map +1 -0
  131. package/dist/state/repositories/agents.d.ts +14 -0
  132. package/dist/state/repositories/agents.d.ts.map +1 -0
  133. package/dist/state/repositories/agents.js +52 -0
  134. package/dist/state/repositories/agents.js.map +1 -0
  135. package/dist/state/repositories/events.d.ts +10 -0
  136. package/dist/state/repositories/events.d.ts.map +1 -0
  137. package/dist/state/repositories/events.js +27 -0
  138. package/dist/state/repositories/events.js.map +1 -0
  139. package/dist/state/repositories/messages.d.ts +15 -0
  140. package/dist/state/repositories/messages.d.ts.map +1 -0
  141. package/dist/state/repositories/messages.js +19 -0
  142. package/dist/state/repositories/messages.js.map +1 -0
  143. package/dist/state/repositories/pull-requests.d.ts +25 -0
  144. package/dist/state/repositories/pull-requests.d.ts.map +1 -0
  145. package/dist/state/repositories/pull-requests.js +40 -0
  146. package/dist/state/repositories/pull-requests.js.map +1 -0
  147. package/dist/state/repositories/sessions.d.ts +13 -0
  148. package/dist/state/repositories/sessions.d.ts.map +1 -0
  149. package/dist/state/repositories/sessions.js +41 -0
  150. package/dist/state/repositories/sessions.js.map +1 -0
  151. package/dist/state/repositories/sprints.d.ts +19 -0
  152. package/dist/state/repositories/sprints.d.ts.map +1 -0
  153. package/dist/state/repositories/sprints.js +26 -0
  154. package/dist/state/repositories/sprints.js.map +1 -0
  155. package/dist/state/repositories/tasks.d.ts +26 -0
  156. package/dist/state/repositories/tasks.d.ts.map +1 -0
  157. package/dist/state/repositories/tasks.js +43 -0
  158. package/dist/state/repositories/tasks.js.map +1 -0
  159. package/dist/types/__tests__/types.test.d.ts +2 -0
  160. package/dist/types/__tests__/types.test.d.ts.map +1 -0
  161. package/dist/types/__tests__/types.test.js +70 -0
  162. package/dist/types/__tests__/types.test.js.map +1 -0
  163. package/dist/types/index.d.ts +198 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +3 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/package.json +65 -0
  168. package/src/web/dist/assets/BufferResource-rnljfCCz.js +185 -0
  169. package/src/web/dist/assets/CanvasRenderer-BvTI2UTL.js +1 -0
  170. package/src/web/dist/assets/Filter-BzO9QkkB.js +1 -0
  171. package/src/web/dist/assets/RenderTargetSystem-CKlnKfTJ.js +172 -0
  172. package/src/web/dist/assets/WebGLRenderer-B5LAM4bk.js +156 -0
  173. package/src/web/dist/assets/WebGPURenderer-FkK3p3f4.js +41 -0
  174. package/src/web/dist/assets/browserAll-CDpBxY6s.js +14 -0
  175. package/src/web/dist/assets/index-B3XZpovA.js +298 -0
  176. package/src/web/dist/assets/index-BcX-h_hs.css +1 -0
  177. package/src/web/dist/assets/webworkerAll-B9AvsPZH.js +83 -0
  178. package/src/web/dist/index.html +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.test.d.ts","sourceRoot":"","sources":["../../../src/state/__tests__/database.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const database_1 = require("../database");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ (0, vitest_1.describe)('Database', () => {
10
+ let db;
11
+ const testDbPath = '.sage-team/test-state.db';
12
+ (0, vitest_1.beforeEach)(() => {
13
+ db = new database_1.Database(testDbPath);
14
+ });
15
+ (0, vitest_1.afterEach)(() => {
16
+ db.close();
17
+ if (fs_1.default.existsSync(testDbPath))
18
+ fs_1.default.unlinkSync(testDbPath);
19
+ // Clean up WAL/SHM files
20
+ if (fs_1.default.existsSync(testDbPath + '-wal'))
21
+ fs_1.default.unlinkSync(testDbPath + '-wal');
22
+ if (fs_1.default.existsSync(testDbPath + '-shm'))
23
+ fs_1.default.unlinkSync(testDbPath + '-shm');
24
+ });
25
+ (0, vitest_1.it)('should create database file', () => {
26
+ (0, vitest_1.expect)(fs_1.default.existsSync(testDbPath)).toBe(true);
27
+ });
28
+ (0, vitest_1.it)('should set WAL journal mode', () => {
29
+ const result = db.pragma('journal_mode');
30
+ (0, vitest_1.expect)(result).toEqual([{ journal_mode: 'wal' }]);
31
+ });
32
+ (0, vitest_1.it)('should create all tables', () => {
33
+ const tables = db.listTables();
34
+ (0, vitest_1.expect)(tables).toContain('sessions');
35
+ (0, vitest_1.expect)(tables).toContain('agents');
36
+ (0, vitest_1.expect)(tables).toContain('tasks');
37
+ (0, vitest_1.expect)(tables).toContain('sprints');
38
+ (0, vitest_1.expect)(tables).toContain('messages');
39
+ (0, vitest_1.expect)(tables).toContain('events');
40
+ (0, vitest_1.expect)(tables).toContain('decisions');
41
+ (0, vitest_1.expect)(tables).toContain('pull_requests');
42
+ (0, vitest_1.expect)(tables).toContain('skill_executions');
43
+ });
44
+ (0, vitest_1.it)('should insert and query a session', () => {
45
+ db.exec(`INSERT INTO sessions (id, goal, status) VALUES ('s1', 'Test goal', 'active')`);
46
+ const row = db.get('SELECT * FROM sessions WHERE id = ?', 's1');
47
+ (0, vitest_1.expect)(row.goal).toBe('Test goal');
48
+ });
49
+ });
50
+ //# sourceMappingURL=database.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.test.js","sourceRoot":"","sources":["../../../src/state/__tests__/database.test.ts"],"names":[],"mappings":";;;;;AAAA,mCAAqE;AACrE,0CAAuC;AACvC,4CAAoB;AAEpB,IAAA,iBAAQ,EAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,EAAY,CAAC;IACjB,MAAM,UAAU,GAAG,0BAA0B,CAAC;IAE9C,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,EAAE,GAAG,IAAI,mBAAQ,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACzD,yBAAyB;QACzB,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC;YAAE,YAAE,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;QAC3E,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC;YAAE,YAAE,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,IAAA,eAAM,EAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;QACxF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;QAChE,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import BetterSqlite3 from 'better-sqlite3';
2
+ export declare class Database {
3
+ private db;
4
+ constructor(dbPath: string);
5
+ exec(sql: string): void;
6
+ get(sql: string, ...params: unknown[]): any;
7
+ all(sql: string, ...params: unknown[]): any[];
8
+ run(sql: string, ...params: unknown[]): BetterSqlite3.RunResult;
9
+ pragma(pragma: string): any;
10
+ listTables(): string[];
11
+ close(): void;
12
+ get raw(): BetterSqlite3.Database;
13
+ }
14
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/state/database.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAqH3C,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAyB;gBAEvB,MAAM,EAAE,MAAM;IAgB1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG;IAI3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE;IAI7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,SAAS;IAI/D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG;IAI3B,UAAU,IAAI,MAAM,EAAE;IAOtB,KAAK,IAAI,IAAI;IAIb,IAAI,GAAG,IAAI,aAAa,CAAC,QAAQ,CAEhC;CACF"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Database = void 0;
7
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const SCHEMA = `
11
+ CREATE TABLE IF NOT EXISTS sessions (
12
+ id TEXT PRIMARY KEY,
13
+ goal TEXT NOT NULL,
14
+ status TEXT NOT NULL DEFAULT 'active',
15
+ started_at DATETIME DEFAULT CURRENT_TIMESTAMP,
16
+ resumed_at DATETIME,
17
+ completed_at DATETIME
18
+ );
19
+
20
+ CREATE TABLE IF NOT EXISTS agents (
21
+ id TEXT PRIMARY KEY,
22
+ role TEXT NOT NULL,
23
+ name TEXT NOT NULL,
24
+ status TEXT NOT NULL DEFAULT 'idle',
25
+ mood TEXT NOT NULL DEFAULT 'focused',
26
+ position_room TEXT NOT NULL,
27
+ position_seat INTEGER,
28
+ current_task_id TEXT,
29
+ active_skills TEXT DEFAULT '[]',
30
+ session_id TEXT,
31
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
32
+ );
33
+
34
+ CREATE TABLE IF NOT EXISTS sprints (
35
+ id TEXT PRIMARY KEY,
36
+ name TEXT NOT NULL,
37
+ goal TEXT,
38
+ status TEXT NOT NULL DEFAULT 'active',
39
+ session_id TEXT,
40
+ started_at DATETIME DEFAULT CURRENT_TIMESTAMP,
41
+ completed_at DATETIME
42
+ );
43
+
44
+ CREATE TABLE IF NOT EXISTS tasks (
45
+ id TEXT PRIMARY KEY,
46
+ title TEXT NOT NULL,
47
+ description TEXT,
48
+ status TEXT NOT NULL DEFAULT 'pending',
49
+ priority INTEGER NOT NULL DEFAULT 3,
50
+ assignee_id TEXT,
51
+ required_skills TEXT DEFAULT '[]',
52
+ depends_on TEXT DEFAULT '[]',
53
+ sprint_id TEXT,
54
+ session_id TEXT,
55
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
56
+ completed_at DATETIME
57
+ );
58
+
59
+ CREATE TABLE IF NOT EXISTS messages (
60
+ id TEXT PRIMARY KEY,
61
+ from_agent TEXT NOT NULL,
62
+ to_agent TEXT,
63
+ content TEXT NOT NULL,
64
+ type TEXT NOT NULL DEFAULT 'chat',
65
+ session_id TEXT,
66
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
67
+ );
68
+
69
+ CREATE TABLE IF NOT EXISTS events (
70
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
71
+ type TEXT NOT NULL,
72
+ agent_id TEXT,
73
+ data TEXT,
74
+ session_id TEXT,
75
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
76
+ );
77
+
78
+ CREATE TABLE IF NOT EXISTS decisions (
79
+ id TEXT PRIMARY KEY,
80
+ agent_id TEXT NOT NULL,
81
+ type TEXT NOT NULL,
82
+ action TEXT NOT NULL,
83
+ reasoning TEXT,
84
+ confidence REAL,
85
+ outcome TEXT DEFAULT 'pending',
86
+ session_id TEXT,
87
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
88
+ );
89
+
90
+ CREATE TABLE IF NOT EXISTS pull_requests (
91
+ id TEXT PRIMARY KEY,
92
+ task_id TEXT NOT NULL,
93
+ agent_id TEXT NOT NULL,
94
+ branch TEXT NOT NULL,
95
+ status TEXT NOT NULL DEFAULT 'pending_review',
96
+ review_notes TEXT,
97
+ user_feedback TEXT,
98
+ merged_by TEXT,
99
+ session_id TEXT,
100
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
101
+ merged_at DATETIME
102
+ );
103
+
104
+ CREATE TABLE IF NOT EXISTS skill_executions (
105
+ id TEXT PRIMARY KEY,
106
+ agent_id TEXT NOT NULL,
107
+ skill_id TEXT NOT NULL,
108
+ skill_source TEXT NOT NULL,
109
+ task_id TEXT,
110
+ status TEXT NOT NULL DEFAULT 'active',
111
+ output TEXT,
112
+ session_id TEXT,
113
+ started_at DATETIME DEFAULT CURRENT_TIMESTAMP,
114
+ completed_at DATETIME
115
+ );
116
+
117
+ CREATE INDEX IF NOT EXISTS idx_events_session_ts ON events(session_id, timestamp);
118
+ CREATE INDEX IF NOT EXISTS idx_agents_session ON agents(session_id);
119
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status, session_id);
120
+ CREATE INDEX IF NOT EXISTS idx_prs_status ON pull_requests(status, session_id);
121
+ `;
122
+ class Database {
123
+ db;
124
+ constructor(dbPath) {
125
+ const dir = path_1.default.dirname(dbPath);
126
+ if (!fs_1.default.existsSync(dir))
127
+ fs_1.default.mkdirSync(dir, { recursive: true });
128
+ this.db = new better_sqlite3_1.default(dbPath);
129
+ // Performance pragmas
130
+ this.db.pragma('journal_mode = WAL');
131
+ this.db.pragma('busy_timeout = 5000');
132
+ this.db.pragma('synchronous = NORMAL');
133
+ this.db.pragma('cache_size = -64000');
134
+ // Create schema
135
+ this.db.exec(SCHEMA);
136
+ }
137
+ exec(sql) {
138
+ this.db.exec(sql);
139
+ }
140
+ get(sql, ...params) {
141
+ return this.db.prepare(sql).get(...params);
142
+ }
143
+ all(sql, ...params) {
144
+ return this.db.prepare(sql).all(...params);
145
+ }
146
+ run(sql, ...params) {
147
+ return this.db.prepare(sql).run(...params);
148
+ }
149
+ pragma(pragma) {
150
+ return this.db.pragma(pragma);
151
+ }
152
+ listTables() {
153
+ const rows = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'").all();
154
+ return rows.map(r => r.name);
155
+ }
156
+ close() {
157
+ this.db.close();
158
+ }
159
+ get raw() {
160
+ return this.db;
161
+ }
162
+ }
163
+ exports.Database = Database;
164
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/state/database.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA2C;AAC3C,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Gd,CAAC;AAEF,MAAa,QAAQ;IACX,EAAE,CAAyB;IAEnC,YAAY,MAAc;QACxB,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAa,CAAC,MAAM,CAAC,CAAC;QAEpC,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAEtC,gBAAgB;QAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,GAAG,MAAiB;QACnC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,GAAG,MAAiB;QACnC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,GAAG,MAAiB;QACnC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,gFAAgF,CACjF,CAAC,GAAG,EAAwB,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF;AArDD,4BAqDC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repositories.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.test.d.ts","sourceRoot":"","sources":["../../../../src/state/repositories/__tests__/repositories.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const database_1 = require("../../database");
8
+ const sessions_1 = require("../sessions");
9
+ const agents_1 = require("../agents");
10
+ const tasks_1 = require("../tasks");
11
+ const sprints_1 = require("../sprints");
12
+ const events_1 = require("../events");
13
+ const messages_1 = require("../messages");
14
+ const pull_requests_1 = require("../pull-requests");
15
+ const fs_1 = __importDefault(require("fs"));
16
+ (0, vitest_1.describe)('Repositories', () => {
17
+ let db;
18
+ const testDbPath = '.sage-team/test-repos.db';
19
+ (0, vitest_1.beforeEach)(() => {
20
+ db = new database_1.Database(testDbPath);
21
+ });
22
+ (0, vitest_1.afterEach)(() => {
23
+ db.close();
24
+ if (fs_1.default.existsSync(testDbPath))
25
+ fs_1.default.unlinkSync(testDbPath);
26
+ if (fs_1.default.existsSync(testDbPath + '-wal'))
27
+ fs_1.default.unlinkSync(testDbPath + '-wal');
28
+ if (fs_1.default.existsSync(testDbPath + '-shm'))
29
+ fs_1.default.unlinkSync(testDbPath + '-shm');
30
+ });
31
+ (0, vitest_1.describe)('SessionsRepo', () => {
32
+ (0, vitest_1.it)('should create and find a session', () => {
33
+ const repo = new sessions_1.SessionsRepo(db);
34
+ const session = repo.create('Build a blog');
35
+ (0, vitest_1.expect)(session.goal).toBe('Build a blog');
36
+ (0, vitest_1.expect)(session.status).toBe('active');
37
+ const found = repo.findById(session.id);
38
+ (0, vitest_1.expect)(found?.goal).toBe('Build a blog');
39
+ });
40
+ (0, vitest_1.it)('should find latest active session', () => {
41
+ const repo = new sessions_1.SessionsRepo(db);
42
+ repo.create('First goal');
43
+ const second = repo.create('Second goal');
44
+ const latest = repo.findLatestActive();
45
+ (0, vitest_1.expect)(latest?.id).toBe(second.id);
46
+ });
47
+ });
48
+ (0, vitest_1.describe)('AgentsRepo', () => {
49
+ (0, vitest_1.it)('should initialize all 11 agents for a session', () => {
50
+ const repo = new agents_1.AgentsRepo(db);
51
+ repo.initializeForSession('session-1');
52
+ const agents = repo.findBySession('session-1');
53
+ (0, vitest_1.expect)(agents.length).toBe(11);
54
+ });
55
+ (0, vitest_1.it)('should update agent status', () => {
56
+ const repo = new agents_1.AgentsRepo(db);
57
+ repo.initializeForSession('session-1');
58
+ repo.updateStatus('dex', 'coding');
59
+ const agent = repo.findById('dex');
60
+ (0, vitest_1.expect)(agent?.status).toBe('coding');
61
+ });
62
+ (0, vitest_1.it)('should update agent room', () => {
63
+ const repo = new agents_1.AgentsRepo(db);
64
+ repo.initializeForSession('session-1');
65
+ repo.updateRoom('dex', 'meeting', 2);
66
+ const agent = repo.findById('dex');
67
+ (0, vitest_1.expect)(agent?.position_room).toBe('meeting');
68
+ (0, vitest_1.expect)(agent?.position_seat).toBe(2);
69
+ });
70
+ });
71
+ (0, vitest_1.describe)('TasksRepo', () => {
72
+ (0, vitest_1.it)('should create and list tasks', () => {
73
+ const repo = new tasks_1.TasksRepo(db);
74
+ repo.create({
75
+ title: 'Build auth',
76
+ description: 'JWT middleware',
77
+ priority: 1,
78
+ requiredSkills: ['sp-tdd-cycle'],
79
+ dependsOn: [],
80
+ sprintId: 'sprint-1',
81
+ sessionId: 'session-1',
82
+ });
83
+ const tasks = repo.findBySession('session-1');
84
+ (0, vitest_1.expect)(tasks.length).toBe(1);
85
+ (0, vitest_1.expect)(tasks[0].title).toBe('Build auth');
86
+ });
87
+ (0, vitest_1.it)('should find next available tasks respecting dependencies', () => {
88
+ const repo = new tasks_1.TasksRepo(db);
89
+ const t1 = repo.create({ title: 'Task 1', priority: 1, dependsOn: [], sprintId: 's1', sessionId: 's1' });
90
+ repo.create({ title: 'Task 2', priority: 2, dependsOn: [t1.id], sprintId: 's1', sessionId: 's1' });
91
+ const available = repo.findAvailable('s1', 5);
92
+ (0, vitest_1.expect)(available.length).toBe(1);
93
+ (0, vitest_1.expect)(available[0].title).toBe('Task 1');
94
+ });
95
+ });
96
+ (0, vitest_1.describe)('SprintsRepo', () => {
97
+ (0, vitest_1.it)('should create and find active sprint', () => {
98
+ const repo = new sprints_1.SprintsRepo(db);
99
+ const sprint = repo.create({ name: 'Sprint 1', goal: 'Build MVP', sessionId: 'session-1' });
100
+ (0, vitest_1.expect)(sprint.name).toBe('Sprint 1');
101
+ const active = repo.findActive('session-1');
102
+ (0, vitest_1.expect)(active?.id).toBe(sprint.id);
103
+ });
104
+ (0, vitest_1.it)('should complete a sprint', () => {
105
+ const repo = new sprints_1.SprintsRepo(db);
106
+ const sprint = repo.create({ name: 'Sprint 1', goal: 'Build MVP', sessionId: 'session-1' });
107
+ repo.complete(sprint.id);
108
+ const completed = repo.findById(sprint.id);
109
+ (0, vitest_1.expect)(completed?.status).toBe('completed');
110
+ });
111
+ });
112
+ (0, vitest_1.describe)('EventsRepo', () => {
113
+ (0, vitest_1.it)('should log and query events', () => {
114
+ const repo = new events_1.EventsRepo(db);
115
+ repo.log('agent:move', 'dex', { room: 'meeting' }, 'session-1');
116
+ repo.log('agent:status', 'dex', { status: 'coding' }, 'session-1');
117
+ const events = repo.findBySession('session-1', 50);
118
+ (0, vitest_1.expect)(events.length).toBe(2);
119
+ });
120
+ (0, vitest_1.it)('should cleanup old events', () => {
121
+ const repo = new events_1.EventsRepo(db);
122
+ for (let i = 0; i < 20; i++) {
123
+ repo.log('tick', null, { i }, 'session-1');
124
+ }
125
+ repo.cleanup('session-1', 10);
126
+ const events = repo.findBySession('session-1', 100);
127
+ (0, vitest_1.expect)(events.length).toBe(10);
128
+ });
129
+ });
130
+ (0, vitest_1.describe)('MessagesRepo', () => {
131
+ (0, vitest_1.it)('should create and query messages', () => {
132
+ const repo = new messages_1.MessagesRepo(db);
133
+ repo.create({ fromAgent: 'sage', toAgent: null, content: 'Hello team!', type: 'chat', sessionId: 'session-1' });
134
+ repo.create({ fromAgent: 'dex', toAgent: 'sage', content: 'On it!', type: 'chat', sessionId: 'session-1' });
135
+ const messages = repo.findBySession('session-1', 50);
136
+ (0, vitest_1.expect)(messages.length).toBe(2);
137
+ });
138
+ });
139
+ (0, vitest_1.describe)('PullRequestsRepo', () => {
140
+ (0, vitest_1.it)('should create PR and transition status', () => {
141
+ const repo = new pull_requests_1.PullRequestsRepo(db);
142
+ const pr = repo.create({
143
+ taskId: 'task-1',
144
+ agentId: 'dex',
145
+ branch: 'sage/dex/build-auth',
146
+ sessionId: 'session-1',
147
+ });
148
+ (0, vitest_1.expect)(pr.status).toBe('pending_review');
149
+ repo.updateStatus(pr.id, 'agent_reviewed', { notes: 'LGTM' });
150
+ const updated = repo.findById(pr.id);
151
+ (0, vitest_1.expect)(updated?.status).toBe('agent_reviewed');
152
+ });
153
+ (0, vitest_1.it)('should find pending PRs for a session', () => {
154
+ const repo = new pull_requests_1.PullRequestsRepo(db);
155
+ repo.create({ taskId: 'task-1', agentId: 'dex', branch: 'sage/dex/t1', sessionId: 'session-1' });
156
+ repo.create({ taskId: 'task-2', agentId: 'flux', branch: 'sage/flux/t2', sessionId: 'session-1' });
157
+ const pending = repo.findPending('session-1');
158
+ (0, vitest_1.expect)(pending.length).toBe(2);
159
+ });
160
+ });
161
+ });
162
+ //# sourceMappingURL=repositories.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.test.js","sourceRoot":"","sources":["../../../../src/state/repositories/__tests__/repositories.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Database } from '../database';
2
+ import type { AgentStatus } from '../../types';
3
+ export declare class AgentsRepo {
4
+ private db;
5
+ constructor(db: Database);
6
+ initializeForSession(sessionId: string): void;
7
+ findBySession(sessionId: string): any[];
8
+ findById(id: string): any | null;
9
+ updateStatus(id: string, status: AgentStatus): void;
10
+ updateRoom(id: string, room: string, seat: number | null): void;
11
+ assignTask(agentId: string, taskId: string): void;
12
+ clearTask(agentId: string): void;
13
+ }
14
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/state/repositories/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiB/C,qBAAa,UAAU;IACT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEhC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAY7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAIvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAIhC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAOnD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO/D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOjD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAMjC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentsRepo = void 0;
4
+ // Default agent definitions for initialization
5
+ const DEFAULT_AGENTS = [
6
+ { id: 'sage', role: 'ceo', name: 'Sage', room: 'ceo-office', seat: 0 },
7
+ { id: 'nova', role: 'cto', name: 'Nova', room: 'cto-office', seat: 0 },
8
+ { id: 'aria', role: 'architect', name: 'Aria', room: 'arch-lab', seat: 0 },
9
+ { id: 'dex', role: 'dev-senior', name: 'Dex', room: 'dev-bullpen', seat: 0 },
10
+ { id: 'flux', role: 'dev-fullstack', name: 'Flux', room: 'dev-bullpen', seat: 1 },
11
+ { id: 'quinn', role: 'qa-lead', name: 'Quinn', room: 'qa-lab', seat: 0 },
12
+ { id: 'gage', role: 'devops', name: 'Gage', room: 'qa-lab', seat: 1 },
13
+ { id: 'morgan', role: 'product-manager', name: 'Morgan', room: 'design-studio', seat: 1 },
14
+ { id: 'uma', role: 'ux-designer', name: 'Uma', room: 'design-studio', seat: 0 },
15
+ { id: 'river', role: 'scrum-master', name: 'River', room: 'lounge', seat: 0 },
16
+ { id: 'atlas', role: 'data-engineer', name: 'Atlas', room: 'data-lab', seat: 0 },
17
+ ];
18
+ class AgentsRepo {
19
+ db;
20
+ constructor(db) {
21
+ this.db = db;
22
+ }
23
+ initializeForSession(sessionId) {
24
+ const stmt = this.db.raw.prepare('INSERT OR REPLACE INTO agents (id, role, name, status, mood, position_room, position_seat, session_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
25
+ const insertMany = this.db.raw.transaction(() => {
26
+ for (const agent of DEFAULT_AGENTS) {
27
+ stmt.run(agent.id, agent.role, agent.name, 'idle', 'focused', agent.room, agent.seat, sessionId);
28
+ }
29
+ });
30
+ insertMany();
31
+ }
32
+ findBySession(sessionId) {
33
+ return this.db.all('SELECT * FROM agents WHERE session_id = ?', sessionId);
34
+ }
35
+ findById(id) {
36
+ return this.db.get('SELECT * FROM agents WHERE id = ?', id) || null;
37
+ }
38
+ updateStatus(id, status) {
39
+ this.db.run('UPDATE agents SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', status, id);
40
+ }
41
+ updateRoom(id, room, seat) {
42
+ this.db.run('UPDATE agents SET position_room = ?, position_seat = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', room, seat, id);
43
+ }
44
+ assignTask(agentId, taskId) {
45
+ this.db.run('UPDATE agents SET current_task_id = ?, status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', taskId, 'coding', agentId);
46
+ }
47
+ clearTask(agentId) {
48
+ this.db.run('UPDATE agents SET current_task_id = NULL, status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', 'idle', agentId);
49
+ }
50
+ }
51
+ exports.AgentsRepo = AgentsRepo;
52
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/state/repositories/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Database } from '../database';
2
+ export declare class EventsRepo {
3
+ private db;
4
+ constructor(db: Database);
5
+ log(type: string, agentId: string | null, data: Record<string, unknown> | null, sessionId: string): void;
6
+ findBySession(sessionId: string, limit: number): any[];
7
+ findBySessionSince(sessionId: string, sinceId: number): any[];
8
+ cleanup(sessionId: string, keepCount: number): void;
9
+ }
10
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/state/repositories/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,UAAU;IACT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEhC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOxG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAOtD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,EAAE;IAO7D,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAOpD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventsRepo = void 0;
4
+ class EventsRepo {
5
+ db;
6
+ constructor(db) {
7
+ this.db = db;
8
+ }
9
+ log(type, agentId, data, sessionId) {
10
+ this.db.run('INSERT INTO events (type, agent_id, data, session_id) VALUES (?, ?, ?, ?)', type, agentId, data ? JSON.stringify(data) : null, sessionId);
11
+ }
12
+ findBySession(sessionId, limit) {
13
+ return this.db.all('SELECT * FROM events WHERE session_id = ? ORDER BY timestamp DESC LIMIT ?', sessionId, limit);
14
+ }
15
+ findBySessionSince(sessionId, sinceId) {
16
+ return this.db.all('SELECT * FROM events WHERE session_id = ? AND id > ? ORDER BY timestamp ASC', sessionId, sinceId);
17
+ }
18
+ cleanup(sessionId, keepCount) {
19
+ this.db.exec(`
20
+ DELETE FROM events WHERE session_id = '${sessionId}' AND id NOT IN (
21
+ SELECT id FROM events WHERE session_id = '${sessionId}' ORDER BY timestamp DESC LIMIT ${keepCount}
22
+ )
23
+ `);
24
+ }
25
+ }
26
+ exports.EventsRepo = EventsRepo;
27
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/state/repositories/events.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IACD;IAApB,YAAoB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEpC,GAAG,CAAC,IAAY,EAAE,OAAsB,EAAE,IAAoC,EAAE,SAAiB;QAC/F,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,2EAA2E,EAC3E,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAC7D,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,KAAa;QAC5C,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAChB,2EAA2E,EAC3E,SAAS,EAAE,KAAK,CACjB,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,SAAiB,EAAE,OAAe;QACnD,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAChB,6EAA6E,EAC7E,SAAS,EAAE,OAAO,CACnB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,SAAiB;QAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;+CAC8B,SAAS;oDACJ,SAAS,mCAAmC,SAAS;;KAEpG,CAAC,CAAC;IACL,CAAC;CACF;AA/BD,gCA+BC"}
@@ -0,0 +1,15 @@
1
+ import type { Database } from '../database';
2
+ export interface CreateMessageInput {
3
+ fromAgent: string;
4
+ toAgent: string | null;
5
+ content: string;
6
+ type: 'chat' | 'decision' | 'review' | 'crisis';
7
+ sessionId: string;
8
+ }
9
+ export declare class MessagesRepo {
10
+ private db;
11
+ constructor(db: Database);
12
+ create(input: CreateMessageInput): void;
13
+ findBySession(sessionId: string, limit: number): any[];
14
+ }
15
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/state/repositories/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEhC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAQvC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;CAMvD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessagesRepo = void 0;
4
+ const nanoid_1 = require("nanoid");
5
+ class MessagesRepo {
6
+ db;
7
+ constructor(db) {
8
+ this.db = db;
9
+ }
10
+ create(input) {
11
+ const id = `msg-${(0, nanoid_1.nanoid)(8)}`;
12
+ this.db.run('INSERT INTO messages (id, from_agent, to_agent, content, type, session_id) VALUES (?, ?, ?, ?, ?, ?)', id, input.fromAgent, input.toAgent, input.content, input.type, input.sessionId);
13
+ }
14
+ findBySession(sessionId, limit) {
15
+ return this.db.all('SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp DESC LIMIT ?', sessionId, limit);
16
+ }
17
+ }
18
+ exports.MessagesRepo = MessagesRepo;
19
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/state/repositories/messages.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAWhC,MAAa,YAAY;IACH;IAApB,YAAoB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEpC,MAAM,CAAC,KAAyB;QAC9B,MAAM,EAAE,GAAG,OAAO,IAAA,eAAM,EAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,sGAAsG,EACtG,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAC/E,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,KAAa;QAC5C,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAChB,6EAA6E,EAC7E,SAAS,EAAE,KAAK,CACjB,CAAC;IACJ,CAAC;CACF;AAjBD,oCAiBC"}
@@ -0,0 +1,25 @@
1
+ import type { Database } from '../database';
2
+ import type { PRStatus } from '../../types';
3
+ export interface CreatePRInput {
4
+ taskId: string;
5
+ agentId: string;
6
+ branch: string;
7
+ sessionId: string;
8
+ }
9
+ export declare class PullRequestsRepo {
10
+ private db;
11
+ constructor(db: Database);
12
+ create(input: CreatePRInput): {
13
+ id: string;
14
+ status: string;
15
+ };
16
+ findById(id: string): any | null;
17
+ findPending(sessionId: string): any[];
18
+ findBySession(sessionId: string): any[];
19
+ updateStatus(id: string, status: PRStatus, extra?: {
20
+ notes?: string;
21
+ feedback?: string;
22
+ mergedBy?: string;
23
+ }): void;
24
+ }
25
+ //# sourceMappingURL=pull-requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-requests.d.ts","sourceRoot":"","sources":["../../../src/state/repositories/pull-requests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEhC,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAS5D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAIhC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAOrC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAOvC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAcnH"}