@vibes.diy/prompts 2.0.0-dev-cli-p → 2.0.0-dev-cli-q

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.
@@ -5,7 +5,7 @@ The `callAI` function returns structured JSON from an AI model. It always requir
5
5
  ## Basic Usage
6
6
 
7
7
  ```javascript
8
- import { callAI } from 'call-ai';
8
+ import { callAI } from "call-ai";
9
9
 
10
10
  const response = await callAI("Give me a todo list for learning React", {
11
11
  schema: {
@@ -13,10 +13,10 @@ const response = await callAI("Give me a todo list for learning React", {
13
13
  todos: {
14
14
  type: "array",
15
15
  description: "List of actionable todo items",
16
- items: { type: "string" }
17
- }
18
- }
19
- }
16
+ items: { type: "string" },
17
+ },
18
+ },
19
+ },
20
20
  });
21
21
  const todoData = JSON.parse(response);
22
22
  console.log(todoData.todos);
@@ -25,24 +25,27 @@ console.log(todoData.todos);
25
25
  ## Items with properties
26
26
 
27
27
  ```javascript
28
- const response = await callAI("Generate 4 items with label, status, priority (low, medium, high, critical), and notes. Return as structured JSON with these fields.", {
29
- schema: {
30
- properties: {
31
- items: {
32
- type: "array",
28
+ const response = await callAI(
29
+ "Generate 4 items with label, status, priority (low, medium, high, critical), and notes. Return as structured JSON with these fields.",
30
+ {
31
+ schema: {
32
+ properties: {
33
33
  items: {
34
- type: "object",
35
- properties: {
36
- label: { type: "string", description: "Short name for the item" },
37
- status: { type: "string", description: "Current status (active, done, blocked)" },
38
- priority: { type: "string", description: "Priority level (low, medium, high, critical)" },
39
- notes: { type: "string", description: "Additional context or details" }
40
- }
41
- }
42
- }
43
- }
34
+ type: "array",
35
+ items: {
36
+ type: "object",
37
+ properties: {
38
+ label: { type: "string", description: "Short name for the item" },
39
+ status: { type: "string", description: "Current status (active, done, blocked)" },
40
+ priority: { type: "string", description: "Priority level (low, medium, high, critical)" },
41
+ notes: { type: "string", description: "Additional context or details" },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ },
44
47
  }
45
- });
48
+ );
46
49
  const demoData = JSON.parse(response);
47
50
  console.log(demoData.items); // Array of item objects
48
51
  ```
@@ -56,15 +59,15 @@ console.log(demoData.items); // Array of item objects
56
59
  ## Error Handling
57
60
 
58
61
  ```javascript
59
- import { callAI } from 'call-ai';
62
+ import { callAI } from "call-ai";
60
63
 
61
64
  try {
62
65
  const response = await callAI("Generate some content", {
63
66
  schema: {
64
67
  properties: {
65
- result: { type: "string" }
66
- }
67
- }
68
+ result: { type: "string" },
69
+ },
70
+ },
68
71
  });
69
72
  console.log(JSON.parse(response));
70
73
  } catch (error) {
@@ -55,25 +55,19 @@ const App = () => {
55
55
  return (
56
56
  <div>
57
57
  <form onSubmit={submit}>
58
- <input
59
- value={doc.text}
60
- onChange={(e) => merge({ text: e.target.value })}
61
- placeholder="New document"
62
- />
58
+ <input value={doc.text} onChange={(e) => merge({ text: e.target.value })} placeholder="New document" />
63
59
  <button type="submit">Submit</button>
64
60
  </form>
65
61
 
66
62
  <h3>Recent Documents</h3>
67
63
  <ul>
68
64
  {docs.map((doc) => (
69
- <li key={doc._id}>
70
- {doc.text}
71
- </li>
72
- ))}
65
+ <li key={doc._id}>{doc.text}</li>
66
+ ))}
73
67
  </ul>
74
68
  </div>
75
69
  );
76
- }
70
+ };
77
71
  ```
78
72
 
79
73
  ### Editing Documents
@@ -87,12 +81,14 @@ const { doc, merge, submit, save, reset } = useDocument({ _id: "user-profile:abc
87
81
  ```
