@flexkit/studio 0.0.30 → 0.0.32

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 (110) hide show
  1. package/README.md +2 -2
  2. package/dist/asset-ZVPFS73O.js +2 -0
  3. package/dist/{asset-TS7J5GA5.js.map → asset-ZVPFS73O.js.map} +1 -1
  4. package/dist/astro.d.ts +5 -3
  5. package/dist/astro.js +8 -3
  6. package/dist/chunk-5FHCSAK2.js +2 -0
  7. package/dist/chunk-5FHCSAK2.js.map +1 -0
  8. package/dist/{chunk-R7N3MDOP.js → chunk-AEBTHXEP.js} +2 -2
  9. package/dist/{chunk-R7N3MDOP.js.map → chunk-AEBTHXEP.js.map} +1 -1
  10. package/dist/{chunk-W3TUEJJL.js → chunk-CCI3FGPF.js} +2 -2
  11. package/dist/{chunk-W3TUEJJL.js.map → chunk-CCI3FGPF.js.map} +1 -1
  12. package/dist/chunk-D62TAYLI.js +2 -0
  13. package/dist/chunk-D62TAYLI.js.map +1 -0
  14. package/dist/{chunk-UKLE7J3K.js → chunk-E7G46743.js} +139 -16
  15. package/dist/chunk-F2ILIHAU.js +2 -0
  16. package/dist/chunk-F2ILIHAU.js.map +1 -0
  17. package/dist/{chunk-EOCJR5EY.js → chunk-FPH4YETF.js} +2 -2
  18. package/dist/{chunk-EOCJR5EY.js.map → chunk-FPH4YETF.js.map} +1 -1
  19. package/dist/chunk-GFDWGYUR.js +2 -0
  20. package/dist/chunk-GFDWGYUR.js.map +1 -0
  21. package/dist/{chunk-CPUC4QXH.js → chunk-JAARDXQZ.js} +2 -2
  22. package/dist/{chunk-CPUC4QXH.js.map → chunk-JAARDXQZ.js.map} +1 -1
  23. package/dist/{chunk-IXO2LU47.js → chunk-JCHD4EGB.js} +2 -2
  24. package/dist/{chunk-IXO2LU47.js.map → chunk-JCHD4EGB.js.map} +1 -1
  25. package/dist/chunk-KHPTVIYT.js +2 -0
  26. package/dist/chunk-KHPTVIYT.js.map +1 -0
  27. package/dist/{chunk-DWK4NNLB.js → chunk-LKBCPAXQ.js} +2 -2
  28. package/dist/{chunk-DWK4NNLB.js.map → chunk-LKBCPAXQ.js.map} +1 -1
  29. package/dist/chunk-MGXHZDFZ.js +2 -0
  30. package/dist/chunk-MGXHZDFZ.js.map +1 -0
  31. package/dist/chunk-N2T6MKPV.js +2 -0
  32. package/dist/chunk-N2T6MKPV.js.map +1 -0
  33. package/dist/chunk-PXB5QSHN.js +2 -0
  34. package/dist/chunk-PXB5QSHN.js.map +1 -0
  35. package/dist/chunk-QSROLDUU.js +2 -0
  36. package/dist/chunk-QSROLDUU.js.map +1 -0
  37. package/dist/chunk-VHNQDP7Q.js +616 -0
  38. package/dist/chunk-VUAFNQK7.js +2 -0
  39. package/dist/chunk-VUAFNQK7.js.map +1 -0
  40. package/dist/chunk-XFY7MZJN.js +2 -0
  41. package/dist/chunk-XFY7MZJN.js.map +1 -0
  42. package/dist/{core-handler-XAVVKLhV.d.ts → core-handler-C3xC98bN.d.ts} +3 -0
  43. package/dist/datetime-DDEWTNLB.js +2 -0
  44. package/dist/{datetime-NQTYGZIC.js.map → datetime-DDEWTNLB.js.map} +1 -1
  45. package/dist/editor-HAYTKNMY.js +2 -0
  46. package/dist/{editor-YIRZQR3D.js.map → editor-HAYTKNMY.js.map} +1 -1
  47. package/dist/index.css +163 -44
  48. package/dist/index.d.ts +22 -21
  49. package/dist/index.js +157 -210
  50. package/dist/index.js.map +1 -1
  51. package/dist/logo-B6ZKLGM7.js +3 -0
  52. package/dist/logo-B6ZKLGM7.js.map +1 -0
  53. package/dist/nextjs.d.ts +40 -12
  54. package/dist/nextjs.js +8 -3
  55. package/dist/search-X5V3YOTZ.js +2 -0
  56. package/dist/search-X5V3YOTZ.js.map +1 -0
  57. package/dist/select-H3JHOCWR.js +2 -0
  58. package/dist/{select-A6I27JQU.js.map → select-H3JHOCWR.js.map} +1 -1
  59. package/dist/switch-TACKLQJH.js +2 -0
  60. package/dist/{switch-AFZGXSR3.js.map → switch-TACKLQJH.js.map} +1 -1
  61. package/dist/tanstack-start.d.ts +6 -4
  62. package/dist/tanstack-start.js +17 -12
  63. package/dist/text-M3DRK7LU.js +2 -0
  64. package/dist/{text-2RL2L5FT.js.map → text-M3DRK7LU.js.map} +1 -1
  65. package/dist/text-SQXG7XJT.js +2 -0
  66. package/dist/{text-6F4QTCNT.js.map → text-SQXG7XJT.js.map} +1 -1
  67. package/dist/textarea-YF4K2VBM.js +2 -0
  68. package/dist/{textarea-2A4TLWZS.js.map → textarea-YF4K2VBM.js.map} +1 -1
  69. package/dist/tools.d.ts +78 -0
  70. package/dist/tools.js +60 -0
  71. package/dist/types-U28Ppixq.d.ts +56 -0
  72. package/dist/{types.d-CX3kDxFZ.d.ts → types.d-710RgZFw.d.ts} +85 -7
  73. package/dist/ui.d.ts +21 -5
  74. package/dist/ui.js +5 -5
  75. package/dist/ui.js.map +1 -1
  76. package/dist/{user-nav-4JKIFZLB.js → user-nav-XVY7JTX6.js} +2 -2
  77. package/dist/{user-nav-4JKIFZLB.js.map → user-nav-XVY7JTX6.js.map} +1 -1
  78. package/package.json +7 -3
  79. package/dist/asset-TS7J5GA5.js +0 -2
  80. package/dist/chunk-73RMWG53.js +0 -2
  81. package/dist/chunk-73RMWG53.js.map +0 -1
  82. package/dist/chunk-HAQICAOQ.js +0 -2
  83. package/dist/chunk-HAQICAOQ.js.map +0 -1
  84. package/dist/chunk-LL2Z4TD3.js +0 -2
  85. package/dist/chunk-LL2Z4TD3.js.map +0 -1
  86. package/dist/chunk-MC6VZLKC.js +0 -2
  87. package/dist/chunk-MC6VZLKC.js.map +0 -1
  88. package/dist/chunk-N52AF6GE.js +0 -2
  89. package/dist/chunk-N52AF6GE.js.map +0 -1
  90. package/dist/chunk-V6R4AWQS.js +0 -2
  91. package/dist/chunk-V6R4AWQS.js.map +0 -1
  92. package/dist/chunk-WXMCINGZ.js +0 -2
  93. package/dist/chunk-WXMCINGZ.js.map +0 -1
  94. package/dist/chunk-WZ533Y4O.js +0 -2
  95. package/dist/chunk-WZ533Y4O.js.map +0 -1
  96. package/dist/chunk-YA4ACPM5.js +0 -2
  97. package/dist/chunk-YA4ACPM5.js.map +0 -1
  98. package/dist/chunk-ZEZ6TRCO.js +0 -2
  99. package/dist/chunk-ZEZ6TRCO.js.map +0 -1
  100. package/dist/datetime-NQTYGZIC.js +0 -2
  101. package/dist/editor-YIRZQR3D.js +0 -2
  102. package/dist/logo-GCKKZP62.js +0 -3
  103. package/dist/logo-GCKKZP62.js.map +0 -1
  104. package/dist/search-UFFZBRQV.js +0 -2
  105. package/dist/search-UFFZBRQV.js.map +0 -1
  106. package/dist/select-A6I27JQU.js +0 -2
  107. package/dist/switch-AFZGXSR3.js +0 -2
  108. package/dist/text-2RL2L5FT.js +0 -2
  109. package/dist/text-6F4QTCNT.js +0 -2
  110. package/dist/textarea-2A4TLWZS.js +0 -2
