@ifrankwang/openspec-agents 0.135.0 → 0.136.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/.mcp-server/cli.mjs +8 -7
- package/assets/skills/openspec-standard/templates/openspec/config.yaml +1 -1
- package/assets/skills/openspec-standard/templates/schemas/spec-driven-standard/README.md +3 -2
- package/assets/skills/openspec-standard/templates/schemas/spec-driven-standard/schema.yaml +4 -1
- package/assets/skills/openspec-standard/templates/schemas/spec-driven-standard/templates/clarify.md +4 -3
- package/package.json +1 -1
package/.mcp-server/cli.mjs
CHANGED
|
@@ -4056,13 +4056,14 @@ var require_fast_uri = __commonJS(function(exports, module) {
|
|
|
4056
4056
|
if (!malformedIPLiteral) {
|
|
4057
4057
|
malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
|
|
4058
4058
|
}
|
|
4059
|
-
if (
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
parsed.host = reescapeHostDelimiters(host, isIP);
|
|
4064
|
-
}
|
|
4059
|
+
if (uri.indexOf("%") !== -1 && parsed.host !== undefined && !malformedIPLiteral) {
|
|
4060
|
+
let host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true);
|
|
4061
|
+
if (!isIP) {
|
|
4062
|
+
host = normalizePercentEncoding(host.toLowerCase());
|
|
4065
4063
|
}
|
|
4064
|
+
parsed.host = reescapeHostDelimiters(host, isIP);
|
|
4065
|
+
}
|
|
4066
|
+
if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
|
|
4066
4067
|
if (parsed.path) {
|
|
4067
4068
|
parsed.path = normalizePathEncoding(parsed.path);
|
|
4068
4069
|
}
|
|
@@ -30206,7 +30207,7 @@ async function ensureDefaultUnattended(args, ctx) {
|
|
|
30206
30207
|
}
|
|
30207
30208
|
} catch {}
|
|
30208
30209
|
}
|
|
30209
|
-
var PKG_VERSION = "0.
|
|
30210
|
+
var PKG_VERSION = "0.136.0";
|
|
30210
30211
|
function buildMcpServer(worktree, opts = {}) {
|
|
30211
30212
|
const mcp = new McpServer({ name: "openspec-agents", version: PKG_VERSION });
|
|
30212
30213
|
for (const [name, spec] of Object.entries(TOOL_SPECS)) {
|
|
@@ -15,7 +15,7 @@ rules:
|
|
|
15
15
|
- "关联场景清点(强制):proposal 动笔前必须完成「关联场景清点」并以代码检索为证据记入 clarify.md 的「关联场景清点(Related-Surface Survey)」小节:枚举本变更触及能力的全部消费方与关联面——功能入口(API 端点、导入/导出入口、定时任务、消息消费、前端调用等)、共享处理逻辑(被多个入口复用的处理链路)、数据模型与数据流下游(表/字段/事件/导出产物的读写双方),每条附代码位置证据(文件/类/方法)。凡共享处理逻辑发生变更,其全部消费入口必须在同一 change 内统一适配,禁止按入口分别提 change 导致共享逻辑两边割裂维护;确需拆分时必须在 proposal.md 单列「拆分边界」小节论证(每个 change 覆盖哪些入口、共享逻辑变更归属哪个 change、入口间契约),并经用户确认。proposal.md 必须单列「关联场景(Related Surface)」小节逐条列出清点结论与划界结论;泛写「无关联影响」而不附检索证据视为 proposal 未完成。"
|
|
16
16
|
- "契约变更详列(强制):凡变更涉及 DDL(建表/加列/索引/约束)或接口契约(新增/修改端点、请求响应结构、错误码),proposal.md 必须单列「契约变更点」小节逐条列出——DDL 逐表逐列给全表名、列名、类型、可空性、默认值与用途;API 逐端点给全方法+路径、请求/响应结构变化、新增/修改标记与兼容性影响。泛写「有契约变更」不逐条展开视为 proposal 未完成。"
|
|
17
17
|
- "动笔前访谈门(强制):proposal/specs/design/tasks 任一文档动笔前,必须已按 spec-driven-standard schema clarify 指令的决策树访谈方法论完成对用户的访谈——把方案建模为决策树逐轮穷尽疑点:每轮将前提已落定、当前可回答的问题一次性编号抛出并逐题附推荐答案,用户答复后重算下一轮前沿,直到决策树所有分支走完、无未决疑点、无静默假设;访谈问答全程记入 clarify.md(Open Questions / User Answers / 关联场景清点)。事实类问题必须自行查代码与 spec 求证,不抛给用户;疑点未穷尽时禁止写任何文档,不得以「需求简单」等理由跳过。"
|
|
18
|
-
- "动笔前用户确认门(强制):proposal/specs/design/tasks 任一文档动笔前,clarify.md 的 Architecture Direction
|
|
18
|
+
- "动笔前用户确认门(强制):proposal/specs/design/tasks 任一文档动笔前,clarify.md 的 Architecture Direction 必须已记录用户对方案摘要的明确确认;确认必须以普通消息直接列出方案摘要要素点(要素清单见 spec-driven-standard schema clarify 指令的 Plan confirmation gate)并停下等待用户直接文字回复,禁止通过提问工具发起确认,提问工具的选项点击不视为确认;未记录时禁止写任何文档——主代理亲自写时先停下向用户补确认,生成子代理则立即终止并向编排方报告,不得以「需求简单」等理由跳过或代用户确认。"
|
|
19
19
|
specs:
|
|
20
20
|
- "数据行为需求(如\"系统 SHALL 持久化 X 含审计字段\")放 spec;物理 DDL 放 design.md。"
|
|
21
21
|
- "MODIFIED 的需求描述直接给出变更后的终态契约表述(\"系统 SHALL 使用 Y\"),供归档合并时原样落入主 spec;禁止以\"原 X 改为 Y\"的历史对比充当主 spec 内容。"
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
(枚举变更触及能力的全部消费方——功能入口 / 共享处理逻辑 / 数据流下游,
|
|
7
7
|
附代码证据;共享处理逻辑变更须与其全部消费入口同一 change 统一适配);
|
|
8
8
|
访谈结束后、写任何文档之前,主代理必须先向用户简单直接汇报方案(一句话
|
|
9
|
-
讲清做什么 + 是否动契约 + 取舍 + 影响面)并取得用户明确确认(HARD-GATE
|
|
10
|
-
|
|
9
|
+
讲清做什么 + 是否动契约 + 取舍 + 影响面)并取得用户明确确认(HARD-GATE:
|
|
10
|
+
汇报须以普通消息直接列出要素点,禁止用提问工具发起确认,访谈中的问答
|
|
11
|
+
不视为确认),确认记录落在 clarify.md,后续文档不得偏离。
|
|
11
12
|
2. **主代理访谈直录 + 分级撰写 + 独立复核循环**:主代理亲自访谈,问答
|
|
12
13
|
直接记入 clarify.md(访谈阶段唯一落笔的文档,不设独立访谈文件);
|
|
13
14
|
架构方向经用户确认后,按复杂度分级产出其余文档(proposal → specs →
|
|
@@ -140,7 +140,10 @@ artifacts:
|
|
|
140
140
|
the user and stop for confirmation. The summary must state: what the
|
|
141
141
|
change does in one sentence; whether it touches contracts (API
|
|
142
142
|
parameters or DDL); the chosen approach and its key trade-offs
|
|
143
|
-
versus the alternatives; the capabilities affected.
|
|
143
|
+
versus the alternatives; the capabilities affected. Present it as a
|
|
144
|
+
plain message — do NOT use the question tool for this confirmation
|
|
145
|
+
(the question tool belongs to the interview rounds, not to this
|
|
146
|
+
confirmation) — and stop for the user's free-text reply. Interview
|
|
144
147
|
answers do NOT count as confirmation — the confirmation must be a
|
|
145
148
|
direct user response to this summary. If the user requests changes,
|
|
146
149
|
revise the summary and re-present; loop until the user explicitly
|
package/assets/skills/openspec-standard/templates/schemas/spec-driven-standard/templates/clarify.md
CHANGED
|
@@ -32,9 +32,10 @@
|
|
|
32
32
|
|
|
33
33
|
<!-- The crystallized approach: chosen direction, key decisions, 2-3 alternatives
|
|
34
34
|
considered with tradeoffs, and the plan summary the user explicitly confirmed
|
|
35
|
-
(interview answers alone do not count as confirmation
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
(interview answers alone do not count as confirmation; the summary must be a
|
|
36
|
+
plain message listing the key points — never a question-tool prompt). This is
|
|
37
|
+
the HARD-GATE output — proposal, specs, design, and tasks must stay consistent
|
|
38
|
+
with what is recorded here. -->
|
|
38
39
|
|
|
39
40
|
## Authoring Tier
|
|
40
41
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifrankwang/openspec-agents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.136.0",
|
|
4
4
|
"description": "OpenSpec change orchestration plugin for AI coding agents (Claude Code, Codex, ZCode, DeepSeek Harness, OpenCode)",
|
|
5
5
|
"author": "ifrankwang",
|
|
6
6
|
"license": "MIT",
|