@auvira.ai/sdk 0.5.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 (67) hide show
  1. package/README.md +31 -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 +16 -2
  10. package/dist/agent/editCompletion.d.ts.map +1 -1
  11. package/dist/agent/editCompletion.js +83 -1
  12. package/dist/agent/editCompletion.js.map +1 -1
  13. package/dist/agent/hostTools.d.ts +46 -0
  14. package/dist/agent/hostTools.d.ts.map +1 -0
  15. package/dist/agent/hostTools.js +98 -0
  16. package/dist/agent/hostTools.js.map +1 -0
  17. package/dist/agent/parseSendPayload.d.ts +3 -1
  18. package/dist/agent/parseSendPayload.d.ts.map +1 -1
  19. package/dist/agent/parseSendPayload.js +16 -0
  20. package/dist/agent/parseSendPayload.js.map +1 -1
  21. package/dist/agent/runAgentTask.d.ts +4 -1
  22. package/dist/agent/runAgentTask.d.ts.map +1 -1
  23. package/dist/agent/runAgentTask.js +16 -0
  24. package/dist/agent/runAgentTask.js.map +1 -1
  25. package/dist/agent/runValidationWithRepair.d.ts.map +1 -1
  26. package/dist/agent/runValidationWithRepair.js +6 -0
  27. package/dist/agent/runValidationWithRepair.js.map +1 -1
  28. package/dist/agent/tools/executeTool.d.ts.map +1 -1
  29. package/dist/agent/tools/executeTool.js +15 -1
  30. package/dist/agent/tools/executeTool.js.map +1 -1
  31. package/dist/agent/tools/types.d.ts +3 -0
  32. package/dist/agent/tools/types.d.ts.map +1 -1
  33. package/dist/agent/types.d.ts +37 -0
  34. package/dist/agent/types.d.ts.map +1 -1
  35. package/dist/agent/types.js.map +1 -1
  36. package/dist/agent/validateOptions.d.ts.map +1 -1
  37. package/dist/agent/validateOptions.js +10 -1
  38. package/dist/agent/validateOptions.js.map +1 -1
  39. package/dist/index.d.ts +4 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +2 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/providers/agentic/AgenticCustomProvider.d.ts.map +1 -1
  44. package/dist/providers/agentic/AgenticCustomProvider.js +21 -0
  45. package/dist/providers/agentic/AgenticCustomProvider.js.map +1 -1
  46. package/dist/providers/agentic/agentLoop.d.ts +4 -1
  47. package/dist/providers/agentic/agentLoop.d.ts.map +1 -1
  48. package/dist/providers/agentic/agentLoop.js +286 -265
  49. package/dist/providers/agentic/agentLoop.js.map +1 -1
  50. package/dist/providers/agentic/toolSchemas.d.ts +314 -0
  51. package/dist/providers/agentic/toolSchemas.d.ts.map +1 -1
  52. package/dist/providers/agentic/toolSchemas.js +7 -0
  53. package/dist/providers/agentic/toolSchemas.js.map +1 -1
  54. package/dist/providers/types.d.ts +4 -1
  55. package/dist/providers/types.d.ts.map +1 -1
  56. package/dist/providers/types.js.map +1 -1
  57. package/dist/runner/jobTypes.d.ts +3 -2
  58. package/dist/runner/jobTypes.d.ts.map +1 -1
  59. package/dist/runner/run.d.ts.map +1 -1
  60. package/dist/runner/run.js +6 -2
  61. package/dist/runner/run.js.map +1 -1
  62. package/dist/runner/validateJob.d.ts.map +1 -1
  63. package/dist/runner/validateJob.js +83 -0
  64. package/dist/runner/validateJob.js.map +1 -1
  65. package/docs/host-integration-image-placement.md +141 -0
  66. package/docs/sandbox-runner.md +22 -1
  67. package/package.json +2 -1
@@ -50,6 +50,85 @@ function validateImages(raw) {
50
50
  };
51
51
  });
52
52
  }
