kortext 2.2.0 → 3.0.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/AGENTS.md +7 -11
- package/CHANGELOG.md +81 -0
- package/LICENSE +21 -0
- package/README.md +144 -47
- package/USER-GUIDE.md +505 -0
- package/bin/kortext.js +23 -0
- package/bin/kortext.ts +377 -0
- package/dist/bin/kortext.js +346 -0
- package/dist/bin/kortext.js.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.js +553 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/sse.js +38 -0
- package/dist/mcp/sse.js.map +1 -0
- package/dist/mcp/stdio.js +44 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/server/cli/cleanup.js +73 -0
- package/dist/server/cli/cleanup.js.map +1 -0
- package/dist/server/cli/commands.js +73 -0
- package/dist/server/cli/commands.js.map +1 -0
- package/dist/server/cli/doctor.js +118 -0
- package/dist/server/cli/doctor.js.map +1 -0
- package/dist/server/cli/executor-factory.js +39 -0
- package/dist/server/cli/executor-factory.js.map +1 -0
- package/dist/server/cli/init.js +121 -0
- package/dist/server/cli/init.js.map +1 -0
- package/dist/server/cli/logs.js +28 -0
- package/dist/server/cli/logs.js.map +1 -0
- package/dist/server/cli/serve.js +72 -0
- package/dist/server/cli/serve.js.map +1 -0
- package/dist/server/config/env.js +12 -0
- package/dist/server/config/env.js.map +1 -0
- package/dist/server/db/client.js +32 -0
- package/dist/server/db/client.js.map +1 -0
- package/dist/server/db/json.js +21 -0
- package/dist/server/db/json.js.map +1 -0
- package/dist/server/db/migrate.js +70 -0
- package/dist/server/db/migrate.js.map +1 -0
- package/dist/server/db/migrations/001_init.sql +243 -0
- package/dist/server/db/repositories/audit-log.js +58 -0
- package/dist/server/db/repositories/audit-log.js.map +1 -0
- package/dist/server/db/repositories/backlog.js +96 -0
- package/dist/server/db/repositories/backlog.js.map +1 -0
- package/dist/server/db/repositories/contexts.js +54 -0
- package/dist/server/db/repositories/contexts.js.map +1 -0
- package/dist/server/db/repositories/decisions.js +71 -0
- package/dist/server/db/repositories/decisions.js.map +1 -0
- package/dist/server/db/repositories/handovers.js +53 -0
- package/dist/server/db/repositories/handovers.js.map +1 -0
- package/dist/server/db/repositories/index.js +30 -0
- package/dist/server/db/repositories/index.js.map +1 -0
- package/dist/server/db/repositories/locks.js +59 -0
- package/dist/server/db/repositories/locks.js.map +1 -0
- package/dist/server/db/repositories/notifications.js +63 -0
- package/dist/server/db/repositories/notifications.js.map +1 -0
- package/dist/server/db/repositories/pending-questions.js +63 -0
- package/dist/server/db/repositories/pending-questions.js.map +1 -0
- package/dist/server/db/repositories/runs.js +138 -0
- package/dist/server/db/repositories/runs.js.map +1 -0
- package/dist/server/db/repositories/runtime-artifacts.js +39 -0
- package/dist/server/db/repositories/runtime-artifacts.js.map +1 -0
- package/dist/server/db/repositories/secrets.js +65 -0
- package/dist/server/db/repositories/secrets.js.map +1 -0
- package/dist/server/db/repositories/sessions.js +48 -0
- package/dist/server/db/repositories/sessions.js.map +1 -0
- package/dist/server/db/schemas.js +308 -0
- package/dist/server/db/schemas.js.map +1 -0
- package/dist/server/engine/consistency.js +25 -0
- package/dist/server/engine/consistency.js.map +1 -0
- package/dist/server/engine/dag.js +86 -0
- package/dist/server/engine/dag.js.map +1 -0
- package/dist/server/engine/executor.js +2 -0
- package/dist/server/engine/executor.js.map +1 -0
- package/dist/server/engine/executors/claude-cli-executor.js +83 -0
- package/dist/server/engine/executors/claude-cli-executor.js.map +1 -0
- package/dist/server/engine/executors/cli-spawn.js +127 -0
- package/dist/server/engine/executors/cli-spawn.js.map +1 -0
- package/dist/server/engine/executors/codex-cli-executor.js +69 -0
- package/dist/server/engine/executors/codex-cli-executor.js.map +1 -0
- package/dist/server/engine/executors/gemini-cli-executor.js +69 -0
- package/dist/server/engine/executors/gemini-cli-executor.js.map +1 -0
- package/dist/server/engine/executors/mock-executor.js +52 -0
- package/dist/server/engine/executors/mock-executor.js.map +1 -0
- package/dist/server/engine/executors/persona-routed-executor.js +17 -0
- package/dist/server/engine/executors/persona-routed-executor.js.map +1 -0
- package/dist/server/engine/gate-enforcer.js +75 -0
- package/dist/server/engine/gate-enforcer.js.map +1 -0
- package/dist/server/engine/git-commit.js +42 -0
- package/dist/server/engine/git-commit.js.map +1 -0
- package/dist/server/engine/handover.js +120 -0
- package/dist/server/engine/handover.js.map +1 -0
- package/dist/server/engine/item-lifecycle.js +74 -0
- package/dist/server/engine/item-lifecycle.js.map +1 -0
- package/dist/server/engine/persona-registry.js +108 -0
- package/dist/server/engine/persona-registry.js.map +1 -0
- package/dist/server/engine/worker-pool.js +324 -0
- package/dist/server/engine/worker-pool.js.map +1 -0
- package/dist/server/engine/workflow-loader.js +55 -0
- package/dist/server/engine/workflow-loader.js.map +1 -0
- package/dist/server/engine/workflow-parser.js +158 -0
- package/dist/server/engine/workflow-parser.js.map +1 -0
- package/dist/server/engine/worktree.js +176 -0
- package/dist/server/engine/worktree.js.map +1 -0
- package/dist/server/index.js +99 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/notifications/dispatcher.js +60 -0
- package/dist/server/notifications/dispatcher.js.map +1 -0
- package/dist/server/notifications/slack.js +37 -0
- package/dist/server/notifications/slack.js.map +1 -0
- package/dist/server/notifications/telegram.js +33 -0
- package/dist/server/notifications/telegram.js.map +1 -0
- package/dist/server/orchestrator/approval-queue.js +83 -0
- package/dist/server/orchestrator/approval-queue.js.map +1 -0
- package/dist/server/orchestrator/blueprint-watcher.js +94 -0
- package/dist/server/orchestrator/blueprint-watcher.js.map +1 -0
- package/dist/server/orchestrator/orchestrator.js +283 -0
- package/dist/server/orchestrator/orchestrator.js.map +1 -0
- package/dist/server/orchestrator/pipeline-chainer.js +96 -0
- package/dist/server/orchestrator/pipeline-chainer.js.map +1 -0
- package/dist/server/orchestrator/resume.js +36 -0
- package/dist/server/orchestrator/resume.js.map +1 -0
- package/dist/server/routes/approvals.js +52 -0
- package/dist/server/routes/approvals.js.map +1 -0
- package/dist/server/routes/backlog.js +44 -0
- package/dist/server/routes/backlog.js.map +1 -0
- package/dist/server/routes/db-info.js +21 -0
- package/dist/server/routes/db-info.js.map +1 -0
- package/dist/server/routes/docs.js +70 -0
- package/dist/server/routes/docs.js.map +1 -0
- package/dist/server/routes/doctor.js +19 -0
- package/dist/server/routes/doctor.js.map +1 -0
- package/dist/server/routes/handovers.js +25 -0
- package/dist/server/routes/handovers.js.map +1 -0
- package/dist/server/routes/health.js +11 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/personas.js +96 -0
- package/dist/server/routes/personas.js.map +1 -0
- package/dist/server/routes/runs.js +41 -0
- package/dist/server/routes/runs.js.map +1 -0
- package/dist/server/routes/workflows.js +38 -0
- package/dist/server/routes/workflows.js.map +1 -0
- package/dist/server/safety/harmful-output-filter.js +40 -0
- package/dist/server/safety/harmful-output-filter.js.map +1 -0
- package/dist/server/safety/secret-scanner.js +169 -0
- package/dist/server/safety/secret-scanner.js.map +1 -0
- package/dist/server/services/markdown-sync.js +101 -0
- package/dist/server/services/markdown-sync.js.map +1 -0
- package/dist/web/assets/index-B80d5ZPZ.js +75 -0
- package/dist/web/assets/index-B80d5ZPZ.js.map +1 -0
- package/dist/web/assets/index-Bge5Gzqv.css +1 -0
- package/dist/web/index.html +13 -0
- package/docs/architecture.md +413 -0
- package/package.json +83 -11
- package/rules/behavior.md +2 -2
- package/scripts/copy-migrations.mjs +29 -0
- package/workspace/.locks/workspace_handover.md.lock +3 -0
- package/hooks/audit-logger.sh +0 -25
- package/hooks/auto-locker.sh +0 -74
- package/hooks/auto-unlocker.sh +0 -17
- package/hooks/backlog-sync-guard.sh +0 -12
- package/hooks/branch-guard.sh +0 -32
- package/hooks/commit-msg-guard.sh +0 -43
- package/hooks/git-pre-commit.sh +0 -76
- package/hooks/git-pre-push.sh +0 -17
- package/hooks/handover-guard.sh +0 -33
- package/hooks/kortext-init.sh +0 -194
- package/hooks/kortext-lib.sh +0 -141
- package/hooks/lint-guard.sh +0 -50
- package/hooks/secret-scanner.sh +0 -89
- package/hooks/size-guard.sh +0 -48
- package/hooks/snapshot-guard.sh +0 -39
- package/hooks/write-guard.sh +0 -77
- package/scripts/kortext-backlog-add.py +0 -123
- package/scripts/kortext-backlog-health.py +0 -112
- package/scripts/kortext-backlog-sync.py +0 -117
- package/scripts/kortext-bulk-plan.py +0 -63
- package/scripts/kortext-cli.py +0 -295
- package/scripts/kortext-consistency-check.py +0 -74
- package/scripts/kortext-context-check.py +0 -146
- package/scripts/kortext-handover.py +0 -107
- package/scripts/kortext-item-check.py +0 -61
- package/scripts/kortext-item-start.py +0 -70
- package/scripts/kortext-item-transition.py +0 -78
- package/scripts/kortext-lock.py +0 -174
- package/scripts/kortext-session-start.py +0 -127
- package/scripts/lock_kortext.sh +0 -34
- package/settings/.claude-settings.template.json +0 -48
- package/settings/CHANGELOG.md +0 -176
- package/settings/INTEGRATION-MAP.md +0 -276
- package/settings/README.md +0 -255
- package/settings/USER-GUIDE.md +0 -502
- package/settings/VERSION +0 -1
- package/settings/config.md +0 -8
- package/settings/runtime-adapters.md +0 -104
- package/skills/backend-developer/.gitkeep +0 -0
- package/skills/compliance-expert/.gitkeep +0 -0
- package/skills/copywriter/.gitkeep +0 -0
- package/skills/db-admin/.gitkeep +0 -0
- package/skills/delivery-manager/.gitkeep +0 -0
- package/skills/designer/.gitkeep +0 -0
- package/skills/devops-engineer/.gitkeep +0 -0
- package/skills/engineering-manager/.gitkeep +0 -0
- package/skills/frontend-developer/.gitkeep +0 -0
- package/skills/growth-expert/.gitkeep +0 -0
- package/skills/operation-manager/.gitkeep +0 -0
- package/skills/product-manager/.gitkeep +0 -0
- package/skills/qa-engineer/.gitkeep +0 -0
- package/skills/security-engineer/.gitkeep +0 -0
package/hooks/audit-logger.sh
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] İşlem Günlüğü (Audit Logger)
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
# shellcheck source=kortext-lib.sh
|
|
7
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
8
|
-
|
|
9
|
-
LOG_FILE="$KORTEXT_WORKSPACE_DIR/reports/audit.log"
|
|
10
|
-
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
|
|
11
|
-
|
|
12
|
-
# Çevresel değişkenlerden bilgileri çek (Casing ve isim kullandığın AI arayüzüne göre değişebilir)
|
|
13
|
-
ACTION_FILE="${KORTEXT_FILE_PATH:-${CLAUDE_FILE_PATH:-${GEMINI_FILE_PATH:-${OPENAI_FILE_PATH:-N/A}}}}"
|
|
14
|
-
LAST_CMD="${KORTEXT_LAST_CMD:-${CLAUDE_LAST_COMMAND:-${GEMINI_LAST_ACTION:-${OPENAI_LAST_COMMAND:-N/A}}}}"
|
|
15
|
-
AGENT_NAME="${KORTEXT_AGENT_NAME:-${CLAUDE_AGENT_NAME:-${GEMINI_AGENT_NAME:-${OPENAI_AGENT_NAME:-Agent}}}}"
|
|
16
|
-
|
|
17
|
-
mkdir -p "$KORTEXT_WORKSPACE_DIR/reports"
|
|
18
|
-
|
|
19
|
-
# Kayıt Satırı Oluştur
|
|
20
|
-
LOG_ENTRY="[$TIMESTAMP] | AGENT: $AGENT_NAME | FILE: $ACTION_FILE | CMD: $LAST_CMD"
|
|
21
|
-
|
|
22
|
-
# Dosyaya ekle
|
|
23
|
-
echo "$LOG_ENTRY" >> "$LOG_FILE"
|
|
24
|
-
|
|
25
|
-
exit 0
|
package/hooks/auto-locker.sh
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Otomatik Dosya Kilidi (Pre-Edit)
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
# shellcheck source=kortext-lib.sh
|
|
7
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
8
|
-
|
|
9
|
-
kortext_load_config
|
|
10
|
-
# Dakika cinsinden lock timeout (shell fallback için). Default 5 dakika.
|
|
11
|
-
KORTEXT_LOCK_TIMEOUT_MIN="${KORTEXT_LOCK_TIMEOUT_MIN:-5}"
|
|
12
|
-
KORTEXT_HOOK_MODE="${KORTEXT_HOOK_MODE:-permissive}"
|
|
13
|
-
|
|
14
|
-
FILE_PATH="${KORTEXT_FILE_PATH:-${CLAUDE_FILE_PATH:-${GEMINI_FILE_PATH:-${OPENAI_FILE_PATH:-}}}}"
|
|
15
|
-
AGENT_NAME="${KORTEXT_AGENT:-unknown-agent}"
|
|
16
|
-
|
|
17
|
-
if [ -z "$FILE_PATH" ]; then
|
|
18
|
-
if [ "$KORTEXT_HOOK_MODE" = "strict" ]; then
|
|
19
|
-
echo "⚠️ [KORTEXT] KORTEXT_FILE_PATH tanımsız. strict modda çıkılıyor."
|
|
20
|
-
exit 1
|
|
21
|
-
fi
|
|
22
|
-
exit 0
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
# Sadece ortak hafıza dosyaları için kilit çalıştır
|
|
26
|
-
if [[ "$FILE_PATH" == *"context.md" ]] || [[ "$FILE_PATH" == *"backlog/"* ]] || [[ "$FILE_PATH" == *"handover.md" ]]; then
|
|
27
|
-
|
|
28
|
-
# --- Python lock (kortext-lock.py) ile entegrasyon ---
|
|
29
|
-
LOCK_PY="$KORTEXT_DIR/scripts/kortext-lock.py"
|
|
30
|
-
if command -v python3 &>/dev/null && [ -f "$LOCK_PY" ]; then
|
|
31
|
-
python3 "$LOCK_PY" acquire --file "$FILE_PATH" --agent "$AGENT_NAME" 2>/dev/null || {
|
|
32
|
-
# Python lock başarısız → shell lock'a düş
|
|
33
|
-
echo "⚠️ [KORTEXT] kortext-lock.py acquire başarısız. Shell kilit mekanizmasına geçiliyor."
|
|
34
|
-
}
|
|
35
|
-
else
|
|
36
|
-
# --- Shell-only fallback lock (flock tabanlı, race-free) ---
|
|
37
|
-
# flock(1) ile atomik bir guard alıp lock dosyasını oluştururuz.
|
|
38
|
-
# Böylece iki ajan eş zamanlı stale-kontrolü + create yaparken yarışmaz.
|
|
39
|
-
LOCK_DIR="$(dirname "$FILE_PATH")"
|
|
40
|
-
file_name="$(basename "$FILE_PATH")"
|
|
41
|
-
LOCK_FILE="$LOCK_DIR/${file_name}.lock"
|
|
42
|
-
GUARD_FILE="$LOCK_FILE.guard"
|
|
43
|
-
|
|
44
|
-
# Guard dosyasını fd 200'e bağla.
|
|
45
|
-
exec 200>"$GUARD_FILE"
|
|
46
|
-
|
|
47
|
-
if flock -n -x 200; then
|
|
48
|
-
# Atomik kontrol: kilit dosyası var mı?
|
|
49
|
-
if [ -f "$LOCK_FILE" ]; then
|
|
50
|
-
# Stale kontrolü: dakika cinsinden timeout aşıldıysa sil.
|
|
51
|
-
if find "$LOCK_FILE" -mmin +"$KORTEXT_LOCK_TIMEOUT_MIN" -print -quit 2>/dev/null | grep -q .; then
|
|
52
|
-
rm -f "$LOCK_FILE"
|
|
53
|
-
else
|
|
54
|
-
# Aktif kilit var, çakışma uyarısı.
|
|
55
|
-
flock -u 200
|
|
56
|
-
echo "---" >&2
|
|
57
|
-
echo "🔒 [KORTEXT] KILIT ÇAKIŞMASI" >&2
|
|
58
|
-
echo "$LOCK_FILE aktif olarak başka bir ajan tarafından kullanılıyor." >&2
|
|
59
|
-
echo "Timeout: ${KORTEXT_LOCK_TIMEOUT_MIN} dakika sonra stale sayılır." >&2
|
|
60
|
-
echo "+operation-manager'a eskalasyon yap." >&2
|
|
61
|
-
echo "---" >&2
|
|
62
|
-
exit 1
|
|
63
|
-
fi
|
|
64
|
-
fi
|
|
65
|
-
# Kilit içeriğine ajan ve zaman damgası yaz (epoch saniye).
|
|
66
|
-
echo "${KORTEXT_AGENT_NAME:-$AGENT_NAME}:$(date +%s)" > "$LOCK_FILE"
|
|
67
|
-
flock -u 200
|
|
68
|
-
else
|
|
69
|
-
echo "🔒 [KORTEXT] Guard kilit alınamadı: $GUARD_FILE" >&2
|
|
70
|
-
exit 1
|
|
71
|
-
fi
|
|
72
|
-
fi
|
|
73
|
-
fi
|
|
74
|
-
|
package/hooks/auto-unlocker.sh
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Otomatik Dosya Kilidi Kaldırma (Post-Edit)
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
# shellcheck source=kortext-lib.sh
|
|
7
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
8
|
-
|
|
9
|
-
FILE_PATH="${KORTEXT_FILE_PATH:-${CLAUDE_FILE_PATH:-${GEMINI_FILE_PATH:-${OPENAI_FILE_PATH:-}}}}"
|
|
10
|
-
|
|
11
|
-
if [ -z "$FILE_PATH" ]; then exit 0; fi
|
|
12
|
-
|
|
13
|
-
LOCK_FILE="${FILE_PATH}.lock"
|
|
14
|
-
|
|
15
|
-
if [ -f "$LOCK_FILE" ]; then
|
|
16
|
-
rm "$LOCK_FILE"
|
|
17
|
-
fi
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Backlog dashboard/item drift guard.
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
# shellcheck source=kortext-lib.sh
|
|
9
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
10
|
-
|
|
11
|
-
cd "$KORTEXT_DIR"
|
|
12
|
-
python3 scripts/kortext-backlog-sync.py
|
package/hooks/branch-guard.sh
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Branch Yönetimi ve Koruma
|
|
4
|
-
|
|
5
|
-
CURRENT_BRANCH=$(git branch --show-current 2>/dev/null)
|
|
6
|
-
|
|
7
|
-
# Eğer git olmayan bir yerdeyse çık
|
|
8
|
-
if [ -z "$CURRENT_BRANCH" ]; then exit 0; fi
|
|
9
|
-
|
|
10
|
-
# Behavior kuralı: "Asla doğrudan main ve development üzerinde çalışmayın."
|
|
11
|
-
if [[ "$CURRENT_BRANCH" == "main" ]] || [[ "$CURRENT_BRANCH" == "development" ]] || [[ "$CURRENT_BRANCH" == "master" ]]; then
|
|
12
|
-
echo "---"
|
|
13
|
-
echo "🚫 KORTEXT BRANCH KORUMASI"
|
|
14
|
-
echo "Hata: Şu an '$CURRENT_BRANCH' ana dalındasınız."
|
|
15
|
-
echo "Kortext kuralları gereği doğrudan bu dal üzerinde geliştirme yapamazsınız."
|
|
16
|
-
echo ""
|
|
17
|
-
echo "Lütfen yeni bir dal oluşturun:"
|
|
18
|
-
echo "git checkout -b feature/[task-id]"
|
|
19
|
-
echo "---"
|
|
20
|
-
exit 1
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
# İsimlendirme standardı uyarısı (branching.md satır 17-23)
|
|
24
|
-
if [[ ! "$CURRENT_BRANCH" =~ ^(feature/|hotfix/|bugfix/|release/|chore/) ]]; then
|
|
25
|
-
echo ""
|
|
26
|
-
echo "⚠️ [KORTEXT UYARI]"
|
|
27
|
-
echo "Mevcut branch isimlendirmesi standart dışı ($CURRENT_BRANCH)."
|
|
28
|
-
echo "feature/[task-id] veya hotfix/[hata-adi] formatını kullanmanız önerilir."
|
|
29
|
-
echo ""
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
exit 0
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Commit Mesajı Standart Kontrolü
|
|
4
|
-
|
|
5
|
-
# Git commit sırasında mesaj dosyası parametre olarak gelir
|
|
6
|
-
MSG_FILE="$1"
|
|
7
|
-
COMMIT_MSG=$(cat "$MSG_FILE" 2>/dev/null)
|
|
8
|
-
|
|
9
|
-
# Eğer direkt dosya yoksa ortam değişkenine bak (bazı araçlar için)
|
|
10
|
-
if [ -z "$COMMIT_MSG" ]; then
|
|
11
|
-
COMMIT_MSG="${KORTEXT_COMMIT_MSG:-${CLAUDE_COMMIT_MESSAGE:-${GEMINI_COMMIT_MESSAGE:-${OPENAI_COMMIT_MESSAGE:-}}}}"
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
if [ -z "$COMMIT_MSG" ]; then exit 0; fi
|
|
15
|
-
|
|
16
|
-
# Conventional Commits formatı (feat, fix, docs, refactor, test, chore, style, perf)
|
|
17
|
-
# Örn: feat: add authentication
|
|
18
|
-
PATTERN="^(feat|fix|docs|refactor|test|chore|style|perf)(\(.+\))?!?: .+"
|
|
19
|
-
|
|
20
|
-
if [[ ! "$COMMIT_MSG" =~ $PATTERN ]]; then
|
|
21
|
-
echo "---"
|
|
22
|
-
echo "❌ KORTEXT COMMIT STANDARTLARI İHLALİ"
|
|
23
|
-
echo "Hata: Commit mesajı 'Conventional Commits' formatında değil."
|
|
24
|
-
echo "Kurallara uygun örnekler:"
|
|
25
|
-
echo " - feat: add logging system"
|
|
26
|
-
echo " - fix: resolve api timeout"
|
|
27
|
-
echo " - docs: update technical specifications"
|
|
28
|
-
echo ""
|
|
29
|
-
echo "Geçerli Mesajınız: $COMMIT_MSG"
|
|
30
|
-
echo "---"
|
|
31
|
-
exit 1
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
# İngilizce zorunluluğu kontrolü (Türkçe karakter araması)
|
|
35
|
-
if echo "$COMMIT_MSG" | grep -q "[çğışıöüÇĞİŞIÖÜ]"; then
|
|
36
|
-
echo ""
|
|
37
|
-
echo "⚠️ [KORTEXT UYARI]"
|
|
38
|
-
echo "Commit mesajında Türkçe karakterler tespit edildi."
|
|
39
|
-
echo "Kortext Behavior kuralları gereği commit mesajları İngilizce olmalıdır."
|
|
40
|
-
echo ""
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
exit 0
|
package/hooks/git-pre-commit.sh
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Git pre-commit adapter.
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
SCRIPT_PATH="${BASH_SOURCE[0]}"
|
|
8
|
-
while [ -L "$SCRIPT_PATH" ]; do
|
|
9
|
-
LINK_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
10
|
-
LINK_TARGET="$(readlink "$SCRIPT_PATH")"
|
|
11
|
-
case "$LINK_TARGET" in
|
|
12
|
-
/*) SCRIPT_PATH="$LINK_TARGET" ;;
|
|
13
|
-
*) SCRIPT_PATH="$LINK_DIR/$LINK_TARGET" ;;
|
|
14
|
-
esac
|
|
15
|
-
done
|
|
16
|
-
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
17
|
-
# shellcheck source=kortext-lib.sh
|
|
18
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
19
|
-
kortext_load_config
|
|
20
|
-
|
|
21
|
-
cd "$KORTEXT_ROOT"
|
|
22
|
-
|
|
23
|
-
if ! git rev-parse --git-dir >/dev/null 2>&1; then
|
|
24
|
-
exit 0
|
|
25
|
-
fi
|
|
26
|
-
|
|
27
|
-
STATUS=0
|
|
28
|
-
TMP_DIR="$(mktemp -d)"
|
|
29
|
-
|
|
30
|
-
cleanup() {
|
|
31
|
-
rm -rf "$TMP_DIR"
|
|
32
|
-
}
|
|
33
|
-
trap cleanup EXIT
|
|
34
|
-
|
|
35
|
-
while IFS= read -r -d '' FILE_PATH; do
|
|
36
|
-
[ -n "$FILE_PATH" ] || continue
|
|
37
|
-
[ -f "$FILE_PATH" ] || continue
|
|
38
|
-
|
|
39
|
-
STAGED_COPY="$TMP_DIR/$(basename "$FILE_PATH")"
|
|
40
|
-
if git show ":$FILE_PATH" > "$STAGED_COPY" 2>/dev/null; then
|
|
41
|
-
if ! "$SCRIPT_DIR/secret-scanner.sh" --stdin "$FILE_PATH" < "$STAGED_COPY"; then
|
|
42
|
-
STATUS=1
|
|
43
|
-
fi
|
|
44
|
-
fi
|
|
45
|
-
|
|
46
|
-
if ! KORTEXT_FILE_PATH="$FILE_PATH" "$SCRIPT_DIR/lint-guard.sh"; then
|
|
47
|
-
STATUS=1
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
if ! KORTEXT_FILE_PATH="$FILE_PATH" "$SCRIPT_DIR/size-guard.sh"; then
|
|
51
|
-
STATUS=1
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
# Kritik dosyalar için anlık yedek al (snapshot-guard).
|
|
55
|
-
# Bu dosyalar ajanlar arası bilgi devrinin omurgası; commit öncesi son
|
|
56
|
-
# iyi-bilinen halini workspace/backups/ altına kopyalarız.
|
|
57
|
-
case "$FILE_PATH" in
|
|
58
|
-
workspace/memory/handover.md|\
|
|
59
|
-
workspace/memory/decisions.md|\
|
|
60
|
-
workspace/memory/learned.md|\
|
|
61
|
-
workspace/memory/context/*|\
|
|
62
|
-
workspace/references/*)
|
|
63
|
-
KORTEXT_FILE_PATH="$FILE_PATH" "$SCRIPT_DIR/snapshot-guard.sh" || true
|
|
64
|
-
;;
|
|
65
|
-
esac
|
|
66
|
-
done < <(kortext_staged_files)
|
|
67
|
-
|
|
68
|
-
if ! "$SCRIPT_DIR/backlog-sync-guard.sh"; then
|
|
69
|
-
STATUS=1
|
|
70
|
-
fi
|
|
71
|
-
|
|
72
|
-
if ! "$SCRIPT_DIR/handover-guard.sh"; then
|
|
73
|
-
STATUS=1
|
|
74
|
-
fi
|
|
75
|
-
|
|
76
|
-
exit "$STATUS"
|
package/hooks/git-pre-push.sh
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Git pre-push adapter.
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
SCRIPT_PATH="${BASH_SOURCE[0]}"
|
|
8
|
-
while [ -L "$SCRIPT_PATH" ]; do
|
|
9
|
-
LINK_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
10
|
-
LINK_TARGET="$(readlink "$SCRIPT_PATH")"
|
|
11
|
-
case "$LINK_TARGET" in
|
|
12
|
-
/*) SCRIPT_PATH="$LINK_TARGET" ;;
|
|
13
|
-
*) SCRIPT_PATH="$LINK_DIR/$LINK_TARGET" ;;
|
|
14
|
-
esac
|
|
15
|
-
done
|
|
16
|
-
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
17
|
-
"$SCRIPT_DIR/branch-guard.sh"
|
package/hooks/handover-guard.sh
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Done item requires handover guard.
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
# shellcheck source=kortext-lib.sh
|
|
9
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
10
|
-
|
|
11
|
-
BACKLOG_DIR="$KORTEXT_WORKSPACE_DIR/memory/backlog"
|
|
12
|
-
HANDOVER_FILE="$KORTEXT_WORKSPACE_DIR/memory/handover.md"
|
|
13
|
-
|
|
14
|
-
[ -d "$BACKLOG_DIR" ] || exit 0
|
|
15
|
-
[ -f "$HANDOVER_FILE" ] || exit 0
|
|
16
|
-
|
|
17
|
-
STATUS=0
|
|
18
|
-
while IFS= read -r -d '' file_path; do
|
|
19
|
-
[ -f "$file_path" ] || continue
|
|
20
|
-
if grep -q '^> \*\*Status:\*\* Done' "$file_path"; then
|
|
21
|
-
item_id="$(basename "$file_path" | cut -d- -f1)"
|
|
22
|
-
if ! grep -q "^## Handover: $item_id" "$HANDOVER_FILE"; then
|
|
23
|
-
echo "---"
|
|
24
|
-
echo "❌ KORTEXT HANDOVER EKSİK"
|
|
25
|
-
echo "Done durumundaki item için handover kaydı bulunamadı: $item_id"
|
|
26
|
-
echo "Önce scripts/kortext-handover.py ile devir kaydı oluştur."
|
|
27
|
-
echo "---"
|
|
28
|
-
STATUS=1
|
|
29
|
-
fi
|
|
30
|
-
fi
|
|
31
|
-
done < <(find "$BACKLOG_DIR" -maxdepth 1 -type f \( -name 'T[0-9]*-*.md' -o -name 'B[0-9]*-*.md' -o -name 'D[0-9]*-*.md' \) -print0)
|
|
32
|
-
|
|
33
|
-
exit "$STATUS"
|
package/hooks/kortext-init.sh
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# [KORTEXT] Oturum Başlatma ve Güvenlik Hook'u
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
# shellcheck source=kortext-lib.sh
|
|
7
|
-
source "$SCRIPT_DIR/kortext-lib.sh"
|
|
8
|
-
|
|
9
|
-
install_hook() {
|
|
10
|
-
local hook_name="$1"
|
|
11
|
-
local target_name="$2"
|
|
12
|
-
local hook_path=".git/hooks/$hook_name"
|
|
13
|
-
# Absolute path kullan; .git/hooks içinden çözünmesi gerekiyor.
|
|
14
|
-
local target_path
|
|
15
|
-
target_path="$(cd "$KORTEXT_DIR/hooks" && pwd)/$target_name"
|
|
16
|
-
|
|
17
|
-
if [ -e "$hook_path" ] && [ ! -L "$hook_path" ]; then
|
|
18
|
-
# KORTEXT MANAGED HOOK marker'ı hook dosyasının ilk 10 satırında ara.
|
|
19
|
-
# Marker bulunamazsa kortext yönetimindeki hook olmadığı için ezme.
|
|
20
|
-
if ! head -n 10 "$hook_path" 2>/dev/null | grep -q "KORTEXT MANAGED HOOK"; then
|
|
21
|
-
echo "Kortext Git Hook atlandı: $hook_path zaten mevcut (marker yok)."
|
|
22
|
-
return 0
|
|
23
|
-
fi
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
ln -sf "$target_path" "$hook_path"
|
|
27
|
-
chmod +x "$KORTEXT_DIR/hooks/$target_name"
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
install_git_hooks() {
|
|
31
|
-
if [ ! -d ".git" ]; then
|
|
32
|
-
return 0
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
mkdir -p .git/hooks
|
|
36
|
-
install_hook "pre-commit" "git-pre-commit.sh"
|
|
37
|
-
install_hook "commit-msg" "commit-msg-guard.sh"
|
|
38
|
-
install_hook "pre-push" "git-pre-push.sh"
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
# Runtime tespiti: KORTEXT_RUNTIME env var öncelik;
|
|
42
|
-
# yoksa proje köküne göre otomatik karar (claude_code | gemini_cli | codex).
|
|
43
|
-
detect_runtime() {
|
|
44
|
-
if [ -n "${KORTEXT_RUNTIME:-}" ]; then
|
|
45
|
-
echo "$KORTEXT_RUNTIME"
|
|
46
|
-
return 0
|
|
47
|
-
fi
|
|
48
|
-
if [ -d ".claude" ] || [ -n "${CLAUDE_PROJECT_ROOT:-}" ]; then
|
|
49
|
-
echo "claude_code"
|
|
50
|
-
return 0
|
|
51
|
-
fi
|
|
52
|
-
if [ -d ".gemini" ] || [ -n "${GEMINI_PROJECT_ROOT:-}" ]; then
|
|
53
|
-
echo "gemini_cli"
|
|
54
|
-
return 0
|
|
55
|
-
fi
|
|
56
|
-
echo "codex"
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
# Runtime adapter kurulumu: tespit edilen runtime'a göre uygun template'i
|
|
60
|
-
# proje köküne kopyalar ve `${KORTEXT_ROOT}` placeholder'ını gerçek path
|
|
61
|
-
# ile değiştirir. settings/runtime-adapters.md tek-kaynak dokümandır.
|
|
62
|
-
install_runtime_adapter() {
|
|
63
|
-
local runtime
|
|
64
|
-
runtime="${1:-$(detect_runtime)}"
|
|
65
|
-
local kortext_root
|
|
66
|
-
kortext_root="$(cd "$KORTEXT_DIR" && pwd)"
|
|
67
|
-
|
|
68
|
-
case "$runtime" in
|
|
69
|
-
claude_code)
|
|
70
|
-
local template="$KORTEXT_DIR/settings/.claude-settings.template.json"
|
|
71
|
-
local target=".claude/settings.json"
|
|
72
|
-
if [ ! -f "$template" ]; then
|
|
73
|
-
echo "⚠️ Claude Code template bulunamadı: $template"
|
|
74
|
-
return 1
|
|
75
|
-
fi
|
|
76
|
-
mkdir -p .claude
|
|
77
|
-
if [ -e "$target" ] && ! grep -q "KORTEXT_ROOT" "$target" 2>/dev/null; then
|
|
78
|
-
echo "ℹ️ Claude settings zaten mevcut (kortext yönetiminde değil), atlandı: $target"
|
|
79
|
-
return 0
|
|
80
|
-
fi
|
|
81
|
-
sed "s|\${KORTEXT_ROOT}|$kortext_root|g" "$template" > "$target"
|
|
82
|
-
echo "✅ Claude Code adapter kuruldu: $target"
|
|
83
|
-
;;
|
|
84
|
-
gemini_cli)
|
|
85
|
-
echo "ℹ️ Gemini CLI adapter henüz template'lenmedi (settings/runtime-adapters.md Bölüm 4)."
|
|
86
|
-
echo " AGENTS.md tabanlı baseline kullanılacak."
|
|
87
|
-
;;
|
|
88
|
-
codex|generic|*)
|
|
89
|
-
echo "ℹ️ Codex / Generic runtime: AGENTS.md zaten baseline olarak çalışır."
|
|
90
|
-
;;
|
|
91
|
-
esac
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if [ "${1:-}" = "--install-hooks" ]; then
|
|
95
|
-
install_git_hooks
|
|
96
|
-
exit 0
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
|
-
if [ "${1:-}" = "--install-runtime" ]; then
|
|
100
|
-
install_runtime_adapter "${2:-}"
|
|
101
|
-
exit 0
|
|
102
|
-
fi
|
|
103
|
-
|
|
104
|
-
# Versiyon oku
|
|
105
|
-
KORTEXT_VERSION=$(cat "$KORTEXT_DIR/settings/VERSION" 2>/dev/null | head -n 1 | tr -d '\n' || echo "?.?.?")
|
|
106
|
-
|
|
107
|
-
# 1. Framework'ü Kilitle (Zorunlu Adım)
|
|
108
|
-
if [ -f "$KORTEXT_DIR/scripts/lock_kortext.sh" ]; then
|
|
109
|
-
chmod +x "$KORTEXT_DIR/scripts/lock_kortext.sh"
|
|
110
|
-
bash "$KORTEXT_DIR/scripts/lock_kortext.sh" > /dev/null 2>&1
|
|
111
|
-
fi
|
|
112
|
-
|
|
113
|
-
# 1.5 Git Hook Entegrasyonunu Kur
|
|
114
|
-
install_git_hooks
|
|
115
|
-
|
|
116
|
-
# 1.6 Runtime Adapter Kurulumu (Claude Code / Gemini CLI / Codex)
|
|
117
|
-
install_runtime_adapter
|
|
118
|
-
|
|
119
|
-
# 1.7 SESSION_BRIEF — Oturum Başlangıç Özeti
|
|
120
|
-
# Aktif context, son handover ve stale itemları özetler.
|
|
121
|
-
SESSION_START_PY="$KORTEXT_DIR/scripts/kortext-session-start.py"
|
|
122
|
-
if command -v python3 &>/dev/null && [ -f "$SESSION_START_PY" ]; then
|
|
123
|
-
python3 "$SESSION_START_PY" 2>/dev/null || true
|
|
124
|
-
fi
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
# 2. Durum Tespiti Hazırlığı
|
|
128
|
-
BLUEPRINT="$KORTEXT_WORKSPACE_DIR/references/blueprint.md"
|
|
129
|
-
STACK="$KORTEXT_WORKSPACE_DIR/references/tech-stack.md"
|
|
130
|
-
BACKLOG_DIR="$KORTEXT_WORKSPACE_DIR/memory/backlog/"
|
|
131
|
-
|
|
132
|
-
# Proje adını çekmeye çalış
|
|
133
|
-
PROJE_ADI="Henüz tanımlanmamış"
|
|
134
|
-
if [ -f "$BLUEPRINT" ]; then
|
|
135
|
-
PROJE_ADI=$(grep -m 1 "^#" "$BLUEPRINT" 2>/dev/null | sed 's/# //' || echo "Henüz tanımlanmamış")
|
|
136
|
-
fi
|
|
137
|
-
|
|
138
|
-
# Mantık: Dosyaların içeriğine göre durum belirleme
|
|
139
|
-
DURUM="Yeni Proje"
|
|
140
|
-
SIRADAKI="!start analysis"
|
|
141
|
-
|
|
142
|
-
# Blueprint dolu ve onaylanmış mı?
|
|
143
|
-
if [ -s "$BLUEPRINT" ] && grep -q "status:.*approved" "$BLUEPRINT" 2>/dev/null; then
|
|
144
|
-
DURUM="Blueprint Hazır"
|
|
145
|
-
SIRADAKI="!start analysis"
|
|
146
|
-
fi
|
|
147
|
-
|
|
148
|
-
# Tech Stack dolu ve onaylanmış mı?
|
|
149
|
-
if [ -s "$STACK" ] && grep -q "status:.*approved" "$STACK" 2>/dev/null; then
|
|
150
|
-
DURUM="Analiz Tamamlandı"
|
|
151
|
-
SIRADAKI="!start planning"
|
|
152
|
-
fi
|
|
153
|
-
|
|
154
|
-
# Mevcut codebase var mı? (Kortext sonradan eklenmiş bir projeye mi?)
|
|
155
|
-
HAS_CODEBASE=false
|
|
156
|
-
if [ -f "package.json" ] || [ -f "requirements.txt" ] || [ -f "pubspec.yaml" ] || \
|
|
157
|
-
[ -f "go.mod" ] || [ -f "Cargo.toml" ] || [ -d "src" ] || [ -d "app" ] || [ -d "lib" ]; then
|
|
158
|
-
HAS_CODEBASE=true
|
|
159
|
-
fi
|
|
160
|
-
|
|
161
|
-
# Mevcut codebase varken blueprint yoksa → !onboard öner
|
|
162
|
-
if [ "$HAS_CODEBASE" = true ] && [ "$DURUM" = "Yeni Proje" ]; then
|
|
163
|
-
DURUM="Mevcut Proje Tespit Edildi"
|
|
164
|
-
SIRADAKI="!start onboard"
|
|
165
|
-
fi
|
|
166
|
-
|
|
167
|
-
# Backlog klasöründe herhangi bir Markdown dosyası var mı?
|
|
168
|
-
if [ -d "$BACKLOG_DIR" ] && find "$BACKLOG_DIR" -name "*.md" 2>/dev/null | grep -q "."; then
|
|
169
|
-
DURUM="Geliştirme Hazır"
|
|
170
|
-
SIRADAKI="!start development"
|
|
171
|
-
fi
|
|
172
|
-
|
|
173
|
-
# 3. Raporu Yazdır
|
|
174
|
-
echo "---"
|
|
175
|
-
echo "🏁 KORTEXT YÜKLENDİ (v$KORTEXT_VERSION)"
|
|
176
|
-
echo "+prime, Kortext protokolleri ve koruma kalkanları aktifleşti."
|
|
177
|
-
echo ""
|
|
178
|
-
echo "📋 Proje: $PROJE_ADI"
|
|
179
|
-
echo "📍 Durum: $DURUM"
|
|
180
|
-
echo "⏭️ Sıradaki Adım: $SIRADAKI"
|
|
181
|
-
echo ""
|
|
182
|
-
|
|
183
|
-
# Duruma göre kısa ipucu
|
|
184
|
-
case $DURUM in
|
|
185
|
-
"Yeni Proje") echo "💡 Not: blueprint.md üzerinden proje vizyonunu belirleyebilirsin." ;;
|
|
186
|
-
"Mevcut Proje Tespit Edildi") echo "💡 Not: Mevcut codebase bulundu. Kortext'i mevcut projeye entegre etmek için !onboard komutunu kullan." ;;
|
|
187
|
-
"Blueprint Hazır") echo "💡 Not: Analiz fazına geçmek için hazırım (blueprint dolu)." ;;
|
|
188
|
-
"Analiz Tamamlandı") echo "💡 Not: Teknik mimari hazır, planlama başlatılabilir." ;;
|
|
189
|
-
"Geliştirme Hazır") echo "💡 Not: Backlog dolu, hangi görevle başlıyoruz?" ;;
|
|
190
|
-
esac
|
|
191
|
-
|
|
192
|
-
echo ""
|
|
193
|
-
echo "Süreci yönetmek üzere komutunu bekliyorum."
|
|
194
|
-
echo "---"
|
package/hooks/kortext-lib.sh
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# KORTEXT MANAGED HOOK — generated/edited by kortext framework
|
|
3
|
-
# Shared path and config helpers for Kortext hooks.
|
|
4
|
-
|
|
5
|
-
kortext_find_root() {
|
|
6
|
-
local dir="${1:-$PWD}"
|
|
7
|
-
|
|
8
|
-
while [ "$dir" != "/" ]; do
|
|
9
|
-
if [ -d "$dir/kortext/hooks" ] || [ -d "$dir/.kortext/hooks" ]; then
|
|
10
|
-
printf '%s\n' "$dir"
|
|
11
|
-
return 0
|
|
12
|
-
fi
|
|
13
|
-
dir="$(dirname "$dir")"
|
|
14
|
-
done
|
|
15
|
-
|
|
16
|
-
return 1
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
KORTEXT_ROOT="${KORTEXT_ROOT:-$(kortext_find_root "$PWD" 2>/dev/null || pwd)}"
|
|
20
|
-
|
|
21
|
-
if [ -d "$KORTEXT_ROOT/kortext" ]; then
|
|
22
|
-
KORTEXT_REL="${KORTEXT_REL:-kortext}"
|
|
23
|
-
elif [ -d "$KORTEXT_ROOT/.kortext" ]; then
|
|
24
|
-
KORTEXT_REL="${KORTEXT_REL:-.kortext}"
|
|
25
|
-
else
|
|
26
|
-
KORTEXT_REL="${KORTEXT_REL:-kortext}"
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
KORTEXT_DIR="${KORTEXT_DIR:-$KORTEXT_ROOT/$KORTEXT_REL}"
|
|
30
|
-
KORTEXT_WORKSPACE_DIR="${KORTEXT_WORKSPACE_DIR:-$KORTEXT_DIR/workspace}"
|
|
31
|
-
|
|
32
|
-
kortext_abs_path() {
|
|
33
|
-
local path="$1"
|
|
34
|
-
case "$path" in
|
|
35
|
-
/*) printf '%s\n' "$path" ;;
|
|
36
|
-
*) printf '%s\n' "$KORTEXT_ROOT/$path" ;;
|
|
37
|
-
esac
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
kortext_load_config() {
|
|
41
|
-
local config_file line key value
|
|
42
|
-
local candidates=(
|
|
43
|
-
"$KORTEXT_DIR/settings/config"
|
|
44
|
-
"$KORTEXT_DIR/settings/config.md"
|
|
45
|
-
"$KORTEXT_DIR/config"
|
|
46
|
-
"$KORTEXT_ROOT/.kortext/config"
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
for config_file in "${candidates[@]}"; do
|
|
50
|
-
[ -f "$config_file" ] || continue
|
|
51
|
-
while IFS= read -r line; do
|
|
52
|
-
line="${line%%#*}"
|
|
53
|
-
[[ "$line" =~ ^[[:space:]]*([A-Z_][A-Z0-9_]*)[[:space:]]*=[[:space:]]*(.*)[[:space:]]*$ ]] || continue
|
|
54
|
-
key="${BASH_REMATCH[1]}"
|
|
55
|
-
value="${BASH_REMATCH[2]}"
|
|
56
|
-
value="${value%\"}"
|
|
57
|
-
value="${value#\"}"
|
|
58
|
-
value="${value%\'}"
|
|
59
|
-
value="${value#\'}"
|
|
60
|
-
if [ -z "${!key+x}" ]; then
|
|
61
|
-
export "$key=$value"
|
|
62
|
-
fi
|
|
63
|
-
done < "$config_file"
|
|
64
|
-
return 0
|
|
65
|
-
done
|
|
66
|
-
|
|
67
|
-
return 0
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
kortext_is_workspace_path() {
|
|
71
|
-
local abs
|
|
72
|
-
abs="$(kortext_abs_path "$1")"
|
|
73
|
-
|
|
74
|
-
case "$abs" in
|
|
75
|
-
"$KORTEXT_WORKSPACE_DIR"/*|"$KORTEXT_ROOT/.kortext/workspace"/*)
|
|
76
|
-
return 0
|
|
77
|
-
;;
|
|
78
|
-
*)
|
|
79
|
-
return 1
|
|
80
|
-
;;
|
|
81
|
-
esac
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
kortext_is_env_path() {
|
|
85
|
-
local base
|
|
86
|
-
base="$(basename "$1")"
|
|
87
|
-
case "$base" in
|
|
88
|
-
.env|.env.*)
|
|
89
|
-
return 0
|
|
90
|
-
;;
|
|
91
|
-
*)
|
|
92
|
-
return 1
|
|
93
|
-
;;
|
|
94
|
-
esac
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
kortext_json_field() {
|
|
98
|
-
# JSON içinden bir alan çek. jq yoksa python3 fallback'ine düşer.
|
|
99
|
-
# query formatı: '.tool_input.file_path' gibi nokta yollu erişim.
|
|
100
|
-
local input="$1"
|
|
101
|
-
local query="$2"
|
|
102
|
-
|
|
103
|
-
if command -v jq >/dev/null 2>&1; then
|
|
104
|
-
printf '%s' "$input" | jq -r "$query // empty" 2>/dev/null || true
|
|
105
|
-
return 0
|
|
106
|
-
fi
|
|
107
|
-
|
|
108
|
-
if command -v python3 >/dev/null 2>&1; then
|
|
109
|
-
# Python fallback — '.a.b.c' yolunu dict erişimine çevirir.
|
|
110
|
-
printf '%s' "$input" | KORTEXT_JSON_QUERY="$query" python3 -c '
|
|
111
|
-
import json, os, sys
|
|
112
|
-
try:
|
|
113
|
-
data = json.load(sys.stdin)
|
|
114
|
-
query = os.environ.get("KORTEXT_JSON_QUERY", "").lstrip(".")
|
|
115
|
-
if not query:
|
|
116
|
-
print("")
|
|
117
|
-
sys.exit(0)
|
|
118
|
-
parts = query.split(".")
|
|
119
|
-
for p in parts:
|
|
120
|
-
if isinstance(data, dict):
|
|
121
|
-
data = data.get(p, "")
|
|
122
|
-
else:
|
|
123
|
-
data = ""
|
|
124
|
-
break
|
|
125
|
-
if data is None:
|
|
126
|
-
data = ""
|
|
127
|
-
print(data)
|
|
128
|
-
except Exception:
|
|
129
|
-
pass
|
|
130
|
-
' 2>/dev/null || true
|
|
131
|
-
return 0
|
|
132
|
-
fi
|
|
133
|
-
|
|
134
|
-
# Hiçbir araç yoksa boş döndür.
|
|
135
|
-
echo ""
|
|
136
|
-
return 1
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
kortext_staged_files() {
|
|
140
|
-
git diff --cached --name-only --diff-filter=ACMR -z
|
|
141
|
-
}
|