@taico/taico 0.8.6 → 0.9.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/README.md +1 -1
- package/dist/access-requests/access-request.entity.d.ts +16 -0
- package/dist/access-requests/access-request.entity.js +87 -0
- package/dist/access-requests/access-request.entity.js.map +1 -0
- package/dist/access-requests/access-request.limits.d.ts +3 -0
- package/dist/access-requests/access-request.limits.js +7 -0
- package/dist/access-requests/access-request.limits.js.map +1 -0
- package/dist/access-requests/access-requests.controller.d.ts +16 -0
- package/dist/access-requests/access-requests.controller.js +129 -0
- package/dist/access-requests/access-requests.controller.js.map +1 -0
- package/dist/access-requests/access-requests.module.d.ts +2 -0
- package/dist/access-requests/access-requests.module.js +26 -0
- package/dist/access-requests/access-requests.module.js.map +1 -0
- package/dist/access-requests/access-requests.service.d.ts +14 -0
- package/dist/access-requests/access-requests.service.js +106 -0
- package/dist/access-requests/access-requests.service.js.map +1 -0
- package/dist/access-requests/dto/http/access-request-admin.dto.d.ts +26 -0
- package/dist/access-requests/dto/http/access-request-admin.dto.js +130 -0
- package/dist/access-requests/dto/http/access-request-admin.dto.js.map +1 -0
- package/dist/access-requests/dto/http/create-access-request.dto.d.ts +11 -0
- package/dist/access-requests/dto/http/create-access-request.dto.js +78 -0
- package/dist/access-requests/dto/http/create-access-request.dto.js.map +1 -0
- package/dist/access-requests/dto/service/access-requests.service.types.d.ts +29 -0
- package/dist/access-requests/dto/service/access-requests.service.types.js +3 -0
- package/dist/access-requests/dto/service/access-requests.service.types.js.map +1 -0
- package/dist/access-requests/enums/access-request-heard-from.enum.d.ts +7 -0
- package/dist/access-requests/enums/access-request-heard-from.enum.js +12 -0
- package/dist/access-requests/enums/access-request-heard-from.enum.js.map +1 -0
- package/dist/access-requests/enums/access-request-status.enum.d.ts +4 -0
- package/dist/access-requests/enums/access-request-status.enum.js +9 -0
- package/dist/access-requests/enums/access-request-status.enum.js.map +1 -0
- package/dist/access-requests/enums/index.d.ts +2 -0
- package/dist/access-requests/enums/index.js +8 -0
- package/dist/access-requests/enums/index.js.map +1 -0
- package/dist/access-requests/errors/access-requests.errors.d.ts +8 -0
- package/dist/access-requests/errors/access-requests.errors.js +21 -0
- package/dist/access-requests/errors/access-requests.errors.js.map +1 -0
- package/dist/access-requests/submission-ceiling.d.ts +7 -0
- package/dist/access-requests/submission-ceiling.js +21 -0
- package/dist/access-requests/submission-ceiling.js.map +1 -0
- package/dist/access-requests/submission-ceiling.spec.d.ts +1 -0
- package/dist/access-requests/submission-ceiling.spec.js +18 -0
- package/dist/access-requests/submission-ceiling.spec.js.map +1 -0
- package/dist/app.module.js +12 -0
- package/dist/app.module.js.map +1 -1
- package/dist/common/postgres-io.adapter.js +2 -1
- package/dist/common/postgres-io.adapter.js.map +1 -1
- package/dist/errors/http/error-catalog.js +18 -0
- package/dist/errors/http/error-catalog.js.map +1 -1
- package/dist/executions/events/execution-traces-changed.event.d.ts +5 -0
- package/dist/executions/events/execution-traces-changed.event.js +12 -0
- package/dist/executions/events/execution-traces-changed.event.js.map +1 -0
- package/dist/executions/executions-worker.gateway.d.ts +17 -2
- package/dist/executions/executions-worker.gateway.js +29 -1
- package/dist/executions/executions-worker.gateway.js.map +1 -1
- package/dist/executions/executions.gateway.d.ts +12 -0
- package/dist/executions/executions.gateway.js +39 -0
- package/dist/executions/executions.gateway.js.map +1 -1
- package/dist/executions/executions.module.js +6 -0
- package/dist/executions/executions.module.js.map +1 -1
- package/dist/executions/staleness/stale-active-task-execution-pruner.service.js +3 -0
- package/dist/executions/staleness/stale-active-task-execution-pruner.service.js.map +1 -1
- package/dist/executions/staleness/stale-active-task-execution-pruner.service.spec.js +3 -0
- package/dist/executions/staleness/stale-active-task-execution-pruner.service.spec.js.map +1 -1
- package/dist/executions/traces/dto/http/execution-traces-response.dto.d.ts +19 -0
- package/dist/executions/traces/dto/http/execution-traces-response.dto.js +100 -0
- package/dist/executions/traces/dto/http/execution-traces-response.dto.js.map +1 -0
- package/dist/executions/traces/dto/http/list-execution-traces-query.dto.d.ts +6 -0
- package/dist/executions/traces/dto/http/list-execution-traces-query.dto.js +63 -0
- package/dist/executions/traces/dto/http/list-execution-traces-query.dto.js.map +1 -0
- package/dist/executions/traces/execution-trace.entity.d.ts +11 -0
- package/dist/executions/traces/execution-trace.entity.js +60 -0
- package/dist/executions/traces/execution-trace.entity.js.map +1 -0
- package/dist/executions/traces/execution-traces.controller.d.ts +8 -0
- package/dist/executions/traces/execution-traces.controller.js +69 -0
- package/dist/executions/traces/execution-traces.controller.js.map +1 -0
- package/dist/executions/traces/execution-traces.errors.d.ts +9 -0
- package/dist/executions/traces/execution-traces.errors.js +20 -0
- package/dist/executions/traces/execution-traces.errors.js.map +1 -0
- package/dist/executions/traces/execution-traces.service.d.ts +21 -0
- package/dist/executions/traces/execution-traces.service.js +148 -0
- package/dist/executions/traces/execution-traces.service.js.map +1 -0
- package/dist/executions/traces/execution-traces.service.spec.d.ts +1 -0
- package/dist/executions/traces/execution-traces.service.spec.js +151 -0
- package/dist/executions/traces/execution-traces.service.spec.js.map +1 -0
- package/dist/migrations/1762300000000-AccessRequests.d.ts +6 -0
- package/dist/migrations/1762300000000-AccessRequests.js +29 -0
- package/dist/migrations/1762300000000-AccessRequests.js.map +1 -0
- package/dist/migrations/1762400000000-AccessRequestHeardFrom.d.ts +6 -0
- package/dist/migrations/1762400000000-AccessRequestHeardFrom.js +23 -0
- package/dist/migrations/1762400000000-AccessRequestHeardFrom.js.map +1 -0
- package/dist/migrations/1762500000000-ExecutionTraces.d.ts +6 -0
- package/dist/migrations/1762500000000-ExecutionTraces.js +24 -0
- package/dist/migrations/1762500000000-ExecutionTraces.js.map +1 -0
- package/dist/migrations/1762500000001-ExecutionTraceJson.d.ts +6 -0
- package/dist/migrations/1762500000001-ExecutionTraceJson.js +14 -0
- package/dist/migrations/1762500000001-ExecutionTraceJson.js.map +1 -0
- package/dist/migrations/1762500000002-ExecutionTraceSource.d.ts +6 -0
- package/dist/migrations/1762500000002-ExecutionTraceSource.js +24 -0
- package/dist/migrations/1762500000002-ExecutionTraceSource.js.map +1 -0
- package/dist/threads/agent/thread-agent-tools.factory.d.ts +3 -1
- package/dist/threads/agent/thread-agent-tools.factory.js +17 -2
- package/dist/threads/agent/thread-agent-tools.factory.js.map +1 -1
- package/dist/threads/agent/thread-agent.prompts.d.ts +1 -0
- package/dist/threads/agent/thread-agent.prompts.js +2 -1
- package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
- package/dist/threads/dto/update-thread.dto.js +3 -0
- package/dist/threads/dto/update-thread.dto.js.map +1 -1
- package/dist/threads/errors/threads.errors.d.ts +4 -0
- package/dist/threads/errors/threads.errors.js +10 -1
- package/dist/threads/errors/threads.errors.js.map +1 -1
- package/dist/threads/thread-rename.service.d.ts +12 -0
- package/dist/threads/thread-rename.service.js +70 -0
- package/dist/threads/thread-rename.service.js.map +1 -0
- package/dist/threads/thread-rename.service.spec.d.ts +1 -0
- package/dist/threads/thread-rename.service.spec.js +47 -0
- package/dist/threads/thread-rename.service.spec.js.map +1 -0
- package/dist/threads/threads.module.js +2 -0
- package/dist/threads/threads.module.js.map +1 -1
- package/dist/threads/threads.service.d.ts +3 -1
- package/dist/threads/threads.service.js +6 -3
- package/dist/threads/threads.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ExecutionsError } from '../errors/executions.errors';
|
|
2
|
+
export declare class InvalidExecutionTraceError extends ExecutionsError {
|
|
3
|
+
}
|
|
4
|
+
export declare class ExecutionTraceNotFoundError extends ExecutionsError {
|
|
5
|
+
constructor(executionId: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class ExecutionTraceWorkerMismatchError extends ExecutionsError {
|
|
8
|
+
constructor(executionId: string);
|
|
9
|
+
}
|
|
@@ -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,21 @@
|
|
|
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
|
+
lifecycle: ExecutionTraceEntity[];
|
|
16
|
+
nextAfterSequence: number;
|
|
17
|
+
hasMoreBefore: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
private resolveExecution;
|
|
20
|
+
private validate;
|
|
21
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
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 = [
|
|
39
|
+
input.executionId,
|
|
40
|
+
input.harness,
|
|
41
|
+
input.source ?? 'harness',
|
|
42
|
+
];
|
|
43
|
+
const rows = input.events.map((event) => {
|
|
44
|
+
const offset = parameters.length;
|
|
45
|
+
parameters.push(event.sequence, event.emittedAt, event.runnerSessionId, JSON.stringify(event.payload));
|
|
46
|
+
return `($1::uuid, $2, $3, $${offset + 1}::integer, $${offset + 2}::timestamptz, $${offset + 3}, $${offset + 4}::json)`;
|
|
47
|
+
});
|
|
48
|
+
const inserted = await this.traces.query(`INSERT INTO execution_traces (execution_id, harness, source, sequence, emitted_at, runner_session_id, payload)
|
|
49
|
+
VALUES ${rows.join(', ')}
|
|
50
|
+
ON CONFLICT (execution_id, sequence) DO NOTHING RETURNING sequence`, parameters);
|
|
51
|
+
if (inserted.length) {
|
|
52
|
+
this.eventEmitter.emit(execution_traces_changed_event_1.ExecutionTracesChangedEvent.INTERNAL, new execution_traces_changed_event_1.ExecutionTracesChangedEvent(input.executionId));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async list(executionId, afterSequence, limit, options = {}) {
|
|
56
|
+
await this.resolveExecution(executionId);
|
|
57
|
+
const backwards = options.latest || options.beforeSequence !== undefined;
|
|
58
|
+
const [items, lifecycle] = await Promise.all([
|
|
59
|
+
this.traces.find({
|
|
60
|
+
where: {
|
|
61
|
+
executionId,
|
|
62
|
+
sequence: options.beforeSequence !== undefined
|
|
63
|
+
? (0, typeorm_2.LessThan)(options.beforeSequence)
|
|
64
|
+
: (0, typeorm_2.MoreThan)(afterSequence),
|
|
65
|
+
},
|
|
66
|
+
order: { sequence: backwards ? 'DESC' : 'ASC' },
|
|
67
|
+
take: limit + 1,
|
|
68
|
+
}),
|
|
69
|
+
this.traces.find({
|
|
70
|
+
where: { executionId, source: 'worker' },
|
|
71
|
+
order: { sequence: 'ASC' },
|
|
72
|
+
}),
|
|
73
|
+
]);
|
|
74
|
+
const hasMore = items.length > limit;
|
|
75
|
+
if (hasMore)
|
|
76
|
+
items.pop();
|
|
77
|
+
if (backwards)
|
|
78
|
+
items.reverse();
|
|
79
|
+
return {
|
|
80
|
+
items,
|
|
81
|
+
lifecycle,
|
|
82
|
+
nextAfterSequence: items.at(-1)?.sequence ?? afterSequence,
|
|
83
|
+
hasMoreBefore: Boolean(backwards && hasMore),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async resolveExecution(executionId) {
|
|
87
|
+
const [execution] = await this.traces.query(`
|
|
88
|
+
SELECT worker_client_id AS "workerClientId"
|
|
89
|
+
FROM active_task_executions WHERE id = $1 AND deleted_at IS NULL
|
|
90
|
+
UNION ALL
|
|
91
|
+
SELECT worker_client_id AS "workerClientId"
|
|
92
|
+
FROM task_execution_history WHERE id = $1 AND deleted_at IS NULL
|
|
93
|
+
LIMIT 1`, [executionId]);
|
|
94
|
+
if (!execution)
|
|
95
|
+
throw new execution_traces_errors_1.ExecutionTraceNotFoundError(executionId);
|
|
96
|
+
return execution;
|
|
97
|
+
}
|
|
98
|
+
validate(input) {
|
|
99
|
+
const invalid = () => {
|
|
100
|
+
throw new execution_traces_errors_1.InvalidExecutionTraceError('Invalid execution trace batch.');
|
|
101
|
+
};
|
|
102
|
+
const source = input?.source === undefined ? 'harness' : input.source;
|
|
103
|
+
if (!input ||
|
|
104
|
+
(source !== 'worker' && source !== 'harness') ||
|
|
105
|
+
typeof input.executionId !== 'string' ||
|
|
106
|
+
!(0, class_validator_1.isUUID)(input.executionId) ||
|
|
107
|
+
(source === 'worker'
|
|
108
|
+
? input.harness !== null
|
|
109
|
+
: typeof input.harness !== 'string' ||
|
|
110
|
+
!input.harness.length ||
|
|
111
|
+
input.harness.length > 100) ||
|
|
112
|
+
!Array.isArray(input.events) ||
|
|
113
|
+
!input.events.length ||
|
|
114
|
+
input.events.length > events_1.EXECUTION_TRACE_BATCH_SIZE)
|
|
115
|
+
invalid();
|
|
116
|
+
let previous = 0;
|
|
117
|
+
for (const event of input.events) {
|
|
118
|
+
if (!event ||
|
|
119
|
+
!Number.isInteger(event.sequence) ||
|
|
120
|
+
event.sequence <= previous ||
|
|
121
|
+
event.sequence > 2147483647 ||
|
|
122
|
+
typeof event.emittedAt !== 'string' ||
|
|
123
|
+
!(0, class_validator_1.isISO8601)(event.emittedAt, { strict: true }) ||
|
|
124
|
+
(event.runnerSessionId !== null &&
|
|
125
|
+
typeof event.runnerSessionId !== 'string') ||
|
|
126
|
+
!Object.prototype.hasOwnProperty.call(event, 'payload') ||
|
|
127
|
+
event.payload === undefined)
|
|
128
|
+
invalid();
|
|
129
|
+
previous = event.sequence;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
if (Buffer.byteLength(JSON.stringify(input)) >
|
|
133
|
+
events_1.EXECUTION_TRACE_MAX_BYTES - 1024)
|
|
134
|
+
invalid();
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
invalid();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
exports.ExecutionTracesService = ExecutionTracesService;
|
|
142
|
+
exports.ExecutionTracesService = ExecutionTracesService = __decorate([
|
|
143
|
+
(0, common_1.Injectable)(),
|
|
144
|
+
__param(0, (0, typeorm_1.InjectRepository)(execution_trace_entity_1.ExecutionTraceEntity)),
|
|
145
|
+
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
146
|
+
event_emitter_1.EventEmitter2])
|
|
147
|
+
], ExecutionTracesService);
|
|
148
|
+
//# 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 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
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: (options) => options.where.source ? Promise.resolve([]) : find(options),
|
|
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
|
+
'harness',
|
|
43
|
+
1,
|
|
44
|
+
input.events[0].emittedAt,
|
|
45
|
+
null,
|
|
46
|
+
JSON.stringify(input.events[0].payload),
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
it('stores explicit worker source without a fake SDK identity', async () => {
|
|
50
|
+
const input = {
|
|
51
|
+
...batch(),
|
|
52
|
+
source: 'worker',
|
|
53
|
+
harness: null,
|
|
54
|
+
};
|
|
55
|
+
await service.append(input, 'owner');
|
|
56
|
+
expect(query.mock.calls[1][1].slice(0, 3)).toEqual([
|
|
57
|
+
executionId,
|
|
58
|
+
null,
|
|
59
|
+
'worker',
|
|
60
|
+
]);
|
|
61
|
+
});
|
|
62
|
+
it('rejects another worker without inserting', async () => {
|
|
63
|
+
await expect(service.append(batch(), 'other')).rejects.toBeInstanceOf(execution_traces_errors_1.ExecutionTraceWorkerMismatchError);
|
|
64
|
+
expect(query).toHaveBeenCalledTimes(1);
|
|
65
|
+
});
|
|
66
|
+
it('rejects a missing execution without inserting', async () => {
|
|
67
|
+
query.mockResolvedValue([]);
|
|
68
|
+
await expect(service.append(batch(), 'owner')).rejects.toBeInstanceOf(execution_traces_errors_1.ExecutionTraceNotFoundError);
|
|
69
|
+
expect(query).toHaveBeenCalledTimes(1);
|
|
70
|
+
});
|
|
71
|
+
it.each([
|
|
72
|
+
null,
|
|
73
|
+
{ ...batch(), executionId: 'not-a-uuid' },
|
|
74
|
+
{ ...batch(), harness: '' },
|
|
75
|
+
{ ...batch(), source: 'unknown' },
|
|
76
|
+
{ ...batch(), source: null },
|
|
77
|
+
{ ...batch(), source: 'worker' },
|
|
78
|
+
{ ...batch(), source: 'harness', harness: null },
|
|
79
|
+
{ ...batch(), events: [] },
|
|
80
|
+
{ ...batch(), events: Array(101).fill(batch().events[0]) },
|
|
81
|
+
{ ...batch(), events: [{ ...batch().events[0], sequence: 0 }] },
|
|
82
|
+
{ ...batch(), events: [{ ...batch().events[0], sequence: 1.5 }] },
|
|
83
|
+
{ ...batch(), events: [{ ...batch().events[0], emittedAt: 'yesterday' }] },
|
|
84
|
+
{ ...batch(), events: [{ ...batch().events[0], runnerSessionId: 123 }] },
|
|
85
|
+
{
|
|
86
|
+
...batch(),
|
|
87
|
+
events: [
|
|
88
|
+
{
|
|
89
|
+
sequence: 1,
|
|
90
|
+
emittedAt: batch().events[0].emittedAt,
|
|
91
|
+
runnerSessionId: null,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{ ...batch(), events: [batch().events[0], batch().events[0]] },
|
|
96
|
+
])('rejects invalid trace batches before accessing the database (%#)', async (input) => {
|
|
97
|
+
await expect(service.append(input, 'owner')).rejects.toBeInstanceOf(execution_traces_errors_1.InvalidExecutionTraceError);
|
|
98
|
+
expect(query).not.toHaveBeenCalled();
|
|
99
|
+
});
|
|
100
|
+
it('accepts raw JSON null without turning it into a missing payload', async () => {
|
|
101
|
+
const input = batch();
|
|
102
|
+
input.events[0].payload = null;
|
|
103
|
+
await service.append(input, 'owner');
|
|
104
|
+
expect(JSON.parse(query.mock.calls[1][1][6])).toBeNull();
|
|
105
|
+
});
|
|
106
|
+
it('returns a stable cursor on an empty page and orders events by sequence', async () => {
|
|
107
|
+
expect(await service.list(executionId, 5, 10)).toEqual({
|
|
108
|
+
items: [],
|
|
109
|
+
lifecycle: [],
|
|
110
|
+
nextAfterSequence: 5,
|
|
111
|
+
hasMoreBefore: false,
|
|
112
|
+
});
|
|
113
|
+
expect(find).toHaveBeenCalledWith(expect.objectContaining({ order: { sequence: 'ASC' }, take: 11 }));
|
|
114
|
+
find.mockResolvedValue([{ sequence: 9 }]);
|
|
115
|
+
expect((await service.list(executionId, 5, 10)).nextAfterSequence).toBe(9);
|
|
116
|
+
});
|
|
117
|
+
it('notifies viewers only after a successful durable insert', async () => {
|
|
118
|
+
await service.append(batch(), 'owner');
|
|
119
|
+
expect(emit).toHaveBeenCalledWith(execution_traces_changed_event_1.ExecutionTracesChangedEvent.INTERNAL, expect.objectContaining({ executionId }));
|
|
120
|
+
emit.mockClear();
|
|
121
|
+
query
|
|
122
|
+
.mockResolvedValueOnce([{ workerClientId: 'owner' }])
|
|
123
|
+
.mockRejectedValueOnce(new Error('write failed'));
|
|
124
|
+
await expect(service.append(batch(), 'owner')).rejects.toThrow('write failed');
|
|
125
|
+
expect(emit).not.toHaveBeenCalled();
|
|
126
|
+
});
|
|
127
|
+
it('does not notify viewers for a retry that inserted no new events', async () => {
|
|
128
|
+
query
|
|
129
|
+
.mockResolvedValueOnce([{ workerClientId: 'owner' }])
|
|
130
|
+
.mockResolvedValueOnce([]);
|
|
131
|
+
await service.append(batch(), 'owner');
|
|
132
|
+
expect(emit).not.toHaveBeenCalled();
|
|
133
|
+
});
|
|
134
|
+
it('opens at the latest events and returns them chronologically with earlier-page metadata', async () => {
|
|
135
|
+
find.mockResolvedValue([{ sequence: 5 }, { sequence: 4 }, { sequence: 3 }]);
|
|
136
|
+
expect(await service.list(executionId, 0, 2, { latest: true })).toEqual({
|
|
137
|
+
items: [{ sequence: 4 }, { sequence: 5 }],
|
|
138
|
+
lifecycle: [],
|
|
139
|
+
nextAfterSequence: 5,
|
|
140
|
+
hasMoreBefore: true,
|
|
141
|
+
});
|
|
142
|
+
expect(find).toHaveBeenCalledWith(expect.objectContaining({ order: { sequence: 'DESC' }, take: 3 }));
|
|
143
|
+
});
|
|
144
|
+
it('does not infer earlier events from gaps in the sequence', async () => {
|
|
145
|
+
find.mockResolvedValue([{ sequence: 4 }, { sequence: 3 }]);
|
|
146
|
+
const page = await service.list(executionId, 0, 2, { beforeSequence: 5 });
|
|
147
|
+
expect(page.items.map((item) => item.sequence)).toEqual([3, 4]);
|
|
148
|
+
expect(page.hasMoreBefore).toBe(false);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
//# 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,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,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,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,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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExecutionTraceSource1762500000002 = void 0;
|
|
4
|
+
class ExecutionTraceSource1762500000002 {
|
|
5
|
+
name = 'ExecutionTraceSource1762500000002';
|
|
6
|
+
async up(queryRunner) {
|
|
7
|
+
await queryRunner.query(`ALTER TABLE execution_traces
|
|
8
|
+
ADD COLUMN source text NOT NULL DEFAULT 'harness',
|
|
9
|
+
ALTER COLUMN harness DROP NOT NULL`);
|
|
10
|
+
await queryRunner.query(`UPDATE execution_traces SET source = 'worker', harness = NULL WHERE harness = 'worker'`);
|
|
11
|
+
await queryRunner.query(`ALTER TABLE execution_traces ADD CONSTRAINT execution_traces_source_check CHECK (
|
|
12
|
+
(source = 'worker' AND harness IS NULL) OR (source = 'harness' AND harness IS NOT NULL)
|
|
13
|
+
)`);
|
|
14
|
+
await queryRunner.query(`CREATE INDEX execution_traces_worker_steps_idx ON execution_traces (execution_id, sequence) WHERE source = 'worker'`);
|
|
15
|
+
}
|
|
16
|
+
async down(queryRunner) {
|
|
17
|
+
await queryRunner.query('DROP INDEX execution_traces_worker_steps_idx');
|
|
18
|
+
await queryRunner.query('ALTER TABLE execution_traces DROP CONSTRAINT execution_traces_source_check');
|
|
19
|
+
await queryRunner.query(`UPDATE execution_traces SET harness = 'worker' WHERE source = 'worker'`);
|
|
20
|
+
await queryRunner.query('ALTER TABLE execution_traces ALTER COLUMN harness SET NOT NULL, DROP COLUMN source');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.ExecutionTraceSource1762500000002 = ExecutionTraceSource1762500000002;
|
|
24
|
+
//# sourceMappingURL=1762500000002-ExecutionTraceSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1762500000002-ExecutionTraceSource.js","sourceRoot":"","sources":["../../src/migrations/1762500000002-ExecutionTraceSource.ts"],"names":[],"mappings":";;;AAEA,MAAa,iCAAiC;IAC5C,IAAI,GAAG,mCAAmC,CAAC;IAE3C,KAAK,CAAC,EAAE,CAAC,WAAwB;QAC/B,MAAM,WAAW,CAAC,KAAK,CAAC;;yCAEa,CAAC,CAAC;QAEvC,MAAM,WAAW,CAAC,KAAK,CACrB,wFAAwF,CACzF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CAAC;;MAEtB,CAAC,CAAC;QACJ,MAAM,WAAW,CAAC,KAAK,CACrB,qHAAqH,CACtH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAwB;QACjC,MAAM,WAAW,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACxE,MAAM,WAAW,CAAC,KAAK,CACrB,4EAA4E,CAC7E,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,wEAAwE,CACzE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,oFAAoF,CACrF,CAAC;IACJ,CAAC;CACF;AA/BD,8EA+BC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { ToolSet } from 'ai';
|
|
2
2
|
import { ThreadTaskSubscriptionsService } from '../task-subscriptions/thread-task-subscriptions.service';
|
|
3
3
|
import { ThreadTimersService } from '../timers/thread-timers.service';
|
|
4
|
+
import { ThreadRenameService } from '../thread-rename.service';
|
|
4
5
|
import { ThreadTimeService } from '../time/thread-time.service';
|
|
5
6
|
export declare class ThreadAgentToolsFactory {
|
|
6
7
|
private readonly subscriptions;
|
|
7
8
|
private readonly timers;
|
|
8
9
|
private readonly time;
|
|
9
|
-
|
|
10
|
+
private readonly renamer;
|
|
11
|
+
constructor(subscriptions: ThreadTaskSubscriptionsService, timers: ThreadTimersService, time: ThreadTimeService, renamer: ThreadRenameService);
|
|
10
12
|
build(input: {
|
|
11
13
|
threadId: string;
|
|
12
14
|
agentActorId: string;
|
|
@@ -16,6 +16,7 @@ const v3_1 = require("zod/v3");
|
|
|
16
16
|
const thread_task_subscriptions_service_1 = require("../task-subscriptions/thread-task-subscriptions.service");
|
|
17
17
|
const thread_timers_service_1 = require("../timers/thread-timers.service");
|
|
18
18
|
const thread_timer_enums_1 = require("../timers/thread-timer.enums");
|
|
19
|
+
const thread_rename_service_1 = require("../thread-rename.service");
|
|
19
20
|
const thread_time_service_1 = require("../time/thread-time.service");
|
|
20
21
|
const timer_input_1 = require("../timers/timer-input");
|
|
21
22
|
const thread_agent_prompts_1 = require("./thread-agent.prompts");
|
|
@@ -24,10 +25,12 @@ let ThreadAgentToolsFactory = class ThreadAgentToolsFactory {
|
|
|
24
25
|
subscriptions;
|
|
25
26
|
timers;
|
|
26
27
|
time;
|
|
27
|
-
|
|
28
|
+
renamer;
|
|
29
|
+
constructor(subscriptions, timers, time, renamer) {
|
|
28
30
|
this.subscriptions = subscriptions;
|
|
29
31
|
this.timers = timers;
|
|
30
32
|
this.time = time;
|
|
33
|
+
this.renamer = renamer;
|
|
31
34
|
}
|
|
32
35
|
build(input) {
|
|
33
36
|
const { threadId, agentActorId, forActorId } = input;
|
|
@@ -233,6 +236,17 @@ let ThreadAgentToolsFactory = class ThreadAgentToolsFactory {
|
|
|
233
236
|
inputSchema: v3_1.z.object({}),
|
|
234
237
|
execute: async () => this.time.getTimeContext(threadId),
|
|
235
238
|
}),
|
|
239
|
+
[thread_agent_prompts_1.RENAME_THREAD_TOOL]: (0, ai_1.tool)({
|
|
240
|
+
description: 'Rename this thread.',
|
|
241
|
+
inputSchema: v3_1.z.object({ title: v3_1.z.string() }),
|
|
242
|
+
execute: async ({ title }) => {
|
|
243
|
+
if (!title.trim()) {
|
|
244
|
+
return { error: 'title must not be empty.' };
|
|
245
|
+
}
|
|
246
|
+
const renamed = await this.renamer.rename(threadId, title, agentActorId);
|
|
247
|
+
return `Thread renamed to "${renamed}".`;
|
|
248
|
+
},
|
|
249
|
+
}),
|
|
236
250
|
[thread_agent_prompts_1.STAY_SILENT_TOOL]: (0, ai_1.tool)({
|
|
237
251
|
description: 'End your turn without sending a message. Use it for system events, such as a task notification or a reminder, that do not warrant a response to the user. Never use it to ignore something the user said.',
|
|
238
252
|
inputSchema: v3_1.z.object({}),
|
|
@@ -246,7 +260,8 @@ exports.ThreadAgentToolsFactory = ThreadAgentToolsFactory = __decorate([
|
|
|
246
260
|
(0, common_1.Injectable)(),
|
|
247
261
|
__metadata("design:paramtypes", [thread_task_subscriptions_service_1.ThreadTaskSubscriptionsService,
|
|
248
262
|
thread_timers_service_1.ThreadTimersService,
|
|
249
|
-
thread_time_service_1.ThreadTimeService
|
|
263
|
+
thread_time_service_1.ThreadTimeService,
|
|
264
|
+
thread_rename_service_1.ThreadRenameService])
|
|
250
265
|
], ThreadAgentToolsFactory);
|
|
251
266
|
function describeDelay(ms) {
|
|
252
267
|
let seconds = Math.max(0, Math.round(ms / 1000));
|