use-vibes 0.19.8-dev → 0.19.16-dev-cli
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/README.md +27 -27
- package/cli.d.ts +1 -0
- package/cli.js +9 -0
- package/cli.js.map +1 -0
- package/commands/cli-output-deno.d.ts +2 -0
- package/commands/cli-output-deno.js +10 -0
- package/commands/cli-output-deno.js.map +1 -0
- package/commands/cli-output.d.ts +5 -0
- package/commands/cli-output.js +5 -0
- package/commands/cli-output.js.map +1 -0
- package/commands/help.d.ts +3 -0
- package/commands/help.js +11 -0
- package/commands/help.js.map +1 -0
- package/commands/help.txt +35 -0
- package/commands/not-implemented.d.ts +5 -0
- package/commands/not-implemented.js +7 -0
- package/commands/not-implemented.js.map +1 -0
- package/commands/skills.d.ts +3 -0
- package/commands/skills.js +14 -0
- package/commands/skills.js.map +1 -0
- package/commands/system.d.ts +6 -0
- package/commands/system.js +70 -0
- package/commands/system.js.map +1 -0
- package/commands/whoami.d.ts +2 -0
- package/commands/whoami.js +5 -0
- package/commands/whoami.js.map +1 -0
- package/deno.json +14 -0
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/main.deno.d.ts +1 -0
- package/main.deno.js +9 -0
- package/main.deno.js.map +1 -0
- package/package.json +19 -3
- package/run-cli.d.ts +6 -0
- package/run-cli.js +101 -0
- package/run-cli.js.map +1 -0
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ pnpm add use-vibes
|
|
|
11
11
|
## Basic Usage
|
|
12
12
|
|
|
13
13
|
```jsx
|
|
14
|
-
import { ImgGen } from
|
|
14
|
+
import { ImgGen } from "use-vibes";
|
|
15
15
|
|
|
16
16
|
function MyComponent() {
|
|
17
17
|
// You can use ImgGen without any props - it includes its own form UI
|
|
@@ -25,10 +25,10 @@ function MyComponent() {
|
|
|
25
25
|
For image manipulation using base64 data:
|
|
26
26
|
|
|
27
27
|
```jsx
|
|
28
|
-
import { base64ToFile } from
|
|
28
|
+
import { base64ToFile } from "use-vibes";
|
|
29
29
|
|
|
30
30
|
// Convert API response to a File object
|
|
31
|
-
const imageFile = base64ToFile(imageResponse.data[0].b64_json,
|
|
31
|
+
const imageFile = base64ToFile(imageResponse.data[0].b64_json, "my-image.png");
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
## Core Features
|
|
@@ -91,7 +91,7 @@ const imageFile = base64ToFile(imageResponse.data[0].b64_json, 'my-image.png');
|
|
|
91
91
|
- **Image Quality Control**: Set quality levels for output images
|
|
92
92
|
|
|
93
93
|
```jsx
|
|
94
|
-
<ImgGen prompt="Detailed artwork" options={{ quality:
|
|
94
|
+
<ImgGen prompt="Detailed artwork" options={{ quality: "high" }} />
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
- **Image Editing with Uploads**: Process existing images with AI
|
|
@@ -127,7 +127,7 @@ const imageFile = base64ToFile(imageResponse.data[0].b64_json, 'my-image.png');
|
|
|
127
127
|
<ImgGen
|
|
128
128
|
prompt="Test error handling"
|
|
129
129
|
onError={(error) => {
|
|
130
|
-
console.error(
|
|
130
|
+
console.error("Generation failed:", error.message);
|
|
131
131
|
}}
|
|
132
132
|
/>
|
|
133
133
|
```
|
|
@@ -142,10 +142,10 @@ const imageFile = base64ToFile(imageResponse.data[0].b64_json, 'my-image.png');
|
|
|
142
142
|
- **Base64 Conversion**: Convert between base64 and File objects
|
|
143
143
|
|
|
144
144
|
```jsx
|
|
145
|
-
import { base64ToFile } from
|
|
145
|
+
import { base64ToFile } from "use-vibes";
|
|
146
146
|
|
|
147
147
|
// Convert API response to a File object
|
|
148
|
-
const imageFile = base64ToFile(imageResponse.data[0].b64_json,
|
|
148
|
+
const imageFile = base64ToFile(imageResponse.data[0].b64_json, "my-image.png");
|
|
149
149
|
```
|
|
150
150
|
|
|
151
151
|
## Integration Features
|
|
@@ -156,8 +156,8 @@ const imageFile = base64ToFile(imageResponse.data[0].b64_json, 'my-image.png');
|
|
|
156
156
|
```jsx
|
|
157
157
|
<ImgGen
|
|
158
158
|
prompt="Track this generation"
|
|
159
|
-
onComplete={() => console.log(
|
|
160
|
-
onError={(error) => console.error(
|
|
159
|
+
onComplete={() => console.log("Generation complete!")}
|
|
160
|
+
onError={(error) => console.error("Generation failed:", error)}
|
|
161
161
|
onDelete={(id) => console.log(`Document ${id} deleted`)}
|
|
162
162
|
onDocumentCreated={(id) => console.log(`New document created: ${id}`)}
|
|
163
163
|
/>
|
|
@@ -196,10 +196,10 @@ const imageFile = base64ToFile(imageResponse.data[0].b64_json, 'my-image.png');
|
|
|
196
196
|
<ImgGen
|
|
197
197
|
prompt="Styled component"
|
|
198
198
|
classes={{
|
|
199
|
-
root:
|
|
200
|
-
image:
|
|
201
|
-
overlay:
|
|
202
|
-
progress:
|
|
199
|
+
root: "my-custom-container",
|
|
200
|
+
image: "rounded-xl shadow-lg",
|
|
201
|
+
overlay: "bg-slate-800/70 text-white",
|
|
202
|
+
progress: "h-2 bg-green-500",
|
|
203
203
|
}}
|
|
204
204
|
/>
|
|
205
205
|
```
|
|
@@ -280,7 +280,7 @@ The ImgGen component uses inline styles with centralized theme constants, so **n
|
|
|
280
280
|
Add AI image generation to any React app with minimal code:
|
|
281
281
|
|
|
282
282
|
```jsx
|
|
283
|
-
import { ImgGen } from
|
|
283
|
+
import { ImgGen } from "use-vibes";
|
|
284
284
|
|
|
285
285
|
function MyComponent() {
|
|
286
286
|
return (
|
|
@@ -299,9 +299,9 @@ Configure image generation with the `options` prop:
|
|
|
299
299
|
<ImgGen
|
|
300
300
|
prompt="A detailed cityscape"
|
|
301
301
|
options={{
|
|
302
|
-
model:
|
|
303
|
-
quality:
|
|
304
|
-
size:
|
|
302
|
+
model: "gpt-image-1",
|
|
303
|
+
quality: "high",
|
|
304
|
+
size: "1024x1024",
|
|
305
305
|
debug: false,
|
|
306
306
|
}}
|
|
307
307
|
/>
|
|
@@ -369,7 +369,7 @@ The component supports one-click regeneration, preserving document history while
|
|
|
369
369
|
Set quality levels for output images:
|
|
370
370
|
|
|
371
371
|
```jsx
|
|
372
|
-
<ImgGen prompt="Detailed artwork" options={{ quality:
|
|
372
|
+
<ImgGen prompt="Detailed artwork" options={{ quality: "high" }} />
|
|
373
373
|
```
|
|
374
374
|
|
|
375
375
|
#### Image Editing with Uploads
|
|
@@ -407,8 +407,8 @@ Track the complete generation process with lifecycle events:
|
|
|
407
407
|
```jsx
|
|
408
408
|
<ImgGen
|
|
409
409
|
prompt="Track this generation"
|
|
410
|
-
onComplete={() => console.log(
|
|
411
|
-
onError={(error) => console.error(
|
|
410
|
+
onComplete={() => console.log("Generation complete!")}
|
|
411
|
+
onError={(error) => console.error("Generation failed:", error)}
|
|
412
412
|
onDelete={(id) => console.log(`Document ${id} deleted`)}
|
|
413
413
|
onDocumentCreated={(id) => console.log(`New document created: ${id}`)}
|
|
414
414
|
/>
|
|
@@ -437,10 +437,10 @@ The overlay includes:
|
|
|
437
437
|
Convert between base64 and File objects:
|
|
438
438
|
|
|
439
439
|
```jsx
|
|
440
|
-
import { base64ToFile } from
|
|
440
|
+
import { base64ToFile } from "use-vibes";
|
|
441
441
|
|
|
442
442
|
// Convert API response to a File object
|
|
443
|
-
const imageFile = base64ToFile(imageResponse.data[0].b64_json,
|
|
443
|
+
const imageFile = base64ToFile(imageResponse.data[0].b64_json, "my-image.png");
|
|
444
444
|
```
|
|
445
445
|
|
|
446
446
|
## Styling and Customization
|
|
@@ -457,11 +457,11 @@ For more granular control, provide a `classes` object with custom CSS classes fo
|
|
|
457
457
|
<ImgGen
|
|
458
458
|
prompt="Styled component"
|
|
459
459
|
classes={{
|
|
460
|
-
root:
|
|
461
|
-
image:
|
|
462
|
-
overlay:
|
|
463
|
-
progress:
|
|
464
|
-
button:
|
|
460
|
+
root: "my-custom-container",
|
|
461
|
+
image: "rounded-xl shadow-lg",
|
|
462
|
+
overlay: "bg-slate-800/70 text-white",
|
|
463
|
+
progress: "h-2 bg-green-500",
|
|
464
|
+
button: "hover:bg-blue-600",
|
|
465
465
|
}}
|
|
466
466
|
/>
|
|
467
467
|
```
|
package/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/cli.js
ADDED
package/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../jsr/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAClC,MAAM,EAAE,gBAAgB;IACxB,WAAW,CAAC,IAAY,EAAQ;QAC9B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAAA,CACzB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-output-deno.js","sourceRoot":"","sources":["../../jsr/commands/cli-output-deno.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,MAAM,CAAC,IAAY,EAAQ;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAAA,CAC1C;IACD,MAAM,CAAC,IAAY,EAAQ;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAAA,CAC1C;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-output.js","sourceRoot":"","sources":["../../jsr/commands/cli-output.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;CAC7C,CAAC"}
|
package/commands/help.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Result, loadAsset } from "@adviser/cement";
|
|
2
|
+
import { defaultCliOutput } from "./cli-output.js";
|
|
3
|
+
export async function runHelp(output = defaultCliOutput) {
|
|
4
|
+
const rHelpText = await loadAsset("./help.txt", { basePath: () => import.meta.url });
|
|
5
|
+
if (rHelpText.isErr()) {
|
|
6
|
+
return Result.Err(`Failed to load help text: ${rHelpText.Err()}`);
|
|
7
|
+
}
|
|
8
|
+
output.stdout(rHelpText.Ok());
|
|
9
|
+
return Result.Ok(undefined);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../jsr/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAM,GAAc,gBAAgB,EAAyB;IACzF,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrF,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,GAAG,CAAC,6BAA6B,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAAA,CAC7B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
use-vibes — build and deploy React + Fireproof apps
|
|
2
|
+
|
|
3
|
+
Agent workflow: skills → system → generate → live/publish
|
|
4
|
+
Human workflow: login → dev → edit → publish
|
|
5
|
+
|
|
6
|
+
Auth:
|
|
7
|
+
login Device-code auth, stores credentials locally
|
|
8
|
+
whoami Print the logged-in user (used as default owner)
|
|
9
|
+
|
|
10
|
+
Develop:
|
|
11
|
+
dev Live-push to dev group (sugar for: live dev)
|
|
12
|
+
live <group> Watch files, push every save to target group
|
|
13
|
+
generate <slug> "prompt" AI-create a new vibe (slug.jsx)
|
|
14
|
+
edit <slug|file> "prompt" AI-edit an existing vibe, stream diff
|
|
15
|
+
|
|
16
|
+
Prompts:
|
|
17
|
+
skills List available RAG skills with descriptions
|
|
18
|
+
system [--skills ...] Emit assembled system prompt to stdout
|
|
19
|
+
|
|
20
|
+
Deploy:
|
|
21
|
+
publish [group] One-time push to target group (default: 'default')
|
|
22
|
+
invite <group> [flags] Generate a join link (default: writer + inviteWriter)
|
|
23
|
+
--reader, --no-invite, --invite-reader, --invite-writer
|
|
24
|
+
|
|
25
|
+
Targets:
|
|
26
|
+
Bare name: work-lunch → {whoami}/{app}/work-lunch
|
|
27
|
+
Fully qualified: jchris/app/group → used as-is
|
|
28
|
+
|
|
29
|
+
Example — agent building an app from scratch:
|
|
30
|
+
|
|
31
|
+
$ use-vibes skills # read skill catalog
|
|
32
|
+
$ use-vibes system --skills fireproof,d3 # get system prompt
|
|
33
|
+
$ use-vibes generate dashboard "sales dashboard" # AI-create dashboard.jsx
|
|
34
|
+
$ use-vibes dev # push to dev, get URL
|
|
35
|
+
$ use-vibes publish demo # freeze for sharing
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-implemented.js","sourceRoot":"","sources":["../../jsr/commands/not-implemented.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAMzC,MAAM,UAAU,cAAc,CAAC,OAA8B,EAA+B;IAC1F,OAAO,KAAK,UAAU,iBAAiB,GAA0B;QAC/D,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC;IAAA,CACrE,CAAC;AAAA,CACH"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { getLlmCatalog } from "@vibes.diy/prompts";
|
|
3
|
+
import { defaultCliOutput } from "./cli-output.js";
|
|
4
|
+
export async function runSkills(output = defaultCliOutput) {
|
|
5
|
+
const rCatalog = await exception2Result(() => getLlmCatalog());
|
|
6
|
+
if (rCatalog.isErr()) {
|
|
7
|
+
return Result.Err(`Failed to load skills catalog: ${rCatalog.Err().message}`);
|
|
8
|
+
}
|
|
9
|
+
for (const skill of rCatalog.Ok()) {
|
|
10
|
+
output.stdout(`${skill.name.padEnd(12)}${skill.description}\n`);
|
|
11
|
+
}
|
|
12
|
+
return Result.Ok(undefined);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../jsr/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAM,GAAc,gBAAgB,EAAyB;IAC3F,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,GAAG,CAAC,kCAAkC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAAA,CAC7B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type CliOutput } from "./cli-output.js";
|
|
3
|
+
export interface RunSystemOptions {
|
|
4
|
+
readonly skillsCsv?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function runSystem(options: RunSystemOptions, output?: CliOutput): Promise<Result<void>>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { makeBaseSystemPrompt, getDefaultDependencies, getLlmCatalogNames } from "@vibes.diy/prompts";
|
|
3
|
+
import { defaultCliOutput } from "./cli-output.js";
|
|
4
|
+
function parseSkillsCsv(options) {
|
|
5
|
+
const skillsCsv = options.skillsCsv;
|
|
6
|
+
if (typeof skillsCsv === "undefined") {
|
|
7
|
+
return Result.Ok([]);
|
|
8
|
+
}
|
|
9
|
+
if (skillsCsv.trim().length === 0) {
|
|
10
|
+
return Result.Err("--skills requires a value (e.g., --skills fireproof,d3)");
|
|
11
|
+
}
|
|
12
|
+
const parsedSkills = skillsCsv
|
|
13
|
+
.split(",")
|
|
14
|
+
.map((skillName) => skillName.trim())
|
|
15
|
+
.filter((skillName) => skillName.length > 0);
|
|
16
|
+
switch (true) {
|
|
17
|
+
case parsedSkills.length === 0:
|
|
18
|
+
return Result.Err("--skills requires a value (e.g., --skills fireproof,d3)");
|
|
19
|
+
default:
|
|
20
|
+
return Result.Ok(parsedSkills);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function resolveSkills(parsedSkills) {
|
|
24
|
+
switch (true) {
|
|
25
|
+
case parsedSkills.length > 0:
|
|
26
|
+
return Result.Ok(parsedSkills);
|
|
27
|
+
default: {
|
|
28
|
+
const rDefaults = await exception2Result(() => getDefaultDependencies());
|
|
29
|
+
if (rDefaults.isErr()) {
|
|
30
|
+
return Result.Err(`Failed to load default skills: ${rDefaults.Err().message}`);
|
|
31
|
+
}
|
|
32
|
+
return Result.Ok(rDefaults.Ok());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function runSystem(options, output = defaultCliOutput) {
|
|
37
|
+
const rParsedSkills = parseSkillsCsv(options);
|
|
38
|
+
if (rParsedSkills.isErr()) {
|
|
39
|
+
return Result.Err(rParsedSkills.Err());
|
|
40
|
+
}
|
|
41
|
+
const rSelectedSkills = await resolveSkills(rParsedSkills.Ok());
|
|
42
|
+
if (rSelectedSkills.isErr()) {
|
|
43
|
+
return Result.Err(rSelectedSkills.Err());
|
|
44
|
+
}
|
|
45
|
+
const selectedSkills = rSelectedSkills.Ok();
|
|
46
|
+
const rValidNames = await exception2Result(() => getLlmCatalogNames());
|
|
47
|
+
if (rValidNames.isErr()) {
|
|
48
|
+
return Result.Err(`Failed to load skill catalog names: ${rValidNames.Err().message}`);
|
|
49
|
+
}
|
|
50
|
+
const validNames = rValidNames.Ok();
|
|
51
|
+
const invalid = selectedSkills.filter((skillName) => !validNames.has(skillName));
|
|
52
|
+
if (invalid.length > 0) {
|
|
53
|
+
return Result.Err(`Unknown skills: ${invalid.join(", ")}\nRun: use-vibes skills`);
|
|
54
|
+
}
|
|
55
|
+
const rPrompt = await exception2Result(() => makeBaseSystemPrompt("cli", {
|
|
56
|
+
dependenciesUserOverride: true,
|
|
57
|
+
dependencies: selectedSkills,
|
|
58
|
+
callAi: {
|
|
59
|
+
ModuleAndOptionsSelection(_msgs) {
|
|
60
|
+
return Promise.resolve(Result.Err("ModuleAndOptionsSelection is not used by CLI"));
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
}));
|
|
64
|
+
if (rPrompt.isErr()) {
|
|
65
|
+
return Result.Err(`Failed to build system prompt: ${rPrompt.Err().message}`);
|
|
66
|
+
}
|
|
67
|
+
output.stdout(rPrompt.Ok().systemPrompt);
|
|
68
|
+
return Result.Ok(undefined);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../jsr/commands/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../jsr/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,SAAS,GAA0B;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AAAA,CAC1D"}
|
package/deno.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"nodeModulesDir": "manual",
|
|
3
|
+
"imports": {
|
|
4
|
+
"@vibes.diy/prompts": "../../prompts/pkg/index.ts",
|
|
5
|
+
"@vibes.diy/call-ai-v2": "../../call-ai/v2/index.ts",
|
|
6
|
+
"@vibes.diy/use-vibes-types": "../types/index.ts",
|
|
7
|
+
"call-ai": "../../call-ai/pkg/index.ts"
|
|
8
|
+
},
|
|
9
|
+
"tasks": {
|
|
10
|
+
"run-cli": "deno run --unstable-sloppy-imports --allow-read --allow-env ./main.deno.ts",
|
|
11
|
+
"test-cli": "deno test --no-check --unstable-sloppy-imports --allow-read --allow-env --allow-run=deno ../tests/cli/cli.test.ts",
|
|
12
|
+
"check-cli": "deno lint ./main.deno.ts ./run-cli.ts ./commands/cli-output-deno.ts ../tests/cli/cli.test.ts"
|
|
13
|
+
}
|
|
14
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { useFireproof, fireproof, ImgFile, toCloud, type Fireproof, callAI, callAi, type CallAI, ImgGen, type ImgGenProps, useVibes, type UseVibesOptions, type UseVibesResult, type VibeDocument, generateInstallId, useMobile, } from
|
|
1
|
+
export { useFireproof, fireproof, ImgFile, toCloud, type Fireproof, callAI, callAi, type CallAI, ImgGen, type ImgGenProps, useVibes, type UseVibesOptions, type UseVibesResult, type VibeDocument, generateInstallId, useMobile, } from "@vibes.diy/use-vibes-base";
|
package/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { useFireproof, fireproof, ImgFile, toCloud, callAI, callAi, ImgGen, useVibes, generateInstallId, useMobile, } from
|
|
1
|
+
export { useFireproof, fireproof, ImgFile, toCloud, callAI, callAi, ImgGen, useVibes, generateInstallId, useMobile, } from "@vibes.diy/use-vibes-base";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/main.deno.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/main.deno.js
ADDED
package/main.deno.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.deno.js","sourceRoot":"","sources":["../jsr/main.deno.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;IACtB,MAAM,EAAE,aAAa;IACrB,WAAW,CAAC,IAAY,EAAQ;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IAAA,CACtB;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "use-vibes",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.16-dev-cli",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"bin": {
|
|
6
|
+
"use-vibes": "./cli.js"
|
|
7
|
+
},
|
|
5
8
|
"description": "Transform any DOM element into an AI-powered micro-app",
|
|
6
9
|
"keywords": [
|
|
7
10
|
"ai",
|
|
@@ -18,13 +21,26 @@
|
|
|
18
21
|
],
|
|
19
22
|
"license": "Apache-2.0",
|
|
20
23
|
"dependencies": {
|
|
21
|
-
"@
|
|
24
|
+
"@adviser/cement": "~0.5.32",
|
|
25
|
+
"@fireproof/core": "~0.24.12",
|
|
26
|
+
"@fireproof/core-keybag": "~0.24.12",
|
|
27
|
+
"@fireproof/core-runtime": "~0.24.12",
|
|
28
|
+
"@fireproof/core-types-base": "~0.24.12",
|
|
29
|
+
"@fireproof/core-types-protocols-cloud": "~0.24.12",
|
|
30
|
+
"@fireproof/use-fireproof": "~0.24.12",
|
|
31
|
+
"@vibes.diy/prompts": "^0.19.16-dev-cli",
|
|
32
|
+
"@vibes.diy/use-vibes-base": "^0.19.16-dev-cli",
|
|
33
|
+
"cmd-ts": "~0.15.0",
|
|
34
|
+
"tsx": "~4.21.0"
|
|
22
35
|
},
|
|
23
36
|
"peerDependencies": {
|
|
24
37
|
"react": ">=19.1.0"
|
|
25
38
|
},
|
|
26
39
|
"scripts": {
|
|
27
40
|
"build": "core-cli tsc",
|
|
28
|
-
"test": "vitest run"
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:cli": "deno task --config ./deno.json test-cli",
|
|
43
|
+
"check:cli": "deno task --config ./deno.json check-cli",
|
|
44
|
+
"run:cli:deno": "deno task --config ./deno.json run-cli"
|
|
29
45
|
}
|
|
30
46
|
}
|
package/run-cli.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CliOutput } from "./commands/cli-output.js";
|
|
2
|
+
export interface CliRuntime {
|
|
3
|
+
readonly output: CliOutput;
|
|
4
|
+
readonly setExitCode: (code: number) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function runCli(cliArgs: readonly string[], runtime: CliRuntime): Promise<void>;
|
package/run-cli.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { command, option, run, string, subcommands, restPositionals } from "cmd-ts";
|
|
2
|
+
import { runHelp } from "./commands/help.js";
|
|
3
|
+
import { runWhoami } from "./commands/whoami.js";
|
|
4
|
+
import { runSkills } from "./commands/skills.js";
|
|
5
|
+
import { runSystem } from "./commands/system.js";
|
|
6
|
+
import { notImplemented } from "./commands/not-implemented.js";
|
|
7
|
+
async function emitResult(runtime, runner) {
|
|
8
|
+
const result = await runner();
|
|
9
|
+
if (result.isErr()) {
|
|
10
|
+
const err = result.Err();
|
|
11
|
+
runtime.output.stderr(typeof err === "string" ? err : String(err));
|
|
12
|
+
runtime.output.stderr("\n");
|
|
13
|
+
runtime.setExitCode(1);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function createStubCommand(runtime, name) {
|
|
17
|
+
return command({
|
|
18
|
+
name,
|
|
19
|
+
description: `${name} is not implemented yet`,
|
|
20
|
+
args: {
|
|
21
|
+
_rest: restPositionals({ description: "arguments" }),
|
|
22
|
+
},
|
|
23
|
+
handler: async function handleStub() {
|
|
24
|
+
await emitResult(runtime, notImplemented({ name }));
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function createApp(runtime) {
|
|
29
|
+
const helpCmd = command({
|
|
30
|
+
name: "help",
|
|
31
|
+
description: "Print CLI help",
|
|
32
|
+
args: {},
|
|
33
|
+
handler: async function handleHelp() {
|
|
34
|
+
await emitResult(runtime, () => runHelp(runtime.output));
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const whoamiCmd = command({
|
|
38
|
+
name: "whoami",
|
|
39
|
+
description: "Print logged in user",
|
|
40
|
+
args: {},
|
|
41
|
+
handler: async function handleWhoami() {
|
|
42
|
+
await emitResult(runtime, runWhoami);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const skillsCmd = command({
|
|
46
|
+
name: "skills",
|
|
47
|
+
description: "List available skills",
|
|
48
|
+
args: {},
|
|
49
|
+
handler: async function handleSkills() {
|
|
50
|
+
await emitResult(runtime, () => runSkills(runtime.output));
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const systemCmd = command({
|
|
54
|
+
name: "system",
|
|
55
|
+
description: "Emit system prompt",
|
|
56
|
+
args: {
|
|
57
|
+
skills: option({
|
|
58
|
+
type: string,
|
|
59
|
+
long: "skills",
|
|
60
|
+
description: "Comma-separated skills, e.g. fireproof,d3",
|
|
61
|
+
defaultValue: () => "",
|
|
62
|
+
}),
|
|
63
|
+
},
|
|
64
|
+
handler: async function handleSystem(args) {
|
|
65
|
+
const skillsCsv = args.skills.length > 0 ? args.skills : undefined;
|
|
66
|
+
await emitResult(runtime, () => runSystem({ skillsCsv }, runtime.output));
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
return subcommands({
|
|
70
|
+
name: "use-vibes",
|
|
71
|
+
description: "Build and deploy React + Fireproof apps",
|
|
72
|
+
cmds: {
|
|
73
|
+
help: helpCmd,
|
|
74
|
+
whoami: whoamiCmd,
|
|
75
|
+
login: createStubCommand(runtime, "login"),
|
|
76
|
+
dev: createStubCommand(runtime, "dev"),
|
|
77
|
+
live: createStubCommand(runtime, "live"),
|
|
78
|
+
generate: createStubCommand(runtime, "generate"),
|
|
79
|
+
edit: createStubCommand(runtime, "edit"),
|
|
80
|
+
skills: skillsCmd,
|
|
81
|
+
system: systemCmd,
|
|
82
|
+
publish: createStubCommand(runtime, "publish"),
|
|
83
|
+
invite: createStubCommand(runtime, "invite"),
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export async function runCli(cliArgs, runtime) {
|
|
88
|
+
const app = createApp(runtime);
|
|
89
|
+
switch (true) {
|
|
90
|
+
case cliArgs.length === 0:
|
|
91
|
+
await emitResult(runtime, () => runHelp(runtime.output));
|
|
92
|
+
break;
|
|
93
|
+
case cliArgs.length === 1 && (cliArgs[0] === "-h" || cliArgs[0] === "--help"):
|
|
94
|
+
await emitResult(runtime, () => runHelp(runtime.output));
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
await run(app, [...cliArgs]);
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=run-cli.js.map
|
package/run-cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../jsr/run-cli.ts"],"names":[],"mappings":"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"}
|