@vibes.diy/api-svc 14.3.21 → 14.3.22
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/create-handler.d.ts +2 -0
- package/create-handler.js +1 -0
- package/create-handler.js.map +1 -1
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/intern/agent-assembly.d.ts +2 -0
- package/intern/agent-assembly.js +2 -2
- package/intern/agent-assembly.js.map +1 -1
- package/intern/agent-build-tools.d.ts +7 -0
- package/intern/agent-build-tools.js +14 -3
- package/intern/agent-build-tools.js.map +1 -1
- package/intern/agent-dispatcher.js +66 -25
- package/intern/agent-dispatcher.js.map +1 -1
- package/intern/agent-request-frame.d.ts +9 -0
- package/intern/agent-request-frame.js +14 -0
- package/intern/agent-request-frame.js.map +1 -1
- package/intern/agent-router.js +1 -1
- package/intern/agent-router.js.map +1 -1
- package/intern/agent-session.d.ts +1 -1
- package/intern/agent-session.js +1 -1
- package/intern/agent-session.js.map +1 -1
- package/intern/attach-draft-handle.js +51 -8
- package/intern/attach-draft-handle.js.map +1 -1
- package/intern/draft-lane-autofix.d.ts +8 -0
- package/intern/draft-lane-autofix.js +8 -0
- package/intern/draft-lane-autofix.js.map +1 -0
- package/intern/draft-lane-classify.d.ts +55 -0
- package/intern/draft-lane-classify.js +168 -0
- package/intern/draft-lane-classify.js.map +1 -0
- package/intern/draft-lane-config.d.ts +16 -0
- package/intern/draft-lane-config.js +25 -0
- package/intern/draft-lane-config.js.map +1 -0
- package/intern/draft-lane-exports.d.ts +7 -0
- package/intern/draft-lane-exports.js +102 -0
- package/intern/draft-lane-exports.js.map +1 -0
- package/intern/draft-lane-imports.d.ts +6 -0
- package/intern/draft-lane-imports.js +180 -0
- package/intern/draft-lane-imports.js.map +1 -0
- package/intern/draft-lane-opens.d.ts +6 -0
- package/intern/draft-lane-opens.js +173 -0
- package/intern/draft-lane-opens.js.map +1 -0
- package/intern/draft-lane-parse.d.ts +16 -0
- package/intern/draft-lane-parse.js +104 -0
- package/intern/draft-lane-parse.js.map +1 -0
- package/intern/draft-lane-persist.d.ts +26 -0
- package/intern/draft-lane-persist.js +92 -0
- package/intern/draft-lane-persist.js.map +1 -0
- package/intern/draft-lane-prompt.d.ts +16 -0
- package/intern/draft-lane-prompt.js +59 -0
- package/intern/draft-lane-prompt.js.map +1 -0
- package/intern/draft-lane-store.d.ts +36 -0
- package/intern/draft-lane-store.js +5 -0
- package/intern/draft-lane-store.js.map +1 -0
- package/intern/draft-lane-transport.d.ts +3 -0
- package/intern/draft-lane-transport.js +58 -0
- package/intern/draft-lane-transport.js.map +1 -0
- package/intern/draft-lane-worker.d.ts +37 -0
- package/intern/draft-lane-worker.js +156 -0
- package/intern/draft-lane-worker.js.map +1 -0
- package/intern/draft-lane.d.ts +60 -0
- package/intern/draft-lane.js +148 -0
- package/intern/draft-lane.js.map +1 -0
- package/intern/eval-handles.d.ts +2 -1
- package/intern/eval-handles.js +2 -1
- package/intern/eval-handles.js.map +1 -1
- package/intern/first-build-request.js +5 -1
- package/intern/first-build-request.js.map +1 -1
- package/intern/import-synth.d.ts +25 -0
- package/intern/import-synth.js +456 -0
- package/intern/import-synth.js.map +1 -0
- package/intern/inline-build-pass.d.ts +23 -0
- package/intern/inline-build-pass.js +27 -0
- package/intern/inline-build-pass.js.map +1 -0
- package/intern/look-lint-engine.d.ts +9 -0
- package/intern/look-lint-engine.js +22 -0
- package/intern/look-lint-engine.js.map +1 -1
- package/intern/look-lint.d.ts +1 -0
- package/intern/look-lint.js +4 -1
- package/intern/look-lint.js.map +1 -1
- package/intern/mint-job-store.d.ts +50 -2
- package/intern/mint-job-store.js +149 -4
- package/intern/mint-job-store.js.map +1 -1
- package/intern/opens-check.d.ts +14 -0
- package/intern/opens-check.js +1044 -0
- package/intern/opens-check.js.map +1 -0
- package/intern/prompt-assembly.d.ts +19 -0
- package/intern/prompt-assembly.js +5 -2
- package/intern/prompt-assembly.js.map +1 -1
- package/intern/save-build-pass.d.ts +15 -0
- package/intern/save-build-pass.js +53 -0
- package/intern/save-build-pass.js.map +1 -0
- package/package.json +13 -12
- package/public/agent-turn-assembly.js +16 -0
- package/public/agent-turn-assembly.js.map +1 -1
- package/public/handle-prompt-context.d.ts +3 -1
- package/public/handle-prompt-context.js +39 -4
- package/public/handle-prompt-context.js.map +1 -1
- package/public/home-feed-common.js +2 -2
- package/public/home-feed-common.js.map +1 -1
- package/public/open-chat.d.ts +2 -0
- package/public/open-chat.js +80 -11
- package/public/open-chat.js.map +1 -1
- package/public/related-vibes.js +9 -3
- package/public/related-vibes.js.map +1 -1
- package/public/shared-mint.d.ts +5 -0
- package/public/shared-mint.js +15 -0
- package/public/shared-mint.js.map +1 -1
- package/types.d.ts +2 -0
- package/types.js.map +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export const LOOK_BASE_EXPORTS = [
|
|
2
|
+
"Button",
|
|
3
|
+
"Card",
|
|
4
|
+
"CardHeader",
|
|
5
|
+
"CardTitle",
|
|
6
|
+
"CardDescription",
|
|
7
|
+
"CardContent",
|
|
8
|
+
"CardFooter",
|
|
9
|
+
"Input",
|
|
10
|
+
"Textarea",
|
|
11
|
+
"Label",
|
|
12
|
+
"Badge",
|
|
13
|
+
"Tabs",
|
|
14
|
+
"TabsList",
|
|
15
|
+
"TabsTrigger",
|
|
16
|
+
"TabsContent",
|
|
17
|
+
"Separator",
|
|
18
|
+
"Skeleton",
|
|
19
|
+
"Table",
|
|
20
|
+
"TableHeader",
|
|
21
|
+
"TableBody",
|
|
22
|
+
"TableRow",
|
|
23
|
+
"TableHead",
|
|
24
|
+
"TableCell",
|
|
25
|
+
"Avatar",
|
|
26
|
+
"AvatarFallback",
|
|
27
|
+
"Progress",
|
|
28
|
+
"cn",
|
|
29
|
+
];
|
|
30
|
+
export const LOOK_OVERLAY_EXPORTS = [
|
|
31
|
+
"Dialog",
|
|
32
|
+
"DialogTrigger",
|
|
33
|
+
"DialogContent",
|
|
34
|
+
"DialogHeader",
|
|
35
|
+
"DialogTitle",
|
|
36
|
+
"DialogDescription",
|
|
37
|
+
"DialogFooter",
|
|
38
|
+
"Sheet",
|
|
39
|
+
"SheetTrigger",
|
|
40
|
+
"SheetContent",
|
|
41
|
+
"SheetHeader",
|
|
42
|
+
"SheetTitle",
|
|
43
|
+
"SheetDescription",
|
|
44
|
+
"SheetFooter",
|
|
45
|
+
"Popover",
|
|
46
|
+
"PopoverTrigger",
|
|
47
|
+
"PopoverContent",
|
|
48
|
+
"Select",
|
|
49
|
+
"SelectTrigger",
|
|
50
|
+
"SelectContent",
|
|
51
|
+
"SelectItem",
|
|
52
|
+
"SelectValue",
|
|
53
|
+
"DropdownMenu",
|
|
54
|
+
"DropdownMenuTrigger",
|
|
55
|
+
"DropdownMenuContent",
|
|
56
|
+
"DropdownMenuItem",
|
|
57
|
+
"Tooltip",
|
|
58
|
+
"TooltipTrigger",
|
|
59
|
+
"TooltipContent",
|
|
60
|
+
"TooltipProvider",
|
|
61
|
+
];
|
|
62
|
+
export const LOOK_MODULE = "@vibes.diy/look";
|
|
63
|
+
export const LOOK_OVERLAY_MODULE = "@vibes.diy/look/overlay";
|
|
64
|
+
export const MODULE_EXPORTS = {
|
|
65
|
+
[LOOK_MODULE]: [...LOOK_BASE_EXPORTS, ...LOOK_OVERLAY_EXPORTS],
|
|
66
|
+
[LOOK_OVERLAY_MODULE]: LOOK_OVERLAY_EXPORTS,
|
|
67
|
+
"use-fireproof": ["useFireproof", "fireproof", "ImgFile"],
|
|
68
|
+
"use-vibes": [
|
|
69
|
+
"useVibe",
|
|
70
|
+
"useViewer",
|
|
71
|
+
"ViewerTag",
|
|
72
|
+
"HandleInput",
|
|
73
|
+
"ImgGen",
|
|
74
|
+
"useImgGen",
|
|
75
|
+
"imgGen",
|
|
76
|
+
"useSocial",
|
|
77
|
+
"useFireproof",
|
|
78
|
+
"fireproof",
|
|
79
|
+
"ImgFile",
|
|
80
|
+
"callAI",
|
|
81
|
+
"callAi",
|
|
82
|
+
],
|
|
83
|
+
"call-ai": ["callAI", "callAi"],
|
|
84
|
+
};
|
|
85
|
+
export const RUNTIME_MODULES = ["use-fireproof", "use-vibes", "call-ai"];
|
|
86
|
+
export const REACT_HOOKS = [
|
|
87
|
+
"useState",
|
|
88
|
+
"useEffect",
|
|
89
|
+
"useRef",
|
|
90
|
+
"useMemo",
|
|
91
|
+
"useCallback",
|
|
92
|
+
"useReducer",
|
|
93
|
+
"useContext",
|
|
94
|
+
"useLayoutEffect",
|
|
95
|
+
"useId",
|
|
96
|
+
"useTransition",
|
|
97
|
+
"createContext",
|
|
98
|
+
"forwardRef",
|
|
99
|
+
"memo",
|
|
100
|
+
"Fragment",
|
|
101
|
+
];
|
|
102
|
+
//# sourceMappingURL=draft-lane-exports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-lane-exports.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-exports.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,QAAQ;IACR,MAAM;IACN,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,OAAO;IACP,UAAU;IACV,OAAO;IACP,OAAO;IACP,MAAM;IACN,UAAU;IACV,aAAa;IACb,aAAa;IACb,WAAW;IACX,UAAU;IACV,OAAO;IACP,aAAa;IACb,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,UAAU;IACV,IAAI;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,QAAQ;IACR,eAAe;IACf,eAAe;IACf,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,cAAc;IACd,OAAO;IACP,cAAc;IACd,cAAc;IACd,aAAa;IACb,YAAY;IACZ,kBAAkB;IAClB,aAAa;IACb,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,QAAQ;IACR,eAAe;IACf,eAAe;IACf,YAAY;IACZ,aAAa;IACb,cAAc;IACd,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;IAClB,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAG7D,MAAM,CAAC,MAAM,cAAc,GAAgD;IACzE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,GAAG,oBAAoB,CAAC;IAC9D,CAAC,mBAAmB,CAAC,EAAE,oBAAoB;IAC3C,eAAe,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC;IACzD,WAAW,EAAE;QACX,SAAS;QACT,WAAW;QACX,WAAW;QACX,aAAa;QACb,QAAQ;QACR,WAAW;QACX,QAAQ;QACR,WAAW;QACX,cAAc;QACd,WAAW;QACX,SAAS;QACT,QAAQ;QACR,QAAQ;KACT;IACD,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,OAAO;IACP,eAAe;IACf,eAAe;IACf,YAAY;IACZ,MAAM;IACN,UAAU;CACX,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface SynthesizedImports {
|
|
2
|
+
readonly vfs: ReadonlyMap<string, string>;
|
|
3
|
+
readonly notes: readonly string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function resolveRelative(fromPath: string, spec: string): string;
|
|
6
|
+
export declare function synthesizeImports(vfs: ReadonlyMap<string, string>): SynthesizedImports;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { LOOK_BASE_EXPORTS, LOOK_MODULE, LOOK_OVERLAY_EXPORTS, LOOK_OVERLAY_MODULE, MODULE_EXPORTS, REACT_HOOKS, RUNTIME_MODULES, } from "./draft-lane-exports.js";
|
|
2
|
+
const RUNTIME_ADDS = [
|
|
3
|
+
["useVibe", "use-vibes"],
|
|
4
|
+
["useViewer", "use-vibes"],
|
|
5
|
+
["useImgGen", "use-vibes"],
|
|
6
|
+
["callAI", "call-ai"],
|
|
7
|
+
["useFireproof", "use-fireproof"],
|
|
8
|
+
["fireproof", "use-fireproof"],
|
|
9
|
+
];
|
|
10
|
+
const JSX_RUNTIME_COMPONENTS = ["ImgGen", "ViewerTag", "HandleInput"];
|
|
11
|
+
export function resolveRelative(fromPath, spec) {
|
|
12
|
+
const dir = fromPath.slice(0, fromPath.lastIndexOf("/") + 1);
|
|
13
|
+
const parts = [];
|
|
14
|
+
for (const segment of (dir + spec).split("/")) {
|
|
15
|
+
if (segment === "" || segment === ".")
|
|
16
|
+
continue;
|
|
17
|
+
if (segment === "..")
|
|
18
|
+
parts.pop();
|
|
19
|
+
else
|
|
20
|
+
parts.push(segment);
|
|
21
|
+
}
|
|
22
|
+
return `/${parts.join("/")}`;
|
|
23
|
+
}
|
|
24
|
+
function localName(specifier) {
|
|
25
|
+
const pieces = specifier.split(/\s+as\s+/);
|
|
26
|
+
return pieces[pieces.length - 1].trim();
|
|
27
|
+
}
|
|
28
|
+
function importedName(specifier) {
|
|
29
|
+
return specifier.split(/\s+as\s+/)[0].trim();
|
|
30
|
+
}
|
|
31
|
+
function addTo(map, mod, name) {
|
|
32
|
+
const set = map.get(mod) ?? new Set();
|
|
33
|
+
set.add(name);
|
|
34
|
+
map.set(mod, set);
|
|
35
|
+
}
|
|
36
|
+
function escapeRegExp(text) {
|
|
37
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
38
|
+
}
|
|
39
|
+
function synthesizeFile(args) {
|
|
40
|
+
const { path, vfs, notes } = args;
|
|
41
|
+
let src = args.source;
|
|
42
|
+
src = src.replace(/from\s+["'](\.{1,2}\/[^"']+)["']/g, (match, spec) => {
|
|
43
|
+
if (/\.[a-z]+$/i.test(spec))
|
|
44
|
+
return match;
|
|
45
|
+
const base = resolveRelative(path, spec);
|
|
46
|
+
const ext = [".jsx", ".js", ".tsx", ".ts"].find((candidate) => vfs.has(base + candidate));
|
|
47
|
+
if (ext === undefined)
|
|
48
|
+
return match;
|
|
49
|
+
notes.push(`ext ${spec}${ext}`);
|
|
50
|
+
return match.replace(spec, spec + ext);
|
|
51
|
+
});
|
|
52
|
+
const importRe = /^import\s*\{([^}]*)\}\s*from\s*["']([^"']+)["'];?\s*$/gm;
|
|
53
|
+
const wanted = new Map([
|
|
54
|
+
[LOOK_MODULE, new Set()],
|
|
55
|
+
[LOOK_OVERLAY_MODULE, new Set()],
|
|
56
|
+
]);
|
|
57
|
+
const runtime = new Map();
|
|
58
|
+
src = src.replace(importRe, (match, names, mod) => {
|
|
59
|
+
const list = names
|
|
60
|
+
.split(",")
|
|
61
|
+
.map((name) => name.trim())
|
|
62
|
+
.filter((name) => name.length > 0);
|
|
63
|
+
if (mod === LOOK_MODULE || mod === LOOK_OVERLAY_MODULE) {
|
|
64
|
+
for (const specifier of list) {
|
|
65
|
+
const bare = importedName(specifier);
|
|
66
|
+
if (LOOK_BASE_EXPORTS.includes(bare))
|
|
67
|
+
addTo(wanted, LOOK_MODULE, specifier);
|
|
68
|
+
else if (LOOK_OVERLAY_EXPORTS.includes(bare))
|
|
69
|
+
addTo(wanted, LOOK_OVERLAY_MODULE, specifier);
|
|
70
|
+
else
|
|
71
|
+
notes.push(`drop ${bare} from ${mod}`);
|
|
72
|
+
}
|
|
73
|
+
return "/*__LOOK_IMPORT__*/";
|
|
74
|
+
}
|
|
75
|
+
if (RUNTIME_MODULES.includes(mod)) {
|
|
76
|
+
const exports = MODULE_EXPORTS[mod] ?? [];
|
|
77
|
+
for (const specifier of list) {
|
|
78
|
+
const bare = importedName(specifier);
|
|
79
|
+
if (exports.includes(bare)) {
|
|
80
|
+
addTo(runtime, mod, specifier);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const home = RUNTIME_MODULES.find((candidate) => (MODULE_EXPORTS[candidate] ?? []).includes(bare));
|
|
84
|
+
if (home !== undefined) {
|
|
85
|
+
addTo(runtime, home, specifier);
|
|
86
|
+
notes.push(`move ${bare} to ${home}`);
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
notes.push(`drop ${bare} from ${mod}`);
|
|
90
|
+
}
|
|
91
|
+
if (runtime.has(mod) === false)
|
|
92
|
+
runtime.set(mod, new Set());
|
|
93
|
+
return "/*__RT_IMPORT__*/";
|
|
94
|
+
}
|
|
95
|
+
return match;
|
|
96
|
+
});
|
|
97
|
+
const reactRe = /^import\s+(?:(React)\s*,?\s*)?(?:\{([^}]*)\})?\s*from\s*["']react["'];?\s*$/m;
|
|
98
|
+
const reactMatch = reactRe.exec(src);
|
|
99
|
+
const reactNamed = new Set(reactMatch !== null && reactMatch[2] !== undefined
|
|
100
|
+
? reactMatch[2]
|
|
101
|
+
.split(",")
|
|
102
|
+
.map((name) => name.trim())
|
|
103
|
+
.filter((name) => name.length > 0)
|
|
104
|
+
: []);
|
|
105
|
+
const needReactDefault = /\bReact\./.test(src) || /<[A-Za-z]/.test(src);
|
|
106
|
+
for (const hook of REACT_HOOKS) {
|
|
107
|
+
const used = new RegExp(`(?<![.\\w])${hook}\\(`).test(src);
|
|
108
|
+
const declaredLocally = new RegExp(`(?:function|const|let)\\s+${hook}\\b`).test(src);
|
|
109
|
+
if (used && reactNamed.has(hook) === false && declaredLocally === false) {
|
|
110
|
+
reactNamed.add(hook);
|
|
111
|
+
notes.push(`add ${hook} from react`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (reactMatch !== null)
|
|
115
|
+
src = src.replace(reactRe, "/*__REACT_IMPORT__*/");
|
|
116
|
+
else if (reactNamed.size > 0 || needReactDefault)
|
|
117
|
+
notes.push("add react import");
|
|
118
|
+
const reactLine = `import React${reactNamed.size > 0 ? `, { ${[...reactNamed].join(", ")} }` : ""} from "react";`;
|
|
119
|
+
const used = new Set([...src.matchAll(/<([A-Z][A-Za-z]*)\b/g)].map((m) => m[1]));
|
|
120
|
+
const imported = new Set([...wanted.values()].flatMap((set) => [...set]).map(localName));
|
|
121
|
+
const declared = new Set([...src.matchAll(/(?:function|const|let|var|class)\s+([A-Za-z_][A-Za-z0-9_]*)/g)].map((m) => m[1]));
|
|
122
|
+
for (const name of used) {
|
|
123
|
+
if (imported.has(name) || declared.has(name))
|
|
124
|
+
continue;
|
|
125
|
+
if (LOOK_BASE_EXPORTS.includes(name)) {
|
|
126
|
+
addTo(wanted, LOOK_MODULE, name);
|
|
127
|
+
notes.push(`add ${name}`);
|
|
128
|
+
}
|
|
129
|
+
else if (LOOK_OVERLAY_EXPORTS.includes(name)) {
|
|
130
|
+
addTo(wanted, LOOK_OVERLAY_MODULE, name);
|
|
131
|
+
notes.push(`add ${name}`);
|
|
132
|
+
}
|
|
133
|
+
else if (JSX_RUNTIME_COMPONENTS.includes(name) &&
|
|
134
|
+
[...runtime.values()].some((set) => [...set].map(localName).includes(name)) === false) {
|
|
135
|
+
addTo(runtime, "use-vibes", name);
|
|
136
|
+
notes.push(`add ${name}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (const [hook, home] of RUNTIME_ADDS) {
|
|
140
|
+
const called = new RegExp(`\\b${escapeRegExp(hook)}\\(`).test(src);
|
|
141
|
+
const inRuntime = [...runtime.values()].some((set) => [...set].map(localName).includes(hook));
|
|
142
|
+
const importedElsewhere = new RegExp(`import[^;]*\\b${escapeRegExp(hook)}\\b[^;]*from`).test(src);
|
|
143
|
+
if (called && declared.has(hook) === false && inRuntime === false && importedElsewhere === false) {
|
|
144
|
+
addTo(runtime, home, hook);
|
|
145
|
+
notes.push(`add ${hook}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const lines = [];
|
|
149
|
+
for (const [mod, set] of wanted)
|
|
150
|
+
if (set.size > 0)
|
|
151
|
+
lines.push(`import { ${[...set].join(", ")} } from "${mod}";`);
|
|
152
|
+
for (const [mod, set] of runtime)
|
|
153
|
+
if (set.size > 0)
|
|
154
|
+
lines.push(`import { ${[...set].join(", ")} } from "${mod}";`);
|
|
155
|
+
if (reactNamed.size > 0 || needReactDefault || reactMatch !== null)
|
|
156
|
+
lines.unshift(reactLine);
|
|
157
|
+
let placed = false;
|
|
158
|
+
src = src.replace(/\/\*__(LOOK|RT|REACT)_IMPORT__\*\/\n?/g, () => {
|
|
159
|
+
if (placed)
|
|
160
|
+
return "";
|
|
161
|
+
placed = true;
|
|
162
|
+
return lines.join("\n") + "\n";
|
|
163
|
+
});
|
|
164
|
+
if (placed === false && lines.length > 0)
|
|
165
|
+
src = lines.join("\n") + "\n" + src;
|
|
166
|
+
return src;
|
|
167
|
+
}
|
|
168
|
+
export function synthesizeImports(vfs) {
|
|
169
|
+
const notes = [];
|
|
170
|
+
const out = new Map();
|
|
171
|
+
for (const [path, source] of vfs) {
|
|
172
|
+
if (/\.(jsx?|tsx?)$/.test(path) === false) {
|
|
173
|
+
out.set(path, source);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
out.set(path, synthesizeFile({ path, source, vfs, notes }));
|
|
177
|
+
}
|
|
178
|
+
return { vfs: out, notes };
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=draft-lane-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-lane-imports.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { exception2Result } from "@adviser/cement";
|
|
2
|
+
import { Parser } from "acorn";
|
|
3
|
+
import acornJsx from "acorn-jsx";
|
|
4
|
+
import { lockedGroupsVersions } from "./grouped-vibe-import-map.js";
|
|
5
|
+
import { MODULE_EXPORTS } from "./draft-lane-exports.js";
|
|
6
|
+
const JsxParser = Parser.extend(acornJsx());
|
|
7
|
+
function importMapSpecifiers() {
|
|
8
|
+
const keys = Object.values(lockedGroupsVersions).flatMap((group) => Object.keys(group));
|
|
9
|
+
return { exact: new Set(keys.filter((key) => key.endsWith("/") === false)), prefixes: keys.filter((key) => key.endsWith("/")) };
|
|
10
|
+
}
|
|
11
|
+
export function isServedBareSpecifier(spec) {
|
|
12
|
+
const { exact, prefixes } = importMapSpecifiers();
|
|
13
|
+
return exact.has(spec) || prefixes.some((prefix) => spec.startsWith(prefix));
|
|
14
|
+
}
|
|
15
|
+
function isNode(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && typeof value.type === "string";
|
|
17
|
+
}
|
|
18
|
+
function walk(root, visit) {
|
|
19
|
+
if (Array.isArray(root)) {
|
|
20
|
+
for (const item of root)
|
|
21
|
+
walk(item, visit);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (isNode(root) === false)
|
|
25
|
+
return;
|
|
26
|
+
visit(root);
|
|
27
|
+
for (const [key, value] of Object.entries(root)) {
|
|
28
|
+
if (key === "type" || key === "start" || key === "end" || key === "loc" || key === "range")
|
|
29
|
+
continue;
|
|
30
|
+
if (typeof value === "object" && value !== null)
|
|
31
|
+
walk(value, visit);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function identifierName(node) {
|
|
35
|
+
return isNode(node) && node.type === "Identifier" && typeof node.name === "string" ? node.name : undefined;
|
|
36
|
+
}
|
|
37
|
+
function declaredNames(program) {
|
|
38
|
+
const names = new Set();
|
|
39
|
+
function bindPattern(pattern) {
|
|
40
|
+
walk(pattern, (node) => {
|
|
41
|
+
const name = identifierName(node);
|
|
42
|
+
if (name !== undefined)
|
|
43
|
+
names.add(name);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
walk(program, (node) => {
|
|
47
|
+
switch (true) {
|
|
48
|
+
case node.type === "FunctionDeclaration" || node.type === "ClassDeclaration" || node.type === "FunctionExpression": {
|
|
49
|
+
const name = identifierName(node.id);
|
|
50
|
+
if (name !== undefined)
|
|
51
|
+
names.add(name);
|
|
52
|
+
if (Array.isArray(node.params))
|
|
53
|
+
bindPattern(node.params);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case node.type === "ArrowFunctionExpression":
|
|
57
|
+
if (Array.isArray(node.params))
|
|
58
|
+
bindPattern(node.params);
|
|
59
|
+
break;
|
|
60
|
+
case node.type === "VariableDeclarator":
|
|
61
|
+
bindPattern(node.id);
|
|
62
|
+
break;
|
|
63
|
+
case node.type === "ImportSpecifier" || node.type === "ImportDefaultSpecifier" || node.type === "ImportNamespaceSpecifier": {
|
|
64
|
+
const name = identifierName(node.local);
|
|
65
|
+
if (name !== undefined)
|
|
66
|
+
names.add(name);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case node.type === "CatchClause":
|
|
70
|
+
bindPattern(node.param);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return names;
|
|
75
|
+
}
|
|
76
|
+
function jsxElementName(node) {
|
|
77
|
+
const name = node.name;
|
|
78
|
+
return isNode(name) && name.type === "JSXIdentifier" && typeof name.name === "string" ? name.name : undefined;
|
|
79
|
+
}
|
|
80
|
+
function isHookCall(node) {
|
|
81
|
+
if (isNode(node) === false || node.type !== "CallExpression")
|
|
82
|
+
return false;
|
|
83
|
+
const callee = identifierName(node.callee);
|
|
84
|
+
return callee !== undefined && /^use[A-Z]/.test(callee);
|
|
85
|
+
}
|
|
86
|
+
function checkFile(args) {
|
|
87
|
+
const { path, source, vfs } = args;
|
|
88
|
+
const file = path.replace(/^\/+/, "");
|
|
89
|
+
const parsed = exception2Result(() => JsxParser.parse(source, { ecmaVersion: "latest", sourceType: "module", allowHashBang: true }));
|
|
90
|
+
if (parsed.isErr())
|
|
91
|
+
return [`${file}: ${parsed.Err().message}`];
|
|
92
|
+
const program = parsed.Ok();
|
|
93
|
+
if (isNode(program) === false || Array.isArray(program.body) === false)
|
|
94
|
+
return [`${file}: unreadable module`];
|
|
95
|
+
const findings = [];
|
|
96
|
+
for (const statement of program.body) {
|
|
97
|
+
if (isNode(statement) === false)
|
|
98
|
+
continue;
|
|
99
|
+
if (statement.type === "ImportDeclaration") {
|
|
100
|
+
const sourceNode = statement.source;
|
|
101
|
+
const spec = isNode(sourceNode) && typeof sourceNode.value === "string" ? sourceNode.value : "";
|
|
102
|
+
if (spec.startsWith("./") || spec.startsWith("../") || spec.startsWith("/")) {
|
|
103
|
+
const target = spec.startsWith("/") ? spec : resolveFrom(path, spec);
|
|
104
|
+
if (vfs.has(target) === false)
|
|
105
|
+
findings.push(`${file}: imports "${spec}", and the draft has no file at ${target}`);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (isServedBareSpecifier(spec) === false) {
|
|
109
|
+
findings.push(`${file}: imports "${spec}", which is not one of the app's packages`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const exports = MODULE_EXPORTS[spec];
|
|
113
|
+
if (exports === undefined || Array.isArray(statement.specifiers) === false)
|
|
114
|
+
continue;
|
|
115
|
+
for (const specifier of statement.specifiers) {
|
|
116
|
+
if (isNode(specifier) === false || specifier.type !== "ImportSpecifier")
|
|
117
|
+
continue;
|
|
118
|
+
const imported = identifierName(specifier.imported);
|
|
119
|
+
if (imported !== undefined && exports.includes(imported) === false) {
|
|
120
|
+
findings.push(`${file}: "${imported}" is not exported by ${spec}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const hookAtTop = (statement.type === "ExpressionStatement" && isHookCall(statement.expression)) ||
|
|
126
|
+
(statement.type === "VariableDeclaration" &&
|
|
127
|
+
Array.isArray(statement.declarations) &&
|
|
128
|
+
statement.declarations.some((declarator) => isNode(declarator) && isHookCall(declarator.init)));
|
|
129
|
+
if (hookAtTop)
|
|
130
|
+
findings.push(`${file}: a hook is called at module scope; call it inside the component`);
|
|
131
|
+
}
|
|
132
|
+
const declared = declaredNames(program);
|
|
133
|
+
const missing = new Set();
|
|
134
|
+
walk(program, (node) => {
|
|
135
|
+
if (node.type !== "JSXOpeningElement")
|
|
136
|
+
return;
|
|
137
|
+
const name = jsxElementName(node);
|
|
138
|
+
if (name !== undefined && /^[A-Z]/.test(name) && declared.has(name) === false)
|
|
139
|
+
missing.add(name);
|
|
140
|
+
});
|
|
141
|
+
for (const name of missing)
|
|
142
|
+
findings.push(`${file}: <${name}> is used but never imported or defined`);
|
|
143
|
+
return findings;
|
|
144
|
+
}
|
|
145
|
+
function resolveFrom(fromPath, spec) {
|
|
146
|
+
const dir = fromPath.slice(0, fromPath.lastIndexOf("/") + 1);
|
|
147
|
+
const parts = [];
|
|
148
|
+
for (const segment of (dir + spec).split("/")) {
|
|
149
|
+
if (segment === "" || segment === ".")
|
|
150
|
+
continue;
|
|
151
|
+
if (segment === "..")
|
|
152
|
+
parts.pop();
|
|
153
|
+
else
|
|
154
|
+
parts.push(segment);
|
|
155
|
+
}
|
|
156
|
+
return `/${parts.join("/")}`;
|
|
157
|
+
}
|
|
158
|
+
export function opensCheck(vfs) {
|
|
159
|
+
const findings = [];
|
|
160
|
+
if (vfs.has("/App.jsx") === false)
|
|
161
|
+
findings.push("App.jsx: the draft has no App.jsx");
|
|
162
|
+
for (const [path, source] of vfs) {
|
|
163
|
+
if (/\.(jsx?|mjs)$/.test(path))
|
|
164
|
+
findings.push(...checkFile({ path, source, vfs }));
|
|
165
|
+
if (path.endsWith(".json")) {
|
|
166
|
+
const json = exception2Result(() => JSON.parse(source));
|
|
167
|
+
if (json.isErr())
|
|
168
|
+
findings.push(`${path.replace(/^\/+/, "")}: ${json.Err().message}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return { opens: findings.length === 0, findings };
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=draft-lane-opens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-lane-opens.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-opens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { type BlockEndMsg, type BlockStreamMsg, type SseUsage } from "@vibes.diy/call-ai-v2";
|
|
3
|
+
export interface ParsedDraft {
|
|
4
|
+
readonly vfs: ReadonlyMap<string, string>;
|
|
5
|
+
readonly intro: string;
|
|
6
|
+
readonly draftNote: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function draftTextToBlocks(args: {
|
|
9
|
+
readonly text: string;
|
|
10
|
+
readonly streamId: string;
|
|
11
|
+
readonly createId: () => string;
|
|
12
|
+
readonly usage?: readonly SseUsage[];
|
|
13
|
+
}): Promise<Result<BlockStreamMsg[]>>;
|
|
14
|
+
export declare function blockEndOf(msgs: readonly BlockStreamMsg[]): BlockEndMsg | undefined;
|
|
15
|
+
export declare function parseDraftText(text: string): Promise<Result<ParsedDraft>>;
|
|
16
|
+
export declare function renderDraftText(draft: ParsedDraft): string;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { createBlockStream, isBlockEnd, isCodeEnd, isToplevelLine, } from "@vibes.diy/call-ai-v2";
|
|
3
|
+
import { createBlockAccumulator, resolveCodeBlocks } from "./prompt-streaming.js";
|
|
4
|
+
function toLines(text) {
|
|
5
|
+
const lines = text.split("\n");
|
|
6
|
+
if (lines.length > 0 && lines[lines.length - 1] === "")
|
|
7
|
+
lines.pop();
|
|
8
|
+
return lines;
|
|
9
|
+
}
|
|
10
|
+
export async function draftTextToBlocks(args) {
|
|
11
|
+
const inner = `${args.streamId}:lines`;
|
|
12
|
+
const now = new Date();
|
|
13
|
+
const lines = toLines(args.text);
|
|
14
|
+
const input = new ReadableStream({
|
|
15
|
+
start(controller) {
|
|
16
|
+
controller.enqueue({ type: "line.begin", streamId: inner, timestamp: now });
|
|
17
|
+
lines.forEach((content, index) => controller.enqueue({ type: "line.line", streamId: inner, content, lineNr: index + 1, timestamp: now }));
|
|
18
|
+
(args.usage ?? []).forEach((usage, index) => controller.enqueue({ type: "delta.usage", streamId: args.streamId, usage, deltaSeq: index, timestamp: now }));
|
|
19
|
+
controller.enqueue({ type: "line.end", streamId: inner, totalLines: lines.length, timestamp: now });
|
|
20
|
+
controller.close();
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
const out = input.pipeThrough(createBlockStream(args.streamId, inner, args.createId));
|
|
24
|
+
const collected = [];
|
|
25
|
+
const read = await exception2Result(async () => {
|
|
26
|
+
const reader = out.getReader();
|
|
27
|
+
for (;;) {
|
|
28
|
+
const next = await reader.read();
|
|
29
|
+
if (next.done === true)
|
|
30
|
+
break;
|
|
31
|
+
collected.push(next.value);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
if (read.isErr())
|
|
35
|
+
return Result.Err(read.Err());
|
|
36
|
+
return Result.Ok(collected);
|
|
37
|
+
}
|
|
38
|
+
export function blockEndOf(msgs) {
|
|
39
|
+
const found = msgs.filter((msg) => isBlockEnd(msg));
|
|
40
|
+
return found[found.length - 1];
|
|
41
|
+
}
|
|
42
|
+
export async function parseDraftText(text) {
|
|
43
|
+
let id = 0;
|
|
44
|
+
const blocks = await draftTextToBlocks({ text, streamId: "draft-parse", createId: () => `d${++id}` });
|
|
45
|
+
if (blocks.isErr())
|
|
46
|
+
return Result.Err(blocks.Err());
|
|
47
|
+
const accumulator = createBlockAccumulator();
|
|
48
|
+
const code = [];
|
|
49
|
+
const before = [];
|
|
50
|
+
let tail = [];
|
|
51
|
+
let seenCode = false;
|
|
52
|
+
for (const msg of blocks.Ok()) {
|
|
53
|
+
const closed = accumulator.ingest(msg);
|
|
54
|
+
if (closed !== undefined)
|
|
55
|
+
code.push({ begin: closed.begin, lines: [...closed.lines], end: closed.end });
|
|
56
|
+
if (isCodeEnd(msg)) {
|
|
57
|
+
seenCode = true;
|
|
58
|
+
tail = [];
|
|
59
|
+
}
|
|
60
|
+
if (isToplevelLine(msg)) {
|
|
61
|
+
if (seenCode)
|
|
62
|
+
tail.push(msg.line);
|
|
63
|
+
else
|
|
64
|
+
before.push(msg.line);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const resolved = resolveCodeBlocks(code, new Map());
|
|
68
|
+
const vfs = new Map();
|
|
69
|
+
for (const file of resolved.files) {
|
|
70
|
+
if (file.type === "code-block")
|
|
71
|
+
vfs.set(file.filename, file.content);
|
|
72
|
+
}
|
|
73
|
+
return Result.Ok({
|
|
74
|
+
vfs,
|
|
75
|
+
intro: before
|
|
76
|
+
.map((line) => line.trim())
|
|
77
|
+
.filter((line) => line.length > 0)
|
|
78
|
+
.join(" "),
|
|
79
|
+
draftNote: tail.join("\n").trim(),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function fenceLang(path) {
|
|
83
|
+
const ext = /\.(\w+)$/.exec(path)?.[1]?.toLowerCase() ?? "jsx";
|
|
84
|
+
if (ext === "json" || ext === "css" || ext === "tsx" || ext === "ts" || ext === "js")
|
|
85
|
+
return ext;
|
|
86
|
+
return "jsx";
|
|
87
|
+
}
|
|
88
|
+
function fileOrder(path) {
|
|
89
|
+
if (path === "/App.jsx")
|
|
90
|
+
return 0;
|
|
91
|
+
if (path === "/seed.json")
|
|
92
|
+
return 2;
|
|
93
|
+
return 1;
|
|
94
|
+
}
|
|
95
|
+
export function renderDraftText(draft) {
|
|
96
|
+
const paths = [...draft.vfs.keys()].sort((a, b) => fileOrder(a) - fileOrder(b) || a.localeCompare(b));
|
|
97
|
+
const files = paths.map((path) => {
|
|
98
|
+
const body = (draft.vfs.get(path) ?? "").replace(/\n+$/, "");
|
|
99
|
+
return `### \`${path.replace(/^\/+/, "")}\`\n\`\`\`${fenceLang(path)}\n${body}\n\`\`\``;
|
|
100
|
+
});
|
|
101
|
+
const intro = draft.intro.length > 0 ? draft.intro : "Here is the first draft.";
|
|
102
|
+
return [intro, ...files, ...(draft.draftNote.length > 0 ? [draft.draftNote] : [])].join("\n\n") + "\n";
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=draft-lane-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-lane-parse.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-parse.ts"],"names":[],"mappings":"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"}
|