@sponsio/sdk 0.1.0-alpha.3
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/contracts/capability/credentials.yaml +188 -0
- package/contracts/capability/database.yaml +141 -0
- package/contracts/capability/filesystem-strict.yaml +101 -0
- package/contracts/capability/filesystem.yaml +239 -0
- package/contracts/capability/self-modify.yaml +152 -0
- package/contracts/capability/shell.yaml +246 -0
- package/contracts/capability/subagent.yaml +184 -0
- package/contracts/core/llm_safety.yaml +130 -0
- package/contracts/core/runaway.yaml +43 -0
- package/contracts/core/universal.yaml +34 -0
- package/contracts/incident/claude-code-secret-bypass.yaml +197 -0
- package/contracts/incident/cursor-railway-wipe.yaml +164 -0
- package/contracts/incident/mcp-composition.yaml +418 -0
- package/contracts/incident/openclaw.yaml +500 -0
- package/contracts/incident/subagent-escape.yaml +177 -0
- package/contracts/premium/.gitkeep +7 -0
- package/dist/contract.d.ts +59 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +97 -0
- package/dist/contract.js.map +1 -0
- package/dist/core/config-loader.d.ts +90 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +530 -0
- package/dist/core/config-loader.js.map +1 -0
- package/dist/core/evaluator.d.ts +15 -0
- package/dist/core/evaluator.d.ts.map +1 -0
- package/dist/core/evaluator.js +87 -0
- package/dist/core/evaluator.js.map +1 -0
- package/dist/core/formula.d.ts +103 -0
- package/dist/core/formula.d.ts.map +1 -0
- package/dist/core/formula.js +167 -0
- package/dist/core/formula.js.map +1 -0
- package/dist/core/grounding.d.ts +43 -0
- package/dist/core/grounding.d.ts.map +1 -0
- package/dist/core/grounding.js +269 -0
- package/dist/core/grounding.js.map +1 -0
- package/dist/core/nl-parser.d.ts +12 -0
- package/dist/core/nl-parser.d.ts.map +1 -0
- package/dist/core/nl-parser.js +152 -0
- package/dist/core/nl-parser.js.map +1 -0
- package/dist/core/pack-loader.d.ts +15 -0
- package/dist/core/pack-loader.d.ts.map +1 -0
- package/dist/core/pack-loader.js +220 -0
- package/dist/core/pack-loader.js.map +1 -0
- package/dist/core/parser.d.ts +19 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +235 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/pattern-factory.d.ts +38 -0
- package/dist/core/pattern-factory.d.ts.map +1 -0
- package/dist/core/pattern-factory.js +222 -0
- package/dist/core/pattern-factory.js.map +1 -0
- package/dist/core/patterns.d.ts +67 -0
- package/dist/core/patterns.d.ts.map +1 -0
- package/dist/core/patterns.js +585 -0
- package/dist/core/patterns.js.map +1 -0
- package/dist/core/session-log.d.ts +91 -0
- package/dist/core/session-log.d.ts.map +1 -0
- package/dist/core/session-log.js +196 -0
- package/dist/core/session-log.js.map +1 -0
- package/dist/core/spans.d.ts +92 -0
- package/dist/core/spans.d.ts.map +1 -0
- package/dist/core/spans.js +148 -0
- package/dist/core/spans.js.map +1 -0
- package/dist/core/sto.d.ts +120 -0
- package/dist/core/sto.d.ts.map +1 -0
- package/dist/core/sto.js +147 -0
- package/dist/core/sto.js.map +1 -0
- package/dist/index.d.ts +267 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +540 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/claude-agent.d.ts +29 -0
- package/dist/integrations/claude-agent.d.ts.map +1 -0
- package/dist/integrations/claude-agent.js +40 -0
- package/dist/integrations/claude-agent.js.map +1 -0
- package/dist/integrations/google-adk.d.ts +27 -0
- package/dist/integrations/google-adk.d.ts.map +1 -0
- package/dist/integrations/google-adk.js +81 -0
- package/dist/integrations/google-adk.js.map +1 -0
- package/dist/integrations/langchain.d.ts +26 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +74 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/openai-agents.d.ts +45 -0
- package/dist/integrations/openai-agents.d.ts.map +1 -0
- package/dist/integrations/openai-agents.js +81 -0
- package/dist/integrations/openai-agents.js.map +1 -0
- package/dist/integrations/openai.d.ts +24 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +77 -0
- package/dist/integrations/openai.js.map +1 -0
- package/dist/integrations/vercel-ai.d.ts +38 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/integrations/vercel-ai.js +107 -0
- package/dist/integrations/vercel-ai.js.map +1 -0
- package/dist/render/components.d.ts +23 -0
- package/dist/render/components.d.ts.map +1 -0
- package/dist/render/components.js +133 -0
- package/dist/render/components.js.map +1 -0
- package/dist/render/derive.d.ts +23 -0
- package/dist/render/derive.d.ts.map +1 -0
- package/dist/render/derive.js +92 -0
- package/dist/render/derive.js.map +1 -0
- package/dist/render/session-view.d.ts +19 -0
- package/dist/render/session-view.d.ts.map +1 -0
- package/dist/render/session-view.js +236 -0
- package/dist/render/session-view.js.map +1 -0
- package/dist/render/tokens.d.ts +44 -0
- package/dist/render/tokens.d.ts.map +1 -0
- package/dist/render/tokens.js +72 -0
- package/dist/render/tokens.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Top banner: ``━━━ ◒◓ Sponsio ━━━ tagline ━━━━━━━━━━``. */
|
|
2
|
+
export declare function headerBanner(useColor: boolean, tagline?: string): string;
|
|
3
|
+
/** Bottom banner: ``━━━ VERDICT ━━━ BLOCKED ━━━━━━━━━━``. */
|
|
4
|
+
export declare function verdictBanner(status: string, useColor: boolean, label?: string): string;
|
|
5
|
+
/** Inside-zone divider: ``contracts armed ──────────────``. */
|
|
6
|
+
export declare function sectionRule(label: string, useColor: boolean): string;
|
|
7
|
+
/** Header metadata grid — three columns × N rows. */
|
|
8
|
+
export declare function headerMeta(pairs: [string, string][], useColor: boolean): string[];
|
|
9
|
+
export declare function contractsTable(rows: [string, string, string][], useColor: boolean): string[];
|
|
10
|
+
export interface TraceRow {
|
|
11
|
+
/** Indent prefix already including any ``├─`` / ``└─`` / ``│`` leaders. */
|
|
12
|
+
prefix: string;
|
|
13
|
+
/** Body text already ansi-styled. */
|
|
14
|
+
body: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function eventLine(tsLabel: string, toolName: string, service: string, argsSummary: string, latency: string, isLast: boolean, useColor: boolean): string;
|
|
17
|
+
export declare function assumeLine(alias: string, summary: string, useColor: boolean): string;
|
|
18
|
+
export declare function stateTransitionLine(alias: string, newState: string, useColor: boolean): string;
|
|
19
|
+
export declare function enforceViolationLine(alias: string, summary: string, status: string, useColor: boolean): string;
|
|
20
|
+
export declare function verdictSummary(blocked: number, warnings: number, totalTurns: number, useColor: boolean): string;
|
|
21
|
+
export declare function perfLine(totalChecks: number, detPct: number, llmCalls: number, useColor: boolean): string;
|
|
22
|
+
export declare function ctaLine(ctas: string[], useColor: boolean): string;
|
|
23
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/render/components.ts"],"names":[],"mappings":"AAcA,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,SAAiC,GAAG,MAAM,CAUhG;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,SAAY,GAAG,MAAM,CAU1F;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAMpE;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAOjF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAY5F;AAED,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AASD,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,GAChB,MAAM,CAgBR;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAMpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAM9F;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,GAChB,MAAM,CAQR;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,GAChB,MAAM,CASR;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAOzG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render primitives — banner / table / trace lines / verdict.
|
|
3
|
+
*
|
|
4
|
+
* Each function takes data and returns the lines to write (already
|
|
5
|
+
* ANSI-styled when ``useColor`` is true). Composition happens in
|
|
6
|
+
* ``session-view.ts``.
|
|
7
|
+
*/
|
|
8
|
+
import { PALETTE, STATUS, SYMBOLS, ansi, pad, truncate } from "./tokens.js";
|
|
9
|
+
import { serviceColor } from "./derive.js";
|
|
10
|
+
const RULE_WIDTH = 80;
|
|
11
|
+
const ALIAS_WIDTH = 4;
|
|
12
|
+
const STATUS_WIDTH = 8;
|
|
13
|
+
/** Top banner: ``━━━ ◒◓ Sponsio ━━━ tagline ━━━━━━━━━━``. */
|
|
14
|
+
export function headerBanner(useColor, tagline = "runtime contract enforcement") {
|
|
15
|
+
const left = ansi(PALETTE.rule, "━━━ ", useColor);
|
|
16
|
+
const logo = ansi(`1;${PALETTE.brand}`, `${SYMBOLS.logo} Sponsio`, useColor);
|
|
17
|
+
const sep = ansi(PALETTE.rule, " ━━━ ", useColor);
|
|
18
|
+
const tag = ansi(PALETTE.fg, tagline, useColor);
|
|
19
|
+
// Compute fill so the line reaches RULE_WIDTH.
|
|
20
|
+
const visibleLen = `━━━ ${SYMBOLS.logo} Sponsio ━━━ ${tagline} `.length;
|
|
21
|
+
const fillLen = Math.max(0, RULE_WIDTH - visibleLen);
|
|
22
|
+
const fill = ansi(PALETTE.rule, " " + SYMBOLS.ruleHeavy.repeat(fillLen), useColor);
|
|
23
|
+
return `${left}${logo}${sep}${tag}${fill}`;
|
|
24
|
+
}
|
|
25
|
+
/** Bottom banner: ``━━━ VERDICT ━━━ BLOCKED ━━━━━━━━━━``. */
|
|
26
|
+
export function verdictBanner(status, useColor, label = "VERDICT") {
|
|
27
|
+
const color = STATUS[status.toUpperCase()] ?? PALETTE.fg;
|
|
28
|
+
const left = ansi(PALETTE.rule, "━━━ ", useColor);
|
|
29
|
+
const lab = ansi(`1;${PALETTE.brand}`, label, useColor);
|
|
30
|
+
const sep = ansi(PALETTE.rule, " ━━━ ", useColor);
|
|
31
|
+
const stat = ansi(`1;${color}`, status.toUpperCase(), useColor);
|
|
32
|
+
const visibleLen = `━━━ ${label} ━━━ ${status.toUpperCase()} `.length;
|
|
33
|
+
const fillLen = Math.max(0, RULE_WIDTH - visibleLen);
|
|
34
|
+
const fill = ansi(PALETTE.rule, " " + SYMBOLS.ruleHeavy.repeat(fillLen), useColor);
|
|
35
|
+
return `${left}${lab}${sep}${stat}${fill}`;
|
|
36
|
+
}
|
|
37
|
+
/** Inside-zone divider: ``contracts armed ──────────────``. */
|
|
38
|
+
export function sectionRule(label, useColor) {
|
|
39
|
+
const lab = ansi(PALETTE.fg, `${label} `, useColor);
|
|
40
|
+
const visibleLen = label.length + 1;
|
|
41
|
+
const fillLen = Math.max(0, RULE_WIDTH - visibleLen);
|
|
42
|
+
const fill = ansi(PALETTE.rule, SYMBOLS.ruleLight.repeat(fillLen), useColor);
|
|
43
|
+
return `${lab}${fill}`;
|
|
44
|
+
}
|
|
45
|
+
/** Header metadata grid — three columns × N rows. */
|
|
46
|
+
export function headerMeta(pairs, useColor) {
|
|
47
|
+
const COLS = 3;
|
|
48
|
+
const rows = [];
|
|
49
|
+
for (let i = 0; i < pairs.length; i += COLS) {
|
|
50
|
+
rows.push(pairs.slice(i, i + COLS).map(([k, v]) => `${ansi(PALETTE.metadata, pad(k, 9), useColor)}${ansi(PALETTE.fg, v, useColor)}`));
|
|
51
|
+
}
|
|
52
|
+
return rows.map((r) => r.join(ansi("", " ", useColor)));
|
|
53
|
+
}
|
|
54
|
+
export function contractsTable(rows, useColor) {
|
|
55
|
+
const out = [];
|
|
56
|
+
// Compute name column width.
|
|
57
|
+
const nameW = Math.min(56, Math.max(...rows.map(([, n]) => n.length)));
|
|
58
|
+
for (const [alias, name, status] of rows) {
|
|
59
|
+
const aliasCol = ansi(`1;${PALETTE.brand}`, pad(alias, ALIAS_WIDTH), useColor);
|
|
60
|
+
const nameCol = ansi(PALETTE.fg, pad(truncate(name, nameW), nameW), useColor);
|
|
61
|
+
const color = STATUS[status.toUpperCase()] ?? PALETTE.fg;
|
|
62
|
+
const statusCol = ansi(`1;${color}`, status.toUpperCase().padStart(STATUS_WIDTH), useColor);
|
|
63
|
+
out.push(`${aliasCol} ${nameCol} ${statusCol}`);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
// Fixed visible-width target for the tool+args part of the trace row,
|
|
68
|
+
// so the latency and service columns line up vertically. Rows whose
|
|
69
|
+
// tool+args naturally exceed this just push the rest right (no
|
|
70
|
+
// truncation) — uncommon enough not to matter.
|
|
71
|
+
const TOOL_COL = 56;
|
|
72
|
+
const LAT_COL = 8;
|
|
73
|
+
export function eventLine(tsLabel, toolName, service, argsSummary, latency, isLast, useColor) {
|
|
74
|
+
const branch = isLast ? SYMBOLS.branchL : SYMBOLS.branchT;
|
|
75
|
+
const ts = ansi(PALETTE.metadata, pad(tsLabel, 7), useColor);
|
|
76
|
+
const br = ansi(PALETTE.metadata, branch, useColor);
|
|
77
|
+
const tool = ansi(PALETTE.fg, toolName, useColor);
|
|
78
|
+
const summary = argsSummary
|
|
79
|
+
? `(${ansi(PALETTE.metadata, argsSummary, useColor)})`
|
|
80
|
+
: "()";
|
|
81
|
+
// Visible width of the tool+args body (no ANSI), for column padding.
|
|
82
|
+
const visibleTool = toolName + (argsSummary ? `(${argsSummary})` : "()");
|
|
83
|
+
const toolPad = " ".repeat(Math.max(1, TOOL_COL - visibleTool.length));
|
|
84
|
+
const visibleLat = latency || "";
|
|
85
|
+
const latRight = " ".repeat(Math.max(1, LAT_COL - visibleLat.length));
|
|
86
|
+
const lat = latency ? `${ansi(PALETTE.metadata, latency, useColor)}` : pad("", LAT_COL);
|
|
87
|
+
const svc = service ? ansi(serviceColor(service), service, useColor) : "";
|
|
88
|
+
return `${ts} ${br} ${tool}${summary}${toolPad}${lat}${latRight}${svc}`;
|
|
89
|
+
}
|
|
90
|
+
export function assumeLine(alias, summary, useColor) {
|
|
91
|
+
const indent = " ";
|
|
92
|
+
const pipe = ansi(PALETTE.metadata, SYMBOLS.branchPipe, useColor);
|
|
93
|
+
const tag = ansi(`1;${PALETTE.brand}`, alias, useColor);
|
|
94
|
+
const text = ansi(PALETTE.fg, summary, useColor);
|
|
95
|
+
return `${indent}${pipe} ${SYMBOLS.gear} assume[${tag}] ${text} ${ansi(PALETTE.ok, SYMBOLS.check, useColor)}`;
|
|
96
|
+
}
|
|
97
|
+
export function stateTransitionLine(alias, newState, useColor) {
|
|
98
|
+
const indent = " ";
|
|
99
|
+
const pipe = ansi(PALETTE.metadata, SYMBOLS.branchPipe, useColor);
|
|
100
|
+
const tag = ansi(`1;${PALETTE.brand}`, alias, useColor);
|
|
101
|
+
const color = STATUS[newState.toUpperCase()] ?? PALETTE.fg;
|
|
102
|
+
return `${indent}${pipe} contract ${tag} ${SYMBOLS.arrowR} ${ansi(`1;${color}`, newState.toUpperCase(), useColor)}`;
|
|
103
|
+
}
|
|
104
|
+
export function enforceViolationLine(alias, summary, status, useColor) {
|
|
105
|
+
const indent = " ";
|
|
106
|
+
const pipe = ansi(PALETTE.metadata, SYMBOLS.branchPipe, useColor);
|
|
107
|
+
const cross = ansi(PALETTE.blocked, SYMBOLS.cross, useColor);
|
|
108
|
+
const tag = ansi(`1;${PALETTE.brand}`, alias, useColor);
|
|
109
|
+
const color = STATUS[status.toUpperCase()] ?? PALETTE.blocked;
|
|
110
|
+
const stat = ansi(`1;${color}`, status.toUpperCase(), useColor);
|
|
111
|
+
return `${indent}${pipe} ${cross} enforce[${tag}] ${ansi(PALETTE.fg, truncate(summary, 50), useColor)} ${stat}`;
|
|
112
|
+
}
|
|
113
|
+
export function verdictSummary(blocked, warnings, totalTurns, useColor) {
|
|
114
|
+
const head = blocked > 0
|
|
115
|
+
? ansi(PALETTE.blocked, `${blocked} action${blocked === 1 ? "" : "s"} stopped pre-execution`, useColor)
|
|
116
|
+
: warnings > 0
|
|
117
|
+
? ansi(PALETTE.warn, `${warnings} warning${warnings === 1 ? "" : "s"} (observe mode)`, useColor)
|
|
118
|
+
: ansi(PALETTE.ok, `clean — no policy violations across ${totalTurns} turn${totalTurns === 1 ? "" : "s"}`, useColor);
|
|
119
|
+
const tail = `${blocked} violation${blocked === 1 ? "" : "s"} ${ansi(PALETTE.metadata, SYMBOLS.bullet, useColor)} ${warnings} warning${warnings === 1 ? "" : "s"}`;
|
|
120
|
+
return `${head} ${ansi(PALETTE.metadata, SYMBOLS.bullet, useColor)} ${ansi(PALETTE.metadata, tail, useColor)}`;
|
|
121
|
+
}
|
|
122
|
+
export function perfLine(totalChecks, detPct, llmCalls, useColor) {
|
|
123
|
+
const pct = `${detPct.toFixed(0)}%`;
|
|
124
|
+
return [
|
|
125
|
+
`${ansi(PALETTE.metadata, "checks", useColor)} ${ansi(PALETTE.fg, String(totalChecks), useColor)}`,
|
|
126
|
+
`${ansi(PALETTE.metadata, "deterministic", useColor)} ${ansi(PALETTE.fg, pct, useColor)}`,
|
|
127
|
+
`${ansi(PALETTE.metadata, "LLM calls", useColor)} ${ansi(PALETTE.fg, String(llmCalls), useColor)}`,
|
|
128
|
+
].join(" ");
|
|
129
|
+
}
|
|
130
|
+
export function ctaLine(ctas, useColor) {
|
|
131
|
+
return ctas.map((c) => `${ansi(PALETTE.metadata, SYMBOLS.arrowR, useColor)} ${ansi(PALETTE.fg, c, useColor)}`).join(" ");
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/render/components.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,6DAA6D;AAC7D,MAAM,UAAU,YAAY,CAAC,QAAiB,EAAE,OAAO,GAAG,8BAA8B;IACtF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,+CAA+C;IAC/C,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,IAAI,gBAAgB,OAAO,GAAG,CAAC,MAAM,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnF,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAiB,EAAE,KAAK,GAAG,SAAS;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,OAAO,KAAK,QAAQ,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnF,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,QAAiB;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,UAAU,CAAC,KAAyB,EAAE,QAAiB;IACrE,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACxI,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgC,EAAE,QAAiB;IAChF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,6BAA6B;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5F,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AASD,sEAAsE;AACtE,oEAAoE;AACpE,+DAA+D;AAC/D,+CAA+C;AAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,MAAM,UAAU,SAAS,CACvB,OAAe,EACf,QAAgB,EAChB,OAAe,EACf,WAAmB,EACnB,OAAe,EACf,MAAe,EACf,QAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,WAAW;QACzB,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG;QACtD,CAAC,CAAC,IAAI,CAAC;IACT,qEAAqE;IACrE,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,OAAO,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,OAAe,EAAE,QAAiB;IAC1E,MAAM,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,GAAG,MAAM,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,WAAW,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAiB;IACpF,MAAM,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;IAC3D,OAAO,GAAG,MAAM,GAAG,IAAI,gBAAgB,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,OAAe,EACf,MAAc,EACd,QAAiB;IAEjB,MAAM,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChE,OAAO,GAAG,MAAM,GAAG,IAAI,OAAO,KAAK,YAAY,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;AACrH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,QAAgB,EAChB,UAAkB,EAClB,QAAiB;IAEjB,MAAM,IAAI,GACR,OAAO,GAAG,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wBAAwB,EAAE,QAAQ,CAAC;QACvG,CAAC,CAAC,QAAQ,GAAG,CAAC;YACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAAE,QAAQ,CAAC;YAChG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,uCAAuC,UAAU,QAAQ,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3H,MAAM,IAAI,GAAG,GAAG,OAAO,aAAa,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACnK,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,WAAmB,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAiB;IAC/F,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,OAAO;QACL,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,EAAE;QACzG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE;QACzF,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE;KACvG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,QAAiB;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/H,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-name → transport label inference. Mirrors Python's
|
|
3
|
+
* ``sponsio/render/derive.py``. The session-view's ``service``
|
|
4
|
+
* column shows the **transport** the tool uses to actually run —
|
|
5
|
+
* one of ``function`` / ``mcp`` / ``shell`` / ``http``. Other axes
|
|
6
|
+
* (resource being acted on, business domain) belong in additional
|
|
7
|
+
* columns; folding them into ``service`` makes the label semantics
|
|
8
|
+
* inconsistent across scenarios.
|
|
9
|
+
*
|
|
10
|
+
* Default for anything not on the table is ``function`` — the
|
|
11
|
+
* overwhelmingly common case in modern agent SDKs (Vercel AI SDK,
|
|
12
|
+
* Anthropic, OpenAI, Claude Agent SDK, LangChain) is in-process
|
|
13
|
+
* function-call dispatch from a structured ``tool_use`` block.
|
|
14
|
+
*/
|
|
15
|
+
export declare function serviceForTool(tool: string | undefined): string;
|
|
16
|
+
export declare function serviceColor(service: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Truncate args to a short summary the trace-row can show inline.
|
|
19
|
+
* Mirrors Python's ``args_summary`` — keep first key=value pair,
|
|
20
|
+
* truncate at ~30 chars.
|
|
21
|
+
*/
|
|
22
|
+
export declare function argsSummary(args: Record<string, unknown> | undefined, maxLen?: number): string;
|
|
23
|
+
//# sourceMappingURL=derive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../src/render/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsBH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO/D;AAcD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAsB1F"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-name → transport label inference. Mirrors Python's
|
|
3
|
+
* ``sponsio/render/derive.py``. The session-view's ``service``
|
|
4
|
+
* column shows the **transport** the tool uses to actually run —
|
|
5
|
+
* one of ``function`` / ``mcp`` / ``shell`` / ``http``. Other axes
|
|
6
|
+
* (resource being acted on, business domain) belong in additional
|
|
7
|
+
* columns; folding them into ``service`` makes the label semantics
|
|
8
|
+
* inconsistent across scenarios.
|
|
9
|
+
*
|
|
10
|
+
* Default for anything not on the table is ``function`` — the
|
|
11
|
+
* overwhelmingly common case in modern agent SDKs (Vercel AI SDK,
|
|
12
|
+
* Anthropic, OpenAI, Claude Agent SDK, LangChain) is in-process
|
|
13
|
+
* function-call dispatch from a structured ``tool_use`` block.
|
|
14
|
+
*/
|
|
15
|
+
const TOOL_PREFIX_TO_TRANSPORT = [
|
|
16
|
+
// Shell exec — the runtime spawns a subprocess.
|
|
17
|
+
["bash", "shell"],
|
|
18
|
+
["shell.", "shell"],
|
|
19
|
+
["run_tests", "shell"],
|
|
20
|
+
["execute_command", "shell"],
|
|
21
|
+
// Model Context Protocol — the runtime speaks JSON-RPC to a
|
|
22
|
+
// separate MCP server (stdio or HTTP+SSE).
|
|
23
|
+
["user_instruction", "mcp"],
|
|
24
|
+
["user_message", "mcp"],
|
|
25
|
+
["mcp.", "mcp"],
|
|
26
|
+
["mcp__", "mcp"],
|
|
27
|
+
// Raw HTTP fetch — a thin wrapper around the network stack rather
|
|
28
|
+
// than a typed function-call handler.
|
|
29
|
+
["http.", "http"],
|
|
30
|
+
["fetch", "http"],
|
|
31
|
+
["web_fetch", "http"],
|
|
32
|
+
["web_search", "http"],
|
|
33
|
+
];
|
|
34
|
+
export function serviceForTool(tool) {
|
|
35
|
+
if (!tool)
|
|
36
|
+
return "unknown";
|
|
37
|
+
const lowered = tool.toLowerCase();
|
|
38
|
+
for (const [prefix, transport] of TOOL_PREFIX_TO_TRANSPORT) {
|
|
39
|
+
if (lowered.startsWith(prefix))
|
|
40
|
+
return transport;
|
|
41
|
+
}
|
|
42
|
+
return "func";
|
|
43
|
+
}
|
|
44
|
+
// Transport color palette — only labels ``serviceForTool`` returns
|
|
45
|
+
// ever appear here. Keep this minimal: ``function`` is the
|
|
46
|
+
// background-noise default (dim), distinguished transports get a
|
|
47
|
+
// distinct hue so they pop in the trace.
|
|
48
|
+
const SERVICE_COLORS = {
|
|
49
|
+
func: "2", // dim — the unmarked common case (in-process function call)
|
|
50
|
+
shell: "33", // yellow
|
|
51
|
+
mcp: "35", // magenta
|
|
52
|
+
http: "37", // white
|
|
53
|
+
unknown: "2",
|
|
54
|
+
};
|
|
55
|
+
export function serviceColor(service) {
|
|
56
|
+
return SERVICE_COLORS[service] ?? SERVICE_COLORS.unknown;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Truncate args to a short summary the trace-row can show inline.
|
|
60
|
+
* Mirrors Python's ``args_summary`` — keep first key=value pair,
|
|
61
|
+
* truncate at ~30 chars.
|
|
62
|
+
*/
|
|
63
|
+
export function argsSummary(args, maxLen = 30) {
|
|
64
|
+
if (!args || typeof args !== "object")
|
|
65
|
+
return "";
|
|
66
|
+
const keys = Object.keys(args);
|
|
67
|
+
if (keys.length === 0)
|
|
68
|
+
return "";
|
|
69
|
+
const parts = [];
|
|
70
|
+
let len = 0;
|
|
71
|
+
for (const k of keys) {
|
|
72
|
+
const v = args[k];
|
|
73
|
+
let vs;
|
|
74
|
+
if (typeof v === "string")
|
|
75
|
+
vs = JSON.stringify(v);
|
|
76
|
+
else if (v == null)
|
|
77
|
+
vs = "null";
|
|
78
|
+
else
|
|
79
|
+
vs = String(v);
|
|
80
|
+
if (vs.length > 20)
|
|
81
|
+
vs = vs.slice(0, 19) + "…";
|
|
82
|
+
const part = `${k}=${vs}`;
|
|
83
|
+
if (len + part.length + 2 > maxLen && parts.length > 0) {
|
|
84
|
+
parts.push("…");
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
parts.push(part);
|
|
88
|
+
len += part.length + 2;
|
|
89
|
+
}
|
|
90
|
+
return parts.join(", ");
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/render/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AgentTurnSpan } from "../core/spans.js";
|
|
2
|
+
import type { DetFormula } from "../core/patterns.js";
|
|
3
|
+
export interface RenderOptions {
|
|
4
|
+
agentId: string;
|
|
5
|
+
mode: "observe" | "enforce";
|
|
6
|
+
contracts: DetFormula[];
|
|
7
|
+
turnSpans: AgentTurnSpan[];
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
tenant?: string;
|
|
10
|
+
env?: string;
|
|
11
|
+
sdk?: string;
|
|
12
|
+
ctas?: string[];
|
|
13
|
+
/** Where to write. Defaults to stderr. */
|
|
14
|
+
out?: NodeJS.WritableStream;
|
|
15
|
+
/** Force ANSI on/off; defaults to TTY autodetect on `out`. */
|
|
16
|
+
useColor?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function renderSession(opts: RenderOptions): void;
|
|
19
|
+
//# sourceMappingURL=session-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/render/session-view.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8ID,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAkFvD"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-of-session trace-tree view — TS port of
|
|
3
|
+
* ``sponsio/render/session_view.py``. Walks ``Sponsio.turnSpans()``
|
|
4
|
+
* and renders the ``contracts armed`` + ``trace`` + ``VERDICT`` zones.
|
|
5
|
+
*
|
|
6
|
+
* Design B1 layout (see Python session_view.py docstring for the
|
|
7
|
+
* canonical mockup):
|
|
8
|
+
*
|
|
9
|
+
* ━━━ ◒◓ Sponsio ━━━ runtime contract enforcement ━━━
|
|
10
|
+
* session sess_xxxx agent … mode ENFORCE
|
|
11
|
+
* tenant … env … sdk …
|
|
12
|
+
* contracts armed ──────────────────────────────────
|
|
13
|
+
* C1 … READY
|
|
14
|
+
* …
|
|
15
|
+
* trace ────────────────────────────────────────────
|
|
16
|
+
* 00.000 ├─ user_instruction "…" + 0ms mcp
|
|
17
|
+
* 00.012 │ └─ ⚙ assume[C1] freeze declared ✓
|
|
18
|
+
* 00.012 │ contract C1 → ACTIVE
|
|
19
|
+
* …
|
|
20
|
+
* ✗ enforce[C1] destructive SQL … BLOCKED 14µs
|
|
21
|
+
* ━━━ VERDICT ━━━ BLOCKED ━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
22
|
+
* headline · N violations · M warnings
|
|
23
|
+
* K checks X% deterministic N LLM calls
|
|
24
|
+
* → sponsio explain C1 sponsio replay sess_xxxx
|
|
25
|
+
*/
|
|
26
|
+
import { assumeLine, contractsTable, ctaLine, enforceViolationLine, eventLine, headerBanner, headerMeta, perfLine, sectionRule, stateTransitionLine, verdictBanner, verdictSummary, } from "./components.js";
|
|
27
|
+
import { stderrUseColor } from "./tokens.js";
|
|
28
|
+
import { argsSummary, serviceForTool } from "./derive.js";
|
|
29
|
+
function shortAlias(_label, idx) {
|
|
30
|
+
return `C${idx + 1}`;
|
|
31
|
+
}
|
|
32
|
+
function detectSdk() {
|
|
33
|
+
try {
|
|
34
|
+
return `@sponsio/sdk@0.1`;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return "—";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function shortSessionId(seed) {
|
|
41
|
+
// Cheap deterministic 8-char hash (FNV-1a) — for visual id only.
|
|
42
|
+
let h = 0x811c9dc5;
|
|
43
|
+
for (let i = 0; i < seed.length; i++) {
|
|
44
|
+
h ^= seed.charCodeAt(i);
|
|
45
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
46
|
+
}
|
|
47
|
+
return `sess_${h.toString(16).padStart(8, "0").slice(0, 8)}`;
|
|
48
|
+
}
|
|
49
|
+
function fmtUs(ms) {
|
|
50
|
+
if (ms == null)
|
|
51
|
+
return "";
|
|
52
|
+
const us = ms * 1000;
|
|
53
|
+
if (us < 1000)
|
|
54
|
+
return `${Math.round(us)}µs`;
|
|
55
|
+
return `${us.toFixed(0)}µs`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Latency for the per-tool ``+Nµs`` / ``+Nms`` / ``+Ns`` column.
|
|
59
|
+
* Mirrors Python's ``derive.format_latency_ms``: integer in the
|
|
60
|
+
* largest unit that doesn't truncate to zero. No decimals — keeps
|
|
61
|
+
* the column visually aligned and avoids spurious precision (per-tool
|
|
62
|
+
* latency is wall-clock-ish; significant digits beyond the largest
|
|
63
|
+
* unit aren't meaningful here).
|
|
64
|
+
*/
|
|
65
|
+
function fmtLatency(ms) {
|
|
66
|
+
if (ms == null || ms <= 0)
|
|
67
|
+
return "";
|
|
68
|
+
if (ms < 1)
|
|
69
|
+
return `+${Math.round(ms * 1000)}µs`;
|
|
70
|
+
if (ms < 1000)
|
|
71
|
+
return `+${Math.round(ms)}ms`;
|
|
72
|
+
return `+${Math.round(ms / 1000)}s`;
|
|
73
|
+
}
|
|
74
|
+
function fmtTs(elapsedMs) {
|
|
75
|
+
const sec = elapsedMs / 1000;
|
|
76
|
+
return sec.toFixed(3);
|
|
77
|
+
}
|
|
78
|
+
function walkViolations(turnSpans) {
|
|
79
|
+
let blocked = 0;
|
|
80
|
+
let observed = 0;
|
|
81
|
+
for (const t of turnSpans) {
|
|
82
|
+
if (t.blocked)
|
|
83
|
+
blocked++;
|
|
84
|
+
else if (t.detViolations > 0)
|
|
85
|
+
observed++;
|
|
86
|
+
}
|
|
87
|
+
return { blocked, observed };
|
|
88
|
+
}
|
|
89
|
+
function perfStats(turnSpans) {
|
|
90
|
+
let totalChecks = 0;
|
|
91
|
+
const lat = [];
|
|
92
|
+
for (const t of turnSpans) {
|
|
93
|
+
for (const c of t.children) {
|
|
94
|
+
if (c.spanType !== "sponsio.contract_check")
|
|
95
|
+
continue;
|
|
96
|
+
totalChecks++;
|
|
97
|
+
const d = c.durationMs();
|
|
98
|
+
if (d != null)
|
|
99
|
+
lat.push(d * 1000); // µs
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return { totalChecks, lat };
|
|
103
|
+
}
|
|
104
|
+
function verdictStatus(b) {
|
|
105
|
+
if (b.blocked > 0)
|
|
106
|
+
return "BLOCKED";
|
|
107
|
+
if (b.observed > 0)
|
|
108
|
+
return "WARN";
|
|
109
|
+
return "ALLOWED";
|
|
110
|
+
}
|
|
111
|
+
function quantile(sorted, q) {
|
|
112
|
+
if (sorted.length === 0)
|
|
113
|
+
return 0;
|
|
114
|
+
const idx = Math.min(sorted.length - 1, Math.floor(sorted.length * q));
|
|
115
|
+
return sorted[idx];
|
|
116
|
+
}
|
|
117
|
+
function renderTurn(turn, sessionStart, isLast, contracts, aliasMap, activated, useColor) {
|
|
118
|
+
const lines = [];
|
|
119
|
+
const elapsedMs = turn.startTime - sessionStart;
|
|
120
|
+
const service = serviceForTool(turn.action);
|
|
121
|
+
const args = turn.attributes.args ?? undefined;
|
|
122
|
+
const argsSum = argsSummary(args);
|
|
123
|
+
const latency = fmtLatency(turn.durationMs());
|
|
124
|
+
// First row: the tool call.
|
|
125
|
+
lines.push(eventLine(fmtTs(elapsedMs), turn.action, service, argsSum, latency, isLast, useColor));
|
|
126
|
+
for (const child of turn.children) {
|
|
127
|
+
if (child.spanType !== "sponsio.contract_check")
|
|
128
|
+
continue;
|
|
129
|
+
const checkSpan = child;
|
|
130
|
+
const alias = aliasMap[checkSpan.contractName] ?? "?";
|
|
131
|
+
for (const grand of checkSpan.children) {
|
|
132
|
+
const kind = grand.spanType;
|
|
133
|
+
if (kind === "sponsio.precondition") {
|
|
134
|
+
const pre = grand;
|
|
135
|
+
if (pre.result && !activated.has(alias)) {
|
|
136
|
+
activated.add(alias);
|
|
137
|
+
lines.push(assumeLine(alias, pre.formulaDesc, useColor));
|
|
138
|
+
lines.push(stateTransitionLine(alias, "ACTIVE", useColor));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else if (kind === "sponsio.guarantee") {
|
|
142
|
+
const g = grand;
|
|
143
|
+
if (!g.result) {
|
|
144
|
+
let status = "BLOCKED";
|
|
145
|
+
for (const inner of g.children) {
|
|
146
|
+
if (inner.spanType === "sponsio.enforcement") {
|
|
147
|
+
const e = inner;
|
|
148
|
+
if (e.resultAction)
|
|
149
|
+
status = e.resultAction.toUpperCase();
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
lines.push(enforceViolationLine(alias, g.formulaDesc, status, useColor));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return lines;
|
|
159
|
+
}
|
|
160
|
+
export function renderSession(opts) {
|
|
161
|
+
const out = opts.out ?? process.stderr;
|
|
162
|
+
const useColor = opts.useColor ?? stderrUseColor();
|
|
163
|
+
const write = (s) => out.write(s + "\n");
|
|
164
|
+
const sessionId = opts.sessionId ?? shortSessionId(`${opts.agentId}-${process.pid}`);
|
|
165
|
+
const sdkLabel = opts.sdk ?? detectSdk();
|
|
166
|
+
const counters = walkViolations(opts.turnSpans);
|
|
167
|
+
const { totalChecks, lat } = perfStats(opts.turnSpans);
|
|
168
|
+
const status = verdictStatus(counters);
|
|
169
|
+
// 1. Top banner.
|
|
170
|
+
write(headerBanner(useColor));
|
|
171
|
+
write("");
|
|
172
|
+
// 2. Header metadata grid.
|
|
173
|
+
const pairs = [
|
|
174
|
+
["session", sessionId],
|
|
175
|
+
["agent", opts.agentId],
|
|
176
|
+
["mode", opts.mode.toUpperCase()],
|
|
177
|
+
["tenant", opts.tenant ?? "—"],
|
|
178
|
+
["env", opts.env ?? "—"],
|
|
179
|
+
["sdk", sdkLabel],
|
|
180
|
+
];
|
|
181
|
+
for (const r of headerMeta(pairs, useColor))
|
|
182
|
+
write(" " + r);
|
|
183
|
+
write("");
|
|
184
|
+
// 3. Contracts armed list.
|
|
185
|
+
const aliasMap = {};
|
|
186
|
+
if (opts.contracts.length > 0) {
|
|
187
|
+
const rows = [];
|
|
188
|
+
opts.contracts.forEach((c, i) => {
|
|
189
|
+
const alias = shortAlias(c.desc, i);
|
|
190
|
+
const label = c.desc || "(unnamed)";
|
|
191
|
+
aliasMap[label] = alias;
|
|
192
|
+
// No assumption distinction in TS yet — every contract starts ACTIVE.
|
|
193
|
+
rows.push([alias, label.split("\n")[0], "ACTIVE"]);
|
|
194
|
+
});
|
|
195
|
+
write(" " + sectionRule("contracts armed", useColor));
|
|
196
|
+
for (const r of contractsTable(rows, useColor))
|
|
197
|
+
write(" " + r);
|
|
198
|
+
write("");
|
|
199
|
+
}
|
|
200
|
+
// 4. Trace tree.
|
|
201
|
+
if (opts.turnSpans.length > 0) {
|
|
202
|
+
write(" " + sectionRule("trace", useColor));
|
|
203
|
+
const sessionStart = opts.turnSpans[0].startTime;
|
|
204
|
+
const activated = new Set(Object.values(aliasMap)); // bare contracts are ACTIVE from step 0
|
|
205
|
+
opts.turnSpans.forEach((turn, i) => {
|
|
206
|
+
const isLast = i === opts.turnSpans.length - 1;
|
|
207
|
+
for (const row of renderTurn(turn, sessionStart, isLast, opts.contracts, aliasMap, activated, useColor)) {
|
|
208
|
+
write(" " + row);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
write("");
|
|
212
|
+
}
|
|
213
|
+
// 5. Verdict banner + summary.
|
|
214
|
+
write(verdictBanner(status, useColor));
|
|
215
|
+
write("");
|
|
216
|
+
write(" " + verdictSummary(counters.blocked, counters.observed, opts.turnSpans.length, useColor));
|
|
217
|
+
write("");
|
|
218
|
+
// 6. Perf line.
|
|
219
|
+
const detPct = totalChecks > 0 ? 100 : 100;
|
|
220
|
+
write(" " + perfLine(totalChecks, detPct, 0, useColor));
|
|
221
|
+
if (lat.length > 0) {
|
|
222
|
+
const sorted = [...lat].sort((a, b) => a - b);
|
|
223
|
+
const p50 = Math.round(quantile(sorted, 0.5));
|
|
224
|
+
const p99 = Math.round(quantile(sorted, 0.99));
|
|
225
|
+
const max_ = Math.round(sorted[sorted.length - 1]);
|
|
226
|
+
write(" " + `p50 ${p50}µs p99 ${p99}µs max ${max_}µs`);
|
|
227
|
+
}
|
|
228
|
+
write("");
|
|
229
|
+
// 7. CTA footer.
|
|
230
|
+
const ctas = opts.ctas ??
|
|
231
|
+
(counters.blocked > 0
|
|
232
|
+
? [`sponsio explain ${Object.values(aliasMap)[0] ?? "C1"}`, `sponsio replay ${sessionId}`]
|
|
233
|
+
: [`sponsio replay ${sessionId}`]);
|
|
234
|
+
write(" " + ctaLine(ctas, useColor));
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=session-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/render/session-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokens shared across the render layer — palette, symbols, status
|
|
3
|
+
* → color mapping. Mirrors ``sponsio/render/tokens.py`` enough to
|
|
4
|
+
* keep the visual identity aligned across languages.
|
|
5
|
+
*
|
|
6
|
+
* ANSI codes are emitted directly (no Rich-equivalent dependency).
|
|
7
|
+
* Output is ANSI-stripped automatically when stderr/stdout isn't a
|
|
8
|
+
* TTY (handled in components.ts via the `useColor` flag).
|
|
9
|
+
*/
|
|
10
|
+
export declare const PALETTE: {
|
|
11
|
+
brand: string;
|
|
12
|
+
rule: string;
|
|
13
|
+
fg: string;
|
|
14
|
+
metadata: string;
|
|
15
|
+
ok: string;
|
|
16
|
+
blocked: string;
|
|
17
|
+
warn: string;
|
|
18
|
+
active: string;
|
|
19
|
+
ready: string;
|
|
20
|
+
inactive: string;
|
|
21
|
+
};
|
|
22
|
+
export declare const STATUS: Record<string, string>;
|
|
23
|
+
export declare const SYMBOLS: {
|
|
24
|
+
logo: string;
|
|
25
|
+
ruleHeavy: string;
|
|
26
|
+
ruleLight: string;
|
|
27
|
+
branchT: string;
|
|
28
|
+
branchL: string;
|
|
29
|
+
branchPipe: string;
|
|
30
|
+
branchEmpty: string;
|
|
31
|
+
bullet: string;
|
|
32
|
+
check: string;
|
|
33
|
+
cross: string;
|
|
34
|
+
arrowL: string;
|
|
35
|
+
arrowR: string;
|
|
36
|
+
gear: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function ansi(code: string, text: string, useColor: boolean): string;
|
|
39
|
+
export declare function stderrUseColor(): boolean;
|
|
40
|
+
/** Truncate to ``max`` chars with an ellipsis when too long. */
|
|
41
|
+
export declare function truncate(s: string, max: number): string;
|
|
42
|
+
/** Right-pad a plain string to ``width`` (visible width — no ANSI). */
|
|
43
|
+
export declare function pad(s: string, width: number): string;
|
|
44
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/render/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;CAWnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAQd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5B,eAAO,MAAM,OAAO;;;;;;;;;;;;;;CAcnB,CAAC;AAEF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAG1E;AAED,wBAAgB,cAAc,IAAI,OAAO,CAKxC;AAED,gEAAgE;AAChE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,uEAAuE;AACvE,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD"}
|