@tienne/gestalt 0.84.2 → 0.85.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 (204) hide show
  1. package/CLAUDE.md +4 -4
  2. package/README.ko.md +72 -22
  3. package/README.md +73 -23
  4. package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts.map +1 -1
  5. package/dist/benchmarks/runners/passthrough-benchmark-runner.js +8 -7
  6. package/dist/benchmarks/runners/passthrough-benchmark-runner.js.map +1 -1
  7. package/dist/bin/gestalt.js +2 -2
  8. package/dist/package.json +1 -1
  9. package/dist/plugin/skills/dispatch/SKILL.md +14 -2
  10. package/dist/plugin/skills/execute/SKILL.md +219 -52
  11. package/dist/plugin/skills/interview/SKILL.md +15 -2
  12. package/dist/plugin/skills/solve/SKILL.md +20 -5
  13. package/dist/plugin/skills/spec/SKILL.md +2 -0
  14. package/dist/src/cli/commands/interview.d.ts.map +1 -1
  15. package/dist/src/cli/commands/interview.js +16 -4
  16. package/dist/src/cli/commands/interview.js.map +1 -1
  17. package/dist/src/cli/commands/memory-merge.d.ts +2 -0
  18. package/dist/src/cli/commands/memory-merge.d.ts.map +1 -0
  19. package/dist/src/cli/commands/memory-merge.js +13 -0
  20. package/dist/src/cli/commands/memory-merge.js.map +1 -0
  21. package/dist/src/cli/index.d.ts.map +1 -1
  22. package/dist/src/cli/index.js +7 -0
  23. package/dist/src/cli/index.js.map +1 -1
  24. package/dist/src/core/constants.d.ts +4 -0
  25. package/dist/src/core/constants.d.ts.map +1 -1
  26. package/dist/src/core/constants.js +8 -0
  27. package/dist/src/core/constants.js.map +1 -1
  28. package/dist/src/core/errors.d.ts +3 -0
  29. package/dist/src/core/errors.d.ts.map +1 -1
  30. package/dist/src/core/errors.js +7 -0
  31. package/dist/src/core/errors.js.map +1 -1
  32. package/dist/src/core/file-lock.d.ts +37 -0
  33. package/dist/src/core/file-lock.d.ts.map +1 -0
  34. package/dist/src/core/file-lock.js +143 -0
  35. package/dist/src/core/file-lock.js.map +1 -0
  36. package/dist/src/core/json-file.d.ts +40 -0
  37. package/dist/src/core/json-file.d.ts.map +1 -0
  38. package/dist/src/core/json-file.js +82 -0
  39. package/dist/src/core/json-file.js.map +1 -0
  40. package/dist/src/core/types.d.ts +86 -9
  41. package/dist/src/core/types.d.ts.map +1 -1
  42. package/dist/src/events/store.d.ts +6 -0
  43. package/dist/src/events/store.d.ts.map +1 -1
  44. package/dist/src/events/store.js +12 -0
  45. package/dist/src/events/store.js.map +1 -1
  46. package/dist/src/events/types.d.ts +7 -0
  47. package/dist/src/events/types.d.ts.map +1 -1
  48. package/dist/src/events/types.js +7 -0
  49. package/dist/src/events/types.js.map +1 -1
  50. package/dist/src/execute/artifact-verifier.d.ts +12 -0
  51. package/dist/src/execute/artifact-verifier.d.ts.map +1 -0
  52. package/dist/src/execute/artifact-verifier.js +211 -0
  53. package/dist/src/execute/artifact-verifier.js.map +1 -0
  54. package/dist/src/execute/drift-detector.d.ts +2 -0
  55. package/dist/src/execute/drift-detector.d.ts.map +1 -1
  56. package/dist/src/execute/drift-detector.js +9 -13
  57. package/dist/src/execute/drift-detector.js.map +1 -1
  58. package/dist/src/execute/orchestrators/evaluation.d.ts +5 -1
  59. package/dist/src/execute/orchestrators/evaluation.d.ts.map +1 -1
  60. package/dist/src/execute/orchestrators/evaluation.js +48 -41
  61. package/dist/src/execute/orchestrators/evaluation.js.map +1 -1
  62. package/dist/src/execute/orchestrators/evolution.d.ts +17 -3
  63. package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
  64. package/dist/src/execute/orchestrators/evolution.js +102 -53
  65. package/dist/src/execute/orchestrators/evolution.js.map +1 -1
  66. package/dist/src/execute/orchestrators/execution.d.ts +17 -2
  67. package/dist/src/execute/orchestrators/execution.d.ts.map +1 -1
  68. package/dist/src/execute/orchestrators/execution.js +99 -3
  69. package/dist/src/execute/orchestrators/execution.js.map +1 -1
  70. package/dist/src/execute/orchestrators/planning.d.ts +18 -4
  71. package/dist/src/execute/orchestrators/planning.d.ts.map +1 -1
  72. package/dist/src/execute/orchestrators/planning.js +62 -21
  73. package/dist/src/execute/orchestrators/planning.js.map +1 -1
  74. package/dist/src/execute/orchestrators/types.d.ts +12 -1
  75. package/dist/src/execute/orchestrators/types.d.ts.map +1 -1
  76. package/dist/src/execute/passthrough-engine.d.ts +12 -5
  77. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  78. package/dist/src/execute/passthrough-engine.js +10 -4
  79. package/dist/src/execute/passthrough-engine.js.map +1 -1
  80. package/dist/src/execute/repository.d.ts +11 -1
  81. package/dist/src/execute/repository.d.ts.map +1 -1
  82. package/dist/src/execute/repository.js +138 -19
  83. package/dist/src/execute/repository.js.map +1 -1
  84. package/dist/src/execute/session.d.ts +26 -4
  85. package/dist/src/execute/session.d.ts.map +1 -1
  86. package/dist/src/execute/session.js +165 -48
  87. package/dist/src/execute/session.js.map +1 -1
  88. package/dist/src/execute/structural-commands.d.ts +23 -0
  89. package/dist/src/execute/structural-commands.d.ts.map +1 -0
  90. package/dist/src/execute/structural-commands.js +139 -0
  91. package/dist/src/execute/structural-commands.js.map +1 -0
  92. package/dist/src/interview/engine.d.ts +1 -1
  93. package/dist/src/interview/engine.d.ts.map +1 -1
  94. package/dist/src/interview/engine.js +3 -3
  95. package/dist/src/interview/engine.js.map +1 -1
  96. package/dist/src/interview/passthrough-engine.d.ts +1 -1
  97. package/dist/src/interview/passthrough-engine.d.ts.map +1 -1
  98. package/dist/src/interview/passthrough-engine.js +20 -3
  99. package/dist/src/interview/passthrough-engine.js.map +1 -1
  100. package/dist/src/interview/repository.d.ts +8 -0
  101. package/dist/src/interview/repository.d.ts.map +1 -1
  102. package/dist/src/interview/repository.js +16 -1
  103. package/dist/src/interview/repository.js.map +1 -1
  104. package/dist/src/interview/session.d.ts +15 -2
  105. package/dist/src/interview/session.d.ts.map +1 -1
  106. package/dist/src/interview/session.js +67 -23
  107. package/dist/src/interview/session.js.map +1 -1
  108. package/dist/src/knowledge-base/embedding.d.ts +6 -1
  109. package/dist/src/knowledge-base/embedding.d.ts.map +1 -1
  110. package/dist/src/knowledge-base/embedding.js +19 -6
  111. package/dist/src/knowledge-base/embedding.js.map +1 -1
  112. package/dist/src/local-pr/registry.d.ts +1 -21
  113. package/dist/src/local-pr/registry.d.ts.map +1 -1
  114. package/dist/src/local-pr/registry.js +7 -113
  115. package/dist/src/local-pr/registry.js.map +1 -1
  116. package/dist/src/mcp/input-guard.d.ts +17 -0
  117. package/dist/src/mcp/input-guard.d.ts.map +1 -1
  118. package/dist/src/mcp/input-guard.js +1 -1
  119. package/dist/src/mcp/input-guard.js.map +1 -1
  120. package/dist/src/mcp/schemas.d.ts +62 -7
  121. package/dist/src/mcp/schemas.d.ts.map +1 -1
  122. package/dist/src/mcp/schemas.js +28 -1
  123. package/dist/src/mcp/schemas.js.map +1 -1
  124. package/dist/src/mcp/server.d.ts.map +1 -1
  125. package/dist/src/mcp/server.js +26 -40
  126. package/dist/src/mcp/server.js.map +1 -1
  127. package/dist/src/mcp/tools/execute/evaluate.d.ts.map +1 -1
  128. package/dist/src/mcp/tools/execute/evaluate.js +15 -9
  129. package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
  130. package/dist/src/mcp/tools/execute/evolve.d.ts +1 -0
  131. package/dist/src/mcp/tools/execute/evolve.d.ts.map +1 -1
  132. package/dist/src/mcp/tools/execute/evolve.js +102 -37
  133. package/dist/src/mcp/tools/execute/evolve.js.map +1 -1
  134. package/dist/src/mcp/tools/execute/execution.d.ts.map +1 -1
  135. package/dist/src/mcp/tools/execute/execution.js +66 -7
  136. package/dist/src/mcp/tools/execute/execution.js.map +1 -1
  137. package/dist/src/mcp/tools/execute/planning.d.ts.map +1 -1
  138. package/dist/src/mcp/tools/execute/planning.js +34 -2
  139. package/dist/src/mcp/tools/execute/planning.js.map +1 -1
  140. package/dist/src/mcp/tools/execute/roles.d.ts.map +1 -1
  141. package/dist/src/mcp/tools/execute/roles.js +13 -5
  142. package/dist/src/mcp/tools/execute/roles.js.map +1 -1
  143. package/dist/src/mcp/tools/execute/utility.d.ts.map +1 -1
  144. package/dist/src/mcp/tools/execute/utility.js +26 -0
  145. package/dist/src/mcp/tools/execute/utility.js.map +1 -1
  146. package/dist/src/mcp/tools/execute/utils.d.ts +1 -0
  147. package/dist/src/mcp/tools/execute/utils.d.ts.map +1 -1
  148. package/dist/src/mcp/tools/execute/utils.js +15 -0
  149. package/dist/src/mcp/tools/execute/utils.js.map +1 -1
  150. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  151. package/dist/src/mcp/tools/execute-passthrough.js +21 -1
  152. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  153. package/dist/src/mcp/tools/interview-passthrough.d.ts +2 -1
  154. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
  155. package/dist/src/mcp/tools/interview-passthrough.js +4 -3
  156. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
  157. package/dist/src/mcp/tools/interview.d.ts.map +1 -1
  158. package/dist/src/mcp/tools/interview.js +2 -1
  159. package/dist/src/mcp/tools/interview.js.map +1 -1
  160. package/dist/src/mcp/tools/review-passthrough.js +15 -19
  161. package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
  162. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
  163. package/dist/src/mcp/tools/spec-passthrough.js +16 -8
  164. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
  165. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  166. package/dist/src/mcp/tools/status.js +4 -0
  167. package/dist/src/mcp/tools/status.js.map +1 -1
  168. package/dist/src/memory/memory-context-injector.d.ts +22 -8
  169. package/dist/src/memory/memory-context-injector.d.ts.map +1 -1
  170. package/dist/src/memory/memory-context-injector.js +85 -13
  171. package/dist/src/memory/memory-context-injector.js.map +1 -1
  172. package/dist/src/memory/memory-merge.d.ts +19 -0
  173. package/dist/src/memory/memory-merge.d.ts.map +1 -0
  174. package/dist/src/memory/memory-merge.js +120 -0
  175. package/dist/src/memory/memory-merge.js.map +1 -0
  176. package/dist/src/memory/project-memory-store.d.ts +15 -11
  177. package/dist/src/memory/project-memory-store.d.ts.map +1 -1
  178. package/dist/src/memory/project-memory-store.js +97 -120
  179. package/dist/src/memory/project-memory-store.js.map +1 -1
  180. package/dist/src/memory/semantic-search.d.ts +4 -1
  181. package/dist/src/memory/semantic-search.d.ts.map +1 -1
  182. package/dist/src/memory/semantic-search.js +66 -19
  183. package/dist/src/memory/semantic-search.js.map +1 -1
  184. package/dist/src/resilience/lateral.d.ts +8 -1
  185. package/dist/src/resilience/lateral.d.ts.map +1 -1
  186. package/dist/src/resilience/lateral.js +52 -4
  187. package/dist/src/resilience/lateral.js.map +1 -1
  188. package/package.json +1 -1
  189. package/plugin/.codex-plugin/plugin.json +1 -1
  190. package/plugin/.mcp.json +1 -1
  191. package/plugin/mcp.json +1 -1
  192. package/plugin/skills/dispatch/SKILL.md +14 -2
  193. package/plugin/skills/execute/SKILL.md +219 -52
  194. package/plugin/skills/interview/SKILL.md +15 -2
  195. package/plugin/skills/solve/SKILL.md +20 -5
  196. package/plugin/skills/spec/SKILL.md +2 -0
  197. package/dist/src/interview/mini-interview-engine.d.ts +0 -33
  198. package/dist/src/interview/mini-interview-engine.d.ts.map +0 -1
  199. package/dist/src/interview/mini-interview-engine.js +0 -102
  200. package/dist/src/interview/mini-interview-engine.js.map +0 -1
  201. package/dist/src/memory/user-profile-store.d.ts +0 -13
  202. package/dist/src/memory/user-profile-store.d.ts.map +0 -1
  203. package/dist/src/memory/user-profile-store.js +0 -85
  204. package/dist/src/memory/user-profile-store.js.map +0 -1
