@opensumi/ide-ai-native 3.9.1-next-1749007675.0 → 3.9.1-next-1749008258.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 (146) hide show
  1. package/lib/browser/chat/chat-manager.service.d.ts +0 -1
  2. package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
  3. package/lib/browser/chat/chat-manager.service.js +3 -8
  4. package/lib/browser/chat/chat-manager.service.js.map +1 -1
  5. package/lib/browser/chat/chat-model.d.ts +1 -3
  6. package/lib/browser/chat/chat-model.d.ts.map +1 -1
  7. package/lib/browser/chat/chat-model.js +17 -48
  8. package/lib/browser/chat/chat-model.js.map +1 -1
  9. package/lib/browser/chat/chat-proxy.service.d.ts +0 -2
  10. package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
  11. package/lib/browser/chat/chat-proxy.service.js +50 -57
  12. package/lib/browser/chat/chat-proxy.service.js.map +1 -1
  13. package/lib/browser/chat/chat.feature.registry.d.ts +1 -4
  14. package/lib/browser/chat/chat.feature.registry.d.ts.map +1 -1
  15. package/lib/browser/chat/chat.feature.registry.js +0 -6
  16. package/lib/browser/chat/chat.feature.registry.js.map +1 -1
  17. package/lib/browser/chat/chat.view.d.ts.map +1 -1
  18. package/lib/browser/chat/chat.view.js +12 -29
  19. package/lib/browser/chat/chat.view.js.map +1 -1
  20. package/lib/browser/components/ChatMentionInput.d.ts.map +1 -1
  21. package/lib/browser/components/ChatMentionInput.js +141 -30
  22. package/lib/browser/components/ChatMentionInput.js.map +1 -1
  23. package/lib/browser/components/ChatToolRender.module.less +1 -0
  24. package/lib/browser/components/components.module.less +9 -8
  25. package/lib/browser/components/mention-input/mention-input.d.ts.map +1 -1
  26. package/lib/browser/components/mention-input/mention-input.js +161 -14
  27. package/lib/browser/components/mention-input/mention-input.js.map +1 -1
  28. package/lib/browser/components/mention-input/mention-input.module.less +165 -1
  29. package/lib/browser/components/mention-input/mention-select.d.ts +28 -0
  30. package/lib/browser/components/mention-input/mention-select.d.ts.map +1 -0
  31. package/lib/browser/components/mention-input/mention-select.js +136 -0
  32. package/lib/browser/components/mention-input/mention-select.js.map +1 -0
  33. package/lib/browser/components/mention-input/mention-select.module.less +297 -0
  34. package/lib/browser/components/mention-input/types.d.ts +16 -1
  35. package/lib/browser/components/mention-input/types.d.ts.map +1 -1
  36. package/lib/browser/components/mention-input/types.js +1 -0
  37. package/lib/browser/components/mention-input/types.js.map +1 -1
  38. package/lib/browser/components/utils.d.ts +2 -2
  39. package/lib/browser/context/llm-context.service.d.ts +21 -2
  40. package/lib/browser/context/llm-context.service.d.ts.map +1 -1
  41. package/lib/browser/context/llm-context.service.js +162 -20
  42. package/lib/browser/context/llm-context.service.js.map +1 -1
  43. package/lib/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.d.ts.map +1 -1
  44. package/lib/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.js.map +1 -1
  45. package/lib/browser/contrib/intelligent-completions/diff-computer.js +1 -1
  46. package/lib/browser/contrib/intelligent-completions/diff-computer.js.map +1 -1
  47. package/lib/browser/contrib/terminal/terminal.feature.registry.js.map +1 -1
  48. package/lib/browser/index.d.ts.map +1 -1
  49. package/lib/browser/index.js +7 -0
  50. package/lib/browser/index.js.map +1 -1
  51. package/lib/browser/mcp/base-apply.service.d.ts +2 -2
  52. package/lib/browser/mcp/base-apply.service.d.ts.map +1 -1
  53. package/lib/browser/mcp/base-apply.service.js.map +1 -1
  54. package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +1 -1
  55. package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js.map +1 -1
  56. package/lib/browser/mcp/tools/handlers/ListDir.js.map +1 -1
  57. package/lib/browser/mcp/tools/runTerminalCmd.js.map +1 -1
  58. package/lib/browser/model/msg-history-manager.d.ts +1 -39
  59. package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
  60. package/lib/browser/model/msg-history-manager.js +3 -170
  61. package/lib/browser/model/msg-history-manager.js.map +1 -1
  62. package/lib/browser/preferences/schema.d.ts.map +1 -1
  63. package/lib/browser/preferences/schema.js +5 -0
  64. package/lib/browser/preferences/schema.js.map +1 -1
  65. package/lib/browser/rules/rules.contribution.d.ts +29 -0
  66. package/lib/browser/rules/rules.contribution.d.ts.map +1 -0
  67. package/lib/browser/rules/rules.contribution.js +94 -0
  68. package/lib/browser/rules/rules.contribution.js.map +1 -0
  69. package/lib/browser/rules/rules.module.less +175 -0
  70. package/lib/browser/rules/rules.service.d.ts +25 -0
  71. package/lib/browser/rules/rules.service.d.ts.map +1 -0
  72. package/lib/browser/rules/rules.service.js +180 -0
  73. package/lib/browser/rules/rules.service.js.map +1 -0
  74. package/lib/browser/rules/rules.view.d.ts +3 -0
  75. package/lib/browser/rules/rules.view.d.ts.map +1 -0
  76. package/lib/browser/rules/rules.view.js +76 -0
  77. package/lib/browser/rules/rules.view.js.map +1 -0
  78. package/lib/browser/types.d.ts +1 -8
  79. package/lib/browser/types.d.ts.map +1 -1
  80. package/lib/browser/types.js.map +1 -1
  81. package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts.map +1 -1
  82. package/lib/browser/widget/inline-stream-diff/live-preview.component.js.map +1 -1
  83. package/lib/common/MDC_PARSER_README.md +171 -0
  84. package/lib/common/index.d.ts +2 -0
  85. package/lib/common/index.d.ts.map +1 -1
  86. package/lib/common/index.js +2 -0
  87. package/lib/common/index.js.map +1 -1
  88. package/lib/common/llm-context.d.ts +19 -0
  89. package/lib/common/llm-context.d.ts.map +1 -1
  90. package/lib/common/llm-context.js.map +1 -1
  91. package/lib/common/mdc-parser.d.ts +60 -0
  92. package/lib/common/mdc-parser.d.ts.map +1 -0
  93. package/lib/common/mdc-parser.js +246 -0
  94. package/lib/common/mdc-parser.js.map +1 -0
  95. package/lib/common/prompts/context-prompt-provider.d.ts +0 -2
  96. package/lib/common/prompts/context-prompt-provider.d.ts.map +1 -1
  97. package/lib/common/prompts/context-prompt-provider.js +35 -29
  98. package/lib/common/prompts/context-prompt-provider.js.map +1 -1
  99. package/lib/common/prompts/system-prompt.d.ts +2 -0
  100. package/lib/common/prompts/system-prompt.d.ts.map +1 -0
  101. package/lib/common/prompts/system-prompt.js +5 -0
  102. package/lib/common/prompts/system-prompt.js.map +1 -0
  103. package/lib/common/types.d.ts +7 -0
  104. package/lib/common/types.d.ts.map +1 -1
  105. package/lib/node/base-language-model.d.ts.map +1 -1
  106. package/lib/node/base-language-model.js.map +1 -1
  107. package/package.json +25 -24
  108. package/src/browser/chat/chat-manager.service.ts +6 -15
  109. package/src/browser/chat/chat-model.ts +19 -56
  110. package/src/browser/chat/chat-proxy.service.ts +68 -81
  111. package/src/browser/chat/chat.feature.registry.ts +1 -17
  112. package/src/browser/chat/chat.view.tsx +22 -28
  113. package/src/browser/components/ChatMentionInput.tsx +169 -35
  114. package/src/browser/components/ChatToolRender.module.less +1 -0
  115. package/src/browser/components/components.module.less +9 -8
  116. package/src/browser/components/mention-input/mention-input.module.less +165 -1
  117. package/src/browser/components/mention-input/mention-input.tsx +257 -32
  118. package/src/browser/components/mention-input/mention-select.module.less +297 -0
  119. package/src/browser/components/mention-input/mention-select.tsx +256 -0
  120. package/src/browser/components/mention-input/types.ts +16 -0
  121. package/src/browser/context/llm-context.service.ts +182 -21
  122. package/src/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.ts +1 -1
  123. package/src/browser/contrib/intelligent-completions/diff-computer.ts +1 -1
  124. package/src/browser/contrib/terminal/terminal.feature.registry.ts +1 -1
  125. package/src/browser/index.ts +8 -0
  126. package/src/browser/mcp/base-apply.service.ts +0 -1
  127. package/src/browser/mcp/tools/getDiagnosticsByPath.ts +1 -1
  128. package/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts +1 -1
  129. package/src/browser/mcp/tools/handlers/ListDir.ts +1 -1
  130. package/src/browser/mcp/tools/runTerminalCmd.ts +1 -1
  131. package/src/browser/model/msg-history-manager.ts +3 -230
  132. package/src/browser/preferences/schema.ts +5 -0
  133. package/src/browser/rules/rules.contribution.ts +105 -0
  134. package/src/browser/rules/rules.module.less +175 -0
  135. package/src/browser/rules/rules.service.ts +189 -0
  136. package/src/browser/rules/rules.view.tsx +127 -0
  137. package/src/browser/types.ts +0 -12
  138. package/src/browser/widget/inline-stream-diff/live-preview.component.tsx +0 -1
  139. package/src/common/MDC_PARSER_README.md +171 -0
  140. package/src/common/index.ts +3 -0
  141. package/src/common/llm-context.ts +23 -0
  142. package/src/common/mdc-parser.ts +295 -0
  143. package/src/common/prompts/context-prompt-provider.ts +55 -40
  144. package/src/common/prompts/system-prompt.ts +2 -0
  145. package/src/common/types.ts +8 -0
  146. package/src/node/base-language-model.ts +0 -1
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RulesContribution = exports.RULES_COMPONENTS_SCHEME_ID = exports.RulesCommands = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@opensumi/di");
6
+ const ide_components_1 = require("@opensumi/ide-components");
7
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
8
+ const services_1 = require("@opensumi/ide-core-browser/lib/services");
9
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
10
+ const types_1 = require("@opensumi/ide-editor/lib/browser/types");
11
+ const browser_1 = require("@opensumi/ide-theme/lib/browser");
12
+ const common_1 = require("@opensumi/ide-workspace/lib/common");
13
+ const rules_service_1 = require("./rules.service");
14
+ const rules_view_1 = require("./rules.view");
15
+ var RulesCommands;
16
+ (function (RulesCommands) {
17
+ RulesCommands.OPEN_RULES_FILE = {
18
+ id: 'rules.openRulesConfig',
19
+ label: 'Open Rules Configuration',
20
+ };
21
+ })(RulesCommands || (exports.RulesCommands = RulesCommands = {}));
22
+ const COMPONENTS_ID = 'opensumi-rules-viewer';
23
+ exports.RULES_COMPONENTS_SCHEME_ID = 'rules';
24
+ let RulesContribution = class RulesContribution {
25
+ onStart() {
26
+ this.rulesService.initProjectRules();
27
+ }
28
+ registerEditorComponent(registry) {
29
+ registry.registerEditorComponent({
30
+ uid: COMPONENTS_ID,
31
+ scheme: exports.RULES_COMPONENTS_SCHEME_ID,
32
+ component: rules_view_1.RulesView,
33
+ renderMode: types_1.EditorComponentRenderMode.ONE_PER_WORKBENCH,
34
+ });
35
+ registry.registerEditorComponentResolver(exports.RULES_COMPONENTS_SCHEME_ID, (resource, results) => {
36
+ results.push({
37
+ type: 'component',
38
+ componentId: COMPONENTS_ID,
39
+ });
40
+ });
41
+ }
42
+ registerResource(service) {
43
+ service.registerResourceProvider({
44
+ scheme: exports.RULES_COMPONENTS_SCHEME_ID,
45
+ provideResource: async (uri) => {
46
+ const { configType } = uri.getParsedQuery();
47
+ return {
48
+ uri,
49
+ name: (0, ide_core_common_1.localize)('ai.native.rules.title'),
50
+ icon: (0, ide_components_1.getIcon)('rules'),
51
+ metadata: {
52
+ configType,
53
+ },
54
+ };
55
+ },
56
+ });
57
+ }
58
+ registerCommands(registry) {
59
+ registry.registerCommand(RulesCommands.OPEN_RULES_FILE, {
60
+ execute: () => {
61
+ const uri = new ide_core_common_1.URI().withScheme(exports.RULES_COMPONENTS_SCHEME_ID);
62
+ this.editorService.open(uri, {
63
+ preview: false,
64
+ focus: true,
65
+ });
66
+ },
67
+ });
68
+ }
69
+ };
70
+ exports.RulesContribution = RulesContribution;
71
+ tslib_1.__decorate([
72
+ (0, di_1.Autowired)(common_1.IWorkspaceService),
73
+ tslib_1.__metadata("design:type", Object)
74
+ ], RulesContribution.prototype, "workspaceService", void 0);
75
+ tslib_1.__decorate([
76
+ (0, di_1.Autowired)(browser_1.IconService),
77
+ tslib_1.__metadata("design:type", browser_1.IconService)
78
+ ], RulesContribution.prototype, "iconService", void 0);
79
+ tslib_1.__decorate([
80
+ (0, di_1.Autowired)(types_1.WorkbenchEditorService),
81
+ tslib_1.__metadata("design:type", types_1.WorkbenchEditorService)
82
+ ], RulesContribution.prototype, "editorService", void 0);
83
+ tslib_1.__decorate([
84
+ (0, di_1.Autowired)(),
85
+ tslib_1.__metadata("design:type", services_1.LabelService)
86
+ ], RulesContribution.prototype, "labelService", void 0);
87
+ tslib_1.__decorate([
88
+ (0, di_1.Autowired)(ide_core_common_1.RulesServiceToken),
89
+ tslib_1.__metadata("design:type", rules_service_1.RulesService)
90
+ ], RulesContribution.prototype, "rulesService", void 0);
91
+ exports.RulesContribution = RulesContribution = tslib_1.__decorate([
92
+ (0, ide_core_common_1.Domain)(types_1.BrowserEditorContribution, ide_core_common_1.CommandContribution, ide_core_browser_1.ClientAppContribution)
93
+ ], RulesContribution);
94
+ //# sourceMappingURL=rules.contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.contribution.js","sourceRoot":"","sources":["../../../src/browser/rules/rules.contribution.ts"],"names":[],"mappings":";;;;AAAA,qCAAyC;AACzC,6DAAmD;AACnD,iEAAmE;AACnE,sEAAuE;AACvE,+DAOmC;AACnC,kEAOgD;AAChD,6DAA8D;AAC9D,+DAAuE;AAEvE,mDAA+C;AAC/C,6CAAyC;AAEzC,IAAiB,aAAa,CAK7B;AALD,WAAiB,aAAa;IACf,6BAAe,GAAG;QAC7B,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,0BAA0B;KAClC,CAAC;AACJ,CAAC,EALgB,aAAa,6BAAb,aAAa,QAK7B;AAED,MAAM,aAAa,GAAG,uBAAuB,CAAC;AACjC,QAAA,0BAA0B,GAAG,OAAO,CAAC;AAK3C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAgB5B,OAAO;QACL,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IACvC,CAAC;IAED,uBAAuB,CAAC,QAAiC;QACvD,QAAQ,CAAC,uBAAuB,CAAC;YAC/B,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,kCAA0B;YAClC,SAAS,EAAE,sBAAS;YACpB,UAAU,EAAE,iCAAyB,CAAC,iBAAiB;SACxD,CAAC,CAAC;QAEH,QAAQ,CAAC,+BAA+B,CAAC,kCAA0B,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YACzF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,aAAa;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,OAAwB;QACvC,OAAO,CAAC,wBAAwB,CAAC;YAC/B,MAAM,EAAE,kCAA0B;YAClC,eAAe,EAAE,KAAK,EAAE,GAAQ,EAA2B,EAAE;gBAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;gBAE5C,OAAO;oBACL,GAAG;oBACH,IAAI,EAAE,IAAA,0BAAQ,EAAC,uBAAuB,CAAC;oBACvC,IAAI,EAAE,IAAA,wBAAO,EAAC,OAAO,CAAC;oBACtB,QAAQ,EAAE;wBACR,UAAU;qBACX;iBACF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,QAAyB;QACxC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,eAAe,EAAE;YACtD,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,GAAG,GAAG,IAAI,qBAAG,EAAE,CAAC,UAAU,CAAC,kCAA0B,CAAC,CAAC;gBAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC3B,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAjEY,8CAAiB;AAET;IADlB,IAAA,cAAS,EAAC,0BAAiB,CAAC;;2DAC0B;AAGpC;IADlB,IAAA,cAAS,EAAC,qBAAW,CAAC;sCACS,qBAAW;sDAAC;AAGzB;IADlB,IAAA,cAAS,EAAC,8BAAsB,CAAC;sCACA,8BAAsB;wDAAC;AAGzD;IADC,IAAA,cAAS,GAAE;sCACE,uBAAY;uDAAC;AAGR;IADlB,IAAA,cAAS,EAAC,mCAAiB,CAAC;sCACI,4BAAY;uDAAC;4BAdnC,iBAAiB;IAD7B,IAAA,wBAAM,EAAC,iCAAyB,EAAE,qCAAmB,EAAE,wCAAqB,CAAC;GACjE,iBAAiB,CAiE7B"}
@@ -0,0 +1,175 @@
1
+ .container {
2
+ padding: 20px;
3
+ color: var(--foreground);
4
+ textarea {
5
+ resize: vertical;
6
+ min-height: 60px;
7
+ }
8
+ input,
9
+ textarea {
10
+ width: 100%;
11
+ padding: 8px;
12
+ border: 1px solid var(--input-border);
13
+ border-radius: 4px;
14
+ background-color: var(--input-background);
15
+ color: var(--input-foreground);
16
+ font-size: 13px;
17
+ font-family: var(--monaco-monospace-font);
18
+
19
+ &:focus {
20
+ border-color: var(--focusBorder);
21
+ outline: none;
22
+ }
23
+
24
+ &::placeholder {
25
+ color: var(--descriptionForeground);
26
+ opacity: 0.6;
27
+ }
28
+ }
29
+ }
30
+
31
+ .header {
32
+ display: flex;
33
+ justify-content: space-between;
34
+ align-items: flex-start;
35
+ margin-bottom: 24px;
36
+ }
37
+
38
+ .title {
39
+ margin: 0 0 8px 0;
40
+ font-size: 24px;
41
+ font-weight: 600;
42
+ }
43
+
44
+ .description {
45
+ margin: 0;
46
+ color: var(--descriptionForeground);
47
+ font-size: 14px;
48
+ line-height: 1.5;
49
+ }
50
+
51
+ .user_rules {
52
+ display: flex;
53
+ flex-direction: column;
54
+ gap: 16px;
55
+ .user_rules_header {
56
+ display: flex;
57
+ flex-direction: column;
58
+ }
59
+ }
60
+
61
+ .project_rules {
62
+ margin-top: 20px;
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: 16px;
66
+ h3 {
67
+ position: relative;
68
+ }
69
+ .actionButton {
70
+ position: absolute;
71
+ right: 0;
72
+ top: 0;
73
+ }
74
+ }
75
+
76
+ .project_rules_header {
77
+ display: flex;
78
+ justify-content: space-between;
79
+ align-items: flex-start;
80
+ }
81
+
82
+ .project_rules_header_left {
83
+ width: 100%;
84
+ display: flex;
85
+ flex-direction: column;
86
+ }
87
+
88
+ .actionButton {
89
+ padding: 8px 16px;
90
+ border-radius: 4px;
91
+ background-color: var(--button-primary-background);
92
+ color: var(--button-primary-foreground);
93
+ border: none;
94
+ cursor: pointer;
95
+ font-size: 13px;
96
+ .actionButtonIcon {
97
+ margin-right: 5px;
98
+ }
99
+
100
+ &:hover {
101
+ background-color: var(--button-primary-hover-background);
102
+ }
103
+ }
104
+
105
+ .project_rules_list {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 8px;
109
+ }
110
+
111
+ .rule_item {
112
+ display: flex;
113
+ justify-content: space-between;
114
+ align-items: center;
115
+ padding: 12px;
116
+ border: 1px solid var(--input-border);
117
+ border-radius: 4px;
118
+ background-color: var(--input-background);
119
+ opacity: 0.6;
120
+
121
+ &:hover {
122
+ opacity: 1;
123
+ }
124
+ }
125
+
126
+ .rule_item_left {
127
+ display: flex;
128
+ flex-direction: column;
129
+ gap: 4px;
130
+ flex: 1;
131
+ }
132
+
133
+ .rule_item_right {
134
+ display: flex;
135
+ align-items: center;
136
+ flex-shrink: 0;
137
+ margin-left: 16px;
138
+ }
139
+
140
+ .rule_filename {
141
+ font-size: 13px;
142
+ font-weight: 500;
143
+ color: var(--foreground);
144
+ }
145
+
146
+ .rule_description {
147
+ font-size: 12px;
148
+ color: var(--descriptionForeground);
149
+ }
150
+
151
+ .rule_warning {
152
+ font-size: 12px;
153
+ color: var(--editorWarning-foreground);
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 4px;
157
+
158
+ &::before {
159
+ content: '⚠';
160
+ color: var(--editorWarning-foreground);
161
+ }
162
+ }
163
+
164
+ .rule_applies_to {
165
+ font-size: 12px;
166
+ color: var(--descriptionForeground);
167
+ font-family: var(--monaco-monospace-font);
168
+ }
169
+
170
+ .empty_state {
171
+ text-align: center;
172
+ padding: 32px;
173
+ color: var(--descriptionForeground);
174
+ font-style: italic;
175
+ }
@@ -0,0 +1,25 @@
1
+ import { Disposable } from '@opensumi/ide-core-common';
2
+ import { IMDCContent, IMDCParseResult } from '../../common';
3
+ import { ProjectRule } from '../../common/types';
4
+ export declare class RulesService extends Disposable {
5
+ private readonly preferenceService;
6
+ private readonly appConfig;
7
+ private readonly workspaceService;
8
+ private readonly fileServiceClient;
9
+ private readonly quickInputService;
10
+ private readonly workbenchEditorService;
11
+ private readonly rulesChangeEventEmitter;
12
+ private _globalRules;
13
+ private _projectRules;
14
+ private _projectRulesPath;
15
+ get onRulesChange(): import("@opensumi/ide-core-browser").Event<void>;
16
+ get globalRules(): string;
17
+ get projectRules(): ProjectRule[];
18
+ initProjectRules(): Promise<void>;
19
+ openRule(rule: ProjectRule): Promise<void>;
20
+ createNewRule(): Promise<void>;
21
+ updateGlobalRules(rules: string): void;
22
+ parseMDCContent(content: string): IMDCParseResult;
23
+ serializeMDCContent(mdcContent: IMDCContent): string;
24
+ }
25
+ //# sourceMappingURL=rules.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.service.d.ts","sourceRoot":"","sources":["../../../src/browser/rules/rules.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,UAAU,EAKX,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAAE,WAAW,EAAE,eAAe,EAA0B,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBACa,YAAa,SAAQ,UAAU;IAE1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAGtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAGtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAGpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IAGvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAGtD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyB;IAEhE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAuB;IAE/D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,iBAAiB,CAAS;IAElC,IAAI,aAAa,qDAEhB;IAED,IAAI,WAAW,WAKd;IAED,IAAI,YAAY,kBAEf;IAEY,gBAAgB;IAqDvB,QAAQ,CAAC,IAAI,EAAE,WAAW;IAI1B,aAAa;IAkDnB,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAK/B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAWjD,mBAAmB,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM;CAGrD"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RulesService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@opensumi/di");
6
+ const ide_components_1 = require("@opensumi/ide-components");
7
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
8
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
9
+ const ide_editor_1 = require("@opensumi/ide-editor");
10
+ const ide_file_service_1 = require("@opensumi/ide-file-service");
11
+ const quick_input_service_1 = require("@opensumi/ide-quick-open/lib/browser/quick-input-service");
12
+ const workspace_service_1 = require("@opensumi/ide-workspace/lib/browser/workspace-service");
13
+ const common_1 = require("@opensumi/ide-workspace/lib/common");
14
+ const common_2 = require("../../common");
15
+ let RulesService = class RulesService extends ide_core_common_1.Disposable {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.rulesChangeEventEmitter = new ide_core_common_1.Emitter();
19
+ }
20
+ get onRulesChange() {
21
+ return this.rulesChangeEventEmitter.event;
22
+ }
23
+ get globalRules() {
24
+ if (!this._globalRules) {
25
+ this._globalRules = this.preferenceService.get(ide_core_common_1.AINativeSettingSectionsId.GlobalRules) || '';
26
+ }
27
+ return this._globalRules;
28
+ }
29
+ get projectRules() {
30
+ return this._projectRules || [];
31
+ }
32
+ async initProjectRules() {
33
+ var _a;
34
+ this.dispose();
35
+ await this.workspaceService.whenReady;
36
+ const workspace = this.workspaceService.workspace;
37
+ // 如果存在 .sumi, 默认从 .sumi 中获取
38
+ const sumiConfigPath = new ide_core_common_1.URI(workspace === null || workspace === void 0 ? void 0 : workspace.uri)
39
+ .resolve(this.appConfig.preferenceDirName || '.sumi')
40
+ .resolve('rules');
41
+ const cursorConfigPath = new ide_core_common_1.URI(workspace === null || workspace === void 0 ? void 0 : workspace.uri).resolve('.cursor').resolve('rules');
42
+ if (await this.fileServiceClient.access(sumiConfigPath.codeUri.fsPath)) {
43
+ this._projectRulesPath = sumiConfigPath.codeUri.fsPath;
44
+ }
45
+ else if (await this.fileServiceClient.access(cursorConfigPath.codeUri.fsPath)) {
46
+ this._projectRulesPath = cursorConfigPath.codeUri.fsPath;
47
+ }
48
+ else {
49
+ this._projectRulesPath = sumiConfigPath.codeUri.fsPath;
50
+ }
51
+ const watcher = await this.fileServiceClient.watchFileChanges(new ide_core_common_1.URI(this._projectRulesPath));
52
+ this.addDispose(watcher.onFilesChanged((changes) => {
53
+ if (changes.length > 0 &&
54
+ changes.some((change) => change.uri.endsWith('.mdc') && change.uri.includes('rules'))) {
55
+ this.initProjectRules();
56
+ }
57
+ }));
58
+ const dir = await this.fileServiceClient.getFileStat(this._projectRulesPath);
59
+ if (dir && dir.isDirectory) {
60
+ const files = (_a = dir.children) === null || _a === void 0 ? void 0 : _a.filter((file) => !file.isDirectory && file.uri.endsWith('.mdc'));
61
+ if (files) {
62
+ const rules = await Promise.all(files.map(async (file) => {
63
+ const item = await this.fileServiceClient.readFile(file.uri);
64
+ const data = this.parseMDCContent(item.content.toString());
65
+ return {
66
+ path: file.uri,
67
+ ...data.frontmatter,
68
+ content: data.content,
69
+ };
70
+ }));
71
+ if (rules.length > 0) {
72
+ this._projectRules = rules;
73
+ this.rulesChangeEventEmitter.fire();
74
+ return;
75
+ }
76
+ }
77
+ }
78
+ this._projectRules = [];
79
+ this.rulesChangeEventEmitter.fire();
80
+ }
81
+ async openRule(rule) {
82
+ this.workbenchEditorService.open(new ide_core_common_1.URI(rule.path));
83
+ }
84
+ async createNewRule() {
85
+ let value = await this.quickInputService.open({
86
+ title: (0, ide_core_common_1.localize)('ai.native.rules.projectRules.newRule'),
87
+ value: '',
88
+ placeHolder: (0, ide_core_common_1.localize)('ai.native.rules.projectRules.newRule.placeholder'),
89
+ validateInput: async (value) => {
90
+ const invalidCharsRegex = /[<>:"/\\|?*\x00-\x1F]/;
91
+ value = value.trim();
92
+ if (value === '') {
93
+ return {
94
+ message: (0, ide_core_common_1.localize)('ai.native.rules.projectRules.newRule.error.notEmpty'),
95
+ type: ide_components_1.VALIDATE_TYPE.ERROR,
96
+ };
97
+ }
98
+ else if (invalidCharsRegex.test(value)) {
99
+ return {
100
+ message: (0, ide_core_common_1.localize)('ai.native.rules.error.invalidFileName'),
101
+ type: ide_components_1.VALIDATE_TYPE.ERROR,
102
+ };
103
+ }
104
+ else {
105
+ const newRulePath = new ide_core_common_1.URI(this._projectRulesPath).resolve(value + '.mdc');
106
+ const fileExists = this.projectRules.find((rule) => new ide_core_common_1.URI(rule.path).codeUri.fsPath === newRulePath.codeUri.fsPath);
107
+ if (fileExists) {
108
+ return {
109
+ message: (0, ide_core_common_1.formatLocalize)('ai.native.rules.error.fileExists', value + '.mdc'),
110
+ type: ide_components_1.VALIDATE_TYPE.ERROR,
111
+ };
112
+ }
113
+ }
114
+ },
115
+ });
116
+ value = value === null || value === void 0 ? void 0 : value.trim();
117
+ if (value) {
118
+ const newRulePath = new ide_core_common_1.URI(this._projectRulesPath).resolve(value + '.mdc');
119
+ await this.fileServiceClient.createFile(newRulePath.toString(), {
120
+ content: this.serializeMDCContent({
121
+ frontmatter: {
122
+ description: '',
123
+ globs: '',
124
+ alwaysApply: false,
125
+ },
126
+ content: '',
127
+ }),
128
+ });
129
+ this.workbenchEditorService.open(new ide_core_common_1.URI(newRulePath.toString()));
130
+ this.initProjectRules();
131
+ }
132
+ }
133
+ updateGlobalRules(rules) {
134
+ this._globalRules = rules;
135
+ this.preferenceService.set(ide_core_common_1.AINativeSettingSectionsId.GlobalRules, rules);
136
+ }
137
+ parseMDCContent(content) {
138
+ try {
139
+ return (0, common_2.parseMDC)(content);
140
+ }
141
+ catch (error) {
142
+ return {
143
+ frontmatter: {},
144
+ content,
145
+ };
146
+ }
147
+ }
148
+ serializeMDCContent(mdcContent) {
149
+ return (0, common_2.serializeMDC)(mdcContent);
150
+ }
151
+ };
152
+ exports.RulesService = RulesService;
153
+ tslib_1.__decorate([
154
+ (0, di_1.Autowired)(ide_core_browser_1.PreferenceService),
155
+ tslib_1.__metadata("design:type", Object)
156
+ ], RulesService.prototype, "preferenceService", void 0);
157
+ tslib_1.__decorate([
158
+ (0, di_1.Autowired)(ide_core_browser_1.AppConfig),
159
+ tslib_1.__metadata("design:type", Object)
160
+ ], RulesService.prototype, "appConfig", void 0);
161
+ tslib_1.__decorate([
162
+ (0, di_1.Autowired)(common_1.IWorkspaceService),
163
+ tslib_1.__metadata("design:type", workspace_service_1.WorkspaceService)
164
+ ], RulesService.prototype, "workspaceService", void 0);
165
+ tslib_1.__decorate([
166
+ (0, di_1.Autowired)(ide_file_service_1.IFileServiceClient),
167
+ tslib_1.__metadata("design:type", Object)
168
+ ], RulesService.prototype, "fileServiceClient", void 0);
169
+ tslib_1.__decorate([
170
+ (0, di_1.Autowired)(quick_input_service_1.QuickInputService),
171
+ tslib_1.__metadata("design:type", quick_input_service_1.QuickInputService)
172
+ ], RulesService.prototype, "quickInputService", void 0);
173
+ tslib_1.__decorate([
174
+ (0, di_1.Autowired)(ide_editor_1.WorkbenchEditorService),
175
+ tslib_1.__metadata("design:type", ide_editor_1.WorkbenchEditorService)
176
+ ], RulesService.prototype, "workbenchEditorService", void 0);
177
+ exports.RulesService = RulesService = tslib_1.__decorate([
178
+ (0, di_1.Injectable)()
179
+ ], RulesService);
180
+ //# sourceMappingURL=rules.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.service.js","sourceRoot":"","sources":["../../../src/browser/rules/rules.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const RulesView: React.FC;
3
+ //# sourceMappingURL=rules.view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.view.d.ts","sourceRoot":"","sources":["../../../src/browser/rules/rules.view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAWhE,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAmH7B,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RulesView = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const ide_components_1 = require("@opensumi/ide-components");
7
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
8
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
9
+ const rules_module_less_1 = tslib_1.__importDefault(require("./rules.module.less"));
10
+ const RulesView = () => {
11
+ const rulesService = (0, ide_core_browser_1.useInjectable)(ide_core_common_1.RulesServiceToken);
12
+ const [globalRules, setGlobalRules] = (0, react_1.useState)(rulesService.globalRules);
13
+ const [projectRules, setProjectRules] = (0, react_1.useState)([]);
14
+ (0, react_1.useEffect)(() => {
15
+ setProjectRules(rulesService.projectRules);
16
+ }, [rulesService]);
17
+ const handleGlobalRulesChange = (0, react_1.useCallback)((e) => {
18
+ setGlobalRules(e.target.value);
19
+ rulesService.updateGlobalRules(e.target.value);
20
+ }, [rulesService, globalRules]);
21
+ const handleCreateNewRule = (0, react_1.useCallback)(() => {
22
+ rulesService.createNewRule();
23
+ }, [rulesService]);
24
+ const handleOpenRule = (0, react_1.useCallback)((rule) => {
25
+ rulesService.openRule(rule);
26
+ }, [rulesService]);
27
+ const getFileNameFromPath = (path) => decodeURIComponent(path.split('/').pop() || path);
28
+ const hasWarning = (rule) => !rule.description && !rule.alwaysApply && !rule.globs;
29
+ const getAppliesToText = (rule) => {
30
+ if (rule.globs) {
31
+ if (Array.isArray(rule.globs)) {
32
+ return `Applies to: ${rule.globs.join(', ')}`;
33
+ }
34
+ else {
35
+ return `Applies to: ${rule.globs}`;
36
+ }
37
+ }
38
+ return '';
39
+ };
40
+ (0, react_1.useEffect)(() => {
41
+ const disposable = rulesService.onRulesChange(() => {
42
+ setProjectRules(rulesService.projectRules);
43
+ });
44
+ return () => {
45
+ disposable.dispose();
46
+ };
47
+ }, []);
48
+ return (react_1.default.createElement("div", { className: rules_module_less_1.default.container },
49
+ react_1.default.createElement("div", { className: rules_module_less_1.default.header },
50
+ react_1.default.createElement("div", null,
51
+ react_1.default.createElement("h2", { className: rules_module_less_1.default.title }, (0, ide_core_common_1.localize)('ai.native.rules.title')),
52
+ react_1.default.createElement("p", { className: rules_module_less_1.default.description }, (0, ide_core_common_1.localize)('ai.native.rules.description')))),
53
+ react_1.default.createElement("div", { className: rules_module_less_1.default.user_rules },
54
+ react_1.default.createElement("div", { className: rules_module_less_1.default.user_rules_header },
55
+ react_1.default.createElement("h3", { className: rules_module_less_1.default.title }, (0, ide_core_common_1.localize)('ai.native.rules.userRules.title')),
56
+ react_1.default.createElement("p", { className: rules_module_less_1.default.description }, (0, ide_core_common_1.localize)('ai.native.rules.userRules.description'))),
57
+ react_1.default.createElement("div", { className: rules_module_less_1.default.user_rules_content },
58
+ react_1.default.createElement("textarea", { rows: 6, placeholder: (0, ide_core_common_1.localize)('ai.native.rules.userRules.placeholder'), value: globalRules, onChange: handleGlobalRulesChange, style: { resize: 'none' } }))),
59
+ react_1.default.createElement("div", { className: rules_module_less_1.default.project_rules },
60
+ react_1.default.createElement("div", { className: rules_module_less_1.default.project_rules_header },
61
+ react_1.default.createElement("div", { className: rules_module_less_1.default.project_rules_header_left },
62
+ react_1.default.createElement("h3", { className: rules_module_less_1.default.title },
63
+ (0, ide_core_common_1.localize)('ai.native.rules.projectRules.title'),
64
+ react_1.default.createElement("button", { className: rules_module_less_1.default.actionButton, onClick: handleCreateNewRule },
65
+ react_1.default.createElement(ide_components_1.Icon, { icon: 'plus', className: rules_module_less_1.default.actionButtonIcon }),
66
+ (0, ide_core_common_1.localize)('ai.native.rules.projectRules.newRule'))),
67
+ react_1.default.createElement("p", { className: rules_module_less_1.default.description }, (0, ide_core_common_1.localize)('ai.native.rules.projectRules.description')))),
68
+ react_1.default.createElement("div", { className: rules_module_less_1.default.project_rules_content }, projectRules.length > 0 ? (react_1.default.createElement("div", { className: rules_module_less_1.default.project_rules_list }, projectRules.map((rule, index) => (react_1.default.createElement("div", { key: index, className: rules_module_less_1.default.rule_item, onClick: () => handleOpenRule(rule) },
69
+ react_1.default.createElement("div", { className: rules_module_less_1.default.rule_item_left },
70
+ react_1.default.createElement("div", { className: rules_module_less_1.default.rule_filename }, getFileNameFromPath(rule.path)),
71
+ rule.description && react_1.default.createElement("div", { className: rules_module_less_1.default.rule_description }, rule.description),
72
+ hasWarning(rule) && (react_1.default.createElement("div", { className: rules_module_less_1.default.rule_warning }, "This rule may never be used since it has no description or auto attachments"))),
73
+ react_1.default.createElement("div", { className: rules_module_less_1.default.rule_item_right }, getAppliesToText(rule) && react_1.default.createElement("div", { className: rules_module_less_1.default.rule_applies_to }, getAppliesToText(rule)))))))) : (react_1.default.createElement("div", { className: rules_module_less_1.default.empty_state }, (0, ide_core_common_1.localize)('ai.native.rules.projectRules.empty')))))));
74
+ };
75
+ exports.RulesView = RulesView;
76
+ //# sourceMappingURL=rules.view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.view.js","sourceRoot":"","sources":["../../../src/browser/rules/rules.view.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { DataContent } from 'ai';
2
2
  import React from 'react';
