@pellux/goodvibes-sdk 0.21.28 → 0.21.30
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/dist/_internal/platform/companion/companion-chat-rate-limiter.d.ts +7 -0
- package/dist/_internal/platform/companion/companion-chat-rate-limiter.d.ts.map +1 -1
- package/dist/_internal/platform/companion/companion-chat-rate-limiter.js +16 -0
- package/dist/_internal/platform/control-plane/gateway.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/gateway.js +7 -0
- package/dist/_internal/platform/control-plane/session-broker.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/session-broker.js +26 -1
- package/dist/_internal/platform/core/orchestrator.d.ts.map +1 -1
- package/dist/_internal/platform/core/orchestrator.js +2 -0
- package/dist/_internal/platform/daemon/http/router.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/http/router.js +20 -1
- package/dist/_internal/platform/daemon/http-listener.d.ts +25 -0
- package/dist/_internal/platform/daemon/http-listener.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/http-listener.js +91 -32
- package/dist/_internal/platform/hooks/runners/http.d.ts.map +1 -1
- package/dist/_internal/platform/hooks/runners/http.js +13 -0
- package/dist/_internal/platform/hooks/types.d.ts +7 -0
- package/dist/_internal/platform/hooks/types.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/webhooks.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/webhooks.js +10 -0
- package/dist/_internal/platform/runtime/bootstrap-runtime-events.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/bootstrap-runtime-events.js +2 -0
- package/dist/_internal/platform/runtime/events/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/events/index.js +33 -19
- package/dist/_internal/platform/runtime/integration/helpers.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/integration/helpers.js +5 -0
- package/dist/_internal/platform/runtime/perf/slo-collector.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/perf/slo-collector.js +2 -0
- package/dist/_internal/platform/runtime/telemetry/api.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/telemetry/api.js +10 -2
- package/dist/_internal/platform/scheduler/scheduler.d.ts +19 -2
- package/dist/_internal/platform/scheduler/scheduler.d.ts.map +1 -1
- package/dist/_internal/platform/scheduler/scheduler.js +59 -23
- package/dist/_internal/platform/security/user-auth.d.ts.map +1 -1
- package/dist/_internal/platform/security/user-auth.js +25 -12
- package/dist/_internal/platform/version.js +1 -1
- package/dist/_internal/platform/workspace/daemon-home.d.ts.map +1 -1
- package/dist/_internal/platform/workspace/daemon-home.js +35 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-runtime-events.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/bootstrap-runtime-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,KAAK,EAA6B,eAAe,EAAiB,MAAM,mBAAmB,CAAC;AACnG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IACjE,QAAQ,CAAC,sBAAsB,EAAE,MAAM,wBAAwB,GAAG,IAAI,CAAC;IACvE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAoED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,6BAA6B,GACrC;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"bootstrap-runtime-events.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/bootstrap-runtime-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,KAAK,EAA6B,eAAe,EAAiB,MAAM,mBAAmB,CAAC;AACnG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IACjE,QAAQ,CAAC,sBAAsB,EAAE,MAAM,wBAAwB,GAAG,IAAI,CAAC;IACvE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAoED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,6BAA6B,GACrC;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAsKzG;AAED,MAAM,MAAM,kCAAkC,GAAG,6BAA6B,CAAC;AAC/E,eAAO,MAAM,8BAA8B,kCAA4B,CAAC"}
|
|
@@ -194,6 +194,8 @@ export function registerHostRuntimeEvents(options) {
|
|
|
194
194
|
});
|
|
195
195
|
requestRender();
|
|
196
196
|
}, AGENT_STATUS_INTERVAL_MS);
|
|
197
|
+
// Don't block clean process exit (PERF-07).
|
|
198
|
+
agentStatusIntervalRef.value.unref?.();
|
|
197
199
|
return { unsubs, agentStatusIntervalRef };
|
|
198
200
|
}
|
|
199
201
|
export const registerBootstrapRuntimeEvents = registerHostRuntimeEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,30 +92,44 @@ export class RuntimeEventBus {
|
|
|
92
92
|
const typeHandlers = typeSet ? Array.from(typeSet) : [];
|
|
93
93
|
const domainSet = this._domainListeners.get(domain);
|
|
94
94
|
const domainHandlers = domainSet ? Array.from(domainSet) : [];
|
|
95
|
+
// OBS-14: Dispatch each subscriber in its own microtask so a slow or
|
|
96
|
+
// throwing subscriber cannot block the emitter. Errors are caught and
|
|
97
|
+
// logged per-subscriber; a single bad handler never cascades to others.
|
|
95
98
|
// Dispatch to per-type listeners
|
|
96
99
|
for (const handler of typeHandlers) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
const h = handler;
|
|
101
|
+
const ev = envelope;
|
|
102
|
+
const evType = envelope.type;
|
|
103
|
+
queueMicrotask(() => {
|
|
104
|
+
try {
|
|
105
|
+
h(ev);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
logger.error('[RuntimeEventBus] listener error', {
|
|
109
|
+
eventType: evType,
|
|
110
|
+
error: summarizeError(err),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
106
114
|
}
|
|
107
115
|
// Dispatch to per-domain listeners
|
|
108
116
|
for (const handler of domainHandlers) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
const h = handler;
|
|
118
|
+
const ev = envelope;
|
|
119
|
+
const evType = envelope.type;
|
|
120
|
+
const d = domain;
|
|
121
|
+
queueMicrotask(() => {
|
|
122
|
+
try {
|
|
123
|
+
h(ev);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
logger.error('[RuntimeEventBus] domain listener error', {
|
|
127
|
+
domain: d,
|
|
128
|
+
eventType: evType,
|
|
129
|
+
error: summarizeError(err),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
119
133
|
}
|
|
120
134
|
}
|
|
121
135
|
_off(eventType, callback) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/integration/helpers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/integration/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -509,11 +509,16 @@ export class IntegrationHelperService {
|
|
|
509
509
|
const stream = new ReadableStream({
|
|
510
510
|
start: (controller) => {
|
|
511
511
|
const unsubs = selectedDomains.map((domain) => this.context.runtimeBus.onDomain(domain, (envelope) => {
|
|
512
|
+
// PERF-06: Drop event if the stream buffer is full (backpressure guard).
|
|
513
|
+
if ((controller.desiredSize ?? 1) <= 0)
|
|
514
|
+
return;
|
|
512
515
|
controller.enqueue(encoder.encode(`event: ${domain}\ndata: ${JSON.stringify(serializeEnvelope(envelope))}\n\n`));
|
|
513
516
|
}));
|
|
514
517
|
const heartbeat = setInterval(() => {
|
|
515
518
|
controller.enqueue(encoder.encode(': heartbeat\n\n'));
|
|
516
519
|
}, 15_000);
|
|
520
|
+
// Don't block clean process exit (PERF-07).
|
|
521
|
+
heartbeat.unref?.();
|
|
517
522
|
teardown = () => {
|
|
518
523
|
clearInterval(heartbeat);
|
|
519
524
|
for (const unsub of unsubs)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slo-collector.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/perf/slo-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAyC,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qDAAqD;AACrD,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AA8DX;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAClD,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAClD,kGAAkG;IAClG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAgB;IAEnD,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,4FAA4F;IAC5F,OAAO,CAAC,mBAAmB,CAAuB;IAClD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAEhE,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,uDAAuD;IACvD,OAAO,CAAC,WAAW,CAA+C;gBAEtD,GAAG,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"slo-collector.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/perf/slo-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAyC,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qDAAqD;AACrD,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AA8DX;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAClD,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAClD,kGAAkG;IAClG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAgB;IAEnD,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,4FAA4F;IAC5F,OAAO,CAAC,mBAAmB,CAAuB;IAClD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAEhE,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,uDAAuD;IACvD,OAAO,CAAC,WAAW,CAA+C;gBAEtD,GAAG,EAAE,eAAe;IAOhC;;OAEG;IACH,OAAO,CAAC,UAAU;IA6IlB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAoBrB;;;;;;;;;OASG;IACI,UAAU,IAAI,UAAU,EAAE;IA8BjC;;;OAGG;IACI,eAAe,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAS1D;;;OAGG;IACI,OAAO,IAAI,IAAI;CAevB"}
|
|
@@ -109,6 +109,8 @@ export class SloCollector {
|
|
|
109
109
|
constructor(bus) {
|
|
110
110
|
this._subscribe(bus);
|
|
111
111
|
this._sweepTimer = setInterval(() => this._sweepPending(), SWEEP_INTERVAL_MS);
|
|
112
|
+
// Don't block clean process exit (PERF-07).
|
|
113
|
+
this._sweepTimer.unref?.();
|
|
112
114
|
}
|
|
113
115
|
/**
|
|
114
116
|
* Attach all event listeners to the bus.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/telemetry/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/telemetry/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpF,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAEV,YAAY,EAKb,MAAM,YAAY,CAAC;AAiCpB,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACpB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;QACnB,QAAQ,CAAC,QAAQ,EAAE;YACjB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;YACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;YACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;SACrB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAC7D,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAChE,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACxD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACxD,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;KACrD,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAYD,UAAU,0BAA0B;IAClC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;IACjE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA6B;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAC3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,GAAG,CAAK;gBAEJ,OAAO,EAAE,0BAA0B;IAS/C,OAAO,IAAI,IAAI;IAUf,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;IAOlE,eAAe,IAAI,qBAAqB;IAoBxC,WAAW,CACT,MAAM,GAAE,eAAoB,EAC5B,IAAI,GAAE,iBAAyC,EAC/C,aAAa,UAAiB,GAC7B,iBAAiB;IA8CpB,aAAa,IAAI,mBAAmB;IAcpC,UAAU,CAAC,MAAM,GAAE,eAAoB,EAAE,IAAI,GAAE,iBAAyC,GAAG,SAAS,eAAe,EAAE;IAIrH,UAAU,CAAC,MAAM,GAAE,eAAoB,EAAE,IAAI,GAAE,iBAAyC,GAAG,SAAS,eAAe,EAAE;IAIrH,SAAS,CAAC,MAAM,GAAE,eAAoB,EAAE,IAAI,GAAE,iBAAyC,GAAG,SAAS,YAAY,EAAE;IAIjH,aAAa,CACX,MAAM,GAAE,eAAoB,EAC5B,IAAI,GAAE,iBAAyC,EAC/C,aAAa,UAAiB,GAC7B,qBAAqB,CAAC,eAAe,CAAC;IAKzC,aAAa,CACX,MAAM,GAAE,eAAoB,EAC5B,IAAI,GAAE,iBAAyC,EAC/C,aAAa,UAAiB,GAC7B,qBAAqB,CAAC,eAAe,CAAC;IAKzC,YAAY,CACV,MAAM,GAAE,eAAoB,EAC5B,IAAI,GAAE,iBAAyC,EAC/C,aAAa,UAAiB,GAC7B,qBAAqB,CAAC,YAAY,CAAC;IAKtC,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,eAAoB,EAC5B,IAAI,GAAE,iBAAyC,EAC/C,aAAa,UAAiB,GAC7B,QAAQ;IAgEX,sBAAsB,CAAC,MAAM,GAAE,eAAoB,EAAE,IAAI,GAAE,iBAAyC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI9H,oBAAoB,CAAC,MAAM,GAAE,eAAoB,EAAE,IAAI,GAAE,iBAAyC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5H,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIlD,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,oBAAoB;IAiG5B,OAAO,CAAC,qBAAqB;IA2D7B,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIlD;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIpD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIrD;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAsB1D;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA8C5D;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAoC7D;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,MAAM;CASf"}
|
|
@@ -153,6 +153,8 @@ export class TelemetryApiService {
|
|
|
153
153
|
if (requestedCursor) {
|
|
154
154
|
this.resolveCursor(this.records, requestedCursor);
|
|
155
155
|
}
|
|
156
|
+
// Shared teardown closure — called from both abort and cancel paths (PERF-04).
|
|
157
|
+
let teardown = () => { };
|
|
156
158
|
const stream = new ReadableStream({
|
|
157
159
|
start: (controller) => {
|
|
158
160
|
if (requestedCursor) {
|
|
@@ -174,9 +176,14 @@ export class TelemetryApiService {
|
|
|
174
176
|
const heartbeat = setInterval(() => {
|
|
175
177
|
controller.enqueue(encoder.encode(': heartbeat\n\n'));
|
|
176
178
|
}, 15_000);
|
|
177
|
-
|
|
179
|
+
// Don't block clean process exit (PERF-07).
|
|
180
|
+
heartbeat.unref?.();
|
|
181
|
+
teardown = () => {
|
|
178
182
|
clearInterval(heartbeat);
|
|
179
183
|
unsub();
|
|
184
|
+
};
|
|
185
|
+
request.signal.addEventListener('abort', () => {
|
|
186
|
+
teardown();
|
|
180
187
|
controller.close();
|
|
181
188
|
}, { once: true });
|
|
182
189
|
controller.enqueue(encoder.encode(`event: ready\ndata: ${JSON.stringify({
|
|
@@ -188,7 +195,8 @@ export class TelemetryApiService {
|
|
|
188
195
|
})}\n\n`));
|
|
189
196
|
},
|
|
190
197
|
cancel: () => {
|
|
191
|
-
|
|
198
|
+
// PERF-04: cancel() path must also clear the heartbeat interval.
|
|
199
|
+
teardown();
|
|
192
200
|
},
|
|
193
201
|
});
|
|
194
202
|
return new Response(stream, {
|
|
@@ -37,10 +37,16 @@ interface TaskSchedulerConfig {
|
|
|
37
37
|
export declare class TaskScheduler {
|
|
38
38
|
private tasks;
|
|
39
39
|
private timers;
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Per-task run history indexed by taskId — O(1) push + trim per task run.
|
|
42
|
+
* The flat `history` array is derived from this on persist (PERF-03).
|
|
43
|
+
*/
|
|
44
|
+
private historyByTask;
|
|
41
45
|
private store;
|
|
42
46
|
private readonly spawnTask?;
|
|
43
47
|
private running;
|
|
48
|
+
/** Debounce handle for coalescing rapid successive save() calls (PERF-03). */
|
|
49
|
+
private _saveDebounceTimer;
|
|
44
50
|
constructor(config: string | TaskSchedulerConfig);
|
|
45
51
|
/** Load tasks from disk and start timers. */
|
|
46
52
|
start(): Promise<void>;
|
|
@@ -54,7 +60,7 @@ export declare class TaskScheduler {
|
|
|
54
60
|
setEnabled(taskId: string, enabled: boolean): boolean;
|
|
55
61
|
/** Return all tasks as an array. */
|
|
56
62
|
list(): ScheduledTask[];
|
|
57
|
-
/** Return the run history for a given task (up to MAX_HISTORY_PER_TASK). */
|
|
63
|
+
/** Return the run history for a given task (up to MAX_HISTORY_PER_TASK). O(1) via Map index. */
|
|
58
64
|
getHistory(taskId: string): TaskRunRecord[];
|
|
59
65
|
/** Return all run history records. */
|
|
60
66
|
getAllHistory(): TaskRunRecord[];
|
|
@@ -77,8 +83,19 @@ export declare class TaskScheduler {
|
|
|
77
83
|
* Returns the spawned agent ID.
|
|
78
84
|
*/
|
|
79
85
|
private executeTask;
|
|
86
|
+
/**
|
|
87
|
+
* O(1) per-task history push + trim (PERF-03).
|
|
88
|
+
* The Map index makes both the push and the cap check O(1) instead of O(n) global filter.
|
|
89
|
+
*/
|
|
80
90
|
private pushHistory;
|
|
91
|
+
/** Flatten historyByTask Map into a single array for serialisation. */
|
|
92
|
+
private flatHistory;
|
|
81
93
|
private save;
|
|
94
|
+
/**
|
|
95
|
+
* Debounced save: coalesces multiple rapid calls into a single disk write
|
|
96
|
+
* that fires SAVE_DEBOUNCE_MS after the last call (PERF-03).
|
|
97
|
+
*/
|
|
98
|
+
private scheduleSave;
|
|
82
99
|
private load;
|
|
83
100
|
}
|
|
84
101
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/scheduler/scheduler.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsBD,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,KAAK,MAAM,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/scheduler/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ import { summarizeError } from '../utils/error-display.js';
|
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
/** Max run history records to keep per task. */
|
|
8
8
|
const MAX_HISTORY_PER_TASK = 5;
|
|
9
|
+
/** Debounce window for history persist calls (ms). Coalesces rapid consecutive runs. */
|
|
10
|
+
const SAVE_DEBOUNCE_MS = 1_000;
|
|
9
11
|
/** Maximum setTimeout delay — Node.js overflows at ~24.8 days; cap at 24 h. */
|
|
10
12
|
const MAX_TIMEOUT_MS = 24 * 60 * 60 * 1000;
|
|
11
13
|
// ---------------------------------------------------------------------------
|
|
@@ -322,10 +324,16 @@ function countMissedRuns(expr, fromMs, toMs, timezone) {
|
|
|
322
324
|
export class TaskScheduler {
|
|
323
325
|
tasks = new Map();
|
|
324
326
|
timers = new Map();
|
|
325
|
-
|
|
327
|
+
/**
|
|
328
|
+
* Per-task run history indexed by taskId — O(1) push + trim per task run.
|
|
329
|
+
* The flat `history` array is derived from this on persist (PERF-03).
|
|
330
|
+
*/
|
|
331
|
+
historyByTask = new Map();
|
|
326
332
|
store;
|
|
327
333
|
spawnTask;
|
|
328
334
|
running = false;
|
|
335
|
+
/** Debounce handle for coalescing rapid successive save() calls (PERF-03). */
|
|
336
|
+
_saveDebounceTimer = null;
|
|
329
337
|
constructor(config) {
|
|
330
338
|
const resolvedConfig = typeof config === 'string'
|
|
331
339
|
? { storePath: config }
|
|
@@ -421,13 +429,13 @@ export class TaskScheduler {
|
|
|
421
429
|
list() {
|
|
422
430
|
return Array.from(this.tasks.values());
|
|
423
431
|
}
|
|
424
|
-
/** Return the run history for a given task (up to MAX_HISTORY_PER_TASK). */
|
|
432
|
+
/** Return the run history for a given task (up to MAX_HISTORY_PER_TASK). O(1) via Map index. */
|
|
425
433
|
getHistory(taskId) {
|
|
426
|
-
return this.
|
|
434
|
+
return [...(this.historyByTask.get(taskId) ?? [])];
|
|
427
435
|
}
|
|
428
436
|
/** Return all run history records. */
|
|
429
437
|
getAllHistory() {
|
|
430
|
-
return
|
|
438
|
+
return this.flatHistory();
|
|
431
439
|
}
|
|
432
440
|
/**
|
|
433
441
|
* Compute the next run time for a cron expression, starting from `from`
|
|
@@ -531,7 +539,7 @@ export class TaskScheduler {
|
|
|
531
539
|
error: errorMsg,
|
|
532
540
|
};
|
|
533
541
|
this.pushHistory(runRecord);
|
|
534
|
-
|
|
542
|
+
this.scheduleSave();
|
|
535
543
|
throw err;
|
|
536
544
|
}
|
|
537
545
|
// Update task stats
|
|
@@ -544,35 +552,54 @@ export class TaskScheduler {
|
|
|
544
552
|
status: 'running',
|
|
545
553
|
};
|
|
546
554
|
this.pushHistory(runRecord);
|
|
547
|
-
|
|
555
|
+
this.scheduleSave();
|
|
548
556
|
return agentId;
|
|
549
557
|
}
|
|
558
|
+
/**
|
|
559
|
+
* O(1) per-task history push + trim (PERF-03).
|
|
560
|
+
* The Map index makes both the push and the cap check O(1) instead of O(n) global filter.
|
|
561
|
+
*/
|
|
550
562
|
pushHistory(record) {
|
|
551
|
-
this.
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
if (
|
|
555
|
-
|
|
556
|
-
const toRemove = perTask.length - MAX_HISTORY_PER_TASK;
|
|
557
|
-
let removed = 0;
|
|
558
|
-
this.history = this.history.filter((r) => {
|
|
559
|
-
if (r.taskId === record.taskId && removed < toRemove) {
|
|
560
|
-
removed++;
|
|
561
|
-
return false;
|
|
562
|
-
}
|
|
563
|
-
return true;
|
|
564
|
-
});
|
|
563
|
+
const bucket = this.historyByTask.get(record.taskId) ?? [];
|
|
564
|
+
bucket.push(record);
|
|
565
|
+
// Trim to MAX_HISTORY_PER_TASK in-place — oldest entries are at the front.
|
|
566
|
+
if (bucket.length > MAX_HISTORY_PER_TASK) {
|
|
567
|
+
bucket.splice(0, bucket.length - MAX_HISTORY_PER_TASK);
|
|
565
568
|
}
|
|
569
|
+
this.historyByTask.set(record.taskId, bucket);
|
|
566
570
|
}
|
|
567
571
|
// -------------------------------------------------------------------------
|
|
568
572
|
// Persistence
|
|
569
573
|
// -------------------------------------------------------------------------
|
|
574
|
+
/** Flatten historyByTask Map into a single array for serialisation. */
|
|
575
|
+
flatHistory() {
|
|
576
|
+
const out = [];
|
|
577
|
+
for (const bucket of this.historyByTask.values()) {
|
|
578
|
+
for (const record of bucket) {
|
|
579
|
+
out.push(record);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return out;
|
|
583
|
+
}
|
|
570
584
|
async save() {
|
|
571
585
|
await this.store.persist({
|
|
572
586
|
tasks: Array.from(this.tasks.values()),
|
|
573
|
-
history: this.
|
|
587
|
+
history: this.flatHistory(),
|
|
574
588
|
});
|
|
575
589
|
}
|
|
590
|
+
/**
|
|
591
|
+
* Debounced save: coalesces multiple rapid calls into a single disk write
|
|
592
|
+
* that fires SAVE_DEBOUNCE_MS after the last call (PERF-03).
|
|
593
|
+
*/
|
|
594
|
+
scheduleSave() {
|
|
595
|
+
if (this._saveDebounceTimer !== null)
|
|
596
|
+
return;
|
|
597
|
+
this._saveDebounceTimer = setTimeout(() => {
|
|
598
|
+
this._saveDebounceTimer = null;
|
|
599
|
+
void this.save().catch((err) => logger.warn('TaskScheduler: save failed', { error: summarizeError(err) }));
|
|
600
|
+
}, SAVE_DEBOUNCE_MS);
|
|
601
|
+
this._saveDebounceTimer.unref?.();
|
|
602
|
+
}
|
|
576
603
|
async load() {
|
|
577
604
|
const data = await this.store.load();
|
|
578
605
|
if (!data)
|
|
@@ -609,7 +636,7 @@ export class TaskScheduler {
|
|
|
609
636
|
const expectedNext = computeNextRun(t.cron, new Date(t.lastRun), t.timezone);
|
|
610
637
|
if (expectedNext.getTime() < now) {
|
|
611
638
|
logger.warn('[Scheduler] Missed run detected', { taskId: t.id, missedAt: expectedNext.toISOString() });
|
|
612
|
-
this.
|
|
639
|
+
this.pushHistory({
|
|
613
640
|
taskId: t.id,
|
|
614
641
|
startedAt: expectedNext.getTime(),
|
|
615
642
|
agentId: '',
|
|
@@ -621,8 +648,17 @@ export class TaskScheduler {
|
|
|
621
648
|
this.tasks.set(t.id, t);
|
|
622
649
|
}
|
|
623
650
|
}
|
|
651
|
+
// Restore history from disk into per-task Map buckets.
|
|
624
652
|
if (Array.isArray(data.history)) {
|
|
625
|
-
|
|
653
|
+
for (const record of data.history) {
|
|
654
|
+
const bucket = this.historyByTask.get(record.taskId) ?? [];
|
|
655
|
+
bucket.push(record);
|
|
656
|
+
// Maintain cap on restore (PERF-03).
|
|
657
|
+
if (bucket.length > MAX_HISTORY_PER_TASK) {
|
|
658
|
+
bucket.splice(0, bucket.length - MAX_HISTORY_PER_TASK);
|
|
659
|
+
}
|
|
660
|
+
this.historyByTask.set(record.taskId, bucket);
|
|
661
|
+
}
|
|
626
662
|
}
|
|
627
663
|
}
|
|
628
664
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-auth.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/security/user-auth.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAUD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"user-auth.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/security/user-auth.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAUD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AAgKD,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;gBAE3B,MAAM,EAAE,cAAc;IAqBlC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI7C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAMjE,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAShD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAY5C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAUlD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAW/C,SAAS,IAAI,cAAc,EAAE;IAS7B,YAAY,IAAI,iBAAiB,EAAE;IAOnC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,MAAM,EAAc,GAAG,cAAc;IAejG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAarC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAgB5D,OAAO,IAAI,iBAAiB;IAc5B,4BAA4B,IAAI,OAAO;IAMvC,0BAA0B,IAAI,MAAM;IAIpC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,OAAO;CAIhB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomBytes, scryptSync, timingSafeEqual } from 'crypto';
|
|
2
|
-
import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { logger } from '../utils/logger.js';
|
|
5
5
|
const DEFAULT_SESSION_TTL_MS = 3_600_000;
|
|
@@ -48,26 +48,39 @@ function readBootstrapUsers(filePath) {
|
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Write secret file content atomically at 0600 (owner read/write only).
|
|
53
|
+
* Uses write-to-tmp-then-rename for atomicity; chmod applied at both
|
|
54
|
+
* sides to defeat filesystem-reset behaviour on rename (observed on
|
|
55
|
+
* some Linux fs drivers).
|
|
56
|
+
*/
|
|
57
|
+
function atomicWriteSecretFile(filePath, content) {
|
|
52
58
|
mkdirSync(dirname(filePath), { recursive: true });
|
|
59
|
+
const tmpPath = filePath + '.tmp';
|
|
60
|
+
writeFileSync(tmpPath, content, { encoding: 'utf-8', mode: 0o600 });
|
|
61
|
+
try {
|
|
62
|
+
chmodSync(tmpPath, 0o600);
|
|
63
|
+
}
|
|
64
|
+
catch { /* best-effort */ }
|
|
65
|
+
renameSync(tmpPath, filePath);
|
|
66
|
+
try {
|
|
67
|
+
chmodSync(filePath, 0o600);
|
|
68
|
+
}
|
|
69
|
+
catch { /* best-effort */ }
|
|
70
|
+
}
|
|
71
|
+
function writeBootstrapUsers(filePath, users) {
|
|
72
|
+
// SEC-01: auth-user store contains scrypt password hashes — must be 0600.
|
|
53
73
|
const payload = { version: 1, users };
|
|
54
|
-
|
|
74
|
+
atomicWriteSecretFile(filePath, `${JSON.stringify(payload, null, 2)}\n`);
|
|
55
75
|
}
|
|
56
76
|
function writeBootstrapCredentialFile(filePath, username, password) {
|
|
57
|
-
|
|
58
|
-
writeFileSync(filePath, [
|
|
77
|
+
atomicWriteSecretFile(filePath, [
|
|
59
78
|
'GoodVibes bootstrap auth',
|
|
60
79
|
`username=${username}`,
|
|
61
80
|
`password=${password}`,
|
|
62
81
|
'purpose=Use these credentials only for local daemon/http listener /login routes when those surfaces are enabled.',
|
|
63
82
|
'note=Normal SDK host usage does not require these credentials.',
|
|
64
|
-
].join('\n') + '\n'
|
|
65
|
-
try {
|
|
66
|
-
chmodSync(filePath, 0o600);
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// best-effort only
|
|
70
|
-
}
|
|
83
|
+
].join('\n') + '\n');
|
|
71
84
|
}
|
|
72
85
|
function loadOrBootstrapUsers(filePath, credentialPath) {
|
|
73
86
|
const existing = readBootstrapUsers(filePath);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
let version = '0.21.
|
|
3
|
+
let version = '0.21.30';
|
|
4
4
|
try {
|
|
5
5
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
|
|
6
6
|
version = pkg.version ?? version;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-home.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/workspace/daemon-home.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,4BAA4B,CAAC;AAOxF,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,wCAAwC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;CACvC;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAiB5E;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEtE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,EAC/B,IAAI,GAAE,uBAA4B,GACjC,cAAc,
|
|
1
|
+
{"version":3,"file":"daemon-home.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/workspace/daemon-home.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,4BAA4B,CAAC;AAOxF,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,wCAAwC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;CACvC;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAiB5E;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEtE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,EAC/B,IAAI,GAAE,uBAA4B,GACjC,cAAc,CAgChB;AAMD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CASnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ/E;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAiB1F"}
|
|
@@ -82,14 +82,15 @@ export function runDaemonHomeMigration(daemonHomeDir, options = {}, deps = {}) {
|
|
|
82
82
|
mkdirSync(daemonHomeDir, { recursive: true });
|
|
83
83
|
const userGoodVibesRoot = join(homedir(), '.goodvibes');
|
|
84
84
|
// Migrate auth-users.json from tui surface path
|
|
85
|
+
// SEC-02: credential-bearing files must land at 0600 regardless of source perms.
|
|
85
86
|
const legacyAuthUsers = join(userGoodVibesRoot, 'tui', 'auth-users.json');
|
|
86
87
|
if (existsSync(legacyAuthUsers)) {
|
|
87
|
-
|
|
88
|
+
safeCopyIdentity(legacyAuthUsers, join(daemonHomeDir, 'auth-users.json'));
|
|
88
89
|
}
|
|
89
90
|
// Migrate auth-bootstrap.txt from tui surface path
|
|
90
91
|
const legacyBootstrap = join(userGoodVibesRoot, 'tui', 'auth-bootstrap.txt');
|
|
91
92
|
if (existsSync(legacyBootstrap)) {
|
|
92
|
-
|
|
93
|
+
safeCopyIdentity(legacyBootstrap, join(daemonHomeDir, 'auth-bootstrap.txt'));
|
|
93
94
|
}
|
|
94
95
|
// NOTE: Operator tokens are NOT migrated from legacy workspace-scoped paths.
|
|
95
96
|
// The canonical path is <daemonHomeDir>/operator-tokens.json (global, set at 0600).
|
|
@@ -175,8 +176,17 @@ export function writeDaemonSetting(daemonHomeDir, key, value) {
|
|
|
175
176
|
// Overwrite corrupt file
|
|
176
177
|
}
|
|
177
178
|
}
|
|
178
|
-
|
|
179
|
+
// SEC-12: daemon-settings.json may contain sensitive pairing state; write at 0600.
|
|
180
|
+
writeFileSync(tmpPath, JSON.stringify({ ...existing, [key]: value }, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
181
|
+
try {
|
|
182
|
+
chmodSync(tmpPath, 0o600);
|
|
183
|
+
}
|
|
184
|
+
catch { /* best-effort */ }
|
|
179
185
|
renameSync(tmpPath, settingsPath);
|
|
186
|
+
try {
|
|
187
|
+
chmodSync(settingsPath, 0o600);
|
|
188
|
+
}
|
|
189
|
+
catch { /* best-effort */ }
|
|
180
190
|
}
|
|
181
191
|
// ---------------------------------------------------------------------------
|
|
182
192
|
// Helpers
|
|
@@ -199,3 +209,25 @@ function safeCopy(src, dest) {
|
|
|
199
209
|
return false;
|
|
200
210
|
}
|
|
201
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Copy a credential-bearing identity file from src to dest and force mode 0600.
|
|
214
|
+
*
|
|
215
|
+
* SEC-02: `copyFileSync` preserves source permissions. Legacy TUI files may be
|
|
216
|
+
* 0644 (world-readable). Calling `chmodSync` after copy ensures the new
|
|
217
|
+
* canonical path is always owner-only regardless of the source's permissions.
|
|
218
|
+
* Never throws — failures are logged at warn level.
|
|
219
|
+
*/
|
|
220
|
+
function safeCopyIdentity(src, dest) {
|
|
221
|
+
if (!safeCopy(src, dest))
|
|
222
|
+
return false;
|
|
223
|
+
try {
|
|
224
|
+
chmodSync(dest, 0o600);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
logger.warn('daemon-home: safeCopyIdentity chmod failed (best-effort)', {
|
|
228
|
+
dest,
|
|
229
|
+
error: err instanceof Error ? err.message : String(err),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}
|