@vellumai/assistant 0.11.9-dev.202609081913.93e93af → 0.11.9-dev.202609082126.a4f0fef

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 (79) hide show
  1. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/package.json +2 -1
  2. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/plan-credit.test.ts +51 -0
  3. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  4. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/plan-credit.ts +66 -0
  5. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/package.json +2 -1
  6. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/plan-credit.test.ts +51 -0
  7. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  8. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/plan-credit.ts +66 -0
  9. package/node_modules/@vellumai/service-contracts/package.json +2 -1
  10. package/node_modules/@vellumai/service-contracts/src/__tests__/plan-credit.test.ts +51 -0
  11. package/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  12. package/node_modules/@vellumai/service-contracts/src/plan-credit.ts +66 -0
  13. package/openapi.yaml +89 -6
  14. package/package.json +1 -1
  15. package/src/__tests__/headless-browser-mode.test.ts +63 -13
  16. package/src/__tests__/heartbeat-disk-pressure.test.ts +2 -0
  17. package/src/__tests__/heartbeat-service.test.ts +118 -27
  18. package/src/__tests__/mcp-config-secret-boundary.test.ts +2 -0
  19. package/src/__tests__/memory-config-file-parity.test.ts +18 -0
  20. package/src/api/constants/personality-sliders.test.ts +21 -0
  21. package/src/api/constants/personality-sliders.ts +64 -0
  22. package/src/api/index.ts +8 -0
  23. package/src/background-wake/next-wake.test.ts +13 -0
  24. package/src/background-wake/next-wake.ts +4 -2
  25. package/src/calls/voice-session-bridge.ts +26 -0
  26. package/src/cli/commands/config.help.ts +3 -1
  27. package/src/cli/commands/memory/worker.ts +1 -1
  28. package/src/cli/commands/platform/__tests__/credits-format.test.ts +94 -5
  29. package/src/cli/commands/platform/__tests__/credits.test.ts +10 -0
  30. package/src/cli/commands/platform/credits-format.ts +57 -0
  31. package/src/cli/commands/platform/index.help.ts +19 -3
  32. package/src/config/schemas/heartbeat.ts +3 -3
  33. package/src/config/schemas/memory-storage.test.ts +39 -0
  34. package/src/config/schemas/memory-storage.ts +21 -0
  35. package/src/daemon/__tests__/embedding-reconcile.test.ts +77 -0
  36. package/src/daemon/__tests__/lifecycle-embedding-reconcile.test.ts +3 -0
  37. package/src/daemon/embedding-reconcile.ts +64 -1
  38. package/src/daemon/handlers/config-embeddings.ts +31 -0
  39. package/src/heartbeat/heartbeat-service.ts +72 -13
  40. package/src/live-voice/__tests__/live-voice-photo.test.ts +72 -0
  41. package/src/live-voice/__tests__/live-voice-sight-frame.test.ts +81 -0
  42. package/src/live-voice/live-voice-photo.ts +68 -4
  43. package/src/live-voice/live-voice-session.ts +36 -2
  44. package/src/live-voice/protocol.ts +98 -1
  45. package/src/persistence/conversation-crud.ts +38 -0
  46. package/src/persistence/embeddings/embedding-backend.test.ts +162 -0
  47. package/src/persistence/embeddings/embedding-backend.ts +148 -11
  48. package/src/persistence/embeddings/embedding-openai.test.ts +113 -0
  49. package/src/persistence/embeddings/embedding-openai.ts +55 -4
  50. package/src/persistence/embeddings/embedding-types.test.ts +24 -0
  51. package/src/persistence/embeddings/embedding-types.ts +25 -1
  52. package/src/persistence/job-utils.ts +6 -2
  53. package/src/plugins/defaults/memory/jobs/__tests__/embed-concept-page.test.ts +1 -0
  54. package/src/plugins/defaults/memory/jobs/embed-concept-page.ts +11 -3
  55. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +20 -0
  56. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +3 -1
  57. package/src/plugins/defaults/memory/substrate/__tests__/reembed-job.test.ts +1 -0
  58. package/src/plugins/defaults/memory/v2/__tests__/backfill-jobs.test.ts +1 -0
  59. package/src/plugins/defaults/memory/v3/__tests__/section-dense-store.test.ts +82 -0
  60. package/src/plugins/defaults/memory/v3/section-dense-store.ts +9 -27
  61. package/src/providers/__tests__/provider-secret-catalog.test.ts +4 -0
  62. package/src/providers/openai/__tests__/chat-completions-extra-body.test.ts +51 -0
  63. package/src/providers/openai/chat-completions-provider.ts +24 -4
  64. package/src/providers/provider-secret-catalog.ts +11 -1
  65. package/src/providers/vellum/client.ts +14 -1
  66. package/src/providers/vellum/personality-directions.test.ts +163 -0
  67. package/src/providers/vellum/personality-directions.ts +120 -0
  68. package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +24 -0
  69. package/src/runtime/routes/__tests__/platform-credits-routes.test.ts +99 -5
  70. package/src/runtime/routes/conversation-query-routes.ts +36 -4
  71. package/src/runtime/routes/heartbeat-routes.ts +41 -53
  72. package/src/runtime/routes/platform-routes.ts +121 -24
  73. package/src/schedule/__tests__/schedule-timezone.test.ts +21 -3
  74. package/src/schedule/schedule-timezone.ts +25 -0
  75. package/src/tools/browser/__tests__/browser-status.test.ts +3 -0
  76. package/src/tools/browser/browser-execution.ts +117 -53
  77. package/src/tools/browser/browser-status-constants.ts +6 -6
  78. package/src/tools/capability-offer.test.ts +87 -0
  79. package/src/tools/capability-offer.ts +93 -0