@@ -0,0 +1,3 @@
1
+ import'./index.css';import {jsx,jsxs}from'react/jsx-runtime';function f({title:t,theme:l}){return jsx("a",{className:"fk:flex fk:items-center fk:rounded-md fk:outline-none fk:transition-[color,box-shadow] fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50",href:"/",title:t,children:l==="light"?jsxs("svg",{className:"fk:h-8 fk:w-8",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"white"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"#020817"})]}):jsxs("svg",{className:"fk:h-8 fk:w-8",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"#020817"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"white"})]})})}
2
+ export{f as Logo};//# sourceMappingURL=logo-B6ZKLGM7.js.map
3
+ //# sourceMappingURL=logo-B6ZKLGM7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/components/logo.tsx"],"names":["Logo","title","theme","jsx","jsxs"],"mappings":"6DAEO,SAASA,CAAAA,CAAK,CAAE,KAAA,CAAAC,CAAAA,CAAO,MAAAC,CAAM,CAAA,CAA8D,CAChG,OACEC,IAAC,GAAA,CAAA,CACC,SAAA,CAAU,kJAAA,CACV,IAAA,CAAK,IACL,KAAA,CAAOF,CAAAA,CAEN,QAAA,CAAAC,CAAAA,GAAU,QACTE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,KAAA,CAAM,4BAAA,CACnE,UAAAD,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,iBAAA,CAAkB,KAAK,OAAA,CAAQ,CAAA,CACvCA,GAAAA,CAAC,MAAA,CAAA,CACC,EAAE,sRAAA,CACF,IAAA,CAAK,SAAA,CACP,CAAA,CAAA,CACF,EAEAC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,6BACnE,QAAA,CAAA,CAAAD,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,kBAAkB,IAAA,CAAK,SAAA,CAAU,CAAA,CACzCA,GAAAA,CAAC,QACC,CAAA,CAAE,sRAAA,CACF,KAAK,OAAA,CACP,CAAA,CAAA,CACF,EAEJ,CAEJ","file":"logo-B6ZKLGM7.js","sourcesContent":["import type { JSX } from 'react';\n\nexport function Logo({ title, theme }: { title: string; theme: string | undefined }): JSX.Element {\n return (\n <a\n className=\"fk:flex fk:items-center fk:rounded-md fk:outline-none fk:transition-[color,box-shadow] fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50\"\n href=\"/\"\n title={title}\n >\n {theme === 'light' ? (\n <svg className=\"fk:h-8 fk:w-8\" fill=\"none\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 8H41V40H7V8Z\" fill=\"white\" />\n <path\n d=\"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z\"\n fill=\"#020817\"\n />\n </svg>\n ) : (\n <svg className=\"fk:h-8 fk:w-8\" fill=\"none\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 8H41V40H7V8Z\" fill=\"#020817\" />\n <path\n d=\"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z\"\n fill=\"white\"\n />\n </svg>\n )}\n </a>\n );\n}\n"]}
package/dist/nextjs.d.ts CHANGED
@@ -1,16 +1,40 @@
1
- export { F as FlexkitHandlerContext, a as FlexkitHandlerResult, h as handleFlexkitRequest } from './core-handler-XAVVKLhV.js';
1
+ import { F as FlexkitHandlerOptions } from './types-U28Ppixq.js';
2
+ export { F as FlexkitHandlerContext, a as FlexkitHandlerResult, h as handleFlexkitRequest } from './core-handler-C3xC98bN.js';
3
+ import 'zod';
2
4
 
