@oscharko-dev/keiko-memory-consolidation 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/_constants.d.ts +8 -0
- package/dist/_constants.d.ts.map +1 -0
- package/dist/_constants.js +22 -0
- package/dist/_ordering.d.ts +8 -0
- package/dist/_ordering.d.ts.map +1 -0
- package/dist/_ordering.js +62 -0
- package/dist/conflicts.d.ts +12 -0
- package/dist/conflicts.d.ts.map +1 -0
- package/dist/conflicts.js +212 -0
- package/dist/consolidate.d.ts +4 -0
- package/dist/consolidate.d.ts.map +1 -0
- package/dist/consolidate.js +254 -0
- package/dist/dedupe.d.ts +15 -0
- package/dist/dedupe.d.ts.map +1 -0
- package/dist/dedupe.js +101 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/job.d.ts +11 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +82 -0
- package/dist/similarity.d.ts +10 -0
- package/dist/similarity.d.ts.map +1 -0
- package/dist/similarity.js +65 -0
- package/dist/stale.d.ts +9 -0
- package/dist/stale.d.ts.map +1 -0
- package/dist/stale.js +54 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -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","../src/_constants.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/types.ts","../src/_ordering.ts","../src/similarity.ts","../src/dedupe.ts","../src/conflicts.ts","../src/stale.ts","../src/consolidate.ts","../src/version.ts","../src/job.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":[[84,145,146,148,156,160,163,165,166,167,179],[84,147,148,156,160,163,165,166,167,179],[148,156,160,163,165,166,167,179],[84,148,156,160,163,165,166,167,179,188],[84,148,149,154,156,159,160,163,165,166,167,169,179,184,197],[84,148,149,150,156,159,160,163,165,166,167,179],[84,148,156,160,163,165,166,167,179],[84,148,151,156,160,163,165,166,167,179,198],[84,148,152,153,156,160,163,165,166,167,170,179],[84,148,153,156,160,163,165,166,167,179,184,194],[84,148,154,156,159,160,163,165,166,167,169,179],[84,147,148,155,156,160,163,165,166,167,179],[84,148,156,157,160,163,165,166,167,179],[84,148,156,158,159,160,163,165,166,167,179],[84,147,148,156,159,160,163,165,166,167,179],[84,148,156,159,160,161,163,165,166,167,179,184,197],[84,148,156,159,160,161,163,165,166,167,179,184,186,188],[84,135,148,156,159,160,162,163,165,166,167,169,179,184,197],[84,148,156,159,160,162,163,165,166,167,169,179,184,194,197],[84,148,156,160,162,163,164,165,166,167,179,184,194,197],[82,83,84,85,86,87,88,89,90,91,92,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205],[84,148,156,159,160,163,165,166,167,179],[84,148,156,160,163,165,167,179],[84,148,156,160,163,165,166,167,168,179,197],[84,148,156,159,160,163,165,166,167,169,179,184],[84,148,156,160,163,165,166,167,170,179],[84,148,156,160,163,165,166,167,171,179],[84,148,156,159,160,163,165,166,167,174,179],[84,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204],[84,148,156,160,163,165,166,167,176,179],[84,148,156,160,163,165,166,167,177,179],[84,148,153,156,160,163,165,166,167,169,179,188],[84,148,156,159,160,163,165,166,167,179,180],[84,148,156,160,163,165,166,167,179,181,198,201],[84,148,156,159,160,163,165,166,167,179,184,187,188],[84,148,156,160,163,165,166,167,179,185,188],[84,148,156,160,163,165,166,167,179,186],[84,148,156,160,163,165,166,167,179,188,198],[84,148,156,160,163,165,166,167,179,189],[84,145,148,156,160,163,165,166,167,179,184,191,197],[84,148,156,160,163,165,166,167,179,184,190],[84,148,156,159,160,163,165,166,167,179,192,193],[84,148,156,160,163,165,166,167,179,192,193],[84,148,153,156,160,163,165,166,167,169,179,184,194],[84,148,156,160,163,165,166,167,179,195],[84,148,156,160,163,165,166,167,169,179,196],[84,148,156,160,162,163,165,166,167,177,179,197],[84,148,156,160,163,165,166,167,179,198,199],[84,148,153,156,160,163,165,166,167,179,199],[84,148,156,160,163,165,166,167,179,184,200],[84,148,156,160,163,165,166,167,168,179,201],[84,148,156,160,163,165,166,167,179,202],[84,148,151,156,160,163,165,166,167,179],[84,148,153,156,160,163,165,166,167,179],[84,148,156,160,163,165,166,167,179,198],[84,135,148,156,160,163,165,166,167,179],[84,148,156,160,163,165,166,167,179,197],[84,148,156,160,163,165,166,167,179,203],[84,148,156,160,163,165,166,167,174,179],[84,148,156,160,163,165,166,167,179,193],[84,135,148,156,159,160,161,163,165,166,167,174,179,184,188,197,200,201,203],[84,148,156,160,163,165,166,167,179,184,204],[84,148,156,160,163,165,166,167,179,186,205],[84,99,102,105,106,148,156,160,163,165,166,167,179,197],[84,102,148,156,160,163,165,166,167,179,184,197],[84,102,106,148,156,160,163,165,166,167,179,197],[84,148,156,160,163,165,166,167,179,184],[84,96,148,156,160,163,165,166,167,179],[84,100,148,156,160,163,165,166,167,179],[84,98,99,102,148,156,160,163,165,166,167,179,197],[84,148,156,160,163,165,166,167,169,179,194],[84,148,156,160,163,165,166,167,179,206],[84,96,148,156,160,163,165,166,167,179,206],[84,98,102,148,156,160,163,165,166,167,169,179,197],[84,93,94,95,97,101,148,156,159,160,163,165,166,167,179,184,197],[84,102,111,119,148,156,160,163,165,166,167,179],[84,94,100,148,156,160,163,165,166,167,179],[84,102,129,130,148,156,160,163,165,166,167,179],[84,94,97,102,148,156,160,163,165,166,167,179,188,197,206],[84,102,148,156,160,163,165,166,167,179],[84,98,102,148,156,160,163,165,166,167,179,197],[84,93,148,156,160,163,165,166,167,179],[84,96,97,98,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,148,156,160,163,165,166,167,179],[84,102,122,125,148,156,160,163,165,166,167,179],[84,102,111,112,113,148,156,160,163,165,166,167,179],[84,100,102,112,114,148,156,160,163,165,166,167,179],[84,101,148,156,160,163,165,166,167,179],[84,94,96,102,148,156,160,163,165,166,167,179],[84,102,106,112,114,148,156,160,163,165,166,167,179],[84,106,148,156,160,163,165,166,167,179],[84,100,102,105,148,156,160,163,165,166,167,179,197],[84,94,98,102,111,148,156,160,163,165,166,167,179],[84,102,122,148,156,160,163,165,166,167,179],[84,114,148,156,160,163,165,166,167,179],[84,94,98,102,106,148,156,160,163,165,166,167,179],[84,96,102,129,148,156,160,163,165,166,167,179,188,203,206],[71,84,148,156,160,163,165,166,167,179],[64,65,84,148,156,160,163,165,166,167,179],[62,63,64,65,66,67,68,69,70,84,148,156,160,163,165,166,167,179],[62,63,84,148,156,160,163,165,166,167,179],[62,63,65,84,148,156,160,163,165,166,167,179],[62,84,148,156,160,163,165,166,167,179],[62,64,65,84,148,156,160,163,165,166,167,179],[71,72,84,148,156,160,163,165,166,167,179],[71,72,73,74,75,84,148,156,160,163,165,166,167,179],[61,71,72,73,75,76,77,84,148,156,160,163,165,166,167,179],[71,73,74,84,148,156,160,163,165,166,167,179],[72,78,79,80,84,148,156,160,163,165,166,167,179],[72,84,148,156,160,163,165,166,167,179],[71,72,73,84,148,156,160,163,165,166,167,179]],"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":"a69a9aad168dcf6656bb4b5fceb6052d9e8bf4b2ac763cb4438a97f98cb18804","signature":"8af7d86f5de31d8326ade0d6d8440dd08cb23de067b0133cdf0295628f7fc483","impliedFormat":99},{"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":"17988516f82dd0140e35461b5c2b8e97e35a4875de1b19544781c575c35ff87d","signature":"a3f0ff332793085e2f39b66fe13494c0766fcb01b22f062098715ac38fc91145","impliedFormat":99},{"version":"86bed93dcbe4df5b64788ae0b6adb8d61b97e63f00519276b3a78d092919392a","signature":"eacca2208b872e84d3d075561bfbabaf67ca3b02ea05d12bbd327720d955ff0e","impliedFormat":99},{"version":"cc9ee9e66bd96b0a224a683b2cdf72af651c8a039293f623ebfd04222eca2139","signature":"1ded98370e4a9f6cefd2c2291fcbba4da500ec363a8d55347a6ffbdf0b139833","impliedFormat":99},{"version":"568941d32cc1da467dd12f7a22a1f673410ddeab74683b5632c9ac1dd5ad86fb","signature":"41b60ff793392303fa4c916f2ebcf28352d989c023102c497efd03851273a571","impliedFormat":99},{"version":"e79a1aab3ff31084c4fc1dfc4c08c2a11302fb44ca2adce37b0c7f1ca4f59b69","signature":"cfb08b7c22c58f97a55d0810af04b062534a1ef794ee3db163f5242a4c63013b","impliedFormat":99},{"version":"a80baf5f3f35adf48ae5581f60062ce456c640d25a493613d3aa03e097dec449","signature":"b62cc39dd7910ae263c8e5bb4c36c9650f715f0911242da2ee08ba72ff0f6488","impliedFormat":99},{"version":"d6f0385f2799fe666ae7b939a46c2cb93ffe4038bb99760d00a839c70acfb677","signature":"7902d4b9c53697ff190f1a86d70cbf0d7de9c56eeb91a286899a42b5b096120c","impliedFormat":99},{"version":"a631b6d9f7c867b0b94aa78d05fa3e359f2462006149f28be455005737457b12","signature":"6ef083922a5316658c4b9e3f460d56ed714fd77058defb1b99621d45908f5d5a","impliedFormat":99},{"version":"ca96c1569a9cf11bca8e6c1b84c29c576430ac6e88fd9ade392477bd83c4a03d","signature":"efdd78a8c490d70ca633ec3a5b0e26ab4ced2bb4e9b74560c140e3edc5b03c14","impliedFormat":99},{"version":"94400f1c1ba181081a7f8b272decbe1364fc8f14a4968caeed7f15fc6ecd42e7","signature":"8e49c42550d1564eafd27d6e8963c22a37b77be4147f3a6907cae79d45effba7","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":[61,[72,81]],"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":[[145,1],[146,1],[147,2],[84,3],[148,4],[149,5],[150,6],[82,7],[151,8],[152,9],[153,10],[154,11],[155,12],[156,13],[157,13],[158,14],[159,15],[160,16],[161,17],[85,7],[83,7],[162,18],[163,19],[164,20],[206,21],[165,22],[166,23],[167,22],[168,24],[169,25],[170,26],[171,27],[172,27],[173,27],[174,28],[175,29],[176,30],[177,31],[178,32],[179,33],[180,33],[181,34],[182,7],[183,7],[184,35],[185,36],[186,37],[187,35],[188,38],[189,39],[190,40],[191,41],[192,42],[193,43],[194,44],[195,45],[196,46],[197,47],[198,48],[199,49],[200,50],[201,51],[202,52],[86,22],[87,7],[88,53],[89,54],[90,7],[91,55],[92,7],[136,56],[137,57],[138,58],[139,58],[140,59],[141,7],[142,4],[143,60],[144,57],[203,61],[204,62],[205,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],[111,64],[124,65],[108,66],[125,67],[134,68],[99,69],[100,70],[98,71],[133,72],[128,73],[132,74],[102,75],[121,76],[101,77],[131,78],[96,79],[97,73],[103,80],[104,7],[110,81],[107,80],[94,82],[135,83],[126,84],[114,85],[113,80],[115,86],[118,87],[112,88],[116,89],[129,72],[105,90],[106,91],[119,92],[95,67],[123,93],[122,80],[109,91],[117,94],[120,95],[127,7],[93,7],[130,96],[69,97],[68,98],[71,99],[66,98],[64,100],[70,101],[63,102],[67,103],[65,100],[62,7],[61,7],[73,104],[76,105],[78,106],[75,107],[81,108],[80,109],[74,7],[77,110],[72,97],[79,7]],"latestChangedDtsFile":"./index.d.ts","version":"6.0.3"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const JACCARD_DEFAULT = 0.85;
|
|
2
|
+
export declare const STALE_CONFIDENCE_DEFAULT = 0.3;
|
|
3
|
+
export declare const MAX_AGE_MS_DEFAULT: number;
|
|
4
|
+
export declare const MAX_CLUSTERS_PER_RUN_DEFAULT = 100;
|
|
5
|
+
export declare const MAX_RECORDS_PER_RUN_DEFAULT = 1000;
|
|
6
|
+
export declare const MAX_RECORDS_PER_RUN_HARD_LIMIT = 1000;
|
|
7
|
+
export declare const MAX_CLUSTERS_PER_RUN_HARD_LIMIT = 1000;
|
|
8
|
+
//# sourceMappingURL=_constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_constants.d.ts","sourceRoot":"","sources":["../src/_constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,OAAO,CAAC;AAKpC,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAI5C,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAK3D,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAIhD,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AACjD,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AACpD,eAAO,MAAM,+BAA+B,OAAQ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Package-private defaults for ConsolidationOptions. Centralised so a future tuning round can
|
|
2
|
+
// adjust the numeric thresholds in one place without combing through orchestrator branches.
|
|
3
|
+
// Jaccard similarity over body bigrams. 0.85 is conservative — empirically near-duplicate
|
|
4
|
+
// paraphrases (e.g. "user prefers tabs" vs "the user prefers tabs over spaces") score 0.55–0.75,
|
|
5
|
+
// so 0.85 is a high-precision / low-recall floor. Operators tune via ConsolidationOptions.
|
|
6
|
+
export const JACCARD_DEFAULT = 0.85;
|
|
7
|
+
// Confidence at or below this threshold flags a memory as low-confidence stale. Provenance
|
|
8
|
+
// confidence is calibrated [0, 1] (validator-enforced in keiko-contracts). 0.3 mirrors the
|
|
9
|
+
// "below one in three" intuition.
|
|
10
|
+
export const STALE_CONFIDENCE_DEFAULT = 0.3;
|
|
11
|
+
// ~90 days in milliseconds. Memories older than this without a refresh (updatedAt) are flagged
|
|
12
|
+
// "aged-out" UNLESS pinned. Pinned memories are exempt by AC.
|
|
13
|
+
export const MAX_AGE_MS_DEFAULT = 90 * 24 * 60 * 60 * 1000;
|
|
14
|
+
// Hard bound on clusters inspected per run. Dedup is O(n^2) bigram-jaccard per scope partition;
|
|
15
|
+
// 100 keeps a single run well under a second even on slow CI. Set to 0 to short-circuit to
|
|
16
|
+
// state:"skipped" (used by tests; in production a 0 run is a configuration smell).
|
|
17
|
+
export const MAX_CLUSTERS_PER_RUN_DEFAULT = 100;
|
|
18
|
+
// Hard stop on records admitted to the O(n^2) duplicate/conflict scans. This is separate from
|
|
19
|
+
// maxClustersPerRun: cluster limits bound output, while this record budget bounds CPU work.
|
|
20
|
+
export const MAX_RECORDS_PER_RUN_DEFAULT = 1_000;
|
|
21
|
+
export const MAX_RECORDS_PER_RUN_HARD_LIMIT = 1_000;
|
|
22
|
+
export const MAX_CLUSTERS_PER_RUN_HARD_LIMIT = 1_000;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MemoryEdge, MemoryRecord } from "@oscharko-dev/keiko-contracts/memory";
|
|
2
|
+
import type { ReviewItem, StaleFlag } from "./types.js";
|
|
3
|
+
export declare function scopeCoordinateKey(scope: MemoryRecord["scope"]): string;
|
|
4
|
+
export declare function compareRecordsByAge(a: MemoryRecord, b: MemoryRecord): number;
|
|
5
|
+
export declare function compareEdges(a: MemoryEdge, b: MemoryEdge): number;
|
|
6
|
+
export declare function compareStaleFlags(a: StaleFlag, b: StaleFlag): number;
|
|
7
|
+
export declare function compareReviewItems(a: ReviewItem, b: ReviewItem): number;
|
|
8
|
+
//# sourceMappingURL=_ordering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_ordering.d.ts","sourceRoot":"","sources":["../src/_ordering.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAErF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOxD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,MAAM,CAavE;AAiBD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAE5E;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAOjE;AAID,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAEpE;AAKD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAMvE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Canonical comparators used to make consolidation output byte-stable across input shuffles.
|
|
2
|
+
// Every output array in `ConsolidationResult` MUST be sorted by one of these comparators so a
|
|
3
|
+
// caller diffing two runs sees structural changes, not input-order noise.
|
|
4
|
+
// Canonical coordinate string for a memory scope. Distinct kinds prefix-disambiguate so a
|
|
5
|
+
// userId equal to a workspaceId cannot collide. Mirrors the private helper in
|
|
6
|
+
// keiko-contracts/src/memory-retrieval-validation.ts. Not exported from contracts, so a
|
|
7
|
+
// near-duplicate is unavoidable here — pin via a comment so future readers know to keep
|
|
8
|
+
// the two in sync if a new scope kind lands.
|
|
9
|
+
export function scopeCoordinateKey(scope) {
|
|
10
|
+
switch (scope.kind) {
|
|
11
|
+
case "global":
|
|
12
|
+
return "global:";
|
|
13
|
+
case "user":
|
|
14
|
+
return `user:${scope.userId}`;
|
|
15
|
+
case "workspace":
|
|
16
|
+
return `workspace:${scope.workspaceId}`;
|
|
17
|
+
case "project":
|
|
18
|
+
return `project:${scope.projectId}`;
|
|
19
|
+
case "workflow":
|
|
20
|
+
return `workflow:${scope.workflowDefinitionId}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Three-way comparator returning -1 / 0 / +1. Keeps sort callbacks lint-clean and
|
|
24
|
+
// total-order-correct (a < b < c implies cmp(a, c) === -1).
|
|
25
|
+
function cmpString(a, b) {
|
|
26
|
+
if (a < b)
|
|
27
|
+
return -1;
|
|
28
|
+
if (a > b)
|
|
29
|
+
return 1;
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
function cmpNumber(a, b) {
|
|
33
|
+
if (a < b)
|
|
34
|
+
return -1;
|
|
35
|
+
if (a > b)
|
|
36
|
+
return 1;
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
// Records inside a duplicate cluster: oldest first; id as tiebreak. Stable across input shuffle.
|
|
40
|
+
export function compareRecordsByAge(a, b) {
|
|
41
|
+
return cmpNumber(a.createdAt, b.createdAt) || cmpString(a.id, b.id);
|
|
42
|
+
}
|
|
43
|
+
// Edges are sorted by (kind, fromMemoryId, toMemoryId, id).
|
|
44
|
+
export function compareEdges(a, b) {
|
|
45
|
+
return (cmpString(a.kind, b.kind) ||
|
|
46
|
+
cmpString(a.fromMemoryId, b.fromMemoryId) ||
|
|
47
|
+
cmpString(a.toMemoryId, b.toMemoryId) ||
|
|
48
|
+
cmpString(a.id, b.id));
|
|
49
|
+
}
|
|
50
|
+
// Stale flags sorted by (memoryId, reason). One memory may have multiple reasons; keeping
|
|
51
|
+
// the secondary key on reason gives a stable view in test snapshots.
|
|
52
|
+
export function compareStaleFlags(a, b) {
|
|
53
|
+
return cmpString(a.memoryId, b.memoryId) || cmpString(a.reason, b.reason);
|
|
54
|
+
}
|
|
55
|
+
// Review items sorted by (reason, related-id-list joined, id). The id-list join produces a
|
|
56
|
+
// stable per-item canonical key; sorting by reason groups multi-way duplicates ahead of
|
|
57
|
+
// conflict pairs in display.
|
|
58
|
+
export function compareReviewItems(a, b) {
|
|
59
|
+
return (cmpString(a.reason, b.reason) ||
|
|
60
|
+
cmpString(a.relatedMemoryIds.join(","), b.relatedMemoryIds.join(",")) ||
|
|
61
|
+
cmpString(a.id, b.id));
|
|
62
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MemoryRecord } from "@oscharko-dev/keiko-contracts/memory";
|
|
2
|
+
import type { DuplicateCluster } from "./dedupe.js";
|
|
3
|
+
import type { ReviewItem } from "./types.js";
|
|
4
|
+
export declare const CONFLICT_OVERLAP_THRESHOLD = 0.4;
|
|
5
|
+
export interface ConflictsOptions {
|
|
6
|
+
readonly nowMs: number;
|
|
7
|
+
readonly newReviewItemId: () => string;
|
|
8
|
+
readonly cancellationSignal?: () => boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function detectConflicts(clusters: readonly DuplicateCluster[], options: ConflictsOptions): readonly ReviewItem[];
|
|
11
|
+
export declare function findConflictPairs(records: readonly MemoryRecord[], excludeClusters: readonly DuplicateCluster[], overlapThreshold: number, options: ConflictsOptions): readonly ReviewItem[];
|
|
12
|
+
//# sourceMappingURL=conflicts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../src/conflicts.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7D,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,CAAC;IACvC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC;CAC7C;AAmED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,OAAO,EAAE,gBAAgB,GACxB,SAAS,UAAU,EAAE,CAWvB;AA4HD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,eAAe,EAAE,SAAS,gBAAgB,EAAE,EAC5C,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,gBAAgB,GACxB,SAAS,UAAU,EAAE,CAYvB"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// Conflict and multi-way-duplicate review-item emission. Pure function.
|
|
2
|
+
//
|
|
3
|
+
// Two emission cases, mutually exclusive per cluster:
|
|
4
|
+
//
|
|
5
|
+
// 1. multi-way-duplicate (cluster.members.length > 2): one ReviewItem proposing a `merge`
|
|
6
|
+
// with the newest member as winner and all older members as losers. Multi-way
|
|
7
|
+
// consolidation is always operator-reviewed; the engine never auto-merges three or more
|
|
8
|
+
// records (loss of provenance lineage is too easy to do silently). Multi-way takes
|
|
9
|
+
// PRECEDENCE over negation detection: a 3-member cluster with one negation is still
|
|
10
|
+
// surfaced as multi-way, because the operator needs to disambiguate the polarity too.
|
|
11
|
+
//
|
|
12
|
+
// 2. potential-conflict (exactly 2 members AND opposite negation polarity): one ReviewItem
|
|
13
|
+
// proposing a `supersede` with the newer record replacing the older one. v1 negation
|
|
14
|
+
// detection is a substring check: a "negation marker" is " not " (with surrounding
|
|
15
|
+
// spaces, so it does not match "another" or "annotation") or "n't " (English
|
|
16
|
+
// contraction). The pair is in conflict when exactly ONE side carries a negation
|
|
17
|
+
// marker — XOR. Same-polarity pairs (both negate or both affirm) are NOT conflicts.
|
|
18
|
+
//
|
|
19
|
+
// Two-member non-conflicting clusters produce NO review item from this layer — the
|
|
20
|
+
// orchestrator emits a `derived-from` edge instead.
|
|
21
|
+
import { compareRecordsByAge, compareReviewItems, scopeCoordinateKey } from "./_ordering.js";
|
|
22
|
+
import { jaccardSimilarityPrepared, normalizeBody, prepareBody } from "./similarity.js";
|
|
23
|
+
// Conflict-detection overlap threshold. Lower than the dedup Jaccard default (0.85) because a
|
|
24
|
+
// polarity-flip pair like "we use tabs" vs "we do not use tabs" shares fewer bigrams than two
|
|
25
|
+
// near-duplicate paraphrases: the negation token injects new bigrams without removing the
|
|
26
|
+
// affirming material. 0.4 is empirically a good floor — high enough that "x is true" vs "y is
|
|
27
|
+
// not false" does not fire, low enough that obvious polarity flips do.
|
|
28
|
+
export const CONFLICT_OVERLAP_THRESHOLD = 0.4;
|
|
29
|
+
// Negation markers checked AFTER normalizeBody (lowercased, punctuation removed). The
|
|
30
|
+
// surrounding spaces make the check whole-word: " not " inside the normalized body avoids
|
|
31
|
+
// "another"/"annotation"/"notation". "nt " (post-strip form of "n't") catches contractions
|
|
32
|
+
// like don't, won't, isn't, can't, didn't, etc.
|
|
33
|
+
const NEGATION_MARKERS = [" not ", "nt "];
|
|
34
|
+
function hasNegation(body) {
|
|
35
|
+
// Pad both sides with a space so a marker that would normally be position-anchored (e.g.
|
|
36
|
+
// body starts with "not ") is still detected by the same indexOf check.
|
|
37
|
+
const padded = ` ${normalizeBody(body)} `;
|
|
38
|
+
for (const marker of NEGATION_MARKERS) {
|
|
39
|
+
if (padded.includes(marker))
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
function buildMultiWayItem(cluster, options) {
|
|
45
|
+
const sorted = [...cluster.members].sort(compareRecordsByAge);
|
|
46
|
+
const winner = sorted[sorted.length - 1];
|
|
47
|
+
const losers = sorted.slice(0, -1);
|
|
48
|
+
if (winner === undefined) {
|
|
49
|
+
// Caller guards on cluster.members.length > 2; this branch is unreachable structurally.
|
|
50
|
+
throw new Error("buildMultiWayItem: empty cluster (unreachable)");
|
|
51
|
+
}
|
|
52
|
+
const action = {
|
|
53
|
+
kind: "merge",
|
|
54
|
+
winner: winner.id,
|
|
55
|
+
losers: losers.map((m) => m.id),
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
id: options.newReviewItemId(),
|
|
59
|
+
reason: "multi-way-duplicate",
|
|
60
|
+
relatedMemoryIds: sorted.map((m) => m.id),
|
|
61
|
+
proposedAction: action,
|
|
62
|
+
detectedAt: options.nowMs,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function isPolarityConflict(older, newer) {
|
|
66
|
+
return hasNegation(older.body) !== hasNegation(newer.body);
|
|
67
|
+
}
|
|
68
|
+
function tryBuildPairConflict(cluster, options) {
|
|
69
|
+
if (cluster.members.length !== 2)
|
|
70
|
+
return null;
|
|
71
|
+
const sorted = [...cluster.members].sort(compareRecordsByAge);
|
|
72
|
+
const older = sorted[0];
|
|
73
|
+
const newer = sorted[1];
|
|
74
|
+
if (older === undefined || newer === undefined)
|
|
75
|
+
return null;
|
|
76
|
+
if (!isPolarityConflict(older, newer))
|
|
77
|
+
return null;
|
|
78
|
+
const action = { kind: "supersede", newer: newer.id, older: older.id };
|
|
79
|
+
return {
|
|
80
|
+
id: options.newReviewItemId(),
|
|
81
|
+
reason: "potential-conflict",
|
|
82
|
+
relatedMemoryIds: [older.id, newer.id],
|
|
83
|
+
proposedAction: action,
|
|
84
|
+
detectedAt: options.nowMs,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Public entry. Returns review items sorted by (reason, related-ids, id) for byte-stable
|
|
88
|
+
// output. Multi-way takes precedence over per-cluster conflict detection (a 3-member cluster
|
|
89
|
+
// with mixed polarity surfaces as ONE multi-way item, not multi-way + conflict).
|
|
90
|
+
export function detectConflicts(clusters, options) {
|
|
91
|
+
const items = [];
|
|
92
|
+
for (const cluster of clusters) {
|
|
93
|
+
if (cluster.members.length > 2) {
|
|
94
|
+
items.push(buildMultiWayItem(cluster, options));
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const pair = tryBuildPairConflict(cluster, options);
|
|
98
|
+
if (pair !== null)
|
|
99
|
+
items.push(pair);
|
|
100
|
+
}
|
|
101
|
+
return items.sort(compareReviewItems);
|
|
102
|
+
}
|
|
103
|
+
// Partition key used by both dedup and the conflict-pair sweep: scope + type. Cross-scope and
|
|
104
|
+
// cross-type pairs never produce a conflict for the same reason they never produce a duplicate
|
|
105
|
+
// cluster — the visibility invariant from #205 holds structurally.
|
|
106
|
+
function conflictPartitionKey(record) {
|
|
107
|
+
return `${scopeCoordinateKey(record.scope)}|type:${record.type}`;
|
|
108
|
+
}
|
|
109
|
+
function partitionForConflicts(records) {
|
|
110
|
+
const partitions = new Map();
|
|
111
|
+
for (const record of records) {
|
|
112
|
+
const key = conflictPartitionKey(record);
|
|
113
|
+
const bucket = partitions.get(key);
|
|
114
|
+
if (bucket === undefined) {
|
|
115
|
+
partitions.set(key, [record]);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
bucket.push(record);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return [...partitions.values()];
|
|
122
|
+
}
|
|
123
|
+
function pairKey(idA, idB) {
|
|
124
|
+
return idA < idB ? `${idA}|${idB}` : `${idB}|${idA}`;
|
|
125
|
+
}
|
|
126
|
+
function buildExcludeSet(clusters) {
|
|
127
|
+
const excluded = new Set();
|
|
128
|
+
for (const cluster of clusters) {
|
|
129
|
+
const ids = cluster.members.map((m) => m.id);
|
|
130
|
+
for (let i = 0; i < ids.length; i += 1) {
|
|
131
|
+
for (let j = i + 1; j < ids.length; j += 1) {
|
|
132
|
+
const a = ids[i];
|
|
133
|
+
const b = ids[j];
|
|
134
|
+
if (a === undefined || b === undefined)
|
|
135
|
+
continue;
|
|
136
|
+
excluded.add(pairKey(a, b));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return excluded;
|
|
141
|
+
}
|
|
142
|
+
function buildConflictPairItem(older, newer, options) {
|
|
143
|
+
const action = { kind: "supersede", newer: newer.id, older: older.id };
|
|
144
|
+
return {
|
|
145
|
+
id: options.newReviewItemId(),
|
|
146
|
+
reason: "potential-conflict",
|
|
147
|
+
relatedMemoryIds: [older.id, newer.id],
|
|
148
|
+
proposedAction: action,
|
|
149
|
+
detectedAt: options.nowMs,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function shouldSkipPair(older, newer, olderPrepared, newerPrepared, excluded) {
|
|
153
|
+
if (older === undefined || newer === undefined)
|
|
154
|
+
return true;
|
|
155
|
+
if (olderPrepared === undefined || newerPrepared === undefined)
|
|
156
|
+
return true;
|
|
157
|
+
if (excluded.has(pairKey(older.id, newer.id)))
|
|
158
|
+
return true;
|
|
159
|
+
return !isPolarityConflict(older, newer);
|
|
160
|
+
}
|
|
161
|
+
function resolveComparablePair(older, newer, olderPrepared, newerPrepared) {
|
|
162
|
+
if (older === undefined || newer === undefined)
|
|
163
|
+
return null;
|
|
164
|
+
if (olderPrepared === undefined || newerPrepared === undefined)
|
|
165
|
+
return null;
|
|
166
|
+
return { older, newer, olderPrepared, newerPrepared };
|
|
167
|
+
}
|
|
168
|
+
function scanPartitionPairs(partition, excluded, overlapThreshold, options) {
|
|
169
|
+
const items = [];
|
|
170
|
+
const sorted = [...partition].sort(compareRecordsByAge);
|
|
171
|
+
const prepared = sorted.map((record) => prepareBody(record.body));
|
|
172
|
+
for (let i = 0; i < sorted.length; i += 1) {
|
|
173
|
+
if (options.cancellationSignal?.() === true) {
|
|
174
|
+
return { items, canceled: true };
|
|
175
|
+
}
|
|
176
|
+
for (let j = i + 1; j < sorted.length; j += 1) {
|
|
177
|
+
const older = sorted[i];
|
|
178
|
+
const newer = sorted[j];
|
|
179
|
+
const olderPrepared = prepared[i];
|
|
180
|
+
const newerPrepared = prepared[j];
|
|
181
|
+
if (shouldSkipPair(older, newer, olderPrepared, newerPrepared, excluded))
|
|
182
|
+
continue;
|
|
183
|
+
const pair = resolveComparablePair(older, newer, olderPrepared, newerPrepared);
|
|
184
|
+
if (pair === null)
|
|
185
|
+
continue;
|
|
186
|
+
if (jaccardSimilarityPrepared(pair.olderPrepared, pair.newerPrepared) < overlapThreshold) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
items.push(buildConflictPairItem(pair.older, pair.newer, options));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { items, canceled: false };
|
|
193
|
+
}
|
|
194
|
+
// Conflict-pair sweep — finds polarity-flip pairs that did NOT surface as duplicate clusters
|
|
195
|
+
// because their bigram overlap is below the dedup Jaccard threshold but at or above the
|
|
196
|
+
// (looser) conflict overlap threshold. Pairs already represented in `excludeClusters` are
|
|
197
|
+
// skipped so the same (older, newer) does not produce both a cluster review item and a pair
|
|
198
|
+
// review item. Returns sorted output.
|
|
199
|
+
export function findConflictPairs(records, excludeClusters, overlapThreshold, options) {
|
|
200
|
+
const excluded = buildExcludeSet(excludeClusters);
|
|
201
|
+
const partitions = partitionForConflicts(records);
|
|
202
|
+
const items = [];
|
|
203
|
+
for (const partition of partitions) {
|
|
204
|
+
const scanned = scanPartitionPairs(partition, excluded, overlapThreshold, options);
|
|
205
|
+
for (const item of scanned.items) {
|
|
206
|
+
items.push(item);
|
|
207
|
+
}
|
|
208
|
+
if (scanned.canceled)
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
return items.sort(compareReviewItems);
|
|
212
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type MemoryRecord } from "@oscharko-dev/keiko-contracts/memory";
|
|
2
|
+
import type { ConsolidationOptions, ConsolidationResult } from "./types.js";
|
|
3
|
+
export declare function runConsolidation(memories: readonly MemoryRecord[], options: ConsolidationOptions): ConsolidationResult;
|
|
4
|
+
//# sourceMappingURL=consolidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../src/consolidate.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,sCAAsC,CAAC;AAe9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAyB,MAAM,YAAY,CAAC;AAkSnG,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CAwCrB"}
|