@preply/ds-ai-core 11.1.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 (104) hide show
  1. package/AGENTS.md +7 -0
  2. package/README.md +34 -0
  3. package/dist/event-tracking.d.ts +21 -0
  4. package/dist/event-tracking.d.ts.map +1 -0
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +38209 -0
  8. package/dist/tools/components/__tests__/get-component-docs.test.d.ts +2 -0
  9. package/dist/tools/components/__tests__/get-component-docs.test.d.ts.map +1 -0
  10. package/dist/tools/components/__tests__/list-components.test.d.ts +2 -0
  11. package/dist/tools/components/__tests__/list-components.test.d.ts.map +1 -0
  12. package/dist/tools/components/context/__test__/get-components-data.test.d.ts +2 -0
  13. package/dist/tools/components/context/__test__/get-components-data.test.d.ts.map +1 -0
  14. package/dist/tools/components/context/__test__/test-components/FixtureButton.d.ts +15 -0
  15. package/dist/tools/components/context/__test__/test-components/FixtureButton.d.ts.map +1 -0
  16. package/dist/tools/components/context/__test__/test-components/index.d.ts +2 -0
  17. package/dist/tools/components/context/__test__/test-components/index.d.ts.map +1 -0
  18. package/dist/tools/components/context/extract-component-docgen-info.d.ts +3 -0
  19. package/dist/tools/components/context/extract-component-docgen-info.d.ts.map +1 -0
  20. package/dist/tools/components/context/get-components-data.d.ts +24 -0
  21. package/dist/tools/components/context/get-components-data.d.ts.map +1 -0
  22. package/dist/tools/components/context/index.d.ts +6 -0
  23. package/dist/tools/components/context/index.d.ts.map +1 -0
  24. package/dist/tools/components/context/render-component-doc.d.ts +4 -0
  25. package/dist/tools/components/context/render-component-doc.d.ts.map +1 -0
  26. package/dist/tools/components/get-component-docs.d.ts +15 -0
  27. package/dist/tools/components/get-component-docs.d.ts.map +1 -0
  28. package/dist/tools/components/list-components.d.ts +9 -0
  29. package/dist/tools/components/list-components.d.ts.map +1 -0
  30. package/dist/tools/index.d.ts +6 -0
  31. package/dist/tools/index.d.ts.map +1 -0
  32. package/dist/tools/search-icon/__tests__/get-icons-data.test.d.ts +2 -0
  33. package/dist/tools/search-icon/__tests__/get-icons-data.test.d.ts.map +1 -0
  34. package/dist/tools/search-icon/__tests__/search-icon.test.d.ts +2 -0
  35. package/dist/tools/search-icon/__tests__/search-icon.test.d.ts.map +1 -0
  36. package/dist/tools/search-icon/get-icons-data.d.ts +6 -0
  37. package/dist/tools/search-icon/get-icons-data.d.ts.map +1 -0
  38. package/dist/tools/search-icon/search-icon.d.ts +18 -0
  39. package/dist/tools/search-icon/search-icon.d.ts.map +1 -0
  40. package/dist/tools/search-token/__tests__/search-token-by-name.test.d.ts +2 -0
  41. package/dist/tools/search-token/__tests__/search-token-by-name.test.d.ts.map +1 -0
  42. package/dist/tools/search-token/__tests__/search-token-by-value.test.d.ts +2 -0
  43. package/dist/tools/search-token/__tests__/search-token-by-value.test.d.ts.map +1 -0
  44. package/dist/tools/search-token/context/__tests__/get-tokens-data.test.d.ts +2 -0
  45. package/dist/tools/search-token/context/__tests__/get-tokens-data.test.d.ts.map +1 -0
  46. package/dist/tools/search-token/context/get-tokens-data.d.ts +13 -0
  47. package/dist/tools/search-token/context/get-tokens-data.d.ts.map +1 -0
  48. package/dist/tools/search-token/context/index.d.ts +6 -0
  49. package/dist/tools/search-token/context/index.d.ts.map +1 -0
  50. package/dist/tools/search-token/search-token-by-name.d.ts +26 -0
  51. package/dist/tools/search-token/search-token-by-name.d.ts.map +1 -0
  52. package/dist/tools/search-token/search-token-by-value.d.ts +24 -0
  53. package/dist/tools/search-token/search-token-by-value.d.ts.map +1 -0
  54. package/dist/tools/search-token/token-utils.d.ts +9 -0
  55. package/dist/tools/search-token/token-utils.d.ts.map +1 -0
  56. package/dist/types.d.ts +3 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/utils/create-search-index.d.ts +48 -0
  59. package/dist/utils/create-search-index.d.ts.map +1 -0
  60. package/dist/utils/define-tool.d.ts +49 -0
  61. package/dist/utils/define-tool.d.ts.map +1 -0
  62. package/dist/utils/format-list.d.ts +26 -0
  63. package/dist/utils/format-list.d.ts.map +1 -0
  64. package/dist/utils/md.d.ts +24 -0
  65. package/dist/utils/md.d.ts.map +1 -0
  66. package/package.json +48 -0
  67. package/src/event-tracking.ts +117 -0
  68. package/src/index.ts +4 -0
  69. package/src/tools/components/__tests__/get-component-docs.test.ts +58 -0
  70. package/src/tools/components/__tests__/list-components.test.ts +63 -0
  71. package/src/tools/components/context/__test__/get-components-data.test.ts +57 -0
  72. package/src/tools/components/context/__test__/test-components/FixtureButton.tsx +18 -0
  73. package/src/tools/components/context/__test__/test-components/index.ts +1 -0
  74. package/src/tools/components/context/__test__/test-components/tsconfig.json +11 -0
  75. package/src/tools/components/context/extract-component-docgen-info.ts +108 -0
  76. package/src/tools/components/context/get-components-data.ts +94 -0
  77. package/src/tools/components/context/index.ts +4 -0
  78. package/src/tools/components/context/render-component-doc.ts +89 -0
  79. package/src/tools/components/get-component-docs.ts +26 -0
  80. package/src/tools/components/list-components.ts +36 -0
  81. package/src/tools/index.ts +5 -0
  82. package/src/tools/search-icon/__tests__/get-icons-data.test.ts +22 -0
  83. package/src/tools/search-icon/__tests__/search-icon.test.ts +235 -0
  84. package/src/tools/search-icon/__tests__/test-icons/NotIcon.md +1 -0
  85. package/src/tools/search-icon/__tests__/test-icons/OtherIcon.svg +1 -0
  86. package/src/tools/search-icon/__tests__/test-icons/TokyoUIClose.svg +1 -0
  87. package/src/tools/search-icon/__tests__/test-icons/TokyoUIHelp.svg +1 -0
  88. package/src/tools/search-icon/get-icons-data.ts +19 -0
  89. package/src/tools/search-icon/search-icon.ts +100 -0
  90. package/src/tools/search-token/__tests__/search-token-by-name.test.ts +384 -0
  91. package/src/tools/search-token/__tests__/search-token-by-value.test.ts +250 -0
  92. package/src/tools/search-token/context/__tests__/get-tokens-data.test.ts +148 -0
  93. package/src/tools/search-token/context/get-tokens-data.ts +103 -0
  94. package/src/tools/search-token/context/index.ts +4 -0
  95. package/src/tools/search-token/search-token-by-name.ts +110 -0
  96. package/src/tools/search-token/search-token-by-value.ts +107 -0
  97. package/src/tools/search-token/token-utils.ts +60 -0
  98. package/src/types.ts +3 -0
  99. package/src/utils/create-search-index.ts +121 -0
  100. package/src/utils/define-tool.ts +67 -0
  101. package/src/utils/format-list.ts +38 -0
  102. package/src/utils/md.ts +12 -0
  103. package/tsconfig.json +11 -0
  104. package/vite.config.ts +23 -0