@@ -1,25 +1,45 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { SessionNotFoundError, SessionAlreadyCompletedError } from '../core/errors.js';
3
- import { DEFAULT_SESSION_TTL_MS } from '../core/constants.js';
2
+ import { SessionNotFoundError, SessionAlreadyCompletedError, InterviewNotReadyError, } from '../core/errors.js';
3
+ import { DEFAULT_SESSION_TTL_MS, RESOLUTION_THRESHOLD } from '../core/constants.js';
4
4
  import { logger } from '../core/logger.js';
5
5
  import { EventType } from '../events/types.js';
6
6
  import { InterviewSessionRepository } from './repository.js';
7
+ /**
8
+ * 인터뷰 세션의 인메모리 캐시. 기준은 이벤트 스토어다.
9
+ *
10
+ * 같은 DB를 여러 MCP 프로세스(dispatch 워커 등)가 함께 쓴다. 그래서 캐시가 담은
11
+ * 세션마다 그때까지 반영한 이벤트 수를 들고 있다가, get()에서 스토어의 수와 다르면
12
+ * 다시 재구성한다. 모든 변경 메서드가 get()부터 부르므로 쓰기도 최신 상태 위에서 한다.
13
+ */
7
14
  export class SessionManager {
8
15
  eventStore;
9
16
  sessions = new Map();
17
+ eventCounts = new Map();
18
+ repo;
10
19
  constructor(eventStore) {
11
20
  this.eventStore = eventStore;
21
+ this.repo = new InterviewSessionRepository(eventStore);
12
22
  }
13
23
  /**
14
24
  * EventStore에서 기존 세션을 복원하여 메모리 Map에 로드한다.
15
25
  * 서버 시작 시 한 번 호출.
16
26
  */
17
27
  loadFromStore() {
18
- const repo = new InterviewSessionRepository(this.eventStore);
19
- const restored = repo.reconstructAll();
20
- for (const session of restored) {
21
- this.sessions.set(session.sessionId, session);
22
- }
28
+ for (const id of this.repo.list())
29
+ this.reload(id);
30
+ }
31
+ reload(sessionId) {
32
+ const loaded = this.repo.load(sessionId);
33
+ if (!loaded)
34
+ return null;
35
+ this.sessions.set(sessionId, loaded.session);
36
+ this.eventCounts.set(sessionId, loaded.eventCount);
37
+ return loaded.session;
38
+ }
39
+ record(sessionId, eventType, payload) {
40
+ const event = this.eventStore.append('interview', sessionId, eventType, payload);
41
+ this.eventCounts.set(sessionId, (this.eventCounts.get(sessionId) ?? 0) + 1);
42
+ return event.timestamp;
23
43
  }
24
44
  create(topic, projectType) {
25
45
  const session = {
@@ -33,7 +53,7 @@ export class SessionManager {
33
53
  updatedAt: new Date().toISOString(),
34
54
  };
35
55
  this.sessions.set(session.sessionId, session);
36
- this.eventStore.append('interview', session.sessionId, EventType.INTERVIEW_SESSION_STARTED, {
56
+ this.record(session.sessionId, EventType.INTERVIEW_SESSION_STARTED, {
37
57
  topic,
38
58
  projectType,
39
59
  });
@@ -46,7 +66,7 @@ export class SessionManager {
46
66
  }
47
67
  /**
48
68
  * updatedAt(마지막 활동) 기준으로 ttlMs를 초과한 인메모리 세션을 제거한다.
49
- * SQLite 이벤트 원장은 보존되므로 재시작 시 loadFromStore로 복원 가능.
69
+ * SQLite 이벤트 원장은 보존되므로 지운 세션도 get()이 다시 재구성한다.
50
70
  * @returns 제거된 세션 수
51
71
  */
52
72
  cleanup(ttlMs = DEFAULT_SESSION_TTL_MS) {
@@ -55,13 +75,19 @@ export class SessionManager {
55
75
  for (const [id, session] of this.sessions) {
56
76
  if (now - new Date(session.updatedAt).getTime() > ttlMs) {
57
77
  this.sessions.delete(id);
78
+ this.eventCounts.delete(id);
58
79
  removed++;
59
80
  }
60
81
  }
61
82
  return removed;
62
83
  }
63
84
  get(sessionId) {
64
- const session = this.sessions.get(sessionId);
85
+ const cached = this.sessions.get(sessionId);
86
+ if (cached &&
87
+ this.eventCounts.get(sessionId) === this.eventStore.countByAggregate('interview', sessionId)) {
88
+ return cached;
89
+ }
90
+ const session = this.reload(sessionId);
65
91
  if (!session)
66
92
  throw new SessionNotFoundError(sessionId);
67
93
  return session;
@@ -69,7 +95,8 @@ export class SessionManager {
69
95
  getLatest() {
70
96
  let latest = null;
71
97
  for (const session of this.sessions.values()) {
72
- latest = session;
98
+ if (!latest || session.updatedAt >= latest.updatedAt)
99
+ latest = session;
73
100
  }
74
101
  return latest;
75
102
  }
@@ -78,20 +105,23 @@ export class SessionManager {
78
105
  if (session.status !== 'in_progress') {
79
106
  throw new SessionAlreadyCompletedError(sessionId);
80
107
  }
108
+ const roundNumber = session.rounds.length + 1;
109
+ // replay는 라운드 시각을 이벤트 timestamp로 복원한다. 여기서 시각을 따로 찍으면
110
+ // 밀리초 경계에 걸릴 때 라이브 세션과 replay 결과가 어긋난다
111
+ const timestamp = this.record(sessionId, EventType.INTERVIEW_QUESTION_ASKED, {
112
+ roundNumber,
113
+ question,
114
+ gestaltFocus,
115
+ });
81
116
  const round = {
82
- roundNumber: session.rounds.length + 1,
117
+ roundNumber,
83
118
  question,
84
119
  userResponse: null,
85
120
  gestaltFocus,
86
- timestamp: new Date().toISOString(),
121
+ timestamp,
87
122
  };
88
123
  session.rounds.push(round);
89
- session.updatedAt = new Date().toISOString();
90
- this.eventStore.append('interview', sessionId, EventType.INTERVIEW_QUESTION_ASKED, {
91
- roundNumber: round.roundNumber,
92
- question,
93
- gestaltFocus,
94
- });
124
+ session.updatedAt = timestamp;
95
125
  return round;
96
126
  }
97
127
  recordResponse(sessionId, response) {
@@ -104,7 +134,7 @@ export class SessionManager {
104
134
  throw new SessionNotFoundError(sessionId);
105
135
  currentRound.userResponse = response;
106
136
  session.updatedAt = new Date().toISOString();
107
- this.eventStore.append('interview', sessionId, EventType.INTERVIEW_RESPONSE_RECORDED, {
137
+ this.record(sessionId, EventType.INTERVIEW_RESPONSE_RECORDED, {
108
138
  roundNumber: currentRound.roundNumber,
109
139
  response,
110
140
  });
@@ -119,7 +149,7 @@ export class SessionManager {
119
149
  if (currentRound && score.contradictions && score.contradictions.length > 0) {
120
150
  currentRound.contradictions = score.contradictions;
121
151
  }
122
- this.eventStore.append('interview', sessionId, EventType.INTERVIEW_RESOLUTION_SCORED, {
152
+ this.record(sessionId, EventType.INTERVIEW_RESOLUTION_SCORED, {
123
153
  overall: score.overall,
124
154
  isReady: score.isReady,
125
155
  dimensions: score.dimensions,
@@ -131,20 +161,33 @@ export class SessionManager {
131
161
  const session = this.get(sessionId);
132
162
  session.compressedContext = compressedContext;
133
163
  session.updatedAt = new Date().toISOString();
164
+ this.record(sessionId, EventType.INTERVIEW_CONTEXT_COMPRESSED, { compressedContext });
134
165
  }
135
- complete(sessionId) {
166
+ complete(sessionId, options = {}) {
136
167
  const session = this.get(sessionId);
168
+ if (session.status !== 'in_progress') {
169
+ throw new SessionAlreadyCompletedError(sessionId);
170
+ }
171
+ const ready = session.resolutionScore?.isReady === true;
172
+ if (!ready && !options.force) {
173
+ throw new InterviewNotReadyError(session.resolutionScore?.overall ?? null, RESOLUTION_THRESHOLD);
174
+ }
175
+ const forced = !ready;
137
176
  session.status = 'completed';
138
177
  session.updatedAt = new Date().toISOString();
139
- this.eventStore.append('interview', sessionId, EventType.INTERVIEW_SESSION_COMPLETED, {
178
+ if (forced)
179
+ session.forcedComplete = true;
180
+ this.record(sessionId, EventType.INTERVIEW_SESSION_COMPLETED, {
140
181
  totalRounds: session.rounds.length,
141
182
  finalResolutionScore: session.resolutionScore?.overall ?? null,
183
+ forced,
142
184
  });
143
185
  logger.info('interview.completed', {
144
186
  module: 'interview',
145
187
  sessionId,
146
188
  totalRounds: session.rounds.length,
147
189
  finalResolutionScore: session.resolutionScore?.overall ?? null,
190
+ forced,
148
191
  });
149
192
  return session;
150
193
  }
@@ -152,6 +195,7 @@ export class SessionManager {
152
195
  const session = this.get(sessionId);
153
196
  session.status = 'aborted';
154
197
  session.updatedAt = new Date().toISOString();
198
+ this.record(sessionId, EventType.INTERVIEW_SESSION_ABORTED, {});
155
199
  return session;
156
200
  }
157
201
  list() {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/interview/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/interview/session.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,14 @@
3
3
  * 모델은 첫 호출 시 lazy 로딩된다.
4
4
  */
5
5
  export declare class EmbeddingService {
6
- private pipelineInstance;
6
+ private pipelinePromise;
7
7
  private readonly modelName;
8
8
  private getPipeline;
9
+ /**
10
+ * 모델을 미리 올린다. 이미 올라와 있으면 바로 끝난다.
11
+ * 로딩 실패와 임베딩 실패를 호출부가 나눠 다룰 수 있게 따로 둔다.
12
+ */
13
+ ensureLoaded(): Promise<void>;
9
14
  /**
10
15
  * 텍스트 하나를 임베딩 벡터로 변환한다.
11
16
  * embedBatch에 위임한다.
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/knowledge-base/embedding.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;YAEzC,WAAW;IASzB;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAevE"}
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/knowledge-base/embedding.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IAGvD,OAAO,CAAC,WAAW;IAiBnB;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAevE"}
@@ -5,15 +5,28 @@ import { log } from '../core/log.js';
5
5
  * 모델은 첫 호출 시 lazy 로딩된다.
6
6
  */
7
7
  export class EmbeddingService {
8
- pipelineInstance = null;
8
+ pipelinePromise = null;
9
9
  modelName = 'Xenova/all-MiniLM-L6-v2';
10
- async getPipeline() {
11
- if (!this.pipelineInstance) {
10
+ // 로딩 중인 Promise를 들고 있어야 첫 로딩이 끝나기 전에 들어온 호출이 모델을 또 받지 않는다
11
+ getPipeline() {
12
+ if (!this.pipelinePromise) {
12
13
  log(`embedding: loading model ${this.modelName}...`);
13
- this.pipelineInstance = await pipeline('feature-extraction', this.modelName);
14
- log('embedding: model loaded');
14
+ this.pipelinePromise = pipeline('feature-extraction', this.modelName).then((instance) => {
15
+ log('embedding: model loaded');
16
+ return instance;
17
+ }, (e) => {
18
+ this.pipelinePromise = null;
19
+ throw e;
20
+ });
15
21
  }
16
- return this.pipelineInstance;
22
+ return this.pipelinePromise;
23
+ }
24
+ /**
25
+ * 모델을 미리 올린다. 이미 올라와 있으면 바로 끝난다.
26
+ * 로딩 실패와 임베딩 실패를 호출부가 나눠 다룰 수 있게 따로 둔다.
27
+ */
28
+ async ensureLoaded() {
29
+ await this.getPipeline();
17
30
  }
18
31
  /**
19
32
  * 텍스트 하나를 임베딩 벡터로 변환한다.
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/knowledge-base/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,gBAAgB,GAAqC,IAAI,CAAC;IACjD,SAAS,GAAG,yBAAyB,CAAC;IAE/C,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,GAAG,CAAC,4BAA4B,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,gBAAgB,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7E,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe,EAAE,SAAS,GAAG,EAAE;QAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAW,CAAC;YACxF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAoB,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/knowledge-base/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,eAAe,GAA8C,IAAI,CAAC;IACzD,SAAS,GAAG,yBAAyB,CAAC;IAEvD,0DAA0D;IAClD,WAAW;QACjB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,GAAG,CAAC,4BAA4B,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACxE,CAAC,QAAQ,EAAE,EAAE;gBACX,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBAC/B,OAAO,QAAQ,CAAC;YAClB,CAAC,EACD,CAAC,CAAU,EAAE,EAAE;gBACb,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,CAAC;YACV,CAAC,CACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe,EAAE,SAAS,GAAG,EAAE;QAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAW,CAAC;YACxF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAoB,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -33,27 +33,7 @@ export interface RegisteredRepo {
33
33
  /** 레포를 가리키는 키. 워크트리 어디서 구해도 같은 값이 나온다 */
34
34
  export declare function repoKey(repoRoot: string): string;
35
35
  /**
36
- * 목록을 고치는 동안 다른 프로세스를 막는다.
37
- *
38
- * 워크트리 여럿이 같은 목록에 동시에 손대는 게 이 레포의 기본 흐름이다. 잠금 없이
39
- * 읽고 고쳐 쓰면 나중에 쓴 쪽이 먼저 쓴 쪽의 항목을 덮는다.
40
- *
41
- * `mkdir`는 있으면 실패하니까 그 자체가 잠금이다. 쥔 채로 죽은 프로세스가 목록을 영영
42
- * 못 고치게 만들면 안 되므로 버려진 잠금은 부순다. 부수는 순간에 둘이 겹치면 둘 다
43
- * `mkdir`을 시도하고 한쪽만 성공한다 — 진 쪽은 다시 기다린다.
44
- *
45
- * **버려졌는지는 주인의 pid로 가른다.** 예전에는 잠금 디렉토리의 mtime만 봤는데,
46
- * 잠금은 잡을 때 한 번 만들어지고 쥔 동안 mtime이 안 올라간다. 그래서 `fn()`이
47
- * 5초를 넘기면 살아 있는 잠금이 버려진 것으로 보였다. 남이 부수고 들어와 둘이 나란히
48
- * 읽고 고쳐 써서 늦게 쓴 쪽이 상대 항목을 덮었다. 파일은 rename이라 안 깨지고 등록만
49
- * 조용히 사라진다.
50
- *
51
- * 쥔 동안 mtime을 주기적으로 올리는 방법은 여기서 안 통한다. `fn()`이 통째로 동기라
52
- * 타이머가 돌 틈이 없다 — 갱신이 필요한 바로 그 순간에 이벤트 루프가 막혀 있다.
53
- * 대신 주인이 살아 있는지를 직접 묻는다.
54
- *
55
- * `fn`에는 `stillMine`을 준다. 부수기와 다시 잡기가 겹치는 좁은 틈이 남아 있어,
56
- * 쓰기 직전에 잠금이 아직 내 것인지 다시 확인할 수 있어야 한다.
36
+ * 목록을 고치는 동안 다른 프로세스를 막는다. 잠금 동작은 `withFileLock` 머리말 참고.
57
37
  *
58
38
  * 잠금 소유권을 테스트에서 확인할 수 있게 내보낸다. 그 경로는 잠금을 오래 쥔 쪽과
59
39
  * 부순 쪽이 겹쳐야 열리는데, `registerRepo`로는 그 상황을 만들 수 없다.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/local-pr/registry.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiCD,yCAAyC;AACzC,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhD;AAgFD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,OAAO,CAAA;CAAE,KAAK,CAAC,GAAG,CAAC,CA+C3E;AAoED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAkB7D;AAcD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASnD;AAED,4CAA4C;AAC5C,wBAAgB,SAAS,IAAI,cAAc,EAAE,CAE5C"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/local-pr/registry.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiCD,yCAAyC;AACzC,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhD;AA4BD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,OAAO,CAAA;CAAE,KAAK,CAAC,GAAG,CAAC,CAI3E;AAoED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAkB7D;AAcD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASnD;AAED,4CAA4C;AAC5C,wBAAgB,SAAS,IAAI,cAAc,EAAE,CAE5C"}
@@ -1,7 +1,8 @@
1
- import { createHash, randomUUID } from 'node:crypto';
2
- import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
3
3
  import { dirname, isAbsolute, join, normalize } from 'node:path';
4
4
  import { z } from 'zod';
5
+ import { withFileLock } from '../core/file-lock.js';
5
6
  import { ensureGestaltHome, gestaltPath } from '../core/home.js';
6
7
  import { gitCommonDir } from './git.js';
7
8
  /**
@@ -63,123 +64,16 @@ function read() {
63
64
  }
64
65
  return kept;
65
66
  }
66
- /** 주인이 안 잡히는 잠금을 부수기까지 */
67
- const LOCK_STALE_MS = 5_000;
68
67
  /**
69
- * 주인이 살아 있어도 이만큼 지나면 부순다.
70
- *
71
- * pid는 재활용된다. 잠금을 쥔 채 죽은 프로세스의 번호를 남이 물려받으면 살아 있다고
72
- * 읽혀서 아무도 목록을 못 고치게 된다. 그 자리를 여는 마지막 문이다.
73
- */
74
- const LOCK_HARD_STALE_MS = 60_000;
75
- const LOCK_WAIT_MS = 2_000;
76
- /** 대기 간격. 바퀴마다 배로 늘리되 이 값에서 멈춘다 */
77
- const LOCK_BACKOFF_START_MS = 5;
78
- const LOCK_BACKOFF_MAX_MS = 100;
79
- /** 동기 대기. 이 파일의 쓰기 경로는 전부 동기라 여기서만 잠깐 멈춘다 */
80
- function sleep(ms) {
81
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
82
- }
83
- function readOwner(ownerPath) {
84
- try {
85
- const parsed = JSON.parse(readFileSync(ownerPath, 'utf-8'));
86
- if (typeof parsed !== 'object' || parsed === null)
87
- return null;
88
- const { token, pid } = parsed;
89
- if (typeof token !== 'string' || typeof pid !== 'number')
90
- return null;
91
- return { token, pid };
92
- }
93
- catch {
94
- // 아직 안 쓰였거나(mkdir 직후) 옛 버전이 쓴 모양이다. 주인을 모르는 것으로 친다
95
- return null;
96
- }
97
- }
98
- /** 그 프로세스가 아직 도는가. 신호 0은 아무것도 안 보내고 존재만 묻는다 */
99
- function alivePid(pid) {
100
- try {
101
- process.kill(pid, 0);
102
- return true;
103
- }
104
- catch (e) {
105
- // EPERM은 남의 것이라 못 건드리는 것뿐이다. 그래도 살아는 있다
106
- return e.code === 'EPERM';
107
- }
108
- }
109
- /**
110
- * 목록을 고치는 동안 다른 프로세스를 막는다.
111
- *
112
- * 워크트리 여럿이 같은 목록에 동시에 손대는 게 이 레포의 기본 흐름이다. 잠금 없이
113
- * 읽고 고쳐 쓰면 나중에 쓴 쪽이 먼저 쓴 쪽의 항목을 덮는다.
114
- *
115
- * `mkdir`는 있으면 실패하니까 그 자체가 잠금이다. 쥔 채로 죽은 프로세스가 목록을 영영
116
- * 못 고치게 만들면 안 되므로 버려진 잠금은 부순다. 부수는 순간에 둘이 겹치면 둘 다
117
- * `mkdir`을 시도하고 한쪽만 성공한다 — 진 쪽은 다시 기다린다.
118
- *
119
- * **버려졌는지는 주인의 pid로 가른다.** 예전에는 잠금 디렉토리의 mtime만 봤는데,
120
- * 잠금은 잡을 때 한 번 만들어지고 쥔 동안 mtime이 안 올라간다. 그래서 `fn()`이
121
- * 5초를 넘기면 살아 있는 잠금이 버려진 것으로 보였다. 남이 부수고 들어와 둘이 나란히
122
- * 읽고 고쳐 써서 늦게 쓴 쪽이 상대 항목을 덮었다. 파일은 rename이라 안 깨지고 등록만
123
- * 조용히 사라진다.
124
- *
125
- * 쥔 동안 mtime을 주기적으로 올리는 방법은 여기서 안 통한다. `fn()`이 통째로 동기라
126
- * 타이머가 돌 틈이 없다 — 갱신이 필요한 바로 그 순간에 이벤트 루프가 막혀 있다.
127
- * 대신 주인이 살아 있는지를 직접 묻는다.
128
- *
129
- * `fn`에는 `stillMine`을 준다. 부수기와 다시 잡기가 겹치는 좁은 틈이 남아 있어,
130
- * 쓰기 직전에 잠금이 아직 내 것인지 다시 확인할 수 있어야 한다.
68
+ * 목록을 고치는 동안 다른 프로세스를 막는다. 잠금 동작은 `withFileLock` 머리말 참고.
131
69
  *
132
70
  * 잠금 소유권을 테스트에서 확인할 수 있게 내보낸다. 그 경로는 잠금을 오래 쥔 쪽과
133
71
  * 부순 쪽이 겹쳐야 열리는데, `registerRepo`로는 그 상황을 만들 수 없다.
134
72
  */
135
73
  export function withLock(fn) {
136
- const lock = join(ensureGestaltHome(), 'repos.json.lock');
137
- // 잠금을 누가 쥐고 있는지 적어둔다. 버려진 잠금은 남이 부수고 자기 것을 새로 만드는데,
138
- // 그때 원래 주인이 끝나며 무조건 지우면 **남의** 잠금을 푼다. 토큰이 내 것일 때만 지운다
139
- const ownerPath = join(lock, 'owner');
140
- const token = randomUUID();
141
- const start = Date.now();
142
- let waitMs = LOCK_BACKOFF_START_MS;
143
- for (;;) {
144
- try {
145
- mkdirSync(lock);
146
- writeFileSync(ownerPath, JSON.stringify({ token, pid: process.pid }), 'utf-8');
147
- break;
148
- }
149
- catch (e) {
150
- if (e.code !== 'EEXIST')
151
- throw e;
152
- let heldFor;
153
- try {
154
- heldFor = Date.now() - statSync(lock).mtimeMs;
155
- }
156
- catch {
157
- // 그 사이에 풀렸다. 다음 바퀴에서 잡는다
158
- heldFor = 0;
159
- }
160
- const owner = readOwner(ownerPath);
161
- const holderAlive = owner !== null && alivePid(owner.pid);
162
- const abandoned = heldFor > LOCK_HARD_STALE_MS || (!holderAlive && heldFor > LOCK_STALE_MS);
163
- if (abandoned) {
164
- rmSync(lock, { recursive: true, force: true });
165
- continue;
166
- }
167
- if (Date.now() - start > LOCK_WAIT_MS) {
168
- throw new Error('레포 목록이 잠겨 있어서 못 고쳤어요', { cause: e });
169
- }
170
- // 바퀴마다 mkdir 실패와 stat이 붙는다. 간격을 배로 늘려 바퀴 수를 줄인다
171
- sleep(waitMs);
172
- waitMs = Math.min(waitMs * 2, LOCK_BACKOFF_MAX_MS);
173
- }
174
- }
175
- const stillMine = () => readOwner(ownerPath)?.token === token;
176
- try {
177
- return fn({ stillMine });
178
- }
179
- finally {
180
- if (stillMine())
181
- rmSync(lock, { recursive: true, force: true });
182
- }
74
+ return withFileLock(join(ensureGestaltHome(), 'repos.json.lock'), fn, {
75
+ busyMessage: '레포 목록이 잠겨 있어서 못 고쳤어요',
76
+ });
183
77
  }
184
78
  /**
185
79
  * 목록을 통째로 바꿔 쓴다.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/local-pr/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/local-pr/registry.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,23 @@
26
26
  * 잎을 심어 순회가 그 잎에 닿는지 본다. zod 버전을 올리면 그 테스트를 반드시 다시 돌린다.
27
27
  */
28
28
  import { z } from 'zod';
29
+ /**
30
+ * 토큰을 가린다. 접두어는 남겨 무엇이 가려졌는지는 읽히게 한다.
31
+ *
32
+ * **모든 패턴이 접두어를 그룹 1 로 캡처한다.** 그룹이 없는 패턴을 섞으면
33
+ * `String.replace` 가 두 번째 인자로 매치 오프셋(숫자)을 넘겨, 접두어가 숫자로 바뀌고
34
+ * 치환 길이가 무너진다. 그 계약은 `tests/unit/mcp/input-guard.test.ts` 가 패턴 배열을
35
+ * 돌며 단언한다.
36
+ *
37
+ * **잘라낸 조각에 따로 걸지 않는다.** 접두어와 몸통이 서로 다른 조각에 놓이면 어느 쪽도
38
+ * 패턴에 안 걸려 토큰이 통째로 남는다. 부르는 쪽은 언제나 원본 전체를 넘긴다.
39
+ *
40
+ * `preserveLength` 는 `snippetAround` 만 쓴다. 자리가 밀리면 깨진 지점을 못 짚기 때문이다.
41
+ * 나머지 자리는 고정 길이로 덮어 별표 개수가 원문 길이를 드러내지 않게 한다.
42
+ */
43
+ export declare function redactSecrets(text: string, options?: {
44
+ preserveLength?: boolean;
45
+ }): string;
29
46
  /** 규칙 표를 테스트가 확인할 수 있게 내보낸다. 런타임 경로는 이 함수를 안 쓴다. */
30
47
  export declare function tokenRulesForTest(): ReadonlyArray<readonly [string, number]>;
31
48
  /** 패턴 계약을 테스트가 확인할 수 있게 내보낸다. 런타임 경로는 이 함수를 안 쓴다. */
@@ -1 +1 @@
1
- {"version":3,"file":"input-guard.d.ts","sourceRoot":"","sources":["../../../src/mcp/input-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwKxB,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE5E;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AA8CD,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAarD;AAUD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,MAAM,CAQ7F;AAED,8CAA8C;AAC9C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAe3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,WA0B/B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACnD,MAAM,EAAE,CAAC,EACT,IAAI,GAAE,OAAO,CAAC,MAAM,CAAiB,GACpC,CAAC,CA4EH;AAiDD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,CAwCjG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAM/D;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAElE"}
1
+ {"version":3,"file":"input-guard.d.ts","sourceRoot":"","sources":["../../../src/mcp/input-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6IxB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAW9F;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE5E;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AA8CD,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAarD;AAUD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,MAAM,CAQ7F;AAED,8CAA8C;AAC9C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAe3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,WA0B/B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACnD,MAAM,EAAE,CAAC,EACT,IAAI,GAAE,OAAO,CAAC,MAAM,CAAiB,GACpC,CAAC,CA4EH;AAiDD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,CAwCjG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAM/D;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAElE"}
@@ -170,7 +170,7 @@ const SECRET_PATTERNS = [PEM_PATTERN, ...tokenPatterns()];
170
170
  * `preserveLength` 는 `snippetAround` 만 쓴다. 자리가 밀리면 깨진 지점을 못 짚기 때문이다.
171
171
  * 나머지 자리는 고정 길이로 덮어 별표 개수가 원문 길이를 드러내지 않게 한다.
172
172
  */
173
- function redactSecrets(text, options = {}) {
173
+ export function redactSecrets(text, options = {}) {
174
174
  return SECRET_PATTERNS.reduce((acc, pattern) => acc.replace(pattern, (match, group) => {
175
175
  const prefix = typeof group === 'string' ? group : '';
176
176
  if (!options.preserveLength)
@@ -1 +1 @@
1
- {"version":3,"file":"input-guard.js","sourceRoot":"","sources":["../../../src/mcp/input-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-guard.js","sourceRoot":"","sources":["../../../src/mcp/input-guard.ts"],"names":[],"mappings":"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"}