monoco-toolkit 0.1.1__py3-none-any.whl → 0.2.8__py3-none-any.whl
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.
- monoco/cli/__init__.py +0 -0
- monoco/cli/project.py +87 -0
- monoco/cli/workspace.py +46 -0
- monoco/core/agent/__init__.py +5 -0
- monoco/core/agent/action.py +144 -0
- monoco/core/agent/adapters.py +129 -0
- monoco/core/agent/protocol.py +31 -0
- monoco/core/agent/state.py +106 -0
- monoco/core/config.py +212 -17
- monoco/core/execution.py +62 -0
- monoco/core/feature.py +58 -0
- monoco/core/git.py +51 -2
- monoco/core/injection.py +196 -0
- monoco/core/integrations.py +242 -0
- monoco/core/lsp.py +68 -0
- monoco/core/output.py +21 -3
- monoco/core/registry.py +36 -0
- monoco/core/resources/en/AGENTS.md +8 -0
- monoco/core/resources/en/SKILL.md +66 -0
- monoco/core/resources/zh/AGENTS.md +8 -0
- monoco/core/resources/zh/SKILL.md +65 -0
- monoco/core/setup.py +96 -110
- monoco/core/skills.py +444 -0
- monoco/core/state.py +53 -0
- monoco/core/sync.py +224 -0
- monoco/core/telemetry.py +4 -1
- monoco/core/workspace.py +85 -20
- monoco/daemon/app.py +127 -58
- monoco/daemon/models.py +4 -0
- monoco/daemon/services.py +56 -155
- monoco/features/config/commands.py +125 -44
- monoco/features/i18n/adapter.py +29 -0
- monoco/features/i18n/commands.py +89 -10
- monoco/features/i18n/core.py +113 -27
- monoco/features/i18n/resources/en/AGENTS.md +8 -0
- monoco/features/i18n/resources/en/SKILL.md +94 -0
- monoco/features/i18n/resources/zh/AGENTS.md +8 -0
- monoco/features/i18n/resources/zh/SKILL.md +94 -0
- monoco/features/issue/adapter.py +34 -0
- monoco/features/issue/commands.py +343 -101
- monoco/features/issue/core.py +384 -150
- monoco/features/issue/domain/__init__.py +0 -0
- monoco/features/issue/domain/lifecycle.py +126 -0
- monoco/features/issue/domain/models.py +170 -0
- monoco/features/issue/domain/parser.py +223 -0
- monoco/features/issue/domain/workspace.py +104 -0
- monoco/features/issue/engine/__init__.py +22 -0
- monoco/features/issue/engine/config.py +172 -0
- monoco/features/issue/engine/machine.py +185 -0
- monoco/features/issue/engine/models.py +18 -0
- monoco/features/issue/linter.py +325 -120
- monoco/features/issue/lsp/__init__.py +3 -0
- monoco/features/issue/lsp/definition.py +72 -0
- monoco/features/issue/migration.py +134 -0
- monoco/features/issue/models.py +46 -24
- monoco/features/issue/monitor.py +94 -0
- monoco/features/issue/resources/en/AGENTS.md +20 -0
- monoco/features/issue/resources/en/SKILL.md +111 -0
- monoco/features/issue/resources/zh/AGENTS.md +20 -0
- monoco/features/issue/resources/zh/SKILL.md +138 -0
- monoco/features/issue/validator.py +455 -0
- monoco/features/spike/adapter.py +30 -0
- monoco/features/spike/commands.py +45 -24
- monoco/features/spike/core.py +6 -40
- monoco/features/spike/resources/en/AGENTS.md +7 -0
- monoco/features/spike/resources/en/SKILL.md +74 -0
- monoco/features/spike/resources/zh/AGENTS.md +7 -0
- monoco/features/spike/resources/zh/SKILL.md +74 -0
- monoco/main.py +91 -2
- monoco_toolkit-0.2.8.dist-info/METADATA +136 -0
- monoco_toolkit-0.2.8.dist-info/RECORD +83 -0
- monoco_toolkit-0.1.1.dist-info/METADATA +0 -93
- monoco_toolkit-0.1.1.dist-info/RECORD +0 -33
- {monoco_toolkit-0.1.1.dist-info → monoco_toolkit-0.2.8.dist-info}/WHEEL +0 -0
- {monoco_toolkit-0.1.1.dist-info → monoco_toolkit-0.2.8.dist-info}/entry_points.txt +0 -0
- {monoco_toolkit-0.1.1.dist-info → monoco_toolkit-0.2.8.dist-info}/licenses/LICENSE +0 -0
monoco/features/spike/core.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import shutil
|
|
3
3
|
import subprocess
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Dict, Optional, List, Any
|
|
7
7
|
from rich.console import Console
|
|
8
8
|
|
|
9
|
-
from monoco.core.config import get_config
|
|
9
|
+
from monoco.core.config import get_config, load_raw_config, save_raw_config, ConfigScope
|
|
10
10
|
|
|
11
11
|
console = Console()
|
|
12
12
|
|
|
@@ -29,33 +29,10 @@ def run_git_command(cmd: List[str], cwd: Path) -> bool:
|
|
|
29
29
|
console.print("[red]Error:[/red] git command not found.")
|
|
30
30
|
return False
|
|
31
31
|
|
|
32
|
-
def get_config_file_path(root: Path) -> Path:
|
|
33
|
-
"""Determine the config file to update."""
|
|
34
|
-
# Priority 1: .monoco/config.yaml
|
|
35
|
-
hidden = root / ".monoco" / "config.yaml"
|
|
36
|
-
if hidden.exists():
|
|
37
|
-
return hidden
|
|
38
|
-
|
|
39
|
-
# Priority 2: monoco.yaml
|
|
40
|
-
visible = root / "monoco.yaml"
|
|
41
|
-
if visible.exists():
|
|
42
|
-
return visible
|
|
43
|
-
|
|
44
|
-
# Default to .monoco/config.yaml for new files
|
|
45
|
-
hidden.parent.mkdir(exist_ok=True)
|
|
46
|
-
return hidden
|
|
47
|
-
|
|
48
32
|
def update_config_repos(root: Path, repo_name: str, repo_url: str, remove: bool = False):
|
|
49
33
|
"""Update the repos list in the config file."""
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
data = {}
|
|
53
|
-
if config_path.exists():
|
|
54
|
-
try:
|
|
55
|
-
with open(config_path, "r") as f:
|
|
56
|
-
data = yaml.safe_load(f) or {}
|
|
57
|
-
except Exception:
|
|
58
|
-
data = {}
|
|
34
|
+
# Use core config utils
|
|
35
|
+
data = load_raw_config(ConfigScope.PROJECT, project_root=str(root))
|
|
59
36
|
|
|
60
37
|
# Ensure structure exists
|
|
61
38
|
if "project" not in data:
|
|
@@ -69,8 +46,7 @@ def update_config_repos(root: Path, repo_name: str, repo_url: str, remove: bool
|
|
|
69
46
|
else:
|
|
70
47
|
data["project"]["spike_repos"][repo_name] = repo_url
|
|
71
48
|
|
|
72
|
-
|
|
73
|
-
yaml.dump(data, f, sort_keys=False, default_flow_style=False)
|
|
49
|
+
save_raw_config(ConfigScope.PROJECT, data, project_root=str(root))
|
|
74
50
|
|
|
75
51
|
def ensure_gitignore(root: Path, target_dir_name: str):
|
|
76
52
|
"""Ensure the target directory is in .gitignore."""
|
|
@@ -131,24 +107,14 @@ This skill normalizes how we introduce external code repositories.
|
|
|
131
107
|
3. **Remove**: `monoco spike remove <name>`
|
|
132
108
|
"""
|
|
133
109
|
|
|
134
|
-
PROMPT_CONTENT = """### Spike (Research)
|
|
135
|
-
Manage external reference repositories.
|
|
136
|
-
- **Add Repo**: `monoco spike add <url>` (Available in `.reference/<name>` for reading)
|
|
137
|
-
- **Sync**: `monoco spike sync` (Run to download content)
|
|
138
|
-
- **Constraint**: Never edit files in `.reference/`. Treat them as read-only external knowledge."""
|
|
139
|
-
|
|
140
110
|
def init(root: Path, spikes_dir_name: str):
|
|
141
111
|
"""Initialize Spike environment."""
|
|
142
112
|
ensure_gitignore(root, spikes_dir_name)
|
|
143
113
|
(root / spikes_dir_name).mkdir(exist_ok=True)
|
|
144
114
|
|
|
145
|
-
def get_resources() -> Dict[str, Any]:
|
|
146
115
|
return {
|
|
147
116
|
"skills": {
|
|
148
117
|
"git-repo-spike": SKILL_CONTENT
|
|
149
118
|
},
|
|
150
|
-
"prompts": {
|
|
151
|
-
"spike": PROMPT_CONTENT
|
|
152
|
-
}
|
|
119
|
+
"prompts": {} # Handled by adapter via resource files
|
|
153
120
|
}
|
|
154
|
-
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
### Spike (Research)
|
|
2
|
+
|
|
3
|
+
Manage external reference repositories.
|
|
4
|
+
|
|
5
|
+
- **Add Repo**: `monoco spike add <url>` (Available in `.reference/<name>` for reading)
|
|
6
|
+
- **Sync**: `monoco spike sync` (Run to download content)
|
|
7
|
+
- **Constraint**: Never edit files in `.reference/`. Treat them as read-only external knowledge.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: monoco-spike
|
|
3
|
+
description: Manage external reference repositories for research and learning. Provides read-only access to curated codebases.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Spike (Research)
|
|
7
|
+
|
|
8
|
+
Manage external reference repositories in Monoco projects.
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
The Spike feature allows you to:
|
|
13
|
+
|
|
14
|
+
- **Add external repositories** as read-only references
|
|
15
|
+
- **Sync repository content** to local `.references/` directory
|
|
16
|
+
- **Access curated knowledge** without modifying source code
|
|
17
|
+
|
|
18
|
+
## Key Commands
|
|
19
|
+
|
|
20
|
+
### Add Repository
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
monoco spike add <url>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Adds an external repository as a reference. The repository will be cloned to `.references/<name>/` where `<name>` is derived from the repository URL.
|
|
27
|
+
|
|
28
|
+
**Example**:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
monoco spike add https://github.com/example/awesome-project
|
|
32
|
+
# Available at: .references/awesome-project/
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Sync Repositories
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
monoco spike sync
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Downloads or updates all configured spike repositories from `.monoco/config.yaml`.
|
|
42
|
+
|
|
43
|
+
### List Spikes
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
monoco spike list
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Shows all configured spike repositories and their sync status.
|
|
50
|
+
|
|
51
|
+
## Configuration
|
|
52
|
+
|
|
53
|
+
Spike repositories are configured in `.monoco/config.yaml`:
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
project:
|
|
57
|
+
spike_repos:
|
|
58
|
+
awesome-project: https://github.com/example/awesome-project
|
|
59
|
+
another-ref: https://github.com/example/another-ref
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Best Practices
|
|
63
|
+
|
|
64
|
+
1. **Read-Only Access**: Never edit files in `.references/`. Treat them as external knowledge.
|
|
65
|
+
2. **Curated Selection**: Only add high-quality, relevant repositories.
|
|
66
|
+
3. **Regular Sync**: Run `monoco spike sync` periodically to get updates.
|
|
67
|
+
4. **Commit Configuration**: Add spike repo URLs to version control for team consistency.
|
|
68
|
+
|
|
69
|
+
## Use Cases
|
|
70
|
+
|
|
71
|
+
- **Learning from Examples**: Study well-architected codebases
|
|
72
|
+
- **API Reference**: Keep framework documentation locally
|
|
73
|
+
- **Pattern Library**: Maintain a collection of design patterns
|
|
74
|
+
- **Competitive Analysis**: Reference similar projects
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: monoco-spike
|
|
3
|
+
description: 管理用于研究和学习的外部参考仓库。提供对精选代码库的只读访问。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Spike (研究)
|
|
7
|
+
|
|
8
|
+
在 Monoco 项目中管理外部参考仓库。
|
|
9
|
+
|
|
10
|
+
## 概述
|
|
11
|
+
|
|
12
|
+
Spike 功能允许你:
|
|
13
|
+
|
|
14
|
+
- **添加外部仓库**作为只读参考
|
|
15
|
+
- **同步仓库内容**到本地 `.references/` 目录
|
|
16
|
+
- **访问精选知识**而不修改源代码
|
|
17
|
+
|
|
18
|
+
## 核心命令
|
|
19
|
+
|
|
20
|
+
### 添加仓库
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
monoco spike add <url>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
将外部仓库添加为参考。仓库将被克隆到 `.references/<name>/`,其中 `<name>` 从仓库 URL 派生。
|
|
27
|
+
|
|
28
|
+
**示例**:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
monoco spike add https://github.com/example/awesome-project
|
|
32
|
+
# 可在以下位置访问: .references/awesome-project/
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 同步仓库
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
monoco spike sync
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
从 `.monoco/config.yaml` 下载或更新所有配置的 spike 仓库。
|
|
42
|
+
|
|
43
|
+
### 列出 Spikes
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
monoco spike list
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
显示所有配置的 spike 仓库及其同步状态。
|
|
50
|
+
|
|
51
|
+
## 配置
|
|
52
|
+
|
|
53
|
+
Spike 仓库在 `.monoco/config.yaml` 中配置:
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
project:
|
|
57
|
+
spike_repos:
|
|
58
|
+
awesome-project: https://github.com/example/awesome-project
|
|
59
|
+
another-ref: https://github.com/example/another-ref
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 最佳实践
|
|
63
|
+
|
|
64
|
+
1. **只读访问**: 永远不要编辑 `.references/` 中的文件。将它们视为外部知识。
|
|
65
|
+
2. **精选选择**: 只添加高质量、相关的仓库。
|
|
66
|
+
3. **定期同步**: 定期运行 `monoco spike sync` 以获取更新。
|
|
67
|
+
4. **提交配置**: 将 spike 仓库 URL 添加到版本控制以保持团队一致性。
|
|
68
|
+
|
|
69
|
+
## 使用场景
|
|
70
|
+
|
|
71
|
+
- **从示例中学习**: 研究架构良好的代码库
|
|
72
|
+
- **API 参考**: 在本地保存框架文档
|
|
73
|
+
- **模式库**: 维护设计模式集合
|
|
74
|
+
- **竞品分析**: 参考类似项目
|
monoco/main.py
CHANGED
|
@@ -11,8 +11,45 @@ app = typer.Typer(
|
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
def version_callback(value: bool):
|
|
15
|
+
if value:
|
|
16
|
+
# Try to read from pyproject.toml first (for dev mode)
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
version = "unknown"
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
# Look for pyproject.toml relative to this file
|
|
23
|
+
# monoco/main.py -> ../pyproject.toml
|
|
24
|
+
pyproject_path = Path(__file__).parent.parent / "pyproject.toml"
|
|
25
|
+
if pyproject_path.exists():
|
|
26
|
+
with open(pyproject_path, "r", encoding="utf-8") as f:
|
|
27
|
+
for line in f:
|
|
28
|
+
if line.strip().startswith('version = "'):
|
|
29
|
+
version = line.split('"')[1]
|
|
30
|
+
break
|
|
31
|
+
|
|
32
|
+
if version == "unknown":
|
|
33
|
+
import importlib.metadata
|
|
34
|
+
version = importlib.metadata.version("monoco-toolkit")
|
|
35
|
+
except Exception:
|
|
36
|
+
# Fallback
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
print(f"Monoco Toolkit v{version}")
|
|
40
|
+
raise typer.Exit()
|
|
41
|
+
|
|
42
|
+
|
|
14
43
|
@app.callback()
|
|
15
|
-
def main(
|
|
44
|
+
def main(
|
|
45
|
+
ctx: typer.Context,
|
|
46
|
+
version: Optional[bool] = typer.Option(
|
|
47
|
+
None, "--version", "-v", help="Show version and exit", callback=version_callback, is_eager=True
|
|
48
|
+
),
|
|
49
|
+
root: Optional[str] = typer.Option(
|
|
50
|
+
None, "--root", help="Explicitly specify the Monoco Workspace root directory."
|
|
51
|
+
)
|
|
52
|
+
):
|
|
16
53
|
"""
|
|
17
54
|
Monoco Toolkit - The sensory and motor system for Monoco Agents.
|
|
18
55
|
"""
|
|
@@ -21,9 +58,49 @@ def main(ctx: typer.Context):
|
|
|
21
58
|
if ctx.invoked_subcommand:
|
|
22
59
|
capture_event("cli_command_executed", {"command": ctx.invoked_subcommand})
|
|
23
60
|
|
|
61
|
+
# Strict Workspace Resolution
|
|
62
|
+
# Commands allowed to run without a workspace
|
|
63
|
+
NO_WORKSPACE_COMMANDS = ["init", "clone"]
|
|
64
|
+
|
|
65
|
+
# Initialize Config
|
|
66
|
+
from monoco.core.config import get_config, find_monoco_root
|
|
67
|
+
from pathlib import Path
|
|
68
|
+
|
|
69
|
+
# If subcommand is not in whitelist, we enforce workspace
|
|
70
|
+
require_workspace = False
|
|
71
|
+
if ctx.invoked_subcommand and ctx.invoked_subcommand not in NO_WORKSPACE_COMMANDS:
|
|
72
|
+
require_workspace = True
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
# We pass root if provided. If require_workspace is True, get_config will throw if not found.
|
|
76
|
+
# Note: If root is None, it defaults to CWD in get_config.
|
|
77
|
+
|
|
78
|
+
# Auto-discover root if not provided
|
|
79
|
+
config_root = root
|
|
80
|
+
if config_root is None:
|
|
81
|
+
discovered = find_monoco_root()
|
|
82
|
+
# Only use discovered root if it actually has .monoco
|
|
83
|
+
if (discovered / ".monoco").exists():
|
|
84
|
+
config_root = str(discovered)
|
|
85
|
+
|
|
86
|
+
get_config(project_root=config_root, require_project=require_workspace)
|
|
87
|
+
except FileNotFoundError as e:
|
|
88
|
+
# Graceful exit for workspace errors
|
|
89
|
+
from rich.console import Console
|
|
90
|
+
console = Console()
|
|
91
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
92
|
+
console.print(f"[yellow]Tip:[/yellow] Run this command in a Monoco Workspace root (containing .monoco), or use [bold]--root <path>[/bold].")
|
|
93
|
+
raise typer.Exit(code=1)
|
|
94
|
+
|
|
24
95
|
from monoco.core.setup import init_cli
|
|
25
96
|
app.command(name="init")(init_cli)
|
|
26
97
|
|
|
98
|
+
from monoco.core.sync import sync_command, uninstall_command
|
|
99
|
+
app.command(name="sync")(sync_command)
|
|
100
|
+
app.command(name="uninstall")(uninstall_command)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
27
104
|
@app.command()
|
|
28
105
|
def info():
|
|
29
106
|
"""
|
|
@@ -42,8 +119,14 @@ def info():
|
|
|
42
119
|
|
|
43
120
|
mode = "Agent (JSON)" if os.getenv("AGENT_FLAG") == "true" else "Human (Rich)"
|
|
44
121
|
|
|
122
|
+
import importlib.metadata
|
|
123
|
+
try:
|
|
124
|
+
version = importlib.metadata.version("monoco-toolkit")
|
|
125
|
+
except importlib.metadata.PackageNotFoundError:
|
|
126
|
+
version = "unknown"
|
|
127
|
+
|
|
45
128
|
status = Status(
|
|
46
|
-
version=
|
|
129
|
+
version=version,
|
|
47
130
|
mode=mode,
|
|
48
131
|
root=os.getcwd(),
|
|
49
132
|
project=f"{settings.project.name} ({settings.project.key})"
|
|
@@ -60,11 +143,17 @@ from monoco.features.issue import commands as issue_cmd
|
|
|
60
143
|
from monoco.features.spike import commands as spike_cmd
|
|
61
144
|
from monoco.features.i18n import commands as i18n_cmd
|
|
62
145
|
from monoco.features.config import commands as config_cmd
|
|
146
|
+
from monoco.cli import project as project_cmd
|
|
147
|
+
from monoco.cli import workspace as workspace_cmd
|
|
63
148
|
|
|
64
149
|
app.add_typer(issue_cmd.app, name="issue", help="Manage development issues")
|
|
65
150
|
app.add_typer(spike_cmd.app, name="spike", help="Manage research spikes")
|
|
66
151
|
app.add_typer(i18n_cmd.app, name="i18n", help="Manage documentation i18n")
|
|
67
152
|
app.add_typer(config_cmd.app, name="config", help="Manage configuration")
|
|
153
|
+
app.add_typer(project_cmd.app, name="project", help="Manage projects")
|
|
154
|
+
app.add_typer(workspace_cmd.app, name="workspace", help="Manage workspace")
|
|
155
|
+
|
|
156
|
+
|
|
68
157
|
|
|
69
158
|
from monoco.daemon.commands import serve
|
|
70
159
|
app.command(name="serve")(serve)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: monoco-toolkit
|
|
3
|
+
Version: 0.2.8
|
|
4
|
+
Summary: Agent Native Toolkit for Monoco - Task Management & Kanban for AI Agents
|
|
5
|
+
Project-URL: Homepage, https://monoco.io
|
|
6
|
+
Project-URL: Repository, https://github.com/IndenScale/Monoco
|
|
7
|
+
Project-URL: Documentation, https://monoco.io/docs
|
|
8
|
+
Project-URL: Issues, https://github.com/IndenScale/Monoco/issues
|
|
9
|
+
Author-email: Monoco Team <dev@monoco.io>
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: agent-native,ai-agents,cli,kanban,monoco,task-management,workflow
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Office/Business :: Groupware
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Requires-Dist: fastapi>=0.100.0
|
|
25
|
+
Requires-Dist: httpx>=0.28.1
|
|
26
|
+
Requires-Dist: prompt-toolkit>=3.0.0
|
|
27
|
+
Requires-Dist: pydantic>=2.0.0
|
|
28
|
+
Requires-Dist: pyyaml>=6.0
|
|
29
|
+
Requires-Dist: rich>=13.0.0
|
|
30
|
+
Requires-Dist: sse-starlette>=1.6.0
|
|
31
|
+
Requires-Dist: typer[all]>=0.9.0
|
|
32
|
+
Requires-Dist: uvicorn[standard]>=0.20.0
|
|
33
|
+
Requires-Dist: watchdog>=6.0.0
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# Monoco Toolkit
|
|
37
|
+
|
|
38
|
+
[](https://pypi.org/project/monoco-toolkit/)
|
|
39
|
+
[](LICENSE)
|
|
40
|
+
|
|
41
|
+
> **The Operating System for Agentic Engineering.**
|
|
42
|
+
>
|
|
43
|
+
> Ground your AI Agents into deterministic workflows. Turn vague "chats" into structured, validatable, and shippable engineering units.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## ⚡️ Why Monoco?
|
|
48
|
+
|
|
49
|
+
In the era of LLMs, the bottleneck isn't **intelligence**—it's **control**.
|
|
50
|
+
|
|
51
|
+
Generating code is easy. Managing the lifecycle of thousands of agent-generated tasks, validating their outputs, and maintaining a coherent project state is hard. **Monoco** is the missing control plane that bridges the gap between raw AI velocity and strict engineering rigor.
|
|
52
|
+
|
|
53
|
+
Monoco handles the **"BizOps Logic"** of your development process, allowing you to orchestrate human and AI labor within a unified, version-controlled environment.
|
|
54
|
+
|
|
55
|
+
## 🌟 Core Features
|
|
56
|
+
|
|
57
|
+
### 1. Issue as Code (IaaC)
|
|
58
|
+
|
|
59
|
+
Treat your project management like your code.
|
|
60
|
+
|
|
61
|
+
- **Markdown Native**: All tasks (Epics, Features, Chores) are stored as structured Markdown files in your repository.
|
|
62
|
+
- **Git Backed**: Version control your roadmap. Review changes to requirements via Pull Requests.
|
|
63
|
+
- **Universal Context**: Provides a standardized, hallucination-free state representation for AI Agents.
|
|
64
|
+
|
|
65
|
+
### 2. The Agent Cockpit (VS Code Extension)
|
|
66
|
+
|
|
67
|
+
Stop context switching. Manage your entire agentic workflow directly inside your editor.
|
|
68
|
+
|
|
69
|
+
- **Native Kanban Board**: Visualize and drag-and-drop tasks without leaving VS Code.
|
|
70
|
+
- **Hierarchical Tree View**: Drill down from high-level Epics to atomic Implementation Tasks.
|
|
71
|
+
- **Agent Integration**: Bind specific Agent Providers (Gemini, Claude, etc.) to specific tasks.
|
|
72
|
+
|
|
73
|
+
### 3. Traceable Execution
|
|
74
|
+
|
|
75
|
+
- **Deterministic State Machine**: Every task follows a strict lifecycle (Proposed -> Approved -> Doing -> Review -> Done).
|
|
76
|
+
- **Audit Trails**: Agents log their actions and decisions directly into the task file.
|
|
77
|
+
- **Sanity Checks**: Built-in linters ensure your task definitions are complete and valid before execution.
|
|
78
|
+
|
|
79
|
+
## 🚀 Quick Start
|
|
80
|
+
|
|
81
|
+
### Installation
|
|
82
|
+
|
|
83
|
+
Monoco is available as a Python CLI tool.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
pip install monoco-toolkit
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Initialization
|
|
90
|
+
|
|
91
|
+
Turn any directory into a Monoco workspace.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
monoco init
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Workflow
|
|
98
|
+
|
|
99
|
+
1. **Plan**: Create a new feature request.
|
|
100
|
+
```bash
|
|
101
|
+
monoco issue create feature -t "Implement Dark Mode"
|
|
102
|
+
```
|
|
103
|
+
2. **Start**: Create a feature branch automatically.
|
|
104
|
+
```bash
|
|
105
|
+
monoco issue start FEAT-001 --branch
|
|
106
|
+
```
|
|
107
|
+
3. **Code & Sync**: Track modified files automatically.
|
|
108
|
+
```bash
|
|
109
|
+
monoco issue sync-files
|
|
110
|
+
```
|
|
111
|
+
4. **Visualize**: Open the board in VS Code or via CLI.
|
|
112
|
+
```bash
|
|
113
|
+
# Starts the local server
|
|
114
|
+
monoco serve
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 📦 Extension for VS Code
|
|
118
|
+
|
|
119
|
+
The **Monoco VS Code Extension** is the primary visual interface for the toolkit.
|
|
120
|
+
|
|
121
|
+
- **Install from Marketplace**: Search for `Monoco`.
|
|
122
|
+
- **Keybinding**: `Cmd+Shift+P` -> `Monoco: Open Kanban Board`.
|
|
123
|
+
|
|
124
|
+
## 🛠️ Tech Stack & Architecture
|
|
125
|
+
|
|
126
|
+
- **Core**: Python (CLI & Logic Layer)
|
|
127
|
+
- **Extension**: TypeScript (VS Code Client & LSP)
|
|
128
|
+
- **Data**: Local Filesystem (Markdown/YAML)
|
|
129
|
+
|
|
130
|
+
## 🤝 Contributing
|
|
131
|
+
|
|
132
|
+
Monoco is designed for the community. We welcome contributions to both the core CLI and the VS Code extension.
|
|
133
|
+
|
|
134
|
+
## 📄 License
|
|
135
|
+
|
|
136
|
+
MIT © [IndenScale](https://github.com/IndenScale)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
monoco/main.py,sha256=wWOtB54RB4_opq_DuRQyEStAYbJHgGCZfQglUup6q28,5370
|
|
2
|
+
monoco/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
monoco/cli/project.py,sha256=w4oUWzOV42qh34g4klyzZfTUg6ux0oEdSinMCzmhH3E,2786
|
|
4
|
+
monoco/cli/workspace.py,sha256=vhRsbjgO6ek6PWYdmhk9EeYW_xWRV196yl7-xPfcRAI,1305
|
|
5
|
+
monoco/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
monoco/core/config.py,sha256=UpP6OE3wex8ZesnMZVZKPRy1peHrjq8nXv_BVtZzNIk,12105
|
|
7
|
+
monoco/core/execution.py,sha256=rySL0ueJvTEQ1JhdpumsNBQHJpj08nfaHQMlX-1uh6k,1846
|
|
8
|
+
monoco/core/feature.py,sha256=oAtQWUHMuqIFbq2gj8sPfYBlJZvMMXZqyUlCMrIVGUE,2007
|
|
9
|
+
monoco/core/git.py,sha256=i_NKT9_n57S9EKeb8kF2yTEdw70FZ88-lpMqW4lzVds,8228
|
|
10
|
+
monoco/core/injection.py,sha256=4BuQ5RVozyU99uSOzPwgc6MFMZUcECerTik5lF39I9A,7078
|
|
11
|
+
monoco/core/integrations.py,sha256=MGw6dCipX2S5GtnboFwVxpkuWMGa_I6T9s0owsIjU4o,7885
|
|
12
|
+
monoco/core/lsp.py,sha256=23OxtVomvvE0GgAbdw_8-DclIac1SzjJGt8urbPKXEA,2006
|
|
13
|
+
monoco/core/output.py,sha256=S5jbOBRuLleBPfypS5nUUoNIUAdub4zJO63RePLb0LU,3787
|
|
14
|
+
monoco/core/registry.py,sha256=xix21TDeJgRiZ2kvHitnac4RsqMdp1aERpYGSrwfIpY,1180
|
|
15
|
+
monoco/core/setup.py,sha256=5fAsj4HZAC1sG-pEn5hKTZ6JsCAqNa8-eWOs739wpqs,9657
|
|
16
|
+
monoco/core/skills.py,sha256=5qK-0YlOnNQLqyo6-T4GVBrkjsbrszb5ugXeXRRcQ00,16597
|
|
17
|
+
monoco/core/state.py,sha256=KlmOn0KXO8g9S_KUIrUylAKdBpyH_1AOBvrYSj_khdE,1884
|
|
18
|
+
monoco/core/sync.py,sha256=s0qQ5PsVn_IWGWUNThdvNFS-CncztDzsTM3QLupC6Og,8514
|
|
19
|
+
monoco/core/telemetry.py,sha256=DZQGOhvpe0XL34RCDaTZEUhmkD4abBTZumZJQlALzpY,2923
|
|
20
|
+
monoco/core/workspace.py,sha256=0RWx8H_Kx56TYVrAURTSJW4aWOUylXofkvXBhRNjP_E,3074
|
|
21
|
+
monoco/core/agent/__init__.py,sha256=tBCm6PDqPFo81yO949nW897INjl7ot46CPup9IrXExE,108
|
|
22
|
+
monoco/core/agent/action.py,sha256=HpOLzp-mttJY0SDVbRlstDVqjFKozIAdjQdJ4Gp3xiY,5161
|
|
23
|
+
monoco/core/agent/adapters.py,sha256=s8dzeXZY-m1pb8re5U5O1ED4d6MT9WNFWIeSpHBcmRg,4391
|
|
24
|
+
monoco/core/agent/protocol.py,sha256=E7y_i2JzYGpzSCRCUIuzu1ATav-Xu1K01ka6Zncm4-o,831
|
|
25
|
+
monoco/core/agent/state.py,sha256=sRav6uwkXao8yPl08CEB-cqK1EfiDyMnVxoSYxvYcis,3523
|
|
26
|
+
monoco/core/resources/en/AGENTS.md,sha256=3TpCLNC1s_lIbDfJJBRmmROMoy9sZXu8BOag8M9NXI0,327
|
|
27
|
+
monoco/core/resources/en/SKILL.md,sha256=1PrBqCgjDxT1LMSeu11BzlMhfboo_UlgZxdzBm7Tp9c,2161
|
|
28
|
+
monoco/core/resources/zh/AGENTS.md,sha256=pGQOLt8mcRygJotd5oC8l9604hikQoUiS99QsHCe-UM,298
|
|
29
|
+
monoco/core/resources/zh/SKILL.md,sha256=8py8tD7s23cw2srKFnTjLO_miyuGXb3NLyEbk5gchqA,1886
|
|
30
|
+
monoco/daemon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
monoco/daemon/app.py,sha256=I_BWs4WcJoTobssFKRBlAcD2CRnJtr6EPlFoGB5Hy-Y,15586
|
|
32
|
+
monoco/daemon/commands.py,sha256=dN4D8ca0vPjj0WyjCSs8senneta1afm_bnNYv_kmGlU,1125
|
|
33
|
+
monoco/daemon/models.py,sha256=5T2SggaTdKWKRihjGhFOQM57s7WwF4Nx7c6C4YUeMSw,967
|
|
34
|
+
monoco/daemon/reproduce_stats.py,sha256=Q_zAj0Yj8l-77QDdtsLz1kWr68HeO7f1T6xC6VP43Vo,1261
|
|
35
|
+
monoco/daemon/services.py,sha256=dMhy2ddzGtBBWTGtI14R-2aikENAgPsphxDkno1JAPU,5377
|
|
36
|
+
monoco/daemon/stats.py,sha256=r-L0k6CdxkAkwLZV3V-jW7PldB9S3uNklQGLCEKA3Sc,4563
|
|
37
|
+
monoco/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
monoco/features/config/commands.py,sha256=PQaSq81zH4h8d1bFa4B2ANSXSdyjBFqVm_nBvEq1rNE,4889
|
|
39
|
+
monoco/features/i18n/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
monoco/features/i18n/adapter.py,sha256=M9iSEKykEiUe1YobHKmvfEjv7x7KgGuh-6yhgUJuN_s,973
|
|
41
|
+
monoco/features/i18n/commands.py,sha256=GxU3YSYVKKQKsVy35VZECRXgnZz0xl-xfgO-99qwbkw,8210
|
|
42
|
+
monoco/features/i18n/core.py,sha256=s0r-48yMxrIrpWNX7r8JhtGX4X-Kd1P1bDAgNyluQ24,9227
|
|
43
|
+
monoco/features/i18n/resources/en/AGENTS.md,sha256=zzuF7BW6x8Mj6LZZmeM6wTbG5CSCDMShf4rwtN7XITg,197
|
|
44
|
+
monoco/features/i18n/resources/en/SKILL.md,sha256=Z8fAAqeMvpLDw1D_9AzZIykS5-HLVM9nnlRZLWBTPqM,2203
|
|
45
|
+
monoco/features/i18n/resources/zh/AGENTS.md,sha256=lKkwLLCADRH7UDq9no4eQY2sRfJrb64JoZ_HNved8vA,175
|
|
46
|
+
monoco/features/i18n/resources/zh/SKILL.md,sha256=Wynk7zVBW7CO0_6AEQNUvlD_3eMW_7EPnzEn9QUaiDs,1884
|
|
47
|
+
monoco/features/issue/adapter.py,sha256=Y-ghwRoSEgm_A-cqY8Un-5srxydXdb9ytlKHLm89eJQ,1265
|
|
48
|
+
monoco/features/issue/commands.py,sha256=6nm0CPbHYXWQFKRJ1rV8opXYq4zGinKpVvudSYtMOAs,36041
|
|
49
|
+
monoco/features/issue/core.py,sha256=Xw_BIBGL071aJVhU4uI0OlwKhRbgFXy39GncG9Q3NGk,50838
|
|
50
|
+
monoco/features/issue/linter.py,sha256=TD2YifpJ1U0Co2t5O8KHu65J7M6H6im2jMnJbsB3kEY,17208
|
|
51
|
+
monoco/features/issue/migration.py,sha256=9gtgFi1V1pzwXo0-H4cIoBvSBERIWopXLCB4oSxTQLc,4715
|
|
52
|
+
monoco/features/issue/models.py,sha256=3OsJPXNGw5i_fNmrYS4mlaZrHvxR77qd7ZuVUxjxVu4,5804
|
|
53
|
+
monoco/features/issue/monitor.py,sha256=QEN0mqZ3tKwBfMjN87-LdrVoIEe0prA-uMHOBGy1VZk,3476
|
|
54
|
+
monoco/features/issue/validator.py,sha256=a2HCvZmg8azeMMekuJl2MEFY3S0lYXM8pzSrwuOAOuE,20576
|
|
55
|
+
monoco/features/issue/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
|
+
monoco/features/issue/domain/lifecycle.py,sha256=-WreIDCeEQPjD82Q4wJMs_S5-9SQHCvGlPgtMllvXGw,4943
|
|
57
|
+
monoco/features/issue/domain/models.py,sha256=pjeb_Lp0zykNzAfrRma26IMkdlxYDQ0IdvNmM_7tepU,5720
|
|
58
|
+
monoco/features/issue/domain/parser.py,sha256=HfJh9uBN7Q7KyeXz1tk3tBjszu8ffStfZf9IS27v0K8,8770
|
|
59
|
+
monoco/features/issue/domain/workspace.py,sha256=AOv7H_he39UnYplCaEex6mdFgpAlGk6T8cDMxKwQLz0,3833
|
|
60
|
+
monoco/features/issue/engine/__init__.py,sha256=bWONZnIb0IkAhw09_pMbyqrDh-oUOLTrNvlQfypHXYw,785
|
|
61
|
+
monoco/features/issue/engine/config.py,sha256=BhTw9S8Oe10P1VfdLN64Nk0Woj613dHwfHiX87_AgJo,5762
|
|
62
|
+
monoco/features/issue/engine/machine.py,sha256=8wr5txLlzv0QO2sAlPl7JSPN-VkxJUpRNK25F7L7DVI,7530
|
|
63
|
+
monoco/features/issue/engine/models.py,sha256=u8Z7ilB702Jj6Imv4_vXpP8QTSWEnQdPxv8JA_9g1GU,579
|
|
64
|
+
monoco/features/issue/lsp/__init__.py,sha256=8bl8-WzSj3C4SkPKgVGnCeyemmvHVWBsuMZsJuJggG8,77
|
|
65
|
+
monoco/features/issue/lsp/definition.py,sha256=Y4dX7MmrEfYbWuh85W0djwUj_qed7cDpGadtiXEZDh4,3107
|
|
66
|
+
monoco/features/issue/resources/en/AGENTS.md,sha256=7lMJdLhokispHVTrViIyMaz5TOJ88GkPKfWZp4FlgRQ,1015
|
|
67
|
+
monoco/features/issue/resources/en/SKILL.md,sha256=ODE-bB5fwLXQ4U-q24HfnssTQvzowMpkVaVIX7gmYvQ,3756
|
|
68
|
+
monoco/features/issue/resources/zh/AGENTS.md,sha256=veb22lU0qindYcsNsuGLqzpBEjExCPDOkX5Q39OjZz0,1113
|
|
69
|
+
monoco/features/issue/resources/zh/SKILL.md,sha256=XFE33cCCos0U1IVNkMhU7fGuqVqfxo_FNKdp1aScaoM,5055
|
|
70
|
+
monoco/features/skills/__init__.py,sha256=L8YNGPWyyFWq5WqNossfeB0AKHJF_omrn1VzJBrRFcM,23
|
|
71
|
+
monoco/features/skills/core.py,sha256=mpd0Cq-k2MvHRTPq9saFvZgYXUBGJ9pnK5lUmzUfZbY,3418
|
|
72
|
+
monoco/features/spike/adapter.py,sha256=npJ4J775Df0DDi-LH-3u2jCuKjTIXyZUbLD0KNvHlcc,1062
|
|
73
|
+
monoco/features/spike/commands.py,sha256=ctC2Kbe0fgpeDfw5106P0rsKEBDue0rFI4eMNRpXMDw,3880
|
|
74
|
+
monoco/features/spike/core.py,sha256=oP1yAalOnoA5fHpf2o4gteKx73XGwZ6G0WrO86z2iWE,4174
|
|
75
|
+
monoco/features/spike/resources/en/AGENTS.md,sha256=NG3CMnlDk_0J8hnRUcueAM9lgIQr_dZ42R_31-LC48E,306
|
|
76
|
+
monoco/features/spike/resources/en/SKILL.md,sha256=qKDcVh0D3pDRvfNLh1Bzo4oQU3obpl4tqdlzxeiWYMk,1911
|
|
77
|
+
monoco/features/spike/resources/zh/AGENTS.md,sha256=5RHNl7fc3RdYYTFH483ojJl_arGPKkyYziOuGgFbqqg,290
|
|
78
|
+
monoco/features/spike/resources/zh/SKILL.md,sha256=Q82e9lCQOAYIwBs5rGnvlVUDq7bp0pz8yvO10KTWFYQ,1710
|
|
79
|
+
monoco_toolkit-0.2.8.dist-info/METADATA,sha256=FGlYFtlrI0jOh2NIBG1DsqOgi6_s96U-vdfPOyudeT0,4866
|
|
80
|
+
monoco_toolkit-0.2.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
81
|
+
monoco_toolkit-0.2.8.dist-info/entry_points.txt,sha256=iYj7FWYBdtClU15-Du1skqD0s6SFSIhJvxJ29VWp8ng,43
|
|
82
|
+
monoco_toolkit-0.2.8.dist-info/licenses/LICENSE,sha256=ACAGGjV6aod4eIlVUTx1q9PZbnZGN5bBwkSs9RHj83s,1071
|
|
83
|
+
monoco_toolkit-0.2.8.dist-info/RECORD,,
|