@robota-sdk/pack-coding 3.0.0-beta.100

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/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # @robota-sdk/pack-coding
2
+
3
+ Robota's coding capability as a single
4
+ [`ICapabilityPack`](../agent-capability-pack/README.md): the built-in coding tools, the coding command
5
+ modules, and the coding subagents in one unit that `assembleProduct` can add to any product. The
6
+ The host CLI can compose it for its coding assistant.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @robota-sdk/pack-coding
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ```ts
17
+ import { assembleProduct } from '@robota-sdk/agent-product';
18
+ import { createCodingPack } from '@robota-sdk/pack-coding';
19
+ import type { IAIProvider, IProviderDefinition } from '@robota-sdk/agent-core';
20
+
21
+ declare const providerDefinitions: readonly IProviderDefinition[];
22
+ declare const provider: IAIProvider;
23
+
24
+ const cwd = process.cwd();
25
+ const product = assembleProduct({
26
+ id: 'acme-assistant',
27
+ providerDefinitions,
28
+ // The coding tools, /shell + /editor + /git commands, and coding subagents. The file tools are
29
+ // scoped to the cwd you build the pack with.
30
+ packs: [createCodingPack({ cwd })],
31
+ });
32
+
33
+ const session = product.buildRuntime({ session: { cwd, provider } });
34
+ void session;
35
+ ```
36
+
37
+ The pack bundles:
38
+
39
+ - **tools** — `Shell`, `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `WebSearch`,
40
+ `AskUserQuestion` (from `@robota-sdk/agent-tool-defaults`' `createDefaultTools`).
41
+ - **commandModules** — `/shell`, `/editor`, and `/git` (from `@robota-sdk/agent-command`).
42
+ - **subagents** — `general-purpose`, `Explore`, `Plan` (agent-framework's built-in agents).
43
+
44
+ `createCodingPack` passes its `cwd` and optional `sandboxClient` straight to the default tool factory,
45
+ so the pack adds, drops, or reorders none of those tools. Its other options are `shellExecutable` (the
46
+ shell for the tools and `/shell`) and `editorTemporaryDirectoryPrefix` (for `/editor`).
47
+
48
+ ## Why a factory, and why `cwd` is required
49
+
50
+ There is deliberately **no context-free `codingPack` constant**. The tool layer refuses a missing
51
+ execution root, and this factory also requires `cwd` so each pack's file tools are scoped to the
52
+ session that constructs it. That matters most when a product hands its whole tool surface to packs by
53
+ passing `defaultTools: []` in the session options. See [`docs/SPEC.md`](./docs/SPEC.md).
54
+
55
+ ## License
56
+
57
+ AGPL-3.0-only OR LicenseRef-Commercial
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@robota-sdk/agent-command"),t=require("@robota-sdk/agent-framework"),n=require("@robota-sdk/agent-tool-defaults");function r(r){return{id:`coding`,title:`Coding`,description:`Built-in coding capability: file/shell tools, /shell + /editor + /git commands, and the coding subagents.`,tools:(0,n.createDefaultTools)({cwd:r.cwd,httpUserAgent:r.httpUserAgent,...r.shellExecutable===void 0?{}:{shellExecutable:r.shellExecutable},...r.sandboxClient?{sandboxClient:r.sandboxClient}:{},...r.editorFiles?{editorFiles:r.editorFiles}:{}}),commandModules:[(0,e.createShellCommandModule)(r.shellExecutable),(0,e.createEditorCommandModule)(r.editorTemporaryDirectoryPrefix),(0,e.createGitCommandModule)()],subagents:t.BUILT_IN_AGENTS}}exports.createCodingPack=r;
@@ -0,0 +1,74 @@
1
+ import { ICapabilityPack } from "@robota-sdk/agent-capability-pack";
2
+ import { IEditorFileAccess, ISandboxClient } from "@robota-sdk/agent-tools";
3
+ //#region src/coding-pack.d.ts
4
+ /**
5
+ * The session context agent's coding tools are bound to.
6
+ *
7
+ * `cwd` is **required, not optional** — and that is the whole point of this factory. `agent-tools`'
8
+ * `checkPathWithinCwd` USED TO BE a no-op when `cwd` was `undefined`, so file tools constructed with no
9
+ * options carried a DISARMED working-directory guard: their `Read` returned `/etc/hostname`. Before
10
+ * ARCH-006 that was inert, because the framework's own context-bound default tier always won a name
11
+ * collision. Once a product could hand the entire tool surface to its packs (`defaultTools: []`), a
12
+ * context-free pack became an unsandboxed `Read`/`Write`/`Edit`.
13
+ *
14
+ * ARCH-010 has since fixed the layer below: the guard refuses when no root is configured, and the tool
15
+ * factories require `cwd` themselves. This requirement is therefore no longer load-bearing on its own —
16
+ * it is the precedent the audit's fix followed, and it stays because the scoping decision should be
17
+ * impossible to forget at every layer, not only the lowest one.
18
+ */
19
+ interface ICodingPackOptions {
20
+ /** Product-host shell choice for tools and the interactive /shell command. */
21
+ shellExecutable?: string;
22
+ /** HTTP identity selected by the product host. */
23
+ httpUserAgent?: string;
24
+ /** Product-owned prefix for the interactive editor's temporary directory. */
25
+ editorTemporaryDirectoryPrefix?: string;
26
+ /**
27
+ * Working-directory root the host file tools (`Read`/`Write`/`Edit`) are restricted to. Required: see
28
+ * the interface note above. Pass the same value the session is assembled with.
29
+ */
30
+ cwd: string;
31
+ /**
32
+ * Optional provider sandbox client. Shell commands always run through it; file tools do only when its
33
+ * filesystem is `separate` (then the sandbox is the isolation boundary and the host-only search tools
34
+ * are withheld). With a `shared` filesystem, file tools stay on the host under the path guard.
35
+ */
36
+ sandboxClient?: ISandboxClient;
37
+ /**
38
+ * An editor that has the workspace open, asked at each call: the host file tools read and write
39
+ * through what it offers. Absent, or answering `undefined`, means the disk.
40
+ */
41
+ editorFiles?: () => IEditorFileAccess | undefined;
42
+ }
43
+ /**
44
+ * Build agent's coding capability as a single {@link ICapabilityPack}, bound to one session context.
45
+ *
46
+ * This is the additive-axis proof for ARCH-005 and agent's first capability pack: a pack can bundle
47
+ * agent's real coding capability (tools + command modules + subagents) and be composed additively by
48
+ * `assembleProduct` on top of any product's base — and, since ARCH-006, can OWN the product's tool surface
49
+ * outright when the profile suppresses the framework tier with `defaultTools: []`.
50
+ *
51
+ * - **tools** — `createDefaultTools()` from `@robota-sdk/agent-tool-defaults`, CONSUMED rather than
52
+ * mirrored (ARCH-035). That set is shell/bash/read/write/edit/glob/grep/webFetch/webSearch/
53
+ * askUserQuestion; the adapter-gated tools (`CodebaseRetrieval`, `Computer`) appear only when their
54
+ * adapter or driver is supplied, and this pack supplies neither. Until ARCH-035 the list was rebuilt
55
+ * here from the `@robota-sdk/agent-tools` factories and held to the defaults by a NAME-equality test
56
+ * — a pin that let ARCH-021's first TC-05 pass while being unable to fail, because comparing names
57
+ * cannot distinguish a pack-composed surface from an imported-default one when the two are pinned.
58
+ * The relationship is structural now, so there is no drift left to pin.
59
+ * - **commandModules** — the coding command modules: `/shell`, `/editor` and `/git` (the capability-level
60
+ * command modules, distinct from product-shell/settings/provider command infrastructure).
61
+ * - **subagents** — agent's built-in coding subagents (`general-purpose`, `Explore`, `Plan`).
62
+ *
63
+ * This pack contributes only when a product profile lists it (opt-in); every contributed command/tool runs
64
+ * only through the permission-gated runtime at call time.
65
+ *
66
+ * **Per-call instances, deliberately.** Each call builds fresh tool and command-module objects bound to the
67
+ * supplied context, so two products assembled in one process get independently-scoped file tools. There is
68
+ * no module-level singleton: a shared constant could only ever be context-free, which is exactly the hazard
69
+ * this factory exists to remove.
70
+ */
71
+ declare function createCodingPack(options: ICodingPackOptions): ICapabilityPack;
72
+ //#endregion
73
+ export { type ICodingPackOptions, createCodingPack };
74
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/coding-pack.ts"],"mappings":";;;;;;;;;;;;;;;;;;UA0BiB;;EAEf;;EAEA;;EAEA;;;;;EAKA;;;;;;EAMA,gBAAgB;;;;;EAKhB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BN,iBAAiB,SAAS,qBAAqB"}
@@ -0,0 +1,74 @@
1
+ import { ICapabilityPack } from "@robota-sdk/agent-capability-pack";
2
+ import { IEditorFileAccess, ISandboxClient } from "@robota-sdk/agent-tools";
3
+ //#region src/coding-pack.d.ts
4
+ /**
5
+ * The session context agent's coding tools are bound to.
6
+ *
7
+ * `cwd` is **required, not optional** — and that is the whole point of this factory. `agent-tools`'
8
+ * `checkPathWithinCwd` USED TO BE a no-op when `cwd` was `undefined`, so file tools constructed with no
9
+ * options carried a DISARMED working-directory guard: their `Read` returned `/etc/hostname`. Before
10
+ * ARCH-006 that was inert, because the framework's own context-bound default tier always won a name
11
+ * collision. Once a product could hand the entire tool surface to its packs (`defaultTools: []`), a
12
+ * context-free pack became an unsandboxed `Read`/`Write`/`Edit`.
13
+ *
14
+ * ARCH-010 has since fixed the layer below: the guard refuses when no root is configured, and the tool
15
+ * factories require `cwd` themselves. This requirement is therefore no longer load-bearing on its own —
16
+ * it is the precedent the audit's fix followed, and it stays because the scoping decision should be
17
+ * impossible to forget at every layer, not only the lowest one.
18
+ */
19
+ interface ICodingPackOptions {
20
+ /** Product-host shell choice for tools and the interactive /shell command. */
21
+ shellExecutable?: string;
22
+ /** HTTP identity selected by the product host. */
23
+ httpUserAgent?: string;
24
+ /** Product-owned prefix for the interactive editor's temporary directory. */
25
+ editorTemporaryDirectoryPrefix?: string;
26
+ /**
27
+ * Working-directory root the host file tools (`Read`/`Write`/`Edit`) are restricted to. Required: see
28
+ * the interface note above. Pass the same value the session is assembled with.
29
+ */
30
+ cwd: string;
31
+ /**
32
+ * Optional provider sandbox client. Shell commands always run through it; file tools do only when its
33
+ * filesystem is `separate` (then the sandbox is the isolation boundary and the host-only search tools
34
+ * are withheld). With a `shared` filesystem, file tools stay on the host under the path guard.
35
+ */
36
+ sandboxClient?: ISandboxClient;
37
+ /**
38
+ * An editor that has the workspace open, asked at each call: the host file tools read and write
39
+ * through what it offers. Absent, or answering `undefined`, means the disk.
40
+ */
41
+ editorFiles?: () => IEditorFileAccess | undefined;
42
+ }
43
+ /**
44
+ * Build agent's coding capability as a single {@link ICapabilityPack}, bound to one session context.
45
+ *
46
+ * This is the additive-axis proof for ARCH-005 and agent's first capability pack: a pack can bundle
47
+ * agent's real coding capability (tools + command modules + subagents) and be composed additively by
48
+ * `assembleProduct` on top of any product's base — and, since ARCH-006, can OWN the product's tool surface
49
+ * outright when the profile suppresses the framework tier with `defaultTools: []`.
50
+ *
51
+ * - **tools** — `createDefaultTools()` from `@robota-sdk/agent-tool-defaults`, CONSUMED rather than
52
+ * mirrored (ARCH-035). That set is shell/bash/read/write/edit/glob/grep/webFetch/webSearch/
53
+ * askUserQuestion; the adapter-gated tools (`CodebaseRetrieval`, `Computer`) appear only when their
54
+ * adapter or driver is supplied, and this pack supplies neither. Until ARCH-035 the list was rebuilt
55
+ * here from the `@robota-sdk/agent-tools` factories and held to the defaults by a NAME-equality test
56
+ * — a pin that let ARCH-021's first TC-05 pass while being unable to fail, because comparing names
57
+ * cannot distinguish a pack-composed surface from an imported-default one when the two are pinned.
58
+ * The relationship is structural now, so there is no drift left to pin.
59
+ * - **commandModules** — the coding command modules: `/shell`, `/editor` and `/git` (the capability-level
60
+ * command modules, distinct from product-shell/settings/provider command infrastructure).
61
+ * - **subagents** — agent's built-in coding subagents (`general-purpose`, `Explore`, `Plan`).
62
+ *
63
+ * This pack contributes only when a product profile lists it (opt-in); every contributed command/tool runs
64
+ * only through the permission-gated runtime at call time.
65
+ *
66
+ * **Per-call instances, deliberately.** Each call builds fresh tool and command-module objects bound to the
67
+ * supplied context, so two products assembled in one process get independently-scoped file tools. There is
68
+ * no module-level singleton: a shared constant could only ever be context-free, which is exactly the hazard
69
+ * this factory exists to remove.
70
+ */
71
+ declare function createCodingPack(options: ICodingPackOptions): ICapabilityPack;
72
+ //#endregion
73
+ export { type ICodingPackOptions, createCodingPack };
74
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/coding-pack.ts"],"mappings":";;;;;;;;;;;;;;;;;;UA0BiB;;EAEf;;EAEA;;EAEA;;;;;EAKA;;;;;;EAMA,gBAAgB;;;;;EAKhB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BN,iBAAiB,SAAS,qBAAqB"}
@@ -0,0 +1,2 @@
1
+ import{createEditorCommandModule as e,createGitCommandModule as t,createShellCommandModule as n}from"@robota-sdk/agent-command";import{BUILT_IN_AGENTS as r}from"@robota-sdk/agent-framework";import{createDefaultTools as i}from"@robota-sdk/agent-tool-defaults";function a(a){return{id:`coding`,title:`Coding`,description:`Built-in coding capability: file/shell tools, /shell + /editor + /git commands, and the coding subagents.`,tools:i({cwd:a.cwd,httpUserAgent:a.httpUserAgent,...a.shellExecutable===void 0?{}:{shellExecutable:a.shellExecutable},...a.sandboxClient?{sandboxClient:a.sandboxClient}:{},...a.editorFiles?{editorFiles:a.editorFiles}:{}}),commandModules:[n(a.shellExecutable),e(a.editorTemporaryDirectoryPrefix),t()],subagents:r}}export{a as createCodingPack};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/coding-pack.ts"],"sourcesContent":["import {\n createEditorCommandModule,\n createGitCommandModule,\n createShellCommandModule,\n} from '@robota-sdk/agent-command';\nimport { BUILT_IN_AGENTS } from '@robota-sdk/agent-framework';\nimport { createDefaultTools } from '@robota-sdk/agent-tool-defaults';\n\nimport type { ICapabilityPack } from '@robota-sdk/agent-capability-pack';\nimport type { IEditorFileAccess, ISandboxClient } from '@robota-sdk/agent-tools';\n\n/**\n * The session context agent's coding tools are bound to.\n *\n * `cwd` is **required, not optional** — and that is the whole point of this factory. `agent-tools`'\n * `checkPathWithinCwd` USED TO BE a no-op when `cwd` was `undefined`, so file tools constructed with no\n * options carried a DISARMED working-directory guard: their `Read` returned `/etc/hostname`. Before\n * ARCH-006 that was inert, because the framework's own context-bound default tier always won a name\n * collision. Once a product could hand the entire tool surface to its packs (`defaultTools: []`), a\n * context-free pack became an unsandboxed `Read`/`Write`/`Edit`.\n *\n * ARCH-010 has since fixed the layer below: the guard refuses when no root is configured, and the tool\n * factories require `cwd` themselves. This requirement is therefore no longer load-bearing on its own —\n * it is the precedent the audit's fix followed, and it stays because the scoping decision should be\n * impossible to forget at every layer, not only the lowest one.\n */\nexport interface ICodingPackOptions {\n /** Product-host shell choice for tools and the interactive /shell command. */\n shellExecutable?: string;\n /** HTTP identity selected by the product host. */\n httpUserAgent?: string;\n /** Product-owned prefix for the interactive editor's temporary directory. */\n editorTemporaryDirectoryPrefix?: string;\n /**\n * Working-directory root the host file tools (`Read`/`Write`/`Edit`) are restricted to. Required: see\n * the interface note above. Pass the same value the session is assembled with.\n */\n cwd: string;\n /**\n * Optional provider sandbox client. Shell commands always run through it; file tools do only when its\n * filesystem is `separate` (then the sandbox is the isolation boundary and the host-only search tools\n * are withheld). With a `shared` filesystem, file tools stay on the host under the path guard.\n */\n sandboxClient?: ISandboxClient;\n /**\n * An editor that has the workspace open, asked at each call: the host file tools read and write\n * through what it offers. Absent, or answering `undefined`, means the disk.\n */\n editorFiles?: () => IEditorFileAccess | undefined;\n}\n\n/**\n * Build agent's coding capability as a single {@link ICapabilityPack}, bound to one session context.\n *\n * This is the additive-axis proof for ARCH-005 and agent's first capability pack: a pack can bundle\n * agent's real coding capability (tools + command modules + subagents) and be composed additively by\n * `assembleProduct` on top of any product's base — and, since ARCH-006, can OWN the product's tool surface\n * outright when the profile suppresses the framework tier with `defaultTools: []`.\n *\n * - **tools** — `createDefaultTools()` from `@robota-sdk/agent-tool-defaults`, CONSUMED rather than\n * mirrored (ARCH-035). That set is shell/bash/read/write/edit/glob/grep/webFetch/webSearch/\n * askUserQuestion; the adapter-gated tools (`CodebaseRetrieval`, `Computer`) appear only when their\n * adapter or driver is supplied, and this pack supplies neither. Until ARCH-035 the list was rebuilt\n * here from the `@robota-sdk/agent-tools` factories and held to the defaults by a NAME-equality test\n * — a pin that let ARCH-021's first TC-05 pass while being unable to fail, because comparing names\n * cannot distinguish a pack-composed surface from an imported-default one when the two are pinned.\n * The relationship is structural now, so there is no drift left to pin.\n * - **commandModules** — the coding command modules: `/shell`, `/editor` and `/git` (the capability-level\n * command modules, distinct from product-shell/settings/provider command infrastructure).\n * - **subagents** — agent's built-in coding subagents (`general-purpose`, `Explore`, `Plan`).\n *\n * This pack contributes only when a product profile lists it (opt-in); every contributed command/tool runs\n * only through the permission-gated runtime at call time.\n *\n * **Per-call instances, deliberately.** Each call builds fresh tool and command-module objects bound to the\n * supplied context, so two products assembled in one process get independently-scoped file tools. There is\n * no module-level singleton: a shared constant could only ever be context-free, which is exactly the hazard\n * this factory exists to remove.\n */\nexport function createCodingPack(options: ICodingPackOptions): ICapabilityPack {\n const toolOptions = {\n cwd: options.cwd,\n httpUserAgent: options.httpUserAgent,\n ...(options.shellExecutable !== undefined ? { shellExecutable: options.shellExecutable } : {}),\n ...(options.sandboxClient ? { sandboxClient: options.sandboxClient } : {}),\n ...(options.editorFiles ? { editorFiles: options.editorFiles } : {}),\n };\n\n return {\n id: 'coding',\n title: 'Coding',\n description:\n \"Built-in coding capability: file/shell tools, /shell + /editor + /git commands, and the coding subagents.\",\n // ARCH-035: the always-present default set, consumed from its owner rather than rebuilt here.\n //\n // This list used to be hand-maintained, identical to `createDefaultTools()`'s always-present\n // tier, and the two were held together by a test asserting their NAMES matched. That pin is what\n // let ARCH-021's first TC-05 pass without being able to fail: comparing tool names cannot tell a\n // pack-composed surface from an imported-default one when the pack is pinned to the defaults.\n // Consuming the set makes the relationship structural, so there is nothing left to drift.\n //\n // The adapter-gated tools stay out, as before: `createDefaultTools` adds `CodebaseRetrieval` only\n // when given a `retrievalAdapter` and the Computer tools only when given a `computerDriver`, and\n // this pack supplies neither. SEC-007 still holds — `cwd` is REQUIRED here, so the file-tool\n // guard cannot be disarmed by omission, and the leaf threads it into every tool it builds.\n tools: createDefaultTools(toolOptions),\n commandModules: [\n createShellCommandModule(options.shellExecutable),\n createEditorCommandModule(options.editorTemporaryDirectoryPrefix),\n createGitCommandModule(),\n ],\n subagents: BUILT_IN_AGENTS,\n };\n}\n"],"mappings":"mQA+EA,SAAgB,EAAiB,EAA8C,CAS7E,MAAO,CACL,GAAI,SACJ,MAAO,SACP,YACE,4GAaF,MAAO,EAAmB,CAxB1B,IAAK,EAAQ,IACb,cAAe,EAAQ,cACvB,GAAI,EAAQ,kBAAoB,IAAA,GAA2D,CAAC,EAAhD,CAAE,gBAAiB,EAAQ,eAAgB,EACvF,GAAI,EAAQ,cAAgB,CAAE,cAAe,EAAQ,aAAc,EAAI,CAAC,EACxE,GAAI,EAAQ,YAAc,CAAE,YAAa,EAAQ,WAAY,EAAI,CAAC,CAoB9B,CAAC,EACrC,eAAgB,CACd,EAAyB,EAAQ,eAAe,EAChD,EAA0B,EAAQ,8BAA8B,EAChE,EAAuB,CACzB,EACA,UAAW,CACb,CACF"}
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@robota-sdk/pack-coding",
3
+ "version": "3.0.0-beta.100",
4
+ "description": "Robota's coding capability pack — an ICapabilityPack bundling the built-in coding tools, coding command modules, and coding subagents",
5
+ "type": "module",
6
+ "main": "dist/node/index.js",
7
+ "types": "dist/node/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "source": "./src/index.ts",
11
+ "node": {
12
+ "import": {
13
+ "types": "./dist/node/index.d.ts",
14
+ "default": "./dist/node/index.js"
15
+ },
16
+ "require": {
17
+ "types": "./dist/node/index.d.cts",
18
+ "default": "./dist/node/index.cjs"
19
+ }
20
+ },
21
+ "default": {
22
+ "import": {
23
+ "types": "./dist/node/index.d.ts",
24
+ "default": "./dist/node/index.js"
25
+ },
26
+ "require": {
27
+ "types": "./dist/node/index.d.cts",
28
+ "default": "./dist/node/index.cjs"
29
+ }
30
+ }
31
+ },
32
+ "./package.json": "./package.json"
33
+ },
34
+ "engines": {
35
+ "node": ">=22.12.0"
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "CHANGELOG.md"
40
+ ],
41
+ "dependencies": {
42
+ "@robota-sdk/agent-command": "3.0.0-beta.100",
43
+ "@robota-sdk/agent-framework": "3.0.0-beta.100",
44
+ "@robota-sdk/agent-capability-pack": "3.0.0-beta.100",
45
+ "@robota-sdk/agent-tool-defaults": "3.0.0-beta.100",
46
+ "@robota-sdk/agent-tools": "3.0.0-beta.100"
47
+ },
48
+ "devDependencies": {
49
+ "rimraf": "^5.0.10",
50
+ "tsdown": "^0.22.14",
51
+ "typescript": "^6.0.3",
52
+ "vitest": "^3.2.6"
53
+ },
54
+ "license": "AGPL-3.0-only OR LicenseRef-Commercial",
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "volta": {
59
+ "extends": "../../package.json"
60
+ },
61
+ "repository": {
62
+ "type": "git",
63
+ "url": "https://github.com/woojubb/robota"
64
+ },
65
+ "bugs": {
66
+ "url": "https://github.com/woojubb/robota/issues"
67
+ },
68
+ "homepage": "https://robota.io/",
69
+ "scripts": {
70
+ "build": "rimraf dist && tsdown",
71
+ "build:js": "pnpm run build",
72
+ "build:types": "pnpm run build",
73
+ "test": "vitest run --passWithNoTests",
74
+ "test:coverage": "vitest run --coverage --passWithNoTests",
75
+ "typecheck": "tsgo --noEmit",
76
+ "lint": "eslint src/ --ext .ts",
77
+ "clean": "rimraf dist"
78
+ }
79
+ }