@kubuild/ai 0.3.0

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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-27AY2KBI.js +500 -0
  3. package/dist/chunk-27AY2KBI.js.map +1 -0
  4. package/dist/chunk-JY4NHD3Q.js +227 -0
  5. package/dist/chunk-JY4NHD3Q.js.map +1 -0
  6. package/dist/chunk-UH24LHRY.js +443 -0
  7. package/dist/chunk-UH24LHRY.js.map +1 -0
  8. package/dist/client/ai-client.d.ts +59 -0
  9. package/dist/client/ai-client.d.ts.map +1 -0
  10. package/dist/client/index.cjs +254 -0
  11. package/dist/client/index.cjs.map +1 -0
  12. package/dist/client/index.d.ts +2 -0
  13. package/dist/client/index.d.ts.map +1 -0
  14. package/dist/client/index.js +9 -0
  15. package/dist/client/index.js.map +1 -0
  16. package/dist/core/index.d.ts +3 -0
  17. package/dist/core/index.d.ts.map +1 -0
  18. package/dist/core/normalizer.d.ts +9 -0
  19. package/dist/core/normalizer.d.ts.map +1 -0
  20. package/dist/core/prompt-compiler.d.ts +10 -0
  21. package/dist/core/prompt-compiler.d.ts.map +1 -0
  22. package/dist/index.cjs +468 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +23 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/react/index.cjs +584 -0
  29. package/dist/react/index.cjs.map +1 -0
  30. package/dist/react/index.d.ts +3 -0
  31. package/dist/react/index.d.ts.map +1 -0
  32. package/dist/react/index.js +336 -0
  33. package/dist/react/index.js.map +1 -0
  34. package/dist/react/use-ai-chat.d.ts +63 -0
  35. package/dist/react/use-ai-chat.d.ts.map +1 -0
  36. package/dist/react/use-ai-generator.d.ts +19 -0
  37. package/dist/react/use-ai-generator.d.ts.map +1 -0
  38. package/dist/server/adapters/anthropic.d.ts +30 -0
  39. package/dist/server/adapters/anthropic.d.ts.map +1 -0
  40. package/dist/server/adapters/base.d.ts +2 -0
  41. package/dist/server/adapters/base.d.ts.map +1 -0
  42. package/dist/server/adapters/custom.d.ts +18 -0
  43. package/dist/server/adapters/custom.d.ts.map +1 -0
  44. package/dist/server/adapters/gemini.d.ts +22 -0
  45. package/dist/server/adapters/gemini.d.ts.map +1 -0
  46. package/dist/server/adapters/index.cjs +529 -0
  47. package/dist/server/adapters/index.cjs.map +1 -0
  48. package/dist/server/adapters/index.d.ts +6 -0
  49. package/dist/server/adapters/index.d.ts.map +1 -0
  50. package/dist/server/adapters/index.js +13 -0
  51. package/dist/server/adapters/index.js.map +1 -0
  52. package/dist/server/adapters/openai.d.ts +26 -0
  53. package/dist/server/adapters/openai.d.ts.map +1 -0
  54. package/dist/server/adapters/stream-utils.d.ts +12 -0
  55. package/dist/server/adapters/stream-utils.d.ts.map +1 -0
  56. package/dist/server/engine.d.ts +59 -0
  57. package/dist/server/engine.d.ts.map +1 -0
  58. package/dist/server/handler.d.ts +66 -0
  59. package/dist/server/handler.d.ts.map +1 -0
  60. package/dist/server/index.cjs +1824 -0
  61. package/dist/server/index.cjs.map +1 -0
  62. package/dist/server/index.d.ts +4 -0
  63. package/dist/server/index.d.ts.map +1 -0
  64. package/dist/server/index.js +890 -0
  65. package/dist/server/index.js.map +1 -0
  66. package/dist/types.d.ts +184 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/package.json +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAuB,gBAAgB,CACrC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CA8BpC"}
