synarcx 0.3.3 → 0.3.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/dist/core/config.js +24 -24
- package/dist/core/init.js +2 -2
- package/dist/core/shared/artifact-cleanup.js +12 -0
- package/dist/core/update.js +4 -4
- package/package.json +87 -83
package/dist/core/config.js
CHANGED
|
@@ -4,32 +4,32 @@ export const SYNSPEC_MARKERS = {
|
|
|
4
4
|
end: '<!-- SYNSPEC:END -->'
|
|
5
5
|
};
|
|
6
6
|
export const AI_TOOLS = [
|
|
7
|
-
{ name: 'Amazon Q Developer', value: 'amazon-q', available: true, successLabel: 'Amazon Q Developer', skillsDir: '.amazonq' },
|
|
8
|
-
{ name: 'Antigravity', value: 'antigravity', available: true, successLabel: 'Antigravity', skillsDir: '.agent' },
|
|
9
|
-
{ name: 'Auggie (Augment CLI)', value: 'auggie', available: true, successLabel: 'Auggie', skillsDir: '.augment' },
|
|
10
|
-
{ name: 'Bob Shell', value: 'bob', available: true, successLabel: 'Bob Shell', skillsDir: '.bob' },
|
|
7
|
+
{ name: 'Amazon Q Developer', value: 'amazon-q', available: true, successLabel: 'Amazon Q Developer', skillsDir: '.amazonq', hasCommands: true },
|
|
8
|
+
{ name: 'Antigravity', value: 'antigravity', available: true, successLabel: 'Antigravity', skillsDir: '.agent', hasCommands: true },
|
|
9
|
+
{ name: 'Auggie (Augment CLI)', value: 'auggie', available: true, successLabel: 'Auggie', skillsDir: '.augment', hasCommands: true },
|
|
10
|
+
{ name: 'Bob Shell', value: 'bob', available: true, successLabel: 'Bob Shell', skillsDir: '.bob', hasCommands: true },
|
|
11
11
|
{ name: 'Claude Code', value: 'claude', available: true, successLabel: 'Claude Code', skillsDir: '.claude', hasCommands: true },
|
|
12
|
-
{ name: 'Cline', value: 'cline', available: true, successLabel: 'Cline', skillsDir: '.cline' },
|
|
13
|
-
{ name: 'Codex', value: 'codex', available: true, successLabel: 'Codex', skillsDir: '.codex' },
|
|
14
|
-
{ name: 'CodeBuddy Code (CLI)', value: 'codebuddy', available: true, successLabel: 'CodeBuddy Code', skillsDir: '.codebuddy' },
|
|
15
|
-
{ name: 'Continue', value: 'continue', available: true, successLabel: 'Continue (VS Code / JetBrains / Cli)', skillsDir: '.continue' },
|
|
16
|
-
{ name: 'CoStrict', value: 'costrict', available: true, successLabel: 'CoStrict', skillsDir: '.cospec' },
|
|
17
|
-
{ name: 'Crush', value: 'crush', available: true, successLabel: 'Crush', skillsDir: '.crush' },
|
|
18
|
-
{ name: 'Cursor', value: 'cursor', available: true, successLabel: 'Cursor', skillsDir: '.cursor' },
|
|
19
|
-
{ name: 'Factory Droid', value: 'factory', available: true, successLabel: 'Factory Droid', skillsDir: '.factory' },
|
|
20
|
-
{ name: 'Gemini CLI', value: 'gemini', available: true, successLabel: 'Gemini CLI', skillsDir: '.gemini' },
|
|
21
|
-
{ name: 'GitHub Copilot', value: 'github-copilot', available: true, successLabel: 'GitHub Copilot', skillsDir: '.github', detectionPaths: ['.github/copilot-instructions.md', '.github/instructions', '.github/workflows/copilot-setup-steps.yml', '.github/prompts', '.github/agents', '.github/skills', '.github/.mcp.json'] },
|
|
22
|
-
{ name: 'iFlow', value: 'iflow', available: true, successLabel: 'iFlow', skillsDir: '.iflow' },
|
|
23
|
-
{ name: 'Junie', value: 'junie', available: true, successLabel: 'Junie', skillsDir: '.junie' },
|
|
24
|
-
{ name: 'Kilo Code', value: 'kilocode', available: true, successLabel: 'Kilo Code', skillsDir: '.kilocode' },
|
|
25
|
-
{ name: 'Kiro', value: 'kiro', available: true, successLabel: 'Kiro', skillsDir: '.kiro' },
|
|
12
|
+
{ name: 'Cline', value: 'cline', available: true, successLabel: 'Cline', skillsDir: '.cline', hasCommands: true },
|
|
13
|
+
{ name: 'Codex', value: 'codex', available: true, successLabel: 'Codex', skillsDir: '.codex', hasCommands: true },
|
|
14
|
+
{ name: 'CodeBuddy Code (CLI)', value: 'codebuddy', available: true, successLabel: 'CodeBuddy Code', skillsDir: '.codebuddy', hasCommands: true },
|
|
15
|
+
{ name: 'Continue', value: 'continue', available: true, successLabel: 'Continue (VS Code / JetBrains / Cli)', skillsDir: '.continue', hasCommands: true },
|
|
16
|
+
{ name: 'CoStrict', value: 'costrict', available: true, successLabel: 'CoStrict', skillsDir: '.cospec', hasCommands: true },
|
|
17
|
+
{ name: 'Crush', value: 'crush', available: true, successLabel: 'Crush', skillsDir: '.crush', hasCommands: true },
|
|
18
|
+
{ name: 'Cursor', value: 'cursor', available: true, successLabel: 'Cursor', skillsDir: '.cursor', hasCommands: true },
|
|
19
|
+
{ name: 'Factory Droid', value: 'factory', available: true, successLabel: 'Factory Droid', skillsDir: '.factory', hasCommands: true },
|
|
20
|
+
{ name: 'Gemini CLI', value: 'gemini', available: true, successLabel: 'Gemini CLI', skillsDir: '.gemini', hasCommands: true },
|
|
21
|
+
{ name: 'GitHub Copilot', value: 'github-copilot', available: true, successLabel: 'GitHub Copilot', skillsDir: '.github', detectionPaths: ['.github/copilot-instructions.md', '.github/instructions', '.github/workflows/copilot-setup-steps.yml', '.github/prompts', '.github/agents', '.github/skills', '.github/.mcp.json'], hasCommands: true },
|
|
22
|
+
{ name: 'iFlow', value: 'iflow', available: true, successLabel: 'iFlow', skillsDir: '.iflow', hasCommands: true },
|
|
23
|
+
{ name: 'Junie', value: 'junie', available: true, successLabel: 'Junie', skillsDir: '.junie', hasCommands: true },
|
|
24
|
+
{ name: 'Kilo Code', value: 'kilocode', available: true, successLabel: 'Kilo Code', skillsDir: '.kilocode', hasCommands: true },
|
|
25
|
+
{ name: 'Kiro', value: 'kiro', available: true, successLabel: 'Kiro', skillsDir: '.kiro', hasCommands: true },
|
|
26
26
|
{ name: 'OpenCode', value: 'opencode', available: true, successLabel: 'OpenCode', skillsDir: '.opencode', hasCommands: true },
|
|
27
|
-
{ name: 'Pi', value: 'pi', available: true, successLabel: 'Pi', skillsDir: '.pi' },
|
|
28
|
-
{ name: 'Qoder', value: 'qoder', available: true, successLabel: 'Qoder', skillsDir: '.qoder' },
|
|
29
|
-
{ name: 'Lingma', value: 'lingma', available: true, successLabel: 'Lingma', skillsDir: '.lingma' },
|
|
30
|
-
{ name: 'Qwen Code', value: 'qwen', available: true, successLabel: 'Qwen Code', skillsDir: '.qwen' },
|
|
31
|
-
{ name: 'RooCode', value: 'roocode', available: true, successLabel: 'RooCode', skillsDir: '.roo' },
|
|
32
|
-
{ name: 'Windsurf', value: 'windsurf', available: true, successLabel: 'Windsurf', skillsDir: '.windsurf' },
|
|
27
|
+
{ name: 'Pi', value: 'pi', available: true, successLabel: 'Pi', skillsDir: '.pi', hasCommands: true },
|
|
28
|
+
{ name: 'Qoder', value: 'qoder', available: true, successLabel: 'Qoder', skillsDir: '.qoder', hasCommands: true },
|
|
29
|
+
{ name: 'Lingma', value: 'lingma', available: true, successLabel: 'Lingma', skillsDir: '.lingma', hasCommands: true },
|
|
30
|
+
{ name: 'Qwen Code', value: 'qwen', available: true, successLabel: 'Qwen Code', skillsDir: '.qwen', hasCommands: true },
|
|
31
|
+
{ name: 'RooCode', value: 'roocode', available: true, successLabel: 'RooCode', skillsDir: '.roo', hasCommands: true },
|
|
32
|
+
{ name: 'Windsurf', value: 'windsurf', available: true, successLabel: 'Windsurf', skillsDir: '.windsurf', hasCommands: true },
|
|
33
33
|
{ name: 'AGENTS.md (works with Amp, VS Code, …)', value: 'agents', available: false, successLabel: 'your AGENTS.md-compatible assistant' }
|
|
34
34
|
];
|
|
35
35
|
//# sourceMappingURL=config.js.map
|
package/dist/core/init.js
CHANGED
|
@@ -384,8 +384,8 @@ export class InitCommand {
|
|
|
384
384
|
const skillsDir = path.join(projectPath, tool.skillsDir, 'skills');
|
|
385
385
|
removedSkillCount += await removeSkillDirs(skillsDir);
|
|
386
386
|
}
|
|
387
|
-
// Generate commands if delivery includes commands
|
|
388
|
-
if (shouldGenerateCommands) {
|
|
387
|
+
// Generate commands if delivery includes commands and tool supports them
|
|
388
|
+
if (shouldGenerateCommands && hasCommands) {
|
|
389
389
|
const adapter = CommandAdapterRegistry.get(tool.value);
|
|
390
390
|
if (adapter) {
|
|
391
391
|
const generatedCommands = generateCommands(commandContents, adapter);
|
|
@@ -19,6 +19,18 @@ export async function removeSkillDirs(skillsDir) {
|
|
|
19
19
|
// Ignore errors
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
// Remove empty parent skills directory
|
|
23
|
+
try {
|
|
24
|
+
if (fs.existsSync(skillsDir)) {
|
|
25
|
+
const remaining = await fs.promises.readdir(skillsDir);
|
|
26
|
+
if (remaining.length === 0) {
|
|
27
|
+
await fs.promises.rmdir(skillsDir);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Ignore errors
|
|
33
|
+
}
|
|
22
34
|
return removed;
|
|
23
35
|
}
|
|
24
36
|
export async function removeUnselectedSkillDirs(skillsDir, desiredWorkflows) {
|
package/dist/core/update.js
CHANGED
|
@@ -144,12 +144,12 @@ export class UpdateCommand {
|
|
|
144
144
|
}
|
|
145
145
|
removedDeselectedSkillCount += await removeUnselectedSkillDirs(skillsDir, desiredWorkflows);
|
|
146
146
|
}
|
|
147
|
-
// Delete skill directories if delivery is commands-only
|
|
148
|
-
if (!shouldGenerateSkills) {
|
|
147
|
+
// Delete skill directories if delivery is commands-only or tool uses commands
|
|
148
|
+
if (!shouldGenerateSkills || tool.hasCommands) {
|
|
149
149
|
removedSkillCount += await removeSkillDirs(skillsDir);
|
|
150
150
|
}
|
|
151
|
-
// Generate commands if delivery includes commands
|
|
152
|
-
if (shouldGenerateCommands) {
|
|
151
|
+
// Generate commands if delivery includes commands and tool supports them
|
|
152
|
+
if (shouldGenerateCommands && tool.hasCommands) {
|
|
153
153
|
const adapter = CommandAdapterRegistry.get(tool.value);
|
|
154
154
|
if (adapter) {
|
|
155
155
|
const generatedCommands = generateCommands(commandContents, adapter);
|
package/package.json
CHANGED
|
@@ -1,83 +1,87 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "synarcx",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "Structured engineering workflows for AI coding assistants — persistent project memory, spec-driven development, and architecture drift prevention across every session.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"ai-workflow",
|
|
7
|
-
"claude-code",
|
|
8
|
-
"cursor",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"ai-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
"
|
|
40
|
-
"dist"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"test
|
|
57
|
-
"test:
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
},
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "synarcx",
|
|
3
|
+
"version": "0.3.4",
|
|
4
|
+
"description": "Structured engineering workflows for AI coding assistants — persistent project memory, spec-driven development, and architecture drift prevention across every session.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai-workflow",
|
|
7
|
+
"claude-code",
|
|
8
|
+
"cursor",
|
|
9
|
+
"opencode",
|
|
10
|
+
"codex",
|
|
11
|
+
"gemini",
|
|
12
|
+
"spec-driven-development",
|
|
13
|
+
"ai-coding-assistant",
|
|
14
|
+
"architecture-drift",
|
|
15
|
+
"persistent-context",
|
|
16
|
+
"engineering-workflow",
|
|
17
|
+
"ai-coding-workflow",
|
|
18
|
+
"specification",
|
|
19
|
+
"claude-code-workflow",
|
|
20
|
+
"ai-context-management"
|
|
21
|
+
],
|
|
22
|
+
"homepage": "https://github.com/funara/synarcx",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/funara/synarcx.git"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"author": "Adhi Rahmadian",
|
|
29
|
+
"type": "module",
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"default": "./dist/index.js"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"bin": {
|
|
40
|
+
"synarcx": "./dist/index.js"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"bin",
|
|
45
|
+
"schemas",
|
|
46
|
+
"scripts/postinstall.js",
|
|
47
|
+
"!dist/**/*.test.js",
|
|
48
|
+
"!dist/**/__tests__",
|
|
49
|
+
"!dist/**/*.map"
|
|
50
|
+
],
|
|
51
|
+
"scripts": {
|
|
52
|
+
"lint": "eslint src/",
|
|
53
|
+
"build": "node build.js",
|
|
54
|
+
"dev": "tsc --watch",
|
|
55
|
+
"dev:cli": "pnpm build && node bin/synarcx.js",
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"test:watch": "vitest",
|
|
58
|
+
"test:ui": "vitest --ui",
|
|
59
|
+
"test:coverage": "vitest --coverage",
|
|
60
|
+
"test:postinstall": "node scripts/postinstall.js",
|
|
61
|
+
"prepare": "pnpm run build",
|
|
62
|
+
"postinstall": "node scripts/postinstall.js"
|
|
63
|
+
},
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=20.19.0"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/node": "^24.2.0",
|
|
69
|
+
"@vitest/ui": "^3.2.4",
|
|
70
|
+
"eslint": "^9.39.2",
|
|
71
|
+
"typescript": "^5.9.3",
|
|
72
|
+
"typescript-eslint": "^8.50.1",
|
|
73
|
+
"vitest": "^3.2.4"
|
|
74
|
+
},
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"@inquirer/core": "^10.2.2",
|
|
77
|
+
"@inquirer/prompts": "^7.8.0",
|
|
78
|
+
"chalk": "^5.5.0",
|
|
79
|
+
"commander": "^14.0.0",
|
|
80
|
+
"cross-spawn": "7.0.6",
|
|
81
|
+
"fast-glob": "^3.3.3",
|
|
82
|
+
"ora": "^8.2.0",
|
|
83
|
+
"synarcx": "link:",
|
|
84
|
+
"yaml": "^2.8.2",
|
|
85
|
+
"zod": "^4.0.17"
|
|
86
|
+
}
|
|
87
|
+
}
|