53
+ function validateAttachments(raw) {
54
+ if (raw === undefined) {
55
+ return undefined;
56
+ }
57
+ if (!Array.isArray(raw)) {
58
+ throw new SandboxJobValidationError("attachments must be an array");
59
+ }
60
+ return raw.map((item, index) => {
61
+ if (!isRecord(item)) {
62
+ throw new SandboxJobValidationError(`attachments[${index}] must be an object`);
63
+ }
64
+ const publicUrl = readString(item.publicUrl, `attachments[${index}].publicUrl`);
65
+ const attachment = {
66
+ index: item.index === undefined
67
+ ? index
68
+ : Number(item.index),
69
+ publicUrl,
70
+ };
71
+ if (!Number.isFinite(attachment.index)) {
72
+ throw new SandboxJobValidationError(`attachments[${index}].index must be a number`);
73
+ }
74
+ if (item.destPath !== undefined) {
75
+ attachment.destPath = readString(item.destPath, `attachments[${index}].destPath`);
76
+ }
77
+ if (item.mimeType !== undefined) {
78
+ attachment.mimeType = readString(item.mimeType, `attachments[${index}].mimeType`);
79
+ }
80
+ if (item.role !== undefined) {
81
+ const role = readString(item.role, `attachments[${index}].role`);
82
+ if (role !== "style_reference" &&
83
+ role !== "decoration" &&
84
+ role !== "content" &&
85
+ role !== "unspecified") {
86
+ throw new SandboxJobValidationError(`attachments[${index}].role is invalid`);
87
+ }
88
+ attachment.role = role;
89
+ }
90
+ if (item.label !== undefined) {
91
+ attachment.label = readString(item.label, `attachments[${index}].label`);
92
+ }
93
+ return attachment;
94
+ });
95
+ }
96
+ function validateCompletionRules(raw) {
97
+ if (!isRecord(raw)) {
98
+ throw new SandboxJobValidationError("completion.rules must be an object");
99
+ }
100
+ const rules = {};
101
+ if (raw.requiredChanges !== undefined) {
102
+ if (!Array.isArray(raw.requiredChanges)) {
103
+ throw new SandboxJobValidationError("completion.rules.requiredChanges must be an array");
104
+ }
105
+ rules.requiredChanges = raw.requiredChanges.map((item, index) => {
106
+ if (!isRecord(item)) {
107
+ throw new SandboxJobValidationError(`completion.rules.requiredChanges[${index}] must be an object`);
108
+ }
109
+ const requirement = {
110
+ pattern: readString(item.pattern, `completion.rules.requiredChanges[${index}].pattern`),
111
+ };
112
+ if (item.required !== undefined) {
113
+ return { ...requirement, required: Boolean(item.required) };
114
+ }
115
+ if (item.mustExist !== undefined) {
116
+ return { ...requirement, mustExist: Boolean(item.mustExist) };
117
+ }
118
+ return requirement;
119
+ });
120
+ }
121
+ if (raw.requiredPaths !== undefined) {
122
+ if (!Array.isArray(raw.requiredPaths)) {
123
+ throw new SandboxJobValidationError("completion.rules.requiredPaths must be an array");
124
+ }
125
+ rules.requiredPaths = raw.requiredPaths.map((p) => readString(p, "completion.rules.requiredPaths[]"));
126
+ }
127
+ if (raw.requireAssetPublish !== undefined) {
128
+ rules.requireAssetPublish = Boolean(raw.requireAssetPublish);
129
+ }
130
+ return rules;
131
+ }
53
132
  function validateCompletion(raw) {
54
133
  if (raw === undefined) {
55
134
  return undefined;
@@ -107,6 +186,9 @@ function validateCompletion(raw) {
107
186
  }
108
187
  }
109
188
  }
189
+ if (raw.rules !== undefined) {
190
+ completion.rules = validateCompletionRules(raw.rules);
191
+ }
110
192
  return completion;
111
193
  }
112
194
  /** Validates and parses raw job JSON into SandboxAuviraJobInput v1. */
@@ -133,6 +215,7 @@ export function validateSandboxJob(raw) {
133
215
  promptText,
134
216
  model,
135
217
  images: validateImages(raw.images),
218
+ attachments: validateAttachments(raw.attachments),
136
219
  resumeAgentId: raw.resumeAgentId === undefined
137
220
  ? undefined
138
221
  : readString(raw.resumeAgentId, "resumeAgentId"),
@@ -1 +1 @@
1
- {"version":3,"file":"validateJob.js","sourceRoot":"","sources":["../../src/runner/validateJob.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateJob.js","sourceRoot":"","sources":["../../src/runner/validateJob.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`.
@@ -89,6 +89,14 @@ auvira-sdk-run --job <editJobId>
89
89
  "images": [
90
90
  { "data": "<base64>", "mimeType": "image/png" }
91
91
  ],
92
+ "attachments": [
93
+ {
94
+ "index": 0,
95
+ "publicUrl": "/uploads/hero.jpg",
96
+ "destPath": "public/uploads/hero.jpg",
97
+ "role": "decoration"
98
+ }
99
+ ],
92
100
  "selectedDom": {
93
101
  "sectionIndex": 6,
94
102
  "sectionTitle": "Our Services",
@@ -97,7 +105,15 @@ auvira-sdk-run --job <editJobId>
97
105
  "completion": {
98
106
  "mode": "multi_file_required",
99
107
  "requireWiringAfterStyle": true,
100
- "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
+ }
101
117
  },
102
118
  "validation": { "skip": true },
103
119
  "reuseWorkspace": false,
@@ -112,9 +128,14 @@ auvira-sdk-run --job <editJobId>
112
128
 
113
129
  - `promptText` must use harness format (`\n\n---\n\n` delimiter) for website edits.
114
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`).
115
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`.
116
135
  - `model.apiKey` is rejected by the validator.
117
136
 
137
+ See [host-integration-image-placement.md](./host-integration-image-placement.md) for the full SDK vs website-repo split.
138
+
118
139
  ## Result (`SandboxAuviraJobResult`)
119
140
 
120
141
  Written to `result.json` and appended as the final `events.ndjson` line:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auvira.ai/sdk",
3
- "version": "0.5.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",
@@ -48,6 +48,7 @@
48
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
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
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",
51
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"
52
53
  },
53
54
  "keywords": [