brass-runtime 1.16.0 → 1.16.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/CHANGELOG.md +17 -0
- package/README.md +283 -18
- package/dist/agent/cli/main.cjs +38 -38
- package/dist/agent/cli/main.js +6 -6
- package/dist/agent/cli/main.mjs +6 -6
- package/dist/agent/index.cjs +7 -7
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +6 -6
- package/dist/agent/index.mjs +6 -6
- package/dist/chunk-2HQTDLHF.mjs +683 -0
- package/dist/chunk-36I3M4UC.mjs +370 -0
- package/dist/{chunk-QY5FKYEQ.js → chunk-3AYM6WPJ.js} +570 -51
- package/dist/chunk-3LOYJFRR.cjs +300 -0
- package/dist/chunk-3Y2RIUMM.js +300 -0
- package/dist/{chunk-N6VHMOWB.cjs → chunk-4ROBZFL6.cjs} +128 -128
- package/dist/{chunk-NC5SDRYE.js → chunk-52OB2ROS.js} +4 -4
- package/dist/{chunk-JX3LZQJH.cjs → chunk-52PPNNI4.cjs} +82 -20
- package/dist/{chunk-5YOQOXEQ.cjs → chunk-5EC274J5.cjs} +676 -293
- package/dist/chunk-5QC7LRZ3.js +229 -0
- package/dist/{chunk-7TL2LHQJ.js → chunk-5VRJNBLZ.mjs} +524 -141
- package/dist/chunk-62AZW6UT.cjs +313 -0
- package/dist/chunk-6IXXWIUM.js +683 -0
- package/dist/chunk-74ZTY6CP.js +2871 -0
- package/dist/chunk-76YMRMH2.cjs +777 -0
- package/dist/chunk-7CMJS3QE.mjs +2871 -0
- package/dist/{chunk-2WC63LJK.mjs → chunk-7JIJOVCT.js} +20 -10
- package/dist/{chunk-FM4W4QPL.js → chunk-A2OM6NEH.mjs} +5 -4
- package/dist/chunk-AGR5B2BC.cjs +683 -0
- package/dist/chunk-AVNQLJ5V.js +777 -0
- package/dist/chunk-B33ICAKP.js +313 -0
- package/dist/{chunk-J3H54ZRV.mjs → chunk-B5JD23U7.mjs} +1 -1
- package/dist/chunk-BABBZK4Y.js +2024 -0
- package/dist/{chunk-U5KWK3PX.mjs → chunk-C3MDXTRZ.js} +11 -0
- package/dist/{chunk-F5EUMJL7.mjs → chunk-CIZFIMK5.js} +55 -5
- package/dist/{chunk-SPUEME2B.cjs → chunk-CZIVE6NT.cjs} +12 -1
- package/dist/{chunk-TDVMADDN.js → chunk-DNFJLJMW.mjs} +11 -0
- package/dist/chunk-DNFO2EIZ.mjs +777 -0
- package/dist/{chunk-XDZOO4L5.js → chunk-EJ6BPYVR.mjs} +79 -17
- package/dist/{chunk-JNFRRJYH.cjs → chunk-ENKODRU3.cjs} +242 -192
- package/dist/chunk-EOC4UHBS.mjs +229 -0
- package/dist/{chunk-7LVI2GIN.js → chunk-FH2X7BVP.js} +507 -72
- package/dist/{chunk-OOGJ73B6.js → chunk-FHQGHPMO.mjs} +20 -10
- package/dist/{chunk-WQ5QNU5R.cjs → chunk-GLE2WY7Z.cjs} +652 -217
- package/dist/{chunk-G6IQOE4P.mjs → chunk-GYM3LLGS.mjs} +507 -72
- package/dist/chunk-HLWLMW2F.mjs +2024 -0
- package/dist/{chunk-TVN5I4U6.cjs → chunk-JF5WGYJJ.cjs} +25 -24
- package/dist/{chunk-CY33PGEX.mjs → chunk-KH4SYAOS.mjs} +570 -51
- package/dist/chunk-KN32XNTH.mjs +313 -0
- package/dist/chunk-KQLYONSE.cjs +2871 -0
- package/dist/{chunk-7HUOJA4W.cjs → chunk-KZJQ723N.cjs} +90 -80
- package/dist/{chunk-CCKHV5BT.mjs → chunk-L2SYFEBS.js} +5 -4
- package/dist/{chunk-IJT6RRQ5.cjs → chunk-L6VB5N7Q.cjs} +20 -9
- package/dist/{chunk-ZGLD4TVZ.mjs → chunk-MBEJI5HF.mjs} +4 -4
- package/dist/{chunk-PRWCB3QL.mjs → chunk-MIIYDLGM.js} +524 -141
- package/dist/{chunk-H55LI6WY.js → chunk-MOO4L7F4.mjs} +15 -4
- package/dist/{chunk-7XOPAB5Q.js → chunk-MT3OWDPC.mjs} +55 -5
- package/dist/chunk-MVGUEJ5Z.cjs +370 -0
- package/dist/chunk-PD4EJTQC.cjs +229 -0
- package/dist/chunk-PWC3RBQE.mjs +300 -0
- package/dist/{chunk-MWXMNYJS.cjs → chunk-Q2I37RP3.cjs} +643 -124
- package/dist/{chunk-VFIUZG7J.mjs → chunk-RKGKFN2A.js} +79 -17
- package/dist/{chunk-NYL4D7SK.cjs → chunk-SA6HUJVI.cjs} +5 -5
- package/dist/{chunk-K2T3DV26.mjs → chunk-TRM4JUZQ.js} +15 -4
- package/dist/chunk-UB4B6OFY.js +370 -0
- package/dist/{chunk-G3XGCZDQ.js → chunk-UCUBNWM2.js} +1 -1
- package/dist/chunk-VN44DYYT.cjs +2024 -0
- package/dist/{client-CtFmoDvM.d.ts → client-CZHU674n.d.ts} +211 -36
- package/dist/core/index.cjs +135 -9
- package/dist/core/index.d.ts +238 -33
- package/dist/core/index.js +155 -29
- package/dist/core/index.mjs +155 -29
- package/dist/{effect-CGNl5Rqp.d.ts → effect-DIUHZ9IN.d.ts} +89 -1
- package/dist/effectRunner-CFLC32IK.cjs +8 -0
- package/dist/{effectRunner-A4CHJXJI.js → effectRunner-L4S7IPT3.js} +2 -2
- package/dist/{effectRunner-OPUF6QRN.mjs → effectRunner-NNGG75QA.mjs} +2 -2
- package/dist/http/index.cjs +324 -2986
- package/dist/http/index.d.ts +54 -68
- package/dist/http/index.js +238 -2900
- package/dist/http/index.mjs +238 -2900
- package/dist/http/testing.cjs +14 -12
- package/dist/http/testing.d.ts +5 -4
- package/dist/http/testing.js +10 -8
- package/dist/http/testing.mjs +10 -8
- package/dist/index.cjs +423 -255
- package/dist/index.d.ts +87 -69
- package/dist/index.js +301 -133
- package/dist/index.mjs +301 -133
- package/dist/observability/index.cjs +16 -531
- package/dist/observability/index.d.ts +81 -8
- package/dist/observability/index.js +23 -538
- package/dist/observability/index.mjs +23 -538
- package/dist/perf/cli.cjs +401 -0
- package/dist/perf/cli.d.ts +1 -0
- package/dist/perf/cli.js +401 -0
- package/dist/perf/cli.mjs +401 -0
- package/dist/perf/index.cjs +141 -0
- package/dist/perf/index.d.ts +483 -0
- package/dist/perf/index.js +141 -0
- package/dist/perf/index.mjs +141 -0
- package/dist/schedule-CK3Ml_7p.d.ts +259 -0
- package/dist/schema/index.cjs +6 -2
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.js +5 -1
- package/dist/schema/index.mjs +5 -1
- package/dist/{server-C8hDXA74.d.ts → server-GJPg8ZSG.d.ts} +4 -3
- package/dist/{stream-dvSs0QS5.d.ts → stream-B4oK9JFP.d.ts} +1 -1
- package/dist/{tracer-B5tRH9H7.d.ts → tracer-Hwt1cl7h.d.ts} +13 -54
- package/dist/{tracing-Dt9S_6V8.d.ts → tracing-DqbTKGcf.d.ts} +1 -1
- package/docs/ARCHITECTURE.md +292 -0
- package/docs/README.md +63 -0
- package/docs/adr/0001-ai-context-pack.md +32 -0
- package/docs/agent-apply-mode.md +104 -0
- package/docs/agent-approvals.md +110 -0
- package/docs/agent-batch.md +185 -0
- package/docs/agent-boundaries.md +112 -0
- package/docs/agent-chat-sessions.md +160 -0
- package/docs/agent-ci.md +17 -0
- package/docs/agent-cli.md +405 -0
- package/docs/agent-config.md +480 -0
- package/docs/agent-context-discovery.md +159 -0
- package/docs/agent-copilot-like-dx.md +126 -0
- package/docs/agent-declarative-optimized-planning.md +138 -0
- package/docs/agent-dx.md +224 -0
- package/docs/agent-env-files.md +126 -0
- package/docs/agent-follow-up-context.md +43 -0
- package/docs/agent-global-usage.md +180 -0
- package/docs/agent-init.md +109 -0
- package/docs/agent-install-and-configure.md +516 -0
- package/docs/agent-language-workspace-ux.md +99 -0
- package/docs/agent-llm-adapters.md +123 -0
- package/docs/agent-local-install.md +190 -0
- package/docs/agent-local-tests.md +51 -0
- package/docs/agent-observability.md +155 -0
- package/docs/agent-patch-quality-loop.md +162 -0
- package/docs/agent-presets.md +22 -0
- package/docs/agent-project-commands.md +237 -0
- package/docs/agent-project-intelligence.md +156 -0
- package/docs/agent-redaction.md +18 -0
- package/docs/agent-release-readiness.md +76 -0
- package/docs/agent-rollback-safety.md +162 -0
- package/docs/agent-rollback.md +23 -0
- package/docs/agent-run-artifacts.md +16 -0
- package/docs/agent-vscode-auto-discovery.md +137 -0
- package/docs/agent-vscode-batch-runner.md +100 -0
- package/docs/agent-vscode-chat-layout.md +90 -0
- package/docs/agent-vscode-clean-install.md +147 -0
- package/docs/agent-vscode-code-actions.md +70 -0
- package/docs/agent-vscode-diff-preview.md +45 -0
- package/docs/agent-vscode-inline-assist.md +56 -0
- package/docs/agent-vscode-install.md +186 -0
- package/docs/agent-vscode-model-setup.md +97 -0
- package/docs/agent-vscode-patch-preview.md +92 -0
- package/docs/agent-vscode-problems.md +79 -0
- package/docs/agent-vscode-project-dashboard.md +106 -0
- package/docs/agent-vscode-run-history.md +92 -0
- package/docs/agent-vscode-ux.md +73 -0
- package/docs/ai/INVARIANTS.md +84 -0
- package/docs/ai/PROJECT_MAP.md +338 -0
- package/docs/ai/PUBLIC_API.md +336 -0
- package/docs/ai/VALIDATION_MATRIX.md +67 -0
- package/docs/api-polish.md +37 -0
- package/docs/cancellation.md +162 -0
- package/docs/coverage.md +46 -0
- package/docs/getting-started.md +159 -0
- package/docs/guides/README.md +40 -0
- package/docs/guides/circuit-breaker.md +89 -0
- package/docs/guides/error-handling.md +91 -0
- package/docs/guides/getting-started.md +107 -0
- package/docs/guides/layers.md +189 -0
- package/docs/guides/metrics.md +101 -0
- package/docs/guides/resource-management.md +141 -0
- package/docs/guides/retry.md +215 -0
- package/docs/guides/semaphore.md +66 -0
- package/docs/guides/streams.md +117 -0
- package/docs/guides/supervisors.md +98 -0
- package/docs/guides/testing.md +162 -0
- package/docs/guides/tracing.md +71 -0
- package/docs/http-recipes.md +399 -0
- package/docs/http.md +749 -0
- package/docs/modules.md +285 -0
- package/docs/observability-collector-smoke.md +31 -0
- package/docs/observability-framework-examples.md +98 -0
- package/docs/observability.md +542 -0
- package/docs/otel-collector-smoke.yaml +27 -0
- package/docs/performance-profiler.md +199 -0
- package/docs/production-readiness.md +73 -0
- package/docs/recipes/README.md +12 -0
- package/docs/recipes/http-server.md +45 -0
- package/docs/recipes/layers.md +44 -0
- package/docs/recipes/performance.md +47 -0
- package/docs/recipes/runtime.md +41 -0
- package/docs/recipes/testing.md +41 -0
- package/docs/release.md +53 -0
- package/docs/wasm-bounded-queues.md +44 -0
- package/docs/wasm-engine-observability-benchmarks.md +85 -0
- package/docs/wasm-fiber-engine.md +117 -0
- package/docs/wasm-scheduler-state-machine.md +122 -0
- package/docs/wasm-stream-chunks.md +54 -0
- package/package.json +22 -2
- package/dist/chunk-45F7OKGT.cjs +0 -104
- package/dist/chunk-7V4KY4RL.mjs +0 -104
- package/dist/chunk-DJQ7OMMB.cjs +0 -144
- package/dist/chunk-GOV47PPB.mjs +0 -552
- package/dist/chunk-JF4XXPZ5.cjs +0 -552
- package/dist/chunk-KCPT2D6G.js +0 -552
- package/dist/chunk-NOYZIMUJ.mjs +0 -144
- package/dist/chunk-PNVFW245.js +0 -144
- package/dist/chunk-ROJC3NBJ.js +0 -104
- package/dist/effectRunner-3ZHAD3LE.cjs +0 -8
- package/dist/schedule-Fque9Abz.d.ts +0 -70
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunk52PPNNI4cjs = require('./chunk-52PPNNI4.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkGLE2WY7Zcjs = require('./chunk-GLE2WY7Z.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkMVGUEJ5Zcjs = require('./chunk-MVGUEJ5Z.cjs');
|
|
13
|
+
|
|
14
|
+
// src/core/runtime/fiberRef.ts
|
|
15
|
+
var nextFiberRefId = 1;
|
|
16
|
+
function makeFiberRef(initial) {
|
|
17
|
+
const ref = {
|
|
18
|
+
id: nextFiberRefId++,
|
|
19
|
+
initial,
|
|
20
|
+
get: () => getFiberRef(ref),
|
|
21
|
+
set: (value) => setFiberRef(ref, value),
|
|
22
|
+
update: (f) => updateFiberRef(ref, f),
|
|
23
|
+
modify: (f) => modifyFiberRef(ref, f),
|
|
24
|
+
locally: (value, effect) => locallyFiberRef(ref, value, effect),
|
|
25
|
+
locallyWith: (f, effect) => locallyFiberRefWith(ref, f, effect),
|
|
26
|
+
unsafeGet: () => unsafeGetFiberRef(ref),
|
|
27
|
+
unsafeSet: (value) => unsafeSetFiberRef(ref, value)
|
|
28
|
+
};
|
|
29
|
+
return ref;
|
|
30
|
+
}
|
|
31
|
+
function getFiberRef(ref) {
|
|
32
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => unsafeGetFiberRef(ref));
|
|
33
|
+
}
|
|
34
|
+
function setFiberRef(ref, value) {
|
|
35
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => {
|
|
36
|
+
unsafeSetFiberRef(ref, value);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function updateFiberRef(ref, f) {
|
|
40
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => {
|
|
41
|
+
const next = f(unsafeGetFiberRef(ref));
|
|
42
|
+
unsafeSetFiberRef(ref, next);
|
|
43
|
+
return next;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function modifyFiberRef(ref, f) {
|
|
47
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => {
|
|
48
|
+
const [result, next] = f(unsafeGetFiberRef(ref));
|
|
49
|
+
unsafeSetFiberRef(ref, next);
|
|
50
|
+
return result;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function locallyFiberRef(ref, value, effect) {
|
|
54
|
+
return {
|
|
55
|
+
_tag: "FiberRefLocally",
|
|
56
|
+
refId: ref.id,
|
|
57
|
+
value,
|
|
58
|
+
effect
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function locallyFiberRefWith(ref, f, effect) {
|
|
62
|
+
return _chunkMVGUEJ5Zcjs.asyncFlatMap.call(void 0, getFiberRef(ref), (value) => locallyFiberRef(ref, f(value), effect));
|
|
63
|
+
}
|
|
64
|
+
function unsafeGetFiberRef(ref) {
|
|
65
|
+
const refs = currentFiberRefs(false);
|
|
66
|
+
return _optionalChain([refs, 'optionalAccess', _ => _.has, 'call', _2 => _2(ref.id)]) ? refs.get(ref.id) : ref.initial;
|
|
67
|
+
}
|
|
68
|
+
function unsafeSetFiberRef(ref, value) {
|
|
69
|
+
const refs = currentFiberRefs(true);
|
|
70
|
+
_optionalChain([refs, 'optionalAccess', _3 => _3.set, 'call', _4 => _4(ref.id, value)]);
|
|
71
|
+
}
|
|
72
|
+
function fiberRefSnapshot() {
|
|
73
|
+
return new Map(currentFiberRefs(false));
|
|
74
|
+
}
|
|
75
|
+
function currentFiberRefs(create) {
|
|
76
|
+
const fiber = _chunkGLE2WY7Zcjs.getCurrentFiber.call(void 0, );
|
|
77
|
+
if (!fiber) return void 0;
|
|
78
|
+
fiber.fiberContext ??= { log: _chunkGLE2WY7Zcjs.emptyContext, trace: null };
|
|
79
|
+
if (!fiber.fiberContext.fiberRefs && create) fiber.fiberContext.fiberRefs = /* @__PURE__ */ new Map();
|
|
80
|
+
return fiber.fiberContext.fiberRefs;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/core/runtime/recorder.ts
|
|
84
|
+
function makeRuntimeRecorder(options = {}) {
|
|
85
|
+
const capacity = Math.max(1, Math.floor(_nullishCoalesce(options.maxEvents, () => ( 2048))));
|
|
86
|
+
const records = new Array(capacity);
|
|
87
|
+
let next = 0;
|
|
88
|
+
let size = 0;
|
|
89
|
+
let dropped = 0;
|
|
90
|
+
let seq = 1;
|
|
91
|
+
const snapshot = () => {
|
|
92
|
+
const out = [];
|
|
93
|
+
const start = size === capacity ? next : 0;
|
|
94
|
+
for (let i = 0; i < size; i++) {
|
|
95
|
+
const record = records[(start + i) % capacity];
|
|
96
|
+
if (record) out.push(record);
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
};
|
|
100
|
+
const emit = (ev, ctx) => {
|
|
101
|
+
records[next] = _chunk52PPNNI4cjs.makeRuntimeEventRecord.call(void 0, ev, ctx, seq++);
|
|
102
|
+
next = (next + 1) % capacity;
|
|
103
|
+
if (size < capacity) size++;
|
|
104
|
+
else dropped++;
|
|
105
|
+
};
|
|
106
|
+
const clear = () => {
|
|
107
|
+
records.fill(void 0);
|
|
108
|
+
next = 0;
|
|
109
|
+
size = 0;
|
|
110
|
+
dropped = 0;
|
|
111
|
+
};
|
|
112
|
+
const stats = () => {
|
|
113
|
+
const current = snapshot();
|
|
114
|
+
return {
|
|
115
|
+
size,
|
|
116
|
+
capacity,
|
|
117
|
+
dropped,
|
|
118
|
+
...current[0] ? { firstSeq: current[0].seq } : {},
|
|
119
|
+
...current[current.length - 1] ? { lastSeq: current[current.length - 1].seq } : {}
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
const recorder = {
|
|
123
|
+
emit,
|
|
124
|
+
snapshot,
|
|
125
|
+
clear,
|
|
126
|
+
stats,
|
|
127
|
+
explain: (explainOptions = {}) => explainRuntimeEvents(snapshot(), dropped, explainOptions)
|
|
128
|
+
};
|
|
129
|
+
return Object.assign(recorder, { hooks: recorder });
|
|
130
|
+
}
|
|
131
|
+
function explainRuntimeEvents(events, dropped, options) {
|
|
132
|
+
const maxEvents = Math.max(1, Math.floor(_nullishCoalesce(options.maxEvents, () => ( 80))));
|
|
133
|
+
const slice = events.length > maxEvents ? events.slice(events.length - maxEvents) : events;
|
|
134
|
+
const fiberStarts = /* @__PURE__ */ new Map();
|
|
135
|
+
const fiberSuspends = /* @__PURE__ */ new Map();
|
|
136
|
+
const lines = [`Runtime flight recorder: ${events.length} event${events.length === 1 ? "" : "s"}${dropped > 0 ? `, ${dropped} dropped` : ""}.`];
|
|
137
|
+
for (const event of slice) {
|
|
138
|
+
switch (event.type) {
|
|
139
|
+
case "fiber.start": {
|
|
140
|
+
fiberStarts.set(event.fiberId, event);
|
|
141
|
+
lines.push(`fiber#${event.fiberId} started${event.name ? ` "${event.name}"` : ""}${event.parentFiberId !== void 0 ? ` parent=fiber#${event.parentFiberId}` : ""}`);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case "fiber.suspend": {
|
|
145
|
+
fiberSuspends.set(event.fiberId, event);
|
|
146
|
+
lines.push(`fiber#${event.fiberId} suspended awaiting ${_nullishCoalesce(event.reason, () => ( "unknown"))}`);
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case "fiber.resume": {
|
|
150
|
+
const suspended = fiberSuspends.get(event.fiberId);
|
|
151
|
+
fiberSuspends.delete(event.fiberId);
|
|
152
|
+
lines.push(`fiber#${event.fiberId} resumed${suspended ? ` after ${durationMs(suspended, event)} awaiting ${fiberSuspendReason(suspended)}` : ""}`);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
case "fiber.end": {
|
|
156
|
+
const started = fiberStarts.get(event.fiberId);
|
|
157
|
+
const suspended = fiberSuspends.get(event.fiberId);
|
|
158
|
+
fiberSuspends.delete(event.fiberId);
|
|
159
|
+
lines.push(`fiber#${event.fiberId} ended ${event.status}${started ? ` after ${durationMs(started, event)}` : ""}${suspended ? ` while awaiting ${fiberSuspendReason(suspended)}` : ""}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case "scope.open":
|
|
163
|
+
lines.push(`scope#${event.scopeId} opened${event.parentScopeId !== void 0 ? ` parent=scope#${event.parentScopeId}` : ""}`);
|
|
164
|
+
break;
|
|
165
|
+
case "scope.close":
|
|
166
|
+
lines.push(`scope#${event.scopeId} closed ${event.status}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
167
|
+
break;
|
|
168
|
+
case "supervisor.child.restart":
|
|
169
|
+
lines.push(`supervisor#${event.supervisorId} restarting child#${event.childId} attempt=${event.restartCount} delay=${event.delayMs}ms${event.reason ? ` reason=${event.reason}` : ""}`);
|
|
170
|
+
break;
|
|
171
|
+
case "supervisor.child.escalate":
|
|
172
|
+
lines.push(`supervisor#${event.supervisorId} escalated child#${event.childId}${event.reason ? ` reason=${event.reason}` : ""}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
173
|
+
break;
|
|
174
|
+
case "schedule.decision":
|
|
175
|
+
lines.push(`schedule${event.name ? ` "${event.name}"` : ""} attempt=${event.attempt} ${event.continue ? "continues" : "stops"} delay=${event.delayMs}ms elapsed=${Math.round(event.elapsedMs)}ms${event.reason ? ` reason=${event.reason}` : ""}`);
|
|
176
|
+
break;
|
|
177
|
+
case "log":
|
|
178
|
+
if (event.level === "warn" || event.level === "error") {
|
|
179
|
+
lines.push(`${event.level}: ${_nullishCoalesce(event.message, () => ( ""))}${event.fields ? ` ${JSON.stringify(event.fields)}` : ""}`);
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
case "span.start":
|
|
183
|
+
lines.push(`span started "${event.name}"${event.traceId ? ` trace=${event.traceId}` : ""}`);
|
|
184
|
+
break;
|
|
185
|
+
case "span.end":
|
|
186
|
+
lines.push(`span ended ${event.status}${event.name ? ` "${event.name}"` : ""}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
for (const suspended of fiberSuspends.values()) {
|
|
193
|
+
lines.push(`fiber#${suspended.fiberId} still suspended for ${durationFromNowMs(suspended)} awaiting ${fiberSuspendReason(suspended)}`);
|
|
194
|
+
}
|
|
195
|
+
return lines.join("\n");
|
|
196
|
+
}
|
|
197
|
+
function durationMs(start, end) {
|
|
198
|
+
return `${Math.max(0, Math.round(end.wallTs - start.wallTs))}ms`;
|
|
199
|
+
}
|
|
200
|
+
function durationFromNowMs(start) {
|
|
201
|
+
return `${Math.max(0, Math.round(Date.now() - start.wallTs))}ms`;
|
|
202
|
+
}
|
|
203
|
+
function formatUnknown(value) {
|
|
204
|
+
if (_chunkMVGUEJ5Zcjs.Cause.isCause(value)) return _chunkMVGUEJ5Zcjs.Cause.pretty(value, { singleLine: true });
|
|
205
|
+
if (value instanceof Error) return value.message;
|
|
206
|
+
if (typeof value === "string") return value;
|
|
207
|
+
try {
|
|
208
|
+
return JSON.stringify(value);
|
|
209
|
+
} catch (e) {
|
|
210
|
+
return String(value);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function fiberSuspendReason(record) {
|
|
214
|
+
return record.type === "fiber.suspend" ? _nullishCoalesce(record.reason, () => ( "unknown")) : "unknown";
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
exports.makeFiberRef = makeFiberRef; exports.getFiberRef = getFiberRef; exports.setFiberRef = setFiberRef; exports.updateFiberRef = updateFiberRef; exports.modifyFiberRef = modifyFiberRef; exports.locallyFiberRef = locallyFiberRef; exports.locallyFiberRefWith = locallyFiberRefWith; exports.unsafeGetFiberRef = unsafeGetFiberRef; exports.unsafeSetFiberRef = unsafeSetFiberRef; exports.fiberRefSnapshot = fiberRefSnapshot; exports.makeRuntimeRecorder = makeRuntimeRecorder;
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import {
|
|
2
|
+
asyncFlatMap,
|
|
3
|
+
asyncSync
|
|
4
|
+
} from "./chunk-36I3M4UC.mjs";
|
|
5
|
+
|
|
6
|
+
// src/http/requestPolicy.ts
|
|
7
|
+
var hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
8
|
+
var isPolicyObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
9
|
+
var defineHttpPolicyPresets = (presets) => presets;
|
|
10
|
+
var httpPolicy = Object.freeze({
|
|
11
|
+
preset: (preset, overrides = {}) => ({
|
|
12
|
+
preset,
|
|
13
|
+
...overrides
|
|
14
|
+
}),
|
|
15
|
+
lane: (lane, overrides = {}) => ({
|
|
16
|
+
preset: lane,
|
|
17
|
+
lane,
|
|
18
|
+
...overrides
|
|
19
|
+
}),
|
|
20
|
+
define: defineHttpPolicyPresets
|
|
21
|
+
});
|
|
22
|
+
var getHttpRequestPolicy = (req, options = {}) => {
|
|
23
|
+
const legacy = req;
|
|
24
|
+
const source = req.policy;
|
|
25
|
+
const sourcePolicy = resolvePolicySource(req, source, options.presets);
|
|
26
|
+
const policy = {
|
|
27
|
+
...legacy.lane !== void 0 ? { lane: legacy.lane } : {},
|
|
28
|
+
...legacy.dedupKey !== void 0 ? { dedupKey: legacy.dedupKey } : {},
|
|
29
|
+
...legacy.priority !== void 0 ? { priority: legacy.priority } : {},
|
|
30
|
+
...legacy.retry !== void 0 ? { retry: legacy.retry } : {},
|
|
31
|
+
...req.poolKey !== void 0 ? { poolKey: req.poolKey } : {},
|
|
32
|
+
...sourcePolicy
|
|
33
|
+
};
|
|
34
|
+
return policy;
|
|
35
|
+
};
|
|
36
|
+
var withHttpRequestPolicy = (req, patch) => {
|
|
37
|
+
const current = getHttpRequestPolicy(req);
|
|
38
|
+
const next = {
|
|
39
|
+
...req,
|
|
40
|
+
policy: {
|
|
41
|
+
...current,
|
|
42
|
+
...patch
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
if (hasOwn(patch, "poolKey")) {
|
|
46
|
+
next.poolKey = patch.poolKey;
|
|
47
|
+
}
|
|
48
|
+
if (hasOwn(patch, "lane")) {
|
|
49
|
+
next.lane = patch.lane;
|
|
50
|
+
}
|
|
51
|
+
if (hasOwn(patch, "dedupKey")) {
|
|
52
|
+
next.dedupKey = patch.dedupKey;
|
|
53
|
+
}
|
|
54
|
+
if (hasOwn(patch, "priority")) {
|
|
55
|
+
next.priority = patch.priority;
|
|
56
|
+
}
|
|
57
|
+
if (hasOwn(patch, "retry")) {
|
|
58
|
+
next.retry = patch.retry;
|
|
59
|
+
}
|
|
60
|
+
return next;
|
|
61
|
+
};
|
|
62
|
+
var resolveHttpRequestPolicyPresets = (req, presets) => {
|
|
63
|
+
const policy = getHttpRequestPolicy(req, { presets });
|
|
64
|
+
return withHttpRequestPolicy({ ...req, policy }, policy);
|
|
65
|
+
};
|
|
66
|
+
var withHttpPolicyPresets = (presets) => {
|
|
67
|
+
return (next) => (req) => asyncFlatMap(
|
|
68
|
+
asyncSync(() => resolveHttpRequestPolicyPresets(req, presets)),
|
|
69
|
+
(resolved) => next(resolved)
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
function resolvePolicySource(req, source, presets) {
|
|
73
|
+
if (typeof source === "string") {
|
|
74
|
+
return resolveNamedPolicy(req, source, {}, presets);
|
|
75
|
+
}
|
|
76
|
+
if (!isPolicyObject(source)) return {};
|
|
77
|
+
if (!source.preset) return source;
|
|
78
|
+
return resolveNamedPolicy(req, source.preset, source, presets);
|
|
79
|
+
}
|
|
80
|
+
function resolveNamedPolicy(req, presetName, overrides, presets) {
|
|
81
|
+
const named = presets?.[presetName];
|
|
82
|
+
const resolved = typeof named === "function" ? named(req, presetName) : named;
|
|
83
|
+
return {
|
|
84
|
+
lane: presetName,
|
|
85
|
+
...isPolicyObject(resolved) ? resolved : {},
|
|
86
|
+
...overrides,
|
|
87
|
+
preset: presetName
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// src/http/errors.ts
|
|
92
|
+
var HTTP_ERROR_TAGS = /* @__PURE__ */ new Set([
|
|
93
|
+
"Abort",
|
|
94
|
+
"BadUrl",
|
|
95
|
+
"FetchError",
|
|
96
|
+
"Timeout",
|
|
97
|
+
"PoolRejected",
|
|
98
|
+
"PoolTimeout",
|
|
99
|
+
"PoolClosed",
|
|
100
|
+
"BatchSplitError"
|
|
101
|
+
]);
|
|
102
|
+
var RETRYABLE_STATUS = /* @__PURE__ */ new Set([408, 429, 500, 502, 503, 504]);
|
|
103
|
+
var TIMEOUT_CODES = /* @__PURE__ */ new Set([
|
|
104
|
+
"ECONNABORTED",
|
|
105
|
+
"ETIMEDOUT",
|
|
106
|
+
"ESOCKETTIMEDOUT",
|
|
107
|
+
"UND_ERR_CONNECT_TIMEOUT",
|
|
108
|
+
"UND_ERR_HEADERS_TIMEOUT",
|
|
109
|
+
"UND_ERR_BODY_TIMEOUT"
|
|
110
|
+
]);
|
|
111
|
+
var ABORT_CODES = /* @__PURE__ */ new Set(["ERR_CANCELED", "ABORT_ERR"]);
|
|
112
|
+
function isHttpError(error) {
|
|
113
|
+
return hasTag(error) && HTTP_ERROR_TAGS.has(error._tag);
|
|
114
|
+
}
|
|
115
|
+
function isValidationError(error) {
|
|
116
|
+
return hasTag(error) && error._tag === "ValidationError";
|
|
117
|
+
}
|
|
118
|
+
function isCircuitBreakerOpen(error) {
|
|
119
|
+
return hasTag(error) && error._tag === "CircuitBreakerOpen";
|
|
120
|
+
}
|
|
121
|
+
function isKnownHttpError(error) {
|
|
122
|
+
return isHttpError(error) || isValidationError(error) || isCircuitBreakerOpen(error);
|
|
123
|
+
}
|
|
124
|
+
function isAbortHttpError(error) {
|
|
125
|
+
return isHttpError(error) && error._tag === "Abort";
|
|
126
|
+
}
|
|
127
|
+
function isTimeoutHttpError(error) {
|
|
128
|
+
return isHttpError(error) && (error._tag === "Timeout" || error._tag === "PoolTimeout");
|
|
129
|
+
}
|
|
130
|
+
function isFetchHttpError(error) {
|
|
131
|
+
return isHttpError(error) && error._tag === "FetchError";
|
|
132
|
+
}
|
|
133
|
+
function httpErrorStatus(error) {
|
|
134
|
+
if (!isFetchHttpError(error)) return void 0;
|
|
135
|
+
return typeof error.status === "number" && Number.isFinite(error.status) ? error.status : void 0;
|
|
136
|
+
}
|
|
137
|
+
function isRetryableHttpStatus(status) {
|
|
138
|
+
return RETRYABLE_STATUS.has(status);
|
|
139
|
+
}
|
|
140
|
+
function isRetryableHttpError(error, options = {}) {
|
|
141
|
+
if (!isHttpError(error)) return false;
|
|
142
|
+
switch (error._tag) {
|
|
143
|
+
case "Timeout":
|
|
144
|
+
case "PoolTimeout":
|
|
145
|
+
return true;
|
|
146
|
+
case "FetchError": {
|
|
147
|
+
const status = httpErrorStatus(error);
|
|
148
|
+
if (status !== void 0) return (options.retryOnStatus ?? isRetryableHttpStatus)(status);
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
default:
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function isExternalAbortError(error) {
|
|
156
|
+
if (typeof error !== "object" || error === null) return false;
|
|
157
|
+
const record = error;
|
|
158
|
+
return record.name === "AbortError" || ABORT_CODES.has(String(record.code ?? ""));
|
|
159
|
+
}
|
|
160
|
+
function isExternalTimeoutError(error) {
|
|
161
|
+
if (typeof error !== "object" || error === null) return false;
|
|
162
|
+
const record = error;
|
|
163
|
+
return record.name === "TimeoutError" || TIMEOUT_CODES.has(String(record.code ?? ""));
|
|
164
|
+
}
|
|
165
|
+
function toHttpError(error, options = {}) {
|
|
166
|
+
if (isHttpError(error)) return error;
|
|
167
|
+
if (options.signal?.aborted || isExternalAbortError(error)) {
|
|
168
|
+
return { _tag: "Abort" };
|
|
169
|
+
}
|
|
170
|
+
const status = externalStatus(error);
|
|
171
|
+
const statusText = externalStatusText(error);
|
|
172
|
+
const code = externalCode(error);
|
|
173
|
+
const message = resolveMessage(error, options.message);
|
|
174
|
+
if (isExternalTimeoutError(error)) {
|
|
175
|
+
return {
|
|
176
|
+
_tag: "Timeout",
|
|
177
|
+
timeoutMs: options.timeoutMs ?? 0,
|
|
178
|
+
phase: options.phase ?? "request",
|
|
179
|
+
message
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
_tag: "FetchError",
|
|
184
|
+
message,
|
|
185
|
+
...code !== void 0 ? { code } : {},
|
|
186
|
+
...status !== void 0 ? { status } : {},
|
|
187
|
+
...statusText !== void 0 ? { statusText } : {},
|
|
188
|
+
...retryAfterMsFromExternal(error) !== void 0 ? { retryAfterMs: retryAfterMsFromExternal(error) } : {},
|
|
189
|
+
cause: error
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function matchHttpError(error, handlers) {
|
|
193
|
+
if (isKnownHttpError(error)) {
|
|
194
|
+
const handler = handlers[error._tag];
|
|
195
|
+
if (handler) return handler(error);
|
|
196
|
+
}
|
|
197
|
+
return handlers.default?.(error);
|
|
198
|
+
}
|
|
199
|
+
function formatHttpError(error) {
|
|
200
|
+
if (isValidationError(error)) {
|
|
201
|
+
const phase = error.phase ? `${error.phase} ` : "";
|
|
202
|
+
return `${phase}validation failed: ${error.message}`;
|
|
203
|
+
}
|
|
204
|
+
if (isCircuitBreakerOpen(error)) {
|
|
205
|
+
return `Circuit breaker is open after ${error.failures} failure(s)`;
|
|
206
|
+
}
|
|
207
|
+
if (!isHttpError(error)) {
|
|
208
|
+
return error instanceof Error ? error.message : String(error);
|
|
209
|
+
}
|
|
210
|
+
switch (error._tag) {
|
|
211
|
+
case "Abort":
|
|
212
|
+
return "HTTP request aborted";
|
|
213
|
+
case "BadUrl":
|
|
214
|
+
case "PoolRejected":
|
|
215
|
+
case "PoolTimeout":
|
|
216
|
+
case "PoolClosed":
|
|
217
|
+
case "BatchSplitError":
|
|
218
|
+
return error.message;
|
|
219
|
+
case "FetchError":
|
|
220
|
+
return formatFetchError(error);
|
|
221
|
+
case "Timeout":
|
|
222
|
+
return error.message;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function hasTag(error) {
|
|
226
|
+
return typeof error === "object" && error !== null && typeof error._tag === "string";
|
|
227
|
+
}
|
|
228
|
+
function externalCode(error) {
|
|
229
|
+
if (typeof error !== "object" || error === null) return void 0;
|
|
230
|
+
const code = error.code;
|
|
231
|
+
return typeof code === "string" && code.length > 0 ? code : void 0;
|
|
232
|
+
}
|
|
233
|
+
function externalStatus(error) {
|
|
234
|
+
if (typeof error !== "object" || error === null) return void 0;
|
|
235
|
+
const record = error;
|
|
236
|
+
const response = typeof record.response === "object" && record.response !== null ? record.response : void 0;
|
|
237
|
+
const status = response?.status ?? record.status ?? record.statusCode;
|
|
238
|
+
return typeof status === "number" && Number.isFinite(status) ? status : void 0;
|
|
239
|
+
}
|
|
240
|
+
function externalStatusText(error) {
|
|
241
|
+
if (typeof error !== "object" || error === null) return void 0;
|
|
242
|
+
const record = error;
|
|
243
|
+
const response = typeof record.response === "object" && record.response !== null ? record.response : void 0;
|
|
244
|
+
const statusText = response?.statusText ?? record.statusText ?? record.statusMessage;
|
|
245
|
+
return typeof statusText === "string" && statusText.length > 0 ? statusText : void 0;
|
|
246
|
+
}
|
|
247
|
+
function retryAfterMsFromExternal(error) {
|
|
248
|
+
if (typeof error !== "object" || error === null) return void 0;
|
|
249
|
+
const record = error;
|
|
250
|
+
const response = typeof record.response === "object" && record.response !== null ? record.response : void 0;
|
|
251
|
+
const headers = response?.headers ?? record.headers;
|
|
252
|
+
if (typeof headers !== "object" || headers === null) return void 0;
|
|
253
|
+
const headerRecord = headers;
|
|
254
|
+
const raw = headerRecord["retry-after"] ?? headerRecord["Retry-After"];
|
|
255
|
+
if (raw === void 0 || raw === null) return void 0;
|
|
256
|
+
const seconds = Number(raw);
|
|
257
|
+
if (Number.isFinite(seconds)) return Math.max(0, Math.floor(seconds * 1e3));
|
|
258
|
+
const dateMs = Date.parse(String(raw));
|
|
259
|
+
return Number.isFinite(dateMs) ? Math.max(0, dateMs - Date.now()) : void 0;
|
|
260
|
+
}
|
|
261
|
+
function resolveMessage(error, message) {
|
|
262
|
+
if (typeof message === "function") return message(error);
|
|
263
|
+
if (typeof message === "string") return message;
|
|
264
|
+
if (error instanceof Error && error.message) return error.message;
|
|
265
|
+
if (typeof error === "object" && error !== null) {
|
|
266
|
+
const value = error.message;
|
|
267
|
+
if (typeof value === "string" && value.length > 0) return value;
|
|
268
|
+
}
|
|
269
|
+
return String(error);
|
|
270
|
+
}
|
|
271
|
+
function formatFetchError(error) {
|
|
272
|
+
const status = httpErrorStatus(error);
|
|
273
|
+
if (status === void 0) return error.message;
|
|
274
|
+
const statusText = error.statusText ? ` ${error.statusText}` : "";
|
|
275
|
+
return `HTTP ${status}${statusText}: ${error.message}`;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export {
|
|
279
|
+
defineHttpPolicyPresets,
|
|
280
|
+
httpPolicy,
|
|
281
|
+
getHttpRequestPolicy,
|
|
282
|
+
withHttpRequestPolicy,
|
|
283
|
+
resolveHttpRequestPolicyPresets,
|
|
284
|
+
withHttpPolicyPresets,
|
|
285
|
+
isHttpError,
|
|
286
|
+
isValidationError,
|
|
287
|
+
isCircuitBreakerOpen,
|
|
288
|
+
isKnownHttpError,
|
|
289
|
+
isAbortHttpError,
|
|
290
|
+
isTimeoutHttpError,
|
|
291
|
+
isFetchHttpError,
|
|
292
|
+
httpErrorStatus,
|
|
293
|
+
isRetryableHttpStatus,
|
|
294
|
+
isRetryableHttpError,
|
|
295
|
+
isExternalAbortError,
|
|
296
|
+
isExternalTimeoutError,
|
|
297
|
+
toHttpError,
|
|
298
|
+
matchHttpError,
|
|
299
|
+
formatHttpError
|
|
300
|
+
};
|