autonomous-flow-daemon 1.1.0 โ†’ 1.9.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.
Files changed (75) hide show
  1. package/CHANGELOG.md +85 -46
  2. package/LICENSE +21 -21
  3. package/README-ko.md +282 -0
  4. package/README.md +282 -337
  5. package/mcp-config.json +10 -10
  6. package/package.json +14 -6
  7. package/src/adapters/index.ts +370 -159
  8. package/src/cli.ts +162 -57
  9. package/src/commands/benchmark.ts +187 -0
  10. package/src/commands/correlate.ts +180 -0
  11. package/src/commands/dashboard.ts +404 -0
  12. package/src/commands/diagnose.ts +56 -14
  13. package/src/commands/doctor.ts +243 -0
  14. package/src/commands/evolution.ts +190 -0
  15. package/src/commands/fix.ts +158 -138
  16. package/src/commands/hooks.ts +136 -0
  17. package/src/commands/lang.ts +41 -41
  18. package/src/commands/mcp.ts +129 -0
  19. package/src/commands/plugin.ts +110 -0
  20. package/src/commands/restart.ts +14 -0
  21. package/src/commands/score.ts +276 -208
  22. package/src/commands/start.ts +155 -96
  23. package/src/commands/stats.ts +103 -0
  24. package/src/commands/status.ts +157 -0
  25. package/src/commands/stop.ts +68 -49
  26. package/src/commands/suggest.ts +211 -0
  27. package/src/commands/sync.ts +567 -21
  28. package/src/commands/vaccine.ts +177 -0
  29. package/src/constants.ts +32 -8
  30. package/src/core/boast.ts +280 -265
  31. package/src/core/config.ts +49 -49
  32. package/src/core/correlation-engine.ts +265 -0
  33. package/src/core/db.ts +145 -46
  34. package/src/core/discovery.ts +65 -65
  35. package/src/core/evolution.ts +215 -0
  36. package/src/core/federation.ts +129 -0
  37. package/src/core/hologram/engine.ts +71 -0
  38. package/src/core/hologram/fallback.ts +11 -0
  39. package/src/core/hologram/go-extractor.ts +203 -0
  40. package/src/core/hologram/incremental.ts +227 -0
  41. package/src/core/hologram/py-extractor.ts +132 -0
  42. package/src/core/hologram/rust-extractor.ts +244 -0
  43. package/src/core/hologram/ts-extractor.ts +406 -0
  44. package/src/core/hologram/types.ts +27 -0
  45. package/src/core/hologram.ts +73 -243
  46. package/src/core/hook-manager.ts +259 -0
  47. package/src/core/i18n/messages.ts +309 -266
  48. package/src/core/immune.ts +8 -123
  49. package/src/core/locale.ts +88 -88
  50. package/src/core/log-rotate.ts +33 -0
  51. package/src/core/log-utils.ts +38 -0
  52. package/src/core/lru-map.ts +61 -0
  53. package/src/core/notify.ts +74 -66
  54. package/src/core/plugin-manager.ts +225 -0
  55. package/src/core/rule-engine.ts +287 -0
  56. package/src/core/rule-suggestion.ts +127 -0
  57. package/src/core/semantic-diff.ts +432 -0
  58. package/src/core/telemetry.ts +94 -0
  59. package/src/core/vaccine-registry.ts +212 -0
  60. package/src/core/validator-generator.ts +224 -0
  61. package/src/core/workspace.ts +28 -0
  62. package/src/core/yaml-minimal.ts +176 -0
  63. package/src/daemon/client.ts +78 -37
  64. package/src/daemon/event-batcher.ts +108 -0
  65. package/src/daemon/guards.ts +13 -0
  66. package/src/daemon/http-routes.ts +376 -0
  67. package/src/daemon/mcp-handler.ts +575 -0
  68. package/src/daemon/mcp-subscriptions.ts +81 -0
  69. package/src/daemon/mesh.ts +51 -0
  70. package/src/daemon/server.ts +655 -504
  71. package/src/daemon/types.ts +121 -0
  72. package/src/daemon/workspace-map.ts +104 -0
  73. package/src/platform.ts +60 -39
  74. package/src/version.ts +15 -0
  75. package/README.ko.md +0 -306
