@a1hvdy/cc-openclaw 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/channels/telegram/event-reducer.js +3 -15
- package/dist/src/channels/telegram/event-reducer.js.map +1 -1
- package/dist/src/channels/telegram/format-helpers.d.ts +20 -0
- package/dist/src/channels/telegram/format-helpers.js +34 -0
- package/dist/src/channels/telegram/format-helpers.js.map +1 -0
- package/dist/src/channels/telegram/live-card.js +3 -21
- package/dist/src/channels/telegram/live-card.js.map +1 -1
- package/dist/src/channels/telegram/result-preview.d.ts +12 -0
- package/dist/src/channels/telegram/result-preview.js +48 -0
- package/dist/src/channels/telegram/result-preview.js.map +1 -0
- package/dist/src/channels/telegram/tool-tracker.d.ts +1 -2
- package/dist/src/channels/telegram/tool-tracker.js +6 -37
- package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
- package/dist/src/cli/checks/bridge-wiring.d.ts +14 -0
- package/dist/src/cli/checks/bridge-wiring.js +64 -0
- package/dist/src/cli/checks/bridge-wiring.js.map +1 -0
- package/dist/src/cli/checks/config-schema.d.ts +11 -0
- package/dist/src/cli/checks/config-schema.js +51 -0
- package/dist/src/cli/checks/config-schema.js.map +1 -0
- package/dist/src/cli/checks/critical-openclaw-json-keys.d.ts +21 -0
- package/dist/src/cli/checks/critical-openclaw-json-keys.js +106 -0
- package/dist/src/cli/checks/critical-openclaw-json-keys.js.map +1 -0
- package/dist/src/cli/checks/install-path.d.ts +11 -0
- package/dist/src/cli/checks/install-path.js +89 -0
- package/dist/src/cli/checks/install-path.js.map +1 -0
- package/dist/src/cli/checks/patch-scaffold.d.ts +17 -0
- package/dist/src/cli/checks/patch-scaffold.js +56 -0
- package/dist/src/cli/checks/patch-scaffold.js.map +1 -0
- package/dist/src/cli/doctor.d.ts +5 -9
- package/dist/src/cli/doctor.js +28 -129
- package/dist/src/cli/doctor.js.map +1 -1
- package/dist/src/cli/index.js +2 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/migrate.d.ts +29 -0
- package/dist/src/cli/migrate.js +75 -0
- package/dist/src/cli/migrate.js.map +1 -0
- package/dist/src/config/drift-detector.d.ts +28 -0
- package/dist/src/config/drift-detector.js +75 -0
- package/dist/src/config/drift-detector.js.map +1 -0
- package/dist/src/config/loader.d.ts +8 -0
- package/dist/src/config/loader.js +69 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/schema.d.ts +188 -0
- package/dist/src/config/schema.js +98 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/council/build-agent-prompt.d.ts +11 -0
- package/dist/src/council/build-agent-prompt.js +96 -0
- package/dist/src/council/build-agent-prompt.js.map +1 -0
- package/dist/src/council/cleanup-worktrees.d.ts +10 -0
- package/dist/src/council/cleanup-worktrees.js +22 -0
- package/dist/src/council/cleanup-worktrees.js.map +1 -0
- package/dist/src/council/council.js +15 -186
- package/dist/src/council/council.js.map +1 -1
- package/dist/src/council/system-prompt.d.ts +16 -0
- package/dist/src/council/system-prompt.js +40 -0
- package/dist/src/council/system-prompt.js.map +1 -0
- package/dist/src/council/write-worktree-claude-md.d.ts +10 -0
- package/dist/src/council/write-worktree-claude-md.js +41 -0
- package/dist/src/council/write-worktree-claude-md.js.map +1 -0
- package/dist/src/engines/persistent-custom-session.js +3 -8
- package/dist/src/engines/persistent-custom-session.js.map +1 -1
- package/dist/src/engines/resolve-bin.d.ts +14 -0
- package/dist/src/engines/resolve-bin.js +18 -0
- package/dist/src/engines/resolve-bin.js.map +1 -0
- package/dist/src/lib/config-service.js +8 -0
- package/dist/src/lib/config-service.js.map +1 -1
- package/dist/src/lib/debounce.d.ts +12 -0
- package/dist/src/lib/debounce.js +23 -0
- package/dist/src/lib/debounce.js.map +1 -0
- package/dist/src/lib/domain-error.d.ts +59 -0
- package/dist/src/lib/domain-error.js +79 -0
- package/dist/src/lib/domain-error.js.map +1 -0
- package/dist/src/lib/json-array.d.ts +10 -0
- package/dist/src/lib/json-array.js +23 -0
- package/dist/src/lib/json-array.js.map +1 -0
- package/dist/src/lib/safe-upstream-probes.d.ts +25 -0
- package/dist/src/lib/safe-upstream-probes.js +42 -0
- package/dist/src/lib/safe-upstream-probes.js.map +1 -0
- package/dist/src/lib/spawn-async.d.ts +18 -0
- package/dist/src/lib/spawn-async.js +47 -0
- package/dist/src/lib/spawn-async.js.map +1 -0
- package/dist/src/lib/stale-pid-files.d.ts +17 -0
- package/dist/src/lib/stale-pid-files.js +40 -0
- package/dist/src/lib/stale-pid-files.js.map +1 -0
- package/dist/src/lifecycle/boot.d.ts +59 -0
- package/dist/src/lifecycle/boot.js +132 -0
- package/dist/src/lifecycle/boot.js.map +1 -0
- package/dist/src/lifecycle/patch-manifest.d.ts +82 -0
- package/dist/src/lifecycle/patch-manifest.js +126 -0
- package/dist/src/lifecycle/patch-manifest.js.map +1 -0
- package/dist/src/lifecycle/phase-import-upstream.d.ts +12 -0
- package/dist/src/lifecycle/phase-import-upstream.js +18 -0
- package/dist/src/lifecycle/phase-import-upstream.js.map +1 -0
- package/dist/src/lifecycle/phase-install-patches.d.ts +12 -0
- package/dist/src/lifecycle/phase-install-patches.js +31 -0
- package/dist/src/lifecycle/phase-install-patches.js.map +1 -0
- package/dist/src/lifecycle/phase-schedule-jobs.d.ts +12 -0
- package/dist/src/lifecycle/phase-schedule-jobs.js +15 -0
- package/dist/src/lifecycle/phase-schedule-jobs.js.map +1 -0
- package/dist/src/lifecycle/phase-start-server.d.ts +11 -0
- package/dist/src/lifecycle/phase-start-server.js +11 -0
- package/dist/src/lifecycle/phase-start-server.js.map +1 -0
- package/dist/src/lifecycle/phase-validate-config.d.ts +9 -0
- package/dist/src/lifecycle/phase-validate-config.js +25 -0
- package/dist/src/lifecycle/phase-validate-config.js.map +1 -0
- package/dist/src/lifecycle/phase-validate-upstream.d.ts +11 -0
- package/dist/src/lifecycle/phase-validate-upstream.js +16 -0
- package/dist/src/lifecycle/phase-validate-upstream.js.map +1 -0
- package/dist/src/lifecycle/phase-wire-handlers.d.ts +12 -0
- package/dist/src/lifecycle/phase-wire-handlers.js +16 -0
- package/dist/src/lifecycle/phase-wire-handlers.js.map +1 -0
- package/dist/src/observability/event-bus.d.ts +65 -0
- package/dist/src/observability/event-bus.js +52 -0
- package/dist/src/observability/event-bus.js.map +1 -0
- package/dist/src/observability/get-event-bus.d.ts +25 -0
- package/dist/src/observability/get-event-bus.js +34 -0
- package/dist/src/observability/get-event-bus.js.map +1 -0
- package/dist/src/observability/observability-service.d.ts +19 -0
- package/dist/src/observability/observability-service.js +24 -0
- package/dist/src/observability/observability-service.js.map +1 -0
- package/dist/src/observability/subscribers/metrics.d.ts +11 -0
- package/dist/src/observability/subscribers/metrics.js +21 -0
- package/dist/src/observability/subscribers/metrics.js.map +1 -0
- package/dist/src/observability/subscribers/session-capture.d.ts +15 -0
- package/dist/src/observability/subscribers/session-capture.js +25 -0
- package/dist/src/observability/subscribers/session-capture.js.map +1 -0
- package/dist/src/openai-compat/bridges/allowlist.d.ts +14 -5
- package/dist/src/openai-compat/bridges/allowlist.js +18 -7
- package/dist/src/openai-compat/bridges/allowlist.js.map +1 -1
- package/dist/src/openai-compat/bridges/openclaw-api-shim.d.ts +54 -0
- package/dist/src/openai-compat/bridges/openclaw-api-shim.js +45 -0
- package/dist/src/openai-compat/bridges/openclaw-api-shim.js.map +1 -0
- package/dist/src/openai-compat/openai-chunk-types.d.ts +35 -0
- package/dist/src/openai-compat/openai-chunk-types.js +9 -0
- package/dist/src/openai-compat/openai-chunk-types.js.map +1 -0
- package/dist/src/openai-compat/openai-compat.d.ts +2 -90
- package/dist/src/openai-compat/openai-compat.js +68 -68
- package/dist/src/openai-compat/openai-compat.js.map +1 -1
- package/dist/src/openai-compat/openai-types.d.ts +71 -0
- package/dist/src/openai-compat/openai-types.js +11 -0
- package/dist/src/openai-compat/openai-types.js.map +1 -0
- package/dist/src/openai-compat/parse-route-body.d.ts +24 -0
- package/dist/src/openai-compat/parse-route-body.js +45 -0
- package/dist/src/openai-compat/parse-route-body.js.map +1 -0
- package/dist/src/openai-compat/tts-rule.d.ts +20 -0
- package/dist/src/openai-compat/tts-rule.js +58 -0
- package/dist/src/openai-compat/tts-rule.js.map +1 -0
- package/dist/src/openai-compat/voice-recovery.js +0 -1
- package/dist/src/openai-compat/voice-recovery.js.map +1 -1
- package/dist/src/patches/cache-parity-registry.d.ts +20 -0
- package/dist/src/patches/cache-parity-registry.js +64 -0
- package/dist/src/patches/cache-parity-registry.js.map +1 -0
- package/dist/src/patches/claude-md-injection.d.ts +10 -0
- package/dist/src/patches/claude-md-injection.js +46 -0
- package/dist/src/patches/claude-md-injection.js.map +1 -0
- package/dist/src/patches/cwd-redirect.d.ts +10 -0
- package/dist/src/patches/cwd-redirect.js +51 -0
- package/dist/src/patches/cwd-redirect.js.map +1 -0
- package/dist/src/patches/embedded-server-route.d.ts +23 -0
- package/dist/src/patches/embedded-server-route.js +64 -0
- package/dist/src/patches/embedded-server-route.js.map +1 -0
- package/dist/src/patches/pricing-overrides.d.ts +10 -0
- package/dist/src/patches/pricing-overrides.js +55 -0
- package/dist/src/patches/pricing-overrides.js.map +1 -0
- package/dist/src/patches/resume-registry-restore.d.ts +11 -0
- package/dist/src/patches/resume-registry-restore.js +48 -0
- package/dist/src/patches/resume-registry-restore.js.map +1 -0
- package/dist/src/patches/session-pid-tracking.d.ts +10 -0
- package/dist/src/patches/session-pid-tracking.js +45 -0
- package/dist/src/patches/session-pid-tracking.js.map +1 -0
- package/dist/src/patches/sysprompt-strip.d.ts +46 -0
- package/dist/src/patches/sysprompt-strip.js +78 -0
- package/dist/src/patches/sysprompt-strip.js.map +1 -0
- package/dist/src/patches/sysprompt-strip.spec.d.ts +33 -0
- package/dist/src/patches/sysprompt-strip.spec.js +53 -0
- package/dist/src/patches/sysprompt-strip.spec.js.map +1 -0
- package/dist/src/patches/tools-restoration.d.ts +12 -0
- package/dist/src/patches/tools-restoration.js +43 -0
- package/dist/src/patches/tools-restoration.js.map +1 -0
- package/dist/src/persistence/migration-v0.d.ts +24 -0
- package/dist/src/persistence/migration-v0.js +142 -0
- package/dist/src/persistence/migration-v0.js.map +1 -0
- package/dist/src/persistence/session-registry.d.ts +57 -0
- package/dist/src/persistence/session-registry.js +58 -0
- package/dist/src/persistence/session-registry.js.map +1 -0
- package/dist/src/persistence/snapshot.d.ts +18 -0
- package/dist/src/persistence/snapshot.js +32 -0
- package/dist/src/persistence/snapshot.js.map +1 -0
- package/dist/src/persistence/wal.d.ts +17 -0
- package/dist/src/persistence/wal.js +32 -0
- package/dist/src/persistence/wal.js.map +1 -0
- package/dist/src/session/persisted-sessions.d.ts +26 -0
- package/dist/src/session/persisted-sessions.js +70 -0
- package/dist/src/session/persisted-sessions.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +2 -11
- package/dist/src/session/session-manager.js +22 -66
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/session-bootstrap/boot-self-heal.d.ts +32 -0
- package/dist/src/session-bootstrap/boot-self-heal.js +54 -0
- package/dist/src/session-bootstrap/boot-self-heal.js.map +1 -0
- package/dist/src/session-bootstrap/cwd-patch.js +11 -87
- package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
- package/dist/src/session-bootstrap/resume-registry.d.ts +29 -0
- package/dist/src/session-bootstrap/resume-registry.js +58 -0
- package/dist/src/session-bootstrap/resume-registry.js.map +1 -0
- package/dist/src/session-bootstrap/session-hygiene.d.ts +23 -0
- package/dist/src/session-bootstrap/session-hygiene.js +41 -0
- package/dist/src/session-bootstrap/session-hygiene.js.map +1 -0
- package/dist/src/types/runtime-config.d.ts +11 -0
- package/dist/src/types/runtime-config.js +9 -0
- package/dist/src/types/runtime-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,96 +17,8 @@ export { formatCompletionResponse, formatCompletionChunk } from './response-form
|
|
|
17
17
|
export { reportStatus, getToolDescription } from './status-reporter.js';
|
|
18
18
|
export { handleNonStreaming } from './non-streaming-handler.js';
|
|
19
19
|
export { handleStreaming } from './streaming-handler.js';
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
content: string | Array<{
|
|
23
|
-
type?: string;
|
|
24
|
-
text?: string;
|
|
25
|
-
}> | null;
|
|
26
|
-
tool_calls?: Array<{
|
|
27
|
-
id: string;
|
|
28
|
-
type: 'function';
|
|
29
|
-
function: {
|
|
30
|
-
name: string;
|
|
31
|
-
arguments: string;
|
|
32
|
-
};
|
|
33
|
-
}>;
|
|
34
|
-
tool_call_id?: string;
|
|
35
|
-
}
|
|
36
|
-
export interface OpenAIChatCompletionRequest {
|
|
37
|
-
model?: string;
|
|
38
|
-
messages: OpenAIChatMessage[];
|
|
39
|
-
stream?: boolean;
|
|
40
|
-
temperature?: number;
|
|
41
|
-
max_tokens?: number;
|
|
42
|
-
max_completion_tokens?: number;
|
|
43
|
-
user?: string;
|
|
44
|
-
tools?: Array<{
|
|
45
|
-
type: 'function';
|
|
46
|
-
function: {
|
|
47
|
-
name: string;
|
|
48
|
-
description: string;
|
|
49
|
-
parameters: unknown;
|
|
50
|
-
};
|
|
51
|
-
}>;
|
|
52
|
-
}
|
|
53
|
-
export interface OpenAIToolCall {
|
|
54
|
-
id: string;
|
|
55
|
-
type: 'function';
|
|
56
|
-
function: {
|
|
57
|
-
name: string;
|
|
58
|
-
arguments: string;
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
export interface OpenAIChatCompletionResponse {
|
|
62
|
-
id: string;
|
|
63
|
-
object: 'chat.completion';
|
|
64
|
-
created: number;
|
|
65
|
-
model: string;
|
|
66
|
-
choices: Array<{
|
|
67
|
-
index: number;
|
|
68
|
-
message: {
|
|
69
|
-
role: 'assistant';
|
|
70
|
-
content: string | null;
|
|
71
|
-
tool_calls?: OpenAIToolCall[];
|
|
72
|
-
reasoning?: string;
|
|
73
|
-
};
|
|
74
|
-
finish_reason: 'stop' | 'length' | 'tool_calls';
|
|
75
|
-
}>;
|
|
76
|
-
usage: {
|
|
77
|
-
prompt_tokens: number;
|
|
78
|
-
completion_tokens: number;
|
|
79
|
-
total_tokens: number;
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
export interface OpenAIChatCompletionChunk {
|
|
83
|
-
id: string;
|
|
84
|
-
object: 'chat.completion.chunk';
|
|
85
|
-
created: number;
|
|
86
|
-
model: string;
|
|
87
|
-
choices: Array<{
|
|
88
|
-
index: number;
|
|
89
|
-
delta: {
|
|
90
|
-
role?: string;
|
|
91
|
-
content?: string | null;
|
|
92
|
-
tool_calls?: Array<{
|
|
93
|
-
index: number;
|
|
94
|
-
id?: string;
|
|
95
|
-
type?: 'function';
|
|
96
|
-
function?: {
|
|
97
|
-
name?: string;
|
|
98
|
-
arguments?: string;
|
|
99
|
-
};
|
|
100
|
-
}>;
|
|
101
|
-
};
|
|
102
|
-
finish_reason: string | null;
|
|
103
|
-
}>;
|
|
104
|
-
usage?: {
|
|
105
|
-
prompt_tokens: number;
|
|
106
|
-
completion_tokens: number;
|
|
107
|
-
total_tokens: number;
|
|
108
|
-
};
|
|
109
|
-
}
|
|
20
|
+
export type { OpenAIChatMessage, OpenAIChatCompletionRequest, OpenAIToolCall, OpenAIChatCompletionResponse, } from './openai-types.js';
|
|
21
|
+
export type { OpenAIChatCompletionChunk } from './openai-chunk-types.js';
|
|
110
22
|
/** SessionManager-like interface to avoid circular imports. Exported so
|
|
111
23
|
* the extracted handlers (non-streaming-handler.ts, streaming-handler.ts)
|
|
112
24
|
* can type their `manager` parameter from a single canonical definition. */
|
|
@@ -27,44 +27,8 @@ import { getTtsAutoMode } from '../lib/config.js';
|
|
|
27
27
|
// "Let me send the voice note now" followed by no markers and no voice —
|
|
28
28
|
// the model was looking for a tool to call OR treating the rule as a
|
|
29
29
|
// suggestion. v0.10.3 explicitly forbids alternatives and gives an example.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
'',
|
|
33
|
-
'TTS is enabled. The ONLY mechanism that delivers a voice message to the',
|
|
34
|
-
'user is wrapping the spoken text in literal `[[tts:text]]...[[/tts:text]]`',
|
|
35
|
-
'markers inside your reply. There is NO `send_voice`, NO `message.voice`,',
|
|
36
|
-
'NO `speak`, NO `sendVoice`, NO `tts` tool available to you in this',
|
|
37
|
-
'environment — if any such tool appears in `<available_tools>` upstream,',
|
|
38
|
-
'IT WILL NOT WORK. Do NOT call it. Do NOT emit `<tool_calls>` XML for',
|
|
39
|
-
'voice delivery. The `[[tts:text]]` marker is the SOLE path.',
|
|
40
|
-
'',
|
|
41
|
-
'WHEN to use it: the user explicitly asks for a voice note / voice',
|
|
42
|
-
'message / asks you to "speak", "say it aloud", "send voice", or similar.',
|
|
43
|
-
'Otherwise: reply text only, do NOT include the markers.',
|
|
44
|
-
'',
|
|
45
|
-
'HOW to use it: produce your reply with the spoken summary inside a',
|
|
46
|
-
'`[[tts:text]]...[[/tts:text]]` block (≤150 chars (CPU TTS is slow — keep it short) in the block). The',
|
|
47
|
-
'block becomes the voice message; anything outside stays text. You may',
|
|
48
|
-
'still include a closing `★ Insight ─` block as text — that rule still',
|
|
49
|
-
'applies, but the `[[tts:text]]` block MUST come first when voice is',
|
|
50
|
-
'requested. Do NOT narrate "Let me send the voice note" — just emit the',
|
|
51
|
-
'block. Do NOT claim "voice sent" unless the markers are literally in',
|
|
52
|
-
'your reply text.',
|
|
53
|
-
'',
|
|
54
|
-
'EXAMPLE (user asked "send me a voice note about chatterbox status"):',
|
|
55
|
-
' [[tts:text]]Chatterbox is online at port 8003, CPU-only, healthy.',
|
|
56
|
-
' Returns mono 24kHz WAV. Multilingual model loaded.[[/tts:text]]',
|
|
57
|
-
'',
|
|
58
|
-
' Full status: model=chatterbox-multilingual, device=cpu,',
|
|
59
|
-
' sample_rate=24000, uptime 92m on PM2.',
|
|
60
|
-
'',
|
|
61
|
-
' ★ Insight ─────────────────────────────────────',
|
|
62
|
-
' CPU-only inference trades GPU speed for VRAM isolation — fine for',
|
|
63
|
-
' hook announcements, slow for live agent turns.',
|
|
64
|
-
' ─────────────────────────────────────────────────',
|
|
65
|
-
'',
|
|
66
|
-
'=== END VOICE DELIVERY RULE ===',
|
|
67
|
-
].join('\n');
|
|
30
|
+
// `TTS_RULE` extracted to `./tts-rule.ts` 2026-05-13 — pure-string constant.
|
|
31
|
+
import { TTS_RULE } from './tts-rule.js';
|
|
68
32
|
import { extractUserMessage, } from './message-extractor.js';
|
|
69
33
|
import { handleNonStreaming } from './non-streaming-handler.js';
|
|
70
34
|
import { handleStreaming } from './streaming-handler.js';
|
|
@@ -84,36 +48,72 @@ export { handleStreaming } from './streaming-handler.js';
|
|
|
84
48
|
import { emit as emitTrajectory } from '../lib/trajectory.js';
|
|
85
49
|
import { logReqShape } from '../lib/req-shape-log.js';
|
|
86
50
|
import { formatError, ERROR_CODES } from '../lib/error-formatter.js';
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
51
|
+
// ─── Session Key Resolution ──────────────────────────────────────────────────
|
|
52
|
+
/**
|
|
53
|
+
* Derive a session key from the request.
|
|
54
|
+
* Priority: X-Session-Id header > user field > sha1(model + systemPrompt) > "default"
|
|
55
|
+
*
|
|
56
|
+
* The system-prompt-hash fallback prevents the bug where every caller without
|
|
57
|
+
* X-Session-Id or `user` collapses onto a single shared "openai-default"
|
|
58
|
+
* plugin session. In multi-caller setups (OpenClaw routing the main agent,
|
|
59
|
+
* cron jobs, and subagents through the same gateway) that previously meant
|
|
60
|
+
* every request serialized against every other and frequently picked up the
|
|
61
|
+
* wrong session's appendSystemPrompt — also a privacy leak across callers.
|
|
62
|
+
*
|
|
63
|
+
* The model is mixed into the hash so that two callers with the same system
|
|
64
|
+
* prompt but different requested models don't collide and silently get
|
|
65
|
+
* responses from the wrong model. Originally diagnosed in PR #40 by
|
|
66
|
+
* @megayounus786.
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* When set (to '1', 'true', 'yes'), the proxy preserves the pre-fix behavior:
|
|
70
|
+
* - tools injected into every user message
|
|
71
|
+
* - session key NOT fingerprinted by tools (same session across tool changes)
|
|
72
|
+
* Default (unset) is the new behavior: tools embedded in session system prompt
|
|
73
|
+
* at create time + session key fingerprinted by tools. The new behavior
|
|
74
|
+
* eliminates periodic latency spikes but does not support mutating the tool
|
|
75
|
+
* list within a single session (a new session is created when tools change).
|
|
76
|
+
*/
|
|
77
|
+
// isToolsPerMessageModeEnabled + isToolStreamMode moved to mode-flags.ts
|
|
78
|
+
// (Cluster B beachhead). Re-exported at the top of this file for backward
|
|
79
|
+
// compat — internal call sites in this file use the imported versions.
|
|
80
|
+
// noToolsSystemPrompt + buildSessionSystemPrompt + buildToolPromptBlock
|
|
81
|
+
// moved to prompts.ts (Cluster B). Re-exported at the top of this file
|
|
82
|
+
// for backward compat; internal callers use the imported versions.
|
|
83
|
+
//
|
|
84
|
+
// resolveSessionKey + sessionNameFromKey live in session-key-resolver.ts
|
|
85
|
+
// (also Cluster B). Same pattern.
|
|
86
|
+
// ─── Function Calling Support ────────────────────────────────────────────────
|
|
87
|
+
// ParsedToolCalls + parseToolCallsFromText moved to tool-calls-parser.ts
|
|
88
|
+
// (Cluster B Module B). Re-exported at the top of this file for backward
|
|
89
|
+
// compat — internal callers use the imported version.
|
|
90
|
+
// serializeToolResults + serializeToolResultsAsBlocks + AnthropicToolResultBlock
|
|
91
|
+
// moved to tool-results-serializer.ts (Cluster B Module C). Re-exported at the
|
|
92
|
+
// top of this file for backward compat — internal callers (extractUserMessage)
|
|
93
|
+
// use the imported versions.
|
|
94
|
+
// UserMessageBlock + ExtractedMessage + extractUserMessage moved to
|
|
95
|
+
// message-extractor.ts (Cluster B Module D). Re-exported at the top of
|
|
96
|
+
// this file for backward compat — internal callers (handleChatCompletion
|
|
97
|
+
// + response-formatting helpers) use the imported versions / types.
|
|
98
|
+
// formatCompletionResponse + formatCompletionChunk moved to
|
|
99
|
+
// response-formatter.ts (Cluster B Module E — the final extraction).
|
|
100
|
+
// Re-exported at the top of this file for backward compat; internal
|
|
101
|
+
// callers (handleChatCompletion + helpers) use the imported versions.
|
|
102
|
+
// ─── Typed request parser (Cluster A step 4) ─────────────────────────────────
|
|
103
|
+
//
|
|
104
|
+
// Establishes the typed seam at the http body → handleChatCompletion boundary.
|
|
105
|
+
// Replaces the inline `as OpenAIChatMessage[]` cast block that previously
|
|
106
|
+
// lived inside handleChatCompletion. Returns a discriminated union — `ok:true`
|
|
107
|
+
// produces a fully-typed `OpenAIChatCompletionRequest` (aliased as `RouteBody`
|
|
108
|
+
// in `src/types/route.ts`); `ok:false` carries the http status + error
|
|
109
|
+
// message that the caller writes back to the client.
|
|
110
|
+
//
|
|
111
|
+
// Behavior preserved verbatim from the previous inline implementation
|
|
112
|
+
// (handleChatCompletion lines 666-696 pre-Cluster-A): same two checks,
|
|
113
|
+
// same error messages, same status codes, same field-by-field cast.
|
|
114
|
+
// `parseRouteBody` extracted to `./parse-route-body.ts` 2026-05-13 — pure
|
|
115
|
+
// validation function. Type-only cross-import; no runtime cycle.
|
|
116
|
+
import { parseRouteBody } from './parse-route-body.js';
|
|
117
117
|
export async function handleChatCompletion(manager, body, headers, res) {
|
|
118
118
|
// Cluster A step 4: typed boundary parser. Replaces the inline cast +
|
|
119
119
|
// validation block that previously lived here (~30 lines). Returns a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["../../../src/openai-compat/openai-compat.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,2BAA2B,EAC3B,oCAAoC,GACrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,oEAAoE;AACpE,yEAAyE;AACzE,qEAAqE;AACrE,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["../../../src/openai-compat/openai-compat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical OpenAI request/response type definitions.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `openai-compat.ts` 2026-05-13 to push that file under the
|
|
5
|
+
* 500-LOC ceiling and to give 4 downstream importers
|
|
6
|
+
* (`tool-results-serializer`, `session-key-resolver`, `message-extractor`,
|
|
7
|
+
* `tool-calls-parser`) a single canonical source instead of importing back
|
|
8
|
+
* through the godmodule.
|
|
9
|
+
*/
|
|
10
|
+
export interface OpenAIChatMessage {
|
|
11
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
12
|
+
content: string | Array<{
|
|
13
|
+
type?: string;
|
|
14
|
+
text?: string;
|
|
15
|
+
}> | null;
|
|
16
|
+
tool_calls?: Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
type: 'function';
|
|
19
|
+
function: {
|
|
20
|
+
name: string;
|
|
21
|
+
arguments: string;
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
tool_call_id?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface OpenAIChatCompletionRequest {
|
|
27
|
+
model?: string;
|
|
28
|
+
messages: OpenAIChatMessage[];
|
|
29
|
+
stream?: boolean;
|
|
30
|
+
temperature?: number;
|
|
31
|
+
max_tokens?: number;
|
|
32
|
+
max_completion_tokens?: number;
|
|
33
|
+
user?: string;
|
|
34
|
+
tools?: Array<{
|
|
35
|
+
type: 'function';
|
|
36
|
+
function: {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
parameters: unknown;
|
|
40
|
+
};
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
export interface OpenAIToolCall {
|
|
44
|
+
id: string;
|
|
45
|
+
type: 'function';
|
|
46
|
+
function: {
|
|
47
|
+
name: string;
|
|
48
|
+
arguments: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export interface OpenAIChatCompletionResponse {
|
|
52
|
+
id: string;
|
|
53
|
+
object: 'chat.completion';
|
|
54
|
+
created: number;
|
|
55
|
+
model: string;
|
|
56
|
+
choices: Array<{
|
|
57
|
+
index: number;
|
|
58
|
+
message: {
|
|
59
|
+
role: 'assistant';
|
|
60
|
+
content: string | null;
|
|
61
|
+
tool_calls?: OpenAIToolCall[];
|
|
62
|
+
reasoning?: string;
|
|
63
|
+
};
|
|
64
|
+
finish_reason: 'stop' | 'length' | 'tool_calls';
|
|
65
|
+
}>;
|
|
66
|
+
usage?: {
|
|
67
|
+
prompt_tokens: number;
|
|
68
|
+
completion_tokens: number;
|
|
69
|
+
total_tokens: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical OpenAI request/response type definitions.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `openai-compat.ts` 2026-05-13 to push that file under the
|
|
5
|
+
* 500-LOC ceiling and to give 4 downstream importers
|
|
6
|
+
* (`tool-results-serializer`, `session-key-resolver`, `message-extractor`,
|
|
7
|
+
* `tool-calls-parser`) a single canonical source instead of importing back
|
|
8
|
+
* through the godmodule.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=openai-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-types.js","sourceRoot":"","sources":["../../../src/openai-compat/openai-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `parseRouteBody` — typed boundary parser for openai-compat HTTP route.
|
|
3
|
+
*
|
|
4
|
+
* Replaces inline `as OpenAIChatMessage[]` casts with a discriminated-union
|
|
5
|
+
* returning either a fully-typed `OpenAIChatCompletionRequest` or an
|
|
6
|
+
* error-coded response. The type system enforces "validate before use."
|
|
7
|
+
*
|
|
8
|
+
* Extracted from `openai-compat.ts` 2026-05-13. Pure validation function —
|
|
9
|
+
* no I/O, no module state. Behavior preserved bit-for-bit per the existing
|
|
10
|
+
* `tests/openai-compat.test.ts` round-trip cases.
|
|
11
|
+
*
|
|
12
|
+
* Type imports cross-reference back to openai-compat.ts; TypeScript handles
|
|
13
|
+
* type-only circular imports cleanly without runtime cycle.
|
|
14
|
+
*/
|
|
15
|
+
import type { OpenAIChatCompletionRequest } from './openai-compat.js';
|
|
16
|
+
export type ParseRequestResult = {
|
|
17
|
+
readonly ok: true;
|
|
18
|
+
readonly request: OpenAIChatCompletionRequest;
|
|
19
|
+
} | {
|
|
20
|
+
readonly ok: false;
|
|
21
|
+
readonly status: number;
|
|
22
|
+
readonly error: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function parseRouteBody(body: Record<string, unknown>): ParseRequestResult;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `parseRouteBody` — typed boundary parser for openai-compat HTTP route.
|
|
3
|
+
*
|
|
4
|
+
* Replaces inline `as OpenAIChatMessage[]` casts with a discriminated-union
|
|
5
|
+
* returning either a fully-typed `OpenAIChatCompletionRequest` or an
|
|
6
|
+
* error-coded response. The type system enforces "validate before use."
|
|
7
|
+
*
|
|
8
|
+
* Extracted from `openai-compat.ts` 2026-05-13. Pure validation function —
|
|
9
|
+
* no I/O, no module state. Behavior preserved bit-for-bit per the existing
|
|
10
|
+
* `tests/openai-compat.test.ts` round-trip cases.
|
|
11
|
+
*
|
|
12
|
+
* Type imports cross-reference back to openai-compat.ts; TypeScript handles
|
|
13
|
+
* type-only circular imports cleanly without runtime cycle.
|
|
14
|
+
*/
|
|
15
|
+
export function parseRouteBody(body) {
|
|
16
|
+
if (!body.messages || !Array.isArray(body.messages) || body.messages.length === 0) {
|
|
17
|
+
return {
|
|
18
|
+
ok: false,
|
|
19
|
+
status: 400,
|
|
20
|
+
error: 'messages is required and must be a non-empty array',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (body.max_tokens !== undefined &&
|
|
24
|
+
(typeof body.max_tokens !== 'number' || body.max_tokens <= 0)) {
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
status: 400,
|
|
28
|
+
error: 'max_tokens must be a positive number',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
ok: true,
|
|
33
|
+
request: {
|
|
34
|
+
messages: body.messages,
|
|
35
|
+
model: body.model,
|
|
36
|
+
stream: body.stream,
|
|
37
|
+
temperature: body.temperature,
|
|
38
|
+
max_tokens: body.max_tokens,
|
|
39
|
+
max_completion_tokens: body.max_completion_tokens,
|
|
40
|
+
user: body.user,
|
|
41
|
+
tools: body.tools,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=parse-route-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-route-body.js","sourceRoot":"","sources":["../../../src/openai-compat/parse-route-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,UAAU,cAAc,CAAC,IAA6B;IAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClF,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,oDAAoD;SAC5D,CAAC;IACJ,CAAC;IAED,IACE,IAAI,CAAC,UAAU,KAAK,SAAS;QAC7B,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAK,IAAI,CAAC,UAAqB,IAAI,CAAC,CAAC,EACzE,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,sCAAsC;SAC9C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI,CAAC,QAA+B;YAC9C,KAAK,EAAE,IAAI,CAAC,KAA2B;YACvC,MAAM,EAAE,IAAI,CAAC,MAA6B;YAC1C,WAAW,EAAE,IAAI,CAAC,WAAiC;YACnD,UAAU,EAAE,IAAI,CAAC,UAAgC;YACjD,qBAAqB,EAAE,IAAI,CAAC,qBAA2C;YACvE,IAAI,EAAE,IAAI,CAAC,IAA0B;YACrC,KAAK,EAAE,IAAI,CAAC,KAAyD;SACtE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTS_RULE — voice-delivery rule prepended to `--append-system-prompt` when
|
|
3
|
+
* `messages.tts.auto !== 'off'`. Defense-in-depth: ensures Savvy knows the
|
|
4
|
+
* `[[tts:text]]` marker syntax even if CLAUDE.md gets autobackup-reverted
|
|
5
|
+
* AND if OpenClaw upstream doesn't inject `buildTtsSystemPromptHint` into
|
|
6
|
+
* the outbound openai-compat HTTP body.
|
|
7
|
+
*
|
|
8
|
+
* History:
|
|
9
|
+
* - v0.10.2: rule auto-prepended when tts.auto !== 'off'.
|
|
10
|
+
* - v0.10.3: REWRITTEN as imperative + with override authority + few-shot.
|
|
11
|
+
* Previous wording ("wrap the spoken portion...") was interpreted by
|
|
12
|
+
* Savvy as optional. 2026-05-11 evening test showed Savvy ending with
|
|
13
|
+
* "Let me send the voice note now" followed by no markers and no voice
|
|
14
|
+
* — model was looking for a tool to call OR treating the rule as a
|
|
15
|
+
* suggestion. v0.10.3 explicitly forbids alternatives and gives an example.
|
|
16
|
+
*
|
|
17
|
+
* Extracted from `openai-compat.ts` 2026-05-13 — pure-string constant, no
|
|
18
|
+
* I/O, no module state. Safe single-source for the canonical rule text.
|
|
19
|
+
*/
|
|
20
|
+
export declare const TTS_RULE: string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTS_RULE — voice-delivery rule prepended to `--append-system-prompt` when
|
|
3
|
+
* `messages.tts.auto !== 'off'`. Defense-in-depth: ensures Savvy knows the
|
|
4
|
+
* `[[tts:text]]` marker syntax even if CLAUDE.md gets autobackup-reverted
|
|
5
|
+
* AND if OpenClaw upstream doesn't inject `buildTtsSystemPromptHint` into
|
|
6
|
+
* the outbound openai-compat HTTP body.
|
|
7
|
+
*
|
|
8
|
+
* History:
|
|
9
|
+
* - v0.10.2: rule auto-prepended when tts.auto !== 'off'.
|
|
10
|
+
* - v0.10.3: REWRITTEN as imperative + with override authority + few-shot.
|
|
11
|
+
* Previous wording ("wrap the spoken portion...") was interpreted by
|
|
12
|
+
* Savvy as optional. 2026-05-11 evening test showed Savvy ending with
|
|
13
|
+
* "Let me send the voice note now" followed by no markers and no voice
|
|
14
|
+
* — model was looking for a tool to call OR treating the rule as a
|
|
15
|
+
* suggestion. v0.10.3 explicitly forbids alternatives and gives an example.
|
|
16
|
+
*
|
|
17
|
+
* Extracted from `openai-compat.ts` 2026-05-13 — pure-string constant, no
|
|
18
|
+
* I/O, no module state. Safe single-source for the canonical rule text.
|
|
19
|
+
*/
|
|
20
|
+
export const TTS_RULE = [
|
|
21
|
+
'=== VOICE DELIVERY RULE (cc-openclaw, takes precedence) ===',
|
|
22
|
+
'',
|
|
23
|
+
'TTS is enabled. The ONLY mechanism that delivers a voice message to the',
|
|
24
|
+
'user is wrapping the spoken text in literal `[[tts:text]]...[[/tts:text]]`',
|
|
25
|
+
'markers inside your reply. There is NO `send_voice`, NO `message.voice`,',
|
|
26
|
+
'NO `speak`, NO `sendVoice`, NO `tts` tool available to you in this',
|
|
27
|
+
'environment — if any such tool appears in `<available_tools>` upstream,',
|
|
28
|
+
'IT WILL NOT WORK. Do NOT call it. Do NOT emit `<tool_calls>` XML for',
|
|
29
|
+
'voice delivery. The `[[tts:text]]` marker is the SOLE path.',
|
|
30
|
+
'',
|
|
31
|
+
'WHEN to use it: the user explicitly asks for a voice note / voice',
|
|
32
|
+
'message / asks you to "speak", "say it aloud", "send voice", or similar.',
|
|
33
|
+
'Otherwise: reply text only, do NOT include the markers.',
|
|
34
|
+
'',
|
|
35
|
+
'HOW to use it: produce your reply with the spoken summary inside a',
|
|
36
|
+
'`[[tts:text]]...[[/tts:text]]` block (≤150 chars (CPU TTS is slow — keep it short) in the block). The',
|
|
37
|
+
'block becomes the voice message; anything outside stays text. You may',
|
|
38
|
+
'still include a closing `★ Insight ─` block as text — that rule still',
|
|
39
|
+
'applies, but the `[[tts:text]]` block MUST come first when voice is',
|
|
40
|
+
'requested. Do NOT narrate "Let me send the voice note" — just emit the',
|
|
41
|
+
'block. Do NOT claim "voice sent" unless the markers are literally in',
|
|
42
|
+
'your reply text.',
|
|
43
|
+
'',
|
|
44
|
+
'EXAMPLE (user asked "send me a voice note about chatterbox status"):',
|
|
45
|
+
' [[tts:text]]Chatterbox is online at port 8003, CPU-only, healthy.',
|
|
46
|
+
' Returns mono 24kHz WAV. Multilingual model loaded.[[/tts:text]]',
|
|
47
|
+
'',
|
|
48
|
+
' Full status: model=chatterbox-multilingual, device=cpu,',
|
|
49
|
+
' sample_rate=24000, uptime 92m on PM2.',
|
|
50
|
+
'',
|
|
51
|
+
' ★ Insight ─────────────────────────────────────',
|
|
52
|
+
' CPU-only inference trades GPU speed for VRAM isolation — fine for',
|
|
53
|
+
' hook announcements, slow for live agent turns.',
|
|
54
|
+
' ─────────────────────────────────────────────────',
|
|
55
|
+
'',
|
|
56
|
+
'=== END VOICE DELIVERY RULE ===',
|
|
57
|
+
].join('\n');
|
|
58
|
+
//# sourceMappingURL=tts-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts-rule.js","sourceRoot":"","sources":["../../../src/openai-compat/tts-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,6DAA6D;IAC7D,EAAE;IACF,yEAAyE;IACzE,4EAA4E;IAC5E,0EAA0E;IAC1E,oEAAoE;IACpE,yEAAyE;IACzE,sEAAsE;IACtE,6DAA6D;IAC7D,EAAE;IACF,mEAAmE;IACnE,0EAA0E;IAC1E,yDAAyD;IACzD,EAAE;IACF,oEAAoE;IACpE,uGAAuG;IACvG,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,wEAAwE;IACxE,sEAAsE;IACtE,kBAAkB;IAClB,EAAE;IACF,sEAAsE;IACtE,qEAAqE;IACrE,mEAAmE;IACnE,EAAE;IACF,2DAA2D;IAC3D,yCAAyC;IACzC,EAAE;IACF,mDAAmD;IACnD,qEAAqE;IACrE,kDAAkD;IAClD,qDAAqD;IACrD,EAAE;IACF,iCAAiC;CAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-recovery.js","sourceRoot":"","sources":["../../../src/openai-compat/voice-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,6EAA6E;AAE7E;;;6BAG6B;AAC7B,MAAM,kBAAkB,GACtB,8MAA8M,CAAC;AAEjN,6DAA6D;AAC7D,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,SAAS,GAAG,eAAe,CAAC;AAElC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,6EAA6E;AAE7E;;;;gEAIgE;AAChE,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,MAA+B;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG;QAAE,OAAO;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"voice-recovery.js","sourceRoot":"","sources":["../../../src/openai-compat/voice-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PatchSpec: cache-parity-registry
|
|
3
|
+
*
|
|
4
|
+
* Second Phase E#3 PatchSpec, demonstrating that the pattern composes —
|
|
5
|
+
* multiple specs can register in one PatchManifest and validate
|
|
6
|
+
* independently. Drift-detection only at this stage; real install/uninstall
|
|
7
|
+
* extracted from `src/lib/cache-parity.ts` lands in Phase E#3 proper.
|
|
8
|
+
*
|
|
9
|
+
* Drift contract: verifies `src/lib/cache-parity.ts` exports its canonical
|
|
10
|
+
* registry path constant and at least one accessor function. If a future
|
|
11
|
+
* refactor accidentally removes the registry writer, this probe surfaces
|
|
12
|
+
* a DriftError at boot phase 3, preventing silent cache-parity regressions
|
|
13
|
+
* of the v0.6.0 namespace-bug class.
|
|
14
|
+
*/
|
|
15
|
+
import type { PatchSpec } from '../lifecycle/patch-manifest.js';
|
|
16
|
+
interface CacheParityTarget {
|
|
17
|
+
readonly module: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export declare const cacheParityRegistrySpec: PatchSpec<CacheParityTarget>;
|
|
20
|
+
export {};
|