@@ -26,7 +26,8 @@
26
26
  "./error": "./src/error.ts",
27
27
  "./reactions": "./src/reactions.ts",
28
28
  "./guardian-requests": "./src/guardian-requests.ts",
29
- "./platform-credential": "./src/platform-credential.ts"
29
+ "./platform-credential": "./src/platform-credential.ts",
30
+ "./plan-credit": "./src/plan-credit.ts"
30
31
  },
31
32
  "scripts": {
32
33
  "typecheck": "bunx tsc --noEmit",
@@ -0,0 +1,51 @@
1
+ import { describe, expect, test } from "bun:test";
2
+
3
+ import {
4
+ extraCreditUsd,
5
+ planCreditUsedFraction,
6
+ usageGrantRatio,
7
+ } from "../plan-credit.js";
8
+
9
+ describe("usageGrantRatio", () => {
10
+ test("reads the used share and clamps to 0..1", () => {
11
+ expect(usageGrantRatio(20, 9.1)).toBeCloseTo(0.545);
12
+ expect(usageGrantRatio(20, 0)).toBe(1);
13
+ expect(usageGrantRatio(20, 25)).toBe(0);
14
+ });
15
+
16
+ test("has no reading without both figures or with nothing granted", () => {
17
+ expect(usageGrantRatio(null, 5)).toBeNull();
18
+ expect(usageGrantRatio(20, null)).toBeNull();
19
+ expect(usageGrantRatio(0, 0)).toBeNull();
20
+ });
21
+ });
22
+
23
+ describe("planCreditUsedFraction", () => {
24
+ test("prefers the ratio whatever the plan", () => {
25
+ expect(planCreditUsedFraction(20, 9.1, "base")).toBeCloseTo(0.545);
26
+ expect(planCreditUsedFraction(20, 9.1, null)).toBeCloseTo(0.545);
27
+ });
28
+
29
+ test("treats a Pro plan with nothing granted as fully spent", () => {
30
+ expect(planCreditUsedFraction(0, 0, "pro")).toBe(1);
31
+ expect(planCreditUsedFraction(0, null, "pro")).toBe(1);
32
+ });
33
+
34
+ test("gives a base or unknown plan with nothing granted no reading", () => {
35
+ expect(planCreditUsedFraction(0, 0, "base")).toBeNull();
36
+ expect(planCreditUsedFraction(0, 0, null)).toBeNull();
37
+ expect(planCreditUsedFraction(null, null, "pro")).toBeNull();
38
+ });
39
+ });
40
+
41
+ describe("extraCreditUsd", () => {
42
+ test("nets unused grant credit out of the balance to the cent", () => {
43
+ expect(extraCreditUsd(42.17, 9.1)).toBe(33.07);
44
+ expect(extraCreditUsd(34.65, 9.1)).toBe(25.55);
45
+ });
46
+
47
+ test("never goes below zero", () => {
48
+ expect(extraCreditUsd(5, 9.1)).toBe(0);
49
+ expect(extraCreditUsd(-2.5, 0)).toBe(0);
50
+ });
51
+ });
@@ -28,6 +28,7 @@ export * from "./rpc.js";
28
28
  export * from "./trust-rules.js";
29
29
  export * from "./ingress.js";
30
30
  export * from "./no-response.js";
31
+ export * from "./plan-credit.js";
31
32
  export * from "./platform-credential.js";
32
33
  export * from "./remote-web-pairing.js";
33
34
  export * from "./twilio-ingress.js";
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Plan-credit derivations shared by the assistant runtime's `platform credits`
3
+ * route and the web client's usage meter, so both read the billing summary's
4
+ * grant figures the same way and can never quote different readings.
5
+ */
6
+
7
+ export type BillingPlanId = "base" | "pro";
8
+
9
+ function clamp01(value: number): number {
10
+ if (!Number.isFinite(value) || value < 0) {
11
+ return 0;
12
+ }
13
+ return value > 1 ? 1 : value;
14
+ }
15
+
16
+ /**
17
+ * How much of the usage credit an account was granted it has already used:
18
+ * the granted total less what is still unused, over that total. The initial
19
+ * $5 grant burns 0 to 100% as it is spent, and a further grant grows the total
20
+ * so the bar drops back. Null when nothing was ever granted, or when the
21
+ * platform reports neither figure, which has no honest reading rather than a
22
+ * full or empty bar.
23
+ */
24
+ export function usageGrantRatio(
25
+ totalUsd: number | null,
26
+ availableUsd: number | null,
27
+ ): number | null {
28
+ if (totalUsd == null || availableUsd == null || totalUsd <= 0) {
29
+ return null;
30
+ }
31
+ return clamp01((totalUsd - availableUsd) / totalUsd);
32
+ }
33
+
34
+ /**
35
+ * The plan-credit reading with the plan's fallback applied. The grant figures
36
+ * count only unexpired grants, so a Pro subscription whose grants total
37
+ * nothing has used or expired everything it was granted (a full bar, with
38
+ * nothing scheduled to refill it), while a base plan in that position was
39
+ * never granted anything (no reading). An unknown plan gets the ratio when
40
+ * the figures allow one and no fallback otherwise.
41
+ */
42
+ export function planCreditUsedFraction(
43
+ totalUsd: number | null,
44
+ availableUsd: number | null,
45
+ planId: BillingPlanId | null,
46
+ ): number | null {
47
+ const ratio = usageGrantRatio(totalUsd, availableUsd);
48
+ if (ratio != null) {
49
+ return ratio;
50
+ }
51
+ if (planId === "pro" && totalUsd != null && totalUsd <= 0) {
52
+ return 1;
53
+ }
54
+ return null;
55
+ }
56
+
57
+ /**
58
+ * Credit bought or earned on top of the plan-included grants: the balance less
59
+ * whatever is still unused on those grants, never below zero, to the cent.
60
+ */
61
+ export function extraCreditUsd(
62
+ balanceUsd: number,
63
+ availableUsd: number,
64
+ ): number {
65
+ return Math.round(Math.max(0, balanceUsd - availableUsd) * 100) / 100;
66
+ }
@@ -26,7 +26,8 @@
26
26
  "./error": "./src/error.ts",
27
27
  "./reactions": "./src/reactions.ts",
28
28
  "./guardian-requests": "./src/guardian-requests.ts",
29
- "./platform-credential": "./src/platform-credential.ts"
29
+ "./platform-credential": "./src/platform-credential.ts",
30
+ "./plan-credit": "./src/plan-credit.ts"
30
31
  },
