@warlock.js/ai-panoptic 4.8.2 → 4.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.cjs +31 -31
- package/cjs/index.cjs.map +1 -1
- package/esm/collector/collector.d.mts +1 -1
- package/esm/collector/collector.d.mts.map +1 -1
- package/esm/collector/collector.mjs +1 -1
- package/esm/collector/collector.mjs.map +1 -1
- package/esm/collector/content-capture.type.d.mts +1 -1
- package/esm/collector/content-capture.type.d.mts.map +1 -1
- package/esm/collector/extract-span-attributes.d.mts +1 -1
- package/esm/collector/extract-span-attributes.d.mts.map +1 -1
- package/esm/collector/extract-span-attributes.mjs +1 -1
- package/esm/collector/extract-span-attributes.mjs.map +1 -1
- package/esm/collector/normalize-error.d.mts +1 -1
- package/esm/collector/normalize-error.d.mts.map +1 -1
- package/esm/collector/normalize-error.mjs +1 -1
- package/esm/collector/normalize-error.mjs.map +1 -1
- package/esm/collector/report-to-span.d.mts +1 -1
- package/esm/collector/report-to-span.d.mts.map +1 -1
- package/esm/collector/report-to-span.mjs +1 -1
- package/esm/collector/report-to-span.mjs.map +1 -1
- package/esm/collector/report-to-trace.d.mts +1 -1
- package/esm/collector/report-to-trace.d.mts.map +1 -1
- package/esm/collector/report-to-trace.mjs +1 -1
- package/esm/collector/report-to-trace.mjs.map +1 -1
- package/esm/config/apply-panoptic-config.d.mts +1 -1
- package/esm/config/apply-panoptic-config.d.mts.map +1 -1
- package/esm/config/apply-panoptic-config.mjs +1 -1
- package/esm/config/apply-panoptic-config.mjs.map +1 -1
- package/esm/config/panoptic-config.type.d.mts +1 -1
- package/esm/config/panoptic-config.type.d.mts.map +1 -1
- package/esm/contracts/collector.contract.d.mts +1 -1
- package/esm/contracts/collector.contract.d.mts.map +1 -1
- package/esm/contracts/exporter.contract.d.mts +1 -1
- package/esm/contracts/exporter.contract.d.mts.map +1 -1
- package/esm/contracts/trace.type.d.mts +1 -1
- package/esm/contracts/trace.type.d.mts.map +1 -1
- package/esm/dashboard/dashboard.d.mts +1 -1
- package/esm/dashboard/dashboard.d.mts.map +1 -1
- package/esm/dashboard/dashboard.mjs +1 -1
- package/esm/dashboard/dashboard.mjs.map +1 -1
- package/esm/dashboard/dashboard.type.d.mts +1 -1
- package/esm/dashboard/dashboard.type.d.mts.map +1 -1
- package/esm/dashboard/parse-query.mjs +1 -1
- package/esm/dashboard/parse-query.mjs.map +1 -1
- package/esm/dashboard/serve.mjs +1 -1
- package/esm/dashboard/serve.mjs.map +1 -1
- package/esm/dashboard/trace-filter.d.mts +1 -1
- package/esm/dashboard/trace-filter.d.mts.map +1 -1
- package/esm/dashboard/trace-filter.mjs +1 -1
- package/esm/dashboard/trace-filter.mjs.map +1 -1
- package/esm/dashboard/ui.html.mjs +1 -1
- package/esm/dashboard/ui.html.mjs.map +1 -1
- package/esm/dashboard/warlock-logo.mjs +1 -1
- package/esm/dashboard/warlock-logo.mjs.map +1 -1
- package/esm/evaluate/evaluate-system-prompt.d.mts +1 -1
- package/esm/evaluate/evaluate-system-prompt.d.mts.map +1 -1
- package/esm/evaluate/evaluate-system-prompt.mjs +1 -1
- package/esm/evaluate/evaluate-system-prompt.mjs.map +1 -1
- package/esm/evaluate/evaluate.type.d.mts +1 -1
- package/esm/evaluate/evaluate.type.d.mts.map +1 -1
- package/esm/evaluate/extract-last-system-prompt.d.mts +1 -1
- package/esm/evaluate/extract-last-system-prompt.d.mts.map +1 -1
- package/esm/evaluate/extract-last-system-prompt.mjs +1 -1
- package/esm/evaluate/extract-last-system-prompt.mjs.map +1 -1
- package/esm/evaluate/find-span-by-id.d.mts +1 -1
- package/esm/evaluate/find-span-by-id.d.mts.map +1 -1
- package/esm/evaluate/find-span-by-id.mjs +1 -1
- package/esm/evaluate/find-span-by-id.mjs.map +1 -1
- package/esm/exporters/console/console-exporter.d.mts +1 -1
- package/esm/exporters/console/console-exporter.d.mts.map +1 -1
- package/esm/exporters/console/console-exporter.mjs +1 -1
- package/esm/exporters/console/console-exporter.mjs.map +1 -1
- package/esm/exporters/console/console-exporter.type.d.mts +1 -1
- package/esm/exporters/console/console-exporter.type.d.mts.map +1 -1
- package/esm/exporters/console/format-span-io.d.mts +1 -1
- package/esm/exporters/console/format-span-io.d.mts.map +1 -1
- package/esm/exporters/console/format-span-io.mjs +1 -1
- package/esm/exporters/console/format-span-io.mjs.map +1 -1
- package/esm/exporters/console/format-span-line.d.mts +1 -1
- package/esm/exporters/console/format-span-line.d.mts.map +1 -1
- package/esm/exporters/console/format-span-line.mjs +1 -1
- package/esm/exporters/console/format-span-line.mjs.map +1 -1
- package/esm/exporters/file/file-exporter.d.mts +1 -1
- package/esm/exporters/file/file-exporter.d.mts.map +1 -1
- package/esm/exporters/file/file-exporter.mjs +1 -1
- package/esm/exporters/file/file-exporter.mjs.map +1 -1
- package/esm/exporters/file/file-exporter.type.d.mts +1 -1
- package/esm/exporters/file/file-exporter.type.d.mts.map +1 -1
- package/esm/exporters/langfuse/langfuse-exporter.d.mts +1 -1
- package/esm/exporters/langfuse/langfuse-exporter.d.mts.map +1 -1
- package/esm/exporters/langfuse/langfuse-exporter.mjs +1 -1
- package/esm/exporters/langfuse/langfuse-exporter.mjs.map +1 -1
- package/esm/exporters/langfuse/langfuse-exporter.type.d.mts +1 -1
- package/esm/exporters/langfuse/langfuse-exporter.type.d.mts.map +1 -1
- package/esm/exporters/otel/otel-api.shim.type.d.mts +1 -1
- package/esm/exporters/otel/otel-api.shim.type.d.mts.map +1 -1
- package/esm/exporters/otel/otel-exporter.d.mts +1 -1
- package/esm/exporters/otel/otel-exporter.d.mts.map +1 -1
- package/esm/exporters/otel/otel-exporter.mjs +1 -1
- package/esm/exporters/otel/otel-exporter.mjs.map +1 -1
- package/esm/exporters/otel/otel-exporter.type.d.mts +1 -1
- package/esm/exporters/otel/otel-exporter.type.d.mts.map +1 -1
- package/esm/exporters/utils/gen-ai-attributes.d.mts +1 -1
- package/esm/exporters/utils/gen-ai-attributes.d.mts.map +1 -1
- package/esm/exporters/utils/gen-ai-attributes.mjs +1 -1
- package/esm/exporters/utils/gen-ai-attributes.mjs.map +1 -1
- package/esm/exporters/utils/total-cost.d.mts +1 -1
- package/esm/exporters/utils/total-cost.d.mts.map +1 -1
- package/esm/exporters/utils/total-cost.mjs +1 -1
- package/esm/exporters/utils/total-cost.mjs.map +1 -1
- package/esm/exporters/utils/walk-spans.d.mts +1 -1
- package/esm/exporters/utils/walk-spans.d.mts.map +1 -1
- package/esm/exporters/utils/walk-spans.mjs +1 -1
- package/esm/exporters/utils/walk-spans.mjs.map +1 -1
- package/esm/panoptic/panoptic-middleware.d.mts +1 -1
- package/esm/panoptic/panoptic-middleware.d.mts.map +1 -1
- package/esm/panoptic/panoptic-middleware.mjs +1 -1
- package/esm/panoptic/panoptic-middleware.mjs.map +1 -1
- package/esm/panoptic/panoptic-target.type.d.mts +1 -1
- package/esm/panoptic/panoptic-target.type.d.mts.map +1 -1
- package/esm/panoptic/panoptic.d.mts +1 -1
- package/esm/panoptic/panoptic.d.mts.map +1 -1
- package/esm/panoptic/panoptic.mjs +1 -1
- package/esm/panoptic/panoptic.mjs.map +1 -1
- package/esm/panoptic/panoptic.type.d.mts +1 -1
- package/esm/panoptic/panoptic.type.d.mts.map +1 -1
- package/esm/register.mjs +1 -1
- package/esm/register.mjs.map +1 -1
- package/esm/store/cache-trace-store.d.mts +1 -1
- package/esm/store/cache-trace-store.d.mts.map +1 -1
- package/esm/store/cache-trace-store.mjs +1 -1
- package/esm/store/cache-trace-store.mjs.map +1 -1
- package/esm/store/in-memory-trace-store.d.mts +1 -1
- package/esm/store/in-memory-trace-store.d.mts.map +1 -1
- package/esm/store/in-memory-trace-store.mjs +1 -1
- package/esm/store/in-memory-trace-store.mjs.map +1 -1
- package/esm/store/match-trace.d.mts +1 -1
- package/esm/store/match-trace.d.mts.map +1 -1
- package/esm/store/match-trace.mjs +1 -1
- package/esm/store/match-trace.mjs.map +1 -1
- package/esm/store/sum-usage.d.mts +1 -1
- package/esm/store/sum-usage.d.mts.map +1 -1
- package/esm/store/sum-usage.mjs +1 -1
- package/esm/store/sum-usage.mjs.map +1 -1
- package/esm/store/trace-aggregate.type.d.mts +1 -1
- package/esm/store/trace-aggregate.type.d.mts.map +1 -1
- package/esm/store/trace-query.type.d.mts +1 -1
- package/esm/store/trace-query.type.d.mts.map +1 -1
- package/esm/store/trace-store.contract.d.mts +1 -1
- package/esm/store/trace-store.contract.d.mts.map +1 -1
- package/package.json +4 -4
package/cjs/index.cjs
CHANGED
|
@@ -5,7 +5,7 @@ let node_path = require("node:path");
|
|
|
5
5
|
let node_http = require("node:http");
|
|
6
6
|
let _warlock_js_logger = require("@warlock.js/logger");
|
|
7
7
|
|
|
8
|
-
//#region
|
|
8
|
+
//#region ../ai-panoptic/src/exporters/utils/walk-spans.ts
|
|
9
9
|
/**
|
|
10
10
|
* Depth-first pre-order traversal of a {@link TraceSpan} tree, yielding
|
|
11
11
|
* the root first and then each descendant in `children` (invocation)
|
|
@@ -24,7 +24,7 @@ function* walkSpans(root) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
//#endregion
|
|
27
|
-
//#region
|
|
27
|
+
//#region ../ai-panoptic/src/collector/normalize-error.ts
|
|
28
28
|
/**
|
|
29
29
|
* Project a captured execution error onto the structural
|
|
30
30
|
* {@link TraceSpanError} shape used on a failed / cancelled span.
|
|
@@ -72,7 +72,7 @@ function pickString(value) {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
//#endregion
|
|
75
|
-
//#region
|
|
75
|
+
//#region ../ai-panoptic/src/collector/extract-span-attributes.ts
|
|
76
76
|
/**
|
|
77
77
|
* Build the free-form `TraceSpan.attributes` bag for one report node.
|
|
78
78
|
*
|
|
@@ -149,7 +149,7 @@ function addToolAttributes(attributes, extensions) {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
//#endregion
|
|
152
|
-
//#region
|
|
152
|
+
//#region ../ai-panoptic/src/collector/report-to-span.ts
|
|
153
153
|
/**
|
|
154
154
|
* Project one {@link BaseReport} node — and its entire subtree — into a
|
|
155
155
|
* {@link TraceSpan}. Pure and recursive: identity, timing, status, and
|
|
@@ -282,7 +282,7 @@ function lastNonEmptyOutput(trips) {
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
//#endregion
|
|
285
|
-
//#region
|
|
285
|
+
//#region ../ai-panoptic/src/collector/report-to-trace.ts
|
|
286
286
|
/**
|
|
287
287
|
* Project an outermost {@link BaseReport} (one whole `.execute()` /
|
|
288
288
|
* `.invoke()` run) into a {@link Trace} — the root {@link
|
|
@@ -333,7 +333,7 @@ function reportToTrace(report, rootError, options) {
|
|
|
333
333
|
}
|
|
334
334
|
|
|
335
335
|
//#endregion
|
|
336
|
-
//#region
|
|
336
|
+
//#region ../ai-panoptic/src/collector/collector.ts
|
|
337
337
|
/**
|
|
338
338
|
* Drive the source end of the Panoptic pipeline: ingest core
|
|
339
339
|
* `@warlock.js/ai` {@link BaseReport} trees, project them into {@link
|
|
@@ -457,7 +457,7 @@ function createCollector(options = {}) {
|
|
|
457
457
|
}
|
|
458
458
|
|
|
459
459
|
//#endregion
|
|
460
|
-
//#region
|
|
460
|
+
//#region ../ai-panoptic/src/store/match-trace.ts
|
|
461
461
|
/**
|
|
462
462
|
* Test whether one trace satisfies a {@link TraceQuery}. Every declared
|
|
463
463
|
* filter field must match (logical AND); absent fields are ignored, so
|
|
@@ -499,7 +499,7 @@ function toEpoch(bound) {
|
|
|
499
499
|
}
|
|
500
500
|
|
|
501
501
|
//#endregion
|
|
502
|
-
//#region
|
|
502
|
+
//#region ../ai-panoptic/src/store/sum-usage.ts
|
|
503
503
|
/**
|
|
504
504
|
* Fold a child {@link Usage} into a running accumulator. Token channels
|
|
505
505
|
* (`input` / `output` / `total`) always sum; the optional cache /
|
|
@@ -560,7 +560,7 @@ function sumOptional(accumulator, next) {
|
|
|
560
560
|
}
|
|
561
561
|
|
|
562
562
|
//#endregion
|
|
563
|
-
//#region
|
|
563
|
+
//#region ../ai-panoptic/src/store/cache-trace-store.ts
|
|
564
564
|
const DEFAULT_PREFIX = "panoptic";
|
|
565
565
|
/**
|
|
566
566
|
* Cache-backed {@link TraceStoreContract} with a **write-through** design
|
|
@@ -845,7 +845,7 @@ function createCacheTraceStore(cache, options = {}) {
|
|
|
845
845
|
}
|
|
846
846
|
|
|
847
847
|
//#endregion
|
|
848
|
-
//#region
|
|
848
|
+
//#region ../ai-panoptic/src/store/in-memory-trace-store.ts
|
|
849
849
|
/**
|
|
850
850
|
* In-memory {@link TraceStoreContract} that doubles as an
|
|
851
851
|
* {@link ExporterContract} — register it on a collector
|
|
@@ -981,7 +981,7 @@ function createInMemoryTraceStore(options) {
|
|
|
981
981
|
}
|
|
982
982
|
|
|
983
983
|
//#endregion
|
|
984
|
-
//#region
|
|
984
|
+
//#region ../ai-panoptic/src/exporters/utils/total-cost.ts
|
|
985
985
|
/**
|
|
986
986
|
* Collapse a {@link Usage.cost} breakdown into a single USD scalar by
|
|
987
987
|
* summing every populated field. Mirrors the formula documented on
|
|
@@ -1002,7 +1002,7 @@ function totalCostUsd(usage) {
|
|
|
1002
1002
|
}
|
|
1003
1003
|
|
|
1004
1004
|
//#endregion
|
|
1005
|
-
//#region
|
|
1005
|
+
//#region ../ai-panoptic/src/exporters/utils/gen-ai-attributes.ts
|
|
1006
1006
|
/**
|
|
1007
1007
|
* Subset of the OpenTelemetry GenAI semantic-convention attribute keys
|
|
1008
1008
|
* Panoptic emits. Kept as a named constant map (not inline string
|
|
@@ -1090,7 +1090,7 @@ function mergeScalarAttributes(target, source) {
|
|
|
1090
1090
|
}
|
|
1091
1091
|
|
|
1092
1092
|
//#endregion
|
|
1093
|
-
//#region
|
|
1093
|
+
//#region ../ai-panoptic/src/exporters/console/format-span-io.ts
|
|
1094
1094
|
/** Default cap on how many characters of captured content a console line shows. */
|
|
1095
1095
|
const DEFAULT_IO_MAX_CHARS = 500;
|
|
1096
1096
|
/**
|
|
@@ -1140,7 +1140,7 @@ function stringify(value) {
|
|
|
1140
1140
|
}
|
|
1141
1141
|
|
|
1142
1142
|
//#endregion
|
|
1143
|
-
//#region
|
|
1143
|
+
//#region ../ai-panoptic/src/exporters/console/format-span-line.ts
|
|
1144
1144
|
/**
|
|
1145
1145
|
* Render a single {@link TraceSpan} as one scannable console line:
|
|
1146
1146
|
* `<status> <type> "<name>" — <duration>ms, <tokens> tok[, $<cost>]`.
|
|
@@ -1177,7 +1177,7 @@ function statusMarker(status) {
|
|
|
1177
1177
|
}
|
|
1178
1178
|
|
|
1179
1179
|
//#endregion
|
|
1180
|
-
//#region
|
|
1180
|
+
//#region ../ai-panoptic/src/exporters/console/console-exporter.ts
|
|
1181
1181
|
const EXPORTER_NAME$3 = "console";
|
|
1182
1182
|
/**
|
|
1183
1183
|
* Zero-dependency {@link ExporterContract} that prints traces to a
|
|
@@ -1268,7 +1268,7 @@ function spanDepth(root, targetSpanId, depth = 0) {
|
|
|
1268
1268
|
}
|
|
1269
1269
|
|
|
1270
1270
|
//#endregion
|
|
1271
|
-
//#region
|
|
1271
|
+
//#region ../ai-panoptic/src/exporters/file/file-exporter.ts
|
|
1272
1272
|
const EXPORTER_NAME$2 = "file";
|
|
1273
1273
|
/**
|
|
1274
1274
|
* Zero-dependency {@link ExporterContract} that appends completed traces
|
|
@@ -1359,7 +1359,7 @@ var FileTraceWriter = class {
|
|
|
1359
1359
|
};
|
|
1360
1360
|
|
|
1361
1361
|
//#endregion
|
|
1362
|
-
//#region
|
|
1362
|
+
//#region ../ai-panoptic/src/exporters/langfuse/langfuse-exporter.ts
|
|
1363
1363
|
const EXPORTER_NAME$1 = "langfuse";
|
|
1364
1364
|
let LangfuseSdk;
|
|
1365
1365
|
let isModuleExists$1 = null;
|
|
@@ -1563,7 +1563,7 @@ function toLevel(span) {
|
|
|
1563
1563
|
}
|
|
1564
1564
|
|
|
1565
1565
|
//#endregion
|
|
1566
|
-
//#region
|
|
1566
|
+
//#region ../ai-panoptic/src/exporters/otel/otel-exporter.ts
|
|
1567
1567
|
const EXPORTER_NAME = "otel";
|
|
1568
1568
|
const DEFAULT_TRACER_NAME = "@warlock.js/ai-panoptic";
|
|
1569
1569
|
let OtelApi;
|
|
@@ -1716,7 +1716,7 @@ function toEpochMillis(isoTimestamp) {
|
|
|
1716
1716
|
}
|
|
1717
1717
|
|
|
1718
1718
|
//#endregion
|
|
1719
|
-
//#region
|
|
1719
|
+
//#region ../ai-panoptic/src/panoptic/panoptic-middleware.ts
|
|
1720
1720
|
/**
|
|
1721
1721
|
* Build an {@link AgentMiddleware} that feeds a collector from the
|
|
1722
1722
|
* `execute`- and `supervisor`-level hooks. An alternative wiring to event
|
|
@@ -1782,7 +1782,7 @@ function isReport(value) {
|
|
|
1782
1782
|
}
|
|
1783
1783
|
|
|
1784
1784
|
//#endregion
|
|
1785
|
-
//#region
|
|
1785
|
+
//#region ../ai-panoptic/src/panoptic/panoptic.ts
|
|
1786
1786
|
/**
|
|
1787
1787
|
* Terminal `*.completed` events of every core primitive that carries the
|
|
1788
1788
|
* finalized `result` (and therefore the `report` tree). These fire once
|
|
@@ -1919,7 +1919,7 @@ function panoptic(options = {}) {
|
|
|
1919
1919
|
}
|
|
1920
1920
|
|
|
1921
1921
|
//#endregion
|
|
1922
|
-
//#region
|
|
1922
|
+
//#region ../ai-panoptic/src/evaluate/evaluate-system-prompt.ts
|
|
1923
1923
|
/**
|
|
1924
1924
|
* Grade `systemPrompt` with the configured judge model, reusing
|
|
1925
1925
|
* `ai.prompts().validate()`'s own `judgePromptBody` — never a second
|
|
@@ -1937,7 +1937,7 @@ async function evaluateSystemPrompt(systemPrompt, config, instructionsOverride)
|
|
|
1937
1937
|
}
|
|
1938
1938
|
|
|
1939
1939
|
//#endregion
|
|
1940
|
-
//#region
|
|
1940
|
+
//#region ../ai-panoptic/src/evaluate/extract-last-system-prompt.ts
|
|
1941
1941
|
/**
|
|
1942
1942
|
* Pull the LAST `{role: "system"}` message off a span's captured `input`.
|
|
1943
1943
|
*
|
|
@@ -1959,7 +1959,7 @@ function extractLastSystemPrompt(span) {
|
|
|
1959
1959
|
}
|
|
1960
1960
|
|
|
1961
1961
|
//#endregion
|
|
1962
|
-
//#region
|
|
1962
|
+
//#region ../ai-panoptic/src/evaluate/find-span-by-id.ts
|
|
1963
1963
|
/** Depth-first search for the span with `spanId` inside a trace's span tree. */
|
|
1964
1964
|
function findSpanById(root, spanId) {
|
|
1965
1965
|
if (root.spanId === spanId) return root;
|
|
@@ -1970,7 +1970,7 @@ function findSpanById(root, spanId) {
|
|
|
1970
1970
|
}
|
|
1971
1971
|
|
|
1972
1972
|
//#endregion
|
|
1973
|
-
//#region
|
|
1973
|
+
//#region ../ai-panoptic/src/dashboard/parse-query.ts
|
|
1974
1974
|
/**
|
|
1975
1975
|
* The set of terminal statuses a stored trace can carry. Used to keep
|
|
1976
1976
|
* `parseQuery` from forwarding arbitrary `?status=` junk into the store.
|
|
@@ -2022,7 +2022,7 @@ function parseQuery(params) {
|
|
|
2022
2022
|
}
|
|
2023
2023
|
|
|
2024
2024
|
//#endregion
|
|
2025
|
-
//#region
|
|
2025
|
+
//#region ../ai-panoptic/src/dashboard/warlock-logo.ts
|
|
2026
2026
|
/**
|
|
2027
2027
|
* The Warlock logo as an inlined base64 PNG data URI (64x64, ~9KB).
|
|
2028
2028
|
* Inlined so the dashboard stays a single self-contained, offline-capable
|
|
@@ -2033,7 +2033,7 @@ function parseQuery(params) {
|
|
|
2033
2033
|
const WARLOCK_LOGO_DATA_URI = "data:image/png;base64,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";
|
|
2034
2034
|
|
|
2035
2035
|
//#endregion
|
|
2036
|
-
//#region
|
|
2036
|
+
//#region ../ai-panoptic/src/dashboard/ui.html.ts
|
|
2037
2037
|
/**
|
|
2038
2038
|
* Build the single self-contained dashboard HTML page. No external
|
|
2039
2039
|
* assets, no bundler, no framework — one inlined string that polls the
|
|
@@ -3488,7 +3488,7 @@ function encodeForInlineScript(value) {
|
|
|
3488
3488
|
}
|
|
3489
3489
|
|
|
3490
3490
|
//#endregion
|
|
3491
|
-
//#region
|
|
3491
|
+
//#region ../ai-panoptic/src/dashboard/serve.ts
|
|
3492
3492
|
/** Hard cap on the evaluate route's request body — well beyond a real instructions string. */
|
|
3493
3493
|
const MAX_EVALUATE_BODY_BYTES = 64 * 1024;
|
|
3494
3494
|
/**
|
|
@@ -3706,7 +3706,7 @@ async function handleEvaluate(store, evaluate, traceId, spanId, req, res) {
|
|
|
3706
3706
|
}
|
|
3707
3707
|
|
|
3708
3708
|
//#endregion
|
|
3709
|
-
//#region
|
|
3709
|
+
//#region ../ai-panoptic/src/dashboard/dashboard.ts
|
|
3710
3710
|
const DEFAULT_PORT = 4319;
|
|
3711
3711
|
const DEFAULT_HOST = "127.0.0.1";
|
|
3712
3712
|
const DEFAULT_TITLE = "Panoptic";
|
|
@@ -3834,7 +3834,7 @@ function openBrowser(url) {
|
|
|
3834
3834
|
}
|
|
3835
3835
|
|
|
3836
3836
|
//#endregion
|
|
3837
|
-
//#region
|
|
3837
|
+
//#region ../ai-panoptic/src/dashboard/trace-filter.ts
|
|
3838
3838
|
/** Statuses the errors-only toggle keeps. */
|
|
3839
3839
|
const ERROR_STATUSES = ["failed", "cancelled"];
|
|
3840
3840
|
/**
|
|
@@ -4102,7 +4102,7 @@ function maxNodeCost(root) {
|
|
|
4102
4102
|
}
|
|
4103
4103
|
|
|
4104
4104
|
//#endregion
|
|
4105
|
-
//#region
|
|
4105
|
+
//#region ../ai-panoptic/src/config/apply-panoptic-config.ts
|
|
4106
4106
|
let applied;
|
|
4107
4107
|
/**
|
|
4108
4108
|
* Read a {@link PanopticConfig} and wire panoptic onto the core observe
|
|
@@ -4184,7 +4184,7 @@ function startDashboard(store, dashboardConfig) {
|
|
|
4184
4184
|
}
|
|
4185
4185
|
|
|
4186
4186
|
//#endregion
|
|
4187
|
-
//#region
|
|
4187
|
+
//#region ../ai-panoptic/src/register.ts
|
|
4188
4188
|
(0, _warlock_js_ai.onConfigApplied)((config) => {
|
|
4189
4189
|
applyPanopticConfig(config.panoptic);
|
|
4190
4190
|
});
|