@bhimudev/gnanai 0.4.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 +270 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +188 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/commands/cleanup.d.ts +21 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +380 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/dispatch.d.ts +13 -0
- package/dist/commands/dispatch.d.ts.map +1 -0
- package/dist/commands/dispatch.js +85 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +155 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +167 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +711 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/knowledge-sync.d.ts +69 -0
- package/dist/commands/knowledge-sync.d.ts.map +1 -0
- package/dist/commands/knowledge-sync.js +661 -0
- package/dist/commands/knowledge-sync.js.map +1 -0
- package/dist/commands/knowledge.d.ts +35 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +254 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/rollback.d.ts +13 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +186 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/setup-config.d.ts +6 -0
- package/dist/commands/setup-config.d.ts.map +1 -0
- package/dist/commands/setup-config.js +663 -0
- package/dist/commands/setup-config.js.map +1 -0
- package/dist/commands/setup-project.d.ts +6 -0
- package/dist/commands/setup-project.d.ts.map +1 -0
- package/dist/commands/setup-project.js +361 -0
- package/dist/commands/setup-project.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +293 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +51 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +182 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +173 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +10 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +435 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/worktree.d.ts +30 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +262 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/generator/claude-cli.d.ts +24 -0
- package/dist/generator/claude-cli.d.ts.map +1 -0
- package/dist/generator/claude-cli.js +239 -0
- package/dist/generator/claude-cli.js.map +1 -0
- package/dist/generator/prompt-builder.d.ts +7 -0
- package/dist/generator/prompt-builder.d.ts.map +1 -0
- package/dist/generator/prompt-builder.js +144 -0
- package/dist/generator/prompt-builder.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/embeddings.d.ts +53 -0
- package/dist/mcp/embeddings.d.ts.map +1 -0
- package/dist/mcp/embeddings.js +68 -0
- package/dist/mcp/embeddings.js.map +1 -0
- package/dist/mcp/hybrid-search.d.ts +25 -0
- package/dist/mcp/hybrid-search.d.ts.map +1 -0
- package/dist/mcp/hybrid-search.js +72 -0
- package/dist/mcp/hybrid-search.js.map +1 -0
- package/dist/mcp/knowledge-server.d.ts +4 -0
- package/dist/mcp/knowledge-server.d.ts.map +1 -0
- package/dist/mcp/knowledge-server.js +294 -0
- package/dist/mcp/knowledge-server.js.map +1 -0
- package/dist/mcp/knowledge-utils.d.ts +65 -0
- package/dist/mcp/knowledge-utils.d.ts.map +1 -0
- package/dist/mcp/knowledge-utils.js +207 -0
- package/dist/mcp/knowledge-utils.js.map +1 -0
- package/dist/mcp/search-factory.d.ts +9 -0
- package/dist/mcp/search-factory.d.ts.map +1 -0
- package/dist/mcp/search-factory.js +23 -0
- package/dist/mcp/search-factory.js.map +1 -0
- package/dist/mcp/search-index.d.ts +45 -0
- package/dist/mcp/search-index.d.ts.map +1 -0
- package/dist/mcp/search-index.js +2 -0
- package/dist/mcp/search-index.js.map +1 -0
- package/dist/mcp/search-minisearch.d.ts +46 -0
- package/dist/mcp/search-minisearch.d.ts.map +1 -0
- package/dist/mcp/search-minisearch.js +99 -0
- package/dist/mcp/search-minisearch.js.map +1 -0
- package/dist/mcp/search-sqlite.d.ts +30 -0
- package/dist/mcp/search-sqlite.d.ts.map +1 -0
- package/dist/mcp/search-sqlite.js +188 -0
- package/dist/mcp/search-sqlite.js.map +1 -0
- package/dist/mcp/vector-store.d.ts +52 -0
- package/dist/mcp/vector-store.d.ts.map +1 -0
- package/dist/mcp/vector-store.js +183 -0
- package/dist/mcp/vector-store.js.map +1 -0
- package/dist/scaffold/copy-core-agents.d.ts +2 -0
- package/dist/scaffold/copy-core-agents.d.ts.map +1 -0
- package/dist/scaffold/copy-core-agents.js +90 -0
- package/dist/scaffold/copy-core-agents.js.map +1 -0
- package/dist/scaffold/create-claude-settings.d.ts +40 -0
- package/dist/scaffold/create-claude-settings.d.ts.map +1 -0
- package/dist/scaffold/create-claude-settings.js +422 -0
- package/dist/scaffold/create-claude-settings.js.map +1 -0
- package/dist/scaffold/create-config.d.ts +14 -0
- package/dist/scaffold/create-config.d.ts.map +1 -0
- package/dist/scaffold/create-config.js +199 -0
- package/dist/scaffold/create-config.js.map +1 -0
- package/dist/scaffold/create-project-description.d.ts +12 -0
- package/dist/scaffold/create-project-description.d.ts.map +1 -0
- package/dist/scaffold/create-project-description.js +104 -0
- package/dist/scaffold/create-project-description.js.map +1 -0
- package/dist/scaffold/create-structure.d.ts +2 -0
- package/dist/scaffold/create-structure.d.ts.map +1 -0
- package/dist/scaffold/create-structure.js +146 -0
- package/dist/scaffold/create-structure.js.map +1 -0
- package/dist/types/dependency-analysis.d.ts +11 -0
- package/dist/types/dependency-analysis.d.ts.map +1 -0
- package/dist/types/dependency-analysis.js +2 -0
- package/dist/types/dependency-analysis.js.map +1 -0
- package/dist/types/index.d.ts +526 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/task.d.ts +25 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +3 -0
- package/dist/types/task.js.map +1 -0
- package/dist/utils/analyze-files.d.ts +7 -0
- package/dist/utils/analyze-files.d.ts.map +1 -0
- package/dist/utils/analyze-files.js +27 -0
- package/dist/utils/analyze-files.js.map +1 -0
- package/dist/utils/backup.d.ts +102 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +352 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/ci-provider.d.ts +23 -0
- package/dist/utils/ci-provider.d.ts.map +1 -0
- package/dist/utils/ci-provider.js +525 -0
- package/dist/utils/ci-provider.js.map +1 -0
- package/dist/utils/ci-status.d.ts +57 -0
- package/dist/utils/ci-status.d.ts.map +1 -0
- package/dist/utils/ci-status.js +349 -0
- package/dist/utils/ci-status.js.map +1 -0
- package/dist/utils/dependency-analysis.d.ts +34 -0
- package/dist/utils/dependency-analysis.d.ts.map +1 -0
- package/dist/utils/dependency-analysis.js +298 -0
- package/dist/utils/dependency-analysis.js.map +1 -0
- package/dist/utils/detect-git.d.ts +57 -0
- package/dist/utils/detect-git.d.ts.map +1 -0
- package/dist/utils/detect-git.js +439 -0
- package/dist/utils/detect-git.js.map +1 -0
- package/dist/utils/detect-mcp.d.ts +32 -0
- package/dist/utils/detect-mcp.d.ts.map +1 -0
- package/dist/utils/detect-mcp.js +178 -0
- package/dist/utils/detect-mcp.js.map +1 -0
- package/dist/utils/detect-project.d.ts +3 -0
- package/dist/utils/detect-project.d.ts.map +1 -0
- package/dist/utils/detect-project.js +155 -0
- package/dist/utils/detect-project.js.map +1 -0
- package/dist/utils/file-comparison.d.ts +89 -0
- package/dist/utils/file-comparison.d.ts.map +1 -0
- package/dist/utils/file-comparison.js +301 -0
- package/dist/utils/file-comparison.js.map +1 -0
- package/dist/utils/file-merger.d.ts +74 -0
- package/dist/utils/file-merger.d.ts.map +1 -0
- package/dist/utils/file-merger.js +350 -0
- package/dist/utils/file-merger.js.map +1 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/managed-process.d.ts +109 -0
- package/dist/utils/managed-process.d.ts.map +1 -0
- package/dist/utils/managed-process.js +481 -0
- package/dist/utils/managed-process.js.map +1 -0
- package/dist/utils/merge-claude-settings.d.ts +65 -0
- package/dist/utils/merge-claude-settings.d.ts.map +1 -0
- package/dist/utils/merge-claude-settings.js +133 -0
- package/dist/utils/merge-claude-settings.js.map +1 -0
- package/dist/utils/migration.d.ts +74 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +345 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/process-health.d.ts +51 -0
- package/dist/utils/process-health.d.ts.map +1 -0
- package/dist/utils/process-health.js +123 -0
- package/dist/utils/process-health.js.map +1 -0
- package/dist/utils/process-registry.d.ts +20 -0
- package/dist/utils/process-registry.d.ts.map +1 -0
- package/dist/utils/process-registry.js +151 -0
- package/dist/utils/process-registry.js.map +1 -0
- package/dist/utils/process-tree.d.ts +51 -0
- package/dist/utils/process-tree.d.ts.map +1 -0
- package/dist/utils/process-tree.js +499 -0
- package/dist/utils/process-tree.js.map +1 -0
- package/dist/utils/repair-mcp-config.d.ts +15 -0
- package/dist/utils/repair-mcp-config.d.ts.map +1 -0
- package/dist/utils/repair-mcp-config.js +129 -0
- package/dist/utils/repair-mcp-config.js.map +1 -0
- package/dist/utils/task-lifecycle.d.ts +60 -0
- package/dist/utils/task-lifecycle.d.ts.map +1 -0
- package/dist/utils/task-lifecycle.js +310 -0
- package/dist/utils/task-lifecycle.js.map +1 -0
- package/dist/utils/update-agent-mcp.d.ts +7 -0
- package/dist/utils/update-agent-mcp.d.ts.map +1 -0
- package/dist/utils/update-agent-mcp.js +115 -0
- package/dist/utils/update-agent-mcp.js.map +1 -0
- package/dist/utils/update-agent-templates.d.ts +6 -0
- package/dist/utils/update-agent-templates.d.ts.map +1 -0
- package/dist/utils/update-agent-templates.js +56 -0
- package/dist/utils/update-agent-templates.js.map +1 -0
- package/dist/utils/update-config-ci.d.ts +7 -0
- package/dist/utils/update-config-ci.d.ts.map +1 -0
- package/dist/utils/update-config-ci.js +72 -0
- package/dist/utils/update-config-ci.js.map +1 -0
- package/dist/utils/update-config-git.d.ts +18 -0
- package/dist/utils/update-config-git.d.ts.map +1 -0
- package/dist/utils/update-config-git.js +146 -0
- package/dist/utils/update-config-git.js.map +1 -0
- package/dist/utils/update-config-mcp.d.ts +7 -0
- package/dist/utils/update-config-mcp.d.ts.map +1 -0
- package/dist/utils/update-config-mcp.js +98 -0
- package/dist/utils/update-config-mcp.js.map +1 -0
- package/dist/utils/validate-config.d.ts +3 -0
- package/dist/utils/validate-config.d.ts.map +1 -0
- package/dist/utils/validate-config.js +109 -0
- package/dist/utils/validate-config.js.map +1 -0
- package/dist/utils/version-tracker.d.ts +130 -0
- package/dist/utils/version-tracker.d.ts.map +1 -0
- package/dist/utils/version-tracker.js +298 -0
- package/dist/utils/version-tracker.js.map +1 -0
- package/dist/utils/worktree.d.ts +68 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +446 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +77 -0
- package/templates/ARCHAI_README.md +329 -0
- package/templates/CLAUDE.md +67 -0
- package/templates/PROMPTS.md +506 -0
- package/templates/core-agents/boss-agent.md +671 -0
- package/templates/core-agents/cleanup-agent.md +145 -0
- package/templates/core-agents/code-reviewer.md +175 -0
- package/templates/core-agents/critical-reviewer.md +117 -0
- package/templates/core-agents/deep-analyst.md +216 -0
- package/templates/core-agents/finalization-agent.md +252 -0
- package/templates/core-agents/git-coordinator.md +240 -0
- package/templates/core-agents/implementation-agent.md +151 -0
- package/templates/core-agents/maestro-agent.md +413 -0
- package/templates/core-agents/maestro-headless-agent.md +422 -0
- package/templates/core-agents/plan-validator.md +198 -0
- package/templates/core-agents/quick-fix.md +56 -0
- package/templates/core-agents/routing-templates.md +338 -0
- package/templates/core-agents/task-orchestrator.md +143 -0
- package/templates/core-agents/task-prep.md +202 -0
- package/templates/core-agents/tdd-designer.md +143 -0
- package/templates/specialist-meta.md +275 -0
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
// Irreversible/dangerous actions - ALWAYS denied even in permissive mode
|
|
4
|
+
const ALWAYS_DENY = [
|
|
5
|
+
// Destructive file operations
|
|
6
|
+
'rm -rf *',
|
|
7
|
+
'rm -r *',
|
|
8
|
+
'rmdir *',
|
|
9
|
+
'del /s *',
|
|
10
|
+
'rd /s *',
|
|
11
|
+
// Destructive git
|
|
12
|
+
'git push --force*',
|
|
13
|
+
'git push -f*',
|
|
14
|
+
'git reset --hard*',
|
|
15
|
+
'git clean -fd*',
|
|
16
|
+
'git clean -f*',
|
|
17
|
+
'git checkout -- .',
|
|
18
|
+
// System damage
|
|
19
|
+
'sudo *',
|
|
20
|
+
'chmod 777 *',
|
|
21
|
+
'chmod -R 777 *',
|
|
22
|
+
'chown *',
|
|
23
|
+
'> /dev/*',
|
|
24
|
+
'mkfs*',
|
|
25
|
+
'dd if=*',
|
|
26
|
+
'format *',
|
|
27
|
+
// Credential exposure
|
|
28
|
+
'cat ~/.ssh/*',
|
|
29
|
+
'cat *id_rsa*',
|
|
30
|
+
'cat *credentials*',
|
|
31
|
+
'cat *.pem',
|
|
32
|
+
'cat .env',
|
|
33
|
+
'type .env',
|
|
34
|
+
'echo $*SECRET*',
|
|
35
|
+
'echo $*PASSWORD*',
|
|
36
|
+
'echo $*TOKEN*',
|
|
37
|
+
'echo $*API_KEY*',
|
|
38
|
+
'printenv *SECRET*',
|
|
39
|
+
'printenv *PASSWORD*',
|
|
40
|
+
// Remote code execution
|
|
41
|
+
'curl * | bash',
|
|
42
|
+
'curl * | sh',
|
|
43
|
+
'wget * -O - | bash',
|
|
44
|
+
'wget * | sh',
|
|
45
|
+
'eval *',
|
|
46
|
+
// Command substitution attacks
|
|
47
|
+
// Note: *$(cmd) patterns are omitted because the $( causes mismatched
|
|
48
|
+
// parentheses inside the Bash(pattern) wrapper in settings.local.json.
|
|
49
|
+
// The backtick variants and direct command denials still provide coverage.
|
|
50
|
+
'*`rm *',
|
|
51
|
+
'*`sudo *',
|
|
52
|
+
// Pipe to dangerous commands
|
|
53
|
+
'*| rm *',
|
|
54
|
+
'*| sudo *',
|
|
55
|
+
'*| sh',
|
|
56
|
+
'*| bash',
|
|
57
|
+
'*| sh -c *',
|
|
58
|
+
'*| bash -c *',
|
|
59
|
+
// Process/system destruction
|
|
60
|
+
'kill -9 *',
|
|
61
|
+
'killall *',
|
|
62
|
+
'pkill -9 *',
|
|
63
|
+
'taskkill /f *',
|
|
64
|
+
'shutdown*',
|
|
65
|
+
'reboot*',
|
|
66
|
+
'halt*',
|
|
67
|
+
'poweroff*',
|
|
68
|
+
// Database destruction
|
|
69
|
+
'*DROP DATABASE*',
|
|
70
|
+
'*DROP TABLE*',
|
|
71
|
+
'*TRUNCATE TABLE*',
|
|
72
|
+
'*DELETE FROM * WHERE 1*',
|
|
73
|
+
'*DELETE FROM * WHERE true*',
|
|
74
|
+
// Container/infra destruction
|
|
75
|
+
'docker system prune -a*',
|
|
76
|
+
'docker rm -f *',
|
|
77
|
+
'docker rmi -f*',
|
|
78
|
+
'kubectl delete namespace*',
|
|
79
|
+
'terraform destroy*',
|
|
80
|
+
];
|
|
81
|
+
// Commands allowed in strict mode (safe operations)
|
|
82
|
+
const STRICT_ALLOW = [
|
|
83
|
+
// Package managers - read/install only
|
|
84
|
+
'{pm} install*',
|
|
85
|
+
'{pm} ci',
|
|
86
|
+
'{pm} run *',
|
|
87
|
+
'{pm} test*',
|
|
88
|
+
'{pm} exec *',
|
|
89
|
+
'{pm} list*',
|
|
90
|
+
'{pm} outdated*',
|
|
91
|
+
'{pm} audit*',
|
|
92
|
+
// Build & test tools
|
|
93
|
+
'tsc *',
|
|
94
|
+
'tsc',
|
|
95
|
+
'eslint *',
|
|
96
|
+
'prettier --check *',
|
|
97
|
+
'prettier --write *',
|
|
98
|
+
'jest *',
|
|
99
|
+
'jest',
|
|
100
|
+
'vitest *',
|
|
101
|
+
'vitest',
|
|
102
|
+
'pytest *',
|
|
103
|
+
'pytest',
|
|
104
|
+
'cargo test*',
|
|
105
|
+
'cargo build*',
|
|
106
|
+
'cargo check*',
|
|
107
|
+
'cargo clippy*',
|
|
108
|
+
'go test*',
|
|
109
|
+
'go build*',
|
|
110
|
+
'go vet*',
|
|
111
|
+
// Read-only operations
|
|
112
|
+
'cat *',
|
|
113
|
+
'head *',
|
|
114
|
+
'tail *',
|
|
115
|
+
'less *',
|
|
116
|
+
'more *',
|
|
117
|
+
'grep *',
|
|
118
|
+
'rg *',
|
|
119
|
+
'find *',
|
|
120
|
+
'fd *',
|
|
121
|
+
'ls *',
|
|
122
|
+
'ls',
|
|
123
|
+
'dir *',
|
|
124
|
+
'dir',
|
|
125
|
+
'pwd',
|
|
126
|
+
'echo *',
|
|
127
|
+
'wc *',
|
|
128
|
+
'tree *',
|
|
129
|
+
'tree',
|
|
130
|
+
'which *',
|
|
131
|
+
'where *',
|
|
132
|
+
'type *',
|
|
133
|
+
// Git - safe operations
|
|
134
|
+
'git status*',
|
|
135
|
+
'git log*',
|
|
136
|
+
'git diff*',
|
|
137
|
+
'git show*',
|
|
138
|
+
'git branch*',
|
|
139
|
+
'git add *',
|
|
140
|
+
'git commit *',
|
|
141
|
+
'git stash*',
|
|
142
|
+
'git fetch*',
|
|
143
|
+
'git pull*',
|
|
144
|
+
'git checkout -b *',
|
|
145
|
+
'git switch *',
|
|
146
|
+
'git merge *',
|
|
147
|
+
'git rebase *',
|
|
148
|
+
'git worktree *',
|
|
149
|
+
// Version checks
|
|
150
|
+
'node --version',
|
|
151
|
+
'node -v',
|
|
152
|
+
'npm --version',
|
|
153
|
+
'npm -v',
|
|
154
|
+
'python --version',
|
|
155
|
+
'python -V',
|
|
156
|
+
'python3 --version',
|
|
157
|
+
'go version',
|
|
158
|
+
'cargo --version',
|
|
159
|
+
'rustc --version',
|
|
160
|
+
];
|
|
161
|
+
// Additional commands denied in strict mode
|
|
162
|
+
const STRICT_DENY = [
|
|
163
|
+
// No push in strict
|
|
164
|
+
'git push*',
|
|
165
|
+
// No publishing
|
|
166
|
+
'{pm} publish*',
|
|
167
|
+
'cargo publish*',
|
|
168
|
+
// No network calls
|
|
169
|
+
'curl *',
|
|
170
|
+
'wget *',
|
|
171
|
+
'http *',
|
|
172
|
+
'ssh *',
|
|
173
|
+
'scp *',
|
|
174
|
+
'rsync *',
|
|
175
|
+
// No arbitrary scripts
|
|
176
|
+
'node -e *',
|
|
177
|
+
'python -c *',
|
|
178
|
+
'python3 -c *',
|
|
179
|
+
];
|
|
180
|
+
/**
|
|
181
|
+
* Get the list of commands for a preset
|
|
182
|
+
*/
|
|
183
|
+
export function getPresetCommands(preset, packageManager) {
|
|
184
|
+
const replacePm = (cmd) => cmd.replace('{pm}', packageManager);
|
|
185
|
+
switch (preset) {
|
|
186
|
+
case 'permissive':
|
|
187
|
+
return {
|
|
188
|
+
allow: ['*'], // Allow everything...
|
|
189
|
+
deny: ALWAYS_DENY.map(replacePm), // ...except dangerous stuff
|
|
190
|
+
};
|
|
191
|
+
case 'strict':
|
|
192
|
+
return {
|
|
193
|
+
allow: STRICT_ALLOW.map(replacePm),
|
|
194
|
+
deny: [...ALWAYS_DENY, ...STRICT_DENY].map(replacePm),
|
|
195
|
+
};
|
|
196
|
+
case 'custom':
|
|
197
|
+
case 'skip':
|
|
198
|
+
default:
|
|
199
|
+
return { allow: [], deny: [] };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get human-readable description of a preset
|
|
204
|
+
*/
|
|
205
|
+
export function getPresetDescription(preset) {
|
|
206
|
+
switch (preset) {
|
|
207
|
+
case 'permissive':
|
|
208
|
+
return 'Allow everything except irreversible/dangerous actions';
|
|
209
|
+
case 'strict':
|
|
210
|
+
return 'Only safe operations - no network, no push, no publish';
|
|
211
|
+
case 'custom':
|
|
212
|
+
return 'Define your own allowed commands';
|
|
213
|
+
case 'skip':
|
|
214
|
+
return 'Configure manually later';
|
|
215
|
+
default:
|
|
216
|
+
return '';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Edit/Write rules for agent working directories - always added to allow list
|
|
220
|
+
const AGENT_WORKING_DIRS_ALLOW = [
|
|
221
|
+
'Edit(.claude/state/**)',
|
|
222
|
+
'Write(.claude/state/**)',
|
|
223
|
+
'Edit(.claude/plans/**)',
|
|
224
|
+
'Write(.claude/plans/**)',
|
|
225
|
+
'Edit(.claude/scripts/**)',
|
|
226
|
+
'Write(.claude/scripts/**)',
|
|
227
|
+
'Edit(.tasks/**)',
|
|
228
|
+
'Write(.tasks/**)',
|
|
229
|
+
'Edit(.knowledge/**)',
|
|
230
|
+
'Write(.knowledge/**)',
|
|
231
|
+
];
|
|
232
|
+
// Edit/Write rules for protected paths - always added to deny list
|
|
233
|
+
const AGENT_PROTECTED_PATHS_DENY = [
|
|
234
|
+
'Edit(.claude/agents/**)',
|
|
235
|
+
'Write(.claude/agents/**)',
|
|
236
|
+
'Edit(.claude/settings*)',
|
|
237
|
+
'Write(.claude/settings*)',
|
|
238
|
+
];
|
|
239
|
+
/**
|
|
240
|
+
* Format allow commands for Claude Code settings.local.json
|
|
241
|
+
* Uses Bash or Bash(pattern) format per Claude Code docs
|
|
242
|
+
*/
|
|
243
|
+
function formatAllowRules(commands) {
|
|
244
|
+
return commands.map(cmd => {
|
|
245
|
+
if (cmd === '*') {
|
|
246
|
+
return 'Bash';
|
|
247
|
+
}
|
|
248
|
+
return `Bash(${cmd})`;
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Format deny commands for Claude Code settings.local.json
|
|
253
|
+
* For each denied pattern, also blocks it when chained via &&, ||, or ;
|
|
254
|
+
* e.g. "rm -rf *" also blocks "echo hi && rm -rf /"
|
|
255
|
+
*/
|
|
256
|
+
function formatDenyRules(commands) {
|
|
257
|
+
const rules = [];
|
|
258
|
+
const chainPrefixes = ['*&& ', '*|| ', '*; '];
|
|
259
|
+
for (const cmd of commands) {
|
|
260
|
+
// Direct match (command run alone)
|
|
261
|
+
rules.push(`Bash(${cmd})`);
|
|
262
|
+
// Skip chain variants for patterns that already start with *
|
|
263
|
+
// (they already match anywhere in the command string)
|
|
264
|
+
if (cmd.startsWith('*'))
|
|
265
|
+
continue;
|
|
266
|
+
// Chained variants: catch dangerous command after &&, ||, or ;
|
|
267
|
+
for (const prefix of chainPrefixes) {
|
|
268
|
+
rules.push(`Bash(${prefix}${cmd})`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return rules;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Generate .claude/settings.local.json content
|
|
275
|
+
*/
|
|
276
|
+
export function generateSettingsJson(config) {
|
|
277
|
+
const { allow, deny } = config.preset === 'custom'
|
|
278
|
+
? {
|
|
279
|
+
allow: config.customAllowCommands || [],
|
|
280
|
+
deny: [...ALWAYS_DENY, ...(config.customDenyCommands || [])]
|
|
281
|
+
}
|
|
282
|
+
: getPresetCommands(config.preset, config.packageManager);
|
|
283
|
+
const settings = {
|
|
284
|
+
permissions: {
|
|
285
|
+
allow: [...formatAllowRules(allow), ...AGENT_WORKING_DIRS_ALLOW],
|
|
286
|
+
deny: [...formatDenyRules(deny), ...AGENT_PROTECTED_PATHS_DENY],
|
|
287
|
+
},
|
|
288
|
+
attribution: {
|
|
289
|
+
commit: "Assisted with [archai](https://www.npmjs.com/package/@zik000/archai)\n\nCo-Authored-By: Archai ",
|
|
290
|
+
pr: "Assisted with [archai](https://www.npmjs.com/package/@zik000/archai)",
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
return JSON.stringify(settings, null, 2);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Generate permissions section for archai.config.md
|
|
297
|
+
*/
|
|
298
|
+
export function generatePermissionsMarkdown(config) {
|
|
299
|
+
const { allow, deny } = config.preset === 'custom'
|
|
300
|
+
? {
|
|
301
|
+
allow: config.customAllowCommands || [],
|
|
302
|
+
deny: config.customDenyCommands || []
|
|
303
|
+
}
|
|
304
|
+
: getPresetCommands(config.preset, config.packageManager);
|
|
305
|
+
const presetLabel = config.preset.charAt(0).toUpperCase() + config.preset.slice(1);
|
|
306
|
+
let content = `## Permissions
|
|
307
|
+
|
|
308
|
+
**Mode:** ${presetLabel}
|
|
309
|
+
**Description:** ${getPresetDescription(config.preset)}
|
|
310
|
+
|
|
311
|
+
`;
|
|
312
|
+
if (config.preset === 'permissive') {
|
|
313
|
+
content += `### Allowed
|
|
314
|
+
- Everything except dangerous operations
|
|
315
|
+
|
|
316
|
+
### Denied (Irreversible Actions)
|
|
317
|
+
`;
|
|
318
|
+
// Show first 10 denied patterns
|
|
319
|
+
deny.slice(0, 10).forEach(cmd => {
|
|
320
|
+
content += `- \`${cmd}\`\n`;
|
|
321
|
+
});
|
|
322
|
+
if (deny.length > 10) {
|
|
323
|
+
content += `- ... and ${deny.length - 10} more patterns\n`;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else if (config.preset === 'strict') {
|
|
327
|
+
content += `### Allowed Commands
|
|
328
|
+
`;
|
|
329
|
+
allow.slice(0, 15).forEach(cmd => {
|
|
330
|
+
content += `- \`${cmd}\`\n`;
|
|
331
|
+
});
|
|
332
|
+
if (allow.length > 15) {
|
|
333
|
+
content += `- ... and ${allow.length - 15} more\n`;
|
|
334
|
+
}
|
|
335
|
+
content += `
|
|
336
|
+
### Denied
|
|
337
|
+
- Network operations (curl, wget, ssh)
|
|
338
|
+
- git push (manual review required)
|
|
339
|
+
- Publishing (npm publish, cargo publish)
|
|
340
|
+
- All irreversible actions
|
|
341
|
+
`;
|
|
342
|
+
}
|
|
343
|
+
else if (config.preset === 'custom') {
|
|
344
|
+
content += `### Allowed Commands
|
|
345
|
+
`;
|
|
346
|
+
allow.forEach(cmd => {
|
|
347
|
+
content += `- \`${cmd}\`\n`;
|
|
348
|
+
});
|
|
349
|
+
if (allow.length === 0) {
|
|
350
|
+
content += `- [No commands allowed]\n`;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
content += `[Not configured - edit .claude/settings.local.json manually]
|
|
355
|
+
`;
|
|
356
|
+
}
|
|
357
|
+
content += `
|
|
358
|
+
> Permissions are enforced in \`.claude/settings.local.json\`
|
|
359
|
+
`;
|
|
360
|
+
return content;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Create or update .claude/settings.local.json
|
|
364
|
+
*/
|
|
365
|
+
export async function createClaudeSettings(config) {
|
|
366
|
+
if (config.preset === 'skip') {
|
|
367
|
+
return; // Don't create file
|
|
368
|
+
}
|
|
369
|
+
const settingsDir = '.claude';
|
|
370
|
+
const settingsPath = path.join(settingsDir, 'settings.local.json');
|
|
371
|
+
await fs.ensureDir(settingsDir);
|
|
372
|
+
const content = generateSettingsJson(config);
|
|
373
|
+
await fs.writeFile(settingsPath, content);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Validate a command against allow/deny lists
|
|
377
|
+
* Handles && chained commands
|
|
378
|
+
*/
|
|
379
|
+
export function validateCommand(fullCommand, allow, deny) {
|
|
380
|
+
// Split by && and || (command chains)
|
|
381
|
+
const segments = fullCommand.split(/\s*(?:&&|\|\|)\s*/);
|
|
382
|
+
for (const segment of segments) {
|
|
383
|
+
const trimmed = segment.trim();
|
|
384
|
+
if (!trimmed)
|
|
385
|
+
continue;
|
|
386
|
+
// Check deny list first (deny takes precedence)
|
|
387
|
+
for (const pattern of deny) {
|
|
388
|
+
if (matchesPattern(trimmed, pattern)) {
|
|
389
|
+
return {
|
|
390
|
+
allowed: false,
|
|
391
|
+
reason: `Blocked by deny pattern: "${pattern}"`,
|
|
392
|
+
blockedSegment: trimmed,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// If not allow-all, check against allow list
|
|
397
|
+
if (!allow.includes('*')) {
|
|
398
|
+
const isAllowed = allow.some(p => matchesPattern(trimmed, p));
|
|
399
|
+
if (!isAllowed) {
|
|
400
|
+
return {
|
|
401
|
+
allowed: false,
|
|
402
|
+
reason: 'Not in allow list',
|
|
403
|
+
blockedSegment: trimmed,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return { allowed: true };
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Simple wildcard pattern matching
|
|
412
|
+
*/
|
|
413
|
+
function matchesPattern(command, pattern) {
|
|
414
|
+
// Convert pattern to regex
|
|
415
|
+
// * matches anything, escape other special chars
|
|
416
|
+
const escaped = pattern
|
|
417
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape special regex chars
|
|
418
|
+
.replace(/\*/g, '.*'); // Convert * to .*
|
|
419
|
+
const regex = new RegExp(`^${escaped}$`, 'i');
|
|
420
|
+
return regex.test(command);
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=create-claude-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-claude-settings.js","sourceRoot":"","sources":["../../src/scaffold/create-claude-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface ConfigInput {
|
|
2
|
+
projectName: string;
|
|
3
|
+
projectType: string;
|
|
4
|
+
isMonorepo: boolean;
|
|
5
|
+
languages?: string;
|
|
6
|
+
frameworks?: string;
|
|
7
|
+
testFramework?: string;
|
|
8
|
+
packageManager?: string;
|
|
9
|
+
platform?: string;
|
|
10
|
+
shell?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function createConfigTemplate(answers: ConfigInput): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=create-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-config.d.ts","sourceRoot":"","sources":["../../src/scaffold/create-config.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6I9E"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
export async function createConfigTemplate(answers) {
|
|
3
|
+
const pm = answers.packageManager || '';
|
|
4
|
+
const pmCommands = getPackageManagerCommands(pm || 'other');
|
|
5
|
+
// Build environment lines
|
|
6
|
+
const platform = answers.platform || 'unknown';
|
|
7
|
+
const shell = answers.shell || 'unknown';
|
|
8
|
+
// Build tech stack lines — use detected values, mark remaining required fields
|
|
9
|
+
const languages = answers.languages || '[REQUIRED: TypeScript, Python, Go, etc.]';
|
|
10
|
+
const frameworks = answers.frameworks || '[optional: React, Express, Django, etc.]';
|
|
11
|
+
const testFramework = answers.testFramework || '[REQUIRED: vitest, jest, pytest, etc.]';
|
|
12
|
+
const packageManager = pm || '[optional: npm, pnpm, yarn, pip, cargo, go]';
|
|
13
|
+
// Build command table — auto-filled if package manager detected
|
|
14
|
+
const testCmd = pmCommands.test || '[REQUIRED]';
|
|
15
|
+
const installCmd = pmCommands.install || '[optional]';
|
|
16
|
+
const buildCmd = pmCommands.build || '[optional]';
|
|
17
|
+
const lintCmd = pmCommands.lint || '[optional]';
|
|
18
|
+
const devCmd = pmCommands.dev || '[optional]';
|
|
19
|
+
// Specialist section — only show example if not auto-filled
|
|
20
|
+
const specialistSection = `## Specialists to Generate
|
|
21
|
+
|
|
22
|
+
<!-- Optional: list specialist agents for \`archai generate\` to create. -->
|
|
23
|
+
<!-- Examples: frontend, backend, database, api, auth -->
|
|
24
|
+
`;
|
|
25
|
+
const config = `# archai Project Configuration
|
|
26
|
+
|
|
27
|
+
> Fill in this file, then run: \`archai generate\`
|
|
28
|
+
> Fields marked **[REQUIRED]** must be filled for agents to work correctly.
|
|
29
|
+
> Fields marked **[optional]** can be left as-is or removed.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Project Info
|
|
34
|
+
|
|
35
|
+
**Name:** ${answers.projectName}
|
|
36
|
+
**Type:** ${answers.projectType || '[optional: web, mobile, cli, game, ml, devops]'}
|
|
37
|
+
**Monorepo:** ${answers.isMonorepo ? 'Yes' : 'No'}
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Environment
|
|
42
|
+
|
|
43
|
+
**Platform:** ${platform}
|
|
44
|
+
**Shell:** ${shell}
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Tech Stack
|
|
49
|
+
|
|
50
|
+
**Languages:** ${languages}
|
|
51
|
+
**Frameworks:** ${frameworks}
|
|
52
|
+
**Testing:** ${testFramework}
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Commands
|
|
57
|
+
|
|
58
|
+
**Package Manager:** ${packageManager}
|
|
59
|
+
|
|
60
|
+
| Command | Script |
|
|
61
|
+
|---------|--------|
|
|
62
|
+
| Install | ${installCmd} |
|
|
63
|
+
| Build | ${buildCmd} |
|
|
64
|
+
| Test | ${testCmd} |
|
|
65
|
+
| Lint | ${lintCmd} |
|
|
66
|
+
| Dev | ${devCmd} |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Project Structure
|
|
71
|
+
|
|
72
|
+
**Source Directory:** src/
|
|
73
|
+
**Tests Directory:** tests/
|
|
74
|
+
|
|
75
|
+
### Key Files
|
|
76
|
+
<!-- [optional] List important files agents should know about -->
|
|
77
|
+
| File | Purpose |
|
|
78
|
+
|------|---------|
|
|
79
|
+
| | |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
${specialistSection}
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Permissions
|
|
87
|
+
|
|
88
|
+
<!-- Commands agents are allowed to run -->
|
|
89
|
+
- ${pm ? `${pm} *` : '[optional: package manager commands]'}
|
|
90
|
+
- npx *
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Git Configuration
|
|
95
|
+
|
|
96
|
+
<!-- Auto-configured by \`archai setup --git\`. Run it to detect your Git settings. -->
|
|
97
|
+
[Run \`archai setup --git\` to auto-configure]
|
|
98
|
+
|
|
99
|
+
### Worktree Support
|
|
100
|
+
|
|
101
|
+
<!-- Worktree isolation for parallel agent tasks. Managed by \`archai worktree\` commands. -->
|
|
102
|
+
**Enabled:** No
|
|
103
|
+
**Path:** .claude/worktrees
|
|
104
|
+
**Max Concurrent:** 3
|
|
105
|
+
**Merge Strategy:** merge
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Git Conventions
|
|
110
|
+
|
|
111
|
+
<!-- Auto-configured by \`archai setup --git\`. Detects branch naming, merge strategy, and PR workflow. -->
|
|
112
|
+
[Run \`archai setup --git\` to auto-configure]
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## CI/CD
|
|
117
|
+
|
|
118
|
+
<!-- Auto-configured by \`archai setup --ci\`. -->
|
|
119
|
+
[Run \`archai setup --ci\` to auto-configure]
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## MCP Servers & Skills
|
|
124
|
+
|
|
125
|
+
<!-- Auto-configured by \`archai setup --mcp\`. Run it to detect your MCP servers. -->
|
|
126
|
+
[Run \`archai setup --mcp\` to auto-configure]
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Notes
|
|
132
|
+
|
|
133
|
+
<!-- [optional] Any other context for agents -->
|
|
134
|
+
|
|
135
|
+
`;
|
|
136
|
+
await fs.writeFile('archai.config.md', config);
|
|
137
|
+
}
|
|
138
|
+
function getPackageManagerCommands(pm) {
|
|
139
|
+
const commands = {
|
|
140
|
+
npm: {
|
|
141
|
+
install: 'npm install',
|
|
142
|
+
build: 'npm run build',
|
|
143
|
+
test: 'npm test',
|
|
144
|
+
lint: 'npm run lint',
|
|
145
|
+
dev: 'npm run dev',
|
|
146
|
+
},
|
|
147
|
+
pnpm: {
|
|
148
|
+
install: 'pnpm install',
|
|
149
|
+
build: 'pnpm build',
|
|
150
|
+
test: 'pnpm test',
|
|
151
|
+
lint: 'pnpm lint',
|
|
152
|
+
dev: 'pnpm dev',
|
|
153
|
+
},
|
|
154
|
+
yarn: {
|
|
155
|
+
install: 'yarn',
|
|
156
|
+
build: 'yarn build',
|
|
157
|
+
test: 'yarn test',
|
|
158
|
+
lint: 'yarn lint',
|
|
159
|
+
dev: 'yarn dev',
|
|
160
|
+
},
|
|
161
|
+
bun: {
|
|
162
|
+
install: 'bun install',
|
|
163
|
+
build: 'bun run build',
|
|
164
|
+
test: 'bun test',
|
|
165
|
+
lint: 'bun run lint',
|
|
166
|
+
dev: 'bun run dev',
|
|
167
|
+
},
|
|
168
|
+
pip: {
|
|
169
|
+
install: 'pip install -r requirements.txt',
|
|
170
|
+
build: 'python -m build',
|
|
171
|
+
test: 'pytest',
|
|
172
|
+
lint: 'ruff check .',
|
|
173
|
+
dev: 'python main.py',
|
|
174
|
+
},
|
|
175
|
+
cargo: {
|
|
176
|
+
install: 'cargo build',
|
|
177
|
+
build: 'cargo build --release',
|
|
178
|
+
test: 'cargo test',
|
|
179
|
+
lint: 'cargo clippy',
|
|
180
|
+
dev: 'cargo run',
|
|
181
|
+
},
|
|
182
|
+
go: {
|
|
183
|
+
install: 'go mod download',
|
|
184
|
+
build: 'go build',
|
|
185
|
+
test: 'go test ./...',
|
|
186
|
+
lint: 'golangci-lint run',
|
|
187
|
+
dev: 'go run .',
|
|
188
|
+
},
|
|
189
|
+
other: {
|
|
190
|
+
install: '',
|
|
191
|
+
build: '',
|
|
192
|
+
test: '',
|
|
193
|
+
lint: '',
|
|
194
|
+
dev: '',
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
return commands[pm] || commands.other;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=create-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-config.js","sourceRoot":"","sources":["../../src/scaffold/create-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface WizardAnswers {
|
|
2
|
+
projectName: string;
|
|
3
|
+
projectType: string;
|
|
4
|
+
isMonorepo: boolean;
|
|
5
|
+
languages?: string;
|
|
6
|
+
frameworks?: string;
|
|
7
|
+
testFramework?: string;
|
|
8
|
+
packageManager?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createProjectDescription(answers: WizardAnswers): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=create-project-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project-description.d.ts","sourceRoot":"","sources":["../../src/scaffold/create-project-description.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGpF"}
|