@opensumi/ide-ai-native 2.26.9-next-1695201123.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 (194) hide show
  1. package/LICENSE +21 -0
  2. package/lib/browser/ai-chat.contribution.d.ts +26 -0
  3. package/lib/browser/ai-chat.contribution.d.ts.map +1 -0
  4. package/lib/browser/ai-chat.contribution.js +228 -0
  5. package/lib/browser/ai-chat.contribution.js.map +1 -0
  6. package/lib/browser/ai-chat.module.less +174 -0
  7. package/lib/browser/ai-chat.service.d.ts +30 -0
  8. package/lib/browser/ai-chat.service.d.ts.map +1 -0
  9. package/lib/browser/ai-chat.service.js +129 -0
  10. package/lib/browser/ai-chat.service.js.map +1 -0
  11. package/lib/browser/ai-chat.view.d.ts +4 -0
  12. package/lib/browser/ai-chat.view.d.ts.map +1 -0
  13. package/lib/browser/ai-chat.view.js +292 -0
  14. package/lib/browser/ai-chat.view.js.map +1 -0
  15. package/lib/browser/ai-editor.contribution.d.ts +26 -0
  16. package/lib/browser/ai-editor.contribution.d.ts.map +1 -0
  17. package/lib/browser/ai-editor.contribution.js +430 -0
  18. package/lib/browser/ai-editor.contribution.js.map +1 -0
  19. package/lib/browser/ai-project/generate.service.d.ts +34 -0
  20. package/lib/browser/ai-project/generate.service.d.ts.map +1 -0
  21. package/lib/browser/ai-project/generate.service.js +460 -0
  22. package/lib/browser/ai-project/generate.service.js.map +1 -0
  23. package/lib/browser/ai-sumi/sumi.service.d.ts +11 -0
  24. package/lib/browser/ai-sumi/sumi.service.d.ts.map +1 -0
  25. package/lib/browser/ai-sumi/sumi.service.js +64 -0
  26. package/lib/browser/ai-sumi/sumi.service.js.map +1 -0
  27. package/lib/browser/code-widget/ai-code-document.provider.d.ts +10 -0
  28. package/lib/browser/code-widget/ai-code-document.provider.d.ts.map +1 -0
  29. package/lib/browser/code-widget/ai-code-document.provider.js +26 -0
  30. package/lib/browser/code-widget/ai-code-document.provider.js.map +1 -0
  31. package/lib/browser/code-widget/ai-code-widget.d.ts +20 -0
  32. package/lib/browser/code-widget/ai-code-widget.d.ts.map +1 -0
  33. package/lib/browser/code-widget/ai-code-widget.js +164 -0
  34. package/lib/browser/code-widget/ai-code-widget.js.map +1 -0
  35. package/lib/browser/components/AIImprove.d.ts +9 -0
  36. package/lib/browser/components/AIImprove.d.ts.map +1 -0
  37. package/lib/browser/components/AIImprove.js +34 -0
  38. package/lib/browser/components/AIImprove.js.map +1 -0
  39. package/lib/browser/components/AIInput.d.ts +5 -0
  40. package/lib/browser/components/AIInput.d.ts.map +1 -0
  41. package/lib/browser/components/AIInput.js +22 -0
  42. package/lib/browser/components/AIInput.js.map +1 -0
  43. package/lib/browser/components/ChatEditor.d.ts +5 -0
  44. package/lib/browser/components/ChatEditor.d.ts.map +1 -0
  45. package/lib/browser/components/ChatEditor.js +85 -0
  46. package/lib/browser/components/ChatEditor.js.map +1 -0
  47. package/lib/browser/components/ChatInput.d.ts +6 -0
  48. package/lib/browser/components/ChatInput.d.ts.map +1 -0
  49. package/lib/browser/components/ChatInput.js +126 -0
  50. package/lib/browser/components/ChatInput.js.map +1 -0
  51. package/lib/browser/components/ChatMoreActions.d.ts +5 -0
  52. package/lib/browser/components/ChatMoreActions.d.ts.map +1 -0
  53. package/lib/browser/components/ChatMoreActions.js +26 -0
  54. package/lib/browser/components/ChatMoreActions.js.map +1 -0
  55. package/lib/browser/components/Thinking.d.ts +3 -0
  56. package/lib/browser/components/Thinking.d.ts.map +1 -0
  57. package/lib/browser/components/Thinking.js +19 -0
  58. package/lib/browser/components/Thinking.js.map +1 -0
  59. package/lib/browser/components/components.module.less +261 -0
  60. package/lib/browser/components/lineVertical.d.ts +4 -0
  61. package/lib/browser/components/lineVertical.d.ts.map +1 -0
  62. package/lib/browser/components/lineVertical.js +22 -0
  63. package/lib/browser/components/lineVertical.js.map +1 -0
  64. package/lib/browser/content-widget/ai-content-widget.d.ts +38 -0
  65. package/lib/browser/content-widget/ai-content-widget.d.ts.map +1 -0
  66. package/lib/browser/content-widget/ai-content-widget.js +97 -0
  67. package/lib/browser/content-widget/ai-content-widget.js.map +1 -0
  68. package/lib/browser/content-widget/ai-inline-chat-panel.d.ts +6 -0
  69. package/lib/browser/content-widget/ai-inline-chat-panel.d.ts.map +1 -0
  70. package/lib/browser/content-widget/ai-inline-chat-panel.js +108 -0
  71. package/lib/browser/content-widget/ai-inline-chat-panel.js.map +1 -0
  72. package/lib/browser/content-widget/ai-inline-chat.module.less +81 -0
  73. package/lib/browser/content-widget/ai-inline-chat.service.d.ts +23 -0
  74. package/lib/browser/content-widget/ai-inline-chat.service.d.ts.map +1 -0
  75. package/lib/browser/content-widget/ai-inline-chat.service.js +47 -0
  76. package/lib/browser/content-widget/ai-inline-chat.service.js.map +1 -0
  77. package/lib/browser/diff-widget/ai-diff-document.provider.d.ts +10 -0
  78. package/lib/browser/diff-widget/ai-diff-document.provider.d.ts.map +1 -0
  79. package/lib/browser/diff-widget/ai-diff-document.provider.js +26 -0
  80. package/lib/browser/diff-widget/ai-diff-document.provider.js.map +1 -0
  81. package/lib/browser/diff-widget/ai-diff-widget.d.ts +20 -0
  82. package/lib/browser/diff-widget/ai-diff-widget.d.ts.map +1 -0
  83. package/lib/browser/diff-widget/ai-diff-widget.js +158 -0
  84. package/lib/browser/diff-widget/ai-diff-widget.js.map +1 -0
  85. package/lib/browser/index.d.ts +11 -0
  86. package/lib/browser/index.d.ts.map +1 -0
  87. package/lib/browser/index.js +82 -0
  88. package/lib/browser/index.js.map +1 -0
  89. package/lib/browser/inline-completions/constants.d.ts +62 -0
  90. package/lib/browser/inline-completions/constants.d.ts.map +1 -0
  91. package/lib/browser/inline-completions/constants.js +69 -0
  92. package/lib/browser/inline-completions/constants.js.map +1 -0
  93. package/lib/browser/inline-completions/provider.d.ts +27 -0
  94. package/lib/browser/inline-completions/provider.d.ts.map +1 -0
  95. package/lib/browser/inline-completions/provider.js +63 -0
  96. package/lib/browser/inline-completions/provider.js.map +1 -0
  97. package/lib/browser/override/ai-editor-tab.service.d.ts +6 -0
  98. package/lib/browser/override/ai-editor-tab.service.d.ts.map +1 -0
  99. package/lib/browser/override/ai-editor-tab.service.js +22 -0
  100. package/lib/browser/override/ai-editor-tab.service.js.map +1 -0
  101. package/lib/browser/override/ai-marker.service.d.ts +11 -0
  102. package/lib/browser/override/ai-marker.service.d.ts.map +1 -0
  103. package/lib/browser/override/ai-marker.service.js +56 -0
  104. package/lib/browser/override/ai-marker.service.js.map +1 -0
  105. package/lib/browser/override/layout/layout-config.d.ts +11 -0
  106. package/lib/browser/override/layout/layout-config.d.ts.map +1 -0
  107. package/lib/browser/override/layout/layout-config.js +17 -0
  108. package/lib/browser/override/layout/layout-config.js.map +1 -0
  109. package/lib/browser/override/layout/layout.module.less +261 -0
  110. package/lib/browser/override/layout/main-slot-renderer.d.ts +4 -0
  111. package/lib/browser/override/layout/main-slot-renderer.d.ts.map +1 -0
  112. package/lib/browser/override/layout/main-slot-renderer.js +23 -0
  113. package/lib/browser/override/layout/main-slot-renderer.js.map +1 -0
  114. package/lib/browser/override/layout/menu-bar/menu-bar.contribution.d.ts +8 -0
  115. package/lib/browser/override/layout/menu-bar/menu-bar.contribution.d.ts.map +1 -0
  116. package/lib/browser/override/layout/menu-bar/menu-bar.contribution.js +32 -0
  117. package/lib/browser/override/layout/menu-bar/menu-bar.contribution.js.map +1 -0
  118. package/lib/browser/override/layout/menu-bar/menu-bar.module.less +41 -0
  119. package/lib/browser/override/layout/menu-bar/menu-bar.view.d.ts +3 -0
  120. package/lib/browser/override/layout/menu-bar/menu-bar.view.d.ts.map +1 -0
  121. package/lib/browser/override/layout/menu-bar/menu-bar.view.js +62 -0
  122. package/lib/browser/override/layout/menu-bar/menu-bar.view.js.map +1 -0
  123. package/lib/browser/override/layout/tabbar.view.d.ts +19 -0
  124. package/lib/browser/override/layout/tabbar.view.d.ts.map +1 -0
  125. package/lib/browser/override/layout/tabbar.view.js +38 -0
  126. package/lib/browser/override/layout/tabbar.view.js.map +1 -0
  127. package/lib/browser/override/override.module.less +32 -0
  128. package/lib/browser/override/theme/default-theme.d.ts +315 -0
  129. package/lib/browser/override/theme/default-theme.d.ts.map +1 -0
  130. package/lib/browser/override/theme/default-theme.js +821 -0
  131. package/lib/browser/override/theme/default-theme.js.map +1 -0
  132. package/lib/browser/run/run.service.d.ts +52 -0
  133. package/lib/browser/run/run.service.d.ts.map +1 -0
  134. package/lib/browser/run/run.service.js +176 -0
  135. package/lib/browser/run/run.service.js.map +1 -0
  136. package/lib/common/command.d.ts +17 -0
  137. package/lib/common/command.d.ts.map +1 -0
  138. package/lib/common/command.js +21 -0
  139. package/lib/common/command.js.map +1 -0
  140. package/lib/common/index.d.ts +47 -0
  141. package/lib/common/index.d.ts.map +1 -0
  142. package/lib/common/index.js +33 -0
  143. package/lib/common/index.js.map +1 -0
  144. package/lib/index.d.ts +2 -0
  145. package/lib/index.d.ts.map +1 -0
  146. package/lib/index.js +5 -0
  147. package/lib/index.js.map +1 -0
  148. package/lib/node/index.d.ts +10 -0
  149. package/lib/node/index.d.ts.map +1 -0
  150. package/lib/node/index.js +32 -0
  151. package/lib/node/index.js.map +1 -0
  152. package/package.json +38 -0
  153. package/src/browser/ai-chat.contribution.ts +300 -0
  154. package/src/browser/ai-chat.module.less +174 -0
  155. package/src/browser/ai-chat.service.ts +146 -0
  156. package/src/browser/ai-chat.view.tsx +410 -0
  157. package/src/browser/ai-editor.contribution.ts +564 -0
  158. package/src/browser/ai-project/generate.service.ts +515 -0
  159. package/src/browser/ai-sumi/sumi.service.ts +65 -0
  160. package/src/browser/code-widget/ai-code-document.provider.ts +22 -0
  161. package/src/browser/code-widget/ai-code-widget.tsx +202 -0
  162. package/src/browser/components/AIImprove.tsx +45 -0
  163. package/src/browser/components/AIInput.tsx +30 -0
  164. package/src/browser/components/ChatEditor.tsx +129 -0
  165. package/src/browser/components/ChatInput.tsx +199 -0
  166. package/src/browser/components/ChatMoreActions.tsx +33 -0
  167. package/src/browser/components/Thinking.tsx +23 -0
  168. package/src/browser/components/components.module.less +261 -0
  169. package/src/browser/components/lineVertical.tsx +19 -0
  170. package/src/browser/content-widget/ai-content-widget.tsx +132 -0
  171. package/src/browser/content-widget/ai-inline-chat-panel.tsx +163 -0
  172. package/src/browser/content-widget/ai-inline-chat.module.less +81 -0
  173. package/src/browser/content-widget/ai-inline-chat.service.ts +46 -0
  174. package/src/browser/diff-widget/ai-diff-document.provider.ts +22 -0
  175. package/src/browser/diff-widget/ai-diff-widget.tsx +196 -0
  176. package/src/browser/index.ts +89 -0
  177. package/src/browser/inline-completions/constants.ts +108 -0
  178. package/src/browser/inline-completions/provider.ts +55 -0
  179. package/src/browser/override/ai-editor-tab.service.tsx +22 -0
  180. package/src/browser/override/ai-marker.service.tsx +61 -0
  181. package/src/browser/override/layout/layout-config.ts +17 -0
  182. package/src/browser/override/layout/layout.module.less +261 -0
  183. package/src/browser/override/layout/main-slot-renderer.tsx +63 -0
  184. package/src/browser/override/layout/menu-bar/menu-bar.contribution.tsx +28 -0
  185. package/src/browser/override/layout/menu-bar/menu-bar.module.less +41 -0
  186. package/src/browser/override/layout/menu-bar/menu-bar.view.tsx +92 -0
  187. package/src/browser/override/layout/tabbar.view.tsx +91 -0
  188. package/src/browser/override/override.module.less +32 -0
  189. package/src/browser/override/theme/default-theme.ts +818 -0
  190. package/src/browser/run/run.service.ts +186 -0
  191. package/src/common/command.ts +21 -0
  192. package/src/common/index.ts +50 -0
  193. package/src/index.ts +1 -0
  194. package/src/node/index.ts +24 -0
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiProjectGenerateService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable no-console */
6
+ const di_1 = require("@opensumi/di");
7
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
8
+ const common_1 = require("../../common");
9
+ let AiProjectGenerateService = class AiProjectGenerateService {
10
+ constructor() {
11
+ this.pointPrompt = `
12
+ 生成的代码需要注意以下几点:
13
+ 1. 生成的代码需要使用 Markdown 的代码块的语法。例如: \`\`\` // code \`\`\`。
14
+ 2. 支付宝小程序的 axml 语法是 a:xxx 不是 wx:xxx。例如:a:if
15
+ 3. axml文件时间绑定语法请使用 onEvent。例如:onTap、onInput
16
+ `;
17
+ this.requirementPrompt = (requirements) => `
18
+ 项目完整需求如下: ${requirements}
19
+ 需求对应的完整的文件目录如下:\`\`\`
20
+ ${this.codeStructure}
21
+ \`\`\`
22
+ `;
23
+ this.logger = this.loggerManagerClient.getLogger(ide_core_common_1.SupportLogNamespace.Browser);
24
+ }
25
+ matchFramework(language, framework) {
26
+ if (/javascript|typescript/i.test(language)) {
27
+ return /minifish/i.test(framework) ? "minifish" /* FRAMEWORK.minifish */ : "bigfish" /* FRAMEWORK.bigfish */;
28
+ }
29
+ if (/java/i.test(language)) {
30
+ return "sofa" /* FRAMEWORK.sofa */;
31
+ }
32
+ return framework;
33
+ }
34
+ async switchProjectLanguage(input) {
35
+ var _a;
36
+ const prompt = `
37
+ ### 介绍 ###
38
+ 我会提供一份关于编程项目的描述,请基于项目描述提取出项目所使用的编程语言、适合的编程框架,以及分析一下项目的具体需求。
39
+ 如果是支付宝小程序相关的需求,编程语言为 Javascript,编程框架使用: Minifish
40
+ 如果是与前端有关的需求,编程语言为 Typescript,编程框架请使用: Bigfish
41
+ 下面是一个问答示例,请参照示例的格式,给出回答。
42
+
43
+ ### 示例 ###
44
+ 示例提问:创建一个 java 项目,与营销相关
45
+ 示例回答:
46
+ 编程语言: JAVA
47
+ 编程框架: Sofa Boot、Sofa4
48
+ 项目需求:创建一个用于营销的项目
49
+
50
+ ### 需求 ###
51
+ 我的问题: ${input}
52
+ `;
53
+ const res = await this.aiBackService.aiAntGlm(prompt);
54
+ this.logger.log('gen request res: ', res);
55
+ const reg = /(编程语言)(:|:)?\s?(?<language>.*)\n*\s*(编程框架)(:|:)?\s?(?<framework>.*)\n*\s*(项目需求)(:|:)?\s?(?<requirements>.*)/i;
56
+ const match = reg.exec(res.data);
57
+ return (match &&
58
+ Object.assign(Object.assign({}, (match.groups || {})), { framework: (_a = match.groups) === null || _a === void 0 ? void 0 : _a.framework.split('、') }));
59
+ }
60
+ generateStructurePrompt({ language, framework }) {
61
+ switch (this.matchFramework(language, framework)) {
62
+ case "minifish" /* FRAMEWORK.minifish */:
63
+ return `
64
+ ├──mini.project.json
65
+ ├──app.js
66
+ ├──app.json
67
+ ├──README.md
68
+ ├──.gitignore
69
+ └──pages
70
+ ├──order
71
+ │ ├──index.js
72
+ │ ├──index.axml
73
+ │ ├──index.acss
74
+ │ └──index.json
75
+ └──detail
76
+ ├──index.js
77
+ ├──index.axml
78
+ ├──index.acss
79
+ └──index.json
80
+ `;
81
+ case "bigfish" /* FRAMEWORK.bigfish */:
82
+ return `
83
+ ├──package.json
84
+ ├──app.tsx
85
+ ├──README.md
86
+ ├──.gitignore
87
+ ├──.eslintrc
88
+ ├──src
89
+ │ └──pages
90
+ │ └──order
91
+ │ ├──index.tsx
92
+ │ └──index.less
93
+ └──config
94
+ ├──config.ts
95
+ └──router.config.ts
96
+ `;
97
+ default:
98
+ return `
99
+ ├──.gitignore
100
+ ├──pom.xml
101
+ ├──README.md
102
+ └──app
103
+ ├──bootstrap
104
+ │ ├──src
105
+ │ │ ├──main
106
+ │ │ │ ├──java
107
+ │ │ │ │ └──com
108
+ │ │ │ │ └──alipay
109
+ │ │ │ │ └──order
110
+ │ │ │ │ └──DemoApplication.java
111
+ │ │ │ └──resources
112
+ │ │ │ └──config
113
+ │ │ │ └──application.properties
114
+ │ │ └──test
115
+ │ │ └──java
116
+ │ │ └──com
117
+ │ │ └──alipay
118
+ │ │ └──order
119
+ │ │ └──DemoApplicationTest.java
120
+ │ └──pom.xml
121
+ ├──model
122
+ │ ├──src
123
+ │ │ ├──main
124
+ │ │ │ ├──java
125
+ │ │ │ │ └──com
126
+ │ │ │ │ └──alipay
127
+ │ │ │ │ └──order
128
+ │ │ │ │ └──model
129
+ │ │ └──test
130
+ │ │ └──java
131
+ │ │ └──com
132
+ │ │ └──alipay
133
+ │ │ └──order
134
+ │ │ └──model
135
+ │ └──pom.xml
136
+ ├──service
137
+ │ ├──src
138
+ │ │ ├──main
139
+ │ │ │ ├──java
140
+ │ │ │ │ └──com
141
+ │ │ │ │ └──alipay
142
+ │ │ │ │ └──order
143
+ │ │ │ │ └──service
144
+ │ │ └──test
145
+ │ │ └──java
146
+ │ │ └──com
147
+ │ │ └──alipay
148
+ │ │ └──order
149
+ │ │ └──service
150
+ │ └──pom.xml
151
+ └──utils
152
+ `;
153
+ }
154
+ }
155
+ async generateProjectStructure(projectInfo) {
156
+ var _a;
157
+ const { language, framework, requirements } = projectInfo;
158
+ const prompt = `
159
+ 我会提供一份项目的需求,包含使用的编程语言、编程框架、以及项目的具体需求,请结合具体需求,给出代码目录结构。只给出关键的文件以及文件路径即可。
160
+
161
+ 示例提问:使用 ${language} 的 ${framework} 框架,创建一个关于订单的项目
162
+ 示例回答:\`\`\`${this.generateStructurePrompt(projectInfo)}\`\`\`
163
+
164
+ (请参照示例回答,根据需求按照回答格式返回答案)
165
+ 我的问题:${requirements}
166
+ `;
167
+ const structure = await this.aiBackService.aiCodeLLama(prompt);
168
+ this.logger.log('gen structure res: ', structure);
169
+ const structureCode = /```\n?(?<code>[\s\S]*?)```/g.exec(structure);
170
+ this.logger.log('gen structure code: ', structureCode);
171
+ let flag = false;
172
+ let filePathList = [];
173
+ if (structureCode) {
174
+ filePathList = this.parseFilePath(((_a = structureCode.groups) === null || _a === void 0 ? void 0 : _a.code) || '');
175
+ const filePathRegex = /^([a-zA-Z0-9\s_-]+[\\/])*[a-zA-Z0-9\s_-]*(\.[a-zA-Z0-9]+)+$/;
176
+ if (filePathList.filter((f) => filePathRegex.test(f)).length === filePathList.length) {
177
+ flag = true;
178
+ this.codeStructure = filePathList.join('\n');
179
+ }
180
+ }
181
+ return flag ? filePathList : await this.generateProjectStructure(projectInfo);
182
+ }
183
+ parseFilePath(input) {
184
+ const lines = input.split('\n');
185
+ const paths = [];
186
+ const stack = [];
187
+ let lastDepth = 0;
188
+ for (const line of lines) {
189
+ if (!/\w/.test(line)) {
190
+ continue;
191
+ }
192
+ const lineWithoutSpace = line.replace(/(├──|└──)\s/g, '$1');
193
+ const match = lineWithoutSpace.match(/(\s)/g);
194
+ const depth = match ? Math.round(match.length / 2) : 0;
195
+ // 获取文件或目录的名称
196
+ const name = lineWithoutSpace.replace(/(├──|└──|│\s+)/g, '').trim();
197
+ // 如果当前深度小于栈的深度,从栈中弹出元素
198
+ if (depth < lastDepth) {
199
+ stack.splice(depth);
200
+ }
201
+ lastDepth = depth;
202
+ while (depth < stack.length) {
203
+ stack.pop();
204
+ }
205
+ if (lineWithoutSpace.indexOf('.') !== -1) {
206
+ const path = [...stack, name].join('/');
207
+ paths.push(path);
208
+ }
209
+ else {
210
+ // 如果是目录,将其添加到栈中
211
+ stack.push(name);
212
+ }
213
+ }
214
+ return paths.map((path) => path.replace(/^root\//, ''));
215
+ }
216
+ async generateFile(filePathList, projectInfo, callback) {
217
+ switch (this.matchFramework(projectInfo.language, projectInfo.framework)) {
218
+ case "minifish" /* FRAMEWORK.minifish */:
219
+ return this.generateMinifishProject(filePathList, projectInfo.requirements, callback);
220
+ case "bigfish" /* FRAMEWORK.bigfish */:
221
+ return this.generateBigfishProject(filePathList, projectInfo, callback);
222
+ default:
223
+ return this.generateCommonProject(filePathList, projectInfo, callback);
224
+ }
225
+ }
226
+ async generateMinifishProject(fileList, requirements, callback) {
227
+ const singleFileList = [];
228
+ const dirMap = new Map();
229
+ fileList.forEach((filePath) => {
230
+ var _a;
231
+ const pathArray = filePath.split('/');
232
+ if (pathArray.length > 1) {
233
+ const dir = pathArray.slice(0, -1).join('/');
234
+ if (dirMap.get(dir)) {
235
+ (_a = dirMap.get(dir)) === null || _a === void 0 ? void 0 : _a.push(filePath);
236
+ }
237
+ else {
238
+ dirMap.set(dir, [filePath]);
239
+ }
240
+ }
241
+ else {
242
+ singleFileList.push(filePath);
243
+ }
244
+ });
245
+ await Promise.all(singleFileList.map(async (path) => {
246
+ callback(path);
247
+ await this.generateMinifishSingleFile(path, requirements);
248
+ }));
249
+ for (const dir of dirMap.values()) {
250
+ dir.forEach((path) => callback(path));
251
+ await this.generateMinifishDirFile(dir, requirements);
252
+ }
253
+ }
254
+ async generateMinifishSingleFile(filePath, requirements) {
255
+ const commonFile = ['mini.project.json', 'README.md', '.gitignore'];
256
+ let code;
257
+ if (commonFile.find((f) => f === filePath)) {
258
+ code = template[filePath];
259
+ }
260
+ else {
261
+ const prompt = `
262
+ 基于我提供的项目需求与文件路径,生成对应的代码。我的需求可能需要多个文件才能满足,我会提供完整的目录结构,但每次我只会提供一个文件路径。
263
+ 你需要结合我的需求与完整的项目路径,先判断需要生成的文件属于需求中的哪个页面,再生成代码,
264
+ ${this.pointPrompt}
265
+ ${this.requirementPrompt(requirements)}
266
+
267
+ 需要生成的代码文件是: ${filePath}
268
+ `;
269
+ code = await this.generateFileCode(prompt);
270
+ }
271
+ await this.aiBackService.generateFileByPath(filePath, code || '{}');
272
+ return code;
273
+ }
274
+ async generateMinifishDirFile(filePathList, requirements) {
275
+ const axmlFile = filePathList.find((path) => path.endsWith('.axml'));
276
+ if (axmlFile) {
277
+ const axmlCode = await this.generateMinifishSingleFile(axmlFile, requirements);
278
+ const otherFile = filePathList.filter((path) => path !== axmlFile);
279
+ await Promise.all(otherFile.map(async (path) => {
280
+ const prompt = `
281
+ 我会给出项目的需求,需求可能需要多个页面才能实现,我会提供完整的项目路径,以及其中单个页面的 axml 文件代码。
282
+ 请帮我基于需要生成的文件路径,先判断属于需求中的哪个页面的文件,再判断文件类型,根据 axml 文件代码,生成对应的 js、acss、json 文件的代码。
283
+ ${this.pointPrompt}
284
+ ${this.requirementPrompt(requirements)}
285
+
286
+ 已有的axml文件路径为: ${axmlFile}
287
+ 已有的axml文件代码为:\`\`\`
288
+ ${axmlCode}
289
+ \`\`\`
290
+
291
+ 需要生成代码文件为:${path}
292
+ `;
293
+ const code = await this.generateFileCode(prompt);
294
+ await this.aiBackService.generateFileByPath(path, code || '{}');
295
+ }));
296
+ }
297
+ else {
298
+ await Promise.all(filePathList.map((path) => this.generateMinifishSingleFile(path, requirements)));
299
+ }
300
+ }
301
+ async generateBigfishProject(fileList, projectInfo, callback) {
302
+ const templateFile = ['package.json'];
303
+ while (fileList.length) {
304
+ const part = fileList.splice(0, 1);
305
+ await Promise.all(part.map(async (file) => {
306
+ callback(file);
307
+ if (templateFile.find((f) => f === file)) {
308
+ await this.aiBackService.generateFileByPath(file, template[file]);
309
+ }
310
+ else {
311
+ await this.generateBigfishFile(file, projectInfo);
312
+ }
313
+ }));
314
+ }
315
+ }
316
+ async generateBigfishFile(filePath, projectInfo) {
317
+ const { requirements, language } = projectInfo;
318
+ const prompt = `
319
+ Generate corresponding code based on the project requirements and file path I provided. My requirements may require multiple files to fulfill, and I will provide the complete directory structure, but each time I will only provide one file path.
320
+ You need to combine my requirements with the complete project path, first determine which page the file to be generated belongs to in the requirements, and then generate the code.
321
+ The project uses front-end technologies such as ${language} and less, and framework is Bigfish with React, the generated code should comply with the corresponding file type.
322
+ (The Bigfish framework is an extension of umi.js. The file content can refer to umi.js, but if some function import from umi, it needs to be replaced to bigfish.)
323
+ Project requirements is: ${requirements}
324
+ Project dir strucutre is:\`\`\`
325
+ ${this.codeStructure}
326
+ \`\`\`
327
+
328
+ (The generated code needs to be wrapped in Markdown code block syntax and just reply code only)
329
+ The code need generate is: ${filePath}`;
330
+ const code = await this.generateFileCode(prompt);
331
+ await this.aiBackService.generateFileByPath(filePath, code || '');
332
+ return code;
333
+ }
334
+ async generateCommonProject(fileList, projectInfo, callback) {
335
+ while (fileList.length) {
336
+ const part = fileList.splice(0, 1);
337
+ await Promise.all(part.map(async (file) => {
338
+ callback(file);
339
+ await this.generateCommonFile(file, projectInfo);
340
+ }));
341
+ }
342
+ }
343
+ async generateCommonFile(filePath, projectInfo) {
344
+ const { requirements, language, framework } = projectInfo;
345
+ const prompt = `
346
+ Generate corresponding code based on the project requirements and file path I provided. My requirements may require multiple files to fulfill, and I will provide the complete directory structure, but each time I will only provide one file path.
347
+ You need to combine my requirements with the complete project path, first determine which page the file to be generated belongs to in the requirements, and then generate the code.
348
+ The project uses ${language}, and framework is ${framework}, the generated code should comply with the corresponding file type.
349
+ Project requirements is: ${requirements}
350
+ Project dir strucutre is:\`\`\`
351
+ ${this.codeStructure}
352
+ \`\`\`
353
+
354
+ (The generated code needs to be wrapped in Markdown code block syntax and just reply code only)
355
+ The code need generate is: ${filePath}`;
356
+ const code = await this.generateFileCode(prompt);
357
+ await this.aiBackService.generateFileByPath(filePath, code || '');
358
+ return code;
359
+ }
360
+ async generateFileCode(prompt) {
361
+ var _a, _b;
362
+ let times = 0;
363
+ let code;
364
+ while (!code && times < 5) {
365
+ const content = await this.aiBackService.aiCodeLLama(prompt);
366
+ this.logger.log('gen file content: ', content);
367
+ const codeMatch = /```\w*\n(\/\/\s.*\n)?(?<code>[\s\S]*?)```/g.exec(content);
368
+ code = codeMatch && ((_a = codeMatch.groups) === null || _a === void 0 ? void 0 : _a.code) ? (_b = codeMatch.groups) === null || _b === void 0 ? void 0 : _b.code : content;
369
+ this.logger.log('gen file code: ', code);
370
+ times++;
371
+ }
372
+ return code;
373
+ }
374
+ async clearWorkspace() {
375
+ await this.aiBackService.clearWorkspace();
376
+ }
377
+ };
378
+ tslib_1.__decorate([
379
+ (0, di_1.Autowired)(common_1.AiGPTBackSerivcePath),
380
+ tslib_1.__metadata("design:type", Object)
381
+ ], AiProjectGenerateService.prototype, "aiBackService", void 0);
382
+ tslib_1.__decorate([
383
+ (0, di_1.Autowired)(ide_core_common_1.ILoggerManagerClient),
384
+ tslib_1.__metadata("design:type", Object)
385
+ ], AiProjectGenerateService.prototype, "loggerManagerClient", void 0);
386
+ AiProjectGenerateService = tslib_1.__decorate([
387
+ (0, di_1.Injectable)(),
388
+ tslib_1.__metadata("design:paramtypes", [])
389
+ ], AiProjectGenerateService);
390
+ exports.AiProjectGenerateService = AiProjectGenerateService;
391
+ const template = {
392
+ 'mini.project.json': `
393
+ {
394
+ "enableAppxNg": true
395
+ }
396
+ `,
397
+ 'README.md': `
398
+ 一个简单的示例 Demo
399
+ `,
400
+ '.gitignore': `
401
+ logs
402
+ node_modules
403
+ npm-debug.log
404
+ dist
405
+ public
406
+ .DS_Store
407
+ .nyc_output
408
+ .basement
409
+ .umi
410
+ .umi-production
411
+ .idea
412
+ .history
413
+ .node
414
+ `,
415
+ 'package.json': `
416
+ {
417
+ "name": "new project",
418
+ "version": "1.0.0",
419
+ "private": true,
420
+ "scripts": {
421
+ "build": "bigfish build",
422
+ "ci": "bigfish lint",
423
+ "dev": "bigfish dev",
424
+ "devs": "cross-env MOCK=none bigfish dev",
425
+ "format": "prettier --cache --write .",
426
+ "postinstall": "bigfish setup",
427
+ "lint": "bigfish lint",
428
+ "lint:fix": "bigfish lint --fix",
429
+ "oneapi": "npm run oneapi:service && npm run oneapi:mock",
430
+ "oneapi:mock": "bigfish api generate mock",
431
+ "oneapi:service": "bigfish api generate service",
432
+ "prepare": "husky install",
433
+ "setup": "bigfish setup",
434
+ "test": "bigfish test"
435
+ },
436
+ "dependencies": {
437
+ "@alipay/bigfish": "^4.0.157",
438
+ "@alipay/tech-ui": "^3.2.2",
439
+ "@monaco-editor/react": "^4.4.6",
440
+ "antd": "conch-v5"
441
+ },
442
+ "devDependencies": {
443
+ "@ali/ci": "^4.43.0",
444
+ "cross-env": "^7.0.3",
445
+ "husky": "^8.0.1",
446
+ "lint-staged": "^13.0.3",
447
+ "prettier": "^2.7.1",
448
+ "typescript": "^4.1.2"
449
+ },
450
+ "engines": {
451
+ "install-node": "16"
452
+ },
453
+ "ci": {
454
+ "type": "aci",
455
+ "coverage": false
456
+ }
457
+ }
458
+ `,
459
+ };
460
+ //# sourceMappingURL=generate.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.service.js","sourceRoot":"","sources":["../../../src/browser/ai-project/generate.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { CommandService, CommandRegistry, Command } from '@opensumi/ide-core-common';
2
+ export declare class AiSumiService {
3
+ aiBackService: any;
4
+ protected readonly commandService: CommandService;
5
+ protected readonly commandRegistryService: CommandRegistry;
6
+ private taskPrompt;
7
+ message(input: string): Promise<Command | undefined>;
8
+ private requestCommand;
9
+ private matchCommand;
10
+ }
11
+ //# sourceMappingURL=sumi.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sumi.service.d.ts","sourceRoot":"","sources":["../../../src/browser/ai-sumi/sumi.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAIrF,qBACa,aAAa;IAExB,aAAa,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,eAAe,CAAC;IAE3D,OAAO,CAAC,UAAU;IAOL,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;YAoBnD,cAAc;IAc5B,OAAO,CAAC,YAAY;CAMrB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiSumiService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable no-console */
6
+ const di_1 = require("@opensumi/di");
7
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
8
+ const common_1 = require("../../common");
9
+ let AiSumiService = class AiSumiService {
10
+ taskPrompt(command) {
11
+ return `
12
+ 在我的系统中有一些 Command,通过这些命令可以实现一些功能。请通过分析我的问题,找到我想要实现的功能,匹配适合的 Command。
13
+ 请参照下面的示例问答,按照示例回答的格式返回。如果找不到合适的命令,请返回未找到合适命令。
14
+ 以下是系统内的全部 Command: ${command.join('、')}、workbench.action.openGlobalKeybindings、editor.action.setEncoding`;
15
+ }
16
+ async message(input) {
17
+ const commands = this.commandRegistryService.getCommands();
18
+ const commandIds = commands.filter((c) => !!c.label).map((c) => c.delegate || c.id);
19
+ const step = 50;
20
+ const partCommands = Array.from({ length: Math.round(commandIds.length / step) }, (_, index) => index).map((i) => commandIds.slice(i * step, (i + 1) * step));
21
+ const res = await Promise.all(partCommands.map((c) => this.requestCommand(c, input)));
22
+ const passibleCommands = res.filter((r) => !!r);
23
+ let finalCommand = passibleCommands[0];
24
+ if (passibleCommands.length > 1) {
25
+ finalCommand = await this.requestCommand(passibleCommands, input);
26
+ }
27
+ return commands.find((c) => c.id === finalCommand || c.delegate === finalCommand);
28
+ }
29
+ async requestCommand(commands, question) {
30
+ const cotPrompt = `
31
+ ${this.taskPrompt(commands)}
32
+ 提问: 打开全局快捷键配置
33
+ 回答: 通过分析需求「打开全局快捷键配置」, 可以获取到一些关键词: open、keybinding、global。通过这些关键词可以在 Command 的列表内匹配到相关的命令是: \`workbench.action.openGlobalKeybindings\`
34
+ 提问: 增加字体大小
35
+ 回答: 通过分析需求「增加字体大小」,可以获取到一些关键词:font、zoomIn、zoomOut。通过这些关键词,无法在 Command 列表中找到合适的命令。
36
+ 提问: ${question}`;
37
+ const res = await this.aiBackService.aiAntGlm(cotPrompt);
38
+ const answerCommand = this.matchCommand(res.data);
39
+ return commands.find((c) => c === answerCommand) || '';
40
+ }
41
+ matchCommand(answer) {
42
+ var _a;
43
+ const commandReg = /`(?<command>\S+)`/;
44
+ const command = commandReg.exec(answer);
45
+ return command ? ((_a = command.groups) === null || _a === void 0 ? void 0 : _a.command) || '' : '';
46
+ }
47
+ };
48
+ tslib_1.__decorate([
49
+ (0, di_1.Autowired)(common_1.AiGPTBackSerivcePath),
50
+ tslib_1.__metadata("design:type", Object)
51
+ ], AiSumiService.prototype, "aiBackService", void 0);
52
+ tslib_1.__decorate([
53
+ (0, di_1.Autowired)(ide_core_common_1.CommandService),
54
+ tslib_1.__metadata("design:type", Object)
55
+ ], AiSumiService.prototype, "commandService", void 0);
56
+ tslib_1.__decorate([
57
+ (0, di_1.Autowired)(ide_core_common_1.CommandRegistry),
58
+ tslib_1.__metadata("design:type", Object)
59
+ ], AiSumiService.prototype, "commandRegistryService", void 0);
60
+ AiSumiService = tslib_1.__decorate([
61
+ (0, di_1.Injectable)()
62
+ ], AiSumiService);
63
+ exports.AiSumiService = AiSumiService;
64
+ //# sourceMappingURL=sumi.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sumi.service.js","sourceRoot":"","sources":["../../../src/browser/ai-sumi/sumi.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { URI, MaybePromise, Event } from '@opensumi/ide-core-browser';
2
+ import { IEditorDocumentModelContentProvider } from '@opensumi/ide-editor/lib/browser/index';
3
+ export declare class AiCodeDocumentProvider implements IEditorDocumentModelContentProvider {
4
+ private _onDidChangeContent;
5
+ onDidChangeContent: Event<URI>;
6
+ provideEditorDocumentModelContent(uri: URI, encoding?: string): MaybePromise<string>;
7
+ isReadonly(uri: URI): MaybePromise<boolean>;
8
+ handlesScheme(scheme: string): boolean;
9
+ }
10
+ //# sourceMappingURL=ai-code-document.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-code-document.provider.d.ts","sourceRoot":"","sources":["../../../src/browser/code-widget/ai-code-document.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,YAAY,EAAW,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,mCAAmC,EAAE,MAAM,wCAAwC,CAAC;AAE7F,qBACa,sBAAuB,YAAW,mCAAmC;IAChF,OAAO,CAAC,mBAAmB,CAAsB;IAEjD,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAkC;IAEhE,iCAAiC,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAIpF,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC;IAI3C,aAAa,CAAC,MAAM,EAAE,MAAM;CAG7B"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiCodeDocumentProvider = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@opensumi/di");
6
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
7
+ let AiCodeDocumentProvider = class AiCodeDocumentProvider {
8
+ constructor() {
9
+ this._onDidChangeContent = new ide_core_browser_1.Emitter();
10
+ this.onDidChangeContent = this._onDidChangeContent.event;
11
+ }
12
+ provideEditorDocumentModelContent(uri, encoding) {
13
+ return '';
14
+ }
15
+ isReadonly(uri) {
16
+ return false;
17
+ }
18
+ handlesScheme(scheme) {
19
+ return scheme === 'AI';
20
+ }
21
+ };
22
+ AiCodeDocumentProvider = tslib_1.__decorate([
23
+ (0, di_1.Injectable)()
24
+ ], AiCodeDocumentProvider);
25
+ exports.AiCodeDocumentProvider = AiCodeDocumentProvider;
26
+ //# sourceMappingURL=ai-code-document.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-code-document.provider.js","sourceRoot":"","sources":["../../../src/browser/code-widget/ai-code-document.provider.ts"],"names":[],"mappings":";;;;AAAA,qCAA0C;AAC1C,iEAA+E;AAIxE,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAA5B;QACG,wBAAmB,GAAG,IAAI,0BAAO,EAAO,CAAC;QAEjD,uBAAkB,GAAe,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAalE,CAAC;IAXC,iCAAiC,CAAC,GAAQ,EAAE,QAAiB;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,UAAU,CAAC,GAAQ;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;CACF,CAAA;AAhBY,sBAAsB;IADlC,IAAA,eAAU,GAAE;GACA,sBAAsB,CAgBlC;AAhBY,wDAAsB"}
@@ -0,0 +1,20 @@
1
+ import { ICodeEditor } from '@opensumi/ide-editor/lib/browser/index';
2
+ import { ZoneWidget } from '@opensumi/monaco-editor-core/esm/vs/editor/contrib/zoneWidget/browser/zoneWidget';
3
+ export declare class AiCodeWidget extends ZoneWidget {
4
+ private configContext;
5
+ private recordLine;
6
+ private answerValue;
7
+ private headUri;
8
+ protected applyClass(): void;
9
+ protected applyStyle(): void;
10
+ protected _fillContainer(container: HTMLElement): void;
11
+ constructor(editor: ICodeEditor, answerValue: string, headUri: string);
12
+ protected revealLine(lineNumber: number, isLastLine: boolean): void;
13
+ getRecordLine(): number;
14
+ setContainerStyle(style: {
15
+ [key in string]: string;
16
+ }): void;
17
+ addClassName(type: string): this;
18
+ showByLine(line: number, lineNumber?: number): void;
19
+ }
20
+ //# sourceMappingURL=ai-code-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-code-widget.d.ts","sourceRoot":"","sources":["../../../src/browser/code-widget/ai-code-widget.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAA+B,MAAM,wCAAwC,CAAC;AAGlG,OAAO,EAAE,UAAU,EAAE,MAAM,kFAAkF,CAAC;AA6F9G,qBACa,YAAa,SAAQ,UAAU;IAE1C,OAAO,CAAC,aAAa,CAAY;IAEjC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAM;IAErB,SAAS,CAAC,UAAU,IAAI,IAAI;IAC5B,SAAS,CAAC,UAAU,IAAI,IAAI;IAE5B,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;gBAiC1C,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;cAgBlD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAIrE,aAAa,IAAI,MAAM;IAIvB,iBAAiB,CAAC,KAAK,EAAE;SAAG,GAAG,IAAI,MAAM,GAAG,MAAM;KAAE,GAAG,IAAI;IAS3D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,IAAI;CAavD"}