specrails-core 4.8.2 → 4.9.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/bin/specrails-core.mjs +5 -1
- package/dist/installer/cli.js +46 -6
- package/dist/installer/cli.js.map +1 -1
- package/dist/installer/commands/doctor.js +14 -5
- package/dist/installer/commands/doctor.js.map +1 -1
- package/dist/installer/commands/framework.js +134 -0
- package/dist/installer/commands/framework.js.map +1 -0
- package/dist/installer/commands/init.js +107 -32
- package/dist/installer/commands/init.js.map +1 -1
- package/dist/installer/commands/update.js +60 -34
- package/dist/installer/commands/update.js.map +1 -1
- package/dist/installer/phases/scaffold.js +493 -73
- package/dist/installer/phases/scaffold.js.map +1 -1
- package/dist/installer/util/fs.js +143 -1
- package/dist/installer/util/fs.js.map +1 -1
- package/dist/installer/util/registry.js +339 -0
- package/dist/installer/util/registry.js.map +1 -0
- package/package.json +1 -1
- package/pinned-versions.json +1 -1
- package/templates/agents/sr-architect.md +14 -10
- package/templates/agents/sr-backend-developer.md +4 -2
- package/templates/agents/sr-developer.md +20 -8
- package/templates/agents/sr-frontend-developer.md +4 -2
- package/templates/agents/sr-reviewer.md +10 -6
- package/templates/codex-skills/implement/SKILL.md +19 -10
- package/templates/codex-skills/rails/sr-architect/SKILL.md +17 -8
- package/templates/codex-skills/rails/sr-backend-developer/SKILL.md +4 -1
- package/templates/codex-skills/rails/sr-developer/SKILL.md +13 -4
- package/templates/codex-skills/rails/sr-doc-sync/SKILL.md +3 -2
- package/templates/codex-skills/rails/sr-frontend-developer/SKILL.md +4 -1
- package/templates/codex-skills/rails/sr-product-manager/SKILL.md +9 -7
- package/templates/codex-skills/rails/sr-reviewer/SKILL.md +13 -7
- package/templates/codex-skills/retry/SKILL.md +10 -5
- package/templates/commands/specrails/implement.md +41 -23
- package/templates/commands/specrails/retry.md +3 -1
- package/templates/gemini-commands/implement.toml +10 -6
|
@@ -6,7 +6,9 @@ import { copyDir, isDir, pathExists, readTextFile } from '../util/fs.js';
|
|
|
6
6
|
import { loadInstallConfig, resolveConfigPath } from '../phases/install-config.js';
|
|
7
7
|
import { buildManifest, writeManifestFiles } from '../phases/manifest.js';
|
|
8
8
|
import { derivedPaths, detectAvailability, resolveProvider } from '../phases/provider-detect.js';
|
|
9
|
-
import {
|
|
9
|
+
import { assembleProjectWorkspace } from '../phases/scaffold.js';
|
|
10
|
+
import { frameworkRoot, resolveArtifacts } from '../util/registry.js';
|
|
11
|
+
import { ensureFramework } from './init.js';
|
|
10
12
|
const VALID_ONLY = new Set([
|
|
11
13
|
'all',
|
|
12
14
|
'core',
|
|
@@ -22,17 +24,31 @@ export async function runUpdate(flags) {
|
|
|
22
24
|
// Read install-config.yaml so the user's original choices (tier,
|
|
23
25
|
// agent_teams) survive the update. Flag overrides win when present;
|
|
24
26
|
// missing config falls back to defaults (tier=full, agent_teams=false).
|
|
25
|
-
|
|
27
|
+
// ─── Relocate-always: resolve where artifacts live ───────────────────
|
|
28
|
+
// All Specrails artifacts (incl. the specrails-version marker, manifest,
|
|
29
|
+
// install-config) live under `artifactRoot` (the $HOME workspace), never the
|
|
30
|
+
// repo. On update the registry entry already exists (created by init), so the
|
|
31
|
+
// `providers` hint is ignored; we resolve first, then read the install.
|
|
32
|
+
const { artifactRoot, codeRoot } = resolveArtifacts(repoRoot, {
|
|
33
|
+
allocate: true,
|
|
34
|
+
allocator: 'core-standalone',
|
|
35
|
+
home: process.env.SPECRAILS_REGISTRY_HOME,
|
|
36
|
+
coreVersion: currentVersion,
|
|
37
|
+
});
|
|
38
|
+
// install-config.yaml is a USER-authored file that lives in the repo (the user
|
|
39
|
+
// can't know the relocated workspace path), so it is read from repoRoot — NOT
|
|
40
|
+
// the artifactRoot. Falls back to a workspace copy if present (none today).
|
|
41
|
+
const config = loadInstallConfig(resolveConfigPath(repoRoot)) ?? loadInstallConfig(resolveConfigPath(artifactRoot));
|
|
26
42
|
const tier = config?.tier ?? 'full';
|
|
27
43
|
const agentTeams = flags['agent-teams'] === true || config?.agent_teams === true;
|
|
28
44
|
const selectedAgents = config?.agents.selected;
|
|
29
|
-
const marker = path.join(
|
|
45
|
+
const marker = path.join(artifactRoot, '.specrails', 'specrails-version');
|
|
30
46
|
if (!pathExists(marker)) {
|
|
31
47
|
throw new PrerequisiteError(`No existing specrails install detected at ${repoRoot}. Run \`npx specrails-core init\` first.`);
|
|
32
48
|
}
|
|
33
|
-
const previousVersion = readExistingVersion(
|
|
49
|
+
const previousVersion = readExistingVersion(artifactRoot);
|
|
34
50
|
step('Update: resolving provider from existing install');
|
|
35
|
-
const provider = await resolveExistingProvider(
|
|
51
|
+
const provider = await resolveExistingProvider(artifactRoot);
|
|
36
52
|
const { providerDir } = derivedPaths(provider);
|
|
37
53
|
ok(`Detected provider: ${provider} (${providerDir})`);
|
|
38
54
|
// ─── Resolve --only scope ────────────────────────────────────────
|
|
@@ -52,35 +68,45 @@ export async function runUpdate(flags) {
|
|
|
52
68
|
}
|
|
53
69
|
step(`Update: refreshing scaffold [scope=${scope}] (${previousVersion ?? '?'} → ${currentVersion})`);
|
|
54
70
|
if (scope === 'all' || scope === 'core') {
|
|
55
|
-
|
|
71
|
+
// Bundled-framework update: re-materialize the framework to the (possibly
|
|
72
|
+
// new) version dir, atomically swap `current`, then RE-ASSEMBLE the
|
|
73
|
+
// workspace (re-link the static subtrees at the new `current` + re-seed the
|
|
74
|
+
// project layer). `assembleProjectWorkspace` rewrites the manifest itself.
|
|
75
|
+
const fwDir = frameworkRoot(process.env.SPECRAILS_REGISTRY_HOME);
|
|
76
|
+
ensureFramework({
|
|
56
77
|
scriptDir,
|
|
57
|
-
|
|
78
|
+
frameworkDir: fwDir,
|
|
58
79
|
provider,
|
|
59
80
|
providerDir,
|
|
81
|
+
version: currentVersion,
|
|
60
82
|
agentTeams,
|
|
61
83
|
selectedAgents,
|
|
62
|
-
// tier read from install-config.yaml above. If the user installed
|
|
63
|
-
// with --quick, we re-apply the quick-tier direct placement
|
|
64
|
-
// (agents + commands into <providerDir> with placeholder substitution
|
|
65
|
-
// and VPC exclusion) instead of leaving the live agents/ stale.
|
|
66
|
-
tier,
|
|
67
84
|
});
|
|
85
|
+
assembleProjectWorkspace({
|
|
86
|
+
workspace: artifactRoot,
|
|
87
|
+
frameworkDir: fwDir,
|
|
88
|
+
provider,
|
|
89
|
+
providerDir,
|
|
90
|
+
version: currentVersion,
|
|
91
|
+
codeRoot,
|
|
92
|
+
scriptDir,
|
|
93
|
+
selectedAgents,
|
|
94
|
+
agentTeams,
|
|
95
|
+
});
|
|
96
|
+
ok(`Re-linked ${providerDir}/ at framework ${currentVersion} + rewrote manifest`);
|
|
68
97
|
}
|
|
69
|
-
else if (scope === 'rules') {
|
|
70
|
-
rescaffoldComponent(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
98
|
+
else if (scope === 'rules' || scope === 'agents') {
|
|
99
|
+
rescaffoldComponent(scope, { scriptDir, artifactRoot });
|
|
100
|
+
step('Update: rewriting manifest');
|
|
101
|
+
const manifest = buildManifest({
|
|
102
|
+
scriptDir,
|
|
103
|
+
repoRoot: artifactRoot,
|
|
104
|
+
version: currentVersion,
|
|
105
|
+
});
|
|
106
|
+
const { manifestPath, versionPath } = writeManifestFiles(artifactRoot, manifest);
|
|
107
|
+
ok(`Wrote ${path.relative(artifactRoot, manifestPath)}`);
|
|
108
|
+
ok(`Wrote ${path.relative(artifactRoot, versionPath)}`);
|
|
74
109
|
}
|
|
75
|
-
step('Update: rewriting manifest');
|
|
76
|
-
const manifest = buildManifest({
|
|
77
|
-
scriptDir,
|
|
78
|
-
repoRoot,
|
|
79
|
-
version: currentVersion,
|
|
80
|
-
});
|
|
81
|
-
const { manifestPath, versionPath } = writeManifestFiles(repoRoot, manifest);
|
|
82
|
-
ok(`Wrote ${path.relative(repoRoot, manifestPath)}`);
|
|
83
|
-
ok(`Wrote ${path.relative(repoRoot, versionPath)}`);
|
|
84
110
|
step('Update complete');
|
|
85
111
|
info(`specrails-core ${previousVersion ?? '?'} → ${currentVersion}`);
|
|
86
112
|
// Terminal sentinel for programmatic consumers (see comment in init.ts).
|
|
@@ -100,7 +126,7 @@ function rescaffoldComponent(component, args) {
|
|
|
100
126
|
warn(`templates/${component} not found at ${src} — nothing to update`);
|
|
101
127
|
return;
|
|
102
128
|
}
|
|
103
|
-
const stagingDest = path.join(args.
|
|
129
|
+
const stagingDest = path.join(args.artifactRoot, '.specrails', 'setup-templates', component);
|
|
104
130
|
copyDir(src, stagingDest, {
|
|
105
131
|
filter: (_s, rel) => !rel.includes('node_modules') && !rel.endsWith('package-lock.json'),
|
|
106
132
|
});
|
|
@@ -122,12 +148,12 @@ function resolveScope(only) {
|
|
|
122
148
|
}
|
|
123
149
|
return normalised;
|
|
124
150
|
}
|
|
125
|
-
async function resolveExistingProvider(
|
|
126
|
-
if (pathExists(path.join(
|
|
151
|
+
async function resolveExistingProvider(artifactRoot) {
|
|
152
|
+
if (pathExists(path.join(artifactRoot, '.claude')))
|
|
127
153
|
return 'claude';
|
|
128
|
-
if (pathExists(path.join(
|
|
154
|
+
if (pathExists(path.join(artifactRoot, '.codex')))
|
|
129
155
|
return 'codex';
|
|
130
|
-
if (pathExists(path.join(
|
|
156
|
+
if (pathExists(path.join(artifactRoot, '.gemini')))
|
|
131
157
|
return 'gemini';
|
|
132
158
|
// None present — fall back to resolving via CLI availability.
|
|
133
159
|
const avail = await detectAvailability();
|
|
@@ -137,11 +163,11 @@ async function resolveExistingProvider(repoRoot) {
|
|
|
137
163
|
catch (err) {
|
|
138
164
|
if (err instanceof InstallerError)
|
|
139
165
|
throw err;
|
|
140
|
-
throw new InstallerError(`could not determine provider of existing install at ${
|
|
166
|
+
throw new InstallerError(`could not determine provider of existing install at ${artifactRoot}`, 40);
|
|
141
167
|
}
|
|
142
168
|
}
|
|
143
|
-
function readExistingVersion(
|
|
144
|
-
const p = path.join(
|
|
169
|
+
function readExistingVersion(artifactRoot) {
|
|
170
|
+
const p = path.join(artifactRoot, '.specrails', 'specrails-version');
|
|
145
171
|
if (!pathExists(p))
|
|
146
172
|
return null;
|
|
147
173
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/installer/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAExE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAa,MAAM,6BAA6B,CAAA;AAC7F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAA0B,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAiB,MAAM,8BAA8B,CAAA;AAC/G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/installer/commands/update.ts"],"names":[],"mappings":"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"}
|