Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
af4ac6c
feat(automation): add self-improving loop controls
Jun 25, 2026
4f7e45d
fix: parse cli on enlarged stack
Jun 25, 2026
0a9141c
fix: make windows ci fixtures portable
Jun 25, 2026
3a07a8e
test: stabilize selected project handle fixture
Jun 25, 2026
93ca88e
test: tidy fake codex launcher fixture
Jun 25, 2026
f41cd64
test: simplify fake codex server fixture
Jun 25, 2026
679af02
refactor: extract automation cli handlers
Jun 25, 2026
8a7f31a
refactor: isolate dashboard automation runs
Jun 25, 2026
4d471db
test: split automation backend coverage
Jun 25, 2026
7e787fb
Merge remote-tracking branch 'origin/master' into self-improving-loop…
Jun 25, 2026
00fa16c
fix: stabilize Windows automation CI
Jun 25, 2026
e1c4917
test: avoid Windows pid race in fake codex server
Jun 25, 2026
8256873
ci: prefer self-hosted Windows archive runner
Jun 25, 2026
1060c6b
Merge remote-tracking branch 'origin/master' into self-improving-loop…
Jun 25, 2026
0fe914a
ci: avoid caching Windows target tree
Jun 25, 2026
e0d3040
refactor: extract status command handler
Jun 25, 2026
bf75c2a
test: split dashboard automation coverage
Jun 25, 2026
0a3a963
refactor: extract install command handler
Jun 25, 2026
72db223
Merge remote-tracking branch 'origin/master' into self-improving-loop…
Jun 25, 2026
26c5145
test: relax Windows fake codex timeout
Jun 25, 2026
3a4b9d4
refactor: split cli command modules
Jun 25, 2026
34b6414
test: stabilize Windows fake codex backend timeouts
Jun 25, 2026
7b933a9
refactor: extract cost command handler
Jun 25, 2026
abb98d7
refactor: split startup guard tests
Jun 25, 2026
ff08ad2
refactor: tighten dashboard automation requests
Jun 25, 2026
0b66af3
test: split dashboard memory curation API coverage
Jun 25, 2026
37cacc1
refactor: extract status command handler
Jun 25, 2026
2350783
refactor: extract agent command handlers
Jun 25, 2026
2893048
refactor: extract hook and session command handlers
Jun 25, 2026
69d4038
refactor: isolate skill writer evidence assembly
Jun 25, 2026
3c229f9
Merge remote-tracking branch 'origin/master' into self-improving-loop…
Jun 25, 2026
d5829be
test: stabilize Windows non-interactive CLI timeouts
Jun 25, 2026
abfbb95
ci: fix direct windows test setup
Jun 25, 2026
e1c013d
ci: set up python for cross-platform tests
Jun 25, 2026
23def96
ci: restore workflow and set up python
Jun 25, 2026
02586b3
test: prefer setup-python on Windows fake codex launchers
Jun 25, 2026
70eae3e
test: stabilize Windows fake codex launcher
Jun 25, 2026
5690755
ci: remove Windows nextest thread limits
Jun 25, 2026
b1e933a
test: deduplicate fake codex fixtures
Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,8 @@ flaky-result = "fail"
slow-timeout = { period = "10s", terminate-after = 36 }
final-status-level = "slow"

[test-groups]
windows-global-state = { max-threads = 1 }

[[profile.ci.overrides]]
filter = 'binary_id(tracedecay::mcp_handler_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-global-state'
retries = 2
flaky-result = 'pass'

[[profile.ci.overrides]]
filter = 'binary_id(tracedecay::cli_non_interactive_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-global-state'

[[profile.ci.overrides]]
filter = 'test(/^doctor::tests::/)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-global-state'
5 changes: 5 additions & 0 deletions .githooks/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -euo pipefail

repo_root="$(git rev-parse --show-toplevel)"
"$repo_root/scripts/check-conventional-commits.sh" --message-file "$1"
8 changes: 8 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ jobs:
with:
node-version: 22

- uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install ast-grep
run: |
npm install --global "@ast-grep/cli@${AST_GREP_VERSION}"
Expand Down Expand Up @@ -119,6 +123,10 @@ jobs:
with:
node-version: 22

- uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install ast-grep
shell: pwsh
run: |
Expand Down
9 changes: 9 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,21 @@ refactor: simplify reference resolver lookup

Keep the first line under 72 characters. Add a body explaining *why* if the change isn't obvious.

Install the local `commit-msg` hook once per checkout:

```bash
scripts/install-git-hooks.sh
```

CI validates commit subjects with:

```bash
scripts/check-conventional-commits.sh origin/master..HEAD
```

Run the same command locally before pushing to lint every non-merge commit in a
branch range. Merge commits are skipped to match CI behavior.

## Pull Requests

- Target `master` for bug fixes and stable features.
Expand Down
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,22 @@ Each agent gets the integration that matches its host:

All changes are idempotent -- safe to run again after upgrading. After agent setup, you'll be offered a global git post-commit hook.

Managed skills generated by the self-improvement loop are exported through the
host surface that each provider can load safely:

