@yourgpt/copilot-sdk 2.1.4 → 2.1.5-alpha.1

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 (103) hide show
  1. package/dist/MessageTree-CoIt_4nB.d.cts +161 -0
  2. package/dist/MessageTree-CzaN9Eul.d.ts +161 -0
  3. package/dist/{ThreadManager-Dkp_eLty.d.ts → ThreadManager-BEAECB7Y.d.ts} +1 -1
  4. package/dist/{ThreadManager-LfFRhr4e.d.cts → ThreadManager-Cw5fwyCN.d.cts} +1 -1
  5. package/dist/{chunk-POZNNKNJ.cjs → chunk-246B6X5D.cjs} +8 -2
  6. package/dist/chunk-246B6X5D.cjs.map +1 -0
  7. package/dist/{chunk-QLH6TSCC.js → chunk-4QXY2PBG.js} +8 -2
  8. package/dist/chunk-4QXY2PBG.js.map +1 -0
  9. package/dist/{chunk-7PKGRYHY.js → chunk-5Q72LZ5H.js} +3107 -357
  10. package/dist/chunk-5Q72LZ5H.js.map +1 -0
  11. package/dist/chunk-BJYA5NDL.cjs +96 -0
  12. package/dist/chunk-BJYA5NDL.cjs.map +1 -0
  13. package/dist/{chunk-LZMBBGWH.js → chunk-ENFWM3EY.js} +4 -4
  14. package/dist/{chunk-LZMBBGWH.js.map → chunk-ENFWM3EY.js.map} +1 -1
  15. package/dist/{chunk-OQPRIB73.cjs → chunk-I3SQUNTT.cjs} +71 -25
  16. package/dist/chunk-I3SQUNTT.cjs.map +1 -0
  17. package/dist/{chunk-N6VZ7FOW.cjs → chunk-IXWNDR7H.cjs} +3290 -522
  18. package/dist/chunk-IXWNDR7H.cjs.map +1 -0
  19. package/dist/{chunk-WAPGTQDR.cjs → chunk-JKGFQUHJ.cjs} +10 -10
  20. package/dist/{chunk-WAPGTQDR.cjs.map → chunk-JKGFQUHJ.cjs.map} +1 -1
  21. package/dist/{chunk-XGITAEXU.js → chunk-LLM7AHMO.js} +2 -2
  22. package/dist/{chunk-XGITAEXU.js.map → chunk-LLM7AHMO.js.map} +1 -1
  23. package/dist/{chunk-ASV6JLYG.cjs → chunk-NUXLAZOE.cjs} +2 -2
  24. package/dist/{chunk-ASV6JLYG.cjs.map → chunk-NUXLAZOE.cjs.map} +1 -1
  25. package/dist/{chunk-37KEHUCE.js → chunk-UXJ6LIZB.js} +51 -7
  26. package/dist/chunk-UXJ6LIZB.js.map +1 -0
  27. package/dist/chunk-VNLLW3ZI.js +94 -0
  28. package/dist/chunk-VNLLW3ZI.js.map +1 -0
  29. package/dist/core/index.cjs +99 -91
  30. package/dist/core/index.d.cts +7 -7
  31. package/dist/core/index.d.ts +7 -7
  32. package/dist/core/index.js +5 -5
  33. package/dist/{index-BHkRA0mM.d.cts → index-CiExk87c.d.cts} +1 -1
  34. package/dist/{index-tB0qI8my.d.ts → index-Dwrcf-CP.d.ts} +1 -1
  35. package/dist/mcp/index.d.cts +3 -3
  36. package/dist/mcp/index.d.ts +3 -3
  37. package/dist/react/index.cjs +113 -52
  38. package/dist/react/index.d.cts +673 -77
  39. package/dist/react/index.d.ts +673 -77
  40. package/dist/react/index.js +7 -6
  41. package/dist/server/index.cjs +339 -0
  42. package/dist/server/index.cjs.map +1 -0
  43. package/dist/server/index.d.cts +171 -0
  44. package/dist/server/index.d.ts +171 -0
  45. package/dist/server/index.js +332 -0
  46. package/dist/server/index.js.map +1 -0
  47. package/dist/tools/anthropic/index.cjs +3 -3
  48. package/dist/tools/anthropic/index.d.cts +1 -1
  49. package/dist/tools/anthropic/index.d.ts +1 -1
  50. package/dist/tools/anthropic/index.js +3 -3
  51. package/dist/tools/brave/index.cjs +6 -6
  52. package/dist/tools/brave/index.d.cts +1 -1
  53. package/dist/tools/brave/index.d.ts +1 -1
  54. package/dist/tools/brave/index.js +3 -3
  55. package/dist/tools/exa/index.cjs +6 -6
  56. package/dist/tools/exa/index.d.cts +1 -1
  57. package/dist/tools/exa/index.d.ts +1 -1
  58. package/dist/tools/exa/index.js +3 -3
  59. package/dist/tools/google/index.cjs +6 -6
  60. package/dist/tools/google/index.d.cts +1 -1
  61. package/dist/tools/google/index.d.ts +1 -1
  62. package/dist/tools/google/index.js +3 -3
  63. package/dist/tools/openai/index.cjs +6 -6
  64. package/dist/tools/openai/index.d.cts +1 -1
  65. package/dist/tools/openai/index.d.ts +1 -1
  66. package/dist/tools/openai/index.js +3 -3
  67. package/dist/tools/searxng/index.cjs +6 -6
  68. package/dist/tools/searxng/index.d.cts +1 -1
  69. package/dist/tools/searxng/index.d.ts +1 -1
  70. package/dist/tools/searxng/index.js +3 -3
  71. package/dist/tools/serper/index.cjs +6 -6
  72. package/dist/tools/serper/index.d.cts +1 -1
  73. package/dist/tools/serper/index.d.ts +1 -1
  74. package/dist/tools/serper/index.js +3 -3
  75. package/dist/tools/tavily/index.cjs +6 -6
  76. package/dist/tools/tavily/index.d.cts +1 -1
  77. package/dist/tools/tavily/index.d.ts +1 -1
  78. package/dist/tools/tavily/index.js +3 -3
  79. package/dist/tools/web-search/index.cjs +7 -7
  80. package/dist/tools/web-search/index.d.cts +2 -2
  81. package/dist/tools/web-search/index.d.ts +2 -2
  82. package/dist/tools/web-search/index.js +4 -4
  83. package/dist/{tools-coIcskZ4.d.ts → tools-DHZhF5km.d.cts} +161 -1
  84. package/dist/{tools-coIcskZ4.d.cts → tools-DHZhF5km.d.ts} +161 -1
  85. package/dist/{types-rjaSVmEF.d.ts → types-BTyJu0WD.d.ts} +1 -1
  86. package/dist/types-BckL3hiw.d.cts +93 -0
  87. package/dist/types-BckL3hiw.d.ts +93 -0
  88. package/dist/{types-C8t4Ut8f.d.cts → types-BdX7uPj0.d.cts} +1 -1
  89. package/dist/{types-DG2ya08y.d.ts → types-BeFBBZ5i.d.cts} +64 -1
  90. package/dist/{types-DG2ya08y.d.cts → types-BeFBBZ5i.d.ts} +64 -1
  91. package/dist/ui/index.cjs +509 -209
  92. package/dist/ui/index.cjs.map +1 -1
  93. package/dist/ui/index.d.cts +81 -4
  94. package/dist/ui/index.d.ts +81 -4
  95. package/dist/ui/index.js +457 -158
  96. package/dist/ui/index.js.map +1 -1
  97. package/package.json +6 -1
  98. package/dist/chunk-37KEHUCE.js.map +0 -1
  99. package/dist/chunk-7PKGRYHY.js.map +0 -1
  100. package/dist/chunk-N6VZ7FOW.cjs.map +0 -1
  101. package/dist/chunk-OQPRIB73.cjs.map +0 -1
  102. package/dist/chunk-POZNNKNJ.cjs.map +0 -1
  103. package/dist/chunk-QLH6TSCC.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ // src/skill-system/registry.ts