@@ -0,0 +1,59 @@
1
+ import { PageDocument, Node } from '@kubuild/schema';
2
+ import type { KubuildAiEngineOptions, AiGeneratePageRequest, AiGenerateSectionRequest, AiRefactorNodeRequest, AiChatRequest, AiChatResponse, AiGenerateResponse, AiStreamEvent } from '../types';
3
+ export declare class KubuildAiEngine {
4
+ private options;
5
+ private catalog;
6
+ constructor(options: KubuildAiEngineOptions);
7
+ get adapterName(): string;
8
+ refreshCatalog(): void;
9
+ private log;
10
+ generatePage(request: AiGeneratePageRequest, context?: {
11
+ signal?: AbortSignal;
12
+ }): Promise<AiGenerateResponse<PageDocument>>;
13
+ generateSection(request: AiGenerateSectionRequest, context?: {
14
+ signal?: AbortSignal;
15
+ }): Promise<AiGenerateResponse<Node>>;
16
+ refactorNode(request: AiRefactorNodeRequest, context?: {
17
+ signal?: AbortSignal;
18
+ }): Promise<AiGenerateResponse<Node>>;
19
+ /**
20
+ * Progressive Section Streaming Generator.
21
+ * Emits structured SSE events: status -> metadata -> section (one by one) -> complete.
22
+ */
23
+ streamPage(request: AiGeneratePageRequest, context?: {
24
+ signal?: AbortSignal;
25
+ }): AsyncIterable<AiStreamEvent>;
26
+ /**
27
+ * Builds the system/user prompt pair shared by `chat()` and `chatStream()` — the exact
28
+ * same document/selection grounding is used regardless of whether the response is
29
+ * streamed token-by-token or returned as a single request/response (STORA-515).
30
+ */
31
+ private buildChatPrompt;
32
+ /**
33
+ * Conversational Assistant / Q&A.
34
+ * Can discuss web design, explain KUBUILD components, review current page,
35
+ * suggest improvements, or recommend copywriting.
36
+ *
37
+ * Single request/response — unchanged since before STORA-515. See `chatStream()` for
38
+ * the token-level streaming variant.
39
+ */
40
+ chat(request: AiChatRequest, context?: {
41
+ signal?: AbortSignal;
42
+ }): Promise<AiGenerateResponse<AiChatResponse>>;
43
+ /**
44
+ * Token-level streaming variant of `chat()` (STORA-515). Emits `chat-chunk` events as
45
+ * partial text arrives, then a terminal `chat-complete` event with the fully assembled
46
+ * assistant message — the same `AsyncIterable<AiStreamEvent>` mechanism `streamPage`
47
+ * already uses, so it can be piped over SSE by `createAiHandler`/consumed by
48
+ * `KubuildAiClient` with no separate transport.
49
+ *
50
+ * When the configured adapter does not implement `generateStream` (e.g. the generic
51
+ * custom/HTTP adapter), this falls back to a single non-streaming `generate()` call and
52
+ * emits the entire response as one `chat-chunk`, so callers never see an error just
53
+ * because the underlying provider can't stream — only a less granular update cadence.
54
+ */
55
+ chatStream(request: AiChatRequest, context?: {
56
+ signal?: AbortSignal;
57
+ }): AsyncIterable<AiStreamEvent>;
58
+ }
59
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/server/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAA4C,MAAM,iBAAiB,CAAC;AAC/F,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,aAAa,EACb,cAAc,EAEd,kBAAkB,EAElB,aAAa,EACd,MAAM,UAAU,CAAC;AA0BlB,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAA4B;gBAE/B,OAAO,EAAE,sBAAsB;IAQ3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,GAAG;IASL,YAAY,CAChB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAkEtC,eAAe,CACnB,OAAO,EAAE,wBAAwB,EACjC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAuD9B,YAAY,CAChB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IA+CpC;;;OAGG;IACI,UAAU,CACf,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,aAAa,CAAC,aAAa,CAAC;IAiN/B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IA4CvB;;;;;;;OAOG;IACG,IAAI,CACR,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAsD9C;;;;;;;;;;;OAWG;IACI,UAAU,CACf,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,aAAa,CAAC,aAAa,CAAC;CA4EhC"}
@@ -0,0 +1,66 @@
1
+ import type { KubuildAiEngine } from './engine';
2
+ import type { PageDocument } from '@kubuild/schema';
3
+ import type { AiGeneratePageRequest, AiRefactorNodeRequest, AiChatMessage, AiGenerateResponse, AiGenerationMode } from '../types';
4
+ export interface AiApiRequestBody {
5
+ mode?: AiGenerationMode;
6
+ prompt?: string;
7
+ stylePreference?: string;
8
+ tone?: string;
9
+ locale?: string;
10
+ metadata?: AiGeneratePageRequest['metadata'];
11
+ targetSectionType?: string;
12
+ parentContext?: string;
13
+ node?: AiRefactorNodeRequest['node'];
14
+ instruction?: string;
15
+ stream?: boolean;
16
+ messages?: AiChatMessage[];
17
+ currentDocument?: PageDocument;
18
+ selectedNodeId?: string;
19
+ }
20
+ export declare function processAiRequest(engine: KubuildAiEngine, body: unknown, signal?: AbortSignal): Promise<{
21
+ status: number;
22
+ response: AiGenerateResponse<unknown>;
23
+ }>;
24
+ /**
25
+ * Options for {@link createAiHandler} (STORA-519).
26
+ */
27
+ export interface CreateAiHandlerOptions {
28
+ /**
29
+ * Optional hook invoked with the raw incoming `Request` before it ever reaches the
30
+ * engine/provider — the place to plug in host-owned auth and/or rate-limiting without
31
+ * forking the handler.
32
+ *
33
+ * - Return a `Response` (or a Promise resolving to one) to reject/short-circuit the
34
+ * request — e.g. `new Response(..., { status: 401 })` or `429` — that response is
35
+ * returned as-is and the engine/provider is never invoked.
36
+ * - Return `void`/`undefined` (or a Promise resolving to that) to allow the request to
37
+ * continue through the normal handler logic unchanged.
38
+ *
39
+ * Omitting this option entirely preserves the exact pre-STORA-519 behavior.
40
+ */
41
+ beforeRequest?: (request: Request) => Promise<Response | void> | Response | void;
42
+ }
43
+ /**
44
+ * Creates a standard Web Fetch API Request handler with optional SSE streaming support.
45
+ *
46
+ * Plug-and-play for Next.js App Router (route.ts), SvelteKit, Remix, Astro, Bun, etc.
47
+ *
48
+ * Example:
49
+ * ```ts
50
+ * export const POST = createAiHandler(engine);
51
+ * ```
52
+ *
53
+ * Example with an auth/rate-limit hook (STORA-519):
54
+ * ```ts
55
+ * export const POST = createAiHandler(engine, {
56
+ * beforeRequest: async (request) => {
57
+ * if (!isAuthorized(request)) {
58
+ * return new Response('Unauthorized', { status: 401 });
59
+ * }
60
+ * // returning nothing lets the request proceed as normal
61
+ * },
62
+ * });
63
+ * ```
64
+ */
65
+ export declare function createAiHandler(engine: KubuildAiEngine, options?: CreateAiHandlerOptions): (request: Request) => Promise<Response>;
66
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/server/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EACV,qBAAqB,EAErB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CA0IpE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;CAClF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,IACzE,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAqLnD"}