package/CHANGELOG.md CHANGED
@@ -1,46 +1,85 @@
1
- # Changelog
2
-
3
- All notable changes to **afd** are documented in this file.
4
-
5
- Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
- Versioning follows [Semantic Versioning](https://semver.org/).
7
-
8
- ---
9
-
10
- ## [1.0.0] - 2026-03-31 โ€” "The Immortal Flow"
11
-
12
- > [afd] ๐Ÿ›ก๏ธ AI agent deleted '.claudeignore' | ๐Ÿฉน Self-healed in 184ms | Context preserved.
13
-
14
- **Zero-config immunity for your AI development flow.**
15
-
16
- ### Phase 1โ€“3: Core S.E.A.M Engine & Magic 5 Commands
17
-
18
- - Introduced the **S.E.A.M Cycle** (Scan โ†’ Evaluate โ†’ Act โ†’ Monitor) as the central execution loop
19
- - Implemented the **Magic 5 Commands**: `start`, `stop`, `score`, `fix`, `sync`
20
- - Built `src/core/db.ts`: WAL-mode SQLite for sub-100ms file event persistence
21
- - Built `src/core/hologram.ts`: AST-based skeleton extraction for token-efficient AI handoff
22
- - Built `src/core/immune.ts`: Immune tolerance heuristics โ€” suppression logic for noisy events
23
- - Implemented `src/daemon/server.ts` and `src/daemon/client.ts`: Unix socket IPC for daemon โ†” CLI communication
24
- - Chokidar-backed file watcher with 100ms debounce in `src/daemon/server.ts`
25
-
26
- ### Phase 4โ€“5: Multilingual UI & Status Line Integration
27
-
28
- - Added bilingual terminal UI (EN/KO) with chalk-based color output
29
- - Integrated **Status Line** hook injection for Claude Code, Cursor, and Copilot adapters
30
- - Added adapter layer (`src/adapters/`) for ecosystem-specific configuration
31
- - Published `README.md` (English) and `README.ko.md` (Korean) with full documentation
32
-
33
- ### Phase 6aโ€“6b: Suppression Safety โ€” Double-Tap & Mass-Event Logic
34
-
35
- - Added **Double-Tap suppression**: prevents re-triggering the same file within the cooldown window
36
- - Added **Mass-Event suppression**: drops bulk filesystem events (threshold: โ‰ฅ 5 files / 500ms) to prevent runaway AI calls
37
- - Added configurable `suppressionCooldownMs` and `massEventThreshold` / `massEventWindowMs`
38
- - Full E2E safety suite: 9 tests across suppression scenarios โ€” all green
39
- - Published `docs/06-suppression-safety-audit.md` and `docs/05-release-audit.md`
40
-
41
- ---
42
-
43
- ## [0.1.0] - 2026-01-01 โ€” Initial prototype
44
-
45
- - Project scaffold with Bun runtime
46
- - Basic CLI skeleton and daemon concept
1
+ # Changelog
2
+
3
+ All notable changes to **afd** are documented in this file.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
+ Versioning follows [Semantic Versioning](https://semver.org/).
7
+
8
+ ---
9
+
10
+ ## [1.5.0] - 2026-04-02 โ€” "Trust-Builder"
11
+
12
+ > The immune system now speaks. Three pillars that make afd's defenses visible, self-improving, and smarter.
13
+
14
+ ### Added
15
+
16
+ - **Hologram L1 โ€” Import-Based Semantic Compression**
17
+ - New optional `contextFile` parameter on `afd_hologram` MCP tool and `/hologram` HTTP endpoint
18
+ - `extractImportedSymbols()` function: regex fast-path parsing of named imports, default imports, and namespace imports from the context file
19
+ - L1 filtering in `generateHologram()`: directly imported symbols receive full type signatures; non-imported exports are reduced to name-only stubs with guide text `// details omitted โ€” read directly if needed`
20
+ - Namespace imports (`import * as X`) trigger full L0 hologram (safe default, no false filtering)
21
+ - Silent fallback to L0 when `contextFile` is missing, unreadable, or yields zero import results
22
+ - Compression target: 85%+ with contextFile (vs ~80% L0 baseline)
23
+ - L1 is MCP/HTTP path only โ€” S.E.A.M hot path remains L0 to protect the 270ms budget
24
+
25
+ - **Antibody Passive Defense โ€” Mistake History Injection**
26
+ - New `mistake_history` SQLite table: `file_path`, `mistake_type`, `description` (max 200 chars), `antibody_id`, `timestamp`
27
+ - Indexes on `file_path` and `timestamp` for sub-millisecond query performance
28
+ - Write-through cache: `mistakeCache: Map<string, MistakeEntry[]>` loaded on daemon startup, updated on every insert
29
+ - Per-file cap of 5 most recent entries enforced at write time
30
+ - 30-day TTL purge on daemon startup (consistent with `telemetry` table pattern)
31
+ - Direct DB insert on auto-heal events (not via HTTP POST): records `mistake_type` from `symptom.patternType` and `description` from `symptom.title`
32
+ - New GET `/mistake-history?file=<path>` HTTP endpoint (returns max 5 entries, most recent first)
33
+ - `pastMistakes` field injected into `afd diagnose --format a2a` output on both the healthy path (proactive warning) and the auto-heal path (reactive)
34
+ - `pastMistakes` is omitted entirely when no history exists (zero token overhead)
35
+ - Path normalization: `file_path` stored with forward slashes (cross-platform safe)
36
+
37
+ - **HUD Defense Counter + Reasons**
38
+ - `/mini-status` endpoint enhanced with `total_defenses: number` and `defense_reasons: string[]` (in-memory only, no DB query โ€” always under 200ms)
39
+ - `defense_reasons` derived from in-memory `state.autoHealLog` (capped at 100 entries), returning up to 3 most recent unique `mistake_type` values
40
+ - Status bar format: `[afd] {N}๊ฑด ๋ฐฉ์–ด ({reason1}, {reason2}, ...)` when defenses exist; `[afd] ON` when none
41
+ - Existing `healed_count` and `last_healed` fields preserved for backward compatibility
42
+
43
+ ### Fixed
44
+
45
+ - **Windows path normalization in `assertInsideWorkspace()`**: backslash (`\`) separators in Windows paths are now normalized to forward slashes before workspace boundary checks, fixing false-positive "outside workspace" errors on Windows
46
+
47
+ ---
48
+
49
+ ## [1.0.0] - 2026-03-31 โ€” "The Immortal Flow"
50
+
51
+ > [afd] ๐Ÿ›ก๏ธ AI agent deleted '.claudeignore' | ๐Ÿฉน Self-healed in 184ms | Context preserved.
52
+
53
+ **Zero-config immunity for your AI development flow.**
54
+
55
+ ### Phase 1โ€“3: Core S.E.A.M Engine & Magic 5 Commands
56
+
57
+ - Introduced the **S.E.A.M Cycle** (Scan โ†’ Evaluate โ†’ Act โ†’ Monitor) as the central execution loop
58
+ - Implemented the **Magic 5 Commands**: `start`, `stop`, `score`, `fix`, `sync`
59
+ - Built `src/core/db.ts`: WAL-mode SQLite for sub-100ms file event persistence
60
+ - Built `src/core/hologram.ts`: AST-based skeleton extraction for token-efficient AI handoff
61
+ - Built `src/core/immune.ts`: Immune tolerance heuristics โ€” suppression logic for noisy events
62
+ - Implemented `src/daemon/server.ts` and `src/daemon/client.ts`: Unix socket IPC for daemon โ†” CLI communication
63
+ - Chokidar-backed file watcher with 100ms debounce in `src/daemon/server.ts`
64
+
65
+ ### Phase 4โ€“5: Multilingual UI & Status Line Integration
66
+
67
+ - Added bilingual terminal UI (EN/KO) with chalk-based color output
68
+ - Integrated **Status Line** hook injection for Claude Code, Cursor, and Copilot adapters
69
+ - Added adapter layer (`src/adapters/`) for ecosystem-specific configuration
70
+ - Published `README.md` (English) and `README.ko.md` (Korean) with full documentation
71
+
72
+ ### Phase 6aโ€“6b: Suppression Safety โ€” Double-Tap & Mass-Event Logic
73
+
74
+ - Added **Double-Tap suppression**: prevents re-triggering the same file within the cooldown window
75
+ - Added **Mass-Event suppression**: drops bulk filesystem events (threshold: โ‰ฅ 5 files / 500ms) to prevent runaway AI calls
76
+ - Added configurable `suppressionCooldownMs` and `massEventThreshold` / `massEventWindowMs`
77
+ - Full E2E safety suite: 9 tests across suppression scenarios โ€” all green
78
+ - Published `docs/06-suppression-safety-audit.md` and `docs/05-release-audit.md`
79
+
80
+ ---
81
+
82
+ ## [0.1.0] - 2026-01-01 โ€” Initial prototype
83
+
84
+ - Project scaffold with Bun runtime
85
+ - Basic CLI skeleton and daemon concept
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 dotori
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dotori
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README-ko.md ADDED
@@ -0,0 +1,282 @@
1
+ <p align="center">
2
+ <img src="https://capsule-render.vercel.app/api?type=soft&color=auto&height=200&section=header&text=afd&fontSize=90" alt="afd" />
3
+ </p>
4
+
5
+ <h3 align="center">AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ํˆฌ๋ช…ํ•œ ์ˆ˜ํ˜ธ์ž</h3>
6
+ <p align="center"><strong>์ž๊ฐ€ ์น˜์œ  ํ™˜๊ฒฝ + ํ† ํฐ 84% ์ ˆ๊ฐ. AI๊ฐ€ ํŒŒ์ผ์„ ๋‚ ๋ ค๋จน์–ด๋„ 184ms ์•ˆ์— ์›์ƒ๋ณต๊ตฌ.</strong></p>
7
+
8
+ <p align="center">
9
+ <a href="https://github.com/dotoricode/autonomous-flow-daemon">
10
+ <img src="demo.gif" width="850" alt="afd demo" style="border-radius: 12px; box-shadow: 0 20px 40px rgba(0,0,0,0.4);">
11
+ </a>
12
+ </p>
13
+
14
+ <p align="center">
15
+ <img src="https://img.shields.io/badge/version-1.6.0-blue?style=flat-square" alt="version" />
16
+ <a href="https://www.npmjs.com/package/autonomous-flow-daemon"><img src="https://img.shields.io/npm/v/autonomous-flow-daemon?style=flat-square&logo=npm&color=cb0000" alt="npm" /></a>
17
+ <img src="https://img.shields.io/badge/runtime-Bun-f472b6?style=flat-square&logo=bun" alt="Bun" />
18
+ <img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="MIT" />
19
+ <img src="https://img.shields.io/badge/built%20for-Claude%20Code-7c3aed?style=flat-square" alt="Claude Code" />
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="README.md">English</a>
24
+ </p>
25
+
26
+ ---
27
+
28
+ ## ์ˆซ์ž๊ฐ€ ์ฆ๋ช…ํ•œ๋‹ค
29
+
30
+ | ์ƒํ™ฉ | afd ์—†์ด | afd ์žˆ์œผ๋ฉด |
31
+ |:-----|:---------|:----------|
32
+ | AI๊ฐ€ `.claudeignore` ์‚ญ์ œ | **30๋ถ„** ์ˆ˜๋™ ๋ณต๊ตฌ | **0.2์ดˆ** ์ž๋™ ์น˜์œ  |
33
+ | Hook ํŒŒ์ผ ์˜ค์—ผ | ํ›… ์žฌ์ฃผ์ž…, ์„ธ์…˜ ์žฌ์‹œ์ž‘ | **๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฌด์Œ ์ˆ˜๋ฆฌ** |
34
+ | `git checkout`์œผ๋กœ ์ด๋ฒคํŠธ 50๊ฐœ ํญ๋ฐœ | AI ํญ์ฃผ ์‹œ์ž‘ | **ํญ์ฃผ ์–ต์ œ๊ธฐ ์ฆ‰์‹œ ๊ฐœ์ž…** |
35
+ | ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ 8๊ฐœ ์ฝ๊ธฐ (114KB) | **~28,600 ํ† ํฐ** ์†Œ๋น„ | **~4,600 ํ† ํฐ** (84% ์ ˆ์•ฝ) |
36
+ | ์„ธ์…˜ ํ† ํฐ ์˜ˆ์‚ฐ | ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ ์ˆœ์‚ญ | **์ฝ”๋“œ๋ฒ ์ด์Šค ์Šค์บ”๋‹น ~60,900 ํ† ํฐ ์ ˆ์•ฝ** |
37
+
38
+ > `CPU 0.1% ๋ฏธ๋งŒ` | `RAM ~40MB` | `์ „์ฒด ์น˜์œ  ์‚ฌ์ดํด 270ms` | ์žˆ๋Š”์ง€๋„ ๋ชจ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
39
+
40
+ ---
41
+
42
+ ## ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ ๋
43
+
44
+ ```bash
45
+ npx @dotoricode/afd start
46
+ ```
47
+
48
+ ๋์ด๋‹ค. ๋ฐ๋ชฌ ๋œจ๊ณ , ํ›… ๊ฝ‚ํžˆ๊ณ , MCP ๋“ฑ๋ก๊นŒ์ง€ ์•Œ์•„์„œ ํ•œ๋‹ค.
49
+
50
+ ```
51
+ $ afd start
52
+ Daemon started (pid 4812, port 52413)
53
+ Smart Discovery: Watching 7 AI-context targets
54
+ Hook injected into .claude/hooks.json
55
+ ```
56
+
57
+ ---
58
+
59
+ ## ๋ฌธ์ œ
60
+
61
+ Claude Code, Cursor, Windsurf โ€” AI ์—์ด์ „ํŠธ๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ์†์ด ๊ฑฐ์น ๋‹ค. `.claudeignore`๋‚ ๋ฆฌ๊ณ , `hooks.json` ์˜ค์—ผ์‹œํ‚ค๊ณ , `.cursorrules` ํ†ต์งธ๋กœ ๋ฐ€์–ด๋ฒ„๋ฆฐ๋‹ค. ์•Œ์•„์ฑŒ ๋•Œ๋Š” ์ด๋ฏธ ๋Šฆ์—ˆ๋‹ค. ์ฝ”๋”ฉ ๋ฉˆ์ถ”๊ณ , ์›์ธ ํŒŒ์•…ํ•˜๊ณ , ์ˆ˜๋™ ๋ณต๊ตฌ. **30๋ถ„ ์ฆ๋ฐœ. ํ”Œ๋กœ์šฐ ๋ฆฌ์…‹.**
62
+
63
+ ์ฝ”๋“œ ์ฝ์„ ๋•Œ๋งˆ๋‹ค? ์†Œ์Šค ํŒŒ์ผ ์ „์ฒด๋ฅผ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ์— ๊ทธ๋ƒฅ ๋•Œ๋ ค๋ฐ•๋Š”๋‹ค. **ํ•„์š”๋„ ์—†๋Š” ํ•จ์ˆ˜ ๋ณธ๋ฌธ์— ์ˆ˜์ฒœ ํ† ํฐ์ด ์ฆ๋ฐœํ•œ๋‹ค.**
64
+
65
+ ## ํ•ด๊ฒฐ์ฑ…
66
+
67
+ `afd`๋Š” ๋ˆˆ์— ์•ˆ ๋ณด์ด๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ๋ชฌ์ด๋‹ค. ํ•ต์‹ฌ ํŒŒ์ผ์„ ํ•ญ์‹œ ๊ฐ์‹œํ•˜๊ณ , ์˜ค์—ผ์€ 184ms ์•ˆ์— ์กฐ์šฉํžˆ ๋˜๋Œ๋ฆฐ๋‹ค. AI ์—์ด์ „ํŠธํ•œํ…Œ๋Š” ์›๋ณธ ์†Œ์Šค ๋Œ€์‹  ํƒ€์ž… ์Šค์ผˆ๋ ˆํ†ค๋งŒ ๋„˜๊ธด๋‹ค โ€” ํ•„์š”ํ•œ ๊ตฌ์กฐ ์ •๋ณด๋ฅผ 1/16 ๋น„์šฉ์—. ์‹ค์ˆ˜๋Š” ๋ˆˆ์น˜์ฑ„๊ธฐ ์ „์— ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ผ๋ถ€๋Ÿฌ ์ง€์šด ๊ฑด ๊ทธ๋ƒฅ ๋‘”๋‹ค. ์„ค์ •ํ•  ๊ฒƒ๋„ ์—†๊ณ , ์‹ ๊ฒฝ ์“ธ ๊ฒƒ๋„ ์—†๋‹ค.
68
+
69
+ ---
70
+
71
+ ## v1.6.0 ์ฃผ์š” ์—…๋ฐ์ดํŠธ
72
+
73
+ | ๊ธฐ๋Šฅ | ๋ณ€๊ฒฝ ๋‚ด์šฉ |
74
+ |:-----|:---------|
75
+ | **Tree-sitter AST ์—”์ง„** | TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ Tree-sitter๋กœ ๊ต์ฒด โ€” ๋‹ค๊ตญ์–ด ํ™€๋กœ๊ทธ๋žจ ์ง€์› (TS/JS ์™„์ „ ์ง€์›, Python/Go/Rust ํด๋ฐฑ) |
76
+ | **์‹ค์‹œ๊ฐ„ HUD ROI ์ „๊ด‘ํŒ** | ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ์ƒํƒœ ๋ฐ”์—์„œ ์„ธ์…˜ ๋‹จ์œ„ ํ† ํฐ ์ ˆ์•ฝ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„ ํ™•์ธ |
77
+ | **์ด๋ฒคํŠธ ๋ฐฐ์นญ** | 300ms ๋””๋ฐ”์šด์Šค + ์ค‘๋ณต ์ œ๊ฑฐ โ€” ๊ธ‰๊ฒฉํ•œ ํŒŒ์ผ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์ด๋ฒคํŠธ ํญํ’ ์ฐจ๋‹จ |
78
+ | **ํ›… ๋งค๋‹ˆ์ €** | ๋ฉ€ํ‹ฐ ์˜ค๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ โ€” ๋‹ค๋ฅธ ํ›… ์ œ๊ณต์ž์™€ ๊น”๋”ํ•˜๊ฒŒ ๊ณต์กด |
79
+
80
+ ---
81
+
82
+ ## ํ•ต์‹ฌ ๊ธฐ๋Šฅ
83
+
84
+ | ๊ธฐ๋Šฅ | ์„ค๋ช… |
85
+ |:-----|:-----|
86
+ | **S.E.A.M ์ž๊ฐ€ ์น˜์œ ** | ํŒŒ์ผ ์‚ญ์ œ/์˜ค์—ผ ๊ฐ์ง€ ํ›„ 270ms ์ด๋‚ด ๋ณต๊ตฌ |
87
+ | **ํ™€๋กœ๊ทธ๋žจ ์••์ถ•** | AI ์—์ด์ „ํŠธ์—๊ฒŒ MCP๋กœ 70-96% ๊ฐ€๋ฒผ์šด ํŒŒ์ผ ์Šค์ผˆ๋ ˆํ†ค ์ œ๊ณต |
88
+ | **์Šค๋งˆํŠธ ๋ฆฌ๋”** | `afd_read` โ€” ์†Œ์šฉ๋Ÿ‰ ์›๋ณธ, ๋Œ€์šฉ๋Ÿ‰ ์ž๋™ ์••์ถ•, ๋ผ์ธ ๋ฒ”์œ„ ์กฐํšŒ ์ง€์› |
89
+ | **์›Œํฌ์ŠคํŽ˜์ด์Šค ๋งต** | `afd://workspace-map` โ€” ์ „์ฒด ํŒŒ์ผ ํŠธ๋ฆฌ + ์ต์ŠคํฌํŠธ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํ•œ ๋ฒˆ์— |
90
+ | **Import ์ธ์‹ L1** | ์ž„ํฌํŠธ๋œ ์‹ฌ๋ณผ๋งŒ ์ „์ฒด ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ œ๊ณต (์ ˆ์•ฝ 85%+) |
91
+ | **๋”๋ธ” ํƒญ ํœด๋ฆฌ์Šคํ‹ฑ** | ํ•œ ๋ฒˆ ์‚ญ์ œ = ์น˜์œ , 30์ดˆ ๋‚ด ์žฌ์‚ญ์ œ = ์˜๋„๋กœ ์ธ์‹ |
92
+ | **๋ฐฑ์‹  ๋„คํŠธ์›Œํฌ** | `afd sync`๋กœ ํ•™์Šต๋œ ํ•ญ์ฒด๋ฅผ ํ”„๋กœ์ ํŠธ ๊ฐ„ ์ด์‹ |
93
+ | **์ž๊ฐ€ ์ง„ํ™”** | ๊ฒฉ๋ฆฌ๋œ ์‹คํŒจ ์‚ฌ๋ก€๊ฐ€ ์ž๋™์œผ๋กœ ์˜ˆ๋ฐฉ ๊ทœ์น™์ด ๋จ |
94
+ | **์‹ค์ˆ˜ ์ด๋ ฅ** | ํŒŒ์ผ ํŽธ์ง‘ ์ „ PreToolUse ํ›…์ด ๊ณผ๊ฑฐ ์‹ค์ˆ˜๋ฅผ ๊ฒฝ๊ณ ๋กœ ์ฃผ์ž… |
95
+ | **HUD ์นด์šดํ„ฐ** | ์ƒํƒœ ๋ฐ”์— ๋ฐฉ์–ด ํšŸ์ˆ˜ + ํ† ํฐ ์ ˆ์•ฝ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ |
96
+
97
+ ---
98
+
99
+ ## ํ† ํฐ ์ ˆ์•ฝ โ€” ์‹ค์ธก ๋ฐ์ดํ„ฐ
100
+
101
+ ํ™€๋กœ๊ทธ๋žจ ์‹œ์Šคํ…œ์€ afd๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ€์น˜๋‹ค. ์‹ค์ œ ์„ธ์…˜์—์„œ ์ธก์ •ํ•œ ๋ฐ์ดํ„ฐ:
102
+
103
+ ### ์„ธ์…˜ ์Šค๋ƒ…์ƒท
104
+
105
+ | ์ง€ํ‘œ | ์ˆ˜์น˜ |
106
+ |:-----|:-----|
107
+ | ํ™€๋กœ๊ทธ๋žจ ์š”์ฒญ | 55๊ฐœ ํŒŒ์ผ ๋ถ„์„ |
108
+ | ๋Œ€์ƒ ํŒŒ์ผ ์ด ํฌ๊ธฐ | ~290 KB (55๊ฐœ, ํ‰๊ท  5.3 KB) |
109
+ | ์›๋ณธ ํ† ํฐ ๋น„์šฉ | ~72,500 ํ† ํฐ |
110
+ | ํ™€๋กœ๊ทธ๋žจ ์••์ถ• ํ›„ | ~11,600 ํ† ํฐ |
111
+ | **์ ˆ์•ฝ๋œ ํ† ํฐ** | **~60,900 ํ† ํฐ (84% ๊ฐ์†Œ)** |
112
+
113
+ ### ์Šค์ผ€์ผ ํšจ๊ณผ
114
+
115
+ ```
116
+ ์„ธ์…˜ ์ „์ฒด ํ† ํฐ (ctx ~15%): ~150,000 โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
117
+ ํ™€๋กœ๊ทธ๋žจ์œผ๋กœ ์ ˆ์•ฝ: ~60,900 โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ (์„ธ์…˜์˜ 41%)
118
+ ```
119
+
120
+ ctx 50% ๋„˜์–ด๊ฐ€๋ฉด ํŒŒ์ผ ์ฝ๊ธฐ๊ฐ€ ํ† ํฐ์„ ๋‹ค ์žก์•„๋จน๋Š”๋‹ค. ํ™€๋กœ๊ทธ๋žจ ์—†์ด ์†Œ์Šค ํŒŒ์ผ 55๊ฐœ ์Šค์บ”ํ•˜๋ฉด ~72.5K ํ† ํฐ์ด ๋‚ ์•„๊ฐ„๋‹ค. ํ™€๋กœ๊ทธ๋žจ์œผ๋กœ๋Š” **ํŒŒ์ผ ํ•˜๋‚˜๋‹น ์›๋ž˜ ๋น„์šฉ์˜ 16%** โ€” ๋ฐ˜๋ณต ์ฝ๊ธฐ๊ฐ€ ์Œ“์ผ์ˆ˜๋ก ๊ฒฉ์ฐจ๊ฐ€ ๋ฒŒ์–ด์ง„๋‹ค.
121
+
122
+ ### 3๋‹จ๊ณ„ ํ† ํฐ ๋‹ค์ด์–ดํŠธ
123
+
124
+ | ๋ ˆ์ด์–ด | ๋„๊ตฌ | ์ ˆ์•ฝ๋ฅ  | ๋ฐฉ์‹ |
125
+ |:-------|:-----|:-------|:-----|
126
+ | **L0 ํ™€๋กœ๊ทธ๋žจ** | `afd_hologram` | 80%+ | ํ•จ์ˆ˜ ๋ณธ๋ฌธ ์ œ๊ฑฐ, ํƒ€์ž… ์‹œ๊ทธ๋‹ˆ์ฒ˜๋งŒ ์œ ์ง€ |
127
+ | **L1 ํ™€๋กœ๊ทธ๋žจ** | `afd_hologram` + `contextFile` | 85%+ | ์ž„ํฌํŠธ๋œ ์‹ฌ๋ณผ๋งŒ ์ „์ฒด ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ œ๊ณต |
128
+ | **์Šค๋งˆํŠธ ๋ฆฌ๋”** | `afd_read` | ์ž๋™ | 10KB ๋ฏธ๋งŒ ์›๋ณธ, 10KB ์ด์ƒ ์ž๋™ ํ™€๋กœ๊ทธ๋žจ |
129
+ | **์›Œํฌ์ŠคํŽ˜์ด์Šค ๋งต** | `afd://workspace-map` | N/A | ์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ํ•œ ๋ฒˆ์— |
130
+
131
+ ---
132
+
133
+ <details>
134
+ <summary><b>S.E.A.M ๋™์ž‘ ์›๋ฆฌ (๋‚ด๋ถ€ ๊ตฌ์กฐ)</b></summary>
135
+
136
+ ๋ชจ๋“  ํŒŒ์ผ ์ด๋ฒคํŠธ๋Š” ๋„ค ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค:
137
+
138
+ ```mermaid
139
+ graph LR
140
+ S["Sense<br/><i>ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€</i>"] --> E["Extract<br/><i>์ฆ์ƒ ๋ถ„์„</i>"]
141
+ E --> A["Adapt<br/><i>ํ•ญ์ฒด ์„ ํƒ</i>"]
142
+ A --> M["Mutate<br/><i>JSON-Patch ์ ์šฉ</i>"]
143
+ M -->|"ํ•™์Šต"| S
144
+ style S fill:#3b82f6,color:#fff,stroke:none
145
+ style E fill:#f59e0b,color:#fff,stroke:none
146
+ style A fill:#10b981,color:#fff,stroke:none
147
+ style M fill:#ef4444,color:#fff,stroke:none
148
+ ```
149
+
150
+ | ๋‹จ๊ณ„ | ๋™์ž‘ | ์†๋„ |
151
+ |:-----|:-----|:-----|
152
+ | **Sense** | Chokidar๊ฐ€ `add`, `change`, `unlink` ์ด๋ฒคํŠธ ๊ฐ์ง€ | < 10ms |
153
+ | **Extract** | ํ™€๋กœ๊ทธ๋žจ(ํƒ€์ž… ์Šค์ผˆ๋ ˆํ†ค) ์ƒ์„ฑ + ์ƒํƒœ ๊ฒ€์‚ฌ | < 5ms |
154
+ | **Adapt** | ์ฆ์ƒ์— ๋งž๋Š” ํ•ญ์ฒด ๋งค์นญ, ์˜ค์—ผ ํŒŒ์ผ ๊ฒฉ๋ฆฌ | < 1ms |
155
+ | **Mutate** | RFC 6902 JSON-Patch๋กœ ํŒŒ์ผ ๋ณต๊ตฌ | < 25ms |
156
+
157
+ > ์ „์ฒด ์‚ฌ์ดํด: ํŒŒ์ผ ์‚ญ์ œ๋ถ€ํ„ฐ ์™„์ „ ๋ณต๊ตฌ๊นŒ์ง€ **270ms ๋ฏธ๋งŒ**.
158
+
159
+ </details>
160
+
161
+ ---
162
+
163
+ ## ๋ช…๋ น์–ด
164
+
165
+ | ๋ช…๋ น์–ด | ์—ญํ•  |
166
+ |:-------|:-----|
167
+ | `afd start` | ๋ฐ๋ชฌ ์‹œ์ž‘ + ์Šค๋งˆํŠธ ๋””์Šค์ปค๋ฒ„๋ฆฌ + ํ›… ์ฃผ์ž… + MCP ๋“ฑ๋ก |
168
+ | `afd stop` | ๊ต๋Œ€ ์š”์•ฝ ๋ฆฌํฌํŠธ + ์ •์ƒ ์ข…๋ฃŒ (`--clean`์œผ๋กœ ํ›…/MCP ์ œ๊ฑฐ) |
169
+ | `afd score` | ์ง„ํ™” ๋ฐ ํ™€๋กœ๊ทธ๋žจ ๋ฉ”ํŠธ๋ฆญ ํฌํ•จ ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ |
170
+ | `afd fix` | ํ™€๋กœ๊ทธ๋žจ ์ปจํ…์ŠคํŠธ ํฌํ•จ ์ฆ์ƒ ์ง„๋‹จ + ํ•ญ์ฒด ํ•™์Šต |
171
+ | `afd sync` | ๋ฐฑ์‹  ํŽ˜์ด๋กœ๋“œ ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ (`--push`, `--pull`, `--remote <url>`) |
172
+ | `afd restart` | ์ •์ง€ + ์‹œ์ž‘ ์›์ปค๋งจ๋“œ |
173
+ | `afd status` | ๋น ๋ฅธ ์ƒํƒœ ํ™•์ธ โ€” ๋ฐ๋ชฌ, ํ›…, MCP, ๋ฐฉ์–ด ์ด๋ ฅ |
174
+ | `afd doctor` | ์ž๋™ ์ˆ˜์ • ๊ถŒ๊ณ  ํฌํ•จ ์ข…ํ•ฉ ์ƒํƒœ ๋ถ„์„ |
175
+ | `afd evolution` | ๊ฒฉ๋ฆฌ ์‹คํŒจ ๋ถ„์„ + ์˜ˆ๋ฐฉ ๊ทœ์น™ ์ƒ์„ฑ |
176
+ | `afd mcp install` | ํ”„๋กœ์ ํŠธ + ๊ธ€๋กœ๋ฒŒ ์„ค์ •์— MCP ์„œ๋ฒ„ ๋“ฑ๋ก |
177
+ | `afd vaccine` | ์ปค๋ฎค๋‹ˆํ‹ฐ ํ•ญ์ฒด ๋ชฉ๋ก ์กฐํšŒ, ๊ฒ€์ƒ‰, ์„ค์น˜, ๋ฐฐํฌ |
178
+ | `afd lang` | ํ‘œ์‹œ ์–ธ์–ด ์ „ํ™˜ (`afd lang ko` / `afd lang en`) |
179
+
180
+ ---
181
+
182
+ <details>
183
+ <summary><b>๊ณ ๊ธ‰ ๊ธฐ๋Šฅ</b></summary>
184
+
185
+ ### ๋”๋ธ” ํƒญ ํœด๋ฆฌ์Šคํ‹ฑ
186
+
187
+ `afd`๋Š” **์‹ค์ˆ˜**์™€ **์˜๋„**๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค:
188
+
189
+ ```
190
+ $ rm .claudeignore # ์ฒซ ๋ฒˆ์งธ ํƒญ -> afd๊ฐ€ ๋ฌด์Œ์œผ๋กœ ์น˜์œ 
191
+ $ rm .claudeignore # 30์ดˆ ๋‚ด ์žฌ์‚ญ์ œ -> "์˜๋„ํ•œ ๊ฒƒ์ด๊ตฐ."
192
+ [afd] ํ•ญ์ฒด IMM-001 ํœด๋ฉด ์ „ํ™˜. ๋”๋ธ” ํƒญ ๊ฐ์ง€. ๊ฐœ์ž… ์ค‘๋‹จ.
193
+ ```
194
+
195
+ | ์‹œ๋‚˜๋ฆฌ์˜ค | ๋Œ€์‘ |
196
+ |:---------|:-----|
197
+ | ๋‹จ์ผ ์‚ญ์ œ (์‹ค์ˆ˜) | ์ž๋™ ์น˜์œ  + ์ฒซ ํƒญ ๊ธฐ๋ก |
198
+ | 30์ดˆ ๋‚ด ์žฌ์‚ญ์ œ (์˜๋„) | ํ•ญ์ฒด ํœด๋ฉด ์ „ํ™˜, ์‚ญ์ œ ์กด์ค‘ |
199
+ | 1์ดˆ ๋‚ด 3ํšŒ ์ด์ƒ ์‚ญ์ œ (git checkout) | ๋Œ€๊ทœ๋ชจ ์ด๋ฒคํŠธ ๊ฐ์ง€, ์ „์ฒด ์–ต์ œ ์ผ์‹œ ํ•ด์ œ |
200
+
201
+ ### ๋ฐฑ์‹  ๋„คํŠธ์›Œํฌ
202
+
203
+ ```bash
204
+ afd sync # .afd/global-vaccine-payload.json์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
205
+ afd sync --push # ์›๊ฒฉ์œผ๋กœ ๋ฐฑ์‹  ํ‘ธ์‹œ
206
+ afd sync --pull # ์›๊ฒฉ์—์„œ ๋ฐฑ์‹  ํ’€
207
+ ```
208
+
209
+ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋„ ์‹œํฌ๋ฆฟ๋„ ์—†์ด ๊น”๋”ํ•˜๊ฒŒ ์ •์ œ๋ผ ์žˆ์–ด์„œ ์–ด๋””๋“  ๊ฐ–๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.
210
+
211
+ ### ์ž๊ฐ€ ์ง„ํ™”
212
+
213
+ ```bash
214
+ afd evolution
215
+ ```
216
+
217
+ ๊ฒฉ๋ฆฌ๋œ ์‹คํŒจ ์‚ฌ๋ก€๋ฅผ ๋ถ„์„ํ•ด `afd-lessons.md`์— ์˜ˆ๋ฐฉ ๊ทœ์น™์„ ์ž‘์„ฑํ•œ๋‹ค. AI ์—์ด์ „ํŠธ๋Š” ๋ฉด์—ญ ํ•ต์‹ฌ ํŒŒ์ผ ํŽธ์ง‘ ์ „ ์ด ํŒŒ์ผ์„ ์ฐธ์กฐ โ€” ๊ณผ๊ฑฐ์˜ ์‹คํŒจ๊ฐ€ ๋ฏธ๋ž˜์˜ ๋ฐฉํŒจ๊ฐ€ ๋œ๋‹ค.
218
+
219
+ </details>
220
+
221
+ ---
222
+
223
+ ## MCP ์„ค์ •
224
+
225
+ `afd`๋Š” 4๊ฐœ์˜ MCP ๋„๊ตฌ์™€ 1๊ฐœ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค:
226
+
227
+ | MCP ๋„๊ตฌ | ์—ญํ•  |
228
+ |:---------|:-----|
229
+ | `afd_read` | ์Šค๋งˆํŠธ ํŒŒ์ผ ๋ฆฌ๋” โ€” ์†Œ์šฉ๋Ÿ‰ ์›๋ณธ, ๋Œ€์šฉ๋Ÿ‰ ์ž๋™ ํ™€๋กœ๊ทธ๋žจ, ๋ผ์ธ ๋ฒ”์œ„ ์ง€์› |
230
+ | `afd_hologram` | TS/JS ํŒŒ์ผ์˜ ํ† ํฐ ํšจ์œจ์ ์ธ ํƒ€์ž… ์Šค์ผˆ๋ ˆํ†ค (80%+ ์ ˆ์•ฝ) |
231
+ | `afd_diagnose` | ์ฆ์ƒ ๋ฐ ํ™€๋กœ๊ทธ๋žจ ์ปจํ…์ŠคํŠธ ํฌํ•จ ์ƒํƒœ ์ง„๋‹จ |
232
+ | `afd_score` | ๋Ÿฐํƒ€์ž„ ํ†ต๊ณ„: ๊ฐ€๋™์‹œ๊ฐ„, ์น˜์œ  ํšŸ์ˆ˜, ํ™€๋กœ๊ทธ๋žจ ์ ˆ์•ฝ๋Ÿ‰ |
233
+
234
+ | MCP ๋ฆฌ์†Œ์Šค | ์—ญํ•  |
235
+ |:-----------|:-----|
236
+ | `afd://workspace-map` | ์ต์ŠคํฌํŠธ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ํฌํ•จ ์ „์ฒด ํŒŒ์ผ ํŠธ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— |
237
+
238
+ ```bash
239
+ afd mcp install # .mcp.json + ~/.claude.json์— ๋“ฑ๋ก
240
+ ```
241
+
242
+ ---
243
+
244
+ <details>
245
+ <summary><b>๊ธฐ์ˆ  ์Šคํƒ</b></summary>
246
+
247
+ | ๋ ˆ์ด์–ด | ๊ธฐ์ˆ  | ์ด์œ  |
248
+ |:-------|:-----|:-----|
249
+ | ๋Ÿฐํƒ€์ž„ | **Bun** | ๋„ค์ดํ‹ฐ๋ธŒ TypeScript, ๋น ๋ฅธ SQLite, ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ |
250
+ | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค | **Bun SQLite (WAL)** | ์ฝ๊ธฐ 0.29ms, ์“ฐ๊ธฐ 24ms, ํฌ๋ž˜์‹œ ์•ˆ์ „ |
251
+ | ํŒŒ์‹ฑ | **Tree-sitter** | ๋‹ค๊ตญ์–ด AST โ€” TS, JS, Python, Go, Rust |
252
+ | ๊ฐ์‹œ | **Chokidar** | ํฌ๋กœ์Šคํ”Œ๋žซํผ, ๊ฒ€์ฆ๋œ ํŒŒ์ผ ์™€์ฒ˜ |
253
+ | ํŒจ์นญ | **RFC 6902 JSON-Patch** | ๊ฒฐ์ •๋ก ์ , ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ๋ณ€์ด |
254
+ | CLI | **Commander.js** | ํ‘œ์ค€, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด ํŒŒ์‹ฑ |
255
+
256
+ </details>
257
+
258
+ ---
259
+
260
+ ## ์„ค์น˜
261
+
262
+ ```bash
263
+ # ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ• (์„ค์น˜ ๋ถˆํ•„์š”)
264
+ npx @dotoricode/afd start
265
+
266
+ # Bun์œผ๋กœ ์„ค์น˜ (๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ถŒ์žฅ)
267
+ bun install
268
+ bun link
269
+ afd start
270
+ ```
271
+
272
+ ### ์š”๊ตฌ์‚ฌํ•ญ
273
+
274
+ - **Bun** >= 1.0
275
+ - **OS**: Windows, macOS, Linux
276
+ - **๋Œ€์ƒ**: Claude Code, Cursor, Windsurf, Codex (์—์ฝ”์‹œ์Šคํ…œ ์ž๋™ ๊ฐ์ง€)
277
+
278
+ ---
279
+
280
+ ## ๋ผ์ด์„ ์Šค
281
+
282
+ MIT