@dot-ai/cli 0.5.2

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jonathan Gelin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,276 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { mkdtemp, mkdir, writeFile, readFile, access } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { loadConfig, registerDefaults, clearProviders, createProviders, boot, enrich, } from '@dot-ai/core';
6
+ // ── init command logic ───────────────────────────────────────────────────────
7
+ async function runInit(root) {
8
+ const aiDir = join(root, '.ai');
9
+ const lines = [];
10
+ try {
11
+ await access(join(aiDir, 'dot-ai.yml'));
12
+ lines.push('.ai/dot-ai.yml already exists. Nothing to do.');
13
+ return lines.join('\n');
14
+ }
15
+ catch {
16
+ // Doesn't exist, create it
17
+ }
18
+ await mkdir(aiDir, { recursive: true });
19
+ await writeFile(join(aiDir, 'dot-ai.yml'), [
20
+ '# dot-ai configuration',
21
+ '# Uncomment and customize providers as needed.',
22
+ '# Default: file-based providers reading from .ai/ directory.',
23
+ '#',
24
+ '# memory:',
25
+ '# use: "@dot-ai/provider-file-memory"',
26
+ '#',
27
+ '# skills:',
28
+ '# use: "@dot-ai/provider-file-skills"',
29
+ '#',
30
+ '# routing:',
31
+ '# use: "@dot-ai/provider-rules-routing"',
32
+ '',
33
+ ].join('\n'));
34
+ await writeFile(join(aiDir, 'AGENTS.md'), [
35
+ '# AGENTS.md',
36
+ '',
37
+ '> Your workspace rules and conventions go here.',
38
+ '',
39
+ '## Rules',
40
+ '',
41
+ '- ...',
42
+ '',
43
+ ].join('\n'));
44
+ lines.push('Created:');
45
+ lines.push(' .ai/dot-ai.yml (config)');
46
+ lines.push(' .ai/AGENTS.md (template)');
47
+ lines.push('\nNext: add SOUL.md, USER.md, skills/, memory/ as needed.');
48
+ return lines.join('\n');
49
+ }
50
+ // ── helpers ──────────────────────────────────────────────────────────────────
51
+ async function setupAiDir(root) {
52
+ const ai = join(root, '.ai');
53
+ await mkdir(ai, { recursive: true });
54
+ await mkdir(join(ai, 'memory'), { recursive: true });
55
+ await mkdir(join(ai, 'skills', 'ts-standards'), { recursive: true });
56
+ await mkdir(join(ai, 'skills', 'code-review'), { recursive: true });
57
+ await mkdir(join(ai, 'tools'), { recursive: true });
58
+ await writeFile(join(ai, 'AGENTS.md'), '# AGENTS.md\n\nYou are Kiwi.');
59
+ await writeFile(join(ai, 'SOUL.md'), '# SOUL.md\n\nBe genuine.');
60
+ await writeFile(join(ai, 'USER.md'), '# USER.md\n\nJo, developer.');
61
+ await writeFile(join(ai, 'IDENTITY.md'), '# IDENTITY.md\n\nName: Kiwi');
62
+ await writeFile(join(ai, 'skills', 'ts-standards', 'SKILL.md'), [
63
+ '---',
64
+ 'description: TypeScript coding standards',
65
+ 'labels: [typescript, code, standards]',
66
+ 'triggers: [auto]',
67
+ '---',
68
+ '',
69
+ '## TypeScript Standards',
70
+ '- Use strict mode',
71
+ ].join('\n'));
72
+ await writeFile(join(ai, 'skills', 'code-review', 'SKILL.md'), [
73
+ '---',
74
+ 'description: Code review guidelines',
75
+ 'labels: [review, code-fix, bug]',
76
+ 'triggers: [auto]',
77
+ '---',
78
+ '',
79
+ '## Code Review',
80
+ '- Check for edge cases',
81
+ ].join('\n'));
82
+ await writeFile(join(ai, 'tools', 'eslint.yaml'), [
83
+ 'name: eslint',
84
+ 'description: TypeScript linter',
85
+ 'labels: [typescript, lint, code]',
86
+ ].join('\n'));
87
+ await writeFile(join(ai, 'memory', '2026-03-01.md'), [
88
+ '- Fixed auth middleware N+1 query bug',
89
+ '- Decided to use JWT for auth tokens',
90
+ ].join('\n'));
91
+ await writeFile(join(ai, 'dot-ai.yml'), [
92
+ '# dot-ai config',
93
+ 'memory:',
94
+ ' use: @dot-ai/provider-file-memory',
95
+ ` root: ${root}`,
96
+ 'skills:',
97
+ ' use: @dot-ai/provider-file-skills',
98
+ ` root: ${root}`,
99
+ 'identity:',
100
+ ' use: @dot-ai/provider-file-identity',
101
+ ` root: ${root}`,
102
+ 'routing:',
103
+ ' use: @dot-ai/provider-rules-routing',
104
+ 'tasks:',
105
+ ' use: @dot-ai/provider-file-tasks',
106
+ ` root: ${root}`,
107
+ 'tools:',
108
+ ' use: @dot-ai/provider-file-tools',
109
+ ` root: ${root}`,
110
+ ].join('\n'));
111
+ }
112
+ // ── init tests ───────────────────────────────────────────────────────────────
113
+ describe('init command', () => {
114
+ let root;
115
+ beforeEach(async () => {
116
+ root = await mkdtemp(join(tmpdir(), 'dot-ai-cli-init-'));
117
+ });
118
+ it('creates .ai/dot-ai.yml in empty directory', async () => {
119
+ await runInit(root);
120
+ const content = await readFile(join(root, '.ai', 'dot-ai.yml'), 'utf8');
121
+ expect(content).toContain('# dot-ai configuration');
122
+ });
123
+ it('creates .ai/AGENTS.md in empty directory', async () => {
124
+ await runInit(root);
125
+ const content = await readFile(join(root, '.ai', 'AGENTS.md'), 'utf8');
126
+ expect(content).toContain('# AGENTS.md');
127
+ });
128
+ it('dot-ai.yml contains commented provider examples', async () => {
129
+ await runInit(root);
130
+ const content = await readFile(join(root, '.ai', 'dot-ai.yml'), 'utf8');
131
+ expect(content).toContain('@dot-ai/provider-file-memory');
132
+ expect(content).toContain('@dot-ai/provider-file-skills');
133
+ expect(content).toContain('@dot-ai/provider-rules-routing');
134
+ });
135
+ it('AGENTS.md is a template with ## Rules section', async () => {
136
+ await runInit(root);
137
+ const content = await readFile(join(root, '.ai', 'AGENTS.md'), 'utf8');
138
+ expect(content).toContain('## Rules');
139
+ });
140
+ it('does nothing if dot-ai.yml already exists', async () => {
141
+ await mkdir(join(root, '.ai'), { recursive: true });
142
+ await writeFile(join(root, '.ai', 'dot-ai.yml'), '# existing config\n');
143
+ const output = await runInit(root);
144
+ expect(output).toContain('already exists');
145
+ // File should be unchanged
146
+ const content = await readFile(join(root, '.ai', 'dot-ai.yml'), 'utf8');
147
+ expect(content).toBe('# existing config\n');
148
+ });
149
+ it('works if .ai/ directory already exists without dot-ai.yml', async () => {
150
+ await mkdir(join(root, '.ai'), { recursive: true });
151
+ await writeFile(join(root, '.ai', 'AGENTS.md'), '# existing\n');
152
+ await runInit(root);
153
+ // dot-ai.yml should be created
154
+ const content = await readFile(join(root, '.ai', 'dot-ai.yml'), 'utf8');
155
+ expect(content).toContain('# dot-ai configuration');
156
+ });
157
+ });
158
+ // ── boot command logic ────────────────────────────────────────────────────────
159
+ describe('boot command (core pipeline)', () => {
160
+ let root;
161
+ beforeEach(async () => {
162
+ clearProviders();
163
+ registerDefaults();
164
+ root = await mkdtemp(join(tmpdir(), 'dot-ai-cli-boot-'));
165
+ await setupAiDir(root);
166
+ });
167
+ it('loads config and creates providers', async () => {
168
+ const config = await loadConfig(root);
169
+ const providers = await createProviders(config);
170
+ expect(providers.memory).toBeDefined();
171
+ expect(providers.skills).toBeDefined();
172
+ expect(providers.identity).toBeDefined();
173
+ expect(providers.routing).toBeDefined();
174
+ expect(providers.tools).toBeDefined();
175
+ });
176
+ it('boot returns identities, skills, vocabulary', async () => {
177
+ const config = await loadConfig(root);
178
+ const providers = await createProviders(config);
179
+ const cache = await boot(providers);
180
+ expect(cache.identities.length).toBe(4); // AGENTS, SOUL, USER, IDENTITY
181
+ expect(cache.skills.length).toBe(2); // ts-standards, code-review
182
+ expect(cache.vocabulary.length).toBeGreaterThan(0);
183
+ });
184
+ it('vocabulary contains labels from skills and tools', async () => {
185
+ const config = await loadConfig(root);
186
+ const providers = await createProviders(config);
187
+ const cache = await boot(providers);
188
+ expect(cache.vocabulary).toContain('typescript');
189
+ expect(cache.vocabulary).toContain('code');
190
+ expect(cache.vocabulary).toContain('bug');
191
+ });
192
+ it('identities have correct types', async () => {
193
+ const config = await loadConfig(root);
194
+ const providers = await createProviders(config);
195
+ const cache = await boot(providers);
196
+ const types = cache.identities.map(i => i.type);
197
+ expect(types).toContain('agents');
198
+ expect(types).toContain('soul');
199
+ expect(types).toContain('user');
200
+ expect(types).toContain('identity');
201
+ });
202
+ });
203
+ // ── trace command logic ───────────────────────────────────────────────────────
204
+ describe('trace command (enrich pipeline)', () => {
205
+ let root;
206
+ beforeEach(async () => {
207
+ clearProviders();
208
+ registerDefaults();
209
+ root = await mkdtemp(join(tmpdir(), 'dot-ai-cli-trace-'));
210
+ await setupAiDir(root);
211
+ });
212
+ it('enrich returns labels matching prompt vocabulary', async () => {
213
+ const config = await loadConfig(root);
214
+ const providers = await createProviders(config);
215
+ const cache = await boot(providers);
216
+ const ctx = await enrich('Fix the TypeScript bug', providers, cache);
217
+ expect(ctx.labels.some(l => l.name === 'typescript')).toBe(true);
218
+ expect(ctx.labels.some(l => l.name === 'bug')).toBe(true);
219
+ });
220
+ it('enrich returns matched skills for typescript prompt', async () => {
221
+ const config = await loadConfig(root);
222
+ const providers = await createProviders(config);
223
+ const cache = await boot(providers);
224
+ const ctx = await enrich('Fix the TypeScript code', providers, cache);
225
+ expect(ctx.skills.some(s => s.name === 'ts-standards')).toBe(true);
226
+ });
227
+ it('enrich returns matched tools for typescript prompt', async () => {
228
+ const config = await loadConfig(root);
229
+ const providers = await createProviders(config);
230
+ const cache = await boot(providers);
231
+ const ctx = await enrich('Fix the TypeScript bug', providers, cache);
232
+ expect(ctx.tools.some(t => t.name === 'eslint')).toBe(true);
233
+ });
234
+ it('enrich returns memories related to prompt', async () => {
235
+ const config = await loadConfig(root);
236
+ const providers = await createProviders(config);
237
+ const cache = await boot(providers);
238
+ const ctx = await enrich('Fix the auth bug', providers, cache);
239
+ expect(ctx.memories.some(m => m.content.includes('auth'))).toBe(true);
240
+ });
241
+ it('enrich returns routing result', async () => {
242
+ const config = await loadConfig(root);
243
+ const providers = await createProviders(config);
244
+ const cache = await boot(providers);
245
+ const ctx = await enrich('Fix the bug', providers, cache);
246
+ expect(ctx.routing.model).toBeDefined();
247
+ expect(ctx.routing.reason).toBeDefined();
248
+ });
249
+ it('enrich returns identities from boot cache', async () => {
250
+ const config = await loadConfig(root);
251
+ const providers = await createProviders(config);
252
+ const cache = await boot(providers);
253
+ const ctx = await enrich('anything', providers, cache);
254
+ expect(ctx.identities.length).toBe(4);
255
+ });
256
+ it('enrich with unrelated prompt returns no matched skills', async () => {
257
+ const config = await loadConfig(root);
258
+ const providers = await createProviders(config);
259
+ const cache = await boot(providers);
260
+ // "hello world" doesn't match any known label
261
+ const ctx = await enrich('hello world', providers, cache);
262
+ expect(ctx.labels.length).toBe(0);
263
+ expect(ctx.skills.length).toBe(0);
264
+ expect(ctx.tools.length).toBe(0);
265
+ });
266
+ it('different prompts match different skills', async () => {
267
+ const config = await loadConfig(root);
268
+ const providers = await createProviders(config);
269
+ const cache = await boot(providers);
270
+ const tsCtx = await enrich('Fix TypeScript code', providers, cache);
271
+ const reviewCtx = await enrich('Review this code for bugs', providers, cache);
272
+ expect(tsCtx.skills.some(s => s.name === 'ts-standards')).toBe(true);
273
+ expect(reviewCtx.skills.some(s => s.name === 'code-review')).toBe(true);
274
+ });
275
+ });
276
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env node
2
+ import { argv, cwd, exit } from 'node:process';
3
+ import { mkdir, writeFile, access } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ import { loadConfig, resolveConfig, injectRoot, registerDefaults, clearProviders, createProviders, boot, enrich, formatContext, } from '@dot-ai/core';
6
+ const args = argv.slice(2);
7
+ const command = args[0];
8
+ async function main() {
9
+ switch (command) {
10
+ case 'init':
11
+ await cmdInit();
12
+ break;
13
+ case 'boot':
14
+ await cmdBoot();
15
+ break;
16
+ case 'trace':
17
+ await cmdTrace(args.slice(1));
18
+ break;
19
+ default:
20
+ console.log('dot-ai v0.4.0\n');
21
+ console.log('Commands:');
22
+ console.log(' init Create .ai/ directory with defaults');
23
+ console.log(' boot Run boot and show workspace info');
24
+ console.log(' trace "<prompt>" Dry-run enrich pipeline with token estimates');
25
+ exit(command ? 1 : 0);
26
+ }
27
+ }
28
+ async function cmdInit() {
29
+ const root = cwd();
30
+ const aiDir = join(root, '.ai');
31
+ try {
32
+ await access(join(aiDir, 'dot-ai.yml'));
33
+ console.log('.ai/dot-ai.yml already exists. Nothing to do.');
34
+ return;
35
+ }
36
+ catch {
37
+ // Doesn't exist, create it
38
+ }
39
+ await mkdir(aiDir, { recursive: true });
40
+ await writeFile(join(aiDir, 'dot-ai.yml'), [
41
+ '# dot-ai configuration',
42
+ '# Uncomment and customize providers as needed.',
43
+ '# Default: file-based providers reading from .ai/ directory.',
44
+ '#',
45
+ '# memory:',
46
+ '# use: "@dot-ai/provider-file-memory"',
47
+ '#',
48
+ '# skills:',
49
+ '# use: "@dot-ai/provider-file-skills"',
50
+ '#',
51
+ '# routing:',
52
+ '# use: "@dot-ai/provider-rules-routing"',
53
+ '',
54
+ ].join('\n'));
55
+ await writeFile(join(aiDir, 'AGENTS.md'), [
56
+ '# AGENTS.md',
57
+ '',
58
+ '> Your workspace rules and conventions go here.',
59
+ '',
60
+ '## Rules',
61
+ '',
62
+ '- ...',
63
+ '',
64
+ ].join('\n'));
65
+ console.log('Created:');
66
+ console.log(' .ai/dot-ai.yml (config)');
67
+ console.log(' .ai/AGENTS.md (template)');
68
+ console.log('\nNext: add SOUL.md, USER.md, skills/, memory/ as needed.');
69
+ }
70
+ async function cmdBoot() {
71
+ const root = cwd();
72
+ const start = performance.now();
73
+ clearProviders();
74
+ registerDefaults();
75
+ const rawConfig = await loadConfig(root);
76
+ const config = injectRoot(rawConfig, root);
77
+ const providers = await createProviders(config);
78
+ const cache = await boot(providers);
79
+ const duration = Math.round(performance.now() - start);
80
+ console.log(`dot-ai boot — ${root}\n`);
81
+ console.log(`Identities: ${cache.identities.length}${cache.identities.length > 0 ? ` (${cache.identities.map(i => i.type).join(', ')})` : ''}`);
82
+ console.log(`Skills: ${cache.skills.length}${cache.skills.length > 0 ? ` (${cache.skills.map(s => s.name).join(', ')})` : ''}`);
83
+ console.log(`Vocabulary: ${cache.vocabulary.length} labels`);
84
+ console.log(`\nBoot complete in ${duration}ms`);
85
+ }
86
+ async function cmdTrace(rawArgs) {
87
+ const flags = new Set(rawArgs.filter(a => a.startsWith('--')));
88
+ const prompt = rawArgs.filter(a => !a.startsWith('--')).join(' ');
89
+ const jsonMode = flags.has('--json');
90
+ const verbose = flags.has('--verbose');
91
+ if (!prompt) {
92
+ console.error('Usage: dot-ai trace "<prompt>" [--json] [--verbose]');
93
+ exit(1);
94
+ }
95
+ const root = cwd();
96
+ const start = performance.now();
97
+ clearProviders();
98
+ registerDefaults();
99
+ const rawConfig = await loadConfig(root);
100
+ const config = injectRoot(rawConfig, root);
101
+ const resolved = resolveConfig(rawConfig);
102
+ const providers = await createProviders(config);
103
+ const cache = await boot(providers);
104
+ const ctx = await enrich(prompt, providers, cache);
105
+ // Load skill content for matched skills
106
+ for (const skill of ctx.skills) {
107
+ if (!skill.content && skill.name) {
108
+ skill.content = await providers.skills.load(skill.name) ?? undefined;
109
+ }
110
+ }
111
+ const duration = Math.round(performance.now() - start);
112
+ // Compute token estimates
113
+ const identityChars = cache.identities.reduce((sum, i) => sum + (i.content?.length ?? 0), 0);
114
+ const skillChars = ctx.skills.reduce((sum, s) => sum + (s.content?.length ?? 0), 0);
115
+ const memoryChars = ctx.memories.reduce((sum, m) => sum + m.content.length, 0);
116
+ const totalChars = skillChars + memoryChars;
117
+ // Check for disabled skills
118
+ const disabledList = typeof resolved.skills?.with?.disabled === 'string'
119
+ ? resolved.skills.with.disabled.split(',').map((s) => s.trim()).filter(Boolean)
120
+ : [];
121
+ if (jsonMode) {
122
+ const output = {
123
+ prompt,
124
+ sessionStart: {
125
+ identityCount: cache.identities.length,
126
+ identityChars,
127
+ estimatedTokens: Math.round(identityChars / 4),
128
+ },
129
+ userPromptSubmit: {
130
+ labels: ctx.labels.map(l => l.name),
131
+ skills: ctx.skills.map(s => ({
132
+ name: s.name,
133
+ chars: s.content?.length ?? 0,
134
+ })),
135
+ memoryCount: ctx.memories.length,
136
+ memoryChars,
137
+ toolCount: ctx.tools.length,
138
+ routing: ctx.routing,
139
+ totalChars,
140
+ estimatedTokens: Math.round(totalChars / 4),
141
+ },
142
+ disabled: disabledList,
143
+ vocabularySize: cache.vocabulary.length,
144
+ durationMs: duration,
145
+ };
146
+ console.log(JSON.stringify(output, null, 2));
147
+ return;
148
+ }
149
+ // Human-readable output
150
+ console.log(`dot-ai trace — "${prompt}"\n`);
151
+ // SessionStart section
152
+ console.log(`── SessionStart (one-time) ──`);
153
+ console.log(` ${cache.identities.length} identities: ${identityChars.toLocaleString()} chars (~${Math.round(identityChars / 4).toLocaleString()} tokens)`);
154
+ // UserPromptSubmit section
155
+ console.log(`\n── UserPromptSubmit ──`);
156
+ console.log(` Labels: [${ctx.labels.map(l => l.name).join(', ')}]`);
157
+ if (ctx.skills.length > 0) {
158
+ const skillDetails = ctx.skills.map(s => `${s.name} (${(s.content?.length ?? 0).toLocaleString()} chars)`);
159
+ console.log(` Skills: ${skillDetails.join(', ')}`);
160
+ }
161
+ else {
162
+ console.log(` Skills: none matched`);
163
+ }
164
+ console.log(` Memory: ${ctx.memories.length} entries (${memoryChars.toLocaleString()} chars)`);
165
+ console.log(` Tools: ${ctx.tools.length} matched`);
166
+ console.log(` Routing: ${ctx.routing.model} (${ctx.routing.reason})`);
167
+ console.log(` Total: ${totalChars.toLocaleString()} chars (~${Math.round(totalChars / 4).toLocaleString()} tokens)`);
168
+ // Disabled skills
169
+ if (disabledList.length > 0) {
170
+ console.log(`\n── Disabled skills ──`);
171
+ console.log(` ${disabledList.join(', ')} (via config)`);
172
+ }
173
+ // Verbose: show the actual markdown that would be injected
174
+ if (verbose) {
175
+ const formatted = formatContext(ctx, {
176
+ skipIdentities: true,
177
+ maxSkillLength: 3000,
178
+ maxSkills: 5,
179
+ });
180
+ console.log(`\n── Injected markdown (${formatted.length.toLocaleString()} chars) ──`);
181
+ console.log(formatted);
182
+ }
183
+ console.log(`\nTrace complete in ${duration}ms`);
184
+ }
185
+ main().catch((err) => {
186
+ console.error(err);
187
+ exit(1);
188
+ });
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@dot-ai/cli",
3
+ "version": "0.5.2",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/jogelin/dot-ai",
7
+ "directory": "packages/cli"
8
+ },
9
+ "type": "module",
10
+ "bin": {
11
+ "dot-ai": "./dist/index.js"
12
+ },
13
+ "dependencies": {
14
+ "@dot-ai/core": "0.5.2"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.0.0",
18
+ "typescript": "^5.9.3"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "test": "vitest run"
26
+ }
27
+ }