@matchbox-ai/train 0.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 (95) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +3 -0
  4. package/THIRD-PARTY-NOTICES.md +17 -0
  5. package/dist/codecs/index.d.ts +2 -0
  6. package/dist/codecs/index.d.ts.map +1 -0
  7. package/dist/define-pipeline-Colvwt7u.js +32 -0
  8. package/dist/define-pipeline-Colvwt7u.js.map +1 -0
  9. package/dist/encoders/index.d.ts +3 -0
  10. package/dist/encoders/index.d.ts.map +1 -0
  11. package/dist/encoders/word-tokens.d.ts +5 -0
  12. package/dist/encoders/word-tokens.d.ts.map +1 -0
  13. package/dist/evaluate-sequence-ZCwyomzQ.js +42 -0
  14. package/dist/evaluate-sequence-ZCwyomzQ.js.map +1 -0
  15. package/dist/evaluation/evaluate-sequence.d.ts +17 -0
  16. package/dist/evaluation/evaluate-sequence.d.ts.map +1 -0
  17. package/dist/evaluation/same-output.d.ts +2 -0
  18. package/dist/evaluation/same-output.d.ts.map +1 -0
  19. package/dist/index.d.ts +10 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +33 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/load-project.d.ts +34 -0
  24. package/dist/load-project.d.ts.map +1 -0
  25. package/dist/models/index.d.ts +2 -0
  26. package/dist/models/index.d.ts.map +1 -0
  27. package/dist/models/presets.d.ts +14 -0
  28. package/dist/models/presets.d.ts.map +1 -0
  29. package/dist/models/record/fit.d.ts +124 -0
  30. package/dist/models/record/fit.d.ts.map +1 -0
  31. package/dist/models/record/index.d.ts +2 -0
  32. package/dist/models/record/index.d.ts.map +1 -0
  33. package/dist/models/record/run.d.ts +115 -0
  34. package/dist/models/record/run.d.ts.map +1 -0
  35. package/dist/models/record/verify-export.d.ts +8 -0
  36. package/dist/models/record/verify-export.d.ts.map +1 -0
  37. package/dist/models/sequence/create-network.d.ts +3 -0
  38. package/dist/models/sequence/create-network.d.ts.map +1 -0
  39. package/dist/models/sequence/fit-sequence.d.ts +139 -0
  40. package/dist/models/sequence/fit-sequence.d.ts.map +1 -0
  41. package/dist/models/sequence/index.d.ts +3 -0
  42. package/dist/models/sequence/index.d.ts.map +1 -0
  43. package/dist/models/sequence/run-sequence.d.ts +162 -0
  44. package/dist/models/sequence/run-sequence.d.ts.map +1 -0
  45. package/dist/models/sequence/types.d.ts +10 -0
  46. package/dist/models/sequence/types.d.ts.map +1 -0
  47. package/dist/package-model-CPj0qnQs.js +18 -0
  48. package/dist/package-model-CPj0qnQs.js.map +1 -0
  49. package/dist/packaging/package-model.d.ts +3 -0
  50. package/dist/packaging/package-model.d.ts.map +1 -0
  51. package/dist/pipeline/define-pipeline.d.ts +20 -0
  52. package/dist/pipeline/define-pipeline.d.ts.map +1 -0
  53. package/dist/pipeline/index.d.ts +3 -0
  54. package/dist/pipeline/index.d.ts.map +1 -0
  55. package/dist/project/artifact.d.ts +129 -0
  56. package/dist/project/artifact.d.ts.map +1 -0
  57. package/dist/project/config.d.ts +37 -0
  58. package/dist/project/config.d.ts.map +1 -0
  59. package/dist/project/discover.d.ts +2 -0
  60. package/dist/project/discover.d.ts.map +1 -0
  61. package/dist/project/index.d.ts +4 -0
  62. package/dist/project/index.d.ts.map +1 -0
  63. package/dist/project/index.js +2 -0
  64. package/dist/project-BP331m20.js +125 -0
  65. package/dist/project-BP331m20.js.map +1 -0
  66. package/dist/record-BTZ5LWHF.js +205 -0
  67. package/dist/record-BTZ5LWHF.js.map +1 -0
  68. package/dist/run-Cwa7vD_T.js +72 -0
  69. package/dist/run-Cwa7vD_T.js.map +1 -0
  70. package/dist/run.d.ts +273 -0
  71. package/dist/run.d.ts.map +1 -0
  72. package/dist/sequence-C_WfVGO1.js +251 -0
  73. package/dist/sequence-C_WfVGO1.js.map +1 -0
  74. package/dist/train.d.ts +276 -0
  75. package/dist/train.d.ts.map +1 -0
  76. package/dist/types.d.ts +17 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/docs/README.md +9 -0
  79. package/docs/agent-skill.md +22 -0
  80. package/docs/cli.md +54 -0
  81. package/docs/dataset-format.md +58 -0
  82. package/docs/end-to-end.md +3 -0
  83. package/docs/evaluation.md +9 -0
  84. package/docs/filter-research.md +63 -0
  85. package/docs/getting-started.md +88 -0
  86. package/docs/neural-training.md +3 -0
  87. package/docs/parser-api.md +86 -0
  88. package/docs/pipelines.md +30 -0
  89. package/docs/primitives/README.md +19 -0
  90. package/docs/project-structure.md +41 -0
  91. package/docs/react.md +16 -0
  92. package/docs/releases.md +50 -0
  93. package/docs/repository-design.md +11 -0
  94. package/docs/runtime-backends.md +18 -0
  95. package/package.json +57 -0