4
+ var SkillRegistry = class {
5
+ constructor() {
6
+ this.skills = /* @__PURE__ */ new Map();
7
+ }
8
+ /**
9
+ * Register a skill. Silently overwrites if name already exists.
10
+ * Use collision detection in loadSkills() instead.
11
+ */
12
+ register(skill) {
13
+ this.skills.set(skill.name, skill);
14
+ }
15
+ /**
16
+ * Unregister a skill by name.
17
+ */
18
+ unregister(name) {
19
+ this.skills.delete(name);
20
+ }
21
+ /**
22
+ * Get a skill by name.
23
+ */
24
+ get(name) {
25
+ return this.skills.get(name);
26
+ }
27
+ /**
28
+ * Get all registered skills.
29
+ */
30
+ getAll() {
31
+ return Array.from(this.skills.values());
32
+ }
33
+ /**
34
+ * Get all skills with strategy === "eager".
35
+ * These are injected directly into the system prompt.
36
+ */
37
+ getEager() {
38
+ return this.getAll().filter((s) => this.resolveStrategy(s) === "eager");
39
+ }
40
+ /**
41
+ * Get all skills with strategy === "auto".
42
+ * These appear in the catalog and are loadable on demand.
43
+ */
44
+ getAuto() {
45
+ return this.getAll().filter((s) => this.resolveStrategy(s) === "auto");
46
+ }
47
+ /**
48
+ * Check if a skill is registered.
49
+ */
50
+ has(name) {
51
+ return this.skills.has(name);
52
+ }
53
+ /**
54
+ * Number of registered skills.
55
+ */
56
+ get count() {
57
+ return this.skills.size;
58
+ }
59
+ /**
60
+ * Build a skill catalog string for "auto" skills.
61
+ * Appended to the system prompt so the AI can discover available skills.
62
+ */
63
+ buildCatalog() {
64
+ const autoSkills = this.getAuto();
65
+ if (autoSkills.length === 0) return "";
66
+ const lines = autoSkills.map((s) => `- ${s.name}: ${s.description}`);
67
+ return `Available skills:
68
+ ${lines.join("\n")}`;
69
+ }
70
+ /**
71
+ * Concatenate content of all "eager" skills.
72
+ * These instructions are always active without requiring load_skill.
73
+ */
74
+ buildEagerContent() {
75
+ const eagerSkills = this.getEager();
76
+ if (eagerSkills.length === 0) return "";
77
+ return eagerSkills.map((s) => `## Skill: ${s.name}
78
+
79
+ ${s.content}`).join("\n\n---\n\n");
80
+ }
81
+ /**
82
+ * Resolve content for a skill by name.
83
+ * For inline/file/url skills, content is already resolved at registration time.
84
+ */
85
+ async resolveContent(name) {
86
+ const skill = this.skills.get(name);
87
+ return skill?.content;
88
+ }
89
+ resolveStrategy(skill) {
90
+ return skill.strategy ?? "auto";
91
+ }
92
+ };
93
+
94
+ exports.SkillRegistry = SkillRegistry;
95
+ //# sourceMappingURL=chunk-BJYA5NDL.cjs.map
96
+ //# sourceMappingURL=chunk-BJYA5NDL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/skill-system/registry.ts"],"names":[],"mappings":";;;AASO,IAAM,gBAAN,MAAoB;AAAA,EAApB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,MAAA,uBAAa,GAAA,EAA2B;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhD,SAAS,KAAA,EAA4B;AACnC,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAA,EAAoB;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,EAAyC;AAC3C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAA0B;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAE,MAAA,CAAO,CAAC,MAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,OAAO,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAE,MAAA,CAAO,CAAC,MAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,MAAM,CAAA;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,EAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAA,GAAuB;AACrB,IAAA,MAAM,UAAA,GAAa,KAAK,OAAA,EAAQ;AAChC,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAEpC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,WAAW,CAAA,CAAE,CAAA;AACnE,IAAA,OAAO,CAAA;AAAA,EAAsB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAA4B;AAC1B,IAAA,MAAM,WAAA,GAAc,KAAK,QAAA,EAAS;AAClC,IAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAErC,IAAA,OAAO,YACJ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,UAAA,EAAa,EAAE,IAAI;;AAAA,EAAO,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAChD,KAAK,aAAa,CAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,IAAA,EAA2C;AAC9D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAClC,IAAA,OAAO,KAAA,EAAO,OAAA;AAAA,EAChB;AAAA,EAEQ,gBAAgB,KAAA,EAAqC;AAC3D,IAAA,OAAO,MAAM,QAAA,IAAY,MAAA;AAAA,EAC3B;AACF","file":"chunk-BJYA5NDL.cjs","sourcesContent":["/**\n * SkillRegistry — manages registered skills\n *\n * Shared between server (loadSkills) and client (SkillProvider).\n * Framework-agnostic — no React dependencies.\n */\n\nimport type { ResolvedSkill, SkillStrategy } from \"./types\";\n\nexport class SkillRegistry {\n private skills = new Map<string, ResolvedSkill>();\n\n /**\n * Register a skill. Silently overwrites if name already exists.\n * Use collision detection in loadSkills() instead.\n */\n register(skill: ResolvedSkill): void {\n this.skills.set(skill.name, skill);\n }\n\n /**\n * Unregister a skill by name.\n */\n unregister(name: string): void {\n this.skills.delete(name);\n }\n\n /**\n * Get a skill by name.\n */\n get(name: string): ResolvedSkill | undefined {\n return this.skills.get(name);\n }\n\n /**\n * Get all registered skills.\n */\n getAll(): ResolvedSkill[] {\n return Array.from(this.skills.values());\n }\n\n /**\n * Get all skills with strategy === \"eager\".\n * These are injected directly into the system prompt.\n */\n getEager(): ResolvedSkill[] {\n return this.getAll().filter((s) => this.resolveStrategy(s) === \"eager\");\n }\n\n /**\n * Get all skills with strategy === \"auto\".\n * These appear in the catalog and are loadable on demand.\n */\n getAuto(): ResolvedSkill[] {\n return this.getAll().filter((s) => this.resolveStrategy(s) === \"auto\");\n }\n\n /**\n * Check if a skill is registered.\n */\n has(name: string): boolean {\n return this.skills.has(name);\n }\n\n /**\n * Number of registered skills.\n */\n get count(): number {\n return this.skills.size;\n }\n\n /**\n * Build a skill catalog string for \"auto\" skills.\n * Appended to the system prompt so the AI can discover available skills.\n */\n buildCatalog(): string {\n const autoSkills = this.getAuto();\n if (autoSkills.length === 0) return \"\";\n\n const lines = autoSkills.map((s) => `- ${s.name}: ${s.description}`);\n return `Available skills:\\n${lines.join(\"\\n\")}`;\n }\n\n /**\n * Concatenate content of all \"eager\" skills.\n * These instructions are always active without requiring load_skill.\n */\n buildEagerContent(): string {\n const eagerSkills = this.getEager();\n if (eagerSkills.length === 0) return \"\";\n\n return eagerSkills\n .map((s) => `## Skill: ${s.name}\\n\\n${s.content}`)\n .join(\"\\n\\n---\\n\\n\");\n }\n\n /**\n * Resolve content for a skill by name.\n * For inline/file/url skills, content is already resolved at registration time.\n */\n async resolveContent(name: string): Promise<string | undefined> {\n const skill = this.skills.get(name);\n return skill?.content;\n }\n\n private resolveStrategy(skill: ResolvedSkill): SkillStrategy {\n return skill.strategy ?? \"auto\";\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { tool, failure } from './chunk-QLH6TSCC.js';
2
- import { formatSearchResultsForAI, executeWebSearch, summarizeSearchResults } from './chunk-XGITAEXU.js';
1
+ import { tool, failure } from './chunk-4QXY2PBG.js';
2
+ import { formatSearchResultsForAI, executeWebSearch, summarizeSearchResults } from './chunk-LLM7AHMO.js';
3
3
 
