@mybricks/plugin-ai 0.0.1 → 0.0.3

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 (203) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +164 -0
  2. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/dist/agents/app.js +335 -0
  4. package/dist/agents/app.js.map +1 -0
  5. package/dist/agents/common.js +483 -0
  6. package/dist/agents/common.js.map +1 -0
  7. package/dist/agents/custom.js +16 -0
  8. package/dist/agents/custom.js.map +1 -0
  9. package/dist/agents/index.js +38 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/agents/knowledges/knowledge-base.js +579 -0
  12. package/dist/agents/knowledges/knowledge-base.js.map +1 -0
  13. package/dist/agents/knowledges/knowledge-node.js +228 -0
  14. package/dist/agents/knowledges/knowledge-node.js.map +1 -0
  15. package/dist/agents/knowledges/types.js +105 -0
  16. package/dist/agents/knowledges/types.js.map +1 -0
  17. package/dist/agents/utils/config.js +229 -0
  18. package/dist/agents/utils/config.js.map +1 -0
  19. package/dist/agents/workspace/coding-manager.js +20 -0
  20. package/dist/agents/workspace/coding-manager.js.map +1 -0
  21. package/dist/agents/workspace/components-manager.js +113 -0
  22. package/dist/agents/workspace/components-manager.js.map +1 -0
  23. package/dist/agents/workspace/outline-focus.js +167 -0
  24. package/dist/agents/workspace/outline-focus.js.map +1 -0
  25. package/dist/agents/workspace/outline-info.js +430 -0
  26. package/dist/agents/workspace/outline-info.js.map +1 -0
  27. package/dist/agents/workspace/page-tree-generator.js +70 -0
  28. package/dist/agents/workspace/page-tree-generator.js.map +1 -0
  29. package/dist/agents/workspace/workspace.js +251 -0
  30. package/dist/agents/workspace/workspace.js.map +1 -0
  31. package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js +100 -0
  32. package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js.map +1 -0
  33. package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js +120 -0
  34. package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js.map +1 -0
  35. package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js +146 -0
  36. package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js.map +1 -0
  37. package/dist/agents/workspace-by-knowledges/test.js +242 -0
  38. package/dist/agents/workspace-by-knowledges/test.js.map +1 -0
  39. package/dist/agents/workspace-by-knowledges/utils/components-manager.js +132 -0
  40. package/dist/agents/workspace-by-knowledges/utils/components-manager.js.map +1 -0
  41. package/dist/agents/workspace-by-knowledges/utils/outline-focus.js +167 -0
  42. package/dist/agents/workspace-by-knowledges/utils/outline-focus.js.map +1 -0
  43. package/dist/agents/workspace-by-knowledges/utils/outline-info.js +430 -0
  44. package/dist/agents/workspace-by-knowledges/utils/outline-info.js.map +1 -0
  45. package/dist/agents/workspace-by-knowledges/workspace.js +169 -0
  46. package/dist/agents/workspace-by-knowledges/workspace.js.map +1 -0
  47. package/dist/api/cloud-components.js +85 -0
  48. package/dist/api/cloud-components.js.map +1 -0
  49. package/dist/api-record-replay/manager.js +168 -0
  50. package/dist/api-record-replay/manager.js.map +1 -0
  51. package/dist/api-record-replay/recorder.js +107 -0
  52. package/dist/api-record-replay/recorder.js.map +1 -0
  53. package/dist/api-record-replay/replayer.js +136 -0
  54. package/dist/api-record-replay/replayer.js.map +1 -0
  55. package/dist/components/attachments/index.js +124 -0
  56. package/dist/components/attachments/index.js.map +1 -0
  57. package/dist/components/attachments/index.less.js +8 -0
  58. package/dist/components/attachments/index.less.js.map +1 -0
  59. package/dist/components/icons/index.js +112 -0
  60. package/dist/components/icons/index.js.map +1 -0
  61. package/dist/components/icons/index.less.js +8 -0
  62. package/dist/components/icons/index.less.js.map +1 -0
  63. package/dist/components/mention/index.js +19 -0
  64. package/dist/components/mention/index.js.map +1 -0
  65. package/dist/components/mention/index.less.js +8 -0
  66. package/dist/components/mention/index.less.js.map +1 -0
  67. package/dist/components/messages/index.js +429 -0
  68. package/dist/components/messages/index.js.map +1 -0
  69. package/dist/components/messages/index.less.js +8 -0
  70. package/dist/components/messages/index.less.js.map +1 -0
  71. package/dist/components/sender/index.js +244 -0
  72. package/dist/components/sender/index.js.map +1 -0
  73. package/dist/components/sender/index.less.js +8 -0
  74. package/dist/components/sender/index.less.js.map +1 -0
  75. package/dist/context/RequestStatusTracker.js +44 -0
  76. package/dist/context/RequestStatusTracker.js.map +1 -0
  77. package/dist/context/index.js +45 -0
  78. package/dist/context/index.js.map +1 -0
  79. package/dist/data.js +4 -0
  80. package/dist/data.js.map +1 -0
  81. package/dist/index.js +306 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js +27 -0
  84. package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
  85. package/dist/plugin-ai/package.json.js +8 -0
  86. package/dist/plugin-ai/package.json.js.map +1 -0
  87. package/dist/plugin-ai/test/index.js +206 -0
  88. package/dist/plugin-ai/test/index.js.map +1 -0
  89. package/dist/preset/createTemplates.js +29 -0
  90. package/dist/preset/createTemplates.js.map +1 -0
  91. package/dist/preset/index.js +13 -0
  92. package/dist/preset/index.js.map +1 -0
  93. package/dist/preset/prompts.js +34 -0
  94. package/dist/preset/prompts.js.map +1 -0
  95. package/dist/preset/user.js +7 -0
  96. package/dist/preset/user.js.map +1 -0
  97. package/dist/requestAsStream.js +269 -0
  98. package/dist/requestAsStream.js.map +1 -0
  99. package/dist/rxai/node_modules/idb/build/index.js +277 -0
  100. package/dist/rxai/node_modules/idb/build/index.js.map +1 -0
  101. package/dist/rxai/src/agent/base.js +16 -0
  102. package/dist/rxai/src/agent/base.js.map +1 -0
  103. package/dist/rxai/src/agent/planning.js +1076 -0
  104. package/dist/rxai/src/agent/planning.js.map +1 -0
  105. package/dist/rxai/src/agent/rxai.js +254 -0
  106. package/dist/rxai/src/agent/rxai.js.map +1 -0
  107. package/dist/rxai/src/error/base.js +39 -0
  108. package/dist/rxai/src/error/base.js.map +1 -0
  109. package/dist/rxai/src/prompt/base.js +11 -0
  110. package/dist/rxai/src/prompt/base.js.map +1 -0
  111. package/dist/rxai/src/prompt/planning.js +23 -0
  112. package/dist/rxai/src/prompt/planning.js.map +1 -0
  113. package/dist/rxai/src/prompt/tool.js +14 -0
  114. package/dist/rxai/src/prompt/tool.js.map +1 -0
  115. package/dist/rxai/src/request/request.js +123 -0
  116. package/dist/rxai/src/request/request.js.map +1 -0
  117. package/dist/rxai/src/tool/getHistoryRecords.js +65 -0
  118. package/dist/rxai/src/tool/getHistoryRecords.js.map +1 -0
  119. package/dist/rxai/src/tool/util.js +424 -0
  120. package/dist/rxai/src/tool/util.js.map +1 -0
  121. package/dist/rxai/src/utils/events.js +43 -0
  122. package/dist/rxai/src/utils/events.js.map +1 -0
  123. package/dist/rxai/src/utils/idb.js +240 -0
  124. package/dist/rxai/src/utils/idb.js.map +1 -0
  125. package/dist/rxai/src/utils/retry.js +32 -0
  126. package/dist/rxai/src/utils/retry.js.map +1 -0
  127. package/dist/rxai/src/utils/uuid.js +7 -0
  128. package/dist/rxai/src/utils/uuid.js.map +1 -0
  129. package/dist/startView/components/header/header.js +12 -0
  130. package/dist/startView/components/header/header.js.map +1 -0
  131. package/dist/startView/components/header/header.less.js +8 -0
  132. package/dist/startView/components/header/header.less.js.map +1 -0
  133. package/dist/startView/index.js +62 -0
  134. package/dist/startView/index.js.map +1 -0
  135. package/dist/startView/index.less.js +8 -0
  136. package/dist/startView/index.less.js.map +1 -0
  137. package/dist/tools/analyze-and-expand-prd.js +116 -0
  138. package/dist/tools/analyze-and-expand-prd.js.map +1 -0
  139. package/dist/tools/analyze-requirement-and-components.js +208 -0
  140. package/dist/tools/analyze-requirement-and-components.js.map +1 -0
  141. package/dist/tools/answer.js +33 -0
  142. package/dist/tools/answer.js.map +1 -0
  143. package/dist/tools/build-process.js +550 -0
  144. package/dist/tools/build-process.js.map +1 -0
  145. package/dist/tools/coding-subagent-as-tool.js +101 -0
  146. package/dist/tools/coding-subagent-as-tool.js.map +1 -0
  147. package/dist/tools/generate-ui-content.js +528 -0
  148. package/dist/tools/generate-ui-content.js.map +1 -0
  149. package/dist/tools/index.js +31 -0
  150. package/dist/tools/index.js.map +1 -0
  151. package/dist/tools/open-dsl.js +49 -0
  152. package/dist/tools/open-dsl.js.map +1 -0
  153. package/dist/tools/refactor-ui-content.js +292 -0
  154. package/dist/tools/refactor-ui-content.js.map +1 -0
  155. package/dist/tools/utils.js +832 -0
  156. package/dist/tools/utils.js.map +1 -0
  157. package/dist/types/index.js +8 -0
  158. package/dist/types/index.js.map +1 -0
  159. package/dist/view/components/header/header.js +59 -0
  160. package/dist/view/components/header/header.js.map +1 -0
  161. package/dist/view/components/header/header.less.js +8 -0
  162. package/dist/view/components/header/header.less.js.map +1 -0
  163. package/dist/view/index.js +184 -0
  164. package/dist/view/index.js.map +1 -0
  165. package/dist/view/index.less.js +8 -0
  166. package/dist/view/index.less.js.map +1 -0
  167. package/package.json +33 -6
  168. package/src/agents/app.ts +0 -173
  169. package/src/agents/common.ts +0 -111
  170. package/src/agents/index.ts +0 -7
  171. package/src/components/icons/index.less +0 -8
  172. package/src/components/icons/index.tsx +0 -24
  173. package/src/components/messages/index.less +0 -806
  174. package/src/components/messages/index.tsx +0 -236
  175. package/src/context/index.ts +0 -21
  176. package/src/data.ts +0 -5
  177. package/src/index.tsx +0 -84
  178. package/src/mock.ts +0 -1267
  179. package/src/startView/index.less +0 -216
  180. package/src/startView/index.tsx +0 -229
  181. package/src/tools/analyze-and-expand-prd.ts +0 -166
  182. package/src/tools/answer-user.ts +0 -35
  183. package/src/tools/focus-element.ts +0 -47
  184. package/src/tools/generate-page.ts +0 -750
  185. package/src/tools/get-component-info-by-ids.ts +0 -166
  186. package/src/tools/get-component-info.ts +0 -53
  187. package/src/tools/get-components-doc-and-prd.ts +0 -137
  188. package/src/tools/get-focus-mybricks-dsl.ts +0 -26
  189. package/src/tools/get-mybricks-dsl.ts +0 -73
  190. package/src/tools/index.ts +0 -25
  191. package/src/tools/modify-component.ts +0 -385
  192. package/src/tools/type.d.ts +0 -12
  193. package/src/tools/utils.ts +0 -62
  194. package/src/types.d.ts +0 -65
  195. package/src/view/components/header/header.less +0 -17
  196. package/src/view/components/header/header.tsx +0 -15
  197. package/src/view/components/index.ts +0 -3
  198. package/src/view/components/messages/messages.less +0 -228
  199. package/src/view/components/messages/messages.tsx +0 -172
  200. package/src/view/components/sender/sender.less +0 -44
  201. package/src/view/components/sender/sender.tsx +0 -62
  202. package/src/view/index.less +0 -5
  203. package/src/view/index.tsx +0 -18
