create-snipara 1.3.30 → 1.3.32
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 +24 -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.32",
|
|
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,11 +1199,15 @@ 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
|
|
1210
1206
|
outage because Snipara may be tool-only.
|
|
1207
|
+
- If a session appears to expose only a subset of expected Snipara tools, call
|
|
1208
|
+
\`snipara_help(list_all=true)\` and compare exact tool names before concluding
|
|
1209
|
+
that a tool is unavailable. Do not infer absence from one broad discovery
|
|
1210
|
+
pass or a ranked tool-search result.
|
|
1211
1211
|
|
|
1212
1212
|
Agent task lifecycle:
|
|
1213
1213
|
|
|
@@ -1233,14 +1233,13 @@ Agent task lifecycle:
|
|
|
1233
1233
|
is installed, run \`snipara-companion workflow start --goal "<goal>" --plan-file
|
|
1234
1234
|
<plan_file>\`, then use \`workflow phase-start\`, \`workflow phase-commit\`,
|
|
1235
1235
|
\`workflow resume\`, and \`final-commit\` so compaction cannot lose the next
|
|
1236
|
-
phase.
|
|
1236
|
+
phase.
|
|
1237
1237
|
10. Use local file reads, \`rg\`, git commands, and test commands for exact edits,
|
|
1238
1238
|
current working-tree state, and verification.
|
|
1239
1239
|
11. Treat every \`snipara_code_*\` response as indexed context: check indexed
|
|
1240
1240
|
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.
|
|
1241
|
+
and sync guidance before relying on it. If \`git status --short\` is dirty,
|
|
1242
|
+
warn that the indexed graph may not include local edits.
|
|
1244
1243
|
12. Use Snipara Sandbox only when sandboxed execution, repeatable validation, or
|
|
1245
1244
|
isolated transformations materially help.
|
|
1246
1245
|
13. If a broad query is slow, retry once with a narrow keyword query before
|
|
@@ -1267,14 +1266,15 @@ Canonical project context is in \`AGENTS.md\`. This file exists for Claude Code
|
|
|
1267
1266
|
Use Snipara Hosted MCP before answering project-specific questions.
|
|
1268
1267
|
|
|
1269
1268
|
- Endpoint: \`${buildHostedMcpEndpoint(answers)}\`
|
|
1269
|
+
- If a session exposes only a subset of expected Snipara tools, call \`snipara_help(list_all=true)\` before concluding a tool is unavailable.
|
|
1270
1270
|
- Start substantial work with \`snipara_recall\` and a targeted \`snipara_context_query\`.
|
|
1271
1271
|
- Use \`snipara_context_query\` for source truth and \`snipara_get_chunk\` for exact cited sections.
|
|
1272
1272
|
- When \`snipara_context_query\` returns \`answer_pack\`, use its facts, caveats, source map, and verification checklist before drafting claims.
|
|
1273
1273
|
- Use \`snipara_code_callers\`, \`snipara_code_imports\`, \`snipara_code_neighbors\`, or \`snipara_code_shortest_path\` for structural code questions.
|
|
1274
1274
|
- 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.
|
|
1275
|
+
- Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
|
|
1276
1276
|
- 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.
|
|
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.
|
|
1278
1278
|
- 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
1279
|
- Use Snipara Sandbox only when sandboxed execution or repeatable validation materially helps.
|
|
1280
1280
|
- 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\`.
|
|
@@ -1294,6 +1294,7 @@ alwaysApply: true
|
|
|
1294
1294
|
This workspace uses Snipara Hosted MCP for current project context, business/client context, and reviewed memory.
|
|
1295
1295
|
|
|
1296
1296
|
- Check the configured Snipara MCP server before answering project-specific questions.
|
|
1297
|
+
- If a session exposes only a subset of expected Snipara tools, call \`snipara_help(list_all=true)\` before concluding a tool is unavailable.
|
|
1297
1298
|
- Endpoint: \`${buildHostedMcpEndpoint(answers)}\`
|
|
1298
1299
|
- Use \`snipara_recall\` for durable decisions, preferences, and validated learnings.
|
|
1299
1300
|
- Use \`snipara_context_query\` for docs, business context, current client/project truth, and narrative source material.
|
|
@@ -1301,10 +1302,10 @@ This workspace uses Snipara Hosted MCP for current project context, business/cli
|
|
|
1301
1302
|
- Use \`snipara_get_chunk\` before relying on exact cited wording from reference-based results.
|
|
1302
1303
|
- Use \`snipara_code_callers\`, \`snipara_code_imports\`, \`snipara_code_neighbors\`, or \`snipara_code_shortest_path\` for structural code questions.
|
|
1303
1304
|
- 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.
|
|
1305
|
+
- Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
|
|
1305
1306
|
- Use \`snipara_plan\` or \`snipara_decompose\` only for complex work and only when available.
|
|
1306
1307
|
- 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.
|
|
1308
|
+
- 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
1309
|
- 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
1310
|
- Use Snipara Sandbox only when sandboxed execution or repeatable validation materially helps.
|
|
1310
1311
|
- 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 +1499,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1498
1499
|
SNIPARA_COMPANION_BIN=""
|
|
1499
1500
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1500
1501
|
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
1502
|
fi
|
|
1504
1503
|
|
|
1505
1504
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -1518,8 +1517,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1518
1517
|
SNIPARA_COMPANION_BIN=""
|
|
1519
1518
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1520
1519
|
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
1520
|
fi
|
|
1524
1521
|
|
|
1525
1522
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -1541,8 +1538,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1541
1538
|
SNIPARA_COMPANION_BIN=""
|
|
1542
1539
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1543
1540
|
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
1541
|
fi
|
|
1547
1542
|
|
|
1548
1543
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -1561,8 +1556,6 @@ ${answers.projectId ? `export SNIPARA_PROJECT_ID="${answers.projectId}"` : ""}
|
|
|
1561
1556
|
SNIPARA_COMPANION_BIN=""
|
|
1562
1557
|
if command -v ${COMPANION_COMMAND_NAME} >/dev/null 2>&1; then
|
|
1563
1558
|
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
1559
|
fi
|
|
1567
1560
|
|
|
1568
1561
|
if [ -n "$SNIPARA_COMPANION_BIN" ]; then
|
|
@@ -2431,7 +2424,6 @@ async function testHostedConnection(answers) {
|
|
|
2431
2424
|
spinner.succeed("Connected to Snipara Hosted MCP.");
|
|
2432
2425
|
const toolNames = extractMcpToolNames(toolsResponse.data);
|
|
2433
2426
|
const hasSniparaTools = toolNames.some((name) => name.startsWith("snipara_"));
|
|
2434
|
-
const hasLegacyTools = toolNames.some((name) => name.startsWith("rlm_"));
|
|
2435
2427
|
const checks = [
|
|
2436
2428
|
{
|
|
2437
2429
|
name: "hosted_connection",
|
|
@@ -2440,11 +2432,11 @@ async function testHostedConnection(answers) {
|
|
|
2440
2432
|
},
|
|
2441
2433
|
{
|
|
2442
2434
|
name: "hosted_tool_aliases",
|
|
2443
|
-
status: hasSniparaTools ? "pass" :
|
|
2444
|
-
detail: hasSniparaTools ? "snipara_* tools are exposed by Hosted MCP" :
|
|
2435
|
+
status: hasSniparaTools ? "pass" : "warn",
|
|
2436
|
+
detail: hasSniparaTools ? "snipara_* tools are exposed by Hosted MCP" : "tools/list succeeded, but expected snipara_* tools were not detected"
|
|
2445
2437
|
}
|
|
2446
2438
|
];
|
|
2447
|
-
const settingsTool =
|
|
2439
|
+
const settingsTool = "snipara_settings";
|
|
2448
2440
|
const settingsResponse = await callHostedMcp(answers, "tools/call", {
|
|
2449
2441
|
name: settingsTool,
|
|
2450
2442
|
arguments: {}
|
|
@@ -2639,9 +2631,7 @@ function printSuccess(answers, report) {
|
|
|
2639
2631
|
printNextStep("Open .snipara/companion/README.md for local commands and repair flow.");
|
|
2640
2632
|
printNextStep("Run create-snipara doctor anytime you want a fresh local validation report.");
|
|
2641
2633
|
if (answers.installCompanion) {
|
|
2642
|
-
printNextStep(
|
|
2643
|
-
`${COMPANION_COMMAND_NAME} is the primary companion command; legacy ${LEGACY_COMPANION_COMMAND_NAME} remains compatible.`
|
|
2644
|
-
);
|
|
2634
|
+
printNextStep(`${COMPANION_COMMAND_NAME} is the companion command for local workflow helpers.`);
|
|
2645
2635
|
printNextStep(
|
|
2646
2636
|
`Use ${COMPANION_COMMAND_NAME} query / plan / upload / task-commit for explicit local workflows.`
|
|
2647
2637
|
);
|
|
@@ -2797,7 +2787,7 @@ function resolveMaintenanceProfile(detection, explicitProfile) {
|
|
|
2797
2787
|
function readApiKeyFromEnvFiles() {
|
|
2798
2788
|
const candidates = [".env.local", ".env"];
|
|
2799
2789
|
for (const file of candidates) {
|
|
2800
|
-
const value = readEnvValueFromFile(file, ["SNIPARA_API_KEY"
|
|
2790
|
+
const value = readEnvValueFromFile(file, ["SNIPARA_API_KEY"]);
|
|
2801
2791
|
if (value) {
|
|
2802
2792
|
return value;
|
|
2803
2793
|
}
|
package/package.json
CHANGED