31
32
  "scripts": {
32
33
  "typecheck": "bunx tsc --noEmit",
@@ -0,0 +1,51 @@
1
+ import { describe, expect, test } from "bun:test";
2
+
3
+ import {
4
+ extraCreditUsd,
5
+ planCreditUsedFraction,
6
+ usageGrantRatio,
7
+ } from "../plan-credit.js";
8
+
9
+ describe("usageGrantRatio", () => {
10
+ test("reads the used share and clamps to 0..1", () => {
11
+ expect(usageGrantRatio(20, 9.1)).toBeCloseTo(0.545);
12
+ expect(usageGrantRatio(20, 0)).toBe(1);
13
+ expect(usageGrantRatio(20, 25)).toBe(0);
14
+ });
15
+
16
+ test("has no reading without both figures or with nothing granted", () => {
17
+ expect(usageGrantRatio(null, 5)).toBeNull();
18
+ expect(usageGrantRatio(20, null)).toBeNull();
19
+ expect(usageGrantRatio(0, 0)).toBeNull();
20
+ });
21
+ });
22
+
23
+ describe("planCreditUsedFraction", () => {
24
+ test("prefers the ratio whatever the plan", () => {
25
+ expect(planCreditUsedFraction(20, 9.1, "base")).toBeCloseTo(0.545);
26
+ expect(planCreditUsedFraction(20, 9.1, null)).toBeCloseTo(0.545);
27
+ });
28
+
29
+ test("treats a Pro plan with nothing granted as fully spent", () => {
30
+ expect(planCreditUsedFraction(0, 0, "pro")).toBe(1);
31
+ expect(planCreditUsedFraction(0, null, "pro")).toBe(1);
32
+ });
33
+
34
+ test("gives a base or unknown plan with nothing granted no reading", () => {
35
+ expect(planCreditUsedFraction(0, 0, "base")).toBeNull();
36
+ expect(planCreditUsedFraction(0, 0, null)).toBeNull();
37
+ expect(planCreditUsedFraction(null, null, "pro")).toBeNull();
38
+ });
39
+ });
40
+
41
+ describe("extraCreditUsd", () => {
42
+ test("nets unused grant credit out of the balance to the cent", () => {
43
+ expect(extraCreditUsd(42.17, 9.1)).toBe(33.07);
44
+ expect(extraCreditUsd(34.65, 9.1)).toBe(25.55);
45
+ });
46
+
47
+ test("never goes below zero", () => {
48
+ expect(extraCreditUsd(5, 9.1)).toBe(0);
49
+ expect(extraCreditUsd(-2.5, 0)).toBe(0);
50
+ });
51
+ });
@@ -28,6 +28,7 @@ export * from "./rpc.js";
28
28
  export * from "./trust-rules.js";
29
29
  export * from "./ingress.js";
30
30
  export * from "./no-response.js";
31
+ export * from "./plan-credit.js";
31
32
  export * from "./platform-credential.js";
32
33
  export * from "./remote-web-pairing.js";
33
34
  export * from "./twilio-ingress.js";
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Plan-credit derivations shared by the assistant runtime's `platform credits`
3
+ * route and the web client's usage meter, so both read the billing summary's
4
+ * grant figures the same way and can never quote different readings.
5
+ */
6
+
7
+ export type BillingPlanId = "base" | "pro";
8
+
9
+ function clamp01(value: number): number {
10
+ if (!Number.isFinite(value) || value < 0) {
11
+ return 0;
12
+ }
13
+ return value > 1 ? 1 : value;
14
+ }
15
+
16
+ /**
17
+ * How much of the usage credit an account was granted it has already used:
18
+ * the granted total less what is still unused, over that total. The initial
19
+ * $5 grant burns 0 to 100% as it is spent, and a further grant grows the total
20
+ * so the bar drops back. Null when nothing was ever granted, or when the
21
+ * platform reports neither figure, which has no honest reading rather than a
22
+ * full or empty bar.
23
+ */
24
+ export function usageGrantRatio(
25
+ totalUsd: number | null,
26
+ availableUsd: number | null,
27
+ ): number | null {
28
+ if (totalUsd == null || availableUsd == null || totalUsd <= 0) {
29
+ return null;
30
+ }
31
+ return clamp01((totalUsd - availableUsd) / totalUsd);
32
+ }
33
+
34
+ /**
35
+ * The plan-credit reading with the plan's fallback applied. The grant figures
36
+ * count only unexpired grants, so a Pro subscription whose grants total
37
+ * nothing has used or expired everything it was granted (a full bar, with
38
+ * nothing scheduled to refill it), while a base plan in that position was
39
+ * never granted anything (no reading). An unknown plan gets the ratio when
40
+ * the figures allow one and no fallback otherwise.
41
+ */
42
+ export function planCreditUsedFraction(
43
+ totalUsd: number | null,
44
+ availableUsd: number | null,
45
+ planId: BillingPlanId | null,
46
+ ): number | null {
47
+ const ratio = usageGrantRatio(totalUsd, availableUsd);
48
+ if (ratio != null) {
49
+ return ratio;
50
+ }
51
+ if (planId === "pro" && totalUsd != null && totalUsd <= 0) {
52
+ return 1;
53
+ }
54
+ return null;
55
+ }
56
+
57
+ /**
58
+ * Credit bought or earned on top of the plan-included grants: the balance less
59
+ * whatever is still unused on those grants, never below zero, to the cent.
60
+ */
61
+ export function extraCreditUsd(
62
+ balanceUsd: number,
63
+ availableUsd: number,
64
+ ): number {
65
+ return Math.round(Math.max(0, balanceUsd - availableUsd) * 100) / 100;
66
+ }
@@ -26,7 +26,8 @@
26
26
  "./error": "./src/error.ts",
27
27
  "./reactions": "./src/reactions.ts",
28
28
  "./guardian-requests": "./src/guardian-requests.ts",
29
- "./platform-credential": "./src/platform-credential.ts"
29
+ "./platform-credential": "./src/platform-credential.ts",
30
+ "./plan-credit": "./src/plan-credit.ts"
30
31
  },
