Skip to content

Conversation

@li-yechao
Copy link
Collaborator

@li-yechao li-yechao commented Nov 28, 2025

Related Issue

Major Changes

Screenshots

Test Plan

Checklist

  • This change requires documentation updates, and I have updated the relevant documentation. If the documentation has not been updated, please create a documentation update issue and link it here
  • The changes are already covered by tests, and I have adjusted the test coverage for the changed parts
  • The newly added code logic is also covered by tests
  • This change adds dependencies, and they are placed in dependencies and devDependencies
  • This change includes adding or updating npm dependencies, and it does not result in multiple versions of the same dependency [check the diff of pnpm-lock.yaml]

Summary by AIGNE

Release Notes

New Feature

  • Agentic Agent Type: Introduced a new "agentic" agent that can execute complex tasks through specialized skills and built-in tools (Bash, Read, Write, Grep, Glob)
  • Skill System: Added support for loading external agent skills from markdown files to extend agent capabilities
  • Task Planning: Integrated planner sub-agent that breaks down objectives into actionable steps for better task execution

Chore

  • Updated YAML loader and agent parsing to support the new agentic agent configuration

@github-actions
Copy link

github-actions bot commented Nov 28, 2025

Image description AIGNE CodeSmith

Walkthrough

This changeset introduces a new "agentic" agent type that extends the existing AI agent framework with advanced task execution capabilities. The implementation includes a skill system for loading external agent capabilities, built-in tools for file operations and bash execution, and a planner sub-agent for breaking down complex objectives. The changes span core agent implementation, YAML configuration support, and loader updates to handle the new agent type.

Changes

Files Summary
packages/core/src/agents/agentic-agent.ts Implements new AgenticAgent class with skill system, built-in tools (Bash, Read, Write, Grep, Glob), and planner sub-agent for complex task execution
packages/core/src/loader/agent-yaml.ts, packages/core/src/loader/index.ts Adds AgenticAgentSchema interface and validation schema, updates agent parsing to support the new "agentic" agent type

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Commits Files that changed from the base of the PR and between a431302 and bc0eab5 commits.
Files selected (3)
  • packages/core/src/agents/agentic-agent.ts (1)
  • packages/core/src/loader/agent-yaml.ts (3)
  • packages/core/src/loader/index.ts (2)
Files ignored due to filter (2)
  • packages/core/package.json
  • pnpm-lock.yaml
Review comments generated (16)
  • Review: 11
  • LGTM: 5

提示

Image description AIGNE CodeSmith (@codesmith) 聊天

  • 回复此机器人留下的审查评论以提出后续问题。审查评论是对差异或文件的评论。
  • 通过在回复中标记 @codesmith 邀请机器人加入审查评论链。

代码建议

  • 机器人可能会提出代码建议,但在提交前请仔细审查它们,因为行号范围可能会不对齐。
  • 你可以编辑机器人做出的评论,并在建议稍有偏差时手动调整。

暂停增量审查

  • 在 PR 描述中的任何位置添加 @codesmith: ignore 以暂停机器人的进一步审查。

Comment on lines +269 to +270
console.log("GrepTool stdout:", data.toString());
controller.enqueue({ delta: { text: { matches: data.toString() } } });

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Debug console.log statements should be removed from production code.

-            console.log("GrepTool stdout:", data.toString());

Comment on lines +274 to +275
console.log("GrepTool stderr:", data.toString());
controller.enqueue({ delta: { text: { error: data.toString() } } });

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Debug console.log statements should be removed from production code.

-            console.log("GrepTool stderr:", data.toString());

Comment on lines +279 to +280
console.log("GrepTool process closed with code:", code);
if (typeof code === "number") {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Debug console.log statements should be removed from production code.

-            console.log("GrepTool process closed with code:", code);

Comment on lines +287 to +288
console.log("GrepTool process error:", error);
controller.enqueue({

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Debug console.log statements should be removed from production code.

-            console.log("GrepTool process error:", error);

async function loadAgentSkills() {
const skills: AgentSkill[] = [];

const root = resolve("/Users/chao/.claude/plugins/marketplaces/anthropic-agent-skills");

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Hardcoded path should not be used in production code. This creates a security vulnerability and makes the code non-portable.

-  const root = resolve("/Users/chao/.claude/plugins/marketplaces/anthropic-agent-skills");

controller.enqueue({ delta: { json: { success: true } } });
} catch (error) {
controller.enqueue({
delta: { text: { error: `Failed to write file: ${error.message}` } },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Error message access is unsafe - error might not have a message property.

-            delta: { text: { error: `Failed to write file: ${error.message}` } },
+            delta: { text: { error: `Failed to write file: ${error instanceof Error ? error.message : String(error)}` } },

rg.on("error", (error) => {
console.log("GrepTool process error:", error);
controller.enqueue({
delta: { text: { error: `Failed to spawn ripgrep: ${error.message}` } },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Error message access is unsafe - error might not have a message property.

-              delta: { text: { error: `Failed to spawn ripgrep: ${error.message}` } },
+              delta: { text: { error: `Failed to spawn ripgrep: ${error instanceof Error ? error.message : String(error)}` } },

});
} catch (error) {
controller.enqueue({
delta: { text: { error: `GrepTool encountered an error: ${error.message}` } },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Error message access is unsafe - error might not have a message property.

-            delta: { text: { error: `GrepTool encountered an error: ${error.message}` } },
+            delta: { text: { error: `GrepTool encountered an error: ${error instanceof Error ? error.message : String(error)}` } },

}
} catch (error) {
controller.enqueue({
delta: { text: { error: `Failed to glob files: ${error.message}` } },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Error message access is unsafe - error might not have a message property.

-            delta: { text: { error: `Failed to glob files: ${error.message}` } },
+            delta: { text: { error: `Failed to glob files: ${error instanceof Error ? error.message : String(error)}` } },

});

child.on("error", (error) => {
controller.enqueue({ delta: { text: { stderr: error.message } } });

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image description AIGNE CodeSmith

Error message access is unsafe - error might not have a message property.

-          controller.enqueue({ delta: { text: { stderr: error.message } } });
+          controller.enqueue({ delta: { text: { stderr: error instanceof Error ? error.message : String(error) } } });

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants