feat: support chat agent rules and context management#4578
Conversation
## Walkthrough
本次更新为 AI Native 模块引入了“规则(Rules)”体系,支持全局与项目级规则的管理、序列化与编辑。涉及新增 RulesService、UI 组件、依赖注入、MDC 解析器、上下文序列化与 Prompt 构建逻辑。并扩展了提及输入(MentionInput)、消息处理、样式、国际化、设置项等,全面提升 AI 聊天与上下文的可控性和可扩展性。
## Changes
| 文件/分组 | 变更摘要 |
|--------------------------------------------------------|----------|
| `src/browser/rules/rules.service.ts`, `rules.view.tsx`, `rules.contribution.ts`, `rules.module.less` | 新增 RulesService、RulesView 组件、贡献类与样式,实现规则的管理、编辑与 UI 展示 |
| `src/browser/index.ts` | 注入 RulesServiceToken,注册 RulesContribution,实现依赖注入与贡献 |
| `src/common/mdc-parser.ts`, `MDC_PARSER_README.md` | 新增 MDC(YAML frontmatter + Markdown)解析与序列化工具及文档 |
| `src/common/types.ts` | 新增 ProjectRule 接口定义规则结构 |
| `src/common/llm-context.ts` | LLMContextService 增加规则相关方法与事件,序列化结构扩展规则内容 |
| `src/browser/context/llm-context.service.ts` | 支持规则的上下文管理、序列化、通知与清理,集成 RulesService |
| `src/common/prompts/context-prompt-provider.ts` | Prompt 构建逻辑扩展支持规则上下文,附加当前行内容、规则块等 |
| `src/browser/components/mention-input/types.ts`, `mention-input.tsx`, `ChatMentionInput.tsx` | 支持规则类型的提及(MentionType.RULE),UI 及上下文处理同步支持规则 |
| `src/browser/chat/chat.view.tsx` | 聊天消息处理支持 `{{@rule:...}}` 占位符,消息内容预处理逻辑调整 |
| `src/browser/chat/chat-proxy.service.ts` | 移除对 AppConfig、ChatServiceToken、OS 名称的依赖,简化 Agent 注册 |
| `src/browser/preferences/schema.ts`, `core-common/src/settings/ai-native.ts` | 新增全局规则设置项及枚举 |
| `src/common/index.ts` | 导出 mdc-parser 和 tool-invocation-registry |
| `src/core-common/src/types/ai-native/index.ts` | 新增 RulesServiceToken 依赖注入符号 |
| `src/i18n/src/common/en-US.lang.ts`, `zh-CN.lang.ts` | 新增规则相关的国际化字符串 |
| `components/src/icon/iconfont/iconMap.ts`, `iconfont.css`, `iconfont.html` | 新增 rules/settings 图标及样式 |
| `src/browser/components/ChatToolRender.module.less`, `components.module.less`, `mention-input/mention-input.module.less`, `debug-call-stack.module.less` | 优化文本方向、溢出、省略号等样式,提升多语言与长文本兼容性 |
| `src/browser/contrib/intelligent-completions/diff-computer.ts` | 局部变量声明由 let 改为 const |
| 其余若干文件(如移除未用 import) | 清理无用依赖,优化引入 |
## Sequence Diagram(s)
```mermaid
sequenceDiagram
participant User
participant ChatView
participant MentionInput
participant LLMContextService
participant RulesService
participant RulesView
User->>ChatView: 输入消息,选择@规则
ChatView->>MentionInput: 展示规则、文件、文件夹等提及项
MentionInput->>RulesService: 获取项目规则列表
MentionInput->>LLMContextService: 添加规则到上下文
ChatView->>LLMContextService: 获取序列化上下文(含规则)
LLMContextService->>RulesService: 获取全局/项目规则内容
ChatView->>ChatProxyService: 发送消息及上下文
User->>RulesView: 打开规则管理界面
RulesView->>RulesService: 读取/更新规则内容
RulesService-->>RulesView: 规则变更通知Possibly related PRs
Suggested reviewers
|
There was a problem hiding this comment.
Actionable comments posted: 16
🧹 Nitpick comments (20)
packages/ai-native/src/common/types.ts (1)
138-145: 新增 ProjectRule 接口,应补充字段文档注释
建议为ProjectRule接口及其各属性添加 JSDoc 注释,说明各字段的含义与使用场景,提升可读性与可维护性。例如:/** * 项目级规则配置 */ export interface ProjectRule { /** 规则所属文件路径 */ path: string; /** 规则正文内容 */ content: string; /** 规则描述,用于在 UI 中展示 */ description?: string; /** 适用路径匹配模式,支持单个或多个 glob 表达式 */ globs?: string | string[]; /** 是否始终应用 */ alwaysApply?: boolean; }packages/ai-native/src/browser/components/mention-input/mention-input.module.less (1)
32-35: 精简.mention_tag边距设置
目前使用了两条 margin 声明,可合并为:.mention_tag { height: 20px; margin: -3px 2px 0; vertical-align: middle; }以减少冗余。
packages/ai-native/src/browser/rules/rules.module.less (1)
17-17: 建议使用更具语义化的字体堆栈。当前使用
var(--monaco-monospace-font)作为等宽字体,建议添加回退字体以确保在变量未定义时的兼容性。- font-family: var(--monaco-monospace-font); + font-family: var(--monaco-monospace-font, 'Consolas', 'Monaco', 'Courier New', monospace);packages/ai-native/src/browser/rules/rules.view.tsx (2)
42-42: 改进规则警告逻辑的表达性。当前的警告逻辑比较复杂,建议提取为更具表达性的函数名或添加注释说明。
-const hasWarning = (rule: ProjectRule) => !rule.description && !rule.alwaysApply && !rule.globs; +const hasWarning = (rule: ProjectRule) => { + // 当规则没有描述、不自动应用且没有匹配模式时显示警告 + return !rule.description && !rule.alwaysApply && !rule.globs; +};
83-83: 移除内联样式,使用 CSS 类。内联样式
style={{ resize: 'none' }}应该移到 CSS 文件中以保持样式的一致性。在 CSS 文件中添加:
+ .user_rules_textarea { + resize: none; + }然后在 JSX 中:
- style={{ resize: 'none' }} + className={styles.user_rules_textarea}packages/ai-native/src/common/llm-context.ts (1)
69-69: 改进类型注释的一致性。新增的
selection属性应该添加注释说明其用途,保持与其他属性的文档一致性。language: string; + /** 选中的行范围 */ selection?: [number, number];packages/i18n/src/common/zh-CN.lang.ts (1)
1307-1307: 验证全局规则描述的翻译质量。描述文本"这些规则将发送到所有聊天、Agent 中"可以更精确地表达功能。
建议优化为更清晰的表述:
- 'preference.ai.native.globalRules.description': '这些规则将发送到所有聊天、Agent 中。', + 'preference.ai.native.globalRules.description': '这些规则将应用于所有 AI 聊天和 Agent 对话中,作为系统级指导原则。',packages/ai-native/src/browser/chat/chat-proxy.service.ts (1)
127-128: 应用静态分析建议:使用可选链式调用根据静态分析工具的建议,这里可以使用可选链式调用来简化代码。
- if (commandHandler && commandHandler.providerPrompt) { + if (commandHandler?.providerPrompt) {🧰 Tools
🪛 Biome (1.9.4)
[error] 127-128: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
packages/ai-native/src/browser/components/ChatMentionInput.tsx (1)
123-171: 建议将中文注释改为英文
expandFolderPaths辅助函数实现良好,能够正确展开文件夹路径为层级结构。但第123行的中文注释应改为英文以保持代码一致性。- // 拆分目录路径为多个层级的辅助函数 + // Helper function to expand folder paths into hierarchical levelspackages/ai-native/src/browser/rules/rules.service.ts (3)
63-114: 初始化逻辑完善,建议小幅改进项目规则初始化实现良好,支持多个配置目录并设置了文件监听。建议:
- 将中文注释改为英文
- 使用可选链操作符简化代码
- // 如果存在 .sumi, 默认从 .sumi 中获取 + // If .sumi exists, get rules from .sumi by default- if (dir && dir.isDirectory) { - const files = dir.children?.filter((file) => !file.isDirectory && file.uri.endsWith('.mdc')); + if (dir?.isDirectory) { + const files = dir.children?.filter((file) => !file.isDirectory && file.uri.endsWith('.mdc'));🧰 Tools
🪛 Biome (1.9.4)
[error] 91-92: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
120-168: 文件创建逻辑完善,建议改进正则表达式可读性新规则创建功能实现良好,包含了完整的验证逻辑。建议将控制字符的正则表达式改为更可读的形式:
- const invalidCharsRegex = /[<>:"/\\|?*\x00-\x1F]/; + // Regex for invalid filename characters including control characters (ASCII 0-31) + const invalidCharsRegex = /[<>:"/\\|?*]|[\x00-\x1F]/;这样可以更清楚地表明正则表达式的意图,避免静态分析工具的误报。
🧰 Tools
🪛 Biome (1.9.4)
[error] 127-127: Unexpected control character in a regular expression.
Control characters are unusual and potentially incorrect inputs, so they are disallowed.
(lint/suspicious/noControlCharactersInRegex)
[error] 127-127: Unexpected control character in a regular expression.
Control characters are unusual and potentially incorrect inputs, so they are disallowed.
(lint/suspicious/noControlCharactersInRegex)
1-189: 考虑添加缓存机制优化性能RulesService 整体实现良好。建议考虑为规则文件添加缓存机制,避免频繁的文件系统访问,特别是在规则文件较多的情况下。
🧰 Tools
🪛 Biome (1.9.4)
[error] 91-92: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
[error] 127-127: Unexpected control character in a regular expression.
Control characters are unusual and potentially incorrect inputs, so they are disallowed.
(lint/suspicious/noControlCharactersInRegex)
[error] 127-127: Unexpected control character in a regular expression.
Control characters are unusual and potentially incorrect inputs, so they are disallowed.
(lint/suspicious/noControlCharactersInRegex)
packages/ai-native/src/browser/context/llm-context.service.ts (3)
101-117: 考虑使用 URI 的标准化比较方式当前使用
uri.toString()进行规则路径比较可能会因为 URI 格式差异导致问题(例如末尾斜杠、编码差异等)。建议使用更可靠的比较方式。- if (this.attachedRules.some((rule) => rule.path === uri.toString())) { + const uriString = uri.toString(); + if (this.attachedRules.some((rule) => URI.parse(rule.path).toString() === uriString)) { return; } - const rule = this.rulesService.projectRules.find((rule) => rule.path === uri.toString()); + const rule = this.rulesService.projectRules.find((rule) => URI.parse(rule.path).toString() === uriString);
286-319: 建议改进错误处理当前的错误处理直接返回空字符串,这可能会隐藏潜在的问题。建议至少记录错误信息以便调试。
} catch { - return ''; + } catch (error) { + console.warn(`Failed to get folder structure for ${folder}:`, error); + return `[error] Unable to read folder structure`; }
395-455: 规则附加逻辑实现完善该方法很好地处理了多种规则附加场景:基于文件 glob 匹配、Agent 请求的规则和始终应用的规则。glob 模式规范化逻辑确保了匹配的一致性。
建议后续考虑将复杂的规则匹配逻辑提取到单独的方法中以提高可维护性。
packages/ai-native/src/common/MDC_PARSER_README.md (1)
9-16: 代码块缺少语言标识符Markdown 代码块应该指定语言以获得正确的语法高亮。
-``` +```yaml --- description: globs: alwaysApply: false --- icejs is a react-like framework🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
9-9: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
packages/ai-native/src/common/mdc-parser.ts (1)
32-69: YAML 值解析实现较为基础当前实现仅支持简单的 YAML 值类型,不支持嵌套数组、对象等复杂结构。对于当前的使用场景可能足够,但建议考虑使用成熟的 YAML 解析库(如 js-yaml)以获得更完整的 YAML 支持。
packages/ai-native/src/common/prompts/context-prompt-provider.ts (3)
26-29: 去重逻辑实现合理避免当前文件与附件文件重复是正确的做法。不过需要注意,如果附件中的文件没有行选择范围,而当前文件有行号信息,可能会丢失当前行的上下文。
考虑在比较时也检查行选择信息,以保留更精确的上下文。
71-91: 方法签名更新合理,建议提取参数类型新增的规则参数支持了 PR 的核心功能。不过方法参数较多,建议提取为独立的类型定义以提高可维护性。
interface PromptTemplateParams { attachedFiles: AttachFileContext[]; attachedFolders: string[]; currentFile: { path: string; languageId: string; content: string; currentLine?: number; lineContent?: string; } | null; attachedRules: string[]; globalRules: string[]; userMessage: string; }
129-135: 文件内容格式支持行选择范围添加行范围信息有助于 AI 更精确地理解上下文。实现正确。
第 131 行的可选链操作符是多余的,因为已经检查了
file.selection的存在性:-\`\`\`${file.path}${file.selection ? `, lines: ${file.selection?.[0]}-${file.selection?.[1]}` : ''} +\`\`\`${file.path}${file.selection ? `, lines: ${file.selection[0]}-${file.selection[1]}` : ''}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (5)
packages/components/src/icon/iconfont/iconfont.eotis excluded by!**/*.eotpackages/components/src/icon/iconfont/iconfont.svgis excluded by!**/*.svgpackages/components/src/icon/iconfont/iconfont.ttfis excluded by!**/*.ttfpackages/components/src/icon/iconfont/iconfont.woffis excluded by!**/*.woffpackages/components/src/icon/iconfont/iconfont.woff2is excluded by!**/*.woff2
📒 Files selected for processing (42)
packages/ai-native/src/browser/chat/chat-proxy.service.ts(2 hunks)packages/ai-native/src/browser/chat/chat.view.tsx(3 hunks)packages/ai-native/src/browser/components/ChatMentionInput.tsx(8 hunks)packages/ai-native/src/browser/components/ChatToolRender.module.less(1 hunks)packages/ai-native/src/browser/components/components.module.less(1 hunks)packages/ai-native/src/browser/components/mention-input/mention-input.module.less(2 hunks)packages/ai-native/src/browser/components/mention-input/mention-input.tsx(6 hunks)packages/ai-native/src/browser/components/mention-input/types.ts(1 hunks)packages/ai-native/src/browser/context/llm-context.service.ts(11 hunks)packages/ai-native/src/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.ts(1 hunks)packages/ai-native/src/browser/contrib/intelligent-completions/diff-computer.ts(1 hunks)packages/ai-native/src/browser/contrib/terminal/terminal.feature.registry.ts(1 hunks)packages/ai-native/src/browser/index.ts(4 hunks)packages/ai-native/src/browser/mcp/base-apply.service.ts(0 hunks)packages/ai-native/src/browser/mcp/tools/getDiagnosticsByPath.ts(1 hunks)packages/ai-native/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts(1 hunks)packages/ai-native/src/browser/mcp/tools/handlers/ListDir.ts(1 hunks)packages/ai-native/src/browser/mcp/tools/runTerminalCmd.ts(1 hunks)packages/ai-native/src/browser/preferences/schema.ts(1 hunks)packages/ai-native/src/browser/rules/rules.contribution.ts(1 hunks)packages/ai-native/src/browser/rules/rules.module.less(1 hunks)packages/ai-native/src/browser/rules/rules.service.ts(1 hunks)packages/ai-native/src/browser/rules/rules.view.tsx(1 hunks)packages/ai-native/src/browser/widget/inline-stream-diff/live-preview.component.tsx(0 hunks)packages/ai-native/src/common/MDC_PARSER_README.md(1 hunks)packages/ai-native/src/common/index.ts(1 hunks)packages/ai-native/src/common/llm-context.ts(4 hunks)packages/ai-native/src/common/mdc-parser.ts(1 hunks)packages/ai-native/src/common/prompts/context-prompt-provider.ts(6 hunks)packages/ai-native/src/common/types.ts(1 hunks)packages/ai-native/src/node/base-language-model.ts(0 hunks)packages/components/src/icon/iconfont/iconMap.ts(2 hunks)packages/components/src/icon/iconfont/iconfont.css(2 hunks)packages/components/src/icon/iconfont/iconfont.html(2 hunks)packages/components/src/scrollbars/index.tsx(1 hunks)packages/core-browser/src/style/icon/ide-iconfont.ts(1 hunks)packages/core-common/src/settings/ai-native.ts(1 hunks)packages/core-common/src/types/ai-native/index.ts(1 hunks)packages/debug/src/browser/view/frames/debug-call-stack.module.less(1 hunks)packages/editor/src/browser/editor.view.tsx(1 hunks)packages/i18n/src/common/en-US.lang.ts(2 hunks)packages/i18n/src/common/zh-CN.lang.ts(2 hunks)
💤 Files with no reviewable changes (3)
- packages/ai-native/src/node/base-language-model.ts
- packages/ai-native/src/browser/mcp/base-apply.service.ts
- packages/ai-native/src/browser/widget/inline-stream-diff/live-preview.component.tsx
🧰 Additional context used
🧬 Code Graph Analysis (7)
packages/ai-native/src/browser/index.ts (1)
packages/core-common/src/types/ai-native/index.ts (1)
RulesServiceToken(305-305)
packages/editor/src/browser/editor.view.tsx (1)
packages/components/src/scrollbars/index.tsx (1)
Scrollbars(41-200)
packages/ai-native/src/browser/chat/chat-proxy.service.ts (2)
packages/ai-native/src/common/index.ts (4)
IChatAgentRequest(213-220)IChatAgentResult(226-228)IChatAgentCommand(230-235)IChatAgentWelcomeMessage(286-289)packages/utils/src/stream.ts (1)
listenReadable(24-37)
packages/ai-native/src/common/llm-context.ts (1)
packages/ai-native/src/common/types.ts (1)
ProjectRule(139-145)
packages/ai-native/src/browser/rules/rules.service.ts (2)
packages/ai-native/src/common/types.ts (1)
ProjectRule(139-145)packages/ai-native/src/common/mdc-parser.ts (4)
IMDCParseResult(14-17)parseMDC(172-200)IMDCContent(22-25)serializeMDC(207-224)
packages/ai-native/src/browser/components/mention-input/mention-input.tsx (1)
packages/ai-native/src/common/types.ts (1)
ProjectRule(139-145)
packages/ai-native/src/browser/context/llm-context.service.ts (6)
packages/core-common/src/types/ai-native/index.ts (1)
RulesServiceToken(305-305)packages/ai-native/src/common/types.ts (1)
ProjectRule(139-145)packages/ai-native/src/common/llm-context.ts (1)
FileContext(57-60)packages/markers/src/common/match.ts (1)
relativePath(45-68)packages/ai-native/src/browser/rules/rules.service.ts (1)
globalRules(52-57)packages/utils/src/types.ts (1)
isString(38-44)
🪛 Biome (1.9.4)
packages/ai-native/src/browser/chat/chat-proxy.service.ts
[error] 127-128: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
packages/ai-native/src/browser/rules/rules.service.ts
[error] 91-92: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
[error] 127-127: Unexpected control character in a regular expression.
Control characters are unusual and potentially incorrect inputs, so they are disallowed.
(lint/suspicious/noControlCharactersInRegex)
[error] 127-127: Unexpected control character in a regular expression.
Control characters are unusual and potentially incorrect inputs, so they are disallowed.
(lint/suspicious/noControlCharactersInRegex)
🪛 markdownlint-cli2 (0.17.2)
packages/ai-native/src/common/MDC_PARSER_README.md
9-9: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
🪛 GitHub Check: ubuntu-latest, Node.js 20.x
packages/ai-native/src/browser/components/mention-input/mention-input.tsx
[failure] 4-4:
Cannot find module '@opensumi/ide-ai-native/lib/common/types' or its corresponding type declarations.
🪛 GitHub Check: build (ubuntu-latest, 20.x)
packages/ai-native/src/browser/components/mention-input/mention-input.tsx
[failure] 4-4:
Cannot find module '@opensumi/ide-ai-native/lib/common/types' or its corresponding type declarations.
🪛 GitHub Check: unittest (ubuntu-latest, 18.x, node)
packages/ai-native/src/browser/components/mention-input/mention-input.tsx
[failure] 4-4:
Cannot find module '@opensumi/ide-ai-native/lib/common/types' or its corresponding type declarations.
🪛 GitHub Check: unittest (ubuntu-latest, 18.x, jsdom)
packages/ai-native/src/browser/components/mention-input/mention-input.tsx
[failure] 4-4:
Cannot find module '@opensumi/ide-ai-native/lib/common/types' or its corresponding type declarations.
🪛 GitHub Actions: CI
packages/ai-native/src/browser/components/mention-input/mention-input.tsx
[error] 4-4: TypeScript error TS2307: Cannot find module '@opensumi/ide-ai-native/lib/common/types' or its corresponding type declarations.
🪛 GitHub Actions: E2E Test
packages/ai-native/src/browser/components/mention-input/mention-input.tsx
[error] 4-4: TypeScript error TS2307: Cannot find module '@opensumi/ide-ai-native/lib/common/types' or its corresponding type declarations.
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build-windows
🔇 Additional comments (44)
packages/ai-native/src/browser/mcp/tools/getDiagnosticsByPath.ts (1)
5-5: 清理未使用的导入
成功移除了Injectable,只保留了实际使用的Autowired,减少了冗余并保持了与相关 MCP 工具文件的一致性。packages/ai-native/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts (1)
5-5: 移除未使用的Injectable导入
该文件未使用Injectable装饰器,移除多余导入能够减少冗余依赖、提升代码可读性与维护性。packages/ai-native/src/browser/contrib/intelligent-completions/diff-computer.ts (1)
270-271: 良好的代码质量改进!将
let改为const是一个很好的改进,因为rewriteDiffResult变量在声明后没有被重新赋值。使用const更清楚地表达了变量不会被修改的意图,提高了代码的可读性和安全性。packages/ai-native/src/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.ts (1)
1-1: 优化导入:移除未使用的 IModelDeltaDecoration
已删除对IModelDeltaDecoration的导入,可减少冗余并提升代码可维护性。packages/ai-native/src/browser/contrib/terminal/terminal.feature.registry.ts (1)
3-3: 清理无用导入:移除listenReadable并使用listenGroupReadable
从@opensumi/ide-utils/lib/stream中剔除了未使用的listenReadable,并保留或引入了实际使用的listenGroupReadable,保持了代码整洁。packages/debug/src/browser/view/frames/debug-call-stack.module.less (1)
148-150: 已添加unicode-bidi: plaintext来增强双向文本渲染
该改动与其他组件中对双向文本渲染的调整保持一致,能改善 RTL 文本的可读性。packages/ai-native/src/browser/mcp/tools/runTerminalCmd.ts (1)
5-5: 移除未使用的Deferred导入,保持代码整洁
清理了无用依赖,符合项目整体的代码卫生优化趋势。packages/ai-native/src/browser/mcp/tools/handlers/ListDir.ts (1)
2-2: 移除未使用的Throttler导入并新增URI用于路径处理
URI已被用于文件路径解析和展示名称获取,清理无用代码且功能保持一致。packages/ai-native/src/browser/components/mention-input/types.ts (1)
60-61: 在MentionType枚举中新增RULE,支持规则类型
该更改为新引入的规则功能奠定基础,符合上下文中对规则提及的需求。packages/editor/src/browser/editor.view.tsx (1)
574-574: 为Scrollbars添加hiddenHorizontal={true},隐藏水平滚动条
该改动与新版Scrollbars组件的更新保持一致,可防止水平滚动装饰元素被渲染。packages/ai-native/src/browser/components/ChatToolRender.module.less (1)
55-55: 确认双向文本渲染设置
新增的unicode-bidi: plaintext;与已有的direction: rtl;配合,可改善工具标签中字母和阿拉伯语等双向文本的显示,和其他模块保持一致。packages/core-common/src/settings/ai-native.ts (1)
47-51: 新增全局规则设置枚举
在AINativeSettingSectionsId中添加了新的GlobalRules = 'ai.native.globalRules'成员,用于全局规则偏好,分组注释清晰、格式规范。packages/core-common/src/types/ai-native/index.ts (1)
305-305: 新增规则服务 DI Token
RulesServiceToken已按照项目 DI Token 规范添加,Symbol 名称与常量名一致,可用于后续依赖注入。packages/ai-native/src/common/index.ts (1)
337-339: 统一导出工具注册和 MDC 解析模块
在公共入口文件中新增tool-invocation-registry与mdc-parser的 re-export,方便外部统一引用,位置和格式合理。packages/components/src/icon/iconfont/iconMap.ts (2)
163-163: 自动生成图标映射:rules
该文件由脚本自动生成,仅新增了rules图标映射,与生成脚本资源同步即可,无需手动更改。
173-173: 自动生成图标映射:settings
该文件由脚本自动生成,仅新增了settings图标映射,与生成脚本资源同步即可,无需手动更改。packages/components/src/icon/iconfont/iconfont.css (2)
3-8: 更新了 iconfont 资源链接,保持与 ide-iconfont.ts 同步
已将字体文件 URL 更新至新版本,确保对应的 CSS/JS CDN 地址一致。
19-25: 新增 Rules 与 Settings 图标类
添加了.kticon-rules和.kticon-settings,请确认iconMap.ts与iconfont.html中也已同步映射和演示。packages/core-browser/src/style/icon/ide-iconfont.ts (1)
1-1: 同步更新图标 CSS 引用地址
IDE_ICONFONT_CN_CSS已切换至新 Alibaba CDN 链接,IDE_ICONFONT_CN_JS通过正则派生无需额外修改。packages/ai-native/src/browser/components/mention-input/mention-input.module.less (1)
259-260:unicode-bidi: plaintext用于优化 RTL 文本截断
为.mention_item_description添加了unicode-bidi: plaintext,能更好地配合direction: rtl实现省略号截断,提升多语言兼容性。packages/ai-native/src/browser/components/components.module.less (1)
623-629: 样式改进看起来很好!这些CSS属性的添加很好地解决了附件文本的显示问题:
max-width: 100px限制文本宽度text-overflow: ellipsis和overflow: hidden提供文本截断unicode-bidi: plaintext为混合文本方向提供良好支持direction: rtl配合unicode-bidi实现从右到左的文本溢出效果这些改进增强了用户界面的可读性和国际化支持。
packages/components/src/icon/iconfont/iconfont.html (2)
7-7: 版本更新正确字体文件URL和版本号从v3.8.2更新到v3.9.0,与新功能的添加保持一致。
Also applies to: 88-89
95-106: 新图标添加符合规范新增的"rules"和"settings"图标按照现有模式正确实现:
- 使用了正确的HTML结构和aria-label
- 图标名称和类名保持一致
- 符合无障碍访问标准
这些图标将支持新的规则管理功能。
packages/ai-native/src/browser/index.ts (2)
20-20: 导入声明正确正确导入了RulesServiceToken和Rules相关的服务类,遵循了项目的导入规范。
Also applies to: 81-82
125-125: 依赖注入配置正确Rules服务的注册配置正确:
- RulesContribution添加到contributionProvider中,用于注册UI贡献
- RulesServiceToken绑定到RulesService类,建立了正确的依赖注入关系
这样的配置使Rules功能可以被其他组件正确注入和使用。
Also applies to: 223-226
packages/ai-native/src/common/llm-context.ts (1)
26-30: 🛠️ Refactor suggestion添加方法文档注释。
新增的
addRuleToContext方法缺少文档注释,应该保持与其他方法相同的文档风格。+ /** + * 添加规则到 context 中 + */ addRuleToContext(uri: URI, isManual?: boolean): void;Likely an incorrect or invalid review comment.
packages/ai-native/src/browser/components/mention-input/mention-input.tsx (2)
190-190: 验证 useEffect 依赖数组的更改将依赖数组从
[contextService]更改为[]可能是性能优化,但需要确认这不会导致内存泄漏或事件监听器未正确清理。请确认
contextService实例在组件生命周期内是否会发生变化,以及这种更改是否安全。
729-734: 规则类型的提及处理实现正确规则类型的提及处理逻辑与文件和文件夹类型保持一致,正确添加了图标和上下文服务调用。
packages/ai-native/src/browser/chat/chat.view.tsx (2)
620-625: 消息净化逻辑正确实现正确地在创建请求前移除 LLM 上下文键,同时在历史记录中保留原始消息内容(包含规则引用),这种处理方式是合理的。
741-752: 规则模式处理与现有模式保持一致规则模式的处理逻辑与现有的文件、文件夹和代码模式处理保持一致,正确地提取规则名称并格式化为上下文键。
packages/ai-native/src/browser/rules/rules.contribution.ts (2)
39-105: 规则贡献实现结构良好这个新的贡献类遵循了 OpenSumi 的贡献模式,正确实现了多个接口,并通过依赖注入管理服务。编辑器组件注册、资源提供者和命令注册的实现都很规范。
56-58: 在应用启动时初始化项目规则在
onStart方法中初始化项目规则是合适的时机,确保在应用完全启动后规则服务可用。packages/i18n/src/common/en-US.lang.ts (1)
1542-1543: 本地化条目完整且结构良好!新增的规则相关本地化字符串覆盖了功能的各个方面,包括用户规则、项目规则、错误提示等。
Also applies to: 1605-1622
packages/ai-native/src/browser/components/ChatMentionInput.tsx (3)
13-19: 导入和依赖注入正确!规则功能所需的导入和服务注入都已正确添加。
Also applies to: 34-35, 88-88, 93-96
352-419: Rule 提及类型实现完善!实现包含了完整的搜索和排序逻辑:
- 正确获取项目规则
- 搜索优先级合理(文件名匹配 > 描述匹配)
- 结果限制为10条避免过多选项
代码质量高,逻辑清晰。
438-444: 规则按钮添加正确!在页脚左侧添加了规则按钮,配置了正确的图标和点击处理函数。
packages/ai-native/src/browser/rules/rules.service.ts (2)
22-62: 服务结构设计良好!RulesService 的基础结构合理:
- 依赖注入配置正确
- 事件发射器用于通知规则变更
- 全局规则和项目规则分离管理
116-118: 辅助方法实现正确!
openRule、updateGlobalRules和 MDC 解析方法都实现简洁且包含了适当的错误处理。Also applies to: 170-189
packages/ai-native/src/browser/context/llm-context.service.ts (1)
264-284: 文件夹序列化实现改进良好!将方法改为异步并返回格式化的文件夹结构信息,提供了更好的上下文可读性。
packages/ai-native/src/common/mdc-parser.ts (3)
172-200: MDC 解析实现合理使用正则表达式提取 frontmatter 并具有良好的错误处理和降级策略。
231-257: 验证逻辑完善对所有预期字段进行了全面的类型检查,包括对 globs 数组元素的递归验证。
137-165: 🛠️ Refactor suggestion数组项序列化可能产生无效的 YAML
在第 149 行使用
JSON.stringify序列化非字符串数组项可能产生无效的 YAML 格式(例如对于布尔值会产生 "true" 而不是 true)。for (const item of value) { - lines.push(` - ${typeof item === 'string' ? item : JSON.stringify(item)}`); + if (typeof item === 'string') { + // 字符串需要检查是否需要引号 + if (item.includes(':') || item.includes('#') || item.includes('\n') || item.trim() !== item) { + lines.push(` - "${item.replace(/"/g, '\\"')}"`); + } else { + lines.push(` - ${item}`); + } + } else { + lines.push(` - ${item}`); + } }Likely an incorrect or invalid review comment.
packages/ai-native/src/common/prompts/context-prompt-provider.ts (2)
5-5: 代码更改符合预期引入
AttachFileContext类型用于支持文件附件的详细上下文信息。
93-104: 提示词结构优化合理将全局规则放在最前面,附加规则放在额外数据块中,这种层次结构清晰地体现了规则的优先级。
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
packages/ai-native/src/browser/context/llm-context.service.ts (1)
386-394: Shell默认值逻辑仍需改进当terminal.type为'default'时,代码总是默认为'zsh',这在Windows系统上是不正确的。应该根据操作系统选择合适的默认shell。
- const shell = this.preferenceService.get<string>('terminal.type', 'zsh'); - const shellName = shell === 'default' ? 'zsh' : shell; + const shell = this.preferenceService.get<string>('terminal.type', 'default'); + let shellName = shell; + if (shell === 'default') { + shellName = platform === 'windows' ? 'cmd' : 'zsh'; + }
🧹 Nitpick comments (1)
packages/ai-native/src/browser/components/mention-input/mention-input.tsx (1)
1238-1249: 规则删除逻辑需要优化当前的规则删除实现通过清空所有上下文再重新添加的方式比较低效。建议实现专门的
removeRuleFromContext方法调用。- onClick={() => { - // 由于没有专门的删除规则方法,我们重新构建规则列表 - contextService?.cleanFileContext(); - // 重新添加除了当前要删除的规则之外的所有上下文 - attachedFiles.files.forEach((file) => contextService?.addFileToContext(file.uri, file.selection, true)); - attachedFiles.folders.forEach((folder) => contextService?.addFolderToContext(folder.uri, true)); - attachedFiles.rules.forEach((r, i) => { - if (i !== index) { - contextService?.addRuleToContext(new URI(r.path), true); - } - }); - }} + onClick={() => removeContext(MentionType.RULE, new URI(rule.path))}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
packages/ai-native/src/browser/components/mention-input/mention-input.module.less(6 hunks)packages/ai-native/src/browser/components/mention-input/mention-input.tsx(11 hunks)packages/ai-native/src/browser/context/llm-context.service.ts(12 hunks)packages/ai-native/src/common/llm-context.ts(5 hunks)packages/i18n/src/common/en-US.lang.ts(3 hunks)packages/i18n/src/common/zh-CN.lang.ts(3 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/i18n/src/common/en-US.lang.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- packages/ai-native/src/common/llm-context.ts
- packages/i18n/src/common/zh-CN.lang.ts
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: build (ubuntu-latest, 20.x)
- GitHub Check: build-windows
- GitHub Check: build (macos-latest, 20.x)
- GitHub Check: unittest (macos-latest, 18.x, node)
- GitHub Check: unittest (ubuntu-latest, 18.x, jsdom)
- GitHub Check: unittest (ubuntu-latest, 18.x, node)
- GitHub Check: unittest (macos-latest, 18.x, jsdom)
- GitHub Check: ubuntu-latest, Node.js 20.x
🔇 Additional comments (14)
packages/ai-native/src/browser/components/mention-input/mention-input.module.less (4)
32-34: LGTM!修复了mention tag的垂直对齐问题通过设置固定高度和负的margin-top值,有效解决了mention tag在编辑器中的垂直对齐问题。
268-268: 改进RTL文本处理添加
unicode-bidi: plaintext;配合direction: rtl;能更好地处理从右到左的文本渲染,特别是在文本截断场景下。
356-360: 统一图标字体样式为mention图标添加伪元素样式,确保字体大小和背景尺寸的一致性。
424-571: 新增上下文预览UI样式完整且考虑周全新增的context preview相关样式提供了:
- 清晰的布局和间距设计
- 优雅的悬停效果和交互动画
- 移除按钮的视觉反馈(缩放和颜色变化)
- 响应式的宽度限制和文本截断
样式设计符合现代UI标准,交互体验良好。
packages/ai-native/src/browser/context/llm-context.service.ts (4)
39-50: 依赖注入配置正确新增的依赖注入包括RulesService、PreferenceService、ITerminalApiService和IApplicationService,为规则管理功能提供了必要的服务支持。
101-117: 规则上下文管理方法实现合理
addRuleToContext方法包含了适当的参数验证、重复检查和规则存在性验证,确保只有有效的规则才会被添加到上下文中。
184-200: 移除上下文方法实现一致新增的
removeFolderFromContext和removeRuleFromContext方法与现有的removeFileFromContext保持了一致的实现模式,确保了API的统一性。
413-473: 规则序列化逻辑设计完善
serializeAttachedRules方法实现了智能的规则匹配逻辑:
- 支持Agent请求的规则
- 支持始终应用的规则
- 支持基于glob模式的文件匹配规则
XML格式的包装和规则描述格式化也很合适,便于AI理解和使用。
packages/ai-native/src/browser/components/mention-input/mention-input.tsx (6)
4-4: 导入路径问题已修复从静态分析和AI摘要可以看出,导入路径已经改为相对路径
../../../common/types,解决了之前的TypeScript编译错误。
71-76: 状态结构扩展合理在
attachedFiles状态中添加rules数组,与现有的files和folders保持一致的结构设计。
78-86: Mention tag跟踪机制设计良好使用ref来跟踪mention tag的状态变化,能够有效检测tag的删除并相应地清理上下文,避免了数据不一致的问题。
222-259: 删除检测逻辑实现精确通过比较当前和之前的mention tag集合,精确识别被删除的tag并调用相应的清理方法。支持FILE、FOLDER和RULE三种类型的清理,逻辑完整。
787-792: RULE类型集成完整为RULE类型添加了专用的图标处理和上下文服务调用,与现有的FILE和FOLDER类型保持一致的处理模式。
1178-1273: 上下文预览UI实现优秀新的
renderContextPreview方法提供了:
- 清晰的视觉呈现,显示所有附加的文件、文件夹和规则
- 直观的删除操作,每个项目都有独立的删除按钮
- 良好的用户体验,空状态下显示标题引导用户操作
- 适当的文本截断和相对路径显示
代码结构清晰,功能完整。
|
/next |
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
packages/ai-native/src/browser/context/llm-context.service.ts (1)
392-396: Shell 默认值逻辑需要改进当 terminal.type 为 'default' 时,代码总是默认为 'zsh',这在 Windows 系统上是不正确的。应该根据操作系统选择合适的默认 shell。
- const shell = this.preferenceService.get<string>('terminal.type', 'zsh'); - let shellName = shell; - if (shell === 'default') { - shellName = this.applicationService.backendOS === OperatingSystem.Windows ? 'cmd' : 'zsh'; - } + const shell = this.preferenceService.get<string>('terminal.type', 'default'); + let shellName = shell; + if (shell === 'default') { + shellName = this.applicationService.backendOS === OperatingSystem.Windows ? 'cmd' : 'zsh'; + }
🧹 Nitpick comments (3)
packages/ai-native/src/browser/chat/chat-proxy.service.ts (1)
128-129: 使用可选链简化条件检查根据静态分析提示,可以使用可选链来简化条件检查逻辑。
- if (commandHandler && commandHandler.providerPrompt) { + if (commandHandler?.providerPrompt) {🧰 Tools
🪛 Biome (1.9.4)
[error] 128-129: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
packages/ai-native/src/browser/context/llm-context.service.ts (1)
304-337: 优化文件夹结构获取的性能
getFormattedFolderStructure方法为每个子项都进行异步文件系统调用,这可能导致性能问题。对于包含大量文件的文件夹,建议添加限制或使用批量操作。private async getFormattedFolderStructure(folder: string): Promise<string> { const result: string[] = []; + const MAX_ITEMS = 100; // 限制显示的最大项目数 try { const stat = await this.fileService.getFileStat(folder); + const children = stat?.children?.slice(0, MAX_ITEMS) || []; + const hasMore = (stat?.children?.length || 0) > MAX_ITEMS; - for (const child of stat?.children || []) { + for (const child of children) { // ... 现有逻辑 } + + if (hasMore) { + result.push(`... and ${(stat?.children?.length || 0) - MAX_ITEMS} more items`); + } } catch { return ''; }packages/ai-native/src/common/prompts/context-prompt-provider.ts (1)
147-164: 简化当前文件部分的构建逻辑
buildCurrentFileSection方法可以通过使用模板字符串来简化字符串拼接逻辑,提高可读性。private buildCurrentFileSection( fileInfo: { path: string; languageId: string; content: string; currentLine?: number; lineContent?: string } | null, ): string { if (!fileInfo) { return ''; } - let currentFileSection = `<current_file>\nPath: ${fileInfo.path}`; - - if (fileInfo.currentLine && fileInfo.lineContent) { - currentFileSection += `\nCurrently selected line: ${fileInfo.currentLine}`; - currentFileSection += `\nLine ${fileInfo.currentLine} content: \`${fileInfo.lineContent}\``; - } - - currentFileSection += '\n</current_file>'; - - return currentFileSection; + const lineInfo = fileInfo.currentLine && fileInfo.lineContent + ? `\nCurrently selected line: ${fileInfo.currentLine}\nLine ${fileInfo.currentLine} content: \`${fileInfo.lineContent}\`` + : ''; + + return `<current_file>\nPath: ${fileInfo.path}${lineInfo}\n</current_file>`; }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
packages/ai-native/src/browser/chat/chat-proxy.service.ts(3 hunks)packages/ai-native/src/browser/context/llm-context.service.ts(12 hunks)packages/ai-native/src/browser/rules/rules.view.tsx(1 hunks)packages/ai-native/src/common/mdc-parser.ts(1 hunks)packages/ai-native/src/common/prompts/context-prompt-provider.ts(6 hunks)packages/ai-native/src/common/prompts/system-prompt.ts(1 hunks)packages/components/src/scrollbars/index.tsx(1 hunks)packages/components/src/scrollbars/styles.less(2 hunks)packages/i18n/src/common/en-US.lang.ts(3 hunks)packages/i18n/src/common/zh-CN.lang.ts(3 hunks)
✅ Files skipped from review due to trivial changes (2)
- packages/components/src/scrollbars/styles.less
- packages/ai-native/src/common/prompts/system-prompt.ts
🚧 Files skipped from review as they are similar to previous changes (5)
- packages/components/src/scrollbars/index.tsx
- packages/ai-native/src/browser/rules/rules.view.tsx
- packages/i18n/src/common/zh-CN.lang.ts
- packages/i18n/src/common/en-US.lang.ts
- packages/ai-native/src/common/mdc-parser.ts
🧰 Additional context used
🧬 Code Graph Analysis (1)
packages/ai-native/src/common/prompts/context-prompt-provider.ts (2)
packages/ai-native/src/common/llm-context.ts (1)
AttachFileContext(76-82)packages/ai-native/src/browser/rules/rules.service.ts (1)
globalRules(52-57)
🪛 Biome (1.9.4)
packages/ai-native/src/browser/chat/chat-proxy.service.ts
[error] 128-129: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: unittest (ubuntu-latest, 18.x, jsdom)
- GitHub Check: unittest (macos-latest, 18.x, jsdom)
- GitHub Check: unittest (macos-latest, 18.x, node)
- GitHub Check: unittest (ubuntu-latest, 18.x, node)
- GitHub Check: ubuntu-latest, Node.js 20.x
- GitHub Check: build (ubuntu-latest, 20.x)
- GitHub Check: build-windows
- GitHub Check: build (macos-latest, 20.x)
🔇 Additional comments (3)
packages/ai-native/src/browser/chat/chat-proxy.service.ts (1)
107-174: 异步注册代理的改进很好将代理注册移到
getBackendOS()的异步回调中是一个很好的改进,确保了在获取到后端操作系统信息后再进行注册,避免了潜在的竞态条件问题。🧰 Tools
🪛 Biome (1.9.4)
[error] 128-129: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
packages/ai-native/src/common/prompts/context-prompt-provider.ts (2)
57-62: 当前行内容获取逻辑改进良好使用 Monaco Editor 的
getLineContentAPI 直接获取行内容是一个很好的性能改进,避免了分割整个文件内容的开销。这个实现正确地处理了编辑器和模型的存在性检查。
26-29: 当前文件去重逻辑正确检查当前文件是否已经在附加文件列表中,如果是则设为 null 的逻辑是正确的,避免了重复信息在提示中出现。
|
🎉 PR Next publish successful! 3.9.1-next-1748939097.0 |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (2)
packages/ai-native/src/browser/context/llm-context.service.ts (2)
380-414: 全局规则序列化实现良好,shell 逻辑已部分改进该方法正确实现了全局规则的序列化,构建了结构化的用户信息和规则部分。Shell 逻辑相比之前的版本有所改进,现在会根据操作系统选择合适的默认 shell。
但是,shell 逻辑仍有改进空间:对于 Windows 系统,'cmd' 可能不是最佳选择,'powershell' 在现代 Windows 环境中更常用。
考虑进一步优化 shell 选择逻辑:
- if (shell === 'default') { - shellName = this.applicationService.backendOS === OperatingSystem.Windows ? 'cmd' : 'zsh'; - } + if (shell === 'default') { + if (this.applicationService.backendOS === OperatingSystem.Windows) { + shellName = 'powershell'; + } else if (this.applicationService.backendOS === OperatingSystem.Linux) { + shellName = 'bash'; + } else { + shellName = 'zsh'; // macOS + } + }
416-473: 规则辅助方法实现良好,已解决之前的复杂性问题这些辅助方法很好地解决了之前评论中提到的规则序列化逻辑过于复杂的问题。代码被合理地拆分为专用的辅助方法,提高了可读性和可维护性。
不过仍有一些优化机会:
normalizeGlobs方法中存在冗余逻辑,可以简化:- private normalizeGlobs(globs: string | string[]): string[] { - const globArray = isString(globs) ? globs.split(',') : globs || []; + private normalizeGlobs(globs: string | string[]): string[] { + const globArray = isString(globs) ? globs.split(',') : (globs || []); return globArray.map((glob) => { const p = glob.trim(); return p.startsWith('**') ? p : `**/${p}`; }); }
- 考虑缓存
parseGlob结果以避免重复解析相同的模式。
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
packages/ai-native/src/browser/components/mention-input/types.ts(3 hunks)packages/ai-native/src/browser/context/llm-context.service.ts(12 hunks)packages/ai-native/src/common/mdc-parser.ts(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/ai-native/src/common/mdc-parser.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- packages/ai-native/src/browser/components/mention-input/types.ts
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: ubuntu-latest, Node.js 20.x
- GitHub Check: build (macos-latest, 20.x)
- GitHub Check: build (ubuntu-latest, 20.x)
- GitHub Check: build-windows
- GitHub Check: unittest (macos-latest, 18.x, node)
- GitHub Check: unittest (macos-latest, 18.x, jsdom)
- GitHub Check: unittest (ubuntu-latest, 18.x, jsdom)
- GitHub Check: unittest (ubuntu-latest, 18.x, node)
🔇 Additional comments (11)
packages/ai-native/src/browser/context/llm-context.service.ts (11)
2-23: 导入语句合理且必要新增的导入语句都是为了支持规则管理功能所必需的,包括偏好设置服务、规则服务、工具函数等,结构清晰合理。
39-50: 依赖注入配置正确新增的服务依赖注入配置合理,包括规则服务、偏好设置服务、终端服务和应用服务,都正确使用了 @Autowired 装饰器。
101-117: 规则添加方法实现良好
addRuleToContext方法正确处理了空值检查、重复检测和规则查找逻辑,实现清晰合理。
193-200: 规则移除方法实现正确
removeRuleFromContext方法正确实现了根据路径查找并移除规则的逻辑,符合预期行为。
60-60: 正确添加了规则状态管理在类中添加
attachedRules属性用于跟踪附加的规则,与现有的文件和文件夹管理保持一致。
66-66: 事件通知正确包含规则信息上下文变更事件正确包含了
attachedRules属性,确保UI能够及时获取规则状态更新。
156-156: 清理方法正确处理规则
cleanFileContext方法正确清理了附加的规则,保持了状态一致性。
184-191: 文件夹移除方法实现合理
removeFolderFromContext方法遵循了与文件移除相同的模式,实现简洁明了。
276-279: 序列化方法更新合理正确在序列化结果中包含了
attachedRules和globalRules,调用了相应的专用序列化方法。
282-302: 文件夹序列化增强实现优秀新的文件夹序列化方法提供了清晰的结构化输出,包含有意义的标题和详细的文件夹内容描述,大大提升了上下文信息的可读性。
304-337: 文件夹结构格式化方法实现全面
getFormattedFolderStructure方法正确处理了目录、文件和符号链接的不同类型,使用清晰的前缀标识,并提供了有用的元信息如目录项目数量。错误处理也很恰当。
|
/next |
|
/next |
|
🎉 PR Next publish successful! 3.9.1-next-1748943529.0 |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #4578 +/- ##
===========================================
+ Coverage 12.07% 52.65% +40.57%
===========================================
Files 1673 1684 +11
Lines 102620 104042 +1422
Branches 20965 22726 +1761
===========================================
+ Hits 12394 54780 +42386
+ Misses 76037 40948 -35089
+ Partials 14189 8314 -5875
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Types
Background or solution
Changelog
support chat agent rules and context management
Summary by CodeRabbit
新功能
样式优化
文档与本地化
其他优化