token-saver-meta 0.1.0__tar.gz
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.
- token_saver_meta-0.1.0/.claude-plugin/plugin.json +17 -0
- token_saver_meta-0.1.0/.gitattributes +9 -0
- token_saver_meta-0.1.0/.github/workflows/publish-npm.yml +23 -0
- token_saver_meta-0.1.0/.github/workflows/publish-pypi.yml +33 -0
- token_saver_meta-0.1.0/.gitignore +25 -0
- token_saver_meta-0.1.0/.kilo/agent/repo-syncer.md +34 -0
- token_saver_meta-0.1.0/.kilo/command/repo-sync.md +31 -0
- token_saver_meta-0.1.0/.kilo/skills/token-saver/caveman/SKILL.md +78 -0
- token_saver_meta-0.1.0/.kilo/skills/token-saver/kevin-copilot/SKILL.md +341 -0
- token_saver_meta-0.1.0/.kilo/skills/token-saver/kevin-copilot/copilot-instructions.md +88 -0
- token_saver_meta-0.1.0/.kilo/skills/token-saver/lg-token-saver/SKILL.md +154 -0
- token_saver_meta-0.1.0/.npmignore +46 -0
- token_saver_meta-0.1.0/.omo/boulder.json +247 -0
- token_saver_meta-0.1.0/.omo/drafts/mcp-system-wide-auto-start.md +130 -0
- token_saver_meta-0.1.0/.omo/drafts/standalone-repo-setup.md +110 -0
- token_saver_meta-0.1.0/.omo/drafts/unified-naming.md +32 -0
- token_saver_meta-0.1.0/.omo/evidence/task-00-caveman-paths.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-00-codesight-help.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-00-contextslim.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-00-kevin-paths.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-00-repomix-help.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-00-rtk-releases.json +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-1-list-platforms.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-1-matrix-valid.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-1-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-10-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-11-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-2-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-2-verify.py +37 -0
- token_saver_meta-0.1.0/.omo/evidence/task-3-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-4-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-5-6-7-verify.py +56 -0
- token_saver_meta-0.1.0/.omo/evidence/task-5-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-6-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-7-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/evidence/task-9-standalone-repo-setup.txt +0 -0
- token_saver_meta-0.1.0/.omo/plans/mcp-system-wide-auto-start.md +612 -0
- token_saver_meta-0.1.0/.omo/plans/phase07-core-bundle-implementation.md +1747 -0
- token_saver_meta-0.1.0/.omo/plans/standalone-repo-setup.md +344 -0
- token_saver_meta-0.1.0/.omo/plans/unified-naming.md +60 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_120184a41ffeoyBwAl1Cy3KOL5.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_1201bfcf0ffep6t7mA8ReK2wBn.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_12145d401ffexN8iAUl3lngC01.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_12158aa19ffeCDAdbWHTHxsaBx.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_121ac6867ffe60IrAL8dWBSW0L.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_121aedc07ffe3de3FuSpDQW7K5.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_121df67b8ffeUvrKtcg3Ke7BZF.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_1230a9ae3ffeMbtq5ugY3PJ6WU.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_124ca22b3ffesZNq3scnsZywM6.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_13b3e7b26ffejYySYmPAojixKJ.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_13e1ba9ffffeojgujkGQnD6nec.json +10 -0
- token_saver_meta-0.1.0/.omo/run-continuation/ses_13e286e52ffe7w6uvLiQInLFNz.json +10 -0
- token_saver_meta-0.1.0/AGENTS.md +221 -0
- token_saver_meta-0.1.0/BESTS.md +100 -0
- token_saver_meta-0.1.0/CLAUDE.md +57 -0
- token_saver_meta-0.1.0/LICENSE +201 -0
- token_saver_meta-0.1.0/MEMORY.md +74 -0
- token_saver_meta-0.1.0/PKG-INFO +64 -0
- token_saver_meta-0.1.0/README.md +34 -0
- token_saver_meta-0.1.0/cli.js +26 -0
- token_saver_meta-0.1.0/contextslim-py/.gitignore +6 -0
- token_saver_meta-0.1.0/contextslim-py/README.md +3 -0
- token_saver_meta-0.1.0/contextslim-py/pyproject.toml +45 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/__init__.py +7 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/__main__.py +11 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/analyzer/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/analyzer/project_context.py +125 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/analyzer/stack_detector.py +206 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/cli.py +424 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/brief.py +49 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/cat.py +85 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/config_cmd.py +203 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/deps.py +174 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/head.py +58 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/imports_cmd.py +61 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/ls_cmd.py +58 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/map_cmd.py +80 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/outline.py +76 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/summary_cmd.py +142 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/tree_cmd.py +69 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/code/types_cmd.py +60 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/db/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/db/dbdiff.py +82 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/db/dbquery.py +73 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/db/dbsample.py +66 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/db/dbschema.py +87 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/db/dbstats.py +76 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/git/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/git/changes.py +55 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/git/diff.py +98 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/search/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/search/errors.py +102 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/search/findfiles.py +65 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/search/grep.py +117 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/search/logs.py +34 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/search/todo.py +123 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/setup/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/setup/audit.py +211 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/setup/doctor.py +233 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/setup/init_cmd.py +191 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/disk.py +94 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/docker.py +128 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/envinfo.py +84 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/netinfo.py +55 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/packages.py +125 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/ports.py +87 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/procs.py +54 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/services.py +134 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/commands/system/sysinfo.py +77 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/compressor/__init__.py +29 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/compressor/code.py +141 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/compressor/db.py +97 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/compressor/text.py +103 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/config.py +85 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/generators/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/generators/ignore.py +134 -0
- token_saver_meta-0.1.0/contextslim-py/src/contextslim/generators/rules.py +263 -0
- token_saver_meta-0.1.0/contextslim-py/tests/__init__.py +1 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/__init__.py +0 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_audit.py +164 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_brief.py +105 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_cat.py +171 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_changes.py +82 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_config.py +161 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_dbdiff.py +88 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_dbquery.py +76 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_dbsample.py +67 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_dbschema.py +73 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_dbstats.py +71 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_deps.py +237 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_diff.py +79 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_disk.py +64 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_docker.py +99 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_doctor.py +164 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_envinfo.py +102 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_errors.py +113 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_findfiles.py +87 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_grep.py +144 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_head.py +170 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_imports.py +97 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_init.py +128 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_logs.py +71 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_ls.py +90 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_map.py +210 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_netinfo.py +122 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_outline.py +115 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_packages.py +66 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_ports.py +85 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_procs.py +104 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_services.py +93 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_summary.py +102 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_sysinfo.py +87 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_todo.py +91 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_tree.py +86 -0
- token_saver_meta-0.1.0/contextslim-py/tests/commands/test_types.py +97 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_code_compressor.py +253 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_config.py +132 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_db_compressor.py +149 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_ignore.py +172 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_project_context.py +170 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_rules.py +153 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_stack_detector.py +159 -0
- token_saver_meta-0.1.0/contextslim-py/tests/test_text_compressor.py +179 -0
- token_saver_meta-0.1.0/contextslim-py/uv.lock +654 -0
- token_saver_meta-0.1.0/dashboard/index.html +37 -0
- token_saver_meta-0.1.0/distribution/README.md +41 -0
- token_saver_meta-0.1.0/distribution/agnostic/AGENTS.md +56 -0
- token_saver_meta-0.1.0/distribution/claude-code/CLAUDE.md +56 -0
- token_saver_meta-0.1.0/distribution/copilot/.github/copilot-instructions.md +56 -0
- token_saver_meta-0.1.0/distribution/cursor/.cursor/rules/token-saver.md +56 -0
- token_saver_meta-0.1.0/distribution/opencode/AGENTS.md +56 -0
- token_saver_meta-0.1.0/distribution/windsurf/.windsurfrules +57 -0
- token_saver_meta-0.1.0/docs/architecture-v2.md +598 -0
- token_saver_meta-0.1.0/docs/insight_registry.md +187 -0
- token_saver_meta-0.1.0/docs/insights_and_synergies.md +495 -0
- token_saver_meta-0.1.0/docs/publishing.md +50 -0
- token_saver_meta-0.1.0/docs/rewrite-strategy.md +434 -0
- token_saver_meta-0.1.0/docs/tool-assumptions.md +52 -0
- token_saver_meta-0.1.0/install.sh +85 -0
- token_saver_meta-0.1.0/kilo.json +7 -0
- token_saver_meta-0.1.0/opencode.jsonc +3 -0
- token_saver_meta-0.1.0/package.json +39 -0
- token_saver_meta-0.1.0/platforms/matrix.json +384 -0
- token_saver_meta-0.1.0/progress_docs/README.md +82 -0
- token_saver_meta-0.1.0/progress_docs/current.md +11 -0
- token_saver_meta-0.1.0/progress_docs/handovers/2026-06-14_phase05-06-complete_phase07-ready.md +126 -0
- token_saver_meta-0.1.0/progress_docs/handovers/phase07-core-bundle-implementation.md +346 -0
- token_saver_meta-0.1.0/progress_docs/logs/01-05-research.md +14 -0
- token_saver_meta-0.1.0/progress_docs/logs/06-scaffold.md +17 -0
- token_saver_meta-0.1.0/progress_docs/plans/07-core-bundle.md +47 -0
- token_saver_meta-0.1.0/progress_docs/plans/08-optional-modules.md +29 -0
- token_saver_meta-0.1.0/progress_docs/plans/09-distribution.md +27 -0
- token_saver_meta-0.1.0/progress_docs/plans/10-testing.md +27 -0
- token_saver_meta-0.1.0/progress_docs/plans/full.md +157 -0
- token_saver_meta-0.1.0/pyproject.toml +69 -0
- token_saver_meta-0.1.0/skills/caveman/SKILL.md +78 -0
- token_saver_meta-0.1.0/skills/combo-workflow/SKILL.md +28 -0
- token_saver_meta-0.1.0/skills/kevin-copilot/copilot-instructions.md +88 -0
- token_saver_meta-0.1.0/skills/kevin-copilot/unslop/SKILL.md +341 -0
- token_saver_meta-0.1.0/skills/lg-token-saver/SKILL.md +154 -0
- token_saver_meta-0.1.0/skills/token-saver/SKILL.md +61 -0
- token_saver_meta-0.1.0/src/__init__.py +0 -0
- token_saver_meta-0.1.0/src/agents_injector.py +103 -0
- token_saver_meta-0.1.0/src/cgc_installer.py +102 -0
- token_saver_meta-0.1.0/src/cli_installer.py +34 -0
- token_saver_meta-0.1.0/src/config_gen.py +525 -0
- token_saver_meta-0.1.0/src/dashboard.py +30 -0
- token_saver_meta-0.1.0/src/indexer.py +92 -0
- token_saver_meta-0.1.0/src/installer.py +178 -0
- token_saver_meta-0.1.0/src/mcp_installer.py +75 -0
- token_saver_meta-0.1.0/src/oneshot_installer.py +120 -0
- token_saver_meta-0.1.0/src/prerequisites.py +117 -0
- token_saver_meta-0.1.0/src/rtk_installer.py +192 -0
- token_saver_meta-0.1.0/src/skill_installer.py +82 -0
- token_saver_meta-0.1.0/src/summary.py +110 -0
- token_saver_meta-0.1.0/src/uninstall.py +151 -0
- token_saver_meta-0.1.0/templates/agents_md_section.md +56 -0
- token_saver_meta-0.1.0/tests/conftest.py +47 -0
- token_saver_meta-0.1.0/tests/test_agents_md_merge.py +105 -0
- token_saver_meta-0.1.0/tests/test_cgc_installer.py +70 -0
- token_saver_meta-0.1.0/tests/test_combo_regression.py +46 -0
- token_saver_meta-0.1.0/tests/test_e2e_pipeline.py +380 -0
- token_saver_meta-0.1.0/tests/test_installer_pipeline.py +268 -0
- token_saver_meta-0.1.0/tests/test_oneshot_installer.py +48 -0
- token_saver_meta-0.1.0/tests/test_prerequisites.py +98 -0
- token_saver_meta-0.1.0/tests/test_rtk_installer.py +83 -0
- token_saver_meta-0.1.0/tests/test_summary.py +52 -0
- token_saver_meta-0.1.0/tests/test_uninstall.py +93 -0
- token_saver_meta-0.1.0/tests/validation_prompt.md +84 -0
- token_saver_meta-0.1.0/token-saver-mem/.gitignore +6 -0
- token_saver_meta-0.1.0/token-saver-mem/README.md +3 -0
- token_saver_meta-0.1.0/token-saver-mem/pyproject.toml +40 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/__init__.py +3 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/__main__.py +5 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/cli.py +105 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/auto_summary.py +185 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/db.py +156 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/delta.py +104 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/gaps.py +88 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/indexer.py +338 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/models.py +55 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/staleness.py +80 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/code_memory/work_plan.py +161 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/server.py +86 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/bootstrap.py +369 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/caching.py +124 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/closure.py +117 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/continuity.py +380 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/extractor.py +356 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/session_memory/state.py +352 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/db.py +44 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/repository/__init__.py +17 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/repository/node_repo.py +129 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/repository/obs_repo.py +68 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/repository/session_repo.py +91 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/store/schema.sql +103 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/code/__init__.py +121 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/code/get_context.py +65 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/code/get_delta.py +23 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/code/search_symbols.py +102 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/code/store_understanding.py +50 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/session/__init__.py +109 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/session/bootstrap_context.py +40 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/session/completion_check.py +45 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/session/context_pack.py +34 -0
- token_saver_meta-0.1.0/token-saver-mem/src/token_saver_mem/tools/session/open_work.py +51 -0
- token_saver_meta-0.1.0/token-saver-mem/stress_high_pressure.py +518 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/conftest.py +199 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/test_auto_summary.py +140 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/test_delta.py +76 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/test_gaps.py +109 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/test_indexer.py +182 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/test_staleness.py +108 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/code_memory/test_work_plan.py +104 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/test_bootstrap.py +258 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/test_caching.py +131 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/test_closure.py +169 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/test_continuity.py +398 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/test_extractor.py +171 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/session_memory/test_state.py +273 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/test_cli.py +123 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/test_db.py +312 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/test_integration.py +572 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/test_repositories.py +395 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/test_server.py +236 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/tools/__init__.py +0 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/tools/conftest.py +10 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/tools/test_code_tools.py +238 -0
- token_saver_meta-0.1.0/token-saver-mem/tests/tools/test_session_tools.py +298 -0
- token_saver_meta-0.1.0/token-saver-mem/uv.lock +1022 -0
- token_saver_meta-0.1.0/token-saver-meta.md +923 -0
- token_saver_meta-0.1.0/tscg-py/.gitignore +6 -0
- token_saver_meta-0.1.0/tscg-py/README.md +3 -0
- token_saver_meta-0.1.0/tscg-py/pyproject.toml +40 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/__init__.py +3 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/__main__.py +5 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/cli.py +197 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/core/__init__.py +1 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/core/compiler.py +323 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/core/profiles.py +216 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/core/transforms.py +421 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/core/utils.py +60 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/proxy/__init__.py +1 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/proxy/compressor.py +289 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/proxy/config.py +74 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/proxy/downstream.py +241 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/proxy/router.py +132 -0
- token_saver_meta-0.1.0/tscg-py/src/tscg/proxy/server.py +79 -0
- token_saver_meta-0.1.0/tscg-py/stress_high_pressure.py +517 -0
- token_saver_meta-0.1.0/tscg-py/tests/__init__.py +1 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_cli.py +236 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_compiler.py +603 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_compressor.py +353 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_config.py +105 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_downstream.py +217 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_integration.py +1012 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_profiles.py +214 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_router.py +112 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_server.py +269 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_transforms.py +779 -0
- token_saver_meta-0.1.0/tscg-py/tests/test_utils.py +134 -0
- token_saver_meta-0.1.0/tscg-py/uv.lock +1022 -0
- token_saver_meta-0.1.0/uv.lock +1095 -0
- token_saver_meta-0.1.0/whitelist.txt +47 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "token-saver-meta",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Zero-config token-saving protocol for AI coding agents — injects caveman + ponytail + LG-token-saver + kevin-copilot rules",
|
|
5
|
+
"author": {"name": "Im-Busy"},
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "InstructionsLoaded",
|
|
9
|
+
"matchers": ["session_start", "compact"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "SessionStart",
|
|
13
|
+
"matchers": ["startup", "resume", "clear", "compact"]
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"skills": ["skills/token-saver/SKILL.md"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Publish to npm
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
contents: read
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- uses: actions/setup-node@v4
|
|
17
|
+
with:
|
|
18
|
+
node-version: 20
|
|
19
|
+
registry-url: 'https://registry.npmjs.org'
|
|
20
|
+
- name: Publish to npm
|
|
21
|
+
run: npm publish --provenance --access public
|
|
22
|
+
env:
|
|
23
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- uses: astral-sh/setup-uv@v5
|
|
14
|
+
- name: Install dependencies
|
|
15
|
+
run: uv sync
|
|
16
|
+
- name: Run all tests
|
|
17
|
+
run: uv run pytest tests/ tscg-py/tests/ token-saver-mem/tests/ contextslim-py/tests/ -q
|
|
18
|
+
|
|
19
|
+
build-publish:
|
|
20
|
+
needs: test
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
id-token: write
|
|
24
|
+
contents: read
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: astral-sh/setup-uv@v5
|
|
28
|
+
- name: Build package
|
|
29
|
+
run: uv build
|
|
30
|
+
- name: Publish to PyPI
|
|
31
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
32
|
+
with:
|
|
33
|
+
attestations: true
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
dist/
|
|
6
|
+
.pytest_cache/
|
|
7
|
+
.ruff_cache/
|
|
8
|
+
.venv/
|
|
9
|
+
# Node
|
|
10
|
+
node_modules/
|
|
11
|
+
# Tool output
|
|
12
|
+
CODESIGHT.md
|
|
13
|
+
repomix-output.*
|
|
14
|
+
.repomixignore
|
|
15
|
+
.bak-*
|
|
16
|
+
.codegraph/
|
|
17
|
+
# Cloned reference repos (never track)
|
|
18
|
+
useful-repos/
|
|
19
|
+
# Sub-project coverage
|
|
20
|
+
**/__pycache__/
|
|
21
|
+
**/*.pyc
|
|
22
|
+
**/.pytest_cache/
|
|
23
|
+
**/.venv/
|
|
24
|
+
**/dist/
|
|
25
|
+
**/*.egg-info/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# repo-syncer Agent
|
|
2
|
+
|
|
3
|
+
Safely syncs the private `master` branch to the public `public` branch for the curated public mirror.
|
|
4
|
+
|
|
5
|
+
## Workflow
|
|
6
|
+
|
|
7
|
+
1. **Verify remotes**: Confirm `private` and `public` remotes are configured
|
|
8
|
+
2. **Checkout public**: `git checkout public`
|
|
9
|
+
3. **Merge master**: `git merge master` — bring all private branch changes in
|
|
10
|
+
4. **Safety check**: Verify NO private files exist on public branch after merge:
|
|
11
|
+
- `git ls-tree --name-only HEAD | grep -E "MEMORY\.md|kilo\.json|opencode\.jsonc|token-saver-meta\.md|progress_docs/|\.kilo/|\.omo/|\.codegraph/"` must return empty
|
|
12
|
+
5. **Checkout master**: `git checkout master`
|
|
13
|
+
6. **Push public**: `git push public public`
|
|
14
|
+
|
|
15
|
+
## Private Files (must never appear on public branch)
|
|
16
|
+
|
|
17
|
+
- `MEMORY.md` — Agent handover state
|
|
18
|
+
- `kilo.json` — Kilo platform config
|
|
19
|
+
- `opencode.jsonc` — OpenCode config
|
|
20
|
+
- `token-saver-meta.md` — Brainstorm doc
|
|
21
|
+
- `.kilo/` — Agent definitions
|
|
22
|
+
- `.omo/` — Plan artifacts
|
|
23
|
+
- `.codegraph/` — Local codegraph index
|
|
24
|
+
- `progress_docs/` — Handover notes, session logs
|
|
25
|
+
|
|
26
|
+
## Emergency: If private files appear on public remote
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git checkout public
|
|
30
|
+
git rm --cached -r <leaked-file-or-dir>
|
|
31
|
+
git commit -m "emergency: remove leaked private files"
|
|
32
|
+
git push public public
|
|
33
|
+
```
|
|
34
|
+
Then review why the safety check failed.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# repo-sync Command
|
|
2
|
+
|
|
3
|
+
Slash command for dual-repo sync management.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
### Full Sync
|
|
8
|
+
```
|
|
9
|
+
/repo-sync
|
|
10
|
+
```
|
|
11
|
+
Invokes the `repo-syncer` agent: merge `master` → `public` → safety check → push.
|
|
12
|
+
|
|
13
|
+
### Safety Check Only
|
|
14
|
+
```
|
|
15
|
+
/repo-sync check
|
|
16
|
+
```
|
|
17
|
+
Runs the safety verification without pushing: checks `public` branch for any private files.
|
|
18
|
+
|
|
19
|
+
### Status
|
|
20
|
+
```
|
|
21
|
+
/repo-sync status
|
|
22
|
+
```
|
|
23
|
+
Shows current branch, remote configuration, and last sync state.
|
|
24
|
+
|
|
25
|
+
## Examples
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/repo-sync # Full sync: merge + check + push
|
|
29
|
+
/repo-sync check # Verify no private files on public branch
|
|
30
|
+
/repo-sync status # Show current state
|
|
31
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caveman
|
|
3
|
+
description: >
|
|
4
|
+
Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman
|
|
5
|
+
while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra,
|
|
6
|
+
wenyan-lite, wenyan-full, wenyan-ultra.
|
|
7
|
+
Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens",
|
|
8
|
+
"be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
12
|
+
|
|
13
|
+
## Persistence
|
|
14
|
+
|
|
15
|
+
ACTIVE EVERY RESPONSE. No revert after many turns. No filler drift. Still active if unsure. Off only: "stop caveman" / "normal mode".
|
|
16
|
+
|
|
17
|
+
Default: **full**. Switch: `/caveman lite|full|ultra`.
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked — quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations reader can't decode. Technical terms exact. Code blocks unchanged. Errors quoted exact.
|
|
22
|
+
|
|
23
|
+
Preserve user's dominant language. User write Portuguese → reply Portuguese caveman. User write Spanish → reply Spanish caveman. Compress the style, not the language. No forced English openings or status phrases. ALWAYS keep technical terms, code, API names, CLI commands, commit-type keywords (feat/fix/...), and exact error strings verbatim — unless user explicitly ask for translation.
|
|
24
|
+
|
|
25
|
+
No self-reference. Never name or announce the style. No "caveman mode on", "me caveman think", no third-person caveman tags. Output caveman-only — never normal answer plus "Caveman:" recap. Exception: user explicitly ask what the mode is.
|
|
26
|
+
|
|
27
|
+
Pattern: `[thing] [action] [reason]. [next step].`
|
|
28
|
+
|
|
29
|
+
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
30
|
+
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
|
|
31
|
+
|
|
32
|
+
## Intensity
|
|
33
|
+
|
|
34
|
+
| Level | What change |
|
|
35
|
+
|-------|------------|
|
|
36
|
+
| **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight |
|
|
37
|
+
| **full** | Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations |
|
|
38
|
+
| **ultra** | Abbreviate prose words (DB/auth/config/req/res/fn/impl) — prose words only, never real code symbols/function names. Strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code symbols, function names, API names, error strings: never abbreviate |
|
|
39
|
+
| **wenyan-lite** | Semi-classical. Drop filler/hedging but keep grammar structure, classical register |
|
|
40
|
+
| **wenyan-full** | Maximum classical terseness. Fully 文言文. 80-90% character reduction. Classical sentence patterns, verbs precede objects, subjects often omitted, classical particles (之/乃/為/其) |
|
|
41
|
+
| **wenyan-ultra** | Extreme abbreviation while keeping classical Chinese feel. Maximum compression, ultra terse |
|
|
42
|
+
|
|
43
|
+
Example — "Why React component re-render?"
|
|
44
|
+
- lite: "Your component re-renders because you create a new object reference each render. Wrap it in `useMemo`."
|
|
45
|
+
- full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
|
|
46
|
+
- ultra: "Inline obj prop → new ref → re-render. `useMemo`."
|
|
47
|
+
- wenyan-lite: "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。"
|
|
48
|
+
- wenyan-full: "每繪新生對象參照,故重繪;以 useMemo 包之則免。"
|
|
49
|
+
- wenyan-ultra: "新參照→重繪。useMemo Wrap。"
|
|
50
|
+
|
|
51
|
+
Example — "Explain database connection pooling."
|
|
52
|
+
- lite: "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead."
|
|
53
|
+
- full: "Pool reuse open DB connections. No new connection per request. Skip handshake overhead."
|
|
54
|
+
- ultra: "Pool = reuse DB conn. Skip handshake → fast under load."
|
|
55
|
+
- wenyan-full: "池reuse open connection。不每req新開。skip handshake overhead。"
|
|
56
|
+
- wenyan-ultra: "池reuse conn。skip handshake → fast。"
|
|
57
|
+
|
|
58
|
+
## Auto-Clarity
|
|
59
|
+
|
|
60
|
+
Drop caveman when:
|
|
61
|
+
- Security warnings
|
|
62
|
+
- Irreversible action confirmations
|
|
63
|
+
- Multi-step sequences where fragment order or omitted conjunctions risk misread
|
|
64
|
+
- Compression itself creates technical ambiguity (e.g., `"migrate table drop column backup first"` — order unclear without articles/conjunctions)
|
|
65
|
+
- User asks to clarify or repeats question
|
|
66
|
+
|
|
67
|
+
Resume caveman after clear part done.
|
|
68
|
+
|
|
69
|
+
Example — destructive op:
|
|
70
|
+
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
|
|
71
|
+
> ```sql
|
|
72
|
+
> DROP TABLE users;
|
|
73
|
+
> ```
|
|
74
|
+
> Caveman resume. Verify backup exist first.
|
|
75
|
+
|
|
76
|
+
## Boundaries
|
|
77
|
+
|
|
78
|
+
Code/commits/PRs: write normal. "stop caveman" or "normal mode": revert. Level persist until changed or session end.
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unslop
|
|
3
|
+
description: "Unified de-slop pass: code simplification + comment rot detection + design slop check. Run after completing features or before PRs to strip AI-generated generic patterns."
|
|
4
|
+
argument-hint: "[blank for recent changes, or file/directory path]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /unslop — Strip AI Slop from Your Codebase
|
|
8
|
+
|
|
9
|
+
Three parallel analysis passes that detect and report AI-generated "slop" — generic, template-looking, over-enthusiastic output that makes code, comments, and UI feel artificial.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- After completing a feature — check for slop before PR
|
|
14
|
+
- Before code review — pre-clean your changes
|
|
15
|
+
- When code "feels AI-generated" but you can't pinpoint why
|
|
16
|
+
- Periodic codebase hygiene — run on a directory
|
|
17
|
+
- After a long AI-assisted session to audit quality
|
|
18
|
+
|
|
19
|
+
## Argument Parsing
|
|
20
|
+
|
|
21
|
+
Parse `$ARGUMENTS` for these tokens:
|
|
22
|
+
|
|
23
|
+
| Token | Example | Effect |
|
|
24
|
+
|-------|---------|--------|
|
|
25
|
+
| `fix` | `/unslop fix` | Auto-apply safe fixes after reporting |
|
|
26
|
+
| `<path>` | `/unslop src/components/` | Scope to specific file or directory |
|
|
27
|
+
| (none) | `/unslop` | Analyze all files changed since the base branch |
|
|
28
|
+
|
|
29
|
+
## Execution Flow
|
|
30
|
+
|
|
31
|
+
### Stage 1: Determine Scope
|
|
32
|
+
|
|
33
|
+
**If a file or directory path is provided:**
|
|
34
|
+
|
|
35
|
+
Scope to that path. Use `find` or glob to list all code files under it.
|
|
36
|
+
|
|
37
|
+
**If no argument (default):**
|
|
38
|
+
|
|
39
|
+
Determine changed files since the base branch:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
BASE=$(git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD origin/master 2>/dev/null || echo "HEAD~10")
|
|
43
|
+
echo "FILES:" && git diff --name-only $BASE
|
|
44
|
+
echo "DIFF:" && git diff -U5 $BASE
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Classify files in scope:**
|
|
48
|
+
|
|
49
|
+
| File extensions | Passes to run |
|
|
50
|
+
|----------------|---------------|
|
|
51
|
+
| `.ts`, `.tsx`, `.js`, `.jsx`, `.py`, `.go`, `.rb`, `.rs`, `.java`, `.cs`, `.swift`, `.kt` | Code Slop + Comment Rot |
|
|
52
|
+
| `.css`, `.scss`, `.less`, `.tsx`, `.jsx`, `.html`, `.vue`, `.svelte` | + Design Slop |
|
|
53
|
+
| `.json`, `.yaml`, `.yml`, `.toml`, `.md` | Code Slop + Comment Rot only |
|
|
54
|
+
|
|
55
|
+
If no UI/style files are in scope, skip the Design Slop pass entirely.
|
|
56
|
+
|
|
57
|
+
Announce the scope:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
De-slop scope: 14 files changed since origin/main
|
|
61
|
+
Passes: Code Slop | Comment Rot | Design Slop (3 UI files detected)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Stage 2: Parallel Analysis
|
|
65
|
+
|
|
66
|
+
Launch three sub-agents IN PARALLEL. Each receives the file list and diff content, and returns structured findings as text.
|
|
67
|
+
|
|
68
|
+
<parallel_tasks>
|
|
69
|
+
|
|
70
|
+
#### Pass 1: Code Slop Detector
|
|
71
|
+
|
|
72
|
+
You are a code simplification expert. Analyze the provided files for AI-generated slop patterns. Focus ONLY on slop — not correctness, security, or architecture.
|
|
73
|
+
|
|
74
|
+
**What to flag:**
|
|
75
|
+
|
|
76
|
+
1. **Unnecessary complexity**
|
|
77
|
+
- Deep nesting (>3 levels) that could use early returns
|
|
78
|
+
- Nested ternary operators — use if/else or switch
|
|
79
|
+
- Dense one-liners that sacrifice readability for brevity
|
|
80
|
+
|
|
81
|
+
2. **Redundant abstractions**
|
|
82
|
+
- Interfaces/types used only once — inline them
|
|
83
|
+
- Wrapper functions that add no logic — call the wrapped function directly
|
|
84
|
+
- Abstract base classes with a single implementation
|
|
85
|
+
- Premature generalization ("just in case" extensibility points)
|
|
86
|
+
|
|
87
|
+
3. **YAGNI violations**
|
|
88
|
+
- Features not required by current use cases
|
|
89
|
+
- Configuration options nobody uses
|
|
90
|
+
- Generic solutions for specific problems
|
|
91
|
+
- "Future-proofing" code that adds complexity now
|
|
92
|
+
|
|
93
|
+
4. **Dead weight**
|
|
94
|
+
- Commented-out code blocks (>3 lines)
|
|
95
|
+
- Unused imports, variables, or functions
|
|
96
|
+
- Duplicate error checks (caller already validates)
|
|
97
|
+
- Defensive code that can never trigger (type system prevents it)
|
|
98
|
+
|
|
99
|
+
5. **Over-engineering**
|
|
100
|
+
- Factory patterns for creating a single type
|
|
101
|
+
- Strategy patterns with one strategy
|
|
102
|
+
- Event systems for synchronous single-consumer flows
|
|
103
|
+
- Dependency injection where direct instantiation is clearer
|
|
104
|
+
|
|
105
|
+
**Return format:**
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"pass": "code-slop",
|
|
109
|
+
"findings": [
|
|
110
|
+
{
|
|
111
|
+
"file": "src/auth.ts",
|
|
112
|
+
"line": 42,
|
|
113
|
+
"issue": "Nested ternary — use if/else for readability",
|
|
114
|
+
"severity": "medium",
|
|
115
|
+
"fix_safe": true,
|
|
116
|
+
"suggested_fix": "Replace ternary chain with if/else block"
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### Pass 2: Comment Rot Detector
|
|
123
|
+
|
|
124
|
+
You are a technical documentation expert specializing in comment quality. Analyze the provided files for comment rot — inaccurate, redundant, or AI-generated filler comments.
|
|
125
|
+
|
|
126
|
+
**What to flag:**
|
|
127
|
+
|
|
128
|
+
1. **Obvious restatements**
|
|
129
|
+
- `// increment counter` above `counter++`
|
|
130
|
+
- `// return the result` above `return result`
|
|
131
|
+
- `// set the name` above `this.name = name`
|
|
132
|
+
- Comments that repeat the function/variable name in prose
|
|
133
|
+
|
|
134
|
+
2. **AI-generated filler phrases** (hard bans — flag these immediately)
|
|
135
|
+
- "This function is responsible for handling..."
|
|
136
|
+
- "The following code implements..."
|
|
137
|
+
- "This is a comprehensive solution that..."
|
|
138
|
+
- "This method provides a robust and scalable..."
|
|
139
|
+
- "leverages" or "utilizes" (when "uses" works fine)
|
|
140
|
+
- "seamlessly integrates"
|
|
141
|
+
- "In today's rapidly evolving..."
|
|
142
|
+
- "game-changer", "revolutionary", "cutting-edge"
|
|
143
|
+
- "This class encapsulates the logic for..."
|
|
144
|
+
- "Ensures proper handling of..."
|
|
145
|
+
|
|
146
|
+
3. **Factual inaccuracy**
|
|
147
|
+
- Documented parameters that don't match the function signature
|
|
148
|
+
- Return type descriptions that don't match the actual return
|
|
149
|
+
- Described behavior that doesn't match the code logic
|
|
150
|
+
- Edge case documentation for cases not actually handled
|
|
151
|
+
|
|
152
|
+
4. **Stale comments**
|
|
153
|
+
- TODOs/FIXMEs for work that's already been done
|
|
154
|
+
- References to removed/renamed functions, classes, or files
|
|
155
|
+
- Version-specific notes for versions no longer supported
|
|
156
|
+
- "Temporary" markers on permanent code
|
|
157
|
+
|
|
158
|
+
5. **Over-documentation**
|
|
159
|
+
- JSDoc/docstrings on trivial getters/setters
|
|
160
|
+
- Multi-line comments on self-explanatory one-liners
|
|
161
|
+
- Repeating type information already in the signature
|
|
162
|
+
- Section divider comments (`// ==================`)
|
|
163
|
+
|
|
164
|
+
**Return format:**
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"pass": "comment-rot",
|
|
168
|
+
"findings": [
|
|
169
|
+
{
|
|
170
|
+
"file": "src/auth.ts",
|
|
171
|
+
"line": 10,
|
|
172
|
+
"issue": "\"This function handles authentication\" — restates the function name",
|
|
173
|
+
"severity": "low",
|
|
174
|
+
"fix_safe": true,
|
|
175
|
+
"suggested_fix": "Remove comment — function name is self-documenting"
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### Pass 3: Design Slop Detector
|
|
182
|
+
|
|
183
|
+
**Only run this pass when UI/style files are in scope.**
|
|
184
|
+
|
|
185
|
+
You are a design quality expert. Analyze the provided UI files for AI-generated visual slop — generic, template-looking patterns that signal "an AI made this, not a designer."
|
|
186
|
+
|
|
187
|
+
**What to flag:**
|
|
188
|
+
|
|
189
|
+
1. **Generic color patterns**
|
|
190
|
+
- Purple-to-blue gradients (the AI default palette)
|
|
191
|
+
- Gratuitous gradients on everything (buttons, cards, backgrounds)
|
|
192
|
+
- Safe gray-on-white with one decorative accent color
|
|
193
|
+
- Unintentional color usage (decorative, not semantic)
|
|
194
|
+
|
|
195
|
+
2. **Template layouts**
|
|
196
|
+
- Default card grids with uniform spacing and no hierarchy
|
|
197
|
+
- Generic hero: centered headline + subtitle + gradient blob + CTA
|
|
198
|
+
- Dashboard-by-numbers: sidebar + cards + charts with no point of view
|
|
199
|
+
- Uniform radius, spacing, and shadows across every component
|
|
200
|
+
|
|
201
|
+
3. **Missing interaction states**
|
|
202
|
+
- No hover states on interactive elements
|
|
203
|
+
- No focus states (accessibility gap)
|
|
204
|
+
- No active/pressed states
|
|
205
|
+
- No loading/empty/error states
|
|
206
|
+
|
|
207
|
+
4. **Lazy defaults**
|
|
208
|
+
- Unmodified library defaults (default shadcn/Tailwind without customization)
|
|
209
|
+
- Default font stacks with no intentional pairing
|
|
210
|
+
- Glassmorphism cards that serve no UI purpose
|
|
211
|
+
- Rounded corners on elements that shouldn't be rounded (tables, code blocks)
|
|
212
|
+
- Excessive scroll-triggered animations
|
|
213
|
+
|
|
214
|
+
5. **No visual hierarchy**
|
|
215
|
+
- Flat layouts with no layering, depth, or motion
|
|
216
|
+
- Uniform emphasis on everything (nothing stands out)
|
|
217
|
+
- No intentional rhythm in spacing
|
|
218
|
+
|
|
219
|
+
**Return format:**
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"pass": "design-slop",
|
|
223
|
+
"findings": [
|
|
224
|
+
{
|
|
225
|
+
"file": "src/Hero.tsx",
|
|
226
|
+
"line": 22,
|
|
227
|
+
"issue": "Generic purple-to-blue gradient — replace with brand palette",
|
|
228
|
+
"severity": "medium",
|
|
229
|
+
"fix_safe": false,
|
|
230
|
+
"suggested_fix": "Define an intentional brand gradient in design tokens"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
</parallel_tasks>
|
|
237
|
+
|
|
238
|
+
### Stage 3: Merge & Deduplicate
|
|
239
|
+
|
|
240
|
+
**WAIT for all Stage 2 sub-agents to complete.**
|
|
241
|
+
|
|
242
|
+
1. Collect findings from all passes that ran
|
|
243
|
+
2. Deduplicate: if two passes flag the same file+line (within 3 lines), keep the more specific finding and note both passes
|
|
244
|
+
3. Sort by severity: High → Medium → Low
|
|
245
|
+
4. Group by pass for the report
|
|
246
|
+
|
|
247
|
+
### Stage 4: Present Report
|
|
248
|
+
|
|
249
|
+
Format the consolidated report using pipe-delimited markdown tables:
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
De-slop Report
|
|
253
|
+
==============
|
|
254
|
+
Scope: [N] files changed since [base]
|
|
255
|
+
Passes: Code Slop [✓|✗] | Comment Rot [✓|✗] | Design Slop [✓|skipped]
|
|
256
|
+
|
|
257
|
+
## Code Slop ([N] findings)
|
|
258
|
+
|
|
259
|
+
| # | File | Line | Issue | Severity |
|
|
260
|
+
|---|------|------|-------|----------|
|
|
261
|
+
| 1 | path | line | description | High/Medium/Low |
|
|
262
|
+
|
|
263
|
+
## Comment Rot ([N] findings)
|
|
264
|
+
|
|
265
|
+
| # | File | Line | Issue | Severity |
|
|
266
|
+
|---|------|------|-------|----------|
|
|
267
|
+
| 1 | path | line | description | High/Medium/Low |
|
|
268
|
+
|
|
269
|
+
## Design Slop ([N] findings)
|
|
270
|
+
|
|
271
|
+
| # | File | Line | Issue | Severity |
|
|
272
|
+
|---|------|------|-------|----------|
|
|
273
|
+
| 1 | path | line | description | High/Medium/Low |
|
|
274
|
+
|
|
275
|
+
─────────────────────────────
|
|
276
|
+
Summary: [N] findings ([H] High, [M] Medium, [L] Low)
|
|
277
|
+
Potential LOC reduction: ~[N] lines
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Omit any pass section with zero findings. If all passes return zero findings:
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
De-slop Report: Clean! No slop detected in [N] files.
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Stage 5: Auto-Fix (only if `fix` argument was provided)
|
|
287
|
+
|
|
288
|
+
If the user invoked `/unslop fix`:
|
|
289
|
+
|
|
290
|
+
1. Collect all findings where `fix_safe: true`
|
|
291
|
+
2. Apply fixes in file order:
|
|
292
|
+
- **Code Slop safe fixes:** Remove commented-out code blocks, remove unused imports
|
|
293
|
+
- **Comment Rot safe fixes:** Delete obvious restatement comments, remove stale TODOs
|
|
294
|
+
3. Do NOT auto-fix:
|
|
295
|
+
- Design slop (requires design judgment)
|
|
296
|
+
- Factually inaccurate comments (requires understanding intent)
|
|
297
|
+
- YAGNI violations (requires knowing the roadmap)
|
|
298
|
+
- Abstractions (requires understanding the broader architecture)
|
|
299
|
+
4. Report what was fixed:
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
Auto-fix applied:
|
|
303
|
+
✓ Removed 3 commented-out code blocks (42 lines)
|
|
304
|
+
✓ Deleted 5 obvious-restatement comments
|
|
305
|
+
✓ Removed 2 stale TODOs
|
|
306
|
+
|
|
307
|
+
Remaining (manual review needed): 4 findings
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
If `fix` was NOT provided but fixable findings exist, suggest it:
|
|
311
|
+
|
|
312
|
+
```
|
|
313
|
+
Tip: Run /unslop fix to auto-apply [N] safe fixes
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Severity Guide
|
|
317
|
+
|
|
318
|
+
| Level | Meaning | Examples |
|
|
319
|
+
|-------|---------|---------|
|
|
320
|
+
| **High** | Actively misleading or creates maintenance burden | Inaccurate comment, missing hover states, large dead code block |
|
|
321
|
+
| **Medium** | Noticeable slop that reduces quality | Unnecessary abstraction, AI filler phrase, generic gradient |
|
|
322
|
+
| **Low** | Minor quality improvement | Restatement comment, unused import, over-documentation |
|
|
323
|
+
|
|
324
|
+
Slop is never "Critical" — it's a quality concern, not a correctness or security issue.
|
|
325
|
+
|
|
326
|
+
## Quality Gates
|
|
327
|
+
|
|
328
|
+
Before presenting findings:
|
|
329
|
+
|
|
330
|
+
1. **Every finding must be actionable.** Don't say "could be simpler" — say what to change and where.
|
|
331
|
+
2. **No false positives from skimming.** Verify the abstraction isn't used elsewhere before flagging it. Verify the comment is truly redundant.
|
|
332
|
+
3. **Line numbers must be accurate.** Check each cited line against file content.
|
|
333
|
+
4. **Respect project conventions.** If the project uses JSDoc everywhere, don't flag JSDoc as over-documentation.
|
|
334
|
+
5. **Don't flag generated code.** Skip files in `dist/`, `build/`, `node_modules/`, `.next/`, `vendor/`, or similar generated directories.
|
|
335
|
+
|
|
336
|
+
## Notes
|
|
337
|
+
|
|
338
|
+
- This skill is read-only by default. It reports but does not edit files unless `fix` is specified.
|
|
339
|
+
- Design Slop pass is automatically skipped for backend-only projects.
|
|
340
|
+
- Works on any language/framework — the slop patterns are universal.
|
|
341
|
+
- Pairs well with `/ce-review` (which checks correctness) — `/unslop` checks aesthetics and quality.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Project Conventions
|
|
2
|
+
|
|
3
|
+
This project uses the ATV (Agentic Tool & Workflow) Starter Kit.
|
|
4
|
+
|
|
5
|
+
## Available Workflows
|
|
6
|
+
|
|
7
|
+
- `/ce-brainstorm` — Explore what to build through collaborative dialogue
|
|
8
|
+
- `/ce-plan` — Create a structured implementation plan
|
|
9
|
+
- `/ce-work` — Execute the plan with quality checks
|
|
10
|
+
- `/ce-review` — Multi-agent code review
|
|
11
|
+
- `/ce-compound` — Document solutions for future reference
|
|
12
|
+
- `/lfg` — Full autonomous pipeline (plan → work → review)
|
|
13
|
+
|
|
14
|
+
## Documentation Structure
|
|
15
|
+
|
|
16
|
+
- `docs/plans/` — Implementation plans (living documents with checkboxes)
|
|
17
|
+
- `docs/brainstorms/` — Brainstorm documents (what to build decisions)
|
|
18
|
+
- `docs/solutions/` — Documented solutions (institutional knowledge)
|
|
19
|
+
|
|
20
|
+
## gstack Skills (if installed)
|
|
21
|
+
|
|
22
|
+
- `/office-hours` — YC-style forcing questions to reframe your product
|
|
23
|
+
- `/plan-ceo-review` — Rethink the problem; find the 10-star product
|
|
24
|
+
- `/plan-eng-review` — Lock architecture, data flow, edge cases
|
|
25
|
+
- `/review` — Staff-level code review; auto-fix obvious issues
|
|
26
|
+
- `/qa` — Test app in real browser, find and fix bugs (requires Bun)
|
|
27
|
+
- `/ship` — Sync main, run tests, push, open PR
|
|
28
|
+
- `/cso` — OWASP Top 10 + STRIDE threat model
|
|
29
|
+
- `/careful` — Warn before destructive commands
|
|
30
|
+
- `/investigate` — Systematic root-cause debugging
|
|
31
|
+
- `/retro` — Weekly retrospective with trends
|
|
32
|
+
|
|
33
|
+
## Browser Automation (if installed)
|
|
34
|
+
|
|
35
|
+
- `agent-browser` — Vercel's headless browser CLI for AI agents (Rust native, fast)
|
|
36
|
+
- Core workflow: `agent-browser open <url>` → `snapshot -i` → interact with `@refs` → re-snapshot
|
|
37
|
+
- Install: `npm install -g agent-browser && agent-browser install`
|
|
38
|
+
- Use for QA testing, form filling, screenshots, data extraction, and web automation
|
|
39
|
+
|
|
40
|
+
## ATV Override Rules
|
|
41
|
+
|
|
42
|
+
When both ATV and gstack provide similar functionality, ATV takes priority:
|
|
43
|
+
|
|
44
|
+
- **Design docs**: Write to `docs/brainstorms/` (ATV), not `DESIGN.md` (gstack)
|
|
45
|
+
- **Solutions**: Document via `/ce-compound` into `docs/solutions/` (ATV), not gstack's `/retro`
|
|
46
|
+
- **Plans**: Use `docs/plans/` with ATV naming (`YYYY-MM-DD-NNN-type-name-plan.md`)
|
|
47
|
+
- **Reviews**: ATV's `/ce-review` agent selection governs; gstack's `/review` runs alongside
|
|
48
|
+
- **Protected artifacts**: Never flag `docs/plans/`, `docs/solutions/`, `docs/brainstorms/`, `compound-engineering.local.md`, or `.github/skills/gstack/` for deletion
|
|
49
|
+
|
|
50
|
+
## Coding Conventions
|
|
51
|
+
|
|
52
|
+
- Follow existing patterns in the codebase
|
|
53
|
+
- Write tests for new functionality
|
|
54
|
+
- Use conventional commit messages (`feat:`, `fix:`, `refactor:`)
|
|
55
|
+
|
|
56
|
+
## Continuous Learning Pipeline
|
|
57
|
+
|
|
58
|
+
This project uses ATV's continuous learning system to capture and evolve patterns.
|
|
59
|
+
|
|
60
|
+
### Learning Commands
|
|
61
|
+
|
|
62
|
+
- `/learn` — Extract patterns from recent work into instincts
|
|
63
|
+
- `/instincts` — View all learned patterns with confidence scores
|
|
64
|
+
- `/evolve` — Promote mature instincts (confidence > 0.8) into full skills
|
|
65
|
+
- `/observe` — Run a focused observation session on a specific domain
|
|
66
|
+
- `/unslop` — Unified de-slop pass: strip AI-generated code slop, comment rot, and design slop
|
|
67
|
+
|
|
68
|
+
### How It Works
|
|
69
|
+
|
|
70
|
+
1. **Observer hooks** automatically capture tool use data to `.atv/observations.jsonl`
|
|
71
|
+
2. **`/learn`** analyzes recent work and creates instincts in `.atv/instincts/project.yaml`
|
|
72
|
+
3. **Instincts** build confidence over time through repeated observation
|
|
73
|
+
4. **`/evolve`** promotes mature instincts into discoverable skills in `.github/skills/learned-*/`
|
|
74
|
+
|
|
75
|
+
### Key Files
|
|
76
|
+
|
|
77
|
+
- `.atv/observations.jsonl` — Raw tool use log (gitignored, ephemeral)
|
|
78
|
+
- `.atv/instincts/project.yaml` — Learned patterns (committed, shared with team)
|
|
79
|
+
- `.github/hooks/copilot-hooks.json` — Observer hook configuration
|
|
80
|
+
- `.github/skills/learned-*/` — Auto-generated skills from evolved instincts
|
|
81
|
+
|
|
82
|
+
### Best Practices
|
|
83
|
+
|
|
84
|
+
- Run `/learn` after completing features or at session end
|
|
85
|
+
- Run `/instincts` to check what patterns the project has learned
|
|
86
|
+
- Run `/evolve` periodically to graduate well-established conventions
|
|
87
|
+
- Run `/unslop` before PRs to strip AI-generated slop from code, comments, and UI
|
|
88
|
+
- Review generated skills before committing — they're a starting point
|