@agentdeck/shared 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/adapter.d.ts +16 -3
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +38 -0
- package/dist/adapter.js.map +1 -1
- package/dist/command-builders.d.ts +30 -0
- package/dist/command-builders.d.ts.map +1 -0
- package/dist/command-builders.js +60 -0
- package/dist/command-builders.js.map +1 -0
- package/dist/eval-schema.d.ts +211 -0
- package/dist/eval-schema.d.ts.map +1 -0
- package/dist/eval-schema.js +23 -0
- package/dist/eval-schema.js.map +1 -0
- package/dist/format-utils.d.ts +27 -0
- package/dist/format-utils.d.ts.map +1 -0
- package/dist/format-utils.js +120 -0
- package/dist/format-utils.js.map +1 -0
- package/dist/gateway-protocol.d.ts +391 -0
- package/dist/gateway-protocol.d.ts.map +1 -0
- package/dist/gateway-protocol.js +19 -0
- package/dist/gateway-protocol.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/llm-settings.d.ts +52 -0
- package/dist/llm-settings.d.ts.map +1 -0
- package/dist/llm-settings.js +118 -0
- package/dist/llm-settings.js.map +1 -0
- package/dist/protocol.d.ts +326 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +19 -0
- package/dist/protocol.js.map +1 -1
- package/dist/session-utils.d.ts +62 -0
- package/dist/session-utils.d.ts.map +1 -0
- package/dist/session-utils.js +109 -0
- package/dist/session-utils.js.map +1 -0
- package/dist/state-colors.d.ts +16 -0
- package/dist/state-colors.d.ts.map +1 -0
- package/dist/state-colors.js +46 -0
- package/dist/state-colors.js.map +1 -0
- package/dist/states.d.ts +1 -0
- package/dist/states.d.ts.map +1 -1
- package/dist/svg-renderers/agent-logos.d.ts +33 -0
- package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
- package/dist/svg-renderers/agent-logos.js +100 -0
- package/dist/svg-renderers/agent-logos.js.map +1 -0
- package/dist/svg-renderers/index.d.ts +4 -0
- package/dist/svg-renderers/index.d.ts.map +1 -0
- package/dist/svg-renderers/index.js +4 -0
- package/dist/svg-renderers/index.js.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts +25 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.js +317 -0
- package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
- package/dist/svg-renderers/text-utils.d.ts +15 -0
- package/dist/svg-renderers/text-utils.d.ts.map +1 -0
- package/dist/svg-renderers/text-utils.js +88 -0
- package/dist/svg-renderers/text-utils.js.map +1 -0
- package/dist/telemetry-envelope.d.ts +108 -0
- package/dist/telemetry-envelope.d.ts.map +1 -0
- package/dist/telemetry-envelope.js +34 -0
- package/dist/telemetry-envelope.js.map +1 -0
- package/dist/timeline-summarizer.d.ts +13 -0
- package/dist/timeline-summarizer.d.ts.map +1 -0
- package/dist/timeline-summarizer.js +83 -0
- package/dist/timeline-summarizer.js.map +1 -0
- package/dist/timeline.d.ts +65 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +456 -0
- package/dist/timeline.js.map +1 -0
- package/dist/voice-paths.d.ts +4 -0
- package/dist/voice-paths.d.ts.map +1 -1
- package/dist/voice-paths.js +5 -0
- package/dist/voice-paths.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-slot-renderer.js","sourceRoot":"","sources":["../../src/svg-renderers/session-slot-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CJK-aware text measurement utilities.
|
|
3
|
+
* Shared across all SVG renderers (Stream Deck plugin, D200H bridge, etc.).
|
|
4
|
+
*/
|
|
5
|
+
/** True for CJK / fullwidth characters (Hangul, Kanji, Kana, CJK symbols). */
|
|
6
|
+
export declare function isWide(code: number): boolean;
|
|
7
|
+
/** Pixel width of a single character at given font size (Arial approximation). */
|
|
8
|
+
export declare function charPx(ch: string, fontSize: number): number;
|
|
9
|
+
/** Estimate pixel width of a string at given font size (Arial). */
|
|
10
|
+
export declare function measureTextWidth(text: string, fontSize: number): number;
|
|
11
|
+
/** Slice string so first part fits within maxPx. */
|
|
12
|
+
export declare function sliceByPx(s: string, maxPx: number, fontSize: number): [string, string];
|
|
13
|
+
/** Word-wrap text by estimated pixel width (works for all scripts). */
|
|
14
|
+
export declare function wrapTextByWidth(text: string, maxWidthPx: number, fontSize: number): string[];
|
|
15
|
+
//# sourceMappingURL=text-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-utils.d.ts","sourceRoot":"","sources":["../../src/svg-renderers/text-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8EAA8E;AAC9E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAS5C;AAED,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,oDAAoD;AACpD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtF;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAsC5F"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CJK-aware text measurement utilities.
|
|
3
|
+
* Shared across all SVG renderers (Stream Deck plugin, D200H bridge, etc.).
|
|
4
|
+
*/
|
|
5
|
+
const COMBINING_RE = /\p{M}/u;
|
|
6
|
+
/** True for CJK / fullwidth characters (Hangul, Kanji, Kana, CJK symbols). */
|
|
7
|
+
export function isWide(code) {
|
|
8
|
+
return ((code >= 0x1100 && code <= 0x11FF) || // Hangul Jamo
|
|
9
|
+
(code >= 0x2E80 && code <= 0x9FFF) || // CJK radicals, symbols, ideographs
|
|
10
|
+
(code >= 0xAC00 && code <= 0xD7AF) || // Hangul Syllables
|
|
11
|
+
(code >= 0xF900 && code <= 0xFAFF) || // CJK Compatibility Ideographs
|
|
12
|
+
(code >= 0xFF00 && code <= 0xFF60) || // Fullwidth forms
|
|
13
|
+
(code >= 0xFFE0 && code <= 0xFFE6) // Fullwidth signs
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
/** Pixel width of a single character at given font size (Arial approximation). */
|
|
17
|
+
export function charPx(ch, fontSize) {
|
|
18
|
+
if (COMBINING_RE.test(ch))
|
|
19
|
+
return 0; // combining marks: zero width
|
|
20
|
+
if (isWide(ch.charCodeAt(0)))
|
|
21
|
+
return fontSize; // CJK: ~1em
|
|
22
|
+
return fontSize * 0.55; // Latin, etc.: ~0.55em
|
|
23
|
+
}
|
|
24
|
+
/** Estimate pixel width of a string at given font size (Arial). */
|
|
25
|
+
export function measureTextWidth(text, fontSize) {
|
|
26
|
+
let px = 0;
|
|
27
|
+
for (const ch of text)
|
|
28
|
+
px += charPx(ch, fontSize);
|
|
29
|
+
return px;
|
|
30
|
+
}
|
|
31
|
+
/** Slice string so first part fits within maxPx. */
|
|
32
|
+
export function sliceByPx(s, maxPx, fontSize) {
|
|
33
|
+
let px = 0;
|
|
34
|
+
let i = 0;
|
|
35
|
+
for (const ch of s) {
|
|
36
|
+
const cw = charPx(ch, fontSize);
|
|
37
|
+
if (cw > 0 && px + cw > maxPx)
|
|
38
|
+
break;
|
|
39
|
+
px += cw;
|
|
40
|
+
i += ch.length;
|
|
41
|
+
}
|
|
42
|
+
return [s.slice(0, i), s.slice(i)];
|
|
43
|
+
}
|
|
44
|
+
/** Word-wrap text by estimated pixel width (works for all scripts). */
|
|
45
|
+
export function wrapTextByWidth(text, maxWidthPx, fontSize) {
|
|
46
|
+
const words = text.split(/\s+/).filter(Boolean);
|
|
47
|
+
const lines = [];
|
|
48
|
+
let current = '';
|
|
49
|
+
let currentPx = 0;
|
|
50
|
+
const spacePx = fontSize * 0.28;
|
|
51
|
+
for (const word of words) {
|
|
52
|
+
const wordPx = measureTextWidth(word, fontSize);
|
|
53
|
+
if (current && currentPx + spacePx + wordPx > maxWidthPx) {
|
|
54
|
+
lines.push(current);
|
|
55
|
+
current = '';
|
|
56
|
+
currentPx = 0;
|
|
57
|
+
}
|
|
58
|
+
if (wordPx > maxWidthPx) {
|
|
59
|
+
if (current) {
|
|
60
|
+
lines.push(current);
|
|
61
|
+
current = '';
|
|
62
|
+
currentPx = 0;
|
|
63
|
+
}
|
|
64
|
+
let rem = word;
|
|
65
|
+
while (measureTextWidth(rem, fontSize) > maxWidthPx) {
|
|
66
|
+
const [chunk, rest] = sliceByPx(rem, maxWidthPx, fontSize);
|
|
67
|
+
lines.push(chunk);
|
|
68
|
+
rem = rest;
|
|
69
|
+
}
|
|
70
|
+
current = rem;
|
|
71
|
+
currentPx = measureTextWidth(rem, fontSize);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
if (current) {
|
|
75
|
+
current += ' ' + word;
|
|
76
|
+
currentPx += spacePx + wordPx;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
current = word;
|
|
80
|
+
currentPx = wordPx;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (current)
|
|
85
|
+
lines.push(current);
|
|
86
|
+
return lines;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=text-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-utils.js","sourceRoot":"","sources":["../../src/svg-renderers/text-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentDeck telemetry envelope — internal OTel-shape struct for APME ingestion.
|
|
3
|
+
*
|
|
4
|
+
* Goal: every agent's lifecycle events (Claude hooks, Claude PTY parser, OpenClaw/
|
|
5
|
+
* OpenCode timeline, Codex OTLP, Codex PTY) emit the same `TelemetrySpan` struct.
|
|
6
|
+
* The APME collector consumes only this struct via `ingestSpan(...)`. New agents
|
|
7
|
+
* plug in by writing one adapter; collector plumbing stays untouched.
|
|
8
|
+
*
|
|
9
|
+
* **Not an external wire format.** This struct is bridge-internal. Codex CLI's
|
|
10
|
+
* real OTLP/HTTP traffic is handled separately by the Swift daemon
|
|
11
|
+
* (`apple/AgentDeck/Daemon/Modules/CodexOtelRoutes.swift`).
|
|
12
|
+
*
|
|
13
|
+
* Naming: where a sensible OpenTelemetry GenAI semantic convention exists
|
|
14
|
+
* (`gen_ai.request.model`, `gen_ai.tool.name`, etc.) we mirror it. Where it
|
|
15
|
+
* doesn't (response_kind, vibe, judge axes), we keep our `agentdeck.*` namespace.
|
|
16
|
+
* GenAI semconv is currently in "Development" status — we reference but do not
|
|
17
|
+
* pin to it. See docs/otel-standardization-study.md.
|
|
18
|
+
*/
|
|
19
|
+
import type { AgentType } from './adapter.js';
|
|
20
|
+
/** Discriminator for what a span describes. Each kind has a contract about
|
|
21
|
+
* which attributes are required (see `TelemetryAttributes`). */
|
|
22
|
+
export type TelemetrySpanKind =
|
|
23
|
+
/** A user prompt was received → open a new turn. Carries `agentdeck.prompt_text`. */
|
|
24
|
+
'turn_start'
|
|
25
|
+
/** Assistant response captured → set on the active turn. Carries `agentdeck.response_text`. */
|
|
26
|
+
| 'turn_response'
|
|
27
|
+
/** Explicit turn close (rare — most sources auto-close on next `turn_start`). */
|
|
28
|
+
| 'turn_end'
|
|
29
|
+
/** A tool was invoked. Carries `gen_ai.tool.name`. */
|
|
30
|
+
| 'tool_call'
|
|
31
|
+
/** A tool finished. May carry `gen_ai.tool.name` if available. */
|
|
32
|
+
| 'tool_result'
|
|
33
|
+
/** The agent declared task boundary. Carries `agentdeck.boundary_signal`. */
|
|
34
|
+
| 'task_boundary'
|
|
35
|
+
/** Model id resolved or usage snapshot updated. Carries either
|
|
36
|
+
* `gen_ai.request.model` or `agentdeck.usage.*`. */
|
|
37
|
+
| 'session_meta'
|
|
38
|
+
/** Generic step — record verbatim into `steps` table without lifecycle
|
|
39
|
+
* side effects. Carries `agentdeck.raw_event` + `agentdeck.raw_payload`. */
|
|
40
|
+
| 'raw_step';
|
|
41
|
+
/** OTel-shape attributes. Keys mirror GenAI semconv where available;
|
|
42
|
+
* AgentDeck-specific data lives under `agentdeck.*`. All keys are optional —
|
|
43
|
+
* consumers should defensively check for the ones their kind requires. */
|
|
44
|
+
export interface TelemetryAttributes {
|
|
45
|
+
/** Model id, e.g. "claude-opus-4-7". */
|
|
46
|
+
'gen_ai.request.model'?: string;
|
|
47
|
+
/** Tool name for tool_call / tool_result. */
|
|
48
|
+
'gen_ai.tool.name'?: string;
|
|
49
|
+
/** Provider/system, e.g. "anthropic", "openai". */
|
|
50
|
+
'gen_ai.system'?: string;
|
|
51
|
+
'agentdeck.agent_type'?: AgentType;
|
|
52
|
+
'agentdeck.cwd'?: string;
|
|
53
|
+
/** User prompt text for turn_start. */
|
|
54
|
+
'agentdeck.prompt_text'?: string;
|
|
55
|
+
/** Assistant response text for turn_response. */
|
|
56
|
+
'agentdeck.response_text'?: string;
|
|
57
|
+
/** Task boundary discriminator. */
|
|
58
|
+
'agentdeck.boundary_signal'?: 'todo_complete' | 'clear' | 'session_end' | 'manual';
|
|
59
|
+
/** Original event name for raw_step. */
|
|
60
|
+
'agentdeck.raw_event'?: string;
|
|
61
|
+
/** Original event payload for raw_step (JSON-serializable). */
|
|
62
|
+
'agentdeck.raw_payload'?: Record<string, unknown>;
|
|
63
|
+
/** Tool name as reported by the source (Claude hooks use `tool_name`). */
|
|
64
|
+
'agentdeck.tool_name'?: string;
|
|
65
|
+
'agentdeck.usage.input_tokens'?: number;
|
|
66
|
+
'agentdeck.usage.output_tokens'?: number;
|
|
67
|
+
'agentdeck.usage.cost_usd'?: number;
|
|
68
|
+
/** Open extension. Adapters may attach extra string-keyed scalars. */
|
|
69
|
+
[k: string]: string | number | boolean | Record<string, unknown> | undefined;
|
|
70
|
+
}
|
|
71
|
+
/** A single ingestion event. `traceId` ≈ run id (one trace per session/run);
|
|
72
|
+
* `spanId` is a unique id per emitted event; `parentSpanId` optionally points
|
|
73
|
+
* to the active turn. The collector currently uses the `kind`/attributes
|
|
74
|
+
* directly; the trace/span ids are present for future OTLP export. */
|
|
75
|
+
export interface TelemetrySpan {
|
|
76
|
+
traceId: string;
|
|
77
|
+
spanId: string;
|
|
78
|
+
parentSpanId?: string;
|
|
79
|
+
/** Human-readable span name, e.g. "agentdeck.turn", "agentdeck.tool.call". */
|
|
80
|
+
name: string;
|
|
81
|
+
kind: TelemetrySpanKind;
|
|
82
|
+
/** Wall-clock millis when the event happened. Adapters use Date.now() if
|
|
83
|
+
* the source doesn't provide a timestamp. */
|
|
84
|
+
ts: number;
|
|
85
|
+
attributes: TelemetryAttributes;
|
|
86
|
+
}
|
|
87
|
+
/** Source kind passed to adapters. Mostly informational — used by the collector
|
|
88
|
+
* for debug logs and by tests for fixture filtering. */
|
|
89
|
+
export type TelemetrySource = 'claude-hook' | 'claude-pty' | 'timeline' | 'codex-pty' | 'codex-otlp';
|
|
90
|
+
/** Opaque context passed to adapters. Holds the session-stable identifiers an
|
|
91
|
+
* adapter would otherwise have to thread through every call. */
|
|
92
|
+
export interface AdapterContext {
|
|
93
|
+
sessionId: string;
|
|
94
|
+
agentType: AgentType;
|
|
95
|
+
/** trace id for this session/run. Adapters should reuse this for every span
|
|
96
|
+
* they emit during the session — the collector dispatches by sessionId so
|
|
97
|
+
* trace_id is mostly informational, but keeping it stable lets future OTLP
|
|
98
|
+
* exports tie spans together. */
|
|
99
|
+
traceId: string;
|
|
100
|
+
cwd?: string;
|
|
101
|
+
/** Optional: current active turn id, populated by the collector after
|
|
102
|
+
* `turn_start` is processed. Adapters can read but should not write. */
|
|
103
|
+
activeTurnId?: string;
|
|
104
|
+
}
|
|
105
|
+
/** Canonical span name for a kind. Used by adapters so all spans for the same
|
|
106
|
+
* kind share a name — makes log filtering and OTLP queries predictable. */
|
|
107
|
+
export declare function spanNameForKind(kind: TelemetrySpanKind): string;
|
|
108
|
+
//# sourceMappingURL=telemetry-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-envelope.d.ts","sourceRoot":"","sources":["../src/telemetry-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;iEACiE;AACjE,MAAM,MAAM,iBAAiB;AAC3B,qFAAqF;AACnF,YAAY;AACd,+FAA+F;GAC7F,eAAe;AACjB,iFAAiF;GAC/E,UAAU;AACZ,sDAAsD;GACpD,WAAW;AACb,kEAAkE;GAChE,aAAa;AACf,6EAA6E;GAC3E,eAAe;AACjB;qDACqD;GACnD,cAAc;AAChB;6EAC6E;GAC3E,UAAU,CAAC;AAEf;;2EAE2E;AAC3E,MAAM,WAAW,mBAAmB;IAElC,wCAAwC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,sBAAsB,CAAC,EAAE,SAAS,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iDAAiD;IACjD,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,mCAAmC;IACnC,2BAA2B,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC;IACnF,wCAAwC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC,sEAAsE;IACtE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC9E;AAED;;;uEAGuE;AACvE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB;kDAC8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAID;yDACyD;AACzD,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,YAAY,GACZ,UAAU,GACV,WAAW,GACX,YAAY,CAAC;AAEjB;iEACiE;AACjE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB;;;sCAGkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;6EACyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID;4EAC4E;AAC5E,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAW/D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentDeck telemetry envelope — internal OTel-shape struct for APME ingestion.
|
|
3
|
+
*
|
|
4
|
+
* Goal: every agent's lifecycle events (Claude hooks, Claude PTY parser, OpenClaw/
|
|
5
|
+
* OpenCode timeline, Codex OTLP, Codex PTY) emit the same `TelemetrySpan` struct.
|
|
6
|
+
* The APME collector consumes only this struct via `ingestSpan(...)`. New agents
|
|
7
|
+
* plug in by writing one adapter; collector plumbing stays untouched.
|
|
8
|
+
*
|
|
9
|
+
* **Not an external wire format.** This struct is bridge-internal. Codex CLI's
|
|
10
|
+
* real OTLP/HTTP traffic is handled separately by the Swift daemon
|
|
11
|
+
* (`apple/AgentDeck/Daemon/Modules/CodexOtelRoutes.swift`).
|
|
12
|
+
*
|
|
13
|
+
* Naming: where a sensible OpenTelemetry GenAI semantic convention exists
|
|
14
|
+
* (`gen_ai.request.model`, `gen_ai.tool.name`, etc.) we mirror it. Where it
|
|
15
|
+
* doesn't (response_kind, vibe, judge axes), we keep our `agentdeck.*` namespace.
|
|
16
|
+
* GenAI semconv is currently in "Development" status — we reference but do not
|
|
17
|
+
* pin to it. See docs/otel-standardization-study.md.
|
|
18
|
+
*/
|
|
19
|
+
// ─── Naming helpers ──────────────────────────────────────────────────────────
|
|
20
|
+
/** Canonical span name for a kind. Used by adapters so all spans for the same
|
|
21
|
+
* kind share a name — makes log filtering and OTLP queries predictable. */
|
|
22
|
+
export function spanNameForKind(kind) {
|
|
23
|
+
switch (kind) {
|
|
24
|
+
case 'turn_start': return 'agentdeck.turn.start';
|
|
25
|
+
case 'turn_response': return 'agentdeck.turn.response';
|
|
26
|
+
case 'turn_end': return 'agentdeck.turn.end';
|
|
27
|
+
case 'tool_call': return 'agentdeck.tool.call';
|
|
28
|
+
case 'tool_result': return 'agentdeck.tool.result';
|
|
29
|
+
case 'task_boundary': return 'agentdeck.task.boundary';
|
|
30
|
+
case 'session_meta': return 'agentdeck.session.meta';
|
|
31
|
+
case 'raw_step': return 'agentdeck.step.raw';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=telemetry-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-envelope.js","sourceRoot":"","sources":["../src/telemetry-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA2GH,gFAAgF;AAEhF;4EAC4E;AAC5E,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY,CAAC,CAAI,OAAO,sBAAsB,CAAC;QACpD,KAAK,eAAe,CAAC,CAAC,OAAO,yBAAyB,CAAC;QACvD,KAAK,UAAU,CAAC,CAAM,OAAO,oBAAoB,CAAC;QAClD,KAAK,WAAW,CAAC,CAAK,OAAO,qBAAqB,CAAC;QACnD,KAAK,aAAa,CAAC,CAAG,OAAO,uBAAuB,CAAC;QACrD,KAAK,eAAe,CAAC,CAAC,OAAO,yBAAyB,CAAC;QACvD,KAAK,cAAc,CAAC,CAAE,OAAO,wBAAwB,CAAC;QACtD,KAAK,UAAU,CAAC,CAAM,OAAO,oBAAoB,CAAC;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared timeline summarizer utilities — extractTopicHint and cleanLLMOutput.
|
|
3
|
+
* Used by both bridge/src/timeline-summarizer.ts and plugin/src/timeline-summarizer.ts.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SUMMARY_SYSTEM_PROMPT = "You are a timeline summarizer. Given an AI assistant's response text, produce a single-line Korean summary (max 80 characters) of what was accomplished. Focus on the result, not the process. No quotes, no markdown, no punctuation at the end. Output ONLY the summary line, nothing else. Examples:\n- \uBD07\uB9C8\uB2F9 \uC778\uBC15\uC2A4\uC5D0 AI \uC5D0\uC774\uC804\uD2B8 \uC6B4\uC601 \uD301 3\uAC74 \uC218\uC9D1\n- \uC8FC\uAC04 \uBAA8\uB378 \uC0AC\uC6A9\uB7C9 \uB9AC\uD3EC\uD2B8: glm-5 28\uD68C \uCD5C\uB2E4\n- GitHub \uC774\uC288 #10428 \uAC80\uD1A0 \uC644\uB8CC, PR #16831 \uB300\uAE30 \uC911\n- HBF \uB274\uC2A4 9\uC6D4~2\uC6D4\uBD84 \uD55C\uAE00 \uC815\uB9AC \uC644\uB8CC";
|
|
6
|
+
/**
|
|
7
|
+
* Extract a topic hint from the first few tokens of a response.
|
|
8
|
+
* Used for immediate chat_start enrichment before LLM summarization.
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractTopicHint(text: string): string | null;
|
|
11
|
+
/** Clean LLM output — strip thinking, quotes, markdown artifacts */
|
|
12
|
+
export declare function cleanLLMOutput(content: string): string | null;
|
|
13
|
+
//# sourceMappingURL=timeline-summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-summarizer.d.ts","sourceRoot":"","sources":["../src/timeline-summarizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,qBAAqB,wqBAIT,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2C5D;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4B7D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared timeline summarizer utilities — extractTopicHint and cleanLLMOutput.
|
|
3
|
+
* Used by both bridge/src/timeline-summarizer.ts and plugin/src/timeline-summarizer.ts.
|
|
4
|
+
*/
|
|
5
|
+
import { cleanRawText } from './timeline.js';
|
|
6
|
+
export const SUMMARY_SYSTEM_PROMPT = `You are a timeline summarizer. Given an AI assistant's response text, produce a single-line Korean summary (max 80 characters) of what was accomplished. Focus on the result, not the process. No quotes, no markdown, no punctuation at the end. Output ONLY the summary line, nothing else. Examples:
|
|
7
|
+
- 봇마당 인박스에 AI 에이전트 운영 팁 3건 수집
|
|
8
|
+
- 주간 모델 사용량 리포트: glm-5 28회 최다
|
|
9
|
+
- GitHub 이슈 #10428 검토 완료, PR #16831 대기 중
|
|
10
|
+
- HBF 뉴스 9월~2월분 한글 정리 완료`;
|
|
11
|
+
/**
|
|
12
|
+
* Extract a topic hint from the first few tokens of a response.
|
|
13
|
+
* Used for immediate chat_start enrichment before LLM summarization.
|
|
14
|
+
*/
|
|
15
|
+
export function extractTopicHint(text) {
|
|
16
|
+
if (!text || text.length < 5)
|
|
17
|
+
return null;
|
|
18
|
+
const lines = text.split('\n').map(l => l.trim()).filter(Boolean);
|
|
19
|
+
// Find first non-markdown, non-code-fence, non-empty line
|
|
20
|
+
let candidate = null;
|
|
21
|
+
let inCodeFence = false;
|
|
22
|
+
for (const line of lines) {
|
|
23
|
+
// Track code fence boundaries
|
|
24
|
+
if (/^```/.test(line)) {
|
|
25
|
+
inCodeFence = !inCodeFence;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (inCodeFence)
|
|
29
|
+
continue;
|
|
30
|
+
// Skip headings-only
|
|
31
|
+
if (/^#{1,6}\s*$/.test(line))
|
|
32
|
+
continue;
|
|
33
|
+
// Strip markdown decorators for evaluation
|
|
34
|
+
const stripped = cleanRawText(line)
|
|
35
|
+
.replace(/^[-*]\s+/, '')
|
|
36
|
+
.replace(/^>\s+/, '')
|
|
37
|
+
.trim();
|
|
38
|
+
if (stripped.length >= 3) {
|
|
39
|
+
candidate = stripped;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!candidate)
|
|
44
|
+
return null;
|
|
45
|
+
const snippet = candidate.length > 80 ? candidate.slice(0, 77) + '...' : candidate;
|
|
46
|
+
// Remove common Korean prefixes (chained — "네, 확인했습니다." → "")
|
|
47
|
+
let cleaned = snippet;
|
|
48
|
+
// Strip leading "네," / "네." first, then polite phrases
|
|
49
|
+
cleaned = cleaned.replace(/^네[,.]?\s*/i, '');
|
|
50
|
+
cleaned = cleaned.replace(/^(완료했습니다\.\s*|알겠습니다\.\s*|확인했습니다\.\s*)/i, '');
|
|
51
|
+
cleaned = cleaned.trim();
|
|
52
|
+
return cleaned || null;
|
|
53
|
+
}
|
|
54
|
+
/** Clean LLM output — strip thinking, quotes, markdown artifacts */
|
|
55
|
+
export function cleanLLMOutput(content) {
|
|
56
|
+
let cleaned = content
|
|
57
|
+
// Strip <think>...</think> blocks (Qwen thinking mode)
|
|
58
|
+
.replace(/<think>[\s\S]*?<\/think>/g, '')
|
|
59
|
+
// Strip unclosed <think> at end (truncated output)
|
|
60
|
+
.replace(/<think>[\s\S]*$/g, '')
|
|
61
|
+
.trim();
|
|
62
|
+
// If output has multiple lines, take the last non-empty line
|
|
63
|
+
// (thinking text tends to come first, summary last)
|
|
64
|
+
const lines = cleaned.split('\n').map(l => l.trim()).filter(Boolean);
|
|
65
|
+
if (lines.length > 1) {
|
|
66
|
+
// Find the last line that looks like Korean summary (contains Korean chars)
|
|
67
|
+
const koreanLine = lines.reverse().find(l => /[\uAC00-\uD7AF]/.test(l));
|
|
68
|
+
cleaned = koreanLine || lines[lines.length - 1];
|
|
69
|
+
}
|
|
70
|
+
// Strip surrounding quotes, markdown list markers
|
|
71
|
+
cleaned = cleaned
|
|
72
|
+
.replace(/^[-*]\s*/, '')
|
|
73
|
+
.replace(/^["'`\u201C\u201D\u2018\u2019]+|["'`\u201C\u201D\u2018\u2019]+$/g, '')
|
|
74
|
+
.replace(/[.\u3002]$/, '') // remove trailing period
|
|
75
|
+
.trim();
|
|
76
|
+
if (!cleaned || cleaned.length < 3)
|
|
77
|
+
return null;
|
|
78
|
+
// Truncate to 80 chars if needed
|
|
79
|
+
if (cleaned.length > 80)
|
|
80
|
+
cleaned = cleaned.slice(0, 77) + '...';
|
|
81
|
+
return cleaned;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=timeline-summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-summarizer.js","sourceRoot":"","sources":["../src/timeline-summarizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared timeline types and log parser for OpenClaw mode.
|
|
3
|
+
* Used by both bridge (BridgeLogStream) and plugin (LogStream).
|
|
4
|
+
*/
|
|
5
|
+
export type TimelineEntryType = 'tool_request' | 'tool_resolved' | 'chat_start' | 'chat_end' | 'chat_response' | 'error' | 'scheduled' | 'user_action' | 'model_call' | 'model_response' | 'memory_recall' | 'tool_exec' | 'eval_result';
|
|
6
|
+
export interface TimelineEntry {
|
|
7
|
+
ts: number;
|
|
8
|
+
type: TimelineEntryType;
|
|
9
|
+
raw: string;
|
|
10
|
+
detail?: string;
|
|
11
|
+
approvalId?: string;
|
|
12
|
+
status?: 'pending' | 'approved' | 'denied';
|
|
13
|
+
agentType?: string;
|
|
14
|
+
repeatCount?: number;
|
|
15
|
+
automated?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Clean detail text — strip markdown artifacts, JSON blobs, and system noise.
|
|
19
|
+
* Applied to timeline entry `detail` fields before storage.
|
|
20
|
+
*/
|
|
21
|
+
export declare function cleanDetailText(text: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Strip inline markdown from raw text (lightweight version of cleanDetailText).
|
|
24
|
+
* Handles: **bold**, # heading, `code`, [text](url).
|
|
25
|
+
*/
|
|
26
|
+
export declare function cleanRawText(text: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Remove NOP/NOOP markers from text.
|
|
29
|
+
* Applied to both raw and detail fields.
|
|
30
|
+
*/
|
|
31
|
+
export declare function cleanNopMarkers(text: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Extract the semantic core of a timeline entry for dedup comparison.
|
|
34
|
+
* For chat_end: strip duration/tool suffix (everything after first ' · ').
|
|
35
|
+
* For chat_start: use full raw text.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractSemanticCore(raw: string, type: TimelineEntryType): string;
|
|
38
|
+
/**
|
|
39
|
+
* Check if an entry is repetitive compared to recent entries.
|
|
40
|
+
* Returns the index of the matching entry in recentEntries, or -1 if not repetitive.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isRepetitiveEntry(entry: TimelineEntry, recentEntries: readonly TimelineEntry[], windowMs?: number): number;
|
|
43
|
+
/**
|
|
44
|
+
* Shared dedup pipeline for timeline stores.
|
|
45
|
+
* Cleans text, checks exact dedup (8s), and repetitive dedup (1h).
|
|
46
|
+
* Returns: 'skip' (duplicate), 'merge' + index (repetitive), or 'add' (new).
|
|
47
|
+
*
|
|
48
|
+
* Window rationale: PTY fallback fires 1.5s after spinner_stop; Stop hook can
|
|
49
|
+
* arrive several seconds later if Claude Code's transcript_path JSONL flush is
|
|
50
|
+
* slow. 8s covers worst-case race without merging genuinely separate turns.
|
|
51
|
+
*/
|
|
52
|
+
export type DeduplicateResult = {
|
|
53
|
+
action: 'skip';
|
|
54
|
+
} | {
|
|
55
|
+
action: 'merge';
|
|
56
|
+
index: number;
|
|
57
|
+
removeChatStartIndex?: number;
|
|
58
|
+
} | {
|
|
59
|
+
action: 'add';
|
|
60
|
+
entry: TimelineEntry;
|
|
61
|
+
};
|
|
62
|
+
export declare function deduplicateEntry(entry: TimelineEntry, entries: readonly TimelineEntry[]): DeduplicateResult;
|
|
63
|
+
/** Parse a single JSON log line into a TimelineEntry, or null if unrecognized. */
|
|
64
|
+
export declare function parseLogLine(json: unknown): TimelineEntry | null;
|
|
65
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,iBAAiB,GACzB,cAAc,GAAG,eAAe,GAAG,YAAY,GAAG,UAAU,GAC5D,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,GACvD,YAAY,GAAG,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAC/D,aAAa,CAAC;AAElB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8CpD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAMhF;AA2DD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,SAAS,aAAa,EAAE,EACvC,QAAQ,SAAY,GACnB,MAAM,CA4BR;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5C,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,SAAS,aAAa,EAAE,GAChC,iBAAiB,CAgCnB;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CA2MhE"}
|