@intrect/openswarm 0.2.1 → 0.3.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 (155) hide show
  1. package/README.md +236 -331
  2. package/config.example.yaml +36 -13
  3. package/dist/adapters/base.d.ts.map +1 -1
  4. package/dist/adapters/base.js +4 -0
  5. package/dist/adapters/base.js.map +1 -1
  6. package/dist/adapters/cryptoQuantAdapter.js +1 -1
  7. package/dist/adapters/cryptoQuantAdapter.js.map +1 -1
  8. package/dist/adapters/gpt.d.ts +15 -0
  9. package/dist/adapters/gpt.d.ts.map +1 -0
  10. package/dist/adapters/gpt.js +274 -0
  11. package/dist/adapters/gpt.js.map +1 -0
  12. package/dist/adapters/index.d.ts +2 -0
  13. package/dist/adapters/index.d.ts.map +1 -1
  14. package/dist/adapters/index.js +6 -0
  15. package/dist/adapters/index.js.map +1 -1
  16. package/dist/adapters/local.d.ts +22 -0
  17. package/dist/adapters/local.d.ts.map +1 -0
  18. package/dist/adapters/local.js +277 -0
  19. package/dist/adapters/local.js.map +1 -0
  20. package/dist/adapters/types.d.ts +6 -1
  21. package/dist/adapters/types.d.ts.map +1 -1
  22. package/dist/agents/pairPipeline.d.ts.map +1 -1
  23. package/dist/agents/pairPipeline.js +21 -6
  24. package/dist/agents/pairPipeline.js.map +1 -1
  25. package/dist/agents/pipelineGuards.d.ts.map +1 -1
  26. package/dist/agents/pipelineGuards.js +84 -2
  27. package/dist/agents/pipelineGuards.js.map +1 -1
  28. package/dist/auth/index.d.ts +3 -0
  29. package/dist/auth/index.d.ts.map +1 -0
  30. package/dist/auth/index.js +6 -0
  31. package/dist/auth/index.js.map +1 -0
  32. package/dist/auth/oauthPkce.d.ts +21 -0
  33. package/dist/auth/oauthPkce.d.ts.map +1 -0
  34. package/dist/auth/oauthPkce.js +212 -0
  35. package/dist/auth/oauthPkce.js.map +1 -0
  36. package/dist/auth/oauthStore.d.ts +24 -0
  37. package/dist/auth/oauthStore.d.ts.map +1 -0
  38. package/dist/auth/oauthStore.js +96 -0
  39. package/dist/auth/oauthStore.js.map +1 -0
  40. package/dist/automation/autonomousRunner.d.ts +5 -5
  41. package/dist/automation/runnerTypes.d.ts +1 -1
  42. package/dist/automation/runnerTypes.d.ts.map +1 -1
  43. package/dist/cli/authHandler.d.ts +16 -0
  44. package/dist/cli/authHandler.d.ts.map +1 -0
  45. package/dist/cli/authHandler.js +93 -0
  46. package/dist/cli/authHandler.js.map +1 -0
  47. package/dist/cli/checkHandler.d.ts +25 -0
  48. package/dist/cli/checkHandler.d.ts.map +1 -0
  49. package/dist/cli/checkHandler.js +465 -0
  50. package/dist/cli/checkHandler.js.map +1 -0
  51. package/dist/cli.js +69 -0
  52. package/dist/cli.js.map +1 -1
  53. package/dist/core/config.d.ts +17 -4
  54. package/dist/core/config.d.ts.map +1 -1
  55. package/dist/core/config.js +21 -8
  56. package/dist/core/config.js.map +1 -1
  57. package/dist/core/service.d.ts.map +1 -1
  58. package/dist/core/service.js +18 -8
  59. package/dist/core/service.js.map +1 -1
  60. package/dist/core/types.d.ts +4 -2
  61. package/dist/core/types.d.ts.map +1 -1
  62. package/dist/issues/graphql/resolvers.d.ts +252 -0
  63. package/dist/issues/graphql/resolvers.d.ts.map +1 -0
  64. package/dist/issues/graphql/resolvers.js +88 -0
  65. package/dist/issues/graphql/resolvers.js.map +1 -0
  66. package/dist/issues/graphql/server.d.ts +13 -0
  67. package/dist/issues/graphql/server.d.ts.map +1 -0
  68. package/dist/issues/graphql/server.js +56 -0
  69. package/dist/issues/graphql/server.js.map +1 -0
  70. package/dist/issues/graphql/typeDefs.d.ts +2 -0
  71. package/dist/issues/graphql/typeDefs.d.ts.map +1 -0
  72. package/dist/issues/graphql/typeDefs.js +251 -0
  73. package/dist/issues/graphql/typeDefs.js.map +1 -0
  74. package/dist/issues/index.d.ts +8 -0
  75. package/dist/issues/index.d.ts.map +1 -0
  76. package/dist/issues/index.js +11 -0
  77. package/dist/issues/index.js.map +1 -0
  78. package/dist/issues/issueBoardHtml.d.ts +2 -0
  79. package/dist/issues/issueBoardHtml.d.ts.map +1 -0
  80. package/dist/issues/issueBoardHtml.js +677 -0
  81. package/dist/issues/issueBoardHtml.js.map +1 -0
  82. package/dist/issues/linearBridge.d.ts +27 -0
  83. package/dist/issues/linearBridge.d.ts.map +1 -0
  84. package/dist/issues/linearBridge.js +211 -0
  85. package/dist/issues/linearBridge.js.map +1 -0
  86. package/dist/issues/memoryBridge.d.ts +35 -0
  87. package/dist/issues/memoryBridge.d.ts.map +1 -0
  88. package/dist/issues/memoryBridge.js +184 -0
  89. package/dist/issues/memoryBridge.js.map +1 -0
  90. package/dist/issues/schema.d.ts +162 -0
  91. package/dist/issues/schema.d.ts.map +1 -0
  92. package/dist/issues/schema.js +121 -0
  93. package/dist/issues/schema.js.map +1 -0
  94. package/dist/issues/sqliteStore.d.ts +90 -0
  95. package/dist/issues/sqliteStore.d.ts.map +1 -0
  96. package/dist/issues/sqliteStore.js +488 -0
  97. package/dist/issues/sqliteStore.js.map +1 -0
  98. package/dist/knowledge/index.d.ts.map +1 -1
  99. package/dist/knowledge/index.js +9 -3
  100. package/dist/knowledge/index.js.map +1 -1
  101. package/dist/linear/linear.d.ts +4 -0
  102. package/dist/linear/linear.d.ts.map +1 -1
  103. package/dist/linear/linear.js +27 -0
  104. package/dist/linear/linear.js.map +1 -1
  105. package/dist/registry/bsDetector.d.ts +24 -0
  106. package/dist/registry/bsDetector.d.ts.map +1 -0
  107. package/dist/registry/bsDetector.js +276 -0
  108. package/dist/registry/bsDetector.js.map +1 -0
  109. package/dist/registry/entityScanner.d.ts +36 -0
  110. package/dist/registry/entityScanner.d.ts.map +1 -0
  111. package/dist/registry/entityScanner.js +693 -0
  112. package/dist/registry/entityScanner.js.map +1 -0
  113. package/dist/registry/graphql/resolvers.d.ts +778 -0
  114. package/dist/registry/graphql/resolvers.d.ts.map +1 -0
  115. package/dist/registry/graphql/resolvers.js +127 -0
  116. package/dist/registry/graphql/resolvers.js.map +1 -0
  117. package/dist/registry/graphql/typeDefs.d.ts +2 -0
  118. package/dist/registry/graphql/typeDefs.d.ts.map +1 -0
  119. package/dist/registry/graphql/typeDefs.js +276 -0
  120. package/dist/registry/graphql/typeDefs.js.map +1 -0
  121. package/dist/registry/index.d.ts +12 -0
  122. package/dist/registry/index.d.ts.map +1 -0
  123. package/dist/registry/index.js +18 -0
  124. package/dist/registry/index.js.map +1 -0
  125. package/dist/registry/issueBridge.d.ts +8 -0
  126. package/dist/registry/issueBridge.d.ts.map +1 -0
  127. package/dist/registry/issueBridge.js +30 -0
  128. package/dist/registry/issueBridge.js.map +1 -0
  129. package/dist/registry/memoryBridge.d.ts +13 -0
  130. package/dist/registry/memoryBridge.d.ts.map +1 -0
  131. package/dist/registry/memoryBridge.js +60 -0
  132. package/dist/registry/memoryBridge.js.map +1 -0
  133. package/dist/registry/schema.d.ts +307 -0
  134. package/dist/registry/schema.d.ts.map +1 -0
  135. package/dist/registry/schema.js +139 -0
  136. package/dist/registry/schema.js.map +1 -0
  137. package/dist/registry/sqliteStore.d.ts +101 -0
  138. package/dist/registry/sqliteStore.d.ts.map +1 -0
  139. package/dist/registry/sqliteStore.js +688 -0
  140. package/dist/registry/sqliteStore.js.map +1 -0
  141. package/dist/support/chatBackend.d.ts.map +1 -1
  142. package/dist/support/chatBackend.js +35 -4
  143. package/dist/support/chatBackend.js.map +1 -1
  144. package/dist/support/chatTui.d.ts.map +1 -1
  145. package/dist/support/chatTui.js +109 -3
  146. package/dist/support/chatTui.js.map +1 -1
  147. package/dist/support/dashboardHtml.d.ts +1 -1
  148. package/dist/support/dashboardHtml.d.ts.map +1 -1
  149. package/dist/support/dashboardHtml.js +1 -0
  150. package/dist/support/dashboardHtml.js.map +1 -1
  151. package/dist/support/web.d.ts.map +1 -1
  152. package/dist/support/web.js +16 -3
  153. package/dist/support/web.js.map +1 -1
  154. package/package.json +9 -3
  155. package/templates/TOOLS.md +2 -2
