@apify/actors-mcp-server 0.18.4 → 0.18.5-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +5 -2
  2. package/dist/apify_client.js +1 -4
  3. package/dist/apify_client.js.map +1 -1
  4. package/dist/const.d.ts +7 -4
  5. package/dist/const.d.ts.map +1 -1
  6. package/dist/const.js +9 -8
  7. package/dist/const.js.map +1 -1
  8. package/dist/dev_server.js +1 -4
  9. package/dist/dev_server.js.map +1 -1
  10. package/dist/errors.js +1 -4
  11. package/dist/errors.js.map +1 -1
  12. package/dist/index.js +1 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/index_internals.d.ts +2 -0
  15. package/dist/index_internals.d.ts.map +1 -1
  16. package/dist/index_internals.js +1 -4
  17. package/dist/index_internals.js.map +1 -1
  18. package/dist/index_internals_test_kit.js +1 -4
  19. package/dist/index_internals_test_kit.js.map +1 -1
  20. package/dist/input.js +1 -4
  21. package/dist/input.js.map +1 -1
  22. package/dist/instrument.js +1 -4
  23. package/dist/instrument.js.map +1 -1
  24. package/dist/mcp/actors.js +1 -4
  25. package/dist/mcp/actors.js.map +1 -1
  26. package/dist/mcp/client.js +1 -4
  27. package/dist/mcp/client.js.map +1 -1
  28. package/dist/mcp/client_context.js +1 -4
  29. package/dist/mcp/client_context.js.map +1 -1
  30. package/dist/mcp/const.js +1 -4
  31. package/dist/mcp/const.js.map +1 -1
  32. package/dist/mcp/errors.js +1 -4
  33. package/dist/mcp/errors.js.map +1 -1
  34. package/dist/mcp/legacy_server.js +1 -4
  35. package/dist/mcp/legacy_server.js.map +1 -1
  36. package/dist/mcp/proxy.js +1 -4
  37. package/dist/mcp/proxy.js.map +1 -1
  38. package/dist/mcp/remote_tool_call.js +1 -4
  39. package/dist/mcp/remote_tool_call.js.map +1 -1
  40. package/dist/mcp/server.js +1 -4
  41. package/dist/mcp/server.js.map +1 -1
  42. package/dist/mcp/stateless_server.js +1 -4
  43. package/dist/mcp/stateless_server.js.map +1 -1
  44. package/dist/mcp/task_execution.js +1 -4
  45. package/dist/mcp/task_execution.js.map +1 -1
  46. package/dist/mcp/tool_call_engine.js +1 -4
  47. package/dist/mcp/tool_call_engine.js.map +1 -1
  48. package/dist/mcp/tool_call_error_mapper.js +1 -4
  49. package/dist/mcp/tool_call_error_mapper.js.map +1 -1
  50. package/dist/mcp/tool_call_telemetry.js +1 -4
  51. package/dist/mcp/tool_call_telemetry.js.map +1 -1
  52. package/dist/mcp/tool_dispatch.js +1 -4
  53. package/dist/mcp/tool_dispatch.js.map +1 -1
  54. package/dist/mcp/utils.js +1 -4
  55. package/dist/mcp/utils.js.map +1 -1
  56. package/dist/payments/const.js +1 -4
  57. package/dist/payments/const.js.map +1 -1
  58. package/dist/payments/helpers.js +1 -4
  59. package/dist/payments/helpers.js.map +1 -1
  60. package/dist/payments/index.js +1 -4
  61. package/dist/payments/index.js.map +1 -1
  62. package/dist/payments/resolve.js +1 -4
  63. package/dist/payments/resolve.js.map +1 -1
  64. package/dist/payments/skyfire.js +1 -4
  65. package/dist/payments/skyfire.js.map +1 -1
  66. package/dist/payments/types.js +1 -4
  67. package/dist/payments/types.js.map +1 -1
  68. package/dist/payments/x402.js +1 -4
  69. package/dist/payments/x402.js.map +1 -1
  70. package/dist/prompts/index.js +1 -4
  71. package/dist/prompts/index.js.map +1 -1
  72. package/dist/prompts/prompt_service.js +1 -4
  73. package/dist/prompts/prompt_service.js.map +1 -1
  74. package/dist/resources/api_resources.js +1 -4
  75. package/dist/resources/api_resources.js.map +1 -1
  76. package/dist/resources/resource_service.js +1 -4
  77. package/dist/resources/resource_service.js.map +1 -1
  78. package/dist/resources/widgets.js +1 -4
  79. package/dist/resources/widgets.js.map +1 -1
  80. package/dist/server_card.js +1 -4
  81. package/dist/server_card.js.map +1 -1
  82. package/dist/state.js +1 -4
  83. package/dist/state.js.map +1 -1
  84. package/dist/stdio.js +1 -4
  85. package/dist/stdio.js.map +1 -1
  86. package/dist/telemetry.js +1 -4
  87. package/dist/telemetry.js.map +1 -1
  88. package/dist/test_kit/cases/actors.cases.js +1 -4
  89. package/dist/test_kit/cases/actors.cases.js.map +1 -1
  90. package/dist/test_kit/cases/apps.cases.js +1 -4
  91. package/dist/test_kit/cases/apps.cases.js.map +1 -1
  92. package/dist/test_kit/cases/payments.cases.js +1 -4
  93. package/dist/test_kit/cases/payments.cases.js.map +1 -1
  94. package/dist/test_kit/cases/registration.cases.js +1 -4
  95. package/dist/test_kit/cases/registration.cases.js.map +1 -1
  96. package/dist/test_kit/cases/schedules.cases.js +1 -4
  97. package/dist/test_kit/cases/schedules.cases.js.map +1 -1
  98. package/dist/test_kit/cases/storage.cases.js +1 -4
  99. package/dist/test_kit/cases/storage.cases.js.map +1 -1
  100. package/dist/test_kit/cases/tasks.cases.js +1 -4
  101. package/dist/test_kit/cases/tasks.cases.js.map +1 -1
  102. package/dist/test_kit/cases/tools.cases.js +1 -4
  103. package/dist/test_kit/cases/tools.cases.js.map +1 -1
  104. package/dist/test_kit/cases/versions.cases.d.ts +3 -0
  105. package/dist/test_kit/cases/versions.cases.d.ts.map +1 -0
  106. package/dist/test_kit/cases/versions.cases.js +509 -0
  107. package/dist/test_kit/cases/versions.cases.js.map +1 -0
  108. package/dist/test_kit/helpers.d.ts +1 -1
  109. package/dist/test_kit/helpers.d.ts.map +1 -1
  110. package/dist/test_kit/helpers.js +2 -5
  111. package/dist/test_kit/helpers.js.map +1 -1
  112. package/dist/test_kit/index.d.ts +1 -0
  113. package/dist/test_kit/index.d.ts.map +1 -1
  114. package/dist/test_kit/index.js +4 -4
  115. package/dist/test_kit/index.js.map +1 -1
  116. package/dist/test_kit/mcp_client.js +1 -4
  117. package/dist/test_kit/mcp_client.js.map +1 -1
  118. package/dist/test_kit/register.js +1 -4
  119. package/dist/test_kit/register.js.map +1 -1
  120. package/dist/test_kit/tsconfig.tsbuildinfo +1 -1
  121. package/dist/test_kit/types.js +1 -4
  122. package/dist/test_kit/types.js.map +1 -1
  123. package/dist/tools/actor_input_schema.js +1 -4
  124. package/dist/tools/actor_input_schema.js.map +1 -1
  125. package/dist/tools/actor_tool_naming.js +1 -4
  126. package/dist/tools/actor_tool_naming.js.map +1 -1
  127. package/dist/tools/actors/actor_definition.js +1 -4
  128. package/dist/tools/actors/actor_definition.js.map +1 -1
  129. package/dist/tools/actors/actor_executor.js +1 -4
  130. package/dist/tools/actors/actor_executor.js.map +1 -1
  131. package/dist/tools/actors/actor_run_response.js +1 -4
  132. package/dist/tools/actors/actor_run_response.js.map +1 -1
  133. package/dist/tools/actors/actor_tool_contract.js +1 -4
  134. package/dist/tools/actors/actor_tool_contract.js.map +1 -1
  135. package/dist/tools/actors/actor_tools_factory.js +1 -4
  136. package/dist/tools/actors/actor_tools_factory.js.map +1 -1
  137. package/dist/tools/actors/call_actor.js +1 -4
  138. package/dist/tools/actors/call_actor.js.map +1 -1
  139. package/dist/tools/actors/delete_actor.js +1 -4
  140. package/dist/tools/actors/delete_actor.js.map +1 -1
  141. package/dist/tools/actors/fetch_actor_details.js +1 -4
  142. package/dist/tools/actors/fetch_actor_details.js.map +1 -1
  143. package/dist/tools/actors/get_actor_list.js +1 -4
  144. package/dist/tools/actors/get_actor_list.js.map +1 -1
  145. package/dist/tools/actors/search_actors.js +1 -4
  146. package/dist/tools/actors/search_actors.js.map +1 -1
  147. package/dist/tools/api/apify_api_blocklist.js +1 -4
  148. package/dist/tools/api/apify_api_blocklist.js.map +1 -1
  149. package/dist/tools/api/apify_api_details.js +1 -4
  150. package/dist/tools/api/apify_api_details.js.map +1 -1
  151. package/dist/tools/api/apify_api_path.js +1 -4
  152. package/dist/tools/api/apify_api_path.js.map +1 -1
  153. package/dist/tools/api/apify_api_read.js +1 -4
  154. package/dist/tools/api/apify_api_read.js.map +1 -1
  155. package/dist/tools/api/apify_api_request.js +1 -4
  156. package/dist/tools/api/apify_api_request.js.map +1 -1
  157. package/dist/tools/api/apify_api_search.js +1 -4
  158. package/dist/tools/api/apify_api_search.js.map +1 -1
  159. package/dist/tools/api/apify_api_spec.js +1 -4
  160. package/dist/tools/api/apify_api_spec.js.map +1 -1
  161. package/dist/tools/api/apify_api_write.js +1 -4
  162. package/dist/tools/api/apify_api_write.js.map +1 -1
  163. package/dist/tools/builds/build_actor.d.ts.map +1 -1
  164. package/dist/tools/builds/build_actor.js +10 -8
  165. package/dist/tools/builds/build_actor.js.map +1 -1
  166. package/dist/tools/builds/build_helpers.js +1 -4
  167. package/dist/tools/builds/build_helpers.js.map +1 -1
  168. package/dist/tools/builds/get_actor_build.js +1 -4
  169. package/dist/tools/builds/get_actor_build.js.map +1 -1
  170. package/dist/tools/builds/get_actor_build_list.d.ts.map +1 -1
  171. package/dist/tools/builds/get_actor_build_list.js +6 -7
  172. package/dist/tools/builds/get_actor_build_list.js.map +1 -1
  173. package/dist/tools/builds/get_actor_build_log.js +1 -4
  174. package/dist/tools/builds/get_actor_build_log.js.map +1 -1
  175. package/dist/tools/dev/report_problem.js +1 -4
  176. package/dist/tools/dev/report_problem.js.map +1 -1
  177. package/dist/tools/docs/fetch_apify_docs.js +1 -4
  178. package/dist/tools/docs/fetch_apify_docs.js.map +1 -1
  179. package/dist/tools/docs/search_apify_docs.js +1 -4
  180. package/dist/tools/docs/search_apify_docs.js.map +1 -1
  181. package/dist/tools/index.js +1 -4
  182. package/dist/tools/index.js.map +1 -1
  183. package/dist/tools/registry.d.ts +1 -1
  184. package/dist/tools/registry.d.ts.map +1 -1
  185. package/dist/tools/registry.js +5 -6
  186. package/dist/tools/registry.js.map +1 -1
  187. package/dist/tools/runs/abort_actor_run.js +1 -4
  188. package/dist/tools/runs/abort_actor_run.js.map +1 -1
  189. package/dist/tools/runs/get_actor_run.js +1 -4
  190. package/dist/tools/runs/get_actor_run.js.map +1 -1
  191. package/dist/tools/runs/get_actor_run_list.d.ts.map +1 -1
  192. package/dist/tools/runs/get_actor_run_list.js +6 -7
  193. package/dist/tools/runs/get_actor_run_list.js.map +1 -1
  194. package/dist/tools/runs/get_actor_run_log.js +1 -4
  195. package/dist/tools/runs/get_actor_run_log.js.map +1 -1
  196. package/dist/tools/schedules/create_schedule.js +1 -4
  197. package/dist/tools/schedules/create_schedule.js.map +1 -1
  198. package/dist/tools/schedules/delete_schedule.js +1 -4
  199. package/dist/tools/schedules/delete_schedule.js.map +1 -1
  200. package/dist/tools/schedules/get_schedule.js +1 -4
  201. package/dist/tools/schedules/get_schedule.js.map +1 -1
  202. package/dist/tools/schedules/schedule_helpers.d.ts.map +1 -1
  203. package/dist/tools/schedules/schedule_helpers.js +3 -5
  204. package/dist/tools/schedules/schedule_helpers.js.map +1 -1
  205. package/dist/tools/schedules/update_schedule.js +2 -5
  206. package/dist/tools/schedules/update_schedule.js.map +1 -1
  207. package/dist/tools/storage/get_dataset.js +1 -4
  208. package/dist/tools/storage/get_dataset.js.map +1 -1
  209. package/dist/tools/storage/get_dataset_items.js +1 -4
  210. package/dist/tools/storage/get_dataset_items.js.map +1 -1
  211. package/dist/tools/storage/get_dataset_list.js +1 -4
  212. package/dist/tools/storage/get_dataset_list.js.map +1 -1
  213. package/dist/tools/storage/get_dataset_schema.js +1 -4
  214. package/dist/tools/storage/get_dataset_schema.js.map +1 -1
  215. package/dist/tools/storage/get_key_value_store.js +1 -4
  216. package/dist/tools/storage/get_key_value_store.js.map +1 -1
  217. package/dist/tools/storage/get_key_value_store_keys.js +1 -4
  218. package/dist/tools/storage/get_key_value_store_keys.js.map +1 -1
  219. package/dist/tools/storage/get_key_value_store_list.js +1 -4
  220. package/dist/tools/storage/get_key_value_store_list.js.map +1 -1
  221. package/dist/tools/storage/get_key_value_store_record.js +1 -4
  222. package/dist/tools/storage/get_key_value_store_record.js.map +1 -1
  223. package/dist/tools/storage/storage_helpers.js +1 -4
  224. package/dist/tools/storage/storage_helpers.js.map +1 -1
  225. package/dist/tools/structured_output_schemas.d.ts +180 -0
  226. package/dist/tools/structured_output_schemas.d.ts.map +1 -1
  227. package/dist/tools/structured_output_schemas.js +60 -4
  228. package/dist/tools/structured_output_schemas.js.map +1 -1
  229. package/dist/tools/tasks/create_actor_task.d.ts.map +1 -1
  230. package/dist/tools/tasks/create_actor_task.js +3 -5
  231. package/dist/tools/tasks/create_actor_task.js.map +1 -1
  232. package/dist/tools/tasks/get_actor_task.js +1 -4
  233. package/dist/tools/tasks/get_actor_task.js.map +1 -1
  234. package/dist/tools/tasks/publish_actor_task.js +1 -4
  235. package/dist/tools/tasks/publish_actor_task.js.map +1 -1
  236. package/dist/tools/tasks/task_helpers.d.ts +0 -16
  237. package/dist/tools/tasks/task_helpers.d.ts.map +1 -1
  238. package/dist/tools/tasks/task_helpers.js +2 -35
  239. package/dist/tools/tasks/task_helpers.js.map +1 -1
  240. package/dist/tools/tasks/unpublish_actor_task.js +1 -4
  241. package/dist/tools/tasks/unpublish_actor_task.js.map +1 -1
  242. package/dist/tools/tasks/update_actor_task.d.ts.map +1 -1
  243. package/dist/tools/tasks/update_actor_task.js +3 -5
  244. package/dist/tools/tasks/update_actor_task.js.map +1 -1
  245. package/dist/tools/versions/create_actor.d.ts +11 -0
  246. package/dist/tools/versions/create_actor.d.ts.map +1 -0
  247. package/dist/tools/versions/create_actor.js +171 -0
  248. package/dist/tools/versions/create_actor.js.map +1 -0
  249. package/dist/tools/versions/get_actor_version.d.ts.map +1 -0
  250. package/dist/tools/{source → versions}/get_actor_version.js +6 -92
  251. package/dist/tools/versions/get_actor_version.js.map +1 -0
  252. package/dist/tools/{source → versions}/source_files.d.ts +6 -2
  253. package/dist/tools/versions/source_files.d.ts.map +1 -0
  254. package/dist/tools/{source → versions}/source_files.js +8 -11
  255. package/dist/tools/versions/source_files.js.map +1 -0
  256. package/dist/tools/versions/source_helpers.d.ts +107 -0
  257. package/dist/tools/versions/source_helpers.d.ts.map +1 -0
  258. package/dist/tools/versions/source_helpers.js +350 -0
  259. package/dist/tools/versions/source_helpers.js.map +1 -0
  260. package/dist/tools/versions/update_actor_version.d.ts +15 -0
  261. package/dist/tools/versions/update_actor_version.d.ts.map +1 -0
  262. package/dist/tools/versions/update_actor_version.js +447 -0
  263. package/dist/tools/versions/update_actor_version.js.map +1 -0
  264. package/dist/tools/widgets/call_actor_widget.js +1 -4
  265. package/dist/tools/widgets/call_actor_widget.js.map +1 -1
  266. package/dist/tools/widgets/fetch_actor_details_widget.js +1 -4
  267. package/dist/tools/widgets/fetch_actor_details_widget.js.map +1 -1
  268. package/dist/tools/widgets/get_actor_run_widget.js +1 -4
  269. package/dist/tools/widgets/get_actor_run_widget.js.map +1 -1
  270. package/dist/tools/widgets/search_actors_widget.js +1 -4
  271. package/dist/tools/widgets/search_actors_widget.js.map +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -1
  273. package/dist/types.js +1 -4
  274. package/dist/types.js.map +1 -1
  275. package/dist/utils/actor.js +1 -4
  276. package/dist/utils/actor.js.map +1 -1
  277. package/dist/utils/actor_card.js +1 -4
  278. package/dist/utils/actor_card.js.map +1 -1
  279. package/dist/utils/actor_details.js +1 -4
  280. package/dist/utils/actor_details.js.map +1 -1
  281. package/dist/utils/actor_search.js +1 -4
  282. package/dist/utils/actor_search.js.map +1 -1
  283. package/dist/utils/ajv.js +1 -4
  284. package/dist/utils/ajv.js.map +1 -1
  285. package/dist/utils/apify_docs.js +1 -4
  286. package/dist/utils/apify_docs.js.map +1 -1
  287. package/dist/utils/apify_errors.js +1 -4
  288. package/dist/utils/apify_errors.js.map +1 -1
  289. package/dist/utils/apify_properties.js +1 -4
  290. package/dist/utils/apify_properties.js.map +1 -1
  291. package/dist/utils/apify_resource_id.d.ts +18 -0
  292. package/dist/utils/apify_resource_id.d.ts.map +1 -0
  293. package/dist/utils/apify_resource_id.js +33 -0
  294. package/dist/utils/apify_resource_id.js.map +1 -0
  295. package/dist/utils/auth.js +1 -4
  296. package/dist/utils/auth.js.map +1 -1
  297. package/dist/utils/console_link.js +1 -4
  298. package/dist/utils/console_link.js.map +1 -1
  299. package/dist/utils/encode_text.js +1 -4
  300. package/dist/utils/encode_text.js.map +1 -1
  301. package/dist/utils/generic.js +1 -4
  302. package/dist/utils/generic.js.map +1 -1
  303. package/dist/utils/logging.js +1 -4
  304. package/dist/utils/logging.js.map +1 -1
  305. package/dist/utils/mcp.js +1 -4
  306. package/dist/utils/mcp.js.map +1 -1
  307. package/dist/utils/mcp_clients.js +1 -4
  308. package/dist/utils/mcp_clients.js.map +1 -1
  309. package/dist/utils/payment_errors.js +1 -4
  310. package/dist/utils/payment_errors.js.map +1 -1
  311. package/dist/utils/pricing_info.js +1 -4
  312. package/dist/utils/pricing_info.js.map +1 -1
  313. package/dist/utils/progress.js +1 -4
  314. package/dist/utils/progress.js.map +1 -1
  315. package/dist/utils/schema_generation.js +1 -4
  316. package/dist/utils/schema_generation.js.map +1 -1
  317. package/dist/utils/server-instructions/index.js +1 -4
  318. package/dist/utils/server-instructions/index.js.map +1 -1
  319. package/dist/utils/server_mode.js +1 -4
  320. package/dist/utils/server_mode.js.map +1 -1
  321. package/dist/utils/tool_categories_helpers.js +1 -4
  322. package/dist/utils/tool_categories_helpers.js.map +1 -1
  323. package/dist/utils/tool_status.js +1 -4
  324. package/dist/utils/tool_status.js.map +1 -1
  325. package/dist/utils/tools.js +1 -4
  326. package/dist/utils/tools.js.map +1 -1
  327. package/dist/utils/tools_loader.d.ts +2 -1
  328. package/dist/utils/tools_loader.d.ts.map +1 -1
  329. package/dist/utils/tools_loader.js +4 -6
  330. package/dist/utils/tools_loader.js.map +1 -1
  331. package/dist/utils/ttl_lru.js +1 -4
  332. package/dist/utils/ttl_lru.js.map +1 -1
  333. package/dist/utils/userid_cache.js +1 -4
  334. package/dist/utils/userid_cache.js.map +1 -1
  335. package/dist/utils/version.js +1 -4
  336. package/dist/utils/version.js.map +1 -1
  337. package/dist/web/dist/actor-run-widget.js +0 -2
  338. package/dist/web/dist/search-actors-widget.js +0 -2
  339. package/manifest.json +1 -1
  340. package/package.json +1 -1
  341. package/server.json +1 -1
  342. package/dist/tools/source/get_actor_version.d.ts.map +0 -1
  343. package/dist/tools/source/get_actor_version.js.map +0 -1
  344. package/dist/tools/source/source_files.d.ts.map +0 -1
  345. package/dist/tools/source/source_files.js.map +0 -1
  346. /package/dist/tools/{source → versions}/get_actor_version.d.ts +0 -0
