choavis-agent 1.5.23 → 1.5.25

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 (232) hide show
  1. package/CLAUDE.md +35 -0
  2. package/dist/agent/adapters/claude.d.ts +13 -0
  3. package/dist/agent/adapters/claude.d.ts.map +1 -0
  4. package/dist/agent/adapters/claude.js +199 -0
  5. package/dist/agent/adapters/claude.js.map +1 -0
  6. package/dist/agent/memory.d.ts +13 -0
  7. package/dist/agent/memory.d.ts.map +1 -0
  8. package/dist/agent/memory.js +70 -0
  9. package/dist/agent/memory.js.map +1 -0
  10. package/dist/agent/process-pool.d.ts +61 -0
  11. package/dist/agent/process-pool.d.ts.map +1 -0
  12. package/dist/agent/process-pool.js +312 -0
  13. package/dist/agent/process-pool.js.map +1 -0
  14. package/dist/agent/protocol.d.ts +56 -0
  15. package/dist/agent/protocol.d.ts.map +1 -0
  16. package/dist/agent/protocol.js +9 -0
  17. package/dist/agent/protocol.js.map +1 -0
  18. package/dist/agent/queue.d.ts +14 -0
  19. package/dist/agent/queue.d.ts.map +1 -0
  20. package/dist/agent/queue.js +93 -0
  21. package/dist/agent/queue.js.map +1 -0
  22. package/dist/agent/runner.d.ts +49 -0
  23. package/dist/agent/runner.d.ts.map +1 -0
  24. package/dist/agent/runner.js +157 -0
  25. package/dist/agent/runner.js.map +1 -0
  26. package/dist/agent/session-pool.d.ts +37 -0
  27. package/dist/agent/session-pool.d.ts.map +1 -0
  28. package/dist/agent/session-pool.js +214 -0
  29. package/dist/agent/session-pool.js.map +1 -0
  30. package/dist/agent/session.d.ts +34 -0
  31. package/dist/agent/session.d.ts.map +1 -0
  32. package/dist/agent/session.js +200 -0
  33. package/dist/agent/session.js.map +1 -0
  34. package/dist/agent/usage.d.ts +30 -0
  35. package/dist/agent/usage.d.ts.map +1 -0
  36. package/dist/agent/usage.js +76 -0
  37. package/dist/agent/usage.js.map +1 -0
  38. package/dist/api/server.d.ts +7 -0
  39. package/dist/api/server.d.ts.map +1 -0
  40. package/dist/api/server.js +221 -0
  41. package/dist/api/server.js.map +1 -0
  42. package/dist/approval/server.d.ts +34 -0
  43. package/dist/approval/server.d.ts.map +1 -0
  44. package/dist/approval/server.js +156 -0
  45. package/dist/approval/server.js.map +1 -0
  46. package/dist/approval/setup.d.ts +7 -0
  47. package/dist/approval/setup.d.ts.map +1 -0
  48. package/dist/approval/setup.js +112 -0
  49. package/dist/approval/setup.js.map +1 -0
  50. package/dist/cli/config.d.ts +2 -0
  51. package/dist/cli/config.d.ts.map +1 -0
  52. package/dist/cli/config.js +94 -0
  53. package/dist/cli/config.js.map +1 -0
  54. package/dist/cli/env.d.ts +3 -0
  55. package/dist/cli/env.d.ts.map +1 -0
  56. package/dist/cli/env.js +27 -0
  57. package/dist/cli/env.js.map +1 -0
  58. package/dist/cli/help.d.ts +2 -0
  59. package/dist/cli/help.d.ts.map +1 -0
  60. package/dist/cli/help.js +27 -0
  61. package/dist/cli/help.js.map +1 -0
  62. package/dist/cli/init.d.ts +2 -0
  63. package/dist/cli/init.d.ts.map +1 -0
  64. package/dist/cli/init.js +56 -0
  65. package/dist/cli/init.js.map +1 -0
  66. package/dist/cli/onboard.d.ts +2 -0
  67. package/dist/cli/onboard.d.ts.map +1 -0
  68. package/dist/cli/onboard.js +426 -0
  69. package/dist/cli/onboard.js.map +1 -0
  70. package/dist/cli/prompts.d.ts +11 -0
  71. package/dist/cli/prompts.d.ts.map +1 -0
  72. package/dist/cli/prompts.js +47 -0
  73. package/dist/cli/prompts.js.map +1 -0
  74. package/dist/cli.d.ts +3 -0
  75. package/dist/cli.d.ts.map +1 -0
  76. package/dist/cli.js +62307 -0
  77. package/dist/cli.js.map +1 -0
  78. package/dist/config.d.ts +42 -0
  79. package/dist/config.d.ts.map +1 -0
  80. package/dist/config.js +72 -0
  81. package/dist/config.js.map +1 -0
  82. package/dist/credentials/atlassian.d.ts +15 -0
  83. package/dist/credentials/atlassian.d.ts.map +1 -0
  84. package/dist/credentials/atlassian.js +65 -0
  85. package/dist/credentials/atlassian.js.map +1 -0
  86. package/dist/events/bus.d.ts +11 -0
  87. package/dist/events/bus.d.ts.map +1 -0
  88. package/dist/events/bus.js +19 -0
  89. package/dist/events/bus.js.map +1 -0
  90. package/dist/index.d.ts +2 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +11891 -2471
  93. package/dist/index.js.map +1 -0
  94. package/dist/scheduler/briefing.d.ts +7 -0
  95. package/dist/scheduler/briefing.d.ts.map +1 -0
  96. package/dist/scheduler/briefing.js +165 -0
  97. package/dist/scheduler/briefing.js.map +1 -0
  98. package/dist/slack/agent-executor.d.ts +13 -0
  99. package/dist/slack/agent-executor.d.ts.map +1 -0
  100. package/dist/slack/agent-executor.js +283 -0
  101. package/dist/slack/agent-executor.js.map +1 -0
  102. package/dist/slack/app.d.ts +3 -0
  103. package/dist/slack/app.d.ts.map +1 -0
  104. package/dist/slack/app.js +11 -0
  105. package/dist/slack/app.js.map +1 -0
  106. package/dist/slack/approval-actions.d.ts +13 -0
  107. package/dist/slack/approval-actions.d.ts.map +1 -0
  108. package/dist/slack/approval-actions.js +199 -0
  109. package/dist/slack/approval-actions.js.map +1 -0
  110. package/dist/slack/commands/briefing.d.ts +3 -0
  111. package/dist/slack/commands/briefing.d.ts.map +1 -0
  112. package/dist/slack/commands/briefing.js +22 -0
  113. package/dist/slack/commands/briefing.js.map +1 -0
  114. package/dist/slack/commands/compact.d.ts +3 -0
  115. package/dist/slack/commands/compact.d.ts.map +1 -0
  116. package/dist/slack/commands/compact.js +53 -0
  117. package/dist/slack/commands/compact.js.map +1 -0
  118. package/dist/slack/commands/help.d.ts +3 -0
  119. package/dist/slack/commands/help.d.ts.map +1 -0
  120. package/dist/slack/commands/help.js +57 -0
  121. package/dist/slack/commands/help.js.map +1 -0
  122. package/dist/slack/commands/index.d.ts +7 -0
  123. package/dist/slack/commands/index.d.ts.map +1 -0
  124. package/dist/slack/commands/index.js +53 -0
  125. package/dist/slack/commands/index.js.map +1 -0
  126. package/dist/slack/commands/inject.d.ts +3 -0
  127. package/dist/slack/commands/inject.d.ts.map +1 -0
  128. package/dist/slack/commands/inject.js +44 -0
  129. package/dist/slack/commands/inject.js.map +1 -0
  130. package/dist/slack/commands/memory.d.ts +3 -0
  131. package/dist/slack/commands/memory.d.ts.map +1 -0
  132. package/dist/slack/commands/memory.js +82 -0
  133. package/dist/slack/commands/memory.js.map +1 -0
  134. package/dist/slack/commands/model.d.ts +3 -0
  135. package/dist/slack/commands/model.d.ts.map +1 -0
  136. package/dist/slack/commands/model.js +43 -0
  137. package/dist/slack/commands/model.js.map +1 -0
  138. package/dist/slack/commands/new.d.ts +3 -0
  139. package/dist/slack/commands/new.d.ts.map +1 -0
  140. package/dist/slack/commands/new.js +24 -0
  141. package/dist/slack/commands/new.js.map +1 -0
  142. package/dist/slack/commands/permission.d.ts +3 -0
  143. package/dist/slack/commands/permission.d.ts.map +1 -0
  144. package/dist/slack/commands/permission.js +51 -0
  145. package/dist/slack/commands/permission.js.map +1 -0
  146. package/dist/slack/commands/project.d.ts +3 -0
  147. package/dist/slack/commands/project.d.ts.map +1 -0
  148. package/dist/slack/commands/project.js +41 -0
  149. package/dist/slack/commands/project.js.map +1 -0
  150. package/dist/slack/commands/resume.d.ts +3 -0
  151. package/dist/slack/commands/resume.d.ts.map +1 -0
  152. package/dist/slack/commands/resume.js +93 -0
  153. package/dist/slack/commands/resume.js.map +1 -0
  154. package/dist/slack/commands/session-info.d.ts +3 -0
  155. package/dist/slack/commands/session-info.d.ts.map +1 -0
  156. package/dist/slack/commands/session-info.js +33 -0
  157. package/dist/slack/commands/session-info.js.map +1 -0
  158. package/dist/slack/commands/sessions.d.ts +3 -0
  159. package/dist/slack/commands/sessions.d.ts.map +1 -0
  160. package/dist/slack/commands/sessions.js +54 -0
  161. package/dist/slack/commands/sessions.js.map +1 -0
  162. package/dist/slack/commands/status.d.ts +3 -0
  163. package/dist/slack/commands/status.d.ts.map +1 -0
  164. package/dist/slack/commands/status.js +64 -0
  165. package/dist/slack/commands/status.js.map +1 -0
  166. package/dist/slack/commands/stop.d.ts +3 -0
  167. package/dist/slack/commands/stop.d.ts.map +1 -0
  168. package/dist/slack/commands/stop.js +31 -0
  169. package/dist/slack/commands/stop.js.map +1 -0
  170. package/dist/slack/commands/types.d.ts +22 -0
  171. package/dist/slack/commands/types.d.ts.map +1 -0
  172. package/dist/slack/commands/types.js +2 -0
  173. package/dist/slack/commands/types.js.map +1 -0
  174. package/dist/slack/commands/usage.d.ts +8 -0
  175. package/dist/slack/commands/usage.d.ts.map +1 -0
  176. package/dist/slack/commands/usage.js +143 -0
  177. package/dist/slack/commands/usage.js.map +1 -0
  178. package/dist/slack/context.d.ts +16 -0
  179. package/dist/slack/context.d.ts.map +1 -0
  180. package/dist/slack/context.js +90 -0
  181. package/dist/slack/context.js.map +1 -0
  182. package/dist/slack/file-downloader.d.ts +18 -0
  183. package/dist/slack/file-downloader.d.ts.map +1 -0
  184. package/dist/slack/file-downloader.js +196 -0
  185. package/dist/slack/file-downloader.js.map +1 -0
  186. package/dist/slack/formatter.d.ts +36 -0
  187. package/dist/slack/formatter.d.ts.map +1 -0
  188. package/dist/slack/formatter.js +247 -0
  189. package/dist/slack/formatter.js.map +1 -0
  190. package/dist/slack/handlers.d.ts +5 -0
  191. package/dist/slack/handlers.d.ts.map +1 -0
  192. package/dist/slack/handlers.js +636 -0
  193. package/dist/slack/handlers.js.map +1 -0
  194. package/dist/slack/link-resolver.d.ts +24 -0
  195. package/dist/slack/link-resolver.d.ts.map +1 -0
  196. package/dist/slack/link-resolver.js +52 -0
  197. package/dist/slack/link-resolver.js.map +1 -0
  198. package/dist/slack/middleware.d.ts +17 -0
  199. package/dist/slack/middleware.d.ts.map +1 -0
  200. package/dist/slack/middleware.js +73 -0
  201. package/dist/slack/middleware.js.map +1 -0
  202. package/dist/slack/response.d.ts +19 -0
  203. package/dist/slack/response.d.ts.map +1 -0
  204. package/dist/slack/response.js +99 -0
  205. package/dist/slack/response.js.map +1 -0
  206. package/dist/slack/slack-retry.d.ts +18 -0
  207. package/dist/slack/slack-retry.d.ts.map +1 -0
  208. package/dist/slack/slack-retry.js +71 -0
  209. package/dist/slack/slack-retry.js.map +1 -0
  210. package/dist/slack/streaming.d.ts +54 -0
  211. package/dist/slack/streaming.d.ts.map +1 -0
  212. package/dist/slack/streaming.js +151 -0
  213. package/dist/slack/streaming.js.map +1 -0
  214. package/dist/slack/tool-formatter.d.ts +18 -0
  215. package/dist/slack/tool-formatter.d.ts.map +1 -0
  216. package/dist/slack/tool-formatter.js +154 -0
  217. package/dist/slack/tool-formatter.js.map +1 -0
  218. package/dist/slack/types.d.ts +22 -0
  219. package/dist/slack/types.d.ts.map +1 -0
  220. package/dist/slack/types.js +2 -0
  221. package/dist/slack/types.js.map +1 -0
  222. package/dist/utils/logger.d.ts +9 -0
  223. package/dist/utils/logger.d.ts.map +1 -0
  224. package/dist/utils/logger.js +49 -0
  225. package/dist/utils/logger.js.map +1 -0
  226. package/package.json +26 -17
  227. package/scripts/install.command +0 -0
  228. package/scripts/pretool-hook.mjs +0 -0
  229. package/skills/README.md +59 -0
  230. package/skills/code-review.md +19 -0
  231. package/skills/incident-report.md +23 -0
  232. package/skills/sprint-review.md +18 -0
