stitchkit 0.81.0 → 0.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6613 -0
- package/README.md +4 -0
- package/dist/agent-runtime/events.d.ts +9 -2
- package/dist/agent-runtime/events.d.ts.map +1 -1
- package/dist/agent-runtime/observability.d.ts +9 -2
- package/dist/agent-runtime/observability.d.ts.map +1 -1
- package/dist/agent-runtime-harness.js +2 -2
- package/dist/agent-runtime.js +4 -4
- package/dist/application/events.d.ts +9 -2
- package/dist/application/events.d.ts.map +1 -1
- package/dist/application/latest-sink.d.ts +12 -2
- package/dist/application/latest-sink.d.ts.map +1 -1
- package/dist/application-opentelemetry.js +2 -1
- package/dist/application.js +4 -4
- package/dist/{index-6s7n2v50.js → index-64ew0vnj.js} +15 -10
- package/dist/{index-a59da114.js → index-7z1h3kbr.js} +61 -15
- package/dist/{index-1dd82z59.js → index-pq7ak4k8.js} +3 -3
- package/dist/internal/observability-sink.d.ts +49 -2
- package/dist/internal/observability-sink.d.ts.map +1 -1
- package/dist/internal/upgrade-plan.d.ts +18 -0
- package/dist/internal/upgrade-plan.d.ts.map +1 -0
- package/dist/observability/audit.d.ts +20 -4
- package/dist/observability/audit.d.ts.map +1 -1
- package/dist/observability/index.d.ts +1 -1
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +30 -15
- package/dist/observability/status.d.ts +1 -0
- package/dist/observability/status.d.ts.map +1 -1
- package/dist/release/socket.d.ts +14 -1
- package/dist/release/socket.d.ts.map +1 -1
- package/dist/tracking/contract.d.ts +11 -0
- package/dist/tracking/contract.d.ts.map +1 -1
- package/dist/tracking-server.d.ts +1 -0
- package/dist/tracking-server.d.ts.map +1 -1
- package/dist/tracking.js +1 -0
- package/dist/upgrade-cli.d.ts +27 -0
- package/dist/upgrade-cli.d.ts.map +1 -0
- package/dist/upgrade-cli.js +177 -0
- package/llms-full.txt +185 -17
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -506,6 +506,10 @@ The full guide and API reference, in [`docs/`](./docs/README.md):
|
|
|
506
506
|
[multi-tenant](./docs/guide/multi-tenant.md) ·
|
|
507
507
|
[upgrading](./docs/guide/upgrading.md)
|
|
508
508
|
- **[API reference](./docs/api/reference.md)** — every export, by entrypoint.
|
|
509
|
+
- **Moving to a newer version?** Run `bunx stitchkit@latest upgrade` inside your
|
|
510
|
+
project. It reads the version you have from `node_modules` and the changelog
|
|
511
|
+
from inside the package, and prints every breaking change between the two —
|
|
512
|
+
oldest first, each with who must act. Nothing to clone, nobody to ask.
|
|
509
513
|
- **Coding agent?** The package ships **`llms.txt`** (a curated index) and
|
|
510
514
|
**`llms-full.txt`** (the whole guide inlined) — your agent reads them from
|
|
511
515
|
`node_modules/stitchkit/`. For Claude Code, the repo also provides a
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ObservabilityDrainBound } from '../internal/observability-sink.js';
|
|
1
2
|
import type { ObservabilitySinkStatus } from '../observability/status.js';
|
|
2
3
|
import { type AgentRuntimeEvent, type AgentRuntimePublisher } from './event-schema.js';
|
|
3
4
|
export * from './event-schema.js';
|
|
@@ -17,9 +18,15 @@ export interface AgentRuntimeEventSinkConfig {
|
|
|
17
18
|
}
|
|
18
19
|
export interface AgentRuntimeEventSink {
|
|
19
20
|
publish: AgentRuntimePublisher;
|
|
20
|
-
|
|
21
|
+
/** Whether the generation admitted before this call settled inside the bound. */
|
|
22
|
+
flush(bound?: ObservabilityDrainBound): Promise<boolean>;
|
|
21
23
|
getStatus(): ObservabilitySinkStatus;
|
|
22
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Stop admission and drain. Bounded the same way as every other drain here:
|
|
26
|
+
* without a bound it waits however long the sink takes, which is what used to
|
|
27
|
+
* consume an entire application shutdown budget when a write never settled.
|
|
28
|
+
*/
|
|
29
|
+
close(bound?: ObservabilityDrainBound): Promise<ObservabilitySinkStatus>;
|
|
23
30
|
}
|
|
24
31
|
/** Bounded, failure-isolated transport-neutral delivery lifecycle. */
|
|
25
32
|
export declare function createAgentRuntimeEventSink(config: AgentRuntimeEventSinkConfig): AgentRuntimeEventSink;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,CAAC,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC9B,KAAK,EAAE,iBAAiB,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,iFAAiF;IACjF,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,SAAS,IAAI,uBAAuB,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC1E;AAED,sEAAsE;AACtE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,2BAA2B,GAClC,qBAAqB,CAiBvB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type ObservabilityDrainBound } from '../internal/observability-sink.js';
|
|
2
3
|
import type { ObservabilitySinkStatus } from '../observability/status.js';
|
|
3
4
|
export declare const AgentRunStartedEventSchema: z.ZodObject<{
|
|
4
5
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -448,9 +449,15 @@ export interface AgentObservability {
|
|
|
448
449
|
parentSpanId?: string;
|
|
449
450
|
};
|
|
450
451
|
emit(event: AgentRunEvent): void;
|
|
451
|
-
|
|
452
|
+
/** Whether the generation admitted before this call settled inside the bound. */
|
|
453
|
+
flush(bound?: ObservabilityDrainBound): Promise<boolean>;
|
|
452
454
|
getStatus(): ObservabilitySinkStatus;
|
|
453
|
-
|
|
455
|
+
/**
|
|
456
|
+
* Stop admission and drain. Bounded the same way as every other drain here:
|
|
457
|
+
* without a bound it waits however long the sink takes, which is what used to
|
|
458
|
+
* consume an entire application shutdown budget when a write never settled.
|
|
459
|
+
*/
|
|
460
|
+
close(bound?: ObservabilityDrainBound): Promise<ObservabilitySinkStatus>;
|
|
454
461
|
}
|
|
455
462
|
export declare function createAgentObservability(config: AgentRunSinkConfig): AgentObservability;
|
|
456
463
|
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/observability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@ import {
|
|
|
2
2
|
composeAgentPrompt,
|
|
3
3
|
createAgentRuntime,
|
|
4
4
|
createAgentRuntimeEventSink
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-pq7ak4k8.js";
|
|
6
6
|
import {
|
|
7
7
|
AgentModelDescriptorSchema
|
|
8
8
|
} from "./index-tg3m2ec5.js";
|
|
9
9
|
import"./index-y2s6h5bf.js";
|
|
10
|
-
import"./index-
|
|
10
|
+
import"./index-7z1h3kbr.js";
|
|
11
11
|
import {
|
|
12
12
|
walkContainedFiles
|
|
13
13
|
} from "./index-rqpdar1e.js";
|
package/dist/agent-runtime.js
CHANGED
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
registerDeferredToolRepair,
|
|
49
49
|
repairedSearchCall,
|
|
50
50
|
selectAgentHistory
|
|
51
|
-
} from "./index-
|
|
51
|
+
} from "./index-pq7ak4k8.js";
|
|
52
52
|
import {
|
|
53
53
|
AgentModelCapabilitySchema,
|
|
54
54
|
AgentModelCatalogEntrySchema,
|
|
@@ -72,7 +72,7 @@ import {
|
|
|
72
72
|
} from "./index-y2s6h5bf.js";
|
|
73
73
|
import {
|
|
74
74
|
createBoundedSinkManager
|
|
75
|
-
} from "./index-
|
|
75
|
+
} from "./index-7z1h3kbr.js";
|
|
76
76
|
import {
|
|
77
77
|
AgentAdmissionEventSchema,
|
|
78
78
|
AgentCheckpointEventSchema,
|
|
@@ -688,9 +688,9 @@ function createAgentObservability(config) {
|
|
|
688
688
|
return AgentRunTerminalEventSchema.omit({ internalCause: true }).parse(parsed);
|
|
689
689
|
});
|
|
690
690
|
},
|
|
691
|
-
flush: () => manager.flush(),
|
|
691
|
+
flush: (bound) => manager.flush(bound),
|
|
692
692
|
getStatus: () => manager.getStatus(),
|
|
693
|
-
close: () => manager.close()
|
|
693
|
+
close: (bound) => manager.close(bound)
|
|
694
694
|
};
|
|
695
695
|
}
|
|
696
696
|
// src/agent-runtime/protocol.ts
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type ObservabilityDrainBound } from '../internal/observability-sink.js';
|
|
2
3
|
import type { ObservabilitySinkStatus } from '../observability/status.js';
|
|
3
4
|
import { type ApplicationSnapshot } from './schemas.js';
|
|
4
5
|
export declare const ApplicationLifecycleEventSchema: z.ZodReadonly<z.ZodObject<{
|
|
@@ -56,9 +57,15 @@ export interface ApplicationEventSinkConfig {
|
|
|
56
57
|
}
|
|
57
58
|
export interface ApplicationEventSink {
|
|
58
59
|
publish(snapshot: ApplicationSnapshot): void;
|
|
59
|
-
|
|
60
|
+
/** Whether the generation admitted before this call settled inside the bound. */
|
|
61
|
+
flush(bound?: ObservabilityDrainBound): Promise<boolean>;
|
|
60
62
|
getStatus(): ObservabilitySinkStatus;
|
|
61
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Stop admission and drain. Bounded the same way as every other drain here:
|
|
65
|
+
* without a bound it waits however long the sink takes, which is what used to
|
|
66
|
+
* consume an entire application shutdown budget when a write never settled.
|
|
67
|
+
*/
|
|
68
|
+
close(bound?: ObservabilityDrainBound): Promise<ObservabilitySinkStatus>;
|
|
62
69
|
}
|
|
63
70
|
/** Failure-isolated operator event delivery; canonical truth remains the absolute snapshot. */
|
|
64
71
|
export declare function createApplicationEventSink(config: ApplicationEventSinkConfig): ApplicationEventSink;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/application/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/application/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAIL,KAAK,mBAAmB,EAEzB,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAa/B,CAAC;AACd,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,mBAAmB,GAC5B,yBAAyB,CAY3B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,CAAC,OAAO,EAAE;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,yBAAyB,CAAC;KACnC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC7C,iFAAiF;IACjF,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,SAAS,IAAI,uBAAuB,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC1E;AAED,+FAA+F;AAC/F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,0BAA0B,GACjC,oBAAoB,CActB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type ObservabilityDrainBound } from '../internal/observability-sink.js';
|
|
2
3
|
export declare const ApplicationSnapshotSinkStatusSchema: z.ZodReadonly<z.ZodObject<{
|
|
3
4
|
accepting: z.ZodBoolean;
|
|
4
5
|
received: z.ZodNumber;
|
|
@@ -28,8 +29,17 @@ export interface ApplicationSnapshotSink<TSnapshot extends RevisionedApplication
|
|
|
28
29
|
/** Admit a newer absolute snapshot. Returns false after close or for a stale revision. */
|
|
29
30
|
publish(snapshot: TSnapshot): boolean;
|
|
30
31
|
getStatus(): ApplicationSnapshotSinkStatus;
|
|
31
|
-
/**
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Close admission and deliver the newest snapshot accepted before this
|
|
34
|
+
* boundary.
|
|
35
|
+
*
|
|
36
|
+
* Bounded like every other drain here. The application-kernel guide puts this
|
|
37
|
+
* call in a cleanup path, which is the same position — and the same failure —
|
|
38
|
+
* as the shutdown that spent its whole budget waiting on a write that never
|
|
39
|
+
* settled. The status is read after the wait ends, so `inFlight` and the
|
|
40
|
+
* queue say what was not delivered.
|
|
41
|
+
*/
|
|
42
|
+
close(bound?: ObservabilityDrainBound): Promise<ApplicationSnapshotSinkStatus>;
|
|
33
43
|
}
|
|
34
44
|
/**
|
|
35
45
|
* Deliver absolute state without growing a queue: one write runs while one newer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latest-sink.d.ts","sourceRoot":"","sources":["../../src/application/latest-sink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"latest-sink.d.ts","sourceRoot":"","sources":["../../src/application/latest-sink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAKxC,eAAO,MAAM,mCAAmC;;;;;;;;;;;;mBAenC,CAAC;AACd,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CACjD,OAAO,mCAAmC,CAC3C,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,4BAA4B,CAAC,SAAS;IACrD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B,CAC5C,SAAS,SAAS,6BAA6B;IAE/C,KAAK,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,WAAW,CAAC,CAAC,OAAO,EAAE,4BAA4B,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,uBAAuB,CAAC,SAAS,SAAS,6BAA6B;IACtF,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IACtC,SAAS,IAAI,6BAA6B,CAAC;IAC3C;;;;;;;;;OASG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAChF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,SAAS,6BAA6B,EAC3F,MAAM,EAAE,6BAA6B,CAAC,SAAS,CAAC,GAC/C,uBAAuB,CAAC,SAAS,CAAC,CAoHpC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ActivitySnapshotSchema,
|
|
3
3
|
ManagedScheduleStatusSchema
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-64ew0vnj.js";
|
|
5
5
|
import {
|
|
6
6
|
ApplicationSnapshotSchema
|
|
7
7
|
} from "./index-3gye9wzb.js";
|
|
8
|
+
import"./index-7z1h3kbr.js";
|
|
8
9
|
import"./index-7gnkny4z.js";
|
|
9
10
|
|
|
10
11
|
// src/application/opentelemetry.ts
|
package/dist/application.js
CHANGED
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
createActivityProjection,
|
|
27
27
|
createApplicationSnapshotSink,
|
|
28
28
|
createManagedSchedule
|
|
29
|
-
} from "./index-
|
|
29
|
+
} from "./index-64ew0vnj.js";
|
|
30
30
|
import {
|
|
31
31
|
DiagnosticJournalCloseResultSchema,
|
|
32
32
|
DiagnosticJournalFailurePhaseSchema,
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
import"./index-3z73fh2c.js";
|
|
61
61
|
import {
|
|
62
62
|
createBoundedSinkManager
|
|
63
|
-
} from "./index-
|
|
63
|
+
} from "./index-7z1h3kbr.js";
|
|
64
64
|
import {
|
|
65
65
|
backoffDelay,
|
|
66
66
|
createBackoff
|
|
@@ -576,9 +576,9 @@ function createApplicationEventSink(config) {
|
|
|
576
576
|
publish(snapshot) {
|
|
577
577
|
manager.submit(() => applicationLifecycleEvent(snapshot));
|
|
578
578
|
},
|
|
579
|
-
flush: () => manager.flush(),
|
|
579
|
+
flush: (bound) => manager.flush(bound),
|
|
580
580
|
getStatus: () => manager.getStatus(),
|
|
581
|
-
close: () => manager.close()
|
|
581
|
+
close: (bound) => manager.close(bound)
|
|
582
582
|
};
|
|
583
583
|
}
|
|
584
584
|
// src/application/health.ts
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ApplicationIdSchema
|
|
3
3
|
} from "./index-3gye9wzb.js";
|
|
4
|
+
import {
|
|
5
|
+
assertDrainBound,
|
|
6
|
+
withinBound
|
|
7
|
+
} from "./index-7z1h3kbr.js";
|
|
4
8
|
import {
|
|
5
9
|
createBoundedChannel
|
|
6
10
|
} from "./index-7gnkny4z.js";
|
|
@@ -111,16 +115,17 @@ function createApplicationSnapshotSink(config) {
|
|
|
111
115
|
return true;
|
|
112
116
|
},
|
|
113
117
|
getStatus,
|
|
114
|
-
close() {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
118
|
+
close(bound) {
|
|
119
|
+
assertDrainBound(bound);
|
|
120
|
+
if (!closePromise) {
|
|
121
|
+
accepting = false;
|
|
122
|
+
pending.close({ mode: "drain" });
|
|
123
|
+
closePromise = new Promise((resolve) => {
|
|
124
|
+
resolveClose = resolve;
|
|
125
|
+
settleCloseIfIdle();
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return withinBound(closePromise, bound).then(() => getStatus());
|
|
124
129
|
}
|
|
125
130
|
};
|
|
126
131
|
}
|
|
@@ -21,7 +21,8 @@ var ObservabilityStatusObjectSchema = z.object({
|
|
|
21
21
|
});
|
|
22
22
|
var ObservabilityStatusSchema = ObservabilityStatusObjectSchema.readonly();
|
|
23
23
|
var ObservabilityDrainReportSchema = ObservabilityStatusObjectSchema.extend({
|
|
24
|
-
durationMs: z.number().nonnegative()
|
|
24
|
+
durationMs: z.number().nonnegative(),
|
|
25
|
+
drained: z.boolean()
|
|
25
26
|
}).readonly();
|
|
26
27
|
var SUMMED_STATUS_KEYS = [
|
|
27
28
|
"capacity",
|
|
@@ -56,6 +57,43 @@ function aggregateObservabilityStatus(surfaces, closed) {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
// src/internal/observability-sink.ts
|
|
60
|
+
function assertDrainBound(bound) {
|
|
61
|
+
const timeoutMs = bound?.timeoutMs;
|
|
62
|
+
if (timeoutMs === undefined)
|
|
63
|
+
return;
|
|
64
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
|
|
65
|
+
throw new TypeError("Observability drain timeoutMs must be a non-negative finite number");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function withinBound(work, bound) {
|
|
69
|
+
assertDrainBound(bound);
|
|
70
|
+
const { timeoutMs, signal } = bound ?? {};
|
|
71
|
+
if (timeoutMs === undefined && !signal)
|
|
72
|
+
return work.then(() => true);
|
|
73
|
+
let timer;
|
|
74
|
+
let onAbort;
|
|
75
|
+
const reached = new Promise((resolve) => {
|
|
76
|
+
const give = () => resolve(false);
|
|
77
|
+
if (signal?.aborted) {
|
|
78
|
+
give();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (signal) {
|
|
82
|
+
onAbort = give;
|
|
83
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
84
|
+
}
|
|
85
|
+
if (timeoutMs !== undefined) {
|
|
86
|
+
timer = setTimeout(give, timeoutMs);
|
|
87
|
+
timer.unref?.();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return Promise.race([work.then(() => true), reached]).finally(() => {
|
|
91
|
+
if (timer !== undefined)
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
if (onAbort && signal)
|
|
94
|
+
signal.removeEventListener("abort", onAbort);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
59
97
|
var DEFAULT_MAX_PENDING = 1000;
|
|
60
98
|
function invokeIsolated(callback) {
|
|
61
99
|
if (!callback)
|
|
@@ -76,7 +114,7 @@ function createBoundedSinkManager(config) {
|
|
|
76
114
|
let dropped = 0;
|
|
77
115
|
let failed = 0;
|
|
78
116
|
let preparationFailed = 0;
|
|
79
|
-
let
|
|
117
|
+
let drain;
|
|
80
118
|
const preparing = new Map;
|
|
81
119
|
const writes = new Map;
|
|
82
120
|
const reportError = (error, event) => {
|
|
@@ -102,12 +140,16 @@ function createBoundedSinkManager(config) {
|
|
|
102
140
|
return;
|
|
103
141
|
}
|
|
104
142
|
accepted += 1;
|
|
105
|
-
const
|
|
143
|
+
const settle = (record) => {
|
|
144
|
+
record();
|
|
145
|
+
writes.delete(id);
|
|
146
|
+
};
|
|
147
|
+
const write = Promise.resolve().then(() => config.write(event)).then(() => settle(() => {
|
|
106
148
|
completed += 1;
|
|
107
|
-
})
|
|
149
|
+
}), (error) => settle(() => {
|
|
108
150
|
failed += 1;
|
|
109
151
|
reportError(error, event);
|
|
110
|
-
})
|
|
152
|
+
}));
|
|
111
153
|
writes.set(id, write);
|
|
112
154
|
};
|
|
113
155
|
const awaitGeneration = async (boundary) => {
|
|
@@ -129,22 +171,26 @@ function createBoundedSinkManager(config) {
|
|
|
129
171
|
});
|
|
130
172
|
return;
|
|
131
173
|
}
|
|
132
|
-
const preparation = Promise.resolve().then(produce).then((event) =>
|
|
174
|
+
const preparation = Promise.resolve().then(produce).then((event) => {
|
|
175
|
+
preparing.delete(id);
|
|
176
|
+
admit(id, event);
|
|
177
|
+
}, (error) => {
|
|
178
|
+
preparing.delete(id);
|
|
133
179
|
preparationFailed += 1;
|
|
134
180
|
reportError(error);
|
|
135
|
-
})
|
|
181
|
+
});
|
|
136
182
|
preparing.set(id, preparation);
|
|
137
183
|
},
|
|
138
|
-
flush() {
|
|
139
|
-
|
|
184
|
+
flush(bound) {
|
|
185
|
+
assertDrainBound(bound);
|
|
186
|
+
return withinBound(awaitGeneration(sequence), bound);
|
|
140
187
|
},
|
|
141
188
|
getStatus,
|
|
142
|
-
close() {
|
|
143
|
-
|
|
144
|
-
|
|
189
|
+
close(bound) {
|
|
190
|
+
assertDrainBound(bound);
|
|
191
|
+
drain ??= awaitGeneration(sequence);
|
|
145
192
|
closed = true;
|
|
146
|
-
|
|
147
|
-
return closePromise;
|
|
193
|
+
return withinBound(drain, bound).then(getStatus);
|
|
148
194
|
}
|
|
149
195
|
};
|
|
150
196
|
function getStatus() {
|
|
@@ -164,4 +210,4 @@ function createBoundedSinkManager(config) {
|
|
|
164
210
|
}
|
|
165
211
|
}
|
|
166
212
|
|
|
167
|
-
export { ObservabilitySinkStatusSchema, ObservabilityStatusSchema, ObservabilityDrainReportSchema, aggregateObservabilityStatus, createBoundedSinkManager };
|
|
213
|
+
export { ObservabilitySinkStatusSchema, ObservabilityStatusSchema, ObservabilityDrainReportSchema, aggregateObservabilityStatus, assertDrainBound, withinBound, createBoundedSinkManager };
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./index-y2s6h5bf.js";
|
|
9
9
|
import {
|
|
10
10
|
createBoundedSinkManager
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-7z1h3kbr.js";
|
|
12
12
|
import {
|
|
13
13
|
AgentRuntimeEventSchema,
|
|
14
14
|
agentDurableEventId
|
|
@@ -201,9 +201,9 @@ function createAgentRuntimeEventSink(config) {
|
|
|
201
201
|
if (projected)
|
|
202
202
|
manager.submit(() => AgentRuntimeEventSchema.parse(projected));
|
|
203
203
|
},
|
|
204
|
-
flush: () => manager.flush(),
|
|
204
|
+
flush: (bound) => manager.flush(bound),
|
|
205
205
|
getStatus: () => manager.getStatus(),
|
|
206
|
-
close: () => manager.close()
|
|
206
|
+
close: (bound) => manager.close(bound)
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -16,11 +16,58 @@ export interface BoundedSinkConfig<EVENT> {
|
|
|
16
16
|
onSinkError?(failure: BoundedSinkError<EVENT>): void | Promise<void>;
|
|
17
17
|
onDrop?(drop: BoundedSinkDrop<EVENT>): void | Promise<void>;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* A caller's limit on how long a drain may WAIT.
|
|
21
|
+
*
|
|
22
|
+
* Unbounded, a drain waits for every accepted event however long the sink
|
|
23
|
+
* takes — correct when the sink is healthy, fatal when it is not. One write
|
|
24
|
+
* that never settles, a database that has stopped answering, held `close()`
|
|
25
|
+
* forever; an application whose shutdown graph gives every other step a
|
|
26
|
+
* deadline then spent its whole budget here and exited by force. A drain that
|
|
27
|
+
* cannot be bounded cannot take part in a shutdown budget: it either fits, or
|
|
28
|
+
* it cancels the budget.
|
|
29
|
+
*
|
|
30
|
+
* The bound ends the WAITING, not the writes: a sink's `write` is handed no
|
|
31
|
+
* cancellation, so an outstanding one keeps running against whatever the caller
|
|
32
|
+
* closes next. And it is a bound on waiting for I/O, not on wall time — no
|
|
33
|
+
* bound can preempt a `write` that occupies the event loop.
|
|
34
|
+
*/
|
|
35
|
+
export interface ObservabilityDrainBound {
|
|
36
|
+
/** Give up waiting after this many milliseconds. */
|
|
37
|
+
timeoutMs?: number;
|
|
38
|
+
/** Give up waiting when this signal aborts. */
|
|
39
|
+
signal?: AbortSignal;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Refuse a nonsensical bound BEFORE anything is mutated, so a call that throws
|
|
43
|
+
* has no effect — admission stays open rather than half-closed.
|
|
44
|
+
*/
|
|
45
|
+
export declare function assertDrainBound(bound: ObservabilityDrainBound | undefined): void;
|
|
46
|
+
/**
|
|
47
|
+
* Wait for `work`, but not past `bound`. Resolves `true` when the work settled
|
|
48
|
+
* first, `false` when the bound did.
|
|
49
|
+
*
|
|
50
|
+
* Composed by hand rather than with `AbortSignal.any`, because the composite it
|
|
51
|
+
* returns registers itself on the caller's signal and is never released: on Bun
|
|
52
|
+
* that is a dependent leaked per drain against a process-lifetime signal, and
|
|
53
|
+
* `flush({ signal })` per batch is exactly the shape that accumulates them.
|
|
54
|
+
* A listener and a timer, both disposed here, cost nothing and leave nothing.
|
|
55
|
+
*
|
|
56
|
+
* The timer is unref'd: a drain bound must never be the thing keeping a process
|
|
57
|
+
* alive when the whole point is shutting down.
|
|
58
|
+
*/
|
|
59
|
+
export declare function withinBound(work: Promise<unknown>, bound: ObservabilityDrainBound | undefined): Promise<boolean>;
|
|
19
60
|
export interface BoundedSinkManager<EVENT> {
|
|
20
61
|
submit(produce: () => EVENT | Promise<EVENT>): void;
|
|
21
|
-
|
|
62
|
+
/** Whether the generation admitted before this call settled inside the bound. */
|
|
63
|
+
flush(bound?: ObservabilityDrainBound): Promise<boolean>;
|
|
22
64
|
getStatus(): ObservabilitySinkStatus;
|
|
23
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Stop admission and drain. The status is read AFTER the wait ends, so
|
|
67
|
+
* `pending` and `preparing` say what the sink had not written — including
|
|
68
|
+
* when the bound ended the wait early.
|
|
69
|
+
*/
|
|
70
|
+
close(bound?: ObservabilityDrainBound): Promise<ObservabilitySinkStatus>;
|
|
24
71
|
}
|
|
25
72
|
export declare function createBoundedSinkManager<EVENT>(config: BoundedSinkConfig<EVENT>): BoundedSinkManager<EVENT>;
|
|
26
73
|
//# sourceMappingURL=observability-sink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-sink.d.ts","sourceRoot":"","sources":["../../src/internal/observability-sink.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,gBAAgB,CAAC,KAAK;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACvC,MAAM,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACpD,KAAK,
|
|
1
|
+
{"version":3,"file":"observability-sink.d.ts","sourceRoot":"","sources":["../../src/internal/observability-sink.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,gBAAgB,CAAC,KAAK;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI,CAMjF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EACtB,KAAK,EAAE,uBAAuB,GAAG,SAAS,GACzC,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAED,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACvC,MAAM,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACpD,iFAAiF;IACjF,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,SAAS,IAAI,uBAAuB,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC1E;AAaD,wBAAgB,wBAAwB,CAAC,KAAK,EAC5C,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAC/B,kBAAkB,CAAC,KAAK,CAAC,CAuJ3B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The consumer upgrade plan: every `### ⚠️ Breaking changes` section an
|
|
3
|
+
* installed → target range crosses, oldest first.
|
|
4
|
+
*
|
|
5
|
+
* Pure over the changelog text. The reader is `stitchkit upgrade`, the binary
|
|
6
|
+
* this package installs; the changelog it reads ships in the package, so a
|
|
7
|
+
* consumer recovers the plan without cloning the repository or being told the
|
|
8
|
+
* range by whoever cut the release.
|
|
9
|
+
*/
|
|
10
|
+
export interface UpgradeBreakingChange {
|
|
11
|
+
version: string;
|
|
12
|
+
whoMustAct: string;
|
|
13
|
+
markdown: string;
|
|
14
|
+
}
|
|
15
|
+
/** Extract every breaking section crossed by an exact `from` (exclusive) → `to` (inclusive) upgrade. */
|
|
16
|
+
export declare function planUpgrade(changelog: string, from: string, to: string): UpgradeBreakingChange[];
|
|
17
|
+
export declare function renderUpgradePlan(changes: readonly UpgradeBreakingChange[], from: string, to: string): string;
|
|
18
|
+
//# sourceMappingURL=upgrade-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-plan.d.ts","sourceRoot":"","sources":["../../src/internal/upgrade-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAsBD,wGAAwG;AACxG,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,qBAAqB,EAAE,CAgCzB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,MAAM,CASR"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Both are normalised into `RequestEvent` without nested fetch wrappers.
|
|
5
5
|
*/
|
|
6
6
|
import type { RuntimeContext } from '../contract/index.js';
|
|
7
|
+
import { type ObservabilityDrainBound } from '../internal/observability-sink.js';
|
|
7
8
|
import type { MethodDef } from '../server/types.js';
|
|
8
9
|
import type { ToolCallHooks } from '../tools/execute.js';
|
|
9
10
|
import { type DimensionCollision, type RequestContext } from './context.js';
|
|
@@ -66,13 +67,28 @@ export interface HttpRequestObserver {
|
|
|
66
67
|
export interface Observability {
|
|
67
68
|
request?: HttpRequestObserver;
|
|
68
69
|
toolCall: ToolCallHooks;
|
|
69
|
-
/**
|
|
70
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Wait for events admitted before this call; `true` when they settled inside
|
|
72
|
+
* the bound.
|
|
73
|
+
*
|
|
74
|
+
* The outcome is RETURNED rather than left to `getStatus()`, which cannot
|
|
75
|
+
* answer it: flush waits on the generation admitted before this call, while
|
|
76
|
+
* the status counts everything alive right now — so a nonzero `pending` after
|
|
77
|
+
* a complete flush and after an expired one look identical.
|
|
78
|
+
*/
|
|
79
|
+
flush(bound?: ObservabilityDrainBound): Promise<boolean>;
|
|
71
80
|
/** Read an immutable snapshot of each enabled sink and their aggregate. */
|
|
72
81
|
getStatus(): ObservabilityStatus;
|
|
73
|
-
/**
|
|
74
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Stop admission and drain every previously accepted event. Idempotent.
|
|
84
|
+
*
|
|
85
|
+
* With a bound, returns a report rather than waiting past it; `drained` says
|
|
86
|
+
* which happened. The drain itself is started once and shared, so a second
|
|
87
|
+
* call with a shorter bound observes the same drain under its own limit.
|
|
88
|
+
*/
|
|
89
|
+
close(bound?: ObservabilityDrainBound): Promise<ObservabilityDrainReport>;
|
|
75
90
|
}
|
|
91
|
+
export type { ObservabilityDrainBound };
|
|
76
92
|
export type ProjectedDimensions = Readonly<Record<string, string | undefined>>;
|
|
77
93
|
/** Typed, explicit attribution rules composed into an application's hooks. */
|
|
78
94
|
export interface DimensionsProjectorConfig<TContext extends RuntimeContext, TResult> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/observability/audit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/observability/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* framework-owned HTTP completion plus canonical tool hooks into independent
|
|
7
7
|
* sinks.
|
|
8
8
|
*/
|
|
9
|
-
export { createDimensionsProjector, createObservability, type DimensionsProjector, type DimensionsProjectorConfig, type HttpRequestCompletion, type HttpRequestObserver, type Observability, type ObservabilityConfig, type ProjectedDimensions, type RequestEventSinkConfig, type RequestObservabilityConfig, type SinkDrop, type SinkDropReason, type SinkError, } from './audit.js';
|
|
9
|
+
export { createDimensionsProjector, createObservability, type DimensionsProjector, type DimensionsProjectorConfig, type HttpRequestCompletion, type HttpRequestObserver, type Observability, type ObservabilityConfig, type ObservabilityDrainBound, type ProjectedDimensions, type RequestEventSinkConfig, type RequestObservabilityConfig, type SinkDrop, type SinkDropReason, type SinkError, } from './audit.js';
|
|
10
10
|
export { type BoundedLoggerBounds, type BoundedLoggerOptions, createBoundedLogger, DEFAULT_REDACT_PATHS, } from './bounded-logger.js';
|
|
11
11
|
export { type DimensionCollision, getRequestContext, getTraceId, getUserId, type RequestContext, runWithRequestContext, type SetRequestDimensionsOptions, setRequestDimensions, setRequestEndpoint, setRequestError, setRequestUser, type WrapRequestContextOptions, wrapInRequestContext, } from './context.js';
|
|
12
12
|
export type { RequestEvent } from './event.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,cAAc,EACnB,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,SAAS,EACd,WAAW,EACX,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC7B,KAAK,mBAAmB,EACxB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,cAAc,EACnB,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,SAAS,EACd,WAAW,EACX,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC7B,KAAK,mBAAmB,EACxB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC"}
|