@spaceflow/core 0.8.0 → 0.10.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 (87) hide show
  1. package/README.md +75 -56
  2. package/dist/index.js +5589 -970
  3. package/dist/index.js.map +1 -1
  4. package/package.json +9 -3
  5. package/src/cli-runtime/di/config.ts +157 -0
  6. package/src/cli-runtime/di/container.ts +120 -0
  7. package/src/cli-runtime/di/index.ts +3 -0
  8. package/src/cli-runtime/di/services.ts +53 -0
  9. package/src/cli-runtime/extension-loader.ts +74 -0
  10. package/src/{shared → cli-runtime}/i18n/index.ts +7 -1
  11. package/src/cli-runtime/i18n/init.ts +117 -0
  12. package/src/cli-runtime/index.ts +131 -0
  13. package/src/cli-runtime/internal-extensions.ts +33 -0
  14. package/src/commands/build/build.service.ts +323 -0
  15. package/src/commands/build/index.ts +49 -0
  16. package/src/commands/clear/clear.service.ts +159 -0
  17. package/src/commands/clear/index.ts +35 -0
  18. package/src/commands/commit/commit.config.ts +168 -0
  19. package/src/commands/commit/commit.service.ts +950 -0
  20. package/src/commands/commit/index.ts +58 -0
  21. package/src/commands/create/create.service.ts +318 -0
  22. package/src/commands/create/index.ts +42 -0
  23. package/src/commands/dev/index.ts +30 -0
  24. package/src/commands/install/index.ts +65 -0
  25. package/src/commands/install/install.service.ts +1539 -0
  26. package/src/commands/list/index.ts +33 -0
  27. package/src/commands/list/list.service.ts +127 -0
  28. package/src/commands/mcp/index.ts +37 -0
  29. package/src/commands/mcp/mcp.service.ts +246 -0
  30. package/src/commands/runx/index.ts +47 -0
  31. package/src/commands/runx/runx.service.ts +142 -0
  32. package/src/commands/runx/runx.utils.ts +83 -0
  33. package/src/commands/schema/index.ts +30 -0
  34. package/src/commands/setup/index.ts +34 -0
  35. package/src/commands/setup/setup.service.ts +234 -0
  36. package/src/commands/uninstall/index.ts +42 -0
  37. package/src/commands/uninstall/uninstall.service.ts +166 -0
  38. package/src/commands/update/index.ts +42 -0
  39. package/src/commands/update/update.service.ts +373 -0
  40. package/src/config/index.ts +1 -30
  41. package/src/config/spaceflow.config.ts +226 -278
  42. package/src/index.ts +11 -1
  43. package/src/locales/en/build.json +22 -0
  44. package/src/locales/en/clear.json +16 -0
  45. package/src/locales/en/commit.json +45 -0
  46. package/src/locales/en/create.json +27 -0
  47. package/src/locales/en/dev.json +5 -0
  48. package/src/locales/en/install.json +71 -0
  49. package/src/locales/en/list.json +8 -0
  50. package/src/locales/en/mcp.json +19 -0
  51. package/src/locales/en/runx.json +13 -0
  52. package/src/locales/en/schema.json +4 -0
  53. package/src/locales/en/setup.json +14 -0
  54. package/src/locales/en/uninstall.json +18 -0
  55. package/src/locales/en/update.json +28 -0
  56. package/src/locales/zh-cn/build.json +22 -0
  57. package/src/locales/zh-cn/clear.json +16 -0
  58. package/src/locales/zh-cn/commit.json +45 -0
  59. package/src/locales/zh-cn/create.json +27 -0
  60. package/src/locales/zh-cn/dev.json +5 -0
  61. package/src/locales/zh-cn/install.json +71 -0
  62. package/src/locales/zh-cn/list.json +8 -0
  63. package/src/locales/zh-cn/mcp.json +19 -0
  64. package/src/locales/zh-cn/runx.json +13 -0
  65. package/src/locales/zh-cn/schema.json +4 -0
  66. package/src/locales/zh-cn/setup.json +14 -0
  67. package/src/locales/zh-cn/uninstall.json +18 -0
  68. package/src/locales/zh-cn/update.json +28 -0
  69. package/src/shared/editor-config/index.ts +2 -21
  70. package/src/shared/llm-proxy/adapters/openai.adapter.ts +3 -1
  71. package/src/shared/package-manager/index.ts +5 -76
  72. package/src/shared/source-utils/index.ts +12 -130
  73. package/src/shared/spaceflow-dir/index.ts +13 -135
  74. package/src/shared/verbose/index.ts +10 -87
  75. package/dist/524.js +0 -9
  76. package/src/config/ci.config.ts +0 -29
  77. package/src/config/config-loader.ts +0 -100
  78. package/src/config/config-reader.service.ts +0 -128
  79. package/src/config/config-reader.ts +0 -75
  80. package/src/config/feishu.config.ts +0 -35
  81. package/src/config/git-provider.config.ts +0 -29
  82. package/src/config/llm.config.ts +0 -110
  83. package/src/config/load-env.ts +0 -15
  84. package/src/config/storage.config.ts +0 -33
  85. /package/src/{shared → cli-runtime}/i18n/i18n.spec.ts +0 -0
  86. /package/src/{shared → cli-runtime}/i18n/i18n.ts +0 -0
  87. /package/src/{shared → cli-runtime}/i18n/locale-detect.ts +0 -0