@@ -0,0 +1,86 @@
1
+ # Parser task API
2
+
3
+ `defineParser` describes a constrained parsing task. It validates inputs and expected outputs and exports training metadata. It does not train a model or infer a result from natural language.
4
+
5
+ ```ts
6
+ import { defineParser, type InferOutput } from "@matchbox-ai/core";
7
+ import { z } from "zod";
8
+
9
+ const task = defineParser({
10
+ input: z.string().min(1).max(200),
11
+ output: z.strictObject({
12
+ country: z.enum(["SE", "DE"]),
13
+ minimum: z.number().nonnegative(),
14
+ owner: z.string().nullable().optional(),
15
+ }),
16
+ fields: {
17
+ minimum: { type: "money", aliases: ["ARR"] },
18
+ },
19
+ });
20
+
21
+ type Output = InferOutput<typeof task>;
22
+ // { country: "SE" | "DE"; minimum: number; owner?: string | null | undefined }
23
+
24
+ const input = task.validateInput("Swedish customers above 50k");
25
+ const expected = task.validateOutput({ country: "SE", minimum: 50000 });
26
+ if (expected.success) {
27
+ const value: Output = expected.data;
28
+ console.log(value);
29
+ } else {
30
+ console.log(expected.issues); // Each issue has code, path, and message.
31
+ }
32
+
33
+ const metadata = task.toJSON();
34
+ const serialized = JSON.stringify(task); // Uses the same metadata representation.
35
+ ```
36
+
37
+ Validation returns a discriminated `ValidationResult<T>`. Invalid task definitions throw `TypeError` at definition time with a schema path. Invalid example values return issues rather than being silently normalized. There is no `parse(text)` inference method yet.
38
+
39
+ ## Supported schemas
40
+
41
+ The input is explicitly `z.string()`, optionally with supported constraints. The output root must be a strict object, array, or union of objects/arrays.
42
+
43
+ Within outputs, v0 supports:
44
+
45
+ - Strict objects with declared properties, including nested objects.
46
+ - Arrays and ordinary or discriminated unions.
47
+ - Strings, finite numbers, booleans, null, JSON literals, and enums.
48
+ - Nullable values and optional object properties. Put `.optional()` outermost and omit absent properties; explicit `undefined` is rejected.
49
+ - Finite numeric bounds, safe integers, string/array lengths, and regular expressions without flags.
50
+
51
+ Use `z.strictObject()` or `.strict()`. Ordinary `z.object()` strips unknown keys, while the serialized output contract disallows them. Requiring strict objects keeps validation behavior explicit.
52
+
53
+ Unsupported schemas fail at definition time. This includes transforms, overwrites such as `.trim()`, coercion, non-boolean defaults, catches, custom/async refinements, conditional checks, arbitrary unknown/any values, dates, bigint, records, maps, sets, tuples, intersections, lazy/recursive schemas, readonly wrappers, and string formats other than flagless regexes. Add support only when both runtime and metadata behavior are tested.
54
+
55
+ Both schema and data traversal are limited to 64 nested containers. Validation accepts plain JSON data, not class instances, accessors, sparse arrays, symbol properties, or circular references. `__proto__` is reserved because Zod omits it while constructing parsed objects.
56
+
57
+ ## Training metadata
58
+
59
+ The serialized definition contains:
60
+
61
+ ```ts
62
+ {
63
+ formatVersion: 1,
64
+ kind: "parser",
65
+ input: { /* JSON Schema draft 2020-12 */ },
66
+ output: { /* JSON Schema draft 2020-12 */ },
67
+ fields: { minimum: { type: "money", aliases: ["ARR"] } },
68
+ }
69
+ ```
70
+
71
+ Metadata is captured at definition time. Every `toJSON()` call returns a detached copy. Treat the supplied Zod schemas as immutable after definition; use Zod's schema-building methods to create a new task when its contract changes.
72
+
73
+ The format version identifies Matchbox's metadata representation, not a model or dataset version. A future loader must reject unsupported versions. This ticket provides serialization only; it does not reconstruct executable validators from JSON.
74
+
75
+ Zod's global metadata registry is intentionally excluded. `.meta()` must not override structural keywords or inject values that are not JSON. Descriptions, aliases, and semantic types belong in the optional `fields` object for now. Those hints are inert, copied JSON. Matchbox does not infer a field-to-output mapping or normalize money/countries from their names.
76
+
77
+ ## Dependency boundary
78
+
79
+ Zod 4.6.3 is an explicit, pinned core dependency and is external to the Rolldown bundle. The API uses a small isolated portion of Zod Core's schema/check definitions to reject unsupported behavior before JSON conversion. Zod upgrades must run the contract suite, including negative cases.
80
+
81
+ Validation uses Zod's non-JIT path. The browser smoke check exercises definition, validation, and metadata serialization through the built package. This is the task-authoring API; its dependency size is not a claim about the future generated inference runtime.
82
+
83
+ ## References
84
+
85
+ - [Zod JSON Schema conversion](https://zod.dev/json-schema) documents representable schemas and conversion controls.
86
+ - [Zod Core](https://zod.dev/packages/core) documents schema and check introspection.
@@ -0,0 +1,30 @@
1
+ # Explicit pipelines
2
+
3
+ The parser defines valid input and output. The pipeline defines how the model learns. Matchbox requires pipeline.ts for conventional tasks; the scaffold writes it visibly.
4
+
5
+ ```ts
6
+ import { definePipeline, wordTokens, fieldClassifier } from "@matchbox-ai/train";
7
+ export default definePipeline({
8
+ input: wordTokens(),
9
+ prediction: fieldClassifier(),
10
+ acceptance: { minAccuracy: 0.95, maxBytes: 64000 },
11
+ });
12
+ ```
13
+
14
+ This preset trains the existing bag-of-words MLP. Each output field classifies values observed in training. It cannot emit an unseen numeric value, ignores word order, and may be confidently wrong on new combinations of familiar words. Unknown vocabulary causes abstention. The CLI reports this limitation.
15
+
16
+ An explicit token pipeline uses application-owned supervision and decoding:
17
+
18
+ ```ts
19
+ import { definePipeline, tokenClassifier } from "@matchbox-ai/train";
20
+ export default definePipeline({
21
+ prediction: tokenClassifier({ recipe: "./lib/recipe.ts", decode: "./lib/decode.ts" }),
22
+ acceptance: { minAccuracy: 0.85, maxBytes: 24000 },
23
+ });
24
+ ```
25
+
26
+ Paths resolve relative to the task. The recipe supplies tokenizer, labels, readout, and annotation alignment. The decoder receives labeled spans and returns a candidate output or null. Matchbox verifies training annotations decode to the supplied training outputs. Recipe code runs during training; decoder code ships with the browser artifact and must remain browser-safe.
27
+
28
+ These are two existing, evaluated presets. Decimal codecs, arbitrary graphs, automatic architecture search, and hidden domain normalizers are not implemented. New primitives should demonstrate their limitations and held-out behavior before becoming defaults.
29
+
30
+ Programmatic training uses await train("money", { onProgress }) from @matchbox-ai/train and follows the same validation and packaging path as the CLI. Importing the authoring helpers does not initialize native TensorFlow; training loads it when invoked.
@@ -0,0 +1,19 @@
1
+ # Authoring primitives
2
+
3
+ Import these from @matchbox-ai/train:
4
+
5
+ | Primitive | Contract |
6
+ | --------------- | ------------------------------------------------------------------------------ |
7
+ | definePipeline | Validates an explicit pipeline declaration and acceptance thresholds. |
8
+ | wordTokens | Selects literal word features for field classification. |
9
+ | fieldClassifier | Selects independent categorical output heads over training values. |
10
+ | tokenClassifier | Selects the sequence trainer with explicit recipe and decoder module paths. |
11
+ | tokenize | Shares the portable tokenizer with annotation generators. |
12
+ | train | Runs project discovery, native training, validation, and packaging. |
13
+ | evaluate | Evaluates a parser against examples and a supplied output-validation function. |
14
+ | SequenceRecipe | Types application-owned sequence supervision. |
15
+ | OutputDecoder | Types a browser-safe sequence-to-output decoder. |
16
+
17
+ The field classifier derives its field names and value domains from training outputs. The output schema still independently validates predictions. The sequence recipe owns tokenization, so it cannot also specify a separate input encoder.
18
+
19
+ Tensor shapes, exported weight readers, and architecture-specific predictors belong to @matchbox-ai/core/internal. That subpath supports coordinated framework packages and research tests; application code should use the documented task, pipeline, and runtime interfaces.
@@ -0,0 +1,41 @@
1
+ # Project structure
2
+
3
+ A task is a directory under matchbox/. Each task has its own schema, explicit learning pipeline, training data, and independent evaluation data.
4
+
5
+ ```text
6
+ my-app/
7
+ src/
8
+ scripts/generate-data.ts # Optional project tooling.
9
+ matchbox/
10
+ money/
11
+ parser.ts
12
+ pipeline.ts
13
+ data/train.jsonl
14
+ evals/validation.jsonl
15
+ evals/test.jsonl
16
+ evals/baseline.ts # Optional.
17
+ lib/ # Optional application-owned helpers.
18
+ .matchbox/money/
19
+ model.matchbox
20
+ model.ts
21
+ model.d.matchbox.ts
22
+ report.json
23
+ ```
24
+
25
+ The CLI discovers these paths. Multiple tasks require an explicit name; it never silently chooses the first one. Commands can also target a project directory, task directory, or explicit matchbox.config.ts. A task-local config may override paths; ordinary examples need only parser.ts and pipeline.ts.
26
+
27
+ Generated artifacts are ignored. Validation gates packaging; test data does not select the model. Data generators live in the project-level scripts/ directory and write only matchbox/<task>/data/, preserving evals/ independently.
28
+
29
+ ## Optional task configuration
30
+
31
+ Use `matchbox/<task>/matchbox.config.ts` when your files live outside the conventional layout. Paths resolve relative to that task directory:
32
+
33
+ ```ts
34
+ export default {
35
+ train: "../../datasets/money-training.jsonl",
36
+ validation: "../../datasets/money-validation.jsonl",
37
+ eval: "../../datasets/money-test.jsonl",
38
+ };
39
+ ```
40
+
41
+ The config overrides paths and acceptance settings. Keep the encoder, supervision, prediction strategy, and decoder explicit in `pipeline.ts`. The current loader supports TypeScript configuration; there is no separate JSON config format.
package/docs/react.md ADDED
@@ -0,0 +1,16 @@
1
+ # @matchbox-ai/core/react
2
+
3
+ Load typed Matchbox parsers in React with `useMatchbox`.
4
+
5
+ ```tsx
6
+ import { useMatchbox } from "@matchbox-ai/core/react";
7
+
8
+ const loadFilters = () => import("./generated/filters.matchbox");
9
+
10
+ function Search() {
11
+ const parser = useMatchbox(loadFilters);
12
+ return <input onChange={async (event) => console.log(await parser.parse(event.target.value))} />;
13
+ }
14
+ ```
15
+
16
+ The hook exposes loading, ready, and error state. Keep the loader outside the component. React is a peer dependency of this package; core and training do not depend on React. See the [end-to-end guide](end-to-end.md).
@@ -0,0 +1,50 @@
1
+ # Releases
2
+
3
+ Changesets versions and publishes three packages together:
4
+
5
+ | Package | Purpose |
6
+ | -------------------- | -------------------------------------------- |
7
+ | `@matchbox-ai/core` | Task contracts and browser runtime. |
8
+ | `@matchbox-ai/train` | Pipeline authoring and TensorFlow training. |
9
+ | `matchbox-ai` | The CLI, scaffolding, and browser workbench. |
10
+
11
+ The repository root, apps, and examples remain private. Packages use the MIT license. Initial versions are 0.0.0; the initial changeset proposes 0.1.0.
12
+
13
+ ## Normal workflow
14
+
15
+ 1. Run `bun run changeset` alongside a package change and commit its Markdown file.
16
+ 2. Merge the feature PR. GitHub Actions creates or updates a Version Packages PR with versions, changelogs, dependency ranges, and the Bun lockfile.
17
+ 3. Merge the version PR when the release is ready. The release workflow runs the full checks and browser tests, packs the packages, and publishes the verified archives to npm. Changesets creates package tags and GitHub releases.
18
+ 4. Retry a failed publication with Run workflow on `release.yml` from main. Changesets checks the registry and skips already published versions.
19
+
20
+ The packages use a fixed version group while their APIs evolve. Internal dependency ranges are updated by Changesets. Run `bun run changeset status` to inspect the next release. Run `bun run release:pack` after building to inspect publishable archives without publishing.
21
+
22
+ ## npm and GitHub setup
23
+
24
+ Ensure you control `matchbox-ai` and the `@matchbox-ai` scope. Enable **Allow GitHub Actions to create and approve pull requests** in the repository's Actions settings.
25
+
26
+ For each npm package, configure a GitHub trusted publisher with:
27
+
28
+ - Owner: `alexpatow`.
29
+ - Repository: `matchbox`.
30
+ - Workflow filename: `release.yml`.
31
+ - Environment: leave blank.
32
+ - Allowed action: enable direct `npm publish`.
33
+
34
+ The workflow uses Node 24 and npm OIDC authentication. No npm token is stored in GitHub. Only the publish job receives `id-token: write`; build and validation run separately. The repository is currently private, so provenance is disabled for it. The workflow enables provenance if the repository becomes public.
35
+
36
+ Trusted publisher settings are configured per existing npm package. If the names have not been published yet, bootstrap the first version from the merged Version Packages commit using an authenticated npm account with access to the names:
37
+
38
+ ```sh
39
+ bun install --frozen-lockfile
40
+ bun run check
41
+ bun run test:browser
42
+ npm login
43
+ bun run release
44
+ ```
45
+
46
+ Complete npm's authentication prompts, then configure the three trusted publishers for subsequent releases. Do not run `release` from a feature branch or publish version 0.0.0. Setting up this workflow does not itself claim npm names or configure their trusted publishers.
47
+
48
+ The CLI declares its training and runtime dependencies so `bunx matchbox-ai init` can work before the app has any Matchbox packages installed. Scaffolding writes registry versions from the running release, preserving dependencies already present in the app.
49
+
50
+ This follows [Changesets' automation guide](https://changesets.dev/guide/automating) and [npm's trusted publishing setup](https://docs.npmjs.com/trusted-publishers/).
@@ -0,0 +1,11 @@
1
+ # Repository design
2
+
3
+ Bun workspaces contain three framework packages. packages/core owns parser definitions, datasets, TensorFlow model loading, React, and Vite integration. packages/train owns explicit pipeline primitives, native training, evaluation, and packaging. packages/cli owns the command-line workflow, scaffolding templates, and browser workbench. It calls the train and evaluate APIs from @matchbox-ai/train and project loading from @matchbox-ai/train/project. Cross-package imports use exports. Core/internal is reserved for framework implementation, while runtime exports stay application-facing.
4
+
5
+ Each examples/<example>/matchbox/<task> is independently trainable through the same CLI conventions. apps/playground hosts the React/Vite demo and imports generated artifacts from examples. apps/benchmarks measures browser inference separately. No training dependencies enter the playground browser graph.
6
+
7
+ Core source is organized under parser/, runtime/tensorflow/, react/, vite/, dataset/, and internal/. Train source separates pipeline/, encoders/, models/, codecs/, evaluation/, packaging/, and project/. CLI source separates commands/ and workbench/, with the browser UI in packages/cli/workbench/. Public index.ts files only re-export. Existing token codecs remain application-owned.
8
+
9
+ Rolldown builds ESM and TypeScript emits declarations. Public docs are copied into each package during builds for coding-agent access; root docs/ remains the source of truth. The skill lives in skills/matchbox/SKILL.md. Generated weights and copied package docs remain ignored.
10
+
11
+ Run bun run check and bun run test:browser before proposing a PR. Do not merge without instruction. Preserve independent evaluation fixtures during migrations and training-data regeneration.
@@ -0,0 +1,18 @@
1
+ # Browser runtime
2
+
3
+ ```ts
4
+ import { matchbox } from "@matchbox-ai/core/vite";
5
+ export default { plugins: [matchbox()] };
6
+ ```
7
+
8
+ Matchbox uses TensorFlow.js CPU for browser inference. There is no runtime selector or handwritten JS evaluator. Artifacts carry TensorFlow model topology and named weights; the runtime loads them with loadLayersModel and executes model.predict. Matchbox adapts input features and output predictions, validates results, and supports abstention.
9
+
10
+ Native TensorFlow trains the model. Before export completes, the toolchain captures native predictions and compares them with the serialized model loaded on TensorFlow.js CPU. This checks export fidelity without maintaining a second inference engine.
11
+
12
+ TensorFlow loads lazily on the first parse. A parser retains its loaded model and exposes dispose(). Shared generated modules live for the application lifetime; the Vite plugin disposes them on HMR. Explicitly created instances should be disposed by their owner. React hooks do not dispose shared model modules when one component unmounts.
13
+
14
+ Direct creation is available through @matchbox-ai/core/runtime. Inference selects TensorFlow's process-wide CPU backend. Browser apps that separately use TensorFlow should isolate unrelated backend use in another worker. Native training runs through the training toolchain and is kept out of browser entry points.
15
+
16
+ Artifact format 2 includes the serialized TensorFlow model. Regenerate artifacts produced by earlier versions with matchbox-ai train. apps/benchmarks measures loading and warm inference of the shipped runtime. Cold timing includes lazy TensorFlow loading after the benchmark page itself has loaded. Mobile browser-test profiles emulate device settings on desktop hardware, not physical-phone performance.
17
+
18
+ Call `await parser.load()` to initialize before the first parse, for example before going offline. The React hook waits for this initialization before reporting `ready`.
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@matchbox-ai/train",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/alexpatow/matchbox.git",
8
+ "directory": "packages/train"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "docs",
14
+ "LICENSE",
15
+ "THIRD-PARTY-NOTICES.md",
16
+ "CHANGELOG.md"
17
+ ],
18
+ "type": "module",
19
+ "sideEffects": false,
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ },
25
+ "./project": {
26
+ "types": "./dist/project/index.d.ts",
27
+ "import": "./dist/project/index.js"
28
+ }
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "scripts": {
34
+ "build": "bun ../../scripts/package-docs.ts train && rolldown --config && tsc -p tsconfig.build.json",
35
+ "dev": "bun run --parallel \"dev:*\"",
36
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.tools.json",
37
+ "dev:js": "rolldown --config --watch",
38
+ "dev:types": "tsc -p tsconfig.build.json --watch"
39
+ },
40
+ "dependencies": {
41
+ "@tensorflow/tfjs-node": "4.22.0",
42
+ "zod": "4.6.3"
43
+ },
44
+ "devDependencies": {
45
+ "@matchbox-ai/core": "0.1.0",
46
+ "@types/node": "22.20.2",
47
+ "rolldown": "1.2.8",
48
+ "typescript": "7.0.2"
49
+ },
50
+ "peerDependencies": {
51
+ "@matchbox-ai/core": "0.1.0"
52
+ },
53
+ "engines": {
54
+ "bun": ">=1.4.2",
55
+ "node": ">=24"
56
+ }
57
+ }