cadorange 0.2.0 → 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.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ //#region src/cli.d.ts
2
+ /**
3
+ * `cado` CLI — run / describe / export models from the command line.
4
+ *
5
+ * Skeleton stage: only --help works; subcommands land with the M0 milestone.
6
+ */
7
+ /** Entry point, exported for tests. Returns the desired process exit code. */
8
+ export declare function main(argv: string[]): number;
9
+ //#endregion
package/dist/cli.js ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ //#region src/cli.ts
3
+ /**
4
+ * `cado` CLI — run / describe / export models from the command line.
5
+ *
6
+ * Skeleton stage: only --help works; subcommands land with the M0 milestone.
7
+ */
8
+ const USAGE = `cado — agent-native CAD CLI (M0 skeleton)
9
+
10
+ Usage:
11
+ cado run <model.ts> [--render iso,top,front] [--export step,stl]
12
+ cado describe <model.ts> [--json]
13
+ cado --help
14
+
15
+ Subcommands are not implemented yet. See the roadmap in the repository README.
16
+ `;
17
+ /** Entry point, exported for tests. Returns the desired process exit code. */
18
+ function main(argv) {
19
+ const [cmd] = argv;
20
+ if (!cmd || cmd === "--help" || cmd === "-h") {
21
+ process.stdout.write(USAGE);
22
+ return cmd ? 0 : 1;
23
+ }
24
+ process.stderr.write(`cado: "${cmd}" is not implemented yet (M0 skeleton)\n`);
25
+ return 1;
26
+ }
27
+ if (typeof process !== "undefined" && (process.argv[1]?.endsWith("cli.ts") || process.argv[1]?.endsWith("cli.js"))) process.exitCode = main(process.argv.slice(2));
28
+ //#endregion
29
+ export { main };
@@ -0,0 +1,108 @@
1
+ import { a as ShapeList, f as ShapeHandle, i as Shape, n as Edge, o as Solid, r as Face, y as Loc } from "./index-DceghC4N.js";
2
+ import "occt.ts";
3
+ //#region src/io/index.d.ts
4
+ type ExportFormat = "step" | "stl" | "glb";
5
+ declare function exportStep(s: Shape): Uint8Array;
6
+ declare function exportStl(s: Shape, tolerance?: number): string;
7
+ declare function exportGlb(s: Shape): Uint8Array;
8
+ declare function importStep(data: Uint8Array | string): Promise<Solid>;
9
+ /** Writes a shape to disk (Node). Extension picks the format. */
10
+ declare function exportShape(s: Shape, path: string, opts?: {
11
+ tolerance?: number;
12
+ }): Promise<void>;
13
+ //#endregion
14
+ //#region src/kernel/occt.d.ts
15
+ interface InitOptions {
16
+ /** Explicit URL or path to the OCCT WASM binary (file, http(s) or data:). */
17
+ wasmUrl?: string;
18
+ }
19
+ /** Loads the OCCT WASM kernel exactly once per process (idempotent). */
20
+ declare function init(opts?: InitOptions): Promise<void>;
21
+ //#endregion
22
+ //#region src/ops/index.d.ts
23
+ declare function fuse(a: Solid, b: Shape, opts?: {
24
+ clean?: boolean;
25
+ }): Solid;
26
+ declare function cut(a: Solid, b: Shape, opts?: {
27
+ clean?: boolean;
28
+ }): Solid;
29
+ /** build123d `intersect` — OCCT `common`. */
30
+ declare function intersect(a: Solid, b: Shape, opts?: {
31
+ clean?: boolean;
32
+ }): Solid;
33
+ /** Keep the OCCT name for code translated from CadQuery. */
34
+ declare const common: typeof intersect;
35
+ declare function fillet(s: Shape, edges: ShapeList<Edge> | readonly Edge[], radius: number): Solid;
36
+ /** Equal-distance chamfer; asymmetric needs kernel support (R3). */
37
+ declare function chamfer(s: Shape, edges: ShapeList<Edge> | readonly Edge[], distance: number): Solid;
38
+ declare function translate(s: Shape, by: readonly [number, number, number]): Solid;
39
+ /** M1: extrude a 2D sketch into a solid. */
40
+ declare function extrude(_sketch: unknown, _height: number): Solid;
41
+ /** M1: revolve a 2D sketch around an axis. */
42
+ declare function revolve(_sketch: unknown, _axis: unknown, _angle?: number): Solid;
43
+ //#endregion
44
+ //#region src/primitives/index.d.ts
45
+ declare function Box(dx: number, dy: number, dz: number, loc?: Loc): Solid;
46
+ declare function Cylinder(opts: {
47
+ radius: number;
48
+ height: number;
49
+ loc?: Loc;
50
+ }): Solid;
51
+ declare function Sphere(opts: {
52
+ radius: number;
53
+ loc?: Loc;
54
+ }): Solid;
55
+ declare function Cone(opts: {
56
+ radius1: number;
57
+ radius2: number;
58
+ height: number;
59
+ loc?: Loc;
60
+ }): Solid;
61
+ declare function Torus(opts: {
62
+ radius1: number;
63
+ radius2: number;
64
+ loc?: Loc;
65
+ }): Solid;
66
+ //#endregion
67
+ //#region src/record.d.ts
68
+ /**
69
+ * Op recording — the day-one rule from docs/architecture.md §3.3:
70
+ * every mutating core operation goes through `record()`, so the runtime
71
+ * Session/OpLog can observe, snapshot and replay the exact same stream
72
+ * regardless of which API style (core algebra or workplane facade) produced it.
73
+ *
74
+ * With no subscribers installed this is a transparent pass-through.
75
+ */
76
+ interface OpRecord {
77
+ /** Monotonic, process-wide — the id the OpLog keys snapshots by. */
78
+ readonly id: number;
79
+ readonly type: string;
80
+ readonly args: unknown;
81
+ }
82
+ type OpStatus = "done" | "error";
83
+ interface OpEvent {
84
+ readonly op: OpRecord;
85
+ readonly status: OpStatus;
86
+ readonly result?: ShapeHandle;
87
+ readonly error?: unknown;
88
+ }
89
+ type OpListener = (event: OpEvent) => void;
90
+ /** Subscribe to every recorded operation. Returns an unsubscribe function. */
91
+ declare function onOp(listener: OpListener): () => void;
92
+ /**
93
+ * Runs `run()` and records it as one op. Errors propagate unchanged after
94
+ * being recorded — structured error mapping (runtime) subscribes via onOp.
95
+ */
96
+ declare function record<T>(type: string, args: unknown, run: () => T): T;
97
+ //#endregion
98
+ //#region src/selectors/index.d.ts
99
+ type SubShape = Face | Edge;
100
+ interface Selector {
101
+ /** The source string, for error messages and op-log readability. */
102
+ readonly source: string;
103
+ select(items: readonly SubShape[]): SubShape[];
104
+ }
105
+ /** Parses a CadQuery-style selector string into an executable selector. */
106
+ declare function parseSelector(source: string): Selector;
107
+ //#endregion
108
+ export { exportStl as A, translate as C, exportGlb as D, ExportFormat as E, exportShape as O, revolve as S, init as T, cut as _, OpListener as a, fuse as b, onOp as c, Cone as d, Cylinder as f, common as g, chamfer as h, OpEvent as i, importStep as j, exportStep as k, record as l, Torus as m, SubShape as n, OpRecord as o, Sphere as p, parseSelector as r, OpStatus as s, Selector as t, Box as u, extrude as v, InitOptions as w, intersect as x, fillet as y };
package/dist/index.d.ts CHANGED
@@ -1,108 +1,3 @@
1
1
  import { C as Vec3, E as v, S as Plane, T as planeFrom, _ as AxisName, a as ShapeList, b as Location, c as EdgeMeta, d as Kernel, f as ShapeHandle, g as Axis3, h as Axis, i as Shape, l as FaceMeta, m as SurfaceKind, n as Edge, o as Solid, p as ShapeMeta, r as Face, s as CurveKind, t as Describe, u as HoleMeta, v as BBox, w as axisByName, x as Mesh, y as Loc } from "./index-DceghC4N.js";