3
5
  /**
4
6
  * Type definitions for the Next.js API handler
5
7
  */
6
8
 
9
+ interface FlexkitNextRequest {
10
+ url: string;
11
+ method: string;
12
+ nextUrl: { pathname: string; search: string };
13
+ json: () => Promise<unknown>;
14
+ body: ReadableStream<Uint8Array> | null;
15
+ headers: Headers;
16
+ }
17
+
7
18
  interface FlexkitApiHandler {
8
- GET: (request: any) => Promise<any>;
9
- handler: (request: any) => Promise<any>;
10
- DELETE: (request: any) => Promise<any>;
11
- PATCH: (request: any) => Promise<any>;
12
- POST: (request: any) => Promise<any>;
13
- PUT: (request: any) => Promise<any>;
19
+ GET: (request: FlexkitNextRequest) => Promise<Response>;
20
+ handler: (request: FlexkitNextRequest) => Promise<Response>;
21
+ DELETE: (request: FlexkitNextRequest) => Promise<Response>;
22
+ PATCH: (request: FlexkitNextRequest) => Promise<Response>;
23
+ POST: (request: FlexkitNextRequest) => Promise<Response>;
24
+ PUT: (request: FlexkitNextRequest) => Promise<Response>;
25
+ }
26
+
27
+ interface NextResponseStatic {
28
+ json: (data: unknown, init?: { status?: number }) => Response;
29
+ new (body: BodyInit | null, init?: ResponseInit): Response;
30
+ }
31
+
32
+ interface CookieStore {
33
+ get: (name: string) => { value: string } | undefined;
34
+ }
35
+
36
+ interface HeadersList {
37
+ get: (name: string) => string | null;
14
38
  }
15
39
 
16
40
  /**
@@ -20,25 +44,29 @@ interface NextJsDependencies {
20
44
  /**
21
45
  * The NextResponse class from next/server
22
46
  */
23
- NextResponse: any;
47
+ NextResponse: NextResponseStatic;
24
48
 
25
49
  /**
26
50
  * The cookies function from next/headers
27
51
  */
28
- cookies: () => any;
52
+ cookies: () => Promise<CookieStore> | CookieStore;
29
53
 
30
54
  /**
31
55
  * The headers function from next/headers
32
56
  */
33
- headers: () => any;
57
+ headers: () => Promise<HeadersList> | HeadersList;
34
58
  }
35
59
 
36
60
  /**
37
61
  * Creates a Next.js API route handler for Flexkit integration
38
62
  *
39
63
  * @param dependencies Next.js dependencies that should be passed from the app
64
+ * @param options Optional custom tools registered on `/api/flexkit/tools`
40
65
  * @returns A handler object with all HTTP methods and runtime configuration
41
66
  */
42
- declare function createFlexkitApiHandler(dependencies: NextJsDependencies): FlexkitApiHandler;
67
+ declare function createFlexkitApiHandler(
68
+ dependencies: NextJsDependencies,
69
+ options?: FlexkitHandlerOptions
70
+ ): FlexkitApiHandler;
43
71
 
44
- export { createFlexkitApiHandler };
72
+ export { FlexkitHandlerOptions, createFlexkitApiHandler };
package/dist/nextjs.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-UKLE7J3K.js";
3
+ } from "./chunk-E7G46743.js";
4
+ import {
5
+ assertUniqueSkillNames
6
+ } from "./chunk-VHNQDP7Q.js";
4
7
 
5
8
  // src/auth/nextjs-api.ts
6
9
  function resultToNextResponse(result, NextResponse) {
@@ -28,7 +31,8 @@ function resultToNextResponse(result, NextResponse) {
28
31
  }
29
32
  return NextResponse.json(result.body, { status: result.status });
30
33
  }
