Merge remote-tracking branch 'origin/main' into andreybavt/historic-sql-redesign

This commit is contained in:
Andrey Avtomonov 2026-05-11 20:52:19 +02:00
commit f3f6b36551
56 changed files with 34 additions and 50 deletions

1
.gitignore vendored
View file

@ -63,3 +63,4 @@ yarn-error.log*
*.swp
*.swo
*~
.vercel

1
docs-site/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.vercel

View file

@ -17,6 +17,7 @@
"react-dom": "19.2.6"
},
"devDependencies": {
"@types/node": "^24.3.0",
"@types/react": "^19",
"@types/react-dom": "^19",
"typescript": "^5.9",

5
pnpm-lock.yaml generated
View file

@ -22,7 +22,7 @@ importers:
specifier: ^4.0.18
version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.3))
docs:
docs-site:
dependencies:
fumadocs-core:
specifier: 15.7.13
@ -46,6 +46,9 @@ importers:
'@tailwindcss/postcss':
specifier: ^4
version: 4.3.0
'@types/node':
specifier: ^24.3.0
version: 24.12.2
'@types/react':
specifier: ^19
version: 19.2.14

View file

@ -1,6 +1,6 @@
packages:
- "packages/*"
- "docs"
- "docs-site"
overrides:
"@types/node": ^24.3.0

View file

@ -6,7 +6,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
const codeExtensions = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.py']);
const runtimeAssetPatterns = [/^packages\/[^/]+\/prompts\/.+\.md$/, /^packages\/[^/]+\/skills\/.+\.md$/];
const identifierSkipPrefixes = ['docs/', 'examples/', 'python/ktx-sl/plans/', 'python/ktx-sl/openspec/'];
const identifierSkipPrefixes = ['docs/', 'docs-site/', 'examples/', 'python/ktx-sl/plans/', 'python/ktx-sl/openspec/'];
const identifierAllowPatterns = [
/^packages\/cli\/src\/(?:index|managed-local-embeddings|managed-python-command|managed-python-daemon|managed-python-runtime|runtime)(?:\.test)?\.ts$/,
/^scripts\/(?:build-public-npm-package|build-python-runtime-wheel|local-embeddings-runtime-smoke|package-artifacts|publish-public-npm-package|published-package-smoke|release-readiness)(?:\.test)?\.mjs$/,

View file

@ -32,11 +32,13 @@ describe('Conductor workspace scripts', () => {
assert.doesNotMatch(setupScript, /scripts\/conductor\//);
});
it('links private agent overlays when KTX_AGENT_OVERLAYS_ROOT is set', async () => {
it('links private agent overlays from the Conductor root checkout', async () => {
const workspaceScript = await readText('scripts/conductor-setup.sh');
assert.match(workspaceScript, /KTX_AGENT_OVERLAYS_ROOT/);
assert.match(workspaceScript, /ln -s "\$\{KTX_AGENT_OVERLAYS_ROOT\}\/\.agents" \.agents/);
assert.match(workspaceScript, /link_shared_path "\$CONDUCTOR_ROOT_PATH\/\.agents" \.agents/);
assert.match(workspaceScript, /link_shared_path "\$CONDUCTOR_ROOT_PATH\/\.claude" \.claude/);
assert.doesNotMatch(workspaceScript, /KTX_AGENT_OVERLAYS_ROOT/);
assert.doesNotMatch(workspaceScript, /link_agent_skills_for_claude/);
});
it('runs the KTX daemon on the documented fixed local port', async () => {

View file

@ -82,63 +82,39 @@ resolve_uv_for_project() {
printf '%s\n' "$workspace_uv"
}
link_agent_overlays() {
if [ -z "${KTX_AGENT_OVERLAYS_ROOT:-}" ] || [ ! -d "${KTX_AGENT_OVERLAYS_ROOT}/.agents" ]; then
link_shared_path() {
local source_path="$1"
local link_path="$2"
if [ ! -e "$source_path" ] && [ ! -L "$source_path" ]; then
return 1
fi
if [ -L "$link_path" ]; then
ln -sfn "$source_path" "$link_path"
echo "Linked $link_path"
return 0
fi
if [ -L .agents ]; then
return 0
if [ -e "$link_path" ]; then
echo "Skipping $link_path symlink because $link_path already exists and is not a symlink." >&2
return 1
fi
if [ -e .agents ]; then
echo "Skipping .agents symlink because .agents already exists and is not a symlink." >&2
return 0
fi
ln -s "${KTX_AGENT_OVERLAYS_ROOT}/.agents" .agents
ln -s "$source_path" "$link_path"
echo "Linked $link_path"
}
# Expose .agents/skills/* to Claude Code by symlinking each entry under
# .claude/skills/. Codex CLI reads .agents/skills/ directly; Claude Code only
# scans .claude/skills/, so the overlay needs both sides to be visible to both
# tools.
link_agent_skills_for_claude() {
if [ ! -d .agents/skills ]; then
return 0
link_agent_overlays() {
if [ -n "${CONDUCTOR_ROOT_PATH:-}" ]; then
link_shared_path "$CONDUCTOR_ROOT_PATH/.agents" .agents || true
link_shared_path "$CONDUCTOR_ROOT_PATH/.claude" .claude || true
fi
mkdir -p .claude/skills
for skill_path in .agents/skills/*; do
[ -e "$skill_path" ] || continue
local skill_name
skill_name="$(basename "$skill_path")"
local link_path=".claude/skills/$skill_name"
local target="../../.agents/skills/$skill_name"
if [ -L "$link_path" ]; then
if [ "$(readlink "$link_path")" = "$target" ]; then
continue
fi
echo "Skipping $link_path: existing symlink points elsewhere." >&2
continue
fi
if [ -e "$link_path" ]; then
echo "Skipping $link_path: already exists and is not a symlink." >&2
continue
fi
ln -s "$target" "$link_path"
done
}
echo "=== Conductor KTX workspace setup ==="
link_agent_overlays
link_agent_skills_for_claude
if [ -n "${CONDUCTOR_ROOT_PATH:-}" ] && [ -f "$CONDUCTOR_ROOT_PATH/.env" ]; then
ln -sf "$CONDUCTOR_ROOT_PATH/.env" .env