create-snipara 1.3.17 → 1.3.18

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 (3) hide show
  1. package/README.md +20 -6
  2. package/dist/index.js +62 -12
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -52,6 +52,7 @@ The default CLI path wires the local companion around those surfaces:
52
52
 
53
53
  - `snipara-companion` for local workflow commands and managed phase commits; legacy `rlm-hook` commands remain compatible
54
54
  - `snipara-sandbox` for optional local code execution
55
+ - `snipara-orchestrator` only when explicitly requested with `--with-orchestrator`
55
56
  - local config, env files, hook scripts, and a project companion pack
56
57
  - `snipara-mcp` only for local stdio compatibility, development, or testing
57
58
 
@@ -59,12 +60,12 @@ The default CLI path wires the local companion around those surfaces:
59
60
 
60
61
  The CLI now works around explicit install profiles:
61
62
 
62
- | Profile | What it installs | Best for |
63
- | ------------------ | --------------------------------------------- | --------------------------------------------------- |
64
- | `hosted-companion` | MCP + `snipara-companion` | Default: hosted context plus managed local workflow |
65
- | `hosted-only` | Hosted MCP config only | Locked-down or minimal environments |
66
- | `full-stack` | MCP + `snipara-companion` + `snipara-sandbox` | Hosted context plus sandboxed local execution |
67
- | `runtime-only` | `snipara-sandbox` only | Local execution without hosted API |
63
+ | Profile | What it installs | Best for |
64
+ | ------------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
65
+ | `hosted-companion` | MCP + `snipara-companion` | Default: hosted context plus managed local workflow |
66
+ | `hosted-only` | Hosted MCP config only | Locked-down or minimal environments |
67
+ | `full-stack` | MCP + `snipara-companion` + `snipara-sandbox` | Hosted context plus sandboxed local execution. Does not include orchestrator unless `--with-orchestrator` is passed |
68
+ | `runtime-only` | `snipara-sandbox` only | Local execution without hosted API |
68
69
 
69
70
  Default profile: `hosted-companion`
70
71
 
@@ -102,6 +103,7 @@ That distinction matters:
102
103
  - explains the GitHub PR Answer Packs path for AI-assisted pull request workflows
103
104
  - installs `snipara-companion` by default for local managed workflows
104
105
  - installs optional `snipara-sandbox`
106
+ - installs optional `snipara-orchestrator` for proof gates, drift checks, and htask workflows when requested
105
107
  - configures `.mcp.json`
106
108
  - generates merge-ready AI agent templates in `.snipara/templates/`, including Pro+ symbol-card, code-impact, and managed workflow guidance for paid Context plans
107
109
  - creates `AGENTS.md`, `CLAUDE.md`, `.cursor/rules/snipara.mdc`, and `.codex/config.toml` when those files do not already exist
@@ -140,6 +142,8 @@ By default, this uses the recommended `hosted-companion` setup: hosted MCP plus
140
142
  the local `snipara-companion` workflow helper. Legacy `rlm-hook` commands remain
141
143
  compatible. Add `--advanced` when you want profile selection, project id entry,
142
144
  hook prompts, GitHub automation prompts, or sandbox provider prompts.
145
+ Use `--with-orchestrator` only when you explicitly need the advanced production
146
+ validation and htask package; it is not part of `full-stack` by default.
143
147
 
144
148
  The advanced flow asks for:
145
149
 
@@ -421,6 +425,16 @@ npx create-snipara --profile full-stack --advanced
421
425
 
422
426
  Best when the user also wants sandboxed `snipara-sandbox` execution.
423
427
 
428
+ ### Full local stack plus production orchestration
429
+
430
+ ```bash
431
+ npx create-snipara --profile full-stack --with-orchestrator
432
+ ```
433
+
434
+ Best when the user wants Hosted MCP, companion workflows, Sandbox execution, and
435
+ the explicit `snipara-orchestrator` package for production gates, drift checks,
436
+ or htask coordination.
437
+
424
438
  ### Connect the current repository
425
439
 
