axmap-cli 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.
Files changed (78) hide show
  1. package/.claude/commands/ax-done.md +10 -0
  2. package/.claude/commands/ax-setup.md +31 -0
  3. package/.claude/commands/ax-start.md +15 -0
  4. package/.claude/commands/ax-tell.md +14 -0
  5. package/.claude/commands/ax-update.md +19 -0
  6. package/.claude/commands/ax.md +13 -0
  7. package/CLAUDE.md +309 -0
  8. package/LICENSE +20 -0
  9. package/README.md +207 -0
  10. package/app/README.md +366 -0
  11. package/app/eval/edges.mjs +242 -0
  12. package/app/lib/adjacent.mjs +125 -0
  13. package/app/lib/agentcli.mjs +153 -0
  14. package/app/lib/analyze.mjs +1159 -0
  15. package/app/lib/cochange.mjs +421 -0
  16. package/app/lib/datanodes.mjs +127 -0
  17. package/app/lib/entry.mjs +192 -0
  18. package/app/lib/featuregraph.mjs +389 -0
  19. package/app/lib/features.mjs +645 -0
  20. package/app/lib/fetchrepo-run.mjs +37 -0
  21. package/app/lib/fetchrepo.mjs +164 -0
  22. package/app/lib/flow.mjs +1089 -0
  23. package/app/lib/ladder.mjs +387 -0
  24. package/app/lib/langs.mjs +630 -0
  25. package/app/lib/live.mjs +346 -0
  26. package/app/lib/llm.mjs +594 -0
  27. package/app/lib/newfile.mjs +126 -0
  28. package/app/lib/prdiff.mjs +651 -0
  29. package/app/lib/reveal.mjs +316 -0
  30. package/app/lib/roots.mjs +186 -0
  31. package/app/lib/scope.mjs +342 -0
  32. package/app/lib/session.mjs +389 -0
  33. package/app/lib/slots.mjs +233 -0
  34. package/app/lib/ssot.mjs +277 -0
  35. package/app/lib/teamview.mjs +962 -0
  36. package/app/lib/terms.ko.mjs +169 -0
  37. package/app/server.mjs +1959 -0
  38. package/app/web/shell.css +538 -0
  39. package/app/web/shell.html +197 -0
  40. package/app/web/shell.js +638 -0
  41. package/app/web/stage.js +347 -0
  42. package/app/web/words.js +85 -0
  43. package/bin/axmap.mjs +1918 -0
  44. package/governance/GOVERNANCE.md +433 -0
  45. package/governance/gate.mjs +526 -0
  46. package/governance/vote.mjs +501 -0
  47. package/mcp/README.md +254 -0
  48. package/mcp/SETUP-FOR-AI.md +186 -0
  49. package/mcp/install.ps1 +341 -0
  50. package/mcp/install.sh +339 -0
  51. package/mcp/server.mjs +969 -0
  52. package/package.json +48 -0
  53. package/src/closure.mjs +343 -0
  54. package/src/governance.mjs +839 -0
  55. package/src/invariants.mjs +226 -0
  56. package/src/mrtarget.mjs +284 -0
  57. package/src/promote.mjs +177 -0
  58. package/src/protocol.mjs +423 -0
  59. package/src/repotarget.mjs +81 -0
  60. package/src/update.mjs +177 -0
  61. package/src/version.mjs +186 -0
  62. package/tools/bus.mjs +520 -0
  63. package/tools/cluster-experiment.mjs +256 -0
  64. package/tools/cluster-sweep.mjs +226 -0
  65. package/tools/make-icon.mjs +108 -0
  66. package/tools/mcp-register.mjs +269 -0
  67. package/tools/mr-target.mjs +49 -0
  68. package/tools/persona-bench.mjs +362 -0
  69. package/tools/pick-repo.mjs +229 -0
  70. package/tools/promote.mjs +550 -0
  71. package/tools/reveal-demo.mjs +158 -0
  72. package/tools/run-tests.mjs +42 -0
  73. package/tools/setup.mjs +490 -0
  74. package/tools/shortcut.mjs +121 -0
  75. package/tools/smoke.mjs +166 -0
  76. package/tools/topicgraph.py +154 -0
  77. package/tools/vendor.mjs +382 -0
  78. package/tools/version.mjs +115 -0