package/CLAUDE.md CHANGED
@@ -32,6 +32,41 @@ Slack은 단순한 UI일 뿐이다. 너는 이 프로젝트 루트에서 동작
32
32
  - `src/slack/` - Slack 연동 (Bolt.js Socket Mode)
33
33
  - `src/agent/` - Claude CLI subprocess 관리
34
34
 
35
+ ## Skills 시스템
36
+
37
+ `skills/` 디렉토리에 마크다운 파일로 자연어 워크플로우를 정의할 수 있다. 에이전트 실행 시 자동으로 로드되어 systemPrompt에 주입된다.
38
+
39
+ ### 스킬 파일 작성법
40
+
41
+ `skills/` 디렉토리에 `.md` 파일을 생성한다:
42
+
43
+ ```markdown
44
+ # 스킬 이름
45
+
46
+ > 트리거: "키워드1", "키워드2"
47
+
48
+ ## 워크플로우
49
+
50
+ 1. 단계 1
51
+ 2. 단계 2
52
+
53
+ ## 참고사항
54
+ - 주의점
55
+ ```
56
+
57
+ ### 경로 우선순위
58
+
59
+ 1. `AGENT_WORK_DIR/skills/` — 프로젝트별 커스텀 스킬 (우선)
60
+ 2. 패키지 내장 `skills/` — 기본 스킬
61
+
62
+ 동일 파일명이면 프로젝트 스킬이 내장 스킬을 덮어쓴다.
63
+
64
+ ### 내장 스킬
65
+
66
+ - `sprint-review.md` — 스프린트 리뷰 리포트
67
+ - `code-review.md` — 코드 리뷰
68
+ - `incident-report.md` — 장애 포스트모템
69
+
35
70
  ## 응답 스타일
