@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.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapter.d.ts +16 -3
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +38 -0
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/command-builders.d.ts +30 -0
  7. package/dist/command-builders.d.ts.map +1 -0
  8. package/dist/command-builders.js +60 -0
  9. package/dist/command-builders.js.map +1 -0
  10. package/dist/eval-schema.d.ts +211 -0
  11. package/dist/eval-schema.d.ts.map +1 -0
  12. package/dist/eval-schema.js +23 -0
  13. package/dist/eval-schema.js.map +1 -0
  14. package/dist/format-utils.d.ts +27 -0
  15. package/dist/format-utils.d.ts.map +1 -0
  16. package/dist/format-utils.js +120 -0
  17. package/dist/format-utils.js.map +1 -0
  18. package/dist/gateway-protocol.d.ts +391 -0
  19. package/dist/gateway-protocol.d.ts.map +1 -0
  20. package/dist/gateway-protocol.js +19 -0
  21. package/dist/gateway-protocol.js.map +1 -0
  22. package/dist/index.d.ts +11 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/llm-settings.d.ts +52 -0
  27. package/dist/llm-settings.d.ts.map +1 -0
  28. package/dist/llm-settings.js +118 -0
  29. package/dist/llm-settings.js.map +1 -0
  30. package/dist/protocol.d.ts +326 -2
  31. package/dist/protocol.d.ts.map +1 -1
  32. package/dist/protocol.js +19 -0
  33. package/dist/protocol.js.map +1 -1
  34. package/dist/session-utils.d.ts +62 -0
  35. package/dist/session-utils.d.ts.map +1 -0
  36. package/dist/session-utils.js +109 -0
  37. package/dist/session-utils.js.map +1 -0
  38. package/dist/state-colors.d.ts +16 -0
  39. package/dist/state-colors.d.ts.map +1 -0
  40. package/dist/state-colors.js +46 -0
  41. package/dist/state-colors.js.map +1 -0
  42. package/dist/states.d.ts +1 -0
  43. package/dist/states.d.ts.map +1 -1
  44. package/dist/svg-renderers/agent-logos.d.ts +33 -0
  45. package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
  46. package/dist/svg-renderers/agent-logos.js +100 -0
  47. package/dist/svg-renderers/agent-logos.js.map +1 -0
  48. package/dist/svg-renderers/index.d.ts +4 -0
  49. package/dist/svg-renderers/index.d.ts.map +1 -0
  50. package/dist/svg-renderers/index.js +4 -0
  51. package/dist/svg-renderers/index.js.map +1 -0
  52. package/dist/svg-renderers/session-slot-renderer.d.ts +25 -0
  53. package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
  54. package/dist/svg-renderers/session-slot-renderer.js +317 -0
  55. package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
  56. package/dist/svg-renderers/text-utils.d.ts +15 -0
  57. package/dist/svg-renderers/text-utils.d.ts.map +1 -0
  58. package/dist/svg-renderers/text-utils.js +88 -0
  59. package/dist/svg-renderers/text-utils.js.map +1 -0
  60. package/dist/telemetry-envelope.d.ts +108 -0
  61. package/dist/telemetry-envelope.d.ts.map +1 -0
  62. package/dist/telemetry-envelope.js +34 -0
  63. package/dist/telemetry-envelope.js.map +1 -0
  64. package/dist/timeline-summarizer.d.ts +13 -0
  65. package/dist/timeline-summarizer.d.ts.map +1 -0
  66. package/dist/timeline-summarizer.js +83 -0
  67. package/dist/timeline-summarizer.js.map +1 -0
  68. package/dist/timeline.d.ts +65 -0
  69. package/dist/timeline.d.ts.map +1 -0
  70. package/dist/timeline.js +456 -0
  71. package/dist/timeline.js.map +1 -0
  72. package/dist/voice-paths.d.ts +4 -0
  73. package/dist/voice-paths.d.ts.map +1 -1
  74. package/dist/voice-paths.js +5 -0
  75. package/dist/voice-paths.js.map +1 -1
  76. package/package.json +9 -3
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 SerendipityBound
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/adapter.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { EventEmitter } from 'events';
2
2
  import type { Server } from 'http';
3
3
  import type { PluginCommand } from './protocol.js';
