curu-memory 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- curu_memory-0.2.0/.gitignore +16 -0
- curu_memory-0.2.0/CHANGELOG.md +78 -0
- curu_memory-0.2.0/LICENSE +21 -0
- curu_memory-0.2.0/PKG-INFO +723 -0
- curu_memory-0.2.0/README.md +704 -0
- curu_memory-0.2.0/pyproject.toml +79 -0
- curu_memory-0.2.0/src/curu_memory/__init__.py +3 -0
- curu_memory-0.2.0/src/curu_memory/__main__.py +1032 -0
- curu_memory-0.2.0/src/curu_memory/access.py +562 -0
- curu_memory-0.2.0/src/curu_memory/audit.py +63 -0
- curu_memory-0.2.0/src/curu_memory/auth.py +41 -0
- curu_memory-0.2.0/src/curu_memory/browser.py +396 -0
- curu_memory-0.2.0/src/curu_memory/config.py +308 -0
- curu_memory-0.2.0/src/curu_memory/embedders.py +118 -0
- curu_memory-0.2.0/src/curu_memory/errors.py +96 -0
- curu_memory-0.2.0/src/curu_memory/indexing.py +440 -0
- curu_memory-0.2.0/src/curu_memory/media.py +199 -0
- curu_memory-0.2.0/src/curu_memory/oidc.py +437 -0
- curu_memory-0.2.0/src/curu_memory/okf.py +271 -0
- curu_memory-0.2.0/src/curu_memory/ports.py +344 -0
- curu_memory-0.2.0/src/curu_memory/render.py +61 -0
- curu_memory-0.2.0/src/curu_memory/retrieval.py +570 -0
- curu_memory-0.2.0/src/curu_memory/server.py +272 -0
- curu_memory-0.2.0/src/curu_memory/store_sqlite.py +551 -0
- curu_memory-0.2.0/tests/__init__.py +0 -0
- curu_memory-0.2.0/tests/conftest.py +146 -0
- curu_memory-0.2.0/tests/contract/__init__.py +0 -0
- curu_memory-0.2.0/tests/contract/test_index_store.py +307 -0
- curu_memory-0.2.0/tests/contract/test_store_spaces.py +95 -0
- curu_memory-0.2.0/tests/e2e/__init__.py +0 -0
- curu_memory-0.2.0/tests/e2e/test_browser.py +320 -0
- curu_memory-0.2.0/tests/e2e/test_browser_media.py +324 -0
- curu_memory-0.2.0/tests/e2e/test_cli_access.py +600 -0
- curu_memory-0.2.0/tests/e2e/test_cli_browse.py +58 -0
- curu_memory-0.2.0/tests/e2e/test_cli_index.py +225 -0
- curu_memory-0.2.0/tests/e2e/test_cli_search.py +259 -0
- curu_memory-0.2.0/tests/e2e/test_concept_tools.py +143 -0
- curu_memory-0.2.0/tests/e2e/test_http_agents.py +305 -0
- curu_memory-0.2.0/tests/e2e/test_http_oidc.py +251 -0
- curu_memory-0.2.0/tests/e2e/test_leak_paths.py +253 -0
- curu_memory-0.2.0/tests/e2e/test_no_secrets.py +90 -0
- curu_memory-0.2.0/tests/e2e/test_search_by_media_tool.py +227 -0
- curu_memory-0.2.0/tests/e2e/test_search_tool.py +107 -0
- curu_memory-0.2.0/tests/e2e/test_stdio_process.py +131 -0
- curu_memory-0.2.0/tests/e2e/test_transports.py +85 -0
- curu_memory-0.2.0/tests/fixtures/audio/1272-128104-0008.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/1272-128104-0010.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/1272-135031-0003.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/1272-135031-0004.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/1272-135031-0015.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/1272-135031-0023.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/README.md +6 -0
- curu_memory-0.2.0/tests/fixtures/audio/query-1272-128104-0008.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/query-1272-128104-0010.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/query-1272-135031-0003.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/query-1272-135031-0004.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/query-1272-135031-0015.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/query-1272-135031-0023.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/tiny.flac +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/tiny.mp3 +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/tiny.ogg +0 -0
- curu_memory-0.2.0/tests/fixtures/audio/tiny.wav +0 -0
- curu_memory-0.2.0/tests/fixtures/audio_eval.toml +52 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/bad-yaml.md +5 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/dup/same-name.md +4 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/link-no-kind.md +4 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/link-unknown-kind.md +4 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/no-description.md +5 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/no-front-matter.md +1 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/same-name.md +4 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/valid.md +6 -0
- curu_memory-0.2.0/tests/fixtures/bad_corpus/wiki-link.md +4 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/README.md +8 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-calibration-delta-without-its-coverage-is-a-claim-the-reader-cannot-audit.md +160 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-calibration-run-scored-an-embellished-phrase-a-template-header-and-numbered-criteria.md +264 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-check-nobody-has-executed-is-not-a-check-that-works.md +176 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-cold-load-cut-by-the-proxy-keeps-loading-behind-the-auth-gate-and-api-ps-cannot-say-otherwise.md +193 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-crop-check-that-reports-the-subject-absent-caps-nothing-when-the-box-is-grounded.md +276 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-declared-manifest-filename-nothing-checks-is-a-rented-pod.md +125 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-declared-pin-is-not-applied-until-something-converges-to-it.md +166 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-documented-procedure-is-a-capability-that-does-not-exist.md +170 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-dropped-connection-is-not-an-answer-so-it-is-not-a-permanent-failure.md +221 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-grounded-box-off-its-subject-is-the-models-aim-not-the-coordinate-mapping.md +164 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-grounding-question-that-states-the-place-gets-the-place-back.md +265 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-hermetic-test-that-races-the-machine-decides-nothing.md +264 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-hermetic-tests-isolation-stops-at-the-process-boundary.md +174 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-holder-that-cannot-serve-is-not-a-holder.md +177 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-keep-set-derived-by-its-own-rule-deletes-the-file-it-meant-to-keep.md +110 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-manifest-family-name-is-not-an-atom-family-name.md +258 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-pairwise-judge-is-qualified-against-human-labels-in-both-orders-before-a-campaign-trusts-it.md +440 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-pod-curu-can-name-is-terminated-by-id-not-found-by-listing.md +110 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-pod-that-outlives-its-process-needs-a-third-word-for-who-owns-it.md +156 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-positive-control-that-passes-is-not-evidence-the-judge-can-finish-the-run.md +297 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-pull-request-body-closes-an-issue-you-only-meant-to-name.md +168 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-reasoning-phase-is-charged-to-the-same-output-budget-so-an-empty-answer-is-a-budget-symptom.md +268 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-record-that-names-a-cause-its-own-evidence-contradicts.md +179 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-repair-of-a-run-whose-pod-is-gone-rents-its-family-like-generate.md +210 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-reporting-path-is-handed-liveness-never-left-to-infer-it.md +167 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-requirement-that-says-explicit-can-ship-inferred-and-pass-every-test.md +339 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-research-conclusion-is-a-record-checked-against-the-trace-not-prose.md +123 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-role-binds-when-its-work-runs-not-when-the-plane-is-built.md +145 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-role-model-still-arriving-is-not-a-model-that-is-unavailable.md +183 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-rubric-scored-one-image-at-a-time-saturates-so-compare-pairs-blind-in-both-orders.md +185 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-rule-stated-twice-is-a-rule-that-will-disagree.md +171 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-run-journal-is-a-projection-of-one-file-per-run.md +215 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-run-time-union-is-invisible-to-every-resolver-that-does-not-consult-it.md +339 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-runpod-volume-reports-the-cluster-not-the-volume.md +271 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-scene-is-not-a-controlled-base-until-its-rubric-and-prompt-are-shared.md +153 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-second-entrypoint-does-not-inherit-a-fix-and-nothing-says-so.md +313 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-specialist-model-that-falls-back-to-the-workstation-is-not-slow-it-is-unusable.md +275 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-structural-usability-criterion-cannot-tell-whether-a-model-looked-at-the-image.md +132 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-subgraph-hides-the-nodes-a-workflow-really-needs.md +92 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-substring-substantiation-check-cannot-tell-a-quote-from-an-echo.md +190 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-usable-rate-collapses-silent-vacuity-with-loud-constraint-violation.md +113 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-word-from-the-prose-is-not-a-value-in-the-enum.md +214 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/a-worktree-venv-repoint-hijacks-the-main-checkouts-editable-install.md +281 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/adr-061s-family-gate-covers-only-the-curated-topology-path.md +202 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/after-provisioning-a-run-is-unreported-not-unbounded.md +413 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-api-workflow-does-not-announce-itself-in-its-name.md +119 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-atom-without-a-manifest-is-a-family-that-can-be-chosen-and-never-served.md +158 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-empty-artefact-can-be-an-answer-not-a-gap-to-fill.md +219 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-idle-parent-is-not-a-stalled-run.md +227 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-index-pass-must-record-and-verify-the-revision-it-read.md +213 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-interrupted-ollama-pull-resumes-so-a-stalled-transfer-is-worth-retrying.md +264 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/an-unreachable-backend-is-not-an-empty-one-so-preflight-before-reading-inventory.md +88 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/analyse-intent-context-window-gap.md +286 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/analyse-intent-failure-observability-gap.md +140 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/anatomy-crop-exemplars-are-operator-labelled-balanced-and-never-the-image-checked.md +126 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/anima-qwen-image.md +356 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/anna-frozen.md +104 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/architecture-family-recognition-is-filename-pattern-only.md +178 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/artifact-presence-confidence-is-not-real-calibration.md +165 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/artifact-presence-style-classification-prestep-dead-end.md +90 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/artifact-presence-stylization-wording-dead-end.md +101 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/bounding-a-comfyui-generation-on-silence-not-on-elapsed-time.md +502 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/cheap-deterministic-gate-shipped-inert.md +188 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/checkpoint-larger-than-vram-degrades-not-fails.md +193 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/chroma.md +434 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/comfyui-rescans-model-directories-by-mtime.md +105 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/comfyui-textgen-node.md +327 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/comfyui-upgrade-reaches-latest-not-a-named-version.md +198 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/comfyui-workflow-templates-catalogue.md +145 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/ae-vae.md +53 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/anima-turbo-checkpoint.md +47 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/anima-turbo-lora.md +44 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/chroma-hyper-flash-turbo.md +36 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/chroma1-hd-fp8mixed.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/clip-g-hidream.md +19 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/clip-l-hidream.md +23 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/flux2-dev-fp8mixed.md +22 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/flux2-vae.md +30 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/gemma-2-2b-fp16.md +24 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/gemma-3-12b-it-fp4-mixed.md +24 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/hidream-ae-vae.md +72 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/hidream-i1-dev-bf16.md +22 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/hunyuan-image-2.1-vae-fp16.md +23 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/hunyuanimage2.1-bf16.md +22 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/krea2-turbo-checkpoint.md +42 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/krea2-turbo-lora-rank64.md +196 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/krea2-turbo-projector-lora.md +106 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/llama-3.1-8b-instruct-fp8-scaled.md +20 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/ltx23-distilled-lora.md +58 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/mistral-3-small-flux2-fp8.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/omnigen2-fp16.md +22 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-2.5-vl-7b-fp8-scaled.md +25 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-2.5-vl-7b.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-2.5-vl-fp16.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-3-06b-base.md +25 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-3-4b.md +24 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-3-8b-fp8mixed.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-image-fp8-e4m3fn.md +21 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen-image-vae.md +34 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/qwen3vl-4b-fp8-scaled.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/t5xxl-fp8-e4m3fn-scaled.md +30 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/umt5-xxl-fp8-e4m3fn-scaled.md +33 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-a14b-moe-high-noise-diffusion-model.md +28 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-a14b-moe-low-noise-diffusion-model.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-lightx2v-high-noise-lora.md +61 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-lightx2v-low-noise-lora.md +65 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-ti2v-5b-diffusion-model.md +24 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-vae-dual-expert.md +27 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/wan22-vae-unified.md +26 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/components/z-image-turbo-bf16.md +25 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/configured-versus-provisioned-model-cross-check.md +294 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/content-frame-fraction-low-key-investigation.md +268 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/corpus-replay-artifact-presence-yield.md +94 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/could-not-do-it-and-nothing-to-do-returned-the-same-value.md +208 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/decompose-shots-native-transport-gap.md +336 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/deterministic-gate-opacity-and-best-attempt-selection-bug.md +147 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/dry-run-provisioning-claims-come-from-the-live-path.md +210 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/eager-role-model-resolution-rents-a-pod-before-any-backend-exists.md +576 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/fft-psd-periodicity-halftone-detector-dead-end.md +177 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/first-last-frame-video-conditioning.md +230 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/flux-klein.md +283 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/flux2.md +747 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/giving-a-rented-pod-back-is-defence-in-depth.md +173 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/graph-prompt-refiner-content-fidelity-gap.md +397 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/hidream.md +246 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/hpsv3-is-an-uncalibrated-second-preference-instrument.md +323 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/hunyuan-image.md +159 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/illustrious.md +57 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/installed-from-a-working-copy-drifts-from-its-source.md +168 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/karras-and-exponential-ignore-flux2s-shift-so-flux2-declares-its-known-good-schedulers.md +271 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/knowledge-is-three-file-tiers-and-the-database-is-only-their-projection.md +145 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/krea2.md +365 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/ltx2-3.md +193 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/lumina2.md +139 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/manifest-tables-must-be-read-through-the-include-chain.md +165 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/minimax-h3.md +604 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/omnigen2.md +135 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/one-backend-per-selection-is-not-one-per-run-so-nothing-stopped-a-second-comfyui-backend.md +129 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/pinning-the-base-image-does-not-pin-what-the-build-installs.md +185 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/pixel-quality-gate-content-class-generalization.md +328 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/pod-volume-must-be-sized-against-the-inherited-llm-set.md +165 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/ponyxl.md +48 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/prompt-refiner-draft-quality-gap.md +469 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/prompt-refiner-loop-convergence-gap.md +207 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/provision-model-civitai-multi-file-version-silent-wrong-pick.md +118 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/quantised-embedding-serving-llama-server.md +571 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/qwen-image.md +126 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/rank-fusion-starves-the-single-best-answer.md +162 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/reported-success-beside-real-failure.md +443 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/revision-seed-patch-mechanism.md +136 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/rife-frame-interpolation.md +116 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/runpod-comfyui-image-missing-zstd-breaks-ollama-install.md +118 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/sam3-multi-entity-disambiguation-limit.md +241 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/sam3-text-grounding-is-the-primary-grounder-the-vlm-its-fallback.md +292 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/saracen9-style-classification-gate-positive-signal.md +114 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/sddb-benchmark-campaign.md +2906 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/sddb-video-benchmark-fixtures.md +159 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/seedvr2-rife-combined-pipeline.md +129 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/seedvr2-upscale.md +178 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/shared-gpu-ollama-comfyui-memory-contention.md +1175 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/small-decision-encoders-do-not-replace-curus-llm-judgement-calls.md +141 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/some-models-ship-thinking-as-a-separate-tag-so-think-false-cannot-switch-it-off.md +204 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/streaming-does-not-cover-the-wait-for-the-first-byte-and-the-runpod-proxy-cuts-it-at-100s.md +157 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/streaming-ollama-pull-through-runpod-proxy-and-auth-gate.md +495 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/structured-output-field-order-required-fields-affect-decoding-quality.md +255 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/style-aware-artifact-gate-shipped-inert.md +104 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/testcontainers-ephemeral-port-forwarding-failure-mimics-a-red-suite.md +167 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/the-embedder-that-served-a-command-is-not-the-placement-its-config-names.md +260 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/the-glimmer-judge-answered-each-pair-with-one-position-in-both-orders.md +380 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/the-log-that-settles-a-wedge-was-truncated-by-the-next-start.md +162 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/the-second-sigterm-is-the-window-the-first-one-opened.md +215 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/the-three-saracen9-models-are-two-27b-siblings-and-a-9b.md +120 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/the-vlm-branch-measured-capture-provenance-where-the-cheap-gate-measured-style.md +147 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/timeout-discards-the-only-evidence-there-is.md +113 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/two-files-can-claim-one-atom-pairing-filename.md +116 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/two-seed-unanimity-is-not-evidence-and-more-seeds-make-it-credit-less.md +187 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/video-frame-defect-gate-fresh-generation-stress-test.md +154 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/wan22-5b.md +143 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/wan22-a14b-moe.md +118 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/wd14-tagging-structural-malformation-discrimination.md +1857 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/whole-corpus-reconciliation-is-incoherent-under-concurrency.md +140 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/workflow-planner-emitted-no-patches-because-the-field-was-optional.md +439 -0
- curu_memory-0.2.0/tests/fixtures/curu_concepts/z-image.md +83 -0
- curu_memory-0.2.0/tests/fixtures/image_eval.toml +46 -0
- curu_memory-0.2.0/tests/fixtures/images/blue-circle.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/checkerboard.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/green-triangle.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/not-an-image.png +1 -0
- curu_memory-0.2.0/tests/fixtures/images/query-blue-circle.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/query-checkerboard.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/query-green-triangle.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/query-rainbow-stripes.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/query-red-square.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/query-sunset.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/rainbow-stripes.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/red-square.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/sunset.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/tiny.jpg +0 -0
- curu_memory-0.2.0/tests/fixtures/images/tiny.png +0 -0
- curu_memory-0.2.0/tests/fixtures/images/tiny.webp +0 -0
- curu_memory-0.2.0/tests/fixtures/meaning_eval.toml +42 -0
- curu_memory-0.2.0/tests/fixtures/search_eval.toml +83 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/.obsidian/workspace.md +1 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/README.md +3 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/alpha-family.md +26 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/alpha-turbo.md +11 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/cfg-finding.md +10 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/components/alpha-vae.md +7 -0
- curu_memory-0.2.0/tests/fixtures/small_corpus/sdxl_base_1.0.md +11 -0
- curu_memory-0.2.0/tests/fixtures/video/README.md +6 -0
- curu_memory-0.2.0/tests/fixtures/video/blue-circle-grows.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/checkerboard-flashes.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/green-triangle-turns.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/query-blue-circle-grows.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video/query-checkerboard-flashes.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video/query-green-triangle-turns.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video/query-rainbow-scrolls.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video/query-red-square-moves.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video/query-sun-sets.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video/rainbow-scrolls.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/red-square-moves.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/sun-sets.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/tiny.mkv +0 -0
- curu_memory-0.2.0/tests/fixtures/video/tiny.mov +0 -0
- curu_memory-0.2.0/tests/fixtures/video/tiny.mp4 +0 -0
- curu_memory-0.2.0/tests/fixtures/video/tiny.webm +0 -0
- curu_memory-0.2.0/tests/fixtures/video_eval.toml +46 -0
- curu_memory-0.2.0/tests/integration/__init__.py +0 -0
- curu_memory-0.2.0/tests/integration/conftest.py +245 -0
- curu_memory-0.2.0/tests/integration/test_audio_limit.py +88 -0
- curu_memory-0.2.0/tests/integration/test_audio_query_limit.py +151 -0
- curu_memory-0.2.0/tests/integration/test_image_limit.py +88 -0
- curu_memory-0.2.0/tests/integration/test_image_query_limit.py +151 -0
- curu_memory-0.2.0/tests/integration/test_rauthy.py +232 -0
- curu_memory-0.2.0/tests/integration/test_real_embedder.py +42 -0
- curu_memory-0.2.0/tests/integration/test_similarity_limit.py +87 -0
- curu_memory-0.2.0/tests/integration/test_video_limit.py +88 -0
- curu_memory-0.2.0/tests/integration/test_video_query_limit.py +151 -0
- curu_memory-0.2.0/tests/support/__init__.py +0 -0
- curu_memory-0.2.0/tests/support/fake_issuer.py +178 -0
- curu_memory-0.2.0/tests/support/http_server.py +47 -0
- curu_memory-0.2.0/tests/unit/__init__.py +0 -0
- curu_memory-0.2.0/tests/unit/test_access.py +316 -0
- curu_memory-0.2.0/tests/unit/test_adr_019.py +73 -0
- curu_memory-0.2.0/tests/unit/test_audit.py +68 -0
- curu_memory-0.2.0/tests/unit/test_auth.py +42 -0
- curu_memory-0.2.0/tests/unit/test_cli_help.py +70 -0
- curu_memory-0.2.0/tests/unit/test_config.py +365 -0
- curu_memory-0.2.0/tests/unit/test_embedder_http.py +159 -0
- curu_memory-0.2.0/tests/unit/test_embedders.py +61 -0
- curu_memory-0.2.0/tests/unit/test_errors.py +45 -0
- curu_memory-0.2.0/tests/unit/test_fusion.py +63 -0
- curu_memory-0.2.0/tests/unit/test_index_determinism.py +21 -0
- curu_memory-0.2.0/tests/unit/test_indexing.py +182 -0
- curu_memory-0.2.0/tests/unit/test_indexing_images.py +415 -0
- curu_memory-0.2.0/tests/unit/test_media.py +300 -0
- curu_memory-0.2.0/tests/unit/test_oidc.py +225 -0
- curu_memory-0.2.0/tests/unit/test_okf.py +119 -0
- curu_memory-0.2.0/tests/unit/test_okf_faults.py +44 -0
- curu_memory-0.2.0/tests/unit/test_packaging.py +52 -0
- curu_memory-0.2.0/tests/unit/test_prompts.py +38 -0
- curu_memory-0.2.0/tests/unit/test_readme.py +193 -0
- curu_memory-0.2.0/tests/unit/test_release_check.py +236 -0
- curu_memory-0.2.0/tests/unit/test_render.py +83 -0
- curu_memory-0.2.0/tests/unit/test_retrieval.py +669 -0
- curu_memory-0.2.0/tests/unit/test_search_eval.py +89 -0
- curu_memory-0.2.0/tests/unit/test_spaces.py +50 -0
- curu_memory-0.2.0/tests/unit/test_store_threads.py +55 -0
- curu_memory-0.2.0/tests/unit/test_store_v1.py +45 -0
- curu_memory-0.2.0/tests/unit/test_units.py +47 -0
- curu_memory-0.2.0/tests/unit/test_workflows.py +190 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The project uses [Semantic Versioning](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [0.2.0] - 2026-11-01
|
|
8
|
+
|
|
9
|
+
This is the first release on PyPI. Version 0.1.0 was not published.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- The CI workflow runs the quality gates on each pull request and each push to `main`, in the job `Quality gates`.
|
|
14
|
+
- The release workflow: a tag `vX.Y.Z` on `main` starts it. It checks the tag, the CI result, the version and the changelog section. Then it makes the GitHub Release and uploads to PyPI with trusted publishing.
|
|
15
|
+
- ADR-019: curu uses curu-memory as a library, through the names in `__all__` only. It maps curu's retrieval ports and scopes, and it gives the version policy below 1.0.
|
|
16
|
+
- Agents with grants: `curu-memory access agent add|remove`, `access grant` and `access revoke`. An agent reads only the spaces of its live grants, and never more than its person.
|
|
17
|
+
- `CURU_MEMORY_OIDC_BASIC_CLIENT_ID`: an agent can send the app password of its Authentik service account, and curu-memory exchanges it for a token.
|
|
18
|
+
- `curu-memory serve --grant ID`: a stdio process acts as the agent of one grant.
|
|
19
|
+
- The key `acts_for` in each audit line.
|
|
20
|
+
- OIDC tokens on HTTP: `CURU_MEMORY_OIDC_ISSUER`, `CURU_MEMORY_OIDC_RESOURCE`, `CURU_MEMORY_OIDC_AUDIENCE` and `CURU_MEMORY_OIDC_TOKEN_TYPES`. The server publishes the metadata of RFC 9728, and finds the person of each token by its issuer and subject. The settings for Authentik are in the README.
|
|
21
|
+
- `curu-memory access person add --issuer --subject` and `curu-memory access person link`.
|
|
22
|
+
- With `CURU_MEMORY_OIDC_ISSUER`, `serve` ignores `CURU_MEMORY_HTTP_TOKEN`. The static token stays the basic mode with no OIDC provider.
|
|
23
|
+
- `deploy/rauthy/`: rauthy 0.37.2 in Docker Compose, with `init.sh` and `setup.sh`.
|
|
24
|
+
- Persons and teams: `curu-memory access person|team|member add|remove` and `curu-memory access show`. `CURU_MEMORY_PRINCIPAL` names the person of `serve`, `browse` and `search`. A person reads only the spaces of their roles, and only that person reads their personal space.
|
|
25
|
+
- The audit log `audit.jsonl`: one line for each change of access and each refused read, with no secret and no content.
|
|
26
|
+
- The error `access_refused` for a caller that can read no space.
|
|
27
|
+
- Team spaces and personal spaces: `curu-memory index --space team/<slug>` or `--space personal/<handle>`. Each space has its own index file. Each search result and `get_concept` give the `space` of the concept.
|
|
28
|
+
- The index command holds a lock, refuses a second embedder model, and skips a concept whose identifier is in another space.
|
|
29
|
+
|
|
30
|
+
- A search with a video: `search_knowledge_by_media` and `curu-memory search --media` take MP4, MOV, WebM and MKV. `CURU_MEMORY_EMBEDDER_MIN_VIDEO_TO_VIDEO_SIMILARITY` and `CURU_MEMORY_EMBEDDER_MIN_VIDEO_TO_TEXT_SIMILARITY` set the limits.
|
|
31
|
+
- Video in concepts. The `media` list accepts MP4, MOV, WebM and MKV files of 10 MB or less. Words find a video by meaning, `matched_kind` is `video`, and the browser plays each video. `CURU_MEMORY_EMBEDDER_MIN_VIDEO_SIMILARITY` sets the limit.
|
|
32
|
+
- The development embedder embeds video items, at most 32 frames of each.
|
|
33
|
+
- Audio in concepts. The `media` list accepts WAV, FLAC, MP3 and Ogg clips of 10 MB or less. Words find a clip by meaning, `matched_kind` is `audio`, and the browser plays each clip. `CURU_MEMORY_EMBEDDER_MIN_AUDIO_SIMILARITY` sets the limit.
|
|
34
|
+
- The development embedder embeds audio items. It decodes at most 300 seconds of each clip.
|
|
35
|
+
- The browser answers a Range request for a media file, so a web browser can play a clip and seek in it.
|
|
36
|
+
- A search with media: the MCP tool `search_knowledge_by_media` and `curu-memory search --media <file>`. The file is an image or an audio clip, and the kind comes from the bytes. Four new settings set the limits: `CURU_MEMORY_EMBEDDER_MIN_IMAGE_TO_IMAGE_SIMILARITY`, `CURU_MEMORY_EMBEDDER_MIN_IMAGE_TO_TEXT_SIMILARITY`, `CURU_MEMORY_EMBEDDER_MIN_AUDIO_TO_AUDIO_SIMILARITY` and `CURU_MEMORY_EMBEDDER_MIN_AUDIO_TO_TEXT_SIMILARITY`.
|
|
37
|
+
- The printed search result gives the matched unit of each concept.
|
|
38
|
+
- The browser shows the images of a concept, and serves each image at `/media/<sha256>`.
|
|
39
|
+
- `get_concept` gives a `media` list with the path, the SHA-256 and the MIME type of each image.
|
|
40
|
+
- Images in concepts. A front-matter list `media` names PNG, JPEG and WebP files of 10 MB or less. The index command embeds each image in the same space as the text, so a question in words can find it. The report gives a warning for each image that is not in the index.
|
|
41
|
+
- `matched_kind` in each search result: `text`, `image` or `audio`.
|
|
42
|
+
- `CURU_MEMORY_EMBEDDER_MIN_IMAGE_SIMILARITY`: the lowest similarity that counts as a match between a question and an image.
|
|
43
|
+
- The development embedder embeds image items.
|
|
44
|
+
- `CURU_MEMORY_EMBEDDER_MIN_SIMILARITY`: the lowest similarity that counts as a match of meaning. The default is 0.68 for EmbeddingGemma 2, from a measurement, and 0.35 for other models.
|
|
45
|
+
- `tools/embedder_server/`: a development embedder that serves EmbeddingGemma 2 on the CPU, for the integration tier.
|
|
46
|
+
|
|
47
|
+
- The `curu-memory browse` command: a read-only web browser to search the knowledge and follow the links of a concept. It needs the HTTP token on an address that is not loopback.
|
|
48
|
+
|
|
49
|
+
- EmbeddingGemma 2 (`google/embeddinggemma-2`) is the default embedding model when `CURU_MEMORY_EMBEDDER_URL` is set. `CURU_MEMORY_EMBEDDER_MODEL` overrides it.
|
|
50
|
+
- The task prompts of EmbeddingGemma for questions and documents. `CURU_MEMORY_EMBEDDER_QUERY_PROMPT` and `CURU_MEMORY_EMBEDDER_DOCUMENT_PROMPT` override them.
|
|
51
|
+
- The index records its prompts. A search with other prompts uses words only and says why.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- The source distribution holds only `src/`, `tests/`, `README.md`, `LICENSE`, `CHANGELOG.md` and `pyproject.toml`.
|
|
56
|
+
- The default port of `serve --transport http` is 6474, and the default port of `browse` is 6475. Before, they were 8000 and 8001, which many other servers use.
|
|
57
|
+
- Without `CURU_MEMORY_PRINCIPAL`, `serve`, `browse` and `search` read `global` only. Register a person and set the principal to read team and personal spaces.
|
|
58
|
+
- `concept_neighbours` resolves a link when it reads, over the readable spaces. A link to a concept in another readable space now has `resolved: true`.
|
|
59
|
+
- The `Retriever` takes the readable spaces on each call, not when it is made.
|
|
60
|
+
- The index report gives `media embedded` and `media skipped` in place of `images embedded` and `images skipped`.
|
|
61
|
+
- The `Embedder` port method `embed_images` is now `embed_media`, for images and audio.
|
|
62
|
+
- The streamable HTTP transport accepts a request body of up to 16 MiB. An image of 10 MB can then reach the tool as base64. The SDK default was 4 MiB.
|
|
63
|
+
- The index has schema version 3. It holds each accepted image of a concept and one copy of its bytes, also when the embedder does not embed it. An index of version 1 or 2 still works, with no images.
|
|
64
|
+
- A `## Summary` heading now has the slug `summary-2`, and a numbered heading skips each slug that the concept already uses. Before, such a heading stopped the index run.
|
|
65
|
+
- The index has schema version 2: each unit has a kind, and an image unit has its path and its SHA-256. An index of version 1 still works.
|
|
66
|
+
- Rank fusion damps the second value of a concept to one tenth. The best answer of one ranking then stays in the results. The highest score is now about 0.018.
|
|
67
|
+
- With EmbeddingGemma 2, an unrelated question now finds nothing by meaning. A common word in the question can still match by words. Before, each concept passed the old limit of 0.35.
|
|
68
|
+
- `CURU_MEMORY_EMBEDDER_URL` no longer needs `CURU_MEMORY_EMBEDDER_MODEL`.
|
|
69
|
+
|
|
70
|
+
## [0.1.0]
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
|
|
74
|
+
- The `curu-memory index` command. It reads a directory of OKF concept files, validates them with the rules of the curu index, and builds one deterministic index. It reports each skipped file, each warning and each broken link.
|
|
75
|
+
- The `curu-memory search` command. It searches by words, and by meaning when an OpenAI-compatible embedder is set.
|
|
76
|
+
- The `curu-memory serve` command. It serves the read-only MCP tools `search_knowledge`, `get_concept` and `concept_neighbours` on stdio or on streamable HTTP.
|
|
77
|
+
- A static bearer token for the HTTP transport. The server does not start on HTTP without a token of 32 characters or more.
|
|
78
|
+
- Typed tool errors: `index_missing`, `concept_not_found` and `invalid_argument`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 James Veitch
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|