@apify/actors-mcp-server 0.18.5-beta.0 → 0.18.5-beta.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 (38) hide show
  1. package/README.md +3 -1
  2. package/dist/const.d.ts +6 -0
  3. package/dist/const.d.ts.map +1 -1
  4. package/dist/const.js +6 -0
  5. package/dist/const.js.map +1 -1
  6. package/dist/index_internals.d.ts +2 -0
  7. package/dist/index_internals.d.ts.map +1 -1
  8. package/dist/test_kit/cases/versions.cases.d.ts.map +1 -1
  9. package/dist/test_kit/cases/versions.cases.js +232 -3
  10. package/dist/test_kit/cases/versions.cases.js.map +1 -1
  11. package/dist/test_kit/tsconfig.tsbuildinfo +1 -1
  12. package/dist/tools/registry.d.ts.map +1 -1
  13. package/dist/tools/registry.js +3 -1
  14. package/dist/tools/registry.js.map +1 -1
  15. package/dist/tools/structured_output_schemas.d.ts +128 -0
  16. package/dist/tools/structured_output_schemas.d.ts.map +1 -1
  17. package/dist/tools/structured_output_schemas.js +34 -1
  18. package/dist/tools/structured_output_schemas.js.map +1 -1
  19. package/dist/tools/versions/create_actor.d.ts.map +1 -1
  20. package/dist/tools/versions/create_actor.js +13 -51
  21. package/dist/tools/versions/create_actor.js.map +1 -1
  22. package/dist/tools/versions/create_actor_version.d.ts +14 -0
  23. package/dist/tools/versions/create_actor_version.d.ts.map +1 -0
  24. package/dist/tools/versions/create_actor_version.js +168 -0
  25. package/dist/tools/versions/create_actor_version.js.map +1 -0
  26. package/dist/tools/versions/delete_actor_version.d.ts +12 -0
  27. package/dist/tools/versions/delete_actor_version.d.ts.map +1 -0
  28. package/dist/tools/versions/delete_actor_version.js +121 -0
  29. package/dist/tools/versions/delete_actor_version.js.map +1 -0
  30. package/dist/tools/versions/get_actor_version.d.ts.map +1 -1
  31. package/dist/tools/versions/get_actor_version.js +4 -1
  32. package/dist/tools/versions/get_actor_version.js.map +1 -1
  33. package/dist/tools/versions/source_helpers.d.ts +49 -2
  34. package/dist/tools/versions/source_helpers.d.ts.map +1 -1
  35. package/dist/tools/versions/source_helpers.js +94 -5
  36. package/dist/tools/versions/source_helpers.js.map +1 -1
  37. package/dist/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,168 @@