4
- export type AgentType = 'claude-code' | 'openclaw';
4
+ import type { TimelineEntry } from './timeline.js';
5
+ export type AgentType = 'claude-code' | 'openclaw' | 'codex-cli' | 'opencode' | 'monitor';
5
6
  export interface AgentCapabilities {
6
7
  type: AgentType;
7
8
  displayName: string;
@@ -45,7 +46,7 @@ export interface AdapterParserEvent {
45
46
  /** Metadata update (cursor, usage, user prompt, model catalog — no state transition) */
46
47
  export interface AdapterMetadataEvent {
47
48
  source: 'metadata';
48
- event: 'cursor_update' | 'usage_info' | 'user_prompt' | 'model_catalog';
49
+ event: 'cursor_update' | 'usage_info' | 'user_prompt' | 'model_catalog' | 'gateway_health';
49
50
  data: Record<string, unknown>;
50
51
  }
51
52
  /** Activity signal — resets stuck timer */
@@ -57,7 +58,14 @@ export interface AdapterConnectionEvent {
57
58
  source: 'connection';
58
59
  status: 'connected' | 'disconnected';
59
60
  }
60
- export type AdapterEvent = AdapterHookEvent | AdapterParserEvent | AdapterMetadataEvent | AdapterActivityEvent | AdapterConnectionEvent;
61
+ /** Timeline event (OpenClaw rich events for Android relay) */
62
+ export interface AdapterTimelineEvent {
63
+ source: 'timeline';
64
+ entry: TimelineEntry;
65
+ /** If true, update existing entry with same ts+type instead of adding new */
66
+ upsert?: boolean;
67
+ }
68
+ export type AdapterEvent = AdapterHookEvent | AdapterParserEvent | AdapterMetadataEvent | AdapterActivityEvent | AdapterConnectionEvent | AdapterTimelineEvent;
61
69
  /**
62
70
  * Agent adapter interface.
63
71
  *
@@ -122,6 +130,11 @@ export interface AgentAdapterEvents {
122
130
  }
123
131
  export declare const CLAUDE_CODE_CAPABILITIES: AgentCapabilities;
124
132
  export declare const OPENCLAW_CAPABILITIES: AgentCapabilities;
133
+ export declare const MONITOR_CAPABILITIES: AgentCapabilities;
134
+ export declare const CODEX_CLI_CAPABILITIES: AgentCapabilities;
135
+ export declare const OPENCODE_CAPABILITIES: AgentCapabilities;
125
136
  /** Default OpenClaw Gateway port */
126
137
  export declare const OPENCLAW_GATEWAY_PORT = 18789;
138
+ /** Default OpenCode server port (0 = random) */
139
+ export declare const OPENCODE_DEFAULT_PORT = 0;
127
140
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/dist/adapter.js CHANGED
@@ -23,6 +23,44 @@ export const OPENCLAW_CAPABILITIES = {
23
23
  hasApiUsage: false,
24
24
  hasModelCatalog: true,
25
25
  };
26
+ export const MONITOR_CAPABILITIES = {
27
+ type: 'monitor',
28
+ displayName: 'Monitor',
29
+ hasTerminal: false,
30
+ hasModeSwitching: false,
31
+ hasDiffReview: false,
32
+ hasOptionLists: false,
33
+ hasNavigablePrompts: false,
34
+ hasSuggestedPrompts: false,
35
+ hasApiUsage: true,
36
+ hasModelCatalog: false,
37
+ };
38
+ export const CODEX_CLI_CAPABILITIES = {
39
+ type: 'codex-cli',
40
+ displayName: 'Codex CLI',
41
+ hasTerminal: true,
42
+ hasModeSwitching: false,
43
+ hasDiffReview: false,
44
+ hasOptionLists: true,
45
+ hasNavigablePrompts: false,
46
+ hasSuggestedPrompts: false,
47
+ hasApiUsage: false,
48
+ hasModelCatalog: false,
49
+ };
50
+ export const OPENCODE_CAPABILITIES = {
51
+ type: 'opencode',
52
+ displayName: 'OpenCode',
53
+ hasTerminal: true,
54
+ hasModeSwitching: false,
55
+ hasDiffReview: false,
56
+ hasOptionLists: true,
57
+ hasNavigablePrompts: false,
58
+ hasSuggestedPrompts: false,
59
+ hasApiUsage: false,
60
+ hasModelCatalog: false,
61
+ };
26
62
  /** Default OpenClaw Gateway port */
27
63
  export const OPENCLAW_GATEWAY_PORT = 18789;
64
+ /** Default OpenCode server port (0 = random) */
65
+ export const OPENCODE_DEFAULT_PORT = 0;
28
66
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAiKA,6CAA6C;AAE7C,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,IAAI;IACzB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,KAAK;IAClB,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AA2KA,6CAA6C;AAE7C,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,IAAI;IACzB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,KAAK;IAClB,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,KAAK;IAClB,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,KAAK;IACrB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ResponseCommand, SelectOptionCommand, NavigateOptionCommand, SendPromptCommand, SwitchModeCommand, InterruptCommand, EscapeCommand, VoiceCommand, QueryUsageCommand, DiagCommand, UtilityCommand, SwitchAgentCommand, FocusSessionCommand, SessionCommand, ClientRegisterCommand, ApmeVibeFeedbackCommand, ApmeRecommendCommand } from "./protocol.js";
2
+ export declare const agentCommand: {
3
+ readonly respond: (value: string) => ResponseCommand;
4
+ readonly selectOption: (index: number) => SelectOptionCommand;
5
+ readonly navigateOption: (direction: "up" | "down") => NavigateOptionCommand;
6
+ readonly sendPrompt: (text: string) => SendPromptCommand;
7
+ readonly switchMode: (mode?: "plan" | "acceptEdits" | "default") => SwitchModeCommand;
8
+ readonly interrupt: () => InterruptCommand;
9
+ readonly escape: () => EscapeCommand;
10
+ readonly voice: (action: "start" | "stop" | "cancel") => VoiceCommand;
11
+ readonly queryUsage: () => QueryUsageCommand;
12
+ readonly diag: (action: "dump" | "analyze") => DiagCommand;
13
+ readonly utility: (action: "adjust_volume" | "toggle_mute" | "adjust_brightness" | "media_play_pause" | "media_next" | "media_prev", value?: number) => UtilityCommand;
14
+ readonly switchAgent: (agent: "openclaw" | "claude-code") => SwitchAgentCommand;
15
+ readonly focusSession: (sessionId: string) => FocusSessionCommand;
16
+ readonly sessionCommand: (sessionId: string, command: {
17
+ type: string;
18
+ [key: string]: unknown;
19
+ }) => SessionCommand;
20
+ readonly clientRegister: (clientType: string, clientLabel?: string, devices?: Array<{
21
+ id: string;
22
+ name: string;
23
+ family?: string;
24
+ columns?: number;
25
+ rows?: number;
26
+ }>) => ClientRegisterCommand;
27
+ readonly apmeVibe: (runId: string, verdict: "approve" | "reject" | "neutral", note?: string) => ApmeVibeFeedbackCommand;
28
+ readonly apmeRecommend: (taskKind?: string, budgetUsd?: number, latencyBudgetMs?: number, preferLocal?: boolean) => ApmeRecommendCommand;
29
+ };
30
+ //# sourceMappingURL=command-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-builders.d.ts","sourceRoot":"","sources":["../src/command-builders.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,YAAY;8BACR,MAAM,KAAG,eAAe;mCAGnB,MAAM,KAAG,mBAAmB;yCAGtB,IAAI,GAAG,MAAM,KAAG,qBAAqB;gCAG9C,MAAM,KAAG,iBAAiB;iCAGzB,MAAM,GAAG,aAAa,GAAG,SAAS,KAAG,iBAAiB;8BAG3D,gBAAgB;2BAGnB,aAAa;6BAGT,OAAO,GAAG,MAAM,GAAG,QAAQ,KAAG,YAAY;+BAG1C,iBAAiB;4BAGlB,MAAM,GAAG,SAAS,KAAG,WAAW;+BAG7B,eAAe,GAAG,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,YAAY,GAAG,YAAY,UAAU,MAAM,KAAG,cAAc;kCAGtI,UAAU,GAAG,aAAa,KAAG,kBAAkB;uCAG1C,MAAM,KAAG,mBAAmB;yCAG1B,MAAM,WAAW;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAAE,KAAG,cAAc;0CAG1E,MAAM,gBAAgB,MAAM,YAAY,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KAAE,CAAC,KAAG,qBAAqB;+BAGjK,MAAM,WAAW,SAAS,GAAG,QAAQ,GAAG,SAAS,SAAS,MAAM,KAAG,uBAAuB;wCAGjF,MAAM,cAAc,MAAM,oBAAoB,MAAM,gBAAgB,OAAO,KAAG,oBAAoB;CAGnH,CAAC"}
@@ -0,0 +1,60 @@
1
+ // AUTO-GENERATED by scripts/generate-command-builders.mjs — DO NOT EDIT.
2
+ // Source of truth: shared/src/protocol.ts (PluginCommand union).
3
+ //
4
+ // TypeScript already has the typed discriminated union; this file provides
5
+ // matching factory helpers so callers in all three languages share the same
6
+ // API shape (`AgentCommand.respond(value)` / `agentCommand.respond(value)`).
7
+ export const agentCommand = {
8
+ respond(value) {
9
+ return { type: "respond", value };
10
+ },
11
+ selectOption(index) {
12
+ return { type: "select_option", index };
13
+ },
14
+ navigateOption(direction) {
15
+ return { type: "navigate_option", direction };
16
+ },
17
+ sendPrompt(text) {
18
+ return { type: "send_prompt", text };
19
+ },
20
+ switchMode(mode) {
21
+ return { type: "switch_mode", mode };
22
+ },
23
+ interrupt() {
24
+ return { type: "interrupt" };
25
+ },
26
+ escape() {
27
+ return { type: "escape" };
28
+ },
29
+ voice(action) {
30
+ return { type: "voice", action };
31
+ },
32
+ queryUsage() {
33
+ return { type: "query_usage" };
34
+ },
35
+ diag(action) {
36
+ return { type: "diag", action };
37
+ },
38
+ utility(action, value) {
39
+ return { type: "utility", action, value };
40
+ },
41
+ switchAgent(agent) {
42
+ return { type: "switch_agent", agent };
43
+ },
44
+ focusSession(sessionId) {
45
+ return { type: "focus_session", sessionId };
46
+ },
47
+ sessionCommand(sessionId, command) {
48
+ return { type: "session_command", sessionId, command };
49
+ },
50
+ clientRegister(clientType, clientLabel, devices) {
51
+ return { type: "client_register", clientType, clientLabel, devices };
52
+ },
53
+ apmeVibe(runId, verdict, note) {
54
+ return { type: "apme_vibe", runId, verdict, note };
55
+ },
56
+ apmeRecommend(taskKind, budgetUsd, latencyBudgetMs, preferLocal) {
57
+ return { type: "apme_recommend", taskKind, budgetUsd, latencyBudgetMs, preferLocal };
58
+ },
59
+ };
60
+ //# sourceMappingURL=command-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-builders.js","sourceRoot":"","sources":["../src/command-builders.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,iEAAiE;AACjE,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAsB7E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,CAAC,KAAa;QACnB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;IACD,YAAY,CAAC,KAAa;QACxB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IACD,cAAc,CAAC,SAAwB;QACrC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAChD,CAAC;IACD,UAAU,CAAC,IAAY;QACrB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IACD,UAAU,CAAC,IAAyC;QAClD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IACD,SAAS;QACP,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,MAAmC;QACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,UAAU;QACR,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,MAA0B;QAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,MAAgH,EAAE,KAAc;QACtI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,WAAW,CAAC,KAAiC;QAC3C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IACD,YAAY,CAAC,SAAiB;QAC5B,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,cAAc,CAAC,SAAiB,EAAE,OAAkD;QAClF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACzD,CAAC;IACD,cAAc,CAAC,UAAkB,EAAE,WAAoB,EAAE,OAAgG;QACvJ,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,QAAQ,CAAC,KAAa,EAAE,OAAyC,EAAE,IAAa;QAC9E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;IACD,aAAa,CAAC,QAAiB,EAAE,SAAkB,EAAE,eAAwB,EAAE,WAAqB;QAClG,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;IACvF,CAAC;CACO,CAAC"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * AgentDeck eval v1 — canonical schema for APME (Agent Performance Monitoring & Evaluation).
3
+ *
4
+ * Source-of-truth for evaluation data emitted by AgentDeck. Versioned so external
5
+ * consumers (dashboards, exporters, future tooling) have a stable contract.
6
+ *
7
+ * Versioning rule (also in docs/apme.md):
8
+ * - Adding a new optional field, axis, or category: stays v1 (additive).
9
+ * - Renaming, removing, or changing the meaning of a field: requires v2.
10
+ * - Bridge tags every APME HTTP response body with `schema: EVAL_SCHEMA_VERSION`.
11
+ *
12
+ * Authoritative storage layout: `bridge/src/apme/store.ts`. These types match the
13
+ * SQLite schema's logical fields (camelCase) — column-level naming lives in the DAO.
14
+ */
15
+ import type { AgentType } from './adapter.js';
16
+ /** Wire-format version. Bump on any breaking change to the types in this file. */
17
+ export declare const EVAL_SCHEMA_VERSION: "agentdeck-eval/v1";
18
+ export type EvalSchemaVersion = typeof EVAL_SCHEMA_VERSION;
19
+ export interface ApmeRunRow {
20
+ id: string;
21
+ sessionId: string;
22
+ agentType: AgentType;
23
+ modelId?: string | null;
24
+ projectName?: string | null;
25
+ projectPath?: string | null;
26
+ taskPrompt?: string | null;
27
+ startedAt: number;
28
+ endedAt?: number | null;
29
+ inputTokens?: number | null;
30
+ outputTokens?: number | null;
31
+ costUsd?: number | null;
32
+ exitCode?: number | null;
33
+ gitBefore?: string | null;
34
+ gitAfter?: string | null;
35
+ /** JSON string. Per-run hardware sample (cpu/memory/load). */
36
+ hwProfile?: string | null;
37
+ /** JSON string. Output of the rule-based classifier — tool counts, file scopes, etc. */
38
+ taskSignals?: string | null;
39
+ taskCategory?: string | null;
40
+ /** 'auto' | 'user' | 'llm' | 'rule'. */
41
+ taskCategorySource?: string | null;
42
+ /** committed | abandoned | iterated | ab_winner | ab_loser | interrupted | exploratory. */
43
+ outcome?: string | null;
44
+ /** high | medium | low. */
45
+ outcomeConfidence?: string | null;
46
+ /** JSON string. Efficiency metrics (response_kind, tool churn, etc.). */
47
+ efficiencyJson?: string | null;
48
+ /** Weighted aggregate of outcome / judge / efficiency / vibe. 0–1 scale. */
49
+ compositeScore?: number | null;
50
+ }
51
+ export interface ApmeStepRow {
52
+ id?: number;
53
+ runId: string;
54
+ ts: number;
55
+ /** PreToolUse | PostToolUse | Stop | UserPromptSubmit | chat_start | tool_request | … */
56
+ kind: string;
57
+ toolName?: string | null;
58
+ /** JSON string of the original event payload. */
59
+ payload: string;
60
+ }
61
+ export interface ApmeArtifactRow {
62
+ id?: number;
63
+ runId: string;
64
+ /** before_snapshot | after_snapshot | diff | pty_log | lint_out | test_out | … */
65
+ kind: 'before_snapshot' | 'after_snapshot' | 'diff' | 'pty_log' | 'lint_out' | 'test_out' | string;
66
+ path: string;
67
+ sha256?: string | null;
68
+ bytes?: number | null;
69
+ }
70
+ export type ApmeEvalLayer = 'deterministic' | 'llm_judge' | 'vibe' | 'turn_judge' | 'task_judge';
71
+ export interface ApmeEvalRowDb {
72
+ id?: number;
73
+ runId: string;
74
+ layer: ApmeEvalLayer;
75
+ /** Axis name. Rubric-specific (e.g. 'task_completion', 'accuracy', 'overall'). */
76
+ metric: string;
77
+ score: number;
78
+ /** Raw judge JSON (reasoning, done, missed, summary). */
79
+ raw?: string | null;
80
+ rubricVer?: number | null;
81
+ judgeModel?: string | null;
82
+ createdAt: number;
83
+ }
84
+ /** A `task` groups consecutive turns within a run. Boundaries are detected
85
+ * automatically from agent events:
86
+ * - `todo_complete` — TodoWrite PostToolUse where every todo.status === 'completed'
87
+ * - `clear` — UserPromptSubmit `/clear` (also splits the run)
88
+ * - `session_end` — closeRun finalization
89
+ * - `manual` — reserved for a future explicit task-end marker
90
+ *
91
+ * A task-level judge reads all turns belonging to the task and writes a
92
+ * one-line `summary` + `compositeScore`. Individual axis scores land in
93
+ * `evals` rows with `layer='task_judge'` and `taskId` set.
94
+ */
95
+ export type TaskBoundarySignal = 'todo_complete' | 'clear' | 'session_end' | 'manual' | 'open' | string;
96
+ export interface ApmeTaskRow {
97
+ id: string;
98
+ runId: string;
99
+ taskIndex: number;
100
+ boundarySignal: TaskBoundarySignal;
101
+ startedAt: number;
102
+ endedAt?: number | null;
103
+ firstTurnIndex?: number | null;
104
+ lastTurnIndex?: number | null;
105
+ summary?: string | null;
106
+ outcome?: string | null;
107
+ compositeScore?: number | null;
108
+ taskCategory?: string | null;
109
+ /** Raw judge JSON (done/missed/reasoning) for the task rollup. */
110
+ notesJson?: string | null;
111
+ }
112
+ export interface ApmeRubricRow {
113
+ version: number;
114
+ /** 'general' | 'conversation' | 'planning' | 'research' | 'debugging' | 'refactoring'
115
+ * | 'review' | 'ops' | 'task_rollup' | … */
116
+ purpose: string;
117
+ prompt: string;
118
+ /** JSON string mapping axis → weight. */
119
+ weights: string;
120
+ createdAt: number;
121
+ parentVer?: number | null;
122
+ notes?: string | null;
123
+ }
124
+ export interface ApmeVibeRow {
125
+ id?: number;
126
+ runId: string;
127
+ verdict: 'approve' | 'reject' | 'neutral';
128
+ note?: string | null;
129
+ ts: number;
130
+ }
131
+ export interface ApmeScorecardRow {
132
+ agentType: string;
133
+ modelId: string;
134
+ runs: number;
135
+ avgOverall: number | null;
136
+ avgTestsPass: number | null;
137
+ totalCost: number | null;
138
+ costPerQuality: number | null;
139
+ }
140
+ export interface ApmeCategoryScorecardRow {
141
+ taskCategory: string;
142
+ modelId: string;
143
+ runs: number;
144
+ avgOverall: number | null;
145
+ avgTestsPass: number | null;
146
+ totalCost: number | null;
147
+ }
148
+ /** Parsed shape of a judge LLM's JSON response. Rubric-specific axes land in
149
+ * `scores` (e.g. `task_completion`, `accuracy`, `overall`). `summary` is
150
+ * populated only by the `task_rollup` rubric. */
151
+ export interface ParsedJudge {
152
+ scores: Record<string, number>;
153
+ reasoning: string;
154
+ /** Items the agent completed (for human verification of judge reasoning). */
155
+ done?: string[];
156
+ /** Items the agent missed. */
157
+ missed?: string[];
158
+ /** One-sentence task summary, ≤ 140 chars (task_rollup rubric only). */
159
+ summary?: string;
160
+ }
161
+ /** Response classification stored in `turns.efficiency_json.response_kind`. Drives
162
+ * which turns make it to the LLM judge — `tool_only` / `empty` are silence to
163
+ * the judge and produce noise scores. */
164
+ export type ResponseKind = 'text' | 'tool_only' | 'empty';
165
+ /** Common envelope for every APME GET response. External consumers should check
166
+ * `schema` and refuse to deserialize unknown major versions. */
167
+ export interface ApmeApiEnvelope {
168
+ schema: EvalSchemaVersion;
169
+ }
170
+ export interface ApmeRunEvalSummary {
171
+ layer: string;
172
+ metric: string;
173
+ score: number;
174
+ rubricVer: number | null;
175
+ judgeModel: string | null;
176
+ createdAt: number;
177
+ }
178
+ export interface ApmeRunWithEvalsSummary extends ApmeRunRow {
179
+ evals: ApmeRunEvalSummary[];
180
+ overallScore: number | null;
181
+ vibe: {
182
+ verdict: ApmeVibeRow['verdict'];
183
+ } | null;
184
+ }
185
+ export interface ApmeRunsResponse extends ApmeApiEnvelope {
186
+ runs: ApmeRunWithEvalsSummary[];
187
+ }
188
+ export interface ApmeRunDetailResponse extends ApmeApiEnvelope {
189
+ run: ApmeRunRow;
190
+ evals: ApmeEvalRowDb[];
191
+ steps: ApmeStepRow[];
192
+ /** Raw turn rows (snake_case from SQLite) plus per-turn evals. */
193
+ turns: Array<Record<string, unknown> & {
194
+ turnEvals: ApmeEvalRowDb[];
195
+ }>;
196
+ vibe: ApmeVibeRow | null;
197
+ overallScore: number | null;
198
+ }
199
+ export interface ApmeScorecardResponse extends ApmeApiEnvelope {
200
+ scorecards: ApmeScorecardRow[];
201
+ }
202
+ export interface ApmeCategoriesResponse extends ApmeApiEnvelope {
203
+ categories: ApmeCategoryScorecardRow[];
204
+ }
205
+ export interface ApmeRubricResponse extends ApmeApiEnvelope {
206
+ rubric: ApmeRubricRow;
207
+ }
208
+ /** Wrap any payload with the schema version envelope. Used by the bridge's
209
+ * HTTP routes so callers don't have to remember the constant. */
210
+ export declare function withSchemaEnvelope<T extends Record<string, unknown>>(body: T): T & ApmeApiEnvelope;
211
+ //# sourceMappingURL=eval-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-schema.d.ts","sourceRoot":"","sources":["../src/eval-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AgentDeck eval v1 — canonical schema for APME (Agent Performance Monitoring & Evaluation).
3
+ *
4
+ * Source-of-truth for evaluation data emitted by AgentDeck. Versioned so external
5
+ * consumers (dashboards, exporters, future tooling) have a stable contract.
6
+ *
7
+ * Versioning rule (also in docs/apme.md):
8
+ * - Adding a new optional field, axis, or category: stays v1 (additive).
9
+ * - Renaming, removing, or changing the meaning of a field: requires v2.
10
+ * - Bridge tags every APME HTTP response body with `schema: EVAL_SCHEMA_VERSION`.
11
+ *
12
+ * Authoritative storage layout: `bridge/src/apme/store.ts`. These types match the
13
+ * SQLite schema's logical fields (camelCase) — column-level naming lives in the DAO.
14
+ */
15
+ /** Wire-format version. Bump on any breaking change to the types in this file. */
16
+ export const EVAL_SCHEMA_VERSION = 'agentdeck-eval/v1';
17
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
18
+ /** Wrap any payload with the schema version envelope. Used by the bridge's
19
+ * HTTP routes so callers don't have to remember the constant. */
20
+ export function withSchemaEnvelope(body) {
21
+ return { schema: EVAL_SCHEMA_VERSION, ...body };
22
+ }
23
+ //# sourceMappingURL=eval-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-schema.js","sourceRoot":"","sources":["../src/eval-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAA4B,CAAC;AAkOhE,iFAAiF;AAEjF;kEACkE;AAClE,MAAM,UAAU,kBAAkB,CAChC,IAAO;IAEP,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shared format utilities — canonical implementations for time, count, bytes.
3
+ * Used by bridge, plugin, and ported to Android/Apple (manual sync).
4
+ */
5
+ /** Format ISO timestamp to relative time like "2h 30m" or "1d 5h" */
6
+ export declare function formatResetTime(isoString: string | undefined): string | undefined;
7
+ /** Compact format without spaces — "2d5h", "4h23m". For pixel-constrained displays. */
8
+ export declare function formatResetTimeCompact(isoString: string): string;
9
+ /** Format count: 1234 → "1.2K", 1500000 → "1.5M" */
10
+ export declare function formatCount(n: number): string;
11
+ /** Format byte size: 1073741824 → "1.0G", 1048576 → "1M" */
12
+ export declare function formatBytes(bytes: number): string;
13
+ /** Format uptime from seconds: 3725 → "1h 2m" */
14
+ export declare function formatUptime(sec: number): string;
15
+ /**
16
+ * Reconcile a rate-limit percent against its resets_at timestamp.
17
+ *
18
+ * - Future resets_at → trust percent (current window).
19
+ * - Recently past resets_at → return 0 (window just rolled over; old percent is meaningless).
20
+ * - Far-past resets_at (> 1h) → trust percent (server is returning a prior window's
21
+ * final value because no new window is active; zeroing would underreport).
22
+ * Consumers should pair this with a `usageStale` badge so the user sees uncertainty.
23
+ */
24
+ export declare function adjustUsagePercent(percent: number | null | undefined, resetsAt: string | null | undefined): number | undefined;
25
+ /** Plain-text gauge bar: "████░░" (no ANSI colors) */
26
+ export declare function gaugeBar(percent: number, width?: number): string;
27
+ //# sourceMappingURL=format-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../src/format-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAyBjF;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAahE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAapB;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,CAK3D"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Shared format utilities — canonical implementations for time, count, bytes.
3
+ * Used by bridge, plugin, and ported to Android/Apple (manual sync).
4
+ */
5
+ /** Format ISO timestamp to relative time like "2h 30m" or "1d 5h" */
6
+ export function formatResetTime(isoString) {
7
+ if (!isoString)
8
+ return undefined;
9
+ // Already pre-formatted (no 'T' in ISO dates means it's a relative string)
10
+ if (!isoString.includes('T'))
11
+ return isoString;
12
+ try {
13
+ const resetMs = new Date(isoString).getTime();
14
+ if (isNaN(resetMs))
15
+ return undefined;
16
+ const diffMs = resetMs - Date.now();
17
+ if (diffMs <= 0)
18
+ return 'now';
19
+ const diffMin = Math.floor(diffMs / 60000);
20
+ if (diffMin < 60)
21
+ return `${diffMin}m`;
22
+ const h = Math.floor(diffMin / 60);
23
+ const m = diffMin % 60;
24
+ if (h < 24)
25
+ return m > 0 ? `${h}h ${m}m` : `${h}h`;
26
+ const d = Math.floor(h / 24);
27
+ const rh = h % 24;
28
+ return rh > 0 ? `${d}d ${rh}h` : `${d}d`;
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ /** Compact format without spaces — "2d5h", "4h23m". For pixel-constrained displays. */
35
+ export function formatResetTimeCompact(isoString) {
36
+ const ms = new Date(isoString).getTime() - Date.now();
37
+ if (ms <= 0)
38
+ return '0m';
39
+ const totalMins = Math.max(1, Math.ceil(ms / 60000));
40
+ const hours = Math.floor(totalMins / 60);
41
+ const days = Math.floor(hours / 24);
42
+ const remHours = hours % 24;
43
+ const mins = totalMins % 60;
44
+ if (days > 0 && remHours > 0)
45
+ return `${days}d${remHours}h`;
46
+ if (days > 0)
47
+ return `${days}d`;
48
+ if (hours > 0 && mins > 0)
49
+ return `${hours}h${mins}m`;
50
+ if (hours > 0)
51
+ return `${hours}h`;
52
+ return `${mins}m`;
53
+ }
54
+ /** Format count: 1234 → "1.2K", 1500000 → "1.5M" */
55
+ export function formatCount(n) {
56
+ if (n >= 1_000_000)
57
+ return `${(n / 1_000_000).toFixed(1)}M`;
58
+ if (n >= 1_000)
59
+ return `${(n / 1_000).toFixed(1)}K`;
60
+ return String(n);
61
+ }
62
+ /** Format byte size: 1073741824 → "1.0G", 1048576 → "1M" */
63
+ export function formatBytes(bytes) {
64
+ if (bytes >= 1_073_741_824) {
65
+ const gb = bytes / 1_073_741_824;
66
+ return gb >= 10 ? `${Math.round(gb)}G` : `${gb.toFixed(1)}G`;
67
+ }
68
+ if (bytes >= 1_048_576) {
69
+ const mb = bytes / 1_048_576;
70
+ return mb >= 10 ? `${Math.round(mb)}M` : `${mb.toFixed(1)}M`;
71
+ }
72
+ if (bytes >= 1024)
73
+ return `${Math.round(bytes / 1024)}K`;
74
+ return `${bytes}B`;
75
+ }
76
+ /** Format uptime from seconds: 3725 → "1h 2m" */
77
+ export function formatUptime(sec) {
78
+ if (sec < 60)
79
+ return `${sec}s`;
80
+ const m = Math.floor(sec / 60);
81
+ const h = Math.floor(m / 60);
82
+ if (h > 0)
83
+ return `${h}h ${m % 60}m`;
84
+ return `${m}m`;
85
+ }
86
+ /**
87
+ * Reconcile a rate-limit percent against its resets_at timestamp.
88
+ *
89
+ * - Future resets_at → trust percent (current window).
90
+ * - Recently past resets_at → return 0 (window just rolled over; old percent is meaningless).
91
+ * - Far-past resets_at (> 1h) → trust percent (server is returning a prior window's
92
+ * final value because no new window is active; zeroing would underreport).
93
+ * Consumers should pair this with a `usageStale` badge so the user sees uncertainty.
94
+ */
95
+ export function adjustUsagePercent(percent, resetsAt) {
96
+ if (percent == null)
97
+ return undefined;
98
+ if (resetsAt) {
99
+ try {
100
+ const resetMs = new Date(resetsAt).getTime();
101
+ if (!isNaN(resetMs)) {
102
+ const elapsed = Date.now() - resetMs;
103
+ if (elapsed > 3_600_000)
104
+ return percent;
105
+ if (elapsed > 0)
106
+ return 0;
107
+ }
108
+ }
109
+ catch { /* fall through */ }
110
+ }
111
+ return percent;
112
+ }
113
+ /** Plain-text gauge bar: "████░░" (no ANSI colors) */
114
+ export function gaugeBar(percent, width = 6) {
115
+ const clamped = Math.max(0, Math.min(100, percent));
116
+ const filled = Math.round((clamped / 100) * width);
117
+ const empty = width - filled;
118
+ return '█'.repeat(filled) + '░'.repeat(empty);
119
+ }
120
+ //# sourceMappingURL=format-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../src/format-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,2EAA2E;IAC3E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEpC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,GAAG,CAAC;QAEvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAEnD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtD,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,CAAC;IAC5D,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IAClC,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,GAAG,aAAa,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IACzD,OAAO,GAAG,KAAK,GAAG,CAAC;AACrB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,GAAG,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAkC,EAClC,QAAmC;IAEnC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACrC,IAAI,OAAO,GAAG,SAAS;oBAAE,OAAO,OAAO,CAAC;gBACxC,IAAI,OAAO,GAAG,CAAC;oBAAE,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAK,GAAG,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}