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.
Files changed (108) hide show
  1. package/README.md +96 -89
  2. package/bin/specrails-core.mjs +282 -39
  3. package/bin/tui-installer.mjs +117 -149
  4. package/commands/doctor.md +1 -1
  5. package/dist/installer/cli.js +13 -3
  6. package/dist/installer/cli.js.map +1 -1
  7. package/dist/installer/commands/doctor.js +487 -27
  8. package/dist/installer/commands/doctor.js.map +1 -1
  9. package/dist/installer/commands/framework.js +49 -7
  10. package/dist/installer/commands/framework.js.map +1 -1
  11. package/dist/installer/commands/init.js +443 -41
  12. package/dist/installer/commands/init.js.map +1 -1
  13. package/dist/installer/commands/update.js +51 -23
  14. package/dist/installer/commands/update.js.map +1 -1
  15. package/dist/installer/commands/v5-migration.js +119 -0
  16. package/dist/installer/commands/v5-migration.js.map +1 -0
  17. package/dist/installer/phases/framework-lifecycle.js +125 -0
  18. package/dist/installer/phases/framework-lifecycle.js.map +1 -0
  19. package/dist/installer/phases/install-config.js +160 -11
  20. package/dist/installer/phases/install-config.js.map +1 -1
  21. package/dist/installer/phases/manifest.js +29 -8
  22. package/dist/installer/phases/manifest.js.map +1 -1
  23. package/dist/installer/phases/prereqs.js +57 -3
  24. package/dist/installer/phases/prereqs.js.map +1 -1
  25. package/dist/installer/phases/provider-detect.js +116 -6
  26. package/dist/installer/phases/provider-detect.js.map +1 -1
  27. package/dist/installer/phases/scaffold.js +1217 -117
  28. package/dist/installer/phases/scaffold.js.map +1 -1
  29. package/dist/installer/runtime/kimi.js +255 -0
  30. package/dist/installer/runtime/kimi.js.map +1 -0
  31. package/dist/installer/util/paths.js +12 -0
  32. package/dist/installer/util/paths.js.map +1 -1
  33. package/dist/installer/util/registry.js +234 -14
  34. package/dist/installer/util/registry.js.map +1 -1
  35. package/docs/README.md +1 -0
  36. package/docs/deployment.md +6 -7
  37. package/docs/getting-started.md +11 -7
  38. package/docs/installation.md +34 -16
  39. package/docs/plugin-architecture.md +11 -8
  40. package/docs/updating.md +21 -3
  41. package/docs/user-docs/cli-reference.md +43 -22
  42. package/docs/user-docs/codex-vs-claude-code.md +11 -9
  43. package/docs/user-docs/faq.md +1 -1
  44. package/docs/user-docs/getting-started-codex.md +5 -8
  45. package/docs/user-docs/getting-started-kimi.md +423 -0
  46. package/docs/user-docs/installation.md +49 -14
  47. package/docs/user-docs/quick-start.md +11 -8
  48. package/docs/windows.md +29 -4
  49. package/integration-contract.json +85 -13
  50. package/package.json +9 -5
  51. package/schemas/profile.v1.json +68 -6
  52. package/templates/agents/sr-architect.md +30 -0
  53. package/templates/agents/sr-developer.md +21 -8
  54. package/templates/agents/sr-reviewer.md +44 -31
  55. package/templates/codex-skills/batch-implement/SKILL.md +9 -32
  56. package/templates/codex-skills/implement/SKILL.md +61 -143
  57. package/templates/codex-skills/rails/sr-architect/SKILL.md +38 -20
  58. package/templates/codex-skills/rails/sr-developer/SKILL.md +29 -10
  59. package/templates/codex-skills/rails/sr-reviewer/SKILL.md +21 -10
  60. package/templates/commands/specrails/doctor.md +1 -1
  61. package/templates/commands/specrails/implement.md +117 -288
  62. package/templates/commands/specrails/memory-inspect.md +6 -4
  63. package/templates/commands/specrails/propose-spec.md +1 -1
  64. package/templates/commands/specrails/refactor-recommender.md +8 -51
  65. package/templates/commands/specrails/retry.md +12 -48
  66. package/templates/commands/specrails/telemetry.md +1 -1
  67. package/templates/gemini-commands/implement.toml +9 -0
  68. package/templates/kimi/specrails/run-skill.mjs +3005 -0
  69. package/templates/kimi/specrails/vendor/js-yaml/LICENSE +21 -0
  70. package/templates/kimi/specrails/vendor/js-yaml/NOTICE.md +16 -0
  71. package/templates/kimi/specrails/vendor/js-yaml/js-yaml.mjs +3856 -0
  72. package/templates/profiles/default.json +5 -18
  73. package/templates/profiles/kimi-default.json +15 -0
  74. package/commands/enrich.md +0 -1456
  75. package/templates/agents/sr-backend-developer.md +0 -91
  76. package/templates/agents/sr-backend-reviewer.md +0 -152
  77. package/templates/agents/sr-doc-sync.md +0 -247
  78. package/templates/agents/sr-frontend-developer.md +0 -85
  79. package/templates/agents/sr-frontend-reviewer.md +0 -145
  80. package/templates/agents/sr-merge-resolver.md +0 -195
  81. package/templates/agents/sr-performance-reviewer.md +0 -186
  82. package/templates/agents/sr-product-analyst.md +0 -36
  83. package/templates/agents/sr-product-manager.md +0 -148
  84. package/templates/agents/sr-security-reviewer.md +0 -191
  85. package/templates/agents/sr-test-writer.md +0 -176
  86. package/templates/codex-skills/enrich/SKILL.md +0 -191
  87. package/templates/codex-skills/merge-resolve/SKILL.md +0 -88
  88. package/templates/codex-skills/rails/sr-backend-developer/SKILL.md +0 -93
  89. package/templates/codex-skills/rails/sr-backend-reviewer/SKILL.md +0 -120
  90. package/templates/codex-skills/rails/sr-doc-sync/SKILL.md +0 -124
  91. package/templates/codex-skills/rails/sr-frontend-developer/SKILL.md +0 -106
  92. package/templates/codex-skills/rails/sr-frontend-reviewer/SKILL.md +0 -111
  93. package/templates/codex-skills/rails/sr-merge-resolver/SKILL.md +0 -156
  94. package/templates/codex-skills/rails/sr-performance-reviewer/SKILL.md +0 -109
  95. package/templates/codex-skills/rails/sr-product-analyst/SKILL.md +0 -85
  96. package/templates/codex-skills/rails/sr-product-manager/SKILL.md +0 -131
  97. package/templates/codex-skills/rails/sr-security-reviewer/SKILL.md +0 -121
  98. package/templates/codex-skills/rails/sr-test-writer/SKILL.md +0 -115
  99. package/templates/commands/specrails/auto-propose-backlog-specs.md +0 -312
  100. package/templates/commands/specrails/enrich.md +0 -1456
  101. package/templates/commands/specrails/get-backlog-specs.md +0 -226
  102. package/templates/commands/specrails/merge-resolve.md +0 -172
  103. package/templates/commands/specrails/reconfig.md +0 -80
  104. package/templates/commands/specrails/vpc-drift.md +0 -405
  105. package/templates/commands/test.md +0 -58
  106. package/templates/personas/persona.md +0 -43
  107. package/templates/personas/the-maintainer.md +0 -98
  108. 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 { readTextFile, pathExists } from '../util/fs.js';
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 { assembleProjectWorkspace, ensureCurrentSymlink, installFramework, } from '../phases/scaffold.js';
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
- // --from-config: read provider + tier from yaml.
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
- assembleProjectWorkspace({
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
- const tier = tierHint ?? 'full';
119
- if (tier === 'full') {
120
- step('Next steps');
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
- installFramework({
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
- selectedAgents: input.selectedAgents,
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 = ['init', '--tools', provider, repoRoot];
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
- async function installOpenSpecProject(repoRoot, provider) {
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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAExD,OAAO,EAGL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAsCrE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAgB;IAC5C,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAC3B,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC1E,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,CAAA;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,CAAA;IAE9D,iDAAiD;IACjD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;IAC3C,IAAI,YAAkC,CAAA;IACtC,IAAI,QAA0B,CAAA;IAC9B,IAAI,kBAAwC,CAAA;IAE5C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;QACpF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC9B,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;YACtB,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAA;YAC3C,IAAI,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,oCAAoC,QAAQ,mCAAmC,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7F,MAAM,IAAI,cAAc,CACtB,iEAAiE,KAAK,CAAC,QAAQ,EAAE,EACjF,EAAE,CACH,CAAA;QACH,CAAC;QACD,YAAY,GAAG,KAAK,CAAC,QAAoB,CAAA;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACzB,QAAQ,GAAG,OAAO,CAAA;IACpB,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,iCAAiC,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC;QACvC,QAAQ;QACR,OAAO;QACP,gBAAgB,EAAE,YAAY;QAC9B,WAAW;KACZ,CAAC,CAAA;IAEF,yEAAyE;IACzE,0EAA0E;IAC1E,+EAA+E;IAC/E,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,EAAE;IACF,qEAAqE;IACrE,iFAAiF;IACjF,gFAAgF;IAChF,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAA;IAClF,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;QAC5D,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,iBAAiB;QAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACzC,SAAS,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7B,WAAW,EAAE,OAAO;KACrB,CAAC,CAAA;IACF,8EAA8E;IAC9E,MAAM,MAAM,GAAG,YAAY,KAAK,QAAQ,CAAA;IAExC,yEAAyE;IACzE,4EAA4E;IAC5E,gFAAgF;IAChF,8EAA8E;IAC9E,0EAA0E;IAC1E,+EAA+E;IAC/E,IAAI,CAAC,6CAA6C,CAAC,CAAA;IACnD,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAEhE,eAAe,CAAC;QACd,SAAS;QACT,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW;QACX,OAAO;QACP,cAAc,EAAE,kBAAkB;KACnC,CAAC,CAAA;IAEF,wBAAwB,CAAC;QACvB,SAAS,EAAE,YAAY;QACvB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW;QACX,OAAO;QACP,QAAQ;QACR,SAAS;QACT,cAAc,EAAE,kBAAkB;QAClC,6EAA6E;QAC7E,oEAAoE;QACpE,WAAW,EAAE,MAAM;KACpB,CAAC,CAAA;IACF,IAAI,MAAM,EAAE,CAAC;QACX,EAAE,CAAC,UAAU,WAAW,oBAAoB,OAAO,uCAAuC,CAAC,CAAA;IAC7F,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,WAAW,oBAAoB,OAAO,yBAAyB,CAAC,CAAA;IAC/E,CAAC;IAED,+DAA+D;IAC/D,MAAM,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IAExD,MAAM,IAAI,GAAS,QAAQ,IAAI,MAAM,CAAA;IACrC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,CAAA;QAClB,IAAI,CAAC,oEAAoE,CAAC,CAAA;IAC5E,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAC7B,IAAI,CAAC,uEAAuE,CAAC,CAAA;IAC/E,CAAC;IACD,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,oEAAoE;IACpE,EAAE,CAAC,eAAe,CAAC,CAAA;IAEnB,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI;KACL,CAAA;AACH,CAAC;AAqBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,gBAAgB,CAAC;QACf,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAChC,oBAAoB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACzD,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,gBAAgB;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;IACtD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,4DAA4D;IAC5D,iEAAiE;IACjE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAyB,CAAA;QAC/D,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB,EAAE,GAAW,EAAE,QAAgB;IACzE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAA;IACtD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAA4B,CAAA;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,QAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG,EACpC,gBAAwB,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC;IAElF,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAA;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,uBAAuB,CAAA;IACxC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAExD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,yEAAyE;QACzE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAA;IAChD,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,8DAA8D;QAC9D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChC,CAAC;IACD,8DAA8D;IAC9D,OAAO;QACL,GAAG,EAAE,KAAK;QACV,IAAI,EAAE;YACJ,OAAO;YACP,IAAI;YACJ,wBAAwB,aAAa,EAAE;YACvC,IAAI;YACJ,UAAU;YACV,GAAG,QAAQ;SACZ;KACF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB,EAAE,QAAkB;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,GAAG,EAAE,CAAC;QACrD,IAAI,CAAC,iEAAiE,CAAC,CAAA;QACvE,OAAM;IACR,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAEjE,IAAI,CAAC,+BAA+B,CAAC,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE;YAC1B,GAAG,EAAE,QAAQ;YACb,SAAS,EAAE,MAAM;SAClB,CAAC,CAAA;QACF,EAAE,CAAC,qCAAqC,QAAQ,GAAG,CAAC,CAAA;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,yBAA0B,GAAa,CAAC,OAAO,EAAE,EACjD,EAAE,CACH,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/installer/commands/init.ts"],"names":[],"mappings":"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"}