@decohere/scaffold 0.0.1-dev.18 → 0.0.1-dev.20261105.46
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/LICENSE +15 -0
- package/commonjs/src/add-api.action.js +37 -0
- package/commonjs/src/add-api.command.js +39 -0
- package/commonjs/src/add.command.js +22 -0
- package/commonjs/src/add.module.js +24 -0
- package/commonjs/src/auth0-configure.action.js +28 -0
- package/commonjs/src/auth0-configure.command.js +24 -0
- package/commonjs/src/auth0-login.action.js +28 -0
- package/commonjs/src/auth0-login.command.js +23 -0
- package/commonjs/src/auth0.command.js +22 -0
- package/commonjs/src/auth0.module.js +28 -0
- package/commonjs/src/cli.js +8 -0
- package/commonjs/src/create.command.js +22 -0
- package/commonjs/src/create.module.js +24 -0
- package/commonjs/src/domain/prompt.js +62 -0
- package/commonjs/src/index.js +48 -0
- package/commonjs/src/models/compose.model.js +258 -0
- package/commonjs/src/models/config-yaml.model.js +86 -0
- package/commonjs/src/models/const.js +30 -0
- package/commonjs/src/models/dev-container.model.js +172 -0
- package/commonjs/src/models/docker-image.model.js +277 -0
- package/commonjs/src/models/env-file.model.js +48 -0
- package/commonjs/src/models/gitignore.model.js +48 -0
- package/commonjs/src/models/launch-json.model.js +70 -0
- package/commonjs/src/models/package-json.model.js +156 -0
- package/commonjs/src/models/project.model.js +132 -0
- package/commonjs/src/models/source-file.js +4 -0
- package/commonjs/src/models/tsconfig.model.js +32 -0
- package/commonjs/src/models/vitest-config.model.js +33 -0
- package/commonjs/src/models/vscode-settings.model.js +29 -0
- package/commonjs/src/program.js +64 -0
- package/commonjs/src/resolve-target-dir.js +17 -0
- package/commonjs/src/services/scaffold.service.js +60 -0
- package/commonjs/src/version.js +55 -0
- package/commonjs/src/webapi/api-name.js +93 -0
- package/commonjs/src/webapi/auth0-commands.js +250 -0
- package/commonjs/src/webapi/authorize-scopes.js +79 -0
- package/commonjs/src/webapi/cli-options.js +99 -0
- package/commonjs/src/webapi/const.js +54 -0
- package/commonjs/src/webapi/create-api.js +265 -0
- package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +164 -0
- package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
- package/commonjs/src/webapi/devcontainer/host-scripts.js +50 -0
- package/commonjs/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
- package/commonjs/src/webapi/devcontainer/templates/initialize.sh +169 -0
- package/commonjs/src/webapi/devcontainer/templates/post-create.sh +35 -0
- package/commonjs/src/webapi/devcontainer/templates/post-start.sh +65 -0
- package/commonjs/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
- package/commonjs/src/webapi/features/auth.feature.js +408 -0
- package/commonjs/src/webapi/features/auth0-cli.js +472 -0
- package/commonjs/src/webapi/features/biome-format.js +47 -0
- package/commonjs/src/webapi/features/database.feature.js +433 -0
- package/commonjs/src/webapi/features/finalize.feature.js +93 -0
- package/commonjs/src/webapi/features/postman.feature.js +322 -0
- package/commonjs/src/webapi/models/api-package-json.model.js +58 -0
- package/commonjs/src/webapi/models/auth-config.model.js +24 -0
- package/commonjs/src/webapi/models/controller-source-file.model.js +190 -0
- package/commonjs/src/webapi/models/github-ci.model.js +193 -0
- package/commonjs/src/webapi/models/main-source-file.model.js +165 -0
- package/commonjs/src/webapi/models/production-dockerfile.model.js +75 -0
- package/commonjs/src/webapi/models/sample-files.model.js +58 -0
- package/commonjs/src/webapi/models/webapi-image.model.js +25 -0
- package/commonjs/src/webapi/postman/hello-openapi.js +173 -0
- package/commonjs/src/webapi/postman/local-view.js +182 -0
- package/commonjs/src/webapi/postman/openapi-to-postman.js +238 -0
- package/commonjs/src/webapi/workspace-readme.js +109 -0
- package/commonjs/src/webapi.action.js +28 -0
- package/commonjs/src/webapi.command.js +43 -0
- package/es6/src/add-api.action.js +27 -0
- package/es6/src/add-api.command.js +29 -0
- package/es6/src/add.command.js +12 -0
- package/es6/src/add.module.js +14 -0
- package/es6/src/auth0-configure.action.js +18 -0
- package/es6/src/auth0-configure.command.js +14 -0
- package/es6/src/auth0-login.action.js +18 -0
- package/es6/src/auth0-login.command.js +13 -0
- package/es6/src/auth0.command.js +12 -0
- package/es6/src/auth0.module.js +18 -0
- package/es6/src/cli.js +4 -0
- package/es6/src/create.command.js +12 -0
- package/es6/src/create.module.js +14 -0
- package/es6/src/domain/prompt.js +41 -0
- package/es6/src/index.js +9 -0
- package/es6/src/models/compose.model.js +254 -0
- package/es6/src/models/config-yaml.model.js +74 -0
- package/es6/src/models/const.js +20 -0
- package/es6/src/models/dev-container.model.js +162 -0
- package/es6/src/models/docker-image.model.js +235 -0
- package/es6/src/models/env-file.model.js +44 -0
- package/es6/src/models/gitignore.model.js +38 -0
- package/es6/src/models/launch-json.model.js +60 -0
- package/es6/src/models/package-json.model.js +141 -0
- package/es6/src/models/project.model.js +117 -0
- package/es6/src/models/source-file.js +1 -0
- package/es6/src/models/tsconfig.model.js +22 -0
- package/es6/src/models/vitest-config.model.js +23 -0
- package/es6/src/models/vscode-settings.model.js +19 -0
- package/es6/src/program.js +50 -0
- package/es6/src/resolve-target-dir.js +7 -0
- package/es6/src/services/scaffold.service.js +50 -0
- package/es6/src/version.js +34 -0
- package/es6/src/webapi/api-name.js +57 -0
- package/es6/src/webapi/auth0-commands.js +185 -0
- package/es6/src/webapi/authorize-scopes.js +55 -0
- package/es6/src/webapi/cli-options.js +34 -0
- package/es6/src/webapi/const.js +21 -0
- package/es6/src/webapi/create-api.js +245 -0
- package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +154 -0
- package/es6/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
- package/es6/src/webapi/devcontainer/host-scripts.js +29 -0
- package/es6/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
- package/es6/src/webapi/devcontainer/templates/initialize.sh +169 -0
- package/es6/src/webapi/devcontainer/templates/post-create.sh +35 -0
- package/es6/src/webapi/devcontainer/templates/post-start.sh +65 -0
- package/es6/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
- package/es6/src/webapi/features/auth.feature.js +357 -0
- package/es6/src/webapi/features/auth0-cli.js +406 -0
- package/es6/src/webapi/features/biome-format.js +40 -0
- package/es6/src/webapi/features/database.feature.js +423 -0
- package/es6/src/webapi/features/finalize.feature.js +83 -0
- package/es6/src/webapi/features/postman.feature.js +256 -0
- package/es6/src/webapi/models/api-package-json.model.js +53 -0
- package/es6/src/webapi/models/auth-config.model.js +20 -0
- package/es6/src/webapi/models/controller-source-file.model.js +181 -0
- package/{src/webapi/models/github-ci.model.ts → es6/src/webapi/models/github-ci.model.js} +27 -29
- package/es6/src/webapi/models/main-source-file.model.js +161 -0
- package/es6/src/webapi/models/production-dockerfile.model.js +66 -0
- package/es6/src/webapi/models/sample-files.model.js +40 -0
- package/es6/src/webapi/models/webapi-image.model.js +18 -0
- package/es6/src/webapi/postman/hello-openapi.js +166 -0
- package/es6/src/webapi/postman/local-view.js +167 -0
- package/es6/src/webapi/postman/openapi-to-postman.js +179 -0
- package/es6/src/webapi/workspace-readme.js +88 -0
- package/es6/src/webapi.action.js +18 -0
- package/es6/src/webapi.command.js +33 -0
- package/package.json +19 -9
- package/types/src/add-api.action.d.ts +13 -0
- package/types/src/add-api.command.d.ts +7 -0
- package/types/src/add.command.d.ts +6 -0
- package/types/src/add.module.d.ts +14 -0
- package/types/src/auth0-configure.action.d.ts +7 -0
- package/types/src/auth0-configure.command.d.ts +6 -0
- package/types/src/auth0-login.action.d.ts +4 -0
- package/types/src/auth0-login.command.d.ts +6 -0
- package/types/src/auth0.command.d.ts +6 -0
- package/types/src/auth0.module.d.ts +18 -0
- package/types/src/cli.d.ts +2 -0
- package/types/src/create.command.d.ts +6 -0
- package/types/src/create.module.d.ts +14 -0
- package/types/src/domain/prompt.d.ts +4 -0
- package/{src/index.ts → types/src/index.d.ts} +4 -0
- package/types/src/models/compose.model.d.ts +73 -0
- package/types/src/models/config-yaml.model.d.ts +27 -0
- package/types/src/models/const.d.ts +20 -0
- package/types/src/models/dev-container.model.d.ts +49 -0
- package/types/src/models/docker-image.model.d.ts +90 -0
- package/types/src/models/env-file.model.d.ts +16 -0
- package/types/src/models/gitignore.model.d.ts +9 -0
- package/types/src/models/launch-json.model.d.ts +7 -0
- package/types/src/models/package-json.model.d.ts +36 -0
- package/types/src/models/project.model.d.ts +60 -0
- package/{src/models/source-file.ts → types/src/models/source-file.d.ts} +4 -6
- package/types/src/models/tsconfig.model.d.ts +5 -0
- package/types/src/models/vitest-config.model.d.ts +5 -0
- package/types/src/models/vscode-settings.model.d.ts +7 -0
- package/types/src/program.d.ts +8 -0
- package/{src/resolve-target-dir.ts → types/src/resolve-target-dir.d.ts} +1 -4
- package/types/src/services/scaffold.service.d.ts +22 -0
- package/types/src/version.d.ts +6 -0
- package/types/src/webapi/api-name.d.ts +14 -0
- package/types/src/webapi/auth0-commands.d.ts +11 -0
- package/types/src/webapi/authorize-scopes.d.ts +7 -0
- package/types/src/webapi/cli-options.d.ts +6 -0
- package/{src/webapi/const.ts → types/src/webapi/const.d.ts} +9 -21
- package/types/src/webapi/create-api.d.ts +15 -0
- package/types/src/webapi/devcontainer/codebase-rag-mcp.d.ts +32 -0
- package/types/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
- package/types/src/webapi/devcontainer/host-scripts.d.ts +7 -0
- package/types/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
- package/types/src/webapi/devcontainer/templates/initialize.sh +169 -0
- package/types/src/webapi/devcontainer/templates/post-create.sh +35 -0
- package/types/src/webapi/devcontainer/templates/post-start.sh +65 -0
- package/types/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
- package/types/src/webapi/features/auth.feature.d.ts +10 -0
- package/types/src/webapi/features/auth0-cli.d.ts +84 -0
- package/types/src/webapi/features/biome-format.d.ts +5 -0
- package/types/src/webapi/features/database.feature.d.ts +7 -0
- package/types/src/webapi/features/finalize.feature.d.ts +2 -0
- package/types/src/webapi/features/postman.feature.d.ts +16 -0
- package/types/src/webapi/models/api-package-json.model.d.ts +18 -0
- package/types/src/webapi/models/auth-config.model.d.ts +26 -0
- package/types/src/webapi/models/controller-source-file.model.d.ts +46 -0
- package/types/src/webapi/models/github-ci.model.d.ts +9 -0
- package/types/src/webapi/models/main-source-file.model.d.ts +54 -0
- package/types/src/webapi/models/production-dockerfile.model.d.ts +18 -0
- package/types/src/webapi/models/sample-files.model.d.ts +7 -0
- package/types/src/webapi/models/webapi-image.model.d.ts +12 -0
- package/types/src/webapi/postman/hello-openapi.d.ts +19 -0
- package/types/src/webapi/postman/local-view.d.ts +17 -0
- package/types/src/webapi/postman/openapi-to-postman.d.ts +62 -0
- package/types/src/webapi/workspace-readme.d.ts +18 -0
- package/types/src/webapi.action.d.ts +14 -0
- package/types/src/webapi.command.d.ts +11 -0
- package/src/add-api.action.ts +0 -25
- package/src/add-api.command.ts +0 -31
- package/src/add.command.ts +0 -20
- package/src/add.module.ts +0 -11
- package/src/cli.ts +0 -4
- package/src/create.command.ts +0 -20
- package/src/create.module.ts +0 -11
- package/src/domain/prompt.ts +0 -50
- package/src/models/compose.model.ts +0 -205
- package/src/models/config-yaml.model.ts +0 -83
- package/src/models/const.ts +0 -20
- package/src/models/dev-container.model.ts +0 -136
- package/src/models/docker-image.model.ts +0 -343
- package/src/models/env-file.model.ts +0 -45
- package/src/models/gitignore.model.ts +0 -35
- package/src/models/launch-json.model.ts +0 -60
- package/src/models/package-json.model.ts +0 -169
- package/src/models/project.model.ts +0 -141
- package/src/models/tsconfig.model.ts +0 -29
- package/src/models/vitest-config.model.ts +0 -26
- package/src/models/vscode-settings.model.ts +0 -24
- package/src/program.ts +0 -63
- package/src/services/scaffold.service.ts +0 -89
- package/src/version.ts +0 -56
- package/src/webapi/api-name.ts +0 -73
- package/src/webapi/cli-options.ts +0 -56
- package/src/webapi/create-api.ts +0 -275
- package/src/webapi/devcontainer/host-scripts.ts +0 -35
- package/src/webapi/features/auth.feature.ts +0 -454
- package/src/webapi/features/auth0-cli.ts +0 -421
- package/src/webapi/features/biome-format.ts +0 -34
- package/src/webapi/features/database.feature.ts +0 -522
- package/src/webapi/features/finalize.feature.ts +0 -112
- package/src/webapi/features/postman.feature.ts +0 -287
- package/src/webapi/models/api-package-json.model.ts +0 -60
- package/src/webapi/models/auth-config.model.ts +0 -36
- package/src/webapi/models/controller-source-file.model.ts +0 -232
- package/src/webapi/models/main-source-file.model.ts +0 -208
- package/src/webapi/models/production-dockerfile.model.ts +0 -162
- package/src/webapi/models/sample-files.model.ts +0 -45
- package/src/webapi/models/webapi-image.model.ts +0 -21
- package/src/webapi/postman/hello-openapi.ts +0 -92
- package/src/webapi/postman/local-view.ts +0 -195
- package/src/webapi/postman/openapi-to-postman.ts +0 -208
- package/src/webapi/workspace-readme.ts +0 -192
- package/src/webapi.action.ts +0 -22
- package/src/webapi.command.ts +0 -41
- package/tests/auth-postman.wiring.spec.ts +0 -263
- package/tests/auth0-cli.spec.ts +0 -232
- package/tests/biome-format.spec.ts +0 -49
- package/tests/cli.integration.spec.ts +0 -658
- package/tests/compose.model.spec.ts +0 -51
- package/tests/container-image.model.spec.ts +0 -162
- package/tests/dev-container.model.spec.ts +0 -29
- package/tests/devcontainer-base-image.spec.ts +0 -32
- package/tests/hello-di-inject.scaffold.spec.ts +0 -18
- package/tests/hello-route.contract.spec.ts +0 -94
- package/tests/package-json.order.spec.ts +0 -59
- package/tests/postman-from-openapi.spec.ts +0 -197
- package/tests/seed-devcontainer-templates.ts +0 -40
- package/tests/webapi/devcontainer/codebase-rag-mcp.spec.ts +0 -96
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Runs on the host before the container is created (devcontainer initializeCommand).
|
|
3
|
+
# Creates bind-mount sources as the host user so Docker does not create them as root.
|
|
4
|
+
# Optional npm / gh / MCP setup is y/N on a TTY; no TTY skips.
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
8
|
+
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
# shellcheck source=tty-prompt.sh
|
|
10
|
+
source "$here/tty-prompt.sh"
|
|
11
|
+
|
|
12
|
+
npm_dir="$root/.devcontainer/npm-auth"
|
|
13
|
+
gh_dir="$root/.devcontainer/gh-auth"
|
|
14
|
+
gh_env="$root/.devcontainer/gh.env"
|
|
15
|
+
cursor_dir="$root/.cursor"
|
|
16
|
+
RAG_ENV="$cursor_dir/codebase-rag.env"
|
|
17
|
+
|
|
18
|
+
run_codebase_rag_mcp() {
|
|
19
|
+
local script="$here/codebase-rag-mcp.ts"
|
|
20
|
+
CODEBASE_RAG_WORKSPACE="$root" node --experimental-strip-types "$script" "$@"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
load_rag_env() {
|
|
24
|
+
RAG_URL=""
|
|
25
|
+
RAG_TOKEN=""
|
|
26
|
+
[[ -f "$RAG_ENV" ]] || return 0
|
|
27
|
+
# shellcheck disable=SC1090
|
|
28
|
+
set -a
|
|
29
|
+
# shellcheck disable=SC1090
|
|
30
|
+
source "$RAG_ENV"
|
|
31
|
+
set +a
|
|
32
|
+
RAG_URL="${CODEBASE_RAG_MCP_URL:-}"
|
|
33
|
+
RAG_TOKEN="${CODEBASE_RAG_MCP_TOKEN:-}"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
write_rag_env() {
|
|
37
|
+
mkdir -p "$(dirname "$RAG_ENV")"
|
|
38
|
+
umask 077
|
|
39
|
+
cat >"$RAG_ENV" <<EOF
|
|
40
|
+
# Written by .devcontainer/initialize.sh. Not in git.
|
|
41
|
+
CODEBASE_RAG_MCP_URL=${RAG_URL}
|
|
42
|
+
CODEBASE_RAG_MCP_TOKEN=${RAG_TOKEN}
|
|
43
|
+
CODEBASE_RAG_MCP_ROOT=${root}
|
|
44
|
+
EOF
|
|
45
|
+
chmod 600 "$RAG_ENV"
|
|
46
|
+
if [[ -n "$RAG_URL" && -n "$RAG_TOKEN" ]]; then
|
|
47
|
+
run_codebase_rag_mcp merge || true
|
|
48
|
+
fi
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
seed_rag_from_host_mcp() {
|
|
52
|
+
local mcp="${HOME}/.cursor/mcp.json"
|
|
53
|
+
[[ -f "$mcp" ]] || return 1
|
|
54
|
+
command -v node >/dev/null 2>&1 || return 1
|
|
55
|
+
run_codebase_rag_mcp seed-print "$mcp"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
ensure_cursor_dir() {
|
|
59
|
+
mkdir -p "$cursor_dir"
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
ensure_auth_dir() {
|
|
63
|
+
local dir="$1"
|
|
64
|
+
if ! mkdir -p "$dir" 2>/dev/null; then
|
|
65
|
+
echo "Cannot create $dir (permission denied)." >&2
|
|
66
|
+
echo "The scaffold container likely left .devcontainer root-owned. Fix with:" >&2
|
|
67
|
+
echo " sudo chown -R \"$USER:$USER\" \"$root\"" >&2
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
{
|
|
71
|
+
echo "*"
|
|
72
|
+
echo "!.gitignore"
|
|
73
|
+
} >"$dir/.gitignore"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
ensure_gh_env() {
|
|
77
|
+
if [[ -d "$gh_env" ]]; then
|
|
78
|
+
echo "Refusing to start: $gh_env is a directory (left by a prior bind mount). Remove it and rebuild." >&2
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
touch "$gh_env"
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
setup_npm_auth() {
|
|
85
|
+
if [[ -f "$npm_dir/.npmrc" ]]; then
|
|
86
|
+
echo "npm auth: using $npm_dir/.npmrc"
|
|
87
|
+
return 0
|
|
88
|
+
fi
|
|
89
|
+
if ! prompt_yn "Configure npm auth for this workspace?"; then
|
|
90
|
+
echo "npm auth: skipped"
|
|
91
|
+
return 0
|
|
92
|
+
fi
|
|
93
|
+
if [[ -f "${HOME}/.npmrc" ]]; then
|
|
94
|
+
cp -a "${HOME}/.npmrc" "$npm_dir/.npmrc"
|
|
95
|
+
echo "npm auth: copied ~/.npmrc → $npm_dir/.npmrc"
|
|
96
|
+
return 0
|
|
97
|
+
fi
|
|
98
|
+
echo "npm auth: no ~/.npmrc — log in inside the container if prompted"
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
setup_gh_auth() {
|
|
102
|
+
if [[ -f "$gh_dir/hosts.yml" ]]; then
|
|
103
|
+
echo "gh auth: using $gh_dir/hosts.yml"
|
|
104
|
+
return 0
|
|
105
|
+
fi
|
|
106
|
+
if ! prompt_yn "Configure GitHub CLI auth for this workspace?"; then
|
|
107
|
+
echo "gh auth: skipped"
|
|
108
|
+
return 0
|
|
109
|
+
fi
|
|
110
|
+
if [[ -f "${HOME}/.config/gh/hosts.yml" ]]; then
|
|
111
|
+
cp -a "${HOME}/.config/gh/hosts.yml" "$gh_dir/hosts.yml"
|
|
112
|
+
[[ -f "${HOME}/.config/gh/config.yml" ]] &&
|
|
113
|
+
cp -a "${HOME}/.config/gh/config.yml" "$gh_dir/config.yml"
|
|
114
|
+
echo "gh auth: copied ~/.config/gh → $gh_dir"
|
|
115
|
+
return 0
|
|
116
|
+
fi
|
|
117
|
+
echo "gh auth: no ~/.config/gh/hosts.yml — log in inside the container if prompted"
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
setup_codebase_rag_env() {
|
|
121
|
+
load_rag_env
|
|
122
|
+
if [[ -n "$RAG_URL" && -n "$RAG_TOKEN" ]]; then
|
|
123
|
+
write_rag_env
|
|
124
|
+
echo "codebase-rag MCP: using $RAG_ENV"
|
|
125
|
+
return 0
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
local seeded
|
|
129
|
+
if seeded="$(seed_rag_from_host_mcp 2>/dev/null)"; then
|
|
130
|
+
if prompt_yn "Found codebase-rag in ~/.cursor/mcp.json. Use it for this workspace?" y; then
|
|
131
|
+
RAG_URL="$(printf '%s\n' "$seeded" | sed -n '1p')"
|
|
132
|
+
RAG_TOKEN="$(printf '%s\n' "$seeded" | sed -n '2p')"
|
|
133
|
+
write_rag_env
|
|
134
|
+
echo "codebase-rag MCP: imported HTTP server from ~/.cursor/mcp.json → $RAG_ENV"
|
|
135
|
+
return 0
|
|
136
|
+
fi
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
if ! prompt_yn "Configure codebase RAG MCP (semantic search)?"; then
|
|
140
|
+
RAG_URL=""
|
|
141
|
+
RAG_TOKEN=""
|
|
142
|
+
write_rag_env
|
|
143
|
+
echo "codebase-rag MCP: skipped"
|
|
144
|
+
return 0
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
printf '%s\n' "Empty URL skips. Example: https://rag.example.com/mcp" >/dev/tty
|
|
148
|
+
printf '%s' "MCP URL: " >/dev/tty
|
|
149
|
+
read_tty RAG_URL
|
|
150
|
+
RAG_URL="$(printf '%s' "$RAG_URL" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
|
151
|
+
if [[ -z "$RAG_URL" ]]; then
|
|
152
|
+
RAG_TOKEN=""
|
|
153
|
+
write_rag_env
|
|
154
|
+
echo "codebase-rag MCP: skipped"
|
|
155
|
+
return 0
|
|
156
|
+
fi
|
|
157
|
+
printf '%s' "Bearer token (hidden): " >/dev/tty
|
|
158
|
+
read_tty RAG_TOKEN hidden
|
|
159
|
+
write_rag_env
|
|
160
|
+
echo "codebase-rag MCP: saved $RAG_ENV"
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
ensure_auth_dir "$npm_dir"
|
|
164
|
+
ensure_auth_dir "$gh_dir"
|
|
165
|
+
ensure_gh_env
|
|
166
|
+
ensure_cursor_dir
|
|
167
|
+
setup_npm_auth
|
|
168
|
+
setup_gh_auth
|
|
169
|
+
setup_codebase_rag_env
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Runs after container create and when workspace content updates
|
|
3
|
+
# (devcontainer postCreateCommand / updateContentCommand).
|
|
4
|
+
# Installs deps when missing or when the lockfile changed; skips otherwise.
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
8
|
+
cd "$root"
|
|
9
|
+
|
|
10
|
+
lockfile="pnpm-lock.yaml"
|
|
11
|
+
stamp="node_modules/.decohere-pnpm-lock.sha"
|
|
12
|
+
|
|
13
|
+
current_hash=""
|
|
14
|
+
if [[ -f "$lockfile" ]]; then
|
|
15
|
+
current_hash="$(sha256sum "$lockfile" | awk '{print $1}')"
|
|
16
|
+
elif [[ -f package.json ]]; then
|
|
17
|
+
current_hash="$(sha256sum package.json | awk '{print $1}')"
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
if [[ -d node_modules/.bin ]] && [[ -n "$current_hash" ]] && [[ -f "$stamp" ]] && [[ "$(cat "$stamp")" == "$current_hash" ]]; then
|
|
21
|
+
echo "node_modules: up to date, skipping pnpm install"
|
|
22
|
+
exit 0
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
echo "node_modules: installing dependencies (first create may take a while)..."
|
|
26
|
+
if [[ -f "$lockfile" ]]; then
|
|
27
|
+
pnpm install --frozen-lockfile
|
|
28
|
+
else
|
|
29
|
+
pnpm install
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
if [[ -n "$current_hash" ]]; then
|
|
33
|
+
mkdir -p node_modules
|
|
34
|
+
printf '%s\n' "$current_hash" >"$stamp"
|
|
35
|
+
fi
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Runs on every container start (devcontainer postStartCommand).
|
|
3
|
+
# Optional npm / gh login is y/N on a TTY. Install is post-create.sh.
|
|
4
|
+
# MCP merge also runs here for later reconnects; the Compose service command
|
|
5
|
+
# merges before Cursor attaches (postStart is too late for the first snapshot).
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
root="$(cd "$here/.." && pwd)"
|
|
10
|
+
# shellcheck source=tty-prompt.sh
|
|
11
|
+
source "$here/tty-prompt.sh"
|
|
12
|
+
|
|
13
|
+
CODEBASE_RAG_WORKSPACE="$root" node --experimental-strip-types "$here/codebase-rag-mcp.ts" merge ||
|
|
14
|
+
echo "codebase-rag MCP: merge skipped" >&2
|
|
15
|
+
|
|
16
|
+
AUTH_REGISTRY="https://registry.npmjs.org"
|
|
17
|
+
|
|
18
|
+
ensure_npm_auth() {
|
|
19
|
+
if npm whoami --registry "$AUTH_REGISTRY" >/dev/null 2>&1; then
|
|
20
|
+
echo "npm: logged in as $(npm whoami --registry "$AUTH_REGISTRY")"
|
|
21
|
+
return 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
if prompt_yn "Log in to npm?"; then
|
|
25
|
+
echo "npm: starting login..."
|
|
26
|
+
npm login --registry "$AUTH_REGISTRY" </dev/tty >/dev/tty
|
|
27
|
+
return 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
echo "npm: skipped. Open a terminal and run: npm login" >&2
|
|
31
|
+
echo " (creds persist in .devcontainer/npm-auth/)" >&2
|
|
32
|
+
return 1
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
ensure_gh_auth() {
|
|
36
|
+
if ! command -v gh >/dev/null 2>&1; then
|
|
37
|
+
echo "gh: not installed in this container" >&2
|
|
38
|
+
return 1
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
if gh auth status >/dev/null 2>&1; then
|
|
42
|
+
echo "gh: $(gh auth status 2>&1 | head -n1)"
|
|
43
|
+
return 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
local token="${GH_TOKEN:-${GITHUB_TOKEN:-}}"
|
|
47
|
+
if [[ -n "$token" ]]; then
|
|
48
|
+
echo "gh: authenticating from GH_TOKEN..."
|
|
49
|
+
printf '%s\n' "$token" | gh auth login --with-token
|
|
50
|
+
return 0
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
if prompt_yn "Log in to GitHub CLI (gh)?"; then
|
|
54
|
+
echo "gh: starting login..."
|
|
55
|
+
gh auth login </dev/tty >/dev/tty
|
|
56
|
+
return 0
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
echo "gh: skipped. Open a terminal and run: gh auth login" >&2
|
|
60
|
+
echo " (creds persist in .devcontainer/gh-auth/; or set GH_TOKEN in .devcontainer/gh.env)" >&2
|
|
61
|
+
return 1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
ensure_npm_auth || true
|
|
65
|
+
ensure_gh_auth || true
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
can_prompt() {
|
|
2
|
+
[[ -r /dev/tty && -w /dev/tty ]]
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
read_tty() {
|
|
6
|
+
local var="$1"
|
|
7
|
+
local hidden="${2:-}"
|
|
8
|
+
local value=""
|
|
9
|
+
if [[ -n "$hidden" ]]; then
|
|
10
|
+
read -r -s value </dev/tty || true
|
|
11
|
+
printf '\n' >/dev/tty
|
|
12
|
+
else
|
|
13
|
+
read -r value </dev/tty || true
|
|
14
|
+
fi
|
|
15
|
+
printf -v "$var" '%s' "$value"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
# Returns 0 for yes. Default is n unless the second argument is y.
|
|
19
|
+
prompt_yn() {
|
|
20
|
+
local question="$1"
|
|
21
|
+
local default="${2:-n}"
|
|
22
|
+
local reply=""
|
|
23
|
+
if ! can_prompt; then
|
|
24
|
+
return 1
|
|
25
|
+
fi
|
|
26
|
+
local hint="y/N"
|
|
27
|
+
if [[ "$default" == "y" ]]; then
|
|
28
|
+
hint="Y/n"
|
|
29
|
+
fi
|
|
30
|
+
printf '%s [%s] ' "$question" "$hint" >/dev/tty
|
|
31
|
+
read_tty reply
|
|
32
|
+
reply="$(printf '%s' "$reply" | tr '[:upper:]' '[:lower:]' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
|
33
|
+
if [[ -z "$reply" ]]; then
|
|
34
|
+
[[ "$default" == "y" ]]
|
|
35
|
+
return
|
|
36
|
+
fi
|
|
37
|
+
[[ "$reply" == "y" || "$reply" == "yes" ]]
|
|
38
|
+
}
|