Update README.MD and add nano-claude-code v3.0 + original-source-code/src
- README.MD: add original-source-code and nano-claude-code sections, update overview table (4 subprojects), add v3.0 news entry, expand comparison table with memory/multi-agent/skills dimensions - nano-claude-code v3.0: multi-agent package (multi_agent/), memory package (memory/), skill package (skill/) with built-in /commit and /review skills, context compression (compaction.py), tool registry plugin system, diff view, 17 slash commands, 18 built-in tools, 101 tests (~5000 lines total) - original-source-code/src: add raw TypeScript source tree (1884 files) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,8 +5,11 @@ import uuid
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Generator
|
||||
|
||||
from tools import TOOL_SCHEMAS, execute_tool
|
||||
from tool_registry import get_tool_schemas
|
||||
from tools import execute_tool
|
||||
import tools as _tools_init # ensure built-in tools are registered on import
|
||||
from providers import stream, AssistantTurn, TextChunk, ThinkingChunk, detect_provider
|
||||
from compaction import maybe_compact
|
||||
|
||||
# ── Re-export event types (used by nano_claude.py) ────────────────────────
|
||||
__all__ = [
|
||||
@@ -54,25 +57,39 @@ def run(
|
||||
state: AgentState,
|
||||
config: dict,
|
||||
system_prompt: str,
|
||||
depth: int = 0,
|
||||
cancel_check=None,
|
||||
) -> Generator:
|
||||
"""
|
||||
Multi-turn agent loop (generator).
|
||||
Yields: TextChunk | ThinkingChunk | ToolStart | ToolEnd |
|
||||
PermissionRequest | TurnDone
|
||||
|
||||
Args:
|
||||
depth: sub-agent nesting depth, 0 for top-level
|
||||
cancel_check: callable returning True to abort the loop early
|
||||
"""
|
||||
# Append user turn in neutral format
|
||||
state.messages.append({"role": "user", "content": user_message})
|
||||
|
||||
# Inject runtime metadata into config so tools (e.g. Agent) can access it
|
||||
config = {**config, "_depth": depth, "_system_prompt": system_prompt}
|
||||
|
||||
while True:
|
||||
if cancel_check and cancel_check():
|
||||
return
|
||||
state.turn_count += 1
|
||||
assistant_turn: AssistantTurn | None = None
|
||||
|
||||
# Compact context if approaching window limit
|
||||
maybe_compact(state, config)
|
||||
|
||||
# Stream from provider (auto-detected from model name)
|
||||
for event in stream(
|
||||
model=config["model"],
|
||||
system=system_prompt,
|
||||
messages=state.messages,
|
||||
tool_schemas=TOOL_SCHEMAS,
|
||||
tool_schemas=get_tool_schemas(),
|
||||
config=config,
|
||||
):
|
||||
if isinstance(event, (TextChunk, ThinkingChunk)):
|
||||
@@ -114,6 +131,7 @@ def run(
|
||||
result = execute_tool(
|
||||
tc["name"], tc["input"],
|
||||
permission_mode="accept-all", # already gate-checked above
|
||||
config=config,
|
||||
)
|
||||
|
||||
yield ToolEnd(tc["name"], result, permitted)
|
||||
|
||||
Reference in New Issue
Block a user