@@ -0,0 +1,171 @@
1
+ import { ActorSourceType, ApifyApiError } from 'apify-client';
2
+ import dedent from 'dedent';
3
+ import { z } from 'zod';
4
+ import { APIFY_ERROR_TYPE_ACTOR_NAME_NOT_UNIQUE, HELPER_TOOLS } from '../../const.js';
5
+ import { UserInputError } from '../../errors.js';
6
+ import { TOOL_TYPE } from '../../types.js';
7
+ import { compileSchema, fixZodSchemaRequired } from '../../utils/ajv.js';
8
+ import { respondAborted, respondUserError } from '../../utils/mcp.js';
9
+ import { createActorToolOutputSchema } from '../structured_output_schemas.js';
10
+ import { buildFilesManifest, buildFilesRevision } from './source_files.js';
11
+ import { buildEmptyFilesWarnings, buildSourceFileEntry, extractSourceFiles, redactSourceToolArgs, resolveVersion, respondAfterWrite, respondToSourceToolError, SourcePathIndex, sourceFileArgs, validateFileContent, validateFilePath, validatePathCharacters, } from './source_helpers.js';
12
+ const createActorArgs = z.object({
13
+ name: z.string().min(1).describe('Name of the new Actor, without a username, for example my-scraper.'),
14
+ title: z.string().min(1).optional().describe('Display title, for example My Scraper.'),
15
+ description: z.string().optional().describe('A short description of what the Actor does.'),
16
+ files: z.array(sourceFileArgs).min(1).describe("The Actor's files, each with its whole content."),
17
+ versionNumber: z
18
+ .string()
19
+ .optional()
20
+ .describe('Number of the version in MAJOR.MINOR form. Default: the version in .actor/actor.json, or 0.0 when it has none.'),
21
+ buildTag: z
22
+ .string()
23
+ .min(1)
24
+ .optional()
25
+ .describe('Tag that builds of the version get. The platform uses latest when it is omitted.'),
26
+ autoBuild: z
27
+ .boolean()
28
+ .default(false)
29
+ .describe('Start a build of the version after creating the Actor, and return without waiting. Default: false.'),
30
+ });
31
+ /**
32
+ * The entries to send, one per file; throws `UserInputError` for a path no file can be written at, and for a path
33
+ * given twice, since the platform puts the Actor name in the first .actor/actor.json and the build uses the last.
34
+ */
35
+ function buildSourceFileEntries(files) {
36
+ const entries = [];
37
+ const pathIndex = new SourcePathIndex([]);
38
+ for (const [index, file] of files.entries()) {
39
+ validatePathCharacters(file.path, `files[${index}]`);
40
+ const entry = buildSourceFileEntry(file);
41
+ const label = `files[${index}] (${file.path})`;
42
+ validateFilePath(entry.name, label);
43
+ validateFileContent(entry, label);
44
+ if (pathIndex.hasFile(entry.name)) {
45
+ throw new UserInputError(`${label} repeats the path ${entry.name}; each path can be sent only once.`);
46
+ }
47
+ pathIndex.validateNewFilePath(entry.name, label);
48
+ pathIndex.addFile(entry.name);
49
+ entries.push(entry);
50
+ }
51
+ return entries;
52
+ }
53
+ /**
54
+ * The `version` of .actor/actor.json when it is a non-empty string in valid JSON, as `apify push` reads it. A leading
55
+ * byte order mark, which some editors write, is skipped, since JSON.parse refuses it.
56
+ */
57
+ function readActorJsonVersion(entries) {
58
+ const actorJson = entries.find(({ name, format }) => name === '.actor/actor.json' && format === 'TEXT');
59
+ if (!actorJson)
60
+ return undefined;
61
+ try {
62
+ const { version } = JSON.parse(actorJson.content.replace(/^\uFEFF/, ''));
63
+ return typeof version === 'string' && version !== '' ? version : undefined;
64
+ }
65
+ catch {
66
+ return undefined;
67
+ }
68
+ }
69
+ /** A refusal of the name as taken on a retry of the POST, which an earlier attempt of the same call may have caused. */
70
+ function isRetriedNameTaken(error) {
71
+ return error instanceof ApifyApiError && error.type === APIFY_ERROR_TYPE_ACTOR_NAME_NOT_UNIQUE && error.attempt > 1;
72
+ }
73
+ /**
74
+ * https://docs.apify.com/api/v2/actors-post
75
+ * /v2/actors
76
+ *
77
+ * One POST creates the Actor and its version together, private and in the token's account. apify-client retries the
78
+ * POST after a network error, a timeout, a 429, or a 5xx, so when the platform saved an attempt it did not answer, the
79
+ * retry fails on the name that attempt took, and the call says the Actor may exist.
80
+ */
81
+ export const createActor = Object.freeze({
82
+ type: TOOL_TYPE.INTERNAL,
83
+ name: HELPER_TOOLS.ACTOR_CREATE,
84
+ title: 'Create Actor',
85
+ description: dedent `
86
+ Create a new private Actor in your account, with one version holding the files you give. It never changes an existing Actor: the platform refuses a name your account already uses.
87
+ - files: every file with its path and content. Binary files take base64 content with encoding base64; files with a binary extension such as .png default to it.
88
+ The platform sets the name field of .actor/actor.json to the Actor name, so the result lists each file's hash and the version's revision as stored.
89
+ autoBuild starts a build after creating the Actor and returns without waiting.
90
+
91
+ USAGE:
92
+ - Use to upload new Actor code to the Apify platform for the first time.
93
+
94
+ USAGE EXAMPLES:
95
+ - user_input: Create an Actor called hacker-news-scraper from these files`,
96
+ // `fixZodSchemaRequired` strips `autoBuild` from `required` because it has a default.
97
+ inputSchema: fixZodSchemaRequired(z.toJSONSchema(createActorArgs)),
98
+ outputSchema: createActorToolOutputSchema,
99
+ ajvValidate: compileSchema(z.toJSONSchema(createActorArgs)),
100
+ annotations: {
101
+ title: 'Create Actor',
102
+ readOnlyHint: false,
103
+ destructiveHint: false,
104
+ // A second call with the same name is refused rather than repeated.
105
+ idempotentHint: false,
106
+ // autoBuild starts a build, like build-actor.
107
+ openWorldHint: true,
108
+ },
109
+ redactArgs: (args) => redactSourceToolArgs(args, {
110
+ keys: ['name', 'title', 'description', 'versionNumber', 'buildTag', 'autoBuild'],
111
+ listKey: 'files',
112
+ entryKeys: ['path', 'encoding'],
113
+ }),
114
+ call: async (toolArgs) => {
115
+ const { args, apifyClient: client, signal, loadedToolNames } = toolArgs;
116
+ const parsed = createActorArgs.parse(args);
117
+ // A cancel before the POST creates nothing; per the MCP spec the cancelled request gets no response.
118
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted)
119
+ return respondAborted();
120
+ try {
121
+ const sourceFiles = buildSourceFileEntries(parsed.files);
122
+ // The platform refuses a version without a number, so this defaults to what `apify push` uses.
123
+ // AJV turns a null versionNumber into an empty string, which counts as not given.
124
+ const versionNumber = parsed.versionNumber || readActorJsonVersion(sourceFiles) || '0.0';
125
+ const created = await client.actors().create({
126
+ name: parsed.name,
127
+ ...(parsed.title !== undefined && { title: parsed.title }),
128
+ ...(parsed.description !== undefined && { description: parsed.description }),
129
+ versions: [
130
+ {
131
+ versionNumber,
132
+ ...(parsed.buildTag !== undefined && { buildTag: parsed.buildTag }),
133
+ sourceType: ActorSourceType.SourceFiles,
134
+ sourceFiles,
135
+ },
136
+ ],
137
+ });
138
+ const fullName = `${created.username}/${created.name}`;
139
+ // The platform sets the name in .actor/actor.json on create, so the stored files, not the sent ones, match
140
+ // a later read.
141
+ const version = resolveVersion(created, undefined, fullName);
142
+ const files = buildFilesManifest(extractSourceFiles(version, `Version ${version.versionNumber} of ${fullName}`));
143
+ const emptyPaths = files.filter(({ sizeBytes }) => sizeBytes === 0).map(({ path }) => path);
144
+ return await respondAfterWrite({
145
+ toolArgs,
146
+ autoBuild: parsed.autoBuild,
147
+ target: { actorId: created.id, versionNumber: version.versionNumber },
148
+ structuredContent: {
149
+ actorId: created.id,
150
+ fullName,
151
+ versionNumber: version.versionNumber,
152
+ revision: buildFilesRevision(files),
153
+ files: files.map(({ path, sizeBytes, hash }) => ({ path, sizeBytes, hash })),
154
+ ...buildEmptyFilesWarnings(emptyPaths),
155
+ },
156
+ summary: `Created the private Actor ${fullName}.`,
157
+ });
158
+ }
159
+ catch (error) {
160
+ if (!isRetriedNameTaken(error))
161
+ return respondToSourceToolError(error);
162
+ const readTool = loadedToolNames.includes(HELPER_TOOLS.ACTOR_VERSION_GET)
163
+ ? `; ${HELPER_TOOLS.ACTOR_VERSION_GET} reads its files`
164
+ : '';
165
+ return respondUserError(`The platform refused the name ${parsed.name} as taken when the request was retried, so an earlier ` +
166
+ `attempt of this call may have created the Actor ${parsed.name}. ` +
167
+ `If it holds the files you sent, this call created it${readTool}.`, { httpStatus: error.statusCode });
168
+ }
169
+ },
170
+ });
171
+ //# sourceMappingURL=create_actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_actor.js","sourceRoot":"","sources":["../../../src/tools/versions/create_actor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_actor_version.d.ts","sourceRoot":"","sources":["../../../src/tools/versions/get_actor_version.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAoB,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AA4HnF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SA0EnB,CAAC"}
@@ -1,7 +1,4 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9a02aa21-6712-56af-a634-93a1e782edda")}catch(e){}}();
3
1
  import { posix } from 'node:path';
