@vibes.diy/api-svc 14.3.21 → 14.3.23

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.
Files changed (133) hide show
  1. package/create-handler.d.ts +2 -0
  2. package/create-handler.js +1 -0
  3. package/create-handler.js.map +1 -1
  4. package/index.d.ts +2 -0
  5. package/index.js +2 -0
  6. package/index.js.map +1 -1
  7. package/intern/accepted-aliases.d.ts +31 -0
  8. package/intern/accepted-aliases.js +151 -0
  9. package/intern/accepted-aliases.js.map +1 -0
  10. package/intern/agent-assembly.d.ts +2 -0
  11. package/intern/agent-assembly.js +2 -2
  12. package/intern/agent-assembly.js.map +1 -1
  13. package/intern/agent-build-tools.d.ts +7 -0
  14. package/intern/agent-build-tools.js +14 -3
  15. package/intern/agent-build-tools.js.map +1 -1
  16. package/intern/agent-dispatcher.js +66 -25
  17. package/intern/agent-dispatcher.js.map +1 -1
  18. package/intern/agent-request-frame.d.ts +10 -0
  19. package/intern/agent-request-frame.js +16 -0
  20. package/intern/agent-request-frame.js.map +1 -1
  21. package/intern/agent-router.js +1 -1
  22. package/intern/agent-router.js.map +1 -1
  23. package/intern/agent-session.d.ts +1 -1
  24. package/intern/agent-session.js +1 -1
  25. package/intern/agent-session.js.map +1 -1
  26. package/intern/agent-wake.d.ts +1 -0
  27. package/intern/agent-wake.js +2 -0
  28. package/intern/agent-wake.js.map +1 -1
  29. package/intern/attach-draft-handle.js +51 -8
  30. package/intern/attach-draft-handle.js.map +1 -1
  31. package/intern/code-view.d.ts +1 -0
  32. package/intern/code-view.js +79 -0
  33. package/intern/code-view.js.map +1 -0
  34. package/intern/draft-lane-autofix.d.ts +8 -0
  35. package/intern/draft-lane-autofix.js +8 -0
  36. package/intern/draft-lane-autofix.js.map +1 -0
  37. package/intern/draft-lane-classify.d.ts +55 -0
  38. package/intern/draft-lane-classify.js +168 -0
  39. package/intern/draft-lane-classify.js.map +1 -0
  40. package/intern/draft-lane-config.d.ts +18 -0
  41. package/intern/draft-lane-config.js +35 -0
  42. package/intern/draft-lane-config.js.map +1 -0
  43. package/intern/draft-lane-exports.d.ts +7 -0
  44. package/intern/draft-lane-exports.js +104 -0
  45. package/intern/draft-lane-exports.js.map +1 -0
  46. package/intern/draft-lane-imports.d.ts +6 -0
  47. package/intern/draft-lane-imports.js +180 -0
  48. package/intern/draft-lane-imports.js.map +1 -0
  49. package/intern/draft-lane-opens.d.ts +6 -0
  50. package/intern/draft-lane-opens.js +173 -0
  51. package/intern/draft-lane-opens.js.map +1 -0
  52. package/intern/draft-lane-parse.d.ts +17 -0
  53. package/intern/draft-lane-parse.js +107 -0
  54. package/intern/draft-lane-parse.js.map +1 -0
  55. package/intern/draft-lane-persist.d.ts +26 -0
  56. package/intern/draft-lane-persist.js +94 -0
  57. package/intern/draft-lane-persist.js.map +1 -0
  58. package/intern/draft-lane-prompt.d.ts +16 -0
  59. package/intern/draft-lane-prompt.js +59 -0
  60. package/intern/draft-lane-prompt.js.map +1 -0
  61. package/intern/draft-lane-store.d.ts +37 -0
  62. package/intern/draft-lane-store.js +5 -0
  63. package/intern/draft-lane-store.js.map +1 -0
  64. package/intern/draft-lane-transport.d.ts +11 -0
  65. package/intern/draft-lane-transport.js +61 -0
  66. package/intern/draft-lane-transport.js.map +1 -0
  67. package/intern/draft-lane-worker.d.ts +38 -0
  68. package/intern/draft-lane-worker.js +173 -0
  69. package/intern/draft-lane-worker.js.map +1 -0
  70. package/intern/draft-lane.d.ts +63 -0
  71. package/intern/draft-lane.js +167 -0
  72. package/intern/draft-lane.js.map +1 -0
  73. package/intern/draft-note.d.ts +1 -0
  74. package/intern/draft-note.js +13 -0
  75. package/intern/draft-note.js.map +1 -0
  76. package/intern/draft-ready-frame.d.ts +50 -0
  77. package/intern/draft-ready-frame.js +102 -0
  78. package/intern/draft-ready-frame.js.map +1 -0
  79. package/intern/eval-handles.d.ts +2 -1
  80. package/intern/eval-handles.js +2 -1
  81. package/intern/eval-handles.js.map +1 -1
  82. package/intern/first-build-request.js +5 -1
  83. package/intern/first-build-request.js.map +1 -1
  84. package/intern/import-synth.d.ts +29 -0
  85. package/intern/import-synth.js +607 -0
  86. package/intern/import-synth.js.map +1 -0
  87. package/intern/inline-build-pass.d.ts +26 -0
  88. package/intern/inline-build-pass.js +54 -0
  89. package/intern/inline-build-pass.js.map +1 -0
  90. package/intern/look-lint-engine.d.ts +9 -0
  91. package/intern/look-lint-engine.js +22 -0
  92. package/intern/look-lint-engine.js.map +1 -1
  93. package/intern/look-lint.d.ts +12 -1
  94. package/intern/look-lint.js +40 -1
  95. package/intern/look-lint.js.map +1 -1
  96. package/intern/mint-job-store.d.ts +53 -2
  97. package/intern/mint-job-store.js +153 -4
  98. package/intern/mint-job-store.js.map +1 -1
  99. package/intern/opens-check.d.ts +14 -0
  100. package/intern/opens-check.js +1046 -0
  101. package/intern/opens-check.js.map +1 -0
  102. package/intern/prompt-assembly.d.ts +19 -0
  103. package/intern/prompt-assembly.js +5 -2
  104. package/intern/prompt-assembly.js.map +1 -1
  105. package/intern/save-build-pass.d.ts +15 -0
  106. package/intern/save-build-pass.js +65 -0
  107. package/intern/save-build-pass.js.map +1 -0
  108. package/intern/section-fan-out.d.ts +9 -0
  109. package/intern/section-fan-out.js +22 -0
  110. package/intern/section-fan-out.js.map +1 -1
  111. package/package.json +13 -12
  112. package/public/agent-turn-assembly.js +17 -0
  113. package/public/agent-turn-assembly.js.map +1 -1
  114. package/public/handle-prompt-context.d.ts +5 -1
  115. package/public/handle-prompt-context.js +56 -6
  116. package/public/handle-prompt-context.js.map +1 -1
  117. package/public/home-feed-common.js +2 -2
  118. package/public/home-feed-common.js.map +1 -1
  119. package/public/open-chat.d.ts +19 -3
  120. package/public/open-chat.js +219 -22
  121. package/public/open-chat.js.map +1 -1
  122. package/public/prompt-turn-settled.js +1 -0
  123. package/public/prompt-turn-settled.js.map +1 -1
  124. package/public/related-vibes.js +9 -3
  125. package/public/related-vibes.js.map +1 -1
  126. package/public/shared-mint.d.ts +5 -0
  127. package/public/shared-mint.js +15 -0
  128. package/public/shared-mint.js.map +1 -1
  129. package/public/stream-assembly.d.ts +1 -0
  130. package/public/stream-assembly.js +3 -0
  131. package/public/stream-assembly.js.map +1 -1
  132. package/types.d.ts +2 -0
  133. package/types.js.map +1 -1
