@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.
Files changed (61) hide show
  1. package/dist/agent/abort-errors.d.ts +2 -2
  2. package/dist/agent/budget-ledger.d.ts +4 -45
  3. package/dist/agent/budget-ledger.js +5 -75
  4. package/dist/agent/child-runner.d.ts +1 -3
  5. package/dist/agent/child-runner.js +6 -37
  6. package/dist/agent/profiles.d.ts +0 -2
  7. package/dist/agent/profiles.js +0 -3
  8. package/dist/agent/subagent-control.d.ts +5 -12
  9. package/dist/agent/subagent-control.js +0 -2
  10. package/dist/agent/subagent-store.d.ts +1 -1
  11. package/dist/agent/subagent-store.js +1 -3
  12. package/dist/agent/workflow/control.d.ts +7 -0
  13. package/dist/agent/workflow/control.js +22 -1
  14. package/dist/agent/workflow/runtime.d.ts +15 -2
  15. package/dist/agent/workflow/runtime.js +112 -30
  16. package/dist/agent.d.ts +7 -43
  17. package/dist/agent.js +50 -176
  18. package/dist/config.d.ts +1 -3
  19. package/dist/config.js +6 -5
  20. package/dist/context/overflow.js +2 -0
  21. package/dist/main.js +9 -1
  22. package/dist/model-catalog.d.ts +1 -1
  23. package/dist/model-catalog.js +25 -18
  24. package/dist/orchestrator/default-hooks.js +7 -1
  25. package/dist/prompt/delegation.d.ts +1 -1
  26. package/dist/prompt/delegation.js +21 -7
  27. package/dist/prompt/task-reminders.d.ts +1 -0
  28. package/dist/prompt/task-reminders.js +24 -1
  29. package/dist/provider-ai-sdk.d.ts +56 -0
  30. package/dist/provider-ai-sdk.js +518 -0
  31. package/dist/provider-registry.js +49 -3
  32. package/dist/provider-transform.d.ts +1 -1
  33. package/dist/provider-transform.js +8 -13
  34. package/dist/provider.js +4 -0
  35. package/dist/slash-commands/commands.js +3 -7
  36. package/dist/slash-commands/types.d.ts +1 -1
  37. package/dist/tools/agent-lifecycle.d.ts +1 -9
  38. package/dist/tools/agent-lifecycle.js +35 -263
  39. package/dist/tui-ink/app.js +51 -13
  40. package/dist/tui-ink/approval/approval-dialog.js +1 -1
  41. package/dist/tui-ink/approval/diff-view.js +4 -4
  42. package/dist/tui-ink/approval/select.js +2 -2
  43. package/dist/tui-ink/feedback-dialog.js +2 -2
  44. package/dist/tui-ink/feishu-setup-picker.js +3 -3
  45. package/dist/tui-ink/input-box.d.ts +1 -6
  46. package/dist/tui-ink/input-box.js +14 -35
  47. package/dist/tui-ink/markdown.js +11 -9
  48. package/dist/tui-ink/message-list.d.ts +5 -1
  49. package/dist/tui-ink/message-list.js +15 -2
  50. package/dist/tui-ink/model-picker.d.ts +3 -1
  51. package/dist/tui-ink/model-picker.js +25 -14
  52. package/dist/tui-ink/plan-confirm.js +1 -1
  53. package/dist/tui-ink/subagent-view.d.ts +3 -1
  54. package/dist/tui-ink/theme.d.ts +19 -2
  55. package/dist/tui-ink/theme.js +25 -8
  56. package/dist/tui-ink/welcome.d.ts +3 -2
  57. package/dist/tui-ink/welcome.js +10 -6
  58. package/dist/types.d.ts +16 -30
  59. package/dist/variant/variant-resolver.d.ts +13 -0
  60. package/dist/variant/variant-resolver.js +26 -0
  61. 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
- contentBlocks?: ProviderRawContentBlock[];
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: "anthropic";
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.33",
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
  }