agent-nuvira 3.3.11 → 3.3.13
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 +32 -1
- package/dist/agents/agents/reasoner.d.ts.map +1 -1
- package/dist/agents/agents/reasoner.js +13 -0
- package/dist/agents/agents/reasoner.js.map +1 -1
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +56 -20
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/cli/chat.d.ts +36 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +456 -43
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +8 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +35 -4
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +14 -0
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/knowledge.d.ts +23 -0
- package/dist/cli/knowledge.d.ts.map +1 -0
- package/dist/cli/knowledge.js +132 -0
- package/dist/cli/knowledge.js.map +1 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +57 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/omniroute-control.d.ts +88 -0
- package/dist/cli/omniroute-control.d.ts.map +1 -0
- package/dist/cli/omniroute-control.js +179 -0
- package/dist/cli/omniroute-control.js.map +1 -0
- package/dist/cli/omniroute.d.ts +21 -0
- package/dist/cli/omniroute.d.ts.map +1 -0
- package/dist/cli/omniroute.js +67 -0
- package/dist/cli/omniroute.js.map +1 -0
- package/dist/cli/tool-install-prompt.d.ts +58 -0
- package/dist/cli/tool-install-prompt.d.ts.map +1 -1
- package/dist/cli/tool-install-prompt.js +137 -0
- package/dist/cli/tool-install-prompt.js.map +1 -1
- package/dist/cli/weak-model-prompt.d.ts +16 -7
- package/dist/cli/weak-model-prompt.d.ts.map +1 -1
- package/dist/cli/weak-model-prompt.js +24 -8
- package/dist/cli/weak-model-prompt.js.map +1 -1
- package/dist/config/types.d.ts +44 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/cache.d.ts +35 -1
- package/dist/context/cache.d.ts.map +1 -1
- package/dist/context/cache.js +31 -2
- package/dist/context/cache.js.map +1 -1
- package/dist/context/history.d.ts +21 -0
- package/dist/context/history.d.ts.map +1 -1
- package/dist/context/history.js +50 -0
- package/dist/context/history.js.map +1 -1
- package/dist/gateway/hook-contract.d.ts +173 -0
- package/dist/gateway/hook-contract.d.ts.map +1 -0
- package/dist/gateway/hook-contract.js +352 -0
- package/dist/gateway/hook-contract.js.map +1 -0
- package/dist/gateway/hooks.d.ts.map +1 -1
- package/dist/gateway/hooks.js +14 -0
- package/dist/gateway/hooks.js.map +1 -1
- package/dist/inference/interface.d.ts +17 -0
- package/dist/inference/interface.d.ts.map +1 -1
- package/dist/inference/model-catalog.d.ts +17 -0
- package/dist/inference/model-catalog.d.ts.map +1 -1
- package/dist/inference/model-catalog.js +42 -7
- package/dist/inference/model-catalog.js.map +1 -1
- package/dist/inference/model-id-validation.d.ts +57 -0
- package/dist/inference/model-id-validation.d.ts.map +1 -0
- package/dist/inference/model-id-validation.js +127 -0
- package/dist/inference/model-id-validation.js.map +1 -0
- package/dist/inference/openai-compat-adapter.d.ts.map +1 -1
- package/dist/inference/openai-compat-adapter.js +12 -1
- package/dist/inference/openai-compat-adapter.js.map +1 -1
- package/dist/inference/provider-catalog.d.ts +11 -0
- package/dist/inference/provider-catalog.d.ts.map +1 -1
- package/dist/inference/provider-catalog.js +80 -0
- package/dist/inference/provider-catalog.js.map +1 -1
- package/dist/inference/route-resolver.d.ts +2 -8
- package/dist/inference/route-resolver.d.ts.map +1 -1
- package/dist/inference/route-resolver.js +17 -0
- package/dist/inference/route-resolver.js.map +1 -1
- package/dist/inference/tool-call-utils.d.ts +4 -3
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +26 -12
- package/dist/inference/tool-call-utils.js.map +1 -1
- package/dist/inference/tools.d.ts +1 -0
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +20 -3
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/agentic-route-gate.d.ts +104 -0
- package/dist/learning/agentic-route-gate.d.ts.map +1 -0
- package/dist/learning/agentic-route-gate.js +125 -0
- package/dist/learning/agentic-route-gate.js.map +1 -0
- package/dist/learning/auto-router.d.ts +89 -0
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +188 -8
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/build-prerequisites.d.ts +68 -0
- package/dist/learning/build-prerequisites.d.ts.map +1 -0
- package/dist/learning/build-prerequisites.js +267 -0
- package/dist/learning/build-prerequisites.js.map +1 -0
- package/dist/learning/continuation-intent.d.ts +43 -0
- package/dist/learning/continuation-intent.d.ts.map +1 -0
- package/dist/learning/continuation-intent.js +82 -0
- package/dist/learning/continuation-intent.js.map +1 -0
- package/dist/learning/error-repair.d.ts +23 -1
- package/dist/learning/error-repair.d.ts.map +1 -1
- package/dist/learning/error-repair.js +58 -0
- package/dist/learning/error-repair.js.map +1 -1
- package/dist/learning/knowledge-base.d.ts +124 -0
- package/dist/learning/knowledge-base.d.ts.map +1 -0
- package/dist/learning/knowledge-base.js +337 -0
- package/dist/learning/knowledge-base.js.map +1 -0
- package/dist/learning/model-harness.d.ts +19 -0
- package/dist/learning/model-harness.d.ts.map +1 -1
- package/dist/learning/model-harness.js +27 -0
- package/dist/learning/model-harness.js.map +1 -1
- package/dist/learning/model-selection.d.ts +2 -1
- package/dist/learning/model-selection.d.ts.map +1 -1
- package/dist/learning/model-selection.js +35 -2
- package/dist/learning/model-selection.js.map +1 -1
- package/dist/learning/project-docs.d.ts +83 -0
- package/dist/learning/project-docs.d.ts.map +1 -0
- package/dist/learning/project-docs.js +132 -0
- package/dist/learning/project-docs.js.map +1 -0
- package/dist/learning/prompt-budget.d.ts +91 -0
- package/dist/learning/prompt-budget.d.ts.map +1 -0
- package/dist/learning/prompt-budget.js +99 -0
- package/dist/learning/prompt-budget.js.map +1 -0
- package/dist/learning/quota-ledger.d.ts +13 -0
- package/dist/learning/quota-ledger.d.ts.map +1 -1
- package/dist/learning/quota-ledger.js +28 -0
- package/dist/learning/quota-ledger.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +55 -2
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +48 -0
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +16 -3
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/routing-history.d.ts +13 -0
- package/dist/learning/routing-history.d.ts.map +1 -1
- package/dist/learning/routing-history.js.map +1 -1
- package/dist/learning/seeded-benchmark.d.ts +14 -0
- package/dist/learning/seeded-benchmark.d.ts.map +1 -1
- package/dist/learning/seeded-benchmark.js +43 -4
- package/dist/learning/seeded-benchmark.js.map +1 -1
- package/dist/learning/turn-report.d.ts +78 -0
- package/dist/learning/turn-report.d.ts.map +1 -0
- package/dist/learning/turn-report.js +140 -0
- package/dist/learning/turn-report.js.map +1 -0
- package/dist/security/secret-scan.d.ts +156 -0
- package/dist/security/secret-scan.d.ts.map +1 -0
- package/dist/security/secret-scan.js +525 -0
- package/dist/security/secret-scan.js.map +1 -0
- package/dist/tools/edit-verification.d.ts +2 -11
- package/dist/tools/edit-verification.d.ts.map +1 -1
- package/dist/tools/edit-verification.js +33 -1
- package/dist/tools/edit-verification.js.map +1 -1
- package/dist/tools/loop-skill-hint.d.ts +51 -0
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +87 -2
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/plan-store.d.ts +126 -3
- package/dist/tools/plan-store.d.ts.map +1 -1
- package/dist/tools/plan-store.js +290 -6
- package/dist/tools/plan-store.js.map +1 -1
- package/dist/tools/registry.d.ts +20 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +165 -4
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/remediation-ladder.d.ts +91 -0
- package/dist/tools/remediation-ladder.d.ts.map +1 -0
- package/dist/tools/remediation-ladder.js +308 -0
- package/dist/tools/remediation-ladder.js.map +1 -0
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +60 -2
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/skills-hub.d.ts +7 -0
- package/dist/tools/skills-hub.d.ts.map +1 -1
- package/dist/tools/skills-hub.js +11 -2
- package/dist/tools/skills-hub.js.map +1 -1
- package/dist/tools/step-artifact.d.ts +35 -0
- package/dist/tools/step-artifact.d.ts.map +1 -0
- package/dist/tools/step-artifact.js +154 -0
- package/dist/tools/step-artifact.js.map +1 -0
- package/dist/tools/tool-loop.d.ts +35 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +284 -9
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/toolsets.js +4 -4
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/worktree.d.ts +11 -2
- package/dist/tools/worktree.d.ts.map +1 -1
- package/dist/tools/worktree.js +11 -2
- package/dist/tools/worktree.js.map +1 -1
- package/dist/utils/effect-verification.js +1 -1
- package/dist/utils/effect-verification.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +21 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +33 -5
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +29 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +410 -5
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +137 -0
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +7 -0
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.js +70 -0
- package/dist/web-dashboard/workspace-guard.js.map +1 -1
- package/package.json +4 -1
- package/src/web-dashboard/public/assets/index-DhiuR4S2.js +210 -0
- package/src/web-dashboard/public/assets/index-DhiuR4S2.js.map +1 -0
- package/src/web-dashboard/public/assets/index-tK8Y2qHB.css +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-BdKf5Xw2.js +0 -207
- package/src/web-dashboard/public/assets/index-BdKf5Xw2.js.map +0 -1
- package/src/web-dashboard/public/assets/index-C9eBskc9.css +0 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook contract (`src/gateway/hook-contract.ts`).
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS. Third-party plugins in the Claude Code ecosystem assume a
|
|
5
|
+
* hook contract (`SessionStart`, `PreToolUse`, …) that runs THEIR code. nuvira
|
|
6
|
+
* deliberately has no remote-code hook API — that is a remote-execution surface
|
|
7
|
+
* (see `docs/DESIGN-skill-plugin-ecosystem.md` §5.2/§6). But the *value* people
|
|
8
|
+
* want from hooks is real, and nuvira already fires four lifecycle seams
|
|
9
|
+
* internally (`src/gateway/hooks.ts`). This module is the missing half: a
|
|
10
|
+
* DECLARATIVE contract an operator can write from the dashboard, bound to those
|
|
11
|
+
* existing seams, with a fixed allow-list of native actions.
|
|
12
|
+
*
|
|
13
|
+
* POSITIONING — what a hook IS and IS NOT here:
|
|
14
|
+
* - A hook is a RULE: "when <event> matches <when>, do <action>". Data, not code.
|
|
15
|
+
* - The action set is a fixed allow-list enforced natively by nuvira
|
|
16
|
+
* ({@link HookActionKind}). There is deliberately no `run-command`, no
|
|
17
|
+
* `script`, no `mcp`. A hook can DENY a tool call, NOTIFY, or SCAN the call's
|
|
18
|
+
* arguments for secret shapes — nothing else.
|
|
19
|
+
* - Therefore installing a hook can never execute third-party code, and the
|
|
20
|
+
* worst a rogue declaration can do is block a call or log a line. That is
|
|
21
|
+
* the whole reason this is safe to expose to an operator.
|
|
22
|
+
*
|
|
23
|
+
* HOW IT WORKS (the four seams are defined in hooks.ts; this module binds to them):
|
|
24
|
+
* before_tool_call → can `deny` (veto) or `notify` or `scan-args` (+deny-on-hit)
|
|
25
|
+
* after_tool_call → `notify` or `scan-args` on the result
|
|
26
|
+
* failed_tool_call → `notify` on the failure
|
|
27
|
+
* on_session_end → `notify` with the run's summary
|
|
28
|
+
*
|
|
29
|
+
* Declarations persist as JSON at `<config-dir>/hooks.json` and are reloaded in
|
|
30
|
+
* memory on every save, so a dashboard edit takes effect without a restart. One
|
|
31
|
+
* handler per event is registered on the shared registry; it reads the current
|
|
32
|
+
* declarations on each call. Enforcement FAILS OPEN exactly like the underlying
|
|
33
|
+
* registry: a broken declaration is reported, never fatal.
|
|
34
|
+
*/
|
|
35
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
36
|
+
import { dirname, join } from 'node:path';
|
|
37
|
+
import { z } from 'zod';
|
|
38
|
+
import { resolveBuffConfigDir } from '../config/paths.js';
|
|
39
|
+
import { logger } from '../utils/logger.js';
|
|
40
|
+
import { scanText } from '../security/secret-scan.js';
|
|
41
|
+
// ─── The allow-list ─────────────────────────────────────────────────────────
|
|
42
|
+
/** The four lifecycle seams, in the order the runtime fires them. */
|
|
43
|
+
export const HOOK_EVENTS = [
|
|
44
|
+
'before_tool_call',
|
|
45
|
+
'after_tool_call',
|
|
46
|
+
'failed_tool_call',
|
|
47
|
+
'on_session_end',
|
|
48
|
+
];
|
|
49
|
+
/** One human sentence per seam — shown verbatim in the dashboard. */
|
|
50
|
+
export const HOOK_EVENT_DESCRIPTIONS = {
|
|
51
|
+
before_tool_call: 'Runs BEFORE a tool call. The only seam that can DENY (stop) the call.',
|
|
52
|
+
after_tool_call: 'Runs after a tool call SUCCEEDS, with the result text and duration.',
|
|
53
|
+
failed_tool_call: 'Runs after a tool call FAILS (threw, or returned a failure), with the error.',
|
|
54
|
+
on_session_end: 'Runs when a pipeline run finishes, with its success flag and summary.',
|
|
55
|
+
};
|
|
56
|
+
export const HOOK_ACTION_KINDS = ['deny', 'notify', 'scan-args'];
|
|
57
|
+
export const HOOK_ACTION_DESCRIPTIONS = {
|
|
58
|
+
deny: 'Stop the tool call. Only available on before_tool_call.',
|
|
59
|
+
notify: 'Write a line to the log (with {tool} / {surface} / {event} interpolated).',
|
|
60
|
+
'scan-args': 'Scan the call arguments (or the tool result) for secret-shaped values.',
|
|
61
|
+
};
|
|
62
|
+
// ─── Validation ─────────────────────────────────────────────────────────────
|
|
63
|
+
const ID_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
64
|
+
const matcherSchema = z
|
|
65
|
+
.object({
|
|
66
|
+
tool: z.string().max(120).optional(),
|
|
67
|
+
surface: z.string().max(120).optional(),
|
|
68
|
+
cwdPrefix: z.string().max(512).optional(),
|
|
69
|
+
argsMatch: z.record(z.string(), z.string().max(200)).optional(),
|
|
70
|
+
})
|
|
71
|
+
.strict();
|
|
72
|
+
const actionSchema = z.discriminatedUnion('kind', [
|
|
73
|
+
z.object({ kind: z.literal('deny'), reason: z.string().max(500).optional() }).strict(),
|
|
74
|
+
z.object({ kind: z.literal('notify'), message: z.string().min(1).max(500) }).strict(),
|
|
75
|
+
z.object({
|
|
76
|
+
kind: z.literal('scan-args'),
|
|
77
|
+
denyOnHit: z.boolean().optional(),
|
|
78
|
+
reason: z.string().max(500).optional(),
|
|
79
|
+
}).strict(),
|
|
80
|
+
]);
|
|
81
|
+
const declarationSchema = z
|
|
82
|
+
.object({
|
|
83
|
+
id: z.string().regex(ID_RE, 'id must be lowercase letters, digits and hyphens (e.g. "block-rm-rf")'),
|
|
84
|
+
label: z.string().min(1).max(120),
|
|
85
|
+
event: z.enum(['before_tool_call', 'after_tool_call', 'failed_tool_call', 'on_session_end']),
|
|
86
|
+
enabled: z.boolean(),
|
|
87
|
+
when: matcherSchema.optional(),
|
|
88
|
+
action: actionSchema,
|
|
89
|
+
source: z.enum(['user', 'builtin']).optional(),
|
|
90
|
+
updatedAt: z.number().optional(),
|
|
91
|
+
})
|
|
92
|
+
.strict();
|
|
93
|
+
/**
|
|
94
|
+
* Validate one declaration.
|
|
95
|
+
*
|
|
96
|
+
* Beyond field shapes this enforces the two cross-field rules of the contract,
|
|
97
|
+
* because both would otherwise be silent no-ops:
|
|
98
|
+
* - `deny` is only meaningful on `before_tool_call` (the other seams cannot
|
|
99
|
+
* stop anything), so it is rejected elsewhere rather than ignored;
|
|
100
|
+
* - `scan-args` is about a tool call, so it is rejected on `on_session_end`.
|
|
101
|
+
*/
|
|
102
|
+
export function validateHookDeclaration(value) {
|
|
103
|
+
const parsed = declarationSchema.safeParse(value);
|
|
104
|
+
if (!parsed.success) {
|
|
105
|
+
return { ok: false, error: parsed.error.issues.map((i) => `${i.path.join('.') || 'hook'}: ${i.message}`).join('; ') };
|
|
106
|
+
}
|
|
107
|
+
const hook = parsed.data;
|
|
108
|
+
if (hook.action.kind === 'deny' && hook.event !== 'before_tool_call') {
|
|
109
|
+
return { ok: false, error: `"${hook.id}": deny is only available on before_tool_call (${hook.event} cannot stop a call).` };
|
|
110
|
+
}
|
|
111
|
+
if (hook.action.kind === 'scan-args' && hook.event === 'on_session_end') {
|
|
112
|
+
return { ok: false, error: `"${hook.id}": scan-args needs a tool call, not on_session_end.` };
|
|
113
|
+
}
|
|
114
|
+
return { ok: true, hook };
|
|
115
|
+
}
|
|
116
|
+
/** Validate a whole list, catching duplicate ids. */
|
|
117
|
+
export function validateHookDeclarations(value) {
|
|
118
|
+
if (!Array.isArray(value))
|
|
119
|
+
return { ok: false, error: 'hooks must be an array.' };
|
|
120
|
+
const out = [];
|
|
121
|
+
const seen = new Set();
|
|
122
|
+
for (const item of value) {
|
|
123
|
+
const res = validateHookDeclaration(item);
|
|
124
|
+
if (!res.ok)
|
|
125
|
+
return { ok: false, error: res.error };
|
|
126
|
+
if (seen.has(res.hook.id))
|
|
127
|
+
return { ok: false, error: `duplicate hook id: "${res.hook.id}".` };
|
|
128
|
+
seen.add(res.hook.id);
|
|
129
|
+
out.push(res.hook);
|
|
130
|
+
}
|
|
131
|
+
return { ok: true, declarations: out };
|
|
132
|
+
}
|
|
133
|
+
// ─── Matching ───────────────────────────────────────────────────────────────
|
|
134
|
+
/** Compile a glob (`*` only) to a case-insensitive anchored regex. */
|
|
135
|
+
export function globToRegExp(glob) {
|
|
136
|
+
const escaped = glob.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\\\*/g, '.*');
|
|
137
|
+
return new RegExp(`^${escaped}$`, 'i');
|
|
138
|
+
}
|
|
139
|
+
/** True when `glob` matches `value` (missing value only matches a bare `*`). */
|
|
140
|
+
export function globMatches(glob, value) {
|
|
141
|
+
if (value === undefined || value === '')
|
|
142
|
+
return glob === '*';
|
|
143
|
+
return globToRegExp(glob).test(value);
|
|
144
|
+
}
|
|
145
|
+
function stringifyArg(value) {
|
|
146
|
+
if (value === undefined || value === null)
|
|
147
|
+
return '';
|
|
148
|
+
if (typeof value === 'string')
|
|
149
|
+
return value;
|
|
150
|
+
try {
|
|
151
|
+
return JSON.stringify(value) ?? '';
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return String(value);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Does this declaration's `when` match the call context? A context is `any`
|
|
159
|
+
* because the four seams carry different fields; only the fields a matcher
|
|
160
|
+
* names are read, which keeps the predicate identical across seams.
|
|
161
|
+
*/
|
|
162
|
+
export function matchesHookDeclaration(hook, ctx) {
|
|
163
|
+
const when = hook.when;
|
|
164
|
+
if (!when)
|
|
165
|
+
return true;
|
|
166
|
+
if (when.tool !== undefined && !globMatches(when.tool, typeof ctx?.tool === 'string' ? ctx.tool : ''))
|
|
167
|
+
return false;
|
|
168
|
+
if (when.surface !== undefined && !globMatches(when.surface, typeof ctx?.surface === 'string' ? ctx.surface : ''))
|
|
169
|
+
return false;
|
|
170
|
+
if (when.cwdPrefix !== undefined) {
|
|
171
|
+
const cwd = typeof ctx?.cwd === 'string' ? ctx.cwd : '';
|
|
172
|
+
if (!cwd.startsWith(when.cwdPrefix))
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
if (when.argsMatch) {
|
|
176
|
+
for (const [key, glob] of Object.entries(when.argsMatch)) {
|
|
177
|
+
const arg = ctx?.args && typeof ctx.args === 'object' ? ctx.args[key] : undefined;
|
|
178
|
+
if (!globMatches(glob, stringifyArg(arg)))
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
// ─── Evaluation (the native action implementations) ─────────────────────────
|
|
185
|
+
function interpolate(template, hook, ctx) {
|
|
186
|
+
return template
|
|
187
|
+
.replace(/\{tool\}/g, typeof ctx?.tool === 'string' ? ctx.tool : '')
|
|
188
|
+
.replace(/\{surface\}/g, typeof ctx?.surface === 'string' ? ctx.surface : '')
|
|
189
|
+
.replace(/\{event\}/g, hook.event);
|
|
190
|
+
}
|
|
191
|
+
/** Scan a text blob for secret shapes; returns a human count summary or null. */
|
|
192
|
+
function scanForSecrets(hook, text) {
|
|
193
|
+
if (!text)
|
|
194
|
+
return null;
|
|
195
|
+
try {
|
|
196
|
+
const hits = scanText(text, `hook:${hook.id}`);
|
|
197
|
+
if (hits.length === 0)
|
|
198
|
+
return null;
|
|
199
|
+
const kinds = [...new Set(hits.map((h) => h.label))].join(', ');
|
|
200
|
+
return `${hits.length} secret-shaped value(s) (${kinds}) — values masked.`;
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Apply one declaration's action to a context.
|
|
208
|
+
*
|
|
209
|
+
* Returns a {@link HookDecision} only when the action is a `deny` (or a
|
|
210
|
+
* `scan-args` hit with `denyOnHit` on `before_tool_call`). Every other action
|
|
211
|
+
* is a side effect (a log line, a `report` note) and returns null, so the
|
|
212
|
+
* registry's "first denial wins" rule is preserved exactly.
|
|
213
|
+
*/
|
|
214
|
+
export function applyHookDeclaration(hook, ctx) {
|
|
215
|
+
if (!hook.enabled)
|
|
216
|
+
return null;
|
|
217
|
+
if (!matchesHookDeclaration(hook, ctx))
|
|
218
|
+
return null;
|
|
219
|
+
switch (hook.action.kind) {
|
|
220
|
+
case 'notify': {
|
|
221
|
+
const message = interpolate(hook.action.message, hook, ctx);
|
|
222
|
+
logger.info(`hook '${hook.id}': ${message}`);
|
|
223
|
+
ctx?.report?.(`hook '${hook.id}': ${message}`);
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
case 'deny': {
|
|
227
|
+
const reason = hook.action.reason ? interpolate(hook.action.reason, hook, ctx) : undefined;
|
|
228
|
+
return { deny: true, reason: reason ?? `blocked by hook '${hook.id}'`, by: `hook:${hook.id}` };
|
|
229
|
+
}
|
|
230
|
+
case 'scan-args': {
|
|
231
|
+
// Scan the arguments before a call, or the result after a call.
|
|
232
|
+
const payload = hook.event === 'before_tool_call'
|
|
233
|
+
? stringifyArg(ctx?.args)
|
|
234
|
+
: typeof ctx?.result === 'string'
|
|
235
|
+
? ctx.result
|
|
236
|
+
: stringifyArg(ctx?.args);
|
|
237
|
+
const summary = scanForSecrets(hook, payload);
|
|
238
|
+
if (!summary)
|
|
239
|
+
return null;
|
|
240
|
+
const message = `hook '${hook.id}': ${summary}`;
|
|
241
|
+
if (hook.action.denyOnHit && hook.event === 'before_tool_call') {
|
|
242
|
+
const reason = hook.action.reason ? interpolate(hook.action.reason, hook, ctx) : `${summary} — blocked before running.`;
|
|
243
|
+
return { deny: true, reason, by: `hook:${hook.id}` };
|
|
244
|
+
}
|
|
245
|
+
logger.warn(message);
|
|
246
|
+
ctx?.report?.(message);
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
default:
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** Evaluate every declaration for one event; returns the first denial or null. */
|
|
254
|
+
export function evaluateDeclarations(declarations, event, ctx) {
|
|
255
|
+
for (const hook of declarations) {
|
|
256
|
+
if (hook.event !== event)
|
|
257
|
+
continue;
|
|
258
|
+
const decision = applyHookDeclaration(hook, ctx);
|
|
259
|
+
if (decision)
|
|
260
|
+
return decision;
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
// ─── Persistence ────────────────────────────────────────────────────────────
|
|
265
|
+
/** `<config-dir>/hooks.json` (NUVIRA_CONFIG_DIR aware, like contacts.json). */
|
|
266
|
+
export function hookDeclarationsFile() {
|
|
267
|
+
return join(resolveBuffConfigDir(), 'hooks.json');
|
|
268
|
+
}
|
|
269
|
+
/** Read declarations from disk. Missing/corrupt → [] (never throws). */
|
|
270
|
+
export function readHookDeclarations() {
|
|
271
|
+
try {
|
|
272
|
+
const parsed = JSON.parse(readFileSync(hookDeclarationsFile(), 'utf-8'));
|
|
273
|
+
const validated = validateHookDeclarations(parsed.hooks ?? []);
|
|
274
|
+
return validated.ok ? validated.declarations : [];
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return [];
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/** Persist declarations (best-effort — a failed write never breaks the caller). */
|
|
281
|
+
export function writeHookDeclarations(declarations) {
|
|
282
|
+
try {
|
|
283
|
+
const file = hookDeclarationsFile();
|
|
284
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
285
|
+
writeFileSync(file, JSON.stringify({ version: 1, hooks: declarations }, null, 2), 'utf-8');
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
/* best-effort */
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// ─── In-memory registry (the runtime reads this) ────────────────────────────
|
|
292
|
+
let declarations = [];
|
|
293
|
+
let loadedOnce = false;
|
|
294
|
+
/** The declarations currently in force (loads from disk on first use). */
|
|
295
|
+
export function getHookDeclarations() {
|
|
296
|
+
if (!loadedOnce) {
|
|
297
|
+
declarations = readHookDeclarations();
|
|
298
|
+
loadedOnce = true;
|
|
299
|
+
}
|
|
300
|
+
return declarations;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Replace the in-force declarations. Validates first; on success persists and
|
|
304
|
+
* swaps the in-memory list (so the next tool call sees the change). Returns the
|
|
305
|
+
* validation error unchanged on failure — never a silent partial save.
|
|
306
|
+
*/
|
|
307
|
+
export function setHookDeclarations(next) {
|
|
308
|
+
const validated = validateHookDeclarations(next);
|
|
309
|
+
if (!validated.ok)
|
|
310
|
+
return validated;
|
|
311
|
+
declarations = validated.declarations;
|
|
312
|
+
loadedOnce = true;
|
|
313
|
+
writeHookDeclarations(declarations);
|
|
314
|
+
return { ok: true, declarations };
|
|
315
|
+
}
|
|
316
|
+
/** Test/CLI helper: drop the cache so the next read hits disk. */
|
|
317
|
+
export function resetHookDeclarationsCache() {
|
|
318
|
+
declarations = [];
|
|
319
|
+
loadedOnce = false;
|
|
320
|
+
}
|
|
321
|
+
let installedOn = null;
|
|
322
|
+
/**
|
|
323
|
+
* Register one handler per seam on `registrar`. Idempotent per registrar
|
|
324
|
+
* instance, so importing the gateway more than once cannot double-fire hooks.
|
|
325
|
+
*
|
|
326
|
+
* Each handler reads {@link getHookDeclarations} at call time, so an edit from
|
|
327
|
+
* the dashboard is live on the next call without re-registering.
|
|
328
|
+
*/
|
|
329
|
+
export function installDeclaredHooks(registrar) {
|
|
330
|
+
if (installedOn === registrar)
|
|
331
|
+
return;
|
|
332
|
+
installedOn = registrar;
|
|
333
|
+
getHookDeclarations(); // warm from disk
|
|
334
|
+
registrar.register('before_tool_call', (ctx) => evaluateDeclarations(getHookDeclarations(), 'before_tool_call', ctx) ?? undefined);
|
|
335
|
+
registrar.register('after_tool_call', (ctx) => {
|
|
336
|
+
evaluateDeclarations(getHookDeclarations(), 'after_tool_call', ctx);
|
|
337
|
+
return undefined;
|
|
338
|
+
});
|
|
339
|
+
registrar.register('failed_tool_call', (ctx) => {
|
|
340
|
+
evaluateDeclarations(getHookDeclarations(), 'failed_tool_call', ctx);
|
|
341
|
+
return undefined;
|
|
342
|
+
});
|
|
343
|
+
registrar.register('on_session_end', (ctx) => {
|
|
344
|
+
evaluateDeclarations(getHookDeclarations(), 'on_session_end', ctx);
|
|
345
|
+
return undefined;
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
/** Test helper: forget which registrar was installed. */
|
|
349
|
+
export function resetDeclaredHooksInstall() {
|
|
350
|
+
installedOn = null;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=hook-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-contract.js","sourceRoot":"","sources":["../../src/gateway/hook-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/gateway/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/gateway/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/hooks.js
CHANGED
|
@@ -29,6 +29,10 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { logger } from '../utils/logger.js';
|
|
31
31
|
import { getEventBus, EventNames } from '../observability/event-bus.js';
|
|
32
|
+
// The declarative contract (operator-authored rules) binds to this registry.
|
|
33
|
+
// Import direction is one-way: hook-contract.ts imports only TYPES from here,
|
|
34
|
+
// so there is no runtime cycle.
|
|
35
|
+
import { installDeclaredHooks } from './hook-contract.js';
|
|
32
36
|
// ─── Registry ───────────────────────────────────────────────────────────────
|
|
33
37
|
class HookRegistry {
|
|
34
38
|
handlers = new Map();
|
|
@@ -148,4 +152,14 @@ export function registerBuiltinHooks() {
|
|
|
148
152
|
}
|
|
149
153
|
// Install the builtin once (idempotent — register() dedupes by function ref).
|
|
150
154
|
registerBuiltinHooks();
|
|
155
|
+
// Install the operator-authored declarative hooks (src/gateway/hook-contract.ts).
|
|
156
|
+
// They are rules, not code: the allow-list is deny / notify / scan-args, all
|
|
157
|
+
// implemented natively, so loading them can never execute third-party code.
|
|
158
|
+
// Best-effort — a failure here must never stop the process from starting.
|
|
159
|
+
try {
|
|
160
|
+
installDeclaredHooks(hooks);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
logger.debug(`hook contract install skipped: ${err instanceof Error ? err.message : err}`);
|
|
164
|
+
}
|
|
151
165
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/gateway/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/gateway/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,17 @@ export interface ToolMessage {
|
|
|
38
38
|
toolCalls?: ToolCallRequest[];
|
|
39
39
|
/** Tool only — the id of the tool call being answered. */
|
|
40
40
|
toolCallId?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Assistant only — the model's `reasoning_content` for this turn, when it
|
|
43
|
+
* produced one. Some thinking models (DeepSeek's v4 reasoning models, reached
|
|
44
|
+
* directly or through a gateway such as OmniRoute) REQUIRE their prior
|
|
45
|
+
* reasoning to be sent back with the assistant message that carried the tool
|
|
46
|
+
* calls; omitting it fails the whole conversation with
|
|
47
|
+
* `400: The reasoning_content in the thinking mode must be passed back to the API`.
|
|
48
|
+
* Echoed verbatim by {@link buildWireMessages}; harmless to models that
|
|
49
|
+
* ignore it.
|
|
50
|
+
*/
|
|
51
|
+
reasoningContent?: string;
|
|
41
52
|
}
|
|
42
53
|
/** A tool call in the assistant message (wire form: arguments is a JSON string). */
|
|
43
54
|
export interface ToolCallRequest {
|
|
@@ -77,6 +88,12 @@ export interface ToolCallResponse {
|
|
|
77
88
|
content: string;
|
|
78
89
|
/** Parsed tool calls (empty = end turn). */
|
|
79
90
|
toolCalls: ToolCall[];
|
|
91
|
+
/**
|
|
92
|
+
* The model's `reasoning_content` for this turn, when the endpoint returned
|
|
93
|
+
* one. Captured so the loop can attach it to the assistant message and the
|
|
94
|
+
* next request can replay it — see {@link ToolMessage.reasoningContent}.
|
|
95
|
+
*/
|
|
96
|
+
reasoningContent?: string;
|
|
80
97
|
}
|
|
81
98
|
/**
|
|
82
99
|
* Unified inference provider interface.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/inference/interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/inference/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,23 @@ export interface CategoryInfo {
|
|
|
22
22
|
* Ordered roughly by popularity / usefulness.
|
|
23
23
|
*/
|
|
24
24
|
export declare const CATEGORY_INFO: Record<ModelCategory, CategoryInfo>;
|
|
25
|
+
/**
|
|
26
|
+
* Model-id patterns that identify a REASONING/THINKING model — a cross-vendor
|
|
27
|
+
* capability, not one brand alias. DeepSeek (`-reasoner`, `-r1`, `-v2/v3/v4`),
|
|
28
|
+
* OpenAI's o-series (`o1`/`o3`/`o4-mini`), Qwen (`qwq`, `qwen3` thinking), Zhipu
|
|
29
|
+
* (`glm-z1`), Mistral (`magistral`), LG (`exaone-deep`), plus the generic
|
|
30
|
+
* `reasoning` / `reasoner` / `think(ing)` tokens any vendor uses.
|
|
31
|
+
*
|
|
32
|
+
* Single source of truth: shared by the category table below and
|
|
33
|
+
* `isReasoningModel()`, so a new family is taught once.
|
|
34
|
+
*/
|
|
35
|
+
export declare const REASONING_MODEL_PATTERNS: RegExp[];
|
|
36
|
+
/**
|
|
37
|
+
* True when the model id names a reasoning/thinking model (any vendor).
|
|
38
|
+
* Unknown ids are `false` — we only claim a capability we can positively
|
|
39
|
+
* identify from the id.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isReasoningModel(modelId: string): boolean;
|
|
25
42
|
/**
|
|
26
43
|
* Determine the category for a given model ID.
|
|
27
44
|
* Uses pattern matching against known model naming conventions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/inference/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,UAAU,GACV,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAyD7D,CAAC;
|
|
1
|
+
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/inference/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,UAAU,GACV,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAyD7D,CAAC;AAUF;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAU5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AA8HD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAuB/E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBvE;AA6BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsBvD;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjE"}
|
|
@@ -67,6 +67,37 @@ export const CATEGORY_INFO = {
|
|
|
67
67
|
description: 'Uncategorized models',
|
|
68
68
|
},
|
|
69
69
|
};
|
|
70
|
+
/**
|
|
71
|
+
* Model-id patterns that identify a REASONING/THINKING model — a cross-vendor
|
|
72
|
+
* capability, not one brand alias. DeepSeek (`-reasoner`, `-r1`, `-v2/v3/v4`),
|
|
73
|
+
* OpenAI's o-series (`o1`/`o3`/`o4-mini`), Qwen (`qwq`, `qwen3` thinking), Zhipu
|
|
74
|
+
* (`glm-z1`), Mistral (`magistral`), LG (`exaone-deep`), plus the generic
|
|
75
|
+
* `reasoning` / `reasoner` / `think(ing)` tokens any vendor uses.
|
|
76
|
+
*
|
|
77
|
+
* Single source of truth: shared by the category table below and
|
|
78
|
+
* `isReasoningModel()`, so a new family is taught once.
|
|
79
|
+
*/
|
|
80
|
+
export const REASONING_MODEL_PATTERNS = [
|
|
81
|
+
/qwen-2(?:\.5)?-(?:\d+)?b?(?:\d+)?-?(?:instruct|reasoning)?$/i,
|
|
82
|
+
/qwen-?3(?:\.\d+)?(?:[:@-](?:\d+)?b)?$/i,
|
|
83
|
+
/\bqwq\b/i,
|
|
84
|
+
/deepseek-r1/i,
|
|
85
|
+
/deepseek-(?:v[234]|reasoner)/i,
|
|
86
|
+
/(?:^|[-/_.])o[134](?:-(?:mini|preview|pro|high|low))?(?=$|[-/_.])/i,
|
|
87
|
+
/\b(?:glm-?z1|magistral|exaone-deep|reasoner)\b/i,
|
|
88
|
+
/reasoning/i,
|
|
89
|
+
/think(?:ing)?/i,
|
|
90
|
+
];
|
|
91
|
+
/**
|
|
92
|
+
* True when the model id names a reasoning/thinking model (any vendor).
|
|
93
|
+
* Unknown ids are `false` — we only claim a capability we can positively
|
|
94
|
+
* identify from the id.
|
|
95
|
+
*/
|
|
96
|
+
export function isReasoningModel(modelId) {
|
|
97
|
+
if (!modelId)
|
|
98
|
+
return false;
|
|
99
|
+
return REASONING_MODEL_PATTERNS.some((re) => re.test(modelId));
|
|
100
|
+
}
|
|
70
101
|
/**
|
|
71
102
|
* Ordered list of pattern matchers.
|
|
72
103
|
* Each entry has a list of regex patterns to test against the model ID,
|
|
@@ -80,14 +111,18 @@ const CATEGORY_PATTERNS = [
|
|
|
80
111
|
// ── Vision / Multimodal ────────────────────────────────────────────────
|
|
81
112
|
{ patterns: [/vision/i, /multimodal/i], category: 'vision', priority: 2 },
|
|
82
113
|
// ── Reasoning / Thinking ───────────────────────────────────────────────
|
|
114
|
+
// Capability families, NOT one brand alias. Reasoning/thinking is now a
|
|
115
|
+
// CROSS-VENDOR capability: DeepSeek (`-reasoner`, `-r1`, `-v2/v3/v4`),
|
|
116
|
+
// OpenAI's o-series (`o1`/`o3`/`o4-mini`), Qwen (`qwq`, `qwen3` thinking),
|
|
117
|
+
// Zhipu (`glm-z1`), Mistral (`magistral`), LG (`exaone-deep`), plus the
|
|
118
|
+
// generic `reasoning` / `reasoner` / `think(ing)` tokens any vendor uses.
|
|
119
|
+
// The old list keyed on `deepseek-r1`/`deepseek-v2|v3` alone, so the shipped
|
|
120
|
+
// `deepseek-reasoner` alias fell through to the broad chat catch-all (it is
|
|
121
|
+
// not a `-r1` and contains `reasoner`, not `reasoning`) and o-series ids were
|
|
122
|
+
// filed as `other`. Matching a *family* here lets the picker, the badges and
|
|
123
|
+
// any capability floor reason about reasoning uniformly. See `isReasoningModel`.
|
|
83
124
|
{
|
|
84
|
-
patterns:
|
|
85
|
-
/qwen-2(?:\.5)?-(?:\d+)?b?(?:\d+)?-?(?:instruct|reasoning)?$/i,
|
|
86
|
-
/deepseek-r1/i,
|
|
87
|
-
/deepseek-(?:v2|v3)/i,
|
|
88
|
-
/reasoning/i,
|
|
89
|
-
/think/i,
|
|
90
|
-
],
|
|
125
|
+
patterns: REASONING_MODEL_PATTERNS,
|
|
91
126
|
category: 'reasoning',
|
|
92
127
|
priority: 3,
|
|
93
128
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/inference/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAwC;IAChE,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,+CAA+C;KAC7D;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,mDAAmD;KACjE;IACD,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,0CAA0C;KACxD;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,mDAAmD;KACjE;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,mDAAmD;KACjE;IACD,MAAM,EAAE;QACN,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,0CAA0C;KACxD;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,gDAAgD;KAC9D;IACD,OAAO,EAAE;QACP,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,mDAAmD;KACjE;IACD,OAAO,EAAE;QACP,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,sDAAsD;KACpE;IACD,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,6DAA6D;KAC3E;IACD,KAAK,EAAE;QACL,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,sBAAsB;KACpC;CAEF,CAAC;AAUF;;;;;;GAMG;AACH,MAAM,iBAAiB,GAIlB;IACH,0EAA0E;IAC1E,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC5G,0EAA0E;IAC1E,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE;IACzE,0EAA0E;IAC1E;
|
|
1
|
+
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/inference/model-catalog.ts"],"names":[],"mappings":"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"}
|