3
3
  import { ZodSchema } from 'zod';
4
4
  import { AIActionItem } from '@opensumi/ide-core-browser/lib/components/ai-native/index';
5
- import { CancellationToken, ChatMessageRole, ChatResponse, Deferred, IAICompletionOption, IAICompletionResultModel, IDisposable, IPosition, IResolveConflictHandler, MaybePromise, MergeConflictEditorMode } from '@opensumi/ide-core-common';
5
+ import { CancellationToken, ChatResponse, Deferred, IAICompletionOption, IAICompletionResultModel, IDisposable, IPosition, IResolveConflictHandler, MaybePromise, MergeConflictEditorMode } from '@opensumi/ide-core-common';
6
6
  import { ICodeEditor, IRange, ISelection, ITextModel, InlineEditProvider, NewSymbolNamesProvider, Position } from '@opensumi/ide-monaco';
7
7
  import { SumiReadableStream } from '@opensumi/ide-utils/lib/stream';
8
8
  import { IMarker } from '@opensumi/monaco-editor-core/esm/vs/platform/markers/common/markers';
@@ -100,7 +100,6 @@ export interface IChatFeatureRegistry {
100
100
  registerImageUploadProvider(provider: IImageUploadProvider): void;
101
101
  registerWelcome(content: IChatWelcomeMessageContent | React.ReactNode, sampleQuestions?: ISampleQuestions[]): void;
102
102
  registerSlashCommand(command: IChatSlashCommandItem, handler: IChatSlashCommandHandler): void;
103
- registerMessageSummaryProvider(provider: IMessageSummaryProvider): void;
104
103
  }
105
104
  export type ChatWelcomeRender = (props: {
106
105
  message: IChatWelcomeMessageContent;
@@ -223,12 +222,6 @@ export interface IProblemFixProviderRegistry {
223
222
  export interface IImageUploadProvider {
224
223
  imageUpload(file: File): Promise<DataContent | URL>;
225
224
  }
226
- export interface IMessageSummaryProvider {
227
- getMessageSummary(messages: Array<{
228
- role: ChatMessageRole;
229
- content: string;
230
- }>): Promise<string | undefined>;
231
- }
232
225
  export declare const AINativeCoreContribution: unique symbol;
233
226
  export interface AINativeCoreContribution {
234
227
  /**