feihong-code 7.0.0 → 7.2.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 (236) hide show
  1. package/.github/workflows/release.yml +173 -0
  2. package/CHANGELOG.md +50 -0
  3. package/dist/agent/browser-agent.js +354 -0
  4. package/dist/agent/browser-agent.js.map +1 -0
  5. package/dist/agent/change-manager.js +433 -0
  6. package/dist/agent/change-manager.js.map +1 -0
  7. package/dist/agent/code-rag.js +293 -0
  8. package/dist/agent/code-rag.js.map +1 -0
  9. package/dist/agent/code-writer.js +13 -1
  10. package/dist/agent/code-writer.js.map +1 -1
  11. package/dist/agent/completion-engine.js +522 -0
  12. package/dist/agent/completion-engine.js.map +1 -0
  13. package/dist/agent/context-compactor.js +188 -10
  14. package/dist/agent/context-compactor.js.map +1 -1
  15. package/dist/agent/custom-agent.js +368 -0
  16. package/dist/agent/custom-agent.js.map +1 -0
  17. package/dist/agent/design-to-code.js +218 -0
  18. package/dist/agent/design-to-code.js.map +1 -0
  19. package/dist/agent/event-driven-agent.js +359 -0
  20. package/dist/agent/event-driven-agent.js.map +1 -0
  21. package/dist/agent/git-integration.js +324 -0
  22. package/dist/agent/git-integration.js.map +1 -0
  23. package/dist/agent/layered-memory.js +329 -0
  24. package/dist/agent/layered-memory.js.map +1 -0
  25. package/dist/agent/multi-agent.js +359 -0
  26. package/dist/agent/multi-agent.js.map +1 -0
  27. package/dist/agent/orchestrator.js +127 -16
  28. package/dist/agent/orchestrator.js.map +1 -1
  29. package/dist/agent/quality-gate.js +139 -0
  30. package/dist/agent/quality-gate.js.map +1 -1
  31. package/dist/agent/self-correction.js +274 -0
  32. package/dist/agent/self-correction.js.map +1 -0
  33. package/dist/agent/self-heal.js +40 -10
  34. package/dist/agent/self-heal.js.map +1 -1
  35. package/dist/agent/solo-agent.js +321 -0
  36. package/dist/agent/solo-agent.js.map +1 -0
  37. package/dist/agent/symbol-index.js +258 -28
  38. package/dist/agent/symbol-index.js.map +1 -1
  39. package/dist/agent/team-collaboration.js +252 -0
  40. package/dist/agent/team-collaboration.js.map +1 -0
  41. package/dist/agent/type-checker.js +229 -0
  42. package/dist/agent/type-checker.js.map +1 -0
  43. package/dist/cli/run.js +1 -0
  44. package/dist/cli/run.js.map +1 -1
  45. package/dist/integrations/collaboration.js +219 -0
  46. package/dist/integrations/collaboration.js.map +1 -0
  47. package/dist/integrations/figma.js +307 -0
  48. package/dist/integrations/figma.js.map +1 -0
  49. package/dist/integrations/sso.js +327 -0
  50. package/dist/integrations/sso.js.map +1 -0
  51. package/dist/knowledge/library.js +301 -0
  52. package/dist/knowledge/library.js.map +1 -0
  53. package/dist/plugins/manager.js +332 -0
  54. package/dist/plugins/manager.js.map +1 -0
  55. package/dist/runtime/event-log.js.map +1 -1
  56. package/dist/tools/browser/browser.tool.js +217 -0
  57. package/dist/tools/browser/browser.tool.js.map +1 -0
  58. package/dist/tools/index.js +2 -0
  59. package/dist/tools/index.js.map +1 -1
  60. package/dist/tools/shell/exec.js +50 -10
  61. package/dist/tools/shell/exec.js.map +1 -1
  62. package/dist/tools/shell/run-shell.tool.js +8 -2
  63. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  64. package/dist/training/completion-evaluator.js +213 -0
  65. package/dist/training/completion-evaluator.js.map +1 -0
  66. package/dist/training/fim-data.js +248 -0
  67. package/dist/training/fim-data.js.map +1 -0
  68. package/dist/voice/voice-programming.js +223 -0
  69. package/dist/voice/voice-programming.js.map +1 -0
  70. package/dist/web/public/css/style.css +58 -0
  71. package/dist/web/public/index.html +210 -0
  72. package/dist/web/public/js/api.js +115 -1
  73. package/dist/web/public/js/mock-api.js +234 -0
  74. package/dist/web/public/js/monaco-editor.js +203 -0
  75. package/dist/web/public/js/ui.js +926 -4
  76. package/dist/web/public/manifest.json +59 -0
  77. package/dist/web/public/service-worker.js +173 -0
  78. package/dist/web/public/vendor/monaco/vs/abap-D-t0cyap.js +1 -0
  79. package/dist/web/public/vendor/monaco/vs/apex-CcIm7xu6.js +1 -0
  80. package/dist/web/public/vendor/monaco/vs/assets/css.worker-URu8fCFR.js +97 -0
  81. package/dist/web/public/vendor/monaco/vs/assets/editor.worker-lj3bdIIn.js +30 -0
  82. package/dist/web/public/vendor/monaco/vs/assets/editorWebWorkerMain-CA_vMoUU.js +30 -0
  83. package/dist/web/public/vendor/monaco/vs/assets/html.worker-D1SL3iM8.js +474 -0
  84. package/dist/web/public/vendor/monaco/vs/assets/json.worker-CoJx_OPf.js +62 -0
  85. package/dist/web/public/vendor/monaco/vs/assets/ts.worker-BWKtMYOk.js +67722 -0
  86. package/dist/web/public/vendor/monaco/vs/azcli-BA0tQDCg.js +1 -0
  87. package/dist/web/public/vendor/monaco/vs/basic-languages/monaco.contribution.js +1 -0
  88. package/dist/web/public/vendor/monaco/vs/bat-C397hTD6.js +1 -0
  89. package/dist/web/public/vendor/monaco/vs/bicep-DF5aW17k.js +2 -0
  90. package/dist/web/public/vendor/monaco/vs/cameligo-plsz8qhj.js +1 -0
  91. package/dist/web/public/vendor/monaco/vs/clojure-Y2auQMzK.js +1 -0
  92. package/dist/web/public/vendor/monaco/vs/coffee-Bu45yuWE.js +1 -0
  93. package/dist/web/public/vendor/monaco/vs/cpp-CkKPQIni.js +1 -0
  94. package/dist/web/public/vendor/monaco/vs/csharp-CX28MZyh.js +1 -0
  95. package/dist/web/public/vendor/monaco/vs/csp-D8uWnyxW.js +1 -0
  96. package/dist/web/public/vendor/monaco/vs/css-CaeNmE3S.js +3 -0
  97. package/dist/web/public/vendor/monaco/vs/css.worker-CyhWkhHo.js +1 -0
  98. package/dist/web/public/vendor/monaco/vs/cssMode-CV6Ay48H.js +1 -0
  99. package/dist/web/public/vendor/monaco/vs/cypher-DVThT8BS.js +1 -0
  100. package/dist/web/public/vendor/monaco/vs/dart-CmGfCvrO.js +1 -0
  101. package/dist/web/public/vendor/monaco/vs/dockerfile-CZqqYdch.js +1 -0
  102. package/dist/web/public/vendor/monaco/vs/ecl-30fUercY.js +1 -0
  103. package/dist/web/public/vendor/monaco/vs/editor/editor.main.css +1 -0
  104. package/dist/web/public/vendor/monaco/vs/editor/editor.main.js +1 -0
  105. package/dist/web/public/vendor/monaco/vs/editor/editor.worker.js +1 -0
  106. package/dist/web/public/vendor/monaco/vs/editor-KLE6jdfb.js +831 -0
  107. package/dist/web/public/vendor/monaco/vs/editor.js +1 -0
  108. package/dist/web/public/vendor/monaco/vs/editorWorkerHost-fVE1cjcC.js +35 -0
  109. package/dist/web/public/vendor/monaco/vs/elixir-xjPaIfzF.js +1 -0
  110. package/dist/web/public/vendor/monaco/vs/flow9-DqtmStfK.js +1 -0
  111. package/dist/web/public/vendor/monaco/vs/freemarker2-FWreY7v7.js +3 -0
  112. package/dist/web/public/vendor/monaco/vs/fsharp-BOMdg4U1.js +1 -0
  113. package/dist/web/public/vendor/monaco/vs/go-D_hbi-Jt.js +1 -0
  114. package/dist/web/public/vendor/monaco/vs/graphql-CKUU4kLG.js +1 -0
  115. package/dist/web/public/vendor/monaco/vs/handlebars-CZi4pHCH.js +1 -0
  116. package/dist/web/public/vendor/monaco/vs/hcl-DTaboeZW.js +1 -0
  117. package/dist/web/public/vendor/monaco/vs/html-j_7ZTNRU.js +1 -0
  118. package/dist/web/public/vendor/monaco/vs/html.worker-CA3iAimZ.js +1 -0
  119. package/dist/web/public/vendor/monaco/vs/htmlMode-27by_KM4.js +1 -0
  120. package/dist/web/public/vendor/monaco/vs/index-049xrXrp.js +1 -0
  121. package/dist/web/public/vendor/monaco/vs/index-CBVt3dzv.js +5 -0
  122. package/dist/web/public/vendor/monaco/vs/index.js +1 -0
  123. package/dist/web/public/vendor/monaco/vs/ini-CsNwO04R.js +1 -0
  124. package/dist/web/public/vendor/monaco/vs/initialize-DL0l1TGY.js +1 -0
  125. package/dist/web/public/vendor/monaco/vs/java-CI4ZMsH9.js +1 -0
  126. package/dist/web/public/vendor/monaco/vs/javascript-DTJl4Jn1.js +1 -0
  127. package/dist/web/public/vendor/monaco/vs/json.worker-BizpAl9O.js +1 -0
  128. package/dist/web/public/vendor/monaco/vs/jsonMode-DLUiMUrI.js +1 -0
  129. package/dist/web/public/vendor/monaco/vs/julia-BwzEvaQw.js +1 -0
  130. package/dist/web/public/vendor/monaco/vs/kotlin-IUYPiTV8.js +1 -0
  131. package/dist/web/public/vendor/monaco/vs/language/css/css.worker.js +66 -0
  132. package/dist/web/public/vendor/monaco/vs/language/css/monaco.contribution.js +1 -0
  133. package/dist/web/public/vendor/monaco/vs/language/html/html.worker.js +443 -0
  134. package/dist/web/public/vendor/monaco/vs/language/html/monaco.contribution.js +1 -0
  135. package/dist/web/public/vendor/monaco/vs/language/json/json.worker.js +17 -0
  136. package/dist/web/public/vendor/monaco/vs/language/json/monaco.contribution.js +1 -0
  137. package/dist/web/public/vendor/monaco/vs/language/typescript/monaco.contribution.js +1 -0
  138. package/dist/web/public/vendor/monaco/vs/language/typescript/ts.worker.js +67693 -0
  139. package/dist/web/public/vendor/monaco/vs/less-C0eDYdqa.js +2 -0
  140. package/dist/web/public/vendor/monaco/vs/lexon-iON-Kj97.js +1 -0
  141. package/dist/web/public/vendor/monaco/vs/liquid-CLJYelW6.js +1 -0
  142. package/dist/web/public/vendor/monaco/vs/loader.js +1368 -0
  143. package/dist/web/public/vendor/monaco/vs/lspLanguageFeatures-BIkJOWLw.js +2 -0
  144. package/dist/web/public/vendor/monaco/vs/lua-DtygF91M.js +1 -0
  145. package/dist/web/public/vendor/monaco/vs/m3-CsR4AuFi.js +1 -0
  146. package/dist/web/public/vendor/monaco/vs/main-BEx-Fmlo.js +15 -0
  147. package/dist/web/public/vendor/monaco/vs/main-DsK8pnKg.js +3 -0
  148. package/dist/web/public/vendor/monaco/vs/markdown-C_rD0bIw.js +1 -0
  149. package/dist/web/public/vendor/monaco/vs/mdx-CpzZIPHF.js +1 -0
  150. package/dist/web/public/vendor/monaco/vs/mips-CiYP61RB.js +1 -0
  151. package/dist/web/public/vendor/monaco/vs/monaco.contribution-9cKT3C7t.js +1 -0
  152. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BE88ZNGY.js +1 -0
  153. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BPhsneLd.js +1 -0
  154. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BgRy6xDf.js +1 -0
  155. package/dist/web/public/vendor/monaco/vs/msdax-C38-sJlp.js +1 -0
  156. package/dist/web/public/vendor/monaco/vs/mysql-CdtbpvbG.js +1 -0
  157. package/dist/web/public/vendor/monaco/vs/nls/lang/cs.d.ts +1 -0
  158. package/dist/web/public/vendor/monaco/vs/nls/lang/cs.js +9 -0
  159. package/dist/web/public/vendor/monaco/vs/nls/lang/de.d.ts +1 -0
  160. package/dist/web/public/vendor/monaco/vs/nls/lang/de.js +9 -0
  161. package/dist/web/public/vendor/monaco/vs/nls/lang/es.d.ts +1 -0
  162. package/dist/web/public/vendor/monaco/vs/nls/lang/es.js +9 -0
  163. package/dist/web/public/vendor/monaco/vs/nls/lang/fr.d.ts +1 -0
  164. package/dist/web/public/vendor/monaco/vs/nls/lang/fr.js +9 -0
  165. package/dist/web/public/vendor/monaco/vs/nls/lang/it.d.ts +1 -0
  166. package/dist/web/public/vendor/monaco/vs/nls/lang/it.js +9 -0
  167. package/dist/web/public/vendor/monaco/vs/nls/lang/ja.d.ts +1 -0
  168. package/dist/web/public/vendor/monaco/vs/nls/lang/ja.js +9 -0
  169. package/dist/web/public/vendor/monaco/vs/nls/lang/ko.d.ts +1 -0
  170. package/dist/web/public/vendor/monaco/vs/nls/lang/ko.js +9 -0
  171. package/dist/web/public/vendor/monaco/vs/nls/lang/pl.d.ts +1 -0
  172. package/dist/web/public/vendor/monaco/vs/nls/lang/pl.js +9 -0
  173. package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.d.ts +1 -0
  174. package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.js +9 -0
  175. package/dist/web/public/vendor/monaco/vs/nls/lang/ru.d.ts +1 -0
  176. package/dist/web/public/vendor/monaco/vs/nls/lang/ru.js +9 -0
  177. package/dist/web/public/vendor/monaco/vs/nls/lang/tr.d.ts +1 -0
  178. package/dist/web/public/vendor/monaco/vs/nls/lang/tr.js +9 -0
  179. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.d.ts +1 -0
  180. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.js +9 -0
  181. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.d.ts +1 -0
  182. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.js +9 -0
  183. package/dist/web/public/vendor/monaco/vs/nls.messages-loader.js +1 -0
  184. package/dist/web/public/vendor/monaco/vs/objective-c-CntZFaHX.js +1 -0
  185. package/dist/web/public/vendor/monaco/vs/pascal-r6kuqfl_.js +1 -0
  186. package/dist/web/public/vendor/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
  187. package/dist/web/public/vendor/monaco/vs/perl-DABw_TcH.js +1 -0
  188. package/dist/web/public/vendor/monaco/vs/pgsql-me_jFXeX.js +1 -0
  189. package/dist/web/public/vendor/monaco/vs/php-D_kh-9LK.js +1 -0
  190. package/dist/web/public/vendor/monaco/vs/pla-VfZjczW0.js +1 -0
  191. package/dist/web/public/vendor/monaco/vs/postiats-BBSzz8Pk.js +1 -0
  192. package/dist/web/public/vendor/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
  193. package/dist/web/public/vendor/monaco/vs/powershell-B-7ap1zc.js +1 -0
  194. package/dist/web/public/vendor/monaco/vs/protobuf-BmtuEB1A.js +2 -0
  195. package/dist/web/public/vendor/monaco/vs/pug-BRpRNeEb.js +1 -0
  196. package/dist/web/public/vendor/monaco/vs/python-CqWUUgfu.js +1 -0
  197. package/dist/web/public/vendor/monaco/vs/qsharp-BzsFaUU9.js +1 -0
  198. package/dist/web/public/vendor/monaco/vs/r-f8dDdrp4.js +1 -0
  199. package/dist/web/public/vendor/monaco/vs/razor-hok5y9Km.js +1 -0
  200. package/dist/web/public/vendor/monaco/vs/redis-fvZQY4PI.js +1 -0
  201. package/dist/web/public/vendor/monaco/vs/redshift-45Et0LQi.js +1 -0
  202. package/dist/web/public/vendor/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
  203. package/dist/web/public/vendor/monaco/vs/ruby-CZO8zYTz.js +1 -0
  204. package/dist/web/public/vendor/monaco/vs/rust-Bfetafyc.js +1 -0
  205. package/dist/web/public/vendor/monaco/vs/sb-3GYllVck.js +1 -0
  206. package/dist/web/public/vendor/monaco/vs/scala-foMgrKo1.js +1 -0
  207. package/dist/web/public/vendor/monaco/vs/scheme-CHdMtr7p.js +1 -0
  208. package/dist/web/public/vendor/monaco/vs/scss-C1cmLt9V.js +3 -0
  209. package/dist/web/public/vendor/monaco/vs/shell-ClXCKCEW.js +1 -0
  210. package/dist/web/public/vendor/monaco/vs/solidity-MZ6ExpPy.js +1 -0
  211. package/dist/web/public/vendor/monaco/vs/sophia-DWkuSsPQ.js +1 -0
  212. package/dist/web/public/vendor/monaco/vs/sparql-AUGFYSyk.js +1 -0
  213. package/dist/web/public/vendor/monaco/vs/sql-32GpJSV2.js +1 -0
  214. package/dist/web/public/vendor/monaco/vs/st-CuDFIVZ_.js +1 -0
  215. package/dist/web/public/vendor/monaco/vs/swift-t-PfMj7W.js +1 -0
  216. package/dist/web/public/vendor/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
  217. package/dist/web/public/vendor/monaco/vs/tcl-D74tq1nH.js +1 -0
  218. package/dist/web/public/vendor/monaco/vs/toggleHighContrast-qGX7E9o7.js +61 -0
  219. package/dist/web/public/vendor/monaco/vs/ts.worker-2QLmBukE.js +1 -0
  220. package/dist/web/public/vendor/monaco/vs/tsMode-B0S_kp2q.js +11 -0
  221. package/dist/web/public/vendor/monaco/vs/twig-C6taOxMV.js +1 -0
  222. package/dist/web/public/vendor/monaco/vs/typescript-_2t_511t.js +1 -0
  223. package/dist/web/public/vendor/monaco/vs/typespec-8OfoLt6R.js +1 -0
  224. package/dist/web/public/vendor/monaco/vs/vb-Dyb2648j.js +1 -0
  225. package/dist/web/public/vendor/monaco/vs/wgsl-BhLXMOR0.js +298 -0
  226. package/dist/web/public/vendor/monaco/vs/workers-BBttULjf.js +1 -0
  227. package/dist/web/public/vendor/monaco/vs/xml-cZjNDqDT.js +1 -0
  228. package/dist/web/public/vendor/monaco/vs/yaml-A1fOIdH6.js +1 -0
  229. package/dist/web/server.js +1019 -0
  230. package/dist/web/server.js.map +1 -1
  231. package/dist/web/task-queue.js +22 -2
  232. package/dist/web/task-queue.js.map +1 -1
  233. package/docs/DEPLOYMENT.md +382 -0
  234. package/docs/MODEL_FINETUNING.md +405 -0
  235. package/electron/main.js +202 -4
  236. package/package.json +6 -1
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "飞虹 Code",
3
+ "short_name": "飞虹Code",
4
+ "description": "终端 AI 编程智能体,对标 Muse Code / Cursor",
5
+ "start_url": "/",
6
+ "display": "standalone",
7
+ "background_color": "#1a1a2e",
8
+ "theme_color": "#6366f1",
9
+ "orientation": "any",
10
+ "scope": "/",
11
+ "lang": "zh-CN",
12
+ "dir": "ltr",
13
+ "categories": ["developer-tools", "productivity", "utilities"],
14
+ "icons": [
15
+ {
16
+ "src": "/icons/icon-192.png",
17
+ "sizes": "192x192",
18
+ "type": "image/png",
19
+ "purpose": "any maskable"
20
+ },
21
+ {
22
+ "src": "/icons/icon-512.png",
23
+ "sizes": "512x512",
24
+ "type": "image/png",
25
+ "purpose": "any maskable"
26
+ }
27
+ ],
28
+ "shortcuts": [
29
+ {
30
+ "name": "新建任务",
31
+ "short_name": "新任务",
32
+ "description": "创建新的 AI 编程任务",
33
+ "url": "/?action=new-task",
34
+ "icons": [{ "src": "/icons/icon-192.png", "sizes": "192x192" }]
35
+ },
36
+ {
37
+ "name": "代码补全",
38
+ "short_name": "补全",
39
+ "description": "快速代码补全",
40
+ "url": "/?action=completion",
41
+ "icons": [{ "src": "/icons/icon-192.png", "sizes": "192x192" }]
42
+ },
43
+ {
44
+ "name": "代码审查",
45
+ "short_name": "审查",
46
+ "description": "AI 代码审查",
47
+ "url": "/?action=review",
48
+ "icons": [{ "src": "/icons/icon-192.png", "sizes": "192x192" }]
49
+ }
50
+ ],
51
+ "prefer_related_applications": false,
52
+ "features": [
53
+ "Cross Platform",
54
+ "AI Code Completion",
55
+ "Multi-agent Collaboration",
56
+ "Voice Programming",
57
+ "Knowledge Library"
58
+ ]
59
+ }
@@ -0,0 +1,173 @@
1
+ /**
2
+ * 飞虹 Code Service Worker
3
+ * 支持离线缓存、PWA 安装、移动端适配
4
+ */
5
+
6
+ const CACHE_NAME = 'feihong-code-v1';
7
+ const STATIC_CACHE = 'feihong-static-v1';
8
+ const RUNTIME_CACHE = 'feihong-runtime-v1';
9
+
10
+ // 静态资源缓存列表
11
+ const STATIC_ASSETS = [
12
+ '/',
13
+ '/index.html',
14
+ '/manifest.json',
15
+ '/css/style.css',
16
+ '/js/app.js',
17
+ '/js/ui.js',
18
+ '/js/api.js',
19
+ '/js/utils.js',
20
+ '/js/monaco-editor.js',
21
+ ];
22
+
23
+ // 安装事件:预缓存静态资源
24
+ self.addEventListener('install', (event) => {
25
+ console.log('[SW] Installing...');
26
+ event.waitUntil(
27
+ caches.open(STATIC_CACHE).then((cache) => {
28
+ console.log('[SW] Pre-caching static assets');
29
+ return cache.addAll(STATIC_ASSETS).catch((err) => {
30
+ console.warn('[SW] Pre-cache failed:', err);
31
+ });
32
+ }).then(() => self.skipWaiting())
33
+ );
34
+ });
35
+
36
+ // 激活事件:清理旧缓存
37
+ self.addEventListener('activate', (event) => {
38
+ console.log('[SW] Activating...');
39
+ event.waitUntil(
40
+ caches.keys().then((cacheNames) => {
41
+ return Promise.all(
42
+ cacheNames
43
+ .filter((name) => name !== STATIC_CACHE && name !== RUNTIME_CACHE)
44
+ .map((name) => {
45
+ console.log('[SW] Deleting old cache:', name);
46
+ return caches.delete(name);
47
+ })
48
+ );
49
+ }).then(() => self.clients.claim())
50
+ );
51
+ });
52
+
53
+ // fetch 事件:缓存策略
54
+ self.addEventListener('fetch', (event) => {
55
+ const { request } = event;
56
+ const url = new URL(request.url);
57
+
58
+ // 只缓存同源请求
59
+ if (url.origin !== self.location.origin) {
60
+ return;
61
+ }
62
+
63
+ // API 请求:网络优先,失败时回退到缓存
64
+ if (url.pathname.startsWith('/api/')) {
65
+ event.respondWith(
66
+ fetch(request)
67
+ .then((response) => {
68
+ // 缓存成功的 API 响应
69
+ if (response.status === 200) {
70
+ const clone = response.clone();
71
+ caches.open(RUNTIME_CACHE).then((cache) => cache.put(request, clone));
72
+ }
73
+ return response;
74
+ })
75
+ .catch(() => {
76
+ return caches.match(request).then((cached) => {
77
+ if (cached) return cached;
78
+ // 返回离线错误
79
+ return new Response(JSON.stringify({
80
+ ok: false,
81
+ error: '网络连接失败,显示离线数据',
82
+ offline: true,
83
+ }), {
84
+ status: 503,
85
+ headers: { 'Content-Type': 'application/json' },
86
+ });
87
+ });
88
+ })
89
+ );
90
+ return;
91
+ }
92
+
93
+ // 静态资源:缓存优先,失败时回退到网络
94
+ if (request.method === 'GET') {
95
+ event.respondWith(
96
+ caches.match(request).then((cached) => {
97
+ if (cached) return cached;
98
+ return fetch(request).then((response) => {
99
+ if (response.status === 200) {
100
+ const clone = response.clone();
101
+ caches.open(RUNTIME_CACHE).then((cache) => cache.put(request, clone));
102
+ }
103
+ return response;
104
+ }).catch(() => {
105
+ // 对于 HTML 请求,返回离线页面
106
+ if (request.headers.get('accept')?.includes('text/html')) {
107
+ return caches.match('/index.html');
108
+ }
109
+ return new Response('Offline', { status: 503 });
110
+ });
111
+ })
112
+ );
113
+ }
114
+ });
115
+
116
+ // 消息事件:支持手动更新缓存
117
+ self.addEventListener('message', (event) => {
118
+ const { type } = event.data || {};
119
+
120
+ if (type === 'SKIP_WAITING') {
121
+ self.skipWaiting();
122
+ }
123
+
124
+ if (type === 'CLEAR_CACHE') {
125
+ caches.keys().then((names) => {
126
+ names.forEach((name) => caches.delete(name));
127
+ });
128
+ }
129
+
130
+ if (type === 'GET_VERSION') {
131
+ event.source.postMessage({
132
+ type: 'VERSION',
133
+ version: CACHE_NAME,
134
+ staticCache: STATIC_CACHE,
135
+ runtimeCache: RUNTIME_CACHE,
136
+ });
137
+ }
138
+ });
139
+
140
+ // 推送通知(预留)
141
+ self.addEventListener('push', (event) => {
142
+ if (event.data) {
143
+ const data = event.data.json();
144
+ const title = data.title || '飞虹 Code';
145
+ const options = {
146
+ body: data.body || '',
147
+ icon: '/icons/icon-192.png',
148
+ badge: '/icons/icon-192.png',
149
+ data: data.data || {},
150
+ };
151
+ event.waitUntil(self.registration.showNotification(title, options));
152
+ }
153
+ });
154
+
155
+ // 通知点击
156
+ self.addEventListener('notificationclick', (event) => {
157
+ event.notification.close();
158
+ const url = event.notification.data?.url || '/';
159
+ event.waitUntil(
160
+ clients.openWindow(url).catch(() => {
161
+ return clients.matchAll({ type: 'window' }).then((clientList) => {
162
+ for (const client of clientList) {
163
+ if (client.url === url && 'focus' in client) {
164
+ return client.focus();
165
+ }
166
+ }
167
+ if (clients.openWindow) return clients.openWindow(url);
168
+ });
169
+ })
170
+ );
171
+ });
172
+
173
+ console.log('[SW] Service Worker loaded');
@@ -0,0 +1 @@
1
+ define("vs/abap-D-t0cyap",["exports"],(function(e){"use strict";const t={comments:{lineComment:"*"},brackets:[["[","]"],["(",")"]]},n={defaultToken:"invalid",ignoreCase:!0,tokenPostfix:".abap",keywords:["abap-source","abbreviated","abstract","accept","accepting","according","activation","actual","add","add-corresponding","adjacent","after","alias","aliases","align","all","allocate","alpha","analysis","analyzer","and","append","appendage","appending","application","archive","area","arithmetic","as","ascending","aspect","assert","assign","assigned","assigning","association","asynchronous","at","attributes","authority","authority-check","avg","back","background","backup","backward","badi","base","before","begin","between","big","binary","bintohex","bit","black","blank","blanks","blob","block","blocks","blue","bound","boundaries","bounds","boxed","break-point","buffer","by","bypassing","byte","byte-order","call","calling","case","cast","casting","catch","center","centered","chain","chain-input","chain-request","change","changing","channels","character","char-to-hex","check","checkbox","ci_","circular","class","class-coding","class-data","class-events","class-methods","class-pool","cleanup","clear","client","clob","clock","close","coalesce","code","coding","col_background","col_group","col_heading","col_key","col_negative","col_normal","col_positive","col_total","collect","color","column","columns","comment","comments","commit","common","communication","comparing","component","components","compression","compute","concat","concat_with_space","concatenate","cond","condense","condition","connect","connection","constants","context","contexts","continue","control","controls","conv","conversion","convert","copies","copy","corresponding","country","cover","cpi","create","creating","critical","currency","currency_conversion","current","cursor","cursor-selection","customer","customer-function","dangerous","data","database","datainfo","dataset","date","dats_add_days","dats_add_months","dats_days_between","dats_is_valid","daylight","dd/mm/yy","dd/mm/yyyy","ddmmyy","deallocate","decimal_shift","decimals","declarations","deep","default","deferred","define","defining","definition","delete","deleting","demand","department","descending","describe","destination","detail","dialog","directory","disconnect","display","display-mode","distinct","divide","divide-corresponding","division","do","dummy","duplicate","duplicates","duration","during","dynamic","dynpro","edit","editor-call","else","elseif","empty","enabled","enabling","encoding","end","endat","endcase","endcatch","endchain","endclass","enddo","endenhancement","end-enhancement-section","endexec","endform","endfunction","endian","endif","ending","endinterface","end-lines","endloop","endmethod","endmodule","end-of-definition","end-of-editing","end-of-file","end-of-page","end-of-selection","endon","endprovide","endselect","end-test-injection","end-test-seam","endtry","endwhile","endwith","engineering","enhancement","enhancement-point","enhancements","enhancement-section","entries","entry","enum","environment","equiv","errormessage","errors","escaping","event","events","exact","except","exception","exceptions","exception-table","exclude","excluding","exec","execute","exists","exit","exit-command","expand","expanding","expiration","explicit","exponent","export","exporting","extend","extended","extension","extract","fail","fetch","field","field-groups","fields","field-symbol","field-symbols","file","filter","filters","filter-table","final","find","first","first-line","fixed-point","fkeq","fkge","flush","font","for","form","format","forward","found","frame","frames","free","friends","from","function","functionality","function-pool","further","gaps","generate","get","giving","gkeq","gkge","global","grant","green","group","groups","handle","handler","harmless","hashed","having","hdb","header","headers","heading","head-lines","help-id","help-request","hextobin","hide","high","hint","hold","hotspot","icon","id","identification","identifier","ids","if","ignore","ignoring","immediately","implementation","implementations","implemented","implicit","import","importing","in","inactive","incl","include","includes","including","increment","index","index-line","infotypes","inheriting","init","initial","initialization","inner","inout","input","insert","instance","instances","instr","intensified","interface","interface-pool","interfaces","internal","intervals","into","inverse","inverted-date","is","iso","job","join","keep","keeping","kernel","key","keys","keywords","kind","language","last","late","layout","leading","leave","left","left-justified","leftplus","leftspace","legacy","length","let","level","levels","like","line","lines","line-count","linefeed","line-selection","line-size","list","listbox","list-processing","little","llang","load","load-of-program","lob","local","locale","locator","logfile","logical","log-point","long","loop","low","lower","lpad","lpi","ltrim","mail","main","major-id","mapping","margin","mark","mask","match","matchcode","max","maximum","medium","members","memory","mesh","message","message-id","messages","messaging","method","methods","min","minimum","minor-id","mm/dd/yy","mm/dd/yyyy","mmddyy","mode","modif","modifier","modify","module","move","move-corresponding","multiply","multiply-corresponding","name","nametab","native","nested","nesting","new","new-line","new-page","new-section","next","no","no-display","no-extension","no-gap","no-gaps","no-grouping","no-heading","no-scrolling","no-sign","no-title","no-topofpage","no-zero","node","nodes","non-unicode","non-unique","not","null","number","object","objects","obligatory","occurrence","occurrences","occurs","of","off","offset","ole","on","only","open","option","optional","options","or","order","other","others","out","outer","output","output-length","overflow","overlay","pack","package","pad","padding","page","pages","parameter","parameters","parameter-table","part","partially","pattern","percentage","perform","performing","person","pf1","pf10","pf11","pf12","pf13","pf14","pf15","pf2","pf3","pf4","pf5","pf6","pf7","pf8","pf9","pf-status","pink","places","pool","pos_high","pos_low","position","pragmas","precompiled","preferred","preserving","primary","print","print-control","priority","private","procedure","process","program","property","protected","provide","public","push","pushbutton","put","queue-only","quickinfo","radiobutton","raise","raising","range","ranges","read","reader","read-only","receive","received","receiver","receiving","red","redefinition","reduce","reduced","ref","reference","refresh","regex","reject","remote","renaming","replace","replacement","replacing","report","request","requested","reserve","reset","resolution","respecting","responsible","result","results","resumable","resume","retry","return","returncode","returning","returns","right","right-justified","rightplus","rightspace","risk","rmc_communication_failure","rmc_invalid_status","rmc_system_failure","role","rollback","rows","rpad","rtrim","run","sap","sap-spool","saving","scale_preserving","scale_preserving_scientific","scan","scientific","scientific_with_leading_zero","scroll","scroll-boundary","scrolling","search","secondary","seconds","section","select","selection","selections","selection-screen","selection-set","selection-sets","selection-table","select-options","send","separate","separated","set","shared","shift","short","shortdump-id","sign_as_postfix","single","size","skip","skipping","smart","some","sort","sortable","sorted","source","specified","split","spool","spots","sql","sqlscript","stable","stamp","standard","starting","start-of-editing","start-of-selection","state","statement","statements","static","statics","statusinfo","step-loop","stop","structure","structures","style","subkey","submatches","submit","subroutine","subscreen","subtract","subtract-corresponding","suffix","sum","summary","summing","supplied","supply","suppress","switch","switchstates","symbol","syncpoints","syntax","syntax-check","syntax-trace","system-call","system-exceptions","system-exit","tab","tabbed","table","tables","tableview","tabstrip","target","task","tasks","test","testing","test-injection","test-seam","text","textpool","then","throw","time","times","timestamp","timezone","tims_is_valid","title","titlebar","title-lines","to","tokenization","tokens","top-lines","top-of-page","trace-file","trace-table","trailing","transaction","transfer","transformation","translate","transporting","trmac","truncate","truncation","try","tstmp_add_seconds","tstmp_current_utctimestamp","tstmp_is_valid","tstmp_seconds_between","type","type-pool","type-pools","types","uline","unassign","under","unicode","union","unique","unit_conversion","unix","unpack","until","unwind","up","update","upper","user","user-command","using","utf-8","valid","value","value-request","values","vary","varying","verification-message","version","via","view","visible","wait","warning","when","whenever","where","while","width","window","windows","with","with-heading","without","with-title","word","work","write","writer","xml","xsd","yellow","yes","yymmdd","zero","zone","abap_system_timezone","abap_user_timezone","access","action","adabas","adjust_numbers","allow_precision_loss","allowed","amdp","applicationuser","as_geo_json","as400","associations","balance","behavior","breakup","bulk","cds","cds_client","check_before_save","child","clients","corr","corr_spearman","cross","cycles","datn_add_days","datn_add_months","datn_days_between","dats_from_datn","dats_tims_to_tstmp","dats_to_datn","db2","db6","ddl","dense_rank","depth","deterministic","discarding","entities","entity","error","failed","finalize","first_value","fltp_to_dec","following","fractional","full","graph","grouping","hierarchy","hierarchy_ancestors","hierarchy_ancestors_aggregate","hierarchy_descendants","hierarchy_descendants_aggregate","hierarchy_siblings","incremental","indicators","lag","last_value","lead","leaves","like_regexpr","link","locale_sap","lock","locks","many","mapped","matched","measures","median","mssqlnt","multiple","nodetype","ntile","nulls","occurrences_regexpr","one","operations","oracle","orphans","over","parent","parents","partition","pcre","period","pfcg_mapping","preceding","privileged","product","projection","rank","redirected","replace_regexpr","reported","response","responses","root","row","row_number","sap_system_date","save","schema","session","sets","shortdump","siblings","spantree","start","stddev","string_agg","subtotal","sybase","tims_from_timn","tims_to_timn","to_blob","to_clob","total","trace-entry","tstmp_to_dats","tstmp_to_dst","tstmp_to_tims","tstmpl_from_utcl","tstmpl_to_utcl","unbounded","utcl_add_seconds","utcl_current","utcl_seconds_between","uuid","var","verbatim"],builtinFunctions:["abs","acos","asin","atan","bit-set","boolc","boolx","ceil","char_off","charlen","cmax","cmin","concat_lines_of","contains","contains_any_not_of","contains_any_of","cos","cosh","count","count_any_not_of","count_any_of","dbmaxlen","distance","escape","exp","find_any_not_of","find_any_of","find_end","floor","frac","from_mixed","ipow","line_exists","line_index","log","log10","matches","nmax","nmin","numofchar","repeat","rescale","reverse","round","segment","shift_left","shift_right","sign","sin","sinh","sqrt","strlen","substring","substring_after","substring_before","substring_from","substring_to","tan","tanh","to_lower","to_mixed","to_upper","trunc","utclong_add","utclong_current","utclong_diff","xsdbool","xstrlen"],typeKeywords:["b","c","d","decfloat16","decfloat34","f","i","int8","n","p","s","string","t","utclong","x","xstring","any","clike","csequence","decfloat","numeric","simple","xsequence","accp","char","clnt","cuky","curr","datn","dats","d16d","d16n","d16r","d34d","d34n","d34r","dec","df16_dec","df16_raw","df34_dec","df34_raw","fltp","geom_ewkb","int1","int2","int4","lang","lchr","lraw","numc","quan","raw","rawstring","sstring","timn","tims","unit","utcl","df16_scl","df34_scl","prec","varc","abap_bool","abap_false","abap_true","abap_undefined","me","screen","space","super","sy","syst","table_line","*sys*"],builtinMethods:["class_constructor","constructor"],derivedTypes:["%CID","%CID_REF","%CONTROL","%DATA","%ELEMENT","%FAIL","%KEY","%MSG","%PARAM","%PID","%PID_ASSOC","%PID_PARENT","%_HINTS"],cdsLanguage:["@AbapAnnotation","@AbapCatalog","@AccessControl","@API","@ClientDependent","@ClientHandling","@CompatibilityContract","@DataAging","@EndUserText","@Environment","@LanguageDependency","@MappingRole","@Metadata","@MetadataExtension","@ObjectModel","@Scope","@Semantics","$EXTENSION","$SELF"],selectors:["->","->*","=>","~","~*"],operators:[" +"," -","/","*","**","div","mod","=","#","@","+=","-=","*=","/=","**=","&&=","?=","&","&&","bit-and","bit-not","bit-or","bit-xor","m","o","z","<"," >","<=",">=","<>","><","=<","=>","bt","byte-ca","byte-cn","byte-co","byte-cs","byte-na","byte-ns","ca","cn","co","cp","cs","eq","ge","gt","le","lt","na","nb","ne","np","ns","*/","*:","--","/*","//"],symbols:/[=><!~?&+\-*\/\^%#@]+/,tokenizer:{root:[[/[a-z_\/$%@]([\w\/$%]|-(?!>))*/,{cases:{"@typeKeywords":"type","@keywords":"keyword","@cdsLanguage":"annotation","@derivedTypes":"type","@builtinFunctions":"type","@builtinMethods":"type","@operators":"key","@default":"identifier"}}],[/<[\w]+>/,"identifier"],[/##[\w|_]+/,"comment"],{include:"@whitespace"},[/[:,.]/,"delimiter"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@selectors":"tag","@operators":"key","@default":""}}],[/'/,{token:"string",bracket:"@open",next:"@stringquote"}],[/`/,{token:"string",bracket:"@open",next:"@stringping"}],[/\|/,{token:"string",bracket:"@open",next:"@stringtemplate"}],[/\d+/,"number"]],stringtemplate:[[/[^\\\|]+/,"string"],[/\\\|/,"string"],[/\|/,{token:"string",bracket:"@close",next:"@pop"}]],stringping:[[/[^\\`]+/,"string"],[/`/,{token:"string",bracket:"@close",next:"@pop"}]],stringquote:[[/[^\\']+/,"string"],[/'/,{token:"string",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/^\*.*$/,"comment"],[/\".*$/,"comment"]]}};e.conf=t,e.language=n,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}));
@@ -0,0 +1 @@
1
+ define("vs/apex-CcIm7xu6",["exports"],(function(s){"use strict";const o={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),end:new RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")}}},n=["abstract","activate","and","any","array","as","asc","assert","autonomous","begin","bigdecimal","blob","boolean","break","bulk","by","case","cast","catch","char","class","collect","commit","const","continue","convertcurrency","decimal","default","delete","desc","do","double","else","end","enum","exception","exit","export","extends","false","final","finally","float","for","from","future","get","global","goto","group","having","hint","if","implements","import","in","inner","insert","instanceof","int","interface","into","join","last_90_days","last_month","last_n_days","last_week","like","limit","list","long","loop","map","merge","native","new","next_90_days","next_month","next_n_days","next_week","not","null","nulls","number","object","of","on","or","outer","override","package","parallel","pragma","private","protected","public","retrieve","return","returning","rollback","savepoint","search","select","set","short","sort","stat","static","strictfp","super","switch","synchronized","system","testmethod","then","this","this_month","this_week","throw","throws","today","tolabel","tomorrow","transaction","transient","trigger","true","try","type","undelete","update","upsert","using","virtual","void","volatile","webservice","when","where","while","yesterday"],i=e=>e.charAt(0).toUpperCase()+e.substr(1);let t=[];n.forEach(e=>{t.push(e),t.push(e.toUpperCase()),t.push(i(e))});const a={defaultToken:"",tokenPostfix:".apex",keywords:t,operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,tokenizer:{root:[[/[a-z_$][\w$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/[A-Z][\w\$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"type.identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@apexdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],apexdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}};s.conf=o,s.language=a,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})}));