@@ -0,0 +1,35 @@
1
+ import { defineExtension, type VerboseLevel } from "@spaceflow/core";
2
+ import { ClearService } from "./clear.service";
3
+
4
+ /**
5
+ * Clear 命令扩展
6
+ */
7
+ export const clearExtension = defineExtension({
8
+ name: "clear",
9
+ version: "1.0.0",
10
+ description: "清除缓存",
11
+ commands: [
12
+ {
13
+ name: "clear",
14
+ description: "清除缓存",
15
+ options: [
16
+ {
17
+ flags: "-g, --global",
18
+ description: "清除全局缓存",
19
+ },
20
+ {
21
+ flags: "-v, --verbose",
22
+ description: "详细输出",
23
+ },
24
+ ],
25
+ run: async (args, options, _ctx) => {
26
+ const isGlobal = !!options?.global;
27
+ const verbose = (options?.verbose ? 2 : 1) as VerboseLevel;
28
+ const clearService = new ClearService();
29
+ await clearService.execute(isGlobal, verbose);
30
+ },
31
+ },
32
+ ],
33
+ });
34
+
35
+ export * from "./clear.service";
@@ -0,0 +1,168 @@
1
+ import { z } from "zod";
2
+ import type { VerboseLevel } from "@spaceflow/core";
3
+
4
+ /**
5
+ * Commit 类型定义
6
+ */
7
+ export interface CommitType {
8
+ type: string;
9
+ section: string;
10
+ }
11
+
12
+ /**
13
+ * Changelog 配置
14
+ */
15
+ export interface CommitConfig {
16
+ changelog?: {
17
+ preset?: {
18
+ type?: CommitType[];
19
+ };
20
+ };
21
+ }
22
+
23
+ /**
24
+ * Scope 匹配规则 schema
25
+ */
26
+ export const ScopeRuleSchema = z.object({
27
+ /** glob 模式,如 "src/components/**", "docs/**" */
28
+ pattern: z.string().describe("glob 模式,用于匹配文件路径"),
29
+ /** 匹配后使用的 scope 名称 */
30
+ scope: z.string().describe("匹配后使用的 scope 名称"),
31
+ });
32
+
33
+ export type ScopeRule = z.infer<typeof ScopeRuleSchema>;
34
+
35
+ /**
36
+ * Commit scope 配置 schema
37
+ */
38
+ export const CommitScopeConfigSchema = z.object({
39
+ /**
40
+ * 分组策略
41
+ * - "package": 按最近的 package.json 目录分组(默认)
42
+ * - "rules": 仅使用自定义规则
43
+ * - "rules-first": 优先使用自定义规则,未匹配则回退到 package 策略
44
+ */
45
+ strategy: z.enum(["package", "rules", "rules-first"]).default("package").describe("文件分组策略"),
46
+ /** 自定义匹配规则列表 */
47
+ rules: z.array(ScopeRuleSchema).default([]).describe("自定义 scope 匹配规则"),
48
+ });
49
+
50
+ export type CommitScopeConfig = z.infer<typeof CommitScopeConfigSchema>;
51
+
52
+ /**
53
+ * Commit 命令选项
54
+ */
55
+ export interface CommitOptions {
56
+ verbose?: VerboseLevel;
57
+ dryRun?: boolean;
58
+ noVerify?: boolean;
59
+ split?: boolean;
60
+ }
61
+
62
+ /**
63
+ * Commit 执行结果
64
+ */
65
+ export interface CommitResult {
66
+ success: boolean;
67
+ message?: string;
68
+ error?: string;
69
+ commitCount?: number;
70
+ }
71
+
72
+ /**
73
+ * Commit 分组
74
+ */
75
+ export interface CommitGroup {
76
+ files: string[];
77
+ reason: string;
78
+ packageInfo?: { name: string; description?: string };
79
+ }
80
+
81
+ /**
82
+ * 拆分分析结果
83
+ */
84
+ export interface SplitAnalysis {
85
+ groups: CommitGroup[];
86
+ }
87
+
88
+ /**
89
+ * 包信息
90
+ */
91
+ export interface PackageInfo {
92
+ /** 包名(package.json 中的 name) */
93
+ name: string;
94
+ /** 包描述 */
95
+ description?: string;
96
+ /** package.json 所在目录的绝对路径 */
97
+ path: string;
98
+ }
99
+
100
+ /**
101
+ * 结构化 Commit Message schema(仅 AI 生成的部分)
102
+ */
103
+ export const CommitMessageContentSchema = z.object({
104
+ /** commit 类型,如 feat, fix, refactor 等 */
105
+ type: z.string().describe("commit 类型"),
106
+ /** 影响范围,可选 */
107
+ scope: z.string().optional().describe("影响范围(包名、模块名)"),
108
+ /** 简短描述,不超过 50 个字符 */
109
+ subject: z.string().describe("简短描述"),
110
+ /** 详细描述,可选 */
111
+ body: z.string().optional().describe("详细描述"),
112
+ });
113
+
114
+ export type CommitMessageContent = z.infer<typeof CommitMessageContentSchema>;
115
+
116
+ /**
117
+ * 完整的 Commit Message,包含文件和包上下文
118
+ */
119
+ export interface CommitMessage extends CommitMessageContent {
120
+ /** 涉及的文件列表(相对路径) */
121
+ files?: string[];
122
+ /** 所属包信息 */
123
+ packageInfo?: PackageInfo;
124
+ }
125
+
126
+ /**
127
+ * 解析 commit message 字符串为结构化对象
128
+ */
129
+ export function parseCommitMessage(message: string): CommitMessage {
130
+ const lines = message.trim().split("\n");
131
+ const firstLine = lines[0] || "";
132
+
133
+ // 匹配 type(scope): subject 或 type: subject
134
+ const headerRegex = /^(\w+)(?:\(([^)]+)\))?:\s*(.+)$/;
135
+ const match = firstLine.match(headerRegex);
136
+
137
+ if (!match) {
138
+ // 无法解析,将整个内容作为 subject
139
+ return {
140
+ type: "chore",
141
+ subject: firstLine || message.trim(),
142
+ body: lines.slice(1).join("\n").trim() || undefined,
143
+ };
144
+ }
145
+
146
+ const [, type, scope, subject] = match;
147
+ const body = lines.slice(1).join("\n").trim() || undefined;
148
+
149
+ return {
150
+ type,
151
+ scope: scope || undefined,
152
+ subject,
153
+ body,
154
+ };
155
+ }
156
+
157
+ /**
158
+ * 格式化结构化 commit message 为字符串
159
+ */
160
+ export function formatCommitMessage(commit: CommitMessage): string {
161
+ const { type, scope, subject, body } = commit;
162
+ const header = scope ? `${type}(${scope}): ${subject}` : `${type}: ${subject}`;
163
+
164
+ if (body) {
165
+ return `${header}\n\n${body}`;
166
+ }
167
+ return header;
168
+ }