426
440
  ```bash
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import fs from "fs";
9
9
  import path from "path";
10
10
  import { execSync, spawn } from "child_process";
11
11
  import { homedir } from "os";
12
- var VERSION = "1.3.17";
12
+ var VERSION = "1.3.18";
13
13
  var BASE_URL = "https://www.snipara.com";
14
14
  var API_URL = "https://api.snipara.com";
15
15
  var COMPANION_PACKAGE_NAME = "snipara-companion";
@@ -18,10 +18,12 @@ var LEGACY_COMPANION_COMMAND_NAME = "rlm-hook";
18
18
  var GITHUB_ANSWER_PACKS_LABEL = "GitHub PR Answer Packs";
19
19
  var MCP_PACKAGE_NAME = "snipara-mcp";
20
20
  var SANDBOX_PACKAGE_NAME = "snipara-sandbox[all]";
21
+ var ORCHESTRATOR_PACKAGE_NAME = "snipara-orchestrator";
21
22
  var SANDBOX_SERVER_NAME = "snipara-sandbox";
22
23
  var LEGACY_RUNTIME_SERVER_NAME = "rlm-runtime";
23
24
  var SANDBOX_COMMAND_NAME = "snipara-sandbox";
24
25
  var LEGACY_SANDBOX_COMMAND_NAME = "rlm";
26
+ var ORCHESTRATOR_COMMAND_NAME = "snipara-orchestrator";
25
27
  var DEVICE_CLIENT_ID = "create-snipara";
26
28
  var DeviceAuthorizationAborted = class extends Error {
27
29
  };
@@ -94,7 +96,7 @@ function buildProgram() {
94
96
  program.command("init").description("Install and configure Snipara for this project").option("--api-key <key>", "Snipara API key").option("--slug <slug>", "Project slug").option("--project-id <id>", "Project ID").option("--advanced", "Show advanced profile, project id, hooks, GitHub, and sandbox prompts").option(
95
97
  "--profile <profile>",
96
98
  "Install profile: hosted-only, hosted-companion, full-stack, runtime-only"
97
- ).option("--skip-companion", "Skip local companion CLI installation").option("--skip-mcp", "Skip local snipara-mcp package installation").option("--skip-runtime", "Skip snipara-sandbox installation").option("--skip-hooks", "Skip hook generation").option("--skip-test", "Skip hosted connection test").option("--github", "Open GitHub repository automation setup when a git remote is detected").option("--skip-github", "Skip the GitHub automation prompt").option("--github-path <path>", "Optional GitHub path filter for the initial repository sync").option("--runtime-only", "Install only Snipara Sandbox").option("-y, --yes", "Accept defaults without prompting").action(async (options) => {
99
+ ).option("--skip-companion", "Skip local companion CLI installation").option("--skip-mcp", "Skip local snipara-mcp package installation").option("--skip-runtime", "Skip snipara-sandbox installation").option("--skip-hooks", "Skip hook generation").option("--skip-test", "Skip hosted connection test").option("--with-orchestrator", "Install optional snipara-orchestrator package").option("--github", "Open GitHub repository automation setup when a git remote is detected").option("--skip-github", "Skip the GitHub automation prompt").option("--github-path <path>", "Optional GitHub path filter for the initial repository sync").option("--runtime-only", "Install only Snipara Sandbox").option("-y, --yes", "Accept defaults without prompting").action(async (options) => {
98
100
  printBanner();
99
101
  await runInit(options);
100
102
  });
@@ -102,11 +104,11 @@ function buildProgram() {
102
104
  printBanner();
103
105
  await runDoctor(options);
104
106
  });
105
- program.command("repair").description("Rebuild local Snipara config and re-run validation").option("--api-key <key>", "Snipara API key override").option("--slug <slug>", "Project slug override").option("--project-id <id>", "Project ID override").option("--profile <profile>", "Target install profile").option("--with-hooks", "Force hook generation").option("--with-runtime", "Force Snipara Sandbox server/config").option("--with-mcp", "Force MCP config").option("--with-companion", "Force companion pack generation").action(async (options) => {
107
+ program.command("repair").description("Rebuild local Snipara config and re-run validation").option("--api-key <key>", "Snipara API key override").option("--slug <slug>", "Project slug override").option("--project-id <id>", "Project ID override").option("--profile <profile>", "Target install profile").option("--with-hooks", "Force hook generation").option("--with-runtime", "Force Snipara Sandbox server/config").option("--with-mcp", "Force MCP config").option("--with-companion", "Force companion pack generation").option("--with-orchestrator", "Install optional snipara-orchestrator package").action(async (options) => {
106
108
  printBanner();
107
109
  await runRepair(options);
108
110
  });
109
- program.command("upgrade").description("Upgrade installed Snipara local components").option("--with-hooks", "Refresh hooks after upgrade").option("--with-runtime", "Upgrade Snipara Sandbox even if not detected").option("--with-mcp", "Upgrade snipara-mcp even if not detected").option("--with-companion", "Upgrade companion even if not detected").action(async (options) => {
111
+ program.command("upgrade").description("Upgrade installed Snipara local components").option("--with-hooks", "Refresh hooks after upgrade").option("--with-runtime", "Upgrade Snipara Sandbox even if not detected").option("--with-mcp", "Upgrade snipara-mcp even if not detected").option("--with-companion", "Upgrade companion even if not detected").option("--with-orchestrator", "Upgrade snipara-orchestrator even if not detected").action(async (options) => {
110
112
  printBanner();
111
113
  await runUpgrade(options);
112
114
  });
@@ -125,7 +127,7 @@ function addSharedRootOptions(program) {
125
127
  program.option("--api-key <key>", "Snipara API key").option("--slug <slug>", "Project slug").option("--project-id <id>", "Project ID").option("--advanced", "Show advanced profile, project id, hooks, GitHub, and sandbox prompts").option(
126
128
  "--profile <profile>",
127
129
  "Install profile: hosted-only, hosted-companion, full-stack, runtime-only"
128
- ).option("--skip-companion", "Skip local companion CLI installation").option("--skip-mcp", "Skip local snipara-mcp package installation").option("--skip-runtime", "Skip snipara-sandbox installation").option("--skip-hooks", "Skip hook generation").option("--skip-test", "Skip hosted connection test").option("--github", "Open GitHub repository automation setup when a git remote is detected").option("--skip-github", "Skip the GitHub automation prompt").option("--github-path <path>", "Optional GitHub path filter for the initial repository sync").option("--runtime-only", "Install only Snipara Sandbox").option("-y, --yes", "Accept defaults without prompting");
130
+ ).option("--skip-companion", "Skip local companion CLI installation").option("--skip-mcp", "Skip local snipara-mcp package installation").option("--skip-runtime", "Skip snipara-sandbox installation").option("--skip-hooks", "Skip hook generation").option("--skip-test", "Skip hosted connection test").option("--with-orchestrator", "Install optional snipara-orchestrator package").option("--github", "Open GitHub repository automation setup when a git remote is detected").option("--skip-github", "Skip the GitHub automation prompt").option("--github-path <path>", "Optional GitHub path filter for the initial repository sync").option("--runtime-only", "Install only Snipara Sandbox").option("-y, --yes", "Accept defaults without prompting");
129
131
  }
130
132
  async function main() {
131
133
  const program = buildProgram();
@@ -157,6 +159,7 @@ function parseInitOptionsFromArgv(args) {
157
159
  "--skip-runtime": "skipRuntime",
158
160
  "--skip-hooks": "skipHooks",
159
161
  "--skip-test": "skipTest",
162
+ "--with-orchestrator": "withOrchestrator",
160
163
  "--runtime-only": "runtimeOnly",
161
164
  "--github": "github",
162
165
  "--skip-github": "skipGithub",
@@ -187,7 +190,7 @@ function parseInitOptionsFromArgv(args) {
187
190
  }
188
191
  async function runInit(options) {
189
192
  const answers = await gatherConfiguration(normalizeInitOptions(options));
190
- if (answers.installMcp || answers.installRuntime) {
193
+ if (answers.installMcp || answers.installRuntime || answers.installOrchestrator) {
191
194
  await installPythonPackages(answers, false);
192
195
  }
193
196
  if (answers.installCompanion) {
@@ -225,7 +228,7 @@ async function runDoctor(options) {
225
228
  async function runRepair(options) {
226
229
  const answers = loadExistingAnswers(options);
227
230
  console.log(chalk.bold("\n\u{1F6E0}\uFE0F Repairing Local Setup\n"));
228
- if (answers.installMcp || answers.installRuntime) {
231
+ if (answers.installMcp || answers.installRuntime || answers.installOrchestrator) {
229
232
  await installPythonPackages(answers, true);
230
233
  }
231
234
  if (answers.installCompanion) {
@@ -248,10 +251,11 @@ async function runUpgrade(options) {
248
251
  const upgradedAnswers = {
249
252
  ...answers,
250
253
  installMcp: options.withMcp || answers.installMcp,
251
- installRuntime: options.withRuntime || answers.installRuntime
254
+ installRuntime: options.withRuntime || answers.installRuntime,
255
+ installOrchestrator: options.withOrchestrator || answers.installOrchestrator
252
256
  };
253
257
  console.log(chalk.bold("\n\u2B06\uFE0F Upgrading Local Components\n"));
254
- if (options.withMcp || options.withRuntime || detection.existingConfig.hasRuntimeServer) {
258
+ if (options.withMcp || options.withRuntime || options.withOrchestrator || detection.existingConfig.hasRuntimeServer || detection.tooling.orchestratorCli) {
255
259
  await installPythonPackages(upgradedAnswers, true);
256
260
  }
257
261
  if (options.withCompanion || detection.tooling.companionCli || answers.installCompanion) {
@@ -264,8 +268,8 @@ async function runUpgrade(options) {
264
268
  if (options.withHooks || answers.installHooks) {
265
269
  await installClaudeCodeHooks({ ...answers, installHooks: true });
266
270
  }
267
- await createCompanionPack(answers);
268
- const report = await runValidation(answers, true);
271
+ await createCompanionPack(upgradedAnswers);
272
+ const report = await runValidation(upgradedAnswers, true);
269
273
  writeDoctorReport(report);
270
274
  printDoctorReport(detectEnvironment(), report);
271
275
  }
@@ -302,6 +306,7 @@ async function runPrintConfig(options) {
302
306
  );
303
307
  console.log(` Local snipara-mcp package: ${answers.installMcp ? "enabled" : "disabled"}`);
304
308
  console.log(` Snipara Sandbox: ${answers.installRuntime ? "enabled" : "disabled"}`);
309
+ console.log(` Snipara Orchestrator: ${answers.installOrchestrator ? "enabled" : "disabled"}`);
305
310
  console.log(` Hooks: ${answers.installHooks ? "enabled" : "disabled"}`);
306
311
  console.log(` GitHub repo: ${githubRepo ? githubRepo.fullName : "not detected"}`);
307
312
  console.log(` ${GITHUB_ANSWER_PACKS_LABEL}: ${githubAnswerPacks}`);
@@ -362,6 +367,7 @@ async function gatherConfiguration(options) {
362
367
  skipCompanion: !!options.skipCompanion,
363
368
  skipMcp: !!options.skipMcp,
364
369
  skipRuntime: !!options.skipRuntime,
370
+ withOrchestrator: !!options.withOrchestrator,
365
371
  skipHooks: !!options.skipHooks,
366
372
  configureGitHub: Boolean(options.github && detectedGitRepo && !options.skipGithub),
367
373
  githubRepo: detectedGitRepo || void 0,
@@ -426,6 +432,12 @@ async function gatherConfiguration(options) {
426
432
  ),
427
433
  choices: AI_CLIENT_CHOICES
428
434
  },
435
+ {
436
+ type: showAdvancedPrompts ? "confirm" : null,
437
+ name: "installOrchestrator",
438
+ message: "Install snipara-orchestrator for production gates, drift checks, or htask workflows?",
439
+ initial: Boolean(options.withOrchestrator)
440
+ },
429
441
  {
430
442
  type: showAdvancedPrompts ? "confirm" : null,
431
443
  name: "installHooks",
@@ -471,6 +483,7 @@ async function gatherConfiguration(options) {
471
483
  skipCompanion: !!options.skipCompanion,
472
484
  skipMcp: !!options.skipMcp,
473
485
  skipRuntime: !!options.skipRuntime,
486
+ withOrchestrator: Boolean(options.withOrchestrator || response.installOrchestrator),
474
487
  skipHooks: !!options.skipHooks || !response.installHooks,
475
488
  configureGitHub: Boolean(
476
489
  (response.configureGitHub || options.github) && detectedGitRepo && !options.skipGithub
@@ -602,6 +615,7 @@ function buildAnswersFromProfile(input) {
602
615
  installCompanion: selected.installCompanion && !input.skipCompanion,
603
616
  installMcp: selected.installMcp && !input.skipMcp,
604
617
  installRuntime: selected.installRuntime && !input.skipRuntime,
618
+ installOrchestrator: input.withOrchestrator,
605
619
  installHooks: selected.installHooks && !input.skipHooks,
606
620
  aiClient: input.aiClient,
607
621
  configureGitHub: Boolean(input.configureGitHub && input.githubRepo),
@@ -756,6 +770,9 @@ function detectSandboxCommand() {
756
770
  }
757
771
  return null;
758
772
  }
773
+ function detectOrchestratorCommand() {
774
+ return commandExists(ORCHESTRATOR_COMMAND_NAME) ? ORCHESTRATOR_COMMAND_NAME : null;
775
+ }
759
776
  async function installPythonPackages(answers, upgrade) {
760
777
  console.log(chalk.bold(`
