@trungtamcongnghedigital/vsaf 1.0.1 → 1.1.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 (26) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/install/skill-hooks.d.ts +17 -4
  3. package/packages/cli/dist/commands/install/skill-hooks.d.ts.map +1 -1
  4. package/packages/cli/dist/commands/install/skill-hooks.js +21 -5
  5. package/packages/cli/dist/commands/install/skill-hooks.js.map +1 -1
  6. package/packages/cli/dist/commands/telemetry-skill.d.ts +47 -10
  7. package/packages/cli/dist/commands/telemetry-skill.d.ts.map +1 -1
  8. package/packages/cli/dist/commands/telemetry-skill.js +392 -106
  9. package/packages/cli/dist/commands/telemetry-skill.js.map +1 -1
  10. package/packages/cli/dist/index.js +15 -4
  11. package/packages/cli/dist/index.js.map +1 -1
  12. package/packages/cli/dist/telemetry/otel-sdk.d.ts +13 -0
  13. package/packages/cli/dist/telemetry/otel-sdk.d.ts.map +1 -1
  14. package/packages/cli/dist/telemetry/otel-sdk.js +11 -0
  15. package/packages/cli/dist/telemetry/otel-sdk.js.map +1 -1
  16. package/packages/cli/dist/telemetry/otel-tracer.d.ts +13 -1
  17. package/packages/cli/dist/telemetry/otel-tracer.d.ts.map +1 -1
  18. package/packages/cli/dist/telemetry/otel-tracer.js +38 -4
  19. package/packages/cli/dist/telemetry/otel-tracer.js.map +1 -1
  20. package/packages/cli/dist/telemetry/project-root.d.ts +18 -0
  21. package/packages/cli/dist/telemetry/project-root.d.ts.map +1 -0
  22. package/packages/cli/dist/telemetry/project-root.js +57 -0
  23. package/packages/cli/dist/telemetry/project-root.js.map +1 -0
  24. package/packages/cli/dist/telemetry/tracer.d.ts +41 -1
  25. package/packages/cli/dist/telemetry/tracer.d.ts.map +1 -1
  26. package/packages/cli/dist/telemetry/tracer.js.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trungtamcongnghedigital/vsaf",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "is it ready to use ?",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -1,12 +1,25 @@
1
1
  /**
2
- * Hai hook kẹp lấy một lượt gọi skill.
2
+ * Ba hook kẹp lấy một lần gọi skill.
3
3
  *
4
- * Mốc bắt đầu là `PreToolUse` matcher `Skill`. Mốc kết thúc là `Stop` chứ KHÔNG phải
5
- * `PostToolUse`: tool `Skill` chỉ nạp file hướng dẫn ra rồi trả về gần như ngay, nên
6
- * `PostToolUse` nổ lúc việc thật còn chưa bắt đầu.
4
+ * Mốc bắt đầu là `PreToolUse` matcher `Skill`. Mốc đo từng chặng là `Stop` chứ KHÔNG
5
+ * phải `PostToolUse`: tool `Skill` chỉ nạp file hướng dẫn ra rồi trả về gần như ngay,
6
+ * nên `PostToolUse` nổ lúc việc thật còn chưa bắt đầu.
7
+ *
8
+ * `Stop` nổ ở MỌI lượt trả lời, mà một lần gọi skill trải nhiều lượt, nên nó không
9
+ * phải mốc kết thúc — nó gửi phần chênh của lượt rồi dời mốc. `SessionEnd` mới là chỗ
10
+ * đóng chuỗi: gửi phần còn lại và bỏ file chờ.
7
11
  */
8
12
  export declare const SKILL_OPEN_HOOK_COMMAND = "vsaf telemetry skill-open";
13
+ /**
14
+ * Mốc bắt đầu thứ hai, cho skill người dùng gõ thẳng `/tên-skill`.
15
+ *
16
+ * Đường gõ tay KHÔNG đi qua tool nào — Claude Code dán nội dung skill vào chính câu hỏi
17
+ * của người dùng — nên `PreToolUse` không có sự kiện để bám. Thiếu hook này thì khoảng
18
+ * một phần tư số lần gọi skill biến mất khỏi sổ mà không có dấu hiệu gì.
19
+ */
20
+ export declare const SKILL_PROMPT_HOOK_COMMAND = "vsaf telemetry skill-open --from-prompt";
9
21
  export declare const SKILL_CLOSE_HOOK_COMMAND = "vsaf telemetry skill-close";