36
71
 
37
72
  - 간결하고 명확하게 응답
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Claude Adapter
3
+ *
4
+ * Claude Code의 StreamEvent를 통합 SessionEvent로 변환하는 어댑터.
5
+ * runner.ts의 raw NDJSON 스트림을 받아 protocol.ts의 SessionEvent로 emit.
6
+ */
7
+ import type { StreamEvent } from '../runner.js';
8
+ import type { SessionEvent } from '../protocol.js';
9
+ /**
10
+ * Claude Code의 StreamEvent async generator를 SessionEvent로 변환
11
+ */
12
+ export declare function adaptClaude(rawStream: AsyncGenerator<StreamEvent>): AsyncGenerator<SessionEvent>;
13
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/agent/adapters/claude.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,gBAAgB,CAAC;AAiEjF;;GAEG;AACH,wBAAuB,WAAW,CAChC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GACrC,cAAc,CAAC,YAAY,CAAC,CA2J9B"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Claude Adapter
3
+ *
4
+ * Claude Code의 StreamEvent를 통합 SessionEvent로 변환하는 어댑터.
5
+ * runner.ts의 raw NDJSON 스트림을 받아 protocol.ts의 SessionEvent로 emit.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ const log = createLogger('adapter:claude');
9
+ /** 파일 관련 도구에서 경로와 액션을 추출 */
10
+ function extractFileInfo(toolName, toolInput) {
11
+ const filePath = toolInput.file_path ||
12
+ toolInput.notebook_path ||
13
+ null;
14
+ if (!filePath)
15
+ return null;
16
+ const actionMap = {
17
+ Read: 'read',
18
+ Write: 'write',
19
+ Edit: 'edit',
20
+ MultiEdit: 'edit',
21
+ NotebookEdit: 'edit',
22
+ };
23
+ const action = actionMap[toolName];
24
+ if (!action)
25
+ return null;
26
+ return { path: filePath, action };
27
+ }
28
+ /** tool use 이벤트에서 도구 이름과 입력을 추출 (여러 형식 지원) */
29
+ function extractToolUse(raw) {
30
+ // 형식 1: type === 'tool_use' (tool_name/tool_input)
31
+ if (raw.type === 'tool_use') {
32
+ const toolName = raw.tool_name || raw.name || 'unknown';
33
+ const toolInput = (raw.tool_input || raw.input || {});
34
+ return { toolName, toolInput };
35
+ }
36
+ // 형식 2: content_block_start + content_block.type === 'tool_use'
37
+ if (raw.type === 'content_block_start') {
38
+ const block = raw.content_block;
39
+ if (block?.type === 'tool_use' && block.name) {
40
+ return {
41
+ toolName: block.name,
42
+ toolInput: (block.input || {}),
43
+ };
44
+ }
45
+ }
46
+ return null;
47
+ }
48
+ /** 에러 이벤트에서 텍스트 메시지를 추출 */
49
+ function extractErrorText(event) {
50
+ const content = event.message?.content;
51
+ if (!Array.isArray(content))
52
+ return 'Unknown error';
53
+ return content
54
+ .filter((c) => c.type === 'text')
55
+ .map((c) => c.text || '')
56
+ .join('');
57
+ }
58
+ /**
59
+ * Claude Code의 StreamEvent async generator를 SessionEvent로 변환
60
+ */
61
+ export async function* adaptClaude(rawStream) {
62
+ let didEmitTurnStart = false;
63
+ for await (const raw of rawStream) {
64
+ const ts = Date.now();
65
+ // system/init → start
66
+ if (raw.type === 'system' && raw.subtype === 'init') {
67
+ yield {
68
+ type: 'start',
69
+ timestamp: ts,
70
+ sessionId: raw.session_id,
71
+ _raw: raw,
72
+ };
73
+ continue;
74
+ }
75
+ // assistant → turn-start (첫 번째만) + text(replace: true)
76
+ if (raw.type === 'assistant') {
77
+ if (!didEmitTurnStart) {
78
+ didEmitTurnStart = true;
79
+ yield { type: 'turn-start', timestamp: ts };
80
+ }
81
+ const msg = raw.message;
82
+ if (msg?.content && Array.isArray(msg.content)) {
83
+ const fullText = msg.content
84
+ .filter((block) => block.type === 'text' && block.text)
85
+ .map((block) => block.text)
86
+ .join('');
87
+ if (fullText) {
88
+ yield {
89
+ type: 'text',
90
+ timestamp: ts,
91
+ text: { content: fullText, replace: true },
92
+ _raw: raw,
93
+ };
94
+ }
95
+ // assistant 메시지 content에서 tool_use 블록도 추출
96
+ for (const block of msg.content) {
97
+ if (block.type === 'tool_use' && block.name) {
98
+ const toolInput = (block.input || {});
99
+ yield {
100
+ type: 'tool-call-start',
101
+ timestamp: ts,
102
+ tool: { toolName: block.name, toolInput },
103
+ };
104
+ const fileInfo = extractFileInfo(block.name, toolInput);
105
+ if (fileInfo) {
106
+ yield { type: 'file', timestamp: ts, file: fileInfo };
107
+ }
108
+ }
109
+ }
110
+ }
111
+ continue;
112
+ }
113
+ // content_block_delta → text(replace: false)
114
+ if (raw.type === 'content_block_delta' && raw.delta?.text) {
115
+ if (!didEmitTurnStart) {
116
+ didEmitTurnStart = true;
117
+ yield { type: 'turn-start', timestamp: ts };
118
+ }
119
+ yield {
120
+ type: 'text',
121
+ timestamp: ts,
122
+ text: { content: raw.delta.text, replace: false },
123
+ _raw: raw,
124
+ };
125
+ continue;
126
+ }
127
+ // tool_use → tool-call-start + optional file
128
+ // Claude Code stream-json은 여러 형식으로 tool use를 보낼 수 있음:
129
+ // 1. type: 'tool_use' (tool_name/tool_input 또는 name/input)
130
+ // 2. type: 'content_block_start' + content_block.type === 'tool_use'
131
+ {
132
+ const toolInfo = extractToolUse(raw);
133
+ if (toolInfo) {
134
+ yield {
135
+ type: 'tool-call-start',
136
+ timestamp: ts,
137
+ tool: toolInfo,
138
+ _raw: raw,
139
+ };
140
+ // 파일 관련 도구면 file 이벤트도 emit
141
+ const fileInfo = extractFileInfo(toolInfo.toolName, toolInfo.toolInput);
142
+ if (fileInfo) {
143
+ yield {
144
+ type: 'file',
145
+ timestamp: ts,
146
+ file: fileInfo,
147
+ };
148
+ }
149
+ continue;
150
+ }
151
+ }
152
+ // result → turn-end
153
+ if (raw.type === 'result') {
154
+ const turnEnd = {
155
+ type: 'turn-end',
156
+ timestamp: ts,
157
+ sessionId: raw.session_id,
158
+ turn: {
159
+ result: raw.result,
160
+ },
161
+ _raw: raw,
162
+ };
163
+ if (raw.usage) {
164
+ turnEnd.turn.usage = {
165
+ inputTokens: raw.usage.input_tokens || 0,
166
+ outputTokens: raw.usage.output_tokens || 0,
167
+ model: raw.model,
168
+ };
169
+ }
170
+ yield turnEnd;
171
+ // 다음 턴을 위해 리셋
172
+ didEmitTurnStart = false;
173
+ continue;
174
+ }
175
+ // error → service
176
+ if (raw.type === 'error') {
177
+ const message = extractErrorText(raw);
178
+ const errorType = raw.errorType;
179
+ const retryable = errorType === 'transient';
180
+ yield {
181
+ type: 'service',
182
+ timestamp: ts,
183
+ service: {
184
+ message,
185
+ severity: 'error',
186
+ errorType,
187
+ retryable,
188
+ },
189
+ _raw: raw,
190
+ };
191
+ continue;
192
+ }
193
+ // 그 외 이벤트 디버그 로그 (tool_use 관련 이벤트를 놓치고 있는지 확인용)
194
+ if (raw.type !== 'content_block_delta' && raw.type !== 'content_block_stop') {
195
+ log.info('unhandled event', { type: raw.type, subtype: raw.subtype });
196
+ }
197
+ }
198
+ }
199
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/agent/adapters/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface MemoryEntry {
2
+ id: string;
3
+ content: string;
4
+ createdAt: string;
5
+ }
6
+ export interface MemoryStore {
7
+ entries: MemoryEntry[];
8
+ }
9
+ export declare function addMemory(baseDir: string, content: string): Promise<MemoryEntry>;
10
+ export declare function listMemories(baseDir: string): Promise<MemoryEntry[]>;
11
+ export declare function deleteMemory(baseDir: string, memoryId: string): Promise<boolean>;
12
+ export declare function buildMemoryContext(baseDir: string): Promise<string>;
13
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/agent/memory.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AA+BD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAYtF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAI1E;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtF;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE"}
@@ -0,0 +1,70 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { createLogger } from '../utils/logger.js';
5
+ const log = createLogger('memory');
6
+ function getFilePath(baseDir) {
7
+ return join(baseDir, 'memories.json');
8
+ }
9
+ async function ensureDir(baseDir) {
10
+ if (!existsSync(baseDir)) {
11
+ await mkdir(baseDir, { recursive: true });
12
+ }
13
+ }
14
+ async function loadStore(filePath) {
15
+ if (!existsSync(filePath))
16
+ return { entries: [] };
17
+ try {
18
+ const data = await readFile(filePath, 'utf-8');
19
+ return JSON.parse(data);
20
+ }
21
+ catch {
22
+ log.warn('메모리 파일 파싱 실패', { filePath });
23
+ return { entries: [] };
24
+ }
25
+ }
26
+ async function saveStore(filePath, store) {
27
+ await writeFile(filePath, JSON.stringify(store, null, 2));
28
+ }
29
+ function generateId() {
30
+ return Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
31
+ }
32
+ export async function addMemory(baseDir, content) {
33
+ await ensureDir(baseDir);
34
+ const filePath = getFilePath(baseDir);
35
+ const store = await loadStore(filePath);
36
+ const entry = {
37
+ id: generateId(),
38
+ content,
39
+ createdAt: new Date().toISOString(),
40
+ };
41
+ store.entries.push(entry);
42
+ await saveStore(filePath, store);
43
+ return entry;
44
+ }
45
+ export async function listMemories(baseDir) {
46
+ const filePath = getFilePath(baseDir);
47
+ const store = await loadStore(filePath);
48
+ return store.entries;
49
+ }
50
+ export async function deleteMemory(baseDir, memoryId) {
51
+ const filePath = getFilePath(baseDir);
52
+ const store = await loadStore(filePath);
53
+ const idx = store.entries.findIndex((e) => e.id === memoryId);
54
+ if (idx === -1)
55
+ return false;
56
+ store.entries.splice(idx, 1);
57
+ await saveStore(filePath, store);
58
+ return true;
59
+ }
60
+ export async function buildMemoryContext(baseDir) {
61
+ const entries = await listMemories(baseDir);
62
+ if (entries.length === 0)
63
+ return '';
64
+ const lines = ['[기억 컨텍스트]'];
65
+ for (const e of entries) {
66
+ lines.push(`- ${e.content}`);
67
+ }
68
+ return lines.join('\n');
69
+ }
70
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/agent/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type ChildProcess } from 'node:child_process';
2
+ import { type Interface } from 'node:readline';
3
+ import type { StreamEvent } from './runner.js';
4
+ export interface SpawnOptions {
5
+ sessionId?: string;
6
+ workDir?: string;
7
+ permissionMode?: string;
8
+ allowedTools?: string[];
9
+ approvalPort?: number;
10
+ }
11
+ export interface PoolEntry {
12
+ proc: ChildProcess;
13
+ rl: Interface;
14
+ threadTs: string;
15
+ idleTimer: NodeJS.Timeout | null;
16
+ lastActivityAt: number;
17
+ spawnOptions: SpawnOptions;
18
+ /** 현재 턴의 라인 콜백 (null이면 턴 진행 중 아님) */
19
+ lineHandler: ((line: string) => void) | null;
20
+ /** 프로세스 종료 콜백 */
21
+ closeHandler: ((code: number | null) => void) | null;
22
+ stderrChunks: string[];
23
+ stderrBytes: number;
24
+ }
25
+ export declare class ProcessPool {
26
+ private pool;
27
+ /** 풀에 해당 threadTs의 프로세스가 존재하는지 */
28
+ has(threadTs: string): boolean;
29
+ /** 현재 풀 크기 */
30
+ get size(): number;
31
+ /**
32
+ * threadTs에 해당하는 프로세스를 반환한다.
33
+ * 기존 프로세스가 살아있으면 재사용하고, 없거나 죽었으면 새로 spawn한다.
34
+ */
35
+ acquire(threadTs: string, spawnOptions: SpawnOptions): PoolEntry;
36
+ /**
37
+ * threadTs 프로세스를 idle 상태로 전환한다.
38
+ * processIdleTimeout 후에 자동으로 프로세스를 종료한다.
39
+ */
40
+ release(threadTs: string): void;
41
+ /**
42
+ * threadTs 프로세스를 강제 종료하고 pool에서 제거한다.
43
+ * SIGTERM → 5초 후 SIGKILL 순서.
44
+ */
45
+ kill(threadTs: string): void;
46
+ /**
47
+ * 모든 프로세스를 종료한다 (graceful shutdown).
48
+ */
49
+ cleanup(): void;
50
+ private spawnProcess;
51
+ private removeEntry;
52
+ }
53
+ /**
54
+ * entry의 stdin에 user_message를 쓰고,
55
+ * stdout에서 NDJSON 라인을 읽어 StreamEvent로 yield한다.
56
+ * `result` 타입 이벤트를 만나면 yield 후 return (턴 종료).
57
+ * 프로세스가 종료되면 에러 이벤트를 yield한다.
58
+ */
59
+ export declare function sendTurn(entry: PoolEntry, prompt: string, abortSignal?: AbortSignal): AsyncGenerator<StreamEvent>;
60
+ export declare const processPool: ProcessPool;
61
+ //# sourceMappingURL=process-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-pool.d.ts","sourceRoot":"","sources":["../../src/agent/process-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAU/C,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,qCAAqC;IACrC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,iBAAiB;IACjB,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAgC;IAE5C,kCAAkC;IAClC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,cAAc;IACd,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS;IA2ChE;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAmB/B;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA0B5B;;OAEG;IACH,OAAO,IAAI,IAAI;IAWf,OAAO,CAAC,YAAY;IA2FpB,OAAO,CAAC,WAAW;CAepB;AAMD;;;;;GAKG;AACH,wBAAuB,QAAQ,CAC7B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,GACxB,cAAc,CAAC,WAAW,CAAC,CAgH7B;AAMD,eAAO,MAAM,WAAW,aAAoB,CAAC"}