@@ -0,0 +1,27 @@
1
+ import type { SqliteIssueStore } from './sqliteStore.js';
2
+ import type { IssueStatus } from './schema.js';
3
+ /**
4
+ * Linear 브릿지 초기화
5
+ * config.yaml에서 linear.enabled: true 일 때만 호출
6
+ */
7
+ export declare function initLinearBridge(apiKey: string, teamId: string): void;
8
+ /**
9
+ * Linear → 로컬: Linear 이슈를 로컬 DB에 동기화
10
+ */
11
+ export declare function syncFromLinear(store: SqliteIssueStore, projectId: string, options?: {
12
+ states?: string[];
13
+ limit?: number;
14
+ }): Promise<{
15
+ created: number;
16
+ updated: number;
17
+ }>;
18
+ /**
19
+ * 로컬 → Linear: 로컬 이슈를 Linear에 생성
20
+ */
21
+ export declare function pushToLinear(store: SqliteIssueStore, issueId: string): Promise<string | null>;
22
+ /**
23
+ * 상태 동기화: 로컬 상태 변경 → Linear 반영
24
+ */
25
+ export declare function syncStatusToLinear(store: SqliteIssueStore, issueId: string, newStatus: IssueStatus): Promise<boolean>;
26
+ export declare function isLinearBridgeReady(): boolean;
27
+ //# sourceMappingURL=linearBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linearBridge.d.ts","sourceRoot":"","sources":["../../src/issues/linearBridge.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAS,WAAW,EAAiB,MAAM,aAAa,CAAC;AAMrE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CASrE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAiD/C;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0CxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,OAAO,CAAC,CAelB;AA4FD,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
@@ -0,0 +1,211 @@
1
+ // ============================================
2
+ // OpenSwarm - Linear ↔ Local Issue Bridge
3
+ // Created: 2026-04-03
4
+ // Purpose: Linear 이슈를 로컬 DB와 양방향 동기화 (optional)
5
+ // Dependencies: @linear/sdk, sqliteStore
6
+ // ============================================
7
+ // Linear SDK는 동적 import (Linear 미사용 시 로드 안 함)
8
+ let linearClient = null;
9
+ let linearTeamId = '';
10
+ /**
11
+ * Linear 브릿지 초기화
12
+ * config.yaml에서 linear.enabled: true 일 때만 호출
13
+ */
14
+ export function initLinearBridge(apiKey, teamId) {
15
+ // 기존 linear.ts의 클라이언트를 재사용하기 위해 동적 import
16
+ linearTeamId = teamId;
17
+ import('@linear/sdk').then(({ LinearClient }) => {
18
+ linearClient = new LinearClient({ apiKey });
19
+ console.log('[LinearBridge] 초기화 완료 — team:', teamId);
20
+ }).catch((err) => {
21
+ console.warn('[LinearBridge] Linear SDK 로드 실패:', err);
22
+ });
23
+ }
24
+ /**
25
+ * Linear → 로컬: Linear 이슈를 로컬 DB에 동기화
26
+ */
27
+ export async function syncFromLinear(store, projectId, options) {
28
+ if (!linearClient) {
29
+ console.warn('[LinearBridge] 클라이언트 미초기화');
30
+ return { created: 0, updated: 0 };
31
+ }
32
+ const states = options?.states ?? ['In Progress', 'Todo', 'Backlog'];
33
+ const limit = options?.limit ?? 50;
34
+ let created = 0;
35
+ let updated = 0;
36
+ try {
37
+ const issues = await linearClient.issues({
38
+ filter: {
39
+ team: { id: { eq: linearTeamId } },
40
+ state: { name: { in: states } },
41
+ },
42
+ first: limit,
43
+ orderBy: 'updatedAt',
44
+ });
45
+ for (const issue of issues.nodes) {
46
+ const existing = findByLinearId(store, issue.id);
47
+ const linearData = await mapLinearToLocal(issue, projectId);
48
+ if (existing) {
49
+ // 이미 존재 → 업데이트
50
+ store.updateIssue(existing.id, linearData);
51
+ updated++;
52
+ }
53
+ else {
54
+ // 새 이슈 → 생성
55
+ store.createIssue({
56
+ ...linearData,
57
+ source: 'linear',
58
+ linearId: issue.id,
59
+ linearIdentifier: issue.identifier,
60
+ linearUrl: issue.url,
61
+ });
62
+ created++;
63
+ }
64
+ }
65
+ console.log(`[LinearBridge] 동기화 완료 — created: ${created}, updated: ${updated}`);
66
+ }
67
+ catch (err) {
68
+ console.error('[LinearBridge] 동기화 실패:', err);
69
+ }
70
+ return { created, updated };
71
+ }
72
+ /**
73
+ * 로컬 → Linear: 로컬 이슈를 Linear에 생성
74
+ */
75
+ export async function pushToLinear(store, issueId) {
76
+ if (!linearClient) {
77
+ console.warn('[LinearBridge] 클라이언트 미초기화');
78
+ return null;
79
+ }
80
+ const issue = store.getIssue(issueId);
81
+ if (!issue)
82
+ return null;
83
+ if (issue.linearId)
84
+ return issue.linearId; // 이미 연결됨
85
+ try {
86
+ const stateId = await resolveLinearStateId(mapStatusToLinear(issue.status));
87
+ const created = await linearClient.createIssue({
88
+ teamId: linearTeamId,
89
+ title: issue.title,
90
+ description: issue.description || undefined,
91
+ priority: mapPriorityToLinear(issue.priority),
92
+ stateId,
93
+ });
94
+ const linearIssue = await created.issue;
95
+ if (!linearIssue)
96
+ return null;
97
+ // 로컬 이슈에 Linear ID 연결
98
+ store.updateIssue(issueId, {
99
+ linearId: linearIssue.id,
100
+ linearIdentifier: linearIssue.identifier,
101
+ linearUrl: linearIssue.url,
102
+ });
103
+ store.addEvent(issueId, 'linked', {
104
+ content: `Linear에 생성: ${linearIssue.identifier}`,
105
+ newValue: linearIssue.identifier,
106
+ });
107
+ console.log(`[LinearBridge] 이슈 ${issueId} → Linear ${linearIssue.identifier}`);
108
+ return linearIssue.id;
109
+ }
110
+ catch (err) {
111
+ console.error('[LinearBridge] Linear 생성 실패:', err);
112
+ return null;
113
+ }
114
+ }
115
+ /**
116
+ * 상태 동기화: 로컬 상태 변경 → Linear 반영
117
+ */
118
+ export async function syncStatusToLinear(store, issueId, newStatus) {
119
+ if (!linearClient)
120
+ return false;
121
+ const issue = store.getIssue(issueId);
122
+ if (!issue?.linearId)
123
+ return false;
124
+ try {
125
+ const stateId = await resolveLinearStateId(mapStatusToLinear(newStatus));
126
+ await linearClient.updateIssue(issue.linearId, { stateId });
127
+ console.log(`[LinearBridge] Linear 상태 업데이트: ${issue.linearIdentifier} → ${newStatus}`);
128
+ return true;
129
+ }
130
+ catch (err) {
131
+ console.error('[LinearBridge] 상태 동기화 실패:', err);
132
+ return false;
133
+ }
134
+ }
135
+ // ============ 매핑 유틸 ============
136
+ function findByLinearId(store, linearId) {
137
+ const { issues } = store.listIssues({ limit: 1, offset: 0 });
138
+ // linear ID로 검색하려면 직접 쿼리가 필요
139
+ // 간단히 전체 목록에서 찾기 (비효율적이지만 동기화는 드물게 실행)
140
+ const { issues: all } = store.listIssues({ limit: 1000, offset: 0 });
141
+ return all.find((i) => i.linearId === linearId) ?? null;
142
+ }
143
+ async function mapLinearToLocal(linearIssue, projectId) {
144
+ const state = await linearIssue.state;
145
+ const stateName = state?.name ?? 'Backlog';
146
+ return {
147
+ projectId,
148
+ title: linearIssue.title,
149
+ description: linearIssue.description ?? '',
150
+ status: mapLinearStatusToLocal(stateName),
151
+ priority: mapLinearPriorityToLocal(linearIssue.priority),
152
+ };
153
+ }
154
+ function mapLinearStatusToLocal(stateName) {
155
+ const map = {
156
+ 'Backlog': 'backlog',
157
+ 'Todo': 'todo',
158
+ 'In Progress': 'in_progress',
159
+ 'In Review': 'in_review',
160
+ 'Done': 'done',
161
+ 'Cancelled': 'cancelled',
162
+ 'Canceled': 'cancelled',
163
+ };
164
+ return map[stateName] ?? 'backlog';
165
+ }
166
+ function mapStatusToLinear(status) {
167
+ const map = {
168
+ backlog: 'Backlog',
169
+ todo: 'Todo',
170
+ in_progress: 'In Progress',
171
+ in_review: 'In Review',
172
+ done: 'Done',
173
+ cancelled: 'Cancelled',
174
+ };
175
+ return map[status];
176
+ }
177
+ function mapLinearPriorityToLocal(priority) {
178
+ // Linear: 0=none, 1=urgent, 2=high, 3=medium, 4=low
179
+ const map = {
180
+ 0: 'none',
181
+ 1: 'urgent',
182
+ 2: 'high',
183
+ 3: 'medium',
184
+ 4: 'low',
185
+ };
186
+ return map[priority] ?? 'medium';
187
+ }
188
+ function mapPriorityToLinear(priority) {
189
+ const map = {
190
+ urgent: 1,
191
+ high: 2,
192
+ medium: 3,
193
+ low: 4,
194
+ none: 0,
195
+ };
196
+ return map[priority];
197
+ }
198
+ async function resolveLinearStateId(stateName) {
199
+ if (!linearClient)
200
+ throw new Error('Linear 클라이언트 미초기화');
201
+ const team = await linearClient.team(linearTeamId);
202
+ const states = await team.states();
203
+ const state = states.nodes.find((s) => s.name === stateName);
204
+ if (!state)
205
+ throw new Error(`Linear 상태 "${stateName}" 없음`);
206
+ return state.id;
207
+ }
208
+ export function isLinearBridgeReady() {
209
+ return linearClient !== null;
210
+ }
211
+ //# sourceMappingURL=linearBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linearBridge.js","sourceRoot":"","sources":["../../src/issues/linearBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { SqliteIssueStore } from './sqliteStore.js';
2
+ import type { Issue } from './schema.js';
3
+ /**
4
+ * 이슈 생성 시 관련 기억 자동 연결
5
+ * - 이슈 제목+설명으로 기존 메모리 검색
6
+ * - 유사도 높은 기억을 자동 링크
7
+ */
8
+ export declare function autoLinkMemories(store: SqliteIssueStore, issue: Issue): Promise<string[]>;
9
+ /**
10
+ * 이슈 완료 시 학습 기억 저장
11
+ * - 해결 과정에서 얻은 통찰을 장기 기억으로 수선
12
+ */
13
+ export declare function saveCompletionInsight(store: SqliteIssueStore, issue: Issue): Promise<string | null>;
14
+ /**
15
+ * 이슈 블로킹 시 제약 조건 기억 저장
16
+ * - 블로킹 원인을 constraint 타입으로 저장 → 향후 유사 이슈 방지
17
+ */
18
+ export declare function saveBlockingConstraint(store: SqliteIssueStore, issue: Issue, reason: string): Promise<string | null>;
19
+ /**
20
+ * 이슈 컨텍스트 강화: 관련 기억 + 유사 이슈 조회
21
+ */
22
+ export declare function enrichIssueContext(store: SqliteIssueStore, issue: Issue): Promise<{
23
+ linkedMemories: Array<{
24
+ id: string;
25
+ content: string;
26
+ score: number;
27
+ }>;
28
+ similarIssues: Issue[];
29
+ }>;
30
+ /**
31
+ * 이벤트 스트림 → 메모리 수선 (백그라운드)
32
+ * - 주기적으로 최근 이벤트를 분석하여 패턴/전략 기억 생성
33
+ */
34
+ export declare function digestRecentEvents(store: SqliteIssueStore, limit?: number): Promise<number>;
35
+ //# sourceMappingURL=memoryBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryBridge.d.ts","sourceRoot":"","sources":["../../src/issues/memoryBridge.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,aAAa,CAAC;AAErD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqDxB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC;IACT,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,aAAa,EAAE,KAAK,EAAE,CAAC;CACxB,CAAC,CAwCD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,gBAAgB,EACvB,KAAK,SAAK,GACT,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
@@ -0,0 +1,184 @@
1
+ // ============================================
2
+ // OpenSwarm - Issue ↔ Memory Bridge
3
+ // Created: 2026-04-03
4
+ // Purpose: 이슈 이벤트를 장기 기억으로 수선 + 메모리 검색으로 이슈 컨텍스트 강화
5
+ // Dependencies: memoryCore, sqliteStore
6
+ // ============================================
7
+ import { saveMemory, searchMemorySafe, saveCognitiveMemory } from '../memory/memoryCore.js';
8
+ /**
9
+ * 이슈 생성 시 관련 기억 자동 연결
10
+ * - 이슈 제목+설명으로 기존 메모리 검색
11
+ * - 유사도 높은 기억을 자동 링크
12
+ */
13
+ export async function autoLinkMemories(store, issue) {
14
+ const query = `${issue.title} ${issue.description}`.trim();
15
+ if (query.length < 10)
16
+ return [];
17
+ const result = await searchMemorySafe(query, {
18
+ limit: 5,
19
+ minSimilarity: 0.6,
20
+ types: ['belief', 'strategy', 'system_pattern', 'constraint', 'decision'],
21
+ });
22
+ if (!result.success || result.memories.length === 0)
23
+ return [];
24
+ const linkedIds = [];
25
+ for (const mem of result.memories) {
26
+ store.linkMemory(issue.id, mem.id);
27
+ linkedIds.push(mem.id);
28
+ }
29
+ console.log(`[MemoryBridge] 이슈 ${issue.id}에 ${linkedIds.length}개 기억 자동 연결`);
30
+ return linkedIds;
31
+ }
32
+ /**
33
+ * 이슈 완료 시 학습 기억 저장
34
+ * - 해결 과정에서 얻은 통찰을 장기 기억으로 수선
35
+ */
36
+ export async function saveCompletionInsight(store, issue) {
37
+ // 이슈 이벤트 히스토리 수집
38
+ const events = store.getEvents(issue.id, 100);
39
+ if (events.length === 0)
40
+ return null;
41
+ // 이벤트에서 코멘트 추출
42
+ const comments = events
43
+ .filter((e) => e.type === 'commented' && e.content)
44
+ .map((e) => e.content)
45
+ .join('\n');
46
+ // 상태 전이 히스토리
47
+ const statusChanges = events
48
+ .filter((e) => e.type === 'status_changed')
49
+ .map((e) => `${e.oldValue} → ${e.newValue}`)
50
+ .join(', ');
51
+ // 이슈에 대한 요약 컨텐츠 생성
52
+ const content = [
53
+ `## 이슈 해결: ${issue.title}`,
54
+ `프로젝트: ${issue.projectId}`,
55
+ `우선순위: ${issue.priority}`,
56
+ issue.complexity ? `복잡도: ${issue.complexity}` : '',
57
+ statusChanges ? `상태 전이: ${statusChanges}` : '',
58
+ issue.relevantFiles.length > 0 ? `관련 파일: ${issue.relevantFiles.join(', ')}` : '',
59
+ comments ? `\n### 코멘트\n${comments}` : '',
60
+ issue.acceptanceCriteria.length > 0
61
+ ? `\n### 수용 기준\n${issue.acceptanceCriteria.map((c) => `- ${c}`).join('\n')}`
62
+ : '',
63
+ ].filter(Boolean).join('\n');
64
+ // 장기 기억으로 저장
65
+ const memoryId = await saveMemory('decision', issue.projectId, issue.title, content, {
66
+ trust: 0.85,
67
+ importance: issue.priority === 'urgent' ? 0.95 : issue.priority === 'high' ? 0.85 : 0.7,
68
+ isVerified: true,
69
+ skipDistillation: true,
70
+ derivedFrom: `issue:${issue.id}`,
71
+ metadata: {
72
+ issueId: issue.id,
73
+ projectId: issue.projectId,
74
+ labels: issue.labels,
75
+ complexity: issue.complexity,
76
+ relevantFiles: issue.relevantFiles,
77
+ },
78
+ });
79
+ if (memoryId) {
80
+ store.linkMemory(issue.id, memoryId);
81
+ console.log(`[MemoryBridge] 이슈 완료 인사이트 저장: ${memoryId}`);
82
+ }
83
+ return memoryId;
84
+ }
85
+ /**
86
+ * 이슈 블로킹 시 제약 조건 기억 저장
87
+ * - 블로킹 원인을 constraint 타입으로 저장 → 향후 유사 이슈 방지
88
+ */
89
+ export async function saveBlockingConstraint(store, issue, reason) {
90
+ const content = `이슈 "${issue.title}" (${issue.projectId}) 블로킹 원인: ${reason}`;
91
+ const memoryId = await saveCognitiveMemory('constraint', content, {
92
+ importance: 0.85,
93
+ confidence: 0.8,
94
+ derivedFrom: `issue:${issue.id}`,
95
+ });
96
+ if (memoryId) {
97
+ store.linkMemory(issue.id, memoryId);
98
+ store.addEvent(issue.id, 'memory_linked', {
99
+ memoryId,
100
+ content: `블로킹 제약 조건 기억 저장: ${reason}`,
101
+ });
102
+ }
103
+ return memoryId;
104
+ }
105
+ /**
106
+ * 이슈 컨텍스트 강화: 관련 기억 + 유사 이슈 조회
107
+ */
108
+ export async function enrichIssueContext(store, issue) {
109
+ // 1. 기존 연결된 기억 조회
110
+ const memoryIds = store.getLinkedMemories(issue.id);
111
+ const linkedMemories = [];
112
+ // 2. 의미적으로 유사한 기억 검색
113
+ const query = `${issue.title} ${issue.description}`;
114
+ const result = await searchMemorySafe(query, {
115
+ limit: 10,
116
+ minSimilarity: 0.5,
117
+ });
118
+ if (result.success) {
119
+ for (const mem of result.memories) {
120
+ linkedMemories.push({
121
+ id: mem.id,
122
+ content: mem.content,
123
+ score: mem.score,
124
+ });
125
+ }
126
+ }
127
+ // 3. 유사 이슈 검색 (FTS)
128
+ const searchTerms = issue.title.split(/\s+/).filter((t) => t.length > 2).slice(0, 3);
129
+ const similarIssues = [];
130
+ if (searchTerms.length > 0) {
131
+ const { issues } = store.listIssues({
132
+ search: searchTerms.join(' OR '),
133
+ limit: 5,
134
+ offset: 0,
135
+ });
136
+ for (const si of issues) {
137
+ if (si.id !== issue.id) {
138
+ similarIssues.push(si);
139
+ }
140
+ }
141
+ }
142
+ return { linkedMemories, similarIssues };
143
+ }
144
+ /**
145
+ * 이벤트 스트림 → 메모리 수선 (백그라운드)
146
+ * - 주기적으로 최근 이벤트를 분석하여 패턴/전략 기억 생성
147
+ */
148
+ export async function digestRecentEvents(store, limit = 50) {
149
+ const events = store.getRecentEvents(limit);
150
+ if (events.length === 0)
151
+ return 0;
152
+ // 패턴 분석: 반복 블로킹
153
+ const blockEvents = events.filter((e) => e.type === 'status_changed' && e.newValue === 'blocked');
154
+ if (blockEvents.length >= 3) {
155
+ const reasons = blockEvents
156
+ .map((e) => e.content || e.oldValue || '')
157
+ .filter(Boolean);
158
+ if (reasons.length > 0) {
159
+ await saveCognitiveMemory('strategy', [
160
+ '반복 블로킹 패턴 감지:',
161
+ ...reasons.map((r) => `- ${r}`),
162
+ `총 ${blockEvents.length}건 (최근 ${limit}개 이벤트 중)`,
163
+ ].join('\n'), {
164
+ importance: 0.85,
165
+ confidence: 0.75,
166
+ derivedFrom: 'issue-event-digest',
167
+ });
168
+ }
169
+ }
170
+ // 패턴 분석: 빈번한 우선순위 변경
171
+ const priorityChanges = events.filter((e) => e.type === 'priority_changed');
172
+ if (priorityChanges.length >= 5) {
173
+ await saveCognitiveMemory('system_pattern', [
174
+ `최근 우선순위 변경 빈도 높음 (${priorityChanges.length}건)`,
175
+ '우선순위 기준 재검토 필요',
176
+ ].join('\n'), {
177
+ importance: 0.7,
178
+ confidence: 0.6,
179
+ derivedFrom: 'issue-event-digest',
180
+ });
181
+ }
182
+ return events.length;
183
+ }
184
+ //# sourceMappingURL=memoryBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryBridge.js","sourceRoot":"","sources":["../../src/issues/memoryBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ import { z } from 'zod';
2
+ export declare const IssueStatusSchema: z.ZodEnum<{
3
+ in_progress: "in_progress";
4
+ backlog: "backlog";
5
+ todo: "todo";
6
+ in_review: "in_review";
7
+ done: "done";
8
+ cancelled: "cancelled";
9
+ }>;
10
+ export declare const IssuePrioritySchema: z.ZodEnum<{
11
+ medium: "medium";
12
+ none: "none";
13
+ low: "low";
14
+ high: "high";
15
+ urgent: "urgent";
16
+ }>;
17
+ export declare const IssueSourceSchema: z.ZodEnum<{
18
+ discord: "discord";
19
+ linear: "linear";
20
+ local: "local";
21
+ github: "github";
22
+ }>;
23
+ export declare const IssueEventTypeSchema: z.ZodEnum<{
24
+ closed: "closed";
25
+ created: "created";
26
+ status_changed: "status_changed";
27
+ memory_linked: "memory_linked";
28
+ priority_changed: "priority_changed";
29
+ assigned: "assigned";
30
+ commented: "commented";
31
+ labeled: "labeled";
32
+ linked: "linked";
33
+ reopened: "reopened";
34
+ }>;
35
+ export declare const IssueEventSchema: z.ZodObject<{
36
+ id: z.ZodString;
37
+ issueId: z.ZodString;
38
+ type: z.ZodEnum<{
39
+ closed: "closed";
40
+ created: "created";
41
+ status_changed: "status_changed";
42
+ memory_linked: "memory_linked";
43
+ priority_changed: "priority_changed";
44
+ assigned: "assigned";
45
+ commented: "commented";
46
+ labeled: "labeled";
47
+ linked: "linked";
48
+ reopened: "reopened";
49
+ }>;
50
+ oldValue: z.ZodOptional<z.ZodString>;
51
+ newValue: z.ZodOptional<z.ZodString>;
52
+ content: z.ZodOptional<z.ZodString>;
53
+ memoryId: z.ZodOptional<z.ZodString>;
54
+ actor: z.ZodDefault<z.ZodString>;
55
+ createdAt: z.ZodString;
56
+ }, z.core.$strip>;
57
+ export declare const IssueSchema: z.ZodObject<{
58
+ id: z.ZodString;
59
+ projectId: z.ZodString;
60
+ title: z.ZodString;
61
+ description: z.ZodDefault<z.ZodString>;
62
+ status: z.ZodDefault<z.ZodEnum<{
63
+ in_progress: "in_progress";
64
+ backlog: "backlog";
65
+ todo: "todo";
66
+ in_review: "in_review";
67
+ done: "done";
68
+ cancelled: "cancelled";
69
+ }>>;
70
+ priority: z.ZodDefault<z.ZodEnum<{
71
+ medium: "medium";
72
+ none: "none";
73
+ low: "low";
74
+ high: "high";
75
+ urgent: "urgent";
76
+ }>>;
77
+ source: z.ZodDefault<z.ZodEnum<{
78
+ discord: "discord";
79
+ linear: "linear";
80
+ local: "local";
81
+ github: "github";
82
+ }>>;
83
+ labels: z.ZodDefault<z.ZodArray<z.ZodString>>;
84
+ assignee: z.ZodOptional<z.ZodString>;
85
+ milestone: z.ZodOptional<z.ZodString>;
86
+ relevantFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
87
+ acceptanceCriteria: z.ZodDefault<z.ZodArray<z.ZodString>>;
88
+ estimateMinutes: z.ZodOptional<z.ZodNumber>;
89
+ complexity: z.ZodOptional<z.ZodEnum<{
90
+ simple: "simple";
91
+ complex: "complex";
92
+ moderate: "moderate";
93
+ very_complex: "very_complex";
94
+ }>>;
95
+ dependencies: z.ZodDefault<z.ZodArray<z.ZodString>>;
96
+ parentId: z.ZodOptional<z.ZodString>;
97
+ childIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
98
+ linearId: z.ZodOptional<z.ZodString>;
99
+ linearIdentifier: z.ZodOptional<z.ZodString>;
100
+ linearUrl: z.ZodOptional<z.ZodString>;
101
+ memoryIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
102
+ createdAt: z.ZodString;
103
+ updatedAt: z.ZodString;
104
+ closedAt: z.ZodOptional<z.ZodString>;
105
+ }, z.core.$strip>;
106
+ export declare const LabelSchema: z.ZodObject<{
107
+ id: z.ZodString;
108
+ name: z.ZodString;
109
+ color: z.ZodDefault<z.ZodString>;
110
+ description: z.ZodOptional<z.ZodString>;
111
+ }, z.core.$strip>;
112
+ export declare const MilestoneSchema: z.ZodObject<{
113
+ id: z.ZodString;
114
+ name: z.ZodString;
115
+ description: z.ZodOptional<z.ZodString>;
116
+ dueDate: z.ZodOptional<z.ZodString>;
117
+ status: z.ZodDefault<z.ZodEnum<{
118
+ closed: "closed";
119
+ active: "active";
120
+ }>>;
121
+ createdAt: z.ZodString;
122
+ }, z.core.$strip>;
123
+ export declare const IssueFilterSchema: z.ZodObject<{
124
+ projectId: z.ZodOptional<z.ZodString>;
125
+ status: z.ZodOptional<z.ZodArray<z.ZodEnum<{
126
+ in_progress: "in_progress";
127
+ backlog: "backlog";
128
+ todo: "todo";
129
+ in_review: "in_review";
130
+ done: "done";
131
+ cancelled: "cancelled";
132
+ }>>>;
133
+ priority: z.ZodOptional<z.ZodArray<z.ZodEnum<{
134
+ medium: "medium";
135
+ none: "none";
136
+ low: "low";
137
+ high: "high";
138
+ urgent: "urgent";
139
+ }>>>;
140
+ labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
141
+ assignee: z.ZodOptional<z.ZodString>;
142
+ source: z.ZodOptional<z.ZodEnum<{
143
+ discord: "discord";
144
+ linear: "linear";
145
+ local: "local";
146
+ github: "github";
147
+ }>>;
148
+ parentId: z.ZodOptional<z.ZodString>;
149
+ search: z.ZodOptional<z.ZodString>;
150
+ limit: z.ZodDefault<z.ZodNumber>;
151
+ offset: z.ZodDefault<z.ZodNumber>;
152
+ }, z.core.$strip>;
153
+ export type IssueStatus = z.infer<typeof IssueStatusSchema>;
154
+ export type IssuePriority = z.infer<typeof IssuePrioritySchema>;
155
+ export type IssueSource = z.infer<typeof IssueSourceSchema>;
156
+ export type IssueEventType = z.infer<typeof IssueEventTypeSchema>;
157
+ export type IssueEvent = z.infer<typeof IssueEventSchema>;
158
+ export type Issue = z.infer<typeof IssueSchema>;
159
+ export type Label = z.infer<typeof LabelSchema>;
160
+ export type Milestone = z.infer<typeof MilestoneSchema>;
161
+ export type IssueFilter = z.infer<typeof IssueFilterSchema>;
162
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/issues/schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;EAO5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAM9B,CAAC;AAGH,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;;;;;;EAW/B,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;iBAc3B,CAAC;AAGH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqCtB,CAAC;AAGH,eAAO,MAAM,WAAW;;;;;iBAKtB,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;;;;;iBAO1B,CAAC;AAGH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW5B,CAAC;AAGH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}