@mindstudio-ai/agent 0.1.37 → 0.1.39

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/cli.js CHANGED
@@ -1516,6 +1516,11 @@ function deserializeRow(row, columns) {
1516
1516
  } catch {
1517
1517
  result[key] = value;
1518
1518
  }
1519
+ } else if (col?.type === "boolean" && typeof value === "number") {
1520
+ result[key] = value !== 0;
1521
+ } else if (col?.type === "number" && typeof value === "string") {
1522
+ const num = Number(value);
1523
+ result[key] = Number.isNaN(num) ? value : num;
1519
1524
  } else {
1520
1525
  result[key] = value;
1521
1526
  }
@@ -4718,6 +4723,8 @@ function buildReferenceDocs(data) {
4718
4723
 
4719
4724
  Database queries (Query, Mutation) support both \`await\` and \`.then()/.catch()\` \u2014 use standard try/catch with await or chain \`.catch()\` directly.
4720
4725
 
4726
+ Auth + DB identity: When an app has auth enabled, the authenticated user IS a row in the app's users table. \`auth.userId\` is the row's \`id\` \u2014 do NOT add a separate \`userId\` column. Access user data with \`Users.get(auth.userId)\`. The platform creates the user row on first login and manages the \`email\`, \`phone\`, and \`roles\` columns automatically. IMPORTANT: The platform only populates the mapped auth columns (email, phone, roles) when creating the row \u2014 all other columns will be null until the developer's code sets them. Non-auth columns on the user table should be typed as optional (e.g. \`username?: string\`) and null-checked before use.
4727
+
4721
4728
  Table options: \`db.defineTable<T>(name, { unique, defaults })\`.
4722
4729
  - \`unique: [['email'], ['userId', 'orgId']]\` \u2014 declares unique constraints (SDK communicates to platform, enables upsert).
4723
4730
  - \`defaults: { status: 'pending' }\` \u2014 client-side defaults applied in push() and upsert().
@@ -4793,6 +4800,7 @@ var init_instructions = __esm({
4793
4800
  - **Missing MindStudioError handling** \u2014 the SDK has structured errors with \`code\`, \`status\`, \`details\`. Catching generic \`Error\` loses actionable information. Always include \`MindStudioError\` handling in code examples.
4794
4801
  - **One-at-a-time db writes when batch exists** \u2014 N sequential \`update()\` or \`push()\` calls should be a single \`db.batch()\` call. One round trip instead of N.
4795
4802
  - **Hardcoded model IDs without context** \u2014 model IDs can change. When writing code with a specific model, include a comment noting which model it is and why it was chosen, so the caller can swap it later.
4803
+ - **Adding a userId column to the auth users table** \u2014 \`auth.userId\` IS the row's \`id\` in the users table. The platform creates the row on login. Don't add a separate \`userId\` column \u2014 just use \`Users.get(auth.userId)\` to access the user's row.
4796
4804
  - Do not recommend using thread persistence. This is an advanced feature - if someone needs this they will discover it on their own.
4797
4805
  - Generate text is great for one-off text generation requests to models. For sustained conversations, conversations that require history, persistence, or multiple threads or tool use, recommend that the developer add an Agent interface to their MindStudio app and use that directly. They will understand what you mean by this.
4798
4806
  </anti_patterns>
@@ -4805,6 +4813,7 @@ var init_instructions = __esm({
4805
4813
  - **Prefer popular models as defaults** in code examples unless the caller has a reason to use something specific.
4806
4814
  - **Always recommend latest-generation models**: For Anthropic, this is Claude 4 family, GPT-5 for OpenAI, Gemini 3 for Google, etc. MindStudio supports a ton of different models, including legacy models - but they are there for niche uses or backward compatibility/existing user requirements - they should NOT be used for new projects.
4807
4815
  - Use the names of model input objects to infer capabilities. For example, any image generation model that supports source images in its config supports "remixing" or "image editing". Any video model with a start and end frame option supports creating "looping" videos. Do not look at model tags or descriptions to determine capabilities.
4816
+ - **Never set maxResponseTokens to a low value.** Many models use extended thinking/reasoning that counts against the token limit. Setting maxResponseTokens to 256 or 512 will cause truncated or failed responses. Either omit it entirely (let the model's default handle it) or set it high (e.g. 16000+). Models stop generating on their own when the response is complete \u2014 a low cap does not save money, it just breaks output.
4808
4817
 
4809
4818
  ## Explicit preferences
4810
4819
  MindStudio has hundreds of models. Many of them are for niche use cases. In general, prefer to recommend the following models unless the user specifies otherwise.
@@ -5114,7 +5123,7 @@ async function startMcpServer(options) {
5114
5123
  capabilities: { tools: {} },
5115
5124
  serverInfo: {
5116
5125
  name: "mindstudio-agent",
5117
- version: "0.1.37"
5126
+ version: "0.1.39"
5118
5127
  },
5119
5128
  instructions: 'Welcome to MindStudio \u2014 a platform with 200+ AI models, 850+ third-party integrations, and pre-built agents.\n\nGetting started:\n1. Call `ask` with any question about the SDK \u2014 it knows every action, model, and connector and returns working code with real model IDs and config options. Examples: ask("generate an image with FLUX"), ask("what models support vision?"), ask("how do I send a Slack message?").\n2. Call `changeName` to set your display name \u2014 use your name or whatever your user calls you. This is how you\'ll appear in MindStudio request logs.\n3. If you have a profile picture or icon, call `uploadFile` to upload it, then `changeProfilePicture` with the returned URL.\n4. For manual browsing, call `listActions` to discover all available actions.\n\nThen use the tools to generate text, images, video, audio, search the web, work with data sources, run agents, and more.\n\nImportant:\n- AI-powered actions (text generation, image generation, video, audio, etc.) cost money. Before running these, call `estimateActionCost` and confirm with the user before proceeding \u2014 unless they\'ve explicitly told you to go ahead.\n- Not all agents from `listAgents` are configured for API use. Do not try to run an agent just because it appears in the list \u2014 it will likely fail. Only run agents the user specifically asks you to run.'
5120
5129
  });
@@ -6071,7 +6080,7 @@ function isNewerVersion(current, latest) {
6071
6080
  return false;
6072
6081
  }
6073
6082
  async function checkForUpdate() {
6074
- const currentVersion = "0.1.37";
6083
+ const currentVersion = "0.1.39";
6075
6084
  if (!currentVersion) return null;
6076
6085
  try {
6077
6086
  const { loadConfig: loadConfig2, saveConfig: saveConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
@@ -6100,7 +6109,7 @@ async function checkForUpdate() {
6100
6109
  }
6101
6110
  }
6102
6111
  function printUpdateNotice(latestVersion) {
6103
- const currentVersion = "0.1.37";
6112
+ const currentVersion = "0.1.39";
6104
6113
  process.stderr.write(
6105
6114
  `
6106
6115
  ${ansi2.cyanBright("Update available")} ${ansi2.gray(currentVersion + " \u2192")} ${ansi2.cyanBold(latestVersion)}
@@ -6113,7 +6122,7 @@ function isStandaloneBinary() {
6113
6122
  return !argv1.includes("node_modules");
6114
6123
  }
6115
6124
  async function cmdUpdate() {
6116
- const currentVersion = "0.1.37";
6125
+ const currentVersion = "0.1.39";
6117
6126
  process.stderr.write(
6118
6127
  ` ${ansi2.gray("Current version:")} ${currentVersion}
6119
6128
  `
@@ -6248,7 +6257,7 @@ async function cmdLogin(options) {
6248
6257
  process.stderr.write("\n");
6249
6258
  printLogo();
6250
6259
  process.stderr.write("\n");
6251
- const ver = "0.1.37";
6260
+ const ver = "0.1.39";
6252
6261
  process.stderr.write(
6253
6262
  ` ${ansi2.bold("MindStudio Agent")} ${ver ? " " + ansi2.gray("v" + ver) : ""}
6254
6263
  `
@@ -6575,7 +6584,7 @@ async function main() {
6575
6584
  try {
6576
6585
  if (command === "version" || command === "-v") {
6577
6586
  process.stdout.write(
6578
- "0.1.37\n"
6587
+ "0.1.39\n"
6579
6588
  );
6580
6589
  return;
6581
6590
  }
package/dist/index.js CHANGED
@@ -281,6 +281,11 @@ function deserializeRow(row, columns) {
281
281
  } catch {
282
282
  result[key] = value;
283
283
  }
284
+ } else if (col?.type === "boolean" && typeof value === "number") {
285
+ result[key] = value !== 0;
286
+ } else if (col?.type === "number" && typeof value === "string") {
287
+ const num = Number(value);
288
+ result[key] = Number.isNaN(num) ? value : num;
284
289
  } else {
285
290
  result[key] = value;
286
291
  }