88
82
 
89
83
  The `useDocument` hook provides several methods:
84
+
90
85
  - `merge(updates)`: Update the document with new fields, without saving. Use this instead of keeping a `useState` for document data.
91
86
  - `submit(e)`: Handles form submission by preventing default, saving, and resetting
92
87
  - `save()`: Save the current document state
93
88
  - `reset()`: Reset to initial state
94
89
 
95
90
  For form-based creation flows, use `submit`:
91
+
96
92
  ```js
97
93
  <form onSubmit={submit}>
98
94
  ```
@@ -124,16 +120,18 @@ Here are other common patterns:
124
120
  #### Query by Key Range
125
121
 
126
122
  Passing a string to `useLiveQuery` will index by that field. You can use the key argument to filter by a specific value:
123
+
127
124
  ```js
128
- const { docs } = useLiveQuery("agentName", {
129
- key: "agent-1" // all docs where doc.agentName === "agent-1", sorted by _id
125
+ const { docs } = useLiveQuery("agentName", {
126
+ key: "agent-1", // all docs where doc.agentName === "agent-1", sorted by _id
130
127
  });
131
128
  ```
132
129
 
133
130
  You can also query a range within a key:
131
+
134
132
  ```js
135
- const { docs } = useLiveQuery("agentRating", {
136
- range: [3, 5]
133
+ const { docs } = useLiveQuery("agentRating", {
134
+ range: [3, 5],
137
135
  });
138
136
  ```
139
137
 
