@taico/taico 0.8.5 → 0.9.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 (158) hide show
  1. package/README.md +1 -1
  2. package/dist/access-requests/access-request.entity.d.ts +16 -0
  3. package/dist/access-requests/access-request.entity.js +87 -0
  4. package/dist/access-requests/access-request.entity.js.map +1 -0
  5. package/dist/access-requests/access-request.limits.d.ts +3 -0
  6. package/dist/access-requests/access-request.limits.js +7 -0
  7. package/dist/access-requests/access-request.limits.js.map +1 -0
  8. package/dist/access-requests/access-requests.controller.d.ts +16 -0
  9. package/dist/access-requests/access-requests.controller.js +129 -0
  10. package/dist/access-requests/access-requests.controller.js.map +1 -0
  11. package/dist/access-requests/access-requests.module.d.ts +2 -0
  12. package/dist/access-requests/access-requests.module.js +26 -0
  13. package/dist/access-requests/access-requests.module.js.map +1 -0
  14. package/dist/access-requests/access-requests.service.d.ts +14 -0
  15. package/dist/access-requests/access-requests.service.js +106 -0
  16. package/dist/access-requests/access-requests.service.js.map +1 -0
  17. package/dist/access-requests/dto/http/access-request-admin.dto.d.ts +26 -0
  18. package/dist/access-requests/dto/http/access-request-admin.dto.js +130 -0
  19. package/dist/access-requests/dto/http/access-request-admin.dto.js.map +1 -0
  20. package/dist/access-requests/dto/http/create-access-request.dto.d.ts +11 -0
  21. package/dist/access-requests/dto/http/create-access-request.dto.js +78 -0
  22. package/dist/access-requests/dto/http/create-access-request.dto.js.map +1 -0
  23. package/dist/access-requests/dto/service/access-requests.service.types.d.ts +29 -0
  24. package/dist/access-requests/dto/service/access-requests.service.types.js +3 -0
  25. package/dist/access-requests/dto/service/access-requests.service.types.js.map +1 -0
  26. package/dist/access-requests/enums/access-request-heard-from.enum.d.ts +7 -0
  27. package/dist/access-requests/enums/access-request-heard-from.enum.js +12 -0
  28. package/dist/access-requests/enums/access-request-heard-from.enum.js.map +1 -0
  29. package/dist/access-requests/enums/access-request-status.enum.d.ts +4 -0
  30. package/dist/access-requests/enums/access-request-status.enum.js +9 -0
  31. package/dist/access-requests/enums/access-request-status.enum.js.map +1 -0
  32. package/dist/access-requests/enums/index.d.ts +2 -0
  33. package/dist/access-requests/enums/index.js +8 -0
  34. package/dist/access-requests/enums/index.js.map +1 -0
  35. package/dist/access-requests/errors/access-requests.errors.d.ts +8 -0
  36. package/dist/access-requests/errors/access-requests.errors.js +21 -0
  37. package/dist/access-requests/errors/access-requests.errors.js.map +1 -0
  38. package/dist/access-requests/submission-ceiling.d.ts +7 -0
  39. package/dist/access-requests/submission-ceiling.js +21 -0
  40. package/dist/access-requests/submission-ceiling.js.map +1 -0
  41. package/dist/access-requests/submission-ceiling.spec.d.ts +1 -0
  42. package/dist/access-requests/submission-ceiling.spec.js +18 -0
  43. package/dist/access-requests/submission-ceiling.spec.js.map +1 -0
  44. package/dist/app.module.js +10 -0
  45. package/dist/app.module.js.map +1 -1
  46. package/dist/common/postgres-io.adapter.js +2 -1
  47. package/dist/common/postgres-io.adapter.js.map +1 -1
  48. package/dist/errors/http/error-catalog.js +18 -0
  49. package/dist/errors/http/error-catalog.js.map +1 -1
  50. package/dist/executions/events/execution-traces-changed.event.d.ts +5 -0
  51. package/dist/executions/events/execution-traces-changed.event.js +12 -0
  52. package/dist/executions/events/execution-traces-changed.event.js.map +1 -0
  53. package/dist/executions/executions-worker.gateway.d.ts +17 -2
  54. package/dist/executions/executions-worker.gateway.js +29 -1
  55. package/dist/executions/executions-worker.gateway.js.map +1 -1
  56. package/dist/executions/executions.gateway.d.ts +12 -0
  57. package/dist/executions/executions.gateway.js +39 -0
  58. package/dist/executions/executions.gateway.js.map +1 -1
  59. package/dist/executions/executions.module.js +6 -0
  60. package/dist/executions/executions.module.js.map +1 -1
  61. package/dist/executions/staleness/stale-active-task-execution-pruner.service.js +3 -0
  62. package/dist/executions/staleness/stale-active-task-execution-pruner.service.js.map +1 -1
  63. package/dist/executions/staleness/stale-active-task-execution-pruner.service.spec.js +3 -0
  64. package/dist/executions/staleness/stale-active-task-execution-pruner.service.spec.js.map +1 -1
  65. package/dist/executions/traces/dto/http/execution-traces-response.dto.d.ts +17 -0
  66. package/dist/executions/traces/dto/http/execution-traces-response.dto.js +86 -0
  67. package/dist/executions/traces/dto/http/execution-traces-response.dto.js.map +1 -0
  68. package/dist/executions/traces/dto/http/list-execution-traces-query.dto.d.ts +6 -0
  69. package/dist/executions/traces/dto/http/list-execution-traces-query.dto.js +63 -0
  70. package/dist/executions/traces/dto/http/list-execution-traces-query.dto.js.map +1 -0
  71. package/dist/executions/traces/execution-trace.entity.d.ts +9 -0
  72. package/dist/executions/traces/execution-trace.entity.js +55 -0
  73. package/dist/executions/traces/execution-trace.entity.js.map +1 -0
  74. package/dist/executions/traces/execution-traces.controller.d.ts +8 -0
  75. package/dist/executions/traces/execution-traces.controller.js +68 -0
  76. package/dist/executions/traces/execution-traces.controller.js.map +1 -0
  77. package/dist/executions/traces/execution-traces.errors.d.ts +9 -0
  78. package/dist/executions/traces/execution-traces.errors.js +20 -0
  79. package/dist/executions/traces/execution-traces.errors.js.map +1 -0
  80. package/dist/executions/traces/execution-traces.service.d.ts +20 -0
  81. package/dist/executions/traces/execution-traces.service.js +133 -0
  82. package/dist/executions/traces/execution-traces.service.js.map +1 -0
  83. package/dist/executions/traces/execution-traces.service.spec.d.ts +1 -0
  84. package/dist/executions/traces/execution-traces.service.spec.js +131 -0
  85. package/dist/executions/traces/execution-traces.service.spec.js.map +1 -0
  86. package/dist/migrations/1762300000000-AccessRequests.d.ts +6 -0
  87. package/dist/migrations/1762300000000-AccessRequests.js +29 -0
  88. package/dist/migrations/1762300000000-AccessRequests.js.map +1 -0
  89. package/dist/migrations/1762400000000-AccessRequestHeardFrom.d.ts +6 -0
  90. package/dist/migrations/1762400000000-AccessRequestHeardFrom.js +23 -0
  91. package/dist/migrations/1762400000000-AccessRequestHeardFrom.js.map +1 -0
  92. package/dist/migrations/1762500000000-ExecutionTraces.d.ts +6 -0
  93. package/dist/migrations/1762500000000-ExecutionTraces.js +24 -0
  94. package/dist/migrations/1762500000000-ExecutionTraces.js.map +1 -0
  95. package/dist/migrations/1762500000001-ExecutionTraceJson.d.ts +6 -0
  96. package/dist/migrations/1762500000001-ExecutionTraceJson.js +14 -0
  97. package/dist/migrations/1762500000001-ExecutionTraceJson.js.map +1 -0
  98. package/dist/public/android-chrome-192x192.png +0 -0
  99. package/dist/public/android-chrome-512x512.png +0 -0
  100. package/dist/public/apple-touch-icon.png +0 -0
  101. package/dist/public/assets/index-G5Ht4law.js +118 -0
  102. package/dist/public/assets/index-NjAtMwFI.css +1 -0
  103. package/dist/public/avatar/angus.png +0 -0
  104. package/dist/public/avatar/bruce.png +0 -0
  105. package/dist/public/avatar/claude.webp +0 -0
  106. package/dist/public/avatar/cockatoo.png +0 -0
  107. package/dist/public/avatar/gemini.png +0 -0
  108. package/dist/public/avatar/grace.png +0 -0
  109. package/dist/public/avatar/gustav.png +0 -0
  110. package/dist/public/avatar/openai.svg +15 -0
  111. package/dist/public/avatar/opencode.svg +1 -0
  112. package/dist/public/avatar/qwen.png +0 -0
  113. package/dist/public/avatar/stacy.png +0 -0
  114. package/dist/public/avatar/taico.png +0 -0
  115. package/dist/public/beta/assets/index-BO6PlAsO.js +94 -0
  116. package/dist/public/beta/assets/index-DIzh0pTC.css +1 -0
  117. package/dist/public/beta/index.html +27 -0
  118. package/dist/public/beta/manifest.webmanifest +27 -0
  119. package/dist/public/beta/roo-favicon.svg +13 -0
  120. package/dist/public/favicon-16x16.png +0 -0
  121. package/dist/public/favicon-32x32.png +0 -0
  122. package/dist/public/favicon.ico +0 -0
  123. package/dist/public/favicon.svg +9 -0
  124. package/dist/public/icons/OpenAI-black-monoblossom.svg +15 -0
  125. package/dist/public/icons/OpenAI-white-monoblossom.svg +15 -0
  126. package/dist/public/icons/agent-development-kit.png +0 -0
  127. package/dist/public/icons/claude-ai-icon.webp +0 -0
  128. package/dist/public/icons/cockatoo.png +0 -0
  129. package/dist/public/icons/opencode-logo-dark.svg +1 -0
  130. package/dist/public/icons/qwen.png +0 -0
  131. package/dist/public/index.html +30 -0
  132. package/dist/public/manifest.webmanifest +22 -0
  133. package/dist/public/package.json +40 -0
  134. package/dist/public/vite.svg +1 -0
  135. package/dist/threads/agent/thread-agent-tools.factory.d.ts +3 -1
  136. package/dist/threads/agent/thread-agent-tools.factory.js +17 -2
  137. package/dist/threads/agent/thread-agent-tools.factory.js.map +1 -1
  138. package/dist/threads/agent/thread-agent.prompts.d.ts +1 -0
  139. package/dist/threads/agent/thread-agent.prompts.js +2 -1
  140. package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
  141. package/dist/threads/dto/update-thread.dto.js +3 -0
  142. package/dist/threads/dto/update-thread.dto.js.map +1 -1
  143. package/dist/threads/errors/threads.errors.d.ts +4 -0
  144. package/dist/threads/errors/threads.errors.js +10 -1
  145. package/dist/threads/errors/threads.errors.js.map +1 -1
  146. package/dist/threads/thread-rename.service.d.ts +12 -0
  147. package/dist/threads/thread-rename.service.js +70 -0
  148. package/dist/threads/thread-rename.service.js.map +1 -0
  149. package/dist/threads/thread-rename.service.spec.d.ts +1 -0
  150. package/dist/threads/thread-rename.service.spec.js +47 -0
  151. package/dist/threads/thread-rename.service.spec.js.map +1 -0
  152. package/dist/threads/threads.module.js +2 -0
  153. package/dist/threads/threads.module.js.map +1 -1
  154. package/dist/threads/threads.service.d.ts +3 -1
  155. package/dist/threads/threads.service.js +6 -3
  156. package/dist/threads/threads.service.js.map +1 -1
  157. package/dist/tsconfig.tsbuildinfo +1 -1
  158. package/package.json +6 -6
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecutionTraceWorkerMismatchError = exports.ExecutionTraceNotFoundError = exports.InvalidExecutionTraceError = void 0;
4
+ const executions_errors_1 = require("../errors/executions.errors");
5
+ class InvalidExecutionTraceError extends executions_errors_1.ExecutionsError {
6
+ }
7
+ exports.InvalidExecutionTraceError = InvalidExecutionTraceError;
8
+ class ExecutionTraceNotFoundError extends executions_errors_1.ExecutionsError {
9
+ constructor(executionId) {
10
+ super('Execution was not found.', { executionId });
11
+ }
12
+ }
13
+ exports.ExecutionTraceNotFoundError = ExecutionTraceNotFoundError;
14
+ class ExecutionTraceWorkerMismatchError extends executions_errors_1.ExecutionsError {
15
+ constructor(executionId) {
16
+ super('Execution belongs to a different worker.', { executionId });
17
+ }
18
+ }
19
+ exports.ExecutionTraceWorkerMismatchError = ExecutionTraceWorkerMismatchError;
20
+ //# sourceMappingURL=execution-traces.errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-traces.errors.js","sourceRoot":"","sources":["../../../src/executions/traces/execution-traces.errors.ts"],"names":[],"mappings":";;;AAAA,mEAA8D;AAE9D,MAAa,0BAA2B,SAAQ,mCAAe;CAAG;AAAlE,gEAAkE;AAClE,MAAa,2BAA4B,SAAQ,mCAAe;IAC9D,YAAY,WAAmB;QAC7B,KAAK,CAAC,0BAA0B,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACrD,CAAC;CACF;AAJD,kEAIC;AACD,MAAa,iCAAkC,SAAQ,mCAAe;IACpE,YAAY,WAAmB;QAC7B,KAAK,CAAC,0CAA0C,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;CACF;AAJD,8EAIC"}
@@ -0,0 +1,20 @@
1
+ import { EventEmitter2 } from '@nestjs/event-emitter';
2
+ import { Repository } from 'typeorm';
3
+ import { type PostExecutionTracePayload } from '@taico/events';
4
+ import { ExecutionTraceEntity } from './execution-trace.entity';
5
+ export declare class ExecutionTracesService {
6
+ private readonly traces;
7
+ private readonly eventEmitter;
8
+ constructor(traces: Repository<ExecutionTraceEntity>, eventEmitter: EventEmitter2);
9
+ append(input: PostExecutionTracePayload, workerClientId: string): Promise<void>;
10
+ list(executionId: string, afterSequence: number, limit: number, options?: {
11
+ latest?: boolean;
12
+ beforeSequence?: number;
13
+ }): Promise<{
14
+ items: ExecutionTraceEntity[];
15
+ nextAfterSequence: number;
16
+ hasMoreBefore: boolean;
17
+ }>;
18
+ private resolveExecution;
19
+ private validate;
20
+ }
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ExecutionTracesService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const event_emitter_1 = require("@nestjs/event-emitter");
19
+ const execution_traces_changed_event_1 = require("../events/execution-traces-changed.event");
20
+ const typeorm_2 = require("typeorm");
21
+ const class_validator_1 = require("class-validator");
22
+ const events_1 = require("@taico/events");
23
+ const execution_trace_entity_1 = require("./execution-trace.entity");
24
+ const execution_traces_errors_1 = require("./execution-traces.errors");
25
+ let ExecutionTracesService = class ExecutionTracesService {
26
+ traces;
27
+ eventEmitter;
28
+ constructor(traces, eventEmitter) {
29
+ this.traces = traces;
30
+ this.eventEmitter = eventEmitter;
31
+ }
32
+ async append(input, workerClientId) {
33
+ this.validate(input);
34
+ const execution = await this.resolveExecution(input.executionId);
35
+ if (!workerClientId || execution.workerClientId !== workerClientId) {
36
+ throw new execution_traces_errors_1.ExecutionTraceWorkerMismatchError(input.executionId);
37
+ }
38
+ const parameters = [input.executionId, input.harness];
39
+ const rows = input.events.map((event) => {
40
+ const offset = parameters.length;
41
+ parameters.push(event.sequence, event.emittedAt, event.runnerSessionId, JSON.stringify(event.payload));
42
+ return `($1::uuid, $2, $${offset + 1}::integer, $${offset + 2}::timestamptz, $${offset + 3}, $${offset + 4}::json)`;
43
+ });
44
+ const inserted = await this.traces.query(`INSERT INTO execution_traces (execution_id, harness, sequence, emitted_at, runner_session_id, payload)
45
+ VALUES ${rows.join(', ')}
46
+ ON CONFLICT (execution_id, sequence) DO NOTHING RETURNING sequence`, parameters);
47
+ if (inserted.length) {
48
+ this.eventEmitter.emit(execution_traces_changed_event_1.ExecutionTracesChangedEvent.INTERNAL, new execution_traces_changed_event_1.ExecutionTracesChangedEvent(input.executionId));
49
+ }
50
+ }
51
+ async list(executionId, afterSequence, limit, options = {}) {
52
+ await this.resolveExecution(executionId);
53
+ const backwards = options.latest || options.beforeSequence !== undefined;
54
+ const items = await this.traces.find({
55
+ where: {
56
+ executionId,
57
+ sequence: options.beforeSequence !== undefined
58
+ ? (0, typeorm_2.LessThan)(options.beforeSequence)
59
+ : (0, typeorm_2.MoreThan)(afterSequence),
60
+ },
61
+ order: { sequence: backwards ? 'DESC' : 'ASC' },
62
+ take: limit + 1,
63
+ });
64
+ const hasMore = items.length > limit;
65
+ if (hasMore)
66
+ items.pop();
67
+ if (backwards)
68
+ items.reverse();
69
+ return {
70
+ items,
71
+ nextAfterSequence: items.at(-1)?.sequence ?? afterSequence,
72
+ hasMoreBefore: Boolean(backwards && hasMore),
73
+ };
74
+ }
75
+ async resolveExecution(executionId) {
76
+ const [execution] = await this.traces.query(`
77
+ SELECT worker_client_id AS "workerClientId"
78
+ FROM active_task_executions WHERE id = $1 AND deleted_at IS NULL
79
+ UNION ALL
80
+ SELECT worker_client_id AS "workerClientId"
81
+ FROM task_execution_history WHERE id = $1 AND deleted_at IS NULL
82
+ LIMIT 1`, [executionId]);
83
+ if (!execution)
84
+ throw new execution_traces_errors_1.ExecutionTraceNotFoundError(executionId);
85
+ return execution;
86
+ }
87
+ validate(input) {
88
+ const invalid = () => {
89
+ throw new execution_traces_errors_1.InvalidExecutionTraceError('Invalid execution trace batch.');
90
+ };
91
+ if (!input ||
92
+ typeof input.executionId !== 'string' ||
93
+ !(0, class_validator_1.isUUID)(input.executionId) ||
94
+ typeof input.harness !== 'string' ||
95
+ !input.harness.length ||
96
+ input.harness.length > 100 ||
97
+ !Array.isArray(input.events) ||
98
+ !input.events.length ||
99
+ input.events.length > events_1.EXECUTION_TRACE_BATCH_SIZE)
100
+ invalid();
101
+ let previous = 0;
102
+ for (const event of input.events) {
103
+ if (!event ||
104
+ !Number.isInteger(event.sequence) ||
105
+ event.sequence <= previous ||
106
+ event.sequence > 2147483647 ||
107
+ typeof event.emittedAt !== 'string' ||
108
+ !(0, class_validator_1.isISO8601)(event.emittedAt, { strict: true }) ||
109
+ (event.runnerSessionId !== null &&
110
+ typeof event.runnerSessionId !== 'string') ||
111
+ !Object.prototype.hasOwnProperty.call(event, 'payload') ||
112
+ event.payload === undefined)
113
+ invalid();
114
+ previous = event.sequence;
115
+ }
116
+ try {
117
+ if (Buffer.byteLength(JSON.stringify(input)) >
118
+ events_1.EXECUTION_TRACE_MAX_BYTES - 1024)
119
+ invalid();
120
+ }
121
+ catch {
122
+ invalid();
123
+ }
124
+ }
125
+ };
126
+ exports.ExecutionTracesService = ExecutionTracesService;
127
+ exports.ExecutionTracesService = ExecutionTracesService = __decorate([
128
+ (0, common_1.Injectable)(),
129
+ __param(0, (0, typeorm_1.InjectRepository)(execution_trace_entity_1.ExecutionTraceEntity)),
130
+ __metadata("design:paramtypes", [typeorm_2.Repository,
131
+ event_emitter_1.EventEmitter2])
132
+ ], ExecutionTracesService);
133
+ //# sourceMappingURL=execution-traces.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-traces.service.js","sourceRoot":"","sources":["../../../src/executions/traces/execution-traces.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const execution_traces_changed_event_1 = require("../events/execution-traces-changed.event");
4
+ const execution_traces_service_1 = require("./execution-traces.service");
5
+ const execution_traces_errors_1 = require("./execution-traces.errors");
6
+ const executionId = 'd73507cc-1469-4a97-8530-5fb3b6447e32';
7
+ const batch = () => ({
8
+ executionId,
9
+ harness: 'claude',
10
+ events: [
11
+ {
12
+ sequence: 1,
13
+ emittedAt: '2026-10-27T00:00:00.000Z',
14
+ runnerSessionId: null,
15
+ payload: { type: 'tool_result', result: ['full'] },
16
+ },
17
+ ],
18
+ });
19
+ describe('ExecutionTracesService', () => {
20
+ let query;
21
+ let find;
22
+ let service;
23
+ let emit;
24
+ beforeEach(() => {
25
+ query = jest.fn().mockResolvedValue([{ workerClientId: 'owner' }]);
26
+ find = jest.fn().mockResolvedValue([]);
27
+ emit = jest.fn();
28
+ service = new execution_traces_service_1.ExecutionTracesService({
29
+ query,
30
+ find,
31
+ }, { emit });
32
+ });
33
+ it('stores the entire JSON payload in one idempotent batch insert after resolving ownership', async () => {
34
+ const input = batch();
35
+ await service.append(input, 'owner');
36
+ expect(query).toHaveBeenCalledTimes(2);
37
+ expect(query.mock.calls[0][0]).toContain('UNION ALL');
38
+ expect(query.mock.calls[1][0]).toContain('ON CONFLICT (execution_id, sequence) DO NOTHING');
39
+ expect(query.mock.calls[1][1]).toEqual([
40
+ executionId,
41
+ input.harness,
42
+ 1,
43
+ input.events[0].emittedAt,
44
+ null,
45
+ JSON.stringify(input.events[0].payload),
46
+ ]);
47
+ });
48
+ it('rejects another worker without inserting', async () => {
49
+ await expect(service.append(batch(), 'other')).rejects.toBeInstanceOf(execution_traces_errors_1.ExecutionTraceWorkerMismatchError);
50
+ expect(query).toHaveBeenCalledTimes(1);
51
+ });
52
+ it('rejects a missing execution without inserting', async () => {
53
+ query.mockResolvedValue([]);
54
+ await expect(service.append(batch(), 'owner')).rejects.toBeInstanceOf(execution_traces_errors_1.ExecutionTraceNotFoundError);
55
+ expect(query).toHaveBeenCalledTimes(1);
56
+ });
57
+ it.each([
58
+ null,
59
+ { ...batch(), executionId: 'not-a-uuid' },
60
+ { ...batch(), harness: '' },
61
+ { ...batch(), events: [] },
62
+ { ...batch(), events: Array(101).fill(batch().events[0]) },
63
+ { ...batch(), events: [{ ...batch().events[0], sequence: 0 }] },
64
+ { ...batch(), events: [{ ...batch().events[0], sequence: 1.5 }] },
65
+ { ...batch(), events: [{ ...batch().events[0], emittedAt: 'yesterday' }] },
66
+ { ...batch(), events: [{ ...batch().events[0], runnerSessionId: 123 }] },
67
+ {
68
+ ...batch(),
69
+ events: [
70
+ {
71
+ sequence: 1,
72
+ emittedAt: batch().events[0].emittedAt,
73
+ runnerSessionId: null,
74
+ },
75
+ ],
76
+ },
77
+ { ...batch(), events: [batch().events[0], batch().events[0]] },
78
+ ])('rejects invalid trace batches before accessing the database (%#)', async (input) => {
79
+ await expect(service.append(input, 'owner')).rejects.toBeInstanceOf(execution_traces_errors_1.InvalidExecutionTraceError);
80
+ expect(query).not.toHaveBeenCalled();
81
+ });
82
+ it('accepts raw JSON null without turning it into a missing payload', async () => {
83
+ const input = batch();
84
+ input.events[0].payload = null;
85
+ await service.append(input, 'owner');
86
+ expect(JSON.parse(query.mock.calls[1][1][5])).toBeNull();
87
+ });
88
+ it('returns a stable cursor on an empty page and orders events by sequence', async () => {
89
+ expect(await service.list(executionId, 5, 10)).toEqual({
90
+ items: [],
91
+ nextAfterSequence: 5,
92
+ hasMoreBefore: false,
93
+ });
94
+ expect(find).toHaveBeenCalledWith(expect.objectContaining({ order: { sequence: 'ASC' }, take: 11 }));
95
+ find.mockResolvedValue([{ sequence: 9 }]);
96
+ expect((await service.list(executionId, 5, 10)).nextAfterSequence).toBe(9);
97
+ });
98
+ it('notifies viewers only after a successful durable insert', async () => {
99
+ await service.append(batch(), 'owner');
100
+ expect(emit).toHaveBeenCalledWith(execution_traces_changed_event_1.ExecutionTracesChangedEvent.INTERNAL, expect.objectContaining({ executionId }));
101
+ emit.mockClear();
102
+ query
103
+ .mockResolvedValueOnce([{ workerClientId: 'owner' }])
104
+ .mockRejectedValueOnce(new Error('write failed'));
105
+ await expect(service.append(batch(), 'owner')).rejects.toThrow('write failed');
106
+ expect(emit).not.toHaveBeenCalled();
107
+ });
108
+ it('does not notify viewers for a retry that inserted no new events', async () => {
109
+ query
110
+ .mockResolvedValueOnce([{ workerClientId: 'owner' }])
111
+ .mockResolvedValueOnce([]);
112
+ await service.append(batch(), 'owner');
113
+ expect(emit).not.toHaveBeenCalled();
114
+ });
115
+ it('opens at the latest events and returns them chronologically with earlier-page metadata', async () => {
116
+ find.mockResolvedValue([{ sequence: 5 }, { sequence: 4 }, { sequence: 3 }]);
117
+ expect(await service.list(executionId, 0, 2, { latest: true })).toEqual({
118
+ items: [{ sequence: 4 }, { sequence: 5 }],
119
+ nextAfterSequence: 5,
120
+ hasMoreBefore: true,
121
+ });
122
+ expect(find).toHaveBeenCalledWith(expect.objectContaining({ order: { sequence: 'DESC' }, take: 3 }));
123
+ });
124
+ it('does not infer earlier events from gaps in the sequence', async () => {
125
+ find.mockResolvedValue([{ sequence: 4 }, { sequence: 3 }]);
126
+ const page = await service.list(executionId, 0, 2, { beforeSequence: 5 });
127
+ expect(page.items.map((item) => item.sequence)).toEqual([3, 4]);
128
+ expect(page.hasMoreBefore).toBe(false);
129
+ });
130
+ });
131
+ //# sourceMappingURL=execution-traces.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-traces.service.spec.js","sourceRoot":"","sources":["../../../src/executions/traces/execution-traces.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class AccessRequests1762300000000 implements MigrationInterface {
3
+ name: string;
4
+ up(queryRunner: QueryRunner): Promise<void>;
5
+ down(queryRunner: QueryRunner): Promise<void>;
6
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccessRequests1762300000000 = void 0;
4
+ class AccessRequests1762300000000 {
5
+ name = 'AccessRequests1762300000000';
6
+ async up(queryRunner) {
7
+ await queryRunner.query(`
8
+ CREATE TABLE "access_requests" (
9
+ "id" uuid NOT NULL DEFAULT gen_random_uuid(),
10
+ "email" varchar(320) NOT NULL,
11
+ "email_normalized" varchar(320) NOT NULL,
12
+ "building" varchar(280) NULL,
13
+ "status" varchar(16) NOT NULL DEFAULT 'new',
14
+ "submission_count" integer NOT NULL DEFAULT 1,
15
+ "reviewed_at" timestamptz NULL,
16
+ "reviewed_by_actor_id" uuid NULL,
17
+ "created_at" timestamptz NOT NULL DEFAULT now(),
18
+ "last_submitted_at" timestamptz NOT NULL DEFAULT now(),
19
+ "updated_at" timestamptz NOT NULL DEFAULT now(),
20
+ CONSTRAINT "PK_access_requests_id" PRIMARY KEY ("id")
21
+ )`);
22
+ await queryRunner.query(`CREATE UNIQUE INDEX "IDX_access_requests_email_normalized" ON "access_requests" ("email_normalized")`);
23
+ }
24
+ async down(queryRunner) {
25
+ await queryRunner.query(`DROP TABLE "access_requests"`);
26
+ }
27
+ }
28
+ exports.AccessRequests1762300000000 = AccessRequests1762300000000;
29
+ //# sourceMappingURL=1762300000000-AccessRequests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762300000000-AccessRequests.js","sourceRoot":"","sources":["../../src/migrations/1762300000000-AccessRequests.ts"],"names":[],"mappings":";;;AAOA,MAAa,2BAA2B;IACtC,IAAI,GAAG,6BAA6B,CAAC;IAE9B,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CAAC;;;;;;;;;;;;;;QAcpB,CAAC,CAAC;QACN,MAAM,WAAW,CAAC,KAAK,CACrB,sGAAsG,CACvG,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC1D,CAAC;CACF;AA3BD,kEA2BC"}
@@ -0,0 +1,6 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class AccessRequestHeardFrom1762400000000 implements MigrationInterface {
3
+ name: string;
4
+ up(queryRunner: QueryRunner): Promise<void>;
5
+ down(queryRunner: QueryRunner): Promise<void>;
6
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccessRequestHeardFrom1762400000000 = void 0;
4
+ class AccessRequestHeardFrom1762400000000 {
5
+ name = 'AccessRequestHeardFrom1762400000000';
6
+ async up(queryRunner) {
7
+ await queryRunner.query(`
8
+ ALTER TABLE "access_requests"
9
+ ADD COLUMN "heard_from" varchar(32) NULL,
10
+ ADD COLUMN "heard_from_other" varchar(120) NULL,
11
+ ADD CONSTRAINT "CHK_access_requests_heard_from_other"
12
+ CHECK ("heard_from_other" IS NULL OR "heard_from" = 'other')`);
13
+ }
14
+ async down(queryRunner) {
15
+ await queryRunner.query(`
16
+ ALTER TABLE "access_requests"
17
+ DROP CONSTRAINT "CHK_access_requests_heard_from_other",
18
+ DROP COLUMN "heard_from_other",
19
+ DROP COLUMN "heard_from"`);
20
+ }
21
+ }
22
+ exports.AccessRequestHeardFrom1762400000000 = AccessRequestHeardFrom1762400000000;
23
+ //# sourceMappingURL=1762400000000-AccessRequestHeardFrom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762400000000-AccessRequestHeardFrom.js","sourceRoot":"","sources":["../../src/migrations/1762400000000-AccessRequestHeardFrom.ts"],"names":[],"mappings":";;;AAOA,MAAa,mCAAmC;IAC9C,IAAI,GAAG,qCAAqC,CAAC;IAEtC,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CAAC;;;;;uEAK2C,CAAC,CAAC;IACvE,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC;;;;iCAIK,CAAC,CAAC;IACjC,CAAC;CACF;AAnBD,kFAmBC"}
@@ -0,0 +1,6 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class ExecutionTraces1762500000000 implements MigrationInterface {
3
+ name: string;
4
+ up(queryRunner: QueryRunner): Promise<void>;
5
+ down(queryRunner: QueryRunner): Promise<void>;
6
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecutionTraces1762500000000 = void 0;
4
+ class ExecutionTraces1762500000000 {
5
+ name = 'ExecutionTraces1762500000000';
6
+ async up(queryRunner) {
7
+ await queryRunner.query(`
8
+ CREATE TABLE "execution_traces" (
9
+ "execution_id" uuid NOT NULL,
10
+ "sequence" integer NOT NULL CHECK ("sequence" > 0),
11
+ "harness" text NOT NULL,
12
+ "runner_session_id" text NULL,
13
+ "emitted_at" timestamptz NOT NULL,
14
+ "payload" jsonb NOT NULL,
15
+ "received_at" timestamptz NOT NULL DEFAULT now(),
16
+ PRIMARY KEY ("execution_id", "sequence")
17
+ )`);
18
+ }
19
+ async down(queryRunner) {
20
+ await queryRunner.query('DROP TABLE "execution_traces"');
21
+ }
22
+ }
23
+ exports.ExecutionTraces1762500000000 = ExecutionTraces1762500000000;
24
+ //# sourceMappingURL=1762500000000-ExecutionTraces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762500000000-ExecutionTraces.js","sourceRoot":"","sources":["../../src/migrations/1762500000000-ExecutionTraces.ts"],"names":[],"mappings":";;;AAEA,MAAa,4BAA4B;IACvC,IAAI,GAAG,8BAA8B,CAAC;IAEtC,KAAK,CAAC,EAAE,CAAC,WAAwB;QAC/B,MAAM,WAAW,CAAC,KAAK,CAAC;;;;;;;;;;QAUpB,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAwB;QACjC,MAAM,WAAW,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC3D,CAAC;CACF;AApBD,oEAoBC"}
@@ -0,0 +1,6 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class ExecutionTraceJson1762500000001 implements MigrationInterface {
3
+ name: string;
4
+ up(queryRunner: QueryRunner): Promise<void>;
5
+ down(queryRunner: QueryRunner): Promise<void>;
6
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecutionTraceJson1762500000001 = void 0;
4
+ class ExecutionTraceJson1762500000001 {
5
+ name = 'ExecutionTraceJson1762500000001';
6
+ async up(queryRunner) {
7
+ await queryRunner.query('ALTER TABLE execution_traces ALTER COLUMN payload TYPE json USING payload::json');
8
+ }
9
+ async down(queryRunner) {
10
+ await queryRunner.query('ALTER TABLE execution_traces ALTER COLUMN payload TYPE jsonb USING payload::jsonb');
11
+ }
12
+ }
13
+ exports.ExecutionTraceJson1762500000001 = ExecutionTraceJson1762500000001;
14
+ //# sourceMappingURL=1762500000001-ExecutionTraceJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762500000001-ExecutionTraceJson.js","sourceRoot":"","sources":["../../src/migrations/1762500000001-ExecutionTraceJson.ts"],"names":[],"mappings":";;;AAGA,MAAa,+BAA+B;IAC1C,IAAI,GAAG,iCAAiC,CAAC;IAEzC,KAAK,CAAC,EAAE,CAAC,WAAwB;QAC/B,MAAM,WAAW,CAAC,KAAK,CACrB,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAwB;QAEjC,MAAM,WAAW,CAAC,KAAK,CACrB,mFAAmF,CACpF,CAAC;IACJ,CAAC;CACF;AAfD,0EAeC"}
Binary file