Skip to content

Releases: ciskonc/dsh-context-imports

v0.3.1 — expand imports of every instruction file the harness loaded

Choose a tag to compare

@ciskonc ciskonc released this 24 Oct 20:42

dsh-context-imports 0.3.1

Expands the @path imports of every instruction file the harness loaded — including a project AGENTS.md it picks up mid-session once the agent touches files under it.

What changed

  • New setting expandLoadedInstructions (default on). The harness publishes which instruction files it loaded: every agent-instructions message carries a scope key (<dir>\u0000<file>, the directory relative to the project root) plus the baseline identity that names the project root. The plugin now reads those facts from all three places they appear — the agent's inbox (where the host parks a freshly loaded file), the current step's message batch, and the durable surface — and expands the imports of every file in that set.
  • Injection is incremental instead of once-per-session. A file already in the model's context is never sent twice; a newly loaded project AGENTS.md adds exactly its own imported files while the earlier ones stay untouched. Deduplication compares the rendered block (path + content), so it holds across steps and across processes, and a file whose content changed is sent again.
  • Fix: the inbox lookup read session.inbox instead of agent.inbox and therefore never fired (0.3.0). The step-batch path carried the feature on its own; the inbox fallback is now real.

Testing

  • E2E on DSH 0.2.1-rc.3 (isolated instance): fresh session injects the root imports; reading a project file brings that project's AGENTS.md in and expands its imports in the same round; two projects load together; a file shared by both projects is injected exactly once; files already in the context are not repeated; missing files are reported, not fatal.
  • Robustness: scripts/robustness.test.mjs — a mock-host harness (no model, no browser) with 24 checks over config normalization for every wrong field shape, injection/dedup/compaction re-seed decisions, the three host instruction-scope sources, byte budgets, truncation, missing files, circular imports and a broken surface. Run it with npm test.
  • Host API audit against DSH 0.2.1-rc.3: no relevant change versus 0.2.1-rc.2 (only the plugin manager's navigation service gained openList).

Compatibility

  • Needs DSH ≥ 0.2.0 (the host's published instruction scopes). 0.3.0 and 0.2.x keep the older cwd-only behaviour.
  • Install with dsh plugin add — since DSH 0.2.0-rc.2 the loader verifies profile lockfile consistency and silently drops hand-copied node_modules.

v0.2.3 — fix config defaults loss on DSH 0.2.0-rc.2 (session crash / no injection)

Choose a tag to compare

@ciskonc ciskonc released this 09 Oct 07:43

dsh-context-imports 0.2.3

Hardens config access for DSH >= 0.2.0-rc.2. No behavior change on older hosts.

Fixed

  • Session-create crash / silent no-injection on DSH >= 0.2.0-rc.2. Since rc.2 the config projection for .volatile() schema fields no longer fills schema defaults into the resolved entry value — every field can arrive undefined even though the schema declares .default(). With the 0.2.2 schema (all fields volatile, required for the settings page) this caused two failures:

    • entry.injectOn undefined → TypeError: includes is not a function thrown from agent/created → the whole session-create fails (every session shows "unavailable")
    • entry.files undefined → TypeError: cfg.files is not iterable inside the pre-step injection → caught and swallowed → brand-new sessions silently get no injection

    normalizeConfig() now runs at apply() entry: every field is coerced to its declared type with the schema default as fallback, injectOn additionally accepts the comma-separated string form and is filtered to known scenes.

Tested

  • DSH 0.2.0-rc.2: before the fix fresh sessions logged injection FAILED: TypeError: cfg.files is not iterable and got no injection; after the fix the same path injects exactly one block.
  • DSH 0.2.0-rc.1: full browser pass (startup injection, dedup, compaction re-injection, settings form) — unchanged behavior.
  • Engines requirement unchanged: DSH >= 0.1.7-rc.1. 0.2.3 has not been re-tested on 0.1.7-rc.2 (no environment available).

v0.2.2 — fix compaction re-injection and settings page mounting

Choose a tag to compare

@ciskonc ciskonc released this 30 Sep 04:33

dsh-context-imports 0.2.2

Two silent defects found by a full browser test pass on a dedicated debug instance (DSH 0.2.0-rc.1), both fixed:

Fixed

  • No re-injection after compaction. /compact in DSH 0.2.0 replaces the block in place (surfaceOp replace) and never re-fires agent/created, so the process-local ledger entry from the first injection went stale and blocked re-seeding forever. The surface check is now tri-state (visible / absent / unknown) and takes precedence over the ledger; the ledger only guards an unreadable surface.
  • Settings page never mounted. Two independent causes: the Config schema declared no .volatile() fields, so the host's settings describe skipped the namespace entirely; and dsh.client.inject did not declare the service-provider modules, leaving the client fiber's slots/locale/configForms services unresolved (fiber pending, no error). All fields are now volatile and the inject list declares @deepseek-ai/dsh-client-locale, @deepseek-ai/dsh-client-ui-settings, @deepseek-ai/dsh-client-ui-plugin-manager.

Added

  • scripts/check-injection.cjs: session-log forensics checker (single visible injection, placement after AGENTS.md/skill catalog, wrapper shape, surface visibility replay).

Tested

  • DSH 0.2.0-rc.1 (debug instance): startup injection (single, after AGENTS.md/skill catalog), dedup on subsequent messages, re-injection after /compact, no duplicate after re-seed, nested @import expansion, missing-file notes, settings form render/save/reset in zh UI.
  • Engines requirement unchanged: DSH >= 0.1.7-rc.1. 0.2.2 itself has not been re-tested on 0.1.7-rc.2 (no environment available).

v0.2.1

Choose a tag to compare

@ciskonc ciskonc released this 26 Sep 07:04

Adapted to DeepSeek Harness 0.1.7 (tested on 0.1.7-rc.2). For DSH 0.1.5, stay on the 0.1.x line.

v0.2.0 — 0.1.7 adaptation:

  • agent/session-start → agent/created (same scene payloads: startup/resume/clear/compact)
  • installSection removed: settings namespaces are projected from loader entries, zero registration code
  • client settingsScope service → configForms (get + whileServed); settings page moved to the plugins.item tab
  • custom message source kind 'context-imports' via module merge (was kind 'plugin')
  • settings card rebuilt on the official shared form widgets (SettingsFormModel/SettingsForm/SettingsValueField/Checkbox)

v0.2.1 — duplicate-injection regression fix:

  • decision.messages is only the step's admitted batch, never history — the 0.1.4 convergence counter read zero on later steps and appended again. Detection is now a three-layer gate: step batch → process ledger → durable surface visibility scan.

Install: dsh plugin --profile web add dsh-context-imports

v0.1.4

Choose a tag to compare

@ciskonc ciskonc released this 25 Sep 19:19

Converge to exactly one injection per request.

decision.messages is the complete request sequence, so counting our
messages there (matched by source.plugin) replaces every previous
detector:

  • zero injections -> scene-gated append (fresh session, compaction
    cleared the old block, never-injected active session, model switch)
  • exactly one -> untouched
  • multiple -> stale ones dropped, newest kept (official skill-catalog
    replacement pattern)

Tested against DeepSeek Harness 0.1.5-rc.2.

Install: dsh plugin --profile web add dsh-context-imports

v0.1.3

Choose a tag to compare

@ciskonc ciskonc released this 23 Sep 07:26

Judge prior injections by surface visibility, not the full durable log.

Replaying a real session's surface fold showed compaction replaces old
injections out of the surface while the full log still contains them, so
the 0.1.2 full-log scan blocked the promised compaction re-seed.
Detection now walks the live surface projection only: visible = skip,
compaction-removed = re-inject.

Tested against DeepSeek Harness 0.1.5-rc.2.

Install: dsh plugin --profile web add dsh-context-imports

v0.1.2

Choose a tag to compare

@ciskonc ciskonc released this 21 Sep 07:26

Seed never-injected active sessions on their next step.

Sessions that never saw a session-start event in the current process (model switches on long-lived sessions, sessions created before the plugin was activated) were skipped forever. An absent scene ledger now defaults to allowed: the single-injection invariant stays the only gate, so such sessions get seeded exactly once on their next step.

Tested against DeepSeek Harness 0.1.5-rc.2.

Install: dsh plugin --profile web add dsh-context-imports

v0.1.1

Choose a tag to compare

@ciskonc ciskonc released this 18 Sep 12:47

Installable as a profile bundle.

  • declares the dsh.bundle manifest (cordis.patch.yml included in the package), so 'dsh plugin add' now registers and activates it as a profile layer instead of a plain dependency
  • declares engines: dsh >= 0.1.5-rc.1
  • tested against DeepSeek Harness 0.1.5-rc.2

Install: dsh plugin --profile web add dsh-context-imports

v0.1.0

Choose a tag to compare

@ciskonc ciskonc released this 17 Sep 15:53

First public release.

  • Claude Code-style @path imports for AGENTS.md/CLAUDE.md: recursive expansion (depth-limited), byte budgets, missing-file notes
  • Injects at session start (startup/resume/clear/compact, configurable) placed after all context injections via the official pre-step channel
  • Single-injection invariant with full-log fingerprint detection (re-seeds after compaction)
  • Six-language settings card (zh/en/ja/fr/ru/ko); wrapper text follows the UI locale or a custom template

Install: dsh plugin --profile web add dsh-context-imports