@bike4mind/cli 0.2.15 → 0.2.16-cj-GH6131.17608

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.
File without changes
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-LL5J3SVB.js";
4
+ } from "./chunk-KGX2FFHZ.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/artifactExtractor.js
7
7
  var ARTIFACT_TAG_REGEX = /<artifact\s+(.*?)>([\s\S]*?)<\/artifact>/gi;
File without changes
File without changes
File without changes
@@ -6,12 +6,12 @@ import {
6
6
  getSettingsByNames,
7
7
  obfuscateApiKey,
8
8
  secureParameters
9
- } from "./chunk-M2CSCYOY.js";
9
+ } from "./chunk-VGF6M3GC.js";
10
10
  import {
11
11
  ApiKeyType,
12
12
  MementoTier,
13
13
  isSupportedEmbeddingModel
14
- } from "./chunk-LL5J3SVB.js";
14
+ } from "./chunk-KGX2FFHZ.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/apiKeyService/get.js
17
17
  import { z } from "zod";
@@ -4491,10 +4491,11 @@ function formatPageResponse(page, siteUrl) {
4491
4491
  link = `${baseUrl}/pages/${page.id}`;
4492
4492
  }
4493
4493
  return {
4494
- id: page.id,
4494
+ pageId: page.id,
4495
4495
  title: page.title,
4496
4496
  status: page.status,
4497
4497
  spaceId: page.spaceId,
4498
+ spaceKey: page.space?.key,
4498
4499
  body: stripHtmlAndNormalizeWhitespace(page.body?.storage?.value || page.body?.view?.value),
4499
4500
  version: page.version?.number,
4500
4501
  parentId: page.parentId,
@@ -4564,7 +4565,7 @@ function formatPageList(pagesResponse, siteUrl) {
4564
4565
  return pagesResponse;
4565
4566
  }
4566
4567
  const results = Array.isArray(pagesResponse.results) ? pagesResponse.results.map((page) => ({
4567
- id: page.id,
4568
+ pageId: page.id,
4568
4569
  title: page.title,
4569
4570
  status: page.status,
4570
4571
  parentId: page.parentId,
File without changes
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BadRequestError,
4
4
  secureParameters
5
- } from "./chunk-M2CSCYOY.js";
5
+ } from "./chunk-VGF6M3GC.js";
6
6
  import {
7
7
  CompletionApiUsageTransaction,
8
8
  GenericCreditDeductTransaction,
@@ -11,7 +11,7 @@ import {
11
11
  RealtimeVoiceUsageTransaction,
12
12
  TextGenerationUsageTransaction,
13
13
  TransferCreditTransaction
14
- } from "./chunk-LL5J3SVB.js";
14
+ } from "./chunk-KGX2FFHZ.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/creditService/subtractCredits.js
17
17
  import { z } from "zod";
@@ -13,7 +13,7 @@ import {
13
13
  dayjsConfig_default,
14
14
  extractSnippetMeta,
15
15
  settingsMap
16
- } from "./chunk-LL5J3SVB.js";
16
+ } from "./chunk-KGX2FFHZ.js";
17
17
  import {
18
18
  Logger
19
19
  } from "./chunk-OCYRD7D6.js";
@@ -8732,8 +8732,20 @@ var QuestMaster = class {
8732
8732
  * @param prompt - The user's request to break down into quests
8733
8733
  * @returns The parsed quest plan result
8734
8734
  */
8735
- async createQuestPlanWithFunctionCalling(model, prompt, retryCount = 0) {
8735
+ async createQuestPlanWithFunctionCalling(model, prompt, planOptions = {}, retryCount = 0) {
8736
8736
  const MAX_RETRIES = 2;
8737
+ const { history = [] } = planOptions;
8738
+ const hasHistory = history.length > 0;
8739
+ const historyContext = hasHistory ? `
8740
+
8741
+ CONVERSATION CONTEXT:
8742
+ You have access to the user's conversation history. Use this context to:
8743
+ - Understand what the user has already discussed or learned
8744
+ - Reference previous decisions or preferences mentioned
8745
+ - Build upon prior context when creating quests
8746
+ - Avoid suggesting steps the user has already completed
8747
+
8748
+ The conversation history is included before the user's current request.` : "";
8737
8749
  const messages = [
8738
8750
  {
8739
8751
  role: "system",
@@ -8759,8 +8771,10 @@ TITLE REQUIREMENTS (CRITICAL):
8759
8771
  HANDLING VERBOSE INPUT:
8760
8772
  - When given detailed or verbose input, extract the core objective and key requirements
8761
8773
  - Do not try to incorporate every detail verbatim - summarize and structure appropriately
8762
- - Focus on actionable steps rather than preserving all user context`
8774
+ - Focus on actionable steps rather than preserving all user context${historyContext}`
8763
8775
  },
8776
+ // Include conversation history BEFORE the current user request
8777
+ ...history,
8764
8778
  { role: "user", content: prompt }
8765
8779
  ];
8766
8780
  const toolDef = {
@@ -8768,7 +8782,7 @@ HANDLING VERBOSE INPUT:
8768
8782
  // Not executed, just captured
8769
8783
  toolSchema: createQuestPlanToolSchema
8770
8784
  };
8771
- const options = {
8785
+ const completionOptions = {
8772
8786
  temperature: retryCount > 0 ? 0.5 : 0.7,
8773
8787
  // Lower temperature for structured JSON outputs; even lower on retries
8774
8788
  n: 1,
@@ -8784,7 +8798,7 @@ HANDLING VERBOSE INPUT:
8784
8798
  let functionResult = null;
8785
8799
  let lastError = null;
8786
8800
  try {
8787
- await this.llm.complete(model, messages, options, async (text, completionInfo) => {
8801
+ await this.llm.complete(model, messages, completionOptions, async (text, completionInfo) => {
8788
8802
  if (completionInfo?.toolsUsed?.length) {
8789
8803
  const toolCall = completionInfo.toolsUsed[0];
8790
8804
  if (toolCall.name === "create_quest_plan" && toolCall.arguments) {
@@ -8805,7 +8819,7 @@ HANDLING VERBOSE INPUT:
8805
8819
  if (!functionResult) {
8806
8820
  if (retryCount < MAX_RETRIES) {
8807
8821
  this.logger.warn(`GPT-5 did not return function call, retrying (attempt ${retryCount + 1}/${MAX_RETRIES})...`);
8808
- return this.createQuestPlanWithFunctionCalling(model, prompt, retryCount + 1);
8822
+ return this.createQuestPlanWithFunctionCalling(model, prompt, planOptions, retryCount + 1);
8809
8823
  }
8810
8824
  throw lastError || new Error("GPT-5 did not call create_quest_plan function after retries");
8811
8825
  }
@@ -8814,7 +8828,7 @@ HANDLING VERBOSE INPUT:
8814
8828
  if (questsWithoutSubquests.length > 0) {
8815
8829
  if (retryCount < MAX_RETRIES) {
8816
8830
  this.logger.warn(`Some quests missing subquests: ${questsWithoutSubquests.map((q) => q.id).join(", ")}, retrying...`);
8817
- return this.createQuestPlanWithFunctionCalling(model, prompt, retryCount + 1);
8831
+ return this.createQuestPlanWithFunctionCalling(model, prompt, planOptions, retryCount + 1);
8818
8832
  } else {
8819
8833
  this.logger.warn(`Returning quest plan with ${questsWithoutSubquests.length} quests missing subquests after max retries (${MAX_RETRIES}): ${questsWithoutSubquests.map((q) => q.id).join(", ")}`);
8820
8834
  }
@@ -8826,22 +8840,35 @@ HANDLING VERBOSE INPUT:
8826
8840
  });
8827
8841
  return result;
8828
8842
  }
8829
- async createQuestPlan(model, prompt) {
8843
+ async createQuestPlan(model, prompt, options = {}) {
8830
8844
  try {
8831
8845
  if (!this.quest) {
8832
8846
  throw new Error("No quest context available");
8833
8847
  }
8848
+ const { history = [] } = options;
8849
+ this.logger.log(`Creating quest plan with ${history.length} history messages for context`);
8834
8850
  await this.onStatusUpdate(this.quest, "Creating quest plan...");
8835
8851
  if (isGPT5ModelWithToolSupport(model)) {
8836
8852
  this.logger.log(`Using function calling approach for GPT-5 model: ${model}`);
8837
8853
  try {
8838
- const result = await this.createQuestPlanWithFunctionCalling(model, prompt);
8854
+ const result = await this.createQuestPlanWithFunctionCalling(model, prompt, options);
8839
8855
  await this.processQuestPlan(result);
8840
8856
  return;
8841
8857
  } catch (functionCallError) {
8842
8858
  this.logger.error("Function calling failed, falling back to HTML approach:", functionCallError);
8843
8859
  }
8844
8860
  }
8861
+ const hasHistory = history.length > 0;
8862
+ const historyContext = hasHistory ? `
8863
+
8864
+ CONVERSATION CONTEXT:
8865
+ You have access to the user's conversation history. Use this context to:
8866
+ - Understand what the user has already discussed or learned
8867
+ - Reference previous decisions or preferences mentioned
8868
+ - Build upon prior context when creating quests
8869
+ - Avoid suggesting steps the user has already completed
8870
+
8871
+ The conversation history is included before the user's current request.` : "";
8845
8872
  const messages = [
8846
8873
  {
8847
8874
  role: "system",
@@ -8904,11 +8931,13 @@ Remember:
8904
8931
  - Each quest and subquest must have a unique, descriptive ID
8905
8932
  - Keep JSON properly formatted
8906
8933
  - The client UI depends on this exact structure
8907
- - Never return a response without proper subquests`
8934
+ - Never return a response without proper subquests${historyContext}`
8908
8935
  },
8936
+ // Include conversation history BEFORE the current user request
8937
+ ...history,
8909
8938
  { role: "user", content: prompt }
8910
8939
  ];
8911
- const options = {
8940
+ const completionOptions = {
8912
8941
  temperature: 0.9,
8913
8942
  n: 1,
8914
8943
  stream: false
@@ -9007,7 +9036,7 @@ Remember:
9007
9036
  return tryGenerateQuestPlan(retryMessages, retryOptions, retryCount + 1);
9008
9037
  }
9009
9038
  };
9010
- return await tryGenerateQuestPlan(messages, options);
9039
+ return await tryGenerateQuestPlan(messages, completionOptions);
9011
9040
  } catch (error) {
9012
9041
  this.logger.error("Error in createQuestPlan:", error);
9013
9042
  throw error;
@@ -10856,6 +10885,53 @@ async function withRetry(fn, options = {}) {
10856
10885
  }
10857
10886
  }
10858
10887
 
10888
+ // ../../b4m-core/packages/utils/dist/src/voiceHistory.js
10889
+ function truncateText(text, maxLength) {
10890
+ if (text.length <= maxLength)
10891
+ return text;
10892
+ return text.slice(0, maxLength - 3) + "...";
10893
+ }
10894
+ function formatMessage(role, content, maxChars) {
10895
+ const truncated = truncateText(content.trim(), maxChars);
10896
+ return `${role === "user" ? "User" : "Assistant"}: ${truncated}`;
10897
+ }
10898
+ function formatVoiceHistory(historyItems, options = {}) {
10899
+ const { maxChars = 3e3, recentMessageCount = 10, maxCharsPerMessage = 300 } = options;
10900
+ if (!historyItems || historyItems.length === 0) {
10901
+ return "";
10902
+ }
10903
+ const recentItems = historyItems.slice(-recentMessageCount);
10904
+ const lines = [
10905
+ "\n\nCONVERSATION CONTEXT:",
10906
+ "You are continuing a conversation with this user. Here is the recent chat history:",
10907
+ ""
10908
+ ];
10909
+ for (const item of recentItems) {
10910
+ if (item.prompt) {
10911
+ lines.push(formatMessage("user", item.prompt, maxCharsPerMessage));
10912
+ }
10913
+ if (item.replies && Array.isArray(item.replies)) {
10914
+ const validReply = item.replies.find((reply) => !reply.trim().startsWith("<think>"));
10915
+ if (validReply) {
10916
+ lines.push(formatMessage("assistant", validReply, maxCharsPerMessage));
10917
+ }
10918
+ }
10919
+ }
10920
+ lines.push("");
10921
+ lines.push("Use this context to maintain continuity. Reference previous topics naturally when relevant.");
10922
+ let result = lines.join("\n");
10923
+ if (result.length > maxChars) {
10924
+ result = truncateText(result, maxChars);
10925
+ }
10926
+ return result;
10927
+ }
10928
+ function buildVoiceInstructions(baseInstructions, historyContext) {
10929
+ if (!historyContext) {
10930
+ return baseInstructions;
10931
+ }
10932
+ return `${baseInstructions}${historyContext}`;
10933
+ }
10934
+
10859
10935
  export {
10860
10936
  BaseStorage,
10861
10937
  S3Storage,
@@ -10983,5 +11059,7 @@ export {
10983
11059
  isRetryableError,
10984
11060
  getRetryAfterMs,
10985
11061
  calculateRetryDelay,
10986
- withRetry
11062
+ withRetry,
11063
+ formatVoiceHistory,
11064
+ buildVoiceInstructions
10987
11065
  };
@@ -7,11 +7,11 @@ import {
7
7
  getSettingsMap,
8
8
  getSettingsValue,
9
9
  secureParameters
10
- } from "./chunk-M2CSCYOY.js";
10
+ } from "./chunk-VGF6M3GC.js";
11
11
  import {
12
12
  KnowledgeType,
13
13
  SupportedFabFileMimeTypes
14
- } from "./chunk-LL5J3SVB.js";
14
+ } from "./chunk-KGX2FFHZ.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/fabFileService/create.js
17
17
  import { z } from "zod";
File without changes
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  createFabFile,
4
4
  createFabFileSchema
5
- } from "./chunk-O7G3G3FD.js";
6
- import "./chunk-M2CSCYOY.js";
7
- import "./chunk-LL5J3SVB.js";
5
+ } from "./chunk-WGSIOHQC.js";
6
+ import "./chunk-VGF6M3GC.js";
7
+ import "./chunk-KGX2FFHZ.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  createFabFile,
File without changes
package/dist/index.js CHANGED
@@ -4,12 +4,12 @@ import {
4
4
  getEffectiveApiKey,
5
5
  getOpenWeatherKey,
6
6
  getSerperKey
7
- } from "./chunk-ECSELHYP.js";
7
+ } from "./chunk-GJ3EQRX5.js";
8
8
  import {
9
9
  ConfigStore
10
10
  } from "./chunk-FFJX3FF3.js";
11
- import "./chunk-I3CPL4SJ.js";
12
- import "./chunk-O7G3G3FD.js";
11
+ import "./chunk-PJQUVSHP.js";
12
+ import "./chunk-WGSIOHQC.js";
13
13
  import {
14
14
  BFLImageService,
15
15
  BaseStorage,
@@ -21,7 +21,7 @@ import {
21
21
  OpenAIBackend,
22
22
  OpenAIImageService,
23
23
  XAIImageService
24
- } from "./chunk-M2CSCYOY.js";
24
+ } from "./chunk-VGF6M3GC.js";
25
25
  import {
26
26
  AiEvents,
27
27
  ApiKeyEvents,
@@ -75,7 +75,7 @@ import {
75
75
  XAI_IMAGE_MODELS,
76
76
  b4mLLMTools,
77
77
  getMcpProviderMetadata
78
- } from "./chunk-LL5J3SVB.js";
78
+ } from "./chunk-KGX2FFHZ.js";
79
79
  import {
80
80
  Logger
81
81
  } from "./chunk-OCYRD7D6.js";
@@ -11430,7 +11430,7 @@ import { isAxiosError as isAxiosError2 } from "axios";
11430
11430
  // package.json
11431
11431
  var package_default = {
11432
11432
  name: "@bike4mind/cli",
11433
- version: "0.2.15",
11433
+ version: "0.2.16-cj-GH6131.17608+dcdc1e087",
11434
11434
  type: "module",
11435
11435
  description: "Interactive CLI tool for Bike4Mind with ReAct agents",
11436
11436
  license: "UNLICENSED",
@@ -11536,11 +11536,11 @@ var package_default = {
11536
11536
  zustand: "^4.5.4"
11537
11537
  },
11538
11538
  devDependencies: {
11539
- "@bike4mind/agents": "workspace:*",
11540
- "@bike4mind/common": "workspace:*",
11541
- "@bike4mind/mcp": "workspace:*",
11542
- "@bike4mind/services": "workspace:*",
11543
- "@bike4mind/utils": "workspace:*",
11539
+ "@bike4mind/agents": "0.1.0",
11540
+ "@bike4mind/common": "2.42.2-cj-GH6131.17608+dcdc1e087",
11541
+ "@bike4mind/mcp": "1.22.2-cj-GH6131.17608+dcdc1e087",
11542
+ "@bike4mind/services": "2.39.1-cj-GH6131.17608+dcdc1e087",
11543
+ "@bike4mind/utils": "2.1.10-cj-GH6131.17608+dcdc1e087",
11544
11544
  "@types/better-sqlite3": "^7.6.13",
11545
11545
  "@types/diff": "^5.0.9",
11546
11546
  "@types/jsonwebtoken": "^9.0.4",
@@ -11553,7 +11553,8 @@ var package_default = {
11553
11553
  tsx: "^4.21.0",
11554
11554
  typescript: "^5.9.3",
11555
11555
  vitest: "^3.2.4"
11556
- }
11556
+ },
11557
+ gitHead: "dcdc1e087ec6b9dd112d1eeab86e351ebe5ac881"
11557
11558
  };
11558
11559
 
11559
11560
  // src/config/constants.ts
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-LL5J3SVB.js";
4
+ } from "./chunk-KGX2FFHZ.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/llmMarkdownGenerator.js
7
7
  var DEFAULT_OPTIONS = {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-LL5J3SVB.js";
4
+ } from "./chunk-KGX2FFHZ.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/markdownGenerator.js
7
7
  var DEFAULT_OPTIONS = {
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  findMostSimilarMemento,
4
4
  getRelevantMementos
5
- } from "./chunk-ECSELHYP.js";
6
- import "./chunk-M2CSCYOY.js";
7
- import "./chunk-LL5J3SVB.js";
5
+ } from "./chunk-GJ3EQRX5.js";
6
+ import "./chunk-VGF6M3GC.js";
7
+ import "./chunk-KGX2FFHZ.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  findMostSimilarMemento,
File without changes
@@ -297,7 +297,7 @@ import {
297
297
  validateReactArtifactV2,
298
298
  validateSvgArtifactV2,
299
299
  wikiMarkupToAdf
300
- } from "./chunk-LL5J3SVB.js";
300
+ } from "./chunk-KGX2FFHZ.js";
301
301
  export {
302
302
  ALL_IMAGE_MODELS,
303
303
  ALL_IMAGE_SIZES,
@@ -64,6 +64,7 @@ import {
64
64
  XAIImageService,
65
65
  aiImageService,
66
66
  buildAndSortMessages,
67
+ buildVoiceInstructions,
67
68
  calculateRetryDelay,
68
69
  calculateTotalTokenLength,
69
70
  checkOrganizationStorageLimit,
@@ -82,6 +83,7 @@ import {
82
83
  fetchAndConvertFabFiles,
83
84
  fetchAndParseURL,
84
85
  fetchAndProcessPreviousMessages,
86
+ formatVoiceHistory,
85
87
  generateSafeEmbedding,
86
88
  getAvailableModels,
87
89
  getCachedSignedUrl,
@@ -127,8 +129,8 @@ import {
127
129
  validateMermaidSyntax,
128
130
  warmUpSettingsCache,
129
131
  withRetry
130
- } from "./chunk-M2CSCYOY.js";
131
- import "./chunk-LL5J3SVB.js";
132
+ } from "./chunk-VGF6M3GC.js";
133
+ import "./chunk-KGX2FFHZ.js";
132
134
  import {
133
135
  Logger,
134
136
  NotificationDeduplicator,
@@ -204,6 +206,7 @@ export {
204
206
  XAIImageService,
205
207
  aiImageService,
206
208
  buildAndSortMessages,
209
+ buildVoiceInstructions,
207
210
  calculateRetryDelay,
208
211
  calculateTotalTokenLength,
209
212
  checkOrganizationStorageLimit,
@@ -222,6 +225,7 @@ export {
222
225
  fetchAndConvertFabFiles,
223
226
  fetchAndParseURL,
224
227
  fetchAndProcessPreviousMessages,
228
+ formatVoiceHistory,
225
229
  generateSafeEmbedding,
226
230
  getAvailableModels,
227
231
  getCachedSignedUrl,
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  SubtractCreditsSchema,
4
4
  subtractCredits
5
- } from "./chunk-I3CPL4SJ.js";
6
- import "./chunk-M2CSCYOY.js";
7
- import "./chunk-LL5J3SVB.js";
5
+ } from "./chunk-PJQUVSHP.js";
6
+ import "./chunk-VGF6M3GC.js";
7
+ import "./chunk-KGX2FFHZ.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  SubtractCreditsSchema,
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bike4mind/cli",
3
- "version": "0.2.15",
3
+ "version": "0.2.16-cj-GH6131.17608+dcdc1e087",
4
4
  "type": "module",
5
5
  "description": "Interactive CLI tool for Bike4Mind with ReAct agents",
6
6
  "license": "UNLICENSED",
@@ -30,6 +30,16 @@
30
30
  "dist",
31
31
  "bin"
32
32
  ],
33
+ "scripts": {
34
+ "dev": "tsx src/index.tsx",
35
+ "build": "tsup",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "start": "node dist/index.js",
40
+ "prepublishOnly": "pnpm build",
41
+ "postinstall": "node -e \"try { require('better-sqlite3') } catch(e) { if(e.message.includes('bindings')) { console.log('\\n⚠️ Rebuilding better-sqlite3 native bindings...'); require('child_process').execSync('pnpm rebuild better-sqlite3', {stdio:'inherit'}) } }\""
42
+ },
33
43
  "dependencies": {
34
44
  "@anthropic-ai/sdk": "^0.22.0",
35
45
  "@aws-sdk/client-apigatewaymanagementapi": "3.654.0",
@@ -96,6 +106,11 @@
96
106
  "zustand": "^4.5.4"
97
107
  },
98
108
  "devDependencies": {
109
+ "@bike4mind/agents": "0.1.0",
110
+ "@bike4mind/common": "2.42.2-cj-GH6131.17608+dcdc1e087",
111
+ "@bike4mind/mcp": "1.22.2-cj-GH6131.17608+dcdc1e087",
112
+ "@bike4mind/services": "2.39.1-cj-GH6131.17608+dcdc1e087",
113
+ "@bike4mind/utils": "2.1.10-cj-GH6131.17608+dcdc1e087",
99
114
  "@types/better-sqlite3": "^7.6.13",
100
115
  "@types/diff": "^5.0.9",
101
116
  "@types/jsonwebtoken": "^9.0.4",
@@ -107,20 +122,7 @@
107
122
  "tsup": "^8.5.1",
108
123
  "tsx": "^4.21.0",
109
124
  "typescript": "^5.9.3",
110
- "vitest": "^3.2.4",
111
- "@bike4mind/agents": "0.1.0",
112
- "@bike4mind/common": "2.42.1",
113
- "@bike4mind/mcp": "1.22.1",
114
- "@bike4mind/services": "2.39.0",
115
- "@bike4mind/utils": "2.1.9"
125
+ "vitest": "^3.2.4"
116
126
  },
117
- "scripts": {
118
- "dev": "tsx src/index.tsx",
119
- "build": "tsup",
120
- "typecheck": "tsc --noEmit",
121
- "test": "vitest run",
122
- "test:watch": "vitest",
123
- "start": "node dist/index.js",
124
- "postinstall": "node -e \"try { require('better-sqlite3') } catch(e) { if(e.message.includes('bindings')) { console.log('\\n⚠️ Rebuilding better-sqlite3 native bindings...'); require('child_process').execSync('pnpm rebuild better-sqlite3', {stdio:'inherit'}) } }\""
125
- }
126
- }
127
+ "gitHead": "dcdc1e087ec6b9dd112d1eeab86e351ebe5ac881"
128
+ }