@farazirfan/costar-server-executor 1.7.37 → 1.7.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.
Files changed (253) hide show
  1. package/dist/agent/agent.d.ts +90 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +606 -0
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/pi-embedded-runner/run.d.ts.map +1 -1
  6. package/dist/agent/pi-embedded-runner/run.js +2 -1
  7. package/dist/agent/pi-embedded-runner/run.js.map +1 -1
  8. package/dist/agent/pi-embedded-runner/system-prompt.d.ts.map +1 -1
  9. package/dist/agent/pi-embedded-runner/system-prompt.js +16 -37
  10. package/dist/agent/pi-embedded-runner/system-prompt.js.map +1 -1
  11. package/dist/agent/pi-embedded-runner/tools.d.ts +4 -1
  12. package/dist/agent/pi-embedded-runner/tools.d.ts.map +1 -1
  13. package/dist/agent/pi-embedded-runner/tools.js +3 -1
  14. package/dist/agent/pi-embedded-runner/tools.js.map +1 -1
  15. package/dist/agent/pi-embedded-runner/types.d.ts +4 -0
  16. package/dist/agent/pi-embedded-runner/types.d.ts.map +1 -1
  17. package/dist/cli/env-loader.d.ts.map +1 -1
  18. package/dist/cli/env-loader.js +1 -0
  19. package/dist/cli/env-loader.js.map +1 -1
  20. package/dist/cli/setup.js +2 -2
  21. package/dist/cli/setup.js.map +1 -1
  22. package/dist/cron/normalize.d.ts +31 -0
  23. package/dist/cron/normalize.d.ts.map +1 -0
  24. package/dist/cron/normalize.js +211 -0
  25. package/dist/cron/normalize.js.map +1 -0
  26. package/dist/cron/scheduler.d.ts +33 -3
  27. package/dist/cron/scheduler.d.ts.map +1 -1
  28. package/dist/cron/scheduler.js +253 -48
  29. package/dist/cron/scheduler.js.map +1 -1
  30. package/dist/heartbeat/runner.d.ts +27 -12
  31. package/dist/heartbeat/runner.d.ts.map +1 -1
  32. package/dist/heartbeat/runner.js +82 -104
  33. package/dist/heartbeat/runner.js.map +1 -1
  34. package/dist/infra/heartbeat-events-filter.d.ts +29 -0
  35. package/dist/infra/heartbeat-events-filter.d.ts.map +1 -0
  36. package/dist/infra/heartbeat-events-filter.js +80 -0
  37. package/dist/infra/heartbeat-events-filter.js.map +1 -0
  38. package/dist/infra/index.d.ts +9 -0
  39. package/dist/infra/index.d.ts.map +1 -0
  40. package/dist/infra/index.js +9 -0
  41. package/dist/infra/index.js.map +1 -0
  42. package/dist/infra/system-events.d.ts +58 -2
  43. package/dist/infra/system-events.d.ts.map +1 -1
  44. package/dist/infra/system-events.js +80 -14
  45. package/dist/infra/system-events.js.map +1 -1
  46. package/dist/server.d.ts.map +1 -1
  47. package/dist/server.js +6 -1
  48. package/dist/server.js.map +1 -1
  49. package/dist/services/platform-keys.d.ts +19 -0
  50. package/dist/services/platform-keys.d.ts.map +1 -0
  51. package/dist/services/platform-keys.js +74 -0
  52. package/dist/services/platform-keys.js.map +1 -0
  53. package/dist/subagent/registry.d.ts +96 -0
  54. package/dist/subagent/registry.d.ts.map +1 -0
  55. package/dist/subagent/registry.js +180 -0
  56. package/dist/subagent/registry.js.map +1 -0
  57. package/dist/tools/complete-turn.d.ts +2 -2
  58. package/dist/tools/complete-turn.js +10 -10
  59. package/dist/tools/complete-turn.js.map +1 -1
  60. package/dist/tools/contacts.d.ts +13 -0
  61. package/dist/tools/contacts.d.ts.map +1 -0
  62. package/dist/tools/contacts.js +80 -0
  63. package/dist/tools/contacts.js.map +1 -0
  64. package/dist/tools/cron.d.ts +17 -2
  65. package/dist/tools/cron.d.ts.map +1 -1
  66. package/dist/tools/cron.js +117 -35
  67. package/dist/tools/cron.js.map +1 -1
  68. package/dist/tools/google-maps.d.ts +6 -6
  69. package/dist/tools/google-maps.d.ts.map +1 -1
  70. package/dist/tools/google-maps.js +207 -262
  71. package/dist/tools/google-maps.js.map +1 -1
  72. package/dist/tools/index.d.ts +17 -7
  73. package/dist/tools/index.d.ts.map +1 -1
  74. package/dist/tools/index.js +40 -9
  75. package/dist/tools/index.js.map +1 -1
  76. package/dist/tools/phone-call.d.ts +11 -0
  77. package/dist/tools/phone-call.d.ts.map +1 -0
  78. package/dist/tools/phone-call.js +151 -0
  79. package/dist/tools/phone-call.js.map +1 -0
  80. package/dist/tools/sessions-spawn.d.ts +33 -0
  81. package/dist/tools/sessions-spawn.d.ts.map +1 -0
  82. package/dist/tools/sessions-spawn.js +164 -0
  83. package/dist/tools/sessions-spawn.js.map +1 -0
  84. package/dist/tools/spotify.d.ts +12 -0
  85. package/dist/tools/spotify.d.ts.map +1 -0
  86. package/dist/tools/spotify.js +251 -0
  87. package/dist/tools/spotify.js.map +1 -0
  88. package/dist/tools/subagents.d.ts +23 -0
  89. package/dist/tools/subagents.d.ts.map +1 -0
  90. package/dist/tools/subagents.js +209 -0
  91. package/dist/tools/subagents.js.map +1 -0
  92. package/dist/tools/whatsapp.d.ts +13 -0
  93. package/dist/tools/whatsapp.d.ts.map +1 -0
  94. package/dist/tools/whatsapp.js +215 -0
  95. package/dist/tools/whatsapp.js.map +1 -0
  96. package/dist/tools/youtube.d.ts +12 -0
  97. package/dist/tools/youtube.d.ts.map +1 -0
  98. package/dist/tools/youtube.js +218 -0
  99. package/dist/tools/youtube.js.map +1 -0
  100. package/dist/utils/asterizk-auth.d.ts +43 -0
  101. package/dist/utils/asterizk-auth.d.ts.map +1 -0
  102. package/dist/utils/asterizk-auth.js +125 -0
  103. package/dist/utils/asterizk-auth.js.map +1 -0
  104. package/dist/web-server.d.ts.map +1 -1
  105. package/dist/web-server.js +132 -0
  106. package/dist/web-server.js.map +1 -1
  107. package/dist/workspace/index.d.ts +3 -4
  108. package/dist/workspace/index.d.ts.map +1 -1
  109. package/dist/workspace/index.js +3 -4
  110. package/dist/workspace/index.js.map +1 -1
  111. package/dist/workspace/templates.d.ts +8 -7
  112. package/dist/workspace/templates.d.ts.map +1 -1
  113. package/dist/workspace/templates.js +18 -127
  114. package/dist/workspace/templates.js.map +1 -1
  115. package/dist/workspace/workspace.d.ts +2 -4
  116. package/dist/workspace/workspace.d.ts.map +1 -1
  117. package/dist/workspace/workspace.js +7 -16
  118. package/dist/workspace/workspace.js.map +1 -1
  119. package/package.json +1 -1
  120. package/public/index.html +231 -0
  121. package/skills/docx/SKILL.md +468 -0
  122. package/skills/docx/scripts/__init__.py +1 -0
  123. package/skills/docx/scripts/accept_changes.py +181 -0
  124. package/skills/docx/scripts/comment.py +347 -0
  125. package/skills/docx/scripts/helpers/__init__.py +0 -0
  126. package/skills/docx/scripts/helpers/merge_runs.py +231 -0
  127. package/skills/docx/scripts/helpers/simplify_redlines.py +240 -0
  128. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  129. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  130. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  131. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  132. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  133. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  134. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  135. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  136. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  137. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  138. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  139. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  140. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  141. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  142. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  143. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  144. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  145. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  146. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  147. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  148. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  149. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  150. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  151. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  152. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  153. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  154. package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  155. package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  156. package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  157. package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  158. package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  159. package/skills/docx/scripts/ooxml/schemas/mce/mc.xsd +75 -0
  160. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  161. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  162. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  163. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  164. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  165. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  166. package/skills/docx/scripts/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  167. package/skills/docx/scripts/ooxml/scripts/pack.py +159 -0
  168. package/skills/docx/scripts/ooxml/scripts/unpack.py +29 -0
  169. package/skills/docx/scripts/ooxml/scripts/validate.py +106 -0
  170. package/skills/docx/scripts/ooxml/scripts/validation/__init__.py +15 -0
  171. package/skills/docx/scripts/ooxml/scripts/validation/base.py +1023 -0
  172. package/skills/docx/scripts/ooxml/scripts/validation/docx.py +519 -0
  173. package/skills/docx/scripts/ooxml/scripts/validation/pptx.py +315 -0
  174. package/skills/docx/scripts/ooxml/scripts/validation/redlining.py +284 -0
  175. package/skills/docx/scripts/pack.py +166 -0
  176. package/skills/docx/scripts/templates/comments.xml +3 -0
  177. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  178. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  179. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  180. package/skills/docx/scripts/templates/people.xml +3 -0
  181. package/skills/docx/scripts/unpack.py +134 -0
  182. package/skills/longform-video-generation/SKILL.md +298 -0
  183. package/skills/longform-video-generation/references/advanced_techniques.md +474 -0
  184. package/skills/longform-video-generation/references/google_api_guide.md +288 -0
  185. package/skills/longform-video-generation/scripts/video_generator.py +579 -0
  186. package/skills/pdf/FORMS.md +305 -0
  187. package/skills/pdf/REFERENCE.md +612 -0
  188. package/skills/pdf/SKILL.md +293 -0
  189. package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  190. package/skills/pdf/scripts/check_fillable_fields.py +12 -0
  191. package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  192. package/skills/pdf/scripts/create_validation_image.py +41 -0
  193. package/skills/pdf/scripts/extract_form_field_info.py +152 -0
  194. package/skills/pdf/scripts/extract_form_structure.py +124 -0
  195. package/skills/pdf/scripts/fill_fillable_fields.py +116 -0
  196. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +136 -0
  197. package/skills/pptx/SKILL.md +171 -0
  198. package/skills/pptx/editing.md +205 -0
  199. package/skills/pptx/pptxgenjs.md +377 -0
  200. package/skills/pptx/scripts/add_slide.py +225 -0
  201. package/skills/pptx/scripts/clean.py +309 -0
  202. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  203. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  204. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  205. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  206. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  207. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  208. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  209. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  210. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  211. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  212. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  213. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  214. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  215. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  216. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  217. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  218. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  219. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  220. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  221. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  222. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  223. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  224. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  225. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  226. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  227. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  228. package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  229. package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  230. package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  231. package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  232. package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  233. package/skills/pptx/scripts/ooxml/schemas/mce/mc.xsd +75 -0
  234. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  235. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  236. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  237. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  238. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  239. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  240. package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  241. package/skills/pptx/scripts/ooxml/scripts/pack.py +159 -0
  242. package/skills/pptx/scripts/ooxml/scripts/unpack.py +29 -0
  243. package/skills/pptx/scripts/ooxml/scripts/validate.py +106 -0
  244. package/skills/pptx/scripts/ooxml/scripts/validation/__init__.py +15 -0
  245. package/skills/pptx/scripts/ooxml/scripts/validation/base.py +1023 -0
  246. package/skills/pptx/scripts/ooxml/scripts/validation/docx.py +519 -0
  247. package/skills/pptx/scripts/ooxml/scripts/validation/pptx.py +315 -0
  248. package/skills/pptx/scripts/ooxml/scripts/validation/redlining.py +284 -0
  249. package/skills/pptx/scripts/pack.py +168 -0
  250. package/skills/pptx/scripts/thumbnail.py +318 -0
  251. package/skills/pptx/scripts/unpack.py +86 -0
  252. package/skills/xlsx/SKILL.md +291 -0
  253. package/skills/xlsx/recalc.py +247 -0
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CoStar Server Executor - Tools Index
3
3
  *
