create-ragen-app 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -2
- package/dist/args.d.ts +8 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +8 -0
- package/dist/args.js.map +1 -1
- package/dist/cli.d.ts +8 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +135 -15
- package/dist/cli.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/llm-provider.d.ts +17 -1
- package/dist/llm-provider.d.ts.map +1 -1
- package/dist/llm-provider.js +36 -7
- package/dist/llm-provider.js.map +1 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +18 -0
- package/dist/manifest.js.map +1 -1
- package/dist/manual-setup.d.ts +2 -0
- package/dist/manual-setup.d.ts.map +1 -0
- package/dist/manual-setup.js +93 -0
- package/dist/manual-setup.js.map +1 -0
- package/dist/tasks.d.ts +15 -0
- package/dist/tasks.d.ts.map +1 -1
- package/dist/tasks.js +28 -0
- package/dist/tasks.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -11,8 +11,44 @@ It clones the repo, generates every secret it safely can, lets you paste a
|
|
|
11
11
|
plain OpenAI or Anthropic API key instead of configuring an enterprise model
|
|
12
12
|
provider, starts the backing services (Postgres, Qdrant, Temporal, LiteLLM,
|
|
13
13
|
Redis, …) in Docker, and runs the app's own first-run setup (Prisma client,
|
|
14
|
-
migrations, seed data)
|
|
15
|
-
|
|
14
|
+
migrations, seed data). What is left is starting the two apps, in separate
|
|
15
|
+
terminals:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
cd my-ragen-app
|
|
19
|
+
npm run api:dev # apps/api — the web app creates threads through it
|
|
20
|
+
npm run web:dev # apps/web — http://localhost:3000
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`apps/api` is not optional: `apps/web` delegates thread creation, the thread
|
|
24
|
+
sidebar and notifications to it (ADR-21), so running only the web app gets you
|
|
25
|
+
a panel that loads and a chat that cannot open a thread.
|
|
26
|
+
|
|
27
|
+
## Keep this in sync with the app
|
|
28
|
+
|
|
29
|
+
This package is the only thing that exercises the first-run path.
|
|
30
|
+
`.github/workflows/installer.yml` runs it on pushes to `main` and on pull
|
|
31
|
+
requests from this repository: it packs the package, installs the tarball,
|
|
32
|
+
scaffolds from the branch under review and asserts the result is configured.
|
|
33
|
+
That catches a broken installer, but only for the cases the assertions cover —
|
|
34
|
+
`AGENTS.md`'s Post-Task Workflow still asks for an update here in the same PR,
|
|
35
|
+
and for the PR description to say so.
|
|
36
|
+
|
|
37
|
+
What counts as install-affecting:
|
|
38
|
+
|
|
39
|
+
| Change | What to update here |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| A new or renamed env var that a fresh install must set | `src/manifest.ts` (generated secret or corrected default) |
|
|
42
|
+
| A default model, embedding model or `VECTOR_SIZE` change | `src/llm-provider.ts` — and the two must stay consistent, or Qdrant rejects every upsert |
|
|
43
|
+
| An app the web app can no longer run without | the outro in `src/cli.ts`, which tells people what to start |
|
|
44
|
+
| A new first-run step (migration, seed, generate) | `src/tasks.ts` and `maybeRunFirstTimeSetup` |
|
|
45
|
+
| A `docker-compose.yml` service, port or name change | `src/tasks.ts`, and the collision check in `ragenStackVolumeExists` |
|
|
46
|
+
| A gate that a brand-new install cannot pass (registration, licensing, onboarding) | usually the app, not this package — a fresh install must be able to reach a working chat without an administrator who does not exist yet |
|
|
47
|
+
|
|
48
|
+
`tests/architecture/create-ragen-app-manifest-is-current.test.ts` catches one
|
|
49
|
+
direction only: a key this package writes that the `.env.example` no longer
|
|
50
|
+
has. The opposite drift — a new required var nobody taught the manifest
|
|
51
|
+
about — has no textual signal, which is why the rule above is a rule.
|
|
16
52
|
|
|
17
53
|
## Flags
|
|
18
54
|
|
|
@@ -22,12 +58,24 @@ only remaining step.
|
|
|
22
58
|
| `--skip-docker` | Write the `.env.local` files but don't start Docker |
|
|
23
59
|
| `--skip-install` | Skip `npm install` / Prisma / seed |
|
|
24
60
|
| `--yes` | Accept every default without prompting |
|
|
61
|
+
| `--provider=openai\|anthropic` | Take the API key from `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` instead of prompting |
|
|
25
62
|
|
|
26
63
|
Anything the wizard doesn't ask about (S3 storage, encryption at rest,
|
|
27
64
|
Stripe, email, MCP connectors) ships exactly as documented in the repo's own
|
|
28
65
|
`.env.example` files — see
|
|
29
66
|
[docs/self-hosting](https://docs.ragen.ai/docs/self-hosting).
|
|
30
67
|
|
|
68
|
+
## Declining to paste a key
|
|
69
|
+
|
|
70
|
+
Typing a provider API key into someone else's CLI is a reasonable thing to
|
|
71
|
+
refuse, so the provider step is skippable — pick *"I'll configure LiteLLM
|
|
72
|
+
myself"*, or press enter on an empty key. The install still completes, and
|
|
73
|
+
`SETUP-LLM.md` is written into the new directory with the exact `.env.local`
|
|
74
|
+
values and `model_list` entries for OpenAI and Anthropic, plus the one
|
|
75
|
+
ordering constraint that matters (`VECTOR_SIZE` has to be right *before* the
|
|
76
|
+
first document is indexed). `src/manual-setup.ts` generates that file from
|
|
77
|
+
`LLM_PROVIDERS`, so it cannot drift from what the wizard would have done.
|
|
78
|
+
|
|
31
79
|
## What it changes, and how it decides
|
|
32
80
|
|
|
33
81
|
`src/manifest.ts` is the single list of which env vars get a generated
|
|
@@ -37,6 +85,27 @@ cloned repo's own `.env.example` already has it. See the file's own comments
|
|
|
37
85
|
for the sharing rules (some secrets are the same value in two files, most are
|
|
38
86
|
independent).
|
|
39
87
|
|
|
88
|
+
## Testing a change before publishing
|
|
89
|
+
|
|
90
|
+
`npm pack` reproduces exactly what npm would serve — it honours `files`,
|
|
91
|
+
`bin` and `prepare` — so the published artifact can be exercised without a
|
|
92
|
+
registry:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm pack --workspace=create-ragen-app --pack-destination=/tmp
|
|
96
|
+
npx /tmp/create-ragen-app-0.1.0.tgz /tmp/try-ragen \
|
|
97
|
+
--ref=my-branch --provider=openai --skip-docker --skip-install
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`--ref` is the part people forget: the CLI clones the repository from GitHub,
|
|
101
|
+
so testing a change to the *app* needs that branch pushed. Without it you are
|
|
102
|
+
testing new installer code against old repository content.
|
|
103
|
+
|
|
104
|
+
`prepare` runs `clean` before `build` deliberately. `files` publishes `dist`
|
|
105
|
+
wholesale and `tsc` does not remove the output of a source file that no
|
|
106
|
+
longer exists, so without the clean a renamed or deleted module ships as a
|
|
107
|
+
stale `.js` that nothing in the repo can explain.
|
|
108
|
+
|
|
40
109
|
## Publishing (manual for now)
|
|
41
110
|
|
|
42
111
|
There is no CI job wired up yet (see the project plan's non-goals). To cut a
|
package/dist/args.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LlmProviderChoice } from './llm-provider';
|
|
1
2
|
export interface CliArgs {
|
|
2
3
|
/** Undefined when the user gave no positional argument — the CLI prompts. */
|
|
3
4
|
targetDir: string | undefined;
|
|
@@ -5,6 +6,13 @@ export interface CliArgs {
|
|
|
5
6
|
skipDocker: boolean;
|
|
6
7
|
skipInstall: boolean;
|
|
7
8
|
yes: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Undefined when the CLI should ask. Set by `--provider=`, which takes the
|
|
11
|
+
* API key from the environment instead of a prompt — for anyone who would
|
|
12
|
+
* rather not put a provider key in their shell history, and for CI, which
|
|
13
|
+
* has no way to answer a prompt at all.
|
|
14
|
+
*/
|
|
15
|
+
provider: LlmProviderChoice | undefined;
|
|
8
16
|
}
|
|
9
17
|
export declare const DEFAULT_TARGET_DIR = "./ragen-app";
|
|
10
18
|
export declare function parseArgs(argv: string[]): CliArgs;
|
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC;IACb;;;;;OAKG;IACH,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACzC;AAED,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAKhD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAsCjD"}
|
package/dist/args.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.DEFAULT_TARGET_DIR = void 0;
|
|
|
4
4
|
exports.parseArgs = parseArgs;
|
|
5
5
|
exports.DEFAULT_TARGET_DIR = './ragen-app';
|
|
6
6
|
const DEFAULT_REF = 'main';
|
|
7
|
+
const PROVIDERS = ['openai', 'anthropic'];
|
|
7
8
|
function parseArgs(argv) {
|
|
8
9
|
const positionals = argv.filter((arg) => !arg.startsWith('--'));
|
|
9
10
|
if (positionals.length > 1) {
|
|
@@ -20,12 +21,19 @@ function parseArgs(argv) {
|
|
|
20
21
|
?.slice(prefix.length);
|
|
21
22
|
return value || undefined;
|
|
22
23
|
};
|
|
24
|
+
const provider = valueOf('provider');
|
|
25
|
+
if (provider && !PROVIDERS.includes(provider)) {
|
|
26
|
+
// Rejected rather than ignored: silently falling back to "ask me" turns a
|
|
27
|
+
// typo in a CI job into a hang on a prompt nothing can answer.
|
|
28
|
+
throw new Error(`Unknown --provider=${provider}. Expected one of: ${PROVIDERS.join(', ')}.`);
|
|
29
|
+
}
|
|
23
30
|
return {
|
|
24
31
|
targetDir: positionals[0],
|
|
25
32
|
ref: valueOf('ref') ?? DEFAULT_REF,
|
|
26
33
|
skipDocker: hasFlag('skip-docker'),
|
|
27
34
|
skipInstall: hasFlag('skip-install'),
|
|
28
35
|
yes: hasFlag('yes'),
|
|
36
|
+
provider: provider,
|
|
29
37
|
};
|
|
30
38
|
}
|
|
31
39
|
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":";;;AAuBA,8BAsCC;AA3CY,QAAA,kBAAkB,GAAG,aAAa,CAAC;AAChD,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,MAAM,SAAS,GAAwB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAE/D,SAAgB,SAAS,CAAC,IAAc;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,wEAAwE;QACxE,iEAAiE;QACjE,iCAAiC;QACjC,MAAM,IAAI,KAAK,CACb,+BAA+B,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,sCAAsC,CACpG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAsB,EAAE;QACnD,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI;aACf,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACtC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAA6B,CAAC,EAAE,CAAC;QACnE,0EAA0E;QAC1E,+DAA+D;QAC/D,MAAM,IAAI,KAAK,CACb,sBAAsB,QAAQ,sBAAsB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QACzB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW;QAClC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC;QACpC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;QACnB,QAAQ,EAAE,QAAyC;KACpD,CAAC;AACJ,CAAC"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Returns whether the install ran to completion, so `index.ts` can exit
|
|
3
|
+
* non-zero when it did not. Every `clack.cancel()` above used to `return`
|
|
4
|
+
* into a resolved promise and a zero exit code — an aborted install looked
|
|
5
|
+
* like a successful one to anything reading `$?`, which is a shell `&&`, a
|
|
6
|
+
* Dockerfile, and the CI job that exists to catch exactly this.
|
|
7
|
+
*/
|
|
8
|
+
export declare function run(argv: string[]): Promise<boolean>;
|
|
2
9
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA4DA;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAgI1D"}
|
package/dist/cli.js
CHANGED
|
@@ -42,20 +42,30 @@ const args_1 = require("./args");
|
|
|
42
42
|
const clone_1 = require("./clone");
|
|
43
43
|
const env_file_1 = require("./env-file");
|
|
44
44
|
const litellm_config_1 = require("./litellm-config");
|
|
45
|
+
const manual_setup_1 = require("./manual-setup");
|
|
45
46
|
const llm_provider_1 = require("./llm-provider");
|
|
46
47
|
const manifest_1 = require("./manifest");
|
|
47
48
|
const secrets_1 = require("./secrets");
|
|
48
49
|
const tasks_1 = require("./tasks");
|
|
50
|
+
/** Written into the new install whenever a model still has to be wired by hand. */
|
|
51
|
+
const MANUAL_SETUP_FILENAME = 'SETUP-LLM.md';
|
|
49
52
|
const ENV_PATHS = {
|
|
50
53
|
root: { example: '.env.example', local: '.env.local' },
|
|
51
54
|
admin: { example: 'apps/admin/.env.example', local: 'apps/admin/.env.local' },
|
|
52
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* Returns whether the install ran to completion, so `index.ts` can exit
|
|
58
|
+
* non-zero when it did not. Every `clack.cancel()` above used to `return`
|
|
59
|
+
* into a resolved promise and a zero exit code — an aborted install looked
|
|
60
|
+
* like a successful one to anything reading `$?`, which is a shell `&&`, a
|
|
61
|
+
* Dockerfile, and the CI job that exists to catch exactly this.
|
|
62
|
+
*/
|
|
53
63
|
async function run(argv) {
|
|
54
64
|
const args = (0, args_1.parseArgs)(argv);
|
|
55
65
|
clack.intro('create-ragen-app');
|
|
56
66
|
const targetDir = await resolveTargetDir(args.targetDir, args.yes);
|
|
57
67
|
if (!targetDir) {
|
|
58
|
-
return;
|
|
68
|
+
return false;
|
|
59
69
|
}
|
|
60
70
|
const cloneSpinner = clack.spinner();
|
|
61
71
|
cloneSpinner.start(`Cloning Ragen into ${targetDir}`);
|
|
@@ -65,18 +75,16 @@ async function run(argv) {
|
|
|
65
75
|
catch (error) {
|
|
66
76
|
cloneSpinner.stop('Clone failed.', 1);
|
|
67
77
|
clack.cancel(`Could not download ${args.ref} from the Ragen repository: ${String(error)}`);
|
|
68
|
-
return;
|
|
78
|
+
return false;
|
|
69
79
|
}
|
|
70
80
|
cloneSpinner.stop('Cloned.');
|
|
71
81
|
const resolvedValues = resolveManifestValues();
|
|
72
82
|
const rootOverrides = overridesForTarget('root', resolvedValues);
|
|
73
83
|
const adminOverrides = overridesForTarget('admin', resolvedValues);
|
|
74
|
-
const llmPrompt = args
|
|
75
|
-
? { cancelled: false, choice: undefined }
|
|
76
|
-
: await promptLlmProvider();
|
|
84
|
+
const llmPrompt = await resolveLlmProvider(args);
|
|
77
85
|
if (llmPrompt.cancelled) {
|
|
78
86
|
clack.cancel('Cancelled.');
|
|
79
|
-
return;
|
|
87
|
+
return false;
|
|
80
88
|
}
|
|
81
89
|
const llmChoice = llmPrompt.choice;
|
|
82
90
|
if (llmChoice) {
|
|
@@ -90,17 +98,38 @@ async function run(argv) {
|
|
|
90
98
|
`Wrote what could be matched, but these keys have no line in the cloned repo's .env.example: ${missingKeys.join(', ')}.`,
|
|
91
99
|
"That usually means create-ragen-app's manifest and the repo have drifted — fix them by hand in .env.local before starting the app. Stopping before Docker/migrations, since they'd run against an incomplete config.",
|
|
92
100
|
].join('\n'));
|
|
93
|
-
return;
|
|
101
|
+
return false;
|
|
94
102
|
}
|
|
95
103
|
if (llmChoice) {
|
|
96
|
-
patchLiteLLMConfig(targetDir, llmChoice.
|
|
104
|
+
patchLiteLLMConfig(targetDir, llmChoice.liteLLMEntries);
|
|
105
|
+
if (!llmChoice.embeddingsConfigured) {
|
|
106
|
+
clack.log.warn([
|
|
107
|
+
'Chat is configured, but this provider has no embeddings API — the',
|
|
108
|
+
'knowledge base will not work until you add one. See',
|
|
109
|
+
`${MANUAL_SETUP_FILENAME} in the new directory.`,
|
|
110
|
+
].join(' '));
|
|
111
|
+
writeManualSetupGuide(targetDir);
|
|
112
|
+
}
|
|
97
113
|
}
|
|
98
114
|
else {
|
|
99
|
-
|
|
115
|
+
// Declining to paste a provider key into someone else's CLI is
|
|
116
|
+
// reasonable, so this path has to leave a person able to finish by hand
|
|
117
|
+
// rather than just telling them something is broken.
|
|
118
|
+
const guidePath = writeManualSetupGuide(targetDir);
|
|
119
|
+
clack.note([
|
|
120
|
+
'No LLM provider configured, so chat and the knowledge base are off.',
|
|
121
|
+
'',
|
|
122
|
+
'Two files to edit, then `docker compose restart litellm`:',
|
|
123
|
+
' .env.local — your key, DEFAULT_MODEL, REPHRASE_MODEL,',
|
|
124
|
+
' EMBEDDINGS_MODEL, VECTOR_SIZE',
|
|
125
|
+
' infra/litellm/config.yaml — a model_list entry per model',
|
|
126
|
+
'',
|
|
127
|
+
`Exact values for OpenAI and Anthropic are written to ${guidePath}.`,
|
|
128
|
+
].join('\n'), 'Configure a model later');
|
|
100
129
|
}
|
|
101
130
|
if (!args.skipDocker) {
|
|
102
131
|
if (!(await maybeStartDocker(targetDir, args.yes))) {
|
|
103
|
-
return;
|
|
132
|
+
return false;
|
|
104
133
|
}
|
|
105
134
|
}
|
|
106
135
|
if (!args.skipInstall) {
|
|
@@ -111,20 +140,30 @@ async function run(argv) {
|
|
|
111
140
|
// through explicitly.
|
|
112
141
|
const rootEnv = (0, dotenv_1.parse)(rootWrite.content);
|
|
113
142
|
if (!(await maybeRunFirstTimeSetup(targetDir, args.yes, rootEnv))) {
|
|
114
|
-
return;
|
|
143
|
+
return false;
|
|
115
144
|
}
|
|
116
145
|
}
|
|
117
146
|
clack.outro([
|
|
118
147
|
'Done. Next steps:',
|
|
119
148
|
` cd ${targetDir}`,
|
|
120
|
-
' npm run
|
|
149
|
+
' npm run api:dev # in one terminal',
|
|
150
|
+
' npm run web:dev # in another',
|
|
151
|
+
'',
|
|
152
|
+
// Both, not just web: apps/web delegates thread creation, the thread
|
|
153
|
+
// sidebar and notifications to apps/api (ADR-21), so starting only the
|
|
154
|
+
// web app gets you a panel that loads and a chat that cannot open a
|
|
155
|
+
// thread.
|
|
156
|
+
'apps/api is not optional — the web app creates threads through it,',
|
|
157
|
+
'so chat fails without it.',
|
|
121
158
|
'',
|
|
122
159
|
'App: http://localhost:3000',
|
|
160
|
+
'API: http://localhost:3001',
|
|
123
161
|
'Admin: http://localhost:3200 (npm run admin:dev)',
|
|
124
162
|
'',
|
|
125
163
|
'Anything skipped above (S3 storage, encryption, Stripe, email, MCP',
|
|
126
164
|
'connectors) is documented in docs/self-hosting.',
|
|
127
165
|
].join('\n'));
|
|
166
|
+
return true;
|
|
128
167
|
}
|
|
129
168
|
async function resolveTargetDir(given, yes) {
|
|
130
169
|
let targetDir = given;
|
|
@@ -188,6 +227,43 @@ function writeEnvFile(targetDir, target, overrides) {
|
|
|
188
227
|
(0, node_fs_1.writeFileSync)(localPath, content, { mode: 0o600 });
|
|
189
228
|
return { content, missingKeys };
|
|
190
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Three ways to arrive at a provider, in precedence order: named on the
|
|
232
|
+
* command line with the key in the environment, declined wholesale by
|
|
233
|
+
* `--yes`, or asked for.
|
|
234
|
+
*/
|
|
235
|
+
async function resolveLlmProvider(args) {
|
|
236
|
+
if (args.provider) {
|
|
237
|
+
return providerFromEnvironment(args.provider);
|
|
238
|
+
}
|
|
239
|
+
if (args.yes) {
|
|
240
|
+
return { cancelled: false, choice: undefined };
|
|
241
|
+
}
|
|
242
|
+
return promptLlmProvider();
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* `--provider=` takes the key from the environment rather than a prompt.
|
|
246
|
+
*
|
|
247
|
+
* Two callers want this. Someone who would rather not type a provider key
|
|
248
|
+
* into another project's CLI — it lands in shell history and in whatever
|
|
249
|
+
* records the terminal — can export it instead. And CI cannot answer a
|
|
250
|
+
* prompt at all, which is why nothing has ever exercised the configured-
|
|
251
|
+
* provider path automatically.
|
|
252
|
+
*
|
|
253
|
+
* A missing variable stops the install instead of quietly falling through to
|
|
254
|
+
* the unconfigured path: `--provider` is an explicit statement that a model
|
|
255
|
+
* should be wired, so silently not wiring one would be the wrong answer to
|
|
256
|
+
* a typo'd variable name in a CI job.
|
|
257
|
+
*/
|
|
258
|
+
function providerFromEnvironment(choice) {
|
|
259
|
+
const { apiKeyEnvVar, label } = llm_provider_1.LLM_PROVIDERS[choice];
|
|
260
|
+
const apiKey = process.env[apiKeyEnvVar]?.trim();
|
|
261
|
+
if (!apiKey) {
|
|
262
|
+
clack.cancel(`--provider=${choice} needs the ${label} key in ${apiKeyEnvVar}, and that variable is empty. Export it and run again, or drop the flag to be asked for it.`);
|
|
263
|
+
return { cancelled: true };
|
|
264
|
+
}
|
|
265
|
+
return { cancelled: false, choice: (0, llm_provider_1.resolveLlmProviderChoice)(choice, apiKey) };
|
|
266
|
+
}
|
|
191
267
|
async function promptLlmProvider() {
|
|
192
268
|
const choice = await clack.select({
|
|
193
269
|
message: 'Which LLM provider should power chat?',
|
|
@@ -217,10 +293,26 @@ async function promptLlmProvider() {
|
|
|
217
293
|
choice: (0, llm_provider_1.resolveLlmProviderChoice)(choice, apiKey),
|
|
218
294
|
};
|
|
219
295
|
}
|
|
220
|
-
function patchLiteLLMConfig(targetDir,
|
|
296
|
+
function patchLiteLLMConfig(targetDir, entries) {
|
|
221
297
|
const configPath = (0, node_path_1.join)(targetDir, 'infra/litellm/config.yaml');
|
|
222
|
-
|
|
223
|
-
|
|
298
|
+
// Reversed because each insert goes directly under `model_list:`, so the
|
|
299
|
+
// last one applied ends up on top. Reading the file afterwards should show
|
|
300
|
+
// the chat model first and the embedding model under it, in the order the
|
|
301
|
+
// wizard asked about them.
|
|
302
|
+
const patched = [...entries]
|
|
303
|
+
.reverse()
|
|
304
|
+
.reduce((config, entry) => (0, litellm_config_1.addLiteLLMModel)(config, entry), (0, node_fs_1.readFileSync)(configPath, 'utf8'));
|
|
305
|
+
(0, node_fs_1.writeFileSync)(configPath, patched);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Leaves the manual instructions on disk as well as on screen. A terminal
|
|
309
|
+
* that has just scrolled a `docker compose` build past them is exactly the
|
|
310
|
+
* moment someone needs them, and a file survives that.
|
|
311
|
+
*/
|
|
312
|
+
function writeManualSetupGuide(targetDir) {
|
|
313
|
+
const path = (0, node_path_1.join)(targetDir, MANUAL_SETUP_FILENAME);
|
|
314
|
+
(0, node_fs_1.writeFileSync)(path, (0, manual_setup_1.manualLlmSetupInstructions)());
|
|
315
|
+
return path;
|
|
224
316
|
}
|
|
225
317
|
async function confirmOrSkip(message, yes) {
|
|
226
318
|
if (yes) {
|
|
@@ -250,6 +342,34 @@ async function runStep(spinner, label, successMessage, task) {
|
|
|
250
342
|
return true;
|
|
251
343
|
}
|
|
252
344
|
async function maybeStartDocker(targetDir, yes) {
|
|
345
|
+
// Before the confirm, not after: sharing a database with an install you
|
|
346
|
+
// already depend on is the kind of thing to decline, and you can only
|
|
347
|
+
// decline it if you are told first.
|
|
348
|
+
if (await (0, tasks_1.ragenStackVolumeExists)()) {
|
|
349
|
+
clack.log.warn([
|
|
350
|
+
'This machine already runs a Ragen stack, and docker-compose.yml pins',
|
|
351
|
+
'container, volume and network names globally — so starting this one',
|
|
352
|
+
'would reuse the existing Postgres and Qdrant data, not create its own.',
|
|
353
|
+
'',
|
|
354
|
+
'To keep them apart, answer no here and start the stack yourself under a',
|
|
355
|
+
'distinct name *and* distinct host ports — the name only moves the',
|
|
356
|
+
'containers and volumes, while the published ports would still collide',
|
|
357
|
+
'with the running stack:',
|
|
358
|
+
'',
|
|
359
|
+
` cd ${targetDir} \\`,
|
|
360
|
+
' && RAGEN_STACK_NAME=my-ragen \\',
|
|
361
|
+
' POSTGRES_PORT=55532 QDRANT_PORT=6343 QDRANT_GRPC_PORT=6344 \\',
|
|
362
|
+
' TEMPORAL_PORT=7243 TEMPORAL_UI_PORT=8090 \\',
|
|
363
|
+
' LITELLM_PORT=4010 LITELLM_DB_PORT=55533 \\',
|
|
364
|
+
' DOCLING_PORT=5011 REDIS_PORT=56479 \\',
|
|
365
|
+
' PRESIDIO_ANALYZER_PORT=5012 PRESIDIO_ANONYMIZER_PORT=5013 \\',
|
|
366
|
+
' docker compose up -d',
|
|
367
|
+
'',
|
|
368
|
+
'Then update .env.local to match: DATABASE_URL, QDRANT_URL,',
|
|
369
|
+
'LITELLM_PROXY_URL, REDIS_URL, DOCLING_URL, TEMPORAL_SERVER_ADDRESS and',
|
|
370
|
+
'the two PRESIDIO_* URLs all name a host port.',
|
|
371
|
+
].join('\n'));
|
|
372
|
+
}
|
|
253
373
|
const proceed = await confirmOrSkip('Start the backing services now? (Postgres, Qdrant, Temporal, LiteLLM, Redis, …)', yes);
|
|
254
374
|
if (!proceed) {
|
|
255
375
|
return true;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEA,kBAgIC;AAnMD,qCAMiB;AACjB,yCAAiC;AAEjC,sDAAwC;AACxC,mCAA8C;AAE9C,iCAAqE;AACrE,mCAAwC;AACxC,yCAA+C;AAC/C,qDAA2E;AAC3E,iDAA4D;AAC5D,iDAKwB;AACxB,yCAKoB;AACpB,uCAA2C;AAC3C,mCAQiB;AAEjB,mFAAmF;AACnF,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAE7C,MAAM,SAAS,GAA0D;IACvE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE;IACtD,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,uBAAuB,EAAE;CAC9E,CAAC;AAcF;;;;;;GAMG;AACI,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,IAAI,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAE7B,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEhC,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,YAAY,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,IAAA,qBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CACV,sBAAsB,IAAI,CAAC,GAAG,+BAA+B,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7E,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE7B,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEnE,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAM,CACV;YACE,+FAA+F,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxH,sNAAsN;SACvN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;QAExD,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;gBACE,mEAAmE;gBACnE,qDAAqD;gBACrD,GAAG,qBAAqB,wBAAwB;aACjD,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;YACF,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CACR;YACE,qEAAqE;YACrE,EAAE;YACF,2DAA2D;YAC3D,sEAAsE;YACtE,2DAA2D;YAC3D,4DAA4D;YAC5D,EAAE;YACF,wDAAwD,SAAS,GAAG;SACrE,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,qEAAqE;QACrE,8DAA8D;QAC9D,oEAAoE;QACpE,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAA,cAAW,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,MAAM,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CACT;QACE,mBAAmB;QACnB,QAAQ,SAAS,EAAE;QACnB,yCAAyC;QACzC,oCAAoC;QACpC,EAAE;QACF,qEAAqE;QACrE,uEAAuE;QACvE,oEAAoE;QACpE,UAAU;QACV,oEAAoE;QACpE,2BAA2B;QAC3B,EAAE;QACF,8BAA8B;QAC9B,8BAA8B;QAC9B,mDAAmD;QACnD,EAAE;QACF,oEAAoE;QACpE,iDAAiD;KAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAyB,EACzB,GAAY;IAEZ,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,GAAG,EAAE,CAAC;YACR,SAAS,GAAG,yBAAkB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,gCAAgC;gBACzC,WAAW,EAAE,yBAAkB;gBAC/B,YAAY,EAAE,yBAAkB;aACjC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,SAAS,GAAG,MAAM,IAAI,yBAAkB,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,yCAAyC,CAAC,CAAC;YACpE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,mCAAmC,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,mBAAQ,EAAE,CAAC;QAC7B,QAAQ,CAAC,GAAG,CACV,KAAK,EACL,KAAK,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAA,wBAAc,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAiB,EACjB,QAAoC;IAEpC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAA,2BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAOD,SAAS,YAAY,CACnB,SAAiB,EACjB,MAAiB,EACjB,SAAiC;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAA,4BAAiB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxE,qEAAqE;IACrE,IAAA,uBAAa,EAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAC/B,IAAa;IAEb,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,uBAAuB,CAC9B,MAAyB;IAEzB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,4BAAa,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,MAAM,CACV,cAAc,MAAM,cAAc,KAAK,WAAW,YAAY,6FAA6F,CAC5J,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAA,uCAAwB,EAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,uCAAuC;QAChD,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,4BAAa,CAAC,MAAM,CAAC,KAAK,EAAE;YAC/D,EAAE,KAAK,EAAE,WAAoB,EAAE,KAAK,EAAE,4BAAa,CAAC,SAAS,CAAC,KAAK,EAAE;YACrE,EAAE,KAAK,EAAE,MAAe,EAAE,KAAK,EAAE,+BAA+B,EAAE;SACnE;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAClC,OAAO,EAAE,cAAc,4BAAa,CAAC,MAA2B,CAAC,CAAC,KAAK,UAAU;KAClF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAA,uCAAwB,EAAC,MAA2B,EAAE,MAAM,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,SAAiB,EACjB,OAA4B;IAE5B,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;IAChE,yEAAyE;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,2BAA2B;IAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC;SACzB,OAAO,EAAE;SACT,MAAM,CACL,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,gCAAe,EAAC,MAAM,EAAE,KAAK,CAAC,EACjD,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CACjC,CAAC;IACJ,IAAA,uBAAa,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACpD,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAA,yCAA0B,GAAE,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,GAAY;IACxD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,OAAO,CACpB,OAAyC,EACzC,KAAa,EACb,cAAsB,EACtB,IAAyB;IAEzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,SAAiB,EACjB,GAAY;IAEZ,wEAAwE;IACxE,sEAAsE;IACtE,oCAAoC;IACpC,IAAI,MAAM,IAAA,8BAAsB,GAAE,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,sEAAsE;YACtE,qEAAqE;YACrE,wEAAwE;YACxE,EAAE;YACF,yEAAyE;YACzE,mEAAmE;YACnE,uEAAuE;YACvE,yBAAyB;YACzB,EAAE;YACF,QAAQ,SAAS,KAAK;YACtB,qCAAqC;YACrC,sEAAsE;YACtE,oDAAoD;YACpD,mDAAmD;YACnD,8CAA8C;YAC9C,qEAAqE;YACrE,6BAA6B;YAC7B,EAAE;YACF,4DAA4D;YAC5D,wEAAwE;YACxE,+CAA+C;SAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,iFAAiF,EACjF,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,IAAA,yBAAiB,GAAE,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,0GAA0G,CAC3G,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CACZ,KAAK,CAAC,OAAO,EAAE,EACf,yEAAyE,EACzE,2BAA2B,EAC3B,GAAG,EAAE,CAAC,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,SAAiB,EACjB,GAAY,EACZ,GAAsB;IAEtB,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,iFAAiF,EACjF,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAiD;QAC1D;YACE,aAAa;YACb,yBAAyB;YACzB,GAAG,EAAE,CAAC,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;SAC9C;QACD;YACE,8BAA8B;YAC9B,0BAA0B;YAC1B,GAAG,EAAE,CAAC,IAAA,4BAAoB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACpD;QACD;YACE,8BAA8B;YAC9B,qBAAqB;YACrB,GAAG,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SAC/C;QACD;YACE,sBAAsB;YACtB,kBAAkB;YAClB,GAAG,EAAE,CAAC,IAAA,oBAAY,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SAC5C;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const cli_1 = require("./cli");
|
|
5
|
-
(0, cli_1.run)(process.argv.slice(2))
|
|
5
|
+
(0, cli_1.run)(process.argv.slice(2))
|
|
6
|
+
.then((completed) => {
|
|
7
|
+
if (!completed) {
|
|
8
|
+
process.exitCode = 1;
|
|
9
|
+
}
|
|
10
|
+
})
|
|
11
|
+
.catch((error) => {
|
|
6
12
|
console.error(error instanceof Error ? error.message : error);
|
|
7
13
|
process.exitCode = 1;
|
|
8
14
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+BAA4B;AAE5B,IAAA,SAAG,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+BAA4B;AAE5B,IAAA,SAAG,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;IAClB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/llm-provider.d.ts
CHANGED
|
@@ -6,16 +6,32 @@ import type { LiteLLMModelEntry } from './litellm-config';
|
|
|
6
6
|
* paste a plain OpenAI or Anthropic key and get a working model instead.
|
|
7
7
|
*/
|
|
8
8
|
export type LlmProviderChoice = 'openai' | 'anthropic';
|
|
9
|
+
export interface LlmEmbeddingsConfig {
|
|
10
|
+
modelName: string;
|
|
11
|
+
litellmModel: string;
|
|
12
|
+
/** Output dimensionality — must match `VECTOR_SIZE`, see rag-core's vector contract. */
|
|
13
|
+
vectorSize: number;
|
|
14
|
+
}
|
|
9
15
|
export interface LlmProviderConfig {
|
|
10
16
|
label: string;
|
|
11
17
|
apiKeyEnvVar: string;
|
|
12
18
|
modelName: string;
|
|
13
19
|
litellmModel: string;
|
|
20
|
+
/**
|
|
21
|
+
* Undefined for a provider with no embeddings API of its own. Chat still
|
|
22
|
+
* works; the knowledge base does not, because retrieval has nothing to
|
|
23
|
+
* embed a query with. The wizard says so rather than leaving the shipped
|
|
24
|
+
* Scaleway default in place and letting the first upload fail with a 404
|
|
25
|
+
* for a model the install has no credentials for.
|
|
26
|
+
*/
|
|
27
|
+
embeddings?: LlmEmbeddingsConfig;
|
|
14
28
|
}
|
|
15
29
|
export declare const LLM_PROVIDERS: Record<LlmProviderChoice, LlmProviderConfig>;
|
|
16
30
|
export interface LlmProviderChoiceResult {
|
|
17
31
|
envUpdates: Record<string, string>;
|
|
18
|
-
|
|
32
|
+
liteLLMEntries: LiteLLMModelEntry[];
|
|
33
|
+
/** False when the picked provider cannot serve embeddings — the caller warns. */
|
|
34
|
+
embeddingsConfigured: boolean;
|
|
19
35
|
}
|
|
20
36
|
export declare function resolveLlmProviderChoice(choice: LlmProviderChoice, apiKey: string): LlmProviderChoiceResult;
|
|
21
37
|
//# sourceMappingURL=llm-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-provider.d.ts","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-provider.d.ts","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAyBtE,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,iFAAiF;IACjF,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,GACb,uBAAuB,CAwCzB"}
|
package/dist/llm-provider.js
CHANGED
|
@@ -8,6 +8,11 @@ exports.LLM_PROVIDERS = {
|
|
|
8
8
|
apiKeyEnvVar: 'OPENAI_API_KEY',
|
|
9
9
|
modelName: 'gpt-4o-mini',
|
|
10
10
|
litellmModel: 'openai/gpt-4o-mini',
|
|
11
|
+
embeddings: {
|
|
12
|
+
modelName: 'text-embedding-3-small',
|
|
13
|
+
litellmModel: 'openai/text-embedding-3-small',
|
|
14
|
+
vectorSize: 1536,
|
|
15
|
+
},
|
|
11
16
|
},
|
|
12
17
|
anthropic: {
|
|
13
18
|
label: 'Anthropic',
|
|
@@ -19,21 +24,45 @@ exports.LLM_PROVIDERS = {
|
|
|
19
24
|
// Bedrock traffic under Bedrock's catalog metadata.
|
|
20
25
|
modelName: 'claude-haiku-4-5-direct',
|
|
21
26
|
litellmModel: 'anthropic/claude-haiku-4-5-20251001',
|
|
27
|
+
// Anthropic ships no embeddings endpoint, so there is nothing to point
|
|
28
|
+
// EMBEDDINGS_MODEL at with this key alone.
|
|
22
29
|
},
|
|
23
30
|
};
|
|
24
31
|
function resolveLlmProviderChoice(choice, apiKey) {
|
|
25
32
|
const config = exports.LLM_PROVIDERS[choice];
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const envUpdates = {
|
|
34
|
+
[config.apiKeyEnvVar]: apiKey,
|
|
35
|
+
DEFAULT_MODEL: config.modelName,
|
|
36
|
+
DEFAULT_MODEL_PROVIDER: 'litellm',
|
|
37
|
+
// .env.example ships gemini-2.5-flash here, which needs Vertex
|
|
38
|
+
// credentials. Multi-query expansion is on by default (ADR-15), so
|
|
39
|
+
// leaving it would fail the RAG chain on its *first* step — before the
|
|
40
|
+
// model the user just configured is ever reached.
|
|
41
|
+
REPHRASE_MODEL: config.modelName,
|
|
42
|
+
};
|
|
43
|
+
const liteLLMEntries = [
|
|
44
|
+
{
|
|
33
45
|
modelName: config.modelName,
|
|
34
46
|
model: config.litellmModel,
|
|
35
47
|
apiKeyEnvVar: config.apiKeyEnvVar,
|
|
36
48
|
},
|
|
49
|
+
];
|
|
50
|
+
if (config.embeddings) {
|
|
51
|
+
envUpdates.EMBEDDINGS_MODEL = config.embeddings.modelName;
|
|
52
|
+
// VECTOR_SIZE and EMBEDDINGS_MODEL have to agree or Qdrant rejects every
|
|
53
|
+
// upsert — rag-core's vector contract says so, and its default (3584)
|
|
54
|
+
// belongs to the Scaleway model being replaced here.
|
|
55
|
+
envUpdates.VECTOR_SIZE = String(config.embeddings.vectorSize);
|
|
56
|
+
liteLLMEntries.push({
|
|
57
|
+
modelName: config.embeddings.modelName,
|
|
58
|
+
model: config.embeddings.litellmModel,
|
|
59
|
+
apiKeyEnvVar: config.apiKeyEnvVar,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
envUpdates,
|
|
64
|
+
liteLLMEntries,
|
|
65
|
+
embeddingsConfigured: Boolean(config.embeddings),
|
|
37
66
|
};
|
|
38
67
|
}
|
|
39
68
|
//# sourceMappingURL=llm-provider.js.map
|
package/dist/llm-provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-provider.js","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"llm-provider.js","sourceRoot":"","sources":["../src/llm-provider.ts"],"names":[],"mappings":";;;AAkEA,4DA2CC;AA7EY,QAAA,aAAa,GAAiD;IACzE,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,gBAAgB;QAC9B,SAAS,EAAE,aAAa;QACxB,YAAY,EAAE,oBAAoB;QAClC,UAAU,EAAE;YACV,SAAS,EAAE,wBAAwB;YACnC,YAAY,EAAE,+BAA+B;YAC7C,UAAU,EAAE,IAAI;SACjB;KACF;IACD,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,mBAAmB;QACjC,gFAAgF;QAChF,uEAAuE;QACvE,qEAAqE;QACrE,sEAAsE;QACtE,oDAAoD;QACpD,SAAS,EAAE,yBAAyB;QACpC,YAAY,EAAE,qCAAqC;QACnD,uEAAuE;QACvE,2CAA2C;KAC5C;CACF,CAAC;AASF,SAAgB,wBAAwB,CACtC,MAAyB,EACzB,MAAc;IAEd,MAAM,MAAM,GAAG,qBAAa,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,UAAU,GAA2B;QACzC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM;QAC7B,aAAa,EAAE,MAAM,CAAC,SAAS;QAC/B,sBAAsB,EAAE,SAAS;QACjC,+DAA+D;QAC/D,mEAAmE;QACnE,uEAAuE;QACvE,kDAAkD;QAClD,cAAc,EAAE,MAAM,CAAC,SAAS;KACjC,CAAC;IAEF,MAAM,cAAc,GAAwB;QAC1C;YACE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC;KACF,CAAC;IAEF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,UAAU,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1D,yEAAyE;QACzE,sEAAsE;QACtE,qDAAqD;QACrD,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9D,cAAc,CAAC,IAAI,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;YACtC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY;YACrC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,UAAU;QACV,cAAc;QACd,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;KACjD,CAAC;AACJ,CAAC"}
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAEpE,eAAO,MAAM,QAAQ,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAEpE,eAAO,MAAM,QAAQ,EAAE,aAAa,EAqEnC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,EAAE,CAEnE"}
|
package/dist/manifest.js
CHANGED
|
@@ -63,6 +63,24 @@ exports.MANIFEST = [
|
|
|
63
63
|
targets: ['root', 'admin'],
|
|
64
64
|
},
|
|
65
65
|
// --- Local-dev defaults that correct a stale example value ---
|
|
66
|
+
{
|
|
67
|
+
// Ships commented out, which leaves apps/web sending no Authorization
|
|
68
|
+
// header while docker-compose.yml starts the proxy *with* a master key
|
|
69
|
+
// (`${LITELLM_MASTER_KEY:-sk-litellm-dev-key}`) — so every call to the
|
|
70
|
+
// proxy came back 401 and the model picker silently fell back to a
|
|
71
|
+
// static list.
|
|
72
|
+
//
|
|
73
|
+
// This is deliberately the same literal as the compose default rather
|
|
74
|
+
// than a generated secret: Compose interpolates `${LITELLM_MASTER_KEY}`
|
|
75
|
+
// from the shell or a root `.env`, and never from `.env.local`. A
|
|
76
|
+
// generated value here would land in the app and not in the container,
|
|
77
|
+
// which is the 401 again with a harder-to-see cause. It is a local-dev
|
|
78
|
+
// credential on a loopback port; a deployed install sets its own.
|
|
79
|
+
key: 'LITELLM_MASTER_KEY',
|
|
80
|
+
strategy: 'local-default',
|
|
81
|
+
targets: ['root'],
|
|
82
|
+
value: 'sk-litellm-dev-key',
|
|
83
|
+
},
|
|
66
84
|
{
|
|
67
85
|
// docker-compose.yml maps Postgres to host port 55432, not the 5432 that
|
|
68
86
|
// both .env.example files show — a native/other Postgres on 5432 would
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AA0FH,4CAEC;AAzEY,QAAA,QAAQ,GAAoB;IACvC,oDAAoD;IACpD,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE;IACrE,EAAE,GAAG,EAAE,oBAAoB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE;IAC7E;QACE,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB;IACD;QACE,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB;IACD;QACE,6DAA6D;QAC7D,sEAAsE;QACtE,0DAA0D;QAC1D,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IAED,yDAAyD;IACzD;QACE,yEAAyE;QACzE,mDAAmD;QACnD,oEAAoE;QACpE,0EAA0E;QAC1E,0BAA0B;QAC1B,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;KAC3B;IAED,gEAAgE;IAChE;QACE,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,mEAAmE;QACnE,eAAe;QACf,EAAE;QACF,sEAAsE;QACtE,wEAAwE;QACxE,kEAAkE;QAClE,uEAAuE;QACvE,uEAAuE;QACvE,kEAAkE;QAClE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,oBAAoB;KAC5B;IACD;QACE,yEAAyE;QACzE,uEAAuE;QACvE,0DAA0D;QAC1D,mBAAmB;QACnB,GAAG,EAAE,cAAc;QACnB,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QAC1B,KAAK,EAAE,qDAAqD;KAC7D;CACF,CAAC;AAEF,SAAgB,gBAAgB,CAAC,MAAiB;IAChD,OAAO,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-setup.d.ts","sourceRoot":"","sources":["../src/manual-setup.ts"],"names":[],"mappings":"AAsEA,wBAAgB,0BAA0B,IAAI,MAAM,CAkCnD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.manualLlmSetupInstructions = manualLlmSetupInstructions;
|
|
4
|
+
const llm_provider_1 = require("./llm-provider");
|
|
5
|
+
/**
|
|
6
|
+
* What to write by hand when the wizard did not take an API key.
|
|
7
|
+
*
|
|
8
|
+
* Pasting a provider key into someone else's CLI is a reasonable thing to
|
|
9
|
+
* refuse, so skipping has to leave a person able to finish the job rather
|
|
10
|
+
* than a one-line "chat will not work". The text is generated from
|
|
11
|
+
* `LLM_PROVIDERS`, not written out twice, so the instructions cannot drift
|
|
12
|
+
* from what the wizard itself would have configured.
|
|
13
|
+
*/
|
|
14
|
+
const SELF_HOSTING_DOCS = 'https://docs.ragen.ai/docs/self-hosting';
|
|
15
|
+
function providerSection(choice) {
|
|
16
|
+
const config = llm_provider_1.LLM_PROVIDERS[choice];
|
|
17
|
+
const envLines = [
|
|
18
|
+
`${config.apiKeyEnvVar}=<your ${config.label} key>`,
|
|
19
|
+
'DEFAULT_MODEL_PROVIDER=litellm',
|
|
20
|
+
`DEFAULT_MODEL=${config.modelName}`,
|
|
21
|
+
`REPHRASE_MODEL=${config.modelName}`,
|
|
22
|
+
];
|
|
23
|
+
const yamlLines = [
|
|
24
|
+
` - model_name: ${config.modelName}`,
|
|
25
|
+
' litellm_params:',
|
|
26
|
+
` model: ${config.litellmModel}`,
|
|
27
|
+
` api_key: os.environ/${config.apiKeyEnvVar}`,
|
|
28
|
+
];
|
|
29
|
+
if (config.embeddings) {
|
|
30
|
+
envLines.push(`EMBEDDINGS_MODEL=${config.embeddings.modelName}`, `VECTOR_SIZE=${config.embeddings.vectorSize}`);
|
|
31
|
+
yamlLines.push(` - model_name: ${config.embeddings.modelName}`, ' litellm_params:', ` model: ${config.embeddings.litellmModel}`, ` api_key: os.environ/${config.apiKeyEnvVar}`);
|
|
32
|
+
}
|
|
33
|
+
return [
|
|
34
|
+
`### ${config.label}`,
|
|
35
|
+
'',
|
|
36
|
+
'`.env.local` (repository root):',
|
|
37
|
+
'',
|
|
38
|
+
'```',
|
|
39
|
+
...envLines,
|
|
40
|
+
'```',
|
|
41
|
+
'',
|
|
42
|
+
'`infra/litellm/config.yaml`, under the existing `model_list:` key:',
|
|
43
|
+
'',
|
|
44
|
+
'```yaml',
|
|
45
|
+
...yamlLines,
|
|
46
|
+
'```',
|
|
47
|
+
...(config.embeddings
|
|
48
|
+
? []
|
|
49
|
+
: [
|
|
50
|
+
'',
|
|
51
|
+
`${config.label} has no embeddings API, so the knowledge base needs a`,
|
|
52
|
+
'second provider. Leave `EMBEDDINGS_MODEL` and `VECTOR_SIZE` alone and',
|
|
53
|
+
'add one (OpenAI, Scaleway or Cohere) before uploading documents.',
|
|
54
|
+
]),
|
|
55
|
+
'',
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
function manualLlmSetupInstructions() {
|
|
59
|
+
return [
|
|
60
|
+
'# Configure a chat model',
|
|
61
|
+
'',
|
|
62
|
+
'This installation has no LLM provider yet, so chat and the knowledge',
|
|
63
|
+
'base will not work until one is configured. Nothing here needs to go',
|
|
64
|
+
'through a CLI — edit the two files below yourself.',
|
|
65
|
+
'',
|
|
66
|
+
'Pick one provider, apply both edits, then restart the proxy:',
|
|
67
|
+
'',
|
|
68
|
+
'```bash',
|
|
69
|
+
'docker compose restart litellm',
|
|
70
|
+
'```',
|
|
71
|
+
'',
|
|
72
|
+
...providerSection('openai'),
|
|
73
|
+
...providerSection('anthropic'),
|
|
74
|
+
'## Before you upload anything',
|
|
75
|
+
'',
|
|
76
|
+
'`VECTOR_SIZE` must match the embedding model **before** the first',
|
|
77
|
+
"document is indexed. Qdrant fixes a collection's dimensionality when it",
|
|
78
|
+
'is created, so changing it later means deleting the collections and',
|
|
79
|
+
're-indexing everything.',
|
|
80
|
+
'',
|
|
81
|
+
'## Check it worked',
|
|
82
|
+
'',
|
|
83
|
+
'```bash',
|
|
84
|
+
'curl -s -H "Authorization: Bearer $LITELLM_MASTER_KEY" \\',
|
|
85
|
+
' http://localhost:4000/v1/models',
|
|
86
|
+
'```',
|
|
87
|
+
'',
|
|
88
|
+
`Anything else — S3 storage, encryption at rest, Stripe, email, MCP`,
|
|
89
|
+
`connectors — is documented at ${SELF_HOSTING_DOCS}.`,
|
|
90
|
+
'',
|
|
91
|
+
].join('\n');
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=manual-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-setup.js","sourceRoot":"","sources":["../src/manual-setup.ts"],"names":[],"mappings":";;AAsEA,gEAkCC;AAxGD,iDAAuE;AAEvE;;;;;;;;GAQG;AAEH,MAAM,iBAAiB,GAAG,yCAAyC,CAAC;AAEpE,SAAS,eAAe,CAAC,MAAyB;IAChD,MAAM,MAAM,GAAG,4BAAa,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG;QACf,GAAG,MAAM,CAAC,YAAY,UAAU,MAAM,CAAC,KAAK,OAAO;QACnD,gCAAgC;QAChC,iBAAiB,MAAM,CAAC,SAAS,EAAE;QACnC,kBAAkB,MAAM,CAAC,SAAS,EAAE;KACrC,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,mBAAmB,MAAM,CAAC,SAAS,EAAE;QACrC,qBAAqB;QACrB,gBAAgB,MAAM,CAAC,YAAY,EAAE;QACrC,6BAA6B,MAAM,CAAC,YAAY,EAAE;KACnD,CAAC;IAEF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CACX,oBAAoB,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EACjD,eAAe,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAC9C,CAAC;QACF,SAAS,CAAC,IAAI,CACZ,mBAAmB,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EAChD,qBAAqB,EACrB,gBAAgB,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,EAChD,6BAA6B,MAAM,CAAC,YAAY,EAAE,CACnD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,MAAM,CAAC,KAAK,EAAE;QACrB,EAAE;QACF,iCAAiC;QACjC,EAAE;QACF,KAAK;QACL,GAAG,QAAQ;QACX,KAAK;QACL,EAAE;QACF,oEAAoE;QACpE,EAAE;QACF,SAAS;QACT,GAAG,SAAS;QACZ,KAAK;QACL,GAAG,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,EAAE;gBACF,GAAG,MAAM,CAAC,KAAK,uDAAuD;gBACtE,uEAAuE;gBACvE,kEAAkE;aACnE,CAAC;QACN,EAAE;KACH,CAAC;AACJ,CAAC;AAED,SAAgB,0BAA0B;IACxC,OAAO;QACL,0BAA0B;QAC1B,EAAE;QACF,sEAAsE;QACtE,sEAAsE;QACtE,oDAAoD;QACpD,EAAE;QACF,8DAA8D;QAC9D,EAAE;QACF,SAAS;QACT,gCAAgC;QAChC,KAAK;QACL,EAAE;QACF,GAAG,eAAe,CAAC,QAAQ,CAAC;QAC5B,GAAG,eAAe,CAAC,WAAW,CAAC;QAC/B,+BAA+B;QAC/B,EAAE;QACF,mEAAmE;QACnE,yEAAyE;QACzE,qEAAqE;QACrE,yBAAyB;QACzB,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,SAAS;QACT,2DAA2D;QAC3D,mCAAmC;QACnC,KAAK;QACL,EAAE;QACF,oEAAoE;QACpE,iCAAiC,iBAAiB,GAAG;QACrD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/tasks.d.ts
CHANGED
|
@@ -14,6 +14,21 @@ export interface MigrateOptions {
|
|
|
14
14
|
retryDelayMs?: number;
|
|
15
15
|
}
|
|
16
16
|
export declare function isDockerAvailable(): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Whether this Docker daemon already runs a Ragen stack.
|
|
19
|
+
*
|
|
20
|
+
* docker-compose.yml pins container, volume and network names instead of
|
|
21
|
+
* letting Compose prefix them per project, so a second install does not just
|
|
22
|
+
* collide on the container names — it silently attaches to the *same*
|
|
23
|
+
* postgres and qdrant volumes as the first one. Checking the volume rather
|
|
24
|
+
* than a container catches a stack that is merely stopped, which is the
|
|
25
|
+
* case that looks safest and is not.
|
|
26
|
+
*
|
|
27
|
+
* Reads RAGEN_STACK_NAME for the same reason compose does: someone already
|
|
28
|
+
* running a stack under a name of their own would otherwise be told their
|
|
29
|
+
* machine is clear, and collide with it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ragenStackVolumeExists(): Promise<boolean>;
|
|
17
32
|
export declare function startDockerServices({ cwd }: RunOptions): Promise<void>;
|
|
18
33
|
export declare function installDependencies({ cwd }: RunOptions): Promise<void>;
|
|
19
34
|
export declare function generatePrismaClient({ cwd, env, }: RunOptions): Promise<void>;
|
package/dist/tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU1D;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,GAAG,GACJ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EACxB,EAAE,OAAW,EAAE,YAAmB,EAAE,GAAE,cAAmB,GACxD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAgB/D;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,GAAG,GACJ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EACxB,EAAE,OAAW,EAAE,YAAmB,EAAE,GAAE,cAAmB,GACxD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
package/dist/tasks.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isDockerAvailable = isDockerAvailable;
|
|
4
|
+
exports.ragenStackVolumeExists = ragenStackVolumeExists;
|
|
4
5
|
exports.startDockerServices = startDockerServices;
|
|
5
6
|
exports.installDependencies = installDependencies;
|
|
6
7
|
exports.generatePrismaClient = generatePrismaClient;
|
|
@@ -19,6 +20,33 @@ async function isDockerAvailable() {
|
|
|
19
20
|
return false;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether this Docker daemon already runs a Ragen stack.
|
|
25
|
+
*
|
|
26
|
+
* docker-compose.yml pins container, volume and network names instead of
|
|
27
|
+
* letting Compose prefix them per project, so a second install does not just
|
|
28
|
+
* collide on the container names — it silently attaches to the *same*
|
|
29
|
+
* postgres and qdrant volumes as the first one. Checking the volume rather
|
|
30
|
+
* than a container catches a stack that is merely stopped, which is the
|
|
31
|
+
* case that looks safest and is not.
|
|
32
|
+
*
|
|
33
|
+
* Reads RAGEN_STACK_NAME for the same reason compose does: someone already
|
|
34
|
+
* running a stack under a name of their own would otherwise be told their
|
|
35
|
+
* machine is clear, and collide with it.
|
|
36
|
+
*/
|
|
37
|
+
async function ragenStackVolumeExists() {
|
|
38
|
+
const stackName = process.env.RAGEN_STACK_NAME?.trim() || 'ragen';
|
|
39
|
+
const postgresVolume = `${stackName}-postgres-data`;
|
|
40
|
+
try {
|
|
41
|
+
const { stdout } = await (0, execa_1.execa)('docker', ['volume', 'ls', '--format', '{{.Name}}'], { timeout: 10_000 });
|
|
42
|
+
return stdout.split('\n').some((name) => name.trim() === postgresVolume);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Same reasoning as isDockerAvailable: an unreachable daemon is not a
|
|
46
|
+
// reason to fail, the caller is about to find that out anyway.
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
22
50
|
async function startDockerServices({ cwd }) {
|
|
23
51
|
await (0, execa_1.execa)('docker', ['compose', 'up', '-d'], { cwd, stdio: 'inherit' });
|
|
24
52
|
}
|
package/dist/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":";;AAmBA,8CAUC;AAED,kDAEC;AAED,kDAEC;AAED,oDAKC;AAED,oCAEC;AAOD,0CAyBC;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-ragen-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Scaffold a self-hosted Ragen AI installation with one command",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "tsc -p tsconfig.json",
|
|
24
24
|
"clean": "rm -rf dist",
|
|
25
|
-
"prepare": "npm run build",
|
|
25
|
+
"prepare": "npm run clean && npm run build",
|
|
26
26
|
"lint": "eslint",
|
|
27
27
|
"typecheck": "tsc --noEmit --incremental --tsBuildInfoFile ./typecheck.tsbuildinfo"
|
|
28
28
|
},
|