| Host | Managed-skill surface |
|---|---|
| Cursor | Native skill overlay under the Cursor plugin's managed skill directory. |
| Codex | Native skill overlay inside the Codex plugin bundle/cache; Codex sessions load approved skills after the plugin is installed or refreshed. |
| Claude Code, Kimi, OpenCode, Copilot/Vibe, generic Agents targets | Prompt-index block that points the host at `tracedecay_skill_list` and `tracedecay_skill_view` instead of copying full skill bodies into global prompts. |
| Kiro | Dedicated steering index at `~/.kiro/steering/tracedecay-managed-skills.md`, referenced by the tracedecay-managed Kiro agent. |
| Hermes | Read-only bridge only. Hermes owns its native skill store; TraceDecay does not export or mutate Hermes skills. |

The curation backend is provider-agnostic. Hermes remains a compatibility bridge
and reference source, while TraceDecay's automation config can delegate
intelligence to hosts such as the Codex app server without requiring Hermes to
run.

For project-scoped setup, run from the repository root:

```bash
Expand Down
4 changes: 4 additions & 0 deletions cursor-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ per-call review, add the snippet below to `~/.cursor/permissions.json`
"mcpAllowlist": [
"tracedecay:tracedecay_active_project",
"tracedecay:tracedecay_affected",
"tracedecay:tracedecay_automation_run_artifact_view",
"tracedecay:tracedecay_body",
"tracedecay:tracedecay_branch_diff",
"tracedecay:tracedecay_branch_list",
Expand Down Expand Up @@ -89,6 +90,7 @@ per-call review, add the snippet below to `~/.cursor/permissions.json`
"tracedecay:tracedecay_gini",
"tracedecay:tracedecay_god_class",
"tracedecay:tracedecay_health",
"tracedecay:tracedecay_hermes_skill_bridge",
"tracedecay:tracedecay_hotspots",
"tracedecay:tracedecay_impact",
"tracedecay:tracedecay_implementations",
Expand Down Expand Up @@ -123,6 +125,8 @@ per-call review, add the snippet below to `~/.cursor/permissions.json`
"tracedecay:tracedecay_signature_search",
"tracedecay:tracedecay_similar",
"tracedecay:tracedecay_simplify_scan",
"tracedecay:tracedecay_skill_list",
"tracedecay:tracedecay_skill_view",
"tracedecay:tracedecay_status",
"tracedecay:tracedecay_storage_status",
"tracedecay:tracedecay_test_map",
Expand Down
1 change: 1 addition & 0 deletions dashboard/build.shared.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ export async function buildPlugin(
export async function buildHolographicPlugin() {
await buildPlugin("holographic", "holographic-memory", {
tailwind: true,
primitives: true,
});
}

Expand Down
27 changes: 17 additions & 10 deletions dashboard/graph/src/OverviewPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,23 @@ import {
} from "./types";
import type { GraphNode, GraphOverview } from "./types";

// Language → design token (with the historical dark hex as fallback), mirroring
// KIND_FAMILY_COLORS in ./types so the bar swatches re-theme with the shell's
// light palette instead of pinning dark-only hex. Each language rides a
// matching --ts-* accent token (javascript shares --ts-amber by hue family).
const LANGUAGE_COLORS: Record<string, string> = {
rust: "#f7c76a",
typescript: "#7aa7ff",
javascript: "#ffd97a",
python: "#67e8a9",
markdown: "#a8c8c0",
json: "#6f9189",
toml: "#6f9189",
shell: "#75f4d2",
web: "#ff7ab6",
rust: "var(--ts-amber, #f7c76a)",
typescript: "var(--ts-blue, #7aa7ff)",
// Reuse the warm amber token (same hue family as the historical JS yellow)
// with the original dark hex as fallback, so the swatch re-themes in light
// mode instead of pinning a dark-only literal. See ./types KIND_FAMILY_COLORS.
javascript: "var(--ts-amber, #ffd97a)",
python: "var(--ts-green, #67e8a9)",
markdown: "var(--ts-text-2, #a8c8c0)",
json: "var(--ts-text-3, #6f9189)",
toml: "var(--ts-text-3, #6f9189)",
shell: "var(--ts-cyan, #75f4d2)",
web: "var(--ts-pink, #ff7ab6)",
};

export default function OverviewPanel({
Expand Down Expand Up @@ -84,7 +91,7 @@ export default function OverviewPanel({
keyName="label"
rows={overview.files_by_language.slice(0, 9).map((row) => ({
label: row.language,
color: LANGUAGE_COLORS[row.language] || "#6f9189",
color: LANGUAGE_COLORS[row.language] || "var(--ts-text-3, #6f9189)",
value: fmt(row.count),
}))}
onPick={(row) => onFilterLanguage(String(row.label))}
Expand Down
4 changes: 4 additions & 0 deletions dashboard/hermes-wrapper/src/wrapper.css
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@
--color-muted: rgba(117, 244, 210, 0.1);
--color-muted-foreground: var(--ts-text-3);
--color-secondary: rgba(122, 167, 255, 0.1);
/* Gotcha: --color-secondary is a 10%-opacity blue TINT, not a readable text
color, so the Tailwind `text-secondary` utility is near-invisible as
foreground. Use `text-text-secondary` (maps to --ts-text-2) for copy;
reserve `bg-secondary`/`border-secondary` for surfaces. */
--color-destructive: var(--ts-red);
--color-warning: var(--ts-amber);
--color-success: var(--ts-green);
Expand Down
Loading
Loading