@mengzf/skillflow-mcp 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +279 -2
  3. package/dist/adapters/claude-code.adapter.d.ts +10 -0
  4. package/dist/adapters/claude-code.adapter.d.ts.map +1 -0
  5. package/dist/adapters/claude-code.adapter.js +166 -0
  6. package/dist/adapters/claude-code.adapter.js.map +1 -0
  7. package/dist/adapters/codex.adapter.d.ts +10 -0
  8. package/dist/adapters/codex.adapter.d.ts.map +1 -0
  9. package/dist/adapters/codex.adapter.js +109 -0
  10. package/dist/adapters/codex.adapter.js.map +1 -0
  11. package/dist/adapters/dsh.adapter.d.ts +7 -0
  12. package/dist/adapters/dsh.adapter.d.ts.map +1 -0
  13. package/dist/adapters/dsh.adapter.js +60 -0
  14. package/dist/adapters/dsh.adapter.js.map +1 -0
  15. package/dist/adapters/qoder.adapter.d.ts +10 -0
  16. package/dist/adapters/qoder.adapter.d.ts.map +1 -0
  17. package/dist/adapters/qoder.adapter.js +119 -0
  18. package/dist/adapters/qoder.adapter.js.map +1 -0
  19. package/dist/adapters/trae.adapter.d.ts +8 -0
  20. package/dist/adapters/trae.adapter.d.ts.map +1 -0
  21. package/dist/adapters/trae.adapter.js +104 -0
  22. package/dist/adapters/trae.adapter.js.map +1 -0
  23. package/dist/adapters/types.d.ts +25 -0
  24. package/dist/adapters/types.d.ts.map +1 -0
  25. package/dist/adapters/types.js +2 -0
  26. package/dist/adapters/types.js.map +1 -0
  27. package/dist/adapters/universal.sync.d.ts +22 -0
  28. package/dist/adapters/universal.sync.d.ts.map +1 -0
  29. package/dist/adapters/universal.sync.js +140 -0
  30. package/dist/adapters/universal.sync.js.map +1 -0
  31. package/dist/adapters/workbuddy.sniffer.d.ts +22 -0
  32. package/dist/adapters/workbuddy.sniffer.d.ts.map +1 -0
  33. package/dist/adapters/workbuddy.sniffer.js +148 -0
  34. package/dist/adapters/workbuddy.sniffer.js.map +1 -0
  35. package/dist/config.d.ts +9 -0
  36. package/dist/config.d.ts.map +1 -0
  37. package/dist/config.js +33 -0
  38. package/dist/config.js.map +1 -0
  39. package/dist/db/index.d.ts +4 -0
  40. package/dist/db/index.d.ts.map +1 -0
  41. package/dist/db/index.js +39 -0
  42. package/dist/db/index.js.map +1 -0
  43. package/dist/db/invocation-filter.d.ts +29 -0
  44. package/dist/db/invocation-filter.d.ts.map +1 -0
  45. package/dist/db/invocation-filter.js +78 -0
  46. package/dist/db/invocation-filter.js.map +1 -0
  47. package/dist/db/schema.d.ts +3 -0
  48. package/dist/db/schema.d.ts.map +1 -0
  49. package/dist/db/schema.js +129 -0
  50. package/dist/db/schema.js.map +1 -0
  51. package/dist/db/seed.d.ts +15 -0
  52. package/dist/db/seed.d.ts.map +1 -0
  53. package/dist/db/seed.js +128 -0
  54. package/dist/db/seed.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +51 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/server.d.ts +7 -0
  60. package/dist/server.d.ts.map +1 -0
  61. package/dist/server.js +372 -0
  62. package/dist/server.js.map +1 -0
  63. package/dist/services/benchmark.service.d.ts +27 -0
  64. package/dist/services/benchmark.service.d.ts.map +1 -0
  65. package/dist/services/benchmark.service.js +94 -0
  66. package/dist/services/benchmark.service.js.map +1 -0
  67. package/dist/services/dashboard.service.d.ts +14 -0
  68. package/dist/services/dashboard.service.d.ts.map +1 -0
  69. package/dist/services/dashboard.service.js +296 -0
  70. package/dist/services/dashboard.service.js.map +1 -0
  71. package/dist/services/filter.service.d.ts +26 -0
  72. package/dist/services/filter.service.d.ts.map +1 -0
  73. package/dist/services/filter.service.js +103 -0
  74. package/dist/services/filter.service.js.map +1 -0
  75. package/dist/services/impact.service.d.ts +20 -0
  76. package/dist/services/impact.service.d.ts.map +1 -0
  77. package/dist/services/impact.service.js +114 -0
  78. package/dist/services/impact.service.js.map +1 -0
  79. package/dist/services/telemetry.service.d.ts +41 -0
  80. package/dist/services/telemetry.service.d.ts.map +1 -0
  81. package/dist/services/telemetry.service.js +244 -0
  82. package/dist/services/telemetry.service.js.map +1 -0
  83. package/dist/types/index.d.ts +3 -0
  84. package/dist/types/index.d.ts.map +1 -0
  85. package/dist/types/index.js +3 -0
  86. package/dist/types/index.js.map +1 -0
  87. package/dist/types/models.d.ts +73 -0
  88. package/dist/types/models.d.ts.map +1 -0
  89. package/dist/types/models.js +2 -0
  90. package/dist/types/models.js.map +1 -0
  91. package/dist/types/tools.d.ts +173 -0
  92. package/dist/types/tools.d.ts.map +1 -0
  93. package/dist/types/tools.js +195 -0
  94. package/dist/types/tools.js.map +1 -0
  95. package/dist/utils/ascii-chart.d.ts +9 -0
  96. package/dist/utils/ascii-chart.d.ts.map +1 -0
  97. package/dist/utils/ascii-chart.js +29 -0
  98. package/dist/utils/ascii-chart.js.map +1 -0
  99. package/dist/utils/formatter.d.ts +6 -0
  100. package/dist/utils/formatter.d.ts.map +1 -0
  101. package/dist/utils/formatter.js +29 -0
  102. package/dist/utils/formatter.js.map +1 -0
  103. package/dist/utils/governance.d.ts +25 -0
  104. package/dist/utils/governance.d.ts.map +1 -0
  105. package/dist/utils/governance.js +70 -0
  106. package/dist/utils/governance.js.map +1 -0
  107. package/dist/utils/hours.d.ts +3 -0
  108. package/dist/utils/hours.d.ts.map +1 -0
  109. package/dist/utils/hours.js +15 -0
  110. package/dist/utils/hours.js.map +1 -0
  111. package/dist/utils/pricing.d.ts +19 -0
  112. package/dist/utils/pricing.d.ts.map +1 -0
  113. package/dist/utils/pricing.js +96 -0
  114. package/dist/utils/pricing.js.map +1 -0
  115. package/dist/utils/quality.d.ts +15 -0
  116. package/dist/utils/quality.d.ts.map +1 -0
  117. package/dist/utils/quality.js +47 -0
  118. package/dist/utils/quality.js.map +1 -0
  119. package/dist/web/render.d.ts +2 -0
  120. package/dist/web/render.d.ts.map +1 -0
  121. package/dist/web/render.js +1919 -0
  122. package/dist/web/render.js.map +1 -0
  123. package/dist/web/server.d.ts +10 -0
  124. package/dist/web/server.d.ts.map +1 -0
  125. package/dist/web/server.js +160 -0
  126. package/dist/web/server.js.map +1 -0
  127. package/package.json +51 -4
