instrux 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/README.md +40 -0
- package/dist/cli.js +70 -9
- package/dist/cli.js.map +1 -1
- package/dist/engine.test.d.ts +5 -0
- package/dist/engine.test.d.ts.map +1 -0
- package/dist/engine.test.js +319 -0
- package/dist/engine.test.js.map +1 -0
- package/dist/init.test.d.ts +5 -0
- package/dist/init.test.d.ts.map +1 -0
- package/dist/init.test.js +192 -0
- package/dist/init.test.js.map +1 -0
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -378,6 +378,46 @@ const compiler = new InstruxCompiler(process.cwd(), config);
|
|
|
378
378
|
const { output, filesCompiled, tagsUsed } = await compiler.compile();
|
|
379
379
|
```
|
|
380
380
|
|
|
381
|
+
## Development
|
|
382
|
+
|
|
383
|
+
### Running Tests
|
|
384
|
+
|
|
385
|
+
This project uses Jest for testing:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
# Run all tests
|
|
389
|
+
npm test
|
|
390
|
+
|
|
391
|
+
# Run tests in watch mode
|
|
392
|
+
npm run test:watch
|
|
393
|
+
|
|
394
|
+
# Run tests with coverage
|
|
395
|
+
npm run test:coverage
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Building
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Build TypeScript to JavaScript
|
|
402
|
+
npm run build
|
|
403
|
+
|
|
404
|
+
# Watch mode for development
|
|
405
|
+
npm run watch
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Project Structure
|
|
409
|
+
|
|
410
|
+
```
|
|
411
|
+
src/
|
|
412
|
+
cli.ts # CLI entry point
|
|
413
|
+
engine.ts # Core build engine
|
|
414
|
+
compiler.ts # Template compiler
|
|
415
|
+
init.ts # Scaffolding functions
|
|
416
|
+
frontmatter.ts # Frontmatter parsing
|
|
417
|
+
types.ts # TypeScript types
|
|
418
|
+
*.test.ts # Jest test files
|
|
419
|
+
```
|
|
420
|
+
|
|
381
421
|
## License
|
|
382
422
|
|
|
383
423
|
This project is dual-licensed under your choice of:
|
package/dist/cli.js
CHANGED
|
@@ -12,10 +12,62 @@
|
|
|
12
12
|
* instrux config <name> Show agent configuration
|
|
13
13
|
* instrux validate <name> Validate source files exist
|
|
14
14
|
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
15
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
49
|
const commander_1 = require("commander");
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
const fs = __importStar(require("fs-extra"));
|
|
17
52
|
const engine_1 = require("./engine");
|
|
18
53
|
const init_1 = require("./init");
|
|
54
|
+
/**
|
|
55
|
+
* Load repo config to get agentsDirectory for help text.
|
|
56
|
+
*/
|
|
57
|
+
async function getAgentsDir(rootDir) {
|
|
58
|
+
const configPath = path.join(rootDir, 'instrux.json');
|
|
59
|
+
if (await fs.pathExists(configPath)) {
|
|
60
|
+
try {
|
|
61
|
+
const raw = await fs.readFile(configPath, 'utf-8');
|
|
62
|
+
const config = JSON.parse(raw);
|
|
63
|
+
return config.agentsDirectory ?? 'agents';
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return 'agents';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return 'agents';
|
|
70
|
+
}
|
|
19
71
|
const pkg = require('../package.json');
|
|
20
72
|
const program = new commander_1.Command();
|
|
21
73
|
program
|
|
@@ -35,6 +87,7 @@ program
|
|
|
35
87
|
: await (0, init_1.initAgent)(cwd, name);
|
|
36
88
|
const mode = opts.template ? 'template' : 'simple';
|
|
37
89
|
const isFirstAgent = created.includes('instrux.json');
|
|
90
|
+
const agentsDir = await getAgentsDir(cwd);
|
|
38
91
|
console.log(`\n\u2705 Agent "${name}" initialized (${mode} mode)!\n`);
|
|
39
92
|
if (isFirstAgent) {
|
|
40
93
|
console.log('Created repository config (instrux.json) with default settings.');
|
|
@@ -44,15 +97,15 @@ program
|
|
|
44
97
|
created.forEach(f => console.log(` ${f}`));
|
|
45
98
|
if (opts.template) {
|
|
46
99
|
console.log(`\nNext steps:`);
|
|
47
|
-
console.log(` 1. Edit
|
|
48
|
-
console.log(` 2. Edit
|
|
49
|
-
console.log(` 3. Edit
|
|
100
|
+
console.log(` 1. Edit ${agentsDir}/base/*.md to define shared instructions`);
|
|
101
|
+
console.log(` 2. Edit ${agentsDir}/${name}/domain.md with domain knowledge`);
|
|
102
|
+
console.log(` 3. Edit ${agentsDir}/${name}/template.md to compose via {{tag "..."}}`);
|
|
50
103
|
console.log(` 4. Run: instrux build ${name}\n`);
|
|
51
104
|
}
|
|
52
105
|
else {
|
|
53
106
|
console.log(`\nNext steps:`);
|
|
54
|
-
console.log(` 1. Edit
|
|
55
|
-
console.log(` 2. Edit
|
|
107
|
+
console.log(` 1. Edit ${agentsDir}/${name}/specialization.md with your instructions`);
|
|
108
|
+
console.log(` 2. Edit ${agentsDir}/${name}/agent.json to add more files if needed`);
|
|
56
109
|
console.log(` 3. Run: instrux build ${name}\n`);
|
|
57
110
|
}
|
|
58
111
|
}
|
|
@@ -74,6 +127,7 @@ program
|
|
|
74
127
|
console.log('This file provides default settings for all agents.');
|
|
75
128
|
console.log('Individual agent configs will inherit and can override these settings.\n');
|
|
76
129
|
console.log('Default settings:');
|
|
130
|
+
console.log(' - agentsDirectory: "agents"');
|
|
77
131
|
console.log(' - outputDirectory: "out"');
|
|
78
132
|
console.log(' - mergeSettings: standard defaults');
|
|
79
133
|
console.log(' - frontmatter: { output: "strip" }');
|
|
@@ -138,10 +192,17 @@ program
|
|
|
138
192
|
console.log('\nAvailable agents:\n');
|
|
139
193
|
for (const agent of agents) {
|
|
140
194
|
if (agent.config) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
195
|
+
try {
|
|
196
|
+
// Load full resolved config to get all values with defaults
|
|
197
|
+
const resolved = await engine.loadConfig(agent.name);
|
|
198
|
+
const mode = resolved.entry ? 'template' : 'simple';
|
|
199
|
+
console.log(` ${agent.name} [${mode}]`);
|
|
200
|
+
console.log(` ${resolved.description}`);
|
|
201
|
+
console.log(` Files: ${resolved.files?.length ?? resolved.sources?.length ?? 0} \u2192 ${resolved.outputDirectory}/${resolved.outputFilePattern}`);
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
console.log(` ${agent.name} (error loading config)`);
|
|
205
|
+
}
|
|
145
206
|
}
|
|
146
207
|
else {
|
|
147
208
|
console.log(` ${agent.name} (invalid or missing agent.json)`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;GAWG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.test.d.ts","sourceRoot":"","sources":["../src/engine.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unit tests for InstruxEngine
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
const engine_1 = require("../engine");
|
|
43
|
+
describe('InstruxEngine', () => {
|
|
44
|
+
let testDir;
|
|
45
|
+
let engine;
|
|
46
|
+
beforeEach(async () => {
|
|
47
|
+
// Create a temporary directory for each test
|
|
48
|
+
testDir = await fs.mkdtemp(path.join(os.tmpdir(), 'instrux-test-'));
|
|
49
|
+
engine = new engine_1.InstruxEngine(testDir);
|
|
50
|
+
});
|
|
51
|
+
afterEach(async () => {
|
|
52
|
+
// Clean up temporary directory
|
|
53
|
+
await fs.remove(testDir);
|
|
54
|
+
});
|
|
55
|
+
describe('Repository Config', () => {
|
|
56
|
+
it('should return null when no repo config exists', async () => {
|
|
57
|
+
const config = await engine.loadRepoConfig();
|
|
58
|
+
expect(config).toEqual({});
|
|
59
|
+
});
|
|
60
|
+
it('should load repo config when it exists', async () => {
|
|
61
|
+
const repoConfig = {
|
|
62
|
+
agentsDirectory: 'src/agents',
|
|
63
|
+
outputDirectory: 'build',
|
|
64
|
+
sources: ['src/agents/base/**/*.md'],
|
|
65
|
+
};
|
|
66
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
67
|
+
const loaded = await engine.loadRepoConfig();
|
|
68
|
+
expect(loaded).toMatchObject(repoConfig);
|
|
69
|
+
});
|
|
70
|
+
it('should use default agentsDirectory when not specified', async () => {
|
|
71
|
+
const repoConfig = {
|
|
72
|
+
outputDirectory: 'out',
|
|
73
|
+
};
|
|
74
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
75
|
+
const loaded = await engine.loadRepoConfig();
|
|
76
|
+
expect(loaded?.agentsDirectory).toBeUndefined();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('Agent Config Loading', () => {
|
|
80
|
+
it('should load agent config and merge with repo config', async () => {
|
|
81
|
+
// Create repo config
|
|
82
|
+
const repoConfig = {
|
|
83
|
+
agentsDirectory: 'agents',
|
|
84
|
+
outputDirectory: 'out',
|
|
85
|
+
};
|
|
86
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
87
|
+
// Create agent config
|
|
88
|
+
const agentConfig = {
|
|
89
|
+
name: 'TestAgent',
|
|
90
|
+
description: 'Test agent',
|
|
91
|
+
files: [
|
|
92
|
+
{ path: 'agents/base/test.md', description: 'Test file', required: true },
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
const agentDir = path.join(testDir, 'agents', 'TestAgent');
|
|
96
|
+
await fs.ensureDir(agentDir);
|
|
97
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), JSON.stringify(agentConfig, null, 2));
|
|
98
|
+
const resolved = await engine.loadConfig('TestAgent');
|
|
99
|
+
expect(resolved.name).toBe('TestAgent');
|
|
100
|
+
expect(resolved.agentsDirectory).toBe('agents');
|
|
101
|
+
expect(resolved.outputDirectory).toBe('out');
|
|
102
|
+
expect(resolved.outputFilePattern).toBe('testagent_instructions.md');
|
|
103
|
+
});
|
|
104
|
+
it('should use custom agentsDirectory from repo config', async () => {
|
|
105
|
+
// Create repo config with custom directory
|
|
106
|
+
const repoConfig = {
|
|
107
|
+
agentsDirectory: 'src/agents',
|
|
108
|
+
outputDirectory: 'build',
|
|
109
|
+
};
|
|
110
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
111
|
+
// Create agent config in custom directory
|
|
112
|
+
const agentConfig = {
|
|
113
|
+
name: 'CustomAgent',
|
|
114
|
+
description: 'Custom agent',
|
|
115
|
+
files: [],
|
|
116
|
+
};
|
|
117
|
+
const agentDir = path.join(testDir, 'src', 'agents', 'CustomAgent');
|
|
118
|
+
await fs.ensureDir(agentDir);
|
|
119
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), JSON.stringify(agentConfig, null, 2));
|
|
120
|
+
const resolved = await engine.loadConfig('CustomAgent');
|
|
121
|
+
expect(resolved.agentsDirectory).toBe('src/agents');
|
|
122
|
+
expect(resolved.outputDirectory).toBe('build');
|
|
123
|
+
});
|
|
124
|
+
it('should throw error when agent config not found', async () => {
|
|
125
|
+
await expect(engine.loadConfig('NonExistent')).rejects.toThrow(/Agent config not found/);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('List Agents', () => {
|
|
129
|
+
it('should return empty array when no agents directory exists', async () => {
|
|
130
|
+
const agents = await engine.listAgents();
|
|
131
|
+
expect(agents).toEqual([]);
|
|
132
|
+
});
|
|
133
|
+
it('should list agents in default directory', async () => {
|
|
134
|
+
// Create agents directory with test agent
|
|
135
|
+
const agentConfig = {
|
|
136
|
+
name: 'Agent1',
|
|
137
|
+
description: 'First agent',
|
|
138
|
+
files: [],
|
|
139
|
+
};
|
|
140
|
+
const agentDir = path.join(testDir, 'agents', 'Agent1');
|
|
141
|
+
await fs.ensureDir(agentDir);
|
|
142
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), JSON.stringify(agentConfig, null, 2));
|
|
143
|
+
const agents = await engine.listAgents();
|
|
144
|
+
expect(agents).toHaveLength(1);
|
|
145
|
+
expect(agents[0].name).toBe('Agent1');
|
|
146
|
+
expect(agents[0].config).toBeTruthy();
|
|
147
|
+
});
|
|
148
|
+
it('should list agents in custom directory', async () => {
|
|
149
|
+
// Create repo config with custom directory
|
|
150
|
+
const repoConfig = {
|
|
151
|
+
agentsDirectory: 'custom/agents',
|
|
152
|
+
};
|
|
153
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
154
|
+
// Create agent in custom directory
|
|
155
|
+
const agentConfig = {
|
|
156
|
+
name: 'CustomAgent',
|
|
157
|
+
description: 'Custom agent',
|
|
158
|
+
files: [],
|
|
159
|
+
};
|
|
160
|
+
const agentDir = path.join(testDir, 'custom', 'agents', 'CustomAgent');
|
|
161
|
+
await fs.ensureDir(agentDir);
|
|
162
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), JSON.stringify(agentConfig, null, 2));
|
|
163
|
+
const agents = await engine.listAgents();
|
|
164
|
+
expect(agents).toHaveLength(1);
|
|
165
|
+
expect(agents[0].name).toBe('CustomAgent');
|
|
166
|
+
});
|
|
167
|
+
it('should skip base directory', async () => {
|
|
168
|
+
// Create base directory
|
|
169
|
+
const baseDir = path.join(testDir, 'agents', 'base');
|
|
170
|
+
await fs.ensureDir(baseDir);
|
|
171
|
+
await fs.writeFile(path.join(baseDir, 'instructions.md'), '# Base Instructions');
|
|
172
|
+
// Create actual agent
|
|
173
|
+
const agentConfig = {
|
|
174
|
+
name: 'Agent1',
|
|
175
|
+
description: 'Agent',
|
|
176
|
+
files: [],
|
|
177
|
+
};
|
|
178
|
+
const agentDir = path.join(testDir, 'agents', 'Agent1');
|
|
179
|
+
await fs.ensureDir(agentDir);
|
|
180
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), JSON.stringify(agentConfig, null, 2));
|
|
181
|
+
const agents = await engine.listAgents();
|
|
182
|
+
expect(agents).toHaveLength(1);
|
|
183
|
+
expect(agents[0].name).toBe('Agent1');
|
|
184
|
+
expect(agents.find(a => a.name === 'base')).toBeUndefined();
|
|
185
|
+
});
|
|
186
|
+
it('should handle invalid agent config gracefully', async () => {
|
|
187
|
+
const agentDir = path.join(testDir, 'agents', 'BadAgent');
|
|
188
|
+
await fs.ensureDir(agentDir);
|
|
189
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), 'invalid json {');
|
|
190
|
+
const agents = await engine.listAgents();
|
|
191
|
+
expect(agents).toHaveLength(1);
|
|
192
|
+
expect(agents[0].name).toBe('BadAgent');
|
|
193
|
+
expect(agents[0].config).toBeNull();
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('Validation', () => {
|
|
197
|
+
it('should validate that required files exist', async () => {
|
|
198
|
+
const config = {
|
|
199
|
+
name: 'Test',
|
|
200
|
+
description: 'Test',
|
|
201
|
+
agentsDirectory: 'agents',
|
|
202
|
+
outputDirectory: 'out',
|
|
203
|
+
outputFilePattern: 'test.md',
|
|
204
|
+
files: [
|
|
205
|
+
{ path: 'test.md', description: 'Test', required: true },
|
|
206
|
+
],
|
|
207
|
+
mergeSettings: {},
|
|
208
|
+
};
|
|
209
|
+
// File does not exist
|
|
210
|
+
let result = await engine.validate(config);
|
|
211
|
+
expect(result.valid).toBe(false);
|
|
212
|
+
expect(result.missing).toContain('test.md');
|
|
213
|
+
// Create the file
|
|
214
|
+
await fs.writeFile(path.join(testDir, 'test.md'), '# Test');
|
|
215
|
+
// Now validation should pass
|
|
216
|
+
result = await engine.validate(config);
|
|
217
|
+
expect(result.valid).toBe(true);
|
|
218
|
+
expect(result.missing).toHaveLength(0);
|
|
219
|
+
});
|
|
220
|
+
it('should warn about missing optional files', async () => {
|
|
221
|
+
const config = {
|
|
222
|
+
name: 'Test',
|
|
223
|
+
description: 'Test',
|
|
224
|
+
agentsDirectory: 'agents',
|
|
225
|
+
outputDirectory: 'out',
|
|
226
|
+
outputFilePattern: 'test.md',
|
|
227
|
+
files: [
|
|
228
|
+
{ path: 'optional.md', description: 'Optional', required: false },
|
|
229
|
+
],
|
|
230
|
+
mergeSettings: {},
|
|
231
|
+
};
|
|
232
|
+
const result = await engine.validate(config);
|
|
233
|
+
expect(result.valid).toBe(true);
|
|
234
|
+
expect(result.warnings).toContain('Optional file not found: optional.md');
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
describe('Simple Merge Mode', () => {
|
|
238
|
+
it('should merge files in order', async () => {
|
|
239
|
+
// Create test files
|
|
240
|
+
await fs.writeFile(path.join(testDir, 'file1.md'), '# File 1\n\nContent 1');
|
|
241
|
+
await fs.writeFile(path.join(testDir, 'file2.md'), '# File 2\n\nContent 2');
|
|
242
|
+
const config = {
|
|
243
|
+
name: 'Test',
|
|
244
|
+
description: 'Test',
|
|
245
|
+
agentsDirectory: 'agents',
|
|
246
|
+
outputDirectory: 'out',
|
|
247
|
+
outputFilePattern: 'merged.md',
|
|
248
|
+
files: [
|
|
249
|
+
{ path: 'file1.md', description: 'First', required: true },
|
|
250
|
+
{ path: 'file2.md', description: 'Second', required: true },
|
|
251
|
+
],
|
|
252
|
+
mergeSettings: {
|
|
253
|
+
addSeparators: true,
|
|
254
|
+
separatorStyle: '---',
|
|
255
|
+
includeFileHeaders: false,
|
|
256
|
+
preserveFormatting: true,
|
|
257
|
+
generateHash: false,
|
|
258
|
+
useTimestamp: false,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
const merged = await engine.merge(config);
|
|
262
|
+
expect(merged).toContain('# File 1');
|
|
263
|
+
expect(merged).toContain('# File 2');
|
|
264
|
+
expect(merged).toContain('---');
|
|
265
|
+
});
|
|
266
|
+
it('should skip empty files', async () => {
|
|
267
|
+
await fs.writeFile(path.join(testDir, 'file1.md'), '# File 1');
|
|
268
|
+
await fs.writeFile(path.join(testDir, 'empty.md'), '');
|
|
269
|
+
const config = {
|
|
270
|
+
name: 'Test',
|
|
271
|
+
description: 'Test',
|
|
272
|
+
agentsDirectory: 'agents',
|
|
273
|
+
outputDirectory: 'out',
|
|
274
|
+
outputFilePattern: 'merged.md',
|
|
275
|
+
files: [
|
|
276
|
+
{ path: 'file1.md', description: 'First', required: true },
|
|
277
|
+
{ path: 'empty.md', description: 'Empty', required: false },
|
|
278
|
+
],
|
|
279
|
+
mergeSettings: {
|
|
280
|
+
addSeparators: false,
|
|
281
|
+
separatorStyle: '---',
|
|
282
|
+
includeFileHeaders: false,
|
|
283
|
+
preserveFormatting: true,
|
|
284
|
+
generateHash: false,
|
|
285
|
+
useTimestamp: false,
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
const merged = await engine.merge(config);
|
|
289
|
+
expect(merged).toContain('# File 1');
|
|
290
|
+
expect(merged).not.toContain('Empty');
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
describe('Build', () => {
|
|
294
|
+
it('should build simple merge mode agent', async () => {
|
|
295
|
+
// Create repo config
|
|
296
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify({ agentsDirectory: 'agents', outputDirectory: 'out' }, null, 2));
|
|
297
|
+
// Create agent
|
|
298
|
+
const agentConfig = {
|
|
299
|
+
name: 'TestAgent',
|
|
300
|
+
description: 'Test',
|
|
301
|
+
files: [
|
|
302
|
+
{ path: 'agents/TestAgent/content.md', description: 'Content', required: true },
|
|
303
|
+
],
|
|
304
|
+
};
|
|
305
|
+
const agentDir = path.join(testDir, 'agents', 'TestAgent');
|
|
306
|
+
await fs.ensureDir(agentDir);
|
|
307
|
+
await fs.writeFile(path.join(agentDir, 'agent.json'), JSON.stringify(agentConfig, null, 2));
|
|
308
|
+
await fs.writeFile(path.join(agentDir, 'content.md'), '# Test Content\n\nThis is a test.');
|
|
309
|
+
const result = await engine.build('TestAgent');
|
|
310
|
+
expect(result.outputPath).toContain('testagent_instructions.md');
|
|
311
|
+
expect(result.filesIncluded).toBe(1);
|
|
312
|
+
expect(result.contentLength).toBeGreaterThan(0);
|
|
313
|
+
// Verify output file was created
|
|
314
|
+
const outputPath = path.join(testDir, result.outputPath);
|
|
315
|
+
expect(await fs.pathExists(outputPath)).toBe(true);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
//# sourceMappingURL=engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../src/engine.test.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,2CAA6B;AAC7B,uCAAyB;AACzB,sCAA0C;AAG1C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,OAAe,CAAC;IACpB,IAAI,MAAqB,CAAC;IAE1B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,6CAA6C;QAC7C,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,IAAI,sBAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,+BAA+B;QAC/B,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,UAAU,GAAe;gBAC7B,eAAe,EAAE,YAAY;gBAC7B,eAAe,EAAE,OAAO;gBACxB,OAAO,EAAE,CAAC,yBAAyB,CAAC;aACrC,CAAC;YAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CACpC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,UAAU,GAAe;gBAC7B,eAAe,EAAE,KAAK;aACvB,CAAC;YAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CACpC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,qBAAqB;YACrB,MAAM,UAAU,GAAe;gBAC7B,eAAe,EAAE,QAAQ;gBACzB,eAAe,EAAE,KAAK;aACvB,CAAC;YACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CACpC,CAAC;YAEF,sBAAsB;YACtB,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,YAAY;gBACzB,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC1E;aACF,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEtD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,2CAA2C;YAC3C,MAAM,UAAU,GAAe;gBAC7B,eAAe,EAAE,YAAY;gBAC7B,eAAe,EAAE,OAAO;aACzB,CAAC;YACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CACpC,CAAC;YAEF,0CAA0C;YAC1C,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,cAAc;gBAC3B,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YACpE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAExD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC5D,wBAAwB,CACzB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,0CAA0C;YAC1C,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,aAAa;gBAC1B,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,2CAA2C;YAC3C,MAAM,UAAU,GAAe;gBAC7B,eAAe,EAAE,eAAe;aACjC,CAAC;YACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CACpC,CAAC;YAEF,mCAAmC;YACnC,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,cAAc;gBAC3B,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,wBAAwB;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACrC,qBAAqB,CACtB,CAAC;YAEF,sBAAsB;YACtB,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,OAAO;gBACpB,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,gBAAgB,CACjB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,GAAQ;gBAClB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,MAAM;gBACnB,eAAe,EAAE,QAAQ;gBACzB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,SAAS;gBAC5B,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACzD;gBACD,aAAa,EAAE,EAAE;aAClB,CAAC;YAEF,sBAAsB;YACtB,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAE5C,kBAAkB;YAClB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;YAE5D,6BAA6B;YAC7B,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,MAAM,GAAQ;gBAClB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,MAAM;gBACnB,eAAe,EAAE,QAAQ;gBACzB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,SAAS;gBAC5B,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;iBAClE;gBACD,aAAa,EAAE,EAAE;aAClB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,oBAAoB;YACpB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAE5E,MAAM,MAAM,GAAQ;gBAClB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,MAAM;gBACnB,eAAe,EAAE,QAAQ;gBACzB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,WAAW;gBAC9B,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC1D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC5D;gBACD,aAAa,EAAE;oBACb,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK;oBACrB,kBAAkB,EAAE,KAAK;oBACzB,kBAAkB,EAAE,IAAI;oBACxB,YAAY,EAAE,KAAK;oBACnB,YAAY,EAAE,KAAK;iBACpB;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAEvD,MAAM,MAAM,GAAQ;gBAClB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,MAAM;gBACnB,eAAe,EAAE,QAAQ;gBACzB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,WAAW;gBAC9B,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC1D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;iBAC5D;gBACD,aAAa,EAAE;oBACb,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK;oBACrB,kBAAkB,EAAE,KAAK;oBACzB,kBAAkB,EAAE,IAAI;oBACxB,YAAY,EAAE,KAAK;oBACnB,YAAY,EAAE,KAAK;iBACpB;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,qBAAqB;YACrB,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAC/E,CAAC;YAEF,eAAe;YACf,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAChF;aACF,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;YACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EACjC,mCAAmC,CACpC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAEhD,iCAAiC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../src/init.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unit tests for init functions
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
const init_1 = require("../init");
|
|
43
|
+
describe('Init Functions', () => {
|
|
44
|
+
let testDir;
|
|
45
|
+
beforeEach(async () => {
|
|
46
|
+
testDir = await fs.mkdtemp(path.join(os.tmpdir(), 'instrux-init-test-'));
|
|
47
|
+
});
|
|
48
|
+
afterEach(async () => {
|
|
49
|
+
await fs.remove(testDir);
|
|
50
|
+
});
|
|
51
|
+
describe('initRepoConfig', () => {
|
|
52
|
+
it('should create repo config with defaults', async () => {
|
|
53
|
+
const created = await (0, init_1.initRepoConfig)(testDir);
|
|
54
|
+
expect(created).toBe('instrux.json');
|
|
55
|
+
const configPath = path.join(testDir, 'instrux.json');
|
|
56
|
+
expect(await fs.pathExists(configPath)).toBe(true);
|
|
57
|
+
const config = JSON.parse(await fs.readFile(configPath, 'utf-8'));
|
|
58
|
+
expect(config.agentsDirectory).toBe('agents');
|
|
59
|
+
expect(config.outputDirectory).toBe('out');
|
|
60
|
+
expect(config.mergeSettings).toBeDefined();
|
|
61
|
+
expect(config.frontmatter).toEqual({ output: 'strip' });
|
|
62
|
+
expect(config.sources).toEqual(['agents/base/**/*.md']);
|
|
63
|
+
});
|
|
64
|
+
it('should throw error if config already exists', async () => {
|
|
65
|
+
await (0, init_1.initRepoConfig)(testDir);
|
|
66
|
+
await expect((0, init_1.initRepoConfig)(testDir)).rejects.toThrow(/Repository config already exists/);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('initAgent', () => {
|
|
70
|
+
it('should create agent structure with default directory', async () => {
|
|
71
|
+
const created = await (0, init_1.initAgent)(testDir, 'MyAgent');
|
|
72
|
+
// Should create repo config, base instructions, agent config, and specialization
|
|
73
|
+
expect(created.length).toBeGreaterThan(0);
|
|
74
|
+
expect(created).toContain('instrux.json');
|
|
75
|
+
expect(created.some(f => f.includes('MyAgent/agent.json'))).toBe(true);
|
|
76
|
+
expect(created.some(f => f.includes('MyAgent/specialization.md'))).toBe(true);
|
|
77
|
+
// Verify files exist
|
|
78
|
+
expect(await fs.pathExists(path.join(testDir, 'instrux.json'))).toBe(true);
|
|
79
|
+
expect(await fs.pathExists(path.join(testDir, 'agents', 'MyAgent', 'agent.json'))).toBe(true);
|
|
80
|
+
expect(await fs.pathExists(path.join(testDir, 'agents', 'MyAgent', 'specialization.md'))).toBe(true);
|
|
81
|
+
expect(await fs.pathExists(path.join(testDir, 'agents', 'base', 'instructions.md'))).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
it('should use custom agentsDirectory from existing repo config', async () => {
|
|
84
|
+
// Create repo config with custom directory first
|
|
85
|
+
const repoConfig = {
|
|
86
|
+
agentsDirectory: 'src/agents',
|
|
87
|
+
outputDirectory: 'build',
|
|
88
|
+
};
|
|
89
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
90
|
+
const created = await (0, init_1.initAgent)(testDir, 'CustomAgent');
|
|
91
|
+
// Should NOT create instrux.json since it exists
|
|
92
|
+
expect(created).not.toContain('instrux.json');
|
|
93
|
+
// Should create agent in src/agents
|
|
94
|
+
expect(await fs.pathExists(path.join(testDir, 'src', 'agents', 'CustomAgent', 'agent.json'))).toBe(true);
|
|
95
|
+
expect(await fs.pathExists(path.join(testDir, 'src', 'agents', 'base', 'instructions.md'))).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
it('should create base instructions only once', async () => {
|
|
98
|
+
await (0, init_1.initAgent)(testDir, 'Agent1');
|
|
99
|
+
const created2 = await (0, init_1.initAgent)(testDir, 'Agent2');
|
|
100
|
+
// Second init should not include base instructions or repo config
|
|
101
|
+
expect(created2).not.toContain('instrux.json');
|
|
102
|
+
expect(created2.some(f => f.includes('base/instructions.md'))).toBe(false);
|
|
103
|
+
});
|
|
104
|
+
it('should throw error if agent already exists', async () => {
|
|
105
|
+
await (0, init_1.initAgent)(testDir, 'MyAgent');
|
|
106
|
+
await expect((0, init_1.initAgent)(testDir, 'MyAgent')).rejects.toThrow(/Agent "MyAgent" already exists/);
|
|
107
|
+
});
|
|
108
|
+
it('should create agent config with correct paths', async () => {
|
|
109
|
+
const repoConfig = {
|
|
110
|
+
agentsDirectory: 'custom/dir',
|
|
111
|
+
};
|
|
112
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
113
|
+
await (0, init_1.initAgent)(testDir, 'TestAgent');
|
|
114
|
+
const configPath = path.join(testDir, 'custom', 'dir', 'TestAgent', 'agent.json');
|
|
115
|
+
const config = JSON.parse(await fs.readFile(configPath, 'utf-8'));
|
|
116
|
+
// Paths should use custom directory
|
|
117
|
+
expect(config.files[0].path).toBe('custom/dir/base/instructions.md');
|
|
118
|
+
expect(config.files[1].path).toBe('custom/dir/TestAgent/specialization.md');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('initTemplateAgent', () => {
|
|
122
|
+
it('should create template agent structure', async () => {
|
|
123
|
+
const created = await (0, init_1.initTemplateAgent)(testDir, 'TemplateAgent');
|
|
124
|
+
// Should create repo config, base files, and template agent
|
|
125
|
+
expect(created).toContain('instrux.json');
|
|
126
|
+
expect(created.some(f => f.includes('TemplateAgent/agent.json'))).toBe(true);
|
|
127
|
+
expect(created.some(f => f.includes('TemplateAgent/template.md'))).toBe(true);
|
|
128
|
+
expect(created.some(f => f.includes('TemplateAgent/domain.md'))).toBe(true);
|
|
129
|
+
// Base files
|
|
130
|
+
expect(await fs.pathExists(path.join(testDir, 'agents', 'base', 'identity.md'))).toBe(true);
|
|
131
|
+
expect(await fs.pathExists(path.join(testDir, 'agents', 'base', 'safety.md'))).toBe(true);
|
|
132
|
+
});
|
|
133
|
+
it('should use custom agentsDirectory for template agent', async () => {
|
|
134
|
+
const repoConfig = {
|
|
135
|
+
agentsDirectory: 'src/agents',
|
|
136
|
+
};
|
|
137
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
138
|
+
await (0, init_1.initTemplateAgent)(testDir, 'MyTemplate');
|
|
139
|
+
const configPath = path.join(testDir, 'src', 'agents', 'MyTemplate', 'agent.json');
|
|
140
|
+
const config = JSON.parse(await fs.readFile(configPath, 'utf-8'));
|
|
141
|
+
// Check paths use custom directory
|
|
142
|
+
expect(config.entry).toBe('src/agents/MyTemplate/template.md');
|
|
143
|
+
expect(config.sources).toContain('src/agents/base/**/*.md');
|
|
144
|
+
expect(config.sources).toContain('src/agents/MyTemplate/**/*.md');
|
|
145
|
+
});
|
|
146
|
+
it('should create base files with frontmatter', async () => {
|
|
147
|
+
await (0, init_1.initTemplateAgent)(testDir, 'Test');
|
|
148
|
+
const identityPath = path.join(testDir, 'agents', 'base', 'identity.md');
|
|
149
|
+
const identity = await fs.readFile(identityPath, 'utf-8');
|
|
150
|
+
expect(identity).toContain('---');
|
|
151
|
+
expect(identity).toContain('title: Core Identity');
|
|
152
|
+
expect(identity).toContain('instrux:');
|
|
153
|
+
expect(identity).toContain('tags: [identity]');
|
|
154
|
+
});
|
|
155
|
+
it('should not recreate base files if they exist', async () => {
|
|
156
|
+
await (0, init_1.initTemplateAgent)(testDir, 'Agent1');
|
|
157
|
+
// Modify base file
|
|
158
|
+
const identityPath = path.join(testDir, 'agents', 'base', 'identity.md');
|
|
159
|
+
await fs.writeFile(identityPath, '# Modified');
|
|
160
|
+
await (0, init_1.initTemplateAgent)(testDir, 'Agent2');
|
|
161
|
+
// Base file should not be overwritten
|
|
162
|
+
const identity = await fs.readFile(identityPath, 'utf-8');
|
|
163
|
+
expect(identity).toBe('# Modified');
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('Auto-creating repo config', () => {
|
|
167
|
+
it('should auto-create repo config on first agent init', async () => {
|
|
168
|
+
const created = await (0, init_1.initAgent)(testDir, 'FirstAgent');
|
|
169
|
+
expect(created).toContain('instrux.json');
|
|
170
|
+
expect(await fs.pathExists(path.join(testDir, 'instrux.json'))).toBe(true);
|
|
171
|
+
});
|
|
172
|
+
it('should not recreate repo config on second agent init', async () => {
|
|
173
|
+
await (0, init_1.initAgent)(testDir, 'Agent1');
|
|
174
|
+
const created2 = await (0, init_1.initAgent)(testDir, 'Agent2');
|
|
175
|
+
expect(created2).not.toContain('instrux.json');
|
|
176
|
+
});
|
|
177
|
+
it('should preserve existing repo config settings', async () => {
|
|
178
|
+
// Manually create repo config with custom settings
|
|
179
|
+
const repoConfig = {
|
|
180
|
+
agentsDirectory: 'my/custom/path',
|
|
181
|
+
outputDirectory: 'build/output',
|
|
182
|
+
};
|
|
183
|
+
await fs.writeFile(path.join(testDir, 'instrux.json'), JSON.stringify(repoConfig, null, 2));
|
|
184
|
+
await (0, init_1.initAgent)(testDir, 'MyAgent');
|
|
185
|
+
// Config should not be modified
|
|
186
|
+
const savedConfig = JSON.parse(await fs.readFile(path.join(testDir, 'instrux.json'), 'utf-8'));
|
|
187
|
+
expect(savedConfig.agentsDirectory).toBe('my/custom/path');
|
|
188
|
+
expect(savedConfig.outputDirectory).toBe('build/output');
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
//# sourceMappingURL=init.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../src/init.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "instrux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A CLI tool for composing modular AI agent instruction files into complete system prompts",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
"dev": "ts-node src/cli.ts",
|
|
20
20
|
"watch": "tsc --watch",
|
|
21
21
|
"prepublishOnly": "npm run build",
|
|
22
|
-
"test": "
|
|
22
|
+
"test": "jest",
|
|
23
|
+
"test:watch": "jest --watch",
|
|
24
|
+
"test:coverage": "jest --coverage",
|
|
23
25
|
"publish:script": "pwsh -File publish.ps1"
|
|
24
26
|
},
|
|
25
27
|
"keywords": [
|
|
@@ -47,7 +49,11 @@
|
|
|
47
49
|
},
|
|
48
50
|
"devDependencies": {
|
|
49
51
|
"@types/fs-extra": "^11.0.0",
|
|
52
|
+
"@types/jest": "^30.0.0",
|
|
50
53
|
"@types/node": "^20.0.0",
|
|
54
|
+
"jest": "^30.2.0",
|
|
55
|
+
"ts-jest": "^29.4.6",
|
|
56
|
+
"ts-node": "^10.9.2",
|
|
51
57
|
"typescript": "^5.0.0"
|
|
52
58
|
},
|
|
53
59
|
"dependencies": {
|