761
778
  \u{1F4E6} ${upgrade ? "Upgrading" : "Installing"} Python Packages
@@ -769,6 +786,11 @@ async function installPythonPackages(answers, upgrade) {
769
786
  if (answers.installRuntime) {
770
787
  console.log(chalk.gray(` pip install ${upgrade ? "-U " : ""}${SANDBOX_PACKAGE_NAME}`));
771
788
  }
789
+ if (answers.installOrchestrator) {
790
+ console.log(
791
+ chalk.gray(` pip install ${upgrade ? "-U " : ""}${ORCHESTRATOR_PACKAGE_NAME}`)
792
+ );
793
+ }
772
794
  console.log("");
773
795
  return;
774
796
  }
@@ -779,6 +801,9 @@ async function installPythonPackages(answers, upgrade) {
779
801
  if (answers.installRuntime) {
780
802
  packages.push(SANDBOX_PACKAGE_NAME);
781
803
  }
804
+ if (answers.installOrchestrator) {
805
+ packages.push(ORCHESTRATOR_PACKAGE_NAME);
806
+ }
782
807
  if (packages.length === 0) return;
783
808
  const spinner = ora(
784
809
  `${upgrade ? "Upgrading" : "Installing"} ${packages.map(stripExtras).join(", ")}...`
@@ -1538,6 +1563,11 @@ function getCompanionCommands(answers) {
1538
1563
  command: `${COMPANION_COMMAND_NAME} code impact --changed-files src/api/webhooks.ts tests/webhooks.test.ts --diff-summary "webhook retry hardening"`,
1539
1564
  purpose: "Use paid Context code impact analysis to surface likely tests, docs, routes, config, and risks."
1540
1565
  },
1566
+ {
1567
+ title: answers.installOrchestrator ? "Run an explicit production orchestration gate" : "Enable explicit production orchestration",
1568
+ command: answers.installOrchestrator ? `${ORCHESTRATOR_COMMAND_NAME} check-drift --route /api/health` : "npx create-snipara repair --with-orchestrator",
1569
+ purpose: answers.installOrchestrator ? "Use snipara-orchestrator only for proof-based validation, drift checks, htasks, or multi-agent coordination." : "Install snipara-orchestrator only when production gates, drift checks, htasks, or multi-agent coordination are required."
1570
+ },
1541
1571
  githubAnswerPacksCommand,
1542
1572
  {
1543
1573
  title: "Upload or refresh a doc",
@@ -1715,6 +1745,7 @@ This project uses Snipara as a hosted-first context and memory layer with local
1715
1745
  - Generated hosted MCP config: \`${answers.profile !== "runtime-only" ? "yes" : "no"}\`
1716
1746
  - Installed local snipara-mcp package: \`${answers.installMcp ? "yes" : "no"}\`
1717
1747
  - Installed Snipara Sandbox: \`${answers.installRuntime ? "yes" : "no"}\`
1748
+ - Installed Snipara Orchestrator: \`${answers.installOrchestrator ? "yes" : "no"}\`
1718
1749
  - Generated hooks: \`${answers.installHooks ? "yes" : "no"}\`
1719
1750
  - GitHub repository: \`${answers.githubRepo ? answers.githubRepo.fullName : "not-detected"}\`
1720
1751
 
@@ -1725,6 +1756,7 @@ This project uses Snipara as a hosted-first context and memory layer with local
1725
1756
  - .env.local present: \`${detection.files.envLocal ? "yes" : "no"}\`
1726
1757
  - Companion CLI on PATH: \`${detection.tooling.companionCli ? "yes" : "no"}\`
1727
1758
  - Snipara Sandbox CLI on PATH: \`${detection.tooling.runtimeCli ? "yes" : "no"}\`
1759
+ - Snipara Orchestrator CLI on PATH: \`${detection.tooling.orchestratorCli ? "yes" : "no"}\`
1728
1760
 
1729
1761
  ## Client Guidance
1730
1762
 
@@ -1790,6 +1822,7 @@ ${item.purpose}`
1790
1822
  ai_client: answers.aiClient,
1791
1823
  profile: answers.profile,
1792
1824
  llm_provider: answers.llmProvider || null,
1825
+ install_orchestrator: answers.installOrchestrator,
1793
1826
  github_repository: answers.githubRepo || null,
1794
1827
  github_automation_url: answers.githubRepo ? buildGitHubAutomationUrl(answers) : null,
1795
1828
  client_pack: clientPackFilename,
@@ -1895,6 +1928,11 @@ async function runValidation(answers, includeHostedCheck) {
1895
1928
  status: answers.installRuntime ? detection.tooling.runtimeCli ? "pass" : "warn" : "pass",
1896
1929
  detail: answers.installRuntime && !detection.tooling.runtimeCli ? `${SANDBOX_COMMAND_NAME} CLI not found on PATH` : "Snipara Sandbox CLI ready or not requested"
1897
1930
  });
1931
+ checks.push({
1932
+ name: "orchestrator_cli",
1933
+ status: answers.installOrchestrator ? detection.tooling.orchestratorCli ? "pass" : "warn" : "pass",
1934
+ detail: answers.installOrchestrator && !detection.tooling.orchestratorCli ? `${ORCHESTRATOR_COMMAND_NAME} CLI not found on PATH` : "Snipara Orchestrator ready or not requested"
1935
+ });
1898
1936
  checks.push({
1899
1937
  name: "companion_pack",
1900
1938
  status: detection.files.sniparaCompanionPack ? "pass" : "warn",
@@ -2096,6 +2134,11 @@ function printSuccess(answers, report) {
2096
2134
  chalk.green(` \u2713 ${stripExtras(SANDBOX_PACKAGE_NAME)}`) + chalk.dim(" - Safe code execution")
2097
2135
  );
2098
2136
  }
2137
+ if (answers.installOrchestrator) {
2138
+ console.log(
2139
+ chalk.green(` \u2713 ${ORCHESTRATOR_PACKAGE_NAME}`) + chalk.dim(" - Production gates, drift checks, and htask workflows")
2140
+ );
2141
+ }
2099
2142
  if (answers.installCompanion) {
2100
2143
  console.log(
2101
2144
  chalk.green(` \u2713 ${COMPANION_PACKAGE_NAME}`) + chalk.dim(" - Local companion workflows and hook bootstrap")
@@ -2147,6 +2190,11 @@ function printSuccess(answers, report) {
2147
2190
  `Run ${SANDBOX_COMMAND_NAME} init when you want to choose sandbox/docker/local execution.`
2148
2191
  );
2149
2192
  }
2193
+ if (answers.installOrchestrator) {
2194
+ printNextStep(
2195
+ `Use ${ORCHESTRATOR_COMMAND_NAME} explicitly for production proof gates, drift checks, or htask coordination.`
2196
+ );
2197
+ }
2150
2198
  if (answers.githubRepo) {
2151
2199
  printNextStep(
2152
2200
  `Connect GitHub automation for ${answers.githubRepo.fullName} from the generated Snipara link.`
@@ -2213,7 +2261,8 @@ function detectEnvironment() {
2213
2261
  docker: commandExists("docker"),
2214
2262
  git: commandExists("git"),
2215
2263
  companionCli: Boolean(detectCompanionCommand()),
2216
- runtimeCli: Boolean(detectSandboxCommand())
2264
+ runtimeCli: Boolean(detectSandboxCommand()),
2265
+ orchestratorCli: Boolean(detectOrchestratorCommand())
2217
2266
  },
2218
2267
  existingConfig: {
2219
2268
  slug: existingConfig?.slug,
@@ -2243,6 +2292,7 @@ function loadExistingAnswers(options) {
2243
2292
  skipCompanion: options.withCompanion === true ? false : !detection.tooling.companionCli && effectiveProfile !== "hosted-companion" && effectiveProfile !== "full-stack",
2244
2293
  skipMcp: options.withMcp === true ? false : !detection.existingConfig.hasSniparaServer && effectiveProfile === "runtime-only",
2245
2294
  skipRuntime: options.withRuntime === true ? false : !detection.existingConfig.hasRuntimeServer && effectiveProfile !== "full-stack" && effectiveProfile !== "runtime-only",
2295
+ withOrchestrator: Boolean(options.withOrchestrator || detection.tooling.orchestratorCli),
2246
2296
  skipHooks: options.withHooks ? false : detection.aiClient !== "claude-code"
2247
2297
  });
2248
2298
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-snipara",
3
- "version": "1.3.17",
3
+ "version": "1.3.18",
4
4
  "description": "Onboard Snipara Hosted MCP Context + Memory with auth, companion workflows, and optional Snipara Sandbox",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",