@alexkroman1/aai-cli 6.5.1 → 6.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.
@@ -9,3 +9,24 @@
9
9
  # Required only if your agent enables the `web_search` builtin
10
10
  # (free key: https://brave.com/search/api/):
11
11
  # BRAVE_API_KEY=
12
+
13
+ # --- Durable workflows and uploads -----------------------------------------
14
+ #
15
+ # A durable run needs a database; `api.upload(file)` needs a database AND
16
+ # somewhere to put the bytes. A DEPLOYED agent gets both from the platform
17
+ # (`aai storage enable`), so these four are the LOCAL equivalents and none of
18
+ # them is needed by an agent that has no workflow.
19
+ #
20
+ # All three storage keys or none: two of three resolves to nothing and refuses
21
+ # by name rather than half-working. Nothing creates the bucket for you — a
22
+ # bucket is dashboard state, not a migration.
23
+ #
24
+ # From the Supabase CLI: `supabase start`, then `supabase status -o env` for
25
+ # API_URL and SERVICE_ROLE_KEY. The local stack declares one bucket, `blobs`,
26
+ # and uploads land under an `uploads/` prefix inside it — the same layout
27
+ # production uses beside its `blobs/<sha256>` deploy artifacts.
28
+ #
29
+ # DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres
30
+ # AAI_UPLOAD_STORAGE_URL=http://127.0.0.1:54321
31
+ # AAI_UPLOAD_STORAGE_KEY=<SERVICE_ROLE_KEY>
32
+ # AAI_UPLOAD_STORAGE_BUCKET=blobs
@@ -1155,6 +1155,29 @@ A query returning more than 1000 rows throws — always bound reads with
1155
1155
  preview and published agents, each with its own schema)
1156
1156
  - `aai dev`: set `DATABASE_URL` in the project `.env`
1157
1157
 
1158
+ **A workflow UPLOAD needs one more thing locally: somewhere to put the bytes.**
1159
+ A deployed agent gets it from the platform; under `aai dev` the bytes go to a
1160
+ bucket you point it at, and the Supabase CLI prints the two values
1161
+ (`supabase start`, then `supabase status -o env`):
1162
+
1163
+ ```sh
1164
+ DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres
1165
+ AAI_UPLOAD_STORAGE_URL=http://127.0.0.1:54321
1166
+ AAI_UPLOAD_STORAGE_KEY=<SERVICE_ROLE_KEY>
1167
+ AAI_UPLOAD_STORAGE_BUCKET=blobs
1168
+ ```
1169
+
1170
+ `blobs`, not `uploads`: that is the one bucket the local stack declares
1171
+ (`supabase/config.toml`, applied by `supabase start`), and uploads land under an
1172
+ `uploads/` PREFIX inside it — the same layout production uses beside its
1173
+ `blobs/<sha256>` deploy artifacts. Nothing creates a bucket for you.
1174
+
1175
+ `.env.example` in a scaffolded project carries this block commented out.
1176
+
1177
+ Without both halves `api.upload(file)` fails naming the one that is missing —
1178
+ never quietly into a directory, which is what it used to do and then lose by the
1179
+ time a resumed run read it.
1180
+
1158
1181
  Create tables lazily from tool code and upsert with `on conflict`:
1159
1182
 
1160
1183
  ```ts no-check
@@ -13,8 +13,8 @@
13
13
  "publish:agent": "aai publish"
14
14
  },
15
15
  "dependencies": {
16
- "@alexkroman1/aai": "^6.5.1",
17
- "@alexkroman1/aai-ui": "^6.5.1",
16
+ "@alexkroman1/aai": "^6.6.0",
17
+ "@alexkroman1/aai-ui": "^6.6.0",
18
18
  "@workflow/world-postgres": "4.3.3",
19
19
  "react": "^19.2.8",
20
20
  "react-dom": "^19.2.8",
@@ -23,7 +23,7 @@
23
23
  "zod": "^4.4.3"
24
24
  },
25
25
  "devDependencies": {
26
- "@alexkroman1/aai-cli": "^6.5.1",
26
+ "@alexkroman1/aai-cli": "^6.6.0",
27
27
  "@tailwindcss/vite": "^4.3.3",
28
28
  "@types/node": "^26.2.0",
29
29
  "@types/react": "^19.2.18",
@@ -61,11 +61,13 @@
61
61
  * CONTIGUOUS prefix, which is honest whether one connection or four are filling
62
62
  * it).
63
63
  *
64
- * It is selectable rather than always-on for the reason the modes are: this is the
65
- * template where a reader runs both over the same recording and sees what each
66
- * costs. It also degrades on its own a small file, or an agent deployed before
67
- * the `/parts` routes existed, sends the single request instead so leaving it on
68
- * is safe.
64
+ * The SDK does this by DEFAULT, so the checkbox is an opt-OUT rather than an
65
+ * opt-in and it is here for the reason the mode radios are: this is the template
66
+ * where a reader runs both over the same recording and sees what each costs. It
67
+ * also degrades on its own a small file, or an agent deployed before the
68
+ * `/parts` routes existed, sends the single request instead — so leaving it on is
69
+ * safe, and turning it off costs retries as well as speed (a single request is the
70
+ * one upload path that cannot be re-sent).
69
71
  *
70
72
  * ## The transcript ARRIVES, rather than appearing at the end
71
73
  *
@@ -342,7 +344,8 @@ function UploadPicker({
342
344
  <span>Split the file across connections</span>
343
345
  <span className="text-xs opacity-70">
344
346
  Sends the recording as several parts at once instead of in one request, which is most of
345
- the wait on a long file. Falls back to the single request on a small one.
347
+ the wait on a long file and is the only upload a dropped connection can resume. Falls
348
+ back to the single request on a small one.
346
349
  </span>
347
350
  </span>
348
351
  </label>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alexkroman1/aai-cli",
3
- "version": "6.5.1",
3
+ "version": "6.6.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "aai": "bin.mjs"
@@ -44,8 +44,8 @@
44
44
  "p-timeout": "^7.0.1",
45
45
  "vite": "^8.2.1",
46
46
  "zod": "^4.4.3",
47
- "@alexkroman1/aai": "6.5.1",
48
- "@alexkroman1/aai-ui": "6.5.1"
47
+ "@alexkroman1/aai": "6.6.0",
48
+ "@alexkroman1/aai-ui": "6.6.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "playwright": "^1.62.1",