31
- function createFlexkitApiHandler(dependencies) {
34
+ function createFlexkitApiHandler(dependencies, options) {
35
+ assertUniqueSkillNames(options?.skills ?? []);
32
36
  const { NextResponse, cookies, headers } = dependencies;
33
37
  const handleRequest = async (request) => {
34
38
  const cookieStore = await cookies();
@@ -52,7 +56,8 @@ function createFlexkitApiHandler(dependencies) {
52
56
  pathname,
53
57
  search,
54
58
  sessionToken,
55
- contentType
59
+ contentType,
60
+ options
56
61
  });
57
62
  return resultToNextResponse(result, NextResponse);
58
63
  };
@@ -0,0 +1,2 @@
1
+ import'./index.css';import {f}from'./chunk-QSROLDUU.js';import {b}from'./chunk-XFY7MZJN.js';import {n,w,r,q,s,u,b as b$2}from'./chunk-KHPTVIYT.js';import {a,d,c,e,g}from'./chunk-XU2JGXYC.js';import'./chunk-5FHCSAK2.js';import'./chunk-WDRCARCP.js';import {b as b$1}from'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import {a as a$1}from'./chunk-O2QMYUPS.js';import {useState,useMemo,useRef}from'react';import {LoaderCircle,Search,X}from'lucide-react';import {Command}from'cmdk';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';var i="all";function ee(r){let n=r.replace(/([A-Z])/g," $1");return n.charAt(0).toUpperCase()+n.slice(1).trim()}function te(r){return r.filter(n=>n.attributes.some(a=>a.searchable))}function re(r,n){return n===i?r.map(a=>a.plural):r.filter(a=>a.plural===n).map(a=>a.plural)}function ne(r,n){return n===i?i:r.some(a=>a.plural===n)?n:i}function ae(r,n){return {searchRequests:{searches:r.map(a=>({collection:a}))},commonParams:{q:n}}}function oe(r){return r.menu?.label??ee(r.plural)}function be({onSelect:r$1,searchPlaceholder:n$1="Search...",noResultsMsg:a$2="Nothing found",className:V,onSearchChange:y,projectId:D,schema:v}){let[G,l]=useState(false),[s$1,S]=useState(""),[M,X$1]=useState(i),f$1=useMemo(()=>te(v),[v]),m=ne(f$1,M),C=useMemo(()=>re(f$1,m),[f$1,m]),j=useMemo(()=>ae(C,s$1),[C,s$1]),u$1=useRef(null),{results:k,isLoading:d$1}=f(D,j),z=G&&(k.length>0||!d$1),F=useNavigate();function J(e){S(e),e.length>0&&l(true),e.length===0&&l(false),y&&y(e);}function U(e){X$1(e),s$1.length>0&&l(true);}function q$1(){S(""),l(false),u$1.current&&(u$1.current.value="");let e=new URL(window.location.href);e.searchParams.has("id")&&(e.searchParams.delete("id"),F(e.pathname+e.search));}return jsxs(b,{children:[jsxs(a,{onValueChange:U,value:m,children:[jsx(d,{"aria-label":"Filter search by entity",className:"fk:w-36 fk:h-9 fk:py-1 fk:rounded-r-none fk:border-border fk:shadow-none",children:jsx(c,{})}),jsxs(e,{children:[jsx(g,{value:i,children:"All"}),f$1.map(e=>jsx(g,{value:e.plural,children:oe(e)},e.plural))]})]}),jsxs(n,{className:"fk:relative fk:overflow-visible fk:h-auto fk:justify-center fk:rounded-none fk:bg-transparent",onBlur:()=>{setTimeout(()=>{l(false);},300);},onKeyDown:e=>{e.key==="Escape"&&(e.preventDefault(),l(false));},shouldFilter:false,children:[jsxs("div",{className:a$1("fk:flex fk:items-center fk:border-y fk:border-r fk:border-border fk:rounded-r-md fk:bg-background fk:pl-3 fk:pr-2 fk:h-9 fk:md:w-25 fk:lg:w-75","fk:outline-none fk:transition-[color,box-shadow] fk:has-[input:focus-visible]:border-ring fk:has-[input:focus-visible]:ring-[3px] fk:has-[input:focus-visible]:ring-ring/50"),children:[d$1?jsx(LoaderCircle,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin"}):jsx(Search,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50"}),jsx(Command.Input,{className:a$1("fk:flex fk:h-9 fk:w-full fk:rounded-none fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50",V),placeholder:n$1,onMouseDown:()=>{(u$1.current?.value.length??0)>0&&l(true);},onValueChange:J,ref:u$1,value:s$1}),s$1&&jsx(b$1,{"aria-label":"Clear search",className:"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:h-6 fk:w-6 fk:text-muted-foreground fk:hover:text-foreground fk:hover:bg-foreground/10 fk:cursor-pointer fk:rounded-full fk:bg-transparent",onClick:q$1,type:"button",children:jsx(X,{className:"fk:h-4 fk:w-4"})})]}),jsx("div",{className:"fk:relative fk:max-w-150",children:jsx("div",{className:a$1("fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-50 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border",z?"fk:block":"fk:hidden"),children:jsxs(w,{className:"fk:max-h-55 fk:overflow-auto",children:[!d$1&&jsx(r,{children:a$2}),jsx(q,{children:jsxs(s,{children:[k.length>0&&jsx(u,{"aria-hidden":"true",className:"fk:hidden!",value:"-"}),k.map(e=>jsxs(u,{className:"fk:flex",value:e._id,onSelect:H=>{r$1({entityName:e._entityName,entityNamePlural:e._entityNamePlural,entityId:H});},children:[jsx("span",{className:"fk:basis-full",children:e[Object.keys(e)[3]]}),jsx(b$2,{className:"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400",children:e._entityName})]},e._id))]})})]})})})]})]})}export{be as Search};//# sourceMappingURL=search-X5V3YOTZ.js.map
2
+ //# sourceMappingURL=search-X5V3YOTZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/components/search.tsx"],"names":["ALL_COLLECTIONS","capitalize","str","withSpaces","getSearchableEntities","schema","entity","attr","getCollections","entities","selectedCollection","resolveCollection","buildSearchRequest","collections","q","collection","entityLabel","Search","onSelect","searchPlaceholder","noResultsMsg","className","onSearchChange","projectId","isOpen","setIsOpen","useState","inputValue","setInputValue","setSelectedCollection","searchableEntities","useMemo","resolvedCollection","searchQuery","inputRef","useRef","results","isLoading","useSearch","showDropdown","navigate","useNavigate","handleOnSearchChange","handleEntityChange","value","handleClear","url","jsxs","ButtonGroup","Select","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","Command","cn","LoaderCircle","SearchIcon","CommandPrimitive","Button","XIcon","ScrollArea","CommandEmpty","CommandList","CommandGroup","CommandItem","item","entityId","Badge"],"mappings":"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","file":"search-X5V3YOTZ.js","sourcesContent":["'use client';\n\nimport { useRef, useState, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { LoaderCircle, Search as SearchIcon, X as XIcon } from 'lucide-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useSearch } from '../../core/use-search';\nimport { cn } from '../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { ButtonGroup } from '../primitives/button-group';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from '../primitives/command';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport type { Entity, SearchRequestProps } from '../../core/types';\n\nexport type ComboBoxItemType = {\n value: string;\n label: string;\n};\n\nexport interface SearchProps {\n onSelect: ({\n entityName,\n entityNamePlural,\n entityId,\n }: {\n entityName: string;\n entityNamePlural: string;\n entityId: string;\n }) => void;\n searchPlaceholder?: string;\n noResultsMsg?: string;\n className?: string;\n onSearchChange?: (e: string) => void;\n projectId: string;\n schema: Entity[];\n}\n\nconst ALL_COLLECTIONS = 'all';\n\nfunction capitalize(str: string): string {\n const withSpaces = str.replace(/([A-Z])/g, ' $1');\n\n return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1).trim();\n}\n\nfunction getSearchableEntities(schema: Entity[]): Entity[] {\n return schema.filter((entity) => entity.attributes.some((attr) => attr.searchable));\n}\n\nfunction getCollections(entities: Entity[], selectedCollection: string): string[] {\n if (selectedCollection === ALL_COLLECTIONS) {\n return entities.map((entity) => entity.plural);\n }\n\n return entities.filter((entity) => entity.plural === selectedCollection).map((entity) => entity.plural);\n}\n\nfunction resolveCollection(entities: Entity[], selectedCollection: string): string {\n if (selectedCollection === ALL_COLLECTIONS) {\n return ALL_COLLECTIONS;\n }\n\n if (entities.some((entity) => entity.plural === selectedCollection)) {\n return selectedCollection;\n }\n\n return ALL_COLLECTIONS;\n}\n\nfunction buildSearchRequest(collections: string[], q: string): SearchRequestProps {\n return {\n searchRequests: {\n searches: collections.map((collection) => ({\n collection,\n })),\n },\n commonParams: {\n q,\n },\n };\n}\n\nfunction entityLabel(entity: Entity): string {\n return entity.menu?.label ?? capitalize(entity.plural);\n}\n\nexport function Search({\n onSelect,\n searchPlaceholder = 'Search...',\n noResultsMsg = 'Nothing found',\n className,\n onSearchChange,\n projectId,\n schema,\n}: SearchProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const [selectedCollection, setSelectedCollection] = useState(ALL_COLLECTIONS);\n const searchableEntities = useMemo(() => getSearchableEntities(schema), [schema]);\n const resolvedCollection = resolveCollection(searchableEntities, selectedCollection);\n const collections = useMemo(\n () => getCollections(searchableEntities, resolvedCollection),\n [searchableEntities, resolvedCollection]\n );\n const searchQuery = useMemo(() => buildSearchRequest(collections, inputValue), [collections, inputValue]);\n const inputRef = useRef<HTMLInputElement>(null);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const showDropdown = isOpen && (results.length > 0 || !isLoading);\n const navigate = useNavigate();\n\n function handleOnSearchChange(q: string): void {\n setInputValue(q);\n // TODO: Add debounce\n if (q.length > 0) {\n setIsOpen(true);\n }\n\n if (q.length === 0) {\n setIsOpen(false);\n }\n\n if (onSearchChange) {\n onSearchChange(q);\n }\n }\n\n function handleEntityChange(value: string): void {\n setSelectedCollection(value);\n\n if (inputValue.length > 0) {\n setIsOpen(true);\n }\n }\n\n function handleClear(): void {\n setInputValue('');\n setIsOpen(false);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n\n // Remove id from URL if present\n const url = new URL(window.location.href);\n\n if (url.searchParams.has('id')) {\n url.searchParams.delete('id');\n navigate(url.pathname + url.search);\n }\n }\n\n // TODO: handle error\n\n return (\n <ButtonGroup>\n <Select onValueChange={handleEntityChange} value={resolvedCollection}>\n <SelectTrigger\n aria-label=\"Filter search by entity\"\n className=\"fk:w-36 fk:h-9 fk:py-1 fk:rounded-r-none fk:border-border fk:shadow-none\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL_COLLECTIONS}>All</SelectItem>\n {searchableEntities.map((entity) => (\n <SelectItem key={entity.plural} value={entity.plural}>\n {entityLabel(entity)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Command\n className=\"fk:relative fk:overflow-visible fk:h-auto fk:justify-center fk:rounded-none fk:bg-transparent\"\n onBlur={() => {\n // close after a delay to allow any click event from the results list to be handled\n setTimeout(() => {\n setIsOpen(false);\n }, 300);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n }}\n shouldFilter={false}\n >\n <div\n className={cn(\n 'fk:flex fk:items-center fk:border-y fk:border-r fk:border-border fk:rounded-r-md fk:bg-background fk:pl-3 fk:pr-2 fk:h-9 fk:md:w-25 fk:lg:w-75',\n 'fk:outline-none fk:transition-[color,box-shadow] fk:has-[input:focus-visible]:border-ring fk:has-[input:focus-visible]:ring-[3px] fk:has-[input:focus-visible]:ring-ring/50'\n )}\n >\n {isLoading ? (\n <LoaderCircle className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <CommandPrimitive.Input\n className={cn(\n 'fk:flex fk:h-9 fk:w-full fk:rounded-none fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50',\n className\n )}\n placeholder={searchPlaceholder}\n onMouseDown={() => {\n if ((inputRef.current?.value.length ?? 0) > 0) setIsOpen(true);\n }}\n onValueChange={handleOnSearchChange}\n ref={inputRef}\n value={inputValue}\n />\n {inputValue && (\n <Button\n aria-label=\"Clear search\"\n className=\"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:h-6 fk:w-6 fk:text-muted-foreground fk:hover:text-foreground fk:hover:bg-foreground/10 fk:cursor-pointer fk:rounded-full fk:bg-transparent\"\n onClick={handleClear}\n type=\"button\"\n >\n <XIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n )}\n </div>\n <div className=\"fk:relative fk:max-w-150\">\n <div\n className={cn(\n 'fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-50 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border',\n showDropdown ? 'fk:block' : 'fk:hidden'\n )}\n >\n <ScrollArea className=\"fk:max-h-55 fk:overflow-auto\">\n {!isLoading && <CommandEmpty>{noResultsMsg}</CommandEmpty>}\n <CommandList>\n <CommandGroup>\n {results.length > 0 && <CommandItem aria-hidden=\"true\" className=\"fk:hidden!\" value=\"-\" />}\n {results.map((item) => (\n <CommandItem\n className=\"fk:flex\"\n key={item._id}\n value={item._id}\n onSelect={(entityId) => {\n onSelect({ entityName: item._entityName, entityNamePlural: item._entityNamePlural, entityId });\n }}\n >\n <span className=\"fk:basis-full\">{item[Object.keys(item)[3]]}</span>\n <Badge className=\"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400\">\n {item._entityName}\n </Badge>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </ScrollArea>\n </div>\n </div>\n </Command>\n </ButtonGroup>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Select}from'./chunk-CCI3FGPF.js';import'./chunk-F2ILIHAU.js';import'./chunk-YW2EEXMV.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=select-H3JHOCWR.js.map
2
+ //# sourceMappingURL=select-H3JHOCWR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"select-A6I27JQU.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"select-H3JHOCWR.js"}
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Switch}from'./chunk-GFDWGYUR.js';import'./chunk-VUAFNQK7.js';import'./chunk-KGYH74NA.js';import'./chunk-FVFRTCEB.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=switch-TACKLQJH.js.map
2
+ //# sourceMappingURL=switch-TACKLQJH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"switch-AFZGXSR3.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"switch-TACKLQJH.js"}
@@ -1,4 +1,6 @@
1
- export { F as FlexkitHandlerContext, a as FlexkitHandlerResult, h as handleFlexkitRequest } from './core-handler-XAVVKLhV.js';
1
+ import { F as FlexkitHandlerOptions } from './types-U28Ppixq.js';
2
+ export { F as FlexkitHandlerContext, a as FlexkitHandlerResult, h as handleFlexkitRequest } from './core-handler-C3xC98bN.js';
3
+ import 'zod';
2
4
 
