@devflow-tools/telemetry 0.17.8 → 0.18.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/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/log-cleanup-lock.d.ts +12 -0
- package/dist/log-cleanup-lock.d.ts.map +1 -0
- package/dist/log-cleanup-lock.js +75 -0
- package/dist/log-cleanup-lock.js.map +1 -0
- package/dist/log-cleanup-scheduler.d.ts +18 -0
- package/dist/log-cleanup-scheduler.d.ts.map +1 -0
- package/dist/log-cleanup-scheduler.js +55 -0
- package/dist/log-cleanup-scheduler.js.map +1 -0
- package/dist/log-cleanup.d.ts +58 -0
- package/dist/log-cleanup.d.ts.map +1 -0
- package/dist/log-cleanup.js +240 -0
- package/dist/log-cleanup.js.map +1 -0
- package/dist/log-writer.d.ts +1 -1
- package/dist/log-writer.d.ts.map +1 -1
- package/dist/log-writer.js +31 -44
- package/dist/log-writer.js.map +1 -1
- package/dist/runtime-event-projector.d.ts +9 -0
- package/dist/runtime-event-projector.d.ts.map +1 -0
- package/dist/runtime-event-projector.js +43 -0
- package/dist/runtime-event-projector.js.map +1 -0
- package/dist/semantic-log.d.ts +1 -0
- package/dist/semantic-log.d.ts.map +1 -1
- package/dist/semantic-log.js +31 -0
- package/dist/semantic-log.js.map +1 -1
- package/package.json +11 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 shilongfeicool
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -28,6 +28,8 @@ await telemetry.recordToolCall({ eventId: 'evt-1', executionId: 'run-1', timesta
|
|
|
28
28
|
|
|
29
29
|
事件默认写入 DevFlow 本地数据库/日志目录;使用 `createLogger` 或 `LogWriter` 保持结构化字段,避免直接写 stdout。
|
|
30
30
|
|
|
31
|
+
诊断日志采用统一清理策略:默认保留 30 天,单文件最大 50 MiB,项目级与全局日志预算各 256 MiB。`LogCleanupService` 只识别登记的 trace、session、metric、error、Hook Debug 和 HTTP error 日志;不会扫描或删除 memory snapshot、spool、pending 状态、SQLite 或业务文件。CLI 的 `devflow logs cleanup` 默认为 dry-run,必须显式传入 `--execute` 才会删除候选日志。
|
|
32
|
+
|
|
31
33
|
## 版本与兼容性
|
|
32
34
|
|
|
33
35
|
- 当前包版本:`0.17.8`
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
export { TelemetryEngine } from "./telemetry-engine.js";
|
|
2
2
|
export { LogWriter, getLogWriter } from "./log-writer.js";
|
|
3
|
-
export { emitSemanticControlLog } from './semantic-log.js';
|
|
3
|
+
export { assertSemanticControlLogSafe, emitSemanticControlLog } from './semantic-log.js';
|
|
4
|
+
export { SemanticRuntimeEventProjector } from './runtime-event-projector.js';
|
|
4
5
|
export { aggregateHealthStatus, createHealthSnapshot } from "./health-snapshot.js";
|
|
5
6
|
export type { HealthCheckResult, HealthSnapshot, HealthStatus } from "./health-snapshot.js";
|
|
6
7
|
export type { RunMeta, StepMeta, StepEnd, RunEnd, ToolCallEvent, LlmCallEvent, FreeEvent } from "./log-writer.js";
|
|
8
|
+
export { DEFAULT_LOG_CLEANUP_POLICY, getDiagnosticLogCatalog, LogCleanupService, rotateDiagnosticLogFile } from './log-cleanup.js';
|
|
9
|
+
export type { CleanupTrigger, DiagnosticLogCatalogEntry, DiagnosticLogKind, LogCleanupInput, LogCleanupPolicy, LogCleanupResult } from './log-cleanup.js';
|
|
10
|
+
export { DiagnosticLogCleanupScheduler, maybeRunDiagnosticLogCleanup } from './log-cleanup-scheduler.js';
|
|
11
|
+
export type { CleanupCompensationOptions } from './log-cleanup-scheduler.js';
|
|
7
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5F,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnI,YAAY,EAAE,cAAc,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1J,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { TelemetryEngine } from "./telemetry-engine.js";
|
|
2
2
|
export { LogWriter, getLogWriter } from "./log-writer.js";
|
|
3
|
-
export { emitSemanticControlLog } from './semantic-log.js';
|
|
3
|
+
export { assertSemanticControlLogSafe, emitSemanticControlLog } from './semantic-log.js';
|
|
4
|
+
export { SemanticRuntimeEventProjector } from './runtime-event-projector.js';
|
|
4
5
|
export { aggregateHealthStatus, createHealthSnapshot } from "./health-snapshot.js";
|
|
6
|
+
export { DEFAULT_LOG_CLEANUP_POLICY, getDiagnosticLogCatalog, LogCleanupService, rotateDiagnosticLogFile } from './log-cleanup.js';
|
|
7
|
+
export { DiagnosticLogCleanupScheduler, maybeRunDiagnosticLogCleanup } from './log-cleanup-scheduler.js';
|
|
5
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGnF,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEnI,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CleanupLock {
|
|
2
|
+
status: 'acquired';
|
|
3
|
+
fd: number;
|
|
4
|
+
path: string;
|
|
5
|
+
contents: string;
|
|
6
|
+
}
|
|
7
|
+
export type CleanupLockResult = CleanupLock | {
|
|
8
|
+
status: 'busy';
|
|
9
|
+
};
|
|
10
|
+
export declare function acquireCleanupLock(root: string, now: number, staleMs: number): CleanupLockResult;
|
|
11
|
+
export declare function releaseCleanupLock(lock: CleanupLock): void;
|
|
12
|
+
//# sourceMappingURL=log-cleanup-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleanup-lock.d.ts","sourceRoot":"","sources":["../src/log-cleanup-lock.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA6BjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAoBhG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAK1D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
function processIsDead(pid) {
|
|
5
|
+
try {
|
|
6
|
+
process.kill(pid, 0);
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
return error.code === 'ESRCH';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function recoverStaleLock(path, now, staleMs) {
|
|
14
|
+
try {
|
|
15
|
+
const stat = lstatSync(path);
|
|
16
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
17
|
+
return false;
|
|
18
|
+
const contents = readFileSync(path, 'utf8');
|
|
19
|
+
const parsed = JSON.parse(contents);
|
|
20
|
+
const pid = Number(parsed.pid);
|
|
21
|
+
const createdAt = Number(parsed.createdAt);
|
|
22
|
+
if (!Number.isSafeInteger(pid) || pid <= 0 || !Number.isFinite(createdAt))
|
|
23
|
+
return false;
|
|
24
|
+
if (!processIsDead(pid) && now - createdAt <= staleMs)
|
|
25
|
+
return false;
|
|
26
|
+
if (readFileSync(path, 'utf8') !== contents)
|
|
27
|
+
return false;
|
|
28
|
+
unlinkSync(path);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function acquireCleanupLock(root, now, staleMs) {
|
|
36
|
+
mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
37
|
+
const rootStat = lstatSync(root);
|
|
38
|
+
if (!rootStat.isDirectory() || rootStat.isSymbolicLink())
|
|
39
|
+
return { status: 'busy' };
|
|
40
|
+
const path = join(root, '.cleanup.lock');
|
|
41
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
42
|
+
const contents = JSON.stringify({ pid: process.pid, createdAt: now, token: randomUUID() });
|
|
43
|
+
let fd;
|
|
44
|
+
try {
|
|
45
|
+
fd = openSync(path, 'wx', 0o600);
|
|
46
|
+
writeFileSync(fd, contents);
|
|
47
|
+
return { status: 'acquired', fd, path, contents };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (fd !== undefined)
|
|
51
|
+
try {
|
|
52
|
+
closeSync(fd);
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
if (error.code !== 'EEXIST')
|
|
56
|
+
return { status: 'busy' };
|
|
57
|
+
if (attempt === 0 && existsSync(path) && recoverStaleLock(path, now, staleMs))
|
|
58
|
+
continue;
|
|
59
|
+
return { status: 'busy' };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { status: 'busy' };
|
|
63
|
+
}
|
|
64
|
+
export function releaseCleanupLock(lock) {
|
|
65
|
+
try {
|
|
66
|
+
closeSync(lock.fd);
|
|
67
|
+
}
|
|
68
|
+
catch { }
|
|
69
|
+
try {
|
|
70
|
+
if (readFileSync(lock.path, 'utf8') === lock.contents)
|
|
71
|
+
unlinkSync(lock.path);
|
|
72
|
+
}
|
|
73
|
+
catch { }
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=log-cleanup-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleanup-lock.js","sourceRoot":"","sources":["../src/log-cleanup-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LogCleanupService, type LogCleanupResult } from './log-cleanup.js';
|
|
2
|
+
export interface CleanupCompensationOptions {
|
|
3
|
+
now?: number;
|
|
4
|
+
intervalMs?: number;
|
|
5
|
+
service?: LogCleanupService;
|
|
6
|
+
}
|
|
7
|
+
export declare function maybeRunDiagnosticLogCleanup(projectRoot: string, options?: CleanupCompensationOptions): LogCleanupResult | null;
|
|
8
|
+
export declare class DiagnosticLogCleanupScheduler {
|
|
9
|
+
private readonly service;
|
|
10
|
+
private timer;
|
|
11
|
+
constructor(service?: LogCleanupService);
|
|
12
|
+
start(input?: {
|
|
13
|
+
projectRoot?: string;
|
|
14
|
+
intervalMs?: number;
|
|
15
|
+
}): void;
|
|
16
|
+
stop(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=log-cleanup-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleanup-scheduler.d.ts","sourceRoot":"","sources":["../src/log-cleanup-scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAExG,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,0BAA+B,GACvC,gBAAgB,GAAG,IAAI,CAsBzB;AAED,qBAAa,6BAA6B;IAG5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,KAAK,CAA6B;gBAEb,OAAO,oBAA0B;IAE9D,KAAK,CAAC,KAAK,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAYtE,IAAI,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { DEFAULT_LOG_CLEANUP_POLICY, LogCleanupService } from './log-cleanup.js';
|
|
4
|
+
export function maybeRunDiagnosticLogCleanup(projectRoot, options = {}) {
|
|
5
|
+
const now = options.now ?? Date.now();
|
|
6
|
+
const logRoot = join(projectRoot, '.devflow', 'logs');
|
|
7
|
+
const statePath = join(logRoot, '.cleanup-state.json');
|
|
8
|
+
try {
|
|
9
|
+
if (existsSync(statePath)) {
|
|
10
|
+
const state = JSON.parse(readFileSync(statePath, 'utf8'));
|
|
11
|
+
const lastCleanupAt = Number(state.lastCleanupAt);
|
|
12
|
+
if (Number.isFinite(lastCleanupAt)
|
|
13
|
+
&& now - lastCleanupAt < (options.intervalMs ?? DEFAULT_LOG_CLEANUP_POLICY.compensationIntervalMs))
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch { }
|
|
18
|
+
const result = (options.service ?? new LogCleanupService()).cleanup({
|
|
19
|
+
projectRoot, trigger: 'compensation', mode: 'execute', now,
|
|
20
|
+
});
|
|
21
|
+
try {
|
|
22
|
+
mkdirSync(logRoot, { recursive: true, mode: 0o700 });
|
|
23
|
+
const temporary = `${statePath}.${process.pid}.tmp`;
|
|
24
|
+
writeFileSync(temporary, JSON.stringify({ lastCleanupAt: now, lastResult: result }), { mode: 0o600 });
|
|
25
|
+
renameSync(temporary, statePath);
|
|
26
|
+
}
|
|
27
|
+
catch { }
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
export class DiagnosticLogCleanupScheduler {
|
|
31
|
+
service;
|
|
32
|
+
timer;
|
|
33
|
+
constructor(service = new LogCleanupService()) {
|
|
34
|
+
this.service = service;
|
|
35
|
+
}
|
|
36
|
+
start(input = {}) {
|
|
37
|
+
if (this.timer)
|
|
38
|
+
return;
|
|
39
|
+
const run = (trigger) => {
|
|
40
|
+
try {
|
|
41
|
+
this.service.cleanup({ projectRoot: input.projectRoot, trigger, mode: 'execute' });
|
|
42
|
+
}
|
|
43
|
+
catch { }
|
|
44
|
+
};
|
|
45
|
+
run('startup');
|
|
46
|
+
this.timer = setInterval(() => run('periodic'), input.intervalMs ?? 60 * 60 * 1000);
|
|
47
|
+
this.timer.unref();
|
|
48
|
+
}
|
|
49
|
+
stop() {
|
|
50
|
+
if (this.timer)
|
|
51
|
+
clearInterval(this.timer);
|
|
52
|
+
this.timer = undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=log-cleanup-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleanup-scheduler.js","sourceRoot":"","sources":["../src/log-cleanup-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type DiagnosticLogKind = 'trace' | 'session' | 'metric' | 'error' | 'hook-debug' | 'http-error';
|
|
2
|
+
export type CleanupTrigger = 'startup' | 'periodic' | 'compensation' | 'manual';
|
|
3
|
+
export interface LogCleanupPolicy {
|
|
4
|
+
retentionDays: number;
|
|
5
|
+
maxFileBytes: number;
|
|
6
|
+
projectBudgetBytes: number;
|
|
7
|
+
globalBudgetBytes: number;
|
|
8
|
+
compensationIntervalMs: number;
|
|
9
|
+
lockStaleMs: number;
|
|
10
|
+
}
|
|
11
|
+
export interface DiagnosticLogCatalogEntry {
|
|
12
|
+
rootKind: 'project' | 'global';
|
|
13
|
+
relativePath: string;
|
|
14
|
+
kind: DiagnosticLogKind;
|
|
15
|
+
directory: boolean;
|
|
16
|
+
budgetGroup: 'project' | 'global';
|
|
17
|
+
}
|
|
18
|
+
export interface LogCleanupInput {
|
|
19
|
+
projectRoot?: string;
|
|
20
|
+
globalStateRoot?: string;
|
|
21
|
+
trigger: CleanupTrigger;
|
|
22
|
+
mode: 'dry-run' | 'execute';
|
|
23
|
+
policy?: Partial<LogCleanupPolicy>;
|
|
24
|
+
olderThanDays?: number;
|
|
25
|
+
maxBytes?: number;
|
|
26
|
+
now?: number;
|
|
27
|
+
activePaths?: ReadonlySet<string>;
|
|
28
|
+
scope?: 'project' | 'global' | 'all';
|
|
29
|
+
}
|
|
30
|
+
export interface LogCleanupResult {
|
|
31
|
+
trigger: CleanupTrigger;
|
|
32
|
+
scannedFiles: number;
|
|
33
|
+
deletedFiles: number;
|
|
34
|
+
rotatedFiles: number;
|
|
35
|
+
deletedBytes: number;
|
|
36
|
+
remainingBytes: number;
|
|
37
|
+
skippedFiles: number;
|
|
38
|
+
failureCount: number;
|
|
39
|
+
reasonCounts: Record<string, number>;
|
|
40
|
+
startedAt: number;
|
|
41
|
+
finishedAt: number;
|
|
42
|
+
}
|
|
43
|
+
export declare const DEFAULT_LOG_CLEANUP_POLICY: Readonly<LogCleanupPolicy>;
|
|
44
|
+
export declare function getDiagnosticLogCatalog(): readonly DiagnosticLogCatalogEntry[];
|
|
45
|
+
export declare class LogCleanupService {
|
|
46
|
+
cleanup(input: LogCleanupInput): LogCleanupResult;
|
|
47
|
+
private cleanupGroup;
|
|
48
|
+
}
|
|
49
|
+
export declare function rotateDiagnosticLogFile(input: {
|
|
50
|
+
path: string;
|
|
51
|
+
maxBytes: number;
|
|
52
|
+
maxFiles: number;
|
|
53
|
+
incomingBytes?: number;
|
|
54
|
+
}): {
|
|
55
|
+
rotated: boolean;
|
|
56
|
+
archivePath?: string;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=log-cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleanup.d.ts","sourceRoot":"","sources":["../src/log-cleanup.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;AACvG,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,SAAS,GAAG,QAAQ,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,gBAAgB,CAOhE,CAAC;AAWH,wBAAgB,uBAAuB,IAAI,SAAS,yBAAyB,EAAE,CAE9E;AAgED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB;IAsBjD,OAAO,CAAC,YAAY;CAoErB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAqB7C"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { chmodSync, existsSync, lstatSync, mkdirSync, readdirSync, renameSync, rmSync, statSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
3
|
+
import { getDevFlowStateRoot } from '@devflow-tools/sdk';
|
|
4
|
+
import { acquireCleanupLock, releaseCleanupLock } from './log-cleanup-lock.js';
|
|
5
|
+
export const DEFAULT_LOG_CLEANUP_POLICY = Object.freeze({
|
|
6
|
+
retentionDays: 30,
|
|
7
|
+
maxFileBytes: 50 * 1024 * 1024,
|
|
8
|
+
projectBudgetBytes: 256 * 1024 * 1024,
|
|
9
|
+
globalBudgetBytes: 256 * 1024 * 1024,
|
|
10
|
+
compensationIntervalMs: 60 * 60 * 1000,
|
|
11
|
+
lockStaleMs: 30 * 1000,
|
|
12
|
+
});
|
|
13
|
+
const CATALOG = Object.freeze([
|
|
14
|
+
{ rootKind: 'project', relativePath: 'traces', kind: 'trace', directory: true, budgetGroup: 'project' },
|
|
15
|
+
{ rootKind: 'project', relativePath: 'sessions', kind: 'session', directory: true, budgetGroup: 'project' },
|
|
16
|
+
{ rootKind: 'project', relativePath: 'errors.jsonl', kind: 'error', directory: false, budgetGroup: 'project' },
|
|
17
|
+
{ rootKind: 'project', relativePath: 'metrics.jsonl', kind: 'metric', directory: false, budgetGroup: 'project' },
|
|
18
|
+
{ rootKind: 'global', relativePath: 'logs/hook-debug', kind: 'hook-debug', directory: true, budgetGroup: 'global' },
|
|
19
|
+
{ rootKind: 'global', relativePath: 'errors/http-errors.log', kind: 'http-error', directory: false, budgetGroup: 'global' },
|
|
20
|
+
]);
|
|
21
|
+
export function getDiagnosticLogCatalog() {
|
|
22
|
+
return CATALOG;
|
|
23
|
+
}
|
|
24
|
+
function count(result, reason) {
|
|
25
|
+
result.reasonCounts[reason] = (result.reasonCounts[reason] ?? 0) + 1;
|
|
26
|
+
}
|
|
27
|
+
function inside(root, path) {
|
|
28
|
+
const rel = relative(resolve(root), resolve(path));
|
|
29
|
+
return rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..' && !isAbsolute(rel));
|
|
30
|
+
}
|
|
31
|
+
function parsedDate(path) {
|
|
32
|
+
const match = path.match(/(?:^|[/\\])(\d{4}-\d{2}-\d{2})(?:[/\\]|-|$)/u);
|
|
33
|
+
if (!match)
|
|
34
|
+
return undefined;
|
|
35
|
+
const value = Date.parse(`${match[1]}T00:00:00.000Z`);
|
|
36
|
+
return Number.isFinite(value) ? value : undefined;
|
|
37
|
+
}
|
|
38
|
+
function isArchive(path) {
|
|
39
|
+
return /\.\d+(?:\.jsonl)?$/u.test(path) || /\.jsonl\.\d+$/u.test(path) || /-session\.\d+\.jsonl$/u.test(path);
|
|
40
|
+
}
|
|
41
|
+
function discoverFiles(path, expectedRoot, result) {
|
|
42
|
+
if (!existsSync(path) || !inside(expectedRoot, path))
|
|
43
|
+
return [];
|
|
44
|
+
let stat;
|
|
45
|
+
try {
|
|
46
|
+
stat = lstatSync(path);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
result.skippedFiles += 1;
|
|
50
|
+
count(result, 'stat_failed');
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
if (stat.isSymbolicLink()) {
|
|
54
|
+
result.skippedFiles += 1;
|
|
55
|
+
count(result, 'symlink');
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
if (stat.isFile())
|
|
59
|
+
return [path];
|
|
60
|
+
if (!stat.isDirectory()) {
|
|
61
|
+
result.skippedFiles += 1;
|
|
62
|
+
count(result, 'not_regular');
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const files = [];
|
|
66
|
+
for (const name of readdirSync(path)) {
|
|
67
|
+
if (name === '.cleanup.lock' || name === '.cleanup-state.json' || name.includes('.tmp'))
|
|
68
|
+
continue;
|
|
69
|
+
files.push(...discoverFiles(join(path, name), expectedRoot, result));
|
|
70
|
+
}
|
|
71
|
+
return files;
|
|
72
|
+
}
|
|
73
|
+
function discoverFileAndArchives(target, expectedRoot, result) {
|
|
74
|
+
const directory = dirname(target);
|
|
75
|
+
if (!existsSync(directory) || !inside(expectedRoot, directory))
|
|
76
|
+
return [];
|
|
77
|
+
const targetName = basename(target);
|
|
78
|
+
const files = [];
|
|
79
|
+
for (const name of readdirSync(directory)) {
|
|
80
|
+
if (name !== targetName && !name.startsWith(`${targetName}.`))
|
|
81
|
+
continue;
|
|
82
|
+
const path = join(directory, name);
|
|
83
|
+
try {
|
|
84
|
+
const stat = lstatSync(path);
|
|
85
|
+
if (stat.isFile() && !stat.isSymbolicLink())
|
|
86
|
+
files.push(path);
|
|
87
|
+
else {
|
|
88
|
+
result.skippedFiles += 1;
|
|
89
|
+
count(result, stat.isSymbolicLink() ? 'symlink' : 'not_regular');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
result.skippedFiles += 1;
|
|
94
|
+
count(result, 'stat_failed');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return files;
|
|
98
|
+
}
|
|
99
|
+
export class LogCleanupService {
|
|
100
|
+
cleanup(input) {
|
|
101
|
+
const startedAt = input.now ?? Date.now();
|
|
102
|
+
const policy = { ...DEFAULT_LOG_CLEANUP_POLICY, ...input.policy };
|
|
103
|
+
if (input.olderThanDays !== undefined)
|
|
104
|
+
policy.retentionDays = input.olderThanDays;
|
|
105
|
+
if (input.maxBytes !== undefined) {
|
|
106
|
+
policy.projectBudgetBytes = input.maxBytes;
|
|
107
|
+
policy.globalBudgetBytes = input.maxBytes;
|
|
108
|
+
}
|
|
109
|
+
const result = {
|
|
110
|
+
trigger: input.trigger, scannedFiles: 0, deletedFiles: 0, rotatedFiles: 0,
|
|
111
|
+
deletedBytes: 0, remainingBytes: 0, skippedFiles: 0, failureCount: 0,
|
|
112
|
+
reasonCounts: {}, startedAt, finishedAt: startedAt,
|
|
113
|
+
};
|
|
114
|
+
const projectLogRoot = resolve(input.projectRoot ?? process.cwd(), '.devflow', 'logs');
|
|
115
|
+
const globalStateRoot = resolve(input.globalStateRoot ?? getDevFlowStateRoot());
|
|
116
|
+
const scope = input.scope ?? 'all';
|
|
117
|
+
if (scope !== 'global')
|
|
118
|
+
this.cleanupGroup('project', projectLogRoot, projectLogRoot, policy.projectBudgetBytes, input, policy, result);
|
|
119
|
+
if (scope !== 'project')
|
|
120
|
+
this.cleanupGroup('global', join(globalStateRoot, 'logs'), globalStateRoot, policy.globalBudgetBytes, input, policy, result);
|
|
121
|
+
result.finishedAt = input.now ?? Date.now();
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
cleanupGroup(group, lockRoot, catalogRoot, budget, input, policy, result) {
|
|
125
|
+
const entries = CATALOG.filter(entry => entry.rootKind === group);
|
|
126
|
+
if (!entries.some(entry => existsSync(join(catalogRoot, entry.relativePath))))
|
|
127
|
+
return;
|
|
128
|
+
const lock = acquireCleanupLock(lockRoot, result.startedAt, policy.lockStaleMs);
|
|
129
|
+
if (lock.status === 'busy') {
|
|
130
|
+
count(result, 'lock_busy');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const cutoff = result.startedAt - policy.retentionDays * 24 * 60 * 60 * 1000;
|
|
135
|
+
const candidates = [];
|
|
136
|
+
for (const entry of entries) {
|
|
137
|
+
const target = join(catalogRoot, entry.relativePath);
|
|
138
|
+
const paths = entry.directory
|
|
139
|
+
? discoverFiles(target, catalogRoot, result)
|
|
140
|
+
: discoverFileAndArchives(target, catalogRoot, result);
|
|
141
|
+
for (const path of paths) {
|
|
142
|
+
result.scannedFiles += 1;
|
|
143
|
+
try {
|
|
144
|
+
const stat = statSync(path);
|
|
145
|
+
const date = parsedDate(path);
|
|
146
|
+
const ageTime = date === undefined ? stat.mtimeMs : Math.max(date, stat.mtimeMs);
|
|
147
|
+
const activeBase = !isArchive(path) && (entry.kind === 'metric' || entry.kind === 'error' || entry.kind === 'http-error' || entry.kind === 'hook-debug');
|
|
148
|
+
const active = input.activePaths?.has(resolve(path)) ?? false;
|
|
149
|
+
const today = new Date(result.startedAt).toISOString().slice(0, 10);
|
|
150
|
+
const currentDayLog = path.includes(today);
|
|
151
|
+
const protectedFile = activeBase || active || currentDayLog;
|
|
152
|
+
if (protectedFile) {
|
|
153
|
+
result.skippedFiles += 1;
|
|
154
|
+
count(result, active ? 'active' : 'protected');
|
|
155
|
+
}
|
|
156
|
+
candidates.push({
|
|
157
|
+
path, kind: entry.kind, bytes: stat.size, ageTime,
|
|
158
|
+
expired: !protectedFile && ageTime < cutoff,
|
|
159
|
+
archive: isArchive(path), protected: protectedFile,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
result.skippedFiles += 1;
|
|
164
|
+
count(result, 'stat_failed');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
let remaining = candidates.reduce((sum, item) => sum + item.bytes, 0);
|
|
169
|
+
const planned = new Set();
|
|
170
|
+
for (const item of [...candidates].filter(item => item.expired).sort((a, b) => a.ageTime - b.ageTime))
|
|
171
|
+
planned.add(item.path);
|
|
172
|
+
let afterExpired = remaining - candidates.filter(item => planned.has(item.path)).reduce((sum, item) => sum + item.bytes, 0);
|
|
173
|
+
if (afterExpired > budget) {
|
|
174
|
+
for (const item of [...candidates].filter(item => item.archive && !item.protected && !planned.has(item.path)).sort((a, b) => a.ageTime - b.ageTime)) {
|
|
175
|
+
planned.add(item.path);
|
|
176
|
+
afterExpired -= item.bytes;
|
|
177
|
+
if (afterExpired <= budget)
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (afterExpired > budget) {
|
|
182
|
+
for (const item of [...candidates].filter(item => !item.protected && !planned.has(item.path)).sort((a, b) => a.ageTime - b.ageTime)) {
|
|
183
|
+
planned.add(item.path);
|
|
184
|
+
afterExpired -= item.bytes;
|
|
185
|
+
if (afterExpired <= budget)
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
for (const item of candidates) {
|
|
190
|
+
if (!planned.has(item.path))
|
|
191
|
+
continue;
|
|
192
|
+
if (input.mode === 'execute') {
|
|
193
|
+
try {
|
|
194
|
+
rmSync(item.path, { force: true });
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
result.failureCount += 1;
|
|
198
|
+
count(result, 'delete_failed');
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
result.deletedFiles += 1;
|
|
203
|
+
result.deletedBytes += item.bytes;
|
|
204
|
+
remaining -= item.bytes;
|
|
205
|
+
}
|
|
206
|
+
result.remainingBytes += Math.max(0, remaining);
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
releaseCleanupLock(lock);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
export function rotateDiagnosticLogFile(input) {
|
|
214
|
+
const path = resolve(input.path);
|
|
215
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
216
|
+
const currentBytes = existsSync(path) ? statSync(path).size : 0;
|
|
217
|
+
if (currentBytes === 0 || currentBytes + (input.incomingBytes ?? 0) <= input.maxBytes)
|
|
218
|
+
return { rotated: false };
|
|
219
|
+
const maxFiles = Math.max(1, Math.floor(input.maxFiles));
|
|
220
|
+
if (maxFiles === 1) {
|
|
221
|
+
rmSync(path, { force: true });
|
|
222
|
+
writeFileSync(path, '', { mode: 0o600 });
|
|
223
|
+
return { rotated: true };
|
|
224
|
+
}
|
|
225
|
+
rmSync(`${path}.${maxFiles - 1}`, { force: true });
|
|
226
|
+
for (let index = maxFiles - 2; index >= 1; index -= 1) {
|
|
227
|
+
const source = `${path}.${index}`;
|
|
228
|
+
if (existsSync(source))
|
|
229
|
+
renameSync(source, `${path}.${index + 1}`);
|
|
230
|
+
}
|
|
231
|
+
const archivePath = `${path}.1`;
|
|
232
|
+
renameSync(path, archivePath);
|
|
233
|
+
writeFileSync(path, '', { mode: 0o600 });
|
|
234
|
+
try {
|
|
235
|
+
chmodSync(path, 0o600);
|
|
236
|
+
}
|
|
237
|
+
catch { }
|
|
238
|
+
return { rotated: true, archivePath };
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=log-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleanup.js","sourceRoot":"","sources":["../src/log-cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/log-writer.d.ts
CHANGED
|
@@ -54,11 +54,11 @@ export declare class LogWriter {
|
|
|
54
54
|
private sessionFd;
|
|
55
55
|
private sessionFileSize;
|
|
56
56
|
private activeSpans;
|
|
57
|
+
private activePaths;
|
|
57
58
|
private noop;
|
|
58
59
|
constructor(projectRoot: string);
|
|
59
60
|
private ensureDirs;
|
|
60
61
|
private openSessionFile;
|
|
61
|
-
private cleanupStaleFiles;
|
|
62
62
|
startRun(meta: RunMeta): string;
|
|
63
63
|
startStep(runId: string, meta: StepMeta): string;
|
|
64
64
|
endStep(stepId: string, summary: StepEnd): void;
|
package/dist/log-writer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-writer.d.ts","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log-writer.d.ts","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/log-writer.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync, openSync, writeSync, closeSync,
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, openSync, writeSync, closeSync, statSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
|
+
import { LogCleanupService, rotateDiagnosticLogFile } from './log-cleanup.js';
|
|
3
4
|
const SENSITIVE_KEYS = new Set(["password", "apikey", "token", "secret", "authorization"]);
|
|
4
5
|
const DEFAULT_MAX_OUTPUT_BYTES = 16384;
|
|
5
6
|
const MAX_FILE_BYTES = 50 * 1024 * 1024;
|
|
6
|
-
const
|
|
7
|
+
const MAX_ARCHIVE_FILES = 5;
|
|
7
8
|
export class LogWriter {
|
|
8
9
|
logRoot;
|
|
9
10
|
tracesDir;
|
|
@@ -14,6 +15,7 @@ export class LogWriter {
|
|
|
14
15
|
sessionFd = null;
|
|
15
16
|
sessionFileSize = 0;
|
|
16
17
|
activeSpans = new Map();
|
|
18
|
+
activePaths = new Set();
|
|
17
19
|
noop = false;
|
|
18
20
|
constructor(projectRoot) {
|
|
19
21
|
this.logRoot = join(projectRoot, ".devflow", "logs");
|
|
@@ -25,7 +27,16 @@ export class LogWriter {
|
|
|
25
27
|
try {
|
|
26
28
|
this.ensureDirs();
|
|
27
29
|
this.openSessionFile();
|
|
28
|
-
|
|
30
|
+
try {
|
|
31
|
+
new LogCleanupService().cleanup({
|
|
32
|
+
projectRoot,
|
|
33
|
+
trigger: 'startup',
|
|
34
|
+
mode: 'execute',
|
|
35
|
+
activePaths: this.activePaths,
|
|
36
|
+
scope: 'project',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch { /* cleanup must never disable logging */ }
|
|
29
40
|
}
|
|
30
41
|
catch {
|
|
31
42
|
this.noop = true;
|
|
@@ -46,40 +57,13 @@ export class LogWriter {
|
|
|
46
57
|
const fpath = join(this.sessionsDir, fname);
|
|
47
58
|
try {
|
|
48
59
|
this.sessionFd = openSync(fpath, "a");
|
|
60
|
+
this.activePaths.add(fpath);
|
|
49
61
|
this.sessionFileSize = existsSync(fpath) ? statSync(fpath).size : 0;
|
|
50
62
|
}
|
|
51
63
|
catch {
|
|
52
64
|
this.sessionFd = null;
|
|
53
65
|
}
|
|
54
66
|
}
|
|
55
|
-
cleanupStaleFiles() {
|
|
56
|
-
const cutoff = Date.now() - RETENTION_DAYS * 24 * 60 * 60 * 1000;
|
|
57
|
-
try {
|
|
58
|
-
if (existsSync(this.tracesDir)) {
|
|
59
|
-
for (const dir of readdirSync(this.tracesDir)) {
|
|
60
|
-
const dp = join(this.tracesDir, dir);
|
|
61
|
-
try {
|
|
62
|
-
if (statSync(dp).isDirectory() && statSync(dp).mtimeMs < cutoff) {
|
|
63
|
-
rmSync(dp, { recursive: true, force: true });
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch { /* skip individual entry errors */ }
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (existsSync(this.sessionsDir)) {
|
|
70
|
-
for (const f of readdirSync(this.sessionsDir)) {
|
|
71
|
-
const fp = join(this.sessionsDir, f);
|
|
72
|
-
try {
|
|
73
|
-
if (existsSync(fp) && statSync(fp).mtimeMs < cutoff) {
|
|
74
|
-
rmSync(fp, { force: true });
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch { /* skip */ }
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch { /* best effort */ }
|
|
82
|
-
}
|
|
83
67
|
// ── Public API ──
|
|
84
68
|
startRun(meta) {
|
|
85
69
|
if (this.noop)
|
|
@@ -244,6 +228,7 @@ export class LogWriter {
|
|
|
244
228
|
catch { }
|
|
245
229
|
this.sessionFd = null;
|
|
246
230
|
}
|
|
231
|
+
this.activePaths.clear();
|
|
247
232
|
}
|
|
248
233
|
// ── Private helpers ──
|
|
249
234
|
writeSpan(data, overrideRunId) {
|
|
@@ -257,17 +242,8 @@ export class LogWriter {
|
|
|
257
242
|
const fname = `${resolvedRunId || "orphan"}.jsonl`;
|
|
258
243
|
const fpath = join(traceDayDir, fname);
|
|
259
244
|
// Rotate if too large
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
let n = 2;
|
|
263
|
-
while (existsSync(join(traceDayDir, `${base}.${n}.jsonl`)))
|
|
264
|
-
n++;
|
|
265
|
-
try {
|
|
266
|
-
rmSync(fpath, { force: true });
|
|
267
|
-
}
|
|
268
|
-
catch { } // write fresh — large files already rotated
|
|
269
|
-
// Alternative: rename to keep old content
|
|
270
|
-
}
|
|
245
|
+
rotateDiagnosticLogFile({ path: fpath, maxBytes: MAX_FILE_BYTES, maxFiles: MAX_ARCHIVE_FILES });
|
|
246
|
+
this.activePaths.add(fpath);
|
|
271
247
|
try {
|
|
272
248
|
appendFileSync(fpath, JSON.stringify(data) + "\n", "utf-8");
|
|
273
249
|
}
|
|
@@ -278,6 +254,8 @@ export class LogWriter {
|
|
|
278
254
|
writeSessionEvent(data) {
|
|
279
255
|
const today = new Date().toISOString().slice(0, 10);
|
|
280
256
|
if (today !== this.sessionDate) {
|
|
257
|
+
const previous = join(this.sessionsDir, `${this.sessionDate}-session.jsonl`);
|
|
258
|
+
this.activePaths.delete(previous);
|
|
281
259
|
this.sessionDate = today;
|
|
282
260
|
if (this.sessionFd !== null) {
|
|
283
261
|
try {
|
|
@@ -296,7 +274,9 @@ export class LogWriter {
|
|
|
296
274
|
closeSync(this.sessionFd);
|
|
297
275
|
const n = Date.now();
|
|
298
276
|
const fname = `${today}-session.${n}.jsonl`;
|
|
299
|
-
|
|
277
|
+
const rotatedPath = join(this.sessionsDir, fname);
|
|
278
|
+
this.sessionFd = openSync(rotatedPath, "a");
|
|
279
|
+
this.activePaths.add(rotatedPath);
|
|
300
280
|
this.sessionFileSize = 0;
|
|
301
281
|
}
|
|
302
282
|
}
|
|
@@ -308,7 +288,14 @@ export class LogWriter {
|
|
|
308
288
|
}
|
|
309
289
|
writeLine(fpath, data) {
|
|
310
290
|
try {
|
|
311
|
-
|
|
291
|
+
const line = JSON.stringify(data) + "\n";
|
|
292
|
+
rotateDiagnosticLogFile({
|
|
293
|
+
path: fpath,
|
|
294
|
+
maxBytes: MAX_FILE_BYTES,
|
|
295
|
+
maxFiles: MAX_ARCHIVE_FILES,
|
|
296
|
+
incomingBytes: Buffer.byteLength(line),
|
|
297
|
+
});
|
|
298
|
+
appendFileSync(fpath, line, "utf-8");
|
|
312
299
|
}
|
|
313
300
|
catch { /* best effort */ }
|
|
314
301
|
}
|
package/dist/log-writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-writer.js","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC1H,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;AAC3F,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,MAAM,cAAc,GAAG,EAAE,CAAC;AAkE1B,MAAM,OAAO,SAAS;IACZ,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,SAAS,GAAkB,IAAI,CAAC;IAChC,eAAe,GAAG,CAAC,CAAC;IACpB,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC3C,IAAI,GAAG,KAAK,CAAC;IAErB,YAAY,WAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpF,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAEO,eAAe;QACrB,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,gBAAgB,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACjE,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBACrC,IAAI,CAAC;wBACH,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;4BAChE,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC/C,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,CAAC;wBACH,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;4BACpD,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAED,mBAAmB;IAEnB,QAAQ,CAAC,IAAa;QACpB,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,UAAU,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE;YAC1B,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK;SACrG,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzH,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,IAAc;QACrC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,WAAW,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE;YAC3B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK;SACxG,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvG,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,OAAgB;QACtC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;YACjF,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;SACtD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,OAAe;QACnC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;YAC/D,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAoB;QAC3B,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QAErH,qEAAqE;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QAE5D,0EAA0E;QAC1E,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,cAAc;QACd,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM;YACxF,KAAK,EAAE,SAAS;SACjB,EAAE,KAAK,CAAC,CAAC;QAEV,kBAAkB;QAClB,MAAM,QAAQ,GAA4B;YACxC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;YACtD,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;SACjC,CAAC;QACF,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;YAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;QAClF,IAAI,MAAM,IAAI,IAAI;YAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7C,IAAI,WAAW,IAAI,IAAI;YAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5D,IAAI,eAAe,IAAI,IAAI;YAAE,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;QACxE,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QAElC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAE9C,kCAAkC;QAClC,IAAI,CAAC,iBAAiB,CAAC;YACrB,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI;YACjE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,QAAQ,GAA4B;YACxC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;SAC7D,CAAC;QACF,IAAI,WAAW,IAAI,IAAI;YAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5D,IAAI,eAAe,IAAI,IAAI;YAAE,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;QACxE,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEjC,aAAa;QACb,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;QAC/G,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAA4B,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC5E,IAAI,WAAW,IAAI,IAAI;YAAE,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9D,IAAI,eAAe,IAAI,IAAI;YAAE,UAAU,CAAC,eAAe,GAAG,eAAe,CAAC;QAC1E,IAAI,MAAM,IAAI,IAAI;YAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/C,IAAI,KAAK;YAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,KAAmB;QACzB,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,KAAK,EAAE;YAC3E,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;YACtC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;SACnE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,QAAQ,GAA4B;YACxC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,KAAK,EAAE;YAC3E,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxC,CAAC;QACF,IAAI,KAAK,CAAC,QAAQ;YAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI;YAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAgB;QACpB,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7H,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK;QACH,uBAAuB;QACvB,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,CAAC;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACtF,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;oBAChE,UAAU,EAAE,QAAQ;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,wBAAwB;IAEhB,SAAS,CAAC,IAA6B,EAAE,aAAsB;QACrE,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAS,CAAC,WAAW,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;QACrC,MAAM,aAAa,GAAG,aAAa;eAC9B,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,GAAG,aAAa,IAAI,QAAQ,QAAQ,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEvC,sBAAsB;QACtB,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAAE,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC;gBAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC,CAAC,4CAA4C;YAC7F,0CAA0C;QAC5C,CAAC;QAED,IAAI,CAAC;YACH,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,IAA6B;QACrD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAAC,CAAC;YAC5E,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACzC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,eAAe,GAAG,cAAc,EAAE,CAAC;oBAC1C,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACrB,MAAM,KAAK,GAAG,GAAG,KAAK,YAAY,CAAC,QAAQ,CAAC;oBAC5C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC9D,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,IAA6B;QAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAEO,SAAS,CAAC,KAAa,EAAE,IAA6B;QAC5D,IAAI,CAAC;YACH,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAEO,SAAS,CAAC,MAAc;QAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,OAAO,EAAE,YAAY,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;IACnC,CAAC;IAEO,QAAQ,CAAC,GAAY;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACpF,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,QAAQ,CAAC,GAAY;QAC3B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,wBAAwB,EAAE,CAAC;gBAC/D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,CAAC;YAC/H,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,GAAG,GAAG,wBAAwB,EAAE,CAAC;YACnC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,MAAM,CAAC,GAAY;QACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QAExC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YAC1E,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;YACjC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,6BAA6B;AAC7B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;AAEhD,MAAM,UAAU,YAAY,CAAC,WAAoB;IAC/C,MAAM,IAAI,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5E,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"log-writer.js","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TaskAggregateEventV1, TaskRuntimeSnapshotV2 } from '@devflow-tools/sdk';
|
|
2
|
+
export declare class SemanticRuntimeEventProjector {
|
|
3
|
+
project(input: {
|
|
4
|
+
event: TaskAggregateEventV1;
|
|
5
|
+
snapshot: TaskRuntimeSnapshotV2;
|
|
6
|
+
replayed: boolean;
|
|
7
|
+
}): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=runtime-event-projector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-event-projector.d.ts","sourceRoot":"","sources":["../src/runtime-event-projector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,qBAAa,6BAA6B;IACxC,OAAO,CAAC,KAAK,EAAE;QACb,KAAK,EAAE,oBAAoB,CAAC;QAC5B,QAAQ,EAAE,qBAAqB,CAAC;QAChC,QAAQ,EAAE,OAAO,CAAC;KACnB,GAAG,IAAI;CAqCT"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { emitSemanticControlLog } from './semantic-log.js';
|
|
2
|
+
export class SemanticRuntimeEventProjector {
|
|
3
|
+
project(input) {
|
|
4
|
+
if (input.replayed)
|
|
5
|
+
return;
|
|
6
|
+
const identity = input.event.identity;
|
|
7
|
+
emitSemanticControlLog({
|
|
8
|
+
event: 'task.aggregate.event_committed', identity,
|
|
9
|
+
level: input.event.kind.endsWith('_failed') ? 'warn' : 'info', timestamp: input.event.createdAt,
|
|
10
|
+
data: {
|
|
11
|
+
eventId: input.event.eventId, kind: input.event.kind, revision: input.event.revision,
|
|
12
|
+
sequence: input.event.sequence, producer: input.event.producer,
|
|
13
|
+
snapshotHash: input.snapshot.snapshotHash,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
emitSemanticControlLog({
|
|
17
|
+
event: 'task.snapshot.projected', identity,
|
|
18
|
+
level: input.snapshot.terminal === 'failed' ? 'warn' : 'info', timestamp: input.snapshot.updatedAt,
|
|
19
|
+
data: {
|
|
20
|
+
revision: input.snapshot.revision, lastEventSequence: input.snapshot.lastEventSequence,
|
|
21
|
+
snapshotHash: input.snapshot.snapshotHash, taskDefinitionHash: input.snapshot.taskDefinitionHash,
|
|
22
|
+
activationSnapshotHash: input.snapshot.activationSnapshotHash, terminal: input.snapshot.terminal,
|
|
23
|
+
runtimeHealth: input.snapshot.runtimeHealth,
|
|
24
|
+
obligations: Object.fromEntries(Object.entries(input.snapshot.obligations).map(([name, value]) => [name, {
|
|
25
|
+
requirement: value.requirement, state: value.state,
|
|
26
|
+
...(value.reasonCode ? { reasonCode: value.reasonCode } : {}),
|
|
27
|
+
...(value.receiptId ? { receiptId: value.receiptId } : {}),
|
|
28
|
+
}])),
|
|
29
|
+
durableWorkCount: Object.keys(input.snapshot.durableWork).length,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
if (input.event.kind === 'action_lease_issued')
|
|
33
|
+
emitSemanticControlLog({
|
|
34
|
+
event: 'action.lease.transitioned', identity, level: 'info', timestamp: input.event.createdAt,
|
|
35
|
+
data: {
|
|
36
|
+
eventId: input.event.eventId, leaseId: input.event.payload.leaseId,
|
|
37
|
+
leaseHash: input.event.payload.leaseHash, fencingToken: input.event.payload.fencingToken,
|
|
38
|
+
state: 'issued',
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=runtime-event-projector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-event-projector.js","sourceRoot":"","sources":["../src/runtime-event-projector.ts"],"names":[],"mappings":"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"}
|
package/dist/semantic-log.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { SemanticControlLogEvent } from '@devflow-tools/sdk';
|
|
2
2
|
export declare function emitSemanticControlLog(event: SemanticControlLogEvent): void;
|
|
3
|
+
export declare function assertSemanticControlLogSafe(event: SemanticControlLogEvent): void;
|
|
3
4
|
//# sourceMappingURL=semantic-log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-log.d.ts","sourceRoot":"","sources":["../src/semantic-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAMlE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"semantic-log.d.ts","sourceRoot":"","sources":["../src/semantic-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAMlE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAgB3E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAGjF"}
|
package/dist/semantic-log.js
CHANGED
|
@@ -3,6 +3,7 @@ const MAX_STRING_LENGTH = 2_000;
|
|
|
3
3
|
const MAX_ARRAY_LENGTH = 64;
|
|
4
4
|
export function emitSemanticControlLog(event) {
|
|
5
5
|
try {
|
|
6
|
+
assertSemanticControlLogSafe(event);
|
|
6
7
|
getLogWriter(event.identity.projectRoot).event({
|
|
7
8
|
runId: `semantic:${event.identity.sessionId ?? event.identity.projectRoot}`,
|
|
8
9
|
level: event.level,
|
|
@@ -18,6 +19,36 @@ export function emitSemanticControlLog(event) {
|
|
|
18
19
|
// Observability must never alter business behavior.
|
|
19
20
|
}
|
|
20
21
|
}
|
|
22
|
+
export function assertSemanticControlLogSafe(event) {
|
|
23
|
+
inspectSensitive(event.data, 'data');
|
|
24
|
+
inspectSensitive(event.identity, 'identity');
|
|
25
|
+
}
|
|
26
|
+
function inspectSensitive(value, path, depth = 0) {
|
|
27
|
+
if (depth > 8 || value == null)
|
|
28
|
+
return;
|
|
29
|
+
if (typeof value === 'string') {
|
|
30
|
+
if (/\bBearer\s+[A-Za-z0-9._~+/-]+=*|\b(?:sk|ghp|github_pat)_[A-Za-z0-9_-]{12,}/u.test(value)) {
|
|
31
|
+
throw new Error(`SEMANTIC_LOG_SECRET_REJECTED:${path}`);
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(value)) {
|
|
36
|
+
value.forEach((item, index) => inspectSensitive(item, `${path}[${index}]`, depth + 1));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (typeof value !== 'object')
|
|
40
|
+
return;
|
|
41
|
+
for (const [key, item] of Object.entries(value)) {
|
|
42
|
+
if (SENSITIVE_KEYS.has(key))
|
|
43
|
+
throw new Error(`SEMANTIC_LOG_SENSITIVE_FIELD:${path}.${key}`);
|
|
44
|
+
inspectSensitive(item, `${path}.${key}`, depth + 1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const SENSITIVE_KEYS = new Set([
|
|
48
|
+
'prompt', 'rawPrompt', 'normalizedPrompt', 'memoryValue', 'sourceBody', 'sourceText',
|
|
49
|
+
'markdown', 'content', 'excerpt', 'quote', 'secret', 'apiKey', 'authorization',
|
|
50
|
+
'vector', 'embedding', 'evidence',
|
|
51
|
+
]);
|
|
21
52
|
function boundValue(value, depth = 0) {
|
|
22
53
|
if (depth > 5)
|
|
23
54
|
return '[depth-limited]';
|
package/dist/semantic-log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-log.js","sourceRoot":"","sources":["../src/semantic-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,MAAM,UAAU,sBAAsB,CAAC,KAA8B;IACnE,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YAC7C,KAAK,EAAE,YAAY,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC3E,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,IAAI,EAAE,UAAU,CAAC;gBACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,GAAG,KAAK,CAAC,IAAI;aACd,CAA4B;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3G,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;SACvE,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"semantic-log.js","sourceRoot":"","sources":["../src/semantic-log.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/telemetry",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"clean": "rm -rf dist"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@devflow-tools/database": "0.
|
|
21
|
-
"@devflow-tools/sdk": "0.
|
|
20
|
+
"@devflow-tools/database": "0.18.1",
|
|
21
|
+
"@devflow-tools/sdk": "0.18.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"typescript": "^5.5.0",
|
|
@@ -27,5 +27,12 @@
|
|
|
27
27
|
"files": [
|
|
28
28
|
"dist"
|
|
29
29
|
],
|
|
30
|
-
"gitHead": "940c6c004c0ebb59abad3da9bc67137fa2d2a666"
|
|
30
|
+
"gitHead": "940c6c004c0ebb59abad3da9bc67137fa2d2a666",
|
|
31
|
+
"description": "Privacy-safe event and metric persistence for DevFlow runtimes.",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/shilongfeicool/dev-flow.git"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/shilongfeicool/dev-flow#readme"
|
|
31
38
|
}
|