@@ -0,0 +1,55 @@
1
+ import { Result } from "@adviser/cement";
2
+ export declare const DRAFT_SKILL_HINTS: Readonly<Record<string, string>>;
3
+ export interface DraftDeferred {
4
+ readonly access?: string;
5
+ readonly backend?: string;
6
+ }
7
+ export interface DraftClassification {
8
+ readonly build: boolean;
9
+ readonly title: string;
10
+ readonly slug: string;
11
+ readonly skills: readonly string[];
12
+ readonly deferred: DraftDeferred;
13
+ readonly source: "model" | "template";
14
+ }
15
+ export declare const DRAFT_CLASSIFIER_SYSTEM: string;
16
+ export declare function slugify(title: string): string;
17
+ export declare function looksLikeBuildIntent(sentence: string): boolean;
18
+ export declare function templateClassification(sentence: string): DraftClassification;
19
+ export declare function parseClassifierReply(text: string, sentence: string): Result<DraftClassification>;
20
+ export interface DraftModelRequest {
21
+ readonly model: string;
22
+ readonly messages: readonly DraftChatMessage[];
23
+ readonly maxTokens: number;
24
+ readonly signal?: AbortSignal;
25
+ }
26
+ export interface DraftChatMessage {
27
+ readonly role: "system" | "user" | "assistant";
28
+ readonly content: string;
29
+ }
30
+ export interface DraftModelUsage {
31
+ readonly prompt_tokens: number;
32
+ readonly completion_tokens: number;
33
+ readonly total_tokens: number;
34
+ readonly cost?: number;
35
+ readonly model?: string;
36
+ }
37
+ export interface DraftModelReply {
38
+ readonly text: string;
39
+ readonly model?: string;
40
+ readonly usage?: DraftModelUsage;
41
+ }
42
+ export type DraftModelCall = (req: DraftModelRequest) => Promise<Result<DraftModelReply>>;
43
+ export interface ClassifyDraftResult {
44
+ readonly classification: DraftClassification;
45
+ readonly classifierMs: number;
46
+ readonly fallback?: string;
47
+ readonly usage?: DraftModelUsage;
48
+ }
49
+ export declare function classifyDraft(args: {
50
+ readonly sentence: string;
51
+ readonly model: string;
52
+ readonly timeoutMs: number;
53
+ readonly call: DraftModelCall;
54
+ readonly now: () => number;
55
+ }): Promise<ClassifyDraftResult>;
@@ -0,0 +1,168 @@
1
+ import { Result, exception2Result } from "@adviser/cement";
2
+ import { type } from "arktype";
3
+ export const DRAFT_SKILL_HINTS = {
4
+ fireproof: "the app's database (every app)",
5
+ "image-gen": "generated pictures, when items have an image",
6
+ callai: "the page asks a model for text: record intake from a sentence, a chat reply, a suggestion",
7
+ "web-audio": "sound synthesis, sequencers, metronomes",
8
+ "three-js": "3D graphics",
9
+ voxel: "Minecraft-style block worlds",
10
+ webxr: "VR/AR",
11
+ d3: "charts and data visualisation",
12
+ p5: "generative art on canvas",
13
+ calendar: "calendar (webcal) feeds",
14
+ bluesky: "public Bluesky data",
15
+ youtube: "YouTube channel data",
16
+ spotify: "Spotify catalog",
17
+ };
18
+ export const DRAFT_CLASSIFIER_SYSTEM = `You read one sentence a person typed on a page that makes small web apps, and classify it. Answer with one JSON object and nothing else:
19
+ {"build": true|false, "title": "two or three words", "slug": "kebab-case", "skills": ["fireproof", ...], "deferred": {"access": {"needed": true|false, "why": "one plain sentence to the owner"}, "backend": {"recommended": true|false, "why": "one plain sentence"}}}
20
+
21
+ build is true when the sentence asks for an app, a tool, a game or a page to be made; it is false for a question, a greeting or a comment.
22
+ skills: names from this list only, the ones this app needs — ${Object.entries(DRAFT_SKILL_HINTS)
23
+ .map(([name, hint]) => `${name}: ${hint}`)
24
+ .join("; ")}.
25
+ deferred.access.needed is true when some people may see or change what others may not; deferred.backend.recommended is true for a schedule, an email, a notification or an outside read. Each why names what the person gets, in the app's own nouns.`;
26
+ const classifierReply = type({
27
+ "build?": "boolean",
28
+ "title?": "string",
29
+ "slug?": "string",
30
+ "skills?": "string[]",
31
+ "deferred?": {
32
+ "access?": { "needed?": "boolean", "why?": "string" },
33
+ "backend?": { "recommended?": "boolean", "why?": "string" },
34
+ },
35
+ });
36
+ const STOP_WORDS = new Set([
37
+ "a",
38
+ "an",
39
+ "the",
40
+ "my",
41
+ "our",
42
+ "for",
43
+ "with",
44
+ "and",
45
+ "to",
46
+ "of",
47
+ "i",
48
+ "me",
49
+ "let",
50
+ "where",
51
+ "app",
52
+ "that",
53
+ "it",
54
+ "on",
55
+ "in",
56
+ ]);
57
+ export function slugify(title) {
58
+ return title
59
+ .toLowerCase()
60
+ .replace(/[^a-z0-9]+/g, "-")
61
+ .replace(/^-+|-+$/g, "");
62
+ }
63
+ function titleFromSentence(sentence) {
64
+ const words = (sentence.match(/[a-zA-Z]+/g) ?? []).filter((word) => STOP_WORDS.has(word.toLowerCase()) === false);
65
+ const title = words
66
+ .slice(0, 3)
67
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
68
+ .join(" ");
69
+ return title.length === 0 ? "My App" : title;
70
+ }
71
+ const GREETING = /^\s*(hi|hello|hey|yo|thanks|thank you|good (morning|afternoon|evening))\b[\s!.,]*$/i;
72
+ const QUESTION_OPENER = /^\s*(what|why|how|who|when|where|is|are|do|does|did|can you (tell|explain)|could you (tell|explain))\b/i;
73
+ const MAKE_VERB = /\b(make|build|create|design|generate|app|tracker|planner|game|tool|page|site|list|board|form|log|timer|machine|quiz|dashboard)\b/i;
74
+ export function looksLikeBuildIntent(sentence) {
75
+ const text = sentence.trim();
76
+ if (text.length === 0)
77
+ return false;
78
+ if (GREETING.test(text))
79
+ return false;
80
+ const words = text.split(/\s+/).filter((word) => word.length > 0);
81
+ if (words.length < 2)
82
+ return false;
83
+ if (text.endsWith("?") && QUESTION_OPENER.test(text) && MAKE_VERB.test(text) === false)
84
+ return false;
85
+ return true;
86
+ }
87
+ export function templateClassification(sentence) {
88
+ const title = titleFromSentence(sentence);
89
+ const pictures = /picture|photo|image/i.test(sentence);
90
+ const access = /friend|share|team|customer|member|invite|neighbo|everyone|our |people|each \w+ only|their own|techs|office|just for me/i.test(sentence) && /just for me|only me/i.test(sentence) === false;
91
+ const backend = /email|every (monday|week|day)|weekly|notify|remind|sheet/i.test(sentence);
92
+ return {
93
+ build: looksLikeBuildIntent(sentence),
94
+ title,
95
+ slug: slugify(title),
96
+ skills: ["fireproof", ...(pictures ? ["image-gen"] : [])],
97
+ deferred: {
98
+ ...(access ? { access: "The people you invite can add and see what belongs to them." } : {}),
99
+ ...(backend ? { backend: "The app sends the scheduled email or update on its own." } : {}),
100
+ },
101
+ source: "template",
102
+ };
103
+ }
104
+ export function parseClassifierReply(text, sentence) {
105
+ const start = text.indexOf("{");
106
+ const end = text.lastIndexOf("}");
107
+ if (start < 0 || end <= start)
108
+ return Result.Err("classifier reply carried no JSON object");
109
+ const json = exception2Result(() => JSON.parse(text.slice(start, end + 1)));
110
+ if (json.isErr())
111
+ return Result.Err(json.Err());
112
+ const reply = classifierReply(json.Ok());
113
+ if (reply instanceof type.errors)
114
+ return Result.Err(`classifier reply shape: ${reply.summary}`);
115
+ const fallback = templateClassification(sentence);
116
+ const title = reply.title !== undefined && reply.title.trim().length > 0 ? reply.title.trim() : fallback.title;
117
+ const slugRaw = slugify(reply.slug ?? "");
118
+ const picked = (reply.skills ?? []).filter((name) => DRAFT_SKILL_HINTS[name] !== undefined && name !== "fireproof");
119
+ const access = reply.deferred?.access;
120
+ const backend = reply.deferred?.backend;
121
+ return Result.Ok({
122
+ build: reply.build ?? true,
123
+ title,
124
+ slug: slugRaw.length > 0 ? slugRaw : slugify(title),
125
+ skills: ["fireproof", ...new Set(picked)],
126
+ deferred: {
127
+ ...(access?.needed === true && access.why !== undefined && access.why.trim().length > 0 ? { access: access.why.trim() } : {}),
128
+ ...(backend?.recommended === true && backend.why !== undefined && backend.why.trim().length > 0
129
+ ? { backend: backend.why.trim() }
130
+ : {}),
131
+ },
132
+ source: "model",
133
+ });
134
+ }
135
+ export async function classifyDraft(args) {
136
+ const started = args.now();
137
+ const abort = new AbortController();
138
+ const timer = setTimeout(() => abort.abort(), args.timeoutMs);
139
+ const reply = await args
140
+ .call({
141
+ model: args.model,
142
+ maxTokens: 800,
143
+ signal: abort.signal,
144
+ messages: [
145
+ { role: "system", content: DRAFT_CLASSIFIER_SYSTEM },
146
+ { role: "user", content: args.sentence },
147
+ ],
148
+ })
149
+ .finally(() => clearTimeout(timer));
150
+ const classifierMs = args.now() - started;
151
+ if (reply.isErr()) {
152
+ const reason = abort.signal.aborted ? "timeout" : `error: ${reply.Err().message}`;
153
+ return { classification: templateClassification(args.sentence), classifierMs, fallback: reason };
154
+ }
155
+ const replyUsage = reply.Ok().usage;
156
+ const usage = replyUsage === undefined ? {} : { usage: { ...replyUsage, model: reply.Ok().model ?? args.model } };
157
+ const parsed = parseClassifierReply(reply.Ok().text, args.sentence);
158
+ if (parsed.isErr()) {
159
+ return {
160
+ classification: templateClassification(args.sentence),
161
+ classifierMs,
162
+ fallback: `unreadable: ${parsed.Err().message}`,
163
+ ...usage,
164
+ };
165
+ }
166
+ return { classification: parsed.Ok(), classifierMs, ...usage };
167
+ }
168
+ //# sourceMappingURL=draft-lane-classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-lane-classify.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-classify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const DEFAULT_DRAFT_CLASSIFIER_MODEL = "google/gemini-3.5-flash-lite";
2
+ export declare const DEFAULT_DRAFT_BUILDER_MODEL = "inception/mercury-2.5";
3
+ export declare const DEFAULT_DRAFT_LEASE_MS = 90000;
4
+ export declare const DEFAULT_DRAFT_CLASSIFIER_TIMEOUT_MS = 4000;
5
+ export declare const DRAFT_MAX_RETRIES = 2;
6
+ export type DraftReasoningEffort = "none" | "minimal";
7
+ export declare function draftReasoningEffortFor(model: string): DraftReasoningEffort | undefined;
8
+ export interface DraftLaneConfig {
9
+ readonly enabled: boolean;
10
+ readonly classifierModel: string;
11
+ readonly builderModel: string;
12
+ readonly leaseMs: number;
13
+ readonly classifierTimeoutMs: number;
14
+ readonly maxRetries: number;
15
+ }
16
+ export declare function readDraftLaneConfig(env: {
17
+ get(key: string): string | undefined;
18
+ }): DraftLaneConfig;
@@ -0,0 +1,35 @@
1
+ export const DEFAULT_DRAFT_CLASSIFIER_MODEL = "google/gemini-3.5-flash-lite";
2
+ export const DEFAULT_DRAFT_BUILDER_MODEL = "inception/mercury-2.5";
3
+ export const DEFAULT_DRAFT_LEASE_MS = 90_000;
4
+ export const DEFAULT_DRAFT_CLASSIFIER_TIMEOUT_MS = 4_000;
5
+ export const DRAFT_MAX_RETRIES = 2;
6
+ export function draftReasoningEffortFor(model) {
7
+ switch (true) {
8
+ case model.startsWith("inception/"):
9
+ return "none";
10
+ case model.startsWith("google/gemini-3.5-flash-lite"):
11
+ return "minimal";
12
+ default:
13
+ return undefined;
14
+ }
15
+ }
16
+ function positiveInt(raw, fallback) {
17
+ if (raw === undefined || raw.trim() === "")
18
+ return fallback;
19
+ const n = Number(raw);
20
+ return Number.isInteger(n) && n > 0 ? n : fallback;
21
+ }
22
+ function nonEmpty(raw, fallback) {
23
+ return raw === undefined || raw.trim() === "" ? fallback : raw.trim();
24
+ }
25
+ export function readDraftLaneConfig(env) {
26
+ return {
27
+ enabled: env.get("DRAFT_LANE") === "on",
28
+ classifierModel: nonEmpty(env.get("DRAFT_CLASSIFIER_MODEL"), DEFAULT_DRAFT_CLASSIFIER_MODEL),
29
+ builderModel: nonEmpty(env.get("DRAFT_BUILDER_MODEL"), DEFAULT_DRAFT_BUILDER_MODEL),
30
+ leaseMs: positiveInt(env.get("DRAFT_LEASE_MS"), DEFAULT_DRAFT_LEASE_MS),
31
+ classifierTimeoutMs: positiveInt(env.get("DRAFT_CLASSIFIER_TIMEOUT_MS"), DEFAULT_DRAFT_CLASSIFIER_TIMEOUT_MS),
32
+ maxRetries: DRAFT_MAX_RETRIES,
33
+ };
34
+ }
35
+ //# sourceMappingURL=draft-lane-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-lane-config.js","sourceRoot":"","sources":["../../jsr/intern/draft-lane-config.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAC;AAC7E,MAAM,CAAC,MAAM,2BAA2B,GAAG,uBAAuB,CAAC;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAG7C,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAC;AAGzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAYnC,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;YACjC,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC;YACnD,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAWD,SAAS,WAAW,CAAC,GAAuB,EAAE,QAAgB;IAC5D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAuB,EAAE,QAAgB;IACzD,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAGD,MAAM,UAAU,mBAAmB,CAAC,GAA6C;IAC/E,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI;QACvC,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;QAC5F,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,2BAA2B,CAAC;QACnF,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;QACvE,mBAAmB,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,mCAAmC,CAAC;QAC7G,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const LOOK_BASE_EXPORTS: readonly string[];
2
+ export declare const LOOK_OVERLAY_EXPORTS: readonly string[];
3
+ export declare const LOOK_MODULE = "@vibes.diy/look";
4
+ export declare const LOOK_OVERLAY_MODULE = "@vibes.diy/look/overlay";
5
+ export declare const MODULE_EXPORTS: Readonly<Record<string, readonly string[]>>;
6
+ export declare const RUNTIME_MODULES: readonly string[];
7
+ export declare const REACT_HOOKS: readonly string[];
@@ -0,0 +1,104 @@
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
+ "Slider",
29
+ "Switch",
30
+ "cn",
31
+ ];
32
+ export const LOOK_OVERLAY_EXPORTS = [
33
+ "Dialog",
34
+ "DialogTrigger",
35
+ "DialogContent",
36
+ "DialogHeader",
37
+ "DialogTitle",
38
+ "DialogDescription",
39
+ "DialogFooter",
40
+ "Sheet",
41
+ "SheetTrigger",
42
+ "SheetContent",
43
+ "SheetHeader",
44
+ "SheetTitle",
45
+ "SheetDescription",
46
+ "SheetFooter",
47
+ "Popover",
48
+ "PopoverTrigger",
49
+ "PopoverContent",
50
+ "Select",
51
+ "SelectTrigger",
52
+ "SelectContent",
53
+ "SelectItem",
54
+ "SelectValue",
55
+ "DropdownMenu",
56
+ "DropdownMenuTrigger",
57
+ "DropdownMenuContent",
58
+ "DropdownMenuItem",
59
+ "Tooltip",
60
+ "TooltipTrigger",
61
+ "TooltipContent",
62
+ "TooltipProvider",
63
+ ];
64
+ export const LOOK_MODULE = "@vibes.diy/look";
65
+ export const LOOK_OVERLAY_MODULE = "@vibes.diy/look/overlay";
66
+ export const MODULE_EXPORTS = {
67
+ [LOOK_MODULE]: [...LOOK_BASE_EXPORTS, ...LOOK_OVERLAY_EXPORTS],
68
+ [LOOK_OVERLAY_MODULE]: LOOK_OVERLAY_EXPORTS,
69
+ "use-fireproof": ["useFireproof", "fireproof", "ImgFile"],
70
+ "use-vibes": [
71
+ "useVibe",
72
+ "useViewer",
73
+ "ViewerTag",
74
+ "HandleInput",
75
+ "ImgGen",
76
+ "useImgGen",
77
+ "imgGen",
78
+ "useSocial",
79
+ "useFireproof",
80
+ "fireproof",
81
+ "ImgFile",
82
+ "callAI",
83
+ "callAi",
84
+ ],
85
+ "call-ai": ["callAI", "callAi"],
86
+ };
87
+ export const RUNTIME_MODULES = ["use-fireproof", "use-vibes", "call-ai"];
88
+ export const REACT_HOOKS = [
89
+ "useState",
90
+ "useEffect",
91
+ "useRef",
92
+ "useMemo",
93
+ "useCallback",
94
+ "useReducer",
95
+ "useContext",
96
+ "useLayoutEffect",
97
+ "useId",
98
+ "useTransition",
99
+ "createContext",
100
+ "forwardRef",
101
+ "memo",
102
+ "Fragment",
103
+ ];
104
+ //# 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;IAGV,QAAQ;IACR,QAAQ;IACR,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,6 @@
1
+ export interface OpensCheck {
2
+ readonly opens: boolean;
3
+ readonly findings: readonly string[];
4
+ }
5
+ export declare function isServedBareSpecifier(spec: string): boolean;
6
+ export declare function opensCheck(vfs: ReadonlyMap<string, string>): OpensCheck;