3
5
  /**
4
6
  * Types for TanStack Start / Nitro / Vinxi event handling
@@ -76,7 +78,7 @@ type EventHandler = (event: H3Event) => Promise<unknown>;
76
78
  * export default eventHandler(createFlexkitTanStackHandler());
77
79
  * ```
78
80
  */
79
- declare function createFlexkitTanStackHandler(): EventHandler;
81
+ declare function createFlexkitTanStackHandler(options?: FlexkitHandlerOptions): EventHandler;
80
82
  /**
81
83
  * Creates a Web-standard fetch handler for TanStack Start.
82
84
  * Use this when you need a handler that works with the Web Fetch API directly.
@@ -94,6 +96,6 @@ declare function createFlexkitTanStackHandler(): EventHandler;
94
96
  * }
95
97
  * ```
96
98
  */
97
- declare function createFlexkitFetchHandler(): (request: Request) => Promise<Response>;
99
+ declare function createFlexkitFetchHandler(options?: FlexkitHandlerOptions): (request: Request) => Promise<Response>;
98
100
 
99
- export { createFlexkitFetchHandler, createFlexkitTanStackHandler };
101
+ export { FlexkitHandlerOptions, createFlexkitFetchHandler, createFlexkitTanStackHandler };
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-UKLE7J3K.js";
3
+ } from "./chunk-E7G46743.js";
4
+ import {
5
+ assertUniqueSkillNames
6
+ } from "./chunk-VHNQDP7Q.js";
4
7
 
