Changelog¶
All notable changes to the Deposium CLI will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[1.4.2] - 2026-06-12¶
Second internal audit cycle — closes 5 HIGH-severity findings, 7 MEDIUM bugs, and the bulk of the code-health backlog from the post-v1.4.1 audit. 478/478 tests pass.
Security¶
auth statusno longer leaksdep_svc_*service-keys: the env-var and stored-credential paths now reject service-keys at the CLI boundary BEFORE transmitting them viaX-API-Key. Previously the status check sent the key, got rejected, and the key landed in server access logs anyway. (#A5)- No more path-segment URL injection: every interpolated ID in the
client (documents, api-keys, validate reports) is now run through
encodeURIComponent. Inputs like../api-keysor1?admin=trueused to rewrite the request path; now they're properly escaped. (#A3) benchmark corpus --queries=<file>no longer leaks file content: when the JSON parse fails on file-read content, the error message now only names the path and emits position info — never echoes the file body. Previously--queries=/etc/hostswould have spilled the first 100 chars of/etc/hoststo stderr. V8'sJSON.parseerror message is also stripped of the snippet it embeds. (#B2)logoutactually logs out on partial-migration installs: the legacyapiKeyconfig slot is now cleared alongside the credentials store. Previously, on installs where the one-time encrypted-store migration didn't complete, the nextgetApiKey()resurrected the legacy key —auth logoutlooked successful but the user remained authenticated. (#B6)api-keys create/rotateno longer duplicates the secret in stdout: warning always goes to stderr (every format), JSON body always to stdout.> out.jsonnow produces a clean parseable file instead of human warning text prepended to the JSON. Interactive users still see the loud one-time alert. (#B7)
Fixed¶
validate --jsonpropagates exit code 1 on failure: the previous release exited 0 even when the run failed — CI scripts that piped the JSON tojqand checked$?got false-positive success. (#A1)- SSE chunk dispatch no longer swallows consumer-callback errors:
handleSSEChunk's catch is now narrowed toJSON.parseonly. SDK consumers'onToken/onMetadata/onChatPrompterrors now propagate instead of being silently lost — fixes "stream looks stalled" symptoms. (#A2) - SSE multi-line
data:payloads concatenated correctly: per spec, multipledata:lines in one event are joined with\n. Previously each new line overwrote the previous one. Also accept the space-lessdata:fooform the spec allows. (#B3) validate-hitl-formhas an exhaustive switch onwaiting_for: a server adding a 4thchat_promptdiscriminant no longer falls through toundefinedand tripping a downstream NPE. TypeScript also flags client/server drift at compile time. (#B4)--on-ambiguous=dumpflushes stdout before exiting: replacesconsole.log(json); process.exit(0)withprocess.stdout.write(json, () => process.exit(0))so the JSON reaches downstream| jqconsumers even on slow pipes. (#B5)
Changed¶
compound analyze --clear/--show-historyremoved: those flags were no-ops on the standalone command (one-shot process, no history to clear). Usedeposium chatordeposium interactivefor a REPL with persistent history. (#C11)upload-batch --parallelremoved: advertised "reserved for future use" but never read. (#C5)parseIntOrThrowis strict:deposium logs view --limit=100GBused to silently use100; now it errors with--limit must be an integer (got: "100GB"). Any user accidentally passing garbage gets a clearer signal. (#C9)intelligence summarize <results>andleanrag aggregate <results>help strings no longer claim to support-for stdin: stdin reading isn't implemented (the action throws "not yet supported"); the help text was lying. (#C6)- Doc correction in CLAUDE.md: the Security Requirements section
no longer claims
safeParseJSONis Zod-validated. The helper wrapsJSON.parsewith sanitized error messages; runtime shape validation is tracked as a follow-up. (#B1)
Internal¶
runMcpToolhelper kills 59 callsites: thecallTool → check isError → exit → formatboilerplate that repeated across 16 command files is now centralized insrc/utils/command-helpers.ts. Net −191 LOC onsrc/commands/. One callsite (benchmark compare) stays inline because it needs to skip failures and continue the loop. (#C1)client/mcp-client.tssplit: the 997-line module is broken into 4 focused files —mcp-client.ts(slim class + HTTP API), newclient/sse-stream.ts(chat / agent-resume helpers), newclient/validate-stream.ts(pause/resume protocol), and newclient/http-errors.ts(single source of truth for the "Cannot connect to Deposium API" wording previously duplicated 5×). Resolves themax-lineslint warning that had been on the file since v1.4.0. (#C2, #C13)chatandvalidatenow useinitializeCommand(): they used to hand-roll the 4-linegetConfig → getBaseUrl → ensureAuthenticated → new MCPClientbootstrap that every other command had moved off long ago. (#C3).requiredOption()unified:evaluate feedback(3 flags),duckdb connect/federate,mermaid generate— 6 sites that hand-rolledif (!opt) console.error; process.exit(1)now use commander's idiomatic check. (#C10)- Dead exports removed:
sleep,sanitizeErrorData,isRetryableError(internals.ts),DEFAULT_VALIDATE_TOOL(mcp-client.ts),CommandContext,InitializeOptions(command- helpers.ts),ValidateRenderOptions(validate-events.ts), and a vestigial re-export ofisErrorWithCode/hasErrorCauseWithCode. (#C4)
[1.4.1] - 2026-05-25¶
Security¶
- Resolved moderate-severity advisory GHSA-jxxr-4gwj-5jf2
(brace-expansion DoS) transitively via
npm update.
Internal¶
- In-range dependency refresh: axios 1.16.1, vitest 4.1.7,
@typescript-eslint/*8.59.4, inquirer 13.4.3, ora 9.4.0, tsx 4.22.3, prettier 3.8.3, dotenv 17.4.2, eslint 9.39.4, and others. No public API change; 453/453 tests pass.
[1.4.0] - 2026-05-16¶
Internal audit cycle — fixes for one production-blocking bug, one security inconsistency, and a sweep of UX / hygiene issues.
Fixed¶
chatHITL resume now goes through Edge Runtime in the default (non---direct) mode. Previously the initial stream hit Edge but the resume POST hit the direct MCP URL — which is not exposed in production — so anychat_promptpause failed immediately after the user picked an option.upload-batchis now subject to the same security posture as every other command: HTTPS enforcement on non-localhost URLs, thedep_svc_*service-key guardrail, and a consistent "Cannot connect to Deposium API" message on ECONNREFUSED.- Stored-key fallback in
ensureAuthenticatedonly triggers on genuine network failure (ECONNREFUSED/ENOTFOUND/ETIMEDOUT/ECONNRESET). A 5xx, timeout-with-response, or other server-side error now re-prompts instead of silently trusting the cached key — a revoked key behind a flapping server no longer keeps working locally. deposium config set api-key <value>now routes through the separate credentials store (chmod 0600 file) rather than the main config, and runs the service-key guardrail first.--jsonmode ondeposium validateforces--on-ambiguous=failby default. An explicit--on-ambiguous=promptwith--jsonis now rejected up front — previously, a TTY-side prompt could pollute the JSON report on stdout.- Numeric option parsers throw actionable errors instead of pushing
NaNto the server.deposium search foo --top-k abcnow reports the flag and value client-side. Applies across ~30 callsites. - Interactive menu:
intelligence > suggestnow prompts for tenant/space (was hardcoded'default'), andevaluate > feedbackcollects real input (was sending placeholder demo data). - SSE chat stream queues multiple
chat_promptevents instead of overwriting; warns when an unhandledchat_promptarrives. - Auth error detection no longer string-matches
ECONNREFUSEDin messages — uses structural error codes (i18n-safe). config.tsplaintext migration checks for{/[before attemptingJSON.parse, so a corrupted-but-coincidentally-parseable ciphertext blob can't be misclassified as plaintext.
Changed (breaking)¶
deposium logs view --tailremoved. The flag was a no-op — the server tool returned a single snapshot whether--tailwas set or not. Use the absence of the flag, which still returns the snapshot.deposium upload-batchno longer accepts--api-key/--api-urlflags. Use the standard precedence:DEPOSIUM_API_KEY/DEPOSIUM_URLenv vars, then config file, then prompt. The undocumentedDEPOSIUM_API_URLenv var is also removed.deposium corpus realtime-evalrenamed toeval-snapshot(alias kept for back-compat). The command was always a one-shot call, never a recurring stream; the new name reflects that. The--intervalflag is the server-side window size, not a poll interval.- Config keys
silent-modeandoutput-formatremoved. They were saved but never read. Use the per-command--silentand--formatflags. The matching env vars (DEPOSIUM_SILENT,DEPOSIUM_OUTPUT) are also retired. evaluate feedback+query-historypayloads use snake_case (user_id,query_id,time_range,include_global) to match the rest of the API.
Internal¶
- New
utils/parsers.tshelpers:parseIntOrThrow,parseOptionalInt,parseFloatOrThrow. - New
client/internals.ts::withRetrycollapses four duplicated retry-on-transient-error loops (callTool,listTools,health,listSpaces, plusauthenticatedRequest). - New
utils/auth.ts::isNetworkDownErrorclassifies validation errors. mcp-client.ts::uploadBatch— multipart/form-data path with sequential reads (replaces the previous JSON+base64 batch).- Tests: 453 passing (was 432); +21 regression tests covering H1, H3, M1, M2, M4, M5, M8.
[1.3.1] - 2026-05-06¶
Fixed¶
- Final scrub of two leftover domain-specific identifiers in
src/client/types.ts(JSDoc example) and a test fixture label. HEAD is now fully neutral.
[1.3.0] - 2026-05-06¶
Added — deposium validate command¶
- New command
deposium validate <dossier_id>— runs the dossier-validation macro end-to-end (N1 per-thematic + N2 cross-document + HITL). Streams 11 SSE events from thevalidate:*namespace, pauses interactively onchat_prompt, uploads missing pieces via the API gateway's/api/v2/files/batch-upload, and resumes via atools/callre-call (Mode A: re-classify after upload — Mode B: structuredhitl_response). See docs/commands/validate.md for the full reference. - Flags:
--level 1|2|both,--on-ambiguous prompt|fail|dump(3-mode subset of chat —pick-firstis omitted because validate emits onlychat_prompt type='form'),--language fr|en,--run-id(resume an existing paused run),--json(silent stream + report fetch to stdout),--verbose(per-document classification and per-requirement N1 verdicts). - New SDK surface (re-exported from the package main entry):
MCPClient.validateDossier(input, handlers)— orchestrates thetools/callSSE loop, transparently driving the Mode A / Mode B resume protocols on everychat_prompt.MCPClient.fetchValidateReport(runId)— fetches the canonical report JSON fromGET /api/v1/reports/<run_id>?format=json. The report is separated from the SSE stream so the stream stays lean (largechat_historyand N2 evidence stay off the wire) and the fetch is idempotent.- Types:
ValidateLevel,OnAmbiguousModeValidate,ValidateToolInput,ValidateChatPrompt,ValidateEvents(everyvalidate:*payload as a tagged union),ValidateReportJson,ValidateStreamHandlers,HitlDecision,HitlResponse, plus typed form-field shapes (ValidateFormFieldSelect,ValidateFormFieldFileUpload,ValidateFormFieldText).
Added — programmatic SDK entry point¶
- New
src/index.tsmodule re-exports the public surface (MCPClient,MCPAuthError, all chat-stream + self-service + validate types). package.jsonmainswitched fromdist/cli.jstodist/index.js, with the CLI binary still wired viabin. Programmatic consumers can nowimport { MCPClient } from '@deposium/cli'without the package triggering CLI argv parsing on import.types: dist/index.d.tsadded so editors find the public types from the package main entry.
Fixed¶
MCPClient.postStream(used by bothchatStreamand the newvalidateDossier) now normalizes ECONNREFUSED to the same friendly "Cannot connect to Deposium API at <baseUrl>" message every other client method emits. Previously a server-down condition surfaced as a rawTypeError: fetch failed. Same fix applied touploadFileForValidateso Mode A uploads during avalidatepause get the same UX. (src/client/mcp-client.ts, src/utils/validate-file-upload.ts)validate --jsonno longer leaks Mode A upload progress lines ([upload] <path>...) onto stdout — they were polluting the JSON report and breaking downstreamjqconsumers. The interactive status logs are suppressed when--jsonis on.
Status¶
This release ships client-side code + unit tests against the frozen
upstream validate:* SSE event contract. The server-side macro that
emits these events lands in a follow-up rollout — end-to-end
integration testing happens once both sides converge. Mock fixtures
mirror the wire contract bit-for-bit, so any contract drift surfaces
in unit tests via the renderer's exhaustiveness check before any
production run.
Tests¶
- 5 new test files plus targeted guards in existing suites:
validate-events.test.ts— 28 tests (renderer per event + silent- verbose toggles + verdict glyph mapping + final pass/fail logic)
validate-hitl-form.test.ts— 17 tests (mode dispatch, everywaiting_fordiscriminant,skipkeyword, file-path validator)validate-file-upload.test.ts— 9 tests (multipart POST, response shape normalization, 401 →MCPAuthError, generic HTTP errors, ECONNREFUSED normalization)validate-dossier.test.ts— 9 tests (single-stream happy path, failure terminal, JSON-RPC envelope shape, Mode A + Mode B resume loops,fetchValidateReport200/404)commands/validate.test.ts— 17 tests (parsers + arg forwarding--json+ exit-code semantics)
- +1 guard in
mcp-client.test.ts > chatStreamfor ECONNREFUSED normalization. - 348 → 429 tests, all green. Lint clean (only the pre-existing
mcp-client.tsfile-size warning), typecheck clean.
Documentation¶
docs/commands/validate.md— new command reference (flags, examples, exit codes, SSE event vocabulary, report fetch, programmatic use).docs/guides/on-ambiguous-flag.md— extended to cover validate's 3-mode subset and the Mode A / Mode B resume protocol (distinct from chat's/api/agent-resume).docs/guides/best-practices.md— new "Validate a dossier" workflow recipe with both interactive and CI patterns.README.md— command index updated (24 entries;validateadded).
[1.1.7] - 2026-04-25¶
Added — Service-key guardrail¶
- The CLI now rejects
dep_svc_*API keys at startup with an actionable message. Service-keys are issued for server-side inter-process authentication only; the CLI is invoked by a human and must use a user-key (dep_live_*/dep_test_*). The check fires for env-var, stored credential, and interactive-prompt paths; rejection happens before any HTTP call. (src/utils/auth.ts)
Source-aware error message points the user at the exact place to fix:
DEPOSIUM_API_KEY env var, ~/.deposium/credentials, or the prompt.
Changed¶
MCPAuthErrorCodeenum gains'accept_invalid'to mirror the canonical 9-code list shipped by the upstream AUTH_ERROR contract. The CLI itself never triggers this code (it setsAccept: application/json, text/event-streamon every request), but exporting the full enum keeps SDK consumers in sync with the upstream contract.
Tests¶
- 8 new tests in
auth.test.ts: env-vardep_svc_*rejection (pre-server-call), storeddep_svc_*rejection, prompt-validate rejecting pasted service-keys, and 5 unit tests forassertNotServiceKey()covering all sources + error-message contents. - 340 → 348 tests, all green.
[1.1.6] - 2026-04-25¶
Changed (internal refactor — no user-visible changes)¶
src/client/mcp-client.tssplit into 4 files for maintainability:src/client/types.ts— all public type/interface declarations (MCPTool,MCPSpace,MCPDocument,SSE*, etc.)src/client/auth-error.ts—MCPAuthError,MCPAuthErrorCode,buildAuthErrorsrc/client/internals.ts— retry classification, request-id generation, axios-error normalization helperssrc/client/mcp-client.ts—MCPClientclass onlymcp-client.tsre-exports every moved symbol so existing imports (import { MCPTool } from './client/mcp-client') keep working without changes. The new files are an additional import surface, not a breaking one.MCPClient.authenticatedRequestcyclomatic complexity reduced from 21 to under the 15 ceiling by extractingdispatchHttp(HTTP method dispatch) andthrowForKnownAxiosError(ECONNREFUSED / 401 / 404 mapping) helpers.MCPClient.parseSSEStreamno longer uses a non-null assertion onresponse.body— narrowed via an early-throw check.
Tests¶
- New "Wire format guard" describe block in
mcp-client.test.ts— pins HTTP method + path + body shape for all 13 public client methods (callTool,listSpaces,listDocuments,getDocument,deleteDocument,listApiKeys,createApiKey,deleteApiKey,rotateApiKey,getApiKeyUsage, plus query-string edge cases). Refactor was performed after this guard landed — server contract preserved bit-for-bit. - 328 → 340 tests, all green.
[1.1.5] - 2026-04-25¶
Fixed¶
ensureAuthenticated()now honorsDEPOSIUM_API_KEYenv var as a fast path, mirroringgetConfig().apiKeyresolution priority. Previously the helper checked only the stored credential, so CI/CD usage with env-only config triggered the interactive prompt despite the key being available. (src/utils/auth.ts)
Changed¶
deposium auth statusnow displays the active key source —DEPOSIUM_API_KEY env var(with a "overrides stored credentials" hint) orstored credentials. Clarifies which credential is in effect when both are set.docs/commands/auth.mdrewritten — was stale (Feb 2025 revision, referenced the legacy~/.deposium/config.jsonAPI key path before credentials store separation, wrong header caseX-Api-Keyinstead ofX-API-Key).docs/guides/configuration.md— new "Resolution Priority" section under Authentication clarifying env-var-wins behavior and theauth logoutcaveat (env var is not unset by logout).
Tests¶
- 4 new tests in
auth.test.tscovering the env-var fast path: short-circuit, whitespace trimming, env-over-stored priority, empty-env fallback to stored. - 324 → 328 tests, all green.
[1.1.3] - 2026-04-25¶
Added — Structured MCP auth errors¶
The CLI now exposes structured authentication errors when the server returns
the new /api/cli/mcp 401 shape (deposium_API commit HASH):
{ "error": "MCP Auth Error", "message": "Invalid API key format",
"error_code": "format_invalid", "hint": "...", "docs": "..." }
- New exported class
MCPAuthError extends ErrorwitherrorCode,hint,docsUrlproperties — switch onerrorCodefor stable programmatic handling. - New exported type
MCPAuthErrorCode— stable enum:key_missing,format_invalid,key_invalid,permission_denied,rate_limited,auth_unavailable,auth_timeout,auth_internal_error,unknown. - New helper
buildAuthError(responseData)— internal, used in 5 401 handlers (callTool,listTools,health,listSpaces,authenticatedRequest, SSEchatStream/resumeAgent). ReturnsMCPAuthErrorfor structured responses, falls back to plainErrorfor legacy shapes. - Error
messageincludeshint(prefixed 💡) anddocsURL (📖) — printable as-is for end-user output. docs/development/error-codes.md— full reference + switch-pattern example.
Changed¶
- 5 inline 401 handlers in
src/client/mcp-client.tsconsolidated to usebuildAuthError()— was duplicated 5x with slightly different fallbacks.
Tests¶
- 4 new tests in
mcp-client.test.tscovering structured/legacy/SSE paths - 320 → 324 tests, all green
[1.1.2] - 2026-04-25¶
Removed¶
- Internal planning docs that had been checked in (not relevant to consumers).
[1.1.1] - 2026-04-25¶
Added¶
docs/guides/best-practices.md— new "Self-service Workflows" section with 4 end-to-end recipes (onboarding, API key lifecycle, inventory cleanup, pre-flight health check)
[1.1.0] - 2026-04-25¶
Added — Self-service management (3 new commands)¶
deposium space — workspace management¶
space list(aliasls) —GET /api/spacesspace show <id>(aliasinfo) — filter list client-side (server has noGET /api/spaces/:idyet)space create <name> [--description](aliasnew) — MCPdeposium_adminmacro withoperation=create_space(experimental — depends on MCP layer accepting CLI keys)
deposium files — document management¶
files list [--space <id>] [--limit N] [--offset N](aliasls) —GET /api/v1/documents/files show <id>(aliasinfo) —GET /api/v1/documents/:idfiles check <id>(aliasvalidate) — MCPcheck_filetool (experimental, same caveat asspace create)files rm <id>(aliasdelete) —DELETE /api/v1/documents/:idwith inquirer confirmation (use-yto skip)
deposium api-keys — server-side API key management (plan-gated)¶
api-keys list(aliasls) —GET /api/api-keysapi-keys create -n <name> [-s scopes] [-t tier](aliasnew) —POST /api/api-keyswith one-time secret displayapi-keys delete <id>(aliasrm) —DELETE /api/api-keys/:idwith confirmationapi-keys rotate <id>—POST /api/api-keys/:id/rotatewith confirmation + new-secret displayapi-keys usage <id>—GET /api/api-keys/:id/usage
Added — Client API surface¶
- 5 new public interfaces in
src/client/mcp-client.ts:MCPSpace,MCPDocument,MCPDocumentDetail,MCPDocumentPagination,MCPApiKey,MCPApiKeyCreated,MCPApiKeyUsage - 9 new client methods:
listSpaces,listDocuments,getDocument,deleteDocument,listApiKeys,createApiKey,deleteApiKey,rotateApiKey,getApiKeyUsage - Internal
authenticatedRequesthelper that factorizes the retry-on-transient-errors loop + 401/404 error mapping (used by all new methods; older inline-retry methods kept as-is for now)
Added — Testing¶
- 50 new tests across
space.test.ts(14),files.test.ts(19),api-keys.test.ts(17) - Full suite: 270 → 320 tests in 27 test files
vitest.config.tswithtestTimeout: 15000(vitest 4.x default of 5s was tight under load)
Added — Documentation¶
docs/commands/space.md,docs/commands/files.md,docs/commands/api-keys.md— full per-command references- README +
docs/commands/README.mdupdated for the 3 new commands - ROADMAP.md "Self-service management" section + v1.2 candidates moved (
files download, connector commands, etc.)
[1.0.4] - 2026-04-25¶
Added — Test expansion¶
- Tests:
src/__tests__/chat-history.test.ts— 28 new unit tests (was 0% covered, now 100%) - Tests: 12 new tests in
auth.test.tsforensureAuthenticated+promptApiKey(auth.ts: 26% → ~100%) - Tests: 8 new tests in
chat-hitl.test.tsforrunChatTurnHITL orchestration (chat.ts: 20% → 47%)
Changed¶
- Testing: Suite total 156 → 204 tests
- Coverage: Statements 72% → 76% globally
[1.0.3] - 2026-04-25¶
Added¶
- Helper:
resolveTenantSpace(options, config)exported fromcommand-helpers.ts— replaces 22 duplicated lines across 8 commands - Docs: JSDoc on 8 public exports of
src/utils/config.ts(setConfig, deleteConfig, resetConfig, getConfigPath, setApiKey, deleteApiKey, hasApiKey, getCredentialsPath) - Docs: JSDoc block on re-exports in
command-helpers.ts(isErrorWithCode, hasErrorCauseWithCode, getErrorMessage)
Changed¶
- Type safety:
MCPClient.callToolargs type tightened (Record<string, any>→Record<string, unknown>); removedeslint-disablecomment - Refactor: 8 commands (benchmark, corpus, evaluate, graph, intelligence, leanrag, mermaid, search) now use
resolveTenantSpacehelper - Comments: Clarified intent of try/catch-as-control-flow in benchmark.ts and upload-batch.ts
- Docs: CLAUDE.md sync — version bump, test count, removed stale
logger.tsreference, addedchat-history.ts
[1.0.2] - 2026-04-25¶
Changed¶
- Dependencies: Updated 9 packages within semver range (no breaking changes)
- @typescript-eslint/* 8.56.1 → 8.59.0
- @vitest/coverage-v8, vitest 4.0.18 → 4.1.5
- dotenv 17.3.1 → 17.4.2
- inquirer 13.3.0 → 13.4.2
- lint-staged 16.3.1 → 16.4.0
- ora 9.3.0 → 9.4.0
- prettier 3.8.1 → 3.8.3
Fixed¶
- 3 moderate vulnerabilities resolved via
npm audit fix: - axios — Cloud Metadata Exfiltration via Header Injection Chain (GHSA-fvcv-3m26-pcqx)
- brace-expansion — Zero-step ReDoS (GHSA-f886-m6hf-6m8v)
- follow-redirects — Auth headers leaked to cross-domain redirects (GHSA-r4q5-vmmm-2653)
[1.0.1] - 2026-04-24¶
Added — First public open-source release on npm¶
Phase I Item 5 — HITL chat (Human-In-The-Loop)¶
- HITL:
chat_promptSSE event type +onChatPromptcallback inMCPClient(src/client/mcp-client.ts) - HITL:
MCPClient.resumeAgent(url, correlationId, { value | values })— POST to/api/agent-resume, streams the continuation - HITL:
deposium chat --on-ambiguous=<prompt|fail|dump|pick-first>(TTY-aware default) - HITL:
inquirerpicker rendering fortype='choice'andtype='confirm'prompts - Tests: 14 tests in
chat-hitl.test.ts(mode dispatch, TTY defaults, resumeAgent POST shape, SSE chat_prompt parsing) - Docs:
docs/guides/on-ambiguous-flag.md— user-facing policy reference
Security hardening¶
- Security: Config encryption via
Conf({ encryptionKey })with AES-256-GCM (scryptSync machine-derived key) - Security: API key isolated in separate
~/.deposium/credentialsfile (encrypted, chmod 0600) - Security:
enforceUrlSecurity()— non-localhost HTTP connections refused by default - Security:
--insecureglobal flag +DEPOSIUM_INSECUREenv var for override - Security: Config directory chmod 0700, config files chmod 0600
- Security: Automatic migration of plaintext config to encrypted (backup
.plaintext.bak) - Networking: Chat streams routed via Edge Runtime gateway (
/chat-stream) with auth + rate-limiting - Networking:
DEPOSIUM_EDGE_URLenv var +edgeUrlconfig key (defaultlocalhost:9000) - Networking:
--directflag on chat command for dev bypass (with warning) - Networking: 429 rate-limit handling with Retry-After header and tier info
- Deprecation:
DEPOSIUM_MCP_DIRECT_URL/mcpDirectUrlmarked deprecated (useDEPOSIUM_EDGE_URL)
Open-source publication plumbing¶
- Project: LICENSE (MIT), SECURITY.md, CODE_OF_CONDUCT.md
- Project: GitHub Actions
publish.yml— npm publish with provenance on tagv*.*.* - Project: package.json
files(scope tarball),publishConfig.access=public,homepage,bugs - Project: Discord community link in security/conduct contacts
- Cleanup: Removed cross-repo references to private
deposium_API; rewrote git history via filter-repo to scrub names + paths from earlier commits
Changed¶
- Dependencies: Major upgrades — conf 13→15, glob 11→13, mime-types 2→3, inquirer 12→13
- Dependencies: Patch/minor updates across the board
- Dependencies: Security overrides — minimatch >=10.2.4 (ReDoS), rollup >=4.59.0 (path traversal)
- Node.js: Minimum version bumped from 20 to 22 (engines field + CI)
- Code quality: All ESLint warnings resolved (67 → 0),
||→??for nullish defaults - Code quality: Removed dead logger module (344 LOC)
- Tests: 142 tests (was 137).
Fixed¶
- CVE fix: minimatch ReDoS (CVE-2026-26996)
- CVE fix: rollup path traversal
- CVE fix: axios
__proto__DoS (GHSA-43fc-jf86-j433) --silentno longer suppresses security warnings/errors
[1.0.0] - 2024-12-27¶
Added¶
- Core Commands
- Authentication (
deposium auth login,deposium auth logout) - Configuration management (
deposium config set/get/delete/reset) - Health check (
deposium health) -
Tools listing (
deposium tools) -
Search Commands
deposium search- Multi-mode search (vector, FTS, fuzzy, graph)deposium graph- Knowledge graph operations (7 subcommands)-
deposium corpus- Corpus statistics and monitoring (7 subcommands) -
AI Commands
deposium compound- Compound AI reasoningdeposium intelligence- Intelligence analysisdeposium dspy- DSPy pipeline executiondeposium leanrag- LeanRAG operationsdeposium chat- Interactive AI chat mode-
deposium interactive- REPL interactive mode -
Data Commands
deposium upload-batch- Batch document uploadsdeposium evaluate- RAG evaluationdeposium benchmark- Model benchmarking (list, run, corpus, compare)deposium duckdb- DuckDB integrationdeposium mermaid- Diagram generationdeposium query-history- Query trackingdeposium logs- Server log management-
deposium ui- Interactive dashboards -
Infrastructure
- 137 unit/integration tests (Vitest)
- Structured logging with levels
- Retry logic with exponential backoff
- Graceful shutdown handlers
- HTTPS validation in production
- CI/CD with GitHub Actions
[0.1.0] - 2024-10-01¶
Added¶
- Initial Release
- Authentication (
deposium login,deposium logout) - Configuration management (
deposium config) - MCP tool invocation via HTTP
- Multiple output formats (json, table, markdown)
Links¶
- README - Installation and usage guide
- ROADMAP - Future plans and best practices
- Contributing - Contribution guidelines