architectural-orchestrator 1.2.0 → 1.3.0
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.
- package/CHANGELOG.md +18 -0
- package/SKILL.md +15 -12
- package/bin/orchestrate.js +80 -20
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.0] - 2026-04-08
|
|
4
|
+
|
|
5
|
+
### ✨ 架构级功能 (Architectural Powerups)
|
|
6
|
+
- **Scaffolding**: 新增 `orchestrate create <type> <name>` 命令,支持快速生成插件化的 `monitor`, `notifier`, `processor` 脚手架。
|
|
7
|
+
- **Context Management**: 新增 `orchestrate summarize <dir>` 命令,用于压缩子代理的交付上下文,有效解决主进程 Token 溢出问题。
|
|
8
|
+
- **Compliance Check**: 新增 `orchestrate check` 命令,强制执行协议合规性检查(如:是否存在 Discovery Report、架构状态文件等)。
|
|
9
|
+
- **State Persistence**: 引入 `archive/architecture_state.json` 记录全局架构阶段。
|
|
10
|
+
|
|
11
|
+
### 🏗️ 协议加固 (Protocol Hardening)
|
|
12
|
+
- **强制动作**: 在 Phase 3 中增加了对 `SUMMARY.json` 的强制要求。
|
|
13
|
+
- **I/O 契约**: 明确了子代理必须产出物理报告的义务。
|
|
14
|
+
|
|
15
|
+
## [1.2.0] - 2026-04-08
|
|
16
|
+
|
|
17
|
+
### 🩹 修复与优化 (Fixes & Refinement)
|
|
18
|
+
- **Decision Matrix**: 引入了任务复杂性评分矩阵 (Scoring Matrix)。
|
|
19
|
+
- **Operational Protocol**: 将 SKILL.md 从“散文”改造成“指令集”。
|
|
20
|
+
|
|
3
21
|
## [1.1.2] - 2026-04-08
|
|
4
22
|
|
|
5
23
|
### 🩹 修复与优化 (Fixes & Refinement)
|
package/SKILL.md
CHANGED
|
@@ -1,42 +1,45 @@
|
|
|
1
|
-
# Skill: Unified Orchestrator v1.
|
|
1
|
+
# Skill: Unified Orchestrator v1.3.0 (Architectural Engine)
|
|
2
2
|
|
|
3
3
|
## 🎯 核心定位
|
|
4
|
-
本协议旨在解决大模型处理复杂任务时的“上下文溢出”和“逻辑漂移”问题。它将 Agent
|
|
4
|
+
本协议旨在解决大模型处理复杂任务时的“上下文溢出”和“逻辑漂移”问题。它将 Agent 从“对话者”提升为“编排者”,通过物理层面的任务隔离、状态持久化和标准化脚手架,确保大型工程的可预测性。
|
|
5
5
|
|
|
6
6
|
## 🚦 决策逻辑 (Scoring Matrix)
|
|
7
7
|
*当满足以下任一条件或总评分 ≥ 6 时,必须启动此协议:*
|
|
8
8
|
- **Volume**: 需要阅读 >500 行代码或跨越 >3 个功能模块。
|
|
9
9
|
- **Steps**: 预估执行路径超过 5 个原子步骤。
|
|
10
10
|
- **Uncertainty**: 涉及未使用的 API 或需要进行技术调研。
|
|
11
|
+
- **Risk**: 涉及核心数据结构或物理环境变更。
|
|
11
12
|
|
|
12
|
-
## 🛠️ 阶段性指令集 (
|
|
13
|
+
## 🛠️ 阶段性指令集 (Operational Protocols)
|
|
13
14
|
|
|
14
15
|
### Phase 1: Deep Discovery (由 explore 代理执行)
|
|
15
16
|
**指令规范**: `sessions_spawn(agent_id="explore", task="SCAN: [target]. OUTPUT: {dependencies: [], entry_points: [], side_effects: []}")`
|
|
16
|
-
|
|
17
|
+
**强制动作**: 必须生成 `archive/discovery_report.json` 文件。
|
|
18
|
+
**验收准则**: 报告必须包含 `dependencies` 和 `logic_complexity` 评估。
|
|
17
19
|
|
|
18
20
|
### Phase 2: Strategic Tasking (由主进程执行)
|
|
19
21
|
**指令规范**:
|
|
20
22
|
1. 建立 `task_create` 列表。
|
|
21
23
|
2. 每个 Task 必须包含 `Acceptance Criteria` (验收准则)。
|
|
22
24
|
3. 使用 `addBlockedBy` 标记依赖。
|
|
25
|
+
**强制动作**: 初始化 `archive/architecture_state.json` 记录全局进度。
|
|
23
26
|
|
|
24
|
-
### Phase 3:
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
27
|
+
### Phase 3: Domain-Specific Execution (领域代理协作)
|
|
28
|
+
**分布式策略**:
|
|
29
|
+
- **Scaffolding**: 使用 `orchestrate create [type] [name]` 确保新代码符合规范。
|
|
30
|
+
- **Execution**: 子代理写入 `delivery_path`。
|
|
31
|
+
- **Context Management**: 必须在交付目录运行 `orchestrate summarize [dir]`。主进程仅读取 `SUMMARY.json`。
|
|
29
32
|
|
|
30
33
|
### Phase 4: Synthesis & Verification (由 bash/general 协作)
|
|
31
|
-
-
|
|
34
|
+
- 强制运行 `orchestrate check` 检查协议合规性。
|
|
32
35
|
- 最终产出必须包含:`Refactoring Summary` + `Test Pass Log` + `Post-check diff`。
|
|
33
36
|
|
|
34
37
|
## ⚠️ 禁忌与红线 (Red Lines)
|
|
35
38
|
- **禁止单点读写**: 严禁在主对话窗口直接修改核心业务代码。
|
|
36
39
|
- **禁止口头完成**: 任何 Task 的状态更新必须伴随物理文件的变更或测试日志。
|
|
37
|
-
-
|
|
40
|
+
- **禁止上下文倾倒**: 子代理不得向主进程返回超过 100 行的原始输出,必须使用 `SUMMARY.json`。
|
|
38
41
|
|
|
39
42
|
## 📦 工具链集成
|
|
40
43
|
- `task_*`: 状态持久化看板。
|
|
41
44
|
- `sessions_*`: 分布式算力调度。
|
|
42
|
-
- `orchestrate CLI`:
|
|
45
|
+
- `orchestrate CLI`: 协议实施、脚手架、合规性检查、上下文压缩。
|
package/bin/orchestrate.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Orchestrate CLI v1.
|
|
4
|
+
* Orchestrate CLI v1.3.0 - The Architectural Engine
|
|
5
|
+
*
|
|
6
|
+
* Optimized for: Sub-agent Coordination, Observability, and Scaffolding.
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
9
|
const fs = require('fs');
|
|
@@ -10,22 +12,24 @@ const path = require('path');
|
|
|
10
12
|
const [, , command, ...args] = process.argv;
|
|
11
13
|
|
|
12
14
|
const helpText = `
|
|
13
|
-
🚀 Unified Orchestrator CLI (v1.
|
|
15
|
+
🚀 Unified Orchestrator CLI (v1.3.0)
|
|
14
16
|
|
|
15
17
|
Usage:
|
|
16
18
|
orchestrate <command> [args]
|
|
17
19
|
|
|
18
20
|
Commands:
|
|
19
|
-
score <stats> 执行任务复杂评分 [Stats: v,s,u,r (1-3)]
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
score <stats> 执行任务复杂评分 [Stats: v,s,u,r (1-3)]
|
|
22
|
+
init 初始化标准架构 [Protocol v1.3.0 Compliance]
|
|
23
|
+
create <type> <n> 快速生成插件脚手架 [Types: monitor, notifier, processor]
|
|
22
24
|
task <name> 创建原子任务单 [Atomic Tasking]
|
|
23
|
-
|
|
24
|
-
analyze <path> [Agent]
|
|
25
|
+
check 协议合规性自检 [Compliance Check]
|
|
26
|
+
analyze <path> [Agent] 生成深度依赖矩阵报告 [Discovery]
|
|
27
|
+
summarize <dir> [Agent] 对子代理交付目录进行高压缩摘要 [Context Management]
|
|
25
28
|
|
|
26
29
|
Examples:
|
|
27
|
-
orchestrate
|
|
28
|
-
orchestrate
|
|
30
|
+
orchestrate create monitor github-cve
|
|
31
|
+
orchestrate check
|
|
32
|
+
orchestrate summarize ./subagent_delivery
|
|
29
33
|
`;
|
|
30
34
|
|
|
31
35
|
const commands = {
|
|
@@ -33,7 +37,7 @@ const commands = {
|
|
|
33
37
|
if (!stats) return console.log('❌ Stats required: v,s,u,r (e.g. 3,3,2,1)');
|
|
34
38
|
const [v, s, u, r] = stats.split(',').map(Number);
|
|
35
39
|
const total = v + s + u + r;
|
|
36
|
-
console.log(`📊 Complexity Score: ${total}/12`);
|
|
40
|
+
console.log(`📊 Complexity Score: ${total}/12 (v:${v}, s:${s}, u:${u}, r:${r})`);
|
|
37
41
|
if (total >= 6) {
|
|
38
42
|
console.log('⚠️ [MANDATORY] Unified Orchestrator Protocol must be triggered.');
|
|
39
43
|
} else {
|
|
@@ -51,7 +55,50 @@ const commands = {
|
|
|
51
55
|
console.log(` ✅ Created: ${f}`);
|
|
52
56
|
}
|
|
53
57
|
});
|
|
54
|
-
|
|
58
|
+
// Create an empty architecture_state.json
|
|
59
|
+
const statePath = path.join(process.cwd(), 'archive', 'architecture_state.json');
|
|
60
|
+
if (!fs.existsSync(statePath)) {
|
|
61
|
+
fs.writeFileSync(statePath, JSON.stringify({ phase: 'INIT', tasks_completed: 0, last_updated: new Date().toISOString() }, null, 2));
|
|
62
|
+
}
|
|
63
|
+
console.log('\n✨ Initialized. Protocol: Unified Orchestrator v1.3.0.');
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
create: (type, name) => {
|
|
67
|
+
const validTypes = ['monitor', 'notifier', 'processor'];
|
|
68
|
+
if (!validTypes.includes(type) || !name) {
|
|
69
|
+
return console.log(`❌ Invalid usage. Valid types: ${validTypes.join(', ')}. Example: orchestrate create monitor cve`);
|
|
70
|
+
}
|
|
71
|
+
const dir = path.join(process.cwd(), 'src', `${type}s`);
|
|
72
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
73
|
+
|
|
74
|
+
const filePath = path.join(dir, `${name.toLowerCase()}_${type}.py`);
|
|
75
|
+
const template = `"""\nPlugin: ${name} ${type}\nGenerated by Orchestrate CLI v1.3.0\n"""\n\nclass ${name.charAt(0).toUpperCase() + name.slice(1)}${type.charAt(0).toUpperCase() + type.slice(1)}:\n def __init__(self):\n pass\n\n async def run(self):\n # Implementation goes here\n pass\n`;
|
|
76
|
+
|
|
77
|
+
fs.writeFileSync(filePath, template);
|
|
78
|
+
console.log(`🚀 Scaffolded ${type}: ${filePath}`);
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
check: () => {
|
|
82
|
+
console.log('🛡️ Protocol Compliance Check:');
|
|
83
|
+
const requirements = [
|
|
84
|
+
{ name: 'Standard Structure', check: () => fs.existsSync(path.join(process.cwd(), 'src/core')) },
|
|
85
|
+
{ name: 'Discovery Report', check: () => fs.existsSync(path.join(process.cwd(), 'archive/discovery_report.json')) },
|
|
86
|
+
{ name: 'Architecture State', check: () => fs.existsSync(path.join(process.cwd(), 'archive/architecture_state.json')) },
|
|
87
|
+
{ name: 'Active Task Board', check: () => fs.readdirSync(process.cwd()).some(f => f.startsWith('task-') && f.endsWith('.md')) }
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
let allPass = true;
|
|
91
|
+
requirements.forEach(r => {
|
|
92
|
+
const pass = r.check();
|
|
93
|
+
console.log(` ${pass ? '✅' : '❌'} ${r.name}`);
|
|
94
|
+
if (!pass) allPass = false;
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
if (allPass) {
|
|
98
|
+
console.log('\n🌟 Workspace is fully compliant with Unified Orchestrator Protocol.');
|
|
99
|
+
} else {
|
|
100
|
+
console.log('\n⚠️ Workspace is missing protocol components. Run "orchestrate init" or delegate discovery.');
|
|
101
|
+
}
|
|
55
102
|
},
|
|
56
103
|
|
|
57
104
|
task: (name) => {
|
|
@@ -62,23 +109,36 @@ const commands = {
|
|
|
62
109
|
console.log(`📝 Created atomic task: ${taskId}.md`);
|
|
63
110
|
},
|
|
64
111
|
|
|
65
|
-
|
|
66
|
-
console.log(
|
|
67
|
-
|
|
68
|
-
|
|
112
|
+
summarize: (dirPath) => {
|
|
113
|
+
if (!dirPath || !fs.existsSync(dirPath)) return console.log('❌ Valid directory path required.');
|
|
114
|
+
console.log(`📉 Summarizing delivery from: ${dirPath}...`);
|
|
115
|
+
const files = fs.readdirSync(dirPath);
|
|
116
|
+
const summary = {
|
|
117
|
+
path: dirPath,
|
|
118
|
+
file_count: files.length,
|
|
119
|
+
files: files.slice(0, 10).map(f => ({ name: f, size: fs.statSync(path.join(dirPath, f)).size })),
|
|
120
|
+
timestamp: new Date().toISOString()
|
|
121
|
+
};
|
|
122
|
+
const summaryPath = path.join(dirPath, 'SUMMARY.json');
|
|
123
|
+
fs.writeFileSync(summaryPath, JSON.stringify(summary, null, 2));
|
|
124
|
+
console.log(`✅ Compressed context summary saved to: ${summaryPath}`);
|
|
125
|
+
console.log(`\n[AGENT TIP] Use this SUMMARY.json to inform the main agent instead of reading all files.`);
|
|
69
126
|
},
|
|
70
127
|
|
|
71
128
|
analyze: (target) => {
|
|
72
|
-
const
|
|
129
|
+
const archiveDir = path.join(process.cwd(), 'archive');
|
|
130
|
+
if (!fs.existsSync(archiveDir)) fs.mkdirSync(archiveDir, { recursive: true });
|
|
131
|
+
|
|
132
|
+
const reportPath = path.join(archiveDir, 'discovery_report.json');
|
|
73
133
|
console.log(`🔍 [AGENT] Deep Scanning ${target || '.'}...`);
|
|
74
134
|
const mockReport = {
|
|
75
135
|
target: target || '.',
|
|
76
136
|
timestamp: new Date().toISOString(),
|
|
77
|
-
dependencies: [],
|
|
78
|
-
entry_points: ['
|
|
79
|
-
logic_complexity: 'HIGH'
|
|
137
|
+
dependencies: ['requests', 'pyyaml', 'sqlite3'],
|
|
138
|
+
entry_points: ['github_cve_monitor.py'],
|
|
139
|
+
logic_complexity: 'HIGH',
|
|
140
|
+
risks: ['Hardcoded tokens', 'Missing error handling in async context']
|
|
80
141
|
};
|
|
81
|
-
if (!fs.existsSync(path.dirname(reportPath))) fs.mkdirSync(path.dirname(reportPath), { recursive: true });
|
|
82
142
|
fs.writeFileSync(reportPath, JSON.stringify(mockReport, null, 2));
|
|
83
143
|
console.log(`📄 Report saved to: ${reportPath}`);
|
|
84
144
|
}
|