33 Commits
Author SHA1 Message Date
kilo-maintainer[bot] a5aaef74a8 release: v7.4.21 2026-08-11 03:07:28 +00:00
Johnny Eric Amancio fdc46654c5 fix(memory): quiet transient capture timeouts and stop same-turn retries 2026-08-10 14:12:21 +02:00
Johnny Eric Amancio 6c138449d5 Merge remote-tracking branch 'origin/main' into johnnyeric/kilo-opencode-v1.17.13
# Conflicts:
#	package.json
#	packages/core/schema.json
#	packages/core/src/command.ts
#	packages/core/src/config/plugin/command.ts
#	packages/core/src/database/schema.gen.ts
#	packages/core/src/session/sql.ts
#	packages/core/src/v1/session.ts
#	packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/full-screen-diff-with-changes-chromium-linux.png
#	packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/labs-tool-call-lab/search-previews-chromium-linux.png
#	packages/opencode/src/command/index.ts
#	packages/opencode/test/server/httpapi-ui.test.ts
#	packages/sdk/js/src/v2/gen/types.gen.ts
#	packages/sdk/openapi.json
#	packages/tui/src/routes/session/index.tsx
2026-08-04 12:57:20 +02:00
kilo-maintainer[bot] 62baedd258 release: v7.4.20 2026-08-04 10:23:57 +00:00
kilo-maintainer[bot] 20aead0d87 release: v7.4.19 2026-08-04 07:56:10 +00:00
kilo-maintainer[bot] f00da9a75b release: v7.4.18 2026-07-31 19:59:08 +00:00
Johnny Amancio 7d0089bb26 Merge remote-tracking branch 'origin/main' into johnnyeric/kilo-opencode-v1.17.13
# Conflicts:
#	packages/opencode/src/kilocode/server/httpapi/server.ts
#	packages/opencode/src/server/routes/instance/httpapi/server.ts
2026-07-30 20:11:31 +02:00
Hardik Sharma 0d923d0ef5 fix(memory): accept extra digest fields (#12675) 2026-07-30 17:29:37 +02:00
kilo-maintainer[bot] a0364858a6 release: v7.4.17 2026-07-29 11:29:05 +00:00
kilo-maintainer[bot] f80ebff83b release: v7.4.16 2026-07-24 15:55:31 +00:00
kilo-maintainer[bot] 13e4259662 release: v7.4.15 2026-07-22 09:21:25 +00:00
Johnny Eric Amancio fa23cd22ff Merge pull request #12422 from Kilo-Org/johnnyeric/fix-memory-ui-feedback
fix(memory): refine CLI and extension experience
2026-07-21 12:27:03 +02:00
Johnny Amancio 28d015f8fe fix(memory): refine CLI and extension experience 2026-07-21 01:08:42 +02:00
kilo-maintainer[bot] 7060f8cb21 release: v7.4.13 2026-07-20 17:45:05 +00:00
kilo-maintainer[bot] 9ac93a4c90 release: v7.4.11 2026-07-16 19:33:52 +00:00
Johnny Eric Amancio 30e7ec4ab4 feat(memory): improve extension UX and activity details (#12254) 2026-07-16 14:59:29 +02:00
Johnny Eric Amancio e084ab7492 feat(cli): improve memory CLI UX (#12255) 2026-07-16 12:59:15 +02:00
Johnny Eric Amancio bd69158131 feat(memory): add verbose flag and marker content snippets (#12250) 2026-07-16 11:52:24 +02:00
kilo-maintainer[bot] 0d13b79d2c release: v7.4.9 2026-07-15 18:45:17 +00:00
kilo-maintainer[bot] 19bd048e21 release: v7.4.8 2026-07-15 10:29:22 +00:00
kilo-maintainer[bot] afda979458 release: v7.4.7 2026-07-13 14:45:02 +00:00
kilo-maintainer[bot] 2535b742ac release: v7.4.6 2026-07-13 13:56:01 +00:00
kilo-maintainer[bot] 3cddd07ad4 release: v7.4.5 2026-07-09 14:31:42 +00:00
kilo-maintainer[bot] 2c175fbd25 release: v7.4.4 2026-07-09 13:13:38 +00:00
kilo-maintainer[bot] 2464bfe475 release: v7.4.3 2026-07-09 11:55:41 +00:00
kilo-maintainer[bot] 6509c66b4b release: v7.4.2 2026-07-08 20:39:16 +00:00
Johnny Eric Amancio 0bac434f3c fix(memory): drop filename allowlist from diff durability check (#12041)
* fix(memory): drop filename allowlist from diff durability check

hasDurableDiff mixed two signals in one bit: did the turn do real work,
and should it skip the consolidation throttle. The allowlist deciding
both was filename and extension based, so small edits outside the listed
patterns could be dropped as echo or trivial.

Split it: hasUserEdit (any non-generated file change) now gates echo and
trivial, hasSubstantialDiff (20+ lines churn, any language) decides the
throttle bypass. The filename allowlist and its English word list are
gone.

* refactor(memory): keep single-word name for generated regex
2026-07-08 18:20:52 +02:00
Johnny Eric Amancioandgithub-actions[bot] b0348cbc01 feat(vscode): integrate project memory into the extension (#11954)
* feat(vscode): integrate project memory into the extension

Wire the kilo-memory system into the VS Code extension host and webview,
building on the shared client helpers and /memory command catalog in
@kilocode/kilo-memory.

Extension host:
- KiloProviderMemory bridges the SDK memory client (status/show/enable/
  disable/configure/rebuild/remember/correct/forget/purge, plus status
  and edit) with serialized operations and a small per-directory cache
- memory.status/updated/error events fan out to the active and tracked
  sessions and refresh the webview
- showMemory / toggleMemory commands, routed through the sidebar provider
  or the Agent Manager panel depending on which is active

Webview:
- MemoryProvider context, memory status controls in the Context settings
  tab, task-header and assistant-message affordances, and the /memory
  prompt command (help/show/operation) driven by the shared catalog
- message types and i18n strings across all locales

* fix(vscode): address memory PR review suggestions

- serialize toggleMemory's status pre-check via KiloProviderMemory.toggle()
  so rapid toggles can't double-apply the same operation
- collapse duplicate enabled/active memos in memory context
- extract shared formatCompactCount util (was triplicated K/M formatter)
- drop dead reject handler in serial() and never-produced member from
  MemoryOperationResultMessage.result union

* fix(memory): audit cleanups: inspect accuracy, shared marker decoder, dead i18n key

* chore: update kilo-vscode visual regression baselines

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-07 15:44:24 +02:00
Johnny Eric Amancio b976b5a013 feat(cli): opt-in project memory (#11921)
* feat(memory): opt-in project memory — capture, recall, CLI + TUI integration

Add project memory: the standalone @kilocode/kilo-memory effect layer plus the
opencode CLI/server/TUI integration. Memory is disabled by default, so it is a
no-op until enabled (no behavior change when off).

Capture (turn-close consolidation): per-op parse salvage, secret redaction that
skips the offending op instead of aborting the batch, supersede-only auto-updates
(never model-driven deletes), correction-aware echo handling, non-LLM fallback
digests on interrupted/error turns, a shared interval throttle with idle-flush.

Recall + injection: keyword tokenizer with camelCase/compound splitting, light
stemming, and an English-first stopword filter (Unicode-aware; non-English falls
back to plain token-overlap), a live relevance floor, a budget-reserved startup
index, a session-digest catalog, and per-session prompt-cache pinning of the
injected memory block.

Surfaces: kilo_memory_save / kilo_memory_recall tools, the memory HTTP API
(contract schemas live in the package), and a status-focused TUI sidebar showing
auto-save, loaded context, and active recall, plus the /memory dialog.

* fix(memory): address PR review feedback

- C1: bump @kilocode/kilo-memory in the changeset
- C2: redact secrets before they hit the audit log (skip + salvage paths);
  redact before truncating in salvageTyped so a secret straddling the
  500-char cap can't leak an unmatched fragment; opText -> salvageText
- C3: de-abbreviate savedOperations, "changes" wording, ops.ts -> operations.ts
- C4: log.warn on the remaining silent-catch fallbacks (turn diff, memory
  context injection, tool-visibility check)
- C5: relocate memory storage from ~/.kilo to Global.Path.data, delete the
  now-dead needsDependencyInstall guard, add /memory status (root path) and
  /memory edit ($VISUAL/$EDITOR + auto-rebuild)
- C6: replace the hardcoded English stopword list with corpus-derived
  ubiquitous-term filtering (df across the user's own entries) and the
  English suffix stemmer with suffix-tolerant term matching, so recall
  noise-filtering works in any language
- C8: delete the CORRECTION_INTENT English regex; echo turns now run typed
  capture (digest stays echo-gated), bounded by the interval throttle, with
  the typed prompt as the language-agnostic content filter
- C9: exclude generated paths (dist/build/coverage/*.gen.*/*.map/snapshots)
  from the durable-diff churn fallback so generated churn can't burn a
  consolidation call
- C11: fix duplicated assert in httpapi-memory test; assert the error body
- kilo-code-bot batch: clause-boundary regex fix, byte-safe catalog
  truncation, max-length guards on remember/correct/forget payloads (text,
  query, key, sessionID), trim consistency in reconcile, param-shadowing
  rename, missing doc entry for kilo_memory_recall, dead-code removal,
  dialog UI fixes, memoryEnabledCache eviction bound, dedicated Configure
  schema, recall permission renderer, covered-session pointer cap, redact
  chat transcript before the consolidation model call, split configProtected
  metadata from disableAlways so memory-save prompts don't show config-file
  copy, drop unused MemoryService.layer provide from tool registry
- redact colon-separated low-entropy secrets too (password: hunterx),
  accepting the prose false-positive tradeoff (secret: enabled) in favor of
  not missing a real secret
- rename lastConsolidatedAt -> lastTypedConsolidationAt to make its narrow
  scope (typed-consolidation throttle clock) explicit; regen openapi/SDK
- drop now-dead home/config fields from MemoryPaths.Host after the data-dir
  relocation; add Process.splitCommand for quoted $EDITOR/$VISUAL paths with
  spaces, used by /memory edit and the pre-existing Editor.open utility

* refactor(memory): shared client helpers, capture hardening, /memory UX rework

- extract client-side derivations into kilo-memory so both frontends share
  one implementation: MemoryDecisions.summarize (decision-log summary),
  MemoryAutosaveStatus.summarize (autosave-status semantics), and
  MemoryMarkerMeta (marker wire contract encode/decode)
- match exact-key upserts via the canonical stored id (slugged key,
  normalized section) so a re-emitted spaced/uppercase key updates the
  entry instead of falling to fuzzy dedupe
- salvageTyped throws on valid JSON without an operations array so the
  caller's fallback path records a parse error instead of a silent
  zero-op success
- rename memory tool metadata files -> sources (stripPartMetadata rewrites
  tool-part metadata.files assuming apply_patch records, mangling string[])
- read state instead of status for tool enabled checks; dedupe TUI helpers
  (errorMessage, shared route(), Locale.number, relativeTime)
- /memory UX: bare /memory opens a help modal driven by a structured
  command catalog in kilo-memory; /memory on|off become the canonical
  toggle verbs (enable/disable kept as quiet aliases); /memory status opens
  a clean overview dialog (root path, autosave, startup context, source
  counts, index size) instead of a toast; /memory show is the single full
  audit view (inspect removed)
2026-07-06 17:45:49 +02:00
kilo-maintainer[bot] 4ed43ab7c5 release: v7.4.1 2026-07-03 17:10:11 +00:00
kilo-maintainer[bot] c78d44a143 release: v7.4.0 2026-07-03 14:40:55 +00:00
Johnny Eric Amancio b48570e93b feat(memory): add @kilocode/kilo-memory effect runtime layer (#11845)
* feat(memory): add @kilocode/kilo-memory effect runtime layer

* refactor(memory): drop dead defaultLayer alias

* chore: restore @kilocode/kilo-memory changeset from core

* fix(memory): isolate event sink failures and release per-session turn locks

- events: swallow+log host sink failures so best-effort event wiring never
  fails a memory op that already persisted (restores guard the port dropped)
- service/turn: drop the memoized turn lock once a session settles so the
  lock map no longer grows unbounded in a long-lived shared backend

* fix(memory): scope model-reported duplicate skips to claimed file/section

verifySkips() verified model-claimed duplicates against all stored items
regardless of scope. Add optional file/section to the skip schema, instruct
the model to report them for duplicate skips, and thread them into the
duplicate check so a cross-scope match downgrades to 'unsupported' instead
of confirming. Matches the scoping duplicateOps() already applies to adds.

* fix(memory): release per-root abort controllers and reject unscoped duplicate skips

- timers: ref-count the per-root AbortController and drop it when the last
  in-flight capture settles (released via an ensuring finalizer in capture),
  so the signals map no longer grows for every root a shared backend touches
- outcome/prompt: a 'duplicate' skip that names a file but no section can't be
  verified without risking a cross-section false confirm, so treat it as
  unverified; instruct the model to report both file and section

* fix(memory): only confirm duplicate skips that name the exact file+section

Extend the guard so any 'duplicate' skip missing either scope field — not just
section — is treated as unverified. A fully-unscoped claim could otherwise still
confirm against unrelated memory via fuzzy text matching. Confirm only when the
model pins the exact file+section; everything else downgrades to advisory.

* fix(memory): ref-count session turn locks instead of eager delete

Eager delete could hand a queued close() a fresh semaphore while a peer still
held the old one, reintroducing overlapping turn-close work. Ref-count holders
(queued acquirers included) and drop the entry only when the last holder
leaves; close() always releases its own holder and a deferred flush takes its
own turnLock/dropLock pair.
2026-07-01 14:48:32 +02:00
Johnny Eric Amancio 566e069532 fix(memory): add core project memory package (#11355) 2026-07-01 12:08:28 +02:00