@@ -0,0 +1,240 @@
1
+ import { asyncToGenerator as _asyncToGenerator } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { openDB } from '../../node_modules/idb/build/index.js';
3
+
4
+ class IDB {
5
+ constructor(options) {
6
+ this.dbPromise = this.init(options.dbName);
7
+ this.key = options.key;
8
+ }
9
+ getDB() {
10
+ return this.dbPromise;
11
+ }
12
+ init(dbName) {
13
+ return _asyncToGenerator(function* () {
14
+ return openDB(dbName, 1, {
15
+ upgrade(db) {
16
+ if (!db.objectStoreNames.contains("plan")) {
17
+ var planStore = db.createObjectStore("plan", {
18
+ autoIncrement: true
19
+ });
20
+ planStore.createIndex("key", "key", {
21
+ unique: false
22
+ });
23
+ }
24
+ if (!db.objectStoreNames.contains("content")) {
25
+ var contentStore = db.createObjectStore("content", {
26
+ autoIncrement: true
27
+ });
28
+ contentStore.createIndex("planId", "planId", {
29
+ unique: false
30
+ });
31
+ contentStore.createIndex("planId-type", ["planId", "type"], {
32
+ unique: true
33
+ });
34
+ }
35
+ }
36
+ });
37
+ })();
38
+ }
39
+ addPlan(plan) {
40
+ var _this = this;
41
+ return _asyncToGenerator(function* () {
42
+ try {
43
+ var db = yield _this.dbPromise;
44
+ var tx = db.transaction("plan", "readwrite");
45
+ var store = tx.objectStore("plan");
46
+ store.add({
47
+ key: _this.key,
48
+ content: yield plan.getDBContent()
49
+ });
50
+ } catch (e) {
51
+ console.error(e, plan);
52
+ }
53
+ })();
54
+ }
55
+ getPlans() {
56
+ var _this2 = this;
57
+ return _asyncToGenerator(function* () {
58
+ try {
59
+ var db = yield _this2.dbPromise;
60
+ var tx = db.transaction("plan", "readonly");
61
+ var store = tx.objectStore("plan");
62
+ var index = store.index("key");
63
+ var plans = yield index.getAll(_this2.key);
64
+ var contentTx = db.transaction("content", "readwrite");
65
+ var contentStore = contentTx.objectStore("content");
66
+ var id = "".concat(_this2.key, "-order");
67
+ var type = "order";
68
+ var order = yield contentStore.index("planId-type").get([id, type]);
69
+ var result = yield Promise.all(plans.map(/*#__PURE__*/function () {
70
+ var _ref = _asyncToGenerator(function* (plan) {
71
+ var {
72
+ content: {
73
+ uuid
74
+ }
75
+ } = plan;
76
+ var tx = db.transaction("content", "readwrite");
77
+ var store = tx.objectStore("content");
78
+ var content = yield store.index("planId").getAll(uuid);
79
+ return {
80
+ plan,
81
+ content
82
+ };
83
+ });
84
+ return function (_x) {
85
+ return _ref.apply(this, arguments);
86
+ };
87
+ }()));
88
+ if (order) {
89
+ return sortPlansByOrder(result, order.content);
90
+ }
91
+ return result;
92
+ } catch (e) {
93
+ console.error(e);
94
+ return [];
95
+ }
96
+ })();
97
+ }
98
+ putContent(content) {
99
+ var _this3 = this;
100
+ return _asyncToGenerator(function* () {
101
+ try {
102
+ var db = yield _this3.dbPromise;
103
+ var tx = db.transaction("content", "readwrite");
104
+ var store = tx.objectStore("content");
105
+ var {
106
+ id,
107
+ type,
108
+ content: putContent
109
+ } = content;
110
+ var res = yield store.index("planId-type").get([id, type]);
111
+ var newRecord = {
112
+ planId: id,
113
+ type,
114
+ content: putContent
115
+ };
116
+ if (res) {
117
+ var _key = yield store.index("planId-type").getKey([id, type]);
118
+ store.put(newRecord, _key);
119
+ } else {
120
+ store.add(newRecord);
121
+ }
122
+
123
+ // 等待事务完成
124
+ yield tx.done;
125
+ } catch (e) {
126
+ console.error(e, content);
127
+ }
128
+ })();
129
+ }
130
+ clear(planningAgents) {
131
+ var _this4 = this;
132
+ return _asyncToGenerator(function* () {
133
+ // 清空所有对应当前key的plan数据,plan再根据uuid去匹配清空content
134
+ var db = yield _this4.dbPromise;
135
+
136
+ // 同一个事务中同时操作 plan 与 content,确保数据一致性
137
+ var tx = db.transaction(["plan", "content"], "readwrite");
138
+ var planStore = tx.objectStore("plan");
139
+ var contentStore = tx.objectStore("content");
140
+ var planIndex = planStore.index("key");
141
+
142
+ // 先拿到当前 key 下所有 plan 记录以及对应的主键
143
+ var [plans, planPrimaryKeys] = yield Promise.all([planIndex.getAll(_this4.key), planIndex.getAllKeys(_this4.key)]);
144
+ if (planningAgents) {
145
+ var uuids = new Set(planningAgents.map(agent => agent.id));
146
+ var contentIndex = contentStore.index("planId");
147
+ var index = 0;
148
+ while (index < plans.length && uuids.size) {
149
+ var {
150
+ content: {
151
+ uuid
152
+ }
153
+ } = plans[index];
154
+ if (uuids.has(uuid)) {
155
+ yield planStore.delete(planPrimaryKeys[index]);
156
+ var contentKeys = yield contentIndex.getAllKeys(uuid);
157
+ for (var _key2 of contentKeys) {
158
+ yield contentStore.delete(_key2);
159
+ }
160
+ uuids.delete(uuid);
161
+ }
162
+ index++;
163
+ }
164
+ yield tx.done;
165
+ return;
166
+ }
167
+
168
+ // 删除 plan 记录
169
+ for (var primaryKey of planPrimaryKeys) {
170
+ yield planStore.delete(primaryKey);
171
+ }
172
+
173
+ // 根据每个 plan 的 uuid,删除 content 中的关联记录
174
+ for (var plan of plans) {
175
+ var {
176
+ content: {
177
+ uuid: _uuid
178
+ }
179
+ } = plan;
180
+ var _contentIndex = contentStore.index("planId");
181
+ var _contentKeys = yield _contentIndex.getAllKeys(_uuid);
182
+ for (var _key3 of _contentKeys) {
183
+ yield contentStore.delete(_key3);
184
+ }
185
+ }
186
+ yield tx.done;
187
+ })();
188
+ }
189
+ updateOrder(ids) {
190
+ var _this5 = this;
191
+ return _asyncToGenerator(function* () {
192
+ try {
193
+ var db = yield _this5.dbPromise;
194
+ var tx = db.transaction("content", "readwrite");
195
+ var store = tx.objectStore("content");
196
+ var id = "".concat(_this5.key, "-order");
197
+ var type = "order";
198
+ if (ids.length) {
199
+ var res = yield store.index("planId-type").get([id, type]);
200
+ var newRecord = {
201
+ planId: id,
202
+ type,
203
+ content: ids
204
+ };
205
+ if (res) {
206
+ var _key4 = yield store.index("planId-type").getKey([id, type]);
207
+ store.put(newRecord, _key4);
208
+ } else {
209
+ store.add(newRecord);
210
+ }
211
+ } else {
212
+ var contentIndex = store.index("planId");
213
+ var contentKeys = yield contentIndex.getAllKeys(id);
214
+ for (var _key5 of contentKeys) {
215
+ yield store.delete(_key5);
216
+ }
217
+ }
218
+
219
+ // 等待事务完成
220
+ yield tx.done;
221
+ } catch (e) {
222
+ console.error(e, ids);
223
+ }
224
+ })();
225
+ }
226
+ }
227
+ function sortPlansByOrder(plans, orderArray) {
228
+ var orderMap = {};
229
+ orderArray.forEach((uuid, index) => {
230
+ orderMap[uuid] = index;
231
+ });
232
+ return plans.sort((a, b) => {
233
+ var indexA = orderMap[a.plan.content.uuid];
234
+ var indexB = orderMap[b.plan.content.uuid];
235
+ return indexA - indexB;
236
+ });
237
+ }
238
+
239
+ export { IDB };
240
+ //# sourceMappingURL=idb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idb.js","sources":["../../../../../rxai/src/utils/idb.ts"],"sourcesContent":["import { openDB, type DBSchema, type IDBPDatabase } from \"idb\";\nimport { PlanningAgent } from \"../agent/planning\";\n\ninterface PlanRecord {\n key: string | number;\n content: {\n uuid: string;\n [key: string]: unknown;\n };\n}\n\ninterface ContentRecord {\n planId: string;\n [key: string]: unknown;\n}\n\ninterface MessagesDBSchema extends DBSchema {\n plan: {\n key: number;\n value: PlanRecord;\n indexes: {\n key: number;\n };\n };\n content: {\n key: number;\n value: ContentRecord;\n indexes: {\n planId: string;\n [\"planId-type\"]: [string, string];\n };\n };\n}\n\ninterface IDBOptions {\n dbName: string;\n key: number;\n}\n\nclass IDB {\n private key: number;\n private dbPromise: Promise<IDBPDatabase<MessagesDBSchema>>;\n\n constructor(options: IDBOptions) {\n this.dbPromise = this.init(options.dbName);\n this.key = options.key;\n }\n\n getDB() {\n return this.dbPromise;\n }\n\n private async init(dbName: string) {\n return openDB<MessagesDBSchema>(dbName, 1, {\n upgrade(db) {\n if (!db.objectStoreNames.contains(\"plan\")) {\n const planStore = db.createObjectStore(\"plan\", {\n autoIncrement: true,\n });\n planStore.createIndex(\"key\", \"key\", { unique: false });\n }\n\n if (!db.objectStoreNames.contains(\"content\")) {\n const contentStore = db.createObjectStore(\"content\", {\n autoIncrement: true,\n });\n contentStore.createIndex(\"planId\", \"planId\", {\n unique: false,\n });\n contentStore.createIndex(\"planId-type\", [\"planId\", \"type\"], {\n unique: true,\n });\n }\n },\n });\n }\n\n async addPlan(plan: PlanningAgent) {\n try {\n const db = await this.dbPromise;\n const tx = db.transaction(\"plan\", \"readwrite\");\n const store = tx.objectStore(\"plan\");\n store.add({\n key: this.key,\n content: await plan.getDBContent(),\n });\n } catch (e) {\n console.error(e, plan);\n }\n }\n\n async getPlans() {\n try {\n const db = await this.dbPromise;\n const tx = db.transaction(\"plan\", \"readonly\");\n const store = tx.objectStore(\"plan\");\n const index = store.index(\"key\");\n const plans = await index.getAll(this.key);\n\n const contentTx = db.transaction(\"content\", \"readwrite\");\n const contentStore = contentTx.objectStore(\"content\");\n const id = `${this.key}-order`;\n const type = \"order\";\n const order = await contentStore.index(\"planId-type\").get([id, type]);\n\n const result = await Promise.all(\n plans.map(async (plan) => {\n const {\n content: { uuid },\n } = plan;\n const tx = db.transaction(\"content\", \"readwrite\");\n const store = tx.objectStore(\"content\");\n const content = await store.index(\"planId\").getAll(uuid);\n\n return { plan, content };\n }),\n );\n\n if (order) {\n return sortPlansByOrder(result, order.content as string[]);\n }\n\n return result;\n } catch (e) {\n console.error(e);\n return [];\n }\n }\n\n async putContent(content: { id: string; type: string; content: unknown }) {\n try {\n const db = await this.dbPromise;\n const tx = db.transaction(\"content\", \"readwrite\");\n const store = tx.objectStore(\"content\");\n const { id, type, content: putContent } = content;\n const res = await store.index(\"planId-type\").get([id, type]);\n const newRecord = {\n planId: id,\n type,\n content: putContent,\n };\n\n if (res) {\n const key = await store.index(\"planId-type\").getKey([id, type])!;\n store.put(newRecord, key);\n } else {\n store.add(newRecord);\n }\n\n // 等待事务完成\n await tx.done;\n } catch (e) {\n console.error(e, content);\n }\n }\n\n async clear(planningAgents?: PlanningAgent[]) {\n // 清空所有对应当前key的plan数据,plan再根据uuid去匹配清空content\n const db = await this.dbPromise;\n\n // 同一个事务中同时操作 plan 与 content,确保数据一致性\n const tx = db.transaction([\"plan\", \"content\"], \"readwrite\");\n const planStore = tx.objectStore(\"plan\");\n const contentStore = tx.objectStore(\"content\");\n\n const planIndex = planStore.index(\"key\");\n\n // 先拿到当前 key 下所有 plan 记录以及对应的主键\n const [plans, planPrimaryKeys] = await Promise.all([\n planIndex.getAll(this.key),\n planIndex.getAllKeys(this.key),\n ]);\n\n if (planningAgents) {\n const uuids = new Set(planningAgents.map((agent) => agent.id));\n const contentIndex = contentStore.index(\"planId\");\n\n let index = 0;\n while (index < plans.length && uuids.size) {\n const {\n content: { uuid },\n } = plans[index];\n\n if (uuids.has(uuid)) {\n await planStore.delete(planPrimaryKeys[index]);\n const contentKeys = await contentIndex.getAllKeys(uuid);\n for (const key of contentKeys) {\n await contentStore.delete(key as number);\n }\n uuids.delete(uuid);\n }\n\n index++;\n }\n\n await tx.done;\n return;\n }\n\n // 删除 plan 记录\n for (const primaryKey of planPrimaryKeys) {\n await planStore.delete(primaryKey as number);\n }\n\n // 根据每个 plan 的 uuid,删除 content 中的关联记录\n for (const plan of plans) {\n const {\n content: { uuid },\n } = plan;\n\n const contentIndex = contentStore.index(\"planId\");\n const contentKeys = await contentIndex.getAllKeys(uuid);\n\n for (const key of contentKeys) {\n await contentStore.delete(key as number);\n }\n }\n\n await tx.done;\n }\n\n async updateOrder(ids: string[]) {\n try {\n const db = await this.dbPromise;\n const tx = db.transaction(\"content\", \"readwrite\");\n const store = tx.objectStore(\"content\");\n const id = `${this.key}-order`;\n const type = \"order\";\n\n if (ids.length) {\n const res = await store.index(\"planId-type\").get([id, type]);\n const newRecord = {\n planId: id,\n type,\n content: ids,\n };\n\n if (res) {\n const key = await store.index(\"planId-type\").getKey([id, type])!;\n store.put(newRecord, key);\n } else {\n store.add(newRecord);\n }\n } else {\n const contentIndex = store.index(\"planId\");\n const contentKeys = await contentIndex.getAllKeys(id);\n\n for (const key of contentKeys) {\n await store.delete(key as number);\n }\n }\n\n // 等待事务完成\n await tx.done;\n } catch (e) {\n console.error(e, ids);\n }\n }\n}\n\nexport { IDB };\n\nfunction sortPlansByOrder(\n plans: {\n plan: PlanRecord;\n content: ContentRecord[];\n }[],\n orderArray: string[],\n) {\n const orderMap: Record<string, number> = {};\n orderArray.forEach((uuid, index) => {\n orderMap[uuid] = index;\n });\n\n return plans.sort((a, b) => {\n const indexA = orderMap[a.plan.content.uuid];\n const indexB = orderMap[b.plan.content.uuid];\n\n return indexA - indexB;\n });\n}\n"],"names":["IDB","constructor","options","dbPromise","init","dbName","key","getDB","_asyncToGenerator","openDB","upgrade","db","objectStoreNames","contains","planStore","createObjectStore","autoIncrement","createIndex","unique","contentStore","addPlan","plan","_this","tx","transaction","store","objectStore","add","content","getDBContent","e","console","error","getPlans","_this2","index","plans","getAll","contentTx","id","concat","type","order","get","result","Promise","all","map","_ref","uuid","_x","apply","arguments","sortPlansByOrder","putContent","_this3","res","newRecord","planId","getKey","put","done","clear","planningAgents","_this4","planIndex","planPrimaryKeys","getAllKeys","uuids","Set","agent","contentIndex","length","size","has","delete","contentKeys","primaryKey","updateOrder","ids","_this5","orderArray","orderMap","forEach","sort","a","b","indexA","indexB"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ var retry = (execute, count, check) => {
2
+ return new Promise((resolve, reject) => {
3
+ var attempt = currentCount => {
4
+ try {
5
+ var result = execute();
6
+ if (result instanceof Promise) {
7
+ result.then(resolve).catch(error => {
8
+ if (currentCount > 1 && (check ? check(error) : true)) {
9
+ console.error("\u91CD\u8BD5\u4E2D... \u5269\u4F59\u6B21\u6570: ".concat(currentCount - 2), error);
10
+ attempt(currentCount - 1);
11
+ } else {
12
+ reject(error);
13
+ }
14
+ });
15
+ } else {
16
+ resolve(result);
17
+ }
18
+ } catch (error) {
19
+ if (currentCount > 1 && (check ? check(error) : true)) {
20
+ console.error("\u91CD\u8BD5\u4E2D... \u5269\u4F59\u6B21\u6570: ".concat(currentCount - 2), error);
21
+ attempt(currentCount - 1);
22
+ } else {
23
+ reject(error);
24
+ }
25
+ }
26
+ };
27
+ attempt(count + 1);
28
+ });
29
+ };
30
+
31
+ export { retry };
32
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sources":["../../../../../rxai/src/utils/retry.ts"],"sourcesContent":["const retry = <T>(\n execute: () => T,\n count: number,\n check?: (error: unknown) => boolean,\n): Promise<T> => {\n return new Promise((resolve, reject) => {\n const attempt = (currentCount: number) => {\n try {\n const result = execute();\n\n if (result instanceof Promise) {\n result.then(resolve).catch((error) => {\n if (currentCount > 1 && (check ? check(error) : true)) {\n console.error(`重试中... 剩余次数: ${currentCount - 2}`, error);\n attempt(currentCount - 1);\n } else {\n reject(error);\n }\n });\n } else {\n resolve(result);\n }\n } catch (error) {\n if (currentCount > 1 && (check ? check(error) : true)) {\n console.error(`重试中... 剩余次数: ${currentCount - 2}`, error);\n attempt(currentCount - 1);\n } else {\n reject(error);\n }\n }\n };\n\n attempt(count + 1);\n });\n};\n\nexport { retry };\n"],"names":["retry","execute","count","check","Promise","resolve","reject","attempt","currentCount","result","then","catch","error","console","concat"],"mappings":"AAAA,IAAMA,KAAK,GAAGA,CACZC,OAAgB,EAChBC,KAAa,EACbC,KAAmC,KACpB;AACf,EAAA,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAMC,OAAO,GAAIC,YAAoB,IAAK;MACxC,IAAI;AACF,QAAA,IAAMC,MAAM,GAAGR,OAAO,EAAE;QAExB,IAAIQ,MAAM,YAAYL,OAAO,EAAE;UAC7BK,MAAM,CAACC,IAAI,CAACL,OAAO,CAAC,CAACM,KAAK,CAAEC,KAAK,IAAK;AACpC,YAAA,IAAIJ,YAAY,GAAG,CAAC,KAAKL,KAAK,GAAGA,KAAK,CAACS,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE;cACrDC,OAAO,CAACD,KAAK,CAAA,kDAAA,CAAAE,MAAA,CAAiBN,YAAY,GAAG,CAAC,CAAA,EAAII,KAAK,CAAC;AACxDL,cAAAA,OAAO,CAACC,YAAY,GAAG,CAAC,CAAC;AAC3B,YAAA,CAAC,MAAM;cACLF,MAAM,CAACM,KAAK,CAAC;AACf,YAAA;AACF,UAAA,CAAC,CAAC;AACJ,QAAA,CAAC,MAAM;UACLP,OAAO,CAACI,MAAM,CAAC;AACjB,QAAA;MACF,CAAC,CAAC,OAAOG,KAAK,EAAE;AACd,QAAA,IAAIJ,YAAY,GAAG,CAAC,KAAKL,KAAK,GAAGA,KAAK,CAACS,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE;UACrDC,OAAO,CAACD,KAAK,CAAA,kDAAA,CAAAE,MAAA,CAAiBN,YAAY,GAAG,CAAC,CAAA,EAAII,KAAK,CAAC;AACxDL,UAAAA,OAAO,CAACC,YAAY,GAAG,CAAC,CAAC;AAC3B,QAAA,CAAC,MAAM;UACLF,MAAM,CAACM,KAAK,CAAC;AACf,QAAA;AACF,MAAA;IACF,CAAC;AAEDL,IAAAA,OAAO,CAACL,KAAK,GAAG,CAAC,CAAC;AACpB,EAAA,CAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,7 @@
1
+ var uuid = () => {
2
+ var _crypto, _crypto$randomUUID;
3
+ return ((_crypto = crypto) === null || _crypto === void 0 || (_crypto$randomUUID = _crypto.randomUUID) === null || _crypto$randomUUID === void 0 ? void 0 : _crypto$randomUUID.call(_crypto)) || "".concat(new Date().getTime(), "-").concat(Math.random()).replace("0.", "");
4
+ };
5
+
6
+ export { uuid };
7
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sources":["../../../../../rxai/src/utils/uuid.ts"],"sourcesContent":["const uuid = () => {\n return (\n crypto?.randomUUID?.() ||\n `${new Date().getTime()}-${Math.random()}`.replace(\"0.\", \"\")\n );\n};\n\nexport { uuid };\n"],"names":["uuid","_crypto","_crypto$randomUUID","crypto","randomUUID","call","concat","Date","getTime","Math","random","replace"],"mappings":"AAAA,IAAMA,IAAI,GAAGA,MAAM;EAAA,IAAAC,OAAA,EAAAC,kBAAA;EACjB,OACE,CAAA,CAAAD,OAAA,GAAAE,MAAM,cAAAF,OAAA,KAAA,MAAA,IAAA,CAAAC,kBAAA,GAAND,OAAA,CAAQG,UAAU,MAAA,IAAA,IAAAF,kBAAA,KAAA,MAAA,GAAA,MAAA,GAAlBA,kBAAA,CAAAG,IAAA,CAAAJ,OAAqB,CAAC,KACtB,EAAA,CAAAK,MAAA,CAAG,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE,EAAA,GAAA,CAAA,CAAAF,MAAA,CAAIG,IAAI,CAACC,MAAM,EAAE,CAAA,CAAGC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AAEhE;;;;"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ import css from './header.less.js';
4
+
5
+ var Header = () => {
6
+ return /*#__PURE__*/React.createElement("div", {
7
+ className: classNames(css.header)
8
+ }, "\u6B22\u8FCE\u4F7F\u7528");
9
+ };
10
+
11
+ export { Header };
12
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sources":["../../../../src/startView/components/header/header.tsx"],"sourcesContent":["import React from \"react\"\nimport classNames from \"classnames\"\nimport css from \"./header.less\"\n\nconst Header = () => {\n return (\n <div className={classNames(css.header)}>\n 欢迎使用\n {/* <img src=\"https://my.mybricks.world/image/icon.png\"/>\n MyBricks.ai */}\n </div>\n )\n}\n\nexport { Header }\n"],"names":["Header","React","createElement","className","classNames","css","header"],"mappings":";;;;AAIA,IAAMA,MAAM,GAAGA,MAAM;EACnB,oBACEC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAEC,UAAU,CAACC,GAAG,CAACC,MAAM;AAAE,GAAA,EAAC,0BAInC,CAAC;AAEV;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../../plugin-ai/node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".header_header__Ctl-8 {\n color: var(--mybricks-color-primary);\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n margin-bottom: 8px;\n font-size: 24px;\n font-weight: 600;\n line-height: 32px;\n display: flex;\n}\n.header_header__Ctl-8 img {\n width: 40px;\n height: 40px;\n object-fit: cover;\n}\n";
4
+ var css = {"header":"header_header__Ctl-8"};
5
+ styleInject(css_248z);
6
+
7
+ export { css as default };
8
+ //# sourceMappingURL=header.less.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.less.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,62 @@
1
+ import { objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import React, { useRef, useState, useEffect } from 'react';
3
+ import { Agents } from '../agents/index.js';
4
+ import { Messages } from '../components/messages/index.js';
5
+ import { Sender } from '../components/sender/index.js';
6
+ import css from './index.less.js';
7
+ import { context } from '../context/index.js';
8
+ import classNames from 'classnames';
9
+ import { Header } from './components/header/header.js';
10
+
11
+ var StartView = _ref => {
12
+ var {
13
+ api,
14
+ user,
15
+ copilot
16
+ } = _ref;
17
+ var senderRef = useRef(null);
18
+ var [loading, setLoading] = useState(false);
19
+ var [empty, setEmpty] = useState(true);
20
+ useEffect(() => {
21
+ if (!loading) {
22
+ senderRef.current.focus();
23
+ }
24
+ }, [loading]);
25
+ var onSend = params => {
26
+ setEmpty(false);
27
+ if (!loading) {
28
+ setLoading(true);
29
+ Agents.requestGenerateCanvasAgent(_objectSpread2(_objectSpread2({}, params), {}, {
30
+ onProgress: status => {
31
+ if (status === "ing") {
32
+ var _api$onProgress;
33
+ (_api$onProgress = api.onProgress) === null || _api$onProgress === void 0 || _api$onProgress.call(api, status);
34
+ }
35
+ },
36
+ rxai: context.globalRxai
37
+ })).then(() => {}).catch(e => {
38
+ console.error("[pluginAI - startView - onSend]", e);
39
+ }).finally(() => {
40
+ setLoading(false);
41
+ });
42
+ }
43
+ };
44
+ return /*#__PURE__*/React.createElement("div", {
45
+ className: classNames(css['view'], {
46
+ [css['empty']]: empty
47
+ })
48
+ }, empty && /*#__PURE__*/React.createElement(Header, null), /*#__PURE__*/React.createElement(Messages, {
49
+ user: user,
50
+ rxai: context.globalRxai,
51
+ copilot: copilot
52
+ }), /*#__PURE__*/React.createElement(Sender, {
53
+ ref: senderRef,
54
+ loading: loading,
55
+ onSend: onSend,
56
+ placeholder: "\u60A8\u597D\uFF0C\u6211\u662F".concat(context.name, "\uFF0C\u8BF7\u8BE6\u7EC6\u63CF\u8FF0\u60A8\u8981\u642D\u5EFA\u7684\u5E94\u7528\u5185\u5BB9"),
57
+ attachmentsPrompt: "根据附件中的图片内容进行设计开发,要求尽可能还原其中的各类设计细节以及功能,在此基础上可做调整优化创新"
58
+ }));
59
+ };
60
+
61
+ export { StartView };
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/startView/index.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\"\nimport { Agents } from \"../agents\";\nimport { Messages } from \"../components/messages\";\nimport { Sender, SenderRef, SenderProps } from \"../components/sender\";\nimport css from \"./index.less\"\nimport { context } from \"../context\";\nimport classNames from \"classnames\";\nimport { Header } from \"./components\";\n\nconst StartView = ({ api, user, copilot }: any) => {\n const senderRef = useRef<SenderRef>(null);\n const [loading, setLoading] = useState(false);\n const [empty, setEmpty] = useState(true);\n\n useEffect(() => {\n if (!loading) {\n senderRef.current!.focus();\n }\n }, [loading])\n\n const onSend = (params: Parameters<SenderProps['onSend']>[0]) => {\n setEmpty(false);\n if (!loading) {\n setLoading(true);\n Agents.requestGenerateCanvasAgent({\n ...params,\n onProgress: (status: string) => {\n if (status === \"ing\") {\n api.onProgress?.(status);\n }\n },\n rxai: context.globalRxai\n }).then(() => {\n\n }).catch((e) => {\n console.error(\"[pluginAI - startView - onSend]\", e);\n }).finally(() => {\n setLoading(false);\n });\n }\n }\n\n return (\n <div className={classNames(css['view'], {\n [css['empty']]: empty\n })}\n >\n {empty && <Header />}\n <Messages user={user} rxai={context.globalRxai} copilot={copilot} />\n <Sender\n ref={senderRef}\n loading={loading}\n onSend={onSend}\n placeholder={`您好,我是${context.name},请详细描述您要搭建的应用内容`}\n attachmentsPrompt={\"根据附件中的图片内容进行设计开发,要求尽可能还原其中的各类设计细节以及功能,在此基础上可做调整优化创新\"}\n />\n </div>\n )\n}\n\nexport { StartView }\n"],"names":["StartView","_ref","api","user","copilot","senderRef","useRef","loading","setLoading","useState","empty","setEmpty","useEffect","current","focus","onSend","params","Agents","requestGenerateCanvasAgent","_objectSpread","onProgress","status","_api$onProgress","call","rxai","context","globalRxai","then","catch","e","console","error","finally","React","createElement","className","classNames","css","Header","Messages","Sender","ref","placeholder","concat","name","attachmentsPrompt"],"mappings":";;;;;;;;;;AASA,IAAMA,SAAS,GAAGC,IAAA,IAAiC;EAAA,IAAhC;IAAEC,GAAG;IAAEC,IAAI;AAAEC,IAAAA;AAAa,GAAC,GAAAH,IAAA;AAC5C,EAAA,IAAMI,SAAS,GAAGC,MAAM,CAAY,IAAI,CAAC;EACzC,IAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;EAC7C,IAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGF,QAAQ,CAAC,IAAI,CAAC;AAExCG,EAAAA,SAAS,CAAC,MAAM;IACd,IAAI,CAACL,OAAO,EAAE;AACZF,MAAAA,SAAS,CAACQ,OAAO,CAAEC,KAAK,EAAE;AAC5B,IAAA;AACF,EAAA,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;EAEb,IAAMQ,MAAM,GAAIC,MAA4C,IAAK;IAC/DL,QAAQ,CAAC,KAAK,CAAC;IACf,IAAI,CAACJ,OAAO,EAAE;MACZC,UAAU,CAAC,IAAI,CAAC;AAChBS,MAAAA,MAAM,CAACC,0BAA0B,CAAAC,cAAA,CAAAA,cAAA,KAC5BH,MAAM,CAAA,EAAA,EAAA,EAAA;QACTI,UAAU,EAAGC,MAAc,IAAK;UAC9B,IAAIA,MAAM,KAAK,KAAK,EAAE;AAAA,YAAA,IAAAC,eAAA;AACpB,YAAA,CAAAA,eAAA,GAAApB,GAAG,CAACkB,UAAU,MAAA,IAAA,IAAAE,eAAA,KAAA,MAAA,IAAdA,eAAA,CAAAC,IAAA,CAAArB,GAAG,EAAcmB,MAAM,CAAC;AAC1B,UAAA;QACF,CAAC;QACDG,IAAI,EAAEC,OAAO,CAACC;AAAU,OAAA,CACzB,CAAC,CAACC,IAAI,CAAC,MAAM,CAEd,CAAC,CAAC,CAACC,KAAK,CAAEC,CAAC,IAAK;AACdC,QAAAA,OAAO,CAACC,KAAK,CAAC,iCAAiC,EAAEF,CAAC,CAAC;AACrD,MAAA,CAAC,CAAC,CAACG,OAAO,CAAC,MAAM;QACfxB,UAAU,CAAC,KAAK,CAAC;AACnB,MAAA,CAAC,CAAC;AACJ,IAAA;EACF,CAAC;EAED,oBACEyB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAEC,UAAU,CAACC,GAAG,CAAC,MAAM,CAAC,EAAE;AACtC,MAAA,CAACA,GAAG,CAAC,OAAO,CAAC,GAAG3B;KACjB;AAAE,GAAA,EAEAA,KAAK,iBAAIuB,KAAA,CAAAC,aAAA,CAACI,MAAM,EAAA,IAAE,CAAC,eACpBL,KAAA,CAAAC,aAAA,CAACK,QAAQ,EAAA;AAACpC,IAAAA,IAAI,EAAEA,IAAK;IAACqB,IAAI,EAAEC,OAAO,CAACC,UAAW;AAACtB,IAAAA,OAAO,EAAEA;AAAQ,GAAE,CAAC,eACpE6B,KAAA,CAAAC,aAAA,CAACM,MAAM,EAAA;AACLC,IAAAA,GAAG,EAAEpC,SAAU;AACfE,IAAAA,OAAO,EAAEA,OAAQ;AACjBQ,IAAAA,MAAM,EAAEA,MAAO;AACf2B,IAAAA,WAAW,mCAAAC,MAAA,CAAUlB,OAAO,CAACmB,IAAI,EAAA,4FAAA,CAAkB;AACnDC,IAAAA,iBAAiB,EAAE;AAAsD,GAC1E,CACE,CAAC;AAEV;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../plugin-ai/node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".index_start-view__ZJ3ZM {\n width: 80%;\n max-width: 768px;\n}\n.index_start-view__ZJ3ZM .index_editor__QXYIY {\n width: 100%;\n}\n.index_view__3gbKK {\n width: 80%;\n max-width: 768px;\n background-color: transparent;\n border: solid 1px rgba(0, 0, 0, 0.13);\n border-radius: 20px;\n box-shadow: 0 5px 16px -4px #00000012;\n color: rgba(0, 0, 0, 0.9);\n cursor: default;\n height: 80%;\n display: flex;\n flex-direction: column;\n}\n.index_view__3gbKK.index_empty__t2cx1 {\n display: flex;\n flex-direction: column;\n border: none;\n height: fit-content;\n box-shadow: none;\n}\n";
4
+ var css = {"view":"index_view__3gbKK","empty":"index_empty__t2cx1"};
5
+ styleInject(css_248z);
6
+
7
+ export { css as default };
8
+ //# sourceMappingURL=index.less.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.less.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,116 @@
1
+ import { objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { RxaiError } from '../rxai/src/error/base.js';
3
+ import '../rxai/node_modules/idb/build/index.js';
4
+ import 'node-forge';
5
+ import { fileFormat } from '../rxai/src/prompt/base.js';
6
+ import { getFiles } from './utils.js';
7
+ import { DeviceType } from '../types/index.js';
8
+
9
+ var NAME = 'analyze-and-expand-prd';
10
+ analyzeAndExpandPrd.toolName = NAME;
11
+ function analyzeAndExpandPrd(config) {
12
+ return {
13
+ name: NAME,
14
+ displayName: "对原始产品需求文档分析并扩写",
15
+ description: "\u5BF9\u7528\u6237\u63D0\u4F9B\u7684\u539F\u59CB\u4EA7\u54C1\u9700\u6C42\u6587\u6863\u8FDB\u884C\u9700\u6C42\u5206\u6790\u4E0E\u6269\u5199\uFF0C\u6700\u540E\u62C6\u5206\u6210\u4E0D\u540C\u7684\u9875\u9762\uFF0C\u8F93\u51FA\u7ED3\u6784\u5316\u7684\u7ED3\u679C\u3002\n\u53C2\u6570\uFF1A\u539F\u59CB\u9700\u6C42\u6587\u6863\uFF08\u53EF\u80FD\u662F\u4E00\u53E5\u8BDD\u3001\u4E00\u4E2A\u56FE\u7247\u3001\u751A\u81F3\u5404\u79CD\u7C7B\u578B\u9644\u4EF6\uFF09\n\u4F5C\u7528\uFF1A\u5C06\u6A21\u7CCA\u3001\u7B80\u7565\u7684\u9700\u6C42\u8F6C\u5316\u4E3A\u6E05\u6670\u3001\u5177\u4F53\u5230\u6BCF\u4E2A\u9875\u9762\u3001\u4EE5\u53CA\u6BCF\u4E2A\u9875\u9762\u81EA\u4E0A\u800C\u4E0B\u90FD\u6709\u54EA\u4E9B\u5177\u4F53\u7684\u529F\u80FD\u7684\u8BE6\u7EC6\u63CF\u8FF0\uFF0C\u7528\u4E8E\u6307\u5BFC\u540E\u7EED\u4F4E\u4EE3\u7801\u642D\u5EFA\uFF1B\n\u8FD4\u56DE\u503C\uFF1A\u6269\u5199\u540E\u7684\u7ED3\u6784\u5316\u6587\u6863\uFF1B",
16
+ getPrompts: () => {
17
+ return "<\u5DE5\u5177\u603B\u89C8>\n\u4F60\u662FMyBricks\u4F4E\u4EE3\u7801\u5E73\u53F0\uFF08\u4EE5\u4E0B\u7B80\u79F0MyBricks\u5E73\u53F0\u6216MyBricks\uFF09\u7684\u8D44\u6DF1\u642D\u5EFA\u52A9\u624B\uFF0C\u7ECF\u9A8C\u4E30\u5BCC\u3001\u5B9E\u4E8B\u6C42\u662F\u3001\u903B\u8F91\u4E25\u8C28\u3002\n \n \u4F60\u9700\u8981\u6839\u636E\u7528\u6237\u63D0\u51FA\u7684\u95EE\u9898\u6216\u9700\u6C42\uFF0C\u5207\u6362\u4E0D\u540C\u7684\u8EAB\u4EFD\uFF0C\u5B8C\u6210\u4EE5\u4E0B\u4EFB\u52A1\n\n \u4EFB\u52A1\u4E00\uFF1A\u6839\u636E\u3010\u7528\u6237\u9700\u6C42\u3011\uFF0C\u4F5C\u4E3A\u4EA7\u54C1\u7ECF\u7406\uFF0C\u4E3A\u7528\u6237\u5408\u7406\u6574\u7406\u6216\u8005\u62D3\u5C55\u9700\u6C42\uFF0C\u8FD4\u56DE\u6574\u7406\u597D\u7684\u9700\u6C42\uFF1B\n \u4EFB\u52A1\u4E8C\uFF1A\u6839\u636E\u3010\u7528\u6237\u9700\u6C42\u3011\uFF0C\u4F5C\u4E3A\u4EA7\u54C1\u7ECF\u7406\uFF0C\u4E3A\u7528\u6237\u63D0\u4F9B\u4E00\u4E2A\u5E94\u7528\u7684\u6807\u9898\uFF0C\u8A00\u7B80\u610F\u8D45\uFF0C\u4E0D\u591A\u4E8E10\u4E2A\u5B57\uFF1B\n \u4EFB\u52A1\u4E09\uFF1A\u6839\u636E\u3010\u7528\u6237\u9700\u6C42\u3011\u548C\u3010\u62D3\u5C55\u9700\u6C42\u3011\uFF0C\u4F5C\u4E3A\u8BBE\u8BA1\u5E08\uFF0C\u4E3A\u7528\u6237\u63D0\u4F9B\u6837\u5F0F\u8BBE\u8BA1\u53C2\u8003\uFF1B\n</\u5DE5\u5177\u603B\u89C8>\n\n<\u7279\u522B\u6CE8\u610F>\n - \u5BF9\u8BDD\u53EF\u80FD\u7531\u591A\u8F6E\u6784\u6210\uFF0C\u6BCF\u8F6E\u5BF9\u8BDD\u4E2D\uFF0C\u7528\u6237\u4F1A\u63D0\u51FA\u4E0D\u540C\u7684\u95EE\u9898\u6216\u7ED9\u4E0E\u4FE1\u606F\u8865\u5145\uFF0C\u4F60\u9700\u8981\u6839\u636E\u7528\u6237\u7684\u95EE\u9898\u3001\u9010\u6B65\u5206\u6790\u5904\u7406\u3002\n - \u4F60\u6240\u9762\u5411\u7684\u7528\u6237\u662FMyBricks\u5E73\u53F0\u4E0A\u7684\u7528\u6237\uFF0C\u8FD9\u4E9B\u7528\u6237\u4E0D\u662F\u4E13\u4E1A\u7684\u5F00\u53D1\u4EBA\u5458\uFF0C\u56E0\u6B64\u4F60\u9700\u8981\u4EE5\u7B80\u6D01\u3001\u6613\u61C2\u7684\u65B9\u5F0F\uFF0C\u56DE\u7B54\u7528\u6237\u7684\u95EE\u9898\u3002\n - \u5982\u679C\u9644\u4EF6\u4E2D\u6709\u56FE\u7247\uFF0C\u8BF7\u5728\u8BBE\u8BA1\u5F00\u53D1\u4E2D\u4F5C\u4E3A\u91CD\u8981\u53C2\u8003\uFF0C\u8FDB\u884C\u8BE6\u7EC6\u7684\u9700\u6C42\u53CA\u8BBE\u8BA1\u5206\u6790\uFF0C\u5F53\u4F5C\u7528\u6237\u7684\u9700\u6C42\u3002\n - \u4F60\u7684\u56DE\u7B54\u9762\u5411\u7684\u662F\u975E\u4E13\u4E1A\u5F00\u53D1\u4EBA\u5458\uFF0C\u8BF7\u52A1\u5FC5\u4F7F\u7528**\u7B80\u6D01\u3001\u6613\u61C2\u3001\u53E3\u8BED\u5316**\u7684\u8BED\u8A00\u3002\n</\u7279\u522B\u6CE8\u610F>\n\n<\u9075\u5FAA\u539F\u5219>\n\u4F60\u8981\u5207\u6362\u4E0D\u540C\u7684\u89D2\u8272\u6765\u5B8C\u6210\u4E00\u4E2A\u9700\u6C42\u7684\u8BBE\u8BA1\u548C\u5F00\u53D1\uFF0C\u540C\u65F6\u7279\u522B\u6CE8\u610F\uFF0C\u751F\u6210\u7684\u9875\u9762\u6570\u91CF\u4E0D\u5F97\u8D85\u8FC73\u4E2A\u3002\n</\u9075\u5FAA\u539F\u5219>\n\n<\u5904\u7406\u6D41\u7A0B>\n \u6839\u636E\u4F60\u7684\u89D2\u8272\u5B9A\u4E49\u6765\u5B8C\u6210\u4EE5\u4E0B\u4EFB\u52A1\uFF0C\u6C47\u603B\u7ED9\u51FA\u4E00\u4E2AJson\n <\u4EFB\u52A1\u4E00>\n \u89D2\u8272\uFF1A\u4EA7\u54C1\u7ECF\u7406\n \u5DE5\u4F5C\u4EFB\u52A1\uFF1A\u68B3\u7406\u9700\u6C42\uFF0C\u5E76\u4E14\u5206\u6790\u603B\u5171\u9700\u8981\u51E0\u4E2A\u9875\u9762\u6765\u627F\u63A5\u8FD9\u4E2A\u7CFB\u7EDF\n \u8FD4\u56DE\u5185\u5BB9\uFF1A\u6BCF\u4E2A\u9875\u9762\u7684\u540D\u79F0\u4EE5\u53CA\u9700\u6C42\n \u5BF9\u5E94\u5B57\u6BB5\uFF1A\u9875\u9762\u5B57\u6BB5\u4E2D\u7684title\u4EE5\u53CAprd\n \u8FD4\u56DE\u89C4\u5219\uFF1A\n - \u5982\u679C\u662F\u4E00\u53E5\u8BDD\u9700\u6C42\uFF0C\u4ECE\u4E0A\u5230\u4E0B\u68B3\u7406\u5E76\u62D3\u5C55\u9700\u6C42\uFF0C\u5E76\u6574\u7406\u6210\u9875\u9762\u7EF4\u5EA6\u7684\u9700\u6C42\n - \u5982\u4F55\u5B9A\u4E49\u4E00\u53E5\u8BDD\u9700\u6C42\uFF1F\u4F8B\u5982 \"\u4E00\u4E2A\u7B80\u5386\u9875\u9762\" \"\u5B9E\u73B0\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\" \"\u4E00\u4E2A\u9996\u9875\"\n - \u5982\u4F55\u62D3\u5C55\uFF1F\u62D3\u5C55\u662F\u4EC5\u5206\u6790\u529F\u80FD\u6A21\u5757\u5C31\u884C\uFF0C\u4E0D\u8981\u5177\u4F53\u5230\u7EC6\u8282\uFF0C\u540C\u65F6\u8865\u5145\u4E00\u4E0B\u201C\u4E0D\u6B62\u4E8E\u8FD9\u4E9B\u6A21\u5757\u201D\u7684\u63CF\u8FF0\u6027\u8BCD\u6C47\uFF0C\u544A\u77E5\u8FD9\u53EA\u662F\u7B80\u7565\u7684\u9700\u6C42\uFF0C\u53EF\u4EE5\u8865\u5145\u66F4\u591A\u5185\u5BB9\n - \"\u4E00\u4E2A\u7B80\u5386\u9875\u9762\" -> \"\u4E00\u4E2A\u4E2A\u4EBA\u7B80\u5386\u9875\u9762\uFF0C\u5305\u542B\u4E2A\u4EBA\u4ECB\u7ECD\u3001\u6280\u80FD\u7279\u957F\u3001\u9879\u76EE\u7ECF\u5386\u3001\u8054\u7CFB\u6211\u7B49\u6A21\u5757\u7684\u9875\u9762\"\n - \"\u5B9E\u73B0\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\" -> \"\n \u4E00\u4E2A\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\uFF0C\u5305\u542B\u4EE5\u4E0B\u9875\u9762\uFF1A\n - \u767B\u5F55\u9875\u9762\n - \u7528\u6237\u5217\u8868\u9875\u9762\n - \u65B0\u589E\u7528\u6237\u9875\u9762\n - \u5220\u9664\u7528\u6237\u9875\u9762\"\n - \u5982\u679C\u9700\u6C42\u8F83\u4E3A\u8BE6\u5B9E\uFF0C\u6BD4\u5982\u9644\u4EF6\u4E2D\u56FE\u7247\u548C\u6587\u6863\u53EF\u4EE5\u63D0\u53D6\u51FA\u5B8C\u6574\u7684\u9700\u6C42\uFF0C\u5219\u6574\u7406\u4E4B\u540E\uFF0C\u5728\u6EE1\u8DB3\u7528\u6237\u9700\u6C42\u7684\u57FA\u7840\u4E0A\uFF0C\u9002\u5F53\u8865\u5145\u7EC6\u8282\u5E76\u6574\u7406\u6210\u9875\u9762\u7EF4\u5EA6\u7684\u9700\u6C42\n - \u5982\u4F55\u5B9A\u4E49\u9700\u6C42\u8F83\u4E3A\u8BE6\u5B9E\uFF1F\u4F8B\u5982 \"\u4E00\u4E2A\u5305\u542B\u5BFC\u822A\u3001\u516C\u53F8\u4ECB\u7ECD\u3001\u516C\u53F8\u4F18\u52BF\u3001\u9875\u811A\u7684\u516C\u53F8\u5B98\u7F51\"\uFF0C\u8FD9\u79CD\u5BF9\u5185\u5BB9\u6709\u5B9A\u4E49\u7684\u9700\u6C42\u5C31\u65E0\u9700\u62D3\u5C55\n \u6CE8\u610F\uFF1A\n - \u7531\u4E8E\u6211\u4EEC\u4E0D\u80FD\u5B9E\u73B0\u592A\u590D\u6742\u7684\u9700\u6C42\uFF0C\u9700\u8981\u63A7\u5236\u62D3\u5C55\u9700\u6C42\u7684\u89C4\u6A21\uFF0C\u62D3\u5C55\u4E0D\u8981\u8D85\u8FC73\u4E2A\u9875\u9762\n - \u9700\u6C42\u5FC5\u987B\u662F\u6A21\u7CCA\u7684\u529F\u80FD\u70B9\uFF0C\u4EC5\u5141\u8BB8\u8BF4\u660E\u6709\u8FD9\u4E2A\u6A21\u5757\uFF1A\n \u5BF9\u7684\u529F\u80FD\u70B9\uFF1A\u201C\u5305\u542B\u5546\u54C1\u5C55\u793A\u6A21\u5757\u3001\u89C4\u683C\u9009\u62E9\u3001\u8BC4\u4EF7\u548C\u63A8\u8350\u7B49\u6A21\u5757\uFF0C\u5176\u4ED6\u6A21\u5757\u53EF\u4EE5\u81EA\u884C\u62D3\u5C55\u201D\uFF0C\u8FD9\u91CC\u6CA1\u6709\u5177\u4F53\u5230UI\u7684\u5B9E\u73B0\uFF0C\u662F\u5408\u7406\u7684\u3002\n \u9519\u8BEF\u7684\u529F\u80FD\u70B9\uFF1A\u201C\u5C55\u793A\u4E00\u4E2A\u641C\u7D22\u6846\u548C\u6309\u94AE\uFF0C\u4E0B\u65B9\u63D0\u4F9B\u63A8\u8350\u5546\u54C1\u5217\u8868\uFF0C\u5546\u54C1\u9700\u8981\u5305\u542B\u6807\u9898\u201D\uFF0CUI\u8FC7\u4E8E\u5177\u4F53\uFF0C\u4E0D\u5408\u7406\uFF0C\u5E76\u4E14\u6CA1\u6709\u544A\u77E5\u7528\u6237\u53EF\u4EE5\u8865\u5145\u66F4\u591A\u5185\u5BB9\u3002\n - \u9700\u6C42\u4EC5\u56F4\u7ED5UI\u7684\u5B9E\u73B0\u6765\u62D3\u5C55\uFF0C\u4E0D\u8981\u6D89\u53CA\u591A\u8BED\u8A00\u3001\u670D\u52A1\u7AEF\u3001\u903B\u8F91\u3001SEO\u3001\u6253\u5370\u3001\u622A\u56FE\u3001\u52A8\u753B\uFF0C\u4EE5\u53CA\u4E00\u4E9B\u590D\u6742\u4EA4\u4E92\u7684\u5468\u8FB9\u80FD\u529B\uFF0C\u6211\u4EEC\u4EC5\u5173\u6CE8UI\u90E8\u5206\n </\u4EFB\u52A1\u4E00>\n\n <\u4EFB\u52A1\u4E8C>\n \u89D2\u8272\uFF1A\u4EA7\u54C1\u7ECF\u7406\n \u8FD4\u56DE\u5185\u5BB9\uFF1A\u603B\u7ED3\u7684\u5E94\u7528\u6807\u9898\uFF0C\u8A00\u7B80\u610F\u8D45\uFF0C\u4E0D\u8D85\u8FC710\u4E2A\u5B57\n \u5BF9\u5E94\u5B57\u6BB5\uFF1Atitle\n </\u4EFB\u52A1\u4E8C>\n\n <\u4EFB\u52A1\u4E09>\n \u89D2\u8272\uFF1A\u8BBE\u8BA1\u5E08\n \u8FD4\u56DE\u5185\u5BB9\uFF1A\u7ED9\u51FA\u8BBE\u8BA1\u89C4\u8303\u7684\u5EFA\u8BAE\uFF0C\u8303\u56F4\u5C40\u9650\u4E8E\u989C\u8272\u548C\u6837\u5F0F\uFF0C\u548C\u53C2\u8003\u5EFA\u8BAE\u3002\u4E0D\u63D0\u4F9B\u4EFB\u4F55\u9700\u6C42\u548C\u5E03\u5C40\u65B9\u9762\u7684\u4FE1\u606F\uFF0C\u98CE\u683C\u5316\u4FE1\u606F\u662F\u7ED9\u5230\u4E0B\u4E00\u8F6E\u5927\u6A21\u578B\u7684\u63D0\u793A\u8BCD\uFF0C\u63D0\u4F9B\u5EFA\u8BAE\u5373\u53EF\u3002\n \u5BF9\u5E94\u5B57\u6BB5\uFF1Astyle\n \u8FD4\u56DE\u89C4\u5219\uFF1A\n - \u989C\u8272\u7CFB\u7EDF\u5F88\u91CD\u8981\uFF0C\u9700\u8981\u7ED9\u51FA\u4E3B\u8272\u3001\u80CC\u666F\u8272\u3001\u6587\u672C\u989C\u8272\u3001\u4E8C\u7EA7\u989C\u8272\u7684\u5EFA\u8BAE\uFF0C\u5E76\u7ED9\u51FA\u5177\u4F53\u7684\u989C\u8272\u503C\u3002\u7981\u6B62\u4F7F\u7528\u592A\u9C9C\u8273\u6216\u8005\u592A\u6D45\u7684\u989C\u8272\u503C\u3002\u4E0D\u8981\u628A\u70B9\u7F00\u8272\u6216\u8005\u64CD\u4F5C\u8272\u7528\u4E8E\u5927\u9762\u79EF\u7684\u5143\u7D20\uFF0C\u4F8B\u5982\u6309\u94AE\u3001\u5361\u7247\u80CC\u666F\u7B49\u3002\n - \u6837\u5F0F\u7CFB\u7EDF\u5F88\u91CD\u8981\uFF0C\u9700\u8981\u7ED9\u51FA\u5706\u89D2\u3001\u95F4\u8DDD\u7684\u5EFA\u8BAE\uFF0C\u5E76\u7ED9\u51FA\u5177\u4F53\u7684\u6570\u503C\n - \u53C2\u8003\u5EFA\u8BAE\u5F88\u91CD\u8981\uFF0C\u53EF\u4EE5\u7ED9\u51FA\u4E00\u4E9B\u98CE\u683C\u5316\u53C2\u8003\uFF0C\u501F\u9274\u5E02\u9762\u4E0A\u6210\u719F\u9879\u76EE\u7684\u8BBE\u8BA1\u98CE\u683C\n - \u8303\u56F4\uFF1A\u76EE\u524D\u9650\u5236\u5728\u989C\u8272\u3001\u5B57\u4F53\u6837\u5F0F\uFF08\u4E0D\u5305\u542B\u5B57\u4F53\uFF09\u3001\u9634\u5F71\u548C\u5706\u89D2\u8FD9\u4E9B\u57FA\u7840UI\u7EC6\u8282\uFF0C\u4E0D\u8981\u8003\u8651\u89C6\u5DEE\u6EDA\u52A8\u8FD9\u7C7B\u590D\u6742\u6837\u5F0F\n - \u4E0D\u8981\u63D0\u4F9B\u9488\u5BF9\u7EC4\u4EF6\u7EF4\u5EA6\u7684\u6837\u5F0F\u5EFA\u8BAE\uFF0C\u8981\u4ECE\u9700\u6C42\u7EF4\u5EA6\u53BB\u5EFA\u8BAE\n - \u5982\u679C\u7528\u6237\u81EA\u5DF1\u63D0\u4E86\u98CE\u683C\u5316\u4E3B\u9898\u76F8\u5173\u9700\u6C42\uFF0C\u6574\u7406\u6269\u5C55\u5373\u53EF\n </\u4EFB\u52A1\u4E09>\n</\u5904\u7406\u6D41\u7A0B>\n\n<\u56DE\u7B54\u3001\u8F93\u51FA\u6D41\u7A0B>\n**\u7B2C\u4E00\u6B65\uFF1A\u6DF1\u5EA6\u601D\u8003\u4E0E\u9700\u6C42\u5206\u6790\uFF08\u4EE5Markdown\u683C\u5F0F\u5448\u73B0\uFF09**\n\u5728\u7ED9\u51FA\u6B63\u5F0F\u65B9\u6848\u524D\uFF0C\u4F60\u5FC5\u987B\u5148\u8F93\u51FA\u4E00\u4E2A\u8BE6\u7EC6\u7684\u201C**\u601D\u8003\u8FC7\u7A0B**\u201D\u90E8\u5206\u3002\u8FD9\u90E8\u5206\u7684\u76EE\u6807\u662F\u8BA9\u7528\u6237\u5B8C\u5168\u7406\u89E3\u4F60\u7684\u8BBE\u8BA1\u601D\u8DEF\u3002\u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u7EC4\u7EC7\uFF1A\n1. **\u9700\u6C42\u89E3\u8BFB**\uFF1A\u7528\u4E00\u4E24\u53E5\u8BDD\u590D\u8FF0\u5E76\u7406\u89E3\u7528\u6237\u7684\u6838\u5FC3\u610F\u56FE\u3002\n2. **\u9875\u9762\u89C4\u5212\u903B\u8F91**\uFF1A\n * \u8BF4\u660E\u4F60\u8BA1\u5212\u8BBE\u8BA1\u54EA\u51E0\u4E2A\u9875\u9762\uFF08\u5982\u9996\u9875\u3001\u8BE6\u60C5\u9875\u3001\u4E2A\u4EBA\u4E2D\u5FC3\uFF09\u3002\n * **\u4E3A\u6BCF\u4E2A\u9875\u9762\u89E3\u91CA\u201C\u4E3A\u4EC0\u4E48\u201D**\uFF1A\u4F8B\u5982\uFF0C\u201C\u56E0\u4E3A\u7535\u5546\u9879\u76EE\u7684\u6838\u5FC3\u6D41\u7A0B\u662F\u2018\u6D4F\u89C8->\u67E5\u770B->\u8D2D\u4E70\u2019\uFF0C\u6240\u4EE5\u6211\u4EEC\u9700\u8981\u9996\u9875\uFF08\u7528\u4E8E\u6D4F\u89C8\u53D1\u73B0\uFF09\u3001\u5546\u54C1\u8BE6\u60C5\u9875\uFF08\u7528\u4E8E\u51B3\u7B56\uFF09\u3001\u4E2A\u4EBA\u4E2D\u5FC3\u9875\uFF08\u7528\u4E8E\u7BA1\u7406\u8BA2\u5355\u548C\u8D2D\u7269\u8F66\uFF09\u201D\uFF0C\u6700\u597D\u80FD\u4E0E\u6700\u7EC8\u7684json\u7ED3\u6784\u4FDD\u6301\u4E00\u81F4\u3002\n * \u53EF\u4EE5\u5236\u4F5C\u4E00\u4E2A\u7B80\u5355\u7684\u8868\u683C\u6765\u5BF9\u6BD4\u5404\u9875\u9762\u7684\u6838\u5FC3\u76EE\u6807\u548C\u4E3B\u8981\u529F\u80FD\u3002\n3. **\u8BBE\u8BA1\u98CE\u683C\u6784\u601D**\uFF1A\n * \u7B80\u8981\u8BF4\u660E\u4F60\u4E3A\u8FD9\u4E2A\u5E94\u7528\u8BBE\u5B9A\u4E86\u600E\u6837\u7684\u89C6\u89C9\u98CE\u683C\uFF08\u5982\u201C\u73B0\u4EE3\u7B80\u7EA6\u7684\u79D1\u6280\u611F\u201D\u3001\u201C\u6E29\u6696\u4EB2\u548C\u7684\u793E\u533A\u611F\u201D\uFF09\u3002\n * \u89E3\u91CA\u989C\u8272\u9009\u62E9\u7684\u539F\u56E0\uFF08\u5982\u201C\u4E3B\u8272\u9009\u7528\u84DD\u8272\uFF0C\u4F20\u9012\u4FE1\u4EFB\u4E0E\u4E13\u4E1A\u611F\u201D\uFF09\u3002\n * \u5185\u5BB9\u5C3D\u91CF\u4E30\u5BCC\n\n**\u7B2C\u4E8C\u6B65\uFF1A\u8F93\u51FA\u7ED3\u6784\u5316\u65B9\u6848\uFF08\u4EE5JSON\u683C\u5F0F\u5448\u73B0\uFF09**\n\u5728\u201C\u601D\u8003\u8FC7\u7A0B\u201D\u4E4B\u540E\uFF0C\u8F93\u51FA\u4E00\u4E2A\u540D\u4E3A`\u201C\u3010\u5E94\u7528\u6807\u9898\u3011\u9879\u76EE\u9700\u6C42\u6587\u6863.json\u201D`\u7684JSON\u4EE3\u7801\u5757\u3002json\u683C\u5F0F\u53C2\u8003<examples>\u63D0\u4F9B\u7684\u683C\u5F0F\u3002\n\n**\u6CE8\u610F**\uFF1A\n - \u201C\u601D\u8003\u8FC7\u7A0B\u201D\u76F4\u63A5\u8F93\u51FA\u5373\u53EF\uFF0C\u4E0D\u8981\u4EE5\u4E00\u4E2A\u6807\u9898\u7684\u5F62\u5F0F\u5C55\u73B0\u51FA\u6765\uFF0C\u5426\u5219\u5BF9\u8BDD\u6BD4\u8F83\u5272\u88C2\uFF0C\u4E0D\u81EA\u7136\u3002\n</\u56DE\u7B54\u3001\u8F93\u51FA\u6D41\u7A0B>\n\n<examples>\n ".concat(getExampleByDeviceType(config.deviceType), "\n</examples>");
18
+ },
19
+ aiRole: 'architect',
20
+ // aiRole: "expert",
21
+ stream(params) {
22
+ var {
23
+ files,
24
+ replaceContent
25
+ } = params;
26
+ var file = files[0];
27
+ if (file) {
28
+ return replaceContent.replace(file.fileName, "正在编写需求文档...");
29
+ }
30
+ return replaceContent;
31
+ },
32
+ execute(params) {
33
+ var _errorContent;
34
+ var {
35
+ files,
36
+ content,
37
+ replaceContent
38
+ } = params;
39
+ var errorContent;
40
+ try {
41
+ errorContent = JSON.parse(content);
42
+ } catch (error) {}
43
+ if (errorContent && (_errorContent = errorContent) !== null && _errorContent !== void 0 && _errorContent.message) {
44
+ var _errorContent2;
45
+ throw new RxaiError("\u7F51\u7EDC\u9519\u8BEF\uFF0C".concat((_errorContent2 = errorContent) === null || _errorContent2 === void 0 ? void 0 : _errorContent2.message), "request");
46
+ }
47
+ var projectFile = getFiles(files, {
48
+ extName: 'json'
49
+ });
50
+ var projectJson = {};
51
+ try {
52
+ var _projectJson;
53
+ projectJson = JSON.parse(projectFile === null || projectFile === void 0 ? void 0 : projectFile.content);
54
+ if ((_projectJson = projectJson) !== null && _projectJson !== void 0 && (_projectJson = _projectJson.pages) !== null && _projectJson !== void 0 && _projectJson.length) {
55
+ projectJson.pages = projectJson.pages.map(page => {
56
+ return _objectSpread2(_objectSpread2({}, page), {}, {
57
+ prd: page.prd + '\n' + "\u6CE8\u610F\uFF1A\u5F53\u524D\u6B63\u5728\u642D\u5EFA\u4E00\u4E2A".concat(config.deviceType === DeviceType.Desktop ? 'PC桌面端项目' : '移动端项目', "\uFF0C\u529F\u80FD\u70B9\u4EC5\u4E3A\u6982\u8FF0\uFF0C\u5206\u6790\u548C\u5B9E\u73B0\u65F6\u8BF7\u52A1\u5FC5\u591A\u8865\u5145\u5185\u5BB9\u548C\u7EC6\u8282\u3002")
58
+ });
59
+ });
60
+ }
61
+ } catch (error) {}
62
+ config.onProjectCreate(projectJson);
63
+ if (!projectFile) {
64
+ return content;
65
+ } else if (!projectJson.title) {
66
+ return replaceContent + "\n\u672A\u751F\u6210\u5408\u6CD5\u9879\u76EE\u6587\u4EF6\u3002";
67
+ }
68
+ return replaceContent.replace(projectFile.fileName, "");
69
+ }
70
+ };
71
+ }
72
+ function getExampleByDeviceType(deviceType) {
73
+ if (deviceType === DeviceType.Mobile) {
74
+ return "\n <example>\n <user_query>\u4E00\u4E2A\u672C\u5730\u751F\u6D3BAPP</user_query>\n <assistant_response>\n \u597D\u7684\uFF0C\u5373\u5C06\u4E3A\u4F60\u751F\u6210\u4E00\u4E2A\u5173\u4E8E\u4E00\u4E2A\u672C\u5730\u751F\u6D3BAPP\u7684\u9879\u76EE\u9700\u6C42\u6587\u6863\u3002\n\n \u8FD9\u662F\u6211\u7684\u601D\u8003\u7ED3\u679C\uFF1A\n \u7531\u4E8E\u5F53\u524D\u4FE1\u606F\u8F83\u5C11\uFF0C\u6211\u4EEC\u6765\u5206\u6790\u4E0B\u9700\u6C42\uFF0C\u4E00\u4E2A\u672C\u5730\u751F\u6D3BAPP\uFF0C\u4E00\u822C\u5305\u542B\u300C\u9996\u9875\u300D\u3001\u300C\u7CBE\u9009\u6D3B\u52A8\u300D\u3001\u300C\u5546\u54C1\u8BE6\u60C5\u300D\u3001\u300C\u6211\u7684\u300D\u7B49\u754C\u9762\u3002\n\n \u4ECE\u9700\u6C42\u6765\u770B\uFF0C\u6211\u89C9\u5F97\u53EF\u4EE5\u7ED9\u5E94\u7528\u8D77\u300C\u672C\u5730\u751F\u6D3BAPP\u300D\u8FD9\u4E2A\u6807\u9898\u3002\n\n \u540C\u65F6\u4F5C\u4E3A\u6211\u4E5F\u4F1A\u7ED9\u51FA\u8BBE\u8BA1\u89C4\u8303\u3002\n\n \u6700\u7EC8\u6211\u4EEC\u5E94\u8BE5\u8FD4\u56DE\u8FD9\u6837\u7684\u7ED3\u6784\n ".concat(fileFormat({
75
+ content: JSON.stringify({
76
+ title: '本地生活APP',
77
+ pages: [{
78
+ title: '首页',
79
+ prd: "\u76EE\u7684\uFF1A\u8BF1\u5BFC\u7528\u6237\u8FDB\u884C\u70B9\u51FB\uFF0C\u5B8C\u6210\u5546\u54C1\u8F6C\u5316\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u641C\u7D22\u529F\u80FD\u3001\u5BFC\u822A\u5165\u53E3\u3001\u6D3B\u52A8\u8F6E\u64AD\u548C\u5546\u54C1\u63A8\u8350\u7B49\u57FA\u7840\u6A21\u5757\uFF0C\u5176\u4F59\u5185\u5BB9\u53EF\u81EA\u884C\u53D1\u6563"
80
+ }, {
81
+ title: '精选活动',
82
+ prd: "\u76EE\u7684\uFF1A\u5C55\u793A\u5E73\u53F0\u7684\u4F18\u60E0\u6D3B\u52A8\uFF0C\u5438\u5F15\u7528\u6237\u8FDB\u884C\u8D2D\u4E70\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u4E00\u7EA7\u5206\u7C7B\u3001\u4F18\u60E0\u6D3B\u52A8\u3001\u9650\u65F6\u79D2\u6740\u548C\u5546\u54C1\u5217\u8868\u7B49\u6838\u5FC3\u5185\u5BB9\uFF0C\u53EF\u4EE5\u6309\u7167\u4F60\u7684\u60F3\u6CD5\u6765\u4E30\u5BCC\u66F4\u591A\u5185\u5BB9"
83
+ }, {
84
+ title: '商品详情',
85
+ prd: "\u76EE\u7684\uFF1A\u5C55\u793A\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF1\u5BFC\u7528\u6237\u8FDB\u884C\u4E0B\u5355\u8D2D\u4E70\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u5546\u54C1\u5C55\u793A\u6A21\u5757\u3001\u89C4\u683C\u9009\u62E9\u3001\u8BC4\u4EF7\u548C\u63A8\u8350\u7B49\u6A21\u5757\uFF0C\u5176\u4ED6\u6A21\u5757\u53EF\u4EE5\u81EA\u884C\u62D3\u5C55"
86
+ }, {
87
+ title: '我的',
88
+ prd: "\u76EE\u7684\uFF1A\u63D0\u4F9B\u5BF9\u4E2A\u4EBA\u4FE1\u606F\u7684\u67E5\u770B\u4EE5\u53CA\u4FEE\u6539\u754C\u9762\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u4E2A\u4EBA\u4FE1\u606F\u3001\u4F1A\u5458\u4FE1\u606F\u3001\u8BA2\u5355\u6A21\u5757\u3001\u5BFC\u822A\u5165\u53E3\u7B49\u6A21\u5757"
89
+ }],
90
+ style: "\u4F7F\u7528\u7F8E\u56E2\u6210\u719F\u7684\u989C\u8272\u7CFB\u7EDF\u662F\u4E00\u4E2A\u4E0D\u9519\u7684\u9009\u62E9\n - \u989C\u8272\n - \u4E3B\u989C\u8272\uFF1A\u7F8E\u56E2\u9EC4 #FFD100\n - \u80CC\u666F\u8272\uFF1A\u6D45\u7070\u8272 #F7F7F7\n - \u6587\u672C\u989C\u8272\uFF1A\u4E0D\u5168\u9ED1\u7684\u9ED1\u8272 #272727 \u53EF\u7528\u4E8E\u4E3B\u8981\u7684\u6587\u672C\uFF08\u7981\u6B62\u4F7F\u7528 #000000\uFF0C\u4F1A\u5BFC\u81F4\u65E0\u8BBE\u8BA1\u611F\uFF09\n - \u4E8C\u7EA7\u989C\u8272\uFF1A\u7070\u8272 #A6A6A6 \u53EF\u7528\u4E8E\u8FB9\u6846\u6216\u8005\u6D45\u8272\u6587\u672C\n - \u6837\u5F0F\n - \u5706\u89D2\uFF1A12px\uFF0C\u589E\u52A0\u67D4\u548C\u611F\n - \u95F4\u8DDD\uFF1A16px\n \u540C\u6837\u7684\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u53C2\u8003\u4E00\u4E9B\u5E38\u89C1\u7684\u79FB\u52A8\u7AEFAPP\uFF0C\u6BD4\u5982\u7F8E\u56E2\u548C\u997F\u4E86\u4E48\u7684\u5143\u7D20\u8BBE\u8BA1\u3002\u6CE8\u610F\u989C\u8272\u4E0D\u8981\u592A\u6D45\uFF0C\u4E5F\u4E0D\u8981\u592A\u9C9C\u8273\uFF0C\u6309\u94AE\u7B49\u6BD4\u8F83\u5927\u5757\u7684\u5143\u7D20\u7981\u6B62\u4F7F\u7528\u70B9\u7F00\u8272"
91
+ }, null, 2),
92
+ fileName: '本地生活APP项目需求文档.json'
93
+ }), "\n </assistant_response>\n </example>");
94
+ } else if (deviceType === DeviceType.Desktop) {
95
+ return "\n <example>\n <user_query>\u4E00\u4E2A\u95EE\u7B54\u793E\u533A\u7F51\u7AD9</user_query>\n <assistant_response>\n \u597D\u7684\uFF0C\u5373\u5C06\u4E3A\u4F60\u751F\u6210\u4E00\u4E2A\u5173\u4E8E\u4E00\u4E2A\u95EE\u7B54\u793E\u533A\u7F51\u7AD9\u7684\u9879\u76EE\u9700\u6C42\u6587\u6863\u3002\n\n \u8FD9\u662F\u6211\u7684\u601D\u8003\u7ED3\u679C\uFF1A\n \u7531\u4E8E\u5F53\u524D\u4FE1\u606F\u8F83\u5C11\uFF0C\u6211\u4EEC\u6765\u5206\u6790\u4E0B\u9700\u6C42\uFF0C\u4E00\u4E2A\u95EE\u7B54\u793E\u533A\u7F51\u7AD9\uFF0C\u4E00\u822C\u5305\u542B\u300C\u9996\u9875\u300D\u3001\u300C\u95EE\u7B54\u8BE6\u60C5\u300D\u3001\u300C\u6211\u7684\u4E3B\u9875\u300D\u7B49\u754C\u9762\u3002\n\n \u4ECE\u9700\u6C42\u6765\u770B\uFF0C\u6211\u89C9\u5F97\u53EF\u4EE5\u7ED9\u5E94\u7528\u8D77\u300C\u95EE\u7B54\u793E\u533A\u7F51\u7AD9\u300D\u8FD9\u4E2A\u6807\u9898\u3002\n\n \u540C\u65F6\u4F5C\u4E3A\u6211\u4E5F\u4F1A\u7ED9\u51FA\u8BBE\u8BA1\u89C4\u8303\u3002\n\n \u6700\u7EC8\u6211\u4EEC\u5E94\u8BE5\u8FD4\u56DE\u8FD9\u6837\u7684\u7ED3\u6784\n ".concat(fileFormat({
96
+ content: JSON.stringify({
97
+ title: '问答社区网站',
98
+ pages: [{
99
+ title: '首页',
100
+ prd: "\u76EE\u7684\uFF1A\u5F15\u5BFC\u7528\u6237\u8FDB\u884C\u95EE\u7B54\u5185\u5BB9\u7684\u4E92\u52A8\uFF0C\u63A8\u8350\u7528\u6237\u559C\u6B22\u7684\u95EE\u7B54\u5185\u5BB9\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u641C\u7D22\u3001\u5BFC\u822A\u3001\u70ED\u699C\u3001\u63A8\u8350\u7B49\u57FA\u7840\u5185\u5BB9\uFF0C\u5176\u4F59\u5185\u5BB9\u53EF\u81EA\u884C\u53D1\u6563"
101
+ }, {
102
+ title: '问答详情',
103
+ prd: "\u76EE\u7684\uFF1A\u5C55\u793A\u95EE\u7B54\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5F15\u5BFC\u7528\u6237\u8FDB\u884C\u4E92\u52A8\uFF0C\u5E76\u4E14\u5BF9\u4E0D\u540C\u5BF9\u56DE\u7B54\u8FDB\u884C\u70B9\u8D5E\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u95EE\u9898\u3001\u4E0D\u540C\u7528\u6237\u56DE\u7B54\u3001\u662F\u5426\u8D5E\u540C\u7B49\u6838\u5FC3\u6A21\u5757\uFF0C\u5176\u4F59\u53EF\u4EE5\u6309\u7167\u4F60\u7684\u60F3\u6CD5\u6765\u4E30\u5BCC\u66F4\u591A\u5185\u5BB9"
104
+ }, {
105
+ title: '我的主页',
106
+ prd: "\u76EE\u7684\uFF1A\u63D0\u4F9B\u5BF9\u4E2A\u4EBA\u4FE1\u606F\u7684\u67E5\u770B\u4EE5\u53CA\u4E92\u52A8\u754C\u9762\n \u529F\u80FD\u70B9\uFF1A\u5305\u542B\u4E2A\u4EBA\u4FE1\u606F\u3001\u4F1A\u5458\u4FE1\u606F\u3001\u6211\u7684\u56DE\u7B54\u3001\u70B9\u8D5E\u3001\u521B\u4F5C\u6570\u636E\u7B49\u6838\u5FC3\u529F\u80FD"
107
+ }],
108
+ style: "\u4F7F\u7528\u77E5\u4E4E\u6210\u719F\u7684\u989C\u8272\u7CFB\u7EDF\u662F\u4E00\u4E2A\u4E0D\u9519\u7684\u9009\u62E9\n - \u989C\u8272\n - \u4E3B\u989C\u8272\uFF1A\u77E5\u4E4E\u84DD #1772f6\n - \u80CC\u666F\u8272\uFF1A\u6D45\u7070\u84DD\u8272 #f4f6f9\n - \u6587\u672C\u989C\u8272\uFF1A\u4E0D\u5168\u9ED1\u7684\u9ED1\u8272 #272727 \u53EF\u7528\u4E8E\u4E3B\u8981\u7684\u6587\u672C\uFF08\u7981\u6B62\u4F7F\u7528 #000000\uFF0C\u4F1A\u5BFC\u81F4\u65E0\u8BBE\u8BA1\u611F\uFF09\n - \u4E8C\u7EA7\u989C\u8272\uFF1A\u7070\u8272 #A6A6A6 \u53EF\u7528\u4E8E\u8FB9\u6846\u6216\u8005\u6D45\u8272\u6587\u672C\n - \u6837\u5F0F\n - \u5706\u89D2\uFF1A2px\uFF0C\u4E25\u8C28\u53C8\u4E0D\u5931\u67D4\u5F31\n - \u95F4\u8DDD\uFF1A16px\n \u540C\u6837\u7684\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u53C2\u8003\u4E00\u4E9B\u5176\u4ED6\u5E38\u89C1\u7684\u684C\u9762\u7AEF\u8F6F\u4EF6\u6216\u8005\u7F51\u7AD9\uFF0C\u6BD4\u5982\u77E5\u4E4E\u548C\u601D\u5426\u7684\u8BBE\u8BA1\u3002\u6CE8\u610F\u53D6\u8272\u548C\u8BBE\u8BA1\u5FC5\u987B\u6709\u8BBE\u8BA1\u611F"
109
+ }, null, 2),
110
+ fileName: '问答社区网站需求文档.json'
111
+ }), "\n </assistant_response>\n </example>");
112
+ }
113
+ }
114
+
115
+ export { analyzeAndExpandPrd as default };
116
+ //# sourceMappingURL=analyze-and-expand-prd.js.map