@vibes.diy/prompts 0.20.3-dev-push → 0.20.5-dev-cli-stable-entry
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.
- package/build-schema-prompt.d.ts +1 -0
- package/build-schema-prompt.js +18 -0
- package/build-schema-prompt.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/llms/callai.js +0 -1
- package/llms/callai.js.map +1 -1
- package/llms/callai.md +76 -0
- package/llms/d3.md +11 -0
- package/llms/fireproof.js +0 -1
- package/llms/fireproof.js.map +1 -1
- package/llms/{fireproof.txt → fireproof.md} +116 -69
- package/llms/image-gen.js +0 -1
- package/llms/image-gen.js.map +1 -1
- package/llms/{image-gen.txt → image-gen.md} +14 -15
- package/llms/three-js.md +10 -0
- package/llms/types.d.ts +0 -1
- package/llms/{web-audio.txt → web-audio.md} +25 -15
- package/package.json +16 -8
- package/prompts.d.ts +2 -10
- package/prompts.js +26 -18
- package/prompts.js.map +1 -1
- package/llms/callai.txt +0 -352
package/llms/three-js.md
CHANGED
|
@@ -1050,6 +1050,16 @@ composer.addPass(new OutputPass());
|
|
|
1050
1050
|
|
|
1051
1051
|
_This guide focuses on Three.js's most impressive capabilities. Each example demonstrates advanced techniques that create visually stunning results with minimal code complexity._
|
|
1052
1052
|
|
|
1053
|
+
### Code Structure for Three.js + React Apps
|
|
1054
|
+
|
|
1055
|
+
Structure your component in this order:
|
|
1056
|
+
|
|
1057
|
+
1. **Three.js helper functions** — scene setup, object creation, animation loops separate from React
|
|
1058
|
+
2. **Hooks and state** — useFireproof, useRef for canvas/scene, useState for UI controls
|
|
1059
|
+
3. **Effects** — useEffect to initialize scene on mount, update on parameter changes, cleanup on unmount
|
|
1060
|
+
4. **ClassNames object** — colors, sizes right before JSX so they stay consistent
|
|
1061
|
+
5. **JSX return** — canvas element with refs, UI controls referencing classNames
|
|
1062
|
+
|
|
1053
1063
|
# Real world example
|
|
1054
1064
|
|
|
1055
1065
|
```javascript
|
package/llms/types.d.ts
CHANGED
|
@@ -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(
|
|
22
|
-
if (audioCtx.state !==
|
|
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 =
|
|
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(
|
|
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 =
|
|
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;
|
|
82
|
-
filter.type =
|
|
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:
|
|
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(
|
|
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({
|
|
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 =
|
|
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 {
|
|
154
|
-
|
|
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,
|
|
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;
|
|
175
|
+
next += spb;
|
|
176
|
+
beat = (beat + 1) % beatsPerBar;
|
|
167
177
|
}
|
|
168
178
|
}, lookaheadMs);
|
|
169
179
|
return () => clearInterval(id);
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibes.diy/prompts",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.5-dev-cli-stable-entry",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"main": "./index.js",
|
|
5
6
|
"description": "",
|
|
6
7
|
"keywords": [
|
|
7
8
|
"ai",
|
|
@@ -19,17 +20,24 @@
|
|
|
19
20
|
"license": "Apache-2.0",
|
|
20
21
|
"dependencies": {
|
|
21
22
|
"@adviser/cement": "~0.5.34",
|
|
22
|
-
"@fireproof/core": "~0.24.
|
|
23
|
-
"@fireproof/core-keybag": "~0.24.
|
|
24
|
-
"@fireproof/core-runtime": "~0.24.
|
|
25
|
-
"@fireproof/core-types-base": "~0.24.
|
|
26
|
-
"@fireproof/core-types-protocols-cloud": "~0.24.
|
|
27
|
-
"@fireproof/use-fireproof": "~0.24.
|
|
28
|
-
"@vibes.diy/
|
|
23
|
+
"@fireproof/core": "~0.24.15",
|
|
24
|
+
"@fireproof/core-keybag": "~0.24.16",
|
|
25
|
+
"@fireproof/core-runtime": "~0.24.16",
|
|
26
|
+
"@fireproof/core-types-base": "~0.24.16",
|
|
27
|
+
"@fireproof/core-types-protocols-cloud": "~0.24.16",
|
|
28
|
+
"@fireproof/use-fireproof": "~0.24.16",
|
|
29
|
+
"@vibes.diy/call-ai-v2": "^0.20.5-dev-cli-stable-entry",
|
|
30
|
+
"@vibes.diy/use-vibes-types": "^0.20.5-dev-cli-stable-entry",
|
|
31
|
+
"arktype": "~2.2.0",
|
|
32
|
+
"json-schema-faker": "~0.6.1"
|
|
29
33
|
},
|
|
30
34
|
"peerDependencies": {
|
|
31
35
|
"react": ">=19.1.0"
|
|
32
36
|
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/VibesDIY/vibes.diy.git"
|
|
40
|
+
},
|
|
33
41
|
"scripts": {
|
|
34
42
|
"build": "core-cli tsc",
|
|
35
43
|
"test": "vitest run"
|
package/prompts.d.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import type { UserSettings } from "./settings.js";
|
|
2
2
|
import { Result } from "@adviser/cement";
|
|
3
3
|
import { LlmCatalogEntry } from "./json-docs.js";
|
|
4
|
-
|
|
5
|
-
readonly role: "system" | "user" | "assistant";
|
|
6
|
-
readonly content: string | readonly {
|
|
7
|
-
readonly type: string;
|
|
8
|
-
readonly text: string;
|
|
9
|
-
}[];
|
|
10
|
-
}
|
|
4
|
+
import { ChatMessage } from "@vibes.diy/call-ai-v2";
|
|
11
5
|
export declare const DEFAULT_CODING_MODEL: "anthropic/claude-opus-4.5";
|
|
12
6
|
export declare function normalizeModelId(id: unknown): string | undefined;
|
|
13
7
|
export declare function isPermittedModelId(id: unknown): id is string;
|
|
@@ -32,7 +26,5 @@ interface LlmSelectionOptions {
|
|
|
32
26
|
}
|
|
33
27
|
export declare function generateImportStatements(llms: LlmCatalogEntry[]): string;
|
|
34
28
|
export declare function makeBaseSystemPrompt(model: string, sessionDoc: Partial<UserSettings> & LlmSelectionOptions): Promise<SystemPromptResult>;
|
|
35
|
-
export declare
|
|
36
|
-
structure: string[];
|
|
37
|
-
};
|
|
29
|
+
export declare function getSkillText(name: string): Promise<string>;
|
|
38
30
|
export {};
|
package/prompts.js
CHANGED
|
@@ -28,7 +28,7 @@ export async function resolveEffectiveModel(settingsDoc, vibeDoc) {
|
|
|
28
28
|
return defaultCodingModel();
|
|
29
29
|
}
|
|
30
30
|
export async function getDefaultDependencies() {
|
|
31
|
-
return ["fireproof", "callai"];
|
|
31
|
+
return ["fireproof", "callai", "web-audio"];
|
|
32
32
|
}
|
|
33
33
|
async function detectModulesInHistory(history, _opts) {
|
|
34
34
|
const detected = new Set();
|
|
@@ -148,11 +148,10 @@ 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}.
|
|
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;
|
|
155
|
-
console.log("Base path for loading LLM text asset:", llm.name, dir);
|
|
156
155
|
return dir;
|
|
157
156
|
},
|
|
158
157
|
mock: {
|
|
@@ -161,7 +160,7 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
|
|
|
161
160
|
});
|
|
162
161
|
});
|
|
163
162
|
if (rText.isErr()) {
|
|
164
|
-
console.warn(`Failed to load text for LLM ${llm.name} at path ${import.meta.dirname}/./llms/${llm.name}.
|
|
163
|
+
console.warn(`Failed to load text for LLM ${llm.name} at path ${import.meta.dirname}/./llms/${llm.name}.md:`, rText.Err());
|
|
165
164
|
continue;
|
|
166
165
|
}
|
|
167
166
|
concatenatedLlmsTxts.push(`<${llm.label}-docs>`);
|
|
@@ -171,19 +170,21 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
|
|
|
171
170
|
const concatenatedLlmsTxt = concatenatedLlmsTxts.join("\n");
|
|
172
171
|
const stylePrompt = sessionDoc?.stylePrompt || defaultStylePrompt;
|
|
173
172
|
const demoDataLines = includeDemoData
|
|
174
|
-
? `- If your app has a function that uses callAI with a schema to save data, include a Demo Data button that calls that function with an example prompt. Don't write an extra function, use real app code so the data illustrates what it looks like to use the app.\n- Never have
|
|
173
|
+
? `- If your app has a function that uses callAI with a schema to save data, include a Demo Data button that calls that function with an example prompt. Don't write an extra function, use real app code so the data illustrates what it looks like to use the app.\n- Never have an instance of callAI that is only used to generate demo data, always use the same calls that are triggered by user actions in the app.\n`
|
|
175
174
|
: "";
|
|
176
175
|
const systemPromptLines = [
|
|
177
176
|
"You are an AI assistant tasked with creating React components. You should create components that:",
|
|
178
|
-
"- Use modern React practices and follow the
|
|
177
|
+
"- Use modern React practices and follow the Rules of Hooks: never call hooks (useState, useDocument, useLiveQuery, etc.) inside event handlers, loops, conditions, or nested functions. To update an existing document in a click handler, use `database.put({ ...doc, fieldName: newValue })` instead of useDocument.",
|
|
179
178
|
"- Don't use any TypeScript, just use JavaScript",
|
|
180
|
-
"- Use Tailwind CSS for mobile-first accessible styling",
|
|
179
|
+
"- Use Tailwind CSS for mobile-first accessible styling with bracket notation for custom colors like bg-[#242424]",
|
|
180
|
+
"- Define a classNames object (e.g. `const c = { bg: 'bg-[#f1f5f9]', ink: 'text-[#0f172a]', border: 'border-[#0f172a]', accent: 'bg-[#0f172a]' }`) just before the JSX return, then use them like `className={c.ink}`. Never put raw bracket colors directly in JSX — always go through the classNames object.",
|
|
181
181
|
`- Don't use words from the style prompt in your copy: ${stylePrompt}`,
|
|
182
182
|
"- For dynamic components, like autocomplete, don't use external libraries, implement your own",
|
|
183
183
|
"- Avoid using external libraries unless they are essential for the component to function",
|
|
184
184
|
"- Always import the libraries you need at the top of the file",
|
|
185
|
+
"- Structure your component code in this order: (1) hooks and document shapes, (2) event handlers, (3) classNames object, (4) JSX return. ClassNames go right before JSX so they are close to where they are used.",
|
|
185
186
|
"- Use Fireproof for data persistence",
|
|
186
|
-
"- Use `callAI` to fetch AI
|
|
187
|
+
"- Use `callAI` to fetch AI, use schema like this: `JSON.parse(await callAI(prompt, { schema: { properties: { todos: { type: 'array', items: { type: 'string' } } } } }))` and save final responses as individual Fireproof documents.",
|
|
187
188
|
"- For file uploads use drag and drop and store using the `doc._files` API",
|
|
188
189
|
"- Don't try to generate png or base64 data, use placeholder image APIs instead, like https://picsum.photos/400 where 400 is the square size",
|
|
189
190
|
"- Consider and potentially reuse/extend code from previous responses if relevant",
|
|
@@ -193,7 +194,7 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
|
|
|
193
194
|
"- Keep the database name stable as you edit the code",
|
|
194
195
|
"- The system can send you crash reports, fix them by simplifying the affected code",
|
|
195
196
|
"- List data items on the main page of your app so users don't have to hunt for them",
|
|
196
|
-
"- If you save data, make sure it is
|
|
197
|
+
"- If you save data, make sure it is browsable in the app, eg lists should be clickable for more details",
|
|
197
198
|
demoDataLines,
|
|
198
199
|
];
|
|
199
200
|
const systemPrompt = [
|
|
@@ -201,14 +202,12 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
|
|
|
201
202
|
"",
|
|
202
203
|
concatenatedLlmsTxt,
|
|
203
204
|
"",
|
|
204
|
-
"## ImgGen Component",
|
|
205
|
-
"",
|
|
206
|
-
"You should use this component in all cases where you need to generate or edit images. It is a React component that provides a UI for image generation and editing. Make sure to pass the database prop to the component. If you generate images, use a live query to list them (with type 'image') in the UI. The best usage is to save a document with a string field called `prompt` (which is sent to the generator) and an optional `doc._files.original` image and pass the `doc._id` to the component via the `_id` prop. It will handle the rest.",
|
|
207
|
-
"",
|
|
208
205
|
...(userPrompt ? [userPrompt, ""] : []),
|
|
209
|
-
"IMPORTANT: You are working in one JavaScript file
|
|
206
|
+
"IMPORTANT: You are working in one JavaScript file. Define a classNames object just before the JSX return for colors and repeated styles, then reference it in your JSX.",
|
|
207
|
+
"",
|
|
208
|
+
"Before writing code, provide a title and brief description of the app. Then list the top 3 features that are the best fit for a mobile web database with real-time collaboration and describe a short planned workflow showing how those features connect into a coherent user experience.",
|
|
210
209
|
"",
|
|
211
|
-
"
|
|
210
|
+
"Then write the full component code block. After the code block, add a short message (1-2 sentences) describing the core workflow the app supports.",
|
|
212
211
|
"",
|
|
213
212
|
"Begin the component with the import statements. Use react and the following libraries:",
|
|
214
213
|
"",
|
|
@@ -226,7 +225,16 @@ export async function makeBaseSystemPrompt(model, sessionDoc) {
|
|
|
226
225
|
model,
|
|
227
226
|
};
|
|
228
227
|
}
|
|
229
|
-
export
|
|
230
|
-
|
|
231
|
-
}
|
|
228
|
+
export async function getSkillText(name) {
|
|
229
|
+
const rText = await keyedLoadAsset.get(name).once(async () => {
|
|
230
|
+
return loadAsset(`./llms/${name}.md`, {
|
|
231
|
+
fallBackUrl: "https://esm.sh/@vibes.diy/prompts/",
|
|
232
|
+
basePath: () => import.meta.url,
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
if (rText.isErr()) {
|
|
236
|
+
return Promise.reject(rText.Err());
|
|
237
|
+
}
|
|
238
|
+
return rText.Ok();
|
|
239
|
+
}
|
|
232
240
|
//# sourceMappingURL=prompts.js.map
|
package/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../jsr/prompts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAU,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAmB,MAAM,gBAAgB,CAAC;AAGpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../jsr/prompts.ts"],"names":[],"mappings":"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"}
|