4
- * Central export point for all 29 core tools (28 original + cron)
4
+ * Central export point for all core tools
5
5
  */
6
6
  import { readTool, writeTool, editTool, bashTool } from "@mariozechner/pi-coding-agent";
7
7
  import { createExecTool, execTool } from "./exec.js";
@@ -18,7 +18,15 @@ import { createGetCalendarEventsTool, createCreateCalendarEventTool, createUpdat
18
18
  import { createGenerateImageTool } from "./generate-image.js";
19
19
  import { createDiscoverDataApiTool, createFetchApiDataTool } from "./fetch-api-data.js";
20
20
  import { createCronTool } from "./cron.js";
21
- import { createCompleteTurnTool } from "./complete-turn.js";
21
+ import { createCompleteTaskTool } from "./complete-turn.js";
22
+ import { createSessionsSpawnTool } from "./sessions-spawn.js";
23
+ import { createSubagentsTool } from "./subagents.js";
24
+ import { createPhoneCallTool } from "./phone-call.js";
25
+ import { createWhatsAppTool } from "./whatsapp.js";
26
+ import { createContactsSearchTool } from "./contacts.js";
27
+ import { createSpotifyTool } from "./spotify.js";
28
+ import { createYouTubeTool } from "./youtube.js";
29
+ import { createGoogleMapsTool } from "./google-maps.js";
22
30
  // Re-export individual tool creators and types
23
31
  export {
24
32
  // File Operations
@@ -43,25 +51,33 @@ createGetCalendarEventsTool, createCreateCalendarEventTool, createUpdateCalendar
43
51
  createDiscoverDataApiTool, createFetchApiDataTool,
44
52
  // Cron (OpenClaw)
45
53
  createCronTool,
46
- // Turn completion
47
- createCompleteTurnTool, };
54
+ // Task completion
55
+ createCompleteTaskTool,
56
+ // Sub-agent spawning (OpenClaw)
57
+ createSessionsSpawnTool, createSubagentsTool,
58
+ // Communication (phone, WhatsApp, contacts)
59
+ createPhoneCallTool, createWhatsAppTool, createContactsSearchTool,
60
+ // Media & Services
61
+ createSpotifyTool, createYouTubeTool, createGoogleMapsTool, };
48
62
  /**
49
- * Get all 30 core tools
63
+ * Get all core tools
50
64
  *
51
65
  * Tool breakdown:
52
66
  * - File Operations (4): read, write, edit, bash
53
67
  * - Execution (2): exec, process
54
68
  * - Web (3): web_search, web_fetch, browser
55
69
  * - Memory (2): memory_search, memory_get
56
- * - Communication (1): message
70
+ * - Communication (4): message, phone_call, whatsapp, contacts_search
57
71
  * - Media (2): image, generate_image
58
- * - System (2): session_status, complete_turn
72
+ * - System (2): session_status, complete_task
59
73
  * - Email (4): search_emails, send_email, read_email, read_email_thread
60
74
  * - Calendar (4): get_calendar_events, create_calendar_event, update_calendar_event, delete_calendar_event
61
75
  * - Data API (2): discover_data_api, fetch_api_data (matches client executor)
76
+ * - Services (3): spotify, youtube, google_maps
62
77
  * - Scheduling (1): cron (OpenClaw-compatible)
78
+ * - Sub-agents (2): sessions_spawn, subagents (OpenClaw-compatible, conditional on deps)
63
79
  */
