create-snipara 1.3.30 → 1.3.31
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 +7 -8
- package/dist/index.js +18 -34
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,7 +50,7 @@ The product surfaces remain:
|
|
|
50
50
|
|
|
51
51
|
The default CLI path wires the local companion around those surfaces:
|
|
52
52
|
|
|
53
|
-
- `snipara-companion` for local workflow commands and managed phase commits
|
|
53
|
+
- `snipara-companion` for local workflow commands and managed phase commits
|
|
54
54
|
- `snipara-sandbox` for optional local code execution
|
|
55
55
|
- `snipara-orchestrator` only when explicitly requested with `--with-orchestrator`
|
|
56
56
|
- local config, env files, hook scripts, and a project companion pack
|
|
@@ -140,8 +140,7 @@ The interactive flow now asks for:
|
|
|
140
140
|
- AI client
|
|
141
141
|
|
|
142
142
|
By default, this uses the recommended `hosted-companion` setup: hosted MCP plus
|
|
143
|
-
the local `snipara-companion` workflow helper.
|
|
144
|
-
compatible. Add `--advanced` when you want profile selection, project id entry,
|
|
143
|
+
the local `snipara-companion` workflow helper. Add `--advanced` when you want profile selection, project id entry,
|
|
145
144
|
hook prompts, GitHub automation prompts, or sandbox provider prompts.
|
|
146
145
|
Use `--with-orchestrator` only when you explicitly need the advanced production
|
|
147
146
|
validation and htask package; it is not part of `full-stack` by default.
|
|
@@ -198,7 +197,7 @@ Writes `.snipara/companion/doctor.json` and validates:
|
|
|
198
197
|
- Snipara Sandbox CLI presence
|
|
199
198
|
- environment files
|
|
200
199
|
- hosted MCP reachability when a live API key is available
|
|
201
|
-
- exposed Hosted MCP tool aliases (`snipara_
|
|
200
|
+
- exposed Hosted MCP tool aliases (`snipara_*`)
|
|
202
201
|
- client-specific loading gaps that the terminal cannot prove
|
|
203
202
|
|
|
204
203
|
For Claude-specific support, run:
|
|
@@ -322,7 +321,7 @@ The intended split is:
|
|
|
322
321
|
|
|
323
322
|
- `create-snipara`: Context + Memory onboarding, auth, config, inspect, repair, and upgrade
|
|
324
323
|
- `snipara-openclaw-install`: OpenClaw-only setup wrapper that remains narrower than `create-snipara`
|
|
325
|
-
- `snipara-companion`: default local workflow helper
|
|
324
|
+
- `snipara-companion`: default local workflow helper
|
|
326
325
|
- `snipara-mcp`: local stdio bridge, client-package development, compatibility, and testing
|
|
327
326
|
- `snipara-sandbox`: optional local execution engine
|
|
328
327
|
|
|
@@ -414,9 +413,9 @@ Recommended explanation to users:
|
|
|
414
413
|
|
|
415
414
|
## API Key Requirements
|
|
416
415
|
|
|
417
|
-
Existing manual API keys passed to `create-snipara --api-key`
|
|
418
|
-
|
|
419
|
-
|
|
416
|
+
Existing manual API keys passed to `create-snipara --api-key` must start with `snp-`.
|
|
417
|
+
When `create-snipara` provisions a new account through the browser flow, Snipara returns
|
|
418
|
+
a new `snp-` key from the current hosted API.
|
|
420
419
|
Prefer `SNIPARA_API_KEY` or the interactive prompt over `--api-key`; CLI
|
|
421
420
|
arguments can be visible in shell history and process listings.
|
|
422
421
|
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { homedir } from "os";
|
|
|
13
13
|
// package.json
|
|
14
14
|
var package_default = {
|
|
15
15
|
name: "create-snipara",
|
|
16
|
-
version: "1.3.
|
|
16
|
+
version: "1.3.31",
|
|
17
17
|
description: "Onboard Snipara Hosted MCP Context + Memory with auth, companion workflows, and optional Snipara Sandbox",
|
|
18
18
|
main: "dist/index.js",
|
|
19
19
|
type: "module",
|
|
@@ -88,7 +88,6 @@ var BASE_URL = "https://www.snipara.com";
|
|
|
88
88
|
var API_URL = "https://api.snipara.com";
|
|
89
89
|
var COMPANION_PACKAGE_NAME = "snipara-companion";
|
|
90
90
|
var COMPANION_COMMAND_NAME = "snipara-companion";
|
|
91
|
-
var LEGACY_COMPANION_COMMAND_NAME = "rlm-hook";
|
|
92
91
|
var GITHUB_ANSWER_PACKS_LABEL = "GitHub PR Answer Packs";
|
|
93
92
|
var MCP_PACKAGE_NAME = "snipara-mcp";
|
|
94
93
|
var SANDBOX_PACKAGE_NAME = "snipara-sandbox[all]";
|
|
@@ -520,7 +519,7 @@ async function gatherConfiguration(options) {
|
|
|
520
519
|
{
|
|
521
520
|
title: "I have an API key",
|
|
522
521
|
value: "api",
|
|
523
|
-
description: "Paste an API key that starts with snp-
|
|
522
|
+
description: "Paste an API key that starts with snp-"
|
|
524
523
|
},
|
|
525
524
|
{
|
|
526
525
|
title: "Create free Context + Memory account",
|
|
@@ -889,10 +888,10 @@ function sleep(ms) {
|
|
|
889
888
|
}
|
|
890
889
|
function isManualApiKey(value) {
|
|
891
890
|
const trimmed = value.trim();
|
|
892
|
-
return trimmed.startsWith("snp-")
|
|
891
|
+
return trimmed.startsWith("snp-");
|
|
893
892
|
}
|
|
894
893
|
function manualApiKeyValidationMessage() {
|
|
895
|
-
return "API key should start with snp-
|
|
894
|
+
return "API key should start with snp-";
|
|
896
895
|
}
|
|
897
896
|
function warnApiKeyCliExposure() {
|
|
898
897
|
console.log(
|
|
@@ -911,9 +910,6 @@ function detectCompanionCommand() {
|
|
|
911
910
|
if (commandExists(COMPANION_COMMAND_NAME)) {
|
|
912
911
|
return COMPANION_COMMAND_NAME;
|
|
913
912
|
}
|
|
914
|
-
if (commandExists(LEGACY_COMPANION_COMMAND_NAME)) {
|
|
915
|
-
return LEGACY_COMPANION_COMMAND_NAME;
|
|
916
|
-
}
|
|
917
913
|
return null;
|
|
918
914
|
}
|
|
919
915
|
function detectSandboxCommand() {
|
|
@@ -1041,7 +1037,7 @@ async function installNodeCompanion(upgrade) {
|
|
|
1041
1037
|
return;
|
|
1042
1038
|
}
|
|
1043
1039
|
failures.push(
|
|
1044
|
-
`${packageManager}: command completed but ${COMPANION_COMMAND_NAME} is still not available on PATH
|
|
1040
|
+
`${packageManager}: command completed but ${COMPANION_COMMAND_NAME} is still not available on PATH`
|
|
1045
1041
|
);
|
|
1046
1042
|
} catch (error) {
|
|
1047
1043
|
const detail = error instanceof Error && "message" in error ? error.message.split("\n")[0] : "unknown error";
|
|
@@ -1203,7 +1199,7 @@ This project uses Snipara Hosted MCP for project context and reviewed memory.
|
|
|
1203
1199
|
- Endpoint: \`${buildHostedMcpEndpoint(answers)}\`
|
|
1204
1200
|
- Auth: use \`SNIPARA_API_KEY\` from the environment. Never commit keys.
|
|
1205
1201
|
- For Codex, expose the endpoint as a streamable HTTP MCP server and load the
|
|
1206
|
-
key from
|
|
1202
|
+
key from \`SNIPARA_API_KEY\`.
|
|
1207
1203
|
- At the start of every new thread, validate hosted MCP with a tool-oriented
|
|
1208
1204
|
call such as \`snipara_settings\`, \`tools/list\`, or a lightweight
|
|
1209
1205
|
\`snipara_context_query\`. Do not treat empty MCP resources/templates as an
|
|
@@ -1233,14 +1229,13 @@ Agent task lifecycle:
|
|
|
1233
1229
|
is installed, run \`snipara-companion workflow start --goal "<goal>" --plan-file
|
|
1234
1230
|
<plan_file>\`, then use \`workflow phase-start\`, \`workflow phase-commit\`,
|
|
1235
1231
|
\`workflow resume\`, and \`final-commit\` so compaction cannot lose the next
|
|
1236
|
-
phase.
|
|
1232
|
+
phase.
|
|
1237
1233
|
10. Use local file reads, \`rg\`, git commands, and test commands for exact edits,
|
|
1238
1234
|
current working-tree state, and verification.
|
|
1239
1235
|
11. Treat every \`snipara_code_*\` response as indexed context: check indexed
|
|
1240
1236
|
commit SHA, indexing time, included file sample, coverage, freshness warnings,
|
|
1241
|
-
and sync guidance before relying on it.
|
|
1242
|
-
|
|
1243
|
-
graph may not include local edits.
|
|
1237
|
+
and sync guidance before relying on it. If \`git status --short\` is dirty,
|
|
1238
|
+
warn that the indexed graph may not include local edits.
|
|
1244
1239
|
12. Use Snipara Sandbox only when sandboxed execution, repeatable validation, or
|
|
1245
1240
|
isolated transformations materially help.
|
|
1246
1241
|
13. If a broad query is slow, retry once with a narrow keyword query before
|
|
@@ -1272,9 +1267,9 @@ Use Snipara Hosted MCP before answering project-specific questions.
|
|
|
1272
1267
|
- When \`snipara_context_query\` returns \`answer_pack\`, use its facts, caveats, source map, and verification checklist before drafting claims.
|
|
1273
1268
|
- Use \`snipara_code_callers\`, \`snipara_code_imports\`, \`snipara_code_neighbors\`, or \`snipara_code_shortest_path\` for structural code questions.
|
|
1274
1269
|
- On paid Context plans, use \`snipara_code_symbol_card\` before editing important symbols and \`snipara_code_impact\` before risky multi-file changes or PR reviews.
|
|
1275
|
-
- Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
|
|
1270
|
+
- Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
|
|
1276
1271
|
- Use local file reads, \`rg\`, \`git status --short\`, and tests for exact edits/current working tree; use Snipara for architecture and indexed code graph context.
|
|
1277
|
-
- When the plan is visible and \`snipara-companion\` is installed, use \`snipara-companion workflow start\`, \`phase-start\`, \`phase-commit\`, \`workflow resume\`, and \`final-commit\` to keep phase state durable across compaction.
|
|
1272
|
+
- When the plan is visible and \`snipara-companion\` is installed, use \`snipara-companion workflow start\`, \`phase-start\`, \`phase-commit\`, \`workflow resume\`, and \`final-commit\` to keep phase state durable across compaction.
|
|
1278
1273
|
- If generated hooks are enabled, \`snipara-companion pre-tool\`, \`post-tool\`, and \`stuck-guard status\` provide runtime Rescue Pack checks when the agent loops on failures or empty searches.
|
|
1279
1274
|
- Use Snipara Sandbox only when sandboxed execution or repeatable validation materially helps.
|
|
1280
1275
|
- End substantial work with \`snipara_end_of_task_commit\` when available; for managed workflows, end every phase with \`snipara-companion workflow phase-commit\` and the task with \`snipara-companion final-commit\`.
|
|
@@ -1301,10 +1296,10 @@ This workspace uses Snipara Hosted MCP for current project context, business/cli
|
|
|
1301
1296
|
- Use \`snipara_get_chunk\` before relying on exact cited wording from reference-based results.
|
|
1302
1297
|
- Use \`snipara_code_callers\`, \`snipara_code_imports\`, \`snipara_code_neighbors\`, or \`snipara_code_shortest_path\` for structural code questions.
|
|
1303
1298
|
- On paid Context plans, use \`snipara_code_symbol_card\` before editing important symbols and \`snipara_code_impact\` before risky multi-file changes or PR reviews.
|
|
1304
|
-
- Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
|
|
1299
|
+
- Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
|
|
1305
1300
|
- Use \`snipara_plan\` or \`snipara_decompose\` only for complex work and only when available.
|
|
1306
1301
|
- Use local file reads, \`rg\`, \`git status --short\`, and tests for exact code edits and current working-tree state.
|
|
1307
|
-
- When \`snipara-companion\` is installed and the LLM has a visible multi-phase plan, use \`snipara-companion workflow start\`, \`phase-start\`, \`phase-commit\`, \`workflow resume\`, and \`final-commit\` so the next phase survives compaction.
|
|
1302
|
+
- When \`snipara-companion\` is installed and the LLM has a visible multi-phase plan, use \`snipara-companion workflow start\`, \`phase-start\`, \`phase-commit\`, \`workflow resume\`, and \`final-commit\` so the next phase survives compaction.
|
|
1308
1303
|
- Generated hooks can call \`snipara-companion pre-tool\`, \`post-tool\`, and \`stuck-guard status\` so Rescue Packs are runtime-triggered rather than relying only on instructions.
|
|
1309
1304
|
- Use Snipara Sandbox only when sandboxed execution or repeatable validation materially helps.
|
|
1310
1305
|
- End substantial work with \`snipara_end_of_task_commit\` when available; for managed workflows, end every phase with \`snipara-companion workflow phase-commit\` and the task with \`snipara-companion final-commit\`. Use \`snipara_remember_if_novel\` or \`snipara_remember\` only for narrow durable memories. Never store secrets.
|
|
@@ -1498,8 +1493,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1498
1493
|
SNIPARA_COMPANION_BIN=""
|
|
1499
1494
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1500
1495
|
SNIPARA_COMPANION_BIN="${COMPANION_COMMAND_NAME}"
|
|
1501
|
-
elif command -v ${LEGACY_COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1502
|
-
SNIPARA_COMPANION_BIN="${LEGACY_COMPANION_COMMAND_NAME}"
|
|
1503
1496
|
fi
|
|
1504
1497
|
|
|
1505
1498
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -1518,8 +1511,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1518
1511
|
SNIPARA_COMPANION_BIN=""
|
|
1519
1512
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1520
1513
|
SNIPARA_COMPANION_BIN="${COMPANION_COMMAND_NAME}"
|
|
1521
|
-
elif command -v ${LEGACY_COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1522
|
-
SNIPARA_COMPANION_BIN="${LEGACY_COMPANION_COMMAND_NAME}"
|
|
1523
1514
|
fi
|
|
1524
1515
|
|
|
1525
1516
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -1541,8 +1532,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1541
1532
|
SNIPARA_COMPANION_BIN=""
|
|
1542
1533
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1543
1534
|
SNIPARA_COMPANION_BIN="${COMPANION_COMMAND_NAME}"
|
|
1544
|
-
elif command -v ${LEGACY_COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1545
|
-
SNIPARA_COMPANION_BIN="${LEGACY_COMPANION_COMMAND_NAME}"
|
|
1546
1535
|
fi
|
|
1547
1536
|
|
|
1548
1537
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -1561,8 +1550,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1561
1550
|
SNIPARA_COMPANION_BIN=""
|
|
1562
1551
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1563
1552
|
SNIPARA_COMPANION_BIN="${COMPANION_COMMAND_NAME}"
|
|
1564
|
-
elif command -v ${LEGACY_COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1565
|
-
SNIPARA_COMPANION_BIN="${LEGACY_COMPANION_COMMAND_NAME}"
|
|
1566
1553
|
fi
|
|
1567
1554
|
|
|
1568
1555
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -2431,7 +2418,6 @@ async function testHostedConnection(answers) {
|
|
|
2431
2418
|
spinner.succeed("Connected to Snipara Hosted MCP.");
|
|
2432
2419
|
const toolNames = extractMcpToolNames(toolsResponse.data);
|
|
2433
2420
|
const hasSniparaTools = toolNames.some((name) => name.startsWith("snipara_"));
|
|
2434
|
-
const hasLegacyTools = toolNames.some((name) => name.startsWith("rlm_"));
|
|
2435
2421
|
const checks = [
|
|
2436
2422
|
{
|
|
2437
2423
|
name: "hosted_connection",
|
|
@@ -2440,11 +2426,11 @@ async function testHostedConnection(answers) {
|
|
|
2440
2426
|
},
|
|
2441
2427
|
{
|
|
2442
2428
|
name: "hosted_tool_aliases",
|
|
2443
|
-
status: hasSniparaTools ? "pass" :
|
|
2444
|
-
detail: hasSniparaTools ? "snipara_* tools are exposed by Hosted MCP" :
|
|
2429
|
+
status: hasSniparaTools ? "pass" : "warn",
|
|
2430
|
+
detail: hasSniparaTools ? "snipara_* tools are exposed by Hosted MCP" : "tools/list succeeded, but expected snipara_* tools were not detected"
|
|
2445
2431
|
}
|
|
2446
2432
|
];
|
|
2447
|
-
const settingsTool =
|
|
2433
|
+
const settingsTool = "snipara_settings";
|
|
2448
2434
|
const settingsResponse = await callHostedMcp(answers, "tools/call", {
|
|
2449
2435
|
name: settingsTool,
|
|
2450
2436
|
arguments: {}
|
|
@@ -2639,9 +2625,7 @@ function printSuccess(answers, report) {
|
|
|
2639
2625
|
printNextStep("Open .snipara/companion/README.md for local commands and repair flow.");
|
|
2640
2626
|
printNextStep("Run create-snipara doctor anytime you want a fresh local validation report.");
|
|
2641
2627
|
if (answers.installCompanion) {
|
|
2642
|
-
printNextStep(
|
|
2643
|
-
`${COMPANION_COMMAND_NAME} is the primary companion command; legacy ${LEGACY_COMPANION_COMMAND_NAME} remains compatible.`
|
|
2644
|
-
);
|
|
2628
|
+
printNextStep(`${COMPANION_COMMAND_NAME} is the companion command for local workflow helpers.`);
|
|
2645
2629
|
printNextStep(
|
|
2646
2630
|
`Use ${COMPANION_COMMAND_NAME} query / plan / upload / task-commit for explicit local workflows.`
|
|
2647
2631
|
);
|
|
@@ -2797,7 +2781,7 @@ function resolveMaintenanceProfile(detection, explicitProfile) {
|
|
|
2797
2781
|
function readApiKeyFromEnvFiles() {
|
|
2798
2782
|
const candidates = [".env.local", ".env"];
|
|
2799
2783
|
for (const file of candidates) {
|
|
2800
|
-
const value = readEnvValueFromFile(file, ["SNIPARA_API_KEY"
|
|
2784
|
+
const value = readEnvValueFromFile(file, ["SNIPARA_API_KEY"]);
|
|
2801
2785
|
if (value) {
|
|
2802
2786
|
return value;
|
|
2803
2787
|
}
|
package/package.json
CHANGED