@auvira.ai/sdk 0.4.0 → 0.6.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 (106) hide show
  1. package/README.md +105 -0
  2. package/dist/agent/Agent.d.ts.map +1 -1
  3. package/dist/agent/Agent.js +9 -0
  4. package/dist/agent/Agent.js.map +1 -1
  5. package/dist/agent/attachmentContext.d.ts +9 -0
  6. package/dist/agent/attachmentContext.d.ts.map +1 -0
  7. package/dist/agent/attachmentContext.js +72 -0
  8. package/dist/agent/attachmentContext.js.map +1 -0
  9. package/dist/agent/editCompletion.d.ts +18 -3
  10. package/dist/agent/editCompletion.d.ts.map +1 -1
  11. package/dist/agent/editCompletion.js +113 -1
  12. package/dist/agent/editCompletion.js.map +1 -1
  13. package/dist/agent/evaluateTaskCompletion.d.ts +2 -0
  14. package/dist/agent/evaluateTaskCompletion.d.ts.map +1 -1
  15. package/dist/agent/evaluateTaskCompletion.js +4 -1
  16. package/dist/agent/evaluateTaskCompletion.js.map +1 -1
  17. package/dist/agent/events.d.ts +2 -2
  18. package/dist/agent/events.d.ts.map +1 -1
  19. package/dist/agent/events.js +2 -0
  20. package/dist/agent/events.js.map +1 -1
  21. package/dist/agent/hostTools.d.ts +46 -0
  22. package/dist/agent/hostTools.d.ts.map +1 -0
  23. package/dist/agent/hostTools.js +98 -0
  24. package/dist/agent/hostTools.js.map +1 -0
  25. package/dist/agent/parseSendPayload.d.ts +3 -1
  26. package/dist/agent/parseSendPayload.d.ts.map +1 -1
  27. package/dist/agent/parseSendPayload.js +16 -0
  28. package/dist/agent/parseSendPayload.js.map +1 -1
  29. package/dist/agent/runAgentTask.d.ts +4 -1
  30. package/dist/agent/runAgentTask.d.ts.map +1 -1
  31. package/dist/agent/runAgentTask.js +16 -0
  32. package/dist/agent/runAgentTask.js.map +1 -1
  33. package/dist/agent/runValidationWithRepair.d.ts.map +1 -1
  34. package/dist/agent/runValidationWithRepair.js +6 -0
  35. package/dist/agent/runValidationWithRepair.js.map +1 -1
  36. package/dist/agent/tools/assetPathValidation.d.ts +19 -0
  37. package/dist/agent/tools/assetPathValidation.d.ts.map +1 -0
  38. package/dist/agent/tools/assetPathValidation.js +124 -0
  39. package/dist/agent/tools/assetPathValidation.js.map +1 -0
  40. package/dist/agent/tools/executeTool.d.ts +1 -1
  41. package/dist/agent/tools/executeTool.d.ts.map +1 -1
  42. package/dist/agent/tools/executeTool.js +31 -1
  43. package/dist/agent/tools/executeTool.js.map +1 -1
  44. package/dist/agent/tools/generateImage.d.ts +11 -0
  45. package/dist/agent/tools/generateImage.d.ts.map +1 -0
  46. package/dist/agent/tools/generateImage.js +98 -0
  47. package/dist/agent/tools/generateImage.js.map +1 -0
  48. package/dist/agent/tools/publishReferenceImage.d.ts +9 -0
  49. package/dist/agent/tools/publishReferenceImage.d.ts.map +1 -0
  50. package/dist/agent/tools/publishReferenceImage.js +61 -0
  51. package/dist/agent/tools/publishReferenceImage.js.map +1 -0
  52. package/dist/agent/tools/saveAsset.d.ts +11 -0
  53. package/dist/agent/tools/saveAsset.d.ts.map +1 -0
  54. package/dist/agent/tools/saveAsset.js +30 -0
  55. package/dist/agent/tools/saveAsset.js.map +1 -0
  56. package/dist/agent/tools/types.d.ts +7 -0
  57. package/dist/agent/tools/types.d.ts.map +1 -1
  58. package/dist/agent/types.d.ts +37 -0
  59. package/dist/agent/types.d.ts.map +1 -1
  60. package/dist/agent/types.js.map +1 -1
  61. package/dist/agent/validateOptions.d.ts.map +1 -1
  62. package/dist/agent/validateOptions.js +10 -1
  63. package/dist/agent/validateOptions.js.map +1 -1
  64. package/dist/index.d.ts +4 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/providers/agentic/AgenticCustomProvider.d.ts.map +1 -1
  69. package/dist/providers/agentic/AgenticCustomProvider.js +26 -0
  70. package/dist/providers/agentic/AgenticCustomProvider.js.map +1 -1
  71. package/dist/providers/agentic/agentLoop.d.ts +4 -1
  72. package/dist/providers/agentic/agentLoop.d.ts.map +1 -1
  73. package/dist/providers/agentic/agentLoop.js +295 -256
  74. package/dist/providers/agentic/agentLoop.js.map +1 -1
  75. package/dist/providers/agentic/toolSchemas.d.ts +438 -0
  76. package/dist/providers/agentic/toolSchemas.d.ts.map +1 -1
  77. package/dist/providers/agentic/toolSchemas.js +62 -0
  78. package/dist/providers/agentic/toolSchemas.js.map +1 -1
  79. package/dist/providers/types.d.ts +4 -1
  80. package/dist/providers/types.d.ts.map +1 -1
  81. package/dist/providers/types.js.map +1 -1
  82. package/dist/runner/jobTypes.d.ts +3 -2
  83. package/dist/runner/jobTypes.d.ts.map +1 -1
  84. package/dist/runner/run.d.ts.map +1 -1
  85. package/dist/runner/run.js +6 -2
  86. package/dist/runner/run.js.map +1 -1
  87. package/dist/runner/validateJob.d.ts.map +1 -1
  88. package/dist/runner/validateJob.js +83 -0
  89. package/dist/runner/validateJob.js.map +1 -1
  90. package/dist/util/minimaxImageClient.d.ts +25 -0
  91. package/dist/util/minimaxImageClient.d.ts.map +1 -0
  92. package/dist/util/minimaxImageClient.js +114 -0
  93. package/dist/util/minimaxImageClient.js.map +1 -0
  94. package/dist/workspace/referenceImages.d.ts +14 -0
  95. package/dist/workspace/referenceImages.d.ts.map +1 -0
  96. package/dist/workspace/referenceImages.js +60 -0
  97. package/dist/workspace/referenceImages.js.map +1 -0
  98. package/dist/workspace/workspaceCheckpoint.d.ts.map +1 -1
  99. package/dist/workspace/workspaceCheckpoint.js +148 -16
  100. package/dist/workspace/workspaceCheckpoint.js.map +1 -1
  101. package/dist/workspace/writeScreenshot.d.ts.map +1 -1
  102. package/dist/workspace/writeScreenshot.js +15 -7
  103. package/dist/workspace/writeScreenshot.js.map +1 -1
  104. package/docs/host-integration-image-placement.md +141 -0
  105. package/docs/sandbox-runner.md +43 -1
  106. package/package.json +6 -1
