@oscharko-dev/keiko-memory-vault 0.2.0
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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/access.d.ts +12 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +79 -0
- package/dist/cipher.d.ts +17 -0
- package/dist/cipher.d.ts.map +1 -0
- package/dist/cipher.js +95 -0
- package/dist/db.d.ts +12 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +80 -0
- package/dist/edges.d.ts +8 -0
- package/dist/edges.d.ts.map +1 -0
- package/dist/edges.js +47 -0
- package/dist/embeddings.d.ts +10 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +116 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +20 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/memories.d.ts +11 -0
- package/dist/memories.d.ts.map +1 -0
- package/dist/memories.js +195 -0
- package/dist/migrate-encrypt.d.ts +4 -0
- package/dist/migrate-encrypt.d.ts.map +1 -0
- package/dist/migrate-encrypt.js +69 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +82 -0
- package/dist/redact-record.d.ts +8 -0
- package/dist/redact-record.d.ts.map +1 -0
- package/dist/redact-record.js +67 -0
- package/dist/schema.d.ts +5 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +206 -0
- package/dist/scope-key.d.ts +4 -0
- package/dist/scope-key.d.ts.map +1 -0
- package/dist/scope-key.js +27 -0
- package/dist/serialize.d.ts +67 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +213 -0
- package/dist/tombstones.d.ts +8 -0
- package/dist/tombstones.d.ts.map +1 -0
- package/dist/tombstones.js +57 -0
- package/dist/types.d.ts +127 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/validate.d.ts +8 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +71 -0
- package/dist/vault.d.ts +3 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +301 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../keiko-contracts/dist/memory.d.ts","../../keiko-contracts/dist/memory-records.d.ts","../../keiko-contracts/dist/memory-operations.d.ts","../../keiko-contracts/dist/memory-validation.d.ts","../../keiko-contracts/dist/memory-operations-validation.d.ts","../../keiko-contracts/dist/memory-retrieval-validation.d.ts","../../keiko-contracts/dist/memory-audit-validation.d.ts","../../keiko-contracts/dist/memory-audit-events.d.ts","../../keiko-contracts/dist/memory-record-validation.d.ts","../../keiko-contracts/dist/memory-barrel.d.ts","../src/access.ts","../../keiko-security/dist/version.d.ts","../../keiko-contracts/dist/coding-context.d.ts","../../keiko-contracts/dist/harness.d.ts","../../keiko-contracts/dist/workflow-descriptor.d.ts","../../keiko-contracts/dist/workspace.d.ts","../../keiko-contracts/dist/editor-session.d.ts","../../keiko-contracts/dist/editor-layout.d.ts","../../keiko-contracts/dist/editor-dirty-close.d.ts","../../keiko-contracts/dist/editor-hot-exit.d.ts","../../keiko-contracts/dist/language-service.d.ts","../../keiko-contracts/dist/editor-agent.d.ts","../../keiko-contracts/dist/gateway.d.ts","../../keiko-contracts/dist/editor-completion.d.ts","../../keiko-contracts/dist/editor-inline-completion.d.ts","../../keiko-contracts/dist/editor-test-generation.d.ts","../../keiko-contracts/dist/editor-patch-apply.d.ts","../../keiko-contracts/dist/tools.d.ts","../../keiko-contracts/dist/verification.d.ts","../../keiko-contracts/dist/evaluations.d.ts","../../keiko-contracts/dist/unit-test-events.d.ts","../../keiko-contracts/dist/bug-investigation-events.d.ts","../../keiko-contracts/dist/verification-summary.d.ts","../../keiko-contracts/dist/evidence.d.ts","../../keiko-contracts/dist/connected-context.d.ts","../../keiko-contracts/dist/local-knowledge.d.ts","../../keiko-contracts/dist/workflow-handoff.d.ts","../../keiko-contracts/dist/prompt-enhancer.d.ts","../../keiko-contracts/dist/prompt-enhancer-validation.d.ts","../../keiko-contracts/dist/prompt-enhancer-safety.d.ts","../../keiko-contracts/dist/prompt-enhancer-critic.d.ts","../../keiko-contracts/dist/prompt-enhancer-bff.d.ts","../../keiko-contracts/dist/bff-wire.d.ts","../../keiko-contracts/dist/text-safety.d.ts","../../keiko-contracts/dist/local-knowledge-records.d.ts","../../keiko-contracts/dist/local-knowledge-paths.d.ts","../../keiko-contracts/dist/local-knowledge-validation.d.ts","../../keiko-contracts/dist/local-knowledge-large-document.d.ts","../../keiko-contracts/dist/local-knowledge-large-document-validation.d.ts","../../keiko-contracts/dist/local-knowledge-schema.d.ts","../../keiko-contracts/dist/local-knowledge-schema-validation.d.ts","../../keiko-contracts/dist/memory-workflow-port.d.ts","../../keiko-contracts/dist/conversation-budget.d.ts","../../keiko-contracts/dist/qualityintelligence/ids.d.ts","../../keiko-contracts/dist/qualityintelligence/assertnever.d.ts","../../keiko-contracts/dist/qualityintelligence/sourceenvelope.d.ts","../../keiko-contracts/dist/qualityintelligence/evidenceatom.d.ts","../../keiko-contracts/dist/qualityintelligence/testcasecandidate.d.ts","../../keiko-contracts/dist/qualityintelligence/editablerevision.d.ts","../../keiko-contracts/dist/qualityintelligence/coveragemap.d.ts","../../keiko-contracts/dist/qualityintelligence/validationfinding.d.ts","../../keiko-contracts/dist/qualityintelligence/runplanandevents.d.ts","../../keiko-contracts/dist/qualityintelligence/reviewrecord.d.ts","../../keiko-contracts/dist/qualityintelligence/exportbundle.d.ts","../../keiko-contracts/dist/qualityintelligence/auditsummary.d.ts","../../keiko-contracts/dist/qualityintelligence/handoffenvelope.d.ts","../../keiko-contracts/dist/qualityintelligence/testqualityrubric.d.ts","../../keiko-contracts/dist/qualityintelligence/bffwire.d.ts","../../keiko-contracts/dist/qualityintelligence/index.d.ts","../../keiko-contracts/dist/workspace-ui.d.ts","../../keiko-contracts/dist/workspace-descriptors.d.ts","../../keiko-contracts/dist/relationships.d.ts","../../keiko-contracts/dist/relationships-validation.d.ts","../../keiko-contracts/dist/prompt-enhancer-analyzer.d.ts","../../keiko-contracts/dist/prompt-enhancer-grounding.d.ts","../../keiko-contracts/dist/index.d.ts","../../keiko-security/dist/redaction.d.ts","../../keiko-security/dist/runid.d.ts","../../keiko-security/dist/secrets.d.ts","../../keiko-security/dist/hashing.d.ts","../../keiko-security/dist/secretbox.d.ts","../../keiko-security/dist/promptinjection.d.ts","../../keiko-security/dist/errors/gateway.d.ts","../../keiko-security/dist/errors/audit.d.ts","../../keiko-security/dist/errors/workspace.d.ts","../../keiko-security/dist/errors/tools.d.ts","../../keiko-security/dist/errors/harness.d.ts","../../keiko-security/dist/errors/verification.d.ts","../../keiko-security/dist/errors/secretbox.d.ts","../../keiko-security/dist/errors/promptenhancer.d.ts","../../keiko-security/dist/errors/index.d.ts","../../keiko-security/dist/index.d.ts","../src/migrate-encrypt.ts","../src/schema.ts","../src/db.ts","../src/errors.ts","../src/cipher.ts","../src/edges.ts","../src/types.ts","../src/embeddings.ts","../src/version.ts","../src/paths.ts","../src/scope-key.ts","../src/serialize.ts","../src/memories.ts","../src/tombstones.ts","../src/validate.ts","../src/redact-record.ts","../src/vault.ts","../src/index.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/iter.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[173,234,235,237,245,249,252,254,255,256,268],[173,236,237,245,249,252,254,255,256,268],[237,245,249,252,254,255,256,268],[173,237,245,249,252,254,255,256,268,277],[173,237,238,243,245,248,249,252,254,255,256,258,268,273,286],[173,237,238,239,245,248,249,252,254,255,256,268],[173,237,245,249,252,254,255,256,268],[173,237,240,245,249,252,254,255,256,268,287],[173,237,241,242,245,249,252,254,255,256,259,268],[173,237,242,245,249,252,254,255,256,268,273,283],[173,237,243,245,248,249,252,254,255,256,258,268],[173,236,237,244,245,249,252,254,255,256,268],[173,237,245,246,249,252,254,255,256,268],[173,237,245,247,248,249,252,254,255,256,268],[173,236,237,245,248,249,252,254,255,256,268],[173,237,245,248,249,250,252,254,255,256,268,273,286],[173,237,245,248,249,250,252,254,255,256,268,273,275,277],[173,224,237,245,248,249,251,252,254,255,256,258,268,273,286],[173,237,245,248,249,251,252,254,255,256,258,268,273,283,286],[173,237,245,249,251,252,253,254,255,256,268,273,283,286],[171,172,173,174,175,176,177,178,179,180,181,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294],[173,237,245,248,249,252,254,255,256,268],[173,237,245,249,252,254,256,268],[173,237,245,249,252,254,255,256,257,268,286],[173,237,245,248,249,252,254,255,256,258,268,273],[173,237,245,249,252,254,255,256,259,268],[173,237,245,249,252,254,255,256,260,268],[173,237,245,248,249,252,254,255,256,263,268],[173,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293],[173,237,245,249,252,254,255,256,265,268],[173,237,245,249,252,254,255,256,266,268],[173,237,242,245,249,252,254,255,256,258,268,277],[173,237,245,248,249,252,254,255,256,268,269],[173,237,245,249,252,254,255,256,268,270,287,290],[173,237,245,248,249,252,254,255,256,268,273,276,277],[173,237,245,249,252,254,255,256,268,274,277],[173,237,245,249,252,254,255,256,268,275],[173,237,245,249,252,254,255,256,268,277,287],[173,237,245,249,252,254,255,256,268,278],[173,234,237,245,249,252,254,255,256,268,273,280,286],[173,237,245,249,252,254,255,256,268,273,279],[173,237,245,248,249,252,254,255,256,268,281,282],[173,237,245,249,252,254,255,256,268,281,282],[173,237,242,245,249,252,254,255,256,258,268,273,283],[173,237,245,249,252,254,255,256,268,284],[173,237,245,249,252,254,255,256,258,268,285],[173,237,245,249,251,252,254,255,256,266,268,286],[173,237,245,249,252,254,255,256,268,287,288],[173,237,242,245,249,252,254,255,256,268,288],[173,237,245,249,252,254,255,256,268,273,289],[173,237,245,249,252,254,255,256,257,268,290],[173,237,245,249,252,254,255,256,268,291],[173,237,240,245,249,252,254,255,256,268],[173,237,242,245,249,252,254,255,256,268],[173,237,245,249,252,254,255,256,268,287],[173,224,237,245,249,252,254,255,256,268],[173,237,245,249,252,254,255,256,268,286],[173,237,245,249,252,254,255,256,268,292],[173,237,245,249,252,254,255,256,263,268],[173,237,245,249,252,254,255,256,268,282],[173,224,237,245,248,249,250,252,254,255,256,263,268,273,277,286,289,290,292],[173,237,245,249,252,254,255,256,268,273,293],[173,237,245,249,252,254,255,256,268,275,294],[173,188,191,194,195,237,245,249,252,254,255,256,268,286],[173,191,237,245,249,252,254,255,256,268,273,286],[173,191,195,237,245,249,252,254,255,256,268,286],[173,237,245,249,252,254,255,256,268,273],[173,185,237,245,249,252,254,255,256,268],[173,189,237,245,249,252,254,255,256,268],[173,187,188,191,237,245,249,252,254,255,256,268,286],[173,237,245,249,252,254,255,256,258,268,283],[173,237,245,249,252,254,255,256,268,295],[173,185,237,245,249,252,254,255,256,268,295],[173,187,191,237,245,249,252,254,255,256,258,268,286],[173,182,183,184,186,190,237,245,248,249,252,254,255,256,268,273,286],[173,191,200,208,237,245,249,252,254,255,256,268],[173,183,189,237,245,249,252,254,255,256,268],[173,191,218,219,237,245,249,252,254,255,256,268],[173,183,186,191,237,245,249,252,254,255,256,268,277,286,295],[173,191,237,245,249,252,254,255,256,268],[173,187,191,237,245,249,252,254,255,256,268,286],[173,182,237,245,249,252,254,255,256,268],[173,185,186,187,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,237,245,249,252,254,255,256,268],[173,191,211,214,237,245,249,252,254,255,256,268],[173,191,200,201,202,237,245,249,252,254,255,256,268],[173,189,191,201,203,237,245,249,252,254,255,256,268],[173,190,237,245,249,252,254,255,256,268],[173,183,185,191,237,245,249,252,254,255,256,268],[173,191,195,201,203,237,245,249,252,254,255,256,268],[173,195,237,245,249,252,254,255,256,268],[173,189,191,194,237,245,249,252,254,255,256,268,286],[173,183,187,191,200,237,245,249,252,254,255,256,268],[173,191,211,237,245,249,252,254,255,256,268],[173,203,237,245,249,252,254,255,256,268],[173,183,187,191,195,237,245,249,252,254,255,256,268],[173,185,191,218,237,245,249,252,254,255,256,268,277,292,295],[61,75,77,83,93,95,96,97,102,173,237,245,249,252,254,255,256,268],[89,173,237,245,249,252,254,255,256,268],[77,81,173,237,245,249,252,254,255,256,268],[81,83,173,237,245,249,252,254,255,256,268],[77,173,237,245,249,252,254,255,256,268],[81,83,84,173,237,245,249,252,254,255,256,268],[73,81,84,173,237,245,249,252,254,255,256,268],[83,173,237,245,249,252,254,255,256,268],[74,76,83,93,173,237,245,249,252,254,255,256,268],[73,173,237,245,249,252,254,255,256,268],[70,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,119,128,129,130,131,132,133,134,135,173,237,245,249,252,254,255,256,268],[107,108,173,237,245,249,252,254,255,256,268],[96,105,173,237,245,249,252,254,255,256,268],[96,173,237,245,249,252,254,255,256,268],[107,173,237,245,249,252,254,255,256,268],[70,173,237,245,249,252,254,255,256,268],[63,64,173,237,245,249,252,254,255,256,268],[61,62,63,64,65,66,67,68,69,173,237,245,249,252,254,255,256,268],[61,62,173,237,245,249,252,254,255,256,268],[61,62,64,173,237,245,249,252,254,255,256,268],[61,173,237,245,249,252,254,255,256,268],[61,63,64,173,237,245,249,252,254,255,256,268],[98,173,237,245,249,252,254,255,256,268],[83,98,99,100,101,173,237,245,249,252,254,255,256,268],[98,100,173,237,245,249,252,254,255,256,268],[98,99,173,237,245,249,252,254,255,256,268],[98,101,173,237,245,249,252,254,255,256,268],[114,173,237,245,249,252,254,255,256,268],[118,121,123,127,173,237,245,249,252,254,255,256,268],[118,173,237,245,249,252,254,255,256,268],[114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,173,237,245,249,252,254,255,256,268],[132,173,237,245,249,252,254,255,256,268],[76,89,173,237,245,249,252,254,255,256,268],[88,173,237,245,249,252,254,255,256,268],[70,173,237,245,249,252,254,255,256,268,272],[152,155,156,173,237,238,242,245,249,252,254,255,256,259,260,268],[154,157,173,237,245,249,252,254,255,256,260,268,272],[70,157,173,237,245,249,252,254,255,256,268,272],[70,156,157,159,173,237,245,249,252,254,255,256,268,272],[154,156,159,161,162,169,173,237,245,249,252,254,255,256,268],[70,156,157,159,163,164,173,237,245,249,252,254,255,256,268,272],[157,173,237,245,249,252,254,255,256,268,272],[156,173,237,245,249,252,254,255,256,259,260,268],[70,159,173,237,245,249,252,254,255,256,268],[153,157,173,237,245,249,252,254,255,256,268,272],[70,156,157,163,173,237,245,249,252,254,255,256,268],[70,157,159,163,173,237,245,249,252,254,255,256,268,272],[70,71,157,173,237,245,249,252,254,255,256,268],[70,156,159,160,173,237,245,249,252,254,255,256,268],[70,71,155,156,157,158,159,160,162,163,165,166,167,168,173,237,242,245,249,252,254,255,256,268,272],[136,173,237,245,249,252,254,255,256,268],[143,144,145,146,147,148,149,150,173,237,245,249,252,254,255,256,268],[72,137,138,139,140,141,142,151,173,237,245,249,252,254,255,256,268]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"cfacb6c5b29f3c8f81194ca5c6c1d5a87108a2ec1df233f974b279a58b3c15e3","impliedFormat":99},{"version":"170837accdba3f0567fe1c6fb278ce3949317bb5404a26f7cc5648181f421add","impliedFormat":99},{"version":"1d794adbdc230d523976786d1257203e483115edf3a2ea704fa7024e040b4dc4","impliedFormat":99},{"version":"ad8891163f0b0902e2a8b87bb63e8c5a99e2f96237e511c21abd4b642049f51d","impliedFormat":99},{"version":"99e1bcef17ff12ae645785c60b2885d3186ae8ce397c9779bbca7594aa30086e","impliedFormat":99},{"version":"ea8ae4e64942c8587f53535dedc63b29fba78db899694d8d0ec3c6a275cc33a5","impliedFormat":99},{"version":"3ddf59fa92042ab494e3f65a7f62fb9aebf97b2b69680166c95d9ce25a4e072d","impliedFormat":99},{"version":"ff6c36564ed2bdc2cbb4bae471d055c56ae6e42b8c8f976543a31bc65c103c7a","impliedFormat":99},{"version":"cc45394ddbef9f6dc1d8a674f430159356517b380c88858bc90775d895d8c397","impliedFormat":99},{"version":"d85cbbb8501835920b144c9f46389a298e22918e3b49cfa6cb72f69f44c3cd45","impliedFormat":99},{"version":"5d729967f24f9e987fec609b1ec979e1c9ce47951bbed41cf1bcc5819a32df04","signature":"f3983a73847670238ca43602ffda7dd26cbaab120df47cb72ab51c06e1edce10","impliedFormat":99},{"version":"9bde7cc2a5cdcccbab1f236f9b2c90db91d5efff759d7dfb82e75a13bda68f6d","impliedFormat":99},{"version":"1bcfd1f9c0baa04e176cf300093ad641dd49ae4f99481f7ffa4abbb88af7e886","impliedFormat":99},{"version":"302d6a0a33b08822e5af916971f3bcd231a1b22fff85b08754fc1c028ee4ceed","impliedFormat":99},{"version":"47f2e8dd08c6e277317bdbe722c465f0d8404b8c99e1b8c949ff1efcdcc810fb","impliedFormat":99},{"version":"acd6e947e0b617c0304fd553116b0478403cc293d55393a543f30409a9a1cfe3","impliedFormat":99},{"version":"c3b03583b5b3f3f3d8f3c950ac8b5280634fb1317cbf61f325443db0706b0367","impliedFormat":99},{"version":"7d5c53f76c80bc133222c86ac81d9712aedcd850f480617f5e2c5a0b660dcfab","impliedFormat":99},{"version":"4610a95f390d9ba0eec6a38431ade549737978611aacc22be6c39118a779dcf7","impliedFormat":99},{"version":"bed3be9bdaec349f66ba9c52dc2ba4c91a53d859df803f63155d66a585b4764c","impliedFormat":99},{"version":"3ab6f269152e224430b921fb1b73bb38b9209e61a0f6d25e6a5c748b455307cd","impliedFormat":99},{"version":"44443b9dab3558132a45b3cb3a96f5314f3f9e8cb39577d1a63f56838af944d0","impliedFormat":99},{"version":"fd18b4712cc8a74a0ac9d1101603b589316d934b56eedb461e6ba98f14cea042","impliedFormat":99},{"version":"2b3b451ba416fefa9e1db59b4daf748dc80799f15f3989da52b5753a57001de4","impliedFormat":99},{"version":"e2299c5b1f489741845d45198d1a76c7661ab3cfbdd812f54f224e8f18fe816f","impliedFormat":99},{"version":"263b8fbfa1619f4a2975eb073e17dbca57f71a309218729d25f0ad7fa015e80d","impliedFormat":99},{"version":"a702d859dfb3a7b859a792243846eb70559c39fb241e30d5f56bbb61118dc50c","impliedFormat":99},{"version":"2a80d65784d4c1715c671ad1dcb835690925abbc6369935d994aeddb4cd8688b","impliedFormat":99},{"version":"f525f57c393355adaf6a6d5cd6b9004a5cba85cfbdf2cfda123f901e4ab3b1ce","impliedFormat":99},{"version":"ce6806626f0ce19d63e1234250d385936e57c27db2a5c2748f37745789eca7de","impliedFormat":99},{"version":"cbe6fabec7c7c87b9bfeea5d742cc0d81edaa1c8f261e90a2b1671fa55a0e314","impliedFormat":99},{"version":"dfde3dea41340127c305a211a5686b5254f11f40387c15a6401076c0d521a6a9","impliedFormat":99},{"version":"ab1819219bc5fa3c72da10430dc1f7be10800ab623f744e793c751f8ffdc3085","impliedFormat":99},{"version":"14187787ce796b55885c370dca64e05ee8f98d63a6a48fa1895b8768061d0786","impliedFormat":99},{"version":"a1ebbfa8fd6b9441b9ff266e478b05b9ba13c63b68a0439337ef53fc5568c8f5","impliedFormat":99},{"version":"8fc48fa76a652bfbf3bcfa9517e2373974b54fb0e61cd85da3e9b9914bc4da36","impliedFormat":99},{"version":"808e756ace76d4d66c496ea677521977c330a76b6b0eec6a2f46a5a078a209cb","impliedFormat":99},{"version":"eb2985f16fc6d56b60ce252daa15c3638420a5dc3398d31363ab4283ad5c5afc","impliedFormat":99},{"version":"89ac3a6058857e2f3ebe38858e08801ed3c99c1b3fb32474abe2f4f5383e83ec","impliedFormat":99},{"version":"e1f993bd70ca91c515810ed90d58fd5d57cf1d9fe66eaa40c2d518a7991518bc","impliedFormat":99},{"version":"12aa9cf42db98788dacf007fddeb86ec2cb17ceb6adc93239039879ca39e8547","impliedFormat":99},{"version":"05e92214ec30358542c8bfdc6cdbbc3659bde6a6e4c7e9ab326d9c0ce55b56ad","impliedFormat":99},{"version":"be4c75215919c3ed6cf3d2cef5e313450c5a3b00b8e5f5595ecf2998d998b73a","impliedFormat":99},{"version":"de7b28b8ed3ceed81d6cad1bbedb58589d1dfad9c56dae50bab9bd16f5593cdf","impliedFormat":99},{"version":"40735d614fb340b075a922f55a8be57f69cd1c592e1d35ea8aaaedbea322f516","impliedFormat":99},{"version":"27ff0f33e7d207dff8a9ea84980b886787fc0d3b5b6f6f0267df191daeb5d747","impliedFormat":99},{"version":"27fea1bb8375433afd082d87651fbe74e03c3d9748f3efdede48cd3b8a12d969","impliedFormat":99},{"version":"b8280bf46a14802fcb5d2db9ea27b0911926848464399c9f4b29a9a8ce84f941","impliedFormat":99},{"version":"af88c5087fcab821259fedea7eb6924d3c0e627e04ea4f131650cc3473e57baf","impliedFormat":99},{"version":"9c4b3a7747f43b70030f53f1e058f53a765f4cae9a62779629d193a1d48281d4","impliedFormat":99},{"version":"a40b4c55a5d24965a0948b02a74c7b1c772d6c62824595a5324a310afe1569d6","impliedFormat":99},{"version":"b1ba2a12f10eed78af984cbb68602f3f4a1bc29e72eb179b01435dd077850844","impliedFormat":99},{"version":"131f90a639b98a26881e192bb26fe7a60e7d36304bf9da14b7f5a5587c8ecfcc","impliedFormat":99},{"version":"f8446132046256be495bc6b2a299ce02e136c1edf61c9aeb1a795654b12a5235","impliedFormat":99},{"version":"e8c9856685fe2c90fe9396fdc00a050864920091b9d91c77fc07edb3d9d0a9f0","impliedFormat":99},{"version":"001ecf428ab7e26a92a62b14337cf2259a750c52d8803fa666bd93caeddc2197","impliedFormat":99},{"version":"5f6734fa6ee348c512f7be8aac951dba3bb488e9bb320580c12f454c75b351fd","impliedFormat":99},{"version":"5414133f27314ce2e1967356a65dca3f694e698983943088c0be01813e9d24ac","impliedFormat":99},{"version":"63947c68b17b089d6e332f0dc0e4b971673453e532497e73b5798aa47ba70087","impliedFormat":99},{"version":"172b824cde69444de299caea211f5aa003b5974f6f1287ad063bf9e4e01f6979","impliedFormat":99},{"version":"b365e9bfd9746b1ca4fcea697f247fd21c9b9d5da7d480609b3c29b25ef001d5","impliedFormat":99},{"version":"3e233d9548fb8c577a08db187b67f787f9f40ebca875054bf203b30f3f2c2d0a","impliedFormat":99},{"version":"0c67a9b79257dbf9fd391ba3926c8645b9c4915586962a96671e2aee2f7a3038","impliedFormat":99},{"version":"543458d268beb358681010e2510892594722596d2759b15f1f2b18ef12da6e47","impliedFormat":99},{"version":"482e23d5bfeb7afa7993c82e2f4a1227314efec1749a15d985016afe4f90c0dc","impliedFormat":99},{"version":"839cd128a7165e4ad7d843d2750dbc163c154d285c9f5b9746fb161a5755964e","impliedFormat":99},{"version":"ba697356344e5cd91de610e72b56ad45761077871827e58e5f6232b49fbaefed","impliedFormat":99},{"version":"b214263542e506dd143966fdc95356a06531b271a681a82aa970eb5476037a1a","impliedFormat":99},{"version":"30a3ee26489c6ffd76711504d42cba52d8b195c006675043a5df446ebe0e28a2","impliedFormat":99},{"version":"9e0f16c2bb58dc12f59adc3281bdb0bcfd208b10aae7f0c3ec39d25bba5d3ec0","impliedFormat":99},{"version":"c3286e57fcc171c673c21f556148f0ce277d75925a266e077508dc83ef0deb32","impliedFormat":99},{"version":"dd4e1883e4348448a009211cd1ddd123600993e70063137aaac112fa72b65ad9","impliedFormat":99},{"version":"0b9cda4db6fbbf8ae0f5279bca7cfeee600a1d65a92cfcd0abad0db80047bd97","impliedFormat":99},{"version":"f4c4575087f9e8982ae7fe9a07b4795460e44d56351bc60640b8f56cc67dc25a","impliedFormat":99},{"version":"587697b278817b289f3af19b593649c1a201adb9099af774585b5d8146a5665a","impliedFormat":99},{"version":"fa2b39b8ae26024d692bc5b840eb2388ce9ec0646f98def1584304c2fba46530","impliedFormat":99},{"version":"6084060e2892fe7bdb72ee21fae4043a021a15faa0dce5d6dd8a2763bca8705a","impliedFormat":99},{"version":"910e57648d3ec18ceee664b914e70749c9b6ff45b981f41991fd3ea9a687ed2b","impliedFormat":99},{"version":"6d2d9019829bdbac0bd558f9ce91d9ef0ba77c1280a9226e74bd7019a6e2afad","impliedFormat":99},{"version":"d7db1079d6391741de941c41d2afdc94ae80bf5a62e04abe7423d157deefb65d","impliedFormat":99},{"version":"e840faaac484b5d8f45d8e6fdfb1cc332c5711547050a62f97bb9d2c4ce24ffb","impliedFormat":99},{"version":"ee596924e545f61057d8f7048e8cac344c7687380162a7405765041c8b9acd41","impliedFormat":99},{"version":"3c31bd639458a66ae8535c8fd6108b6b1841f822f3490acc9b1d99789ee0e123","impliedFormat":99},{"version":"9dcedfa09d326431d8ab04a70a589c2635d10af74771fce1d0a38c19aa8a5413","impliedFormat":99},{"version":"df1c20e971e9e43f0fa8e8dd1d6c86ed6ec8e8033fb39ad8d77bd0b0ea2f3a5e","impliedFormat":99},{"version":"ed6b1c41d4c9accb5f9a4e2e2902a1d5a8949214dd26b05ba2028fbb2feba814","impliedFormat":99},{"version":"5a0c10d5fbf42a8458d01e85523c9e204e4bbb21c711e056aa9fdd1248819378","impliedFormat":99},{"version":"c65472096b02e35bbc84a6e305c60fd4f8b42c4992afac946bbc1b7efff8ace5","impliedFormat":99},{"version":"2ad376d3a8fec0e7d6bf47f98fe880dfce0ca1c5514a3f91578533724526410e","impliedFormat":99},{"version":"d9ae5ec18c04838d69ca3560ae39c0ff5187341df69db7a61f1e76f94b90ec8c","impliedFormat":99},{"version":"7288325c4776eb21295d8234980b19a5957648062916405b502acc8a0ee47709","impliedFormat":99},{"version":"9f8190307a3c19748e4f3a93954129f4d1edf12bece7582c4873dca45c372a63","impliedFormat":99},{"version":"e3e986bc8788cd92e8fdc3be8981ba148b2d016840f498fd62a4e21f1abada78","signature":"61c0521a2f696737a2cde0e2c535a8c8340fc6d139415e88221e4c3ea1282fb8","impliedFormat":99},{"version":"f76d3aa1b80ba1b07145a2423a3caa3ef1eca2994e550d0550ff5da84b0e3774","signature":"4824cd9aa5d48ee2e27fb5cbe94d516ddaac31337912fde6871a4da0b4446203","impliedFormat":99},{"version":"92b1d5ea5fb8530684d71607618e528e46b782eb076aaf25ab8e70e8f77c35a4","signature":"267e3e6da79309bc22498f119c438555a5b53155ed42f973d9f3c420427db76f","impliedFormat":99},{"version":"aa0dd08ad899f4ef4e75162574e01c6b77f51fe0855c625ce0ef0e7a88aa8504","signature":"564effc67e4d1c041356a81fc360a9c91bcc8150eb144f42cabec0db03ec5cd4","impliedFormat":99},{"version":"36c970f55a1574434a05991288590d726072aaa585899a314b4712bad0ded4d0","signature":"841475e15b47a6388a830ae93e2ac82f4853c7432a29a3778cc7820f5b0e5ff6","impliedFormat":99},{"version":"a95b8dcf385d9e353f1fd43234485cdf181bd3e9fc22f970a46a600e433ef778","signature":"55590a17357f598fcc7e6ce5ffbdaf346b9fd1d3b08681e5617a2b48eb35d904","impliedFormat":99},{"version":"2cee472236f12280d9581e8781bbeb801b7f0716470ecd715eb17d5a1098de55","signature":"3fb7efd21ac6fa57aa60ccb2f408a6e4eefd1ac28e5e45c00e0d9476c1413f6c","impliedFormat":99},{"version":"e8206d7ce667b4274a7224e9ff332fac73ea499e7064ba8da796dba1495a124f","signature":"11042993587e181deae8d76a78fccee7c98295e66b843ec25f8bba99da6634fe","impliedFormat":99},{"version":"ec8f85bfdd1f34576f743f249a365aa39545d94f5af4a8227dec4bcd3ecef463","signature":"183b94fc597a8c626a67d5980c8e41dc433dae169f03f300d88559c81bddd2f0","impliedFormat":99},{"version":"1f2d78c94a2e7a12dc13cd4aad56691dfe7d8d4e706eafa0334b6715347da0c8","signature":"51800334f7e801a93698a6064efc73304f498b650981bc7656f6cfef6cc85113","impliedFormat":99},{"version":"5a88770f5523c91e7aa4b60fdb4ec7d1587e045f6eae83ba104f9faf4d1a1fa8","signature":"19032e1292498911bd094377ca18089722f876e85f4ccd099ed02096f1f4e97e","impliedFormat":99},{"version":"6fcc5da0b7e3efade6516f4ba8f79f5112154dc7a61eafdb41a685d4170104e0","signature":"7e998e06f345082834030bd03cd33f48082e31d6e4ac111187a6ef81aa52451e","impliedFormat":99},{"version":"1f329c8165bb73d953ae0789750d64735f650db46ef229b65150fe6c7abe49d9","signature":"99680e256a5cb2319ca2794fb4a1069ecabc5f4284835ebcab5fffff7afb7560","impliedFormat":99},{"version":"fcd3bf7c16352a6ea42db4c539a6201a92981132ebe4bc8f511d3ae4e1d628d0","signature":"33626801155b3820faba7687e8150527f91f7e146bd539a872a4feac6f4adb8a","impliedFormat":99},{"version":"7619e0de02e4b5fa9867104b1e6ffd2968e5dd1aae7b07cf319a48b2050bd869","signature":"6675264dac3decc5fa75dbe17b4f58486942915d5051d9ac3cde45dbb4296bea","impliedFormat":99},{"version":"76802db70ddb4febd01de5737618d73582fea934524965bab3b157a5418563ec","signature":"0436cc3ed650b0fde06de6dde6211768d94c124a35ef08d491c89ede174b49b6","impliedFormat":99},{"version":"b92aaa143a7de6d8e7b13849894416a395c044d2311ab05752746315a73a4193","signature":"8fbe5b8a41b9f6584a32c7a76d544bd5a1e818d634fe9239388b2fd9fd9f8dd7","impliedFormat":99},{"version":"6befb63ba059a93711cceb356002cc32f4ad54d69478745a5e26c7a8fbc5da6c","signature":"bc0f1009984f281077f934b4f30bb357a2b7996d32b64bb59281a5357492a47c","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"c8b8968311ec4e5e97b7b5fb8a65efaba455db9bdcfd7fff7fb15f6e317bfba0","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"aecbf1d9e6a18dab7d92ef8a89a1444b47e1eb6134cb2bb776a26d55ff58c29a","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce697b6a251d9cad53998c7fd3098072df883b525ec45d83530e434dc6d80dc6","impliedFormat":1},{"version":"719412f054e6ecc35489462c9a21bab0323d173a7d04e55b0ace4b5d86fbeb07","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"3db996ecdee7aabecc5385976cc07eb66216034a273c07b17d1a85292e9bab0c","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"c1fa52b3d014001e8662fa2669d90ea15373958a288e3b83a3b621733d25292a","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"5e66972e83eb4dc7123939bf816e6cbd9ad81af5552db1cab84e6bd9c64d2ecc","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"1b241e24f3227d078c06aeda6e050187ad59a4e591f4467abed44d92b084e08d","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"1c4f139ade4f6ebf45463505f8155173e5d7a5305e50e0aae0a5e712d6ff3b48","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"1c9e5b1a17b1fc9b3711fb36e0690421261ab2880f15b145155b5b2ba2ab6c2d","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"6953d7597831d0860c7034cf4f0419687d263b6b98a4b32e37ce6d49615c36e2","impliedFormat":1}],"root":[71,[153,170]],"options":{"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[234,1],[235,1],[236,2],[173,3],[237,4],[238,5],[239,6],[171,7],[240,8],[241,9],[242,10],[243,11],[244,12],[245,13],[246,13],[247,14],[248,15],[249,16],[250,17],[174,7],[172,7],[251,18],[252,19],[253,20],[295,21],[254,22],[255,23],[256,22],[257,24],[258,25],[259,26],[260,27],[261,27],[262,27],[263,28],[264,29],[265,30],[266,31],[267,32],[268,33],[269,33],[270,34],[271,7],[272,7],[273,35],[274,36],[275,37],[276,35],[277,38],[278,39],[279,40],[280,41],[281,42],[282,43],[283,44],[284,45],[285,46],[286,47],[287,48],[288,49],[289,50],[290,51],[291,52],[175,22],[176,7],[177,53],[178,54],[179,7],[180,55],[181,7],[225,56],[226,57],[227,58],[228,58],[229,59],[230,7],[231,4],[232,60],[233,57],[292,61],[293,62],[294,63],[59,7],[60,7],[10,7],[12,7],[11,7],[2,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[3,7],[21,7],[22,7],[4,7],[23,7],[27,7],[24,7],[25,7],[26,7],[28,7],[29,7],[30,7],[5,7],[31,7],[32,7],[33,7],[34,7],[6,7],[38,7],[35,7],[36,7],[37,7],[39,7],[7,7],[40,7],[45,7],[46,7],[41,7],[42,7],[43,7],[44,7],[8,7],[50,7],[47,7],[48,7],[49,7],[51,7],[9,7],[52,7],[53,7],[54,7],[56,7],[55,7],[57,7],[1,7],[58,7],[200,64],[213,65],[197,66],[214,67],[223,68],[188,69],[189,70],[187,71],[222,72],[217,73],[221,74],[191,75],[210,76],[190,77],[220,78],[185,79],[186,73],[192,80],[193,7],[199,81],[196,80],[183,82],[224,83],[215,84],[203,85],[202,80],[204,86],[207,87],[201,88],[205,89],[218,72],[194,90],[195,91],[208,92],[184,67],[212,93],[211,80],[198,91],[206,94],[209,95],[216,7],[182,7],[219,96],[103,97],[92,98],[73,7],[95,7],[113,7],[82,99],[84,100],[79,7],[80,101],[85,102],[78,7],[87,7],[77,7],[86,103],[90,104],[94,105],[83,7],[74,106],[136,107],[81,7],[109,108],[108,109],[106,7],[105,110],[111,111],[110,7],[107,109],[96,7],[68,112],[67,113],[70,114],[65,113],[63,115],[69,116],[62,117],[66,118],[64,115],[112,117],[61,7],[134,119],[102,120],[101,121],[135,119],[100,122],[99,123],[98,7],[115,7],[125,124],[128,125],[120,124],[119,126],[117,124],[124,124],[126,124],[114,7],[129,127],[123,124],[122,124],[116,124],[118,124],[127,7],[121,124],[133,128],[132,7],[104,7],[88,104],[91,129],[93,98],[89,130],[75,7],[97,7],[131,7],[130,7],[76,7],[71,131],[157,132],[155,133],[158,134],[160,135],[156,7],[170,136],[165,137],[153,138],[162,139],[168,140],[154,141],[163,112],[164,142],[166,143],[159,144],[167,145],[169,146],[161,7],[144,7],[143,7],[147,147],[151,148],[150,7],[149,7],[146,147],[148,7],[145,7],[140,7],[152,149],[142,7],[137,147],[138,7],[141,7],[139,7],[72,7]],"latestChangedDtsFile":"./index.d.ts","version":"6.0.3"}
|
package/dist/access.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { MemoryId } from "@oscharko-dev/keiko-contracts/memory";
|
|
3
|
+
export interface MemoryAccessStat {
|
|
4
|
+
readonly lastAccessedAt: number;
|
|
5
|
+
readonly accessCount: number;
|
|
6
|
+
readonly outcomeCount: number;
|
|
7
|
+
readonly utilitySum: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function recordAccessRows(db: DatabaseSync, ids: readonly MemoryId[], nowMs: number): void;
|
|
10
|
+
export declare function recordOutcomeRows(db: DatabaseSync, ids: readonly MemoryId[], utility: number, nowMs: number): void;
|
|
11
|
+
export declare function getAccessStatsRows(db: DatabaseSync, ids?: readonly MemoryId[]): ReadonlyMap<MemoryId, MemoryAccessStat>;
|
|
12
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAK7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAsCD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMhG;AAQD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,SAAS,QAAQ,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,IAAI,CAON;AAeD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,GAAG,CAAC,EAAE,SAAS,QAAQ,EAAE,GACxB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAUzC"}
|
package/dist/access.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Prepared SQL for the memory_access table (#204). Access rows hold ONLY a counter and a
|
|
2
|
+
// timestamp — never memory content — so no cipher is threaded through this module. The table
|
|
3
|
+
// feeds the decay / reinforcement maintenance cycle: recall increments the counter and advances
|
|
4
|
+
// the timestamp; the maintenance planner reads the stats to compute effective strength.
|
|
5
|
+
//
|
|
6
|
+
// Same shape discipline as memories.ts / edges.ts: every parameter binds positionally, no template
|
|
7
|
+
// concatenation with caller data, so SQL injection is structurally impossible at this layer.
|
|
8
|
+
// Insert-or-increment. The ON CONFLICT clause turns a repeat access into a counter bump plus a
|
|
9
|
+
// timestamp advance, so the row reflects the MOST RECENT touch and the TOTAL touch count. A
|
|
10
|
+
// duplicate id inside one batch is applied as two separate statements => counted twice, which is
|
|
11
|
+
// the intended semantics (two recalls of the same memory in one turn are two reinforcements).
|
|
12
|
+
const UPSERT_SQL = `
|
|
13
|
+
INSERT INTO memory_access (memory_id, last_accessed_at, access_count)
|
|
14
|
+
VALUES (?, ?, 1)
|
|
15
|
+
ON CONFLICT(memory_id) DO UPDATE SET
|
|
16
|
+
access_count = access_count + 1,
|
|
17
|
+
last_accessed_at = excluded.last_accessed_at
|
|
18
|
+
`;
|
|
19
|
+
// Append a governed retention OUTCOME (#204, O-V1). Unlike an access, an outcome NEVER advances the
|
|
20
|
+
// recall counter or the last-access timestamp — it only accumulates the outcome count and summed
|
|
21
|
+
// utility. A memory that was judged before it was ever recalled gets a fresh row with access_count 0
|
|
22
|
+
// (the maintenance recency model then anchors on createdAt, not this insert's timestamp). `utility`
|
|
23
|
+
// is clamped to [0,1] so a caller bug cannot skew the mean outside the modelled range.
|
|
24
|
+
const RECORD_OUTCOME_SQL = `
|
|
25
|
+
INSERT INTO memory_access (memory_id, last_accessed_at, access_count, outcome_count, utility_sum)
|
|
26
|
+
VALUES (?, ?, 0, 1, ?)
|
|
27
|
+
ON CONFLICT(memory_id) DO UPDATE SET
|
|
28
|
+
outcome_count = outcome_count + 1,
|
|
29
|
+
utility_sum = utility_sum + excluded.utility_sum
|
|
30
|
+
`;
|
|
31
|
+
const SELECT_ALL_SQL = "SELECT memory_id, last_accessed_at, access_count, outcome_count, utility_sum FROM memory_access";
|
|
32
|
+
export function recordAccessRows(db, ids, nowMs) {
|
|
33
|
+
if (ids.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
const stmt = db.prepare(UPSERT_SQL);
|
|
36
|
+
for (const id of ids) {
|
|
37
|
+
stmt.run(id, nowMs);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function clampUtility(utility) {
|
|
41
|
+
if (!(utility > 0))
|
|
42
|
+
return 0;
|
|
43
|
+
if (utility > 1)
|
|
44
|
+
return 1;
|
|
45
|
+
return utility;
|
|
46
|
+
}
|
|
47
|
+
export function recordOutcomeRows(db, ids, utility, nowMs) {
|
|
48
|
+
if (ids.length === 0)
|
|
49
|
+
return;
|
|
50
|
+
const clamped = clampUtility(utility);
|
|
51
|
+
const stmt = db.prepare(RECORD_OUTCOME_SQL);
|
|
52
|
+
for (const id of ids) {
|
|
53
|
+
stmt.run(id, nowMs, clamped);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function rowsToMap(rows) {
|
|
57
|
+
const map = new Map();
|
|
58
|
+
for (const row of rows) {
|
|
59
|
+
map.set(row.memory_id, {
|
|
60
|
+
lastAccessedAt: row.last_accessed_at,
|
|
61
|
+
accessCount: row.access_count,
|
|
62
|
+
outcomeCount: row.outcome_count,
|
|
63
|
+
utilitySum: row.utility_sum,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return map;
|
|
67
|
+
}
|
|
68
|
+
export function getAccessStatsRows(db, ids) {
|
|
69
|
+
if (ids === undefined) {
|
|
70
|
+
const rows = db.prepare(SELECT_ALL_SQL).all();
|
|
71
|
+
return rowsToMap(rows);
|
|
72
|
+
}
|
|
73
|
+
if (ids.length === 0)
|
|
74
|
+
return new Map();
|
|
75
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
76
|
+
const sql = `${SELECT_ALL_SQL} WHERE memory_id IN (${placeholders})`;
|
|
77
|
+
const rows = db.prepare(sql).all(...ids);
|
|
78
|
+
return rowsToMap(rows);
|
|
79
|
+
}
|
package/dist/cipher.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type VaultKeySource = "env" | "keychain" | "keyfile";
|
|
2
|
+
export interface ResolvedVaultKey {
|
|
3
|
+
readonly key: Buffer;
|
|
4
|
+
readonly source: VaultKeySource;
|
|
5
|
+
}
|
|
6
|
+
export type KeychainAccess = () => Buffer | undefined;
|
|
7
|
+
export interface MemoryContentCipher {
|
|
8
|
+
readonly sealString: (plaintext: string) => string;
|
|
9
|
+
readonly openString: (envelope: string) => string;
|
|
10
|
+
readonly sealBytes: (buf: Buffer) => Buffer;
|
|
11
|
+
readonly openBytes: (envelope: Buffer) => Buffer;
|
|
12
|
+
readonly isSealed: (value: string) => boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function resolveVaultKey(env: Readonly<Record<string, string | undefined>>, memoryDir: string, keychainAccess?: KeychainAccess): ResolvedVaultKey;
|
|
15
|
+
export declare const NO_KEYCHAIN: KeychainAccess;
|
|
16
|
+
export declare function createMemoryContentCipher(key: Buffer): MemoryContentCipher;
|
|
17
|
+
//# sourceMappingURL=cipher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cipher.d.ts","sourceRoot":"","sources":["../src/cipher.ts"],"names":[],"mappings":"AAkCA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAKD,MAAM,MAAM,cAAc,GAAG,MAAM,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C;AA2DD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,cAAgC,GAC/C,gBAAgB,CAMlB;AAGD,eAAO,MAAM,WAAW,EAAE,cAAgC,CAAC;AAE3D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAW1E"}
|
package/dist/cipher.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Vault content cipher — resolves a 32-byte AES-256-GCM key once at vault-open and binds it into a
|
|
2
|
+
// MemoryContentCipher that the row layer threads through every read/write. The key NEVER appears in
|
|
3
|
+
// an error message, event, or persisted row; only sealed envelopes touch SQLite.
|
|
4
|
+
//
|
|
5
|
+
// Key precedence (highest first), so a deterministic CI/live key always wins and the weakest tier
|
|
6
|
+
// is the last resort:
|
|
7
|
+
// 1. KEIKO_MEMORY_KEY — base64 of exactly 32 bytes. Explicit operator override.
|
|
8
|
+
// 2. macOS Keychain — OS-gated generic password "keiko-memory-vault". The OS protects the key.
|
|
9
|
+
// 3. Keyfile — <memoryDir>/vault.key, mode 0600. Documented WEAKER tier: the key sits
|
|
10
|
+
// next to the DB, so an attacker with the directory has both halves.
|
|
11
|
+
//
|
|
12
|
+
// The keychain call is the only OS boundary in this module, so it is the only place wrapped in
|
|
13
|
+
// try/catch: any failure (no `security` binary, locked keychain, non-darwin) falls through to the
|
|
14
|
+
// keyfile tier rather than bricking the vault.
|
|
15
|
+
import { execFileSync } from "node:child_process";
|
|
16
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { userInfo } from "node:os";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { randomBytes } from "node:crypto";
|
|
20
|
+
import { isSealed, openBytes, openString, sealBytes, sealString, } from "@oscharko-dev/keiko-security";
|
|
21
|
+
import { chmodIfPresent, ensureDirHardened } from "./db.js";
|
|
22
|
+
import { MemoryStorageError } from "./errors.js";
|
|
23
|
+
const KEY_BYTES = 32;
|
|
24
|
+
const KEYFILE_NAME = "vault.key";
|
|
25
|
+
const KEYCHAIN_SERVICE = "keiko-memory-vault";
|
|
26
|
+
function decodeKeyOrThrow(raw, label) {
|
|
27
|
+
const decoded = Buffer.from(raw, "base64");
|
|
28
|
+
if (decoded.length !== KEY_BYTES) {
|
|
29
|
+
throw new MemoryStorageError("invalid-input", `${label} must be base64 of exactly 32 bytes.`);
|
|
30
|
+
}
|
|
31
|
+
return decoded;
|
|
32
|
+
}
|
|
33
|
+
function keyFromEnv(env) {
|
|
34
|
+
const raw = env.KEIKO_MEMORY_KEY;
|
|
35
|
+
if (raw === undefined || raw.length === 0)
|
|
36
|
+
return undefined;
|
|
37
|
+
return decodeKeyOrThrow(raw, "KEIKO_MEMORY_KEY");
|
|
38
|
+
}
|
|
39
|
+
// macOS Keychain via the `security` CLI. find→use; on miss, generate+store. Every spawn is wrapped
|
|
40
|
+
// so a hardened/locked/headless keychain degrades to the keyfile tier instead of throwing.
|
|
41
|
+
function keyFromKeychain() {
|
|
42
|
+
if (process.platform !== "darwin")
|
|
43
|
+
return undefined;
|
|
44
|
+
const account = userInfo().username;
|
|
45
|
+
try {
|
|
46
|
+
const found = execFileSync("security", ["find-generic-password", "-s", KEYCHAIN_SERVICE, "-a", account, "-w"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
47
|
+
return decodeKeyOrThrow(found, "Keychain key");
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return generateKeychainKey(account);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function generateKeychainKey(account) {
|
|
54
|
+
const key = randomBytes(KEY_BYTES);
|
|
55
|
+
try {
|
|
56
|
+
execFileSync("security", ["add-generic-password", "-s", KEYCHAIN_SERVICE, "-a", account, "-w", key.toString("base64")], { stdio: ["ignore", "ignore", "ignore"] });
|
|
57
|
+
return key;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function keyFromKeyfile(memoryDir) {
|
|
64
|
+
ensureDirHardened(memoryDir);
|
|
65
|
+
const keyfile = join(memoryDir, KEYFILE_NAME);
|
|
66
|
+
if (existsSync(keyfile)) {
|
|
67
|
+
return decodeKeyOrThrow(readFileSync(keyfile, "utf8").trim(), "Vault keyfile");
|
|
68
|
+
}
|
|
69
|
+
const key = randomBytes(KEY_BYTES);
|
|
70
|
+
writeFileSync(keyfile, key.toString("base64"), { mode: 0o600 });
|
|
71
|
+
chmodIfPresent(keyfile, 0o600);
|
|
72
|
+
return key;
|
|
73
|
+
}
|
|
74
|
+
export function resolveVaultKey(env, memoryDir, keychainAccess = keyFromKeychain) {
|
|
75
|
+
const fromEnv = keyFromEnv(env);
|
|
76
|
+
if (fromEnv !== undefined)
|
|
77
|
+
return { key: fromEnv, source: "env" };
|
|
78
|
+
const fromKeychain = keychainAccess();
|
|
79
|
+
if (fromKeychain !== undefined)
|
|
80
|
+
return { key: fromKeychain, source: "keychain" };
|
|
81
|
+
return { key: keyFromKeyfile(memoryDir), source: "keyfile" };
|
|
82
|
+
}
|
|
83
|
+
// Test/CI seam: an explicit "no keychain" reader so callers can force the keyfile tier.
|
|
84
|
+
export const NO_KEYCHAIN = () => undefined;
|
|
85
|
+
export function createMemoryContentCipher(key) {
|
|
86
|
+
return {
|
|
87
|
+
sealString: (plaintext) => sealString(key, plaintext),
|
|
88
|
+
// Tolerate legacy plaintext: a value written before encryption (or by the migration's
|
|
89
|
+
// not-yet-swept window) is returned verbatim so reads never fail mid-migration.
|
|
90
|
+
openString: (envelope) => isSealed(envelope) ? openString(key, envelope) : envelope,
|
|
91
|
+
sealBytes: (buf) => sealBytes(key, buf),
|
|
92
|
+
openBytes: (envelope) => openBytes(key, envelope),
|
|
93
|
+
isSealed,
|
|
94
|
+
};
|
|
95
|
+
}
|
package/dist/db.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { MemoryContentCipher } from "./cipher.js";
|
|
3
|
+
export declare function preparedDatabase(target: string): DatabaseSync;
|
|
4
|
+
export declare function ensureDirHardened(dir: string): void;
|
|
5
|
+
export declare function chmodIfPresent(path: string, mode: number): void;
|
|
6
|
+
export interface SidecarSnapshot {
|
|
7
|
+
readonly hadWal: boolean;
|
|
8
|
+
readonly hadShm: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function quarantineCorruptDb(target: string, snapshot?: SidecarSnapshot): void;
|
|
11
|
+
export declare function openMemoryDatabase(dbPath: string, cipher: MemoryContentCipher): DatabaseSync;
|
|
12
|
+
//# sourceMappingURL=db.d.ts.map
|
package/dist/db.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAI7D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAYnD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO/D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAgBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAKpF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,YAAY,CAuB5F"}
|
package/dist/db.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// DB lifecycle: open prepared (WAL + FK on), migrate, quarantine on corruption. Mirrors the
|
|
2
|
+
// proven ADR-0013 D3 pattern in keiko-server/store/db.ts so the two SQLite surfaces have the
|
|
3
|
+
// same operational shape (audit, rotation, recovery).
|
|
4
|
+
import { DatabaseSync } from "node:sqlite";
|
|
5
|
+
import { chmodSync, existsSync, mkdirSync, renameSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { dirname } from "node:path";
|
|
7
|
+
import { runMigrations } from "./schema.js";
|
|
8
|
+
export function preparedDatabase(target) {
|
|
9
|
+
const db = new DatabaseSync(target);
|
|
10
|
+
db.exec("PRAGMA foreign_keys = ON");
|
|
11
|
+
return db;
|
|
12
|
+
}
|
|
13
|
+
export function ensureDirHardened(dir) {
|
|
14
|
+
if (!existsSync(dir)) {
|
|
15
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
16
|
+
}
|
|
17
|
+
if (process.platform !== "win32") {
|
|
18
|
+
try {
|
|
19
|
+
chmodSync(dir, 0o700);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Best-effort: a parent-owned directory we cannot chmod is preferable to a hard failure
|
|
23
|
+
// that blocks the user from opening the vault.
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function chmodIfPresent(path, mode) {
|
|
28
|
+
if (process.platform === "win32")
|
|
29
|
+
return;
|
|
30
|
+
try {
|
|
31
|
+
chmodSync(path, mode);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// The sidecar (-wal/-shm) may not exist yet; best-effort.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Rotate a single sidecar path to its .corrupt.<ts> form. If `hadAtSnapshot` is true, the
|
|
38
|
+
// caller observed the file before SQLite's close() may have unlinked it; in that case we still
|
|
39
|
+
// write a zero-byte marker so the audit trail shows the sidecar existed at the time the parent
|
|
40
|
+
// file was found corrupt. Returns silently when there's nothing to rotate.
|
|
41
|
+
function rotateSidecar(sourcePath, stampedPath, hadAtSnapshot) {
|
|
42
|
+
if (existsSync(sourcePath)) {
|
|
43
|
+
renameSync(sourcePath, stampedPath);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (hadAtSnapshot && !existsSync(stampedPath)) {
|
|
47
|
+
writeFileSync(stampedPath, "");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function quarantineCorruptDb(target, snapshot) {
|
|
51
|
+
const ts = new Date().toISOString().replace(/[:.]/g, "-");
|
|
52
|
+
rotateSidecar(target, `${target}.corrupt.${ts}`, false);
|
|
53
|
+
rotateSidecar(`${target}-wal`, `${target}-wal.corrupt.${ts}`, snapshot?.hadWal === true);
|
|
54
|
+
rotateSidecar(`${target}-shm`, `${target}-shm.corrupt.${ts}`, snapshot?.hadShm === true);
|
|
55
|
+
}
|
|
56
|
+
export function openMemoryDatabase(dbPath, cipher) {
|
|
57
|
+
ensureDirHardened(dirname(dbPath));
|
|
58
|
+
let db = preparedDatabase(dbPath);
|
|
59
|
+
try {
|
|
60
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
61
|
+
runMigrations(db, cipher);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// SQLite's close() on a WAL-enabled handle may checkpoint and unlink -wal/-shm,
|
|
65
|
+
// so we must SNAPSHOT sidecar existence BEFORE close, then close, then rename
|
|
66
|
+
// based on the snapshot. Without the snapshot, a pre-existing corrupt -wal
|
|
67
|
+
// would silently disappear and never land in the .corrupt.<iso> set.
|
|
68
|
+
const hadWal = existsSync(`${dbPath}-wal`);
|
|
69
|
+
const hadShm = existsSync(`${dbPath}-shm`);
|
|
70
|
+
db.close();
|
|
71
|
+
quarantineCorruptDb(dbPath, { hadWal, hadShm });
|
|
72
|
+
db = preparedDatabase(dbPath);
|
|
73
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
74
|
+
runMigrations(db, cipher);
|
|
75
|
+
}
|
|
76
|
+
chmodIfPresent(dbPath, 0o600);
|
|
77
|
+
chmodIfPresent(`${dbPath}-wal`, 0o600);
|
|
78
|
+
chmodIfPresent(`${dbPath}-shm`, 0o600);
|
|
79
|
+
return db;
|
|
80
|
+
}
|
package/dist/edges.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { MemoryEdge, MemoryEdgeId, MemoryId } from "@oscharko-dev/keiko-contracts/memory";
|
|
3
|
+
import type { MemoryContentCipher } from "./cipher.js";
|
|
4
|
+
export declare function insertEdgeRow(db: DatabaseSync, edge: MemoryEdge, cipher: MemoryContentCipher): void;
|
|
5
|
+
export declare function listOutgoingEdgeRows(db: DatabaseSync, memoryId: MemoryId, cipher: MemoryContentCipher): readonly MemoryEdge[];
|
|
6
|
+
export declare function listIncomingEdgeRows(db: DatabaseSync, memoryId: MemoryId, cipher: MemoryContentCipher): readonly MemoryEdge[];
|
|
7
|
+
export declare function deleteEdgeRow(db: DatabaseSync, edgeId: MemoryEdgeId): boolean;
|
|
8
|
+
//# sourceMappingURL=edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../src/edges.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA2CvD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAaN;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,mBAAmB,GAC1B,SAAS,UAAU,EAAE,CAGvB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,mBAAmB,GAC1B,SAAS,UAAU,EAAE,CAGvB;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAG7E"}
|
package/dist/edges.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Prepared SQL for the memory_edges table. Same shape pattern as memories.ts: validator gate sits
|
|
2
|
+
// in vault.ts before these run; FK enforcement (foreign_keys = ON via db.ts) rejects edges whose
|
|
3
|
+
// endpoints don't exist; ON DELETE CASCADE removes incident edges when an endpoint memory is
|
|
4
|
+
// hard-deleted.
|
|
5
|
+
const INSERT_SQL = `
|
|
6
|
+
INSERT INTO memory_edges (
|
|
7
|
+
id, schema_version, from_memory_id, to_memory_id, kind, created_at,
|
|
8
|
+
confidence, provenance_summary
|
|
9
|
+
) VALUES (?,?,?,?,?,?,?,?)
|
|
10
|
+
`;
|
|
11
|
+
const LIST_OUT_SQL = "SELECT * FROM memory_edges WHERE from_memory_id = ? ORDER BY created_at ASC";
|
|
12
|
+
const LIST_IN_SQL = "SELECT * FROM memory_edges WHERE to_memory_id = ? ORDER BY created_at ASC";
|
|
13
|
+
const DELETE_SQL = "DELETE FROM memory_edges WHERE id = ?";
|
|
14
|
+
// provenance_summary is the only free-text edge column, so it is the only sealed one (ADR-0035).
|
|
15
|
+
function rowToEdge(row, cipher) {
|
|
16
|
+
const base = {
|
|
17
|
+
id: row.id,
|
|
18
|
+
schemaVersion: "1",
|
|
19
|
+
fromMemoryId: row.from_memory_id,
|
|
20
|
+
toMemoryId: row.to_memory_id,
|
|
21
|
+
kind: row.kind,
|
|
22
|
+
createdAt: row.created_at,
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
...base,
|
|
26
|
+
...(row.confidence !== null ? { confidence: row.confidence } : {}),
|
|
27
|
+
...(row.provenance_summary !== null
|
|
28
|
+
? { provenanceSummary: cipher.openString(row.provenance_summary) }
|
|
29
|
+
: {}),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function insertEdgeRow(db, edge, cipher) {
|
|
33
|
+
const provenanceSummary = edge.provenanceSummary === undefined ? null : cipher.sealString(edge.provenanceSummary);
|
|
34
|
+
db.prepare(INSERT_SQL).run(edge.id, edge.schemaVersion, edge.fromMemoryId, edge.toMemoryId, edge.kind, edge.createdAt, edge.confidence ?? null, provenanceSummary);
|
|
35
|
+
}
|
|
36
|
+
export function listOutgoingEdgeRows(db, memoryId, cipher) {
|
|
37
|
+
const rows = db.prepare(LIST_OUT_SQL).all(memoryId);
|
|
38
|
+
return rows.map((row) => rowToEdge(row, cipher));
|
|
39
|
+
}
|
|
40
|
+
export function listIncomingEdgeRows(db, memoryId, cipher) {
|
|
41
|
+
const rows = db.prepare(LIST_IN_SQL).all(memoryId);
|
|
42
|
+
return rows.map((row) => rowToEdge(row, cipher));
|
|
43
|
+
}
|
|
44
|
+
export function deleteEdgeRow(db, edgeId) {
|
|
45
|
+
const info = db.prepare(DELETE_SQL).run(edgeId);
|
|
46
|
+
return info.changes > 0;
|
|
47
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { MemoryId } from "@oscharko-dev/keiko-contracts/memory";
|
|
3
|
+
import type { MemoryEmbeddingInput, MemoryEmbeddingMetric, MemoryEmbeddingRow } from "./types.js";
|
|
4
|
+
import type { MemoryContentCipher } from "./cipher.js";
|
|
5
|
+
export declare const MAX_EMBEDDING_DIMENSIONS = 4096;
|
|
6
|
+
export declare const ALLOWED_EMBEDDING_METRICS: readonly MemoryEmbeddingMetric[];
|
|
7
|
+
export declare function upsertEmbeddingRow(db: DatabaseSync, memoryId: MemoryId, embedding: MemoryEmbeddingInput, nowMs: number, cipher: MemoryContentCipher): void;
|
|
8
|
+
export declare function getEmbeddingRow(db: DatabaseSync, memoryId: MemoryId, cipher: MemoryContentCipher): MemoryEmbeddingRow | undefined;
|
|
9
|
+
export declare function getEmbeddingRows(db: DatabaseSync, memoryIds: readonly MemoryId[], cipher: MemoryContentCipher): ReadonlyMap<MemoryId, MemoryEmbeddingRow>;
|
|
10
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOvD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,yBAAyB,EAAE,SAAS,qBAAqB,EAIrE,CAAC;AAsDF,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAcN;AAoBD,wBAAgB,eAAe,CAC7B,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,mBAAmB,GAC1B,kBAAkB,GAAG,SAAS,CAIhC;AA0BD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,MAAM,EAAE,mBAAmB,GAC1B,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAe3C"}
|