22
+ export declare const SKILL_FINAL_HOOK_COMMAND = "vsaf telemetry skill-close --final";
10
23
  /**
11
24
  * Đảm bảo `.claude/settings.json` còn hai hook quan sát skill.
12
25
  *
@@ -1 +1 @@
1
- {"version":3,"file":"skill-hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/install/skill-hooks.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,eAAO,MAAM,wBAAwB,+BAA+B,CAAC;AAiCrE;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,CA4BlG"}
1
+ {"version":3,"file":"skill-hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/install/skill-hooks.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,4CAA4C,CAAC;AACnF,eAAO,MAAM,wBAAwB,+BAA+B,CAAC;AACrE,eAAO,MAAM,wBAAwB,uCAAuC,CAAC;AAiC7E;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,CA+BlG"}
@@ -1,18 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SKILL_CLOSE_HOOK_COMMAND = exports.SKILL_OPEN_HOOK_COMMAND = void 0;
3
+ exports.SKILL_FINAL_HOOK_COMMAND = exports.SKILL_CLOSE_HOOK_COMMAND = exports.SKILL_PROMPT_HOOK_COMMAND = exports.SKILL_OPEN_HOOK_COMMAND = void 0;
4
4
  exports.ensureSkillObservabilityHooks = ensureSkillObservabilityHooks;
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
7
  /**
8
- * Hai hook kẹp lấy một lượt gọi skill.
8
+ * Ba hook kẹp lấy một lần gọi skill.
9
9
  *
10
- * Mốc bắt đầu là `PreToolUse` matcher `Skill`. Mốc kết thúc là `Stop` chứ KHÔNG phải
11
- * `PostToolUse`: tool `Skill` chỉ nạp file hướng dẫn ra rồi trả về gần như ngay, nên
12
- * `PostToolUse` nổ lúc việc thật còn chưa bắt đầu.
10
+ * Mốc bắt đầu là `PreToolUse` matcher `Skill`. Mốc đo từng chặng là `Stop` chứ KHÔNG
11
+ * phải `PostToolUse`: tool `Skill` chỉ nạp file hướng dẫn ra rồi trả về gần như ngay,
12
+ * nên `PostToolUse` nổ lúc việc thật còn chưa bắt đầu.
13
+ *
14
+ * `Stop` nổ ở MỌI lượt trả lời, mà một lần gọi skill trải nhiều lượt, nên nó không
15
+ * phải mốc kết thúc — nó gửi phần chênh của lượt rồi dời mốc. `SessionEnd` mới là chỗ
16
+ * đóng chuỗi: gửi phần còn lại và bỏ file chờ.
13
17
  */
14
18
  exports.SKILL_OPEN_HOOK_COMMAND = 'vsaf telemetry skill-open';
19
+ /**
20
+ * Mốc bắt đầu thứ hai, cho skill người dùng gõ thẳng `/tên-skill`.
21
+ *
22
+ * Đường gõ tay KHÔNG đi qua tool nào — Claude Code dán nội dung skill vào chính câu hỏi
23
+ * của người dùng — nên `PreToolUse` không có sự kiện để bám. Thiếu hook này thì khoảng
24
+ * một phần tư số lần gọi skill biến mất khỏi sổ mà không có dấu hiệu gì.
25
+ */
26
+ exports.SKILL_PROMPT_HOOK_COMMAND = 'vsaf telemetry skill-open --from-prompt';
15
27
  exports.SKILL_CLOSE_HOOK_COMMAND = 'vsaf telemetry skill-close';
