@t4h.framework/cli 0.0.0-experimental-2f9c297 → 0.0.0-experimental-20261019200538
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/CHANGELOG.md +14 -0
- package/dist/bin/bin.js +1 -20
- package/dist/bin/bin.js.map +1 -1
- package/dist/commands/ai/ai-bootstrap.js +51 -185
- package/dist/commands/ai/ai-bootstrap.js.map +1 -1
- package/dist/commands/build/build.js +2 -6
- package/dist/commands/build/build.js.map +1 -1
- package/dist/commands/dev/dev.js +1 -8
- package/dist/commands/dev/dev.js.map +1 -1
- package/dist/commands/publish/publish.js +0 -1
- package/dist/commands/publish/publish.js.map +1 -1
- package/package.json +3 -12
- package/LICENSE +0 -21
- package/dist/commands/ai/ai-hook.js +0 -84
- package/dist/commands/ai/ai-hook.js.map +0 -1
- package/dist/commands/ai/tools/agent-instructions.js +0 -75
- package/dist/commands/ai/tools/agent-instructions.js.map +0 -1
- package/dist/commands/ai/tools/agent-settings.js +0 -61
- package/dist/commands/ai/tools/agent-settings.js.map +0 -1
- package/dist/commands/ai/tools/assets-lock.js +0 -34
- package/dist/commands/ai/tools/assets-lock.js.map +0 -1
- package/dist/commands/check/check.js +0 -185
- package/dist/commands/check/check.js.map +0 -1
- package/dist/commands/mcp/mcp-server.js +0 -235
- package/dist/commands/mcp/mcp-server.js.map +0 -1
- package/dist/commands/mcp/mcp-tools.js +0 -283
- package/dist/commands/mcp/mcp-tools.js.map +0 -1
- package/dist/commands/mcp/mcp.js +0 -71
- package/dist/commands/mcp/mcp.js.map +0 -1
- package/dist/commands/runtime/runtime.js +0 -143
- package/dist/commands/runtime/runtime.js.map +0 -1
- package/dist/commands/workflows/workflows.js +0 -166
- package/dist/commands/workflows/workflows.js.map +0 -1
- package/dist/tools/debug-log-option.js +0 -13
- package/dist/tools/debug-log-option.js.map +0 -1
- package/dist/tools/dev-server-client.js +0 -261
- package/dist/tools/dev-server-client.js.map +0 -1
- package/dist/tools/load-dev.js +0 -23
- package/dist/tools/load-dev.js.map +0 -1
- package/dist/tools/project-package.js +0 -67
- package/dist/tools/project-package.js.map +0 -1
- package/dist/tools/project-scripts.js +0 -53
- package/dist/tools/project-scripts.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-dev.js","sourceRoot":"","sources":["../../src/tools/load-dev.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAA;AAM7B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,EAAE,CACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;AAEvD;;;GAGG;AACH,SAAS,cAAc,CACrB,MAAe,EACf,KAA0C;IAE1C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAA;IAEhE,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,mBAAmB,CAC3B,GAAG,gBAAgB,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAC1I,CAAA;IAEH,OAAO,MAAM,CAAA;AACf,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,UAAkB,EAClB,WAAmD,EAAE;IAErD,OAAO,cAAc,CACnB,MAAM,oBAAoB,CAAa,gBAAgB,EAAE,UAAU,CAAC,EACpE,QAAQ,CACT,CAAA;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,WAAwD,EAAE;IAE1D,OAAO,cAAc,CACnB,MAAM,oBAAoB,CACxB,gBAAgB,EAChB,UAAU,EACV,SAAS,CACV,EACD,QAAQ,CACT,CAAA;AACH,CAAC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { pathToFileURL } from 'node:url';
|
|
5
|
-
export const DEV_PACKAGE_NAME = '@t4h.framework/dev';
|
|
6
|
-
/** The project lacks a package the command needs; the CLI prints the message only. */
|
|
7
|
-
export class ProjectPackageError extends Error {
|
|
8
|
-
name = 'ProjectPackageError';
|
|
9
|
-
}
|
|
10
|
-
export class ProjectPackageNotFoundError extends ProjectPackageError {
|
|
11
|
-
packageName;
|
|
12
|
-
projectDir;
|
|
13
|
-
name = 'ProjectPackageNotFoundError';
|
|
14
|
-
constructor(packageName, projectDir) {
|
|
15
|
-
super(`${packageName} is not installed in ${projectDir}; add it to the project (e.g. \`yarn add -D ${packageName}\`)`);
|
|
16
|
-
this.packageName = packageName;
|
|
17
|
-
this.projectDir = projectDir;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/** The file `exports[subpath]` points to for `import`, as Node would pick it. */
|
|
21
|
-
function toImportTarget(exports) {
|
|
22
|
-
if (exports === undefined)
|
|
23
|
-
return null;
|
|
24
|
-
if (typeof exports === 'string')
|
|
25
|
-
return exports;
|
|
26
|
-
for (const condition of ['import', 'node', 'default'])
|
|
27
|
-
if (condition in exports)
|
|
28
|
-
return toImportTarget(exports[condition]);
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
/** Resolves `subpath` against `main` / `exports` of a package json. */
|
|
32
|
-
function toExportTarget({ main, exports }, subpath) {
|
|
33
|
-
if (exports === undefined)
|
|
34
|
-
return subpath === '.' ? (main ?? 'index.js') : subpath;
|
|
35
|
-
const isSubpathMap = typeof exports === 'object' &&
|
|
36
|
-
Object.keys(exports).some(key => key.startsWith('.'));
|
|
37
|
-
if (!isSubpathMap)
|
|
38
|
-
return subpath === '.' ? toImportTarget(exports) : null;
|
|
39
|
-
return toImportTarget(exports[subpath]);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Finds `packageName` the way the project itself would: in the `node_modules`
|
|
43
|
-
* of `projectDir` and its parents, never next to the CLI. That is what lets the
|
|
44
|
-
* project pin the version the CLI runs.
|
|
45
|
-
*/
|
|
46
|
-
export function findProjectPackage(packageName, projectDir) {
|
|
47
|
-
const lookupPaths = createRequire(path.join(projectDir, 'package.json')).resolve.paths(packageName) ?? [];
|
|
48
|
-
for (const lookupPath of lookupPaths) {
|
|
49
|
-
const dir = path.join(lookupPath, packageName);
|
|
50
|
-
const packageJsonPath = path.join(dir, 'package.json');
|
|
51
|
-
if (!fs.existsSync(packageJsonPath))
|
|
52
|
-
continue;
|
|
53
|
-
const { version } = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
54
|
-
return { name: packageName, version, dir: fs.realpathSync(dir) };
|
|
55
|
-
}
|
|
56
|
-
throw new ProjectPackageNotFoundError(packageName, projectDir);
|
|
57
|
-
}
|
|
58
|
-
/** Imports `packageName[/subpath]` from the project, see `findProjectPackage`. */
|
|
59
|
-
export async function importProjectPackage(packageName, projectDir, subpath = '.') {
|
|
60
|
-
const projectPackage = findProjectPackage(packageName, projectDir);
|
|
61
|
-
const target = toExportTarget(JSON.parse(fs.readFileSync(path.join(projectPackage.dir, 'package.json'), 'utf8')), subpath);
|
|
62
|
-
if (!target)
|
|
63
|
-
throw new ProjectPackageError(`${packageName}@${projectPackage.version} does not export "${subpath}"; upgrade it in ${projectDir}`);
|
|
64
|
-
const module = await import(pathToFileURL(path.join(projectPackage.dir, target)).href);
|
|
65
|
-
return { ...module, package: projectPackage };
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=project-package.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-package.js","sourceRoot":"","sources":["../../src/tools/project-package.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
const LOCKFILES = [
|
|
5
|
-
['yarn.lock', 'yarn'],
|
|
6
|
-
['pnpm-lock.yaml', 'pnpm'],
|
|
7
|
-
['package-lock.json', 'npm'],
|
|
8
|
-
];
|
|
9
|
-
/** The package manager of the project: its lockfile, here or in a workspace root. */
|
|
10
|
-
export function detectPackageManager(projectDir) {
|
|
11
|
-
let dir = path.resolve(projectDir);
|
|
12
|
-
while (true) {
|
|
13
|
-
for (const [lockfile, packageManager] of LOCKFILES)
|
|
14
|
-
if (fs.existsSync(path.join(dir, lockfile)))
|
|
15
|
-
return packageManager;
|
|
16
|
-
const parent = path.dirname(dir);
|
|
17
|
-
if (parent === dir)
|
|
18
|
-
return 'npm';
|
|
19
|
-
dir = parent;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export function readProjectScripts(projectDir) {
|
|
23
|
-
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
24
|
-
if (!fs.existsSync(packageJsonPath))
|
|
25
|
-
return {};
|
|
26
|
-
const { scripts } = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
27
|
-
return scripts && typeof scripts === 'object' ? scripts : {};
|
|
28
|
-
}
|
|
29
|
-
export function runCommand(command, args, cwd) {
|
|
30
|
-
return new Promise(resolve => {
|
|
31
|
-
// CI=true keeps watch-mode runners (vitest, jest) from waiting for input.
|
|
32
|
-
const child = spawn(command, args, {
|
|
33
|
-
cwd,
|
|
34
|
-
env: { ...process.env, CI: 'true', FORCE_COLOR: '0' },
|
|
35
|
-
shell: process.platform === 'win32',
|
|
36
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
37
|
-
});
|
|
38
|
-
const chunks = [];
|
|
39
|
-
child.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
40
|
-
child.stderr.on('data', (chunk) => chunks.push(chunk));
|
|
41
|
-
const done = (exitCode, extra = '') => resolve({
|
|
42
|
-
command: [command, ...args].join(' '),
|
|
43
|
-
exitCode,
|
|
44
|
-
output: Buffer.concat(chunks).toString('utf8') + extra,
|
|
45
|
-
});
|
|
46
|
-
child.on('error', error => done(127, error.message));
|
|
47
|
-
child.on('close', code => done(code ?? 1));
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
export function runProjectScript(projectDir, script) {
|
|
51
|
-
return runCommand(detectPackageManager(projectDir), ['run', script], projectDir);
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=project-scripts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-scripts.js","sourceRoot":"","sources":["../../src/tools/project-scripts.ts"],"names":[],"mappings":"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"}
|