@coralai/sps-cli 0.34.1 → 0.34.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectInit.d.ts","sourceRoot":"","sources":["../../src/commands/projectInit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projectInit.d.ts","sourceRoot":"","sources":["../../src/commands/projectInit.ts"],"names":[],"mappings":"AA6CA,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA+Nf"}
|
|
@@ -18,8 +18,9 @@
|
|
|
18
18
|
* @outputs 初始化后的项目目录和配置文件
|
|
19
19
|
* @workflow 1. 查找模板目录 → 2. 创建项目目录 → 3. 复制模板文件 → 4. 写入配置
|
|
20
20
|
*/
|
|
21
|
-
import { chmodSync,
|
|
21
|
+
import { chmodSync, existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
22
22
|
import { dirname, resolve } from 'node:path';
|
|
23
|
+
import { createInterface } from 'node:readline';
|
|
23
24
|
import { fileURLToPath } from 'node:url';
|
|
24
25
|
import { Logger } from '../core/logger.js';
|
|
25
26
|
const HOME = process.env.HOME || '/home/coral';
|
|
@@ -66,36 +67,104 @@ export async function executeProjectInit(project, flags) {
|
|
|
66
67
|
log.ok(`Created ${dir}`);
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
|
-
//
|
|
70
|
-
const schedulerSrc = resolve(TEMPLATE_DIR, 'batch_scheduler.sh');
|
|
71
|
-
const schedulerDst = resolve(instanceDir, 'batch_scheduler.sh');
|
|
72
|
-
if (existsSync(schedulerSrc)) {
|
|
73
|
-
copyFileSync(schedulerSrc, schedulerDst);
|
|
74
|
-
chmodSync(schedulerDst, 0o755);
|
|
75
|
-
log.ok('Installed batch_scheduler.sh (thin wrapper → sps tick)');
|
|
76
|
-
}
|
|
77
|
-
// Copy deploy.sh
|
|
78
|
-
const deploySrc = resolve(TEMPLATE_DIR, 'deploy.sh');
|
|
79
|
-
const deployDst = resolve(instanceDir, 'deploy.sh');
|
|
80
|
-
if (existsSync(deploySrc) && !existsSync(deployDst)) {
|
|
81
|
-
copyFileSync(deploySrc, deployDst);
|
|
82
|
-
chmodSync(deployDst, 0o755);
|
|
83
|
-
log.ok('Installed deploy.sh');
|
|
84
|
-
}
|
|
85
|
-
// Generate conf from template (only if conf doesn't exist)
|
|
70
|
+
// Generate conf — interactive if new, skip if exists
|
|
86
71
|
const confDst = resolve(instanceDir, 'conf');
|
|
87
|
-
if (!existsSync(confDst)) {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
72
|
+
if (!existsSync(confDst) || flags.force) {
|
|
73
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
74
|
+
const ask = (question, defaultValue) => {
|
|
75
|
+
const suffix = defaultValue ? ` [${defaultValue}]` : '';
|
|
76
|
+
return new Promise((res) => {
|
|
77
|
+
rl.question(` ${question}${suffix}: `, (answer) => {
|
|
78
|
+
res(answer.trim() || defaultValue || '');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
console.log(`\n Configure project: ${project}`);
|
|
83
|
+
console.log(' Press Enter to accept default value.\n');
|
|
84
|
+
// Required
|
|
85
|
+
const projectDir = await ask('Repository path', resolve(HOME, 'projects', project));
|
|
86
|
+
const pmTool = await ask('PM backend (markdown/plane/trello)', 'markdown');
|
|
87
|
+
const mergeBranch = await ask('Merge target branch', 'main');
|
|
88
|
+
const workerTool = await ask('Default worker agent (claude/codex)', 'claude');
|
|
89
|
+
const maxWorkers = await ask('Max concurrent workers', '1');
|
|
90
|
+
// Git remote (optional)
|
|
91
|
+
console.log('\n ── Git Remote (optional, leave blank to skip) ──');
|
|
92
|
+
const gitlabProject = await ask('Git remote project path (e.g. user/repo)', '');
|
|
93
|
+
const gitlabProjectId = gitlabProject ? await ask('GitLab project ID (number, blank if GitHub)', '') : '';
|
|
94
|
+
// PM-specific
|
|
95
|
+
let planeProjectId = '';
|
|
96
|
+
let trelloBoardId = '';
|
|
97
|
+
if (pmTool === 'plane') {
|
|
98
|
+
console.log('\n ── Plane ──');
|
|
99
|
+
planeProjectId = await ask('Plane project ID', '');
|
|
100
|
+
}
|
|
101
|
+
else if (pmTool === 'trello') {
|
|
102
|
+
console.log('\n ── Trello ──');
|
|
103
|
+
trelloBoardId = await ask('Trello board ID', '');
|
|
104
|
+
}
|
|
105
|
+
// Notification
|
|
106
|
+
console.log('\n ── Notifications ──');
|
|
107
|
+
const matrixRoomId = await ask('Matrix room ID (blank to use global)', '');
|
|
108
|
+
rl.close();
|
|
109
|
+
// Build conf
|
|
110
|
+
const lines = [
|
|
111
|
+
'# ── Project Config ─────────────────────────────────────────────',
|
|
112
|
+
`# Generated by: sps project init ${project} (${new Date().toISOString().slice(0, 10)})`,
|
|
113
|
+
'',
|
|
114
|
+
`export PROJECT_NAME="${project}"`,
|
|
115
|
+
`export PROJECT_DIR="${projectDir}"`,
|
|
116
|
+
'',
|
|
117
|
+
'# ── Git Remote ───────────────────────────────────────────────',
|
|
118
|
+
];
|
|
119
|
+
if (gitlabProject)
|
|
120
|
+
lines.push(`export GITLAB_PROJECT="${gitlabProject}"`);
|
|
121
|
+
else
|
|
122
|
+
lines.push('# export GITLAB_PROJECT="user/repo"');
|
|
123
|
+
if (gitlabProjectId)
|
|
124
|
+
lines.push(`export GITLAB_PROJECT_ID="${gitlabProjectId}"`);
|
|
125
|
+
else
|
|
126
|
+
lines.push('# export GITLAB_PROJECT_ID=""');
|
|
127
|
+
lines.push(`export GITLAB_MERGE_BRANCH="${mergeBranch}"`);
|
|
128
|
+
lines.push('');
|
|
129
|
+
lines.push('# ── PM Backend ───────────────────────────────────────────────');
|
|
130
|
+
lines.push(`export PM_TOOL="${pmTool}"`);
|
|
131
|
+
if (pmTool === 'plane' && planeProjectId) {
|
|
132
|
+
lines.push(`export PLANE_PROJECT_ID="${planeProjectId}"`);
|
|
95
133
|
}
|
|
134
|
+
if (pmTool === 'trello' && trelloBoardId) {
|
|
135
|
+
lines.push(`export TRELLO_BOARD_ID="${trelloBoardId}"`);
|
|
136
|
+
}
|
|
137
|
+
lines.push('');
|
|
138
|
+
lines.push('# ── Pipeline ─────────────────────────────────────────────────');
|
|
139
|
+
lines.push('export PIPELINE_LABEL="AI-PIPELINE"');
|
|
140
|
+
lines.push('export MR_MODE="none"');
|
|
141
|
+
lines.push('');
|
|
142
|
+
lines.push('# ── Worker / Agent ───────────────────────────────────────────');
|
|
143
|
+
lines.push(`export WORKER_TOOL="${workerTool}"`);
|
|
144
|
+
lines.push('export WORKER_TRANSPORT="acp-sdk"');
|
|
145
|
+
lines.push(`export MAX_CONCURRENT_WORKERS=${maxWorkers}`);
|
|
146
|
+
lines.push('export MAX_ACTIONS_PER_TICK=3');
|
|
147
|
+
lines.push('# export DEFAULT_WORKER_SKILLS="fullstack"');
|
|
148
|
+
lines.push('');
|
|
149
|
+
lines.push('# ── Timeouts & Policies ──────────────────────────────────────');
|
|
150
|
+
lines.push('export INPROGRESS_TIMEOUT_HOURS=2');
|
|
151
|
+
lines.push('export MONITOR_AUTO_QA=true');
|
|
152
|
+
lines.push('export CONFLICT_DEFAULT="serial"');
|
|
153
|
+
lines.push('');
|
|
154
|
+
lines.push('# ── Notifications ────────────────────────────────────────────');
|
|
155
|
+
if (matrixRoomId) {
|
|
156
|
+
lines.push(`export MATRIX_ROOM_ID="${matrixRoomId}"`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
lines.push('# export MATRIX_ROOM_ID="" # uses global from ~/.coral/env');
|
|
160
|
+
}
|
|
161
|
+
lines.push('');
|
|
162
|
+
writeFileSync(confDst, lines.join('\n') + '\n');
|
|
163
|
+
chmodSync(confDst, 0o600);
|
|
164
|
+
log.ok(`Generated conf with your settings`);
|
|
96
165
|
}
|
|
97
166
|
else {
|
|
98
|
-
log.info('conf already exists, skipping (use --force to regenerate
|
|
167
|
+
log.info('conf already exists, skipping (use --force to regenerate)');
|
|
99
168
|
}
|
|
100
169
|
// Create empty pipeline_order.json if not exists
|
|
101
170
|
const orderFile = resolve(instanceDir, 'pipeline_order.json');
|
|
@@ -103,11 +172,83 @@ export async function executeProjectInit(project, flags) {
|
|
|
103
172
|
writeFileSync(orderFile, '[]\n');
|
|
104
173
|
log.ok('Created empty pipeline_order.json');
|
|
105
174
|
}
|
|
175
|
+
// Create pipelines directory with sample template
|
|
176
|
+
const pipelinesDir = resolve(instanceDir, 'pipelines');
|
|
177
|
+
if (!existsSync(pipelinesDir)) {
|
|
178
|
+
mkdirSync(pipelinesDir, { recursive: true });
|
|
179
|
+
const samplePath = resolve(pipelinesDir, 'sample.yaml.example');
|
|
180
|
+
writeFileSync(samplePath, `# SPS Pipeline Configuration Sample
|
|
181
|
+
# Rename this file to project.yaml to activate it.
|
|
182
|
+
# Documentation: sps-pipeline skill or docs/design/17-pipeline-configuration-design.md
|
|
183
|
+
|
|
184
|
+
mode: project
|
|
185
|
+
|
|
186
|
+
# ── Card States ──────────────────────────────────────────────────
|
|
187
|
+
# Only 3 fixed roles required. Intermediate states come from stages.
|
|
188
|
+
states:
|
|
189
|
+
backlog: Backlog # SPS entry point (cards with AI-PIPELINE label)
|
|
190
|
+
ready: Todo # Environment ready, waiting for first stage
|
|
191
|
+
done: Done # Last stage completed
|
|
192
|
+
|
|
193
|
+
# ── Stages ───────────────────────────────────────────────────────
|
|
194
|
+
# Define your development workflow. Minimum 1 stage.
|
|
195
|
+
# Each stage triggers on a card state, launches a worker, and moves the card on completion.
|
|
196
|
+
|
|
197
|
+
stages:
|
|
198
|
+
# Stage 1: Development (first stage creates branch + worktree automatically)
|
|
199
|
+
- name: develop
|
|
200
|
+
trigger: "card_enters 'Todo'"
|
|
201
|
+
card_state: Inprogress
|
|
202
|
+
agent: claude # claude / codex / gemini
|
|
203
|
+
# profile: fullstack # skill profile (optional, comma-separated)
|
|
204
|
+
completion: git-evidence # git-evidence / fast-forward-merge / exit-code
|
|
205
|
+
on_complete: "move_card QA"
|
|
206
|
+
on_fail:
|
|
207
|
+
action: "label NEEDS-FIX"
|
|
208
|
+
comment: "Development worker failed."
|
|
209
|
+
|
|
210
|
+
# Stage 2: Integration (last stage releases resources + cleans worktree)
|
|
211
|
+
- name: integrate
|
|
212
|
+
trigger: "card_enters 'QA'"
|
|
213
|
+
card_state: QA
|
|
214
|
+
agent: claude
|
|
215
|
+
completion: fast-forward-merge
|
|
216
|
+
on_complete: "move_card Done"
|
|
217
|
+
on_fail:
|
|
218
|
+
action: "label MERGE-FAILED"
|
|
219
|
+
comment: "Integration merge failed."
|
|
220
|
+
queue: fifo # serialize merges to avoid conflicts
|
|
221
|
+
|
|
222
|
+
# ── Optional: Multi-stage example ────────────────────────────────
|
|
223
|
+
# Uncomment to add a code review stage between develop and integrate:
|
|
224
|
+
#
|
|
225
|
+
# - name: code-review
|
|
226
|
+
# trigger: "card_enters 'CodeReview'"
|
|
227
|
+
# card_state: CodeReview
|
|
228
|
+
# agent: claude
|
|
229
|
+
# profile: reviewer
|
|
230
|
+
# completion: exit-code
|
|
231
|
+
# on_complete: "move_card QA"
|
|
232
|
+
#
|
|
233
|
+
# Then change develop's on_complete to: "move_card CodeReview"
|
|
234
|
+
`);
|
|
235
|
+
log.ok(`Created pipelines/ with sample template`);
|
|
236
|
+
}
|
|
106
237
|
log.ok(`Project ${project} initialized at ${instanceDir}`);
|
|
107
|
-
log
|
|
108
|
-
log
|
|
109
|
-
log
|
|
110
|
-
log
|
|
111
|
-
log
|
|
238
|
+
console.log('\n Next steps:\n');
|
|
239
|
+
console.log(` 1. Create pipeline config:`);
|
|
240
|
+
console.log(` cp ${resolve(instanceDir, 'pipelines', 'sample.yaml.example')} ${resolve(instanceDir, 'pipelines', 'project.yaml')}`);
|
|
241
|
+
console.log(` vim ${resolve(instanceDir, 'pipelines', 'project.yaml')}`);
|
|
242
|
+
console.log(` Or use: sps agent --chat → "帮我创建 pipeline"`);
|
|
243
|
+
console.log('');
|
|
244
|
+
console.log(` 2. Run health check:`);
|
|
245
|
+
console.log(` sps doctor ${project} --fix`);
|
|
246
|
+
console.log('');
|
|
247
|
+
console.log(` 3. Add task cards:`);
|
|
248
|
+
console.log(` sps card add ${project} "task title" "description"`);
|
|
249
|
+
console.log('');
|
|
250
|
+
console.log(` 4. Start pipeline:`);
|
|
251
|
+
console.log(` sps tick ${project}`);
|
|
252
|
+
console.log('');
|
|
112
253
|
}
|
|
113
254
|
//# sourceMappingURL=projectInit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectInit.js","sourceRoot":"","sources":["../../src/commands/projectInit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"projectInit.js","sourceRoot":"","sources":["../../src/commands/projectInit.ts"],"names":[],"mappings":"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"}
|