28
+ exports.SKILL_FINAL_HOOK_COMMAND = 'vsaf telemetry skill-close --final';
16
29
  /**
17
30
  * Chỉ thêm, và de-dupe theo nội dung `command`.
18
31
  *
@@ -61,8 +74,11 @@ function ensureSkillObservabilityHooks(projectPath) {
61
74
  const hooks = (settings.hooks ??= {});
62
75
  const changed = [
63
76
  addHook((hooks.PreToolUse ??= []), 'Skill', exports.SKILL_OPEN_HOOK_COMMAND),
77
+ // `UserPromptSubmit` không nhận `matcher` — nó fire ở mọi lượt người dùng gửi.
78
+ addHook((hooks.UserPromptSubmit ??= []), undefined, exports.SKILL_PROMPT_HOOK_COMMAND),
64
79
  // `Stop` không nhận `matcher` — nó fire ở mọi lượt kết thúc.
65
80
  addHook((hooks.Stop ??= []), undefined, exports.SKILL_CLOSE_HOOK_COMMAND),
81
+ addHook((hooks.SessionEnd ??= []), undefined, exports.SKILL_FINAL_HOOK_COMMAND),
66
82
  ].some(Boolean);
67
83
  if (!changed)
68
84
  return 'kept';
@@ -1 +1 @@
1
- {"version":3,"file":"skill-hooks.js","sourceRoot":"","sources":["../../../src/commands/install/skill-hooks.ts"],"names":[],"mappings":";;;AAoDA,sEA4BC;AAhFD,2BAAwE;AACxE,+BAA4B;AAE5B;;;;;;GAMG;AACU,QAAA,uBAAuB,GAAG,2BAA2B,CAAC;AACtD,QAAA,wBAAwB,GAAG,4BAA4B,CAAC;AAWrE;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,MAAmB,EAAE,OAA2B,EAAE,OAAe;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,OAAO,KAAK,SAAS;YACnB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3C,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CACvD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,6BAA6B,CAAC,WAAmB;IAC/D,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEtD,IAAI,QAAQ,GAAoE,EAAE,CAAC;IACnF,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAA2B,CAAC;YACzF,+EAA+E;YAC/E,mBAAmB;YACnB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,OAAO,YAAY,CAAC;YAC/D,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG;QACd,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,+BAAuB,CAAC;QACpE,6DAA6D;QAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,gCAAwB,CAAC;KAClE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEhB,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAC5B,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAA,kBAAa,EAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"skill-hooks.js","sourceRoot":"","sources":["../../../src/commands/install/skill-hooks.ts"],"names":[],"mappings":"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"}
@@ -38,8 +38,18 @@ export declare function traceNameFor(skills: string[]): string;
38
38
  * Hook "đóng" thử MỌI ứng viên, nên bên nào thiếu field cũng vẫn tìm ra file của mình.
39
39
  */
40
40
  export declare function pairingKeysOf(payload: unknown): string[];
41
- /** Khoá mà hook "mở" dùng để đặt tên file chờ: ứng viên đầu tiên có mặt. */
42
- export declare function sessionKeyOf(payload: unknown): string | undefined;
41
+ /**
42
+ * Khoá đặt tên file chờ — theo PHIÊN, không theo lượt.
43
+ *
44
+ * Trước đây chỗ này lấy `prompt_id` (khoá của một lượt) để lượt sau không nhặt file
45
+ * chờ sót của lượt trước. Nhưng chuỗi đo bây giờ CỐ Ý sống qua nhiều lượt, nên khoá
46
+ * theo lượt làm hook đóng của lượt thứ hai không tìm thấy chính file nó vừa tái vũ
47
+ * trang — tức mọi việc sau câu hỏi đầu tiên của skill lại biến mất y như cũ.
48
+ *
49
+ * Rủi ro cũ (file sót bị gán sai lượt) đã được xử ở chỗ khác: mỗi lần đóng đều chụp
50
+ * lại mốc mới, nên ảnh chụp luôn tươi; và chuỗi bị bỏ dở thì `sweepStale` dọn.
51
+ */
52
+ export declare function chainKeyOf(payload: unknown): string | undefined;
43
53
  /**
44
54
  * Session id THẬT do Claude Code cấp, nếu payload có.
45
55
  *
@@ -51,23 +61,50 @@ export declare function sessionKeyOf(payload: unknown): string | undefined;
51
61
  export declare function claudeSessionIdOf(payload: unknown): string | undefined;
52
62
  export type SkillOpenResult = 'written' | 'skipped-excluded' | 'skipped-workflow-wrapper' | 'skipped-in-workflow' | 'skipped-no-skill';
53
63
  /**
54
- * Hook `PreToolUse` (matcher `Skill`): chụp ảnh đĩa trước khi skill chạy.
64
+ * Tên skill trong một lượt người dùng gõ `/tên-skill`, nếu có.
55
65
  *
56
- * Việc nặng nằm hết ở hook "đóng"; ở đây chỉ chụp và ghi ra file, vì tiến trình này
57
- * tắt ngay sau đó nên giữ kết nối tới nơi nhận số liệu là vô nghĩa.
66
+ * Nhận CẢ HAI dạng vì payload khác nhau tuỳ phiên bản Claude Code: dạng đã bung thẻ
67
+ * (`<command-name>` + `<command-args>`, đúng thứ transcript ghi lại) và dạng thô người
68
+ * dùng vừa gõ. Chỉ đỡ một dạng thì hôm nay chạy, bản sau im lặng ngừng đo — mà im lặng
69
+ * chính là kiểu hỏng đã làm mất trắng số liệu suốt từ đầu.
70
+ */
71
+ export declare function parseSlashCommand(payload: unknown): {
72
+ skill: string;
73
+ args: string;
74
+ } | undefined;
75
+ /**
76
+ * Hook `PreToolUse` (matcher `Skill`): model tự quyết định gọi một skill.
58
77
  */
