@yuhere/js-jsonrpc2 2.1.8 → 2.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/SKILL.md +21 -3
- package/dist/core/Repository.d.ts +1 -1
- package/dist/core/Repository.d.ts.map +1 -1
- package/dist/core/Repository.js +3 -12
- package/dist/core/Repository.js.map +1 -1
- package/dist/core/llm-tools.d.ts +3 -2
- package/dist/core/llm-tools.d.ts.map +1 -1
- package/dist/core/llm-tools.js +43 -3
- package/dist/core/llm-tools.js.map +1 -1
- package/htdoc/assets/{index-BAZmvr5x.css → index-Ck-39Igh.css} +221 -0
- package/htdoc/assets/{index-sVQlhxjI.js → index-Cr0Jnrgb.js} +716 -35
- package/htdoc/assets/index-Cr0Jnrgb.js.map +1 -0
- package/htdoc/index.html +2 -2
- package/package.json +3 -3
- package/webui/src/App.tsx +101 -20
- package/webui/src/api/glob.ts +90 -0
- package/webui/src/api/metrics.ts +135 -0
- package/webui/src/api/paramForm.ts +4 -3
- package/webui/src/components/MetricsPanel.md +126 -0
- package/webui/src/components/MetricsPanel.tsx +290 -0
- package/webui/src/components/SchemaForm.tsx +29 -27
- package/webui/src/components/SchemaView.tsx +3 -3
- package/webui/src/hooks/useMetrics.ts +91 -0
- package/webui/src/styles/geek.css +221 -0
- package/htdoc/assets/index-sVQlhxjI.js.map +0 -1
package/README.md
CHANGED
|
@@ -105,7 +105,8 @@ s.string() // string
|
|
|
105
105
|
s.string().min(1).max(64) // length-constrained string
|
|
106
106
|
s.number() // finite number
|
|
107
107
|
s.boolean() // boolean
|
|
108
|
-
s.literal('2.0') // exact literal
|
|
108
|
+
s.literal('2.0') // exact literal (string | number | boolean only)
|
|
109
|
+
s.null() // exactly null
|
|
109
110
|
s.array(s.string()) // string[]
|
|
110
111
|
s.object({ id: s.number() }) // open object
|
|
111
112
|
s.object({ id: s.number() }).strict() // all props required, no extras
|
|
@@ -113,7 +114,7 @@ s.record(s.number()) // Record<string, number>
|
|
|
113
114
|
s.union([s.string(), s.number()])
|
|
114
115
|
s.tuple([s.string(), s.number()])
|
|
115
116
|
s.enum(['pending', 'success', 'failed'])
|
|
116
|
-
s.unknown() // any JSON value
|
|
117
|
+
s.unknown() // any JSON value (already includes null)
|
|
117
118
|
s.void() // RPC-only: no return value
|
|
118
119
|
s.injectable('request') // RPC-only: server-injected parameter
|
|
119
120
|
```
|
|
@@ -123,6 +124,13 @@ Chainable modifiers: `.min()`, `.max()`, `.nullable()`, `.strict()`,
|
|
|
123
124
|
`SchemaValidationError`) and `.safeParse(input)` (returns a result object).
|
|
124
125
|
Introspection: `.toJSON()` returns a `SchemaDescription`.
|
|
125
126
|
|
|
127
|
+
Nullability notes:
|
|
128
|
+
|
|
129
|
+
- `.nullable()` / `.nullable(true)` allow `null`; `.nullable(false)` clears it. All calls are immutable.
|
|
130
|
+
- `s.unknown()` and `s.null()` do not expose `.nullable()`; they already accept / are `null`.
|
|
131
|
+
- `s.literal(v)` accepts `string | number | boolean`. Use `s.null()` for exact null, or `.nullable()` for "literal or null".
|
|
132
|
+
- `s.union([...])` strips member-level nullability; only the union's own `.nullable()` decides whether `null` is accepted.
|
|
133
|
+
|
|
126
134
|
## Transports
|
|
127
135
|
|
|
128
136
|
### Express
|
package/SKILL.md
CHANGED
|
@@ -27,10 +27,16 @@ Hard constraints (by design, do not work around):
|
|
|
27
27
|
5. Write `handler` so its positional args match the non-injectable slots in order;
|
|
28
28
|
injectable slots are filled at their declared positions.
|
|
29
29
|
6. Use `s.*` factories for schemas: `s.string()`, `s.number()`, `s.boolean()`,
|
|
30
|
-
`s.literal(v)
|
|
31
|
-
`s.
|
|
32
|
-
|
|
30
|
+
`s.literal(v)` (`v` is `string | number | boolean` only), `s.null()`,
|
|
31
|
+
`s.array(item)`, `s.object(shape)`, `s.record(v)`, `s.union([...])`,
|
|
32
|
+
`s.tuple([...])`, `s.enum([...])`, `s.unknown()`.
|
|
33
|
+
7. Chain modifiers before registering: `.min()`, `.max()`, `.nullable(bool)`,
|
|
33
34
|
`.strict()`, `.describe(text)`.
|
|
35
|
+
8. Nullability rules:
|
|
36
|
+
- `.nullable()` / `.nullable(true)` allow `null`; `.nullable(false)` clears it. Calls are immutable.
|
|
37
|
+
- `s.unknown()` and `s.null()` already handle `null`; they do not expose `.nullable()`.
|
|
38
|
+
- `s.literal(v)` rejects `null`; use `s.null()` for exact null, `.nullable()` for "literal or null".
|
|
39
|
+
- `s.union([...])` strips member-level nullability at construction; use `s.union([...]).nullable()` to accept `null`.
|
|
34
40
|
|
|
35
41
|
```ts
|
|
36
42
|
import { createRepository, s } from '@yuhere/js-jsonrpc2';
|
|
@@ -235,3 +241,15 @@ so `system.methodHelp` returns useful text.
|
|
|
235
241
|
- **Treating a terminal `error` frame as a broken connection.** A mid-stream
|
|
236
242
|
throw is delivered as `{ done: true, error }`; the HTTP/WS/stdio response
|
|
237
243
|
itself ends cleanly. Only transport-level failures abort the connection.
|
|
244
|
+
- **Calling `.nullable()` on `s.unknown()` or `s.null()`.** Those schemas do not
|
|
245
|
+
extend `NullableSchema`; the call is a TypeScript error. Use `.nullable()` on
|
|
246
|
+
the concrete schema instead (e.g. `s.string().nullable()`), or `s.null()`
|
|
247
|
+
when the value must be exactly `null`.
|
|
248
|
+
- **Expecting member-level `.nullable()` inside a union to matter.**
|
|
249
|
+
`s.union([s.string().nullable(), s.number()])` is equivalent to
|
|
250
|
+
`s.union([s.string(), s.number()])` — members are cloned and set to
|
|
251
|
+
`nullable(false)` at construction. Put `.nullable()` on the union itself:
|
|
252
|
+
`s.union([s.string(), s.number()]).nullable()`.
|
|
253
|
+
- **Calling `s.literal(null)`.** `literal` only accepts `string | number |
|
|
254
|
+
boolean`; construction throws `TypeError`. Use `s.null()` for exact null, or
|
|
255
|
+
`.nullable()` for "literal or null".
|
|
@@ -9,7 +9,7 @@ export declare class Repository {
|
|
|
9
9
|
get(namespace: string): MethodDescriptor | undefined;
|
|
10
10
|
signatureOf(descriptor: MethodDescriptor): unknown[];
|
|
11
11
|
invoke(input: unknown, options?: InvokeOptions): Promise<RPCResponse>;
|
|
12
|
-
invokeLlmTool(call: LlmToolCall, injections: Injections): Promise<
|
|
12
|
+
invokeLlmTool(call: LlmToolCall, injections: Injections): Promise<unknown>;
|
|
13
13
|
listLlmTools(injections: Injections, rawOptions?: unknown): Promise<LlmTools>;
|
|
14
14
|
/**
|
|
15
15
|
* 把 handler 返回的 AsyncGenerator 包装成待消费的 chunk 流。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/core/Repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AASrD,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EAEV,WAAW,EAGX,aAAa,EACb,iBAAiB,EACjB,WAAW,EAAE,QAAQ,EAAE,UAAU,EAClC,MAAM,UAAU,CAAC;AAelB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAE/D,YAAY,OAAO,GAAE,iBAAsB,EAI1C;IAED,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAOxD;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED,IAAI,IAAI,MAAM,EAAE,CAEf;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEnD;IAED,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,EAAE,CAEnD;IAEK,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4C9E;IAEK,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/core/Repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AASrD,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EAEV,WAAW,EAGX,aAAa,EACb,iBAAiB,EACjB,WAAW,EAAE,QAAQ,EAAE,UAAU,EAClC,MAAM,UAAU,CAAC;AAelB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAE/D,YAAY,OAAO,GAAE,iBAAsB,EAI1C;IAED,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAOxD;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED,IAAI,IAAI,MAAM,EAAE,CAEf;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEnD;IAED,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,EAAE,CAEnD;IAEK,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4C9E;IAEK,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/E;IAEK,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAElF;IAED;;;;;OAKG;YACY,YAAY;IA+B3B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,OAAO;CAOhB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAE5E;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/core/Repository.js
CHANGED
|
@@ -5,7 +5,7 @@ import { convertParams } from './convert.js';
|
|
|
5
5
|
import { checkPermission } from './permission.js';
|
|
6
6
|
import { validateRequest } from './spec-check.js';
|
|
7
7
|
import { registerSystemMethods } from './system-methods.js';
|
|
8
|
-
import {
|
|
8
|
+
import { listLlmTools, invokeLlmTool } from './llm-tools.js';
|
|
9
9
|
import { registerSchema } from '../schema/z/register.js';
|
|
10
10
|
import { RPCVersion } from '../schema/z/protocol.js';
|
|
11
11
|
function formatRegisterIssues(error) {
|
|
@@ -96,19 +96,10 @@ export class Repository {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
async invokeLlmTool(call, injections) {
|
|
99
|
-
|
|
100
|
-
const args_len = Object.keys(args).length;
|
|
101
|
-
const params = [];
|
|
102
|
-
for (let i = 0; i < args_len; i++) {
|
|
103
|
-
const key = `param${i}`;
|
|
104
|
-
if (!(key in call.arguments))
|
|
105
|
-
throw new Error(`Missing tool argument: ${key}`);
|
|
106
|
-
params.push(call.arguments[key]);
|
|
107
|
-
}
|
|
108
|
-
return this.invoke({ jsonrpc: RPCVersion, method: name.replaceAll(/_/g, "."), params, id: `llm-${Date.now()}` }, { injections });
|
|
99
|
+
return invokeLlmTool(this, call, injections);
|
|
109
100
|
}
|
|
110
101
|
async listLlmTools(injections, rawOptions) {
|
|
111
|
-
return
|
|
102
|
+
return listLlmTools(this, injections, rawOptions);
|
|
112
103
|
}
|
|
113
104
|
/**
|
|
114
105
|
* 把 handler 返回的 AsyncGenerator 包装成待消费的 chunk 流。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.js","sourceRoot":"","sources":["../../src/core/Repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Repository.js","sourceRoot":"","sources":["../../src/core/Repository.ts"],"names":[],"mappings":"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"}
|
package/dist/core/llm-tools.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Repository } from './Repository.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { LlmToolCall, LlmTools, Injections } from '../types.js';
|
|
3
3
|
export interface JSONSchema {
|
|
4
4
|
type?: string | string[];
|
|
5
5
|
description?: string;
|
|
@@ -20,5 +20,6 @@ export interface JSONSchema {
|
|
|
20
20
|
anyOf?: JSONSchema[];
|
|
21
21
|
nullable?: boolean;
|
|
22
22
|
}
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function listLlmTools(repository: Repository, injections: Injections, rawOptions?: unknown): Promise<LlmTools>;
|
|
24
|
+
export declare function invokeLlmTool(repository: Repository, call: LlmToolCall, injections: Injections): Promise<unknown>;
|
|
24
25
|
//# sourceMappingURL=llm-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-tools.d.ts","sourceRoot":"","sources":["../../src/core/llm-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-tools.d.ts","sourceRoot":"","sources":["../../src/core/llm-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,KAAK,EAGR,WAAW,EAAE,QAAQ,EAAE,UAAU,EACpC,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,UAAU;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5C,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AA0GD,wBAAsB,YAAY,CAC9B,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,QAAQ,CAAC,CAiEnB;AAED,wBAAsB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CA2CvH"}
|
package/dist/core/llm-tools.js
CHANGED
|
@@ -2,6 +2,7 @@ import { RPCError } from '../errors/RPCError.js';
|
|
|
2
2
|
import { METHOD_NOT_FOUND } from '../errors/codes.js';
|
|
3
3
|
import { assertAccessible } from './permission.js';
|
|
4
4
|
import { InjectableMarker } from '../schema/json/index.js';
|
|
5
|
+
import { RPCVersion } from '../schema/z/protocol.js';
|
|
5
6
|
function schemaToJSONSchema(schema) {
|
|
6
7
|
return convert(schema.toJSON());
|
|
7
8
|
}
|
|
@@ -114,9 +115,9 @@ function convert(desc) {
|
|
|
114
115
|
}
|
|
115
116
|
return out;
|
|
116
117
|
}
|
|
117
|
-
export async function
|
|
118
|
+
export async function listLlmTools(repository, injections, rawOptions) {
|
|
118
119
|
const opts = (rawOptions ?? {});
|
|
119
|
-
const { includeStreaming = false,
|
|
120
|
+
const { includeStreaming = false, prefix } = opts;
|
|
120
121
|
const tools = [];
|
|
121
122
|
for (const name of repository.list()) {
|
|
122
123
|
if (prefix && !name.startsWith(prefix))
|
|
@@ -124,7 +125,6 @@ export async function generateLlmTools(repository, injections, rawOptions) {
|
|
|
124
125
|
const descriptor = repository.get(name);
|
|
125
126
|
if (!descriptor)
|
|
126
127
|
continue;
|
|
127
|
-
// const fname = name.replaceAll(/\./, '_');
|
|
128
128
|
// 权限过滤:不可见的方法直接跳过(与 listMethods 语义一致)
|
|
129
129
|
try {
|
|
130
130
|
await assertAccessible(descriptor, injections);
|
|
@@ -177,4 +177,44 @@ export async function generateLlmTools(repository, injections, rawOptions) {
|
|
|
177
177
|
}
|
|
178
178
|
return tools;
|
|
179
179
|
}
|
|
180
|
+
export async function invokeLlmTool(repository, call, injections) {
|
|
181
|
+
const { name, arguments: args } = call;
|
|
182
|
+
const args_len = Object.keys(args).length;
|
|
183
|
+
const params = [];
|
|
184
|
+
for (let i = 0; i < args_len; i++) {
|
|
185
|
+
const key = `param${i}`;
|
|
186
|
+
if (!(key in args))
|
|
187
|
+
throw new Error(`Missing tool argument: ${key}`);
|
|
188
|
+
params.push(args[key]);
|
|
189
|
+
}
|
|
190
|
+
//
|
|
191
|
+
const rpc_result = await repository.invoke({ jsonrpc: RPCVersion, method: name.replaceAll(/_/g, "."), params, id: `llm-${Date.now()}` }, { injections });
|
|
192
|
+
const rpc_failure = rpc_result;
|
|
193
|
+
if ("error" in rpc_failure) {
|
|
194
|
+
throw new Error(rpc_failure.error.code + ": " + rpc_failure.error.message);
|
|
195
|
+
}
|
|
196
|
+
const rpc_success = rpc_result;
|
|
197
|
+
if ("result" in rpc_success) {
|
|
198
|
+
return rpc_success.result;
|
|
199
|
+
}
|
|
200
|
+
// ############
|
|
201
|
+
const rpc_stream_success = rpc_result;
|
|
202
|
+
if ("chunks" in rpc_stream_success) {
|
|
203
|
+
return (async function* () {
|
|
204
|
+
for await (const chunk of rpc_stream_success.chunks) {
|
|
205
|
+
if ("error" in chunk) {
|
|
206
|
+
throw new Error(chunk.error.code + ": " + chunk.error.message);
|
|
207
|
+
}
|
|
208
|
+
const unpacked_chunk = {};
|
|
209
|
+
if ("index" in chunk) {
|
|
210
|
+
unpacked_chunk.index = chunk.index;
|
|
211
|
+
}
|
|
212
|
+
if ("value" in chunk) {
|
|
213
|
+
unpacked_chunk.value = chunk.value;
|
|
214
|
+
}
|
|
215
|
+
yield unpacked_chunk;
|
|
216
|
+
}
|
|
217
|
+
})();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
180
220
|
//# sourceMappingURL=llm-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-tools.js","sourceRoot":"","sources":["../../src/core/llm-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-tools.js","sourceRoot":"","sources":["../../src/core/llm-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
--syn-container: #7ee787;
|
|
26
26
|
--syn-object: #79c0ff;
|
|
27
27
|
--syn-union: #ffa657;
|
|
28
|
+
--syn-nullable: #ff79c6;
|
|
28
29
|
--syn-muted: #8b949e;
|
|
29
30
|
|
|
30
31
|
--mono: "JetBrains Mono", "Fira Code", Menlo, Consolas, "Courier New", monospace;
|
|
@@ -52,6 +53,7 @@
|
|
|
52
53
|
--syn-container: #116329;
|
|
53
54
|
--syn-object: #0969da;
|
|
54
55
|
--syn-union: #bc4c00;
|
|
56
|
+
--syn-nullable: #a626a4;
|
|
55
57
|
--syn-muted: #57606a;
|
|
56
58
|
}
|
|
57
59
|
|
|
@@ -391,6 +393,15 @@ textarea:focus {
|
|
|
391
393
|
color: var(--fg-dim);
|
|
392
394
|
}
|
|
393
395
|
|
|
396
|
+
.schema-nullable-badge {
|
|
397
|
+
color: var(--syn-nullable);
|
|
398
|
+
font-size: 90%;
|
|
399
|
+
font-weight: bold;
|
|
400
|
+
letter-spacing: .5px;
|
|
401
|
+
text-transform: lowercase;
|
|
402
|
+
opacity: .9;
|
|
403
|
+
}
|
|
404
|
+
|
|
394
405
|
.schema-constraints {
|
|
395
406
|
color: var(--syn-muted);
|
|
396
407
|
font-size: 90%;
|
|
@@ -458,6 +469,15 @@ textarea:focus {
|
|
|
458
469
|
color: var(--fg-dim);
|
|
459
470
|
}
|
|
460
471
|
|
|
472
|
+
.sf-nullable-badge {
|
|
473
|
+
color: var(--syn-nullable);
|
|
474
|
+
font-size: 90%;
|
|
475
|
+
font-weight: bold;
|
|
476
|
+
letter-spacing: .5px;
|
|
477
|
+
text-transform: lowercase;
|
|
478
|
+
opacity: .9;
|
|
479
|
+
}
|
|
480
|
+
|
|
461
481
|
.sf-desc {
|
|
462
482
|
color: var(--fg-dim);
|
|
463
483
|
font-style: italic;
|
|
@@ -739,4 +759,205 @@ textarea:focus {
|
|
|
739
759
|
|
|
740
760
|
.elapsed-badge .hint {
|
|
741
761
|
font-size: 11px;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
/* ================================================================
|
|
767
|
+
* Metrics 面板
|
|
768
|
+
* ================================================================ */
|
|
769
|
+
.metrics {
|
|
770
|
+
display: flex;
|
|
771
|
+
flex-direction: column;
|
|
772
|
+
gap: 16px;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
.metrics-header {
|
|
776
|
+
display: flex;
|
|
777
|
+
align-items: center;
|
|
778
|
+
justify-content: space-between;
|
|
779
|
+
gap: 12px;
|
|
780
|
+
flex-wrap: wrap;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.metrics-header h2 {
|
|
784
|
+
margin: 0;
|
|
785
|
+
color: var(--accent);
|
|
786
|
+
font-size: 16px;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.metrics-controls {
|
|
790
|
+
display: flex;
|
|
791
|
+
align-items: center;
|
|
792
|
+
gap: 10px;
|
|
793
|
+
flex-wrap: wrap;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
.metrics-auto {
|
|
797
|
+
display: inline-flex;
|
|
798
|
+
align-items: center;
|
|
799
|
+
gap: 4px;
|
|
800
|
+
font-size: 12px;
|
|
801
|
+
color: var(--fg-dim);
|
|
802
|
+
cursor: pointer;
|
|
803
|
+
user-select: none;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
.metrics-cards {
|
|
807
|
+
display: grid;
|
|
808
|
+
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
|
809
|
+
gap: 10px;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
.metric-card {
|
|
813
|
+
background: var(--bg-elev);
|
|
814
|
+
border: 1px solid var(--border);
|
|
815
|
+
border-radius: 4px;
|
|
816
|
+
padding: 10px 12px;
|
|
817
|
+
display: flex;
|
|
818
|
+
flex-direction: column;
|
|
819
|
+
gap: 4px;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
.metric-card-label {
|
|
823
|
+
font-size: 11px;
|
|
824
|
+
color: var(--fg-dim);
|
|
825
|
+
text-transform: uppercase;
|
|
826
|
+
letter-spacing: 1px;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
.metric-card-value {
|
|
830
|
+
font-size: 22px;
|
|
831
|
+
font-weight: bold;
|
|
832
|
+
color: var(--fg);
|
|
833
|
+
font-variant-numeric: tabular-nums;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
.metric-card-danger .metric-card-value {
|
|
837
|
+
color: var(--danger);
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
.metric-card-warn .metric-card-value {
|
|
841
|
+
color: var(--syn-number);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
.metrics-table {
|
|
845
|
+
width: 100%;
|
|
846
|
+
border-collapse: collapse;
|
|
847
|
+
font-size: 12px;
|
|
848
|
+
font-variant-numeric: tabular-nums;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
.metrics-table th,
|
|
852
|
+
.metrics-table td {
|
|
853
|
+
padding: 6px 8px;
|
|
854
|
+
border-bottom: 1px solid var(--border);
|
|
855
|
+
text-align: left;
|
|
856
|
+
white-space: nowrap;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
.metrics-table th {
|
|
860
|
+
color: var(--fg-dim);
|
|
861
|
+
font-weight: normal;
|
|
862
|
+
text-transform: uppercase;
|
|
863
|
+
letter-spacing: .5px;
|
|
864
|
+
font-size: 11px;
|
|
865
|
+
position: sticky;
|
|
866
|
+
top: 0;
|
|
867
|
+
background: var(--bg);
|
|
868
|
+
z-index: 1;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.metrics-table td.num,
|
|
872
|
+
.metrics-table th.num {
|
|
873
|
+
text-align: right;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
.metrics-table tr:hover td {
|
|
877
|
+
background: var(--hover-bg);
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
.metrics-table .method-name {
|
|
881
|
+
color: var(--accent);
|
|
882
|
+
font-family: var(--mono);
|
|
883
|
+
max-width: 260px;
|
|
884
|
+
overflow: hidden;
|
|
885
|
+
text-overflow: ellipsis;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
.metrics-table .error {
|
|
889
|
+
color: var(--danger);
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
.metrics-table .warn {
|
|
893
|
+
color: var(--syn-number);
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
.metrics-table .rate-hot {
|
|
897
|
+
color: var(--syn-boolean);
|
|
898
|
+
font-weight: bold;
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
.metrics-table .rate-warm {
|
|
902
|
+
color: var(--syn-number);
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.metrics-table .rate-cold {
|
|
906
|
+
color: var(--fg-dim);
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
.metrics-table.compact th,
|
|
910
|
+
.metrics-table.compact td {
|
|
911
|
+
padding: 3px 6px;
|
|
912
|
+
font-size: 11px;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
.view-switch {
|
|
916
|
+
margin-bottom: 8px;
|
|
917
|
+
width: 100%;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
.view-switch button {
|
|
921
|
+
flex: 1;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
/* ---- Metrics 侧边栏 ---- */
|
|
925
|
+
.metrics-sidebar {
|
|
926
|
+
display: flex;
|
|
927
|
+
flex-direction: column;
|
|
928
|
+
gap: 8px;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
.metrics-filter {
|
|
932
|
+
display: flex;
|
|
933
|
+
flex-direction: column;
|
|
934
|
+
gap: 4px;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
.metrics-filter-label {
|
|
938
|
+
font-size: 11px;
|
|
939
|
+
color: var(--fg-dim);
|
|
940
|
+
text-transform: uppercase;
|
|
941
|
+
letter-spacing: 1px;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
.metrics-filter-help {
|
|
945
|
+
font-size: 11px;
|
|
946
|
+
line-height: 1.5;
|
|
947
|
+
margin: 0;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.metrics-filter-help code {
|
|
951
|
+
background: var(--bg-deep);
|
|
952
|
+
border: 1px solid var(--border);
|
|
953
|
+
border-radius: 3px;
|
|
954
|
+
padding: 0 4px;
|
|
955
|
+
font-size: 11px;
|
|
956
|
+
color: var(--syn-literal);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
.metrics-filter-stat {
|
|
960
|
+
font-size: 11px;
|
|
961
|
+
margin: 4px 0 0;
|
|
962
|
+
color: var(--accent);
|
|
742
963
|
}
|