@spaceflow/core 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +1176 -0
  2. package/README.md +105 -0
  3. package/nest-cli.json +10 -0
  4. package/package.json +128 -0
  5. package/rspack.config.mjs +62 -0
  6. package/src/__mocks__/@opencode-ai/sdk.js +9 -0
  7. package/src/__mocks__/c12.ts +3 -0
  8. package/src/app.module.ts +18 -0
  9. package/src/config/ci.config.ts +29 -0
  10. package/src/config/config-loader.ts +101 -0
  11. package/src/config/config-reader.module.ts +16 -0
  12. package/src/config/config-reader.service.ts +133 -0
  13. package/src/config/feishu.config.ts +35 -0
  14. package/src/config/git-provider.config.ts +29 -0
  15. package/src/config/index.ts +29 -0
  16. package/src/config/llm.config.ts +110 -0
  17. package/src/config/schema-generator.service.ts +129 -0
  18. package/src/config/spaceflow.config.ts +292 -0
  19. package/src/config/storage.config.ts +33 -0
  20. package/src/extension-system/extension.interface.ts +221 -0
  21. package/src/extension-system/index.ts +1 -0
  22. package/src/index.ts +80 -0
  23. package/src/locales/en/translation.json +11 -0
  24. package/src/locales/zh-cn/translation.json +11 -0
  25. package/src/shared/claude-setup/claude-setup.module.ts +8 -0
  26. package/src/shared/claude-setup/claude-setup.service.ts +131 -0
  27. package/src/shared/claude-setup/index.ts +2 -0
  28. package/src/shared/editor-config/index.ts +23 -0
  29. package/src/shared/feishu-sdk/feishu-sdk.module.ts +77 -0
  30. package/src/shared/feishu-sdk/feishu-sdk.service.ts +130 -0
  31. package/src/shared/feishu-sdk/fieshu-card.service.ts +139 -0
  32. package/src/shared/feishu-sdk/index.ts +4 -0
  33. package/src/shared/feishu-sdk/types/card-action.ts +132 -0
  34. package/src/shared/feishu-sdk/types/card.ts +64 -0
  35. package/src/shared/feishu-sdk/types/common.ts +22 -0
  36. package/src/shared/feishu-sdk/types/index.ts +46 -0
  37. package/src/shared/feishu-sdk/types/message.ts +35 -0
  38. package/src/shared/feishu-sdk/types/module.ts +21 -0
  39. package/src/shared/feishu-sdk/types/user.ts +77 -0
  40. package/src/shared/git-provider/adapters/gitea.adapter.spec.ts +473 -0
  41. package/src/shared/git-provider/adapters/gitea.adapter.ts +499 -0
  42. package/src/shared/git-provider/adapters/github.adapter.spec.ts +341 -0
  43. package/src/shared/git-provider/adapters/github.adapter.ts +830 -0
  44. package/src/shared/git-provider/adapters/gitlab.adapter.ts +839 -0
  45. package/src/shared/git-provider/adapters/index.ts +3 -0
  46. package/src/shared/git-provider/detect-provider.spec.ts +195 -0
  47. package/src/shared/git-provider/detect-provider.ts +112 -0
  48. package/src/shared/git-provider/git-provider.interface.ts +188 -0
  49. package/src/shared/git-provider/git-provider.module.ts +73 -0
  50. package/src/shared/git-provider/git-provider.service.spec.ts +282 -0
  51. package/src/shared/git-provider/git-provider.service.ts +309 -0
  52. package/src/shared/git-provider/index.ts +7 -0
  53. package/src/shared/git-provider/parse-repo-url.spec.ts +221 -0
  54. package/src/shared/git-provider/parse-repo-url.ts +155 -0
  55. package/src/shared/git-provider/types.ts +434 -0
  56. package/src/shared/git-sdk/git-sdk-diff.utils.spec.ts +344 -0
  57. package/src/shared/git-sdk/git-sdk-diff.utils.ts +151 -0
  58. package/src/shared/git-sdk/git-sdk.module.ts +8 -0
  59. package/src/shared/git-sdk/git-sdk.service.ts +235 -0
  60. package/src/shared/git-sdk/git-sdk.types.ts +25 -0
  61. package/src/shared/git-sdk/index.ts +4 -0
  62. package/src/shared/i18n/i18n.spec.ts +96 -0
  63. package/src/shared/i18n/i18n.ts +86 -0
  64. package/src/shared/i18n/index.ts +1 -0
  65. package/src/shared/i18n/locale-detect.ts +134 -0
  66. package/src/shared/llm-jsonput/index.ts +94 -0
  67. package/src/shared/llm-jsonput/types.ts +17 -0
  68. package/src/shared/llm-proxy/adapters/claude-code.adapter.spec.ts +131 -0
  69. package/src/shared/llm-proxy/adapters/claude-code.adapter.ts +208 -0
  70. package/src/shared/llm-proxy/adapters/index.ts +4 -0
  71. package/src/shared/llm-proxy/adapters/llm-adapter.interface.ts +23 -0
  72. package/src/shared/llm-proxy/adapters/open-code.adapter.ts +342 -0
  73. package/src/shared/llm-proxy/adapters/openai.adapter.spec.ts +215 -0
  74. package/src/shared/llm-proxy/adapters/openai.adapter.ts +153 -0
  75. package/src/shared/llm-proxy/index.ts +6 -0
  76. package/src/shared/llm-proxy/interfaces/config.interface.ts +32 -0
  77. package/src/shared/llm-proxy/interfaces/index.ts +4 -0
  78. package/src/shared/llm-proxy/interfaces/message.interface.ts +48 -0
  79. package/src/shared/llm-proxy/interfaces/session.interface.ts +28 -0
  80. package/src/shared/llm-proxy/llm-proxy.module.ts +140 -0
  81. package/src/shared/llm-proxy/llm-proxy.service.spec.ts +303 -0
  82. package/src/shared/llm-proxy/llm-proxy.service.ts +132 -0
  83. package/src/shared/llm-proxy/llm-session.spec.ts +111 -0
  84. package/src/shared/llm-proxy/llm-session.ts +109 -0
  85. package/src/shared/llm-proxy/stream-logger.ts +97 -0
  86. package/src/shared/logger/index.ts +11 -0
  87. package/src/shared/logger/logger.interface.ts +93 -0
  88. package/src/shared/logger/logger.spec.ts +178 -0
  89. package/src/shared/logger/logger.ts +175 -0
  90. package/src/shared/logger/renderers/plain.renderer.ts +116 -0
  91. package/src/shared/logger/renderers/tui.renderer.ts +162 -0
  92. package/src/shared/mcp/index.ts +332 -0
  93. package/src/shared/output/index.ts +2 -0
  94. package/src/shared/output/output.module.ts +9 -0
  95. package/src/shared/output/output.service.ts +97 -0
  96. package/src/shared/package-manager/index.ts +115 -0
  97. package/src/shared/parallel/index.ts +1 -0
  98. package/src/shared/parallel/parallel-executor.ts +169 -0
  99. package/src/shared/rspack-config/index.ts +1 -0
  100. package/src/shared/rspack-config/rspack-config.ts +157 -0
  101. package/src/shared/source-utils/index.ts +130 -0
  102. package/src/shared/spaceflow-dir/index.ts +158 -0
  103. package/src/shared/storage/adapters/file.adapter.ts +113 -0
  104. package/src/shared/storage/adapters/index.ts +3 -0
  105. package/src/shared/storage/adapters/memory.adapter.ts +50 -0
  106. package/src/shared/storage/adapters/storage-adapter.interface.ts +48 -0
  107. package/src/shared/storage/index.ts +4 -0
  108. package/src/shared/storage/storage.module.ts +150 -0
  109. package/src/shared/storage/storage.service.ts +293 -0
  110. package/src/shared/storage/types.ts +51 -0
  111. package/src/shared/verbose/index.ts +73 -0
  112. package/test/app.e2e-spec.ts +22 -0
  113. package/tsconfig.build.json +4 -0
  114. package/tsconfig.json +25 -0
  115. package/tsconfig.skill.json +18 -0
  116. package/vitest.config.ts +58 -0