@@ -0,0 +1,197 @@
1
+ <!doctype html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>axMap</title>
7
+ <link rel="stylesheet" href="shell.css">
8
+ </head>
9
+ <!--
10
+ 새 껍데기 — 여기에 UI 를 새로 쌓는다.
11
+
12
+ 🔴 옛 화면(`index.html` · `overlay.js` 3,527줄)은 **지웠다.**
13
+
14
+ 한동안 `/classic` 으로 남겨 뒀는데, 남겨 두는 것 자체가 "저기 있으니 나중에
15
+ 가져다 쓰자" 는 여지를 만든다. 재활용할 것이 아니면 여지를 남기지 않는다.
16
+
17
+ 벤치 3회차의 측정 대상은 git 에 그대로 있다 —
18
+ `git show 02b6dfc:app/web/overlay.js` 로 그 시점 그대로 꺼낼 수 있다.
19
+ 작업 트리에서 지운 것이 기준선을 없앤 것은 아니다.
20
+ -->
21
+ <body>
22
+
23
+ <!--
24
+ ── 툴바 ──────────────────────────────────────────────────────────────────
25
+
26
+ 🔴 VS Code 의 흐름을 그대로 빌린다.
27
+
28
+ 사람들이 이미 아는 순서가 있다 — 창 맨 위에 메뉴가 있고, 거기서 `열기` 로
29
+ 시작한다. 우리가 다른 순서를 발명하면 배울 것이 하나 더 늘어난다.
30
+ 온보딩 실험이 여섯 회차 내내 말한 것이 "무엇을 눌러야 할지 모르겠다" 였다.
31
+
32
+ 데스크톱에서는 이 막대가 **창의 제목표시줄을 대신한다**(`frame: false`).
33
+ 그래서 빈 곳은 끌어서 창을 옮길 수 있어야 하고(`-webkit-app-region: drag`),
34
+ 버튼은 반대로 끌기에서 빼야 한다 — 안 빼면 눌리지 않는다.
35
+ -->
36
+ <header id="bar">
37
+ <!--
38
+ 🔴 한 줄을 새로 쓰지 않는다. **이 줄이 곧 창의 제목표시줄이다.**
39
+
40
+ 메뉴 이름 셋(`저장소`·`보기`·`도움말`)을 글자로 늘어놓으면 창 위에 띠가 하나
41
+ 더 생긴 것처럼 보인다. 아이콘으로 대신할 수 있는 것은 아이콘으로 바꾸고,
42
+ 나머지는 `☰` 하나에 접었다.
43
+
44
+ 글자로 남긴 것은 **지금 보고 있는 저장소** 하나뿐이다. VS Code 가 그 자리에
45
+ 파일 이름을 두는 것과 같은 이유다 — 창 제목은 "무엇을 보고 있나" 여야 한다.
46
+
47
+ 아이콘은 인라인 SVG 다. 아이콘 글꼴도 이미지도 안 쓴다(의존성 0).
48
+ `currentColor` 를 쓰므로 색은 CSS 토큰 하나로 따라온다.
49
+ -->
50
+ <button class="ico" data-menu="all" aria-label="메뉴" title="메뉴">
51
+ <svg viewBox="0 0 16 16"><path d="M2.5 4h11M2.5 8h11M2.5 12h11"/></svg>
52
+ </button>
53
+
54
+ <button class="ico" id="sidetoggle" aria-label="사이드바" title="사이드바 접기·펴기 (Ctrl+B)">
55
+ <svg viewBox="0 0 16 16"><rect x="2" y="3" width="12" height="10" rx="1.5"/><path d="M6.5 3v10"/></svg>
56
+ </button>
57
+
58
+ <button class="ico" id="openrepo" aria-label="저장소 열기" title="저장소 열기 (Ctrl+O)">
59
+ <svg viewBox="0 0 16 16"><path d="M2 12.5v-9h4l1.5 2h6.5v7z"/></svg>
60
+ </button>
61
+
62
+ <div id="where"></div>
63
+
64
+ <!-- 데스크톱에서만 보인다. 브라우저에는 창 단추가 이미 있다. -->
65
+ <div id="wctl" hidden>
66
+ <button data-win="min" aria-label="최소화">
67
+ <svg viewBox="0 0 12 12"><path d="M2 6h8"/></svg>
68
+ </button>
69
+ <button data-win="max" aria-label="최대화">
70
+ <svg viewBox="0 0 12 12"><rect x="2.5" y="2.5" width="7" height="7" rx="1"/></svg>
71
+ </button>
72
+ <button data-win="close" aria-label="닫기">
73
+ <svg viewBox="0 0 12 12"><path d="M3 3l6 6M9 3l-6 6"/></svg>
74
+ </button>
75
+ </div>
76
+ </header>
77
+
78
+ <div id="drop" hidden></div>
79
+
80
+ <main id="app">
81
+
82
+ <!-- ── 왼쪽 · 채팅 및 작업 ─────────────────────────────────────────── -->
83
+ <aside id="side">
84
+ <div id="tabs">
85
+ <button class="tab on" data-mode="watch">감시</button>
86
+ <button class="tab" data-mode="understand">이해</button>
87
+ </div>
88
+
89
+ <button id="new">+<span>새 대화</span></button>
90
+
91
+ <div class="sec">채팅 및 작업</div>
92
+ <div id="chats"></div>
93
+
94
+ <div id="foot">
95
+ <span id="repo">—</span>
96
+ <span id="agent"></span>
97
+ </div>
98
+ </aside>
99
+
100
+ <div class="gut" data-pane="side"></div>
101
+
102
+ <!-- ── 가운데 · 프로젝트 전체 그래프가 들어올 자리 ─────────────────── -->
103
+ <section id="center">
104
+ <div id="stage"></div>
105
+ </section>
106
+
107
+ <div class="gut" data-pane="chat"></div>
108
+
109
+ <!-- ── 오른쪽 · 대화 (겉은 채팅, 속은 CLI 프로세스) ────────────────── -->
110
+ <section id="chat">
111
+ <div id="head">
112
+ <span id="title"></span>
113
+ <button id="stop" hidden>중단</button>
114
+ </div>
115
+
116
+ <!--
117
+ 🔴 AI 가 고친 파일. 접히지 않는다.
118
+ 터미널의 겉모습은 감춰도 결과를 감추면 D1 의 F2 를 이 제품이 직접 만들어낸다.
119
+ -->
120
+ <div id="touched" hidden></div>
121
+
122
+ <div id="thread"></div>
123
+
124
+ <div id="hello">
125
+ <div class="mark">✳</div>
126
+ <h1>무엇을 도와드릴까요</h1>
127
+ </div>
128
+
129
+ <div id="composer">
130
+ <textarea id="input" rows="1" placeholder="오늘 어떤 도움을 드릴까요?" spellcheck="false"></textarea>
131
+ <div class="row">
132
+ <span id="note"></span>
133
+ <button id="send" aria-label="보내기">↑</button>
134
+ </div>
135
+ </div>
136
+
137
+ <div id="tail"></div>
138
+ </section>
139
+
140
+ </main>
141
+
142
+ <!--
143
+ ── 처음 오는 사람 ────────────────────────────────────────────────────────
144
+
145
+ 🔴 바로 "무엇을 도와드릴까요" 를 띄우지 않는다.
146
+
147
+ 이 앱은 사용자의 AI CLI 를 빌려 쓴다. 그런데 그 사람이 claude 를 쓰는지 agy 를
148
+ 쓰는지 codex 를 쓰는지 우리는 모른다. 모르는 채로 입력창부터 띄우면, 첫 프롬프트를
149
+ 보낸 뒤에야 "그 CLI 가 없다"가 드러난다 — 터미널을 감춰 놨기 때문에 사용자에게는
150
+ 그냥 **아무 일도 안 일어난 것**으로 보인다. 그 침묵이 이 설계의 가장 위험한 실패다.
151
+
152
+ 그래서 회원가입처럼 **먼저 묻는다.** 두 걸음이면 끝난다.
153
+ -->
154
+ <div id="onboard" hidden>
155
+ <div class="card">
156
+ <button id="oclose" aria-label="닫기" title="닫기 (Esc)">✕</button>
157
+ <div class="steps"><i class="on"></i><i></i></div>
158
+
159
+ <section data-step="1">
160
+ <div class="mark">✳</div>
161
+ <h2>어떤 AI 로 일하시나요</h2>
162
+ <p>axMap 은 이미 쓰고 계신 CLI 를 그대로 빌려 씁니다.<br>새로 로그인할 필요가 없습니다.</p>
163
+ <div id="picks"></div>
164
+ <div class="act"><button id="s1next" disabled>다음</button></div>
165
+ </section>
166
+
167
+ <section data-step="2" hidden>
168
+ <div class="mark">✳</div>
169
+ <h2>어떤 저장소를 보시겠어요</h2>
170
+ <!--
171
+ 🔴 git 주소를 첫째로 둔다. 로컬 폴더가 아니라.
172
+
173
+ 이 도구가 답하는 질문은 "이 저장소를 내가 이해할 수 있나" 이고, 그 질문은
174
+ **남의 저장소**에서 훨씬 절박하다. 그리고 주소가 있어야 선점(claim)이
175
+ 어느 저장소의 것인지 말할 수 있다 — 로컬 경로만 있으면 사람마다 다르다.
176
+
177
+ github 만이 아니다. 사내·학교 GitLab 도 그대로 받는다
178
+ (`app/lib/fetchrepo.mjs` 의 `isRemote` 참고).
179
+ -->
180
+ <p>git 주소를 넣으면 받아서 분석합니다.<br>github · gitlab · 사내 저장소 모두 됩니다.</p>
181
+ <div class="open">
182
+ <input id="url" type="text" spellcheck="false"
183
+ placeholder="https://github.com/사용자/저장소">
184
+ <button id="go">열기</button>
185
+ </div>
186
+ <div id="omsg"></div>
187
+ <div class="act">
188
+ <button id="s2back" class="ghost">뒤로</button>
189
+ <button id="skip" class="ghost">지금 열려 있는 저장소로 시작</button>
190
+ </div>
191
+ </section>
192
+ </div>
193
+ </div>
194
+
195
+ <script type="module" src="shell.js"></script>
196
+ </body>
197
+ </html>