@firstlovecenter/ai-chat 0.6.1 → 0.7.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.
@@ -152,6 +152,11 @@ type ChatMessage = {
152
152
  * `rolePrompt` is the persona the assistant adopts. When non-null, it
153
153
  * takes precedence over the host's static `rolePrompt` configureAiChat
154
154
  * option, so admins can edit live in the settings UI.
155
+ *
156
+ * `gcpProjectId` is an admin-editable override for the GCP project that
157
+ * every Vertex API call targets. When non-null, it takes precedence over
158
+ * the host's static `VertexPort.projectId` so admins can flip projects
159
+ * (staging ↔ prod, multi-tenant) without redeploying.
155
160
  */
156
161
  type AiSettings = {
157
162
  toolProvider: string;
@@ -159,6 +164,7 @@ type AiSettings = {
159
164
  chatInterface: string;
160
165
  maxOutputTokens: number;
161
166
  rolePrompt: string | null;
167
+ gcpProjectId: string | null;
162
168
  updatedAt: Date | null;
163
169
  updatedByUserId: number | null;
164
170
  };
@@ -255,6 +261,8 @@ type AiSettingsPatch = {
255
261
  maxOutputTokens?: number;
256
262
  /** Pass `null` to clear back to the host's static fallback. */
257
263
  rolePrompt?: string | null;
264
+ /** Pass `null` to clear back to the host's static VertexPort.projectId. */
265
+ gcpProjectId?: string | null;
258
266
  };
259
267
  /**
260
268
  * The whole reason this package is ORM-agnostic. Implemented by:
@@ -152,6 +152,11 @@ type ChatMessage = {
152
152
  * `rolePrompt` is the persona the assistant adopts. When non-null, it
153
153
  * takes precedence over the host's static `rolePrompt` configureAiChat
154
154
  * option, so admins can edit live in the settings UI.
155
+ *
156
+ * `gcpProjectId` is an admin-editable override for the GCP project that
157
+ * every Vertex API call targets. When non-null, it takes precedence over
158
+ * the host's static `VertexPort.projectId` so admins can flip projects
159
+ * (staging ↔ prod, multi-tenant) without redeploying.
155
160
  */
156
161
  type AiSettings = {
157
162
  toolProvider: string;
@@ -159,6 +164,7 @@ type AiSettings = {
159
164
  chatInterface: string;
160
165
  maxOutputTokens: number;
161
166
  rolePrompt: string | null;
167
+ gcpProjectId: string | null;
162
168
  updatedAt: Date | null;
163
169
  updatedByUserId: number | null;
164
170
  };
@@ -255,6 +261,8 @@ type AiSettingsPatch = {
255
261
  maxOutputTokens?: number;
256
262
  /** Pass `null` to clear back to the host's static fallback. */
257
263
  rolePrompt?: string | null;
264
+ /** Pass `null` to clear back to the host's static VertexPort.projectId. */
265
+ gcpProjectId?: string | null;
258
266
  };
259
267
  /**
260
268
  * The whole reason this package is ORM-agnostic. Implemented by:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firstlovecenter/ai-chat",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "Reusable AI chat module: agent loop, Vertex providers (Claude + Gemini), narrators, persistence schema, and chat UI components. Host injects auth, scope, tools, and credentials via configureAiChat().",
5
5
  "license": "MIT",
6
6
  "author": "First Love Church",
@@ -54,6 +54,11 @@ model AiSettings {
54
54
  toolProvider String @default("claude") @map("tool_provider") @db.VarChar(32)
55
55
  gcpLocation String @default("us-east5") @map("gcp_location") @db.VarChar(32)
56
56
  chatInterface String @default("custom") @map("chat_interface") @db.VarChar(32)
57
+ // Admin-editable GCP project override. NULL means the host's static
58
+ // configureAiChat({ vertex: { projectId } }) is used. Lets admins flip
59
+ // the active GCP project without redeploying — useful for staging/prod
60
+ // migrations or running multiple FLC tenants from one runtime.
61
+ gcpProjectId String? @map("gcp_project_id") @db.VarChar(64)
57
62
  // Caps the per-turn output budget for both the agent loop and the prose
58
63
  // narrator. Bump well past 4096 for reasoning models — internal thinking
59
64
  // tokens are charged against this.