4
4
  // src/core/tools/builtin/webSearch.ts
5
5
  var webSearchTool = tool({
@@ -75,5 +75,5 @@ function createWebSearchTool(config) {
75
75
  }
76
76
 
77
77
  export { createWebSearchTool, webSearchTool };
78
- //# sourceMappingURL=chunk-LZMBBGWH.js.map
79
- //# sourceMappingURL=chunk-LZMBBGWH.js.map
78
+ //# sourceMappingURL=chunk-ENFWM3EY.js.map
79
+ //# sourceMappingURL=chunk-ENFWM3EY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/tools/builtin/webSearch.ts"],"names":[],"mappings":";;;;AAoDO,IAAM,gBAAgB,IAAA,CAAsB;AAAA,EACjD,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,EAOb,QAAA,EAAU,QAAA;AAAA;AAAA,EAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,EAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAE1D,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,2DAAA;AAAA,QACF,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,QAC1B,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,OAAO;AAAA,GACpB;AAAA,EAEA,aAAA,EAAe,KAAA;AAAA;AAAA;AAAA,EAGf,cAAA,EAAgB,MAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,CAAA;AAC1D,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,OAAO,yBAAyB,IAAI,CAAA;AAAA,EACtC;AACF,CAAC;AAoEM,SAAS,oBACd,MAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,GAAG,aAAA;AAAA,IACH,OAAA,EAAS,OAAO,MAAA,KAA4B;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,gBAAA;AAAA,UACrB;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc,CAAA;AAAA,YACtD,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe;AAAA,WAC3D;AAAA,UACA;AAAA,SACF;AAGA,QAAA,MAAM,SAAA,GAAY,yBAAyB,QAAQ,CAAA;AAEnD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,uBAAuB,QAAQ,CAAA;AAAA,UACxC,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,SACd;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,YAAA,GACJ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,mBAAA;AAC3C,QAAA,OAAO,QAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"chunk-LZMBBGWH.js","sourcesContent":["/**\n * Built-in Web Search Tool\n *\n * A pre-configured tool for searching the web with multiple provider support.\n * Runs on the server to protect API keys.\n *\n * Supports tree-shaking - import providers directly for smaller bundles.\n *\n * @example\n * ```typescript\n * // Option 1: String provider (lazy loaded at runtime)\n * import { createWebSearchTool } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Option 2: Direct provider import (best for tree-shaking)\n * import { createWebSearchTool, tavilyProvider } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: tavilyProvider,\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Add to your runtime\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n */\n\nimport { tool, success, failure } from \"../../types/tools\";\nimport type { ToolDefinition } from \"../../types/tools\";\nimport {\n executeWebSearch,\n formatSearchResultsForAI,\n summarizeSearchResults,\n type WebSearchConfigExtended,\n} from \"../webSearch\";\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n} from \"../webSearch/types\";\n\n/**\n * Base web search tool definition\n *\n * This is the core tool definition. Use `createWebSearchTool()` to create\n * a configured instance with your provider settings.\n */\nexport const webSearchTool = tool<WebSearchParams>({\n description: `Search the web for current information. Use this when the user asks about:\n- Recent events, news, or current affairs\n- Real-time data (prices, weather, stocks, sports scores)\n- Information that might have changed after your training cutoff\n- Facts that need verification with current sources\n- Research topics that require up-to-date information`,\n\n location: \"server\", // Runs on server to protect API keys\n\n title: (args) => `Searching for \"${args.query}\"`,\n executingTitle: (args) => `Searching the web for \"${args.query}\"...`,\n completedTitle: (args) => `Found results for \"${args.query}\"`,\n\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query to find relevant information\",\n },\n maxResults: {\n type: \"number\",\n description:\n \"Maximum number of results to return (default: 5, max: 10)\",\n minimum: 1,\n maximum: 10,\n },\n searchDepth: {\n type: \"string\",\n enum: [\"basic\", \"advanced\"],\n description:\n \"Search depth - 'advanced' provides more thorough results but may be slower\",\n },\n },\n required: [\"query\"],\n },\n\n needsApproval: false, // No user data exposed, just searching\n\n // Control what AI sees from results\n aiResponseMode: \"full\",\n aiContext: (result, args) => {\n if (!result.success) return `Search failed: ${result.error}`;\n const data = result.data as WebSearchResponse;\n return formatSearchResultsForAI(data);\n },\n});\n\n/**\n * Create a configured web search tool\n *\n * Supports both string provider names (lazy loaded) and direct provider imports (tree-shakeable).\n *\n * @param config - Web search configuration including provider and API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * // ===== BEST FOR TREE-SHAKING: Direct provider import =====\n * import { createWebSearchTool, openaiProvider } from '@yourgpt/copilot-sdk/core';\n *\n * const webSearch = createWebSearchTool({\n * provider: openaiProvider, // Only this provider in bundle\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // ===== STRING PROVIDERS (Lazy loaded at runtime) =====\n *\n * // OpenAI (uses your OpenAI API key)\n * const webSearch = createWebSearchTool({\n * provider: 'openai',\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // Google (uses your Google/Gemini API key)\n * const webSearch = createWebSearchTool({\n * provider: 'google',\n * apiKey: process.env.GOOGLE_API_KEY,\n * });\n *\n * // Tavily (AI-optimized search with answer generation)\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * includeAnswer: true,\n * maxResults: 5,\n * });\n *\n * // Serper (Google results)\n * const webSearch = createWebSearchTool({\n * provider: 'serper',\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * // Brave Search (privacy-focused)\n * const webSearch = createWebSearchTool({\n * provider: 'brave',\n * apiKey: process.env.BRAVE_API_KEY,\n * });\n *\n * // Self-hosted SearXNG (no API key needed)\n * const webSearch = createWebSearchTool({\n * provider: 'searxng',\n * baseUrl: 'https://your-searxng-instance.com',\n * });\n *\n * // Exa (AI-optimized semantic search)\n * const webSearch = createWebSearchTool({\n * provider: 'exa',\n * apiKey: process.env.EXA_API_KEY,\n * searchDepth: 'advanced',\n * });\n * ```\n */\nexport function createWebSearchTool(\n config: WebSearchConfigExtended,\n): ToolDefinition<WebSearchParams> {\n return {\n name: \"web_search\",\n ...webSearchTool,\n handler: async (params: WebSearchParams) => {\n try {\n const response = await executeWebSearch(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n searchDepth: params.searchDepth ?? config.searchDepth ?? \"basic\",\n },\n config,\n );\n\n // Build the AI context string\n const aiContext = formatSearchResultsForAI(response);\n\n return {\n success: true,\n message: summarizeSearchResults(response),\n data: response,\n _aiContext: aiContext,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Web search failed\";\n return failure(errorMessage);\n }\n },\n };\n}\n\n/**\n * Utility types for web search tool configuration\n */\nexport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n};\nexport type { WebSearchConfigExtended };\n"]}
1
+ {"version":3,"sources":["../src/core/tools/builtin/webSearch.ts"],"names":[],"mappings":";;;;AAoDO,IAAM,gBAAgB,IAAA,CAAsB;AAAA,EACjD,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,EAOb,QAAA,EAAU,QAAA;AAAA;AAAA,EAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,EAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAE1D,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,2DAAA;AAAA,QACF,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,QAC1B,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,OAAO;AAAA,GACpB;AAAA,EAEA,aAAA,EAAe,KAAA;AAAA;AAAA;AAAA,EAGf,cAAA,EAAgB,MAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,CAAA;AAC1D,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,OAAO,yBAAyB,IAAI,CAAA;AAAA,EACtC;AACF,CAAC;AAoEM,SAAS,oBACd,MAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,GAAG,aAAA;AAAA,IACH,OAAA,EAAS,OAAO,MAAA,KAA4B;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,gBAAA;AAAA,UACrB;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc,CAAA;AAAA,YACtD,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe;AAAA,WAC3D;AAAA,UACA;AAAA,SACF;AAGA,QAAA,MAAM,SAAA,GAAY,yBAAyB,QAAQ,CAAA;AAEnD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,uBAAuB,QAAQ,CAAA;AAAA,UACxC,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,SACd;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,YAAA,GACJ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,mBAAA;AAC3C,QAAA,OAAO,QAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"chunk-ENFWM3EY.js","sourcesContent":["/**\n * Built-in Web Search Tool\n *\n * A pre-configured tool for searching the web with multiple provider support.\n * Runs on the server to protect API keys.\n *\n * Supports tree-shaking - import providers directly for smaller bundles.\n *\n * @example\n * ```typescript\n * // Option 1: String provider (lazy loaded at runtime)\n * import { createWebSearchTool } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Option 2: Direct provider import (best for tree-shaking)\n * import { createWebSearchTool, tavilyProvider } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: tavilyProvider,\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Add to your runtime\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n */\n\nimport { tool, success, failure } from \"../../types/tools\";\nimport type { ToolDefinition } from \"../../types/tools\";\nimport {\n executeWebSearch,\n formatSearchResultsForAI,\n summarizeSearchResults,\n type WebSearchConfigExtended,\n} from \"../webSearch\";\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n} from \"../webSearch/types\";\n\n/**\n * Base web search tool definition\n *\n * This is the core tool definition. Use `createWebSearchTool()` to create\n * a configured instance with your provider settings.\n */\nexport const webSearchTool = tool<WebSearchParams>({\n description: `Search the web for current information. Use this when the user asks about:\n- Recent events, news, or current affairs\n- Real-time data (prices, weather, stocks, sports scores)\n- Information that might have changed after your training cutoff\n- Facts that need verification with current sources\n- Research topics that require up-to-date information`,\n\n location: \"server\", // Runs on server to protect API keys\n\n title: (args) => `Searching for \"${args.query}\"`,\n executingTitle: (args) => `Searching the web for \"${args.query}\"...`,\n completedTitle: (args) => `Found results for \"${args.query}\"`,\n\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query to find relevant information\",\n },\n maxResults: {\n type: \"number\",\n description:\n \"Maximum number of results to return (default: 5, max: 10)\",\n minimum: 1,\n maximum: 10,\n },\n searchDepth: {\n type: \"string\",\n enum: [\"basic\", \"advanced\"],\n description:\n \"Search depth - 'advanced' provides more thorough results but may be slower\",\n },\n },\n required: [\"query\"],\n },\n\n needsApproval: false, // No user data exposed, just searching\n\n // Control what AI sees from results\n aiResponseMode: \"full\",\n aiContext: (result, args) => {\n if (!result.success) return `Search failed: ${result.error}`;\n const data = result.data as WebSearchResponse;\n return formatSearchResultsForAI(data);\n },\n});\n\n/**\n * Create a configured web search tool\n *\n * Supports both string provider names (lazy loaded) and direct provider imports (tree-shakeable).\n *\n * @param config - Web search configuration including provider and API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * // ===== BEST FOR TREE-SHAKING: Direct provider import =====\n * import { createWebSearchTool, openaiProvider } from '@yourgpt/copilot-sdk/core';\n *\n * const webSearch = createWebSearchTool({\n * provider: openaiProvider, // Only this provider in bundle\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // ===== STRING PROVIDERS (Lazy loaded at runtime) =====\n *\n * // OpenAI (uses your OpenAI API key)\n * const webSearch = createWebSearchTool({\n * provider: 'openai',\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // Google (uses your Google/Gemini API key)\n * const webSearch = createWebSearchTool({\n * provider: 'google',\n * apiKey: process.env.GOOGLE_API_KEY,\n * });\n *\n * // Tavily (AI-optimized search with answer generation)\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * includeAnswer: true,\n * maxResults: 5,\n * });\n *\n * // Serper (Google results)\n * const webSearch = createWebSearchTool({\n * provider: 'serper',\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * // Brave Search (privacy-focused)\n * const webSearch = createWebSearchTool({\n * provider: 'brave',\n * apiKey: process.env.BRAVE_API_KEY,\n * });\n *\n * // Self-hosted SearXNG (no API key needed)\n * const webSearch = createWebSearchTool({\n * provider: 'searxng',\n * baseUrl: 'https://your-searxng-instance.com',\n * });\n *\n * // Exa (AI-optimized semantic search)\n * const webSearch = createWebSearchTool({\n * provider: 'exa',\n * apiKey: process.env.EXA_API_KEY,\n * searchDepth: 'advanced',\n * });\n * ```\n */\nexport function createWebSearchTool(\n config: WebSearchConfigExtended,\n): ToolDefinition<WebSearchParams> {\n return {\n name: \"web_search\",\n ...webSearchTool,\n handler: async (params: WebSearchParams) => {\n try {\n const response = await executeWebSearch(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n searchDepth: params.searchDepth ?? config.searchDepth ?? \"basic\",\n },\n config,\n );\n\n // Build the AI context string\n const aiContext = formatSearchResultsForAI(response);\n\n return {\n success: true,\n message: summarizeSearchResults(response),\n data: response,\n _aiContext: aiContext,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Web search failed\";\n return failure(errorMessage);\n }\n },\n };\n}\n\n/**\n * Utility types for web search tool configuration\n */\nexport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n};\nexport type { WebSearchConfigExtended };\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkWAPGTQDR_cjs = require('./chunk-WAPGTQDR.cjs');
4
- var chunkPOZNNKNJ_cjs = require('./chunk-POZNNKNJ.cjs');
3
+ var chunkJKGFQUHJ_cjs = require('./chunk-JKGFQUHJ.cjs');
4
+ var chunk246B6X5D_cjs = require('./chunk-246B6X5D.cjs');
5
5
 
6
6
  // src/core/tools/screenshot.ts
7
7
  var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
@@ -1036,7 +1036,7 @@ function createCustomDetector(customKeywords) {
1036
1036
  }
1037
1037
 
1038
1038
  // src/core/tools/builtin/screenshot.ts
1039
- var screenshotTool = chunkPOZNNKNJ_cjs.tool({
1039
+ var screenshotTool = chunk246B6X5D_cjs.tool({
1040
1040
  description: "Capture a screenshot of the user's current screen/viewport. Use this when the user asks you to look at their screen, see what they're seeing, help with visual issues, or debug UI problems.",
1041
1041
  location: "client",
1042
1042
  inputSchema: {
@@ -1055,7 +1055,7 @@ var screenshotTool = chunkPOZNNKNJ_cjs.tool({
1055
1055
  approvalMessage: "Allow AI to capture a screenshot of your screen?",
1056
1056
  handler: async (params) => {
1057
1057
  if (!isScreenshotSupported()) {
1058
- return chunkPOZNNKNJ_cjs.failure("Screenshot capture is not supported in this environment");
1058
+ return chunk246B6X5D_cjs.failure("Screenshot capture is not supported in this environment");
1059
1059
  }
1060
1060
  try {
1061
1061
  const options = {};
@@ -1081,20 +1081,20 @@ var screenshotTool = chunkPOZNNKNJ_cjs.tool({
1081
1081
  }
1082
1082
  };
1083
1083
  } catch (error) {
1084
- return chunkPOZNNKNJ_cjs.failure(
1084
+ return chunk246B6X5D_cjs.failure(
1085
1085
  error instanceof Error ? error.message : "Screenshot capture failed"
1086
1086
  );
1087
1087
  }
1088
1088
  }
1089
1089
  });
1090
1090
  function createScreenshotTool(options) {
1091
- return chunkPOZNNKNJ_cjs.tool({
1091
+ return chunk246B6X5D_cjs.tool({
1092
1092
  ...screenshotTool,
1093
1093
  needsApproval: options?.needsApproval ?? true,
1094
1094
  approvalMessage: options?.approvalMessage ?? "Allow AI to capture a screenshot of your screen?",
1095
1095
  handler: async (params) => {
1096
1096
  if (!isScreenshotSupported()) {
1097
- return chunkPOZNNKNJ_cjs.failure(
1097
+ return chunk246B6X5D_cjs.failure(
1098
1098
  "Screenshot capture is not supported in this environment"
1099
1099
  );
1100
1100
  }
@@ -1120,7 +1120,7 @@ function createScreenshotTool(options) {
1120
1120
  }
1121
1121
  };
1122
1122
  } catch (error) {
1123
- return chunkPOZNNKNJ_cjs.failure(
1123
+ return chunk246B6X5D_cjs.failure(
1124
1124
  error instanceof Error ? error.message : "Screenshot capture failed"
1125
1125
  );
1126
1126
  }
@@ -1133,7 +1133,7 @@ var isBrowser4 = typeof window !== "undefined" && typeof console !== "undefined"
1133
1133
  if (isBrowser4 && !isConsoleCaptureActive()) {
1134
1134
  startConsoleCapture();
1135
1135
  }
1136
- var consoleLogsTool = chunkPOZNNKNJ_cjs.tool({
1136
+ var consoleLogsTool = chunk246B6X5D_cjs.tool({
1137
1137
  description: "Get recent console logs from the browser. Use this when debugging JavaScript errors, checking for warnings, or understanding what's happening in the application.",
1138
1138
  location: "client",
1139
1139
  inputSchema: {
@@ -1166,7 +1166,7 @@ var consoleLogsTool = chunkPOZNNKNJ_cjs.tool({
1166
1166
  types: params.types
1167
1167
  });
1168
1168
  const formattedLogs = formatLogsForAI(logs.logs);
1169
- return chunkPOZNNKNJ_cjs.success(
1169
+ return chunk246B6X5D_cjs.success(
1170
1170
  {
1171
1171
  logs: formattedLogs,
1172
1172
  count: logs.logs.length,
@@ -1175,14 +1175,14 @@ var consoleLogsTool = chunkPOZNNKNJ_cjs.tool({
1175
1175
  `Retrieved ${logs.logs.length} console logs`
1176
1176
  );
1177
1177
  } catch (error) {
1178
- return chunkPOZNNKNJ_cjs.failure(
1178
+ return chunk246B6X5D_cjs.failure(
1179
1179
  error instanceof Error ? error.message : "Failed to get console logs"
1180
1180
  );
1181
1181
  }
1182
1182
  }
1183
1183
  });
1184
1184
  function createConsoleLogsTool(options) {
1185
- return chunkPOZNNKNJ_cjs.tool({
1185
+ return chunk246B6X5D_cjs.tool({
1186
1186
  ...consoleLogsTool,
1187
1187
  needsApproval: options?.needsApproval ?? true,
1188
1188
  approvalMessage: options?.approvalMessage ?? "Allow AI to access browser console logs?",
@@ -1196,7 +1196,7 @@ function createConsoleLogsTool(options) {
1196
1196
  types: params.types
1197
1197
  });
1198
1198
  const formattedLogs = formatLogsForAI(logs.logs);
1199
- return chunkPOZNNKNJ_cjs.success(
1199
+ return chunk246B6X5D_cjs.success(
1200
1200
  {
1201
1201
  logs: formattedLogs,
1202
1202
  count: logs.logs.length,
@@ -1205,7 +1205,7 @@ function createConsoleLogsTool(options) {
1205
1205
  `Retrieved ${logs.logs.length} console logs`
1206
1206
  );
1207
1207
  } catch (error) {
1208
- return chunkPOZNNKNJ_cjs.failure(
1208
+ return chunk246B6X5D_cjs.failure(
1209
1209
  error instanceof Error ? error.message : "Failed to get console logs"
1210
1210
  );
1211
1211
  }
@@ -1214,7 +1214,7 @@ function createConsoleLogsTool(options) {
1214
1214
  }
1215
1215
 
1216
1216
  // src/core/tools/builtin/network.ts
1217
- var networkRequestsTool = chunkPOZNNKNJ_cjs.tool({
1217
+ var networkRequestsTool = chunk246B6X5D_cjs.tool({
1218
1218
  description: "Get recent network requests from the browser. Use this when debugging API calls, checking for failed requests, analyzing network activity, or troubleshooting connectivity issues.",
1219
1219
  location: "client",
1220
1220
  inputSchema: {
@@ -1243,7 +1243,7 @@ var networkRequestsTool = chunkPOZNNKNJ_cjs.tool({
1243
1243
  failedOnly: params.failedOnly
1244
1244
  });
1245
1245
  const formattedRequests = formatRequestsForAI(requests.requests);
1246
- return chunkPOZNNKNJ_cjs.success(
1246
+ return chunk246B6X5D_cjs.success(
1247
1247
  {
1248
1248
  requests: formattedRequests,
1249
1249
  count: requests.requests.length,
@@ -1252,14 +1252,14 @@ var networkRequestsTool = chunkPOZNNKNJ_cjs.tool({
1252
1252
  `Retrieved ${requests.requests.length} network requests`
1253
1253
  );
1254
1254
  } catch (error) {
1255
- return chunkPOZNNKNJ_cjs.failure(
1255
+ return chunk246B6X5D_cjs.failure(
1256
1256
  error instanceof Error ? error.message : "Failed to get network requests"
1257
1257
  );
1258
1258
  }
1259
1259
  }
1260
1260
  });
1261
1261
  function createNetworkRequestsTool(options) {
1262
- return chunkPOZNNKNJ_cjs.tool({
1262
+ return chunk246B6X5D_cjs.tool({
1263
1263
  ...networkRequestsTool,
1264
1264
  needsApproval: options?.needsApproval ?? true,
1265
1265
  approvalMessage: options?.approvalMessage ?? "Allow AI to access network request history?",
@@ -1273,7 +1273,7 @@ function createNetworkRequestsTool(options) {
1273
1273
  failedOnly: params.failedOnly
1274
1274
  });
1275
1275
  const formattedRequests = formatRequestsForAI(requests.requests);
1276
- return chunkPOZNNKNJ_cjs.success(
1276
+ return chunk246B6X5D_cjs.success(
1277
1277
  {
1278
1278
  requests: formattedRequests,
1279
1279
  count: requests.requests.length,
@@ -1282,7 +1282,7 @@ function createNetworkRequestsTool(options) {
1282
1282
  `Retrieved ${requests.requests.length} network requests`
1283
1283
  );
1284
1284
  } catch (error) {
1285
- return chunkPOZNNKNJ_cjs.failure(
1285
+ return chunk246B6X5D_cjs.failure(
1286
1286
  error instanceof Error ? error.message : "Failed to get network requests"
1287
1287
  );
1288
1288
  }
@@ -1306,10 +1306,51 @@ var builtinTools = {
1306
1306
  },
1307
1307
  web_search: {
1308
1308
  name: "web_search",
1309
- ...chunkWAPGTQDR_cjs.webSearchTool
1309
+ ...chunkJKGFQUHJ_cjs.webSearchTool
1310
1310
  }
1311
1311
  };
1312
1312
 
1313
+ // src/core/utils/logger.ts
1314
+ function isEnabled(getEnabled) {
1315
+ if (typeof window !== "undefined" && window.__COPILOT_DEBUG !== void 0) {
1316
+ return !!window.__COPILOT_DEBUG;
1317
+ }
1318
+ return getEnabled();
1319
+ }
1320
+ function logOnce(scope, enabled, action, data) {
1321
+ if (!isEnabled(() => enabled)) return;
1322
+ const prefix = `[${scope}]`;
1323
+ if (data !== void 0) {
1324
+ console.log(prefix, action, data);
1325
+ } else {
1326
+ console.log(prefix, action);
1327
+ }
1328
+ }
1329
+ function createLogger(scope, getEnabled) {
1330
+ const prefix = `[${scope}]`;
1331
+ function log(action, data) {
1332
+ if (!isEnabled(getEnabled)) return;
1333
+ if (data !== void 0) {
1334
+ console.log(prefix, action, data);
1335
+ } else {
1336
+ console.log(prefix, action);
1337
+ }
1338
+ }
1339
+ log.group = function(label) {
1340
+ if (!isEnabled(getEnabled)) return;
1341
+ console.group(`${prefix} ${label}`);
1342
+ };
1343
+ log.groupCollapsed = function(label) {
1344
+ if (!isEnabled(getEnabled)) return;
1345
+ console.groupCollapsed(`${prefix} ${label}`);
1346
+ };
1347
+ log.groupEnd = function() {
1348
+ if (!isEnabled(getEnabled)) return;
1349
+ console.groupEnd();
1350
+ };
1351
+ return log;
1352
+ }
1353
+
1313
1354
  // src/core/utils/id.ts
1314
1355
  function generateId(prefix = "id") {
1315
1356
  return `${prefix}_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
@@ -1351,7 +1392,9 @@ function createMessage(partial) {
1351
1392
  tool_calls: partial.tool_calls,
1352
1393
  tool_call_id: partial.tool_call_id,
1353
1394
  metadata: partial.metadata,
1354
- created_at: partial.created_at ?? /* @__PURE__ */ new Date()
1395
+ created_at: partial.created_at ?? /* @__PURE__ */ new Date(),
1396
+ ...partial.parent_id !== void 0 ? { parent_id: partial.parent_id } : {},
1397
+ ...partial.children_ids !== void 0 ? { children_ids: partial.children_ids } : {}
1355
1398
  };
1356
1399
  }
1357
1400
  function createUserMessage(content, options) {
@@ -1360,7 +1403,8 @@ function createUserMessage(content, options) {
1360
1403
  thread_id: options?.thread_id,
1361
1404
  role: "user",
1362
1405
  content,
1363
- metadata: options?.attachments ? { attachments: options.attachments } : void 0
1406
+ metadata: options?.attachments ? { attachments: options.attachments } : void 0,
1407
+ ...options?.parent_id !== void 0 ? { parent_id: options.parent_id } : {}
1364
1408
  });
1365
1409
  }
1366
1410
  function createAssistantMessage(content, options) {
@@ -2839,6 +2883,7 @@ exports.createCloudStorage = createCloudStorage;
2839
2883
  exports.createConsoleLogsTool = createConsoleLogsTool;
2840
2884
  exports.createCustomDetector = createCustomDetector;
2841
2885
  exports.createLocalStorageAdapter = createLocalStorageAdapter;
2886
+ exports.createLogger = createLogger;
2842
2887
  exports.createMemoryAdapter = createMemoryAdapter;
2843
2888
  exports.createMessage = createMessage;
2844
2889
  exports.createNetworkRequestsTool = createNetworkRequestsTool;
@@ -2877,6 +2922,7 @@ exports.isNetworkCaptureActive = isNetworkCaptureActive;
2877
2922
  exports.isScreenshotSupported = isScreenshotSupported;
2878
2923
  exports.isToolResult = isToolResult;
2879
2924
  exports.localStorageAdapter = localStorageAdapter;
2925
+ exports.logOnce = logOnce;
2880
2926
  exports.networkRequestsTool = networkRequestsTool;
2881
2927
  exports.noopAdapter = noopAdapter;
2882
2928
  exports.parseSSELine = parseSSELine;
@@ -2893,5 +2939,5 @@ exports.stopNetworkCapture = stopNetworkCapture;
2893
2939
  exports.streamSSE = streamSSE;
2894
2940
  exports.zodObjectToInputSchema = zodObjectToInputSchema;
2895
2941
  exports.zodToJsonSchema = zodToJsonSchema;
2896
- //# sourceMappingURL=chunk-OQPRIB73.cjs.map
2897
- //# sourceMappingURL=chunk-OQPRIB73.cjs.map
2942
+ //# sourceMappingURL=chunk-I3SQUNTT.cjs.map
2943
+ //# sourceMappingURL=chunk-I3SQUNTT.cjs.map