@flyin-ai/alloy 0.1.0 → 0.2.0-beta.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.
Files changed (122) hide show
  1. package/README.md +28 -90
  2. package/commands/alloy/apply.md +274 -119
  3. package/commands/alloy/archive.md +116 -60
  4. package/commands/alloy/discard.md +57 -15
  5. package/commands/alloy/finish.md +92 -70
  6. package/commands/alloy/fix.md +282 -53
  7. package/commands/alloy/plan.md +125 -63
  8. package/commands/alloy/references/interaction-style.md +82 -0
  9. package/commands/alloy/references/main-branch-detection.md +32 -0
  10. package/commands/alloy/references/phase-routing.md +21 -0
  11. package/commands/alloy/references/skill-precheck.md +46 -0
  12. package/commands/alloy/start.md +167 -64
  13. package/commands/alloy/status.md +1 -1
  14. package/dist/cli/commands/doctor.d.ts +1 -0
  15. package/dist/cli/commands/doctor.js +28 -6
  16. package/dist/cli/commands/doctor.js.map +1 -1
  17. package/dist/cli/commands/init.js +40 -37
  18. package/dist/cli/commands/init.js.map +1 -1
  19. package/dist/cli/commands/internal/config.d.ts +1 -0
  20. package/dist/cli/commands/internal/config.js +45 -0
  21. package/dist/cli/commands/internal/config.js.map +1 -0
  22. package/dist/cli/commands/internal/guard.js +2 -41
  23. package/dist/cli/commands/internal/guard.js.map +1 -1
  24. package/dist/cli/commands/internal/record.js +10 -47
  25. package/dist/cli/commands/internal/record.js.map +1 -1
  26. package/dist/cli/commands/internal/skill-usage.d.ts +1 -0
  27. package/dist/cli/commands/internal/skill-usage.js +78 -0
  28. package/dist/cli/commands/internal/skill-usage.js.map +1 -0
  29. package/dist/cli/commands/internal/state.js +105 -6
  30. package/dist/cli/commands/internal/state.js.map +1 -1
  31. package/dist/cli/commands/status.d.ts +1 -0
  32. package/dist/cli/commands/status.js +50 -11
  33. package/dist/cli/commands/status.js.map +1 -1
  34. package/dist/cli/commands/update.js +20 -17
  35. package/dist/cli/commands/update.js.map +1 -1
  36. package/dist/cli/index.js +73 -31
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/cli/utils/hash.d.ts +3 -0
  39. package/dist/cli/utils/hash.js +42 -0
  40. package/dist/cli/utils/hash.js.map +1 -0
  41. package/dist/cli/utils/state.d.ts +4 -2
  42. package/dist/cli/utils/state.js +34 -2
  43. package/dist/cli/utils/state.js.map +1 -1
  44. package/dist/core/artifacts.d.ts +3 -0
  45. package/dist/core/artifacts.js +45 -0
  46. package/dist/core/artifacts.js.map +1 -0
  47. package/dist/core/detect-installations.d.ts +19 -0
  48. package/dist/core/detect-installations.js +65 -0
  49. package/dist/core/detect-installations.js.map +1 -0
  50. package/dist/core/openspec.d.ts +2 -1
  51. package/dist/core/openspec.js +30 -12
  52. package/dist/core/openspec.js.map +1 -1
  53. package/dist/core/skills.js +16 -0
  54. package/dist/core/skills.js.map +1 -1
  55. package/dist/core/superpowers.d.ts +8 -1
  56. package/dist/core/superpowers.js +60 -13
  57. package/dist/core/superpowers.js.map +1 -1
  58. package/dist/core/types.d.ts +20 -0
  59. package/dist/utils/format.d.ts +31 -0
  60. package/dist/utils/format.js +101 -0
  61. package/dist/utils/format.js.map +1 -0
  62. package/dist/utils/output.d.ts +16 -0
  63. package/dist/utils/output.js +38 -0
  64. package/dist/utils/output.js.map +1 -0
  65. package/dist/utils/prompt.d.ts +0 -1
  66. package/dist/utils/prompt.js +11 -83
  67. package/dist/utils/prompt.js.map +1 -1
  68. package/openspec/schemas/alloy/instructions/retrospective.md +17 -35
  69. package/openspec/schemas/alloy/templates/design.md +2 -0
  70. package/openspec/schemas/alloy/templates/draft.md +2 -0
  71. package/openspec/schemas/alloy/templates/plans.md +2 -0
  72. package/openspec/schemas/alloy/templates/proposal.md +2 -0
  73. package/openspec/schemas/alloy/templates/retrospective.md +39 -19
  74. package/openspec/schemas/alloy/templates/specs.md +2 -0
  75. package/openspec/schemas/alloy/templates/tasks.md +2 -0
  76. package/package.json +10 -3
  77. package/vendor/superpowers/skills/brainstorming/SKILL.md +164 -0
  78. package/vendor/superpowers/skills/brainstorming/scripts/frame-template.html +214 -0
  79. package/vendor/superpowers/skills/brainstorming/scripts/helper.js +88 -0
  80. package/vendor/superpowers/skills/brainstorming/scripts/server.cjs +354 -0
  81. package/vendor/superpowers/skills/brainstorming/scripts/start-server.sh +148 -0
  82. package/vendor/superpowers/skills/brainstorming/scripts/stop-server.sh +56 -0
  83. package/vendor/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  84. package/vendor/superpowers/skills/brainstorming/visual-companion.md +287 -0
  85. package/vendor/superpowers/skills/dispatching-parallel-agents/SKILL.md +182 -0
  86. package/vendor/superpowers/skills/executing-plans/SKILL.md +70 -0
  87. package/vendor/superpowers/skills/finishing-a-development-branch/SKILL.md +251 -0
  88. package/vendor/superpowers/skills/receiving-code-review/SKILL.md +213 -0
  89. package/vendor/superpowers/skills/requesting-code-review/SKILL.md +103 -0
  90. package/vendor/superpowers/skills/requesting-code-review/code-reviewer.md +168 -0
  91. package/vendor/superpowers/skills/subagent-driven-development/SKILL.md +279 -0
  92. package/vendor/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +25 -0
  93. package/vendor/superpowers/skills/subagent-driven-development/implementer-prompt.md +113 -0
  94. package/vendor/superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  95. package/vendor/superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -0
  96. package/vendor/superpowers/skills/systematic-debugging/SKILL.md +296 -0
  97. package/vendor/superpowers/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  98. package/vendor/superpowers/skills/systematic-debugging/condition-based-waiting.md +115 -0
  99. package/vendor/superpowers/skills/systematic-debugging/defense-in-depth.md +122 -0
  100. package/vendor/superpowers/skills/systematic-debugging/find-polluter.sh +63 -0
  101. package/vendor/superpowers/skills/systematic-debugging/root-cause-tracing.md +169 -0
  102. package/vendor/superpowers/skills/systematic-debugging/test-academic.md +14 -0
  103. package/vendor/superpowers/skills/systematic-debugging/test-pressure-1.md +58 -0
  104. package/vendor/superpowers/skills/systematic-debugging/test-pressure-2.md +68 -0
  105. package/vendor/superpowers/skills/systematic-debugging/test-pressure-3.md +69 -0
  106. package/vendor/superpowers/skills/test-driven-development/SKILL.md +371 -0
  107. package/vendor/superpowers/skills/test-driven-development/testing-anti-patterns.md +299 -0
  108. package/vendor/superpowers/skills/using-git-worktrees/SKILL.md +215 -0
  109. package/vendor/superpowers/skills/using-superpowers/SKILL.md +117 -0
  110. package/vendor/superpowers/skills/using-superpowers/references/codex-tools.md +59 -0
  111. package/vendor/superpowers/skills/using-superpowers/references/copilot-tools.md +42 -0
  112. package/vendor/superpowers/skills/using-superpowers/references/gemini-tools.md +51 -0
  113. package/vendor/superpowers/skills/verification-before-completion/SKILL.md +139 -0
  114. package/vendor/superpowers/skills/writing-plans/SKILL.md +152 -0
  115. package/vendor/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
  116. package/vendor/superpowers/skills/writing-skills/SKILL.md +655 -0
  117. package/vendor/superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -0
  118. package/vendor/superpowers/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  119. package/vendor/superpowers/skills/writing-skills/graphviz-conventions.dot +172 -0
  120. package/vendor/superpowers/skills/writing-skills/persuasion-principles.md +187 -0
  121. package/vendor/superpowers/skills/writing-skills/render-graphs.js +168 -0
  122. package/vendor/superpowers/skills/writing-skills/testing-skills-with-subagents.md +384 -0