@@ -141,23 +139,21 @@ const { docs } = useLiveQuery("agentRating", {
141
139
 
142
140
  Documents can be updated by multiple clients, and synced later. To create an event counter, don't increment a number on a single doc, instead write a small document per counted event, and query them with an index. Example:
143
141
 
144
-
145
142
  ```js
146
143
  const App = () => {
147
144
  const { useLiveQuery, database } = useFireproof("my-ledger");
148
145
 
149
- const { docs } = useLiveQuery('counter', { key : 'my-event-name'});
150
- const counterValue = docs.length
146
+ const { docs } = useLiveQuery("counter", { key: "my-event-name" });
147
+ const counterValue = docs.length;
151
148
 
152
149
  function countEvent() {
153
150
  database.put({
154
- counter : 'my-event-name'
155
- })
151
+ counter: "my-event-name",
152
+ });
156
153
  }
157
154
 
158
155
  // Call countEvent() to count each event, and render counterValue in the UI.
159
-
160
- }
156
+ };
161
157
  ```
162
158
 
163
159
  This pattern ensures the count is accurate even during sync.
@@ -169,13 +165,14 @@ Use a custom index function to normalize and transform document data, for instan
169
165
  ```js
170
166
  const { docs } = useLiveQuery(
171
167
  (doc) => {
172
- if (doc.type == 'listing_v1') {
168
+ if (doc.type == "listing_v1") {
173
169
  return doc.sellerId;
174
- } else if (doc.type == 'listing') {
170
+ } else if (doc.type == "listing") {
175
171
  return doc.userId;
176
172
  }
177
- },
178
- { key : routeParams.sellerId });
173
+ },
174
+ { key: routeParams.sellerId }
175
+ );
179
176
  ```
180
177
 
181
178
  #### Array Indexes and Prefix Queries
@@ -200,26 +197,23 @@ Sortable lists are a common pattern. Here's how to implement them using Fireproo
200
197
  ```js
201
198
  function App() {
202
199
  const { database, useLiveQuery } = useFireproof("my-ledger");
203
-
200
+
204
201
  // Initialize list with evenly spaced positions
205
202
  async function initializeList() {
206
203
  await database.put({ list: "xyz", position: 1000 });
207
204
  await database.put({ list: "xyz", position: 2000 });
208
205
  await database.put({ list: "xyz", position: 3000 });
209
206
  }
210
-
207
+
211
208
  // Query items on list xyz, sorted by position. Note that useLiveQuery('list', { key:'xyz' }) would be the same docs, sorted chronologically by _id
212
- const queryResult = useLiveQuery(
213
- (doc) => [doc.list, doc.position],
214
- { prefix: ["xyz"] }
215
- );
209
+ const queryResult = useLiveQuery((doc) => [doc.list, doc.position], { prefix: ["xyz"] });
216
210
 
217
211
  // Insert between existing items using midpoint calculation
218
212
  async function insertBetween(beforeDoc, afterDoc) {
219
213
  const newPosition = (beforeDoc.position + afterDoc.position) / 2;
220
- await database.put({
221
- list: "xyz",
222
- position: newPosition
214
+ await database.put({
215
+ list: "xyz",
216
+ position: newPosition,
223
217
  });
224
218
  }
225
219
 
@@ -227,7 +221,7 @@ function App() {
227
221
  <div>
228
222
  <h3>List xyz (Sorted)</h3>
229
223
  <ul>
230
- {queryResult.docs.map(doc => (
224
+ {queryResult.docs.map((doc) => (
231
225
  <li key={doc._id}>
232
226
  {doc._id}: position {doc.position}
233
227
  </li>
@@ -282,10 +276,10 @@ database.subscribe((changes) => {
282
276
 
283
277
  ### Working with Files
284
278
 
285
- Attach files to a document by adding them to the _files property. For example:
279
+ Attach files to a document by adding them to the \_files property. For example:
286
280
 
287
281
  ```html
288
- <input accept="image/*" title="save to Fireproof" type="file" id="files" multiple>
282
+ <input accept="image/*" title="save to Fireproof" type="file" id="files" multiple />
289
283
  ```
290
284
 
291
285
  ```js
@@ -293,11 +287,11 @@ function handleFiles() {
293
287
  const fileList = this.files;
294
288
  const doc = {
295
289
  type: "files",
296
- _files: {}
290
+ _files: {},
297
291
  };
298
292
  for (const file of fileList) {
299
293
  // Assign each File object to the document
300
- doc._files[file.name] = file;
294
+ doc._files[file.name] = file;
301
295
  }
302
296
  database.put(doc);
303
297
  }
@@ -345,6 +339,7 @@ function handleSubmit(e) {
345
339
  ## Example React Application
346
340
 
347
341
  Code listing for todo tracker App.jsx. Note the code ordering: hooks, then handlers, then classNames right before JSX.
342
+
348
343
  ```js
349
344
  import React from "react";
350
345
  import { useFireproof } from "use-fireproof";
@@ -356,17 +351,17 @@ export default function App() {
356
351
  const {
357
352
  doc: newTodo,
358
353
  merge: mergeNewTodo,
359
- submit: submitNewTodo
354
+ submit: submitNewTodo,
360
355
  } = useDocument({
361
356
  todo: "",
362
357
  type: "todo",
363
358
  completed: false,
364
- createdAt: Date.now()
359
+ createdAt: Date.now(),
365
360
  });
366
361
 
367
362
  const { docs: todos } = useLiveQuery("type", {
368
363
  key: "todo",
369
- descending: true
364
+ descending: true,
370
365
  });
371
366
 
372
367
  // 2. Event handlers
@@ -381,8 +376,11 @@ export default function App() {
381
376
 
382
377
  // 3. ClassNames — right before JSX so colors stay consistent
383
378
  const c = {
384
- bg: "bg-white", card: "bg-gray-50", border: "border-gray-200",
385
- accent: "bg-[#e63946]", text: "text-gray-500",
379
+ bg: "bg-white",
380
+ card: "bg-gray-50",
381
+ border: "border-gray-200",
382
+ accent: "bg-[#e63946]",
383
+ text: "text-gray-500",
386
384
  };
387
385
 
388
386
  // 4. JSX return
@@ -390,7 +388,9 @@ export default function App() {
390
388
  <div className={`max-w-md mx-auto p-4 ${c.bg} shadow rounded`}>
391
389
  <h2 className="text-2xl font-bold mb-4">Todo List</h2>
392
390
  <form onSubmit={handleSubmit} className="mb-4">
393
- <label htmlFor="todo" className="block mb-2 font-semibold">Todo</label>
391
+ <label htmlFor="todo" className="block mb-2 font-semibold">
392
+ Todo
393
+ </label>
394
394
  <input
395
395
  className={`w-full ${c.border} border rounded px-2 py-1`}
396
396
  id="todo"
@@ -412,16 +412,11 @@ export default function App() {
412
412
  />
413
413
  <span className="font-medium">{doc.todo}</span>
414
414
  </div>
415
- <button
416
- className={`text-sm ${c.accent} text-white px-2 py-1 rounded`}
417
- onClick={() => database.del(doc._id)}
418
- >
415
+ <button className={`text-sm ${c.accent} text-white px-2 py-1 rounded`} onClick={() => database.del(doc._id)}>
419
416
  Delete
420
417
  </button>
421
418
  </div>
422
- <div className={`text-xs ${c.text} mt-1`}>
423
- {new Date(doc.createdAt).toISOString()}
424
- </div>
419
+ <div className={`text-xs ${c.text} mt-1`}>{new Date(doc.createdAt).toISOString()}</div>
425
420
  </li>
426
421
  ))}
427
422
  </ul>
@@ -432,9 +427,10 @@ export default function App() {
432
427
 
433
428
  ### Example Image Uploader
434
429
 
435
- This React example shows a simple image uploader application that uses Fireproof to store and sort images by creation date. These APIs easily work with plain JavaScript also.
430
+ This React example shows a simple image uploader application that uses Fireproof to store and sort images by creation date. These APIs easily work with plain JavaScript also.
436
431
 
437
432
  Code listing for App.jsx:
433
+
438
434
  ```js
439
435
  import { useFireproof, ImgFile } from "use-fireproof";
440
436
  import { useState } from "react";
@@ -461,8 +457,10 @@ export default function App() {
461
457
 
462
458
  // 3. ClassNames
463
459
  const c = {
464
- bg: "bg-white", card: "bg-gray-50",
465
- accent: "bg-blue-500 hover:bg-blue-600", text: "text-gray-700",
460
+ bg: "bg-white",
461
+ card: "bg-gray-50",
462
+ accent: "bg-blue-500 hover:bg-blue-600",
463
+ text: "text-gray-700",
466
464
  };
467
465
 
468
466
  // 4. JSX return
@@ -474,13 +472,18 @@ export default function App() {
474
472
  type="text"
475
473
  placeholder="Enter description"
476
474
  value={doc.description}
477
- onChange={e => { setError(false); merge({ description: e.target.value }); }}
475
+ onChange={(e) => {
476
+ setError(false);
477
+ merge({ description: e.target.value });
478
+ }}
478
479
  className={`w-full p-2 border rounded mb-4 ${error ? "border-red-500" : "border-gray-300"}`}
479
480
  />
480
- <button onClick={handleUpload} className={`px-4 py-2 ${c.accent} text-white rounded`}>Upload</button>
481
+ <button onClick={handleUpload} className={`px-4 py-2 ${c.accent} text-white rounded`}>
482
+ Upload
483
+ </button>
481
484
  <h3 className="text-lg font-semibold mt-6">Recent Uploads</h3>
482
485
  <div className="grid grid-cols-2 gap-4 mt-2">
483
- {docs.map(doc => (
486
+ {docs.map((doc) => (
484
487
  <div key={doc._id} className={`border p-2 rounded shadow-sm ${c.card}`}>
485
488
  {doc._files?.uploaded && <ImgFile file={doc._files.uploaded} alt="Uploaded Image" className="w-full h-auto rounded" />}
486
489
  <p className={`text-sm ${c.text} mt-2`}>{doc.description || "No description"}</p>
@@ -7,7 +7,7 @@ The ImgGen component can be used in three ways:
7
7
  1. **With no props** - Shows a form UI for users to enter a prompt and/or upload images:
8
8
 
9
9
  ```jsx
10
- import { ImgGen } from 'use-vibes';
10
+ import { ImgGen } from "use-vibes";
11
11
 
12
12
  function MyComponent() {
13
13
  return <ImgGen />; // Shows built-in form for prompt entry and image upload
@@ -17,7 +17,7 @@ function MyComponent() {
17
17
  2. **With a prompt prop** - Immediately generates an image (no form shown):
18
18
 
19
19
  ```jsx
20
- import { ImgGen } from 'use-vibes';
20
+ import { ImgGen } from "use-vibes";
21
21
 
22
22
  function MyComponent() {
23
23
  return <ImgGen prompt="A sunset over mountains" />; // Direct generation, no form
@@ -27,32 +27,31 @@ function MyComponent() {
27
27
  3. **With images prop** - Edits or combines images with AI (no form shown):
28
28
 
29
29
  ```jsx
30
- import { ImgGen } from 'use-vibes';
30
+ import { ImgGen } from "use-vibes";
31
31
 
32
32
  function MyComponent() {
33
33
  const [files, setFiles] = useState([]);
34
34
  return (
35
- <ImgGen
36
- prompt="Create a gift basket with these items"
35
+ <ImgGen
36
+ prompt="Create a gift basket with these items"
37
37
  images={files} // Array of File objects
38
38
  />
39
39
  );
40
40
  }
41
41
  ```
42
42
 
43
- 4. **With an _id prop** - Loads a specific image from the database (no form shown):
43
+ 4. **With an \_id prop** - Loads a specific image from the database (no form shown):
44
44
 
45
- If there is no image generated for the document yet, but it has a `prompt` field, it will generate a new image with the prompt. If there an images is stored, at doc._files.original, it will use that as the base image.
45
+ If there is no image generated for the document yet, but it has a `prompt` field, it will generate a new image with the prompt. If there an images is stored, at doc.\_files.original, it will use that as the base image.
46
46
 
47
47
  ```jsx
48
- import { ImgGen } from 'use-vibes';
48
+ import { ImgGen } from "use-vibes";
49
49
 
50
50
  function MyComponent() {
51
51
  return <ImgGen _id="my-image-id" />; // Loads specific image by ID
52
52
  }
53
53
  ```
54
54
 
55
-
56
55
  ## List by ID
57
56
 
58
57
  Images and prompts are tracked in a Fireproof database with a `type` of `image`. If a database is not provided, it uses `"ImgGen"` as the database name.
@@ -60,13 +59,13 @@ Images and prompts are tracked in a Fireproof database with a `type` of `image`.
60
59
  Display stored images by their ID. Ensure you do this, so users can find the images they created.
61
60
 
62
61
  ```jsx
63
- import { useFireproof } from 'use-fireproof';
64
- import { ImgGen } from 'use-vibes';
62
+ import { useFireproof } from "use-fireproof";
63
+ import { ImgGen } from "use-vibes";
65
64
 
66
65
  function MyComponent() {
67
66
  const { database, useLiveQuery } = useFireproof("my-db-name");
68
- const { docs: imageDocuments } = useLiveQuery('type', {
69
- key: 'image',
67
+ const { docs: imageDocuments } = useLiveQuery("type", {
68
+ key: "image",
70
69
  descending: true,
71
70
  });
72
71
 
@@ -103,8 +102,8 @@ ImgGen supports custom styling through CSS variables or custom class names:
103
102
  }
104
103
 
105
104
  // With custom class names
106
- <ImgGen
107
- prompt="A landscape"
105
+ <ImgGen
106
+ prompt="A landscape"
108
107
  className="my-custom-image"
109
108
  classes={{
110
109
  root: 'custom-container',
@@ -18,21 +18,23 @@ Examples
18
18
  const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
19
19
 
20
20
  // Start/resume only in direct response to a user gesture (e.g., a Play button)
21
- document.querySelector('#start-audio')?.addEventListener('click', async () => {
22
- if (audioCtx.state !== 'running') await audioCtx.resume();
21
+ document.querySelector("#start-audio")?.addEventListener("click", async () => {
22
+ if (audioCtx.state !== "running") await audioCtx.resume();
23
23
  // now safe to create/start nodes
24
24
  });
25
25
 
26
26
  // 2) Simple tone
27
27
  const osc = audioCtx.createOscillator();
28
- osc.type = 'sine';
28
+ osc.type = "sine";
29
29
  osc.frequency.value = 440;
30
30
  osc.connect(audioCtx.destination);
31
31
  osc.start();
32
32
  osc.stop(audioCtx.currentTime + 1);
33
33
 
34
34
  // 3) Load/decode and play a file
35
- const buf = await fetch('/path/audio.mp3').then(r => r.arrayBuffer()).then(b => audioCtx.decodeAudioData(b));
35
+ const buf = await fetch("/path/audio.mp3")
36
+ .then((r) => r.arrayBuffer())
37
+ .then((b) => audioCtx.decodeAudioData(b));
36
38
  const src = audioCtx.createBufferSource();
37
39
  src.buffer = buf;
38
40
  src.connect(audioCtx.destination);
@@ -42,7 +44,7 @@ src.start();
42
44
  const gain = audioCtx.createGain();
43
45
  gain.gain.value = 0.5;
44
46
  const filter = audioCtx.createBiquadFilter();
45
- filter.type = 'lowpass';
47
+ filter.type = "lowpass";
46
48
  filter.frequency.value = 1000;
47
49
  osc.disconnect();
48
50
  osc.connect(filter).connect(gain).connect(audioCtx.destination);
@@ -78,8 +80,8 @@ const wetGain = audioCtx.createGain();
78
80
  const dryGain = audioCtx.createGain();
79
81
 
80
82
  delay.delayTime.value = 0.35;
81
- feedbackGain.gain.value = 0.5; // < 1.0
82
- filter.type = 'lowpass';
83
+ feedbackGain.gain.value = 0.5; // < 1.0
84
+ filter.type = "lowpass";
83
85
  filter.frequency.value = 8000;
84
86
  // distortion.curve = yourFloat32Curve;
85
87
  // reverb.buffer = yourImpulseResponseAudioBuffer;
@@ -103,13 +105,13 @@ Helper (load IR):
103
105
 
104
106
  ```js
105
107
  async function loadImpulseResponse(url) {
106
- const res = await fetch(url, { mode: 'cors' });
108
+ const res = await fetch(url, { mode: "cors" });
107
109
  if (!res.ok) throw new Error(`Failed to fetch IR ${url}: ${res.status} ${res.statusText}`);
108
110
  const ab = await res.arrayBuffer();
109
111
  try {
110
112
  return await audioCtx.decodeAudioData(ab);
111
113
  } catch (err) {
112
- console.error('decodeAudioData failed for IR', url, err);
114
+ console.error("decodeAudioData failed for IR", url, err);
113
115
  throw err; // Surface decoding/CORS-related failures clearly
114
116
  }
115
117
  }
@@ -132,7 +134,9 @@ micGain.connect(master);
132
134
  metronomeGain.connect(master);
133
135
 
134
136
  async function initMic() {
135
- const stream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: false } });
137
+ const stream = await navigator.mediaDevices.getUserMedia({
138
+ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: false },
139
+ });
136
140
  const micSrc = audioCtx.createMediaStreamSource(stream);
137
141
  micSrc.connect(micGain);
138
142
  }
@@ -140,7 +144,7 @@ async function initMic() {
140
144
  function scheduleClick(atTime, downbeat = false) {
141
145
  const osc = audioCtx.createOscillator();
142
146
  const env = audioCtx.createGain();
143
- osc.type = 'square';
147
+ osc.type = "square";
144
148
  osc.frequency.setValueAtTime(downbeat ? 2000 : 1600, atTime);
145
149
  env.gain.setValueAtTime(0.0001, atTime);
146
150
  env.gain.exponentialRampToValueAtTime(1.0, atTime + 0.001);
@@ -150,8 +154,12 @@ function scheduleClick(atTime, downbeat = false) {
150
154
  osc.stop(atTime + 0.05);
151
155
  // Cleanup to avoid accumulating nodes during long sessions
152
156
  osc.onended = () => {
153
- try { osc.disconnect(); } catch {}
154
- try { env.disconnect(); } catch {}
157
+ try {
158
+ osc.disconnect();
159
+ } catch {}
160
+ try {
161
+ env.disconnect();
162
+ } catch {}
155
163
  };
156
164
  }
157
165
 
@@ -159,11 +167,13 @@ function startMetronome({ bpm = 120, beatsPerBar = 4 } = {}) {
159
167
  const spb = 60 / bpm; // seconds per beat
160
168
  let next = audioCtx.currentTime + 0.1;
161
169
  let beat = 0;
162
- const lookaheadMs = 25, ahead = 0.2;
170
+ const lookaheadMs = 25,
171
+ ahead = 0.2;
163
172
  const id = setInterval(() => {
164
173
  while (next < audioCtx.currentTime + ahead) {
165
174
  scheduleClick(next, beat % beatsPerBar === 0);
166
- next += spb; beat = (beat + 1) % beatsPerBar;
175
+ next += spb;
176
+ beat = (beat + 1) % beatsPerBar;
167
177
  }
168
178
  }, lookaheadMs);
169
179
  return () => clearInterval(id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibes.diy/prompts",
3
- "version": "2.0.0-dev-cli-p",
3
+ "version": "2.0.0-dev-cli-q",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "description": "",
@@ -30,8 +30,8 @@
30
30
  "@fireproof/core-types-base": "~0.24.16",
31
31
  "@fireproof/core-types-protocols-cloud": "~0.24.16",
32
32
  "@fireproof/use-fireproof": "~0.24.16",
33
- "@vibes.diy/call-ai-v2": "^2.0.0-dev-cli-p",
34
- "@vibes.diy/use-vibes-types": "^2.0.0-dev-cli-p",
33
+ "@vibes.diy/call-ai-v2": "^2.0.0-dev-cli-q",
34
+ "@vibes.diy/use-vibes-types": "^2.0.0-dev-cli-q",
35
35
  "arktype": "~2.2.0",
36
36
  "json-schema-faker": "~0.6.1"
37
37
  },
package/prompts.js CHANGED
@@ -148,7 +148,7 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
148
148
  const concatenatedLlmsTxts = [];
149
149
  for (const llm of chosenLlms) {
150
150
  const rText = await keyedLoadAsset.get(llm.name).once(async () => {
151
- return loadAsset(`./llms/${llm.name}.txt`, {
151
+ return loadAsset(`./llms/${llm.name}.md`, {
152
152
  fallBackUrl: "https://esm.sh/@vibes.diy/prompts/",
153
153
  basePath: () => {
154
154
  const dir = import.meta.url;
@@ -160,7 +160,7 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
160
160
  });
161
161
  });
162
162
  if (rText.isErr()) {
163
- console.warn(`Failed to load text for LLM ${llm.name} at path ${import.meta.dirname}/./llms/${llm.name}.txt:`, rText.Err());
163
+ console.warn(`Failed to load text for LLM ${llm.name} at path ${import.meta.dirname}/./llms/${llm.name}.md:`, rText.Err());
164
164
  continue;
165
165
  }
166
166
  concatenatedLlmsTxts.push(`<${llm.label}-docs>`);
@@ -227,7 +227,7 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
227
227
  }
228
228
  export async function getSkillText(name) {
229
229
  const rText = await keyedLoadAsset.get(name).once(async () => {
230
- return loadAsset(`./llms/${name}.txt`, {
230
+ return loadAsset(`./llms/${name}.md`, {
231
231
  fallBackUrl: "https://esm.sh/@vibes.diy/prompts/",
232
232
  basePath: () => import.meta.url,
233
233
  });
package/prompts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../jsr/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../jsr/prompts.ts"],"names":[],"mappings":"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"}