specrails-core 4.11.3 → 5.0.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/README.md +96 -89
- package/bin/specrails-core.mjs +282 -39
- package/bin/tui-installer.mjs +117 -149
- package/commands/doctor.md +1 -1
- package/dist/installer/cli.js +13 -3
- package/dist/installer/cli.js.map +1 -1
- package/dist/installer/commands/doctor.js +487 -27
- package/dist/installer/commands/doctor.js.map +1 -1
- package/dist/installer/commands/framework.js +49 -7
- package/dist/installer/commands/framework.js.map +1 -1
- package/dist/installer/commands/init.js +443 -41
- package/dist/installer/commands/init.js.map +1 -1
- package/dist/installer/commands/update.js +51 -23
- package/dist/installer/commands/update.js.map +1 -1
- package/dist/installer/commands/v5-migration.js +119 -0
- package/dist/installer/commands/v5-migration.js.map +1 -0
- package/dist/installer/phases/framework-lifecycle.js +125 -0
- package/dist/installer/phases/framework-lifecycle.js.map +1 -0
- package/dist/installer/phases/install-config.js +160 -11
- package/dist/installer/phases/install-config.js.map +1 -1
- package/dist/installer/phases/manifest.js +29 -8
- package/dist/installer/phases/manifest.js.map +1 -1
- package/dist/installer/phases/prereqs.js +57 -3
- package/dist/installer/phases/prereqs.js.map +1 -1
- package/dist/installer/phases/provider-detect.js +116 -6
- package/dist/installer/phases/provider-detect.js.map +1 -1
- package/dist/installer/phases/scaffold.js +1217 -117
- package/dist/installer/phases/scaffold.js.map +1 -1
- package/dist/installer/runtime/kimi.js +255 -0
- package/dist/installer/runtime/kimi.js.map +1 -0
- package/dist/installer/util/paths.js +12 -0
- package/dist/installer/util/paths.js.map +1 -1
- package/dist/installer/util/registry.js +234 -14
- package/dist/installer/util/registry.js.map +1 -1
- package/docs/README.md +1 -0
- package/docs/deployment.md +6 -7
- package/docs/getting-started.md +11 -7
- package/docs/installation.md +34 -16
- package/docs/plugin-architecture.md +11 -8
- package/docs/updating.md +21 -3
- package/docs/user-docs/cli-reference.md +43 -22
- package/docs/user-docs/codex-vs-claude-code.md +11 -9
- package/docs/user-docs/faq.md +1 -1
- package/docs/user-docs/getting-started-codex.md +5 -8
- package/docs/user-docs/getting-started-kimi.md +423 -0
- package/docs/user-docs/installation.md +49 -14
- package/docs/user-docs/quick-start.md +11 -8
- package/docs/windows.md +29 -4
- package/integration-contract.json +85 -13
- package/package.json +9 -5
- package/schemas/profile.v1.json +68 -6
- package/templates/agents/sr-architect.md +30 -0
- package/templates/agents/sr-developer.md +21 -8
- package/templates/agents/sr-reviewer.md +44 -31
- package/templates/codex-skills/batch-implement/SKILL.md +9 -32
- package/templates/codex-skills/implement/SKILL.md +61 -143
- package/templates/codex-skills/rails/sr-architect/SKILL.md +38 -20
- package/templates/codex-skills/rails/sr-developer/SKILL.md +29 -10
- package/templates/codex-skills/rails/sr-reviewer/SKILL.md +21 -10
- package/templates/commands/specrails/doctor.md +1 -1
- package/templates/commands/specrails/implement.md +117 -288
- package/templates/commands/specrails/memory-inspect.md +6 -4
- package/templates/commands/specrails/propose-spec.md +1 -1
- package/templates/commands/specrails/refactor-recommender.md +8 -51
- package/templates/commands/specrails/retry.md +12 -48
- package/templates/commands/specrails/telemetry.md +1 -1
- package/templates/gemini-commands/implement.toml +9 -0
- package/templates/kimi/specrails/run-skill.mjs +3005 -0
- package/templates/kimi/specrails/vendor/js-yaml/LICENSE +21 -0
- package/templates/kimi/specrails/vendor/js-yaml/NOTICE.md +16 -0
- package/templates/kimi/specrails/vendor/js-yaml/js-yaml.mjs +3856 -0
- package/templates/profiles/default.json +5 -18
- package/templates/profiles/kimi-default.json +15 -0
- package/commands/enrich.md +0 -1456
- package/templates/agents/sr-backend-developer.md +0 -91
- package/templates/agents/sr-backend-reviewer.md +0 -152
- package/templates/agents/sr-doc-sync.md +0 -247
- package/templates/agents/sr-frontend-developer.md +0 -85
- package/templates/agents/sr-frontend-reviewer.md +0 -145
- package/templates/agents/sr-merge-resolver.md +0 -195
- package/templates/agents/sr-performance-reviewer.md +0 -186
- package/templates/agents/sr-product-analyst.md +0 -36
- package/templates/agents/sr-product-manager.md +0 -148
- package/templates/agents/sr-security-reviewer.md +0 -191
- package/templates/agents/sr-test-writer.md +0 -176
- package/templates/codex-skills/enrich/SKILL.md +0 -191
- package/templates/codex-skills/merge-resolve/SKILL.md +0 -88
- package/templates/codex-skills/rails/sr-backend-developer/SKILL.md +0 -93
- package/templates/codex-skills/rails/sr-backend-reviewer/SKILL.md +0 -120
- package/templates/codex-skills/rails/sr-doc-sync/SKILL.md +0 -124
- package/templates/codex-skills/rails/sr-frontend-developer/SKILL.md +0 -106
- package/templates/codex-skills/rails/sr-frontend-reviewer/SKILL.md +0 -111
- package/templates/codex-skills/rails/sr-merge-resolver/SKILL.md +0 -156
- package/templates/codex-skills/rails/sr-performance-reviewer/SKILL.md +0 -109
- package/templates/codex-skills/rails/sr-product-analyst/SKILL.md +0 -85
- package/templates/codex-skills/rails/sr-product-manager/SKILL.md +0 -131
- package/templates/codex-skills/rails/sr-security-reviewer/SKILL.md +0 -121
- package/templates/codex-skills/rails/sr-test-writer/SKILL.md +0 -115
- package/templates/commands/specrails/auto-propose-backlog-specs.md +0 -312
- package/templates/commands/specrails/enrich.md +0 -1456
- package/templates/commands/specrails/get-backlog-specs.md +0 -226
- package/templates/commands/specrails/merge-resolve.md +0 -172
- package/templates/commands/specrails/reconfig.md +0 -80
- package/templates/commands/specrails/vpc-drift.md +0 -405
- package/templates/commands/test.md +0 -58
- package/templates/personas/persona.md +0 -43
- package/templates/personas/the-maintainer.md +0 -98
- package/templates/settings/perf-thresholds.yml +0 -25
|
@@ -1,14 +1,102 @@
|
|
|
1
|
+
import { copyFileSync, lstatSync, mkdirSync, mkdtempSync, readdirSync, realpathSync, renameSync, rmSync, } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
1
3
|
import path from 'node:path';
|
|
2
4
|
import { fileURLToPath } from 'node:url';
|
|
3
5
|
import { InstallerError } from '../util/errors.js';
|
|
4
6
|
import { runCommand } from '../util/exec.js';
|
|
5
|
-
import { info, ok, step } from '../util/logger.js';
|
|
6
|
-
import {
|
|
7
|
+
import { info, ok, step, warn } from '../util/logger.js';
|
|
8
|
+
import { isDir, isSymlink, listDir, pathExists, readTextFile, removePath, writeFileLf, } from '../util/fs.js';
|
|
7
9
|
import { loadInstallConfig, resolveConfigPath, } from '../phases/install-config.js';
|
|
8
10
|
import { checkPrerequisites } from '../phases/prereqs.js';
|
|
9
11
|
import { derivedPaths } from '../phases/provider-detect.js';
|
|
10
|
-
import {
|
|
12
|
+
import { materializeFrameworkVersion } from '../phases/framework-lifecycle.js';
|
|
13
|
+
import { CORE_AGENTS, assembleProjectWorkspace, installFramework, } from '../phases/scaffold.js';
|
|
11
14
|
import { frameworkRoot, resolveArtifacts } from '../util/registry.js';
|
|
15
|
+
const WORKSPACE_PROVIDER_ORDER = [
|
|
16
|
+
'claude',
|
|
17
|
+
'codex',
|
|
18
|
+
'gemini',
|
|
19
|
+
'kimi',
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Snapshot the provider/role inventory exposed by one live workspace before a
|
|
23
|
+
* global framework version swap. This matters on Windows: directory junctions
|
|
24
|
+
* resolve their target when they are created, so a workspace link made through
|
|
25
|
+
* `framework/current` must be recreated after `current` moves. Keeping the
|
|
26
|
+
* exact visible `sr-*` set also avoids widening or narrowing a project's
|
|
27
|
+
* optional role selection during that refresh.
|
|
28
|
+
*/
|
|
29
|
+
export function snapshotWorkspaceProviderSelections(workspace) {
|
|
30
|
+
const selections = {};
|
|
31
|
+
for (const provider of WORKSPACE_PROVIDER_ORDER) {
|
|
32
|
+
const { providerDir } = derivedPaths(provider);
|
|
33
|
+
const providerRoot = path.join(workspace, providerDir);
|
|
34
|
+
if (!pathExists(providerRoot) ||
|
|
35
|
+
!workspaceHasManagedProviderLink(providerRoot, provider)) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const roleRoot = provider === 'codex'
|
|
39
|
+
? path.join(workspace, providerDir, 'skills', 'rails')
|
|
40
|
+
: provider === 'kimi'
|
|
41
|
+
? path.join(workspace, providerDir, 'skills')
|
|
42
|
+
: path.join(workspace, providerDir, 'agents');
|
|
43
|
+
const ids = listDir(roleRoot)
|
|
44
|
+
.filter((entry) => provider === 'claude' || provider === 'gemini'
|
|
45
|
+
? path.basename(entry).endsWith('.md')
|
|
46
|
+
: isDir(entry))
|
|
47
|
+
.map((entry) => {
|
|
48
|
+
const name = path.basename(entry);
|
|
49
|
+
return name.endsWith('.md') ? name.slice(0, -3) : name;
|
|
50
|
+
})
|
|
51
|
+
.filter((id) => /^sr-[a-z0-9-]+$/.test(id));
|
|
52
|
+
selections[provider] = [...new Set(ids)].sort();
|
|
53
|
+
}
|
|
54
|
+
return selections;
|
|
55
|
+
}
|
|
56
|
+
function workspaceHasManagedProviderLink(providerRoot, provider) {
|
|
57
|
+
const directoryLinks = provider === 'claude'
|
|
58
|
+
? ['commands', 'skills', 'rules']
|
|
59
|
+
: provider === 'codex'
|
|
60
|
+
? ['skills']
|
|
61
|
+
: provider === 'gemini'
|
|
62
|
+
? ['commands']
|
|
63
|
+
: ['rules', 'specrails'];
|
|
64
|
+
if (directoryLinks.some((relative) => isSymlink(path.join(providerRoot, relative)))) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
const granularRoot = provider === 'kimi'
|
|
68
|
+
? path.join(providerRoot, 'skills')
|
|
69
|
+
: path.join(providerRoot, 'agents');
|
|
70
|
+
return listDir(granularRoot).some((entry) => isSymlink(entry));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Refresh every provider already represented in the project plus the provider
|
|
74
|
+
* selected by the current operation. POSIX symlinks continue to follow
|
|
75
|
+
* `framework/current`; Windows junctions do not reliably preserve that
|
|
76
|
+
* indirection, so rebuilding all live links is required for true
|
|
77
|
+
* multi-provider version parity.
|
|
78
|
+
*/
|
|
79
|
+
export function reassembleWorkspaceProviders(input) {
|
|
80
|
+
const providers = WORKSPACE_PROVIDER_ORDER.filter((provider) => provider === input.selectedProvider ||
|
|
81
|
+
Object.prototype.hasOwnProperty.call(input.previousSelections, provider));
|
|
82
|
+
for (const provider of providers) {
|
|
83
|
+
const { providerDir } = derivedPaths(provider);
|
|
84
|
+
assembleProjectWorkspace({
|
|
85
|
+
workspace: input.workspace,
|
|
86
|
+
frameworkDir: input.frameworkDir,
|
|
87
|
+
provider,
|
|
88
|
+
providerDir,
|
|
89
|
+
version: input.version,
|
|
90
|
+
codeRoot: input.codeRoot,
|
|
91
|
+
scriptDir: input.scriptDir,
|
|
92
|
+
selectedAgents: provider === input.selectedProvider
|
|
93
|
+
? input.selectedAgents ?? input.previousSelections[provider]
|
|
94
|
+
: input.previousSelections[provider],
|
|
95
|
+
copyStatics: input.copyStatics,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return providers;
|
|
99
|
+
}
|
|
12
100
|
/**
|
|
13
101
|
* Entry called by cli.ts. Returns a {@link InitResult} on success;
|
|
14
102
|
* throws a typed error (translated to an exit code by the outer CLI)
|
|
@@ -18,36 +106,43 @@ export async function runInit(flags) {
|
|
|
18
106
|
const scriptDir = resolveScriptDir();
|
|
19
107
|
const version = readVersion(scriptDir);
|
|
20
108
|
const repoRoot = path.resolve(typeof flags['root-dir'] === 'string' ? flags['root-dir'] : process.cwd());
|
|
21
|
-
const autoYes = flags.yes === true;
|
|
109
|
+
const autoYes = flags.yes === true || flags.y === true;
|
|
22
110
|
const skipPrereqs = process.env.SPECRAILS_SKIP_PREREQS === '1';
|
|
23
|
-
//
|
|
111
|
+
// Validate an explicit provider before consulting --from-config. The TUI
|
|
112
|
+
// intentionally re-enters init with BOTH flags; accepting that flow is safe
|
|
113
|
+
// only when the generated config agrees with the original explicit choice.
|
|
114
|
+
let explicitProvider;
|
|
115
|
+
if (flags.provider !== undefined) {
|
|
116
|
+
if (typeof flags.provider !== 'string' ||
|
|
117
|
+
(flags.provider !== 'claude' &&
|
|
118
|
+
flags.provider !== 'codex' &&
|
|
119
|
+
flags.provider !== 'gemini' &&
|
|
120
|
+
flags.provider !== 'kimi')) {
|
|
121
|
+
throw new InstallerError(`--provider value must be 'claude', 'codex', 'gemini', or 'kimi', got: ${String(flags.provider)}`, 40);
|
|
122
|
+
}
|
|
123
|
+
explicitProvider = flags.provider;
|
|
124
|
+
}
|
|
125
|
+
// --from-config: read provider + agents from yaml.
|
|
24
126
|
const fromConfigFlag = flags['from-config'];
|
|
25
|
-
let providerHint;
|
|
26
|
-
let tierHint;
|
|
127
|
+
let providerHint = explicitProvider;
|
|
27
128
|
let selectedAgentsHint;
|
|
28
129
|
if (fromConfigFlag !== undefined) {
|
|
29
130
|
const explicitPath = typeof fromConfigFlag === 'string' ? fromConfigFlag : undefined;
|
|
30
131
|
const resolved = resolveConfigPath(repoRoot, explicitPath);
|
|
31
132
|
const config = loadInstallConfig(resolved);
|
|
32
133
|
if (config) {
|
|
134
|
+
if (explicitProvider && explicitProvider !== config.provider) {
|
|
135
|
+
throw new InstallerError(`--provider '${explicitProvider}' conflicts with provider '${config.provider}' in ${resolved}`, 40);
|
|
136
|
+
}
|
|
33
137
|
providerHint = config.provider;
|
|
34
|
-
tierHint = config.tier;
|
|
35
138
|
selectedAgentsHint = config.agents.selected;
|
|
36
139
|
info(`Loaded install config from ${resolved}`);
|
|
140
|
+
warnUnknownSelectedAgents(selectedAgentsHint);
|
|
37
141
|
}
|
|
38
142
|
else {
|
|
39
|
-
info(`install-config.yaml not found at ${resolved} — falling back to auto-detection`);
|
|
143
|
+
info(`install-config.yaml not found at ${resolved} — falling back to ${explicitProvider ? `explicit provider '${explicitProvider}'` : 'auto-detection'}`);
|
|
40
144
|
}
|
|
41
145
|
}
|
|
42
|
-
else if (typeof flags.provider === 'string') {
|
|
43
|
-
if (flags.provider !== 'claude' && flags.provider !== 'codex' && flags.provider !== 'gemini') {
|
|
44
|
-
throw new InstallerError(`--provider value must be 'claude', 'codex', or 'gemini', got: ${flags.provider}`, 40);
|
|
45
|
-
}
|
|
46
|
-
providerHint = flags.provider;
|
|
47
|
-
}
|
|
48
|
-
if (flags.quick === true) {
|
|
49
|
-
tierHint = 'quick';
|
|
50
|
-
}
|
|
51
146
|
// ─── Phase 1 ──────────────────────────────────────────────────────────
|
|
52
147
|
step('Phase 1: Checking prerequisites');
|
|
53
148
|
const prereqs = await checkPrerequisites({
|
|
@@ -75,8 +170,21 @@ export async function runInit(flags) {
|
|
|
75
170
|
providers: [prereqs.provider],
|
|
76
171
|
coreVersion: version,
|
|
77
172
|
});
|
|
173
|
+
// An existing Core-owned relocated entry is also the durable provider
|
|
174
|
+
// inventory. Merge this install's provider without reallocating legacy
|
|
175
|
+
// in-repo installs; Desktop-owned entries remain read-only in the resolver.
|
|
176
|
+
if (artifactRoot !== codeRoot) {
|
|
177
|
+
resolveArtifacts(repoRoot, {
|
|
178
|
+
allocate: true,
|
|
179
|
+
allocator: 'core-standalone',
|
|
180
|
+
home: process.env.SPECRAILS_REGISTRY_HOME,
|
|
181
|
+
providers: [prereqs.provider],
|
|
182
|
+
coreVersion: version,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
78
185
|
// In-repo when the resolution did NOT relocate the artifacts out of the repo.
|
|
79
186
|
const inRepo = artifactRoot === codeRoot;
|
|
187
|
+
const previousSelections = snapshotWorkspaceProviderSelections(artifactRoot);
|
|
80
188
|
// ─── Phase 2 + 3 ──────────────────────────────────────────────────────
|
|
81
189
|
// Bundled-framework flow: materialize the provider-INVARIANT framework ONCE
|
|
82
190
|
// under `<home>/.specrails/framework/<version>/<providerDir>/`, point `current`
|
|
@@ -94,15 +202,15 @@ export async function runInit(flags) {
|
|
|
94
202
|
version,
|
|
95
203
|
selectedAgents: selectedAgentsHint,
|
|
96
204
|
});
|
|
97
|
-
|
|
205
|
+
reassembleWorkspaceProviders({
|
|
98
206
|
workspace: artifactRoot,
|
|
99
207
|
frameworkDir: fwDir,
|
|
100
|
-
provider: prereqs.provider,
|
|
101
|
-
providerDir,
|
|
102
208
|
version,
|
|
103
209
|
codeRoot,
|
|
104
210
|
scriptDir,
|
|
211
|
+
selectedProvider: prereqs.provider,
|
|
105
212
|
selectedAgents: selectedAgentsHint,
|
|
213
|
+
previousSelections,
|
|
106
214
|
// In-repo: COPY the framework statics as real, committable files. Relocated:
|
|
107
215
|
// symlink from the framework store (O(1) update on a version swap).
|
|
108
216
|
copyStatics: inRepo,
|
|
@@ -114,16 +222,10 @@ export async function runInit(flags) {
|
|
|
114
222
|
ok(`Linked ${providerDir}/ from framework ${version} + seeded project layer`);
|
|
115
223
|
}
|
|
116
224
|
// openspec STAYS in the repo (codeRoot) — unchanged behaviour.
|
|
117
|
-
await installOpenSpecProject(codeRoot, prereqs.provider);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
info('Run `/specrails:enrich` inside Claude Code to complete your setup.');
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
step('Installation complete');
|
|
125
|
-
info('Quick tier: agents + rules were placed directly; enrich not required.');
|
|
126
|
-
}
|
|
225
|
+
await installOpenSpecProject(codeRoot, prereqs.provider, artifactRoot);
|
|
226
|
+
step('Installation complete');
|
|
227
|
+
info('Agents, commands, and rules were placed directly — no follow-up step required.');
|
|
228
|
+
info('Extend the core trio (sr-architect, sr-developer, sr-reviewer) via profiles + custom-*.md agents.');
|
|
127
229
|
// Terminal sentinel for programmatic consumers (specrails-desktop's setup
|
|
128
230
|
// wizard matches this exact line via regex to mark the "init complete"
|
|
129
231
|
// checkpoint). The sentinel line below is FROZEN — the downstream setup
|
|
@@ -132,9 +234,24 @@ export async function runInit(flags) {
|
|
|
132
234
|
return {
|
|
133
235
|
repoRoot,
|
|
134
236
|
provider: prereqs.provider,
|
|
135
|
-
tier,
|
|
136
237
|
};
|
|
137
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Warn (once per id) about `agents.selected` entries that have no shipped
|
|
241
|
+
* template — typically a pre-v5 install-config.yaml still listing removed
|
|
242
|
+
* agents. They are skipped at placement; the warning tells the user why and
|
|
243
|
+
* points at the v5 extension path.
|
|
244
|
+
*/
|
|
245
|
+
export function warnUnknownSelectedAgents(selected) {
|
|
246
|
+
if (!selected)
|
|
247
|
+
return;
|
|
248
|
+
for (const id of selected) {
|
|
249
|
+
if (!CORE_AGENTS.has(id)) {
|
|
250
|
+
warn(`install-config.yaml selects agent '${id}', which specrails-core no longer ships — ` +
|
|
251
|
+
`skipping (removed in v5; use a .claude/agents/custom-*.md agent declared in a profile).`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
138
255
|
/**
|
|
139
256
|
* Materialize the framework for `(version, provider)` if absent and (by default)
|
|
140
257
|
* point `<frameworkDir>/current` at that version. Idempotent — `installFramework`
|
|
@@ -148,17 +265,28 @@ export async function runInit(flags) {
|
|
|
148
265
|
* ensureCurrentSymlink(frameworkDir, version) // single atomic swap at the end
|
|
149
266
|
*/
|
|
150
267
|
export function ensureFramework(input) {
|
|
151
|
-
|
|
268
|
+
if (input.swapCurrent === false) {
|
|
269
|
+
installFramework({
|
|
270
|
+
scriptDir: input.scriptDir,
|
|
271
|
+
frameworkDir: input.frameworkDir,
|
|
272
|
+
provider: input.provider,
|
|
273
|
+
providerDir: input.providerDir,
|
|
274
|
+
version: input.version,
|
|
275
|
+
selectedAgents: input.selectedAgents,
|
|
276
|
+
});
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
// `current` is global, not scoped to this project/provider. Carry forward the
|
|
280
|
+
// requested provider, every globally registered provider, and every provider
|
|
281
|
+
// represented by the old current version; materialize all without swapping,
|
|
282
|
+
// validate the complete destination, then move the pointer exactly once.
|
|
283
|
+
materializeFrameworkVersion({
|
|
152
284
|
scriptDir: input.scriptDir,
|
|
153
285
|
frameworkDir: input.frameworkDir,
|
|
154
|
-
provider: input.provider,
|
|
155
|
-
providerDir: input.providerDir,
|
|
156
286
|
version: input.version,
|
|
157
|
-
|
|
287
|
+
requested: [input.provider, ...(input.requiredProviders ?? [])],
|
|
288
|
+
registryHome: input.registryHome,
|
|
158
289
|
});
|
|
159
|
-
if (input.swapCurrent !== false) {
|
|
160
|
-
ensureCurrentSymlink(input.frameworkDir, input.version);
|
|
161
|
-
}
|
|
162
290
|
}
|
|
163
291
|
/**
|
|
164
292
|
* Resolves the package root (where VERSION, templates/, commands/ live).
|
|
@@ -225,7 +353,9 @@ function readPinnedVersion(scriptDir, key, fallback) {
|
|
|
225
353
|
export function buildOpenSpecInvocation(repoRoot, provider, env = process.env, pinnedVersion = readPinnedVersion(resolveScriptDir(), 'openspec', '1.4.1')) {
|
|
226
354
|
const bin = env.SPECRAILS_OPENSPEC_BIN;
|
|
227
355
|
const node = env.SPECRAILS_OPENSPEC_NODE;
|
|
228
|
-
const initArgs =
|
|
356
|
+
const initArgs = provider === 'kimi'
|
|
357
|
+
? ['init', '--tools', provider, '--profile', 'custom', repoRoot]
|
|
358
|
+
: ['init', '--tools', provider, repoRoot];
|
|
229
359
|
if (bin && node) {
|
|
230
360
|
// Form 1: bundled offline — run the node CLI through the given node exe.
|
|
231
361
|
return { bin: node, args: [bin, ...initArgs] };
|
|
@@ -247,22 +377,294 @@ export function buildOpenSpecInvocation(repoRoot, provider, env = process.env, p
|
|
|
247
377
|
],
|
|
248
378
|
};
|
|
249
379
|
}
|
|
250
|
-
|
|
380
|
+
export const KIMI_REQUIRED_OPENSPEC_SKILLS = [
|
|
381
|
+
'openspec-propose',
|
|
382
|
+
'openspec-explore',
|
|
383
|
+
'openspec-new-change',
|
|
384
|
+
'openspec-continue-change',
|
|
385
|
+
'openspec-apply-change',
|
|
386
|
+
'openspec-ff-change',
|
|
387
|
+
'openspec-sync-specs',
|
|
388
|
+
'openspec-archive-change',
|
|
389
|
+
'openspec-bulk-archive-change',
|
|
390
|
+
'openspec-verify-change',
|
|
391
|
+
'openspec-onboard',
|
|
392
|
+
];
|
|
393
|
+
const OPENSPEC_ALL_WORKFLOWS = [
|
|
394
|
+
'propose',
|
|
395
|
+
'explore',
|
|
396
|
+
'new',
|
|
397
|
+
'continue',
|
|
398
|
+
'apply',
|
|
399
|
+
'ff',
|
|
400
|
+
'sync',
|
|
401
|
+
'archive',
|
|
402
|
+
'bulk-archive',
|
|
403
|
+
'verify',
|
|
404
|
+
'onboard',
|
|
405
|
+
];
|
|
406
|
+
/**
|
|
407
|
+
* Move only OpenSpec-owned Kimi workflow directories from either upstream
|
|
408
|
+
* location into the artifact workspace. Every destination is copied to a
|
|
409
|
+
* sibling temporary directory and renamed, so readers never observe a partial
|
|
410
|
+
* skill. A distinct newly generated source refreshes the managed destination;
|
|
411
|
+
* an in-place corrected destination is retained as-is.
|
|
412
|
+
*/
|
|
413
|
+
export function normalizeKimiOpenSpecSkills(repoRoot, artifactRoot) {
|
|
414
|
+
const canonicalRepoRoot = realpathSync(repoRoot);
|
|
415
|
+
const canonicalArtifactRoot = ensureRealDirectoryPath(artifactRoot);
|
|
416
|
+
const destinationRoot = ensureRealDirectoryPath(path.join(canonicalArtifactRoot, '.kimi-code', 'skills'));
|
|
417
|
+
const correctedSourceRoot = path.join(canonicalRepoRoot, '.kimi-code', 'skills');
|
|
418
|
+
const legacySourceRoot = path.join(canonicalRepoRoot, '.kimi', 'skills');
|
|
419
|
+
const correctedIsDestination = path.resolve(correctedSourceRoot) === path.resolve(destinationRoot);
|
|
420
|
+
const installed = [];
|
|
421
|
+
const sources = new Map();
|
|
422
|
+
// Validate the full inventory before mutating either tree.
|
|
423
|
+
for (const skillName of KIMI_REQUIRED_OPENSPEC_SKILLS) {
|
|
424
|
+
const destination = path.join(destinationRoot, skillName);
|
|
425
|
+
const correctedSource = path.join(correctedSourceRoot, skillName);
|
|
426
|
+
const legacySource = path.join(legacySourceRoot, skillName);
|
|
427
|
+
const sourceCandidate = !correctedIsDestination && pathExists(path.join(correctedSource, 'SKILL.md'))
|
|
428
|
+
? correctedSource
|
|
429
|
+
: pathExists(path.join(legacySource, 'SKILL.md'))
|
|
430
|
+
? legacySource
|
|
431
|
+
: null;
|
|
432
|
+
const source = sourceCandidate === null
|
|
433
|
+
? null
|
|
434
|
+
: validateSafeSkillTree(sourceCandidate, skillName);
|
|
435
|
+
sources.set(skillName, source);
|
|
436
|
+
if (source) {
|
|
437
|
+
validateReplaceableDestination(destination, skillName);
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
if (lstatExists(destination)) {
|
|
441
|
+
validateSafeSkillTree(destination, skillName);
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
if (pathExists(destination)) {
|
|
445
|
+
throw new InstallerError(`Kimi OpenSpec skill ${skillName} exists without SKILL.md; refusing to overwrite it`, 50);
|
|
446
|
+
}
|
|
447
|
+
throw new InstallerError(`OpenSpec did not generate required Kimi skill ${skillName}; ` +
|
|
448
|
+
'retry `npx specrails-core update --provider kimi`', 50);
|
|
449
|
+
}
|
|
450
|
+
for (const skillName of KIMI_REQUIRED_OPENSPEC_SKILLS) {
|
|
451
|
+
const destination = path.join(destinationRoot, skillName);
|
|
452
|
+
const source = sources.get(skillName) ?? null;
|
|
453
|
+
if (source) {
|
|
454
|
+
const temporary = mkdtempSync(path.join(destinationRoot, `.${skillName}.specrails-tmp-`));
|
|
455
|
+
const backupContainer = mkdtempSync(path.join(destinationRoot, `.${skillName}.specrails-backup-`));
|
|
456
|
+
const backup = path.join(backupContainer, 'previous');
|
|
457
|
+
copyValidatedSkillTree(source, temporary);
|
|
458
|
+
try {
|
|
459
|
+
validateSafeSkillTree(temporary, skillName);
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
removePath(temporary);
|
|
463
|
+
removePath(backupContainer);
|
|
464
|
+
throw error;
|
|
465
|
+
}
|
|
466
|
+
const hadDestination = lstatExists(destination);
|
|
467
|
+
try {
|
|
468
|
+
if (hadDestination)
|
|
469
|
+
renameSync(destination, backup);
|
|
470
|
+
renameSync(temporary, destination);
|
|
471
|
+
removePath(backupContainer);
|
|
472
|
+
}
|
|
473
|
+
catch (err) {
|
|
474
|
+
removePath(temporary);
|
|
475
|
+
if (!lstatExists(destination) && lstatExists(backup)) {
|
|
476
|
+
renameSync(backup, destination);
|
|
477
|
+
}
|
|
478
|
+
removePath(backupContainer);
|
|
479
|
+
throw err;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
installed.push(skillName);
|
|
483
|
+
}
|
|
484
|
+
// Remove only the generated, known workflow directories after every
|
|
485
|
+
// destination has been validated. Unknown/user content keeps both trees.
|
|
486
|
+
for (const skillName of KIMI_REQUIRED_OPENSPEC_SKILLS) {
|
|
487
|
+
const legacy = path.join(legacySourceRoot, skillName);
|
|
488
|
+
if (path.resolve(legacy) !== path.resolve(path.join(destinationRoot, skillName))) {
|
|
489
|
+
removePath(legacy);
|
|
490
|
+
}
|
|
491
|
+
if (path.resolve(correctedSourceRoot) !== path.resolve(destinationRoot)) {
|
|
492
|
+
removePath(path.join(correctedSourceRoot, skillName));
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
removeDirectoryIfEmpty(legacySourceRoot);
|
|
496
|
+
removeDirectoryIfEmpty(path.dirname(legacySourceRoot));
|
|
497
|
+
if (path.resolve(correctedSourceRoot) !== path.resolve(destinationRoot)) {
|
|
498
|
+
removeDirectoryIfEmpty(correctedSourceRoot);
|
|
499
|
+
removeDirectoryIfEmpty(path.dirname(correctedSourceRoot));
|
|
500
|
+
}
|
|
501
|
+
return installed;
|
|
502
|
+
}
|
|
503
|
+
function lstatExists(target) {
|
|
504
|
+
try {
|
|
505
|
+
lstatSync(target);
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
catch {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Create a directory tree without ever traversing a caller-controlled symlink.
|
|
514
|
+
* Existing ancestor aliases (for example macOS `/var` → `/private/var`) are
|
|
515
|
+
* canonicalized once; every newly appended component must then be a real dir.
|
|
516
|
+
*/
|
|
517
|
+
function ensureRealDirectoryPath(directory) {
|
|
518
|
+
const absolute = path.resolve(directory);
|
|
519
|
+
const missing = [];
|
|
520
|
+
let anchor = absolute;
|
|
521
|
+
while (!lstatExists(anchor)) {
|
|
522
|
+
const parent = path.dirname(anchor);
|
|
523
|
+
if (parent === anchor) {
|
|
524
|
+
throw new InstallerError(`cannot resolve directory root for ${absolute}`, 50);
|
|
525
|
+
}
|
|
526
|
+
missing.unshift(path.basename(anchor));
|
|
527
|
+
anchor = parent;
|
|
528
|
+
}
|
|
529
|
+
const anchorMetadata = lstatSync(anchor);
|
|
530
|
+
if (!anchorMetadata.isDirectory() ||
|
|
531
|
+
anchorMetadata.isSymbolicLink()) {
|
|
532
|
+
throw new InstallerError(`Kimi OpenSpec destination must be a real directory: ${absolute}`, 50);
|
|
533
|
+
}
|
|
534
|
+
let cursor = realpathSync(anchor);
|
|
535
|
+
for (const component of missing) {
|
|
536
|
+
cursor = path.join(cursor, component);
|
|
537
|
+
if (!lstatExists(cursor))
|
|
538
|
+
mkdirSync(cursor, { mode: 0o700 });
|
|
539
|
+
const metadata = lstatSync(cursor);
|
|
540
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
|
|
541
|
+
throw new InstallerError(`Kimi OpenSpec destination parent must not be a symlink: ${cursor}`, 50);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
return cursor;
|
|
545
|
+
}
|
|
546
|
+
function validateReplaceableDestination(destination, skillName) {
|
|
547
|
+
if (!lstatExists(destination))
|
|
548
|
+
return;
|
|
549
|
+
const metadata = lstatSync(destination);
|
|
550
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
|
|
551
|
+
throw new InstallerError(`Kimi OpenSpec destination ${skillName} must be a real directory`, 50);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
function validateSafeSkillTree(source, skillName) {
|
|
555
|
+
let canonicalRoot;
|
|
556
|
+
try {
|
|
557
|
+
const rootMetadata = lstatSync(source);
|
|
558
|
+
if (!rootMetadata.isDirectory() || rootMetadata.isSymbolicLink()) {
|
|
559
|
+
throw new Error('skill root is not a real directory');
|
|
560
|
+
}
|
|
561
|
+
canonicalRoot = realpathSync(source);
|
|
562
|
+
}
|
|
563
|
+
catch (error) {
|
|
564
|
+
throw new InstallerError(`unsafe Kimi OpenSpec skill ${skillName}: ${error.message}`, 50);
|
|
565
|
+
}
|
|
566
|
+
const walk = (directory) => {
|
|
567
|
+
for (const name of readdirSync(directory)) {
|
|
568
|
+
const entry = path.join(directory, name);
|
|
569
|
+
const metadata = lstatSync(entry);
|
|
570
|
+
if (metadata.isSymbolicLink()) {
|
|
571
|
+
throw new InstallerError(`unsafe Kimi OpenSpec skill ${skillName}: symlink ${entry}`, 50);
|
|
572
|
+
}
|
|
573
|
+
const relative = path.relative(canonicalRoot, realpathSync(entry));
|
|
574
|
+
if (relative === '..' ||
|
|
575
|
+
relative.startsWith(`..${path.sep}`) ||
|
|
576
|
+
path.isAbsolute(relative)) {
|
|
577
|
+
throw new InstallerError(`unsafe Kimi OpenSpec skill ${skillName}: path escapes source`, 50);
|
|
578
|
+
}
|
|
579
|
+
if (metadata.isDirectory()) {
|
|
580
|
+
walk(entry);
|
|
581
|
+
}
|
|
582
|
+
else if (!metadata.isFile()) {
|
|
583
|
+
throw new InstallerError(`unsafe Kimi OpenSpec skill ${skillName}: unsupported file type ${entry}`, 50);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
};
|
|
587
|
+
walk(canonicalRoot);
|
|
588
|
+
const skillFile = path.join(canonicalRoot, 'SKILL.md');
|
|
589
|
+
if (!lstatExists(skillFile)) {
|
|
590
|
+
throw new InstallerError(`generated Kimi skill ${skillName} is missing SKILL.md`, 50);
|
|
591
|
+
}
|
|
592
|
+
const skillMetadata = lstatSync(skillFile);
|
|
593
|
+
if (!skillMetadata.isFile() || skillMetadata.isSymbolicLink()) {
|
|
594
|
+
throw new InstallerError(`generated Kimi skill ${skillName} has unsafe SKILL.md`, 50);
|
|
595
|
+
}
|
|
596
|
+
return canonicalRoot;
|
|
597
|
+
}
|
|
598
|
+
function copyValidatedSkillTree(source, destination) {
|
|
599
|
+
for (const name of readdirSync(source)) {
|
|
600
|
+
const from = path.join(source, name);
|
|
601
|
+
const to = path.join(destination, name);
|
|
602
|
+
const metadata = lstatSync(from);
|
|
603
|
+
if (metadata.isSymbolicLink()) {
|
|
604
|
+
throw new InstallerError(`refusing to copy Kimi OpenSpec symlink ${from}`, 50);
|
|
605
|
+
}
|
|
606
|
+
if (metadata.isDirectory()) {
|
|
607
|
+
mkdirSync(to, { mode: 0o700 });
|
|
608
|
+
copyValidatedSkillTree(from, to);
|
|
609
|
+
}
|
|
610
|
+
else if (metadata.isFile()) {
|
|
611
|
+
copyFileSync(from, to);
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
throw new InstallerError(`refusing to copy unsupported Kimi OpenSpec file ${from}`, 50);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
function removeDirectoryIfEmpty(dir) {
|
|
619
|
+
if (isDir(dir) && listDir(dir).length === 0)
|
|
620
|
+
removePath(dir);
|
|
621
|
+
}
|
|
622
|
+
export async function installOpenSpecProject(repoRoot, provider, artifactRoot = repoRoot) {
|
|
251
623
|
if (process.env.SPECRAILS_SKIP_OPENSPEC_INIT === '1') {
|
|
624
|
+
if (provider === 'kimi') {
|
|
625
|
+
const generatedRoots = [
|
|
626
|
+
path.join(repoRoot, '.kimi', 'skills'),
|
|
627
|
+
path.join(repoRoot, '.kimi-code', 'skills'),
|
|
628
|
+
];
|
|
629
|
+
const hasGeneratedOutput = generatedRoots.some((root) => listDir(root).some((entry) => isDir(entry) && path.basename(entry).startsWith('openspec-')));
|
|
630
|
+
if (hasGeneratedOutput)
|
|
631
|
+
normalizeKimiOpenSpecSkills(repoRoot, artifactRoot);
|
|
632
|
+
}
|
|
252
633
|
info('Skipping OpenSpec project init (SPECRAILS_SKIP_OPENSPEC_INIT=1)');
|
|
253
634
|
return;
|
|
254
635
|
}
|
|
255
636
|
const { bin, args } = buildOpenSpecInvocation(repoRoot, provider);
|
|
637
|
+
let temporaryConfigHome = null;
|
|
638
|
+
let commandEnv;
|
|
639
|
+
if (provider === 'kimi') {
|
|
640
|
+
temporaryConfigHome = mkdtempSync(path.join(os.tmpdir(), 'specrails-openspec-kimi-'));
|
|
641
|
+
writeFileLf(path.join(temporaryConfigHome, 'openspec', 'config.json'), `${JSON.stringify({
|
|
642
|
+
profile: 'custom',
|
|
643
|
+
delivery: 'skills',
|
|
644
|
+
workflows: OPENSPEC_ALL_WORKFLOWS,
|
|
645
|
+
featureFlags: {},
|
|
646
|
+
}, null, 2)}\n`);
|
|
647
|
+
commandEnv = { ...process.env, XDG_CONFIG_HOME: temporaryConfigHome };
|
|
648
|
+
}
|
|
256
649
|
step('Phase 3c: Installing OpenSpec');
|
|
257
650
|
try {
|
|
258
651
|
await runCommand(bin, args, {
|
|
259
652
|
cwd: repoRoot,
|
|
260
653
|
timeoutMs: 180000,
|
|
654
|
+
env: commandEnv,
|
|
261
655
|
});
|
|
656
|
+
if (provider === 'kimi') {
|
|
657
|
+
normalizeKimiOpenSpecSkills(repoRoot, artifactRoot);
|
|
658
|
+
}
|
|
262
659
|
ok(`OpenSpec project files installed (${provider})`);
|
|
263
660
|
}
|
|
264
661
|
catch (err) {
|
|
265
662
|
throw new InstallerError(`OpenSpec init failed: ${err.message}`, 50);
|
|
266
663
|
}
|
|
664
|
+
finally {
|
|
665
|
+
if (temporaryConfigHome) {
|
|
666
|
+
rmSync(temporaryConfigHome, { recursive: true, force: true });
|
|
667
|
+
}
|
|
668
|
+
}
|
|
267
669
|
}
|
|
268
670
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/installer/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/installer/commands/init.ts"],"names":[],"mappings":"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"}
|