59
78
  export declare function skillOpen(projectPath: string, payload: unknown, now?: number, staleMs?: number): SkillOpenResult;
79
+ /**
80
+ * Hook `UserPromptSubmit`: người dùng gõ thẳng `/tên-skill`.
81
+ *
82
+ * Đường này KHÔNG đi qua tool nào cả — Claude Code đọc file skill rồi dán vào chính
83
+ * câu hỏi của người dùng, nên `PreToolUse` không có gì để bám vào. Đo được ngày
84
+ * 07/09 trên `hi-spec`: một lượt gõ tay sinh ra 152 dòng thiết kế đã commit mà sổ
85
+ * trắng trơn, và trên toàn máy khoảng một phần tư số lần gọi skill đi bằng đường này.
86
+ */
87
+ export declare function skillOpenFromPrompt(projectPath: string, payload: unknown, now?: number, staleMs?: number): SkillOpenResult;
60
88
  /** Đọc stdin với ngân sách thời gian rõ ràng — không bao giờ treo tiến trình hook. */
61
89
  export declare function readStdin(timeoutMs?: number): Promise<string>;
62
90
  /**
63
- * Hook `Stop`: đo cả lượt rồi phát đúng MỘT span.
91
+ * Hook `Stop`: đo phần việc của lượt vừa rồi, phát một span TĂNG DẦN, rồi chụp lại mốc.
92
+ *
93
+ * Điểm khác bản đầu: file chờ KHÔNG bị tiêu thụ. `Stop` nổ ở mọi lượt trả lời, còn một
94
+ * lần gọi skill trải nhiều lượt — tiêu thụ ở lượt đầu là bỏ trắng toàn bộ việc thật
95
+ * (đo được: 8 file của `grill-with-docs` ghi sau khi span đã đóng và không lượt nào
96
+ * phát thêm). Nên mỗi lượt gửi phần chênh của riêng nó vào ĐÚNG trace của chuỗi, rồi
97
+ * mốc được dời tới hiện tại.
98
+ *
99
+ * Lượt không sinh gì thì im (trừ lượt đầu, vẫn phát để có bằng chứng skill đã chạy):
100
+ * chuỗi sống tới hết phiên nên nếu lượt nào cũng phát thì trace đầy span rỗng.
64
101
  *
65
- * Một lượt có thể gọi nhiều skill mà `Stop` chỉ nổ một lần, nên lấy ảnh chụp CŨ NHẤT
66
- * làm mốc — từ đó tới bây giờ là trọn cửa sổ của cả lượt. Không cần trộn nhiều ảnh:
67
- * trộn vừa khó vừa không thêm thông tin nào.
102
+ * `final` (hook `SessionEnd`): gửi phần còn lại rồi ĐÓNG chuỗi, không chụp lại nữa.
68
103
  */
69
104
  export declare function skillClose(projectPath: string, sessionKey: string | string[] | undefined, deps?: {
70
105
  tracer?: Tracer;
71
106
  claudeSessionId?: string;
72
- }): Promise<'emitted' | 'no-pending' | 'skipped-in-workflow'>;
107
+ final?: boolean;
108
+ now?: number;
109
+ }): Promise<'emitted' | 'no-pending' | 'skipped-in-workflow' | 'no-output'>;
73
110
  //# sourceMappingURL=telemetry-skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-skill.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry-skill.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKrD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UAAmB,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AA0BD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG5D;AA8BD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAIrD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAOxD;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAkBD,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,kBAAkB,GAClB,0BAA0B,GAC1B,qBAAqB,GACrB,kBAAkB,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAmB,EACxB,OAAO,GAAE,MAAiB,GACzB,eAAe,CAgDjB;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAc3D;AAgBD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACzC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,qBAAqB,CAAC,CAmG3D"}
1
+ {"version":3,"file":"telemetry-skill.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry-skill.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UAAmB,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AA0BD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG5D;AAkID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAIrD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAOxD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM/D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAkBD,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,kBAAkB,GAClB,0BAA0B,GAC1B,qBAAqB,GACrB,kBAAkB,CAAC;AA8CvB;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAwB/F;AAqGD;;GAEG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAmB,EACxB,OAAO,GAAE,MAAiB,GACzB,eAAe,CAWjB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAmB,EACxB,OAAO,GAAE,MAAiB,GACzB,eAAe,CAQjB;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAc3D;AA8CD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACzC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GACtF,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,qBAAqB,GAAG,WAAW,CAAC,CAqJzE"}