v0.29.0 — Unity support, unlimited code ingest, hook & scheduler fixes
Resolves all four open issues (#14–#17), hardened by adversarial review.
Features
- Opt-in Unity asset ingestion (#17):
kin ingest code --unity(orcode_ingest: {unity: true}in the project's.kin/config) indexes.unity/.prefab/.asset/.mat/.controller/.animfiles. Text-vs-binary serialization is sniffed via the%YAMLheader;Library/,Temp/,Logs/,obj/,Build/,UserSettings/are excluded at any depth. Each ingested file's.metaGUID is attached to its node (extra.unity_guid) and exported in the code-map aslanguageNotes.unityGuid, giving models the GUID→path mapping Unity references need — without indexing.metafiles 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_textalso 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 codeis unlimited by default (fully local analysis, no LLM); network/LLM adapters keep their 50 cap.--limit 0genuinely 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-runningkin setup-cronmigrates 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~/.kindexbackup) are never touched.
Internal
IngestResultgained awarningslist surfaced through__str__.- Shared
is_kindex_cron_line()keeps install/uninstall/repack matchers from diverging. - 100 new tests (1659 total).