@dusky-bluehour/agent-service 0.6.2 → 0.6.4
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 +51 -1
- package/antigravity/workflows/workflow-catalog.json +20 -15
- package/catalog/tool-catalog.ko.json +32 -0
- package/claude-code/workflows/workflow-catalog.json +32 -24
- package/codex/workflows/workflow-catalog.json +24 -18
- package/package.json +1 -1
- package/scripts/init.mjs +655 -82
- package/scripts/validate.mjs +60 -0
package/scripts/validate.mjs
CHANGED
|
@@ -84,6 +84,29 @@ async function validateCatalog() {
|
|
|
84
84
|
}
|
|
85
85
|
toolIdSet.add(tool.id);
|
|
86
86
|
|
|
87
|
+
if (typeof tool.install_root === 'string' && tool.install_root.trim()) {
|
|
88
|
+
const installRoot = tool.install_root.trim().replaceAll('\\', '/');
|
|
89
|
+
if (path.posix.isAbsolute(installRoot) || installRoot.split('/').includes('..')) {
|
|
90
|
+
fail(`[catalog] install_root 형식 오류: ${tool.id}/${tool.install_root}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const installRefs = Array.isArray(tool.install_root_reference) ? tool.install_root_reference : [];
|
|
95
|
+
for (const ref of installRefs) {
|
|
96
|
+
if (typeof ref !== 'string' || !ref.trim()) {
|
|
97
|
+
fail(`[catalog] install_root_reference 형식 오류: ${tool.id}`);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const normalizedRef = ref.trim();
|
|
101
|
+
const isUrl = normalizedRef.startsWith('https://') || normalizedRef.startsWith('http://');
|
|
102
|
+
if (isUrl) continue;
|
|
103
|
+
|
|
104
|
+
const refPath = path.join(rootDir, normalizedRef);
|
|
105
|
+
if (!(await exists(refPath))) {
|
|
106
|
+
fail(`[catalog] install_root_reference 경로 누락: ${tool.id}/${normalizedRef}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
87
110
|
const toolRootPath = path.join(rootDir, tool.root);
|
|
88
111
|
if (!(await exists(toolRootPath))) {
|
|
89
112
|
fail(`[catalog] tool root 누락: ${tool.root}`);
|
|
@@ -106,6 +129,13 @@ async function validateCatalog() {
|
|
|
106
129
|
}
|
|
107
130
|
componentIds.add(component.id);
|
|
108
131
|
|
|
132
|
+
if (typeof component.install_path === 'string' && component.install_path.trim()) {
|
|
133
|
+
const installPath = component.install_path.trim().replaceAll('\\', '/');
|
|
134
|
+
if (path.posix.isAbsolute(installPath) || installPath.split('/').includes('..')) {
|
|
135
|
+
fail(`[catalog] component install_path 형식 오류: ${tool.id}/${component.id}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
109
139
|
const compPath = path.join(rootDir, tool.root, component.path);
|
|
110
140
|
if (!(await exists(compPath))) {
|
|
111
141
|
fail(`[catalog] component 경로 누락: ${tool.id}/${component.path}`);
|
|
@@ -347,6 +377,12 @@ async function validateWorkflowCatalog(toolName, commandIds) {
|
|
|
347
377
|
if (!wf.id || !wf.name) {
|
|
348
378
|
fail(`[${toolName}] workflow id/name 누락`);
|
|
349
379
|
}
|
|
380
|
+
if (!wf.summary) {
|
|
381
|
+
fail(`[${toolName}] workflow summary 누락: ${wf.id ?? 'unknown'}`);
|
|
382
|
+
}
|
|
383
|
+
if (!wf.when_to_use) {
|
|
384
|
+
fail(`[${toolName}] workflow when_to_use 누락: ${wf.id ?? 'unknown'}`);
|
|
385
|
+
}
|
|
350
386
|
|
|
351
387
|
if (!Array.isArray(wf.stages) || wf.stages.length === 0) {
|
|
352
388
|
fail(`[${toolName}] stage 누락: ${wf.id ?? 'unknown'}`);
|
|
@@ -496,6 +532,30 @@ async function runCliSmokeTests() {
|
|
|
496
532
|
fail(`[cli] install dry-run 실행 실패: ${error.message}`);
|
|
497
533
|
}
|
|
498
534
|
|
|
535
|
+
try {
|
|
536
|
+
await execFileAsync(
|
|
537
|
+
nodeBin,
|
|
538
|
+
[
|
|
539
|
+
cliPath,
|
|
540
|
+
'install',
|
|
541
|
+
'--tool',
|
|
542
|
+
'antigravity',
|
|
543
|
+
'--components',
|
|
544
|
+
'skills,workflows',
|
|
545
|
+
'--install-root',
|
|
546
|
+
'antigravity=.agent-custom',
|
|
547
|
+
'--target',
|
|
548
|
+
'/tmp/tri-agent-manager-validate',
|
|
549
|
+
'--dry-run',
|
|
550
|
+
'--yes',
|
|
551
|
+
'--non-interactive'
|
|
552
|
+
],
|
|
553
|
+
{ cwd: rootDir }
|
|
554
|
+
);
|
|
555
|
+
} catch (error) {
|
|
556
|
+
fail(`[cli] install --install-root dry-run 실행 실패: ${error.message}`);
|
|
557
|
+
}
|
|
558
|
+
|
|
499
559
|
try {
|
|
500
560
|
await execFileAsync(
|
|
501
561
|
nodeBin,
|