@@ -0,0 +1,101 @@
1
+ import pc from "picocolors";
2
+ import cliTable from "cli-table3";
3
+ import boxen from "boxen";
4
+ import ora from "ora";
5
+ // ── 颜色 ──
6
+ export const color = pc;
7
+ // ── 字符宽度 ──
8
+ export { default as stringWidth } from "string-width";
9
+ // ── Box 面板 ──
10
+ export function box(text, opts) {
11
+ return boxen(text, { padding: 1, ...opts });
12
+ }
13
+ export function boxPanel(content, opts) {
14
+ const boxenOpts = {
15
+ padding: opts?.padding ?? 1,
16
+ margin: opts?.margin ?? 0,
17
+ width: opts?.width,
18
+ title: opts?.title,
19
+ titleAlignment: opts?.titleAlignment ?? "left",
20
+ };
21
+ return boxen(content, boxenOpts);
22
+ }
23
+ // ── 无边框表格 ──
24
+ export function table(headers, rows) {
25
+ const t = new cliTable({
26
+ head: headers,
27
+ style: { head: ["cyan"] },
28
+ chars: {
29
+ top: "",
30
+ "top-mid": "",
31
+ "top-left": "",
32
+ "top-right": "",
33
+ bottom: "",
34
+ "bottom-mid": "",
35
+ "bottom-left": "",
36
+ "bottom-right": "",
37
+ left: " ",
38
+ "left-mid": "",
39
+ mid: "",
40
+ "mid-mid": "",
41
+ right: "",
42
+ "right-mid": "",
43
+ middle: " ",
44
+ },
45
+ });
46
+ for (const r of rows) {
47
+ t.push(r);
48
+ }
49
+ return t.toString();
50
+ }
51
+ // ── 带边框表格 ──
52
+ export function borderedTable(headers, rows) {
53
+ const t = new cliTable({
54
+ head: headers,
55
+ style: { head: ["cyan"] },
56
+ });
57
+ for (const r of rows) {
58
+ t.push(r);
59
+ }
60
+ return t.toString();
61
+ }
62
+ export function tableWithBorder(headers, rows, opts) {
63
+ const t = new cliTable({
64
+ head: headers,
65
+ style: { head: [opts?.headerStyle ?? "cyan"] },
66
+ });
67
+ for (const r of rows) {
68
+ t.push(r);
69
+ }
70
+ return t.toString();
71
+ }
72
+ // ── Spinner ──
73
+ export function spinner(text) {
74
+ return ora({ text, isEnabled: process.stdout.isTTY ?? false }).start();
75
+ }
76
+ export function statusLine(label, value, status, opts) {
77
+ const icons = {
78
+ success: "✓",
79
+ warning: "⚠",
80
+ error: "✗",
81
+ };
82
+ const icon = opts?.icon ?? icons[status];
83
+ const coloredIcon = status === "success" ? pc.green(icon) : status === "warning" ? pc.yellow(icon) : pc.red(icon);
84
+ return ` ${coloredIcon} ${label} ${pc.cyan(value)}`;
85
+ }
86
+ // ── 进度条 ──
87
+ export function progressBar(value, total, width = 20) {
88
+ if (width <= 0)
89
+ return `${Math.round((Math.max(0, Math.min(value, total)) / (total || 1)) * 100)}%`;
90
+ if (total === 0)
91
+ return `${"░".repeat(width)} 0%`;
92
+ const clampedValue = Math.max(0, Math.min(value, total));
93
+ const percentage = Math.round((clampedValue / total) * 100);
94
+ const filled = Math.round((clampedValue / total) * width);
95
+ const empty = width - filled;
96
+ const bar = "█".repeat(filled) + "░".repeat(empty);
97
+ return `${bar} ${percentage}%`;
98
+ }
99
+ // ── 工具函数 ──
100
+ export { default as stripAnsi } from "strip-ansi";
101
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** 分区标题——粗体,前面空行 */
2
+ export declare function section(title: string): void;
3
+ /** 检查项——带状态图标 */
4
+ export declare function check(label: string, value: string, status: "pass" | "fail" | "warn"): void;
5
+ /** 成功消息 */
6
+ export declare function success(msg: string): void;
7
+ /** 错误消息(输出到 stderr) */
8
+ export declare function error(msg: string): void;
9
+ /** 警告消息 */
10
+ export declare function warn(msg: string): void;
11
+ /** 结束横幅 */
12
+ export declare function banner(msg: string): void;
13
+ /** 详情表——boxPanel 包裹的 borderedTable */
14
+ export declare function detailTable(headers: string[], rows: string[][]): void;
15
+ /** 信息行——缩进普通文本 */
16
+ export declare function info(msg: string): void;
@@ -0,0 +1,38 @@
1
+ import { color, boxPanel, borderedTable } from "./format.js";
2
+ /** 分区标题——粗体,前面空行 */
3
+ export function section(title) {
4
+ console.log(`\n ${color.bold(title)}`);
5
+ }
6
+ /** 检查项——带状态图标 */
7
+ export function check(label, value, status) {
8
+ const icon = status === "pass" ? color.green("✓") :
9
+ status === "fail" ? color.red("✗") :
10
+ color.yellow("⚠");
11
+ console.log(` ${icon} ${label} ${color.cyan(value)}`);
12
+ }
13
+ /** 成功消息 */
14
+ export function success(msg) {
15
+ console.log(` ${color.green("✓")} ${msg}`);
16
+ }
17
+ /** 错误消息(输出到 stderr) */
18
+ export function error(msg) {
19
+ console.error(` ${color.red("✗")} ${msg}`);
20
+ }
21
+ /** 警告消息 */
22
+ export function warn(msg) {
23
+ console.log(` ${color.yellow("⚠")} ${msg}`);
24
+ }
25
+ /** 结束横幅 */
26
+ export function banner(msg) {
27
+ console.log(`\n ${color.green(msg)}`);
28
+ }
29
+ /** 详情表——boxPanel 包裹的 borderedTable */
30
+ export function detailTable(headers, rows) {
31
+ const table = borderedTable(headers, rows);
32
+ console.log(boxPanel(table, { title: "" }));
33
+ }
34
+ /** 信息行——缩进普通文本 */
35
+ export function info(msg) {
36
+ console.log(` ${msg}`);
37
+ }
38
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7D,oBAAoB;AACpB,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,KAAa,EAAE,MAAgC;IAClF,MAAM,IAAI,GACR,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,WAAW;AACX,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,WAAW;AACX,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,WAAW;AACX,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,WAAW,CAAC,OAAiB,EAAE,IAAgB;IAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAC3B,CAAC"}
@@ -1,4 +1,3 @@
1
- export declare const supportsInquirer: boolean;
2
1
  export interface Choice {
3
2
  name: string;
4
3
  value: string;
@@ -1,90 +1,18 @@
1
- import { createInterface } from "node:readline";
2
- // 一次判断,启动时确定
3
- export const supportsInquirer = (() => {
4
- const [major] = process.versions.node.split(".").map(Number);
5
- return major >= 20;
6
- })();
7
- // —— 底层 stdin helpers ——
8
- function ask(question) {
9
- const rl = createInterface({ input: process.stdin, output: process.stdout });
10
- return new Promise((resolve) => {
11
- rl.question(question, (answer) => {
12
- rl.close();
13
- resolve(answer);
14
- });
15
- });
16
- }
1
+ import { select, checkbox, confirm } from "@inquirer/prompts";
17
2
  export async function promptSelect(message, choices) {
18
- if (supportsInquirer) {
19
- const { select } = await import("@inquirer/prompts");
20
- return select({ message, choices });
21
- }
22
- // stdin fallback
23
- console.log(message);
24
- choices.forEach((c, i) => console.log(` [${i + 1}] ${c.name}`));
25
- const answer = await ask(`输入数字 (1-${choices.length}): `);
26
- const idx = parseInt(answer.trim(), 10) - 1;
27
- if (idx >= 0 && idx < choices.length)
28
- return choices[idx].value;
29
- return choices[0].value;
3
+ return select({ message, choices });
30
4
  }
31
5
  export async function promptMultiSelect(message, choices, opts) {
32
- if (supportsInquirer) {
33
- const { checkbox } = await import("@inquirer/prompts");
34
- // @inquirer checkbox 的 validate 传入 NormalizedChoice[],适配为 string[]
35
- const rawValidate = opts?.validate;
36
- return checkbox({
37
- message,
38
- choices: choices.map((c) => ({ name: c.name, value: c.value })),
39
- validate: rawValidate
40
- ? (vals) => rawValidate(vals.map((v) => v.value))
41
- : undefined,
42
- });
43
- }
44
- // stdin fallback: 编号多选
45
- while (true) {
46
- console.log(message);
47
- choices.forEach((c, i) => console.log(` [${i + 1}] ${c.name}`));
48
- const answer = await ask("输入编号,逗号分隔: ");
49
- const trimmed = answer.trim();
50
- if (!trimmed) {
51
- if (opts?.validate) {
52
- const err = opts.validate([]);
53
- if (err !== true) {
54
- console.log(` ⚠ ${err}`);
55
- continue;
56
- }
57
- }
58
- return [];
59
- }
60
- const ids = [];
61
- const parts = trimmed.split(/[,,\s]+/);
62
- for (const p of parts) {
63
- const idx = parseInt(p, 10) - 1;
64
- if (idx >= 0 && idx < choices.length) {
65
- ids.push(choices[idx].value);
66
- }
67
- }
68
- if (opts?.validate) {
69
- const err = opts.validate(ids);
70
- if (err !== true) {
71
- console.log(` ⚠ ${err}`);
72
- continue;
73
- }
74
- }
75
- return ids;
76
- }
6
+ const rawValidate = opts?.validate;
7
+ return checkbox({
8
+ message,
9
+ choices: choices.map((c) => ({ name: c.name, value: c.value })),
10
+ validate: rawValidate
11
+ ? (vals) => rawValidate(vals.map((v) => v.value))
12
+ : undefined,
13
+ });
77
14
  }
78
15
  export async function promptConfirm(message, defaultValue) {
79
- if (supportsInquirer) {
80
- const { confirm } = await import("@inquirer/prompts");
81
- return confirm({ message, default: defaultValue });
82
- }
83
- const suffix = defaultValue === true ? " [Y/n] " : defaultValue === false ? " [y/N] " : " [y/N] ";
84
- const answer = await ask(message + suffix);
85
- const trimmed = answer.trim().toLowerCase();
86
- if (trimmed === "")
87
- return defaultValue ?? false;
88
- return trimmed === "y" || trimmed === "yes";
16
+ return confirm({ message, default: defaultValue });
89
17
  }
90
18
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAO9D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,OAAiB;IACnE,OAAO,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAe,EACf,OAAiB,EACjB,IAAsD;IAEtD,MAAM,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC;IACnC,OAAO,QAAQ,CAAC;QACd,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,WAAW;YACnB,CAAC,CAAC,CAAC,IAAgD,EAAE,EAAE,CACnD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC,CAAC,SAAS;KACd,CAAsB,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,YAAsB;IACzE,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -36,6 +36,7 @@ alloy _state read openspec/changes/<name> worktree
36
36
  ```
37
37
 
38
38
  提取每个制品的 artifact / hash / approver / committed_at,构建审批链。
39
+ **retrospective 行特殊处理:** hash 列填 `—`(自指 hash 悖论:写入 hash 会导致文件变化、hash 失效),审批时间填"待确认"——等用户审查通过后再补。hash 仅记录在 `.alloy.yaml` 中。
39
40
 
40
41
  **来源二:git log(全周期 commit 全景)**
41
42
  ```bash
@@ -89,42 +90,23 @@ git diff --stat <base>..HEAD | tail -1
89
90
 
90
91
  #### §4 全周期技能审计
91
92
 
92
- Agent 自报全周期技能和命令使用情况(同一 session 亲历):
93
-
94
- **start 阶段:**
95
- | 技能/命令 | 使用 |
96
- |----------|:---:|
97
- | `opsx:explore` | |
98
- | `superpowers:brainstorming` | |
99
-
100
- **plan 阶段:**
101
- | 技能/命令 | 使用 |
102
- |----------|:---:|
103
- | `/opsx:continue` | |
104
- | `superpowers:writing-plans` | |
105
-
106
- **apply 阶段:**
107
- | 技能/命令 | 使用 |
108
- |----------|:---:|
109
- | `superpowers:using-git-worktrees` | |
110
- | `superpowers:subagent-driven-development` | |
111
- | `superpowers:executing-plans` | |
112
- | `superpowers:test-driven-development` | |
113
- | `superpowers:requesting-code-review` | |
114
- | `superpowers:verification-before-completion` | |
115
- | `/opsx:verify` | |
116
-
117
- 默认期望所有行都是 ✓。
118
-
119
- **Deliberately Skipped Skills:** 对于每个标记 ✗ 的技能,必须回答三个问题:
93
+ `.alloy.yaml` `skill_usage[]` 字段读取全周期技能使用记录(各阶段 `alloy _skill log` 写入):
94
+
95
+ ```bash
96
+ alloy _state read openspec/changes/<name> skill_usage
97
+ ```
98
+
99
+ `templates/retrospective.md` §4 格式生成审计表:
100
+
101
+ - `used=true` → 填 `✓`,有 `count` 时追加 `(×N)`,有 `via` 时原因列填 `via <source>`
102
+ - `used=false` `✗`,原因列填 `reason` 字段的值
103
+ - 不在 `skill_usage[]` 中(旧 change 无记录)→ 填 `—`
104
+ - `skill_usage[]` 为空数组 → 所有行填 `—`,在表前加一行提示:"> ⚠️ 当前 change 无 skill_usage 记录(旧 change),以下数据不可用。"
105
+
106
+ **Deliberately Skipped Skills:** 对于每个 `used=false` 的条目,展开三问:
120
107
  1. **What was skipped** — 具体跳过了哪个技能或子步骤
121
- 2. **Why this cycle** — 具体触发原因(必须有具体的 commit hash、日志行或观察到的行为)
122
- 3. **How to prevent recurrence** — 从以下选项中选择:
123
- - schema graph fix(schema 图修正)
124
- - skill description tightening(技能描述收紧)
125
- - CLAUDE.md trigger(CLAUDE.md 触发规则)
126
- - scope-judgment rule(范围判断规则)
127
- - one-off(一次性,需说明为什么是边界情况)
108
+ 2. **Why this cycle** — 具体触发原因(优先用 `reason` 字段的值)
109
+ 3. **How to prevent recurrence** — schema graph fix / skill description tightening / CLAUDE.md trigger / scope-judgment rule / one-off
128
110
 
129
111
  如果多个 cycle 因相似原因跳过同一技能,该模式应成为 §6 的 Promote candidate。
130
112
 
@@ -1,3 +1,5 @@
1
+ > 生成时间: <timestamp>
2
+
1
3
  ## 架构决策
2
4
 
3
5
  <!-- 整体架构方案 -->
@@ -1,3 +1,5 @@
1
+ > 生成时间: <timestamp>
2
+
1
3
  # [功能名称]
2
4
 
3
5
  ## Why
@@ -3,6 +3,8 @@ strategy: sdd
3
3
  reason: 任务独立、可并行(由 writing-plans 技能分析后填入)
4
4
  ---
5
5
 
6
+ > 生成时间: <timestamp>
7
+
6
8
  # [功能名称] 实现计划
7
9
 
8
10
  > **Goal:** [目标描述]
@@ -1,3 +1,5 @@
1
+ > 生成时间: <timestamp>
2
+
1
3
  ## Why
2
4
  <!-- 为什么做这个变更。要解决什么问题?为什么现在做? -->
3
5
 
@@ -1,3 +1,5 @@
1
+ > 生成时间: <timestamp>
2
+
1
3
  # Retrospective
2
4
 
3
5
  > 生成前 PRECHECK:
@@ -19,7 +21,7 @@
19
21
  | tasks | | | |
20
22
  | plans | | | |
21
23
  | verify | | | |
22
- | retrospective | | | |
24
+ | retrospective | | | 待确认 |
23
25
 
24
26
  ### Commit 汇总(按 type)
25
27
  <!-- git log <base>..HEAD --oneline,按 Conventional Commits type 分组 -->
@@ -106,37 +108,55 @@
106
108
 
107
109
  ## §4 全周期技能审计
108
110
 
111
+ 数据来源:`.alloy.yaml` 的 `skill_usage[]` 字段。`skill_usage[]` 为空(旧 change 无记录)→ 对应行填 `—`。
112
+
109
113
  ### start 阶段
110
114
 
111
- | 技能/命令 | 使用 |
112
- |----------|:---:|
113
- | `opsx:explore` | |
114
- | `superpowers:brainstorming` | |
115
+ | 技能/命令 | 使用 | 原因 |
116
+ |----------|:---:|------|
117
+ | `opsx:explore` | | |
118
+ | `superpowers:brainstorming` | | |
119
+ | `/opsx:new` | | |
115
120
 
116
121
  ### plan 阶段
117
122
 
118
- | 技能/命令 | 使用 |
119
- |----------|:---:|
120
- | `/opsx:continue` | |
121
- | `superpowers:writing-plans` | |
123
+ | 技能/命令 | 使用 | 原因 |
124
+ |----------|:---:|------|
125
+ | `/opsx:continue` | | |
126
+ | `superpowers:writing-plans` | | |
122
127
 
123
128
  ### apply 阶段
124
129
 
125
- | 技能/命令 | 使用 |
126
- |----------|:---:|
127
- | `superpowers:using-git-worktrees` | |
128
- | `superpowers:subagent-driven-development` | |
129
- | `superpowers:executing-plans` | |
130
- | `superpowers:test-driven-development` | |
131
- | `superpowers:requesting-code-review` | |
132
- | `superpowers:verification-before-completion` | |
133
- | `/opsx:verify` | |
130
+ | 技能/命令 | 使用 | 原因 |
131
+ |----------|:---:|------|
132
+ | `superpowers:using-git-worktrees` | | |
133
+ | `superpowers:subagent-driven-development` | | |
134
+ | `test-driven-development` | | |
135
+ | `spec-compliance-review` | | |
136
+ | `code-quality-review` | | |
137
+ | `superpowers:test-driven-development` | | |
138
+ | `superpowers:executing-plans` | | |
139
+ | `superpowers:requesting-code-review` | | |
140
+ | `superpowers:verification-before-completion` | | |
141
+ | `/opsx:verify` | | |
142
+
143
+ ### archive 阶段
144
+
145
+ | 技能/命令 | 使用 | 原因 |
146
+ |----------|:---:|------|
147
+ | `/opsx:archive` | | |
148
+
149
+ ### finish 阶段
150
+
151
+ | 技能/命令 | 使用 | 原因 |
152
+ |----------|:---:|------|
153
+ | `superpowers:finishing-a-development-branch` | | |
134
154
 
135
155
  ### Deliberately Skipped Skills
136
156
 
137
157
  <!-- 对于每个标记 ✗ 的技能,填写以下三项:
138
158
  1. **What was skipped** — 具体跳过了哪个技能或子步骤
139
- 2. **Why this cycle** — 具体触发原因(必须有具体的 commit hash、日志行或观察到的行为)
159
+ 2. **Why this cycle** — 具体触发原因
140
160
  3. **How to prevent recurrence** — schema graph fix / skill description tightening / CLAUDE.md trigger / scope-judgment rule / one-off
141
161
  -->
142
162
 
@@ -1,3 +1,5 @@
1
+ > 生成时间: <timestamp>
2
+
1
3
  <!--
2
4
  Delta spec 模板 — 跟踪对 capability spec 的变更。
3
5
  路径:openspec/changes/<change-name>/specs/<capability>/spec.md
@@ -1,3 +1,5 @@
1
+ > 生成时间: <timestamp>
2
+
1
3
  ## 实现任务
2
4
 
3
5
  - [ ] 1. [任务类别]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyin-ai/alloy",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-beta.0",
4
4
  "description": "Alloy - OpenSpec + Superpowers 编排层 CLI 工具",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -15,7 +15,8 @@
15
15
  "dist/",
16
16
  "compat.yaml",
17
17
  "commands/",
18
- "openspec/schemas/alloy/"
18
+ "openspec/schemas/alloy/",
19
+ "vendor/"
19
20
  ],
20
21
  "scripts": {
21
22
  "build": "tsc",
@@ -25,8 +26,14 @@
25
26
  "test:watch": "vitest"
26
27
  },
27
28
  "dependencies": {
28
- "@inquirer/prompts": "^8.5.0",
29
+ "@inquirer/prompts": "^7.10.1",
30
+ "boxen": "^7.1.1",
31
+ "cli-table3": "^0.6.5",
32
+ "ora": "^7.0.1",
33
+ "picocolors": "^1.1.1",
29
34
  "semver": "^7.7.0",
35
+ "string-width": "^6.1.0",
36
+ "strip-ansi": "^7.2.0",
30
37
  "yaml": "^2.7.0"
31
38
  },
32
39
  "devDependencies": {