@mstar-harness/opencode 0.2.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/AGENTS.md +9 -0
- package/INSTALL.md +76 -0
- package/dist/mstar.js +175 -0
- package/harness-agents/architect.md +35 -0
- package/harness-agents/frontend-dev.md +33 -0
- package/harness-agents/fullstack-dev-2.md +33 -0
- package/harness-agents/fullstack-dev.md +33 -0
- package/harness-agents/ops-engineer.md +33 -0
- package/harness-agents/product-manager.md +35 -0
- package/harness-agents/project-manager.md +32 -0
- package/harness-agents/prompt-engineer.md +33 -0
- package/harness-agents/qa-engineer.md +35 -0
- package/harness-agents/qc-specialist-2.md +111 -0
- package/harness-agents/qc-specialist-3.md +111 -0
- package/harness-agents/qc-specialist.md +111 -0
- package/harness-agents/writing-specialist.md +35 -0
- package/harness-skills/mstar-coding-behavior/SKILL.md +104 -0
- package/harness-skills/mstar-harness-core/SKILL.md +284 -0
- package/harness-skills/mstar-harness-core/references/branch-and-worktree.md +131 -0
- package/harness-skills/mstar-harness-core/references/library-docs-protocol.md +35 -0
- package/harness-skills/mstar-harness-core/references/open-harness-principles.md +73 -0
- package/harness-skills/mstar-harness-core/references/phase-gate-playbook.md +87 -0
- package/harness-skills/mstar-plan-conventions/SKILL.md +241 -0
- package/harness-skills/mstar-plan-conventions/references/done-compaction.md +78 -0
- package/harness-skills/mstar-plan-conventions/references/effort-estimation.md +38 -0
- package/harness-skills/mstar-plan-conventions/references/harness-bootstrap-and-agents-layering.md +79 -0
- package/harness-skills/mstar-plan-conventions/references/knowledge-and-designs.md +70 -0
- package/harness-skills/mstar-plan-conventions/references/plan-files-and-reports.md +66 -0
- package/harness-skills/mstar-plan-conventions/references/status-and-residuals.md +391 -0
- package/harness-skills/mstar-plan-conventions/templates/README.md +8 -0
- package/harness-skills/mstar-plan-conventions/templates/notes.empty.json +5 -0
- package/harness-skills/mstar-plan-conventions/templates/status.empty.json +7 -0
- package/harness-skills/mstar-review-qc/SKILL.md +177 -0
- package/harness-skills/mstar-roles/SKILL.md +83 -0
- package/harness-skills/mstar-roles/references/architect.md +174 -0
- package/harness-skills/mstar-roles/references/frontend-dev.md +119 -0
- package/harness-skills/mstar-roles/references/fullstack-dev-shared.md +123 -0
- package/harness-skills/mstar-roles/references/ops-engineer.md +131 -0
- package/harness-skills/mstar-roles/references/product-manager.md +183 -0
- package/harness-skills/mstar-roles/references/project-manager.md +776 -0
- package/harness-skills/mstar-roles/references/prompt-engineer.md +129 -0
- package/harness-skills/mstar-roles/references/qa-engineer.md +172 -0
- package/harness-skills/mstar-roles/references/qc-specialist-shared.md +155 -0
- package/harness-skills/mstar-roles/references/writing-specialist.md +85 -0
- package/harness-skills/mstar-superpowers-align/SKILL.md +150 -0
- package/harness-skills/mstar-superpowers-align/references/per-role-matrix.md +99 -0
- package/harness-skills/mstar-superpowers-align/references/tension-table.md +19 -0
- package/harness-skills/pm/SKILL.md +31 -0
- package/package.json +35 -0
- package/skills/mstar-host/SKILL.md +125 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Morning Star - Global Entry
|
|
2
|
+
|
|
3
|
+
## Morning Star Harness Core
|
|
4
|
+
|
|
5
|
+
Any code agent working in this repository must read the `mstar-harness-core` skill before starting any non-trivial task, including relevant files in its `references/` directory.
|
|
6
|
+
|
|
7
|
+
`mstar-harness-core` is the single source of truth for lifecycle gates, routing, host entry behavior, skill loading order, and execution invariants across all `mstar-*` skills.
|
|
8
|
+
|
|
9
|
+
All other execution behavior remains defined by `mstar-harness-core`.
|
package/INSTALL.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Installing Morning Star for OpenCode
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- [OpenCode.ai](https://opencode.ai) installed
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Add Morning Star to the `plugin` array in your `opencode.json` (global or project-level).
|
|
10
|
+
|
|
11
|
+
If you use Superpowers together, use:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"plugin": [
|
|
16
|
+
"superpowers@git+https://github.com/obra/superpowers.git",
|
|
17
|
+
"@mstar-harness/opencode@latest"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Restart OpenCode. The plugin installs from npm and registers Morning Star runtime paths.
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
- Keep your role models and permissions in `opencode.json`.
|
|
27
|
+
- The plugin loads **only paths inside the `@mstar-harness/opencode` package**:
|
|
28
|
+
- **`harness-skills/`** — copy of Morning Star `skills/` from the release build (`prepublishOnly` runs `bundle-assets` before `bun build`).
|
|
29
|
+
- **`skills/`** — packaged OpenCode host adapter (e.g. `mstar-host`).
|
|
30
|
+
- **`harness-agents/`** — copy of repo `agents/` from the same build.
|
|
31
|
+
- It does **not** read `<cwd>/skills` or `<cwd>/agents`, so OpenCode’s `process.cwd()` (your app project root) does not affect harness resolution.
|
|
32
|
+
- Bootstrap prompt entry is injected once with `<IMPORTANT_FOR_HARNESS>`.
|
|
33
|
+
|
|
34
|
+
## Monorepo / git checkout of this repository
|
|
35
|
+
|
|
36
|
+
After `bun install` or `npm install` at the repo root, **`postinstall`** runs `packages/opencode`’s `bundle-assets` so `harness-skills/` and `harness-agents/` exist for the plugin entry `main` → `packages/opencode/src/mstar.ts`.
|
|
37
|
+
|
|
38
|
+
If you use `npm install --ignore-scripts`, run once manually:
|
|
39
|
+
|
|
40
|
+
`bun run opencode:bundle-assets`
|
|
41
|
+
|
|
42
|
+
(or `bun run --cwd packages/opencode bundle-assets`).
|
|
43
|
+
|
|
44
|
+
## Updating
|
|
45
|
+
|
|
46
|
+
Change the plugin specifier to pick a new dist tag, for example:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"plugin": ["@mstar-harness/opencode@latest"]
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Restart OpenCode after edits.
|
|
55
|
+
|
|
56
|
+
## Legacy (git-based) installs
|
|
57
|
+
|
|
58
|
+
Older configs used:
|
|
59
|
+
|
|
60
|
+
`morning-star@git+https://github.com/btspoony/mstar-harness.git`
|
|
61
|
+
|
|
62
|
+
The `@mstar-harness/cli` package (`npx @mstar-harness/cli init`) migrates that entry to `@mstar-harness/opencode@latest`.
|
|
63
|
+
|
|
64
|
+
## Troubleshooting
|
|
65
|
+
|
|
66
|
+
### Plugin not loading
|
|
67
|
+
|
|
68
|
+
1. Check logs: `opencode run --print-logs "hello" 2>&1 | grep -i superpowers`
|
|
69
|
+
2. Verify the plugin line in your `opencode.json`
|
|
70
|
+
3. Make sure you're running a recent version of OpenCode
|
|
71
|
+
|
|
72
|
+
### Skills not found
|
|
73
|
+
|
|
74
|
+
1. Use `skill` tool to list what's discovered
|
|
75
|
+
2. Check that the plugin is loading (see above)
|
|
76
|
+
3. For **npm** installs, use a published build (tarball includes `harness-skills`). For **git** checkout, ensure install scripts ran (`postinstall` / `bun run opencode:bundle-assets`)
|
package/dist/mstar.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// src/mstar.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
var __dirname2 = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
var packageRoot = path.resolve(__dirname2, "..");
|
|
8
|
+
var bundledSkillsDir = path.join(packageRoot, "harness-skills");
|
|
9
|
+
var hostSkillsDir = path.join(packageRoot, "skills");
|
|
10
|
+
var bundledAgentsDir = path.join(packageRoot, "harness-agents");
|
|
11
|
+
var bootstrapAgentsPath = path.join(packageRoot, "AGENTS.md");
|
|
12
|
+
var BOOTSTRAP_MARKER = "IMPORTANT_FOR_HARNESS";
|
|
13
|
+
function resolveSkillPathCandidates() {
|
|
14
|
+
const out = [];
|
|
15
|
+
if (fs.existsSync(bundledSkillsDir))
|
|
16
|
+
out.push(bundledSkillsDir);
|
|
17
|
+
if (fs.existsSync(hostSkillsDir))
|
|
18
|
+
out.push(hostSkillsDir);
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
var extractFrontmatterAndBody = (content) => {
|
|
22
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
|
|
23
|
+
if (!match)
|
|
24
|
+
return { frontmatter: "", body: content };
|
|
25
|
+
return { frontmatter: match[1], body: match[2] };
|
|
26
|
+
};
|
|
27
|
+
var parseScalar = (raw) => {
|
|
28
|
+
const value = raw.trim();
|
|
29
|
+
if (value === "true")
|
|
30
|
+
return true;
|
|
31
|
+
if (value === "false")
|
|
32
|
+
return false;
|
|
33
|
+
if (value === "null")
|
|
34
|
+
return null;
|
|
35
|
+
if (value === "allow" || value === "ask" || value === "deny")
|
|
36
|
+
return value;
|
|
37
|
+
if (/^-?\d+(\.\d+)?$/.test(value))
|
|
38
|
+
return Number(value);
|
|
39
|
+
return value.replace(/^["']|["']$/g, "");
|
|
40
|
+
};
|
|
41
|
+
var parseSimpleFrontmatter = (frontmatter) => {
|
|
42
|
+
const root = {};
|
|
43
|
+
const stack = [{ indent: -1, target: root }];
|
|
44
|
+
const lines = frontmatter.split(`
|
|
45
|
+
`);
|
|
46
|
+
for (let i = 0;i < lines.length; i += 1) {
|
|
47
|
+
const line = lines[i];
|
|
48
|
+
if (!line.trim() || line.trim().startsWith("#"))
|
|
49
|
+
continue;
|
|
50
|
+
const indent = line.match(/^ */)?.[0]?.length ?? 0;
|
|
51
|
+
const trimmed = line.trim();
|
|
52
|
+
const separator = trimmed.indexOf(":");
|
|
53
|
+
if (separator <= 0)
|
|
54
|
+
continue;
|
|
55
|
+
const key = trimmed.slice(0, separator).trim();
|
|
56
|
+
const rawValue = trimmed.slice(separator + 1).trim();
|
|
57
|
+
while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
|
|
58
|
+
stack.pop();
|
|
59
|
+
}
|
|
60
|
+
const current = stack[stack.length - 1].target;
|
|
61
|
+
if (rawValue === "" || rawValue === "{}") {
|
|
62
|
+
current[key] = {};
|
|
63
|
+
stack.push({ indent, target: current[key] });
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (rawValue === "|-" || rawValue === "|") {
|
|
67
|
+
const blockLines = [];
|
|
68
|
+
const baseIndent = indent;
|
|
69
|
+
for (let j = i + 1;j < lines.length; j += 1) {
|
|
70
|
+
const blockLine = lines[j];
|
|
71
|
+
const blockIndent = blockLine.match(/^ */)?.[0]?.length ?? 0;
|
|
72
|
+
if (blockLine.trim() && blockIndent <= baseIndent)
|
|
73
|
+
break;
|
|
74
|
+
const normalized = blockLine.startsWith(" ".repeat(baseIndent + 2)) ? blockLine.slice(baseIndent + 2) : blockLine.trim() ? blockLine.trim() : "";
|
|
75
|
+
blockLines.push(normalized);
|
|
76
|
+
i = j;
|
|
77
|
+
}
|
|
78
|
+
current[key] = blockLines.join(`
|
|
79
|
+
`);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
current[key] = parseScalar(rawValue);
|
|
83
|
+
}
|
|
84
|
+
return root;
|
|
85
|
+
};
|
|
86
|
+
var loadBootstrapContent = () => {
|
|
87
|
+
if (!fs.existsSync(bootstrapAgentsPath))
|
|
88
|
+
return null;
|
|
89
|
+
const content = fs.readFileSync(bootstrapAgentsPath, "utf8").trim();
|
|
90
|
+
if (!content)
|
|
91
|
+
return null;
|
|
92
|
+
return `<${BOOTSTRAP_MARKER}>
|
|
93
|
+
${content}
|
|
94
|
+
</${BOOTSTRAP_MARKER}>`;
|
|
95
|
+
};
|
|
96
|
+
var normalizePath = (inputPath, homeDir) => {
|
|
97
|
+
if (!inputPath || typeof inputPath !== "string")
|
|
98
|
+
return null;
|
|
99
|
+
let normalized = inputPath.trim();
|
|
100
|
+
if (!normalized)
|
|
101
|
+
return null;
|
|
102
|
+
if (normalized === "~")
|
|
103
|
+
normalized = homeDir;
|
|
104
|
+
if (normalized.startsWith("~/"))
|
|
105
|
+
normalized = path.join(homeDir, normalized.slice(2));
|
|
106
|
+
return path.resolve(normalized);
|
|
107
|
+
};
|
|
108
|
+
var loadAgentsFromDir = (agentsDirPath) => {
|
|
109
|
+
if (!fs.existsSync(agentsDirPath))
|
|
110
|
+
return {};
|
|
111
|
+
const files = fs.readdirSync(agentsDirPath).filter((name) => name.endsWith(".md")).sort((a, b) => a.localeCompare(b));
|
|
112
|
+
const result = {};
|
|
113
|
+
for (const file of files) {
|
|
114
|
+
const filePath = path.join(agentsDirPath, file);
|
|
115
|
+
const content = fs.readFileSync(filePath, "utf8");
|
|
116
|
+
const { frontmatter, body } = extractFrontmatterAndBody(content);
|
|
117
|
+
const parsed = parseSimpleFrontmatter(frontmatter);
|
|
118
|
+
const parsedName = typeof parsed.name === "string" ? parsed.name : "";
|
|
119
|
+
const id = parsedName || file.replace(/\.md$/, "");
|
|
120
|
+
result[id] = {
|
|
121
|
+
...parsed,
|
|
122
|
+
prompt: body.trim()
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
};
|
|
127
|
+
var loadBundledAgents = () => loadAgentsFromDir(bundledAgentsDir);
|
|
128
|
+
var MorningStarHarnessPlugin = async () => {
|
|
129
|
+
const homeDir = os.homedir();
|
|
130
|
+
const envConfigDir = normalizePath(process.env.OPENCODE_CONFIG_DIR, homeDir);
|
|
131
|
+
const configDir = envConfigDir || path.join(homeDir, ".config/opencode");
|
|
132
|
+
const isEnabledForProject = !!configDir;
|
|
133
|
+
return {
|
|
134
|
+
config: async (config) => {
|
|
135
|
+
if (!isEnabledForProject)
|
|
136
|
+
return;
|
|
137
|
+
const runtimeConfig = config;
|
|
138
|
+
runtimeConfig.skills = runtimeConfig.skills || {};
|
|
139
|
+
runtimeConfig.skills.paths = runtimeConfig.skills.paths || [];
|
|
140
|
+
for (const skillPath of resolveSkillPathCandidates()) {
|
|
141
|
+
if (fs.existsSync(skillPath) && !runtimeConfig.skills.paths.includes(skillPath)) {
|
|
142
|
+
runtimeConfig.skills.paths.push(skillPath);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const markdownAgents = loadBundledAgents();
|
|
146
|
+
runtimeConfig.agent = runtimeConfig.agent || {};
|
|
147
|
+
for (const [agentId, definition] of Object.entries(markdownAgents)) {
|
|
148
|
+
runtimeConfig.agent[agentId] = {
|
|
149
|
+
...runtimeConfig.agent[agentId] || {},
|
|
150
|
+
...definition
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"experimental.chat.messages.transform": async (_input, output) => {
|
|
155
|
+
const bootstrap = loadBootstrapContent();
|
|
156
|
+
if (!bootstrap || !output.messages.length)
|
|
157
|
+
return;
|
|
158
|
+
const firstUser = output.messages.find((message) => message.info.role === "user");
|
|
159
|
+
if (!firstUser || !firstUser.parts.length)
|
|
160
|
+
return;
|
|
161
|
+
const injected = firstUser.parts.some((part) => part.type === "text" && typeof part.text === "string" && part.text.includes(`<${BOOTSTRAP_MARKER}>`));
|
|
162
|
+
if (injected)
|
|
163
|
+
return;
|
|
164
|
+
const ref = firstUser.parts[0];
|
|
165
|
+
firstUser.parts.unshift({
|
|
166
|
+
...ref,
|
|
167
|
+
type: "text",
|
|
168
|
+
text: bootstrap
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
export {
|
|
174
|
+
MorningStarHarnessPlugin
|
|
175
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
bash:
|
|
9
|
+
"*": allow
|
|
10
|
+
task:
|
|
11
|
+
"*": deny
|
|
12
|
+
explore: allow
|
|
13
|
+
name: architect
|
|
14
|
+
description: |-
|
|
15
|
+
技术架构师 - 系统设计、技术决策与技术向文档编写(架构说明、ADR、接口契约等)。
|
|
16
|
+
Architect - system design, technical decisions, and technical documentation (architecture notes, ADRs, interface contracts).
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Morning Star Role Binding
|
|
20
|
+
|
|
21
|
+
You are `architect`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
22
|
+
|
|
23
|
+
- Skill: `mstar-roles` skill
|
|
24
|
+
- Role reference: `references/architect.md` in the `mstar-roles` skill
|
|
25
|
+
- Role parameters: `role_id=architect`, `mode=subagent`
|
|
26
|
+
|
|
27
|
+
## Mandatory First Steps
|
|
28
|
+
|
|
29
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
30
|
+
|
|
31
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
32
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
33
|
+
3. `Read` → `references/architect.md` listed above
|
|
34
|
+
|
|
35
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
task:
|
|
9
|
+
"*": deny
|
|
10
|
+
explore: allow
|
|
11
|
+
name: frontend-dev
|
|
12
|
+
description: |-
|
|
13
|
+
前端开发工程师 - 页面/组件/交互/a11y/前端性能。全栈功能里默认前端主责(与 `@fullstack-dev` 分轨);纯 UI 任务首选本角色。
|
|
14
|
+
Frontend Developer - pages/components/interactions/accessibility/frontend performance. This is the default frontend owner in fullstack work (split with `@fullstack-dev`) and the preferred role for pure UI tasks.
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Morning Star Role Binding
|
|
18
|
+
|
|
19
|
+
You are `frontend-dev`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
20
|
+
|
|
21
|
+
- Skill: `mstar-roles` skill
|
|
22
|
+
- Role reference: `references/frontend-dev.md` in the `mstar-roles` skill
|
|
23
|
+
- Role parameters: `role_id=frontend-dev`, `track=frontend_primary`
|
|
24
|
+
|
|
25
|
+
## Mandatory First Steps
|
|
26
|
+
|
|
27
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
28
|
+
|
|
29
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
30
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
31
|
+
3. `Read` → `references/frontend-dev.md` listed above
|
|
32
|
+
|
|
33
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
task:
|
|
9
|
+
"*": deny
|
|
10
|
+
explore: allow
|
|
11
|
+
name: fullstack-dev-2
|
|
12
|
+
description: |-
|
|
13
|
+
全栈开发工程师 - 与 `@fullstack-dev` 并行的第二实现轨(独立模块/API/页面岛)。PM 在 tasks 可并行或加速时指派;须写明模块边界与分支,勿当作闲置备用。
|
|
14
|
+
Fullstack Developer (Track 2) - the second implementation track parallel to `@fullstack-dev` (independent modules/APIs/page islands). PM should assign this role when tasks can run in parallel or when acceleration is needed, with explicit module boundaries and branch ownership.
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Morning Star Role Binding
|
|
18
|
+
|
|
19
|
+
You are `fullstack-dev-2`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
20
|
+
|
|
21
|
+
- Skill: `mstar-roles` skill
|
|
22
|
+
- Role reference: `references/fullstack-dev-shared.md` in the `mstar-roles` skill
|
|
23
|
+
- Role parameters: `role_id=fullstack-dev-2`, `track=parallel_secondary`, `backend_led=true`
|
|
24
|
+
|
|
25
|
+
## Mandatory First Steps
|
|
26
|
+
|
|
27
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
28
|
+
|
|
29
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
30
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
31
|
+
3. `Read` → `references/fullstack-dev-shared.md` listed above
|
|
32
|
+
|
|
33
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
task:
|
|
9
|
+
"*": deny
|
|
10
|
+
explore: allow
|
|
11
|
+
name: fullstack-dev
|
|
12
|
+
description: |-
|
|
13
|
+
全栈开发工程师 - 后端主导的全栈实现(API/业务/数据层)。UI 重或新页面多时由 PM 拆给 `@frontend-dev`;第二并行实现轨用 `@fullstack-dev-2`。Hotfix/单流小改可一人完成。
|
|
14
|
+
Fullstack Developer - backend-led fullstack implementation (API/business/data). PM should split UI-heavy or new-page work to `@frontend-dev`, and use `@fullstack-dev-2` for the second parallel track. One developer can handle hotfixes or small single-stream updates.
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Morning Star Role Binding
|
|
18
|
+
|
|
19
|
+
You are `fullstack-dev`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
20
|
+
|
|
21
|
+
- Skill: `mstar-roles` skill
|
|
22
|
+
- Role reference: `references/fullstack-dev-shared.md` in the `mstar-roles` skill
|
|
23
|
+
- Role parameters: `role_id=fullstack-dev`, `track=primary`, `backend_led=true`
|
|
24
|
+
|
|
25
|
+
## Mandatory First Steps
|
|
26
|
+
|
|
27
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
28
|
+
|
|
29
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
30
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
31
|
+
3. `Read` → `references/fullstack-dev-shared.md` listed above
|
|
32
|
+
|
|
33
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
task:
|
|
9
|
+
"*": deny
|
|
10
|
+
explore: allow
|
|
11
|
+
name: ops-engineer
|
|
12
|
+
description: |-
|
|
13
|
+
运维工程师 - 部署、监控和基础设施。
|
|
14
|
+
Ops Engineer - deployment, monitoring, and infrastructure operations, including CI/CD and observability.
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Morning Star Role Binding
|
|
18
|
+
|
|
19
|
+
You are `ops-engineer`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
20
|
+
|
|
21
|
+
- Skill: `mstar-roles` skill
|
|
22
|
+
- Role reference: `references/ops-engineer.md` in the `mstar-roles` skill
|
|
23
|
+
- Role parameters: `role_id=ops-engineer`, `mode=subagent`
|
|
24
|
+
|
|
25
|
+
## Mandatory First Steps
|
|
26
|
+
|
|
27
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
28
|
+
|
|
29
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
30
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
31
|
+
3. `Read` → `references/ops-engineer.md` listed above
|
|
32
|
+
|
|
33
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
bash:
|
|
9
|
+
"*": allow
|
|
10
|
+
task:
|
|
11
|
+
"*": deny
|
|
12
|
+
explore: allow
|
|
13
|
+
name: product-manager
|
|
14
|
+
description: |-
|
|
15
|
+
产品经理 - 需求分析、产品规划、市场/用户研究与产品向文档编写。
|
|
16
|
+
Product Manager - requirements analysis, product planning, market/user research, and product-facing documentation.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Morning Star Role Binding
|
|
20
|
+
|
|
21
|
+
You are `product-manager`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
22
|
+
|
|
23
|
+
- Skill: `mstar-roles` skill
|
|
24
|
+
- Role reference: `references/product-manager.md` in the `mstar-roles` skill
|
|
25
|
+
- Role parameters: `role_id=product-manager`, `mode=subagent`
|
|
26
|
+
|
|
27
|
+
## Mandatory First Steps
|
|
28
|
+
|
|
29
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
30
|
+
|
|
31
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
32
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
33
|
+
3. `Read` → `references/product-manager.md` listed above
|
|
34
|
+
|
|
35
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: primary
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
task:
|
|
9
|
+
"*": allow
|
|
10
|
+
name: project-manager
|
|
11
|
+
description: |-
|
|
12
|
+
项目经理 - 协调开发团队,管理项目进度。
|
|
13
|
+
Project Manager - coordinate the team, track progress, and orchestrate execution across roles.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Morning Star Role Binding
|
|
17
|
+
|
|
18
|
+
You are `project-manager`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
19
|
+
|
|
20
|
+
- Skill: `mstar-roles` skill
|
|
21
|
+
- Role reference: `references/project-manager.md` in the `mstar-roles` skill
|
|
22
|
+
- Role parameters: `role_id=project-manager`, `mode=primary`
|
|
23
|
+
|
|
24
|
+
## Mandatory First Steps
|
|
25
|
+
|
|
26
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
27
|
+
|
|
28
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
29
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
30
|
+
3. `Read` → `references/project-manager.md` listed above
|
|
31
|
+
|
|
32
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
task:
|
|
9
|
+
"*": deny
|
|
10
|
+
explore: allow
|
|
11
|
+
name: prompt-engineer
|
|
12
|
+
description: |-
|
|
13
|
+
提示词工程师 - 设计与优化 Agent 提示词与技能。
|
|
14
|
+
Prompt Engineer - design and optimize prompts and skills for agents, including refactoring and debugging prompt systems.
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Morning Star Role Binding
|
|
18
|
+
|
|
19
|
+
You are `prompt-engineer`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
20
|
+
|
|
21
|
+
- Skill: `mstar-roles` skill
|
|
22
|
+
- Role reference: `references/prompt-engineer.md` in the `mstar-roles` skill
|
|
23
|
+
- Role parameters: `role_id=prompt-engineer`, `mode=subagent`
|
|
24
|
+
|
|
25
|
+
## Mandatory First Steps
|
|
26
|
+
|
|
27
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
28
|
+
|
|
29
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
30
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
31
|
+
3. `Read` → `references/prompt-engineer.md` listed above
|
|
32
|
+
|
|
33
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
bash:
|
|
9
|
+
"*": allow
|
|
10
|
+
task:
|
|
11
|
+
"*": deny
|
|
12
|
+
explore: allow
|
|
13
|
+
name: qa-engineer
|
|
14
|
+
description: |-
|
|
15
|
+
测试工程师 - 编写测试用例和自动化测试。
|
|
16
|
+
QA Engineer - test planning, automated tests, coverage improvements, and regression protection.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Morning Star Role Binding
|
|
20
|
+
|
|
21
|
+
You are `qa-engineer`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
22
|
+
|
|
23
|
+
- Skill: `mstar-roles` skill
|
|
24
|
+
- Role reference: `references/qa-engineer.md` in the `mstar-roles` skill
|
|
25
|
+
- Role parameters: `role_id=qa-engineer`, `mode=subagent`
|
|
26
|
+
|
|
27
|
+
## Mandatory First Steps
|
|
28
|
+
|
|
29
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
30
|
+
|
|
31
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
32
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
33
|
+
3. `Read` → `references/qa-engineer.md` listed above
|
|
34
|
+
|
|
35
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: subagent
|
|
3
|
+
tools:
|
|
4
|
+
write: true
|
|
5
|
+
edit: true
|
|
6
|
+
bash: true
|
|
7
|
+
permission:
|
|
8
|
+
# `edit` covers write/patch/multiedit. Only `.md` under resolved `{PLAN_DIR}/reports/` (three possible roots — match project layout).
|
|
9
|
+
edit:
|
|
10
|
+
"*": deny
|
|
11
|
+
".agents/plans/reports/*.md": allow
|
|
12
|
+
".agents/plans/reports/**/*.md": allow
|
|
13
|
+
".plans/reports/*.md": allow
|
|
14
|
+
".plans/reports/**/*.md": allow
|
|
15
|
+
".worktrees/**/.agents/plans/reports/*.md": allow
|
|
16
|
+
".worktrees/**/.agents/plans/reports/**/*.md": allow
|
|
17
|
+
".worktrees/**/.plans/reports/*.md": allow
|
|
18
|
+
".worktrees/**/.plans/reports/**/*.md": allow
|
|
19
|
+
bash:
|
|
20
|
+
"*": deny
|
|
21
|
+
# Git inspection (read-only)
|
|
22
|
+
"git diff*": allow
|
|
23
|
+
"git log*": allow
|
|
24
|
+
"git show*": allow
|
|
25
|
+
"git blame*": allow
|
|
26
|
+
"git shortlog*": allow
|
|
27
|
+
"git stash list*": allow
|
|
28
|
+
"git branch*": allow
|
|
29
|
+
"git status*": allow
|
|
30
|
+
# Versioning QC reports only (paths you edited must stay under allowed reports/ trees)
|
|
31
|
+
"git add*": allow
|
|
32
|
+
"git commit*": allow
|
|
33
|
+
# JavaScript / TypeScript
|
|
34
|
+
"eslint*": allow
|
|
35
|
+
"npx eslint*": allow
|
|
36
|
+
"prettier --check*": allow
|
|
37
|
+
"npx prettier --check*": allow
|
|
38
|
+
"tsc*": allow
|
|
39
|
+
"npx tsc*": allow
|
|
40
|
+
"biome*": allow
|
|
41
|
+
"npx @biomejs/biome*": allow
|
|
42
|
+
"oxlint*": allow
|
|
43
|
+
"npx oxlint*": allow
|
|
44
|
+
"stylelint*": allow
|
|
45
|
+
"npx stylelint*": allow
|
|
46
|
+
# Python
|
|
47
|
+
"ruff*": allow
|
|
48
|
+
"pylint*": allow
|
|
49
|
+
"flake8*": allow
|
|
50
|
+
"mypy*": allow
|
|
51
|
+
"pyright*": allow
|
|
52
|
+
"bandit*": allow
|
|
53
|
+
"python -m ruff*": allow
|
|
54
|
+
"python -m pylint*": allow
|
|
55
|
+
"python -m mypy*": allow
|
|
56
|
+
"python3 -m ruff*": allow
|
|
57
|
+
"python3 -m pylint*": allow
|
|
58
|
+
"python3 -m mypy*": allow
|
|
59
|
+
# Rust
|
|
60
|
+
"cargo clippy*": allow
|
|
61
|
+
"cargo fmt --check*": allow
|
|
62
|
+
"cargo audit*": allow
|
|
63
|
+
# Go
|
|
64
|
+
"golangci-lint*": allow
|
|
65
|
+
"go vet*": allow
|
|
66
|
+
"staticcheck*": allow
|
|
67
|
+
# Ruby
|
|
68
|
+
"rubocop*": allow
|
|
69
|
+
"bundle exec rubocop*": allow
|
|
70
|
+
# Swift
|
|
71
|
+
"swiftlint*": allow
|
|
72
|
+
"swift-format lint*": allow
|
|
73
|
+
# Shell / Config
|
|
74
|
+
"shellcheck*": allow
|
|
75
|
+
"hadolint*": allow
|
|
76
|
+
"actionlint*": allow
|
|
77
|
+
# Markdown / Docs
|
|
78
|
+
"markdownlint*": allow
|
|
79
|
+
# General analysis
|
|
80
|
+
"wc*": allow
|
|
81
|
+
"rg*": allow
|
|
82
|
+
"cloc*": allow
|
|
83
|
+
"scc*": allow
|
|
84
|
+
"tokei*": allow
|
|
85
|
+
"git rev-parse*": allow
|
|
86
|
+
task:
|
|
87
|
+
"*": deny
|
|
88
|
+
explore: allow
|
|
89
|
+
name: qc-specialist-2
|
|
90
|
+
description: |-
|
|
91
|
+
质量控制专家(Reviewer #2)- 代码审查和质量保证。
|
|
92
|
+
Quality Control Specialist (Reviewer #2) - code review and quality assurance after significant changes.
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Morning Star Role Binding
|
|
96
|
+
|
|
97
|
+
You are `qc-specialist-2`. The complete role prompt is provided by the `mstar-roles` skill.
|
|
98
|
+
|
|
99
|
+
- Skill: `mstar-roles` skill
|
|
100
|
+
- Role reference: `references/qc-specialist-shared.md` in the `mstar-roles` skill
|
|
101
|
+
- Role parameters: `role_id=qc-specialist-2`, `reviewer_index=2`, `focus=security_correctness`, `report_suffix=qc2`
|
|
102
|
+
|
|
103
|
+
## Mandatory First Steps
|
|
104
|
+
|
|
105
|
+
This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
|
|
106
|
+
|
|
107
|
+
1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
|
|
108
|
+
2. `skill` → `mstar-roles` (role mapping & parameter table)
|
|
109
|
+
3. `Read` → `references/qc-specialist-shared.md` listed above
|
|
110
|
+
|
|
111
|
+
System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
|