@fifine/aim-studio 0.0.1
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/LICENSE +21 -0
- package/README.md +159 -0
- package/bin/aim.js +3 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +513 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/update.d.ts +27 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +1275 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/configurators/claude.d.ts +32 -0
- package/dist/configurators/claude.d.ts.map +1 -0
- package/dist/configurators/claude.js +98 -0
- package/dist/configurators/claude.js.map +1 -0
- package/dist/configurators/index.d.ts +51 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +113 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/shared.d.ts +12 -0
- package/dist/configurators/shared.d.ts.map +1 -0
- package/dist/configurators/shared.js +21 -0
- package/dist/configurators/shared.js.map +1 -0
- package/dist/configurators/workflow.d.ts +28 -0
- package/dist/configurators/workflow.d.ts.map +1 -0
- package/dist/configurators/workflow.js +147 -0
- package/dist/configurators/workflow.js.map +1 -0
- package/dist/constants/paths.d.ts +68 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +77 -0
- package/dist/constants/paths.js.map +1 -0
- package/dist/constants/version.d.ts +9 -0
- package/dist/constants/version.d.ts.map +1 -0
- package/dist/constants/version.js +15 -0
- package/dist/constants/version.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/index.d.ts +54 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +160 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/manifests/0.0.1.json +9 -0
- package/dist/migrations/manifests/0.1.9.json +30 -0
- package/dist/migrations/manifests/0.2.0.json +49 -0
- package/dist/migrations/manifests/0.2.12.json +9 -0
- package/dist/migrations/manifests/0.2.13.json +9 -0
- package/dist/migrations/manifests/0.2.14.json +175 -0
- package/dist/migrations/manifests/0.2.15.json +33 -0
- package/dist/migrations/manifests/0.3.0-beta.0.json +278 -0
- package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
- package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
- package/dist/templates/CLAUDE.md +71 -0
- package/dist/templates/aim/gitignore.txt +29 -0
- package/dist/templates/aim/index.d.ts +49 -0
- package/dist/templates/aim/index.d.ts.map +1 -0
- package/dist/templates/aim/index.js +92 -0
- package/dist/templates/aim/index.js.map +1 -0
- package/dist/templates/aim/scripts/__init__.py +5 -0
- package/dist/templates/aim/scripts/add_session.py +392 -0
- package/dist/templates/aim/scripts/common/__init__.py +80 -0
- package/dist/templates/aim/scripts/common/cli_adapter.py +435 -0
- package/dist/templates/aim/scripts/common/developer.py +190 -0
- package/dist/templates/aim/scripts/common/git_context.py +383 -0
- package/dist/templates/aim/scripts/common/paths.py +347 -0
- package/dist/templates/aim/scripts/common/phase.py +253 -0
- package/dist/templates/aim/scripts/common/registry.py +366 -0
- package/dist/templates/aim/scripts/common/task_queue.py +255 -0
- package/dist/templates/aim/scripts/common/task_utils.py +178 -0
- package/dist/templates/aim/scripts/common/worktree.py +219 -0
- package/dist/templates/aim/scripts/create_bootstrap.py +290 -0
- package/dist/templates/aim/scripts/get_context.py +16 -0
- package/dist/templates/aim/scripts/get_developer.py +26 -0
- package/dist/templates/aim/scripts/init_developer.py +51 -0
- package/dist/templates/aim/scripts/multi_agent/__init__.py +5 -0
- package/dist/templates/aim/scripts/multi_agent/cleanup.py +403 -0
- package/dist/templates/aim/scripts/multi_agent/create_pr.py +329 -0
- package/dist/templates/aim/scripts/multi_agent/plan.py +233 -0
- package/dist/templates/aim/scripts/multi_agent/start.py +461 -0
- package/dist/templates/aim/scripts/multi_agent/status.py +817 -0
- package/dist/templates/aim/scripts/task.py +1068 -0
- package/dist/templates/aim/scripts-shell-archive/add-session.sh +384 -0
- package/dist/templates/aim/scripts-shell-archive/common/developer.sh +129 -0
- package/dist/templates/aim/scripts-shell-archive/common/git-context.sh +263 -0
- package/dist/templates/aim/scripts-shell-archive/common/paths.sh +208 -0
- package/dist/templates/aim/scripts-shell-archive/common/phase.sh +150 -0
- package/dist/templates/aim/scripts-shell-archive/common/registry.sh +247 -0
- package/dist/templates/aim/scripts-shell-archive/common/task-queue.sh +142 -0
- package/dist/templates/aim/scripts-shell-archive/common/task-utils.sh +151 -0
- package/dist/templates/aim/scripts-shell-archive/common/worktree.sh +128 -0
- package/dist/templates/aim/scripts-shell-archive/create-bootstrap.sh +299 -0
- package/dist/templates/aim/scripts-shell-archive/get-context.sh +7 -0
- package/dist/templates/aim/scripts-shell-archive/get-developer.sh +15 -0
- package/dist/templates/aim/scripts-shell-archive/init-developer.sh +34 -0
- package/dist/templates/aim/scripts-shell-archive/multi-agent/cleanup.sh +396 -0
- package/dist/templates/aim/scripts-shell-archive/multi-agent/create-pr.sh +241 -0
- package/dist/templates/aim/scripts-shell-archive/multi-agent/plan.sh +207 -0
- package/dist/templates/aim/scripts-shell-archive/multi-agent/start.sh +317 -0
- package/dist/templates/aim/scripts-shell-archive/multi-agent/status.sh +828 -0
- package/dist/templates/aim/scripts-shell-archive/task.sh +1204 -0
- package/dist/templates/aim/tasks/.gitkeep +0 -0
- package/dist/templates/aim/workflow.md +258 -0
- package/dist/templates/aim/worktree.yaml +47 -0
- package/dist/templates/claude/agents/check.md +122 -0
- package/dist/templates/claude/agents/debug.md +106 -0
- package/dist/templates/claude/agents/dispatch.md +230 -0
- package/dist/templates/claude/agents/implement.md +96 -0
- package/dist/templates/claude/agents/plan.md +396 -0
- package/dist/templates/claude/agents/research.md +120 -0
- package/dist/templates/claude/agents/story.md +53 -0
- package/dist/templates/claude/commands/aim/before-backend-dev.md +13 -0
- package/dist/templates/claude/commands/aim/before-frontend-dev.md +13 -0
- package/dist/templates/claude/commands/aim/break-loop.md +153 -0
- package/dist/templates/claude/commands/aim/check-backend.md +13 -0
- package/dist/templates/claude/commands/aim/check-cross-layer.md +153 -0
- package/dist/templates/claude/commands/aim/check-frontend.md +13 -0
- package/dist/templates/claude/commands/aim/check-story.md +59 -0
- package/dist/templates/claude/commands/aim/create-command.md +154 -0
- package/dist/templates/claude/commands/aim/export.md +187 -0
- package/dist/templates/claude/commands/aim/finish-work.md +104 -0
- package/dist/templates/claude/commands/aim/integrate-skill.md +219 -0
- package/dist/templates/claude/commands/aim/onboard.md +358 -0
- package/dist/templates/claude/commands/aim/parallel.md +217 -0
- package/dist/templates/claude/commands/aim/portrait.md +170 -0
- package/dist/templates/claude/commands/aim/record-session.md +92 -0
- package/dist/templates/claude/commands/aim/start.md +112 -0
- package/dist/templates/claude/commands/aim/story.md +140 -0
- package/dist/templates/claude/commands/aim/update-spec.md +285 -0
- package/dist/templates/claude/commands/aim/visualize.md +182 -0
- package/dist/templates/claude/commands/trellis/before-backend-dev.md +13 -0
- package/dist/templates/claude/commands/trellis/before-frontend-dev.md +13 -0
- package/dist/templates/claude/commands/trellis/break-loop.md +125 -0
- package/dist/templates/claude/commands/trellis/check-backend.md +13 -0
- package/dist/templates/claude/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/claude/commands/trellis/check-frontend.md +13 -0
- package/dist/templates/claude/commands/trellis/create-command.md +154 -0
- package/dist/templates/claude/commands/trellis/finish-work.md +129 -0
- package/dist/templates/claude/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/claude/commands/trellis/onboard.md +358 -0
- package/dist/templates/claude/commands/trellis/parallel.md +193 -0
- package/dist/templates/claude/commands/trellis/record-session.md +62 -0
- package/dist/templates/claude/commands/trellis/start.md +280 -0
- package/dist/templates/claude/commands/trellis/update-spec.md +285 -0
- package/dist/templates/claude/hooks/inject-subagent-context.py +772 -0
- package/dist/templates/claude/hooks/ralph-loop.py +388 -0
- package/dist/templates/claude/hooks/session-start.py +142 -0
- package/dist/templates/claude/index.d.ts +54 -0
- package/dist/templates/claude/index.d.ts.map +1 -0
- package/dist/templates/claude/index.js +85 -0
- package/dist/templates/claude/index.js.map +1 -0
- package/dist/templates/claude/settings.json +41 -0
- package/dist/templates/extract.d.ts +68 -0
- package/dist/templates/extract.d.ts.map +1 -0
- package/dist/templates/extract.js +128 -0
- package/dist/templates/extract.js.map +1 -0
- package/dist/templates/markdown/agents.md +25 -0
- package/dist/templates/markdown/gitignore.txt +12 -0
- package/dist/templates/markdown/index.d.ts +32 -0
- package/dist/templates/markdown/index.d.ts.map +1 -0
- package/dist/templates/markdown/index.js +58 -0
- package/dist/templates/markdown/index.js.map +1 -0
- package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/index.md +40 -0
- package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
- package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/script-conventions.md +467 -0
- package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
- package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
- package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +118 -0
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +92 -0
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +94 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +394 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +319 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +89 -0
- package/dist/templates/markdown/spec/story/character.md.txt +95 -0
- package/dist/templates/markdown/spec/story/index.md.txt +31 -0
- package/dist/templates/markdown/spec/story/script.md.txt +313 -0
- package/dist/templates/markdown/spec/story/world.md.txt +92 -0
- package/dist/templates/markdown/workspace-index.md +123 -0
- package/dist/templates/markdown/worktree.yaml.txt +58 -0
- package/dist/templates/trellis/gitignore.txt +29 -0
- package/dist/templates/trellis/index.d.ts +49 -0
- package/dist/templates/trellis/index.d.ts.map +1 -0
- package/dist/templates/trellis/index.js +92 -0
- package/dist/templates/trellis/index.js.map +1 -0
- package/dist/templates/trellis/scripts/__init__.py +5 -0
- package/dist/templates/trellis/scripts/add_session.py +392 -0
- package/dist/templates/trellis/scripts/common/__init__.py +80 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +435 -0
- package/dist/templates/trellis/scripts/common/developer.py +190 -0
- package/dist/templates/trellis/scripts/common/git_context.py +383 -0
- package/dist/templates/trellis/scripts/common/paths.py +347 -0
- package/dist/templates/trellis/scripts/common/phase.py +253 -0
- package/dist/templates/trellis/scripts/common/registry.py +366 -0
- package/dist/templates/trellis/scripts/common/task_queue.py +255 -0
- package/dist/templates/trellis/scripts/common/task_utils.py +178 -0
- package/dist/templates/trellis/scripts/common/worktree.py +219 -0
- package/dist/templates/trellis/scripts/create_bootstrap.py +290 -0
- package/dist/templates/trellis/scripts/get_context.py +16 -0
- package/dist/templates/trellis/scripts/get_developer.py +26 -0
- package/dist/templates/trellis/scripts/init_developer.py +51 -0
- package/dist/templates/trellis/scripts/multi_agent/__init__.py +5 -0
- package/dist/templates/trellis/scripts/multi_agent/cleanup.py +403 -0
- package/dist/templates/trellis/scripts/multi_agent/create_pr.py +329 -0
- package/dist/templates/trellis/scripts/multi_agent/plan.py +233 -0
- package/dist/templates/trellis/scripts/multi_agent/start.py +461 -0
- package/dist/templates/trellis/scripts/multi_agent/status.py +817 -0
- package/dist/templates/trellis/scripts/task.py +1056 -0
- package/dist/templates/trellis/scripts-shell-archive/add-session.sh +384 -0
- package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +129 -0
- package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +263 -0
- package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +208 -0
- package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +150 -0
- package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +247 -0
- package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +142 -0
- package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +151 -0
- package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +128 -0
- package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +299 -0
- package/dist/templates/trellis/scripts-shell-archive/get-context.sh +7 -0
- package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +15 -0
- package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +34 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +396 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +241 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +207 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +317 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +828 -0
- package/dist/templates/trellis/scripts-shell-archive/task.sh +1204 -0
- package/dist/templates/trellis/tasks/.gitkeep +0 -0
- package/dist/templates/trellis/workflow.md +416 -0
- package/dist/templates/trellis/worktree.yaml +47 -0
- package/dist/types/ai-tools.d.ts +48 -0
- package/dist/types/ai-tools.d.ts.map +1 -0
- package/dist/types/ai-tools.js +32 -0
- package/dist/types/ai-tools.js.map +1 -0
- package/dist/types/migration.d.ts +86 -0
- package/dist/types/migration.d.ts.map +1 -0
- package/dist/types/migration.js +8 -0
- package/dist/types/migration.js.map +1 -0
- package/dist/utils/compare-versions.d.ts +12 -0
- package/dist/utils/compare-versions.d.ts.map +1 -0
- package/dist/utils/compare-versions.js +76 -0
- package/dist/utils/compare-versions.js.map +1 -0
- package/dist/utils/file-writer.d.ts +23 -0
- package/dist/utils/file-writer.d.ts.map +1 -0
- package/dist/utils/file-writer.js +140 -0
- package/dist/utils/file-writer.js.map +1 -0
- package/dist/utils/project-detector.d.ts +16 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +188 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/dist/utils/template-fetcher.d.ts +51 -0
- package/dist/utils/template-fetcher.d.ts.map +1 -0
- package/dist/utils/template-fetcher.js +174 -0
- package/dist/utils/template-fetcher.js.map +1 -0
- package/dist/utils/template-hash.d.ts +78 -0
- package/dist/utils/template-hash.d.ts.map +1 -0
- package/dist/utils/template-hash.js +239 -0
- package/dist/utils/template-hash.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import readline from "node:readline";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import figlet from "figlet";
|
|
7
|
+
import inquirer from "inquirer";
|
|
8
|
+
import { createWorkflowStructure } from "../configurators/workflow.js";
|
|
9
|
+
import { getInitToolChoices, resolveCliFlag, configurePlatform, getPlatformsWithPythonHooks, } from "../configurators/index.js";
|
|
10
|
+
import { AI_TOOLS } from "../types/ai-tools.js";
|
|
11
|
+
import { DIR_NAMES, FILE_NAMES, PATHS } from "../constants/paths.js";
|
|
12
|
+
import { VERSION } from "../constants/version.js";
|
|
13
|
+
import { agentsMdContent } from "../templates/markdown/index.js";
|
|
14
|
+
import { setWriteMode, writeFile, } from "../utils/file-writer.js";
|
|
15
|
+
import { detectProjectType, } from "../utils/project-detector.js";
|
|
16
|
+
import { initializeHashes } from "../utils/template-hash.js";
|
|
17
|
+
import { fetchTemplateIndex, downloadTemplateById, } from "../utils/template-fetcher.js";
|
|
18
|
+
/**
|
|
19
|
+
* Detect available Python command (python3 or python)
|
|
20
|
+
*/
|
|
21
|
+
function getPythonCommand() {
|
|
22
|
+
// Try python3 first (preferred on macOS/Linux)
|
|
23
|
+
try {
|
|
24
|
+
execSync("python3 --version", { stdio: "pipe" });
|
|
25
|
+
return "python3";
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Fall back to python (common on Windows)
|
|
29
|
+
try {
|
|
30
|
+
execSync("python --version", { stdio: "pipe" });
|
|
31
|
+
return "python";
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Default to python3, let it fail with a clear error
|
|
35
|
+
return "python3";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// Bootstrap Task Creation
|
|
41
|
+
// =============================================================================
|
|
42
|
+
const BOOTSTRAP_TASK_NAME = "00-bootstrap-guidelines";
|
|
43
|
+
function getBootstrapPrdContent(projectType) {
|
|
44
|
+
const header = `# Bootstrap: Fill Project Development Guidelines
|
|
45
|
+
|
|
46
|
+
## Purpose
|
|
47
|
+
|
|
48
|
+
Welcome to AIM Studio! This is your first task.
|
|
49
|
+
|
|
50
|
+
AI agents use \`.aim-studio/spec/\` to understand YOUR project's coding conventions.
|
|
51
|
+
**Empty templates = AI writes generic code that doesn't match your project style.**
|
|
52
|
+
|
|
53
|
+
Filling these guidelines is a one-time setup that pays off for every future AI session.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Your Task
|
|
58
|
+
|
|
59
|
+
Fill in the guideline files based on your **existing codebase**.
|
|
60
|
+
`;
|
|
61
|
+
const backendSection = `
|
|
62
|
+
|
|
63
|
+
### Backend Guidelines
|
|
64
|
+
|
|
65
|
+
| File | What to Document |
|
|
66
|
+
|------|------------------|
|
|
67
|
+
| \`.aim-studio/spec/backend/directory-structure.md\` | Where different file types go (routes, services, utils) |
|
|
68
|
+
| \`.aim-studio/spec/backend/database-guidelines.md\` | ORM, migrations, query patterns, naming conventions |
|
|
69
|
+
| \`.aim-studio/spec/backend/error-handling.md\` | How errors are caught, logged, and returned |
|
|
70
|
+
| \`.aim-studio/spec/backend/logging-guidelines.md\` | Log levels, format, what to log |
|
|
71
|
+
| \`.aim-studio/spec/backend/quality-guidelines.md\` | Code review standards, testing requirements |
|
|
72
|
+
`;
|
|
73
|
+
const frontendSection = `
|
|
74
|
+
|
|
75
|
+
### Frontend Guidelines
|
|
76
|
+
|
|
77
|
+
| File | What to Document |
|
|
78
|
+
|------|------------------|
|
|
79
|
+
| \`.aim-studio/spec/frontend/directory-structure.md\` | Component/page/hook organization |
|
|
80
|
+
| \`.aim-studio/spec/frontend/component-guidelines.md\` | Component patterns, props conventions |
|
|
81
|
+
| \`.aim-studio/spec/frontend/hook-guidelines.md\` | Custom hook naming, patterns |
|
|
82
|
+
| \`.aim-studio/spec/frontend/state-management.md\` | State library, patterns, what goes where |
|
|
83
|
+
| \`.aim-studio/spec/frontend/type-safety.md\` | TypeScript conventions, type organization |
|
|
84
|
+
| \`.aim-studio/spec/frontend/quality-guidelines.md\` | Linting, testing, accessibility |
|
|
85
|
+
`;
|
|
86
|
+
const footer = `
|
|
87
|
+
|
|
88
|
+
### Thinking Guides (Optional)
|
|
89
|
+
|
|
90
|
+
The \`.aim-studio/spec/guides/\` directory contains thinking guides that are already
|
|
91
|
+
filled with general best practices. You can customize them for your project if needed.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## How to Fill Guidelines
|
|
96
|
+
|
|
97
|
+
### Principle: Document Reality, Not Ideals
|
|
98
|
+
|
|
99
|
+
Write what your codebase **actually does**, not what you wish it did.
|
|
100
|
+
AI needs to match existing patterns, not introduce new ones.
|
|
101
|
+
|
|
102
|
+
### Steps
|
|
103
|
+
|
|
104
|
+
1. **Look at existing code** - Find 2-3 examples of each pattern
|
|
105
|
+
2. **Document the pattern** - Describe what you see
|
|
106
|
+
3. **Include file paths** - Reference real files as examples
|
|
107
|
+
4. **List anti-patterns** - What does your team avoid?
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Tips for Using AI
|
|
112
|
+
|
|
113
|
+
Ask AI to help analyze your codebase:
|
|
114
|
+
|
|
115
|
+
- "Look at my codebase and document the patterns you see"
|
|
116
|
+
- "Analyze my code structure and summarize the conventions"
|
|
117
|
+
- "Find error handling patterns and document them"
|
|
118
|
+
|
|
119
|
+
The AI will read your code and help you document it.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Completion Checklist
|
|
124
|
+
|
|
125
|
+
- [ ] Guidelines filled for your project type
|
|
126
|
+
- [ ] At least 2-3 real code examples in each guideline
|
|
127
|
+
- [ ] Anti-patterns documented
|
|
128
|
+
|
|
129
|
+
When done:
|
|
130
|
+
|
|
131
|
+
\`\`\`bash
|
|
132
|
+
python3 ./.aim-studio/scripts/task.py finish
|
|
133
|
+
python3 ./.aim-studio/scripts/task.py archive 00-bootstrap-guidelines
|
|
134
|
+
\`\`\`
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Why This Matters
|
|
139
|
+
|
|
140
|
+
After completing this task:
|
|
141
|
+
|
|
142
|
+
1. AI will write code that matches your project style
|
|
143
|
+
2. Relevant \`/aim:before-*-dev\` commands will inject real context
|
|
144
|
+
3. \`/aim:check-*\` commands will validate against your actual standards
|
|
145
|
+
4. Future developers (human or AI) will onboard faster
|
|
146
|
+
`;
|
|
147
|
+
let content = header;
|
|
148
|
+
if (projectType === "frontend") {
|
|
149
|
+
content += frontendSection;
|
|
150
|
+
}
|
|
151
|
+
else if (projectType === "backend") {
|
|
152
|
+
content += backendSection;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// fullstack
|
|
156
|
+
content += backendSection;
|
|
157
|
+
content += frontendSection;
|
|
158
|
+
}
|
|
159
|
+
content += footer;
|
|
160
|
+
return content;
|
|
161
|
+
}
|
|
162
|
+
function getBootstrapTaskJson(developer, projectType) {
|
|
163
|
+
const today = new Date().toISOString().split("T")[0];
|
|
164
|
+
let subtasks;
|
|
165
|
+
let relatedFiles;
|
|
166
|
+
if (projectType === "frontend") {
|
|
167
|
+
subtasks = [
|
|
168
|
+
{ name: "Fill frontend guidelines", status: "pending" },
|
|
169
|
+
{ name: "Add code examples", status: "pending" },
|
|
170
|
+
];
|
|
171
|
+
relatedFiles = [".aim-studio/spec/frontend/"];
|
|
172
|
+
}
|
|
173
|
+
else if (projectType === "backend") {
|
|
174
|
+
subtasks = [
|
|
175
|
+
{ name: "Fill backend guidelines", status: "pending" },
|
|
176
|
+
{ name: "Add code examples", status: "pending" },
|
|
177
|
+
];
|
|
178
|
+
relatedFiles = [".aim-studio/spec/backend/"];
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// fullstack
|
|
182
|
+
subtasks = [
|
|
183
|
+
{ name: "Fill backend guidelines", status: "pending" },
|
|
184
|
+
{ name: "Fill frontend guidelines", status: "pending" },
|
|
185
|
+
{ name: "Add code examples", status: "pending" },
|
|
186
|
+
];
|
|
187
|
+
relatedFiles = [".aim-studio/spec/backend/", ".aim-studio/spec/frontend/"];
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
id: BOOTSTRAP_TASK_NAME,
|
|
191
|
+
name: "Bootstrap Guidelines",
|
|
192
|
+
description: "Fill in project development guidelines for AI agents",
|
|
193
|
+
status: "in_progress",
|
|
194
|
+
dev_type: "docs",
|
|
195
|
+
priority: "P1",
|
|
196
|
+
creator: developer,
|
|
197
|
+
assignee: developer,
|
|
198
|
+
createdAt: today,
|
|
199
|
+
completedAt: null,
|
|
200
|
+
commit: null,
|
|
201
|
+
subtasks,
|
|
202
|
+
relatedFiles,
|
|
203
|
+
notes: `First-time setup task created by aim init (${projectType} project)`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Create bootstrap task for first-time setup
|
|
208
|
+
*/
|
|
209
|
+
function createBootstrapTask(cwd, developer, projectType) {
|
|
210
|
+
const taskDir = path.join(cwd, PATHS.TASKS, BOOTSTRAP_TASK_NAME);
|
|
211
|
+
const taskRelativePath = `${PATHS.TASKS}/${BOOTSTRAP_TASK_NAME}`;
|
|
212
|
+
// Check if already exists
|
|
213
|
+
if (fs.existsSync(taskDir)) {
|
|
214
|
+
return true; // Already exists, not an error
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
// Create task directory
|
|
218
|
+
fs.mkdirSync(taskDir, { recursive: true });
|
|
219
|
+
// Write task.json
|
|
220
|
+
const taskJson = getBootstrapTaskJson(developer, projectType);
|
|
221
|
+
fs.writeFileSync(path.join(taskDir, FILE_NAMES.TASK_JSON), JSON.stringify(taskJson, null, 2), "utf-8");
|
|
222
|
+
// Write prd.md
|
|
223
|
+
const prdContent = getBootstrapPrdContent(projectType);
|
|
224
|
+
fs.writeFileSync(path.join(taskDir, FILE_NAMES.PRD), prdContent, "utf-8");
|
|
225
|
+
// Set as current task
|
|
226
|
+
const currentTaskFile = path.join(cwd, PATHS.CURRENT_TASK_FILE);
|
|
227
|
+
fs.writeFileSync(currentTaskFile, taskRelativePath, "utf-8");
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const _cliFlagCheck = true;
|
|
235
|
+
export async function init(options) {
|
|
236
|
+
const cwd = process.cwd();
|
|
237
|
+
// Generate ASCII art banner dynamically using FIGlet "Rebel" font
|
|
238
|
+
const banner = figlet.textSync("AIM Studio", { font: "Rebel" });
|
|
239
|
+
console.log(chalk.cyan(`\n${banner.trimEnd()}`));
|
|
240
|
+
console.log(chalk.gray("\n Specialized CLI for AI comic and drama generation. Formerly Trellis.\n"));
|
|
241
|
+
// Set write mode based on options
|
|
242
|
+
let writeMode = "ask";
|
|
243
|
+
if (options.force) {
|
|
244
|
+
writeMode = "force";
|
|
245
|
+
console.log(chalk.gray("Mode: Force overwrite existing files\n"));
|
|
246
|
+
}
|
|
247
|
+
else if (options.skipExisting) {
|
|
248
|
+
writeMode = "skip";
|
|
249
|
+
console.log(chalk.gray("Mode: Skip existing files\n"));
|
|
250
|
+
}
|
|
251
|
+
setWriteMode(writeMode);
|
|
252
|
+
// Detect developer name from git config or options
|
|
253
|
+
let developerName = options.user;
|
|
254
|
+
if (!developerName) {
|
|
255
|
+
// Only detect from git if current directory is a git repo
|
|
256
|
+
const isGitRepo = fs.existsSync(path.join(cwd, ".git"));
|
|
257
|
+
if (isGitRepo) {
|
|
258
|
+
try {
|
|
259
|
+
developerName = execSync("git config user.name", {
|
|
260
|
+
cwd,
|
|
261
|
+
encoding: "utf-8",
|
|
262
|
+
}).trim();
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
// Git not available or no user.name configured
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (developerName) {
|
|
270
|
+
console.log(chalk.blue("👤 Developer:"), chalk.gray(developerName));
|
|
271
|
+
}
|
|
272
|
+
else if (!options.yes) {
|
|
273
|
+
// Ask for developer name if not detected and not in yes mode
|
|
274
|
+
console.log(chalk.gray("\nAIM Studio supports team collaboration - each developer has their own\n" +
|
|
275
|
+
`workspace directory (${PATHS.WORKSPACE}/{name}/) to track AI sessions.\n` +
|
|
276
|
+
"Tip: Usually this is your git username (git config user.name).\n"));
|
|
277
|
+
developerName = await askInput("Your name: ");
|
|
278
|
+
while (!developerName) {
|
|
279
|
+
console.log(chalk.yellow("Name is required"));
|
|
280
|
+
developerName = await askInput("Your name: ");
|
|
281
|
+
}
|
|
282
|
+
console.log(chalk.blue("👤 Developer:"), chalk.gray(developerName));
|
|
283
|
+
}
|
|
284
|
+
// Detect project type (silent - no output)
|
|
285
|
+
const detectedType = detectProjectType(cwd);
|
|
286
|
+
// Tool definitions derived from platform registry
|
|
287
|
+
const TOOLS = getInitToolChoices();
|
|
288
|
+
// Build tools from explicit flags
|
|
289
|
+
const explicitTools = TOOLS.filter((t) => options[t.key]).map((t) => t.key);
|
|
290
|
+
let tools;
|
|
291
|
+
if (explicitTools.length > 0) {
|
|
292
|
+
// Explicit flags take precedence (works with or without -y)
|
|
293
|
+
tools = explicitTools;
|
|
294
|
+
}
|
|
295
|
+
else if (options.yes) {
|
|
296
|
+
// No explicit tools + -y: default to Cursor and Claude
|
|
297
|
+
tools = TOOLS.filter((t) => t.defaultChecked).map((t) => t.key);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
// Interactive mode
|
|
301
|
+
const answers = await inquirer.prompt([
|
|
302
|
+
{
|
|
303
|
+
type: "checkbox",
|
|
304
|
+
name: "tools",
|
|
305
|
+
message: "Select AI tools to configure:",
|
|
306
|
+
choices: TOOLS.map((t) => ({
|
|
307
|
+
name: t.name,
|
|
308
|
+
value: t.key,
|
|
309
|
+
checked: t.defaultChecked,
|
|
310
|
+
})),
|
|
311
|
+
},
|
|
312
|
+
]);
|
|
313
|
+
tools = answers.tools;
|
|
314
|
+
}
|
|
315
|
+
// Treat unknown project type as fullstack
|
|
316
|
+
const projectType = detectedType === "unknown" ? "fullstack" : detectedType;
|
|
317
|
+
if (tools.length === 0) {
|
|
318
|
+
console.log(chalk.yellow("No tools selected. At least one tool is required."));
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
// ==========================================================================
|
|
322
|
+
// Template Selection
|
|
323
|
+
// ==========================================================================
|
|
324
|
+
let selectedTemplate = null;
|
|
325
|
+
let templateStrategy = "skip";
|
|
326
|
+
// Determine template strategy from flags
|
|
327
|
+
if (options.overwrite) {
|
|
328
|
+
templateStrategy = "overwrite";
|
|
329
|
+
}
|
|
330
|
+
else if (options.append) {
|
|
331
|
+
templateStrategy = "append";
|
|
332
|
+
}
|
|
333
|
+
if (options.template) {
|
|
334
|
+
// Template specified via --template flag
|
|
335
|
+
selectedTemplate = options.template;
|
|
336
|
+
}
|
|
337
|
+
else if (!options.yes) {
|
|
338
|
+
// Interactive mode: show template selection
|
|
339
|
+
const templates = await fetchTemplateIndex();
|
|
340
|
+
if (templates.length > 0) {
|
|
341
|
+
// Build template choices with "blank" as first (default)
|
|
342
|
+
const templateChoices = [
|
|
343
|
+
{
|
|
344
|
+
name: "blank (default - empty templates)",
|
|
345
|
+
value: "blank",
|
|
346
|
+
},
|
|
347
|
+
...templates
|
|
348
|
+
.filter((t) => t.type === "spec") // MVP: only spec templates
|
|
349
|
+
.map((t) => ({
|
|
350
|
+
name: `${t.id} (${t.name})`,
|
|
351
|
+
value: t.id,
|
|
352
|
+
})),
|
|
353
|
+
];
|
|
354
|
+
const templateAnswer = await inquirer.prompt([
|
|
355
|
+
{
|
|
356
|
+
type: "list",
|
|
357
|
+
name: "template",
|
|
358
|
+
message: "Select a spec template:",
|
|
359
|
+
choices: templateChoices,
|
|
360
|
+
default: "blank",
|
|
361
|
+
},
|
|
362
|
+
]);
|
|
363
|
+
if (templateAnswer.template !== "blank") {
|
|
364
|
+
selectedTemplate = templateAnswer.template;
|
|
365
|
+
// Check if spec directory already exists and ask what to do
|
|
366
|
+
const specDir = path.join(cwd, PATHS.SPEC);
|
|
367
|
+
if (fs.existsSync(specDir) && !options.overwrite && !options.append) {
|
|
368
|
+
const actionAnswer = await inquirer.prompt([
|
|
369
|
+
{
|
|
370
|
+
type: "list",
|
|
371
|
+
name: "action",
|
|
372
|
+
message: `Directory ${PATHS.SPEC} already exists. What do you want to do?`,
|
|
373
|
+
choices: [
|
|
374
|
+
{ name: "Skip (keep existing)", value: "skip" },
|
|
375
|
+
{ name: "Overwrite (replace all)", value: "overwrite" },
|
|
376
|
+
{ name: "Append (add missing files only)", value: "append" },
|
|
377
|
+
],
|
|
378
|
+
default: "skip",
|
|
379
|
+
},
|
|
380
|
+
]);
|
|
381
|
+
templateStrategy = actionAnswer.action;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// If -y flag: selectedTemplate stays null, use blank templates
|
|
387
|
+
// ==========================================================================
|
|
388
|
+
// Download Remote Template (if selected)
|
|
389
|
+
// ==========================================================================
|
|
390
|
+
let useRemoteTemplate = false;
|
|
391
|
+
if (selectedTemplate) {
|
|
392
|
+
console.log(chalk.blue(`📦 Downloading template "${selectedTemplate}"...`));
|
|
393
|
+
const result = await downloadTemplateById(cwd, selectedTemplate, templateStrategy);
|
|
394
|
+
if (result.success) {
|
|
395
|
+
if (result.skipped) {
|
|
396
|
+
console.log(chalk.gray(` ${result.message}`));
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
console.log(chalk.green(` ${result.message}`));
|
|
400
|
+
useRemoteTemplate = true;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
console.log(chalk.yellow(` ${result.message}`));
|
|
405
|
+
console.log(chalk.gray(" Falling back to blank templates..."));
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
// ==========================================================================
|
|
409
|
+
// Create Workflow Structure
|
|
410
|
+
// ==========================================================================
|
|
411
|
+
// Create workflow structure with project type
|
|
412
|
+
// Multi-agent is enabled by default
|
|
413
|
+
console.log(chalk.blue("📁 Creating workflow structure..."));
|
|
414
|
+
await createWorkflowStructure(cwd, {
|
|
415
|
+
projectType,
|
|
416
|
+
multiAgent: true,
|
|
417
|
+
skipSpecTemplates: useRemoteTemplate,
|
|
418
|
+
});
|
|
419
|
+
// Write version file for update tracking
|
|
420
|
+
const versionPath = path.join(cwd, DIR_NAMES.WORKFLOW, ".version");
|
|
421
|
+
fs.writeFileSync(versionPath, VERSION);
|
|
422
|
+
// Configure selected tools by copying entire directories (dogfooding)
|
|
423
|
+
for (const tool of tools) {
|
|
424
|
+
const platformId = resolveCliFlag(tool);
|
|
425
|
+
if (platformId) {
|
|
426
|
+
console.log(chalk.blue(`📝 Configuring ${AI_TOOLS[platformId].name}...`));
|
|
427
|
+
await configurePlatform(platformId, cwd);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// Show Windows platform detection notice
|
|
431
|
+
if (process.platform === "win32") {
|
|
432
|
+
const pythonPlatforms = getPlatformsWithPythonHooks();
|
|
433
|
+
const hasSelectedPythonPlatform = pythonPlatforms.some((id) => tools.includes(AI_TOOLS[id].cliFlag));
|
|
434
|
+
if (hasSelectedPythonPlatform) {
|
|
435
|
+
console.log(chalk.yellow('📌 Windows detected: Using "python" for hooks'));
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// Create root files (skip if exists)
|
|
439
|
+
await createRootFiles(cwd);
|
|
440
|
+
// Initialize template hashes for modification tracking
|
|
441
|
+
const hashedCount = initializeHashes(cwd);
|
|
442
|
+
if (hashedCount > 0) {
|
|
443
|
+
console.log(chalk.gray(`📋 Tracking ${hashedCount} template files for updates`));
|
|
444
|
+
}
|
|
445
|
+
// Initialize developer identity (silent - no output)
|
|
446
|
+
if (developerName) {
|
|
447
|
+
try {
|
|
448
|
+
const pythonCmd = getPythonCommand();
|
|
449
|
+
const scriptPath = path.join(cwd, PATHS.SCRIPTS, "init_developer.py");
|
|
450
|
+
execSync(`${pythonCmd} "${scriptPath}" "${developerName}"`, {
|
|
451
|
+
cwd,
|
|
452
|
+
stdio: "pipe", // Silent
|
|
453
|
+
});
|
|
454
|
+
// Create bootstrap task to guide user through filling guidelines
|
|
455
|
+
createBootstrapTask(cwd, developerName, projectType);
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
// Silent failure - user can run init_developer.py manually
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
// Print "What We Solve" section
|
|
462
|
+
printWhatWeSolve();
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Simple readline-based input (no flickering like inquirer)
|
|
466
|
+
*/
|
|
467
|
+
function askInput(prompt) {
|
|
468
|
+
const rl = readline.createInterface({
|
|
469
|
+
input: process.stdin,
|
|
470
|
+
output: process.stdout,
|
|
471
|
+
});
|
|
472
|
+
return new Promise((resolve) => {
|
|
473
|
+
rl.question(prompt, (answer) => {
|
|
474
|
+
rl.close();
|
|
475
|
+
resolve(answer.trim());
|
|
476
|
+
});
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
async function createRootFiles(cwd) {
|
|
480
|
+
const agentsPath = path.join(cwd, "AGENTS.md");
|
|
481
|
+
// Write AGENTS.md from template
|
|
482
|
+
const agentsWritten = await writeFile(agentsPath, agentsMdContent);
|
|
483
|
+
if (agentsWritten) {
|
|
484
|
+
console.log(chalk.blue("📄 Created AGENTS.md"));
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Print "What We Solve" section showing AIM Studio value proposition
|
|
489
|
+
* Styled like a meme/rant to resonate with developer pain points
|
|
490
|
+
*/
|
|
491
|
+
function printWhatWeSolve() {
|
|
492
|
+
console.log(chalk.gray("\nSound familiar? ") +
|
|
493
|
+
chalk.bold("You'll never say these again!!\n"));
|
|
494
|
+
// Pain point 1: Bug loop → Thinking Guides + Ralph Loop
|
|
495
|
+
console.log(chalk.gray("✗ ") + '"Fix A → break B → fix B → break A..."');
|
|
496
|
+
console.log(chalk.green(" ✓ ") +
|
|
497
|
+
chalk.white("Thinking Guides + Ralph Loop: Think first, verify after"));
|
|
498
|
+
// Pain point 2: Instructions ignored/forgotten → Sub-agents + per-agent spec injection
|
|
499
|
+
console.log(chalk.gray("✗ ") +
|
|
500
|
+
'"Wrote CLAUDE.md, AI ignored it. Reminded AI, it forgot 5 turns later."');
|
|
501
|
+
console.log(chalk.green(" ✓ ") +
|
|
502
|
+
chalk.white("Spec Injection: Rules enforced per task, not per chat"));
|
|
503
|
+
// Pain point 3: Missing connections → Cross-Layer Guide
|
|
504
|
+
console.log(chalk.gray("✗ ") + '"Code works but nothing connects..."');
|
|
505
|
+
console.log(chalk.green(" ✓ ") +
|
|
506
|
+
chalk.white("Cross-Layer Guide: Map data flow before coding"));
|
|
507
|
+
// Pain point 4: Code explosion → Plan Agent
|
|
508
|
+
console.log(chalk.gray("✗ ") + '"Asked for a button, got 9000 lines"');
|
|
509
|
+
console.log(chalk.green(" ✓ ") +
|
|
510
|
+
chalk.white("Plan Agent: Rejects and splits oversized tasks"));
|
|
511
|
+
console.log("");
|
|
512
|
+
}
|
|
513
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MigrationItem } from "../types/migration.js";
|
|
2
|
+
export interface UpdateOptions {
|
|
3
|
+
dryRun?: boolean;
|
|
4
|
+
force?: boolean;
|
|
5
|
+
skipAll?: boolean;
|
|
6
|
+
createNew?: boolean;
|
|
7
|
+
allowDowngrade?: boolean;
|
|
8
|
+
migrate?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Clean up empty directories after file migration
|
|
12
|
+
* Recursively removes empty parent directories up to .aim-studio root
|
|
13
|
+
*/
|
|
14
|
+
/** @internal Exported for testing only */
|
|
15
|
+
export declare function cleanupEmptyDirs(cwd: string, dirPath: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Sort migrations for safe execution order
|
|
18
|
+
* - rename-dir with deeper paths first (to handle nested directories)
|
|
19
|
+
* - rename-dir before rename/delete
|
|
20
|
+
*/
|
|
21
|
+
/** @internal Exported for testing only */
|
|
22
|
+
export declare function sortMigrationsForExecution(migrations: MigrationItem[]): MigrationItem[];
|
|
23
|
+
/**
|
|
24
|
+
* Main update command
|
|
25
|
+
*/
|
|
26
|
+
export declare function update(options: UpdateOptions): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,uBAAuB,CAAC;AA8E/B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2tBD;;;GAGG;AACH,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAoCnE;AAED;;;;GAIG;AACH,0CAA0C;AAC1C,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,aAAa,EAAE,GAC1B,aAAa,EAAE,CAajB;AAsLD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwlBlE"}
|