5
8
  // src/auth/tanstack-start-api.ts
6
9
  function getCookieValue(cookieHeader, name) {
@@ -20,16 +23,14 @@ function getCookieValue(cookieHeader, name) {
20
23
  async function readBody(event) {
21
24
  const req = event.node.req;
22
25
  return new Promise((resolve) => {
23
- const chunks = [];
26
+ const decoder = new TextDecoder();
27
+ let body = "";
24
28
  req.on("data", (chunk) => {
25
- chunks.push(chunk);
29
+ body += decoder.decode(chunk, { stream: true });
26
30
  });
27
31
  req.on("end", () => {
28
- if (chunks.length === 0) {
29
- resolve(void 0);
30
- } else {
31
- resolve(Buffer.concat(chunks).toString("utf-8"));
32
- }
32
+ body += decoder.decode();
33
+ resolve(body.length === 0 ? void 0 : body);
33
34
  });
34
35
  req.on("error", () => {
35
36
  resolve(void 0);
@@ -57,7 +58,8 @@ function applyResultToResponse(result, event) {
57
58
  res.setHeader("Content-Type", "application/json");
58
59
  return result.body;
59
60
  }
60
- function createFlexkitTanStackHandler() {
61
+ function createFlexkitTanStackHandler(options) {
62
+ assertUniqueSkillNames(options?.skills ?? []);
61
63
  return async (event) => {
62
64
  const { req } = event.node;
63
65
  const method = event.method || req.method || "GET";
@@ -89,7 +91,8 @@ function createFlexkitTanStackHandler() {
89
91
  pathname: url.pathname,
90
92
  search: url.search,
91
93
  sessionToken,
92
- contentType
94
+ contentType,
95
+ options
93
96
  });
94
97
  if (result.type === "response") {
95
98
  const headers2 = new Headers(result.headers);
@@ -101,7 +104,8 @@ function createFlexkitTanStackHandler() {
101
104
  return applyResultToResponse(result, event);
102
105
  };
103
106
  }
104
- function createFlexkitFetchHandler() {
107
+ function createFlexkitFetchHandler(options) {
108
+ assertUniqueSkillNames(options?.skills ?? []);
105
109
  return async (request) => {
106
110
  const url = new URL(request.url);
107
111
  const cookieHeader = request.headers.get("cookie");
@@ -121,7 +125,8 @@ function createFlexkitFetchHandler() {
121
125
  pathname: url.pathname,
122
126
  search: url.search,
123
127
  sessionToken,
124
- contentType: request.headers.get("content-type")
128
+ contentType: request.headers.get("content-type"),
129
+ options
125
130
  });
126
131
  const headers = new Headers(result.headers);
127
132
  if (result.setCookie) {
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Text}from'./chunk-N2T6MKPV.js';import'./chunk-7GBAYC7G.js';import'./chunk-VUAFNQK7.js';import'./chunk-FVFRTCEB.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=text-M3DRK7LU.js.map
2
+ //# sourceMappingURL=text-M3DRK7LU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"text-2RL2L5FT.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"text-M3DRK7LU.js"}
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Text}from'./chunk-JAARDXQZ.js';import'./chunk-F2ILIHAU.js';import'./chunk-YW2EEXMV.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=text-SQXG7XJT.js.map
2
+ //# sourceMappingURL=text-SQXG7XJT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"text-6F4QTCNT.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"text-SQXG7XJT.js"}
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Textarea}from'./chunk-MGXHZDFZ.js';import'./chunk-OEWYLKO7.js';import'./chunk-VUAFNQK7.js';import'./chunk-FVFRTCEB.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=textarea-YF4K2VBM.js.map
2
+ //# sourceMappingURL=textarea-YF4K2VBM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"textarea-2A4TLWZS.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"textarea-YF4K2VBM.js"}
@@ -0,0 +1,78 @@
1
+ import { a as FlexkitSkill, C as CustomerToolActor, b as FlexkitTool } from './types-U28Ppixq.js';
2
+ export { c as CustomerToolsExecuteRequest, d as CustomerToolsExecuteResponse, e as CustomerToolsIntrospectResponse, F as FlexkitHandlerOptions, f as FlexkitToolManifest, p as parseCustomerToolActor } from './types-U28Ppixq.js';
3
+ import { z } from 'zod';
4
+
5
+ declare const MAX_SKILL_NAME_LENGTH = 120;
6
+ declare const MAX_SKILL_DESCRIPTION_LENGTH = 500;
7
+ declare const MAX_SKILL_CONTENT_LENGTH = 50000;
8
+
9
+ /**
10
+ * Defines a version-controlled skill exposed through the Flexkit API handler.
11
+ *
12
+ * The skill name is its sync identity. Renaming it creates a new skill in
13
+ * Flexkit and removes the old one, including its automation attachments.
14
+ */
15
+ declare function defineSkill(options: {
16
+ content: string;
17
+ description: string;
18
+ name: string;
19
+ space?: string;
20
+ }): FlexkitSkill;
21
+ declare function assertUniqueSkillNames(skills: FlexkitSkill[]): void;
22
+
23
+ declare function defineTool<TSchema extends z.ZodType>(options: {
24
+ description: string;
25
+ execute: (_input: z.infer<TSchema>, _actor: CustomerToolActor) => Promise<unknown> | unknown;
26
+ input: TSchema;
27
+ name: string;
28
+ }): FlexkitTool;
29
+ declare function toolToManifest(tool: FlexkitTool): {
30
+ description: string;
31
+ inputSchema: {
32
+ [key: string]: unknown;
33
+ };
34
+ name: string;
35
+ };
36
+
37
+ declare const FLEXKIT_TIMESTAMP_HEADER = "flexkit-timestamp";
38
+ declare const FLEXKIT_SIGNATURE_HEADER = "flexkit-signature";
39
+ declare const FLEXKIT_SIGNATURE_PREVIOUS_HEADER = "flexkit-signature-previous";
40
+ declare const CUSTOMER_TOOLS_SERVE_PATH = "/api/flexkit/tools";
41
+ declare const CUSTOMER_TOOLS_HELLO_PATH = "/tools/dev-connect/hello";
42
+ declare const CUSTOMER_TOOLS_POLL_PATH = "/tools/dev-connect/poll";
43
+ declare const CUSTOMER_TOOLS_RESPOND_PATH = "/tools/dev-connect/respond";
44
+ declare function signPayload(secret: string, payload: string): Promise<string>;
45
+ declare function createSignedHeaders({ body, method, path, previousSecret, secret, timestamp, }: {
46
+ body: string;
47
+ method: string;
48
+ path: string;
49
+ previousSecret?: string | null;
50
+ secret: string;
51
+ timestamp?: number;
52
+ }): Promise<{
53
+ [header: string]: string;
54
+ }>;
55
+ declare function verifySignedHeaders({ body, maxSkewSeconds, method, path, previousSignatureHeader, secret, signatureHeader, timestampHeader, }: {
56
+ body: string;
57
+ maxSkewSeconds?: number;
58
+ method: string;
59
+ path: string;
60
+ previousSignatureHeader?: string | null;
61
+ secret: string | string[];
62
+ signatureHeader: string | null;
63
+ timestampHeader: string | null;
64
+ }): Promise<boolean>;
65
+ declare function getHeader(headers: Headers, name: string): string | null;
66
+
67
+ declare const CUSTOM_TOOL_NAME_PREFIX = "custom_";
68
+ declare function isValidToolName(name: string): boolean;
69
+ declare function toAgentToolName(name: string): string;
70
+
71
+ declare const FLEXKIT_STUDIO_RUNTIME_HEADER = "Flexkit-Studio-Runtime";
72
+ declare const FLEXKIT_STUDIO_RUNTIME_LOCAL = "local";
73
+ declare function shouldHandleDevConnectTick(): boolean;
74
+ declare function isDevConnectRole(role: string | null | undefined): boolean;
75
+ declare function isCustomerToolsTickPath(pathname: string): boolean;
76
+ declare function getCustomerToolsTickPath(projectId: string): string;
77
+
78
+ export { CUSTOMER_TOOLS_HELLO_PATH, CUSTOMER_TOOLS_POLL_PATH, CUSTOMER_TOOLS_RESPOND_PATH, CUSTOMER_TOOLS_SERVE_PATH, CUSTOM_TOOL_NAME_PREFIX, CustomerToolActor, FLEXKIT_SIGNATURE_HEADER, FLEXKIT_SIGNATURE_PREVIOUS_HEADER, FLEXKIT_STUDIO_RUNTIME_HEADER, FLEXKIT_STUDIO_RUNTIME_LOCAL, FLEXKIT_TIMESTAMP_HEADER, FlexkitSkill, FlexkitTool, MAX_SKILL_CONTENT_LENGTH, MAX_SKILL_DESCRIPTION_LENGTH, MAX_SKILL_NAME_LENGTH, assertUniqueSkillNames, createSignedHeaders, defineSkill, defineTool, getCustomerToolsTickPath, getHeader, isCustomerToolsTickPath, isDevConnectRole, isValidToolName, shouldHandleDevConnectTick, signPayload, toAgentToolName, toolToManifest, verifySignedHeaders };
package/dist/tools.js ADDED
@@ -0,0 +1,60 @@
1
+ import {
2
+ CUSTOMER_TOOLS_HELLO_PATH,
3
+ CUSTOMER_TOOLS_POLL_PATH,
4
+ CUSTOMER_TOOLS_RESPOND_PATH,
5
+ CUSTOMER_TOOLS_SERVE_PATH,
6
+ CUSTOM_TOOL_NAME_PREFIX,
7
+ FLEXKIT_SIGNATURE_HEADER,
8
+ FLEXKIT_SIGNATURE_PREVIOUS_HEADER,
9
+ FLEXKIT_STUDIO_RUNTIME_HEADER,
10
+ FLEXKIT_STUDIO_RUNTIME_LOCAL,
11
+ FLEXKIT_TIMESTAMP_HEADER,
12
+ MAX_SKILL_CONTENT_LENGTH,
13
+ MAX_SKILL_DESCRIPTION_LENGTH,
14
+ MAX_SKILL_NAME_LENGTH,
15
+ assertUniqueSkillNames,
16
+ createSignedHeaders,
17
+ defineSkill,
18
+ defineTool,
19
+ getCustomerToolsTickPath,
20
+ getHeader,
21
+ isCustomerToolsTickPath,
22
+ isDevConnectRole,
23
+ isValidToolName,
24
+ parseCustomerToolActor,
25
+ shouldHandleDevConnectTick,
26
+ signPayload,
27
+ toAgentToolName,
28
+ toolToManifest,
29
+ verifySignedHeaders
30
+ } from "./chunk-VHNQDP7Q.js";
31
+ export {
32
+ CUSTOMER_TOOLS_HELLO_PATH,
33
+ CUSTOMER_TOOLS_POLL_PATH,
34
+ CUSTOMER_TOOLS_RESPOND_PATH,
35
+ CUSTOMER_TOOLS_SERVE_PATH,
36
+ CUSTOM_TOOL_NAME_PREFIX,
37
+ FLEXKIT_SIGNATURE_HEADER,
38
+ FLEXKIT_SIGNATURE_PREVIOUS_HEADER,
39
+ FLEXKIT_STUDIO_RUNTIME_HEADER,
40
+ FLEXKIT_STUDIO_RUNTIME_LOCAL,
41
+ FLEXKIT_TIMESTAMP_HEADER,
42
+ MAX_SKILL_CONTENT_LENGTH,
43
+ MAX_SKILL_DESCRIPTION_LENGTH,
44
+ MAX_SKILL_NAME_LENGTH,
45
+ assertUniqueSkillNames,
46
+ createSignedHeaders,
47
+ defineSkill,
48
+ defineTool,
49
+ getCustomerToolsTickPath,
50
+ getHeader,
51
+ isCustomerToolsTickPath,
52
+ isDevConnectRole,
53
+ isValidToolName,
54
+ parseCustomerToolActor,
55
+ shouldHandleDevConnectTick,
56
+ signPayload,
57
+ toAgentToolName,
58
+ toolToManifest,
59
+ verifySignedHeaders
60
+ };
@@ -0,0 +1,56 @@
1
+ import { z } from 'zod';
2
+
3
+ type CustomerToolActor = {
4
+ kind: 'automation';
5
+ automationId: string;
6
+ spaceCodes: string[];
7
+ spaceId: string | null;
8
+ } | {
9
+ kind: 'chat';
10
+ role: string;
11
+ spaceCodes: string[];
12
+ userId: string;
13
+ };
14
+ declare function parseCustomerToolActor(value: unknown): CustomerToolActor | null;
15
+
16
+ interface FlexkitToolManifest {
17
+ description: string;
18
+ inputSchema: {
19
+ [key: string]: unknown;
20
+ };
21
+ name: string;
22
+ }
23
+ interface FlexkitSkill {
24
+ content: string;
25
+ description: string;
26
+ name: string;
27
+ space?: string;
28
+ }
29
+ interface FlexkitTool {
30
+ description: string;
31
+ execute: (_input: unknown, _actor: CustomerToolActor) => Promise<unknown> | unknown;
32
+ input: z.ZodType;
33
+ name: string;
34
+ }
35
+ interface FlexkitHandlerOptions {
36
+ /** Project id used by the localhost dev connect poller. */
37
+ projectId?: string;
38
+ skills?: FlexkitSkill[];
39
+ tools?: FlexkitTool[];
40
+ }
41
+ interface CustomerToolsIntrospectResponse {
42
+ skills?: FlexkitSkill[];
43
+ tools: FlexkitToolManifest[];
44
+ }
45
+ interface CustomerToolsExecuteRequest {
46
+ actor: CustomerToolActor;
47
+ arguments: {
48
+ [key: string]: unknown;
49
+ };
50
+ name: string;
51
+ }
52
+ interface CustomerToolsExecuteResponse {
53
+ result: unknown;
54
+ }
55
+
56
+ export { type CustomerToolActor as C, type FlexkitHandlerOptions as F, type FlexkitSkill as a, type FlexkitTool as b, type CustomerToolsExecuteRequest as c, type CustomerToolsExecuteResponse as d, type CustomerToolsIntrospectResponse as e, type FlexkitToolManifest as f, parseCustomerToolActor as p };