axmap-cli 1.3.3 → 1.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.
Files changed (67) hide show
  1. package/CLAUDE.md +15 -9
  2. package/README.ko.md +87 -87
  3. package/README.md +88 -88
  4. package/bin/axmap.mjs +9 -3
  5. package/mcp/README.md +8 -8
  6. package/mcp/install.ps1 +6 -3
  7. package/mcp/install.sh +5 -3
  8. package/mcp/server.mjs +81 -32
  9. package/package.json +7 -11
  10. package/src/agentcli.mjs +19 -0
  11. package/src/bridge.mjs +245 -0
  12. package/src/invariants.mjs +1 -1
  13. package/src/managed-session.mjs +178 -0
  14. package/src/protocol.mjs +1 -1
  15. package/src/session-dialogue.mjs +131 -0
  16. package/src/session-usage.mjs +34 -0
  17. package/src/state.mjs +8 -0
  18. package/src/terminal-bridge.mjs +224 -0
  19. package/src/update.mjs +1 -1
  20. package/tools/bridge.mjs +85 -0
  21. package/tools/mcp-register.mjs +2 -2
  22. package/tools/run-tests.mjs +10 -3
  23. package/tools/run.mjs +60 -0
  24. package/tools/setup.mjs +11 -0
  25. package/app/README.md +0 -366
  26. package/app/eval/edges.mjs +0 -242
  27. package/app/lib/adjacent.mjs +0 -125
  28. package/app/lib/agentcli.mjs +0 -153
  29. package/app/lib/analyze.mjs +0 -1159
  30. package/app/lib/cochange.mjs +0 -421
  31. package/app/lib/datanodes.mjs +0 -127
  32. package/app/lib/entry.mjs +0 -192
  33. package/app/lib/featuregraph.mjs +0 -389
  34. package/app/lib/features.mjs +0 -645
  35. package/app/lib/fetchrepo-run.mjs +0 -37
  36. package/app/lib/fetchrepo.mjs +0 -164
  37. package/app/lib/flow.mjs +0 -1089
  38. package/app/lib/ladder.mjs +0 -387
  39. package/app/lib/langs.mjs +0 -630
  40. package/app/lib/live.mjs +0 -346
  41. package/app/lib/llm.mjs +0 -594
  42. package/app/lib/newfile.mjs +0 -126
  43. package/app/lib/prdiff.mjs +0 -651
  44. package/app/lib/reveal.mjs +0 -316
  45. package/app/lib/roots.mjs +0 -186
  46. package/app/lib/scope.mjs +0 -342
  47. package/app/lib/session.mjs +0 -389
  48. package/app/lib/slots.mjs +0 -233
  49. package/app/lib/ssot.mjs +0 -277
  50. package/app/lib/teamview.mjs +0 -975
  51. package/app/lib/terms.ko.mjs +0 -169
  52. package/app/server.mjs +0 -1959
  53. package/app/web/shell.css +0 -538
  54. package/app/web/shell.html +0 -197
  55. package/app/web/shell.js +0 -638
  56. package/app/web/stage.js +0 -347
  57. package/app/web/words.js +0 -85
  58. package/src/repotarget.mjs +0 -84
  59. package/tools/cluster-experiment.mjs +0 -256
  60. package/tools/cluster-sweep.mjs +0 -226
  61. package/tools/make-icon.mjs +0 -108
  62. package/tools/persona-bench.mjs +0 -362
  63. package/tools/pick-repo.mjs +0 -229
  64. package/tools/reveal-demo.mjs +0 -158
  65. package/tools/shortcut.mjs +0 -121
  66. package/tools/smoke.mjs +0 -174
  67. package/tools/topicgraph.py +0 -154