4
- import { ActorSourceType } from 'apify-client';
5
2
  import dedent from 'dedent';
6
3
  import { z } from 'zod';
7
4
  import { HELPER_TOOLS, MAX_INLINE_BYTES } from '../../const.js';
@@ -9,15 +6,15 @@ import { UserInputError } from '../../errors.js';
9
6
  import { TOOL_TYPE } from '../../types.js';
10
7
  import { compileSchema } from '../../utils/ajv.js';
11
8
  import { respondOk, respondUserError } from '../../utils/mcp.js';
12
- import { listVersionNumbers } from '../builds/build_helpers.js';
13
9
  import { getActorVersionToolOutputSchema } from '../structured_output_schemas.js';
14
10
  import { buildFilesManifest, buildFilesRevision } from './source_files.js';
11
+ import { extractSourceFiles, fetchActor, resolveVersion, respondToSourceToolError } from './source_helpers.js';
15
12
  const INLINE_LIMIT_KIB = MAX_INLINE_BYTES / 1024;
16
13
  const getActorVersionArgs = z.object({
17
14
  actor: z
18
15
  .string()
19
16
  .min(1)
20
- .describe('The Actor to read: its ID, or its full name as username/name or username~name. A name without the username is not enough.'),
17
+ .describe('The Actor to read: its ID, its name (resolved against your own Actors), or its full name as username/name or username~name.'),
21
18
  // Format is not enforced by a regex: the lookup against the Actor's versions rejects anything that is not an
22
19
  // existing version with a soft fail.
23
20
  versionNumber: z
@@ -41,80 +38,6 @@ const getActorVersionArgs = z.object({
41
38
  .optional()
42
39
  .describe('Number of lines to return from startLine; defaults to the rest of the file. Only with exactly one path in paths.'),
43
40
  });
44
- /** The requested version, or the only one when none is requested; throws `UserInputError` otherwise. */
45
- function resolveVersion(actor, requestedVersionNumber, actorSelector) {
46
- const versionNumbers = listVersionNumbers(actor);
47
- if (requestedVersionNumber === undefined && versionNumbers.length !== 1) {
48
- // The source type and build tag tell the caller which version holds the code it is after.
49
- const versions = actor.versions
50
- .filter((version) => version.versionNumber !== undefined)
51
- .map(({ versionNumber, sourceType, buildTag }) => {
52
- const tag = buildTag ? `, build tag ${buildTag}` : '';
53
- return `${versionNumber} (${sourceType}${tag})`;
54
- });
55
- throw new UserInputError(`Specify versionNumber; this Actor has versions: ${versions.join(', ')}.`);
56
- }
57
- const versionNumber = requestedVersionNumber !== null && requestedVersionNumber !== void 0 ? requestedVersionNumber : versionNumbers[0];
58
- const version = actor.versions.find((candidate) => candidate.versionNumber === versionNumber);
59
- if (!version) {
60
- throw new UserInputError(`Actor '${actorSelector}' has no version ${versionNumber}; available versions: ${versionNumbers.join(', ')}.`);
61
- }
62
- return { ...version, versionNumber };
63
- }
64
- /**
65
- * The URL without what can grant access to it: the query string, the password, and, for http and https, the user. An
66
- * SSH user such as `git@` is not a secret and stays. A URL the parser cannot read, such as
67
- * `git@github.com:user/repo.git`, loses only its query string.
68
- */
69
- function formatUrlWithoutSecrets(url) {
70
- if (URL.canParse(url)) {
71
- const parsed = new URL(url);
72
- parsed.search = '';
73
- parsed.password = '';
74
- if (parsed.protocol === 'http:' || parsed.protocol === 'https:') {
75
- parsed.username = '';
76
- }
77
- return parsed.href;
78
- }
79
- const queryIndex = url.indexOf('?');
80
- if (queryIndex === -1)
81
- return url;
82
- const hashIndex = url.indexOf('#', queryIndex);
83
- return url.slice(0, queryIndex) + (hashIndex === -1 ? '' : url.slice(hashIndex));
84
- }
85
- /**
86
- * Why a version not stored as files is refused, and what to use instead. A version keeps the URL fields of a source
87
- * type it used before, so only the URL of its current type is named.
88
- */
89
- function formatSourceTypeRefusal(version, versionLabel) {
90
- if (version.sourceType === ActorSourceType.GitRepo) {
91
- const url = version.gitRepoUrl ? ` ${formatUrlWithoutSecrets(version.gitRepoUrl)}` : '';
92
- return `${versionLabel} has its files in the Git repository${url}, not stored on Apify, so this tool cannot work on them; use the repository.`;
93
- }
94
- if (version.sourceType === ActorSourceType.GitHubGist) {
95
- const url = version.gitHubGistUrl ? ` ${formatUrlWithoutSecrets(version.gitHubGistUrl)}` : '';
96
- return `${versionLabel} has its files in the GitHub gist${url}, not stored on Apify, so this tool cannot work on them; use the gist.`;
97
- }
98
- // TODO(#1452): Read zip-stored (TARBALL) versions with adm-zip 0.6.1 or later, within the download and unpacking
99
- // limits the issue lists.
100
- if (version.sourceType === ActorSourceType.Tarball) {
101
- return `${versionLabel} is stored as a zip archive (apify push does this for sources over 3 MiB), and this tool cannot work on zip-stored versions yet.`;
102
- }
103
- // The API's legacy SOURCE_CODE type and any type added later are not in apify-client's enum.
104
- const { sourceType } = version;
105
- return `${versionLabel} has source type ${sourceType}, which this tool cannot work on; only versions stored as files are supported.`;
106
- }
107
- /** Throws `UserInputError` for a version not stored as files and for one whose source the API hides. */
108
- function extractVersionFiles(version, versionLabel) {
109
- if (version.sourceType !== ActorSourceType.SourceFiles) {
110
- throw new UserInputError(formatSourceTypeRefusal(version, versionLabel));
111
- }
112
- // The API returns only the number, type, and build tag of a version whose source it hides from this account.
113
- if (!version.sourceFiles) {
114
- throw new UserInputError(`${versionLabel} came back without its source: the API hides it from accounts that cannot modify the Actor. Ask the Actor's owner for the source.`);
115
- }
116
- return buildFilesManifest(version.sourceFiles);
117
- }
118
41
  /** Lines with their line endings kept, so joined back they give the exact text. */
119
42
  function splitLines(text) {
120
43
  if (text === '')
@@ -224,15 +147,9 @@ export const getActorVersion = Object.freeze({
224
147
  }
225
148
  try {
226
149
  // TODO: The Actor GET returns every file of every version; read only the files asked for once the API can.
227
- // apify-client turns username/name into the API's username~name.
228
- const actor = await client.actor(parsed.actor).get();
229
- // Extra path segments, such as username/name/runs/last, reach a sub-resource that is not an Actor.
230
- if (!actor || typeof actor.name !== 'string' || typeof actor.username !== 'string') {
231
- return respondUserError(`Actor '${parsed.actor}' not found. Give its ID or its full name, username/name; a name without the username is not enough.`);
232
- }
233
- const fullName = `${actor.username}/${actor.name}`;
150
+ const { actor, fullName } = await fetchActor(client, parsed.actor);
234
151
  const version = resolveVersion(actor, parsed.versionNumber, parsed.actor);
235
- const files = extractVersionFiles(version, `Version ${version.versionNumber} of ${fullName}`);
152
+ const files = buildFilesManifest(extractSourceFiles(version, `Version ${version.versionNumber} of ${fullName}`));
236
153
  const structuredContent = {
237
154
  actorId: actor.id,
238
155
  fullName,
@@ -258,11 +175,8 @@ export const getActorVersion = Object.freeze({
258
175
  return respondOk([JSON.stringify(structuredContent), summary], { structuredContent });
259
176
  }
260
177
  catch (error) {
261
- if (error instanceof UserInputError)
262
- return respondUserError(error.message);
263
- throw error;
178
+ return respondToSourceToolError(error);
264
179
  }
265
180
  },
266
181
  });
267
- //# sourceMappingURL=get_actor_version.js.map
268
- //# debugId=9a02aa21-6712-56af-a634-93a1e782edda
182
+ //# sourceMappingURL=get_actor_version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_actor_version.js","sourceRoot":"","sources":["../../../src/tools/versions/get_actor_version.ts"],"names":[],"mappings":"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"}
@@ -11,13 +11,17 @@ export type SourceFile = {
11
11
  contentBytes: number;
12
12
  /** The content as returned: the text for utf8, the base64 for base64. */
13
13
  content: string;
14
+ /** The entry as stored, which a write sends back for a file it leaves alone. */
15
+ entry: ActorVersionSourceFile;
14
16
  };
15
17
  export declare function hasBinaryExtension(path: string): boolean;
16
18
  /** Paths in JavaScript's default string order, so the manifest and the revision do not depend on the locale. */
17
19
  export declare function compareSourcePaths(a: string, b: string): number;
18
20
  /**
19
- * Identifies the file set: one `path\0hash\n` line per regular file, sorted by path. The stored format does not go
20
- * in, so a file stored as TEXT or as BASE64 gives the same revision.
21
+ * Identifies the file set: the JSON array of `[path, hash]` pairs of its regular files, sorted by path. JSON quotes
22
+ * each path and escapes quotes and control characters in it, so two different file sets never give the same text, as
23
+ * a stored name with NUL and a line break once did. The stored format does not go in, so a file stored as TEXT or as
24
+ * BASE64 gives the same revision.
21
25
  */
22
26
  export declare function buildFilesRevision(files: readonly Pick<SourceFile, 'path' | 'hash'>[]): string;
23
27
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source_files.d.ts","sourceRoot":"","sources":["../../../src/tools/versions/source_files.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AA4D3D,qCAAqC;AACrC,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,2GAA2G;IAC3G,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAOD,gHAAgH;AAChH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAG9F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,UAAU,CAc9E;AAED,4HAA4H;AAC5H,wBAAgB,aAAa,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAEnE;AAED,mHAAmH;AACnH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,GAAG,UAAU,EAAE,CAQ3F"}
@@ -1,5 +1,3 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4abfae6a-7ffb-53f2-a005-41621ac9f11d")}catch(e){}}();
3
1
  import { isUtf8 } from 'node:buffer';
4
2
  import { createHash } from 'node:crypto';
5
3
  import { posix } from 'node:path';
@@ -73,14 +71,14 @@ export function compareSourcePaths(a, b) {
73
71
  return a < b ? -1 : 1;
74
72
  }
75
73
  /**
76
- * Identifies the file set: one `path\0hash\n` line per regular file, sorted by path. The stored format does not go
77
- * in, so a file stored as TEXT or as BASE64 gives the same revision.
74
+ * Identifies the file set: the JSON array of `[path, hash]` pairs of its regular files, sorted by path. JSON quotes
75
+ * each path and escapes quotes and control characters in it, so two different file sets never give the same text, as
76
+ * a stored name with NUL and a line break once did. The stored format does not go in, so a file stored as TEXT or as
77
+ * BASE64 gives the same revision.
78
78
  */
79
79
  export function buildFilesRevision(files) {
80
- const lines = [...files]
81
- .sort((a, b) => compareSourcePaths(a.path, b.path))
82
- .map(({ path, hash }) => `${path}\0${hash}\n`);
83
- return getSha256Prefix(lines.join(''));
80
+ const pairs = [...files].sort((a, b) => compareSourcePaths(a.path, b.path)).map(({ path, hash }) => [path, hash]);
81
+ return getSha256Prefix(JSON.stringify(pairs));
84
82
  }
85
83
  /**
86
84
  * A file stored inline in the version, read as the build worker reads it: no `format` is TEXT, no `content` is empty,
@@ -92,7 +90,7 @@ export function buildInlineSourceFile(file) {
92
90
  const content = storedContent !== null && storedContent !== void 0 ? storedContent : '';
93
91
  const path = posix.normalize(name);
94
92
  const bytes = Buffer.from(content, format === 'BASE64' ? 'base64' : 'utf8');
95
- const common = { path, sizeBytes: bytes.length, hash: getSha256Prefix(bytes) };
93
+ const common = { path, sizeBytes: bytes.length, hash: getSha256Prefix(bytes), entry: file };
96
94
  if (format !== 'BASE64') {
97
95
  return { ...common, encoding: 'utf8', contentBytes: bytes.length, content };
98
96
  }
@@ -117,5 +115,4 @@ export function buildFilesManifest(entries) {
117
115
  }
118
116
  return [...filesByPath.values()].sort((a, b) => compareSourcePaths(a.path, b.path));
119
117
  }
120
- //# sourceMappingURL=source_files.js.map
121
- //# debugId=4abfae6a-7ffb-53f2-a005-41621ac9f11d
118
+ //# sourceMappingURL=source_files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source_files.js","sourceRoot":"","sources":["../../../src/tools/versions/source_files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import type { Actor, ActorVersion, ActorVersionSourceFile } from 'apify-client';
2
+ import { z } from 'zod';
3
+ import type { ApifyClient } from '../../apify_client.js';
4
+ import type { InternalToolArgs } from '../../types.js';
5
+ import type { ToolResponse } from '../../utils/mcp.js';
6
+ /** The input shape of one file sent whole. */
7
+ export declare const sourceFileArgs: z.ZodObject<{
8
+ path: z.ZodString;
9
+ content: z.ZodString;
10
+ encoding: z.ZodOptional<z.ZodEnum<{
11
+ base64: "base64";
12
+ utf8: "utf8";
13
+ }>>;
14
+ }, z.core.$strip>;
15
+ /**
16
+ * The logged copy of a source tool's arguments (`redactArgs`), built as an allowlist: `keys`, and each entry of the
17
+ * list under `listKey` with its `entryKeys`, and with its content and its edits' oldText and newText as `REDACTED`.
18
+ * File content can hold secrets, such as an API key written into the code.
19
+ */
20
+ export declare function redactSourceToolArgs(args: Record<string, unknown>, fields: {
21
+ keys: readonly string[];
22
+ listKey: string;
23
+ entryKeys: readonly string[];
24
+ }): Record<string, unknown>;
25
+ /**
26
+ * The Actor by its ID, its name (resolved against the token's own Actors), or its full name, `username/name` or
27
+ * `username~name` (apify-client turns username/name into the API's username~name); throws `UserInputError` when there
28
+ * is none.
29
+ */
30
+ export declare function fetchActor(client: ApifyClient, actorSelector: string): Promise<{
31
+ actor: Actor;
32
+ fullName: string;
33
+ }>;
34
+ /** The requested version, or the only one when none is requested; throws `UserInputError` otherwise. */
35
+ export declare function resolveVersion(actor: Pick<Actor, 'versions'>, requestedVersionNumber: string | undefined, actorSelector: string): ActorVersion & {
36
+ versionNumber: string;
37
+ };
38
+ /**
39
+ * The version's stored entries, folders included. Throws `UserInputError` for a version not stored as files and for
40
+ * one whose source the API hides.
41
+ */
42
+ export declare function extractSourceFiles(version: ActorVersion, versionLabel: string): ActorVersionSourceFile[];
43
+ /**
44
+ * The entry to store for a file sent whole: TEXT for utf8, BASE64 for base64, where no encoding means base64 for a
45
+ * binary extension, the rule get-actor-version reads by. The path is normalized the way get-actor-version lists it.
46
+ */
47
+ export declare function buildSourceFileEntry({ path, content, encoding, }: z.infer<typeof sourceFileArgs>): ActorVersionSourceFile;
48
+ /**
49
+ * Throws `UserInputError` for content the stored file would not hold as sent: base64 that does not decode without
50
+ * loss, and text with a lone UTF-16 surrogate, which UTF-8 stores as U+FFFD.
51
+ */
52
+ export declare function validateFileContent({ format, content }: ActorVersionSourceFile, label: string): void;
53
+ /**
54
+ * Throws `UserInputError` for a path with a control character, U+0000 to U+001F or U+007F, or with a lone UTF-16
55
+ * surrogate. The build writes the files to disk, where a file name cannot hold NUL, and UTF-8 stores a lone surrogate
56
+ * as U+FFFD.
57
+ */
58
+ export declare function validatePathCharacters(path: string, label: string): void;
59
+ /**
60
+ * Throws `UserInputError` for a normalized path no file can be written at. The build worker refuses a version with a
61
+ * path outside the Actor root, so every build of it would fail; `.` and a path ending in a slash name a folder. A
62
+ * backslash is refused too: the build takes it as part of the file name, so src\main.js would land in the Actor root.
63
+ */
64
+ export declare function validateFilePath(path: string, label: string): void;
65
+ /**
66
+ * The paths of a version's files and folder entries, to check where a new file can go: one path cannot be both a file
67
+ * and a folder, and the build worker fails to write such a file. Each check and change looks up only the folders of
68
+ * its path, since comparing each file with every other took 8 s for 20,000 files.
69
+ */
70
+ export declare class SourcePathIndex {
71
+ private readonly filePaths;
72
+ /** The files under each folder, at any depth, in the order they were added. */
73
+ private readonly filePathsByFolder;
74
+ private readonly folderPaths;
75
+ constructor(filePaths: Iterable<string>, folderPaths?: readonly string[]);
76
+ hasFile(path: string): boolean;
77
+ /** A file added again keeps its place in the order. */
78
+ addFile(path: string): void;
79
+ deleteFile(path: string): void;
80
+ /**
81
+ * Throws `UserInputError` when a new file at `path` collides with another file or folder: a file at a folder of
82
+ * `path`, or else the first file added under `path`, or else the first folder entry at or under `path`. A file at
83
+ * `path` itself is for the caller to check.
84
+ */
85
+ validateNewFilePath(path: string, label: string): void;
86
+ }
87
+ /** The build worker skips a file whose content is empty, so the caller hears of such files. */
88
+ export declare function buildEmptyFilesWarnings(paths: readonly string[]): {
89
+ warnings?: string[];
90
+ };
91
+ /**
92
+ * The response to a committed write. With autoBuild, a build of the version starts first; a cancel that arrives before
93
+ * the start gets the cancelled-call response.
94
+ */
95
+ export declare function respondAfterWrite(params: {
96
+ toolArgs: Pick<InternalToolArgs, 'apifyClient' | 'apifyToken' | 'loadedToolNames' | 'signal'>;
97
+ autoBuild: boolean;
98
+ target: {
99
+ actorId: string;
100
+ versionNumber: string;
101
+ };
102
+ structuredContent: Record<string, unknown>;
103
+ summary: string;
104
+ }): Promise<ToolResponse>;
105
+ /** A `UserInputError` as a soft failure; anything else is rethrown for the tool-call engine to report. */
106
+ export declare function respondToSourceToolError(error: unknown): ToolResponse;
107
+ //# sourceMappingURL=source_helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source_helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/versions/source_helpers.ts"],"names":[],"mappings":"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"}