2
- import "occt.ts";
3
- //#region src/io/index.d.ts
4
- type ExportFormat = "step" | "stl" | "glb";
5
- export declare function exportStep(s: Shape): Uint8Array;
6
- export declare function exportStl(s: Shape, tolerance?: number): string;
7
- export declare function exportGlb(s: Shape): Uint8Array;
8
- export declare function importStep(data: Uint8Array | string): Promise<Solid>;
9
- /** Writes a shape to disk (Node). Extension picks the format. */
10
- export declare function exportShape(s: Shape, path: string, opts?: {
11
- tolerance?: number;
12
- }): Promise<void>;
13
- //#endregion
14
- //#region src/kernel/occt.d.ts
15
- interface InitOptions {
16
- /** Explicit URL or path to the OCCT WASM binary (file, http(s) or data:). */
17
- wasmUrl?: string;
18
- }
19
- /** Loads the OCCT WASM kernel exactly once per process (idempotent). */
20
- export declare function init(opts?: InitOptions): Promise<void>;
21
- //#endregion
22
- //#region src/ops/index.d.ts
23
- export declare function fuse(a: Solid, b: Shape, opts?: {
24
- clean?: boolean;
25
- }): Solid;
26
- export declare function cut(a: Solid, b: Shape, opts?: {
27
- clean?: boolean;
28
- }): Solid;
29
- /** build123d `intersect` — OCCT `common`. */
30
- export declare function intersect(a: Solid, b: Shape, opts?: {
31
- clean?: boolean;
32
- }): Solid;
33
- /** Keep the OCCT name for code translated from CadQuery. */
34
- export declare const common: typeof intersect;
35
- export declare function fillet(s: Shape, edges: ShapeList<Edge> | readonly Edge[], radius: number): Solid;
36
- /** Equal-distance chamfer; asymmetric needs kernel support (R3). */
37
- export declare function chamfer(s: Shape, edges: ShapeList<Edge> | readonly Edge[], distance: number): Solid;
38
- export declare function translate(s: Shape, by: readonly [number, number, number]): Solid;
39
- /** M1: extrude a 2D sketch into a solid. */
40
- export declare function extrude(_sketch: unknown, _height: number): Solid;
41
- /** M1: revolve a 2D sketch around an axis. */
42
- export declare function revolve(_sketch: unknown, _axis: unknown, _angle?: number): Solid;
43
- //#endregion
44
- //#region src/primitives/index.d.ts
45
- export declare function Box(dx: number, dy: number, dz: number, loc?: Loc): Solid;
46
- export declare function Cylinder(opts: {
47
- radius: number;
48
- height: number;
49
- loc?: Loc;
50
- }): Solid;
51
- export declare function Sphere(opts: {
52
- radius: number;
53
- loc?: Loc;
54
- }): Solid;
55
- export declare function Cone(opts: {
56
- radius1: number;
57
- radius2: number;
58
- height: number;
59
- loc?: Loc;
60
- }): Solid;
61
- export declare function Torus(opts: {
62
- radius1: number;
63
- radius2: number;
64
- loc?: Loc;
65
- }): Solid;
66
- //#endregion
67
- //#region src/record.d.ts
68
- /**
69
- * Op recording — the day-one rule from docs/architecture.md §3.3:
70
- * every mutating core operation goes through `record()`, so the runtime
71
- * Session/OpLog can observe, snapshot and replay the exact same stream
72
- * regardless of which API style (core algebra or workplane facade) produced it.
73
- *
74
- * With no subscribers installed this is a transparent pass-through.
75
- */
76
- interface OpRecord {
77
- /** Monotonic, process-wide — the id the OpLog keys snapshots by. */
78
- readonly id: number;
79
- readonly type: string;
80
- readonly args: unknown;
81
- }
82
- type OpStatus = "done" | "error";
83
- interface OpEvent {
84
- readonly op: OpRecord;
85
- readonly status: OpStatus;
86
- readonly result?: ShapeHandle;
87
- readonly error?: unknown;
88
- }
89
- type OpListener = (event: OpEvent) => void;
90
- /** Subscribe to every recorded operation. Returns an unsubscribe function. */
91
- export declare function onOp(listener: OpListener): () => void;
92
- /**
93
- * Runs `run()` and records it as one op. Errors propagate unchanged after
94
- * being recorded — structured error mapping (runtime) subscribes via onOp.
95
- */
96
- export declare function record<T>(type: string, args: unknown, run: () => T): T;
97
- //#endregion
98
- //#region src/selectors/index.d.ts
99
- type SubShape = Face | Edge;
100
- interface Selector {
101
- /** The source string, for error messages and op-log readability. */
102
- readonly source: string;
103
- select(items: readonly SubShape[]): SubShape[];
104
- }
105
- /** Parses a CadQuery-style selector string into an executable selector. */
106
- export declare function parseSelector(source: string): Selector;
107
- //#endregion
108
- export { Axis, type Axis3, type AxisName, type BBox, type CurveKind, type Describe, Edge, type EdgeMeta, type ExportFormat, Face, type FaceMeta, type HoleMeta, type InitOptions, type Kernel, type Loc, type Location, type Mesh, type OpEvent, type OpListener, type OpRecord, type OpStatus, type Plane, type Selector, Shape, type ShapeHandle, ShapeList, type ShapeMeta, Solid, type SubShape, type SurfaceKind, type Vec3, axisByName, planeFrom, v };
2
+ import { A as exportStl, C as translate, D as exportGlb, E as ExportFormat, O as exportShape, S as revolve, T as init, _ as cut, a as OpListener, b as fuse, c as onOp, d as Cone, f as Cylinder, g as common, h as chamfer, i as OpEvent, j as importStep, k as exportStep, l as record, m as Torus, n as SubShape, o as OpRecord, p as Sphere, r as parseSelector, s as OpStatus, t as Selector, u as Box, v as extrude, w as InitOptions, x as intersect, y as fillet } from "./index-DzJsXME9.js";
3
+ export { Axis, type Axis3, type AxisName, type BBox, Box, Cone, type CurveKind, Cylinder, type Describe, Edge, type EdgeMeta, type ExportFormat, Face, type FaceMeta, type HoleMeta, type InitOptions, type Kernel, type Loc, type Location, type Mesh, type OpEvent, type OpListener, type OpRecord, type OpStatus, type Plane, type Selector, Shape, type ShapeHandle, ShapeList, type ShapeMeta, Solid, Sphere, type SubShape, type SurfaceKind, Torus, type Vec3, axisByName, chamfer, common, cut, exportGlb, exportShape, exportStep, exportStl, extrude, fillet, fuse, importStep, init, intersect, onOp, parseSelector, planeFrom, record, revolve, translate, v };
package/dist/index.js CHANGED
@@ -1,18 +1,6 @@
1
1
  import { a as importStep, i as exportStl, n as exportShape, r as exportStep, t as exportGlb } from "./io-DD2D1UYF.js";