@@ -0,0 +1,434 @@
1
+ /**
2
+ * Git Provider 通用类型定义
3
+ * 适用于 Gitea、GitHub 等多种 Git 托管平台
4
+ */
5
+
6
+ /** Git Provider 平台类型 */
7
+ export type GitProviderType = "gitea" | "github" | "gitlab";
8
+
9
+ /** Git Provider 模块配置选项 */
10
+ export interface GitProviderModuleOptions {
11
+ /** Git Provider 平台类型 */
12
+ provider: GitProviderType;
13
+ /** 服务器 URL */
14
+ baseUrl: string;
15
+ /** API Token */
16
+ token: string;
17
+ }
18
+
19
+ /** Git Provider 模块异步配置选项 */
20
+ export interface GitProviderModuleAsyncOptions {
21
+ useFactory: (...args: unknown[]) => Promise<GitProviderModuleOptions> | GitProviderModuleOptions;
22
+ inject?: any[];
23
+ }
24
+
25
+ /** 注入令牌 */
26
+ export const GIT_PROVIDER_MODULE_OPTIONS = "GIT_PROVIDER_MODULE_OPTIONS";
27
+
28
+ /** 分支保护规则 */
29
+ export interface BranchProtection {
30
+ approvals_whitelist_teams?: string[];
31
+ approvals_whitelist_username?: string[];
32
+ block_admin_merge_override?: boolean;
33
+ block_on_official_review_requests?: boolean;
34
+ block_on_outdated_branch?: boolean;
35
+ block_on_rejected_reviews?: boolean;
36
+ branch_name?: string;
37
+ created_at?: string;
38
+ dismiss_stale_approvals?: boolean;
39
+ enable_approvals_whitelist?: boolean;
40
+ enable_force_push?: boolean;
41
+ enable_force_push_allowlist?: boolean;
42
+ enable_merge_whitelist?: boolean;
43
+ enable_push?: boolean;
44
+ enable_push_whitelist?: boolean;
45
+ enable_status_check?: boolean;
46
+ force_push_allowlist_deploy_keys?: boolean;
47
+ force_push_allowlist_teams?: string[];
48
+ force_push_allowlist_usernames?: string[];
49
+ ignore_stale_approvals?: boolean;
50
+ merge_whitelist_teams?: string[];
51
+ merge_whitelist_usernames?: string[];
52
+ priority?: number;
53
+ protected_file_patterns?: string;
54
+ push_whitelist_deploy_keys?: boolean;
55
+ push_whitelist_teams?: string[];
56
+ push_whitelist_usernames?: string[];
57
+ require_signed_commits?: boolean;
58
+ required_approvals?: number;
59
+ rule_name?: string;
60
+ status_check_contexts?: string[];
61
+ unprotected_file_patterns?: string;
62
+ updated_at?: string;
63
+ }
64
+
65
+ /** 创建分支保护规则选项 */
66
+ export interface CreateBranchProtectionOption {
67
+ approvals_whitelist_teams?: string[];
68
+ approvals_whitelist_username?: string[];
69
+ block_admin_merge_override?: boolean;
70
+ block_on_official_review_requests?: boolean;
71
+ block_on_outdated_branch?: boolean;
72
+ block_on_rejected_reviews?: boolean;
73
+ /** 分支名称或通配符规则 */
74
+ branch_name?: string;
75
+ /** 规则名称 */
76
+ rule_name?: string;
77
+ dismiss_stale_approvals?: boolean;
78
+ enable_approvals_whitelist?: boolean;
79
+ enable_force_push?: boolean;
80
+ enable_force_push_allowlist?: boolean;
81
+ enable_merge_whitelist?: boolean;
82
+ /** 是否允许推送 */
83
+ enable_push?: boolean;
84
+ enable_push_whitelist?: boolean;
85
+ enable_status_check?: boolean;
86
+ force_push_allowlist_deploy_keys?: boolean;
87
+ force_push_allowlist_teams?: string[];
88
+ force_push_allowlist_usernames?: string[];
89
+ ignore_stale_approvals?: boolean;
90
+ merge_whitelist_teams?: string[];
91
+ merge_whitelist_usernames?: string[];
92
+ priority?: number;
93
+ protected_file_patterns?: string;
94
+ push_whitelist_deploy_keys?: boolean;
95
+ push_whitelist_teams?: string[];
96
+ push_whitelist_usernames?: string[];
97
+ require_signed_commits?: boolean;
98
+ required_approvals?: number;
99
+ status_check_contexts?: string[];
100
+ unprotected_file_patterns?: string;
101
+ }
102
+
103
+ /** 编辑分支保护规则选项 */
104
+ export interface EditBranchProtectionOption {
105
+ approvals_whitelist_teams?: string[];
106
+ approvals_whitelist_username?: string[];
107
+ block_admin_merge_override?: boolean;
108
+ block_on_official_review_requests?: boolean;
109
+ block_on_outdated_branch?: boolean;
110
+ block_on_rejected_reviews?: boolean;
111
+ dismiss_stale_approvals?: boolean;
112
+ enable_approvals_whitelist?: boolean;
113
+ enable_force_push?: boolean;
114
+ enable_force_push_allowlist?: boolean;
115
+ enable_merge_whitelist?: boolean;
116
+ /** 是否允许推送 */
117
+ enable_push?: boolean;
118
+ enable_push_whitelist?: boolean;
119
+ enable_status_check?: boolean;
120
+ force_push_allowlist_deploy_keys?: boolean;
121
+ force_push_allowlist_teams?: string[];
122
+ force_push_allowlist_usernames?: string[];
123
+ ignore_stale_approvals?: boolean;
124
+ merge_whitelist_teams?: string[];
125
+ merge_whitelist_usernames?: string[];
126
+ priority?: number;
127
+ protected_file_patterns?: string;
128
+ push_whitelist_deploy_keys?: boolean;
129
+ push_whitelist_teams?: string[];
130
+ push_whitelist_usernames?: string[];
131
+ require_signed_commits?: boolean;
132
+ required_approvals?: number;
133
+ status_check_contexts?: string[];
134
+ unprotected_file_patterns?: string;
135
+ }
136
+
137
+ /** 分支信息 */
138
+ export interface Branch {
139
+ commit?: {
140
+ id?: string;
141
+ message?: string;
142
+ timestamp?: string;
143
+ };
144
+ effective_branch_protection_name?: string;
145
+ enable_status_check?: boolean;
146
+ name?: string;
147
+ protected?: boolean;
148
+ required_approvals?: number;
149
+ status_check_contexts?: string[];
150
+ user_can_merge?: boolean;
151
+ user_can_push?: boolean;
152
+ }
153
+
154
+ /** 仓库信息 */
155
+ export interface Repository {
156
+ id?: number;
157
+ owner?: {
158
+ id?: number;
159
+ login?: string;
160
+ full_name?: string;
161
+ };
162
+ name?: string;
163
+ full_name?: string;
164
+ default_branch?: string;
165
+ }
166
+
167
+ /** Pull Request 信息 */
168
+ export interface PullRequest {
169
+ id?: number;
170
+ number?: number;
171
+ title?: string;
172
+ body?: string;
173
+ state?: string;
174
+ head?: {
175
+ ref?: string;
176
+ sha?: string;
177
+ repo?: Repository;
178
+ };
179
+ base?: {
180
+ ref?: string;
181
+ sha?: string;
182
+ repo?: Repository;
183
+ };
184
+ user?: {
185
+ id?: number;
186
+ login?: string;
187
+ };
188
+ /** PR 指定的评审人(个人用户) */
189
+ requested_reviewers?: Array<{
190
+ id?: number;
191
+ login?: string;
192
+ }>;
193
+ /** PR 指定的评审团队 */
194
+ requested_reviewers_teams?: Array<{
195
+ id?: number;
196
+ name?: string;
197
+ /** 团队成员 */
198
+ members?: Array<{
199
+ id?: number;
200
+ login?: string;
201
+ }>;
202
+ }>;
203
+ created_at?: string;
204
+ updated_at?: string;
205
+ merged_at?: string;
206
+ merge_base?: string;
207
+ }
208
+
209
+ /** 编辑 PR 的选项 */
210
+ export interface EditPullRequestOption {
211
+ title?: string;
212
+ body?: string;
213
+ state?: "open" | "closed";
214
+ base?: string;
215
+ }
216
+
217
+ /** PR Commit 信息 */
218
+ export interface PullRequestCommit {
219
+ sha?: string;
220
+ commit?: {
221
+ message?: string;
222
+ author?: {
223
+ name?: string;
224
+ email?: string;
225
+ date?: string;
226
+ };
227
+ };
228
+ author?: {
229
+ id?: number;
230
+ login?: string;
231
+ };
232
+ committer?: {
233
+ id?: number;
234
+ login?: string;
235
+ };
236
+ }
237
+
238
+ /** 文件变更信息 */
239
+ export interface ChangedFile {
240
+ filename?: string;
241
+ status?: string;
242
+ additions?: number;
243
+ deletions?: number;
244
+ changes?: number;
245
+ patch?: string;
246
+ raw_url?: string;
247
+ contents_url?: string;
248
+ }
249
+
250
+ /** Commit 详细信息(包含文件变更) */
251
+ export interface CommitInfo extends PullRequestCommit {
252
+ files?: ChangedFile[];
253
+ }
254
+
255
+ /** Issue/PR 评论 */
256
+ export interface IssueComment {
257
+ id?: number;
258
+ body?: string;
259
+ user?: {
260
+ id?: number;
261
+ login?: string;
262
+ };
263
+ created_at?: string;
264
+ updated_at?: string;
265
+ }
266
+
267
+ /** 创建 Issue 评论选项 */
268
+ export interface CreateIssueCommentOption {
269
+ body: string;
270
+ }
271
+
272
+ /** 创建 Issue 的选项 */
273
+ export interface CreateIssueOption {
274
+ /** Issue 标题 */
275
+ title: string;
276
+ /** Issue 内容 */
277
+ body?: string;
278
+ /** 指派人用户名列表 */
279
+ assignees?: string[];
280
+ /** 标签 ID 列表 */
281
+ labels?: number[];
282
+ /** 里程碑 ID */
283
+ milestone?: number;
284
+ /** 截止日期 */
285
+ due_date?: string;
286
+ }
287
+
288
+ /** Issue 响应 */
289
+ export interface Issue {
290
+ id?: number;
291
+ number?: number;
292
+ title?: string;
293
+ body?: string;
294
+ state?: string;
295
+ user?: {
296
+ id?: number;
297
+ login?: string;
298
+ };
299
+ labels?: Array<{
300
+ id?: number;
301
+ name?: string;
302
+ color?: string;
303
+ }>;
304
+ assignees?: Array<{
305
+ id?: number;
306
+ login?: string;
307
+ }>;
308
+ milestone?: {
309
+ id?: number;
310
+ title?: string;
311
+ };
312
+ created_at?: string;
313
+ updated_at?: string;
314
+ closed_at?: string;
315
+ html_url?: string;
316
+ }
317
+
318
+ /** PR Review 事件类型 */
319
+ export type ReviewStateType = "APPROVE" | "REQUEST_CHANGES" | "COMMENT" | "PENDING";
320
+
321
+ /** PR Review 行级评论 */
322
+ export interface CreatePullReviewComment {
323
+ /** 文件路径 */
324
+ path: string;
325
+ /** 评论内容 */
326
+ body: string;
327
+ /** 旧文件行号(删除行),新增行设为 0 */
328
+ old_position?: number;
329
+ /** 新文件行号(新增/修改行),删除行设为 0 */
330
+ new_position?: number;
331
+ }
332
+
333
+ /** 创建 PR Review 的选项 */
334
+ export interface CreatePullReviewOption {
335
+ /** Review 事件类型 */
336
+ event?: ReviewStateType;
337
+ /** Review 主体评论 */
338
+ body?: string;
339
+ /** 行级评论列表 */
340
+ comments?: CreatePullReviewComment[];
341
+ /** 提交 SHA(可选) */
342
+ commit_id?: string;
343
+ }
344
+
345
+ /** PR Review 响应 */
346
+ export interface PullReview {
347
+ id?: number;
348
+ body?: string;
349
+ state?: string;
350
+ user?: {
351
+ id?: number;
352
+ login?: string;
353
+ };
354
+ created_at?: string;
355
+ updated_at?: string;
356
+ commit_id?: string;
357
+ }
358
+
359
+ /** PR Review 行级评论响应 */
360
+ export interface PullReviewComment {
361
+ id?: number;
362
+ body?: string;
363
+ path?: string;
364
+ position?: number;
365
+ original_position?: number;
366
+ commit_id?: string;
367
+ original_commit_id?: string;
368
+ diff_hunk?: string;
369
+ pull_request_review_id?: number;
370
+ user?: {
371
+ id?: number;
372
+ login?: string;
373
+ };
374
+ /** 解决者,如果不为 null 表示评论已被标记为已解决 */
375
+ resolver?: {
376
+ id?: number;
377
+ login?: string;
378
+ } | null;
379
+ created_at?: string;
380
+ updated_at?: string;
381
+ html_url?: string;
382
+ }
383
+
384
+ /** 用户信息 */
385
+ export interface User {
386
+ id?: number;
387
+ login?: string;
388
+ full_name?: string;
389
+ email?: string;
390
+ avatar_url?: string;
391
+ }
392
+
393
+ /** 仓库目录/文件条目 */
394
+ export interface RepositoryContent {
395
+ /** 文件名 */
396
+ name: string;
397
+ /** 文件路径 */
398
+ path: string;
399
+ /** 类型:file 或 dir */
400
+ type: "file" | "dir";
401
+ /** 文件大小(字节) */
402
+ size?: number;
403
+ /** 下载 URL */
404
+ download_url?: string;
405
+ }
406
+
407
+ /** 远程仓库引用(解析自浏览器 URL) */
408
+ export interface RemoteRepoRef {
409
+ /** 仓库所有者 */
410
+ owner: string;
411
+ /** 仓库名称 */
412
+ repo: string;
413
+ /** 子目录路径(空字符串表示根目录) */
414
+ path: string;
415
+ /** 分支/标签(undefined 表示默认分支) */
416
+ ref?: string;
417
+ /** 来源平台类型 */
418
+ provider: GitProviderType;
419
+ /** 原始服务器 URL(如 https://git.bjxgj.com) */
420
+ serverUrl: string;
421
+ }
422
+
423
+ /** 评论/Issue 的 Reaction(表情符号反应) */
424
+ export interface Reaction {
425
+ /** 添加 reaction 的用户 */
426
+ user?: {
427
+ id?: number;
428
+ login?: string;
429
+ };
430
+ /** reaction 内容,如 +1, -1, laugh, hooray, confused, heart, rocket, eyes */
431
+ content?: string;
432
+ /** 创建时间 */
433
+ created_at?: string;
434
+ }