mirror of
https://github.com/val1813/kwcode.git
synced 2026-09-09 17:38:12 +08:00
docs: update STATUS.md with current progress
- 67 bench tasks (Python/Go/TS) added - CLI file structure updated (commands/ split) - TODO list updated with completed items Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
31
STATUS.md
31
STATUS.md
@@ -9,7 +9,8 @@
|
||||
|
||||
## Current: v1.5.0 (2026-05-06)
|
||||
|
||||
451/451 tests green. Architecture upgrade: isolated search + cross-file contracts + PENCIL compression.
|
||||
451/451 tests green + 67个bench tasks(多语言:Python/Go/TypeScript)。
|
||||
架构升级:隔离搜索 + 跨文件契约 + PENCIL压缩 + CLI拆分 + 注释中文化。
|
||||
|
||||
### v1.5.0 — Isolated Search + Cross-File Contracts
|
||||
|
||||
@@ -140,9 +141,14 @@ kwcode/
|
||||
├── STATUS.md
|
||||
└── kaiwu/
|
||||
├── cli/
|
||||
│ ├── main.py # REPL + EventBus rendering + spinner + summary
|
||||
│ ├── status_bar.py # Status bar (4-tier adaptive)
|
||||
│ └── onboarding.py # First-run onboarding
|
||||
│ ├── main.py # 入口(173行)+ Typer路由
|
||||
│ ├── commands/task.py # run/chat/vision/multi-task命令
|
||||
│ ├── commands/expert.py # expert list/info/export/install
|
||||
│ ├── commands/config.py # init/api/serve/setup-search
|
||||
│ ├── formatters.py # Rich输出格式化
|
||||
│ ├── repl.py # REPL交互循环
|
||||
│ ├── status_bar.py # 状态栏(4档自适应)
|
||||
│ └── onboarding.py # 首次启动引导
|
||||
├── core/
|
||||
│ ├── event_bus.py # Unified event bus (append-only + replay)
|
||||
│ ├── cognitive_gate.py # Diminishing returns detection
|
||||
@@ -181,20 +187,21 @@ kwcode/
|
||||
├── mcp/ # MCP Router
|
||||
├── llm/ # Ollama + llama.cpp backends
|
||||
├── tools/ # 5 deterministic tools + ToolGateway
|
||||
└── tests/ # 451 tests
|
||||
└── tests/ # 451 unit tests + 67 bench tasks (Python/Go/TS)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## TODO
|
||||
|
||||
1. ~~CLI refactor: split main.py (1861 lines) into cli/commands/~~ ✅ v1.5.0
|
||||
2. ~~Comments: unify to Chinese across all modules~~ ✅ v1.5.0
|
||||
3. ~~Expert-level EventBus emit (file reads, function locations, test results)~~ ✅ v1.5.0
|
||||
4. SQLite cross-session queries
|
||||
5. Full expert benchmark (12 presets)
|
||||
6. pip publish to PyPI
|
||||
7. install.ps1 / install.sh one-click install
|
||||
1. ~~CLI拆分:main.py 1861→173行~~ ✅ v1.5.0
|
||||
2. ~~注释统一中文~~ ✅ v1.5.0
|
||||
3. ~~专家细粒度EventBus emit~~ ✅ v1.5.0
|
||||
4. ~~bench tasks多语言覆盖(67题 Python/Go/TS)~~ ✅ v1.5.0
|
||||
5. SQLite跨session查询
|
||||
6. pip publish到PyPI(v1.5.0)
|
||||
7. install.ps1 / install.sh一键安装
|
||||
8. SWE-bench评测(用评测VPS跑)
|
||||
|
||||
## Known Issues
|
||||
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
"""Workflow definition: nodes, edges, and parallel gateway logic."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
from typing import List, Dict, Optional, Set
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class NodeType(Enum):
|
||||
START = "start"
|
||||
END = "end"
|
||||
TASK = "task"
|
||||
PARALLEL_SPLIT = "parallel_split" # fork: one in, many out
|
||||
PARALLEL_JOIN = "parallel_join" # merge: many in, one out
|
||||
|
||||
|
||||
@dataclass
|
||||
class Node:
|
||||
node_id: str
|
||||
node_type: NodeType
|
||||
name: str = ""
|
||||
|
||||
|
||||
@dataclass
|
||||
class Edge:
|
||||
edge_id: str
|
||||
source_id: str
|
||||
target_id: str
|
||||
condition: Optional[str] = None # None means unconditional
|
||||
|
||||
|
||||
class WorkflowDefinition:
|
||||
"""Immutable workflow graph."""
|
||||
|
||||
def __init__(self, workflow_id: str):
|
||||
self.workflow_id = workflow_id
|
||||
self._nodes: Dict[str, Node] = {}
|
||||
self._edges: List[Edge] = []
|
||||
|
||||
def add_node(self, node: Node) -> None:
|
||||
self._nodes[node.node_id] = node
|
||||
|
||||
def add_edge(self, edge: Edge) -> None:
|
||||
self._edges.append(edge)
|
||||
|
||||
def get_node(self, node_id: str) -> Node:
|
||||
return self._nodes[node_id]
|
||||
|
||||
def outgoing_edges(self, node_id: str) -> List[Edge]:
|
||||
return [e for e in self._edges if e.source_id == node_id]
|
||||
|
||||
def incoming_edges(self, node_id: str) -> List[Edge]:
|
||||
return [e for e in self._edges if e.target_id == node_id]
|
||||
|
||||
def all_nodes(self) -> List[Node]:
|
||||
return list(self._nodes.values())
|
||||
|
||||
def start_node(self) -> Node:
|
||||
for node in self._nodes.values():
|
||||
if node.node_type == NodeType.START:
|
||||
return node
|
||||
raise ValueError("No START node defined")
|
||||
|
||||
def can_join(self, join_node_id: str, completed: Set[str], skipped: Set[str]) -> bool:
|
||||
"""
|
||||
Return True when all branches feeding into a PARALLEL_JOIN have
|
||||
either completed or been skipped.
|
||||
|
||||
BUG: only checks `completed`; ignores `skipped`, so a join that
|
||||
has one branch completed and one branch skipped will never fire.
|
||||
"""
|
||||
incoming = self.incoming_edges(join_node_id)
|
||||
required_sources = {e.source_id for e in incoming}
|
||||
# BUG: should be `required_sources <= (completed | skipped)`
|
||||
return required_sources <= completed
|
||||
@@ -1,3 +0,0 @@
|
||||
module bench/t61_go_scheduler
|
||||
|
||||
go 1.21
|
||||
Reference in New Issue
Block a user