1
+ import { ActorSourceType } from 'apify-client';
2
+ import dedent from 'dedent';
3
+ import { z } from 'zod';
4
+ import { APIFY_ERROR_TYPE_VERSION_ALREADY_EXISTS, HELPER_TOOLS } from '../../const.js';
5
+ import { TOOL_TYPE } from '../../types.js';
6
+ import { compileSchema, fixZodSchemaRequired } from '../../utils/ajv.js';
7
+ import { respondAborted, respondUserError } from '../../utils/mcp.js';
8
+ import { createActorVersionToolOutputSchema } from '../structured_output_schemas.js';
9
+ import { buildSourceFileEntries, extractSourceFiles, fetchActor, redactSourceToolArgs, resolveVersion, respondAfterCreate, respondToCreateError, sourceFileArgs, } from './source_helpers.js';
10
+ const createActorVersionArgs = z.object({
11
+ actor: z
12
+ .string()
13
+ .min(1)
14
+ .describe('The Actor to add the version to: its ID, its name (resolved against your own Actors), or its full name as username/name or username~name.'),
15
+ versionNumber: z.string().min(1).describe('Number of the new version in MAJOR.MINOR form, for example 0.2.'),
16
+ copyFromVersion: z
17
+ .string()
18
+ .min(1)
19
+ .optional()
20
+ .describe('The version to copy instead of sending files, for example 0.1.'),
21
+ files: z.array(sourceFileArgs).min(1).optional().describe("The version's files, each with its whole content."),
22
+ buildTag: z
23
+ .string()
24
+ .min(1)
25
+ .optional()
26
+ .describe('Tag that builds of the new version get, for example beta. No default: without it, they get no tag.'),
27
+ autoBuild: z
28
+ .boolean()
29
+ .default(false)
30
+ .describe('Start a build of the new version after creating it, and return without waiting. Default: false.'),
31
+ });
32
+ /** Whether the call gives exactly one of files and copyFromVersion, so that copyFromVersion tells which. */
33
+ function hasOneSource(args) {
34
+ return (args.copyFromVersion === undefined) !== (args.files === undefined);
35
+ }
36
+ /**
37
+ * The warning about the secret env vars a copy leaves out. With `startedBuild`, it says that the build this call started
38
+ * runs without them and takes the buildTag if it succeeds, when one was given.
39
+ */
40
+ function formatSecretEnvVarsWarning(secretNames, versionNumber, startedBuild) {
41
+ const names = secretNames.join(', ');
42
+ if (!startedBuild) {
43
+ return (`These secret environment variables were not copied; they can be set on version ${versionNumber} ` +
44
+ `in Apify Console, and only a build made after that includes them: ${names}.`);
45
+ }
46
+ const tag = startedBuild.buildTag === undefined ? '' : ` and, if it succeeds, takes tag ${startedBuild.buildTag}`;
47
+ return (`These secret environment variables were not copied, so the build this call started runs without them${tag}. ` +
48
+ `They can be set on version ${versionNumber} in Apify Console, and only a build made after that includes them: ${names}.`);
49
+ }
50
+ /**
51
+ * https://docs.apify.com/api/v2/actor-get
52
+ * /v2/actors/{actorId}
53
+ * https://docs.apify.com/api/v2/actor-versions-post
54
+ * /v2/actors/{actorId}/versions
55
+ *
56
+ * One POST creates the version with its files. apify-client retries the POST after a network error, a timeout, a 429,
57
+ * or a 5xx, so when the platform saved an attempt it did not answer, the retry fails on the number that attempt took,
58
+ * and the call says the version may exist. A copy sends the other version's files as the Actor GET returns them, so
59
+ * their content never passes through the model.
60
+ */
61
+ export const createActorVersion = Object.freeze({
62
+ type: TOOL_TYPE.INTERNAL,
63
+ name: HELPER_TOOLS.ACTOR_VERSION_CREATE,
64
+ title: 'Create Actor version',
65
+ description: dedent `
66
+ Add a new version to an existing Actor, with the files you give or as a copy of another version. It never changes an existing version: the platform refuses a versionNumber the Actor already has.
67
+ - 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.
68
+ - copyFromVersion: copies that version's files and non-secret environment variables on the server, so no file content passes through the call. Only versions stored as files can be copied.
69
+ buildTag has no default, and a copy does not take the tag of the version it copies: without buildTag, builds of the new version get no tag, so they never move a tag such as latest.
70
+ autoBuild starts a build after creating the version and returns without waiting.
71
+
72
+ USAGE:
73
+ - Use to make a working copy of a version to change and test while runs keep using the tagged build.
74
+
75
+ USAGE EXAMPLES:
76
+ - user_input: Copy version 0.1 of my Actor john/my-scraper to a new version 0.2`,
77
+ // `fixZodSchemaRequired` strips `autoBuild` from `required` because it has a default.
78
+ inputSchema: fixZodSchemaRequired(z.toJSONSchema(createActorVersionArgs)),
79
+ outputSchema: createActorVersionToolOutputSchema,
80
+ ajvValidate: compileSchema(z.toJSONSchema(createActorVersionArgs)),
81
+ annotations: {
82
+ title: 'Create Actor version',
83
+ readOnlyHint: false,
84
+ // With buildTag and autoBuild, the build it starts moves an existing tag, as build-actor does.
85
+ destructiveHint: true,
86
+ // A second call with the same versionNumber is refused rather than repeated.
87
+ idempotentHint: false,
88
+ // autoBuild starts a build, like build-actor.
89
+ openWorldHint: true,
90
+ },
91
+ redactArgs: (args) => redactSourceToolArgs(args, {
92
+ keys: ['actor', 'versionNumber', 'copyFromVersion', 'buildTag', 'autoBuild'],
93
+ listKey: 'files',
94
+ entryKeys: ['path', 'encoding'],
95
+ }),
96
+ call: async (toolArgs) => {
97
+ var _a, _b, _c;
98
+ const { args, apifyClient: client, signal, loadedToolNames } = toolArgs;
99
+ const parsed = createActorVersionArgs.parse(args);
100
+ if (!hasOneSource(parsed)) {
101
+ return respondUserError('The call takes exactly one of files and copyFromVersion.');
102
+ }
103
+ const { versionNumber, copyFromVersion, files } = parsed;
104
+ // Set before the POST, so the reply to a retried POST can name them.
105
+ let secretNames = [];
106
+ try {
107
+ const { actor, fullName } = await fetchActor(client, parsed.actor);
108
+ // TODO: The Apify API has no endpoint that copies a version, so a copy reads every file of the other version
109
+ // from the Actor GET and sends them all back in the POST below. Once the API has one, let the platform make
110
+ // the copy.
111
+ let copied;
112
+ let sourceFiles;
113
+ if (copyFromVersion === undefined) {
114
+ sourceFiles = buildSourceFileEntries(files);
115
+ }
116
+ else {
117
+ copied = resolveVersion(actor, copyFromVersion, parsed.actor);
118
+ sourceFiles = extractSourceFiles(copied, `Version ${copied.versionNumber} of ${fullName}`);
119
+ }
120
+ secretNames = (_b = (_a = copied === null || copied === void 0 ? void 0 : copied.envVars) === null || _a === void 0 ? void 0 : _a.filter(({ isSecret }) => isSecret).map(({ name }) => name)) !== null && _b !== void 0 ? _b : [];
121
+ // A cancel during the read creates nothing; per the MCP spec the cancelled request gets no response.
122
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted)
123
+ return respondAborted();
124
+ await client
125
+ .actor(actor.id)
126
+ .versions()
127
+ .create({
128
+ versionNumber,
129
+ ...(parsed.buildTag !== undefined && { buildTag: parsed.buildTag }),
130
+ sourceType: ActorSourceType.SourceFiles,
131
+ sourceFiles,
132
+ // The API returns a secret env var without its value, so a copy takes only the others.
133
+ ...(copied && {
134
+ envVars: (_c = copied.envVars) === null || _c === void 0 ? void 0 : _c.filter(({ isSecret }) => !isSecret),
135
+ applyEnvVarsToBuild: copied.applyEnvVarsToBuild,
136
+ }),
137
+ });
138
+ return await respondAfterCreate({
139
+ toolArgs,
140
+ autoBuild: parsed.autoBuild,
141
+ created: { actorId: actor.id, fullName, versionNumber },
142
+ sourceFiles,
143
+ ...(secretNames.length > 0 && {
144
+ extraWarning: {
145
+ withoutBuild: formatSecretEnvVarsWarning(secretNames, versionNumber),
146
+ withBuild: formatSecretEnvVarsWarning(secretNames, versionNumber, {
147
+ buildTag: parsed.buildTag,
148
+ }),
149
+ },
150
+ }),
151
+ summary: `Created version ${versionNumber} of ${fullName}.`,
152
+ });
153
+ }
154
+ catch (error) {
155
+ return respondToCreateError(error, {
156
+ takenErrorType: APIFY_ERROR_TYPE_VERSION_ALREADY_EXISTS,
157
+ loadedToolNames,
158
+ refused: `version ${versionNumber}`,
159
+ created: 'it',
160
+ sentFiles: copyFromVersion === undefined
161
+ ? 'the files this call sent'
162
+ : `the files of version ${copyFromVersion}`,
163
+ ...(secretNames.length > 0 && { note: formatSecretEnvVarsWarning(secretNames, versionNumber) }),
164
+ });
165
+ }
166
+ },
167
+ });
168
+ //# sourceMappingURL=create_actor_version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_actor_version.js","sourceRoot":"","sources":["../../../src/tools/versions/create_actor_version.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ToolEntry } from '../../types.js';
2
+ /**
3
+ * https://docs.apify.com/api/v2/actor-get
4
+ * /v2/actors/{actorId}
5
+ * https://docs.apify.com/api/v2/actor-version-delete
6
+ * /v2/actors/{actorId}/versions/{versionNumber}
7
+ *
8
+ * The Actor is read first: apify-client swallows a 404 on delete, so a missing version would otherwise look deleted.
9
+ * The platform refuses to delete the last version, and leaves the version's builds and tags in place.
10
+ */
11
+ export declare const deleteActorVersion: ToolEntry;
12
+ //# sourceMappingURL=delete_actor_version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_actor_version.d.ts","sourceRoot":"","sources":["../../../src/tools/versions/delete_actor_version.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAoB,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAwDnF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAmEtB,CAAC"}
@@ -0,0 +1,121 @@
1
+ import { ActorSourceType, ApifyApiError } from 'apify-client';
2
+ import dedent from 'dedent';
3
+ import { z } from 'zod';
4
+ import { APIFY_ERROR_TYPE_TOO_FEW_VERSIONS, HELPER_TOOLS } from '../../const.js';
5
+ import { UserInputError } from '../../errors.js';
6
+ import { TOOL_TYPE } from '../../types.js';
7
+ import { compileSchema } from '../../utils/ajv.js';
8
+ import { respondAborted, respondOk, respondUserError } from '../../utils/mcp.js';
9
+ import { deleteActorVersionToolOutputSchema } from '../structured_output_schemas.js';
10
+ import { buildFilesManifest, buildFilesRevision } from './source_files.js';
11
+ import { extractSourceFiles, fetchActor, resolveVersion, respondToSourceToolError } from './source_helpers.js';
12
+ const deleteActorVersionArgs = z.object({
13
+ actor: z
14
+ .string()
15
+ .min(1)
16
+ .describe('The Actor to delete the version from: its ID, its name (resolved against your own Actors), or its full name as username/name or username~name.'),
17
+ versionNumber: z.string().min(1).describe('The version to delete, in MAJOR.MINOR form, for example 0.2.'),
18
+ expectedRevision: z
19
+ .string()
20
+ .optional()
21
+ .describe('The revision of the version when you read it. When given, the delete is refused if any file of the ' +
22
+ 'version changed since. Only a version stored as files has a revision.'),
23
+ });
24
+ /**
25
+ * Throws `UserInputError` unless the version's revision, computed as get-actor-version and the write tools compute it,
26
+ * is `expectedRevision`, ignoring case. A version not stored as files has no revision.
27
+ */
28
+ function validateRevision(version, fullName, expectedRevision) {
29
+ if (version.sourceType !== ActorSourceType.SourceFiles) {
30
+ throw new UserInputError(`Nothing was deleted: version ${version.versionNumber} of ${fullName} has source type ${version.sourceType}, ` +
31
+ 'and only a version stored as files has a revision to compare expectedRevision with.');
32
+ }
33
+ if (!version.sourceFiles) {
34
+ throw new UserInputError(`Nothing was deleted: version ${version.versionNumber} of ${fullName} came back without its source, so it ` +
35
+ 'has no revision to compare expectedRevision with.');
36
+ }
37
+ const revision = buildFilesRevision(buildFilesManifest(extractSourceFiles(version, `Version ${version.versionNumber} of ${fullName}`)));
38
+ if (expectedRevision.toLowerCase() === revision)
39
+ return;
40
+ throw new UserInputError(`Nothing was deleted: expectedRevision failed with REVISION_MISMATCH. The version's revision is ${revision}, ` +
41
+ `not ${expectedRevision}.`);
42
+ }
43
+ /**
44
+ * https://docs.apify.com/api/v2/actor-get
45
+ * /v2/actors/{actorId}
46
+ * https://docs.apify.com/api/v2/actor-version-delete
47
+ * /v2/actors/{actorId}/versions/{versionNumber}
48
+ *
49
+ * The Actor is read first: apify-client swallows a 404 on delete, so a missing version would otherwise look deleted.
50
+ * The platform refuses to delete the last version, and leaves the version's builds and tags in place.
51
+ */
52
+ export const deleteActorVersion = Object.freeze({
53
+ type: TOOL_TYPE.INTERNAL,
54
+ name: HELPER_TOOLS.ACTOR_VERSION_DELETE,
55
+ title: 'Delete Actor version',
56
+ description: dedent `
57
+ Delete one version of an Actor, with its source and environment variables; a deleted version cannot be restored. The platform refuses to delete an Actor's last version.
58
+ The version's builds stay, and so do the tags that point to them: a run with such a tag still uses that build. A build of the version that is still running keeps running, and takes its tag if it succeeds.
59
+
60
+ USAGE:
61
+ - Use only when the user explicitly wants the version removed.
62
+
63
+ USAGE EXAMPLES:
64
+ - user_input: Delete version 0.2 of my Actor john/my-scraper`,
65
+ inputSchema: z.toJSONSchema(deleteActorVersionArgs),
66
+ outputSchema: deleteActorVersionToolOutputSchema,
67
+ ajvValidate: compileSchema(z.toJSONSchema(deleteActorVersionArgs)),
68
+ annotations: {
69
+ title: 'Delete Actor version',
70
+ readOnlyHint: false,
71
+ destructiveHint: true,
72
+ idempotentHint: true,
73
+ openWorldHint: false,
74
+ },
75
+ call: async (toolArgs) => {
76
+ var _a;
77
+ const { args, apifyClient: client, signal, loadedToolNames } = toolArgs;
78
+ const parsed = deleteActorVersionArgs.parse(args);
79
+ try {
80
+ const { actor, fullName } = await fetchActor(client, parsed.actor);
81
+ const version = resolveVersion(actor, parsed.versionNumber, parsed.actor);
82
+ const { versionNumber } = version;
83
+ // AJV turns a null expectedRevision into an empty string, which no version has, so it counts as not given.
84
+ if (parsed.expectedRevision)
85
+ validateRevision(version, fullName, parsed.expectedRevision);
86
+ // A cancel before the DELETE deletes nothing; per the MCP spec the cancelled request gets no response.
87
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted)
88
+ return respondAborted();
89
+ try {
90
+ await client.actor(actor.id).version(versionNumber).delete();
91
+ }
92
+ catch (error) {
93
+ if (error instanceof ApifyApiError && error.type === APIFY_ERROR_TYPE_TOO_FEW_VERSIONS) {
94
+ return respondUserError(`Version ${versionNumber} is the only version of ${fullName}, and an Actor keeps at least one version.`, { httpStatus: error.statusCode });
95
+ }
96
+ throw error;
97
+ }
98
+ const summary = `Deleted version ${versionNumber} of ${fullName}.`;
99
+ const buildTool = loadedToolNames.includes(HELPER_TOOLS.ACTOR_BUILD)
100
+ ? `${HELPER_TOOLS.ACTOR_BUILD} and `
101
+ : '';
102
+ // A tag points to the build it was last given to, which may be a build of another version than the one with
103
+ // that buildTag.
104
+ const tags = Object.entries((_a = actor.taggedBuilds) !== null && _a !== void 0 ? _a : {})
105
+ .filter(([, { buildNumber }]) => buildNumber === null || buildNumber === void 0 ? void 0 : buildNumber.startsWith(`${versionNumber}.`))
106
+ .map(([tag]) => tag);
107
+ const structuredContent = { actorId: actor.id, fullName, versionNumber, deleted: true, tags };
108
+ // build-actor takes one tag, so the text names one build per tag.
109
+ const text = tags.length > 0
110
+ ? `${summary}\nRuns with tag ${tags.join(', ')} still use the deleted version's build until each tag ` +
111
+ `points to another build, such as one of another version made with ${buildTool}` +
112
+ `tag ${tags.join(', then one with tag ')}.`
113
+ : summary;
114
+ return respondOk([JSON.stringify(structuredContent), text], { structuredContent });
115
+ }
116
+ catch (error) {
117
+ return respondToSourceToolError(error);
118
+ }
119
+ },
120
+ });
121
+ //# sourceMappingURL=delete_actor_version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_actor_version.js","sourceRoot":"","sources":["../../../src/tools/versions/delete_actor_version.ts"],"names":[],"mappings":"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"}
@@ -1 +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
+ {"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,SA6EnB,CAAC"}
@@ -150,10 +150,12 @@ export const getActorVersion = Object.freeze({
150
150
  const { actor, fullName } = await fetchActor(client, parsed.actor);
151
151
  const version = resolveVersion(actor, parsed.versionNumber, parsed.actor);
152
152
  const files = buildFilesManifest(extractSourceFiles(version, `Version ${version.versionNumber} of ${fullName}`));
153
+ const { buildTag } = version;
153
154
  const structuredContent = {
154
155
  actorId: actor.id,
155
156
  fullName,
156
157
  versionNumber: version.versionNumber,
158
+ ...(buildTag && { buildTag }),
157
159
  revision: buildFilesRevision(files),
158
160
  files: files.map(({ path, sizeBytes, hash }) => ({ path, sizeBytes, hash })),
159
161
  ...selectContents(files, paths, lineRange),
@@ -162,9 +164,10 @@ export const getActorVersion = Object.freeze({
162
164
  const omittedHint = lineRange
163
165
  ? 'ask for fewer lines with lineCount'
164
166
  : 'ask for a file alone, or for part of it with startLine and lineCount';
167
+ const tag = buildTag ? ` (build tag ${buildTag})` : '';
165
168
  // Names the requested files that did not come back, for a caller that reads only the text.
166
169
  const summary = [
167
- `Read version ${version.versionNumber} of ${fullName}.`,
170
+ `Read version ${version.versionNumber}${tag} of ${fullName}.`,
168
171
  omittedPaths &&
169
172
  `Left out over the ${INLINE_LIMIT_KIB} KiB limit: ${omittedPaths.join(', ')}; ${omittedHint}.`,
170
173
  notFoundPaths &&
@@ -1 +1 @@
1
- {"version":3,"file":"get_actor_version.js","sourceRoot":"","sources":["../../../src/tools/versions/get_actor_version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get_actor_version.js","sourceRoot":"","sources":["../../../src/tools/versions/get_actor_version.ts"],"names":[],"mappings":"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"}
@@ -84,13 +84,20 @@ export declare class SourcePathIndex {
84
84
  */
85
85
  validateNewFilePath(path: string, label: string): void;
86
86
  }
87
+ /**
88
+ * The entries to send, one per file; throws `UserInputError` for a path no file can be written at, for content the
89
+ * stored file would not hold as sent, and for a path given twice, which leaves the version with two entries where the
90
+ * build uses the last.
91
+ */
92
+ export declare function buildSourceFileEntries(files: readonly z.infer<typeof sourceFileArgs>[]): ActorVersionSourceFile[];
87
93
  /** The build worker skips a file whose content is empty, so the caller hears of such files. */
88
94
  export declare function buildEmptyFilesWarnings(paths: readonly string[]): {
89
95
  warnings?: string[];
90
96
  };
91
97
  /**
92
98
  * 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.
99
+ * the start gets the cancelled-call response. When the build starts, `buildStartedWarnings`, if given, replaces the
100
+ * warnings in `structuredContent`.
94
101
  */
95
102
  export declare function respondAfterWrite(params: {
96
103
  toolArgs: Pick<InternalToolArgs, 'apifyClient' | 'apifyToken' | 'loadedToolNames' | 'signal'>;
@@ -100,8 +107,48 @@ export declare function respondAfterWrite(params: {
100
107
  versionNumber: string;
101
108
  };
102
109
  structuredContent: Record<string, unknown>;
110
+ buildStartedWarnings?: string[];
111
+ summary: string;
112
+ }): Promise<ToolResponse>;
113
+ /**
114
+ * The response to a POST that created a version from `sourceFiles`, as `respondAfterWrite` gives it: their manifest
115
+ * and revision as get-actor-version gives them, and the warnings about empty files followed by
116
+ * `extraWarning.withoutBuild`, or by `extraWarning.withBuild` when autoBuild starts a build.
117
+ */
118
+ export declare function respondAfterCreate(params: {
119
+ toolArgs: Pick<InternalToolArgs, 'apifyClient' | 'apifyToken' | 'loadedToolNames' | 'signal'>;
120
+ autoBuild: boolean;
121
+ created: {
122
+ actorId: string;
123
+ fullName: string;
124
+ versionNumber: string;
125
+ };
126
+ sourceFiles: readonly ActorVersionSourceFile[];
127
+ extraWarning?: {
128
+ withoutBuild: string;
129
+ withBuild: string;
130
+ };
103
131
  summary: string;
104
132
  }): Promise<ToolResponse>;
105
- /** A `UserInputError` as a soft failure; anything else is rethrown for the tool-call engine to report. */
133
+ /**
134
+ * A `UserInputError`, or the platform's refusal of a taken version number or of a version over the limit on the
135
+ * number of versions or on their combined size, as a soft failure with the platform's own message; anything else is
136
+ * rethrown for the tool-call engine to report. The engine would add a token-access hint to these 403s, which
137
+ * contradicts their reason.
138
+ */
106
139
  export declare function respondToSourceToolError(error: unknown): ToolResponse;
140
+ /**
141
+ * The response to an error of a create POST. apify-client retries the POST after a network error, a timeout, a 429,
142
+ * or a 5xx, so when the platform refuses a retry as taken (`takenErrorType`), an attempt it saved but did not answer
143
+ * may have created what it refused (`refused`, such as `version 0.2`): the response says so, then adds `note` when
144
+ * given. Any other error goes to `respondToSourceToolError`.
145
+ */
146
+ export declare function respondToCreateError(error: unknown, params: {
147
+ takenErrorType: string;
148
+ loadedToolNames: readonly string[];
149
+ refused: string;
150
+ created: string;
151
+ sentFiles: string;
152
+ note?: string;
153
+ }): ToolResponse;
107
154
  //# sourceMappingURL=source_helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source_helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/versions/source_helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source_helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/versions/source_helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAS,MAAM,cAAc,CAAC;AAEvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASzD,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAI3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,8CAA8C;AAC9C,eAAO,MAAM,cAAc;;;;;;;iBASzB,CAAC;AA0BH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACnF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAS7C;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAC9B,sBAAsB,EAAE,MAAM,GAAG,SAAS,EAC1C,aAAa,EAAE,MAAM,GACtB,YAAY,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAsB1C;AA8CD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAWxG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,QAAQ,GACX,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG,sBAAsB,CAGzD;AAYD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASpG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAUxE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAYlE;AAWD;;;;GAIG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IAEpE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;gBAEpC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAE,SAAS,MAAM,EAAO;IAK5E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,uDAAuD;IACvD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;OAIG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAQzD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,EAAE,GAAG,sBAAsB,EAAE,CAiBjH;AAED,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAIzF;AA4BD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC5C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,CAAC,CAAC;IAC9F,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,YAAY,CAAC,CA2BxB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC7C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,CAAC,CAAC;IAC9F,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC/C,YAAY,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,OAAO,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsBxB;AASD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAMrE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;IACJ,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,GACF,YAAY,CAcd"}
@@ -1,6 +1,7 @@
1
1
  import { posix } from 'node:path';
2
2
  import { ActorSourceType, ApifyApiError } from 'apify-client';
3
3
  import { z } from 'zod';
4
+ import { APIFY_ERROR_TYPE_TOO_MANY_VERSIONS, APIFY_ERROR_TYPE_VERSION_ALREADY_EXISTS, APIFY_ERROR_TYPE_VERSIONS_SIZE_EXCEEDED, HELPER_TOOLS, } from '../../const.js';
4
5
  import { UserInputError } from '../../errors.js';
5
6
  import { REDACTED } from '../../resources/api_resources.js';
6
7
  import { getResourceByIdOrName } from '../../utils/apify_resource_id.js';
@@ -9,7 +10,7 @@ import { logHttpError } from '../../utils/logging.js';
9
10
  import { respondAborted, respondUserError } from '../../utils/mcp.js';
10
11
  import { isRecord } from '../api/apify_api_spec.js';
11
12
  import { buildNextStepForBuild, listVersionNumbers, respondWithBuild, toBuildResult } from '../builds/build_helpers.js';
12
- import { hasBinaryExtension } from './source_files.js';
13
+ import { buildFilesManifest, buildFilesRevision, hasBinaryExtension } from './source_files.js';
13
14
  /** The input shape of one file sent whole. */
14
15
  export const sourceFileArgs = z.object({
15
16
  path: z.string().min(1).describe('Path relative to the Actor root, for example src/main.js.'),
@@ -281,6 +282,29 @@ export class SourcePathIndex {
281
282
  throw new UserInputError(`${label} collides with ${collision}; one path cannot be both a file and a folder.`);
282
283
  }
283
284
  }
285
+ /**
286
+ * The entries to send, one per file; throws `UserInputError` for a path no file can be written at, for content the
287
+ * stored file would not hold as sent, and for a path given twice, which leaves the version with two entries where the
288
+ * build uses the last.
289
+ */
290
+ export function buildSourceFileEntries(files) {
291
+ const entries = [];
292
+ const pathIndex = new SourcePathIndex([]);
293
+ for (const [index, file] of files.entries()) {
294
+ validatePathCharacters(file.path, `files[${index}]`);
295
+ const entry = buildSourceFileEntry(file);
296
+ const label = `files[${index}] (${file.path})`;
297
+ validateFilePath(entry.name, label);
298
+ validateFileContent(entry, label);
299
+ if (pathIndex.hasFile(entry.name)) {
300
+ throw new UserInputError(`${label} repeats the path ${entry.name}; each path can be sent only once.`);
301
+ }
302
+ pathIndex.validateNewFilePath(entry.name, label);
303
+ pathIndex.addFile(entry.name);
304
+ entries.push(entry);
305
+ }
306
+ return entries;
307
+ }
284
308
  /** The build worker skips a file whose content is empty, so the caller hears of such files. */
285
309
  export function buildEmptyFilesWarnings(paths) {
286
310
  if (paths.length === 0)
@@ -314,10 +338,11 @@ async function startBuildAfterWrite(toolArgs, target) {
314
338
  }
315
339
  /**
316
340
  * The response to a committed write. With autoBuild, a build of the version starts first; a cancel that arrives before
317
- * the start gets the cancelled-call response.
341
+ * the start gets the cancelled-call response. When the build starts, `buildStartedWarnings`, if given, replaces the
342
+ * warnings in `structuredContent`.
318
343
  */
319
344
  export async function respondAfterWrite(params) {
320
- const { toolArgs, autoBuild, target, structuredContent, summary } = params;
345
+ const { toolArgs, autoBuild, target, structuredContent, buildStartedWarnings, summary } = params;
321
346
  if (!autoBuild) {
322
347
  return respondWithBuild({
323
348
  structuredContent,
@@ -336,15 +361,79 @@ export async function respondAfterWrite(params) {
336
361
  });
337
362
  }
338
363
  return respondWithBuild({
339
- structuredContent: { ...structuredContent, build: toBuildResult(started.build, started.linkContext) },
364
+ structuredContent: {
365
+ ...structuredContent,
366
+ ...(buildStartedWarnings && { warnings: buildStartedWarnings }),
367
+ build: toBuildResult(started.build, started.linkContext),
368
+ },
340
369
  summary,
341
370
  nextStep: buildNextStepForBuild(started.build, { loadedToolNames: toolArgs.loadedToolNames }),
342
371
  });
343
372
  }
344
- /** A `UserInputError` as a soft failure; anything else is rethrown for the tool-call engine to report. */
373
+ /**
374
+ * The response to a POST that created a version from `sourceFiles`, as `respondAfterWrite` gives it: their manifest
375
+ * and revision as get-actor-version gives them, and the warnings about empty files followed by
376
+ * `extraWarning.withoutBuild`, or by `extraWarning.withBuild` when autoBuild starts a build.
377
+ */
378
+ export async function respondAfterCreate(params) {
379
+ const { toolArgs, autoBuild, created, sourceFiles, extraWarning, summary } = params;
380
+ const { actorId, fullName, versionNumber } = created;
381
+ const files = buildFilesManifest(sourceFiles);
382
+ const emptyPaths = files.filter(({ sizeBytes }) => sizeBytes === 0).map(({ path }) => path);
383
+ const { warnings = [] } = buildEmptyFilesWarnings(emptyPaths);
384
+ const allWarnings = extraWarning ? [...warnings, extraWarning.withoutBuild] : warnings;
385
+ return await respondAfterWrite({
386
+ toolArgs,
387
+ autoBuild,
388
+ target: { actorId, versionNumber },
389
+ structuredContent: {
390
+ actorId,
391
+ fullName,
392
+ versionNumber,
393
+ revision: buildFilesRevision(files),
394
+ files: files.map(({ path, sizeBytes, hash }) => ({ path, sizeBytes, hash })),
395
+ ...(allWarnings.length > 0 && { warnings: allWarnings }),
396
+ },
397
+ ...(extraWarning && { buildStartedWarnings: [...warnings, extraWarning.withBuild] }),
398
+ summary,
399
+ });
400
+ }
401
+ /** The platform's 403 refusals of a version write that are not about access. */
402
+ const VERSION_REFUSAL_ERROR_TYPE_SET = new Set([
403
+ APIFY_ERROR_TYPE_VERSION_ALREADY_EXISTS,
404
+ APIFY_ERROR_TYPE_TOO_MANY_VERSIONS,
405
+ APIFY_ERROR_TYPE_VERSIONS_SIZE_EXCEEDED,
406
+ ]);
407
+ /**
408
+ * A `UserInputError`, or the platform's refusal of a taken version number or of a version over the limit on the
409
+ * number of versions or on their combined size, as a soft failure with the platform's own message; anything else is
410
+ * rethrown for the tool-call engine to report. The engine would add a token-access hint to these 403s, which
411
+ * contradicts their reason.
412
+ */
345
413
  export function respondToSourceToolError(error) {
346
414
  if (error instanceof UserInputError)
347
415
  return respondUserError(error.message);
416
+ if (error instanceof ApifyApiError && VERSION_REFUSAL_ERROR_TYPE_SET.has(error.type)) {
417
+ return respondUserError(`${error.message} (API error type: ${error.type})`, { httpStatus: error.statusCode });
418
+ }
348
419
  throw error;
349
420
  }
421
+ /**
422
+ * The response to an error of a create POST. apify-client retries the POST after a network error, a timeout, a 429,
423
+ * or a 5xx, so when the platform refuses a retry as taken (`takenErrorType`), an attempt it saved but did not answer
424
+ * may have created what it refused (`refused`, such as `version 0.2`): the response says so, then adds `note` when
425
+ * given. Any other error goes to `respondToSourceToolError`.
426
+ */
427
+ export function respondToCreateError(error, params) {
428
+ const { takenErrorType, loadedToolNames, refused, created, sentFiles, note } = params;
429
+ if (!(error instanceof ApifyApiError && error.type === takenErrorType && error.attempt > 1)) {
430
+ return respondToSourceToolError(error);
431
+ }
432
+ const readTool = loadedToolNames.includes(HELPER_TOOLS.ACTOR_VERSION_GET)
433
+ ? `; ${HELPER_TOOLS.ACTOR_VERSION_GET} reads its files`
434
+ : '';
435
+ const noteText = note === undefined ? '' : ` ${note}`;
436
+ return respondUserError(`The platform refused ${refused} as taken when the request was retried, so an earlier attempt of this call ` +
437
+ `may have created ${created}. If it holds ${sentFiles}, this call created it${readTool}.${noteText}`, { httpStatus: error.statusCode });
438
+ }
350
439
  //# sourceMappingURL=source_helpers.js.map