@@ -1,169 +0,0 @@
1
- /**
2
- * 한국어 도메인 용어 → 영어 후보.
3
- *
4
- * 왜 필요한가. 커밋 메시지가 한국어인 저장소에서는 한국어 질의가 **그대로 된다**
5
- * (e101 은 커밋 217개 중 213개가 한국어다). 다리가 필요한 경우는 하나뿐이다 —
6
- * **커밋이 영어인 저장소에 한국어로 물을 때.**
7
- *
8
- * 왜 LLM 이 아닌가. 세 가지다.
9
- * 1. D1 의 두 번째 사용자가 "좋은 AI 를 쓸 수 없는 환경(폐쇄망)" 이다.
10
- * 번역이 LLM 에만 있으면 그 사용자에게는 기능이 아예 없다.
11
- * 2. 같은 질의가 같은 답을 줘야 한다. `axmap audit` 으로 재생 가능해야 한다.
12
- * 3. 이건 판정이 아니라 **질의 확장**이다. 상류에서 후보를 넓히고
13
- * 판정은 결정론적 매칭이 한다 — D4 가 정한 자리 그대로다.
14
- *
15
- * 🔴 이 사전은 완전하지 않고 완전해질 수도 없다.
16
- * 그래서 화면에 **어떤 말을 어떤 말로 바꿨는지 반드시 보여준다.**
17
- * 번역이 틀렸으면 사용자가 영어로 직접 치면 된다.
18
- * 조용히 바꾸고 결과만 내놓는 것이 최악이다.
19
- *
20
- * 값은 배열이고 OR 로 쓰인다. 한 단어가 여러 영어에 걸치는 것이 정상이다 —
21
- * "사진" 은 코드에서 photo 일 수도 image 일 수도 asset 일 수도 있다.
22
- */
23
-
24
- export const KO_TERMS = {
25
- // ── 동작 ────────────────────────────────────────────────────────────────
26
- 업로드: ['upload'],
27
- 다운로드: ['download'],
28
- 삭제: ['delete', 'remove', 'destroy'],
29
- 제거: ['remove', 'delete'],
30
- 생성: ['create', 'add', 'new'],
31
- 추가: ['add', 'create'],
32
- 수정: ['update', 'edit', 'modify'],
33
- 편집: ['edit', 'update'],
34
- 조회: ['get', 'fetch', 'read', 'query'],
35
- 검색: ['search', 'query', 'find'],
36
- 정렬: ['sort', 'order'],
37
- 필터: ['filter'],
38
- 복원: ['restore', 'recover'],
39
- 공유: ['share', 'shared'],
40
- 전송: ['send', 'transfer', 'upload'],
41
- 동기화: ['sync', 'synchronize'],
42
- 백업: ['backup'],
43
- 복사: ['copy', 'duplicate'],
44
- 이동: ['move'],
45
- 변환: ['convert', 'transform', 'transcode'],
46
- 압축: ['compress', 'zip', 'archive'],
47
- 재생: ['play', 'playback', 'stream'],
48
- 미리보기: ['preview', 'thumbnail'],
49
- 썸네일: ['thumbnail', 'thumb'],
50
- 가져오기: ['import'],
51
- 내보내기: ['export'],
52
-
53
- // ── 대상 ────────────────────────────────────────────────────────────────
54
- 사진: ['photo', 'image', 'asset', 'picture'],
55
- 이미지: ['image', 'photo', 'asset'],
56
- 영상: ['video', 'media', 'stream'],
57
- 동영상: ['video', 'media'],
58
- 미디어: ['media'],
59
- 파일: ['file', 'asset'],
60
- 앨범: ['album'],
61
- 폴더: ['folder', 'directory'],
62
- 자산: ['asset'],
63
- 사용자: ['user', 'account'],
64
- 계정: ['account', 'user'],
65
- 회원: ['user', 'member', 'account'],
66
- 관리자: ['admin', 'administrator'],
67
- 권한: ['permission', 'access', 'role', 'auth'],
68
- 역할: ['role'],
69
- 태그: ['tag', 'label'],
70
- 댓글: ['comment', 'activity'],
71
- 좋아요: ['like', 'reaction', 'activity'],
72
- 알림: ['notification', 'notify'],
73
- 설정: ['setting', 'config', 'preference'],
74
- 환경설정: ['config', 'setting', 'preference'],
75
- 로그: ['log', 'logging'],
76
- 작업: ['job', 'task', 'work'],
77
- 큐: ['queue', 'job'],
78
- 일정: ['schedule', 'cron'],
79
- 휴지통: ['trash', 'bin', 'recycle'],
80
- 즐겨찾기: ['favorite', 'bookmark'],
81
- 타임라인: ['timeline'],
82
- 지도: ['map', 'location', 'geo'],
83
- 위치: ['location', 'geo', 'position'],
84
- 얼굴: ['face', 'person'],
85
- 인물: ['person', 'people', 'face'],
86
- 중복: ['duplicate', 'dedupe'],
87
- 묶음: ['stack', 'group', 'bundle'],
88
- 메타데이터: ['metadata', 'exif'],
89
-
90
- // ── 인증 ────────────────────────────────────────────────────────────────
91
- 로그인: ['login', 'signin', 'auth'],
92
- 로그아웃: ['logout', 'signout'],
93
- 인증: ['auth', 'authentication', 'login'],
94
- 인가: ['authorization', 'permission', 'access'],
95
- 비밀번호: ['password', 'passwd'],
96
- 토큰: ['token', 'jwt'],
97
- 세션: ['session'],
98
- 회원가입: ['signup', 'register', 'registration'],
99
- 가입: ['signup', 'register'],
100
-
101
- // ── 시스템 ──────────────────────────────────────────────────────────────
102
- 서버: ['server'],
103
- 클라이언트: ['client'],
104
- 데이터베이스: ['database', 'db', 'schema'],
105
- 스키마: ['schema', 'migration'],
106
- 마이그레이션: ['migration', 'migrate'],
107
- 캐시: ['cache'],
108
- 저장소: ['repository', 'storage'],
109
- 미들웨어: ['middleware', 'interceptor'],
110
- 에러: ['error', 'exception', 'fail'],
111
- 오류: ['error', 'exception', 'bug', 'fix'],
112
- 예외: ['exception', 'error'],
113
- 버그: ['bug', 'fix'],
114
- 테스트: ['test', 'spec'],
115
- 배포: ['deploy', 'release'],
116
- 빌드: ['build'],
117
- 성능: ['performance', 'perf', 'optimize'],
118
- 최적화: ['optimize', 'performance', 'perf'],
119
- 보안: ['security', 'secure'],
120
-
121
- // ── 그 밖 ───────────────────────────────────────────────────────────────
122
- 결제: ['payment', 'pay', 'billing'],
123
- 주문: ['order'],
124
- 장바구니: ['cart', 'basket'],
125
- 리뷰: ['review'],
126
- 채팅: ['chat', 'message'],
127
- 메시지: ['message', 'chat'],
128
- 통계: ['statistic', 'stats', 'analytics'],
129
- 추천: ['recommend', 'suggestion'],
130
- 구독: ['subscribe', 'subscription'],
131
- 결합: ['coupling'],
132
- 주행: ['drive', 'driving', 'navigation'],
133
- 경로: ['path', 'route'],
134
- 센서: ['sensor'],
135
- 카메라: ['camera'],
136
- }
137
-
138
- const HANGUL = /[가-힣]/
139
-
140
- /** 이 토큰이 한국어를 담고 있나. */
141
- export const isKorean = (s) => HANGUL.test(s)
142
-
143
- /**
144
- * 한 토큰을 검색어 후보 집합으로 넓힌다.
145
- *
146
- * 원어를 **항상 함께 남긴다.** 커밋이 한국어인 저장소에서는 원어가 정답이고,
147
- * 사전에 없는 말이어도 그대로 걸려야 하기 때문이다.
148
- *
149
- * @returns {{token:string, terms:string[], translated:boolean}}
150
- */
151
- export function expandTerm(token) {
152
- const t = token.trim()
153
- if (!t) return { token: t, terms: [], translated: false }
154
- if (!isKorean(t)) return { token: t, terms: [t], translated: false }
155
-
156
- const hit = KO_TERMS[t]
157
- if (hit) return { token: t, terms: [t, ...hit], translated: true }
158
-
159
- // 조사·어미가 붙었을 수 있다. "업로드를", "사진의" 처럼.
160
- // 사전 키가 접두사로 들어맞으면 그것으로 본다 — 형태소 분석기를 넣지 않는
161
- // 이유는 의존성 0 이고, 이 정도로 실용적인 범위가 대부분 덮이기 때문이다.
162
- for (const k of Object.keys(KO_TERMS)) {
163
- if (t.length > k.length && t.startsWith(k)) {
164
- return { token: t, terms: [t, k, ...KO_TERMS[k]], translated: true }
165
- }
166
- }
167
- // 사전에 없다. 원어 그대로 쓴다 — 한국어 커밋 저장소에서는 이게 맞다.
168
- return { token: t, terms: [t], translated: false }
169
- }