@@ -0,0 +1,67 @@
1
+ import * as z from 'zod';
2
+
3
+ /**
4
+ * Resolves callback parameter types based on which schemas a tool defines.
5
+ * Uses `[T] extends [never]` (wrapped in tuple) instead of `T extends never`
6
+ * to prevent TypeScript from collapsing the conditional via distributive behavior.
7
+ *
8
+ * - Both Arguments and Options are `never` -> callback takes no parameters
9
+ * - Only Options defined -> callback takes parsed Options
10
+ * - Only Arguments defined -> callback takes parsed Arguments
11
+ * - Both defined -> callback takes merged Arguments & Options
12
+ */
13
+ type CallbackParameters<
14
+ Arguments extends z.AnyZodObject = never,
15
+ Options extends z.AnyZodObject = never,
16
+ > = [Arguments] extends [never]
17
+ ? [Options] extends [never]
18
+ ? []
19
+ : [z.input<Options>]
20
+ : [Options] extends [never]
21
+ ? [z.input<Arguments>]
22
+ : [z.input<Arguments> & z.input<Options>];
23
+
24
+ /**
25
+ * Shape of a single AI tool definition.
26
+ *
27
+ * A tool has a CLI-style interface with positional `arguments` and named
28
+ * `options`, both validated at runtime via Zod schemas. The `callback`
29
+ * receives the parsed (and type-safe) values and must return an array of
30
+ * output lines that are surfaced to the calling agent.
31
+ */
32
+ export type Tool<
33
+ Arguments extends z.AnyZodObject = never,
34
+ Options extends z.AnyZodObject = never,
35
+ > = {
36
+ /** The tool name. Used when using as MCP tool. */
37
+ name: string;
38
+ /** The tool description. Used when using as MCP tool and displayed as a help message to CLI command. */
39
+ description: string;
40
+ /** Positional arguments schema. Omit if the tool takes no positional args. */
41
+ arguments?: Arguments;
42
+ /** Named options/flags schema. Omit if the tool takes no options. */
43
+ options?: Options;
44
+ /** Executes the tool logic; returns output lines shown to the agent. */
45
+ callback: (...args: CallbackParameters<Arguments, Options>) => string[];
46
+ };
47
+
48
+ /**
49
+ * Identity helper that infers the generic types from the tool object literal,
50
+ * giving full type-safety on `callback` params without manual type annotations.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * const myTool = defineTool({
55
+ * name: 'greet',
56
+ * description: 'Say hello',
57
+ * arguments: z.object({ name: z.string() }),
58
+ * callback: (args) => [`Hello, ${args.name}!`], // args is typed automatically
59
+ * });
60
+ * ```
61
+ */
62
+ export function defineTool<
63
+ Arguments extends z.AnyZodObject = never,
64
+ Options extends z.AnyZodObject = never,
65
+ >(tool: Tool<Arguments, Options>) {
66
+ return tool;
67
+ }
@@ -0,0 +1,38 @@
1
+ import { stringify } from 'yaml';
2
+
3
+ /**
4
+ * Formats a list of objects into readable string.
5
+ *
6
+ * @example
7
+ * ```
8
+ * const list = [
9
+ * { name: 'John', age: 30 },
10
+ * { name: 'Jane', age: 25 },
11
+ * ];
12
+ * const formattedList = formatList(list);
13
+ * ```
14
+ *
15
+ * returns:
16
+ * ```
17
+ * ---
18
+ * name: John
19
+ * age: 30
20
+ * ---
21
+ * name: Jane
22
+ * age: 25
23
+ * ---
24
+ * ```
25
+ */
26
+ export function formatList(list: unknown[]) {
27
+ if (list.length === 0) return '';
28
+
29
+ const delimiter = '\n---\n';
30
+
31
+ return ['', ...list.map(item => stringify(item).trim()), ''].join(delimiter).trim();
32
+ }
33
+
34
+ export function formatListInline(list: unknown[]) {
35
+ if (list.length === 0) return '';
36
+
37
+ return list.join(', ');
38
+ }
@@ -0,0 +1,12 @@
1
+ import * as tsmd from 'ts-markdown-builder';
2
+ import { stringify } from 'yaml';
3
+
4
+ function frontMatter(object: Record<string, unknown>): string {
5
+ if (Object.keys(object).length === 0) return '';
6
+
7
+ const yaml = stringify(object).trim();
8
+
9
+ return [tsmd.horizontalRule, yaml, tsmd.horizontalRule].join('\n');
10
+ }
11
+
12
+ export const md = { ...tsmd, frontMatter, comment: (comment: string) => `<!-- ${comment} -->` };
package/tsconfig.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": ["src", "package.json"],
4
+ "exclude": ["node_modules", "dist"],
5
+ "compilerOptions": {
6
+ "resolveJsonModule": true,
7
+ "module": "esnext",
8
+ "target": "esnext",
9
+ "types": ["vitest/globals", "node"]
10
+ }
11
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { builtinModules } from 'node:module';
2
+ import { defineConfig } from 'vite';
3
+ import dts from 'vite-plugin-dts';
4
+ import macros from 'unplugin-macros/vite';
5
+
6
+ const nodeBuiltins = builtinModules.flatMap(m => [m, `node:${m}`]);
7
+
8
+ export default defineConfig({
9
+ plugins: [dts({ exclude: ['vite.config.ts'], entryRoot: 'src' }), macros()],
10
+ build: {
11
+ target: 'esnext',
12
+ lib: {
13
+ entry: 'src/index.ts',
14
+ formats: ['es'],
15
+ },
16
+ rolldownOptions: {
17
+ external: nodeBuiltins,
18
+ output: {
19
+ entryFileNames: '[name].js',
20
+ },
21
+ },
22
+ },
23
+ });