@cortexkit/opencode-magic-context 0.47.0 → 0.48.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/agents/magic-context-prompt.d.ts +1 -1
- package/dist/agents/magic-context-prompt.d.ts.map +1 -1
- package/dist/{announcement-y35wzg2r.js → announcement-fp14dw0n.js} +3 -2
- package/dist/auto-search-worker.js +27 -30
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/mural-model-deprecation.d.ts +15 -0
- package/dist/config/mural-model-deprecation.d.ts.map +1 -0
- package/dist/config/project-security.d.ts +0 -3
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/schema/magic-context.d.ts +10 -6
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-z44ynfz7.js → conflict-warning-hook-w8cykrnf.js} +12 -10
- package/dist/{context-wq4ffwyb.js → context-m0cy262m.js} +2690 -1903
- package/dist/{derive-budgets-ke12jnnh.js → derive-budgets-sg0xsq7s.js} +4 -3
- package/dist/embedding-activity-g1dhes6g.js +10 -0
- package/dist/embedding-backfill-9rcm1mfy.js +21 -0
- package/dist/embedding-cache-mgyr73ef.js +16 -0
- package/dist/embedding-worker.js +11 -9
- package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +1 -0
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-config.d.ts +3 -3
- package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-registry.d.ts +1 -0
- package/dist/features/magic-context/dreamer/task-registry.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/message-index-async.d.ts +16 -3
- package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
- package/dist/features/magic-context/message-index-bounded.d.ts +17 -0
- package/dist/features/magic-context/message-index-bounded.d.ts.map +1 -0
- package/dist/features/magic-context/message-index.d.ts +7 -1
- package/dist/features/magic-context/message-index.d.ts.map +1 -1
- package/dist/features/magic-context/mural/render-trigger.d.ts +7 -4
- package/dist/features/magic-context/mural/render-trigger.d.ts.map +1 -1
- package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
- package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
- package/dist/features/magic-context/search.d.ts +29 -0
- package/dist/features/magic-context/search.d.ts.map +1 -1
- package/dist/features/magic-context/session-activity.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/runner.d.ts +1 -0
- package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts +6 -0
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
- package/dist/features/magic-context/storage-tag-identity-revision.d.ts +30 -0
- package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
- package/dist/features/magic-context/storage-tags.d.ts +144 -4
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
- package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -1
- package/dist/features/magic-context/transform-decision-log.d.ts +1 -1
- package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
- package/dist/harness-e4avh192.js +10 -0
- package/dist/hooks/magic-context/active-anthropic-turn.d.ts +2 -0
- package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -1
- package/dist/hooks/magic-context/auto-search-worker-client.d.ts +32 -3
- package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts +1 -0
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/hook.d.ts +1 -1
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-persist.d.ts +4 -3
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-replay.d.ts +13 -8
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-slot.d.ts +139 -2
- package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
- package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/message-search-accepting-silent-worker.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/oc-stall-r2-warmup-worker.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/oc-stall-search-review.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts +63 -0
- package/dist/hooks/magic-context/opencode1-to-model-messages.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
- package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts +2 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-silent-worker.fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts +2 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup-worker.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts +87 -0
- package/dist/hooks/magic-context/raw-ordinal-warmup.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts +12 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
- package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-raw.d.ts +83 -1
- package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
- package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -1
- package/dist/hooks/magic-context/sentinel.d.ts +41 -1
- package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts +14 -2
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-hash.d.ts +1 -0
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-messages.d.ts +8 -0
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-owner-warmup.d.ts +6 -0
- package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
- package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
- package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +8 -2
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
- package/dist/{index-w2t4ah5j.js → index-0an7742d.js} +14072 -14286
- package/dist/index-0qhce371.js +120 -0
- package/dist/{index-q6hef7fh.js → index-0sahzkwr.js} +6 -19
- package/dist/{index-k5bdx1bx.js → index-0w56v4fm.js} +3 -5
- package/dist/index-14cjxt20.js +819 -0
- package/dist/{v2/server-51dv1pr5.js → index-1qb0z7wa.js} +301 -27
- package/dist/index-2bvekkfy.js +11 -0
- package/dist/{index-sj29b3z2.js → index-2y0s2hep.js} +3 -3
- package/dist/index-4dhv7mqz.js +131 -0
- package/dist/{index-b35pxds2.js → index-58e3y90n.js} +1 -18
- package/dist/index-5zygecde.js +152 -0
- package/dist/{index-6d9e1m08.js → index-692jzy0p.js} +17775 -17450
- package/dist/index-72nhv486.js +2307 -0
- package/dist/index-7jzrrxap.js +931 -0
- package/dist/{v2/server-njt3np1k.js → index-7mx8v0pw.js} +220 -961
- package/dist/index-8ajstryz.js +18 -0
- package/dist/{index-sfpzqvdz.js → index-8cd2j99z.js} +2 -3
- package/dist/{index-hybnrwq0.js → index-8j7gqj40.js} +131 -128
- package/dist/index-bdckkfw6.js +3261 -0
- package/dist/{index-m5fe6jch.js → index-bhvjj0ys.js} +152 -2453
- package/dist/index-c43kr12f.js +3030 -0
- package/dist/index-cb7emxgj.js +984 -0
- package/dist/index-d9vfe7xq.js +16 -0
- package/dist/{index-5gq3b2ya.js → index-db7zwa3v.js} +147 -209
- package/dist/index-dhwzyd54.js +1142 -0
- package/dist/{index-8da2zjhz.js → index-eeezr5zz.js} +9 -7
- package/dist/{index-cwf6s3ay.js → index-f0h6xwqm.js} +2828 -2618
- package/dist/index-fb3zxn06.js +13 -0
- package/dist/index-fbv1dn35.js +171 -0
- package/dist/index-fr0wbhdn.js +43 -0
- package/dist/{index-mc22ayvf.js → index-ghc9f0n7.js} +11 -9
- package/dist/{index-fzbvakh0.js → index-jcbd3znx.js} +3 -3
- package/dist/{index-5a2r0p9f.js → index-k1xb52kd.js} +20 -13
- package/dist/index-k9nnwad5.js +3532 -0
- package/dist/{index-wx8a6bw3.js → index-kb9nn0a0.js} +270 -53
- package/dist/index-knh4y330.js +566 -0
- package/dist/{v2/server-fq7kq32k.js → index-mfkzp7qj.js} +1 -16
- package/dist/{index-gg8j07zz.js → index-mmyh6d8f.js} +4 -4
- package/dist/index-pavzsdc6.js +17 -0
- package/dist/{index-0c82743p.js → index-pdecwzrd.js} +17 -15
- package/dist/index-pg50n748.js +1060 -0
- package/dist/{index-92bp57hg.js → index-q2tqeqde.js} +123 -80
- package/dist/{index-rrrsepyw.js → index-q7h7csab.js} +90 -85
- package/dist/{v2/server-yr3zj7e7.js → index-qt1qqasc.js} +6 -7
- package/dist/{index-6wkcswft.js → index-ty64eqcn.js} +28 -18
- package/dist/{index-adwfkpex.js → index-yq8n9qcb.js} +23 -23
- package/dist/{index-9pk9exrb.js → index-z8e0psj8.js} +18 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +586 -344
- package/dist/logger-d3wex3dz.js +20 -0
- package/dist/message-index-bounded-7ezbgddp.js +124 -0
- package/dist/{v2/message-time-backfill-1f9tzvcs.js → message-time-backfill-brbd63hv.js} +8 -6
- package/dist/migration-worker.js +25 -18
- package/dist/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
- package/dist/plugin/dream-timer.d.ts +1 -1
- package/dist/plugin/dream-timer.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +1 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/host-stall-profiler-report.d.ts +1 -66
- package/dist/plugin/host-stall-profiler-report.d.ts.map +1 -1
- package/dist/plugin/host-stall-profiler.d.ts +2 -95
- package/dist/plugin/host-stall-profiler.d.ts.map +1 -1
- package/dist/plugin/messages-transform.d.ts +0 -13
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/plugin/tool-registry.d.ts.map +1 -1
- package/dist/project-embedding-registry-7qzptcw7.js +88 -0
- package/dist/raw-ordinal-warmup-worker.js +60 -0
- package/dist/{read-session-chunk-4jey7hpt.js → read-session-chunk-6k83m4fj.js} +15 -9
- package/dist/read-session-raw-3g9qy1xa.js +58 -0
- package/dist/recomp-orchestrator-d3fp1cy0.js +57 -0
- package/dist/{v2/safe-notification-target-eb1n1vfb.js → safe-notification-target-5ffqq32m.js} +4 -2
- package/dist/search-epax1ecv.js +45 -0
- package/dist/{v2/send-session-notification-c0wtscea.js → send-session-notification-erecz4y4.js} +10 -7
- package/dist/shared/conflict-detector.d.ts.map +1 -1
- package/dist/shared/host-stall-profiler-bun.d.ts +46 -0
- package/dist/shared/host-stall-profiler-bun.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler-common.d.ts +58 -0
- package/dist/shared/host-stall-profiler-common.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler-node.d.ts +36 -0
- package/dist/shared/host-stall-profiler-node.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler-report.d.ts +68 -0
- package/dist/shared/host-stall-profiler-report.d.ts.map +1 -0
- package/dist/shared/host-stall-profiler.d.ts +5 -0
- package/dist/shared/host-stall-profiler.d.ts.map +1 -0
- package/dist/shared/model-resolution.d.ts +2 -3
- package/dist/shared/model-resolution.d.ts.map +1 -1
- package/dist/shared/sqlite.d.ts +30 -0
- package/dist/shared/sqlite.d.ts.map +1 -1
- package/dist/shared/stable-json.d.ts.map +1 -1
- package/dist/shared/user-facing-codes.d.ts +0 -5
- package/dist/shared/user-facing-codes.d.ts.map +1 -1
- package/dist/sqlite-context-pragmas-mv9jqwjh.js +6 -0
- package/dist/sqlite-mhjkerzq.js +46 -0
- package/dist/storage-memory-07fx57k6.js +71 -0
- package/dist/storage-tags-d3b0v2ss.js +131 -0
- package/dist/{task-config-v81k8jvk.js → task-config-cgpg0nvh.js} +2 -2
- package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
- package/dist/tools/ctx-note/constants.d.ts +4 -0
- package/dist/tools/ctx-note/constants.d.ts.map +1 -1
- package/dist/tools/ctx-note/tools.d.ts +1 -0
- package/dist/tools/ctx-note/tools.d.ts.map +1 -1
- package/dist/tools/ctx-search/tools.d.ts.map +1 -1
- package/dist/tools/parameter-descriptions.d.ts +2 -2
- package/dist/tools/parameter-descriptions.d.ts.map +1 -1
- package/dist/{transform-postprocess-phase-z5hzpsxv.js → transform-postprocess-phase-spcy2qre.js} +35 -20
- package/dist/transformers-node-wasm.js +18415 -18415
- package/dist/v2/auto-search-worker.js +27 -30
- package/dist/v2/{context-14v1hr8b.js → context-sf98kstd.js} +3737 -3004
- package/dist/v2/{derive-budgets-nc9avxz8.js → derive-budgets-3vc0y84t.js} +4 -3
- package/dist/v2/embedding-activity-g1dhes6g.js +10 -0
- package/dist/v2/embedding-backfill-vn8g1nh1.js +21 -0
- package/dist/v2/embedding-cache-mgyr73ef.js +16 -0
- package/dist/v2/embedding-worker.js +12 -9
- package/dist/v2/fold/host-media.d.ts +4 -0
- package/dist/v2/fold/host-media.d.ts.map +1 -1
- package/dist/v2/fold/memory-cache.d.ts +70 -0
- package/dist/v2/fold/memory-cache.d.ts.map +1 -0
- package/dist/v2/fold/native-codec.d.ts +10 -0
- package/dist/v2/fold/native-codec.d.ts.map +1 -0
- package/dist/v2/fold/native-replay.d.ts +58 -0
- package/dist/v2/fold/native-replay.d.ts.map +1 -0
- package/dist/v2/fold/policy.d.ts +24 -0
- package/dist/v2/fold/policy.d.ts.map +1 -0
- package/dist/v2/harness-e4avh192.js +10 -0
- package/dist/v2/hooks/context.d.ts +2 -2
- package/dist/v2/hooks/context.d.ts.map +1 -1
- package/dist/v2/hooks/dream-manual.d.ts +1 -1
- package/dist/v2/hooks/dream-manual.d.ts.map +1 -1
- package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
- package/dist/v2/hooks/dream-trigger.d.ts +1 -2
- package/dist/v2/hooks/dream-trigger.d.ts.map +1 -1
- package/dist/v2/hooks/payload.d.ts.map +1 -1
- package/dist/v2/hooks/tools.d.ts.map +1 -1
- package/dist/v2/hooks/types.d.ts +6 -0
- package/dist/v2/hooks/types.d.ts.map +1 -1
- package/dist/v2/logger-mxd0ym09.js +19 -0
- package/dist/v2/message-index-bounded-dy3s2k1e.js +123 -0
- package/dist/{message-time-backfill-r5epkzj3.js → v2/message-time-backfill-gtx1pwk1.js} +7 -7
- package/dist/v2/migration-worker.js +24 -17
- package/dist/v2/{model-resolution-xhfmyyvy.js → model-resolution-nx97z3x7.js} +1 -1
- package/dist/v2/project-embedding-registry-1tgba5dv.js +86 -0
- package/dist/v2/raw-ordinal-warmup-worker.js +60 -0
- package/dist/v2/{read-session-chunk-gyyv7w2r.js → read-session-chunk-rh4khdkv.js} +14 -8
- package/dist/v2/read-session-raw-bsbmf0vj.js +57 -0
- package/dist/v2/recomp-orchestrator-az61rfcg.js +57 -0
- package/dist/{safe-notification-target-43r8jsxw.js → v2/safe-notification-target-73ax1p5v.js} +3 -3
- package/dist/v2/search-nzkwrc6n.js +45 -0
- package/dist/{send-session-notification-0m68ms3n.js → v2/send-session-notification-6km439kn.js} +9 -8
- package/dist/{index-5eqk6z3s.js → v2/server-1r6pmz4f.js} +301 -27
- package/dist/v2/server-2bvekkfy.js +11 -0
- package/dist/v2/server-2fbhp79z.js +3205 -0
- package/dist/v2/{server-ajzeteqw.js → server-2ra6pwf3.js} +1 -18
- package/dist/v2/server-4dhv7mqz.js +131 -0
- package/dist/v2/{server-y10vbq6y.js → server-4k748ke6.js} +11 -1053
- package/dist/v2/{server-vs5gpnd4.js → server-52awr2mw.js} +81 -145
- package/dist/v2/{server-1qbnzc80.js → server-5m3dt5r1.js} +136 -148
- package/dist/v2/server-686jg6eb.js +3508 -0
- package/dist/v2/server-7jzrrxap.js +931 -0
- package/dist/v2/server-7wwc2nga.js +3023 -0
- package/dist/v2/server-8ajstryz.js +18 -0
- package/dist/v2/{server-sfpzqvdz.js → server-8cd2j99z.js} +2 -3
- package/dist/v2/{server-d0sraw7m.js → server-8pyt7hev.js} +291 -286
- package/dist/v2/server-8tqanswc.js +984 -0
- package/dist/v2/{server-14vq4kpm.js → server-aan4q8mx.js} +3 -3
- package/dist/v2/server-d9vfe7xq.js +16 -0
- package/dist/{index-x3kwrmqk.js → v2/server-e0vdaae2.js} +35 -792
- package/dist/v2/server-ezhze64f.js +1048 -0
- package/dist/v2/server-fb3zxn06.js +13 -0
- package/dist/v2/server-fr0wbhdn.js +43 -0
- package/dist/v2/server-g5r0n3b6.js +1137 -0
- package/dist/v2/server-gjcr4w98.js +154 -0
- package/dist/v2/server-k228xhjg.js +171 -0
- package/dist/v2/{server-nf82q6pt.js → server-k8x2rbxc.js} +5946 -5602
- package/dist/v2/{server-wx8a6bw3.js → server-kb9nn0a0.js} +270 -53
- package/dist/{index-rrbbspwh.js → v2/server-mfkzp7qj.js} +1 -16
- package/dist/v2/server-pavzsdc6.js +17 -0
- package/dist/v2/{server-e0c1b7a7.js → server-psqc7e9n.js} +122 -79
- package/dist/{index-yr3zj7e7.js → v2/server-qt1qqasc.js} +6 -7
- package/dist/v2/server-qye6ykf7.js +120 -0
- package/dist/v2/{server-qdjnb2z1.js → server-r5p3b1wy.js} +11 -9
- package/dist/v2/server-sggvvzhb.js +759 -0
- package/dist/v2/{server-cpepxy2q.js → server-v06jcv0w.js} +14 -12
- package/dist/v2/server-vqpf3167.js +1048 -0
- package/dist/v2/{server-rz514f14.js → server-x2g40a71.js} +2044 -2060
- package/dist/v2/{server-vd4e7174.js → server-xdfwt6kh.js} +20 -16
- package/dist/v2/{server-efhwzx05.js → server-xxm59eww.js} +23 -23
- package/dist/v2/server-yczc713m.js +564 -0
- package/dist/v2/{server-fcdehk1s.js → server-z2037m6z.js} +4 -4
- package/dist/v2/{server-50hvkg3v.js → server-zm570tr2.js} +160 -158
- package/dist/v2/{server-6r257mf5.js → server-zxhgvsf9.js} +3 -3
- package/dist/v2/server.js +16 -14
- package/dist/v2/sqlite-context-pragmas-mv9jqwjh.js +6 -0
- package/dist/v2/sqlite-mhjkerzq.js +46 -0
- package/dist/v2/storage-memory-07fx57k6.js +71 -0
- package/dist/v2/storage-tags-w4tv77sn.js +130 -0
- package/dist/v2/store-reader.d.ts +16 -0
- package/dist/v2/store-reader.d.ts.map +1 -1
- package/dist/v2/{task-config-tbndqyny.js → task-config-x0hq3qfd.js} +2 -2
- package/dist/v2/transformers-node-wasm.js +18415 -18415
- package/dist/v2/tui/index.d.ts.map +1 -1
- package/dist/v2/tui/types.d.ts +1 -10
- package/dist/v2/tui/types.d.ts.map +1 -1
- package/dist/v2/{wrapup-orchestrator-nbz854vc.js → wrapup-orchestrator-mz7efs7w.js} +51 -30
- package/dist/wrapup-orchestrator-amzta1t4.js +44 -0
- package/package.json +4 -3
- package/src/agents/magic-context-prompt.ts +27 -2
- package/src/agents/smart-notes-enabled.test.ts +294 -0
- package/src/agents/smart-notes-on.golden.json +70 -0
- package/src/config/index.test.ts +67 -1
- package/src/config/index.ts +2 -0
- package/src/config/latch-permanence-guard.test.ts +4 -0
- package/src/config/mural-model-deprecation.ts +24 -0
- package/src/config/project-security.hostile-matrix.test.ts +4 -44
- package/src/config/project-security.test.ts +9 -14
- package/src/config/project-security.ts +13 -55
- package/src/config/schema/magic-context.test.ts +2 -2
- package/src/config/schema/magic-context.ts +16 -10
- package/src/features/magic-context/dreamer/task-registry.ts +6 -0
- package/src/shared/conflict-detector.test.ts +56 -0
- package/src/shared/conflict-detector.ts +16 -5
- package/src/shared/host-stall-profiler-bun.ts +358 -0
- package/src/shared/host-stall-profiler-common.ts +159 -0
- package/src/shared/host-stall-profiler-node.test.ts +234 -0
- package/src/shared/host-stall-profiler-node.ts +274 -0
- package/src/shared/host-stall-profiler-report.ts +248 -0
- package/src/shared/host-stall-profiler.ts +57 -0
- package/src/shared/model-resolution.test.ts +54 -17
- package/src/shared/model-resolution.ts +6 -17
- package/src/shared/sqlite.test.ts +52 -0
- package/src/shared/sqlite.ts +339 -23
- package/src/shared/stable-json-linear.test.ts +109 -0
- package/src/shared/stable-json.ts +37 -7
- package/src/shared/user-facing-codes.ts +2 -6
- package/src/shared/write-transaction-attribution.test.ts +2 -2
- package/src/v2/tui/host-contract.test.ts +41 -67
- package/src/v2/tui/index.ts +6 -214
- package/src/v2/tui/types.ts +5 -17
- package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts +0 -45
- package/dist/features/magic-context/checkout-claim-fake-subc.test-support.d.ts.map +0 -1
- package/dist/features/magic-context/checkout-claim.d.ts +0 -155
- package/dist/features/magic-context/checkout-claim.d.ts.map +0 -1
- package/dist/index-bb36vgr3.js +0 -6608
- package/dist/index-fnn5pjtt.js +0 -6554
- package/dist/recomp-orchestrator-rervg6q4.js +0 -42
- package/dist/v2/recomp-orchestrator-42vjba7p.js +0 -42
- package/dist/v2/server-3trjk1hx.js +0 -6360
- package/dist/v2/server-nm9n3aqq.js +0 -6461
- package/dist/wrapup-orchestrator-b2dztrar.js +0 -29
- /package/dist/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
- /package/dist/v2/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
|
@@ -1,25 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./
|
|
4
|
-
|
|
5
|
-
// src/shared/internal-initiator-marker.ts
|
|
6
|
-
var OMO_INTERNAL_INITIATOR_MARKER = "<!-- OMO_INTERNAL_INITIATOR -->";
|
|
7
|
-
|
|
8
|
-
// src/shared/system-directive.ts
|
|
9
|
-
var SYSTEM_DIRECTIVE_PREFIX = "[SYSTEM DIRECTIVE: MAGIC-CONTEXT";
|
|
10
|
-
function isSystemDirective(text) {
|
|
11
|
-
return text.trimStart().startsWith(SYSTEM_DIRECTIVE_PREFIX);
|
|
12
|
-
}
|
|
13
|
-
function removeSystemReminders(text) {
|
|
14
|
-
return text.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/gi, "").trim();
|
|
15
|
-
}
|
|
2
|
+
log2
|
|
3
|
+
} from "./server-5m3dt5r1.js";
|
|
16
4
|
|
|
17
5
|
// src/hooks/magic-context/read-session-formatting.ts
|
|
18
6
|
import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
19
7
|
import { createRequire } from "node:module";
|
|
20
8
|
import { homedir } from "node:os";
|
|
21
9
|
import { dirname, join, resolve } from "node:path";
|
|
22
|
-
import { pathToFileURL } from "node:url";
|
|
10
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
23
11
|
|
|
24
12
|
// src/shared/commit-detection.ts
|
|
25
13
|
var HASH_HEX = "[0-9a-f]{7,12}";
|
|
@@ -32,6 +20,284 @@ function createCommitHashExtractPattern() {
|
|
|
32
20
|
return new RegExp(`\`?\\b(${HASH_HEX})\\b\`?`, "gi");
|
|
33
21
|
}
|
|
34
22
|
|
|
23
|
+
// src/shared/internal-initiator-marker.ts
|
|
24
|
+
var OMO_INTERNAL_INITIATOR_MARKER = "<!-- OMO_INTERNAL_INITIATOR -->";
|
|
25
|
+
|
|
26
|
+
// src/shared/system-directive.ts
|
|
27
|
+
var SYSTEM_DIRECTIVE_PREFIX = "[SYSTEM DIRECTIVE: MAGIC-CONTEXT";
|
|
28
|
+
function isSystemDirective(text) {
|
|
29
|
+
return text.trimStart().startsWith(SYSTEM_DIRECTIVE_PREFIX);
|
|
30
|
+
}
|
|
31
|
+
function removeSystemReminders(text) {
|
|
32
|
+
return text.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/gi, "").trim();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// src/hooks/magic-context/token-count-exact.ts
|
|
36
|
+
var NO_RANK = 4294967295;
|
|
37
|
+
var LONG_PIECE_BYTES = 256;
|
|
38
|
+
var MERGE_CACHE_GENERATION = 50000;
|
|
39
|
+
function hasInternals(tokenizer) {
|
|
40
|
+
const value = tokenizer;
|
|
41
|
+
return !!value && value.patternRegex instanceof RegExp && value.patternRegex.global && typeof value.stringRankEncoder === "object" && value.stringRankEncoder !== null && Array.isArray(value.binaryFirstByteIndex);
|
|
42
|
+
}
|
|
43
|
+
var textEncoder = new TextEncoder;
|
|
44
|
+
var textDecoder = new TextDecoder("utf-8");
|
|
45
|
+
function isValidUtf8(bytes) {
|
|
46
|
+
let index = 0;
|
|
47
|
+
while (index < bytes.length) {
|
|
48
|
+
const first = bytes[index];
|
|
49
|
+
let size = 0;
|
|
50
|
+
let codePoint = 0;
|
|
51
|
+
if (first <= 127) {
|
|
52
|
+
size = 1;
|
|
53
|
+
codePoint = first;
|
|
54
|
+
} else if ((first & 224) === 192) {
|
|
55
|
+
size = 2;
|
|
56
|
+
codePoint = first & 31;
|
|
57
|
+
if (first <= 193)
|
|
58
|
+
return false;
|
|
59
|
+
} else if ((first & 240) === 224) {
|
|
60
|
+
size = 3;
|
|
61
|
+
codePoint = first & 15;
|
|
62
|
+
} else if ((first & 248) === 240) {
|
|
63
|
+
size = 4;
|
|
64
|
+
codePoint = first & 7;
|
|
65
|
+
if (first > 244)
|
|
66
|
+
return false;
|
|
67
|
+
} else
|
|
68
|
+
return false;
|
|
69
|
+
if (index + size > bytes.length)
|
|
70
|
+
return false;
|
|
71
|
+
for (let offset = 1;offset < size; offset += 1) {
|
|
72
|
+
const byte = bytes[index + offset];
|
|
73
|
+
if ((byte & 192) !== 128)
|
|
74
|
+
return false;
|
|
75
|
+
codePoint = codePoint << 6 | byte & 63;
|
|
76
|
+
}
|
|
77
|
+
if (size === 2 && codePoint < 128)
|
|
78
|
+
return false;
|
|
79
|
+
if (size === 3 && codePoint < 2048)
|
|
80
|
+
return false;
|
|
81
|
+
if (size === 4 && codePoint < 65536)
|
|
82
|
+
return false;
|
|
83
|
+
if (codePoint >= 55296 && codePoint <= 57343)
|
|
84
|
+
return false;
|
|
85
|
+
if (codePoint > 1114111)
|
|
86
|
+
return false;
|
|
87
|
+
index += size;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
function binarySearchBytes(sorted, key) {
|
|
92
|
+
let low = 0;
|
|
93
|
+
let high = sorted.length - 1;
|
|
94
|
+
while (low <= high) {
|
|
95
|
+
const mid = low + high >>> 1;
|
|
96
|
+
const midKey = sorted[mid][0];
|
|
97
|
+
let compare = 0;
|
|
98
|
+
const shared = Math.min(midKey.length, key.length);
|
|
99
|
+
for (let index = 0;index < shared; index += 1) {
|
|
100
|
+
compare = midKey[index] - key[index];
|
|
101
|
+
if (compare !== 0)
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (compare === 0)
|
|
105
|
+
compare = midKey.length - key.length;
|
|
106
|
+
if (compare === 0)
|
|
107
|
+
return sorted[mid][1];
|
|
108
|
+
if (compare < 0)
|
|
109
|
+
low = mid + 1;
|
|
110
|
+
else
|
|
111
|
+
high = mid - 1;
|
|
112
|
+
}
|
|
113
|
+
return -1;
|
|
114
|
+
}
|
|
115
|
+
function rankOf(tokenizer, slice) {
|
|
116
|
+
if (isValidUtf8(slice)) {
|
|
117
|
+
const rank = tokenizer.stringRankEncoder[textDecoder.decode(slice)];
|
|
118
|
+
if (rank !== undefined)
|
|
119
|
+
return rank;
|
|
120
|
+
}
|
|
121
|
+
const bucket = tokenizer.binaryFirstByteIndex[slice[0]];
|
|
122
|
+
if (bucket !== null && bucket !== undefined) {
|
|
123
|
+
const rank = binarySearchBytes(bucket, slice);
|
|
124
|
+
if (rank !== -1)
|
|
125
|
+
return rank;
|
|
126
|
+
}
|
|
127
|
+
return NO_RANK;
|
|
128
|
+
}
|
|
129
|
+
function mergeByScanning(tokenizer, bytes) {
|
|
130
|
+
const starts = [];
|
|
131
|
+
const ranks = [];
|
|
132
|
+
const pairRank = (index) => {
|
|
133
|
+
const end = starts[index + 2];
|
|
134
|
+
return end === undefined ? NO_RANK : rankOf(tokenizer, bytes.subarray(starts[index], end));
|
|
135
|
+
};
|
|
136
|
+
for (let index = 0;index <= bytes.length; index += 1)
|
|
137
|
+
starts.push(index);
|
|
138
|
+
for (let index = 0;index < starts.length; index += 1)
|
|
139
|
+
ranks.push(pairRank(index));
|
|
140
|
+
while (starts.length > 1) {
|
|
141
|
+
let minRank = NO_RANK;
|
|
142
|
+
let minIndex = -1;
|
|
143
|
+
for (let index = 0;index < ranks.length - 1; index += 1) {
|
|
144
|
+
if (ranks[index] < minRank) {
|
|
145
|
+
minRank = ranks[index];
|
|
146
|
+
minIndex = index;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (minIndex === -1)
|
|
150
|
+
break;
|
|
151
|
+
starts.splice(minIndex + 1, 1);
|
|
152
|
+
ranks.splice(minIndex, 1);
|
|
153
|
+
ranks[minIndex] = pairRank(minIndex);
|
|
154
|
+
if (minIndex > 0)
|
|
155
|
+
ranks[minIndex - 1] = pairRank(minIndex - 1);
|
|
156
|
+
}
|
|
157
|
+
const tokens = [];
|
|
158
|
+
for (let index = 0;index < starts.length - 1; index += 1) {
|
|
159
|
+
const rank = rankOf(tokenizer, bytes.subarray(starts[index], starts[index + 1]));
|
|
160
|
+
if (rank !== NO_RANK)
|
|
161
|
+
tokens.push(rank);
|
|
162
|
+
}
|
|
163
|
+
return tokens;
|
|
164
|
+
}
|
|
165
|
+
function mergeWithHeap(tokenizer, bytes) {
|
|
166
|
+
const length = bytes.length;
|
|
167
|
+
const next = new Int32Array(length + 1);
|
|
168
|
+
const prev = new Int32Array(length + 1);
|
|
169
|
+
const alive = new Uint8Array(length + 1).fill(1);
|
|
170
|
+
const rank = new Float64Array(length + 1).fill(NO_RANK);
|
|
171
|
+
for (let index = 0;index <= length; index += 1) {
|
|
172
|
+
next[index] = index + 1;
|
|
173
|
+
prev[index] = index - 1;
|
|
174
|
+
}
|
|
175
|
+
const heapRank = [];
|
|
176
|
+
const heapAt = [];
|
|
177
|
+
const less = (a, b) => heapRank[a] < heapRank[b] || heapRank[a] === heapRank[b] && heapAt[a] < heapAt[b];
|
|
178
|
+
const swap = (a, b) => {
|
|
179
|
+
[heapRank[a], heapRank[b]] = [heapRank[b], heapRank[a]];
|
|
180
|
+
[heapAt[a], heapAt[b]] = [heapAt[b], heapAt[a]];
|
|
181
|
+
};
|
|
182
|
+
const push = (value, at) => {
|
|
183
|
+
heapRank.push(value);
|
|
184
|
+
heapAt.push(at);
|
|
185
|
+
let child = heapRank.length - 1;
|
|
186
|
+
while (child > 0) {
|
|
187
|
+
const parent = child - 1 >> 1;
|
|
188
|
+
if (!less(child, parent))
|
|
189
|
+
break;
|
|
190
|
+
swap(child, parent);
|
|
191
|
+
child = parent;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const pop = () => {
|
|
195
|
+
const last = heapRank.length - 1;
|
|
196
|
+
swap(0, last);
|
|
197
|
+
heapRank.pop();
|
|
198
|
+
heapAt.pop();
|
|
199
|
+
let parent = 0;
|
|
200
|
+
for (;; ) {
|
|
201
|
+
const left = parent * 2 + 1;
|
|
202
|
+
const right = left + 1;
|
|
203
|
+
let smallest = parent;
|
|
204
|
+
if (left < heapRank.length && less(left, smallest))
|
|
205
|
+
smallest = left;
|
|
206
|
+
if (right < heapRank.length && less(right, smallest))
|
|
207
|
+
smallest = right;
|
|
208
|
+
if (smallest === parent)
|
|
209
|
+
break;
|
|
210
|
+
swap(parent, smallest);
|
|
211
|
+
parent = smallest;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const pairRank = (at) => {
|
|
215
|
+
const middle = next[at];
|
|
216
|
+
if (middle >= length)
|
|
217
|
+
return NO_RANK;
|
|
218
|
+
return rankOf(tokenizer, bytes.subarray(at, next[middle]));
|
|
219
|
+
};
|
|
220
|
+
const update = (at) => {
|
|
221
|
+
rank[at] = pairRank(at);
|
|
222
|
+
if (rank[at] !== NO_RANK)
|
|
223
|
+
push(rank[at], at);
|
|
224
|
+
};
|
|
225
|
+
for (let at = 0;at < length; at += 1)
|
|
226
|
+
update(at);
|
|
227
|
+
while (heapRank.length > 0) {
|
|
228
|
+
const value = heapRank[0];
|
|
229
|
+
const at = heapAt[0];
|
|
230
|
+
pop();
|
|
231
|
+
if (!alive[at] || rank[at] !== value)
|
|
232
|
+
continue;
|
|
233
|
+
const removed = next[at];
|
|
234
|
+
alive[removed] = 0;
|
|
235
|
+
next[at] = next[removed];
|
|
236
|
+
prev[next[removed]] = at;
|
|
237
|
+
update(at);
|
|
238
|
+
if (at > 0)
|
|
239
|
+
update(prev[at]);
|
|
240
|
+
}
|
|
241
|
+
const tokens = [];
|
|
242
|
+
for (let at = 0;at < length; at = next[at]) {
|
|
243
|
+
const value = rankOf(tokenizer, bytes.subarray(at, next[at]));
|
|
244
|
+
if (value !== NO_RANK)
|
|
245
|
+
tokens.push(value);
|
|
246
|
+
}
|
|
247
|
+
return tokens;
|
|
248
|
+
}
|
|
249
|
+
var mergeCaches = new WeakMap;
|
|
250
|
+
var mergedPieces = 0;
|
|
251
|
+
function mergePiece(tokenizer, piece) {
|
|
252
|
+
let cache = mergeCaches.get(tokenizer);
|
|
253
|
+
if (!cache) {
|
|
254
|
+
cache = { current: new Map, previous: new Map };
|
|
255
|
+
mergeCaches.set(tokenizer, cache);
|
|
256
|
+
}
|
|
257
|
+
let tokens = cache.current.get(piece);
|
|
258
|
+
if (tokens)
|
|
259
|
+
return tokens;
|
|
260
|
+
tokens = cache.previous.get(piece);
|
|
261
|
+
if (!tokens) {
|
|
262
|
+
const bytes = textEncoder.encode(piece);
|
|
263
|
+
mergedPieces += 1;
|
|
264
|
+
tokens = bytes.length > LONG_PIECE_BYTES ? mergeWithHeap(tokenizer, bytes) : mergeByScanning(tokenizer, bytes);
|
|
265
|
+
}
|
|
266
|
+
if (cache.current.size >= MERGE_CACHE_GENERATION) {
|
|
267
|
+
cache.previous = cache.current;
|
|
268
|
+
cache.current = new Map;
|
|
269
|
+
}
|
|
270
|
+
cache.current.set(piece, tokens);
|
|
271
|
+
return tokens;
|
|
272
|
+
}
|
|
273
|
+
function encodeTokensExactly(tokenizer, text) {
|
|
274
|
+
if (!hasInternals(tokenizer)) {
|
|
275
|
+
return tokenizer.encode(text, "all");
|
|
276
|
+
}
|
|
277
|
+
if (text.length < 10) {
|
|
278
|
+
const direct = tokenizer.stringRankEncoder[text];
|
|
279
|
+
if (direct !== undefined)
|
|
280
|
+
return [direct];
|
|
281
|
+
}
|
|
282
|
+
const tokens = [];
|
|
283
|
+
const regex = tokenizer.patternRegex;
|
|
284
|
+
regex.lastIndex = 0;
|
|
285
|
+
for (let match = regex.exec(text);match !== null; match = regex.exec(text)) {
|
|
286
|
+
const piece = match[0];
|
|
287
|
+
const direct = tokenizer.stringRankEncoder[piece];
|
|
288
|
+
if (direct !== undefined) {
|
|
289
|
+
tokens.push(direct);
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
for (const token of mergePiece(tokenizer, piece))
|
|
293
|
+
tokens.push(token);
|
|
294
|
+
}
|
|
295
|
+
return tokens;
|
|
296
|
+
}
|
|
297
|
+
function countTokensExactly(tokenizer, text) {
|
|
298
|
+
return encodeTokensExactly(tokenizer, text).length;
|
|
299
|
+
}
|
|
300
|
+
|
|
35
301
|
// src/hooks/magic-context/read-session-formatting.ts
|
|
36
302
|
var MAX_COMMITS_PER_BLOCK = 5;
|
|
37
303
|
function hasMeaningfulUserText2(parts) {
|
|
@@ -144,22 +410,30 @@ var tokenizerSerializedTableBytes;
|
|
|
144
410
|
function tokenizerPackageRoots() {
|
|
145
411
|
const cwd = process.cwd();
|
|
146
412
|
const openCodeCache = join(process.env.XDG_CACHE_HOME ?? join(homedir(), ".cache"), "opencode");
|
|
147
|
-
const roots = [cwd, openCodeCache];
|
|
148
413
|
const candidates = [];
|
|
149
|
-
|
|
414
|
+
const probeRoot = (root) => {
|
|
150
415
|
for (const packageDir of TOKENIZER_PACKAGE_DIRS) {
|
|
151
416
|
candidates.push(join(root, "node_modules", ...packageDir, "node_modules", "ai-tokenizer"));
|
|
152
417
|
}
|
|
153
418
|
candidates.push(join(root, "node_modules", "ai-tokenizer"));
|
|
419
|
+
};
|
|
420
|
+
for (const root of [cwd, openCodeCache]) {
|
|
421
|
+
probeRoot(root);
|
|
154
422
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
423
|
+
const pushAncestors = (startDir) => {
|
|
424
|
+
let ancestor = startDir;
|
|
425
|
+
while (true) {
|
|
426
|
+
candidates.push(join(ancestor, "node_modules", "ai-tokenizer"));
|
|
427
|
+
const parent = dirname(ancestor);
|
|
428
|
+
if (parent === ancestor)
|
|
429
|
+
break;
|
|
430
|
+
ancestor = parent;
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
pushAncestors(process.argv[1] ? dirname(resolve(process.argv[1])) : cwd);
|
|
434
|
+
const ownDir = dirname(fileURLToPath(new URL(import.meta.url)));
|
|
435
|
+
pushAncestors(ownDir);
|
|
436
|
+
probeRoot(join(homedir(), ".omp", "plugins"));
|
|
163
437
|
return [...new Set(candidates)];
|
|
164
438
|
}
|
|
165
439
|
function packageImportTarget(value) {
|
|
@@ -264,7 +538,7 @@ function warnTokenizerFallback(error) {
|
|
|
264
538
|
return;
|
|
265
539
|
tokenizerWarningSent = true;
|
|
266
540
|
const reason = error instanceof Error ? error.message : String(error);
|
|
267
|
-
|
|
541
|
+
log2("[magic-context] ai-tokenizer is unavailable; using approximate character-based token counts for this process. Token budgets, persisted per-message counts, and protected-tail/compartment boundaries may be less accurate until restart:", reason);
|
|
268
542
|
}
|
|
269
543
|
async function preloadTokenizer() {
|
|
270
544
|
if (tokenizer)
|
|
@@ -339,7 +613,7 @@ function estimateTokens(text) {
|
|
|
339
613
|
if (!activeTokenizer)
|
|
340
614
|
return estimateTokensHeuristically(text);
|
|
341
615
|
try {
|
|
342
|
-
return activeTokenizer
|
|
616
|
+
return countTokensExactly(activeTokenizer, text);
|
|
343
617
|
} catch (error) {
|
|
344
618
|
tokenizer = undefined;
|
|
345
619
|
tokenizerLoadAttempted = true;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// src/features/magic-context/memory/normalize-hash.ts
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
function normalizeMemoryContent(content) {
|
|
4
|
+
return content.toLowerCase().replace(/\s+/g, " ").trim();
|
|
5
|
+
}
|
|
6
|
+
function computeNormalizedHash(content) {
|
|
7
|
+
const normalized = normalizeMemoryContent(content);
|
|
8
|
+
return createHash("md5").update(normalized).digest("hex");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { computeNormalizedHash };
|