@@ -0,0 +1,173 @@
1
+ import { z } from 'zod';
2
+ import { InvocationStatus, TriggerMode } from './models.js';
3
+ export declare const RecordSkillHitSchema: z.ZodObject<{
4
+ session_id: z.ZodString;
5
+ skill_id: z.ZodString;
6
+ skill_version: z.ZodDefault<z.ZodOptional<z.ZodString>>;
7
+ agent_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ model_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
9
+ round_index: z.ZodOptional<z.ZodNumber>;
10
+ trigger_mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["explicit", "implicit"]>>>;
11
+ status: z.ZodDefault<z.ZodOptional<z.ZodEnum<["success", "failed", "partial", "skipped"]>>>;
12
+ actual_tokens: z.ZodOptional<z.ZodNumber>;
13
+ context_tokens: z.ZodOptional<z.ZodNumber>;
14
+ output_tokens: z.ZodOptional<z.ZodNumber>;
15
+ actual_steps: z.ZodOptional<z.ZodNumber>;
16
+ saved_steps: z.ZodOptional<z.ZodNumber>;
17
+ saved_tokens: z.ZodOptional<z.ZodNumber>;
18
+ tool_chain_depth: z.ZodOptional<z.ZodNumber>;
19
+ tool_failures: z.ZodOptional<z.ZodNumber>;
20
+ follow_up_modifier: z.ZodOptional<z.ZodString>;
21
+ has_correction: z.ZodOptional<z.ZodBoolean>;
22
+ execution_time_ms: z.ZodOptional<z.ZodNumber>;
23
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ session_id: string;
26
+ skill_id: string;
27
+ skill_version: string;
28
+ agent_name: string;
29
+ model_name: string;
30
+ trigger_mode: "explicit" | "implicit";
31
+ status: "success" | "failed" | "partial" | "skipped";
32
+ round_index?: number | undefined;
33
+ actual_tokens?: number | undefined;
34
+ context_tokens?: number | undefined;
35
+ output_tokens?: number | undefined;
36
+ actual_steps?: number | undefined;
37
+ saved_steps?: number | undefined;
38
+ saved_tokens?: number | undefined;
39
+ tool_chain_depth?: number | undefined;
40
+ tool_failures?: number | undefined;
41
+ follow_up_modifier?: string | undefined;
42
+ has_correction?: boolean | undefined;
43
+ execution_time_ms?: number | undefined;
44
+ metadata?: Record<string, any> | undefined;
45
+ }, {
46
+ session_id: string;
47
+ skill_id: string;
48
+ skill_version?: string | undefined;
49
+ agent_name?: string | undefined;
50
+ model_name?: string | undefined;
51
+ round_index?: number | undefined;
52
+ trigger_mode?: "explicit" | "implicit" | undefined;
53
+ status?: "success" | "failed" | "partial" | "skipped" | undefined;
54
+ actual_tokens?: number | undefined;
55
+ context_tokens?: number | undefined;
56
+ output_tokens?: number | undefined;
57
+ actual_steps?: number | undefined;
58
+ saved_steps?: number | undefined;
59
+ saved_tokens?: number | undefined;
60
+ tool_chain_depth?: number | undefined;
61
+ tool_failures?: number | undefined;
62
+ follow_up_modifier?: string | undefined;
63
+ has_correction?: boolean | undefined;
64
+ execution_time_ms?: number | undefined;
65
+ metadata?: Record<string, any> | undefined;
66
+ }>;
67
+ export interface RecordSkillHitInput {
68
+ session_id: string;
69
+ skill_id: string;
70
+ skill_version?: string;
71
+ agent_name?: string;
72
+ model_name?: string;
73
+ round_index?: number;
74
+ trigger_mode?: TriggerMode;
75
+ status?: InvocationStatus;
76
+ actual_tokens?: number;
77
+ context_tokens?: number;
78
+ output_tokens?: number;
79
+ actual_steps?: number;
80
+ saved_steps?: number;
81
+ saved_tokens?: number;
82
+ saved_hours?: number;
83
+ tool_chain_depth?: number;
84
+ tool_failures?: number;
85
+ follow_up_modifier?: string;
86
+ has_correction?: boolean;
87
+ execution_time_ms?: number;
88
+ metadata?: Record<string, any>;
89
+ }
90
+ export declare const GetRoundSkillImpactSchema: z.ZodObject<{
91
+ session_id: z.ZodOptional<z.ZodString>;
92
+ round_index: z.ZodOptional<z.ZodNumber>;
93
+ include_session_summary: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
94
+ }, "strip", z.ZodTypeAny, {
95
+ include_session_summary: boolean;
96
+ session_id?: string | undefined;
97
+ round_index?: number | undefined;
98
+ }, {
99
+ session_id?: string | undefined;
100
+ round_index?: number | undefined;
101
+ include_session_summary?: boolean | undefined;
102
+ }>;
103
+ export type GetRoundSkillImpactInput = z.infer<typeof GetRoundSkillImpactSchema>;
104
+ export declare const GetSkillDashboardSchema: z.ZodObject<{
105
+ time_range: z.ZodDefault<z.ZodOptional<z.ZodEnum<["current_session", "today", "7days", "30days", "all"]>>>;
106
+ session_id: z.ZodOptional<z.ZodString>;
107
+ agent_name: z.ZodOptional<z.ZodString>;
108
+ skill_id: z.ZodOptional<z.ZodString>;
109
+ model_name: z.ZodOptional<z.ZodString>;
110
+ status: z.ZodOptional<z.ZodEnum<["success", "failed", "partial", "skipped"]>>;
111
+ group_by: z.ZodDefault<z.ZodOptional<z.ZodEnum<["skill", "agent", "category", "date", "governance"]>>>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ time_range: "current_session" | "today" | "7days" | "30days" | "all";
114
+ group_by: "skill" | "agent" | "category" | "date" | "governance";
115
+ session_id?: string | undefined;
116
+ skill_id?: string | undefined;
117
+ agent_name?: string | undefined;
118
+ model_name?: string | undefined;
119
+ status?: "success" | "failed" | "partial" | "skipped" | undefined;
120
+ }, {
121
+ session_id?: string | undefined;
122
+ skill_id?: string | undefined;
123
+ agent_name?: string | undefined;
124
+ model_name?: string | undefined;
125
+ status?: "success" | "failed" | "partial" | "skipped" | undefined;
126
+ time_range?: "current_session" | "today" | "7days" | "30days" | "all" | undefined;
127
+ group_by?: "skill" | "agent" | "category" | "date" | "governance" | undefined;
128
+ }>;
129
+ export interface GetSkillDashboardInput {
130
+ time_range?: 'current_session' | 'today' | '7days' | '30days' | 'all';
131
+ session_id?: string;
132
+ agent_name?: string;
133
+ skill_id?: string;
134
+ model_name?: string;
135
+ status?: 'success' | 'failed' | 'partial' | 'skipped';
136
+ group_by?: 'skill' | 'agent' | 'category' | 'date' | 'governance';
137
+ }
138
+ export declare const ManageSkillBenchmarkSchema: z.ZodObject<{
139
+ action: z.ZodEnum<["list", "get", "set", "delete", "reset_defaults"]>;
140
+ skill_id: z.ZodOptional<z.ZodString>;
141
+ skill_name: z.ZodOptional<z.ZodString>;
142
+ category: z.ZodOptional<z.ZodString>;
143
+ description: z.ZodOptional<z.ZodString>;
144
+ baseline_steps: z.ZodOptional<z.ZodNumber>;
145
+ baseline_tokens: z.ZodOptional<z.ZodNumber>;
146
+ default_saved_steps: z.ZodOptional<z.ZodNumber>;
147
+ default_saved_tokens: z.ZodOptional<z.ZodNumber>;
148
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
149
+ }, "strip", z.ZodTypeAny, {
150
+ action: "list" | "get" | "set" | "delete" | "reset_defaults";
151
+ skill_id?: string | undefined;
152
+ category?: string | undefined;
153
+ skill_name?: string | undefined;
154
+ description?: string | undefined;
155
+ baseline_steps?: number | undefined;
156
+ baseline_tokens?: number | undefined;
157
+ default_saved_steps?: number | undefined;
158
+ default_saved_tokens?: number | undefined;
159
+ tags?: string[] | undefined;
160
+ }, {
161
+ action: "list" | "get" | "set" | "delete" | "reset_defaults";
162
+ skill_id?: string | undefined;
163
+ category?: string | undefined;
164
+ skill_name?: string | undefined;
165
+ description?: string | undefined;
166
+ baseline_steps?: number | undefined;
167
+ baseline_tokens?: number | undefined;
168
+ default_saved_steps?: number | undefined;
169
+ default_saved_tokens?: number | undefined;
170
+ tags?: string[] | undefined;
171
+ }>;
172
+ export type ManageSkillBenchmarkInput = z.infer<typeof ManageSkillBenchmarkSchema>;
173
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8F/B,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAgBpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;EA+BlC,CAAC;AAEH,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,CAAC;CACnE;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDrC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,195 @@
1
+ import { z } from 'zod';
2
+ export const RecordSkillHitSchema = z.object({
3
+ session_id: z.string().describe('Unique session identifier (e.g. sess-20261111-01)'),
4
+ skill_id: z.string().describe("Unique identifier of the skill (e.g. 'code-review', 'frontend-design')"),
5
+ skill_version: z.string().optional().default('1.0.0').describe('Skill version string'),
6
+ agent_name: z
7
+ .string()
8
+ .optional()
9
+ .default('unknown')
10
+ .describe("Agent identifier (e.g. 'Claude Code', 'Trae', 'Qoder', 'WorkBuddy', 'Codex', 'DSH')"),
11
+ model_name: z
12
+ .string()
13
+ .optional()
14
+ .default('unknown')
15
+ .describe("Model identifier (e.g. 'deepseek-v4.1-flash', 'claude-3-5-sonnet', 'gpt-4o')"),
16
+ round_index: z
17
+ .number()
18
+ .int()
19
+ .min(1)
20
+ .optional()
21
+ .describe('Conversation round index (if omitted, increments automatically or defaults to current)'),
22
+ trigger_mode: z
23
+ .enum(['explicit', 'implicit'])
24
+ .optional()
25
+ .default('explicit')
26
+ .describe("Trigger mode: 'explicit' (slash command / direct name call) or 'implicit' (auto router / prompt injection)"),
27
+ status: z
28
+ .enum(['success', 'failed', 'partial', 'skipped'])
29
+ .optional()
30
+ .default('success')
31
+ .describe('Execution status of the skill'),
32
+ actual_tokens: z
33
+ .number()
34
+ .int()
35
+ .min(0)
36
+ .optional()
37
+ .describe('Actual tokens consumed during skill execution'),
38
+ context_tokens: z
39
+ .number()
40
+ .int()
41
+ .min(0)
42
+ .optional()
43
+ .describe('Tokens dedicated to skill instructions and reference materials'),
44
+ output_tokens: z
45
+ .number()
46
+ .int()
47
+ .min(0)
48
+ .optional()
49
+ .describe('Tokens generated in response output'),
50
+ actual_steps: z
51
+ .number()
52
+ .int()
53
+ .min(0)
54
+ .optional()
55
+ .describe('Actual steps taken by the skill (defaults to 1)'),
56
+ saved_steps: z
57
+ .number()
58
+ .int()
59
+ .optional()
60
+ .describe('Explicit steps saved (if omitted, calculated automatically from skill baseline)'),
61
+ saved_tokens: z
62
+ .number()
63
+ .int()
64
+ .optional()
65
+ .describe('Explicit tokens saved (if omitted, calculated automatically from skill baseline)'),
66
+ tool_chain_depth: z
67
+ .number()
68
+ .int()
69
+ .min(0)
70
+ .optional()
71
+ .describe('Number of sub-tools orchestrated by this skill'),
72
+ tool_failures: z
73
+ .number()
74
+ .int()
75
+ .min(0)
76
+ .optional()
77
+ .describe('Number of failed tool invocations during orchestration'),
78
+ follow_up_modifier: z
79
+ .string()
80
+ .optional()
81
+ .describe('Detected follow-up request modifier from user (e.g. "补单测", "深色模式")'),
82
+ has_correction: z
83
+ .boolean()
84
+ .optional()
85
+ .describe('Whether user gave correction/retry cues in follow-up'),
86
+ execution_time_ms: z
87
+ .number()
88
+ .int()
89
+ .min(0)
90
+ .optional()
91
+ .describe('Execution duration in milliseconds'),
92
+ metadata: z
93
+ .record(z.any())
94
+ .optional()
95
+ .describe('Arbitrary extra metadata such as prompt summary, error message, or target files'),
96
+ });
97
+ export const GetRoundSkillImpactSchema = z.object({
98
+ session_id: z
99
+ .string()
100
+ .optional()
101
+ .describe('Session ID to inspect (if omitted, uses the most recently active session)'),
102
+ round_index: z
103
+ .number()
104
+ .int()
105
+ .min(1)
106
+ .optional()
107
+ .describe('Specific conversation round index (if omitted, inspects the latest round)'),
108
+ include_session_summary: z
109
+ .boolean()
110
+ .optional()
111
+ .default(true)
112
+ .describe('Include cumulative session stats in the output report'),
113
+ });
114
+ export const GetSkillDashboardSchema = z.object({
115
+ time_range: z
116
+ .enum(['current_session', 'today', '7days', '30days', 'all'])
117
+ .optional()
118
+ .default('all')
119
+ .describe('Time window for analysis'),
120
+ session_id: z
121
+ .string()
122
+ .optional()
123
+ .describe("Specific session ID (required when time_range is 'current_session')"),
124
+ agent_name: z
125
+ .string()
126
+ .optional()
127
+ .describe("Filter by specific agent (e.g. 'Trae', 'Claude Code', 'Qoder', 'WorkBuddy')"),
128
+ skill_id: z
129
+ .string()
130
+ .optional()
131
+ .describe('Filter by specific skill identifier'),
132
+ model_name: z
133
+ .string()
134
+ .optional()
135
+ .describe("Filter by the model that executed the skill (e.g. 'claude-sonnet-4.5', 'gpt-5')"),
136
+ status: z
137
+ .enum(['success', 'failed', 'partial', 'skipped'])
138
+ .optional()
139
+ .describe('Filter by execution status'),
140
+ group_by: z
141
+ .enum(['skill', 'agent', 'category', 'date', 'governance'])
142
+ .optional()
143
+ .default('skill')
144
+ .describe('Primary aggregation grouping dimension'),
145
+ });
146
+ export const ManageSkillBenchmarkSchema = z.object({
147
+ action: z
148
+ .enum(['list', 'get', 'set', 'delete', 'reset_defaults'])
149
+ .describe('Action to perform on skill benchmarks'),
150
+ skill_id: z
151
+ .string()
152
+ .optional()
153
+ .describe("Skill ID (required for 'get', 'set', 'delete')"),
154
+ skill_name: z
155
+ .string()
156
+ .optional()
157
+ .describe('Human-readable display name of the skill'),
158
+ category: z
159
+ .string()
160
+ .optional()
161
+ .describe("Category (e.g. 'engineering', 'design', 'security', 'documentation', 'data', 'utility')"),
162
+ description: z
163
+ .string()
164
+ .optional()
165
+ .describe('Capability summary for this skill'),
166
+ baseline_steps: z
167
+ .number()
168
+ .int()
169
+ .min(1)
170
+ .optional()
171
+ .describe('Estimated manual steps required without this skill'),
172
+ baseline_tokens: z
173
+ .number()
174
+ .int()
175
+ .min(100)
176
+ .optional()
177
+ .describe('Estimated tokens consumed without this skill'),
178
+ default_saved_steps: z
179
+ .number()
180
+ .int()
181
+ .min(1)
182
+ .optional()
183
+ .describe('Expected steps saved per run'),
184
+ default_saved_tokens: z
185
+ .number()
186
+ .int()
187
+ .min(50)
188
+ .optional()
189
+ .describe('Expected tokens saved per run'),
190
+ tags: z
191
+ .array(z.string())
192
+ .optional()
193
+ .describe('Tag keywords for searching and grouping'),
194
+ });
195
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function renderBar(value: number, max: number, width?: number): string;
2
+ export declare function renderProgressBar(ratio: number, width?: number): string;
3
+ export interface BarChartItem {
4
+ label: string;
5
+ value: number;
6
+ suffix?: string;
7
+ }
8
+ export declare function renderHorizontalBarChart(items: BarChartItem[], width?: number): string;
9
+ //# sourceMappingURL=ascii-chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascii-chart.d.ts","sourceRoot":"","sources":["../../src/utils/ascii-chart.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAOxE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAKnE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,SAAK,GAAG,MAAM,CAclF"}
@@ -0,0 +1,29 @@
1
+ export function renderBar(value, max, width = 20) {
2
+ if (max <= 0 || value <= 0) {
3
+ return '░'.repeat(width);
4
+ }
5
+ const filledCount = Math.min(width, Math.max(0, Math.round((value / max) * width)));
6
+ const emptyCount = width - filledCount;
7
+ return '█'.repeat(filledCount) + '░'.repeat(emptyCount);
8
+ }
9
+ export function renderProgressBar(ratio, width = 20) {
10
+ const clamped = Math.min(1, Math.max(0, ratio));
11
+ const filledCount = Math.round(clamped * width);
12
+ const emptyCount = width - filledCount;
13
+ return `[${'█'.repeat(filledCount)}${'░'.repeat(emptyCount)}] ${(clamped * 100).toFixed(0)}%`;
14
+ }
15
+ export function renderHorizontalBarChart(items, width = 16) {
16
+ if (items.length === 0)
17
+ return '_No data available_';
18
+ const maxValue = Math.max(...items.map((i) => i.value), 1);
19
+ const maxLabelLen = Math.max(...items.map((i) => i.label.length), 4);
20
+ return items
21
+ .map((item, index) => {
22
+ const paddedLabel = item.label.padEnd(maxLabelLen, ' ');
23
+ const bar = renderBar(item.value, maxValue, width);
24
+ const suffix = item.suffix ? ` ${item.suffix}` : ` (${item.value.toLocaleString()})`;
25
+ return `${index + 1}. \`${paddedLabel}\` [${bar}]${suffix}`;
26
+ })
27
+ .join('\n');
28
+ }
29
+ //# sourceMappingURL=ascii-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascii-chart.js","sourceRoot":"","sources":["../../src/utils/ascii-chart.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,GAAW,EAAE,KAAK,GAAG,EAAE;IAC9D,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,KAAK,GAAG,WAAW,CAAC;IACvC,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,GAAG,WAAW,CAAC;IACvC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAChG,CAAC;AAQD,MAAM,UAAU,wBAAwB,CAAC,KAAqB,EAAE,KAAK,GAAG,EAAE;IACxE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAErE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;QACrF,OAAO,GAAG,KAAK,GAAG,CAAC,OAAO,WAAW,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;IAC9D,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function formatNumber(n: number): string;
2
+ export declare function formatPercent(ratio: number): string;
3
+ export declare function formatDuration(ms: number): string;
4
+ export declare function formatTokens(n: number): string;
5
+ export declare function formatEstimatedCost(tokens: number, costPerMillion?: number): string;
6
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ9C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,SAAM,GAAG,MAAM,CAMhF"}
@@ -0,0 +1,29 @@
1
+ export function formatNumber(n) {
2
+ return n.toLocaleString('en-US');
3
+ }
4
+ export function formatPercent(ratio) {
5
+ const pct = (ratio * 100).toFixed(1);
6
+ return `${pct}%`;
7
+ }
8
+ export function formatDuration(ms) {
9
+ if (ms < 1000)
10
+ return `${ms}ms`;
11
+ return `${(ms / 1000).toFixed(2)}s`;
12
+ }
13
+ export function formatTokens(n) {
14
+ if (n >= 1_000_000) {
15
+ return `${(n / 1_000_000).toFixed(2)}M`;
16
+ }
17
+ if (n >= 1_000) {
18
+ return `${(n / 1_000).toFixed(1)}k`;
19
+ }
20
+ return n.toString();
21
+ }
22
+ export function formatEstimatedCost(tokens, costPerMillion = 3.0) {
23
+ const cost = (tokens / 1_000_000) * costPerMillion;
24
+ if (cost < 0.01) {
25
+ return '< $0.01';
26
+ }
27
+ return `~$${cost.toFixed(2)}`;
28
+ }
29
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,cAAc,GAAG,GAAG;IACtE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,cAAc,CAAC;IACnD,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface HealthScoreResult {
2
+ score: number;
3
+ grade: 'A+' | 'A' | 'B' | 'C' | 'D';
4
+ gradeBadgeClass: string;
5
+ summary: string;
6
+ }
7
+ export declare function calculateSkillHealthScore(stats: {
8
+ totalInvocations: number;
9
+ successCount: number;
10
+ correctionCount: number;
11
+ contextOverheadTokens?: number;
12
+ outputTokens?: number;
13
+ toolFailures?: number;
14
+ }): HealthScoreResult;
15
+ export interface ModifierPattern {
16
+ keyword: RegExp;
17
+ category: string;
18
+ recommendation: string;
19
+ }
20
+ export declare const MODIFIER_PATTERNS: ModifierPattern[];
21
+ export declare function extractFollowUpModifier(text?: string): {
22
+ category: string;
23
+ recommendation: string;
24
+ } | null;
25
+ //# sourceMappingURL=governance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/utils/governance.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,iBAAiB,CAwDpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAO9C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQ1G"}
@@ -0,0 +1,70 @@
1
+ export function calculateSkillHealthScore(stats) {
2
+ if (stats.totalInvocations === 0) {
3
+ return {
4
+ score: 100,
5
+ grade: 'A',
6
+ gradeBadgeClass: 'pill-blue',
7
+ summary: '待积累调用数据',
8
+ };
9
+ }
10
+ const successRate = stats.successCount / stats.totalInvocations;
11
+ const correctionRate = stats.correctionCount / stats.totalInvocations;
12
+ const toolFailureRate = stats.toolFailures ? stats.toolFailures / stats.totalInvocations : 0;
13
+ // Base 100 calculation
14
+ let score = 100;
15
+ // Deduct up to 40 for low success rate
16
+ score -= Math.round((1 - successRate) * 40);
17
+ // Deduct up to 30 for high correction rate
18
+ score -= Math.round(correctionRate * 30);
19
+ // Deduct up to 15 for tool failures
20
+ score -= Math.round(Math.min(1, toolFailureRate) * 15);
21
+ score = Math.max(0, Math.min(100, score));
22
+ let grade = 'A';
23
+ let gradeBadgeClass = 'pill-success';
24
+ if (score >= 95) {
25
+ grade = 'A+';
26
+ gradeBadgeClass = 'pill-success';
27
+ }
28
+ else if (score >= 85) {
29
+ grade = 'A';
30
+ gradeBadgeClass = 'pill-success';
31
+ }
32
+ else if (score >= 70) {
33
+ grade = 'B';
34
+ gradeBadgeClass = 'pill-blue';
35
+ }
36
+ else if (score >= 50) {
37
+ grade = 'C';
38
+ gradeBadgeClass = 'pill-partial';
39
+ }
40
+ else {
41
+ grade = 'D';
42
+ gradeBadgeClass = 'pill-failed';
43
+ }
44
+ const summary = `成功率 ${(successRate * 100).toFixed(0)}% · 纠错返工率 ${(correctionRate * 100).toFixed(0)}%`;
45
+ return {
46
+ score,
47
+ grade,
48
+ gradeBadgeClass,
49
+ summary,
50
+ };
51
+ }
52
+ export const MODIFIER_PATTERNS = [
53
+ { keyword: /单测|测试|test|jest|vitest|pytest/i, category: '补全单元测试', recommendation: '建议在 SKILL.md 默认规则中强制附带测试用例' },
54
+ { keyword: /深色|暗黑|dark|night/i, category: '适配深色模式', recommendation: '建议在前端规范中增加 prefers-color-scheme 样式声明' },
55
+ { keyword: /注释|文档|说明|docstring|comment/i, category: '补充代码注释', recommendation: '建议在生成规则中设定关键函数 JSDoc/Docstring 约束' },
56
+ { keyword: /性能|优化|缓存|perf|cache/i, category: '性能优化要求', recommendation: '建议在实现规范中增加防抖/节流与索引设计准则' },
57
+ { keyword: /移动端|手机|响应式|mobile|responsive/i, category: '移动端响应式', recommendation: '建议在布局准则中加入 Flex/Grid 弹性断点规则' },
58
+ { keyword: /排版|换行|格式|美化|prett/i, category: '格式与排版微调', recommendation: '建议固化正文段落长度与空行缩进规范' },
59
+ ];
60
+ export function extractFollowUpModifier(text) {
61
+ if (!text || typeof text !== 'string')
62
+ return null;
63
+ for (const p of MODIFIER_PATTERNS) {
64
+ if (p.keyword.test(text)) {
65
+ return { category: p.category, recommendation: p.recommendation };
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ //# sourceMappingURL=governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/utils/governance.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,yBAAyB,CAAC,KAOzC;IACC,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,eAAe,EAAE,WAAW;YAC5B,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAChE,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACtE,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,uBAAuB;IACvB,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,uCAAuC;IACvC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IAE5C,2CAA2C;IAC3C,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;IAEzC,oCAAoC;IACpC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1C,IAAI,KAAK,GAAiC,GAAG,CAAC;IAC9C,IAAI,eAAe,GAAG,cAAc,CAAC;IAErC,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,KAAK,GAAG,IAAI,CAAC;QACb,eAAe,GAAG,cAAc,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;QACZ,eAAe,GAAG,cAAc,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;QACZ,eAAe,GAAG,WAAW,CAAC;IAChC,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;QACZ,eAAe,GAAG,cAAc,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;QACZ,eAAe,GAAG,aAAa,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAEvG,OAAO;QACL,KAAK;QACL,KAAK;QACL,eAAe;QACf,OAAO;KACR,CAAC;AACJ,CAAC;AAQD,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,EAAE,OAAO,EAAE,gCAAgC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,4BAA4B,EAAE;IAC/G,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,sCAAsC,EAAE;IAC5G,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,mCAAmC,EAAE;IACnH,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,wBAAwB,EAAE;IACjG,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,6BAA6B,EAAE;IAC/G,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,EAAE;CAC5F,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function calculateSavedHours(baselineMinutes?: number, executionTimeMs?: number): number;
2
+ export declare function formatWorkHours(hours: number): string;
3
+ //# sourceMappingURL=hours.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hours.d.ts","sourceRoot":"","sources":["../../src/utils/hours.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,eAAe,SAAK,EAAE,eAAe,SAAI,GAAG,MAAM,CAIrF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOrD"}
@@ -0,0 +1,15 @@
1
+ export function calculateSavedHours(baselineMinutes = 15, executionTimeMs = 0) {
2
+ const actualMinutes = executionTimeMs / 60000;
3
+ const savedMinutes = Math.max(0, baselineMinutes - actualMinutes);
4
+ return Math.round((savedMinutes / 60) * 100) / 100;
5
+ }
6
+ export function formatWorkHours(hours) {
7
+ if (hours <= 0)
8
+ return '0 分钟';
9
+ if (hours < 1) {
10
+ const mins = Math.max(1, Math.round(hours * 60));
11
+ return `${mins} 分钟`;
12
+ }
13
+ return `${hours.toFixed(1)} 小时`;
14
+ }
15
+ //# sourceMappingURL=hours.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hours.js","sourceRoot":"","sources":["../../src/utils/hours.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,eAAe,GAAG,EAAE,EAAE,eAAe,GAAG,CAAC;IAC3E,MAAM,aAAa,GAAG,eAAe,GAAG,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,GAAG,IAAI,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface ModelPricing {
2
+ modelPattern: RegExp;
3
+ displayName: string;
4
+ usdPerMillionTokens: number;
5
+ cnyPerMillionTokens: number;
6
+ }
7
+ export declare const MODEL_PRICINGS: ModelPricing[];
8
+ export declare function resolveModelPricing(modelName?: string): {
9
+ displayName: string;
10
+ usdPerMillion: number;
11
+ cnyPerMillion: number;
12
+ };
13
+ export declare function calculateCost(tokens: number, modelName?: string): {
14
+ usd: number;
15
+ cny: number;
16
+ formattedUsd: string;
17
+ formattedCny: string;
18
+ };
19
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,EAAE,YAAY,EAoDxC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAwBA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAoBA"}