31
32
  "scripts": {
32
33
  "typecheck": "bunx tsc --noEmit",
@@ -0,0 +1,51 @@
1
+ import { describe, expect, test } from "bun:test";
2
+
3
+ import {
4
+ extraCreditUsd,
5
+ planCreditUsedFraction,
6
+ usageGrantRatio,
7
+ } from "../plan-credit.js";
8
+
9
+ describe("usageGrantRatio", () => {
10
+ test("reads the used share and clamps to 0..1", () => {
11
+ expect(usageGrantRatio(20, 9.1)).toBeCloseTo(0.545);
12
+ expect(usageGrantRatio(20, 0)).toBe(1);
13
+ expect(usageGrantRatio(20, 25)).toBe(0);
14
+ });
15
+
16
+ test("has no reading without both figures or with nothing granted", () => {
17
+ expect(usageGrantRatio(null, 5)).toBeNull();
18
+ expect(usageGrantRatio(20, null)).toBeNull();
19
+ expect(usageGrantRatio(0, 0)).toBeNull();
20
+ });
21
+ });
22
+
23
+ describe("planCreditUsedFraction", () => {
24
+ test("prefers the ratio whatever the plan", () => {
25
+ expect(planCreditUsedFraction(20, 9.1, "base")).toBeCloseTo(0.545);
26
+ expect(planCreditUsedFraction(20, 9.1, null)).toBeCloseTo(0.545);
27
+ });
28
+
29
+ test("treats a Pro plan with nothing granted as fully spent", () => {
30
+ expect(planCreditUsedFraction(0, 0, "pro")).toBe(1);
31
+ expect(planCreditUsedFraction(0, null, "pro")).toBe(1);
32
+ });
33
+
34
+ test("gives a base or unknown plan with nothing granted no reading", () => {
35
+ expect(planCreditUsedFraction(0, 0, "base")).toBeNull();
36
+ expect(planCreditUsedFraction(0, 0, null)).toBeNull();
37
+ expect(planCreditUsedFraction(null, null, "pro")).toBeNull();
38
+ });
39
+ });
40
+
41
+ describe("extraCreditUsd", () => {
42
+ test("nets unused grant credit out of the balance to the cent", () => {
43
+ expect(extraCreditUsd(42.17, 9.1)).toBe(33.07);
44
+ expect(extraCreditUsd(34.65, 9.1)).toBe(25.55);
45
+ });
46
+
47
+ test("never goes below zero", () => {
48
+ expect(extraCreditUsd(5, 9.1)).toBe(0);
49
+ expect(extraCreditUsd(-2.5, 0)).toBe(0);
50
+ });
51
+ });
@@ -28,6 +28,7 @@ export * from "./rpc.js";
28
28
  export * from "./trust-rules.js";
29
29
  export * from "./ingress.js";
30
30
  export * from "./no-response.js";
31
+ export * from "./plan-credit.js";
31
32
  export * from "./platform-credential.js";
32
33
  export * from "./remote-web-pairing.js";
33
34
  export * from "./twilio-ingress.js";
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Plan-credit derivations shared by the assistant runtime's `platform credits`
3
+ * route and the web client's usage meter, so both read the billing summary's
4
+ * grant figures the same way and can never quote different readings.
5
+ */
6
+
7
+ export type BillingPlanId = "base" | "pro";
8
+
9
+ function clamp01(value: number): number {
10
+ if (!Number.isFinite(value) || value < 0) {
11
+ return 0;
12
+ }
13
+ return value > 1 ? 1 : value;
14
+ }
15
+
16
+ /**
17
+ * How much of the usage credit an account was granted it has already used:
18
+ * the granted total less what is still unused, over that total. The initial
19
+ * $5 grant burns 0 to 100% as it is spent, and a further grant grows the total
20
+ * so the bar drops back. Null when nothing was ever granted, or when the
21
+ * platform reports neither figure, which has no honest reading rather than a
22
+ * full or empty bar.
23
+ */
24
+ export function usageGrantRatio(
25
+ totalUsd: number | null,
26
+ availableUsd: number | null,
27
+ ): number | null {
28
+ if (totalUsd == null || availableUsd == null || totalUsd <= 0) {
29
+ return null;
30
+ }
31
+ return clamp01((totalUsd - availableUsd) / totalUsd);
32
+ }
33
+
34
+ /**
35
+ * The plan-credit reading with the plan's fallback applied. The grant figures
36
+ * count only unexpired grants, so a Pro subscription whose grants total
37
+ * nothing has used or expired everything it was granted (a full bar, with
38
+ * nothing scheduled to refill it), while a base plan in that position was
39
+ * never granted anything (no reading). An unknown plan gets the ratio when
40
+ * the figures allow one and no fallback otherwise.
41
+ */
42
+ export function planCreditUsedFraction(
43
+ totalUsd: number | null,
44
+ availableUsd: number | null,
45
+ planId: BillingPlanId | null,
46
+ ): number | null {
47
+ const ratio = usageGrantRatio(totalUsd, availableUsd);
48
+ if (ratio != null) {
49
+ return ratio;
50
+ }
51
+ if (planId === "pro" && totalUsd != null && totalUsd <= 0) {
52
+ return 1;
53
+ }
54
+ return null;
55
+ }
56
+
57
+ /**
58
+ * Credit bought or earned on top of the plan-included grants: the balance less
59
+ * whatever is still unused on those grants, never below zero, to the cent.
60
+ */
61
+ export function extraCreditUsd(
62
+ balanceUsd: number,
63
+ availableUsd: number,
64
+ ): number {
65
+ return Math.round(Math.max(0, balanceUsd - availableUsd) * 100) / 100;
66
+ }
package/openapi.yaml CHANGED
@@ -5102,7 +5102,7 @@ paths:
5102
5102
  put:
5103
5103
  operationId: config_embeddings_put
5104
5104
  summary: Set embedding config
5105
- description: Change the embedding provider and optionally model.
5105
+ description: Change the embedding provider, model, and optional custom endpoint.
5106
5106
  tags:
5107
5107
  - config
5108
5108
  requestBody:
@@ -5116,6 +5116,14 @@ paths:
5116
5116
  type: string
5117
5117
  model:
5118
5118
  type: string
5119
+ baseUrl:
5120
+ type: string
5121
+ dimensions:
5122
+ anyOf:
5123
+ - type: integer
5124
+ exclusiveMinimum: 0
5125
+ maximum: 9007199254740991
5126
+ - type: "null"
5119
5127
  required:
5120
5128
  - provider
5121
5129
  responses:
@@ -13745,6 +13753,13 @@ paths:
13745
13753
  anyOf:
13746
13754
  - type: string
13747
13755
  - type: "null"
13756
+ effectiveTimezone:
13757
+ anyOf:
13758
+ - type: string
13759
+ - type: "null"
13760
+ description:
13761
+ Timezone used for cron and active-hours evaluation after resolving heartbeat.timezone, then the user's
13762
+ configured or detected zone
13748
13763
  nextRunAt:
13749
13764
  anyOf:
13750
13765
  - type: number
@@ -13762,6 +13777,7 @@ paths:
13762
13777
  - activeHoursEnd
13763
13778
  - cronExpression
13764
13779
  - timezone
13780
+ - effectiveTimezone
13765
13781
  - nextRunAt
13766
13782
  - lastRunAt
13767
13783
  - success
@@ -13801,7 +13817,7 @@ paths:
13801
13817
  - type: string
13802
13818
  - type: "null"
13803
13819
  timezone:
13804
- description: Timezone for cron evaluation
13820
+ description: Timezone for cron and active-hours evaluation
13805
13821
  anyOf:
13806
13822
  - type: string
13807
13823
  - type: "null"
@@ -13833,6 +13849,13 @@ paths:
13833
13849
  anyOf:
13834
13850
  - type: string
13835
13851
  - type: "null"
13852
+ effectiveTimezone:
13853
+ anyOf:
13854
+ - type: string
13855
+ - type: "null"
13856
+ description:
13857
+ Timezone used for cron and active-hours evaluation after resolving heartbeat.timezone, then the user's
13858
+ configured or detected zone
13836
13859
  nextRunAt:
13837
13860
  anyOf:
13838
13861
  - type: number
@@ -13850,6 +13873,7 @@ paths:
13850
13873
  - activeHoursEnd
13851
13874
  - cronExpression
13852
13875
  - timezone
13876
+ - effectiveTimezone
13853
13877
  - nextRunAt
13854
13878
  - lastRunAt
13855
13879
  - success
@@ -20044,6 +20068,7 @@ paths:
20044
20068
  - openai
20045
20069
  - gemini
20046
20070
  - ollama
20071
+ - custom
20047
20072
  - type: "null"
20048
20073
  model:
20049
20074
  anyOf:
@@ -24668,12 +24693,13 @@ paths:
24668
24693
  /v1/platform/credits:
24669
24694
  get:
24670
24695
  operationId: platform_credits_get
24671
- summary: Get the organization's remaining credit balance and daily-limit state
24696
+ summary: Get the organization's credit balance, plan-credit usage, and daily-limit state
24672
24697
  description:
24673
24698
  "Fetches the org's settled, pending, and effective (remaining) credit balance in USD from the platform
24674
- billing summary, plus the daily-limit state: today's spend counted against the daily credit limit (which
24675
- excludes spend covered by plan-included credits, so it is not total spend), the limit itself, and the
24676
- low-balance warning state."
24699
+ billing summary, plus plan-included credit usage (remaining, total, and the used fraction shown by the in-app
24700
+ usage meter), extra credit bought or earned on top, credit expiring within 30 days, and the daily-limit state:
24701
+ today's spend counted against the daily credit limit (which excludes spend covered by plan-included credits, so
24702
+ it is not total spend), the limit itself, and the low-balance warning state."
24677
24703
  tags:
