@renseiai/create-agentfactory-app 0.8.7 → 0.8.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/__tests__/templates.integration.test.d.ts +2 -0
- package/dist/src/__tests__/templates.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/templates.integration.test.js +153 -0
- package/dist/src/__tests__/templates.integration.test.js.map +1 -0
- package/dist/src/__tests__/templates.test.d.ts +2 -0
- package/dist/src/__tests__/templates.test.d.ts.map +1 -0
- package/dist/src/__tests__/templates.test.js +208 -0
- package/dist/src/__tests__/templates.test.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/templates.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { describe, it, expect, afterAll } from 'vitest';
|
|
2
|
+
import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { getTemplates } from '../templates/index.js';
|
|
6
|
+
// ── Helpers ────────────────────────────────────────────────────────
|
|
7
|
+
function opts(overrides = {}) {
|
|
8
|
+
return {
|
|
9
|
+
projectName: 'integration-test-project',
|
|
10
|
+
teamKey: 'TEST',
|
|
11
|
+
includeDashboard: false,
|
|
12
|
+
includeCli: false,
|
|
13
|
+
useRedis: false,
|
|
14
|
+
...overrides,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function writeProject(files, dir) {
|
|
18
|
+
for (const [filePath, content] of Object.entries(files)) {
|
|
19
|
+
const fullPath = join(dir, filePath);
|
|
20
|
+
mkdirSync(join(fullPath, '..'), { recursive: true });
|
|
21
|
+
writeFileSync(fullPath, content, 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// ── Integration test configs ───────────────────────────────────────
|
|
25
|
+
const configs = [
|
|
26
|
+
{
|
|
27
|
+
name: 'full default (dashboard + cli + redis)',
|
|
28
|
+
options: opts({ includeDashboard: true, includeCli: true, useRedis: true }),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'minimal (no dashboard, no cli, no redis)',
|
|
32
|
+
options: opts({ includeDashboard: false, includeCli: false, useRedis: false }),
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
// Track temp dirs for cleanup
|
|
36
|
+
const tempDirs = [];
|
|
37
|
+
afterAll(() => {
|
|
38
|
+
for (const dir of tempDirs) {
|
|
39
|
+
rmSync(dir, { recursive: true, force: true });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
describe.each(configs)('integration — $name', ({ options }) => {
|
|
43
|
+
const files = getTemplates(options);
|
|
44
|
+
const dir = mkdtempSync(join(tmpdir(), 'create-app-integration-'));
|
|
45
|
+
tempDirs.push(dir);
|
|
46
|
+
writeProject(files, dir);
|
|
47
|
+
it('writes all files to disk', () => {
|
|
48
|
+
const { readdirSync, statSync } = require('node:fs');
|
|
49
|
+
function collect(base, prefix = '') {
|
|
50
|
+
const entries = [];
|
|
51
|
+
for (const entry of readdirSync(base, { withFileTypes: true })) {
|
|
52
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
53
|
+
if (entry.isDirectory()) {
|
|
54
|
+
entries.push(...collect(join(base, entry.name), rel));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
entries.push(rel);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
}
|
|
62
|
+
const written = collect(dir);
|
|
63
|
+
expect(written.sort()).toEqual(Object.keys(files).sort());
|
|
64
|
+
});
|
|
65
|
+
it('generates valid JSON in package.json', () => {
|
|
66
|
+
const { readFileSync } = require('node:fs');
|
|
67
|
+
const content = readFileSync(join(dir, 'package.json'), 'utf-8');
|
|
68
|
+
const pkg = JSON.parse(content);
|
|
69
|
+
expect(pkg.name).toBe(options.projectName);
|
|
70
|
+
expect(pkg.version).toBe('0.1.0');
|
|
71
|
+
expect(pkg.scripts).toBeDefined();
|
|
72
|
+
expect(pkg.dependencies).toBeDefined();
|
|
73
|
+
expect(pkg.devDependencies).toBeDefined();
|
|
74
|
+
});
|
|
75
|
+
it('generates valid JSON in tsconfig.json', () => {
|
|
76
|
+
const { readFileSync } = require('node:fs');
|
|
77
|
+
const content = readFileSync(join(dir, 'tsconfig.json'), 'utf-8');
|
|
78
|
+
const tsconfig = JSON.parse(content);
|
|
79
|
+
expect(tsconfig.compilerOptions).toBeDefined();
|
|
80
|
+
expect(tsconfig.compilerOptions.target).toBe('ES2017');
|
|
81
|
+
expect(tsconfig.compilerOptions.strict).toBe(true);
|
|
82
|
+
expect(tsconfig.compilerOptions.jsx).toBe('react-jsx');
|
|
83
|
+
expect(tsconfig.compilerOptions.module).toBe('esnext');
|
|
84
|
+
expect(tsconfig.compilerOptions.moduleResolution).toBe('bundler');
|
|
85
|
+
expect(tsconfig.compilerOptions.paths).toEqual({ '@/*': ['./src/*'] });
|
|
86
|
+
expect(tsconfig.include).toContain('**/*.ts');
|
|
87
|
+
expect(tsconfig.include).toContain('**/*.tsx');
|
|
88
|
+
expect(tsconfig.exclude).toContain('node_modules');
|
|
89
|
+
});
|
|
90
|
+
it('generates valid next.config.ts', () => {
|
|
91
|
+
const { readFileSync } = require('node:fs');
|
|
92
|
+
const content = readFileSync(join(dir, 'next.config.ts'), 'utf-8');
|
|
93
|
+
expect(content).toContain("import type { NextConfig } from 'next'");
|
|
94
|
+
expect(content).toContain('export default nextConfig');
|
|
95
|
+
if (options.includeDashboard) {
|
|
96
|
+
expect(content).toContain('transpilePackages');
|
|
97
|
+
expect(content).toContain('@renseiai/agentfactory-dashboard');
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
it('generates a .gitignore with standard entries', () => {
|
|
101
|
+
const { readFileSync } = require('node:fs');
|
|
102
|
+
const content = readFileSync(join(dir, '.gitignore'), 'utf-8');
|
|
103
|
+
expect(content).toContain('node_modules/');
|
|
104
|
+
expect(content).toContain('.next/');
|
|
105
|
+
expect(content).toContain('dist/');
|
|
106
|
+
});
|
|
107
|
+
it('route re-exports have valid import structure', () => {
|
|
108
|
+
const { readFileSync } = require('node:fs');
|
|
109
|
+
const routeFiles = Object.keys(files).filter(f => f.includes('/route.ts'));
|
|
110
|
+
for (const routeFile of routeFiles) {
|
|
111
|
+
const content = readFileSync(join(dir, routeFile), 'utf-8');
|
|
112
|
+
expect(content, `${routeFile} missing config import`).toContain("import { routes } from '@/lib/config'");
|
|
113
|
+
// Each route must export at least one HTTP method
|
|
114
|
+
const hasExport = content.includes('export const POST') ||
|
|
115
|
+
content.includes('export const GET') ||
|
|
116
|
+
content.includes('export const DELETE');
|
|
117
|
+
expect(hasExport, `${routeFile} missing HTTP method export`).toBe(true);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
if (options.includeDashboard) {
|
|
121
|
+
it('dashboard pages use client directive and DashboardShell', () => {
|
|
122
|
+
const { readFileSync } = require('node:fs');
|
|
123
|
+
const dashboardPages = [
|
|
124
|
+
'src/app/pipeline/page.tsx',
|
|
125
|
+
'src/app/sessions/page.tsx',
|
|
126
|
+
'src/app/sessions/[id]/page.tsx',
|
|
127
|
+
'src/app/settings/page.tsx',
|
|
128
|
+
];
|
|
129
|
+
for (const page of dashboardPages) {
|
|
130
|
+
const content = readFileSync(join(dir, page), 'utf-8');
|
|
131
|
+
expect(content, `${page} missing 'use client'`).toContain("'use client'");
|
|
132
|
+
expect(content, `${page} missing DashboardShell`).toContain('DashboardShell');
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (options.includeCli) {
|
|
137
|
+
it('CLI scripts have shebang and required imports', () => {
|
|
138
|
+
const { readFileSync } = require('node:fs');
|
|
139
|
+
const cliFiles = [
|
|
140
|
+
'cli/worker.ts',
|
|
141
|
+
'cli/orchestrator.ts',
|
|
142
|
+
'cli/worker-fleet.ts',
|
|
143
|
+
'cli/cleanup.ts',
|
|
144
|
+
];
|
|
145
|
+
for (const cliFile of cliFiles) {
|
|
146
|
+
const content = readFileSync(join(dir, cliFile), 'utf-8');
|
|
147
|
+
expect(content, `${cliFile} missing shebang`).toContain('#!/usr/bin/env tsx');
|
|
148
|
+
expect(content, `${cliFile} missing @renseiai import`).toContain('@renseiai/agentfactory-cli');
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=templates.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/templates.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,YAAY,EAAwB,MAAM,uBAAuB,CAAA;AAE1E,sEAAsE;AAEtE,SAAS,IAAI,CAAC,YAAsC,EAAE;IACpD,OAAO;QACL,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,MAAM;QACf,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;QACf,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B,EAAE,GAAW;IAC9D,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACpC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC;AAED,sEAAsE;AAEtE,MAAM,OAAO,GAAG;IACd;QACE,IAAI,EAAE,wCAAwC;QAC9C,OAAO,EAAE,IAAI,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC5E;IACD;QACE,IAAI,EAAE,0CAA0C;QAChD,OAAO,EAAE,IAAI,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KAC/E;CACF,CAAA;AAED,8BAA8B;AAC9B,MAAM,QAAQ,GAAa,EAAE,CAAA;AAE7B,QAAQ,CAAC,GAAG,EAAE;IACZ,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CACpB,qBAAqB,EACrB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IACd,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAA;IAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAElB,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAExB,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QAChF,SAAS,OAAO,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE;YACxC,MAAM,OAAO,GAAa,EAAE,CAAA;YAC5B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;gBAC3D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACnB,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QACvE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAA;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QACvE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAA;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACjE,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QACvE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAA;QAClE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAA;QACnE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA;QACtD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QACvE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;QAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QACvE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;QAC1E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAA;YAC3D,MAAM,CAAC,OAAO,EAAE,GAAG,SAAS,wBAAwB,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAA;YACxG,kDAAkD;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAA;YACzC,MAAM,CAAC,SAAS,EAAE,GAAG,SAAS,6BAA6B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;YACvE,MAAM,cAAc,GAAG;gBACrB,2BAA2B;gBAC3B,2BAA2B;gBAC3B,gCAAgC;gBAChC,2BAA2B;aAC5B,CAAA;YACD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;gBACtD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,uBAAuB,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;gBACzE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,yBAAyB,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;YAC/E,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;YACvE,MAAM,QAAQ,GAAG;gBACf,eAAe;gBACf,qBAAqB;gBACrB,qBAAqB;gBACrB,gBAAgB;aACjB,CAAA;YACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;gBACzD,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,kBAAkB,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;gBAC7E,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,2BAA2B,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;YAChG,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/templates.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { getTemplates } from '../templates/index.js';
|
|
3
|
+
// ── Helpers ────────────────────────────────────────────────────────
|
|
4
|
+
function opts(overrides = {}) {
|
|
5
|
+
return {
|
|
6
|
+
projectName: 'test-project',
|
|
7
|
+
teamKey: 'TEST',
|
|
8
|
+
includeDashboard: false,
|
|
9
|
+
includeCli: false,
|
|
10
|
+
useRedis: false,
|
|
11
|
+
...overrides,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
// ── Core files present in every configuration ──────────────────────
|
|
15
|
+
const ALWAYS_PRESENT_FILES = [
|
|
16
|
+
'package.json',
|
|
17
|
+
'tsconfig.json',
|
|
18
|
+
'next.config.ts',
|
|
19
|
+
'.env.example',
|
|
20
|
+
'.gitignore',
|
|
21
|
+
'src/lib/config.ts',
|
|
22
|
+
'src/middleware.ts',
|
|
23
|
+
// Route re-exports
|
|
24
|
+
'src/app/webhook/route.ts',
|
|
25
|
+
'src/app/callback/route.ts',
|
|
26
|
+
'src/app/api/workers/register/route.ts',
|
|
27
|
+
'src/app/api/workers/route.ts',
|
|
28
|
+
'src/app/api/workers/[id]/route.ts',
|
|
29
|
+
'src/app/api/workers/[id]/heartbeat/route.ts',
|
|
30
|
+
'src/app/api/workers/[id]/poll/route.ts',
|
|
31
|
+
'src/app/api/sessions/route.ts',
|
|
32
|
+
'src/app/api/sessions/[id]/route.ts',
|
|
33
|
+
'src/app/api/sessions/[id]/claim/route.ts',
|
|
34
|
+
'src/app/api/sessions/[id]/status/route.ts',
|
|
35
|
+
'src/app/api/sessions/[id]/lock-refresh/route.ts',
|
|
36
|
+
'src/app/api/sessions/[id]/prompts/route.ts',
|
|
37
|
+
'src/app/api/sessions/[id]/transfer-ownership/route.ts',
|
|
38
|
+
'src/app/api/sessions/[id]/activity/route.ts',
|
|
39
|
+
'src/app/api/sessions/[id]/completion/route.ts',
|
|
40
|
+
'src/app/api/sessions/[id]/external-urls/route.ts',
|
|
41
|
+
'src/app/api/sessions/[id]/progress/route.ts',
|
|
42
|
+
'src/app/api/sessions/[id]/tool-error/route.ts',
|
|
43
|
+
'src/app/api/public/stats/route.ts',
|
|
44
|
+
'src/app/api/public/sessions/route.ts',
|
|
45
|
+
'src/app/api/public/sessions/[id]/route.ts',
|
|
46
|
+
'src/app/api/config/route.ts',
|
|
47
|
+
'src/app/api/cleanup/route.ts',
|
|
48
|
+
'src/app/api/issue-tracker-proxy/route.ts',
|
|
49
|
+
// Layout/page/css always present (dashboard or minimal variant)
|
|
50
|
+
'src/app/layout.tsx',
|
|
51
|
+
'src/app/page.tsx',
|
|
52
|
+
'src/app/globals.css',
|
|
53
|
+
// Agent definitions
|
|
54
|
+
'.claude/CLAUDE.md',
|
|
55
|
+
'AGENTS.md',
|
|
56
|
+
'.claude/agents/developer.md',
|
|
57
|
+
];
|
|
58
|
+
const DASHBOARD_ONLY_FILES = [
|
|
59
|
+
'src/app/pipeline/page.tsx',
|
|
60
|
+
'src/app/sessions/page.tsx',
|
|
61
|
+
'src/app/sessions/[id]/page.tsx',
|
|
62
|
+
'src/app/settings/page.tsx',
|
|
63
|
+
'postcss.config.mjs',
|
|
64
|
+
];
|
|
65
|
+
const CLI_ONLY_FILES = [
|
|
66
|
+
'cli/worker.ts',
|
|
67
|
+
'cli/orchestrator.ts',
|
|
68
|
+
'cli/worker-fleet.ts',
|
|
69
|
+
'cli/cleanup.ts',
|
|
70
|
+
];
|
|
71
|
+
// ── Test matrix: all 8 boolean combinations ────────────────────────
|
|
72
|
+
const COMBOS = [
|
|
73
|
+
{ name: 'all flags on', dashboard: true, cli: true, redis: true },
|
|
74
|
+
{ name: 'all flags off', dashboard: false, cli: false, redis: false },
|
|
75
|
+
{ name: 'dashboard only', dashboard: true, cli: false, redis: false },
|
|
76
|
+
{ name: 'cli only', dashboard: false, cli: true, redis: false },
|
|
77
|
+
{ name: 'dashboard + cli', dashboard: true, cli: true, redis: false },
|
|
78
|
+
{ name: 'redis only', dashboard: false, cli: false, redis: true },
|
|
79
|
+
{ name: 'dashboard + redis', dashboard: true, cli: false, redis: true },
|
|
80
|
+
{ name: 'cli + redis', dashboard: false, cli: true, redis: true },
|
|
81
|
+
];
|
|
82
|
+
// ── Smoke test ─────────────────────────────────────────────────────
|
|
83
|
+
describe('getTemplates', () => {
|
|
84
|
+
it('returns a non-empty Record<string, string> for the default config', () => {
|
|
85
|
+
const result = getTemplates(opts({ includeDashboard: true, includeCli: true, useRedis: true }));
|
|
86
|
+
expect(Object.keys(result).length).toBeGreaterThan(0);
|
|
87
|
+
for (const [key, value] of Object.entries(result)) {
|
|
88
|
+
expect(typeof key).toBe('string');
|
|
89
|
+
expect(typeof value).toBe('string');
|
|
90
|
+
expect(key.length).toBeGreaterThan(0);
|
|
91
|
+
expect(value.length).toBeGreaterThan(0);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
// ── File manifest assertions ───────────────────────────────────────
|
|
96
|
+
describe.each(COMBOS)('file manifest — $name (dashboard=$dashboard, cli=$cli, redis=$redis)', ({ dashboard, cli, redis }) => {
|
|
97
|
+
const files = getTemplates(opts({ includeDashboard: dashboard, includeCli: cli, useRedis: redis }));
|
|
98
|
+
const filePaths = Object.keys(files);
|
|
99
|
+
it('includes all always-present files', () => {
|
|
100
|
+
for (const f of ALWAYS_PRESENT_FILES) {
|
|
101
|
+
expect(filePaths, `missing: ${f}`).toContain(f);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
it(`${dashboard ? 'includes' : 'excludes'} dashboard-specific files`, () => {
|
|
105
|
+
for (const f of DASHBOARD_ONLY_FILES) {
|
|
106
|
+
if (dashboard) {
|
|
107
|
+
expect(filePaths, `expected dashboard file: ${f}`).toContain(f);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
expect(filePaths, `unexpected dashboard file: ${f}`).not.toContain(f);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it(`${cli ? 'includes' : 'excludes'} CLI-specific files`, () => {
|
|
115
|
+
for (const f of CLI_ONLY_FILES) {
|
|
116
|
+
if (cli) {
|
|
117
|
+
expect(filePaths, `expected CLI file: ${f}`).toContain(f);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
expect(filePaths, `unexpected CLI file: ${f}`).not.toContain(f);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
it('contains no unexpected files', () => {
|
|
125
|
+
const expected = new Set([
|
|
126
|
+
...ALWAYS_PRESENT_FILES,
|
|
127
|
+
...(dashboard ? DASHBOARD_ONLY_FILES : []),
|
|
128
|
+
...(cli ? CLI_ONLY_FILES : []),
|
|
129
|
+
]);
|
|
130
|
+
for (const f of filePaths) {
|
|
131
|
+
expect(expected, `unexpected file in output: ${f}`).toContain(f);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
// ── Dependency version assertions ──────────────────────────────────
|
|
136
|
+
describe.each(COMBOS)('generated package.json — $name (dashboard=$dashboard, cli=$cli, redis=$redis)', ({ dashboard, cli, redis }) => {
|
|
137
|
+
const files = getTemplates(opts({ includeDashboard: dashboard, includeCli: cli, useRedis: redis }));
|
|
138
|
+
const pkg = JSON.parse(files['package.json']);
|
|
139
|
+
it('has non-stale @renseiai/* dependency versions', () => {
|
|
140
|
+
const renseiDeps = Object.entries(pkg.dependencies)
|
|
141
|
+
.filter(([name]) => name.startsWith('@renseiai/'));
|
|
142
|
+
expect(renseiDeps.length).toBeGreaterThan(0);
|
|
143
|
+
for (const [name, version] of renseiDeps) {
|
|
144
|
+
// Versions must not be the old ^0.7.6
|
|
145
|
+
expect(version, `${name} has stale version ${version}`).not.toBe('^0.7.6');
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
it(`${dashboard ? 'includes' : 'excludes'} @renseiai/agentfactory-dashboard`, () => {
|
|
149
|
+
if (dashboard) {
|
|
150
|
+
expect(pkg.dependencies).toHaveProperty('@renseiai/agentfactory-dashboard');
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
expect(pkg.dependencies).not.toHaveProperty('@renseiai/agentfactory-dashboard');
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
it('dashboard dependency version matches other @renseiai/* versions', () => {
|
|
157
|
+
if (!dashboard)
|
|
158
|
+
return;
|
|
159
|
+
const coreVersion = pkg.dependencies['@renseiai/agentfactory'];
|
|
160
|
+
const dashVersion = pkg.dependencies['@renseiai/agentfactory-dashboard'];
|
|
161
|
+
expect(dashVersion).toBe(coreVersion);
|
|
162
|
+
});
|
|
163
|
+
it(`${dashboard ? 'includes' : 'excludes'} tailwind devDependencies`, () => {
|
|
164
|
+
if (dashboard) {
|
|
165
|
+
expect(pkg.devDependencies).toHaveProperty('@tailwindcss/postcss');
|
|
166
|
+
expect(pkg.devDependencies).toHaveProperty('tailwindcss');
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
expect(pkg.devDependencies).not.toHaveProperty('@tailwindcss/postcss');
|
|
170
|
+
expect(pkg.devDependencies).not.toHaveProperty('tailwindcss');
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
it(`${cli ? 'includes' : 'excludes'} CLI devDependencies (tsx, dotenv)`, () => {
|
|
174
|
+
if (cli) {
|
|
175
|
+
expect(pkg.devDependencies).toHaveProperty('tsx');
|
|
176
|
+
expect(pkg.devDependencies).toHaveProperty('dotenv');
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
expect(pkg.devDependencies).not.toHaveProperty('tsx');
|
|
180
|
+
expect(pkg.devDependencies).not.toHaveProperty('dotenv');
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
it(`${cli ? 'includes' : 'excludes'} CLI scripts`, () => {
|
|
184
|
+
const cliScripts = ['worker', 'orchestrator', 'worker-fleet', 'cleanup'];
|
|
185
|
+
for (const s of cliScripts) {
|
|
186
|
+
if (cli) {
|
|
187
|
+
expect(pkg.scripts, `missing script: ${s}`).toHaveProperty(s);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
expect(pkg.scripts, `unexpected script: ${s}`).not.toHaveProperty(s);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
// ── Redis .env.example assertions ──────────────────────────────────
|
|
196
|
+
describe.each(COMBOS)('.env.example — $name (dashboard=$dashboard, cli=$cli, redis=$redis)', ({ dashboard: _d, cli: _c, redis }) => {
|
|
197
|
+
const files = getTemplates(opts({ includeDashboard: _d, includeCli: _c, useRedis: redis }));
|
|
198
|
+
const envContent = files['.env.example'];
|
|
199
|
+
it(`${redis ? 'contains' : 'does not contain'} REDIS_URL`, () => {
|
|
200
|
+
if (redis) {
|
|
201
|
+
expect(envContent).toContain('REDIS_URL');
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
expect(envContent).not.toContain('REDIS_URL');
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
//# sourceMappingURL=templates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../src/__tests__/templates.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@renseiai/create-agentfactory-app",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Create an AgentFactory app — multi-agent fleet management for coding agents",
|
|
6
6
|
"author": "Rensei AI (https://rensei.ai)",
|
|
@@ -52,11 +52,14 @@
|
|
|
52
52
|
"dependencies": {},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/node": "^22.5.4",
|
|
55
|
-
"typescript": "^5.7.3"
|
|
55
|
+
"typescript": "^5.7.3",
|
|
56
|
+
"vitest": "^3.2.3"
|
|
56
57
|
},
|
|
57
58
|
"scripts": {
|
|
58
59
|
"build": "tsc",
|
|
59
60
|
"typecheck": "tsc --noEmit",
|
|
60
|
-
"clean": "rm -rf dist"
|
|
61
|
+
"clean": "rm -rf dist",
|
|
62
|
+
"test": "vitest run",
|
|
63
|
+
"test:watch": "vitest"
|
|
61
64
|
}
|
|
62
65
|
}
|