2
2
  import { _ as Axis, a as Sphere, b as v, c as Face, d as Solid, g as init, i as Cylinder, l as Shape, m as record, n as Box, o as Torus, p as onOp, r as Cone, s as Edge, t as parseSelector, u as ShapeList, v as axisByName, y as planeFrom } from "./selectors-C0-da9aQ.js";
3
- //#region src/util.ts
4
- /** Thrown by every skeleton stub until the real M0 implementation lands. */
5
- var NotImplementedError = class extends Error {
6
- constructor(what) {
7
- super(`${what} is not implemented yet — this is the M0 repository skeleton.`);
8
- this.name = "NotImplementedError";
9
- }
10
- };
11
- /** Stub body helper: keeps signatures real while bodies wait for M0. */
12
- function todo(what) {
13
- throw new NotImplementedError(what);
14
- }
15
- //#endregion
3
+ import { t as todo } from "./util-DeKC5Om9.js";
16
4
  //#region src/ops/index.ts
17
5
  function fuse(a, b, opts) {
18
6
  return a.fuse(b, opts);
@@ -0,0 +1,14 @@
1
+ //#region src/mcp/index.d.ts
2
+ export interface McpServerOptions {
3
+ name?: string;
4
+ version?: string;
5
+ /** stdio is the only transport planned for M0. */
6
+ transport?: "stdio";
7
+ }
8
+ /** Starts the cadorange MCP server (tools: run, describe, render, export). */
9
+ export declare function startMcpServer(_opts?: McpServerOptions): Promise<void>;
10
+ /** Thrown by every skeleton stub until the real M0 implementation lands. */
11
+ export declare class NotImplementedError extends Error {
12
+ constructor(what: string);
13
+ }
14
+ //#endregion
@@ -0,0 +1,17 @@
1
+ //#region src/mcp/index.ts
2
+ /** Starts the cadorange MCP server (tools: run, describe, render, export). */
3
+ async function startMcpServer(_opts = {}) {
4
+ todo("startMcpServer");
5
+ }
6
+ /** Thrown by every skeleton stub until the real M0 implementation lands. */
7
+ var NotImplementedError = class extends Error {
8
+ constructor(what) {
9
+ super(`${what} is not implemented yet — this is the M0 repository skeleton.`);
10
+ this.name = "NotImplementedError";
11
+ }
12
+ };
13
+ function todo(what) {
14
+ throw new NotImplementedError(what);
15
+ }
16
+ //#endregion
17
+ export { NotImplementedError, startMcpServer };
@@ -0,0 +1,21 @@
1
+ import { i as Shape } from "../index-DceghC4N.js";
2
+ import "../index-DzJsXME9.js";
3
+ //#region src/render/index.d.ts
4
+ export type View = "iso" | "top" | "front" | "back" | "left" | "right" | "bottom";
5
+ export interface RenderOptions {
6
+ views?: View[];
7
+ /** Square output size in pixels (default 512). */
8
+ size?: number;
9
+ format?: "png" | "svg";
10
+ }
11
+ export interface Rendered {
12
+ view: View;
13
+ format: "png" | "svg";
14
+ data: Uint8Array;
15
+ }
16
+ /**
17
+ * Renders a shape from multiple views without a GPU or a browser window,
18
+ * so vision models can check their own work.
19
+ */
20
+ export declare function render(shape: Shape, opts?: RenderOptions): Promise<Rendered[]>;
21
+ //#endregion
@@ -0,0 +1,11 @@
1
+ import { t as todo } from "../util-DeKC5Om9.js";
2
+ //#region src/render/index.ts
3
+ /**
4
+ * Renders a shape from multiple views without a GPU or a browser window,
5
+ * so vision models can check their own work.
6
+ */
7
+ async function render(shape, opts = {}) {
8
+ todo("render");
9
+ }
10
+ //#endregion
11
+ export { render };
@@ -0,0 +1,83 @@
1
+ import { t as Describe } from "../index-DceghC4N.js";
2
+ import "../index-DzJsXME9.js";
3
+ //#region src/runtime/types.d.ts
4
+ type Op = {
5
+ id: number;
6
+ type: string;
7
+ args: Record<string, unknown>;
8
+ inputs: number[];
9
+ };
10
+ interface OpLog {
11
+ ops: Op[];
12
+ append(op: Op): number;
13
+ slice(to: number): OpLog;
14
+ }
15
+ interface Snapshot {
16
+ id: string;
17
+ opIndex: number;
18
+ hash: string;
19
+ }
20
+ /** Enumerable error codes — exhaustiveness matters for eval/RL statistics. */
21
+ type ErrorCode = "NOT_IMPLEMENTED" | "FILLET_RADIUS_TOO_LARGE" | "BOOLEAN_FAILED" | "INVALID_SHAPE" | "INVALID_OP" | "TIMEOUT" | "OUT_OF_MEMORY" | "OP_LIMIT_EXCEEDED" | "UNKNOWN";
22
+ interface OpError {
23
+ code: ErrorCode;
24
+ op?: Op;
25
+ message: string;
26
+ /** Executable fix suggestion, aimed at agents. */
27
+ hint?: string;
28
+ context?: {
29
+ maxRadius?: number;
30
+ failingEdges?: number[];
31
+ };
32
+ }
33
+ type RunResult = {
34
+ ok: true;
35
+ snapshot: Snapshot;
36
+ describe: Describe;
37
+ warnings: string[];
38
+ } | {
39
+ ok: false;
40
+ error: OpError;
41
+ lastGood: Snapshot;
42
+ };
43
+ interface Limits {
44
+ timeoutMs?: number;
45
+ memoryMB?: number;
46
+ maxOps?: number;
47
+ }
48
+ interface SessionOptions {
49
+ limits?: Limits;
50
+ seed?: number;
51
+ }
52
+ //#endregion
53
+ //#region src/runtime/index.d.ts
54
+ export interface RenderOpts {
55
+ views?: string[];
56
+ size?: number;
57
+ format?: "png" | "svg";
58
+ }
59
+ export type ExportFormat = "step" | "stl" | "glb" | "brep";
60
+ /**
61
+ * An agent-facing modeling session.
62
+ *
63
+ * `run` and `apply` both write into the same OpLog; every core op funnels
64
+ * through a single record() entry point so the log is always complete.
65
+ * That invariant is fixed from day one — retrofitting it later is painful.
66
+ */
67
+ export declare class Session {
68
+ static create(_opts?: SessionOptions): Promise<Session>;
69
+ /** Runs TypeScript modeling code in the sandbox. */
70
+ run(_code: string): Promise<RunResult>;
71
+ /** Applies one structured action (same log, no code). */
72
+ apply(_op: Op): Promise<RunResult>;
73
+ /** Cheap: op index plus cached shape hashes, no geometry copy. */
74
+ snapshot(): Snapshot;
75
+ fork(_snap?: Snapshot): Session;
76
+ rollback(_snap: Snapshot): void;
77
+ describe(): Describe;
78
+ render(_opts: RenderOpts): Promise<Uint8Array[]>;
79
+ export(_fmt: ExportFormat): Promise<Uint8Array>;
80
+ get limits(): Limits;
81
+ }
82
+ //#endregion
83
+ export type { ErrorCode, Limits, Op, OpError, OpLog, RunResult, SessionOptions, Snapshot };
@@ -0,0 +1,46 @@
1
+ import { t as todo } from "../util-DeKC5Om9.js";
2
+ //#region src/runtime/index.ts
3
+ /**
4
+ * An agent-facing modeling session.
5
+ *
6
+ * `run` and `apply` both write into the same OpLog; every core op funnels
7
+ * through a single record() entry point so the log is always complete.
8
+ * That invariant is fixed from day one — retrofitting it later is painful.
9
+ */
10
+ var Session = class {
11
+ static async create(_opts = {}) {
12
+ todo("Session.create");
13
+ }
14
+ /** Runs TypeScript modeling code in the sandbox. */
15
+ async run(_code) {
16
+ todo("Session.run");
17
+ }
18
+ /** Applies one structured action (same log, no code). */
19
+ async apply(_op) {
20
+ todo("Session.apply");
21
+ }
22
+ /** Cheap: op index plus cached shape hashes, no geometry copy. */
23
+ snapshot() {
24
+ todo("Session.snapshot");
25
+ }
26
+ fork(_snap) {
27
+ todo("Session.fork");
28
+ }
29
+ rollback(_snap) {
30
+ todo("Session.rollback");
31
+ }
32
+ describe() {
33
+ todo("Session.describe");
34
+ }
35
+ async render(_opts) {
36
+ todo("Session.render");
37
+ }
38
+ async export(_fmt) {
39
+ todo("Session.export");
40
+ }
41
+ get limits() {
42
+ return todo("Session.limits");
43
+ }
44
+ };
45
+ //#endregion
46
+ export { Session };
@@ -0,0 +1,14 @@
1
+ //#region src/util.ts
2
+ /** Thrown by every skeleton stub until the real M0 implementation lands. */
3
+ var NotImplementedError = class extends Error {
4
+ constructor(what) {
5
+ super(`${what} is not implemented yet — this is the M0 repository skeleton.`);
6
+ this.name = "NotImplementedError";
7
+ }
8
+ };
9
+ /** Stub body helper: keeps signatures real while bodies wait for M0. */
10
+ function todo(what) {
11
+ throw new NotImplementedError(what);
12
+ }
13
+ //#endregion
14
+ export { todo as t };
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "cadorange",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Agent-native CAD runtime in TypeScript, powered by occt.ts (OCCT/WASM). Core modeling API: shapes, selectors, booleans, features, import/export.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "git+https://github.com/LAU-MARS/cadorange.git",
10
- "directory": "packages/cadorange"
9
+ "url": "git+https://github.com/LAU-MARS/cadorange.git"
11
10
  },
12
11
  "sideEffects": false,
12
+ "bin": {
13
+ "cado": "./dist/cli.js"
14
+ },
13
15
  "exports": {
14
16
  ".": {
15
17
  "types": "./dist/index.d.ts",
@@ -18,6 +20,18 @@
18
20
  "./workplane": {
19
21
  "types": "./dist/workplane/index.d.ts",
20
22
  "default": "./dist/workplane/index.js"
23
+ },
24
+ "./runtime": {
25
+ "types": "./dist/runtime/index.d.ts",
26
+ "default": "./dist/runtime/index.js"
27
+ },
28
+ "./render": {
29
+ "types": "./dist/render/index.d.ts",
30
+ "default": "./dist/render/index.js"
31
+ },
32
+ "./mcp": {
33
+ "types": "./dist/mcp/index.d.ts",
34
+ "default": "./dist/mcp/index.js"
21
35
  }
22
36
  },
23
37
  "files": [