Skip to content

v0.29.0 — Unity support, unlimited code ingest, hook & scheduler fixes

Choose a tag to compare

@jmcentire jmcentire released this 16 Jul 05:20
· 68 commits to main since this release

Resolves all four open issues (#14#17), hardened by adversarial review.

Features

  • Opt-in Unity asset ingestion (#17): kin ingest code --unity (or code_ingest: {unity: true} in the project's .kin/config) indexes .unity/.prefab/.asset/.mat/.controller/.anim files. Text-vs-binary serialization is sniffed via the %YAML header; Library/, Temp/, Logs/, obj/, Build/, UserSettings/ are excluded at any depth. Each ingested file's .meta GUID is attached to its node (extra.unity_guid) and exported in the code-map as languageNotes.unityGuid, giving models the GUID→path mapping Unity references need — without indexing .meta files as nodes. Generic escape hatch: code_ingest.include_extensions (e.g. .shader: Unity Shader). The opt-in resolves from the target directory's .kin/config, and the explicit flag wins in both directions.

Fixes

  • Compact hook no longer mints blank nodes (#14): the PreCompact hook extracted from the hook's JSON envelope instead of the conversation, creating one empty node per envelope field at every compaction. It now parses the transcript file the envelope points at. _extract_session_text also understands the modern nested transcript format ({"type": "assistant", "message": {...}}) — the cron capture path was silently extracting nothing from current transcripts. Neither hook path will ever mint a content-empty concept again.
  • Ingest limits make sense (#16): kin ingest code is unlimited by default (fully local analysis, no LLM); network/LLM adapters keep their 50 cap. --limit 0 genuinely means unlimited (it was silently coerced to 50; negative values ingested nothing). Truncation is loudly reported on CLI and MCP paths. Unlimited is clamped at external API boundaries (Linear 250/page, GitHub per_page 100).
  • Scheduler logs are profile-independent (#15): cron/launchd logs always land in the base data dir's logs/, never a cwd-resolved profile folder; the adaptive repack and per-profile daemon passes are anchored to the same base dir. Re-running kin setup-cron migrates stale entries in place (preserving adaptively repacked intervals) and now creates the log dir — a >> redirect into a missing dir silently kills the job. The crontab matcher matches kindex command shapes only, so user cron lines that merely mention a kindex path (e.g. a ~/.kindex backup) are never touched.

Internal

  • IngestResult gained a warnings list surfaced through __str__.
  • Shared is_kindex_cron_line() keeps install/uninstall/repack matchers from diverging.
  • 100 new tests (1659 total).