@@ -1,7 +1,8 @@
1
- import { randomUUID } from "node:crypto";
1
+ import { createHash, randomUUID } from "node:crypto";
2
2
  import { promises as fs } from "node:fs";
3
3
  import { join, resolve } from "node:path";
4
4
  import { buildUnifiedPatch, capPatch, getDiffMaxChars, } from "../agent/patchUtils.js";
5
+ import { isBinaryAssetPath, mimeFromPath, sniffImageMime, } from "../agent/tools/assetPathValidation.js";
5
6
  import { toRepoRelativePath } from "../agent/tools/pathGuard.js";
6
7
  import { fileExists } from "../tools/fileExists.js";
7
8
  import { matchesPathGlobFilters } from "../util/globMatch.js";
@@ -45,6 +46,83 @@ function isEditableFile(relPath) {
45
46
  }
46
47
  return EDITABLE_EXTENSIONS.has(lower.slice(dot));
47
48
  }
49
+ function formatBytes(size) {
50
+ if (size < 1024) {
51
+ return `${size} B`;
52
+ }
53
+ const kb = size / 1024;
54
+ if (kb < 1024) {
55
+ return `${kb.toFixed(1)} KB`;
56
+ }
57
+ return `${(kb / 1024).toFixed(1)} MB`;
58
+ }
59
+ async function readBinarySnapshotEntry(repoPath, relPath) {
60
+ const absolute = join(repoPath, relPath);
61
+ if (!(await fileExists(absolute))) {
62
+ return {
63
+ kind: "binary",
64
+ sha256: null,
65
+ byteSize: 0,
66
+ mimeType: "application/octet-stream",
67
+ buffer: null,
68
+ };
69
+ }
70
+ const stat = await fs.stat(absolute);
71
+ if (!stat.isFile()) {
72
+ return {
73
+ kind: "binary",
74
+ sha256: null,
75
+ byteSize: 0,
76
+ mimeType: "application/octet-stream",
77
+ buffer: null,
78
+ };
79
+ }
80
+ const buffer = await fs.readFile(absolute);
81
+ const mimeType = sniffImageMime(buffer) ?? mimeFromPath(relPath) ?? "application/octet-stream";
82
+ return {
83
+ kind: "binary",
84
+ sha256: createHash("sha256").update(buffer).digest("hex"),
85
+ byteSize: buffer.byteLength,
86
+ mimeType,
87
+ buffer,
88
+ };
89
+ }
90
+ function buildBinaryDiffLine(relPath, before, after) {
91
+ if (before.sha256 === null && after.sha256 !== null) {
92
+ return `Binary asset added: ${relPath} (${after.mimeType}, ${formatBytes(after.byteSize)})`;
93
+ }
94
+ if (before.sha256 !== null && after.sha256 === null) {
95
+ return `Binary asset deleted: ${relPath}`;
96
+ }
97
+ if (before.sha256 !== after.sha256) {
98
+ return `Binary asset changed: ${relPath} (sha256 ${before.sha256?.slice(0, 12)}… → ${after.sha256?.slice(0, 12)}…)`;
99
+ }
100
+ return "";
101
+ }
102
+ function isBinaryAssetFile(relPath) {
103
+ return isBinaryAssetPath(relPath);
104
+ }
105
+ function entriesEqual(before, after) {
106
+ if (before.kind !== after.kind) {
107
+ return false;
108
+ }
109
+ if (before.kind === "text" && after.kind === "text") {
110
+ return before.content === after.content;
111
+ }
112
+ if (before.kind === "binary" && after.kind === "binary") {
113
+ return before.sha256 === after.sha256;
114
+ }
115
+ return false;
116
+ }
117
+ function buildEntryDiffLine(relPath, before, after) {
118
+ if (before.kind === "binary" && after.kind === "binary") {
119
+ return buildBinaryDiffLine(relPath, before, after);
120
+ }
121
+ if (before.kind === "text" && after.kind === "text") {
122
+ return buildCheckpointHunk(relPath, before.content, after.content);
123
+ }
124
+ return `Asset changed: ${relPath}`;
125
+ }
48
126
  function buildCheckpointHunk(relPath, oldContent, newContent) {
49
127
  if (oldContent === null && newContent === null) {
50
128
  return "";
@@ -66,21 +144,32 @@ function buildCheckpointHunk(relPath, oldContent, newContent) {
66
144
  return buildUnifiedPatch(relPath, oldContent ?? "", newContent ?? "");
67
145
  }
68
146
  async function readSnapshotEntry(repoPath, relPath) {
147
+ if (isBinaryAssetFile(relPath)) {
148
+ return readBinarySnapshotEntry(repoPath, relPath);
149
+ }
69
150
  const absolute = join(repoPath, relPath);
70
151
  if (!(await fileExists(absolute))) {
71
- return { content: null };
152
+ return { kind: "text", content: null };
72
153
  }
73
154
  const stat = await fs.stat(absolute);
74
155
  if (!stat.isFile()) {
75
- return { content: null };
156
+ return { kind: "text", content: null };
76
157
  }
77
- return { content: await fs.readFile(absolute, "utf8") };
158
+ return { kind: "text", content: await fs.readFile(absolute, "utf8") };
78
159
  }
79
160
  async function snapshotAllowedPaths(repoPath, allowedWritePaths) {
80
161
  const snapshot = new Map();
81
162
  for (const rawPath of allowedWritePaths) {
82
163
  const relPath = normalizeRelPath(rawPath);
83
- if (!relPath || relPath.endsWith("/")) {
164
+ if (!relPath) {
165
+ continue;
166
+ }
167
+ if (relPath.endsWith("/")) {
168
+ const absoluteDir = join(repoPath, relPath);
169
+ if (!(await fileExists(absoluteDir))) {
170
+ continue;
171
+ }
172
+ await walkSnapshot(absoluteDir, repoPath, snapshot);
84
173
  continue;
85
174
  }
86
175
  snapshot.set(relPath, await readSnapshotEntry(repoPath, relPath));
@@ -99,14 +188,19 @@ async function walkSnapshot(dir, repoPath, snapshot, globFilters) {
99
188
  await walkSnapshot(fullPath, repoPath, snapshot, globFilters);
100
189
  continue;
101
190
  }
102
- if (!entry.isFile() || !isEditableFile(relPath)) {
191
+ if (!entry.isFile() || (!isEditableFile(relPath) && !isBinaryAssetFile(relPath))) {
103
192
  continue;
104
193
  }
105
194
  if (globFilters &&
106
195
  !matchesPathGlobFilters(relPath, globFilters.includeGlobs, globFilters.excludeGlobs)) {
107
196
  continue;
108
197
  }
198
+ if (isBinaryAssetFile(relPath)) {
199
+ snapshot.set(relPath, await readBinarySnapshotEntry(repoPath, relPath));
200
+ continue;
201
+ }
109
202
  snapshot.set(relPath, {
203
+ kind: "text",
110
204
  content: await fs.readFile(fullPath, "utf8"),
111
205
  });
112
206
  }
@@ -127,25 +221,35 @@ async function diffSnapshotAsync(repoPath, snapshot, allowedWritePaths, globFilt
127
221
  const hunks = [];
128
222
  const seen = new Set();
129
223
  for (const relPath of snapshot.keys()) {
130
- const before = snapshot.get(relPath) ?? { content: null };
224
+ const before = snapshot.get(relPath) ?? { kind: "text", content: null };
131
225
  const after = await readCurrentEntry(repoPath, relPath);
132
- const beforeContent = before.content;
133
- const afterContent = after.content;
134
- if (beforeContent === afterContent) {
226
+ if (entriesEqual(before, after)) {
135
227
  continue;
136
228
  }
137
229
  seen.add(relPath);
138
230
  changedFiles.push(relPath);
139
- hunks.push(buildCheckpointHunk(relPath, beforeContent, afterContent));
231
+ hunks.push(buildEntryDiffLine(relPath, before, after));
140
232
  }
141
233
  for (const relPath of await discoverNewFiles(repoPath, snapshot, allowedWritePaths, globFilters)) {
142
234
  if (seen.has(relPath)) {
143
235
  continue;
144
236
  }
145
237
  const after = await readCurrentEntry(repoPath, relPath);
146
- if (after.content !== null) {
238
+ const emptyBefore = after.kind === "binary"
239
+ ? {
240
+ kind: "binary",
241
+ sha256: null,
242
+ byteSize: 0,
243
+ mimeType: "application/octet-stream",
244
+ buffer: null,
245
+ }
246
+ : { kind: "text", content: null };
247
+ const hasContent = after.kind === "text"
248
+ ? after.content !== null
249
+ : after.sha256 !== null;
250
+ if (hasContent) {
147
251
  changedFiles.push(relPath);
148
- hunks.push(buildCheckpointHunk(relPath, null, after.content));
252
+ hunks.push(buildEntryDiffLine(relPath, emptyBefore, after));
149
253
  }
150
254
  }
151
255
  changedFiles.sort();
@@ -161,7 +265,24 @@ async function discoverNewFiles(repoPath, snapshot, allowedWritePaths, globFilte
161
265
  const added = [];
162
266
  for (const rawPath of allowedWritePaths) {
163
267
  const relPath = normalizeRelPath(rawPath);
164
- if (!relPath || relPath.endsWith("/") || snapshot.has(relPath)) {
268
+ if (!relPath) {
269
+ continue;
270
+ }
271
+ if (relPath.endsWith("/")) {
272
+ const absoluteDir = join(repoPath, relPath);
273
+ if (!(await fileExists(absoluteDir))) {
274
+ continue;
275
+ }
276
+ const discovered = new Map();
277
+ await walkSnapshot(absoluteDir, repoPath, discovered, globFilters);
278
+ for (const discoveredPath of discovered.keys()) {
279
+ if (!snapshot.has(discoveredPath)) {
280
+ added.push(discoveredPath);
281
+ }
282
+ }
283
+ continue;
284
+ }
285
+ if (snapshot.has(relPath)) {
165
286
  continue;
166
287
  }
167
288
  const absolute = join(repoPath, relPath);
@@ -186,14 +307,25 @@ async function restoreSnapshot(repoPath, snapshot, globFilters) {
186
307
  await walkSnapshot(resolve(repoPath), repoPath, current, globFilters);
187
308
  for (const [relPath, entry] of snapshot.entries()) {
188
309
  const absolute = join(repoPath, relPath);
189
- if (entry.content === null) {
310
+ if (entry.kind === "text") {
311
+ if (entry.content === null) {
312
+ if (await fileExists(absolute)) {
313
+ await fs.unlink(absolute);
314
+ }
315
+ continue;
316
+ }
317
+ await fs.mkdir(join(absolute, ".."), { recursive: true });
318
+ await fs.writeFile(absolute, entry.content, "utf8");
319
+ continue;
320
+ }
321
+ if (entry.buffer === null) {
190
322
  if (await fileExists(absolute)) {
191
323
  await fs.unlink(absolute);
192
324
  }
193
325
  continue;
194
326
  }
195
327
  await fs.mkdir(join(absolute, ".."), { recursive: true });
196
- await fs.writeFile(absolute, entry.content, "utf8");
328
+ await fs.writeFile(absolute, entry.buffer);
197
329
  }
198
330
  for (const relPath of current.keys()) {
199
331
  if (!snapshot.has(relPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceCheckpoint.js","sourceRoot":"","sources":["../../src/workspace/workspaceCheckpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspaceCheckpoint.js","sourceRoot":"","sources":["../../src/workspace/workspaceCheckpoint.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"writeScreenshot.d.ts","sourceRoot":"","sources":["../../src/workspace/writeScreenshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD,sEAAsE;AACtE,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAgD5C"}
1
+ {"version":3,"file":"writeScreenshot.d.ts","sourceRoot":"","sources":["../../src/workspace/writeScreenshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAeD,sEAAsE;AACtE,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAoD5C"}
@@ -1,7 +1,8 @@
1
1
  import { mkdir, writeFile, copyFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { normalizeScreenshotBase64 } from "../util/screenshotBase64.js";
4
- const SCREENSHOT_RELATIVE = ".auvira/input-screenshot.png";
4
+ import { LEGACY_SCREENSHOT_RELATIVE } from "./referenceImages.js";
5
+ const AUVIRA_DIR = ".auvira";
5
6
  function extensionForMime(mimeType) {
6
7
  if (mimeType.includes("jpeg") || mimeType.includes("jpg")) {
7
8
  return "jpg";
@@ -9,6 +10,9 @@ function extensionForMime(mimeType) {
9
10
  if (mimeType.includes("webp")) {
10
11
  return "webp";
11
12
  }
13
+ if (mimeType.includes("svg")) {
14
+ return "svg";
15
+ }
12
16
  return "png";
13
17
  }
14
18
  /** Writes reference images into the workspace `.auvira` directory. */
@@ -26,30 +30,34 @@ export async function writeScreenshot(input) {
26
30
  if (images.length === 0 && !input.screenshotPath) {
27
31
  return undefined;
28
32
  }
29
- const auviraDir = join(input.workspacePath, ".auvira");
33
+ const auviraDir = join(input.workspacePath, AUVIRA_DIR);
30
34
  await mkdir(auviraDir, { recursive: true });
31
35
  if (images.length > 0) {
32
36
  for (let index = 0; index < images.length; index += 1) {
33
37
  const image = images[index];
34
38
  const ext = extensionForMime(image.mimeType);
35
- const fileName = index === 0 ? "input-screenshot.png" : `input-screenshot-${index}.${ext}`;
39
+ const fileName = `input-image-${index}.${ext}`;
36
40
  const absolutePath = join(auviraDir, fileName);
37
41
  const buffer = Buffer.from(normalizeScreenshotBase64(image.data), "base64");
38
42
  await writeFile(absolutePath, buffer);
43
+ if (index === 0) {
44
+ await writeFile(join(auviraDir, "input-screenshot.png"), buffer);
45
+ }
39
46
  }
40
47
  return {
41
- absolutePath: join(auviraDir, "input-screenshot.png"),
42
- relativePath: SCREENSHOT_RELATIVE,
48
+ absolutePath: join(auviraDir, "input-image-0.png"),
49
+ relativePath: `${AUVIRA_DIR}/input-image-0.png`,
43
50
  imageCount: images.length,
44
51
  };
45
52
  }
46
- const absolutePath = join(input.workspacePath, SCREENSHOT_RELATIVE);
53
+ const absolutePath = join(input.workspacePath, LEGACY_SCREENSHOT_RELATIVE);
47
54
  if (input.screenshotPath) {
48
55
  await copyFile(input.screenshotPath, absolutePath);
56
+ await copyFile(input.screenshotPath, join(auviraDir, "input-image-0.png"));
49
57
  }
50
58
  return {
51
59
  absolutePath,
52
- relativePath: SCREENSHOT_RELATIVE,
60
+ relativePath: LEGACY_SCREENSHOT_RELATIVE,
53
61
  imageCount: 1,
54
62
  };
55
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"writeScreenshot.js","sourceRoot":"","sources":["../../src/workspace/writeScreenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAe3D,SAAS,gBAAgB,CAAC,QAAgB;IACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA2B;IAE3B,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACrC,CAAC,CAAC,KAAK,CAAC,MAAM;QACd,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACtB,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,yBAAyB,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBACvD,QAAQ,EAAE,WAAW;iBACtB;aACF;YACH,CAAC,CAAC,EAAE,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,QAAQ,GACZ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB,KAAK,IAAI,GAAG,EAAE,CAAC;YAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC5E,MAAM,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC;YACrD,YAAY,EAAE,mBAAmB;YACjC,UAAU,EAAE,MAAM,CAAC,MAAM;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACL,YAAY;QACZ,YAAY,EAAE,mBAAmB;QACjC,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"writeScreenshot.js","sourceRoot":"","sources":["../../src/workspace/writeScreenshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ # Host integration: image placement
2
+
3
+ This guide maps the generic image-placement architecture to **SDK APIs (v0.6+)** vs **website-repo responsibilities**. The SDK stays product-agnostic; site-specific resolvers, prompts, and safety live in the host app.
4
+
5
+ ## Boundary
6
+
7
+ | Concern | Website repo | `@auvira.ai/sdk` |
8
+ | --- | --- | --- |
9
+ | Upload API → `public/uploads/` | Yes | No |
10
+ | `ImagePlacementTarget` resolver (hero / card / gallery) | Yes | No |
11
+ | Field-path checklists in prompts (`siteConfig.sections[…]`) | Yes | No |
12
+ | `evaluateImageEmbedding` + `image_unwired` rollback | Yes | No |
13
+ | `replace_image` / `place_image` domain tool | Yes (host tool) | Registry + dispatch only |
14
+ | Typed attachment metadata + manifest | Consumes | `AgentAttachmentMeta`, `.auvira/attachments.json` |
15
+ | Vision bytes for model | Optional | `images[]` on send payload |
16
+ | Serializable multi-file completion | Configures | `completion.rules` |
17
+ | Built-in `get_attachment_urls` | Can override | Shipped generic tool |
18
+
19
+ ## Layer 1 — Attachments vs vision images
20
+
21
+ **Attachments** are already on disk (host uploaded to `public/`). Pass metadata only:
22
+
23
+ ```ts
24
+ await agent.send(
25
+ {
26
+ text: harnessPrompt,
27
+ attachments: [
28
+ {
29
+ index: 0,
30
+ publicUrl: "/uploads/hero.jpg",
31
+ destPath: "public/uploads/hero.jpg",
32
+ role: "decoration",
33
+ label: "Hero background",
34
+ },
35
+ ],
36
+ // Optional: thumbnails for vision when style matching matters
37
+ images: [{ data: base64, mimeType: "image/jpeg" }],
38
+ },
39
+ { completion: { mode: "multi_file_required" } },
40
+ );
41
+ ```
42
+
43
+ The SDK:
44
+
45
+ 1. Writes `.auvira/attachments.json` in the workspace (no file copy).
46
+ 2. Injects a generic `UPLOADED ASSETS` block into harness prompts via `formatAttachmentsContextBlock`.
47
+ 3. Registers built-in `get_attachment_urls` unless the host overrides it.
48
+
49
+ Use **attachments** when URLs are known and files exist. Use **images** when the model needs pixel-level vision (vibe matching). Both can be combined.
50
+
51
+ ## Layer 2 — Serializable completion rules
52
+
53
+ `isComplete` callbacks cannot cross `job.json`. Use `completion.rules` instead:
54
+
55
+ ```ts
56
+ completion: {
57
+ mode: "multi_file_required",
58
+ requireWiringAfterStyle: true,
59
+ styleAssetPatterns: ["globals\\.css", "siteConfig", "pages/.*\\.siteConfig"],
60
+ wiringPatterns: ["page\\.tsx", "pages/.*\\.tsx"],
61
+ rules: {
62
+ requireAssetPublish: false, // uploads already on disk
63
+ requiredChanges: [
64
+ { pattern: "siteConfig|pages/.*\\.siteConfig", required: true },
65
+ { pattern: "page\\.tsx|pages/.*\\.tsx", required: true },
66
+ ],
67
+ requiredPaths: ["public/uploads/hero.jpg"],
68
+ },
69
+ }
70
+ ```
71
+
72
+ Rules gate **file classes** (regex on `changedFiles`) and **workspace paths** (must exist on disk). They do not encode `siteConfig` field paths — keep those in the host prompt compiler.
73
+
74
+ Sandbox `job.json` supports the same `completion.rules` and `attachments` array (see [sandbox-runner.md](./sandbox-runner.md)).
75
+
76
+ ## Layer 3 — Host-injectable tools
77
+
78
+ Register domain tools at create or send time (in-process only; not serializable to sandbox v1):
79
+
80
+ ```ts
81
+ import {
82
+ Agent,
83
+ createGetAttachmentUrlsHostTool,
84
+ type HostToolRegistration,
85
+ } from "@auvira.ai/sdk";
86
+
87
+ const placeImageTool: HostToolRegistration = {
88
+ definition: {
89
+ name: "place_image",
90
+ description: "Wire an uploaded attachment publicUrl into a resolved target field.",
91
+ parameters: {
92
+ type: "object",
93
+ properties: {
94
+ index: { type: "number" },
95
+ targetId: { type: "string" },
96
+ },
97
+ required: ["index", "targetId"],
98
+ },
99
+ },
100
+ handler: async (args, ctx) => {
101
+ // Host reads ctx.attachments, updates siteConfig / page TSX
102
+ return { ok: true, output: "Placed image" };
103
+ },
104
+ };
105
+
106
+ const agent = await Agent.create({
107
+ model: { id: "MiniMax-M3", provider: "custom" },
108
+ local: { cwd: repoPath },
109
+ hostTools: [placeImageTool],
110
+ });
111
+ ```
112
+
113
+ Constraints:
114
+
115
+ - Names must match `^[a-z][a-z0-9_]{0,63}$`.
116
+ - Cannot collide with core tools (`grep`, `read`, `publish_reference_image`, etc.).
117
+ - Sandbox runner: use in-process `Agent.send` for host tools, or document a future `hostToolsEndpoint`.
118
+
119
+ ## Layer 4 — Publish + generate (existing v0.5)
120
+
121
+ - `publish_reference_image` — copy `.auvira/input-image-N` or vision primary to `public/assets/`.
122
+ - `generate_image` — MiniMax image-01 when `AUVIRA_IMAGE_GEN_ENABLED=true`.
123
+
124
+ Wire `publicUrl` from tool JSON in TSX/CSS; never `destPath` or `/public/...` in `src`.
125
+
126
+ ## Non-goals (SDK)
127
+
128
+ The SDK does **not** include:
129
+
130
+ - `siteConfig` schemas or section types
131
+ - Migration page paths or renderer names
132
+ - Doraemon / demo-specific examples
133
+ - `evaluateImageEmbedding` or `image_unwired` safety (host `cursorEditSafety`)
134
+
135
+ ## Suggested host wiring
136
+
137
+ 1. **Upload API** → write file under `public/uploads/`, build `AgentAttachmentMeta[]`.
138
+ 2. **Resolver** → produce target field paths for the prompt (repo-only).
139
+ 3. **Send** → `attachments` + harness prompt + `completion.rules`.
140
+ 4. **Optional** → register `place_image` host tool for structured placement.
141
+ 5. **Post-run** → host safety verifies embedding via `evaluateImageEmbedding`.
@@ -71,6 +71,10 @@ auvira-sdk-run --job <editJobId>
71
71
  | `AUVIRA_JOBS_ROOT` | No | Jobs directory (default `/vercel/.auvira/auvira-jobs`) |
72
72
  | `AUVIRA_CURSOR_JOB_ID` | No | Job id if `--job` not passed |
73
73
  | `AUVIRA_STREAM_RAW_MODEL_TRACE` | No | Set to `true` to emit raw provider reasoning in `activity_trace` (default off) |
74
+ | `AUVIRA_IMAGE_GEN_ENABLED` | No | Set to `true` to enable `generate_image` tool (default `false`) |
75
+ | `AUVIRA_IMAGE_GEN_MAX_PER_RUN` | No | Max image generations per run (default `2`) |
76
+ | `AUVIRA_IMAGE_BASE_URL` | No | Override image API base (default global `api.minimax.io/v1` or CN from chat host) |
77
+ | `AUVIRA_IMAGE_MODEL` | No | Image model id (default `image-01`) |
74
78
 
75
79
  `CUSTOM_MODEL_API_KEY` is read from the environment only — never from `job.json`.
76
80
 
@@ -85,6 +89,14 @@ auvira-sdk-run --job <editJobId>
85
89
  "images": [
86
90
  { "data": "<base64>", "mimeType": "image/png" }
87
91
  ],
92
+ "attachments": [
93
+ {
94
+ "index": 0,
95
+ "publicUrl": "/uploads/hero.jpg",
96
+ "destPath": "public/uploads/hero.jpg",
97
+ "role": "decoration"
98
+ }
99
+ ],
88
100
  "selectedDom": {
89
101
  "sectionIndex": 6,
90
102
  "sectionTitle": "Our Services",
@@ -93,7 +105,15 @@ auvira-sdk-run --job <editJobId>
93
105
  "completion": {
94
106
  "mode": "multi_file_required",
95
107
  "requireWiringAfterStyle": true,
96
- "auto": false
108
+ "auto": false,
109
+ "rules": {
110
+ "requiredChanges": [
111
+ { "pattern": "siteConfig", "required": true },
112
+ { "pattern": "page\\.tsx", "required": true }
113
+ ],
114
+ "requiredPaths": ["public/uploads/hero.jpg"],
115
+ "requireAssetPublish": false
116
+ }
97
117
  },
98
118
  "validation": { "skip": true },
99
119
  "reuseWorkspace": false,
@@ -108,9 +128,14 @@ auvira-sdk-run --job <editJobId>
108
128
 
109
129
  - `promptText` must use harness format (`\n\n---\n\n` delimiter) for website edits.
110
130
  - `images` are base64 only — no host filesystem paths.
131
+ - `attachments` are host metadata for files already on disk (`publicUrl`, optional `destPath`, `role`). The runner writes `.auvira/attachments.json` and injects a generic context block.
132
+ - `completion.rules` provides JSON-serializable multi-file gates (`requiredChanges`, `requiredPaths`, `requireAssetPublish`).
111
133
  - `completion.isComplete` is not allowed (not JSON-serializable).
134
+ - `hostTools` are **not** supported in `job.json` v1 — register them in-process via `Agent.create` / `Agent.send`.
112
135
  - `model.apiKey` is rejected by the validator.
113
136
 
137
+ See [host-integration-image-placement.md](./host-integration-image-placement.md) for the full SDK vs website-repo split.
138
+
114
139
  ## Result (`SandboxAuviraJobResult`)
115
140
 
116
141
  Written to `result.json` and appended as the final `events.ndjson` line:
@@ -234,8 +259,25 @@ import type { SandboxAuviraJobInput, SandboxAuviraJobResult } from "@auvira.ai/s
234
259
 
235
260
  Subpath: `@auvira.ai/sdk/runner` (types + CLI module).
236
261
 
262
+ ## Host checklist (visual assets)
263
+
264
+ 1. Add `public/assets/edits/` (or your asset dir) to harness `ALLOWED_WRITE_PATHS`
265
+ 2. Set `AUVIRA_IMAGE_GEN_ENABLED=true` when generation is desired (costs apply)
266
+ 3. Ensure preview serves `public/` at site root (`/assets/...` not `/public/assets/...`)
267
+ 4. Map `publish_reference_image` / `generate_image` tool steps in activity UI
268
+
269
+ Reference images are stored as `.auvira/input-image-0.png`, `.auvira/input-image-1.png`, … (`primary` = index 0). Legacy `.auvira/input-screenshot.png` is still written for the first image.
270
+
237
271
  ## Changelog
238
272
 
273
+ ### 0.5.0
274
+
275
+ - Added `publish_reference_image` and `generate_image` agent tools
276
+ - Stable multi-image `.auvira` naming (`input-image-N`)
277
+ - MiniMax image-01 client (`POST /v1/image_generation`) isolated in `minimaxImageClient.ts`
278
+ - Binary-safe asset writes with `publicUrl` wiring contract
279
+ - Metadata-only checkpoint diffs for binary assets under `public/`
280
+
239
281
  ### 0.4.0
240
282
 
241
283
  - Added `aggregateStepStates()` helper for host step upsert (last status wins per step id)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auvira.ai/sdk",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Cursor-SDK-compatible visual coding agent with custom model support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -44,6 +44,11 @@
44
44
  "test:real": "node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/real src/__tests__/flex/real-*.e2e.test.ts src/__tests__/runner/run-cli.real.e2e.test.ts",
45
45
  "test:runner": "node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/runner --exclude 'src/__tests__/runner/**/*.real.e2e.test.ts'",
46
46
  "test:runner:real": "node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/runner/run-cli.real.e2e.test.ts src/__tests__/runner/run-cli-vibe-consumer.real.e2e.test.ts",
47
+ "test:runner:asset": "AUVIRA_REAL_ASSET_E2E=true node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/runner/run-cli-asset.real.e2e.test.ts",
48
+ "test:runner:image-gen": "AUVIRA_REAL_IMAGE_GEN_E2E=true AUVIRA_IMAGE_GEN_ENABLED=true node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/runner/run-cli-generate-image.real.e2e.test.ts",
49
+ "test:real:image-api": "AUVIRA_REAL_IMAGE_API=true AUVIRA_IMAGE_GEN_ENABLED=true node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/real/minimax-image-api.real.test.ts",
50
+ "test:real:multi-image": "AUVIRA_REAL_MULTI_IMAGE_E2E=true node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/real/agent-multi-image.e2e.test.ts src/__tests__/runner/run-cli-multi-image.real.e2e.test.ts",
51
+ "test:real:attachment-placement": "AUVIRA_REAL_ATTACHMENT_E2E=true node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/real/agent-attachment-placement.e2e.test.ts src/__tests__/runner/run-cli-attachment-placement.real.e2e.test.ts",
47
52
  "test:runner:vibe": "node --env-file=.env ./node_modules/vitest/vitest.mjs run src/__tests__/runner/run-cli-vibe-consumer.real.e2e.test.ts"
48
53
  },
49
54
  "keywords": [