24678
24704
  - platform
24679
24705
  responses:
@@ -24724,6 +24750,56 @@ paths:
24724
24750
  low_balance_warning:
24725
24751
  type: boolean
24726
24752
  description: True when the balance is above zero but below the low-balance threshold and auto top-up is not enabled.
24753
+ plan_credit_remaining:
24754
+ anyOf:
24755
+ - type: number
24756
+ - type: "null"
24757
+ description:
24758
+ Unused credit (USD) remaining on the unexpired plan-included grants (initial credit, Pro credit bundle).
24759
+ Null when the platform did not report grant figures.
24760
+ plan_credit_total:
24761
+ anyOf:
24762
+ - type: number
24763
+ - type: "null"
24764
+ description:
24765
+ Total credit (USD) those plan-included grants were worth, net of refunds. Null when the platform did not
24766
+ report grant figures.
24767
+ plan_credit_used_fraction:
24768
+ anyOf:
24769
+ - type: number
24770
+ - type: "null"
24771
+ description:
24772
+ "Share of the plan-included credit already used, from 0 to 1: the same reading as the in-app usage meter. A
24773
+ Pro subscription whose unexpired grants total nothing reads as 1 (everything granted is used or
24774
+ expired). Null when there is no usable reading: grant figures missing, or a zero total on a base
24775
+ or unknown plan."
24776
+ plan_credits_spent:
24777
+ anyOf:
24778
+ - type: boolean
24779
+ - type: "null"
24780
+ description:
24781
+ True when the plan-included credit is used up or expired. Whether further managed usage is funded is
24782
+ extra_credit_remaining (zero means the organization is out of credit). Null when there is no
24783
+ plan-credit reading.
24784
+ extra_credit_remaining:
24785
+ anyOf:
24786
+ - type: number
24787
+ - type: "null"
24788
+ description:
24789
+ "Credit (USD) bought or earned on top of the plan-included grants: remaining minus plan_credit_remaining,
24790
+ floored at zero. Null when grant figures are missing."
24791
+ credits_expiring_soon:
24792
+ anyOf:
24793
+ - type: number
24794
+ - type: "null"
24795
+ description:
24796
+ Unexpired credit (USD) on grants that expire within the next 30 days. Null when the platform did not report
24797
+ it.
24798
+ next_credit_expiry_at:
24799
+ anyOf:
24800
+ - type: string
24801
+ - type: "null"
24802
+ description: Earliest upcoming expiry (ISO 8601) across grants that still hold credit, or null when none is scheduled.
24727
24803
  required:
24728
24804
  - remaining
24729
24805
  - settled
@@ -24737,6 +24813,13 @@ paths:
24737
24813
  - daily_limit_snoozed
24738
24814
  - low_balance_threshold
24739
24815
  - low_balance_warning
24816
+ - plan_credit_remaining
24817
+ - plan_credit_total
24818
+ - plan_credit_used_fraction
24819
+ - plan_credits_spent
24820
+ - extra_credit_remaining
24821
+ - credits_expiring_soon
24822
+ - next_credit_expiry_at
24740
24823
  additionalProperties: false
24741
24824
  /v1/platform/disconnect:
24742
24825
  post:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.11.9-dev.202609081913.93e93af",
3
+ "version": "0.11.9-dev.202609082126.a4f0fef",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {