@bubblebrain-ai/bubble 0.0.33 → 0.0.35
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/agent/abort-errors.d.ts +2 -2
- package/dist/agent/budget-ledger.d.ts +4 -45
- package/dist/agent/budget-ledger.js +5 -75
- package/dist/agent/child-runner.d.ts +1 -3
- package/dist/agent/child-runner.js +6 -37
- package/dist/agent/profiles.d.ts +0 -2
- package/dist/agent/profiles.js +0 -3
- package/dist/agent/subagent-control.d.ts +5 -12
- package/dist/agent/subagent-control.js +0 -2
- package/dist/agent/subagent-store.d.ts +1 -1
- package/dist/agent/subagent-store.js +1 -3
- package/dist/agent/workflow/control.d.ts +7 -0
- package/dist/agent/workflow/control.js +22 -1
- package/dist/agent/workflow/runtime.d.ts +15 -2
- package/dist/agent/workflow/runtime.js +112 -30
- package/dist/agent.d.ts +7 -43
- package/dist/agent.js +50 -176
- package/dist/config.d.ts +1 -3
- package/dist/config.js +6 -5
- package/dist/context/overflow.js +2 -0
- package/dist/main.js +9 -1
- package/dist/model-catalog.d.ts +1 -1
- package/dist/model-catalog.js +25 -18
- package/dist/orchestrator/default-hooks.js +7 -1
- package/dist/prompt/delegation.d.ts +1 -1
- package/dist/prompt/delegation.js +21 -7
- package/dist/prompt/task-reminders.d.ts +1 -0
- package/dist/prompt/task-reminders.js +24 -1
- package/dist/provider-ai-sdk.d.ts +56 -0
- package/dist/provider-ai-sdk.js +518 -0
- package/dist/provider-registry.js +49 -3
- package/dist/provider-transform.d.ts +1 -1
- package/dist/provider-transform.js +8 -13
- package/dist/provider.js +4 -0
- package/dist/slash-commands/commands.js +3 -7
- package/dist/slash-commands/types.d.ts +1 -1
- package/dist/tools/agent-lifecycle.d.ts +1 -9
- package/dist/tools/agent-lifecycle.js +35 -263
- package/dist/tui-ink/app.js +51 -13
- package/dist/tui-ink/approval/approval-dialog.js +1 -1
- package/dist/tui-ink/approval/diff-view.js +4 -4
- package/dist/tui-ink/approval/select.js +2 -2
- package/dist/tui-ink/feedback-dialog.js +2 -2
- package/dist/tui-ink/feishu-setup-picker.js +3 -3
- package/dist/tui-ink/input-box.d.ts +1 -6
- package/dist/tui-ink/input-box.js +14 -35
- package/dist/tui-ink/markdown.js +11 -9
- package/dist/tui-ink/message-list.d.ts +5 -1
- package/dist/tui-ink/message-list.js +15 -2
- package/dist/tui-ink/model-picker.d.ts +3 -1
- package/dist/tui-ink/model-picker.js +25 -14
- package/dist/tui-ink/plan-confirm.js +1 -1
- package/dist/tui-ink/subagent-view.d.ts +3 -1
- package/dist/tui-ink/theme.d.ts +19 -2
- package/dist/tui-ink/theme.js +25 -8
- package/dist/tui-ink/welcome.d.ts +3 -2
- package/dist/tui-ink/welcome.js +10 -6
- package/dist/types.d.ts +16 -30
- package/dist/variant/variant-resolver.d.ts +13 -0
- package/dist/variant/variant-resolver.js +26 -0
- package/package.json +9 -3
package/dist/types.d.ts
CHANGED
|
@@ -17,10 +17,19 @@ export type ReasoningEffort = ThinkingLevel;
|
|
|
17
17
|
export type ProviderRawContentBlock = Record<string, unknown> & {
|
|
18
18
|
type: string;
|
|
19
19
|
};
|
|
20
|
+
export type ProviderMetadataProvider = "anthropic" | "google";
|
|
21
|
+
export interface ProviderContentBlockStore {
|
|
22
|
+
contentBlocks?: ProviderRawContentBlock[];
|
|
23
|
+
}
|
|
20
24
|
export interface AssistantProviderMetadata {
|
|
21
|
-
anthropic?:
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
anthropic?: ProviderContentBlockStore;
|
|
26
|
+
/**
|
|
27
|
+
* Gemini raw parts captured for replay: reasoning/tool-call parts carrying
|
|
28
|
+
* thoughtSignature so multi-turn thinking round-trips through our own
|
|
29
|
+
* message rebuild (the SDK's automatic replay assumes appending its
|
|
30
|
+
* response.messages verbatim, which we don't do).
|
|
31
|
+
*/
|
|
32
|
+
google?: ProviderContentBlockStore;
|
|
24
33
|
}
|
|
25
34
|
export interface UserMessage {
|
|
26
35
|
role: "user";
|
|
@@ -201,38 +210,15 @@ export interface ToolContext {
|
|
|
201
210
|
}) => Promise<import("./agent/subagent-control.js").SubagentThreadSnapshot>;
|
|
202
211
|
closeSubAgent?: (agentId: string) => Promise<import("./agent/subagent-control.js").SubagentThreadSnapshot>;
|
|
203
212
|
listSubAgents?: () => import("./agent/subagent-control.js").SubagentThreadSnapshot[];
|
|
204
|
-
runAgentTeam?: (cwd: string, options: {
|
|
205
|
-
profile: import("./agent/profiles.js").AgentProfile;
|
|
206
|
-
category?: string;
|
|
207
|
-
model?: string;
|
|
208
|
-
effort?: ThinkingLevel;
|
|
209
|
-
promptTemplate: string;
|
|
210
|
-
items: string[];
|
|
211
|
-
parentToolCallId: string;
|
|
212
|
-
emitUpdate?: (update: ToolUpdate) => void;
|
|
213
|
-
abortSignal?: AbortSignal;
|
|
214
|
-
approval?: "fail" | "disabled";
|
|
215
|
-
}) => Promise<import("./agent/subagent-control.js").SubagentThreadSnapshot[]>;
|
|
216
|
-
runAgentBatch?: (cwd: string, options: {
|
|
217
|
-
specs: Array<{
|
|
218
|
-
task: string;
|
|
219
|
-
profile: import("./agent/profiles.js").AgentProfile;
|
|
220
|
-
category?: string;
|
|
221
|
-
model?: string;
|
|
222
|
-
effort?: ThinkingLevel;
|
|
223
|
-
outputSchema?: unknown;
|
|
224
|
-
}>;
|
|
225
|
-
parentToolCallId: string;
|
|
226
|
-
emitUpdate?: (update: ToolUpdate) => void;
|
|
227
|
-
abortSignal?: AbortSignal;
|
|
228
|
-
approval?: "fail" | "disabled";
|
|
229
|
-
}) => Promise<import("./agent/subagent-control.js").SubagentThreadSnapshot[]>;
|
|
230
213
|
startWorkflow?: (cwd: string, options: {
|
|
231
214
|
script: string;
|
|
232
215
|
args?: unknown;
|
|
233
216
|
title?: string;
|
|
234
217
|
parentToolCallId: string;
|
|
235
218
|
abortSignal?: AbortSignal;
|
|
219
|
+
ensureProfileTrusted?: (profile: import("./agent/profiles.js").AgentProfile) => Promise<{
|
|
220
|
+
content: string | unknown;
|
|
221
|
+
} | undefined>;
|
|
236
222
|
}) => {
|
|
237
223
|
runId: string;
|
|
238
224
|
title: string;
|
|
@@ -302,7 +288,7 @@ export type StreamChunk = {
|
|
|
302
288
|
content: string;
|
|
303
289
|
} | {
|
|
304
290
|
type: "provider_content_block";
|
|
305
|
-
provider:
|
|
291
|
+
provider: ProviderMetadataProvider;
|
|
306
292
|
block: ProviderRawContentBlock;
|
|
307
293
|
} | {
|
|
308
294
|
type: "tool_call";
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import type { ThinkingLevel } from "../types.js";
|
|
2
2
|
export declare function getAvailableThinkingLevels(providerId: string, modelId: string): ThinkingLevel[];
|
|
3
3
|
export declare function getDefaultThinkingLevel(providerId: string, modelId: string): ThinkingLevel;
|
|
4
|
+
/**
|
|
5
|
+
* A single non-"off" level means the model is always in thinking mode with no
|
|
6
|
+
* user-facing grades (e.g. kimi-k2.7-code) — the level value is an internal
|
|
7
|
+
* placeholder and must not be shown to the user as an effort grade.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isThinkingOnlyLevels(levels: readonly ThinkingLevel[]): boolean;
|
|
10
|
+
export declare function isThinkingOnlyModel(providerId?: string, modelId?: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Some providers expose thinking as a true enabled/disabled switch. We may store
|
|
13
|
+
* the enabled state as "medium" internally for compatibility with ThinkingLevel,
|
|
14
|
+
* but it is not a real user-facing effort grade.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isThinkingToggleModel(providerId?: string, modelId?: string): boolean;
|
|
4
17
|
export declare function normalizeThinkingLevel(level: ThinkingLevel, supportedLevels: readonly ThinkingLevel[]): ThinkingLevel;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { getBuiltinModel, getModelDefaultReasoningLevel } from "../model-catalog.js";
|
|
2
2
|
import { clampThinkingLevel } from "./thinking-level.js";
|
|
3
|
+
const KIMI_TOGGLE_PROVIDER_IDS = new Set(["moonshot-cn", "moonshot-intl", "kimi-for-coding"]);
|
|
4
|
+
const KIMI_THINKING_TOGGLE_MODELS = new Set(["kimi-k2.5", "kimi-k2.6"]);
|
|
3
5
|
export function getAvailableThinkingLevels(providerId, modelId) {
|
|
4
6
|
return getBuiltinModel(providerId, modelId)?.reasoningLevels ?? ["off"];
|
|
5
7
|
}
|
|
@@ -10,6 +12,30 @@ export function getDefaultThinkingLevel(providerId, modelId) {
|
|
|
10
12
|
return explicitDefault;
|
|
11
13
|
return levels.includes("medium") ? "medium" : levels[0] || "off";
|
|
12
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* A single non-"off" level means the model is always in thinking mode with no
|
|
17
|
+
* user-facing grades (e.g. kimi-k2.7-code) — the level value is an internal
|
|
18
|
+
* placeholder and must not be shown to the user as an effort grade.
|
|
19
|
+
*/
|
|
20
|
+
export function isThinkingOnlyLevels(levels) {
|
|
21
|
+
return levels.length === 1 && levels[0] !== "off";
|
|
22
|
+
}
|
|
23
|
+
export function isThinkingOnlyModel(providerId = "", modelId = "") {
|
|
24
|
+
return isThinkingOnlyLevels(getAvailableThinkingLevels(providerId, modelId));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Some providers expose thinking as a true enabled/disabled switch. We may store
|
|
28
|
+
* the enabled state as "medium" internally for compatibility with ThinkingLevel,
|
|
29
|
+
* but it is not a real user-facing effort grade.
|
|
30
|
+
*/
|
|
31
|
+
export function isThinkingToggleModel(providerId = "", modelId = "") {
|
|
32
|
+
const normalizedProvider = providerId.toLowerCase();
|
|
33
|
+
const normalizedModel = modelId.toLowerCase();
|
|
34
|
+
if (normalizedProvider.includes("minimax") || normalizedModel.includes("minimax"))
|
|
35
|
+
return true;
|
|
36
|
+
return KIMI_TOGGLE_PROVIDER_IDS.has(normalizedProvider)
|
|
37
|
+
&& KIMI_THINKING_TOGGLE_MODELS.has(normalizedModel);
|
|
38
|
+
}
|
|
13
39
|
export function normalizeThinkingLevel(level, supportedLevels) {
|
|
14
40
|
return clampThinkingLevel(level, supportedLevels);
|
|
15
41
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bubblebrain-ai/bubble",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"description": "A terminal coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
"test:watch": "vitest"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
+
"@ai-sdk/google": "^3.0.88",
|
|
28
|
+
"@ai-sdk/provider": "^3.0.13",
|
|
27
29
|
"@larksuiteoapi/node-sdk": "^1.65.0",
|
|
28
30
|
"@types/better-sqlite3": "^7.6.13",
|
|
29
31
|
"@types/react": "^19.2.14",
|
|
@@ -43,7 +45,8 @@
|
|
|
43
45
|
"typescript-language-server": "^5.1.3",
|
|
44
46
|
"undici": "^6.26.0",
|
|
45
47
|
"vscode-jsonrpc": "^8.2.1",
|
|
46
|
-
"vscode-langservers-extracted": "^4.10.0"
|
|
48
|
+
"vscode-langservers-extracted": "^4.10.0",
|
|
49
|
+
"zod": "^4.4.3"
|
|
47
50
|
},
|
|
48
51
|
"devDependencies": {
|
|
49
52
|
"@types/node": "^22.0.0",
|
|
@@ -56,6 +59,9 @@
|
|
|
56
59
|
"overrides": {
|
|
57
60
|
"axios": "^1.17.0",
|
|
58
61
|
"postcss": "^8.5.15",
|
|
59
|
-
"ws": "^8.21.0"
|
|
62
|
+
"ws": "^8.21.0",
|
|
63
|
+
"openai": {
|
|
64
|
+
"zod": "$zod"
|
|
65
|
+
}
|
|
60
66
|
}
|
|
61
67
|
}
|