64
- export function getAllTools(cronDeps) {
80
+ export function getAllTools(cronDeps, subagentDeps) {
65
81
  const tools = [
66
82
  // File Operations (4)
67
83
  readTool,
@@ -85,7 +101,7 @@ export function getAllTools(cronDeps) {
85
101
  createGenerateImageTool(),
86
102
  // System (2)
87
103
  createSessionStatusTool(),
88
- createCompleteTurnTool(),
104
+ createCompleteTaskTool(),
89
105
  // Email (4)
90
106
  createSearchEmailsTool(),
91
107
  createSendEmailTool(),
@@ -99,11 +115,26 @@ export function getAllTools(cronDeps) {
99
115
  // Data API (2) — discovery + execution, matches client executor
100
116
  createDiscoverDataApiTool(),
101
117
  createFetchApiDataTool(),
118
+ // Communication (3) — phone, WhatsApp, contacts
119
+ createPhoneCallTool(),
120
+ createWhatsAppTool(),
121
+ createContactsSearchTool(),
122
+ // Services (3) — Spotify, YouTube, Google Maps
123
+ createSpotifyTool(),
124
+ createYouTubeTool(),
125
+ createGoogleMapsTool(),
102
126
  ];
103
127
  // Cron tool (1) - OpenClaw-compatible, requires deps for scheduler/heartbeat integration
104
128
  if (cronDeps) {
105
129
  tools.push(createCronTool(cronDeps));
106
130
  }
131
+ // Sub-agent tools (2) - OpenClaw-compatible, requires deps for agent reference
132
+ // Only added to main sessions; sub-agent sessions are called without subagentDeps
133
+ // to enforce depth limits (sub-agents cannot spawn their own sub-agents).
134
+ if (subagentDeps) {
135
+ tools.push(createSessionsSpawnTool(subagentDeps));
136
+ tools.push(createSubagentsTool(subagentDeps));
137
+ }
107
138
  return tools;
108
139
  }
109
140
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CoStar Server Executor - Phone Call Tool
3
+ *
4
+ * Make phone calls via VAPI (background AI-powered calls).
5
+ * Uses the Asterizk API endpoint /email/vapi/manage.
6
+ *
7
+ * Operations: make_call, check_status, get_report, list_calls
8
+ */
9
+ import type { AnyAgentTool } from "../types/tool.js";
10
+ export declare function createPhoneCallTool(): AnyAgentTool;
11
+ //# sourceMappingURL=phone-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-call.d.ts","sourceRoot":"","sources":["../../src/tools/phone-call.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2DrD,wBAAgB,mBAAmB,IAAI,YAAY,CAuHlD"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * CoStar Server Executor - Phone Call Tool
3
+ *
4
+ * Make phone calls via VAPI (background AI-powered calls).
5
+ * Uses the Asterizk API endpoint /email/vapi/manage.
6
+ *
7
+ * Operations: make_call, check_status, get_report, list_calls
8
+ */
9
+ import { Type } from "@sinclair/typebox";
10
+ import { jsonResult, readStringParam, readNumberParam } from "../utils/tool-helpers.js";
11
+ import { asterizkFetch, handleAsterizkApiError } from "../utils/asterizk-auth.js";
12
+ const PhoneCallSchema = Type.Object({
13
+ operation: Type.Union([
14
+ Type.Literal("make_call"),
15
+ Type.Literal("check_status"),
16
+ Type.Literal("get_report"),
17
+ Type.Literal("list_calls"),
18
+ ], {
19
+ description: "Operation to perform: make_call (initiate a call), check_status (check call progress), get_report (get transcript/report), list_calls (list recent calls)",
20
+ }),
21
+ phone_number: Type.Optional(Type.String({
22
+ description: "Phone number to call in international format (e.g., +1234567890). Required for make_call.",
23
+ })),
24
+ message: Type.Optional(Type.String({
25
+ description: "Instructions for the AI call agent — what to say, information to gather, actions to take. Required for make_call.",
26
+ })),
27
+ call_id: Type.Optional(Type.String({
28
+ description: "Call ID to check status or get report for. Required for check_status and get_report.",
29
+ })),
30
+ query: Type.Optional(Type.String({ description: "Search query to filter calls. Used with list_calls." })),
31
+ limit: Type.Optional(Type.Number({ description: "Maximum number of calls to return. Used with list_calls. Default: 10." })),
32
+ });
33
+ /**
34
+ * Clean phone number: strip non-digits except +, convert 00 prefix to +
35
+ */
36
+ function cleanPhoneNumber(raw) {
37
+ let cleaned = raw.trim();
38
+ // Convert 00 international prefix to +
39
+ if (cleaned.startsWith("00")) {
40
+ cleaned = "+" + cleaned.slice(2);
41
+ }
42
+ // Strip everything except digits and +
43
+ cleaned = cleaned.replace(/[^\d+]/g, "");
44
+ // Ensure + prefix
45
+ if (!cleaned.startsWith("+")) {
46
+ cleaned = "+" + cleaned;
47
+ }
48
+ return cleaned;
49
+ }
50
+ export function createPhoneCallTool() {
51
+ return {
52
+ name: "phone_call",
53
+ label: "Phone Call",
54
+ description: "Make and manage phone calls via AI assistant. Operations: make_call (place a background AI call with instructions), check_status (check call progress), get_report (get transcript/report), list_calls (list recent calls). Always search contacts first to get the correct phone number before calling.",
55
+ parameters: PhoneCallSchema,
56
+ execute: async (_toolCallId, params) => {
57
+ const operation = readStringParam(params, "operation", { required: true });
58
+ try {
59
+ switch (operation) {
60
+ case "make_call": {
61
+ const rawPhone = readStringParam(params, "phone_number", { required: true });
62
+ const message = readStringParam(params, "message", { required: true });
63
+ const phoneNumber = cleanPhoneNumber(rawPhone);
64
+ console.log(`[PHONE] Making call to ${phoneNumber}`);
65
+ const response = await asterizkFetch("/email/vapi/manage", {
66
+ body: {
67
+ operation: "make_vapi_call",
68
+ phone_number: phoneNumber,
69
+ call_description: message,
70
+ timezone: process.env.USER_TIMEZONE || "UTC",
71
+ },
72
+ });
73
+ if (!response.ok) {
74
+ const errText = await response.text();
75
+ throw new Error(`VAPI call failed (${response.status}): ${errText}`);
76
+ }
77
+ const data = await response.json();
78
+ console.log(`[PHONE] Call initiated: ${data.call_id || "unknown"}`);
79
+ return jsonResult({
80
+ status: "call_initiated",
81
+ call_id: data.call_id,
82
+ phone_number: phoneNumber,
83
+ message: "Background call initiated. Use check_status with the call_id to monitor progress.",
84
+ data,
85
+ });
86
+ }
87
+ case "check_status": {
88
+ const callId = readStringParam(params, "call_id", { required: true });
89
+ console.log(`[PHONE] Checking status for call ${callId}`);
90
+ const response = await asterizkFetch("/email/vapi/manage", {
91
+ body: {
92
+ operation: "check_call_status",
93
+ call_id: callId,
94
+ },
95
+ });
96
+ if (!response.ok) {
97
+ const errText = await response.text();
98
+ throw new Error(`Status check failed (${response.status}): ${errText}`);
99
+ }
100
+ const data = await response.json();
101
+ return jsonResult({ call_id: callId, ...data });
102
+ }
103
+ case "get_report": {
104
+ const callId = readStringParam(params, "call_id", { required: true });
105
+ console.log(`[PHONE] Getting report for call ${callId}`);
106
+ const response = await asterizkFetch("/email/vapi/manage", {
107
+ body: {
108
+ operation: "get_call_report",
109
+ call_id: callId,
110
+ },
111
+ });
112
+ if (!response.ok) {
113
+ const errText = await response.text();
114
+ throw new Error(`Report fetch failed (${response.status}): ${errText}`);
115
+ }
116
+ const data = await response.json();
117
+ return jsonResult({ call_id: callId, ...data });
118
+ }
119
+ case "list_calls": {
120
+ const query = readStringParam(params, "query") || "";
121
+ const limit = readNumberParam(params, "limit") || 10;
122
+ console.log(`[PHONE] Listing calls (query: "${query}", limit: ${limit})`);
123
+ const response = await asterizkFetch("/email/vapi/manage", {
124
+ body: {
125
+ operation: "list_calls",
126
+ query,
127
+ limit,
128
+ },
129
+ });
130
+ if (!response.ok) {
131
+ const errText = await response.text();
132
+ throw new Error(`List calls failed (${response.status}): ${errText}`);
133
+ }
134
+ const data = await response.json();
135
+ return jsonResult(data);
136
+ }
137
+ default:
138
+ return jsonResult({
139
+ error: "invalid_operation",
140
+ message: `Unknown operation: ${operation}. Use: make_call, check_status, get_report, list_calls`,
141
+ });
142
+ }
143
+ }
144
+ catch (error) {
145
+ console.error(`[PHONE] Error (${operation}):`, error);
146
+ return jsonResult(handleAsterizkApiError(error, operation));
147
+ }
148
+ },
149
+ };
150
+ }
151
+ //# sourceMappingURL=phone-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-call.js","sourceRoot":"","sources":["../../src/tools/phone-call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CoStar Server Executor - Sessions Spawn Tool
3
+ * Ported from OpenClaw's agents/tools/sessions-spawn-tool.ts
4
+ *
5
+ * Differences from OpenClaw:
6
+ * - No gateway RPC (spawnSubagentDirect) — uses agent.runSubagentTurn() directly
7
+ * - No agentId param (single agent per user)
8
+ * - No thinking override (not needed v1)
9
+ * - No DeliveryContext / channel routing (single agent)
10
+ * - Spawn validation (depth, max children) inlined from subagent-spawn.ts
11
+ * - Fire-and-forget pattern with Promise.then() for completion handling
12
+ *
13
+ * Matched with OpenClaw:
14
+ * - Same tool name: sessions_spawn
15
+ * - Same core params: task, label, runTimeoutSeconds, cleanup
16
+ * - Same depth limits (default maxSpawnDepth=1, maxChildren=5)
17
+ * - Same result shape: { status, runId, label, ... }
18
+ * - Same auto-announce on completion via injectIsolatedResult
19
+ */
20
+ import type { AnyAgentTool } from "../types/tool.js";
21
+ import type { Agent } from "../agent/agent.js";
22
+ export type SubagentToolDeps = {
23
+ /** User ID for the requester session */
24
+ userId: string;
25
+ /** Agent instance for running sub-agent turns */
26
+ agent: Agent;
27
+ /** Maximum allowed spawn depth. Default: 1 (sub-agents cannot spawn) */
28
+ maxSpawnDepth?: number;
29
+ /** Maximum concurrent children per requester. Default: 5 */
30
+ maxChildren?: number;
31
+ };
32
+ export declare function createSessionsSpawnTool(deps: SubagentToolDeps): AnyAgentTool;
33
+ //# sourceMappingURL=sessions-spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-spawn.d.ts","sourceRoot":"","sources":["../../src/tools/sessions-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,KAAK,EAAE,KAAK,CAAC;IACb,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAeF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAkJ5E"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * CoStar Server Executor - Sessions Spawn Tool
3
+ * Ported from OpenClaw's agents/tools/sessions-spawn-tool.ts
4
+ *
5
+ * Differences from OpenClaw:
6
+ * - No gateway RPC (spawnSubagentDirect) — uses agent.runSubagentTurn() directly
7
+ * - No agentId param (single agent per user)
8
+ * - No thinking override (not needed v1)
9
+ * - No DeliveryContext / channel routing (single agent)
10
+ * - Spawn validation (depth, max children) inlined from subagent-spawn.ts
11
+ * - Fire-and-forget pattern with Promise.then() for completion handling
12
+ *
13
+ * Matched with OpenClaw:
14
+ * - Same tool name: sessions_spawn
15
+ * - Same core params: task, label, runTimeoutSeconds, cleanup
16
+ * - Same depth limits (default maxSpawnDepth=1, maxChildren=5)
17
+ * - Same result shape: { status, runId, label, ... }
18
+ * - Same auto-announce on completion via injectIsolatedResult
19
+ */
20
+ import { Type } from "@sinclair/typebox";
21
+ import { jsonResult, readStringParam } from "../utils/tool-helpers.js";
22
+ import { registerSubagentRun, completeRun, countActiveRunsForSession, getRunById, } from "../subagent/registry.js";
23
+ import crypto from "node:crypto";
24
+ // ---------- schema (from OpenClaw sessions-spawn-tool.ts:8-18, simplified) ----------
25
+ const SessionsSpawnSchema = Type.Object({
26
+ task: Type.String({ description: "What the sub-agent should accomplish. Be specific and provide all necessary context." }),
27
+ label: Type.Optional(Type.String({ description: "Short label for tracking (e.g., 'research-competitor', 'analyze-data')" })),
28
+ runTimeoutSeconds: Type.Optional(Type.Number({ description: "Timeout in seconds (default: 600 = 10 minutes)", minimum: 0 })),
29
+ // Back-compat: older callers used timeoutSeconds (OpenClaw pattern)
30
+ timeoutSeconds: Type.Optional(Type.Number({ description: "Alias for runTimeoutSeconds (backward compat)", minimum: 0 })),
31
+ cleanup: Type.Optional(Type.String({ description: "'delete' to remove session after run (default), 'keep' to retain for debugging" })),
32
+ });
33
+ // ---------- tool factory ----------
34
+ export function createSessionsSpawnTool(deps) {
35
+ return {
36
+ label: "Sessions",
37
+ name: "sessions_spawn",
38
+ description: `Spawn a background sub-agent to handle a task in parallel. The sub-agent runs in a separate isolated session with all standard tools (except spawning/management). Results are automatically delivered back when complete.
39
+
40
+ Use for: research tasks, data gathering, parallel workstreams, multi-step analysis, anything that benefits from concurrent execution.
41
+
42
+ Rules:
43
+ - Maximum ${deps.maxChildren ?? 5} concurrent sub-agents
44
+ - Sub-agents cannot spawn their own sub-agents (depth limit: ${deps.maxSpawnDepth ?? 1})
45
+ - Results are automatically announced when complete — do NOT poll or sleep
46
+ - Use the 'subagents' tool to check status or kill running sub-agents
47
+ - Each sub-agent gets its own isolated session with full tool access
48
+ - Write clear, self-contained task descriptions — sub-agents have no conversation context`,
49
+ parameters: SessionsSpawnSchema,
50
+ execute: async (_toolCallId, params) => {
51
+ // ── 1. Validate depth (from OpenClaw subagent-spawn.ts:109-116) ──
52
+ const maxDepth = deps.maxSpawnDepth ?? 1;
53
+ // Current depth is always 0 from main agent (sub-agents don't get this tool)
54
+ const currentDepth = 0;
55
+ if (currentDepth >= maxDepth) {
56
+ return jsonResult({
57
+ status: "forbidden",
58
+ error: `Sub-agent spawning not allowed at this depth (current: ${currentDepth}, max: ${maxDepth})`,
59
+ });
60
+ }
61
+ // ── 2. Validate max children (from OpenClaw subagent-spawn.ts:118-125) ──
62
+ const maxChildren = deps.maxChildren ?? 5;
63
+ const activeCount = countActiveRunsForSession(deps.userId);
64
+ if (activeCount >= maxChildren) {
65
+ return jsonResult({
66
+ status: "forbidden",
67
+ error: `Maximum concurrent sub-agents reached (${activeCount}/${maxChildren}). Wait for one to complete or kill one using the 'subagents' tool.`,
68
+ });
69
+ }
70
+ // ── 3. Read params (from OpenClaw sessions-spawn-tool.ts:40-58) ──
71
+ const task = readStringParam(params, "task", { required: true });
72
+ const label = typeof params.label === "string" ? params.label.trim() : undefined;
73
+ // Back-compat: older callers used timeoutSeconds
74
+ const timeoutSecondsCandidate = typeof params.runTimeoutSeconds === "number"
75
+ ? params.runTimeoutSeconds
76
+ : typeof params.timeoutSeconds === "number"
77
+ ? params.timeoutSeconds
78
+ : undefined;
79
+ const runTimeoutSeconds = typeof timeoutSecondsCandidate === "number" && Number.isFinite(timeoutSecondsCandidate)
80
+ ? Math.max(0, Math.floor(timeoutSecondsCandidate))
81
+ : 600; // Default: 10 minutes
82
+ const cleanup = params.cleanup === "keep" || params.cleanup === "delete"
83
+ ? params.cleanup
84
+ : "delete"; // Default: delete session after run
85
+ // ── 4. Create AbortController and register ──
86
+ const abortController = new AbortController();
87
+ const runId = crypto.randomUUID();
88
+ registerSubagentRun({
89
+ runId,
90
+ requesterSessionKey: deps.userId,
91
+ task,
92
+ label: label || undefined,
93
+ status: "running",
94
+ startedAt: Date.now(),
95
+ depth: currentDepth + 1,
96
+ abortController,
97
+ });
98
+ // ── 5. Fire-and-forget: run sub-agent in background ──
99
+ const runPromise = deps.agent.runSubagentTurn(task, {
100
+ sessionLabel: label ? `subagent:${label}` : `subagent:${runId.slice(0, 8)}`,
101
+ deleteAfterRun: cleanup === "delete",
102
+ abortSignal: abortController.signal,
103
+ timeoutMs: runTimeoutSeconds * 1000,
104
+ });
105
+ // ── 6. Background completion handler ──
106
+ runPromise
107
+ .then(async (result) => {
108
+ const record = getRunById(runId);
109
+ if (!record || record.status !== "running") {
110
+ // Already killed or completed — skip
111
+ return;
112
+ }
113
+ const summaryText = result.outputText?.trim() || result.response?.trim() || "";
114
+ const durationMs = Date.now() - record.startedAt;
115
+ completeRun(runId, {
116
+ status: result.success ? "completed" : "failed",
117
+ outcome: summaryText.slice(0, 5000), // Cap at 5k chars
118
+ error: result.error,
119
+ durationMs,
120
+ inputTokens: result.inputTokens,
121
+ outputTokens: result.outputTokens,
122
+ });
123
+ // Announce to main session (same pattern as cron scheduler isolated job)
124
+ if (!result.didSendViaMessagingTool && summaryText) {
125
+ try {
126
+ await deps.agent.injectIsolatedResult({
127
+ label: label || `sub-agent task`,
128
+ summary: summaryText,
129
+ status: result.success ? "ok" : "error",
130
+ durationMs,
131
+ inputTokens: result.inputTokens,
132
+ outputTokens: result.outputTokens,
133
+ });
134
+ }
135
+ catch (announceErr) {
136
+ console.warn(`[SESSIONS-SPAWN] Announce failed for run ${runId}:`, announceErr);
137
+ }
138
+ }
139
+ })
140
+ .catch((err) => {
141
+ const record = getRunById(runId);
142
+ if (!record || record.status !== "running")
143
+ return;
144
+ const isAbort = err instanceof Error &&
145
+ (err.name === "AbortError" || err.message.includes("aborted"));
146
+ completeRun(runId, {
147
+ status: isAbort ? "killed" : "failed",
148
+ error: err instanceof Error ? err.message : String(err),
149
+ durationMs: Date.now() - record.startedAt,
150
+ });
151
+ });
152
+ // ── 7. Return immediately (from OpenClaw sessions-spawn-tool.ts:84) ──
153
+ return jsonResult({
154
+ status: "spawned",
155
+ runId,
156
+ label: label || undefined,
157
+ task: task.slice(0, 100),
158
+ activeSubagents: activeCount + 1,
159
+ note: "Sub-agent is running in the background. Results will be automatically announced when complete. Use 'subagents' tool to check status.",
160
+ });
161
+ },
162
+ };
163
+ }
164
+ //# sourceMappingURL=sessions-spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-spawn.js","sourceRoot":"","sources":["../../src/tools/sessions-spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CoStar Server Executor - Spotify Tool
3
+ *
4
+ * Search Spotify for tracks, albums, artists, and playlists.
5
+ * Uses Spotify Web API with client credentials flow (no user login needed).
6
+ * Search + info only — cannot control playback (server has no speakers).
7
+ *
8
+ * Requires: SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET env vars.
9
+ */
10
+ import type { AnyAgentTool } from "../types/tool.js";
11
+ export declare function createSpotifyTool(): AnyAgentTool;
12
+ //# sourceMappingURL=spotify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spotify.d.ts","sourceRoot":"","sources":["../../src/tools/spotify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2GrD,wBAAgB,iBAAiB,IAAI,YAAY,CA6LhD"}