{"_id":"@deepseek-ai/dsh-message-feedback","_rev":"6052602-6a7db99e34788dab0b40b805","dist-tags":{"latest":"0.0.1-rc.2","next":"0.1.1-rc.2"},"name":"@deepseek-ai/dsh-message-feedback","time":{"created":"2026-08-13T12:33:34.951Z","modified":"2026-08-21T12:32:15.936Z","0.0.1-rc.3":"2026-08-12T20:39:11.052Z","0.0.1-rc.5":"2026-08-12T22:35:37.751Z","0.1.0-rc.2":"2026-08-13T09:47:30.965Z","0.0.1-rc.2":"2026-08-11T15:24:09.100Z","0.1.0-rc.6":"2026-08-13T12:33:19.660Z","0.1.0-rc.3":"2026-08-13T11:15:19.094Z","0.1.0-rc.7":"2026-08-17T11:37:36.573Z","0.1.0-rc.8":"2026-08-19T15:30:16.107Z","0.1.1-rc.1":"2026-08-21T06:38:55.203Z","0.1.1-rc.2":"2026-08-21T12:32:01.577Z"},"versions":{"0.0.1-rc.3":{"name":"@deepseek-ai/dsh-message-feedback","version":"0.0.1-rc.3","license":"BSD-3-Clause","_id":"@deepseek-ai/dsh-message-feedback@0.0.1-rc.3","maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"dist":{"shasum":"9f661f60a8920d3fed43fd9b43cf074294c57da5","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.0.1-rc.3.tgz","fileCount":19,"integrity":"sha512-TzlTbgLmfnC2h3wpJVct+evtkBRLfo9fTmdNsWi7r/qVg0PzeGHre7XP/EzCSdN37COYTy+Sj0dk9Afneb6bOg==","signatures":[{"sig":"MEUCIQCW7tT27F7x+l4OVIJyoqaK2Ghk8ybaQfM8R3J1hLzEpwIgbQESSwtlh2xNobkw1Cs47NIjuq6DZegEk8AebAbII58=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99045,"size":23721},"main":"lib/index.js","type":"module","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.0.1-rc.3.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.0.1-rc.3.tgz","_integrity":"sha512-TzlTbgLmfnC2h3wpJVct+evtkBRLfo9fTmdNsWi7r/qVg0PzeGHre7XP/EzCSdN37COYTy+Sj0dk9Afneb6bOg==","repository":{"url":"git+https://github.com/deepseek-ai/deepseek-harness.git","type":"git","directory":"packages/feedback/message-feedback"},"_npmVersion":"11.16.0","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1-rc.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"readmeFilename":"README.zh.md","devDependencies":{"@deepseek-ai/cordis":"^4.0.1-rc.1","@deepseek-ai/dsh-llm":"^0.0.1-rc.3","@deepseek-ai/dsh-brand":"^0.0.1-rc.3","@deepseek-ai/dsh-session":"^0.0.1-rc.3","@deepseek-ai/dsh-storage":"^0.0.1-rc.3","@deepseek-ai/dsh-invariants":"^0.0.1-rc.3","@deepseek-ai/dsh-storage-json":"^0.0.1-rc.3","@deepseek-ai/dsh-storage-domain":"^0.0.1-rc.3","@deepseek-ai/dsh-typert-protocol":"^0.0.1-rc.3","@deepseek-ai/cordis-plugin-loader":"^1.0.1-rc.1","@deepseek-ai/cordis-plugin-include":"^1.0.5-rc.1","@deepseek-ai/dsh-session-persistence":"^0.0.1-rc.3","@deepseek-ai/dsh-session-persistence-jsonl":"^0.0.1-rc.3"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1-rc.1","@deepseek-ai/dsh-llm":"^0.0.1-rc.3","@deepseek-ai/dsh-brand":"^0.0.1-rc.3","@deepseek-ai/dsh-session":"^0.0.1-rc.3","@deepseek-ai/dsh-invariants":"^0.0.1-rc.3","@deepseek-ai/dsh-storage-domain":"^0.0.1-rc.3","@deepseek-ai/dsh-typert-protocol":"^0.0.1-rc.3","@deepseek-ai/dsh-session-persistence":"^0.0.1-rc.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-message-feedback_0.0.1-rc.3_1786567150833_0.7955064156334233","host":"s3://npm-registry-packages-npm-production"},"_cnpmcore_publish_time":"2026-08-12T20:39:11.052Z","publish_time":1786567151052,"_source_registry_name":"default"},"0.0.1-rc.5":{"name":"@deepseek-ai/dsh-message-feedback","version":"0.0.1-rc.5","license":"BSD-3-Clause","_id":"@deepseek-ai/dsh-message-feedback@0.0.1-rc.5","maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"dist":{"shasum":"a0cc7c2586b838635552371b1b893d5ff104aeb1","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.0.1-rc.5.tgz","fileCount":19,"integrity":"sha512-DG+x4A2/THcYlciLy3yYWRPVyTsvp44stRpsMZqsXaw6YNI72Nz+8kv9zIYUg+ZaL8aombp2M4zeXTlOmr++rg==","signatures":[{"sig":"MEUCIQDRhqYJ62pZVIN25orToQeyW20AwOZAw0uo2cm+Mg7U4wIgKSUS0431rYJdzLsmljEBhjaZSYSCmWxQW8Utpt1E+4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99045,"size":23736},"main":"lib/index.js","type":"module","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.0.1-rc.5.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.0.1-rc.5.tgz","_integrity":"sha512-DG+x4A2/THcYlciLy3yYWRPVyTsvp44stRpsMZqsXaw6YNI72Nz+8kv9zIYUg+ZaL8aombp2M4zeXTlOmr++rg==","repository":{"url":"git+https://github.com/deepseek-ai/deepseek-harness.git","type":"git","directory":"packages/feedback/message-feedback"},"_npmVersion":"11.16.0","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1-rc.4"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"readmeFilename":"README.zh.md","devDependencies":{"@deepseek-ai/cordis":"^4.0.1-rc.4","@deepseek-ai/dsh-llm":"^0.0.1-rc.5","@deepseek-ai/dsh-brand":"^0.0.1-rc.5","@deepseek-ai/dsh-session":"^0.0.1-rc.5","@deepseek-ai/dsh-storage":"^0.0.1-rc.5","@deepseek-ai/dsh-invariants":"^0.0.1-rc.5","@deepseek-ai/dsh-storage-json":"^0.0.1-rc.5","@deepseek-ai/dsh-storage-domain":"^0.0.1-rc.5","@deepseek-ai/dsh-typert-protocol":"^0.0.1-rc.5","@deepseek-ai/cordis-plugin-loader":"^1.0.2-rc.4","@deepseek-ai/cordis-plugin-include":"^1.0.6-rc.4","@deepseek-ai/dsh-session-persistence":"^0.0.1-rc.5","@deepseek-ai/dsh-session-persistence-jsonl":"^0.0.1-rc.5"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1-rc.4","@deepseek-ai/dsh-llm":"^0.0.1-rc.5","@deepseek-ai/dsh-brand":"^0.0.1-rc.5","@deepseek-ai/dsh-session":"^0.0.1-rc.5","@deepseek-ai/dsh-invariants":"^0.0.1-rc.5","@deepseek-ai/dsh-storage-domain":"^0.0.1-rc.5","@deepseek-ai/dsh-typert-protocol":"^0.0.1-rc.5","@deepseek-ai/dsh-session-persistence":"^0.0.1-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dsh-message-feedback_0.0.1-rc.5_1786574137604_0.6243656673103353","host":"s3://npm-registry-packages-npm-production"},"_cnpmcore_publish_time":"2026-08-12T22:35:37.751Z","publish_time":1786574137751,"_source_registry_name":"default"},"0.1.0-rc.2":{"name":"@deepseek-ai/dsh-message-feedback","version":"0.1.0-rc.2","license":"MIT","_id":"@deepseek-ai/dsh-message-feedback@0.1.0-rc.2","maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"dist":{"shasum":"98b2fb98913e7a5303e804dba28aed6e5e5aa5c3","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.2.tgz","fileCount":19,"integrity":"sha512-RLC/+DGVMjJeY3npsbHwqaQ2tfBMTP4nQbFs0VU+o4oAMaGBewK0ri5oNYwIm5FMkGhM5hpVmTe+4i+tUMEvBQ==","signatures":[{"sig":"MEUCIGb4GzhTqZz6buT0z17ICEqg1TMrH2hGdJPnTfGHKNq8AiEAoMeVB4TAGkoAqz3Kl4tkJvov9Mg2jdqj+3y4GJhXhgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98581,"size":23530},"main":"lib/index.js","type":"module","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.2.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.2.tgz","_integrity":"sha512-RLC/+DGVMjJeY3npsbHwqaQ2tfBMTP4nQbFs0VU+o4oAMaGBewK0ri5oNYwIm5FMkGhM5hpVmTe+4i+tUMEvBQ==","repository":{"url":"git+https://github.com/deepseek-ai/deepseek-harness.git","type":"git","directory":"packages/feedback/message-feedback"},"_npmVersion":"11.16.0","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"readmeFilename":"README.zh.md","devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.2","@deepseek-ai/dsh-brand":"^0.1.0-rc.2","@deepseek-ai/dsh-session":"^0.1.0-rc.2","@deepseek-ai/dsh-storage":"^0.1.0-rc.2","@deepseek-ai/dsh-invariants":"^0.1.0-rc.2","@deepseek-ai/dsh-storage-json":"^0.1.0-rc.2","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.2","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.2","@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.2","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.0-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.2","@deepseek-ai/dsh-brand":"^0.1.0-rc.2","@deepseek-ai/dsh-session":"^0.1.0-rc.2","@deepseek-ai/dsh-invariants":"^0.1.0-rc.2","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.2","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.2","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/dsh-message-feedback_0.1.0-rc.2_1786614450791_0.4053705728271835","host":"s3://npm-registry-packages-npm-production"},"_cnpmcore_publish_time":"2026-08-13T09:47:30.965Z","publish_time":1786614450965,"_source_registry_name":"default"},"0.0.1-rc.2":{"name":"@deepseek-ai/dsh-message-feedback","version":"0.0.1-rc.2","license":"BSD-3-Clause","_id":"@deepseek-ai/dsh-message-feedback@0.0.1-rc.2","maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"dist":{"shasum":"3a08fd1a91b2ce0630b0ff59c3f5ad661aab61d3","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.0.1-rc.2.tgz","fileCount":24,"integrity":"sha512-PaeMmiMxgcSqbkMIWK8R8Nf9zLxBNdebJWBYy/gLC6U00Ws3bcpBZMsgDVHHmOiWPFtk8S7B7mIJF1yoOBvFIg==","signatures":[{"sig":"MEUCIQCqrTdFb0F3+Qo4VnqBB8gwEr/UEwtyK6OXBhNlUQIPvwIgF2MAAEKelxNqBWzwmJ3M7Pmad4HQrFaDetto+n73e0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124308,"size":28272},"main":"lib/index.js","type":"module","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.0.1-rc.2.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.0.1-rc.2.tgz","_integrity":"sha512-PaeMmiMxgcSqbkMIWK8R8Nf9zLxBNdebJWBYy/gLC6U00Ws3bcpBZMsgDVHHmOiWPFtk8S7B7mIJF1yoOBvFIg==","repository":{"url":"git+https://github.com/deepseek-ai/deepseek-harness.git","type":"git","directory":"packages/feedback/message-feedback"},"_npmVersion":"11.16.0","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1-rc.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"@deepseek-ai/cordis":"^4.0.1-rc.1","@deepseek-ai/dsh-llm":"^0.0.1-rc.2","@deepseek-ai/dsh-brand":"^0.0.1-rc.2","@deepseek-ai/dsh-session":"^0.0.1-rc.2","@deepseek-ai/dsh-storage":"^0.0.1-rc.2","@deepseek-ai/dsh-type-meta":"^0.0.1-rc.2","@deepseek-ai/dsh-invariants":"^0.0.1-rc.2","@deepseek-ai/dsh-storage-json":"^0.0.1-rc.2","@deepseek-ai/dsh-storage-domain":"^0.0.1-rc.2","@deepseek-ai/cordis-plugin-loader":"^1.0.1-rc.1","@deepseek-ai/cordis-plugin-include":"^1.0.5-rc.1","@deepseek-ai/dsh-session-persistence":"^0.0.1-rc.2","@deepseek-ai/dsh-session-persistence-jsonl":"^0.0.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1-rc.1","@deepseek-ai/dsh-llm":"^0.0.1-rc.2","@deepseek-ai/dsh-brand":"^0.0.1-rc.2","@deepseek-ai/dsh-session":"^0.0.1-rc.2","@deepseek-ai/dsh-type-meta":"^0.0.1-rc.2","@deepseek-ai/dsh-invariants":"^0.0.1-rc.2","@deepseek-ai/dsh-storage-domain":"^0.0.1-rc.2","@deepseek-ai/dsh-session-persistence":"^0.0.1-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/dsh-message-feedback_0.0.1-rc.2_1786461848932_0.06793416882176295","host":"s3://npm-registry-packages-npm-production"},"_cnpmcore_publish_time":"2026-08-11T15:24:09.100Z","publish_time":1786461849100,"_source_registry_name":"default"},"0.1.0-rc.6":{"name":"@deepseek-ai/dsh-message-feedback","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","version":"0.1.0-rc.6","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/deepseek-ai/deepseek-harness.git","directory":"packages/feedback/message-feedback"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","peerDependencies":{"@deepseek-ai/dsh-brand":"^0.1.0-rc.6","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.6","@deepseek-ai/dsh-session":"^0.1.0-rc.6","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.6","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.6","@deepseek-ai/cordis":"^4.0.1"},"dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"devDependencies":{"@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/dsh-brand":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-session":"^0.1.0-rc.6","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.6","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.0-rc.6","@deepseek-ai/dsh-storage":"^0.1.0-rc.6","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.6","@deepseek-ai/dsh-storage-json":"^0.1.0-rc.6","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.6","@deepseek-ai/cordis":"^4.0.1"},"readmeFilename":"README.zh.md","_id":"@deepseek-ai/dsh-message-feedback@0.1.0-rc.6","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","_integrity":"sha512-yqI49BjgVODSPQex7KdRhc4fUquvhifRYe73QP3w6snXYB6058tH8WQk2Yx+m1APi60dLEAZ1AJibRA4oCo6WQ==","_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.6.tgz","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.6.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-yqI49BjgVODSPQex7KdRhc4fUquvhifRYe73QP3w6snXYB6058tH8WQk2Yx+m1APi60dLEAZ1AJibRA4oCo6WQ==","shasum":"2aef26274667e2583aa8eec300c187e61c95d8c1","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.6.tgz","fileCount":19,"unpackedSize":98577,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCDuDVzTt6m1ROf1jxpLnArC1SxkJGNE8ivtToaXr2fRwIhAN3AJT7QCU0Odl6zrVUmgR/bj21oErOF6hJpoWLpZfyF"}],"size":23523},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"directories":{},"maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-message-feedback_0.1.0-rc.6_1786624399502_0.9277287319792815"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-08-13T12:33:19.660Z","publish_time":1786624399660,"_source_registry_name":"default"},"0.1.0-rc.3":{"name":"@deepseek-ai/dsh-message-feedback","version":"0.1.0-rc.3","license":"MIT","_id":"@deepseek-ai/dsh-message-feedback@0.1.0-rc.3","maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"dist":{"shasum":"3f6b25e201bd440c796e3016348981e2c7f454ac","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.3.tgz","fileCount":19,"integrity":"sha512-Ttirrj7XLZBRbGsfp0g+t/yjcgoztSvO9DwlIO4qR/wudxZVmAxMRsjg/GYU8khBRFg+u4CsFyWowydx/U/frg==","signatures":[{"sig":"MEYCIQD8pVZ8PyxMHNZSkcQqvh0WZTVyP8q/g7jIB5hLMEuZtQIhAIG46KxaL2dHrOrOMXnZZ+clU9QG/4ljAOD/oDfbXlEf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98581,"size":23528},"main":"lib/index.js","type":"module","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.3.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.3.tgz","_integrity":"sha512-Ttirrj7XLZBRbGsfp0g+t/yjcgoztSvO9DwlIO4qR/wudxZVmAxMRsjg/GYU8khBRFg+u4CsFyWowydx/U/frg==","repository":{"url":"git+https://github.com/deepseek-ai/deepseek-harness.git","type":"git","directory":"packages/feedback/message-feedback"},"_npmVersion":"11.16.0","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"readmeFilename":"README.zh.md","devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.3","@deepseek-ai/dsh-brand":"^0.1.0-rc.3","@deepseek-ai/dsh-session":"^0.1.0-rc.3","@deepseek-ai/dsh-storage":"^0.1.0-rc.3","@deepseek-ai/dsh-invariants":"^0.1.0-rc.3","@deepseek-ai/dsh-storage-json":"^0.1.0-rc.3","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.3","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.3","@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.3","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.0-rc.3"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.3","@deepseek-ai/dsh-brand":"^0.1.0-rc.3","@deepseek-ai/dsh-session":"^0.1.0-rc.3","@deepseek-ai/dsh-invariants":"^0.1.0-rc.3","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.3","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.3","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-message-feedback_0.1.0-rc.3_1786619718966_0.7564253555331939","host":"s3://npm-registry-packages-npm-production"},"_cnpmcore_publish_time":"2026-08-13T11:15:19.094Z","publish_time":1786619719094,"_source_registry_name":"default"},"0.1.0-rc.7":{"name":"@deepseek-ai/dsh-message-feedback","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","version":"0.1.0-rc.7","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/deepseek-ai/deepseek-harness.git","directory":"packages/feedback/message-feedback"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","peerDependencies":{"@deepseek-ai/dsh-brand":"^0.1.0-rc.7","@deepseek-ai/dsh-invariants":"^0.1.0-rc.7","@deepseek-ai/dsh-llm":"^0.1.0-rc.7","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.7","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.7","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-session":"^0.1.0-rc.7","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.7"},"dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"devDependencies":{"@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/dsh-brand":"^0.1.0-rc.7","@deepseek-ai/dsh-invariants":"^0.1.0-rc.7","@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/dsh-llm":"^0.1.0-rc.7","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.7","@deepseek-ai/dsh-session":"^0.1.0-rc.7","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.0-rc.7","@deepseek-ai/dsh-storage":"^0.1.0-rc.7","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.7","@deepseek-ai/dsh-storage-json":"^0.1.0-rc.7","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.7","@deepseek-ai/cordis":"^4.0.1"},"readmeFilename":"README.zh.md","_id":"@deepseek-ai/dsh-message-feedback@0.1.0-rc.7","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","_integrity":"sha512-P/Inw7dQMZCC6I6NC6G0UF9SeOVlpQxOBg2+LoCdvyTt40itDow2wmlThqkQDIt4UMHLT4yRc0Gd6a4gmTNJ2w==","_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.7.tgz","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.7.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-P/Inw7dQMZCC6I6NC6G0UF9SeOVlpQxOBg2+LoCdvyTt40itDow2wmlThqkQDIt4UMHLT4yRc0Gd6a4gmTNJ2w==","shasum":"601547c79a4a737668a5d39047b2f609be97e8f8","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.7.tgz","fileCount":19,"unpackedSize":98577,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEN6OOmF8cvmetT156dtlfnzK5IDouT+ODTIRYX8gsHmAiEAqNisgNyfFqVaiHjo5TxYws1hNn04mSlo/7y0O7CzjhY="}],"size":23528},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"directories":{},"maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-message-feedback_0.1.0-rc.7_1786966656430_0.20671823123869748"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-08-17T11:37:36.573Z","publish_time":1786966656573,"_source_registry_name":"default"},"0.1.0-rc.8":{"name":"@deepseek-ai/dsh-message-feedback","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","version":"0.1.0-rc.8","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/deepseek-ai/deepseek-harness.git","directory":"packages/feedback/message-feedback"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","peerDependencies":{"@deepseek-ai/dsh-invariants":"^0.1.0-rc.8","@deepseek-ai/dsh-llm":"^0.1.0-rc.8","@deepseek-ai/dsh-session":"^0.1.0-rc.8","@deepseek-ai/dsh-brand":"^0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.8","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.8","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.8","@deepseek-ai/cordis":"^4.0.1"},"dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"devDependencies":{"@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/dsh-brand":"^0.1.0-rc.8","@deepseek-ai/dsh-invariants":"^0.1.0-rc.8","@deepseek-ai/dsh-llm":"^0.1.0-rc.8","@deepseek-ai/dsh-session":"^0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"^0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.0-rc.8","@deepseek-ai/dsh-storage":"^0.1.0-rc.8","@deepseek-ai/dsh-storage-domain":"^0.1.0-rc.8","@deepseek-ai/dsh-storage-json":"^0.1.0-rc.8","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-typert-protocol":"^0.1.0-rc.8"},"readmeFilename":"README.zh.md","_id":"@deepseek-ai/dsh-message-feedback@0.1.0-rc.8","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","_integrity":"sha512-5DYXVLcnvTRs74Att52LGNR+x+RCf1X5s5+gOSUddsjnQ0wn4f3pzfc0o4F+91aE2zX3xzQ3/LhlW5UOJdkB0Q==","_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.8.tgz","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.0-rc.8.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-5DYXVLcnvTRs74Att52LGNR+x+RCf1X5s5+gOSUddsjnQ0wn4f3pzfc0o4F+91aE2zX3xzQ3/LhlW5UOJdkB0Q==","shasum":"3bc366b5eda7a5b77c78bb2c762d4bd424fdf6b6","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.8.tgz","fileCount":19,"unpackedSize":98577,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHctdjHjsj0LRd8fZu9R2eqSpqxrNuppTRtST5AJlLatAiEAxSkJDx73Ke5mzRWN4PUJQzJYhIXpar9vrHP3DrrnEb8="}],"size":23524},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"directories":{},"maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-message-feedback_0.1.0-rc.8_1787153415964_0.11963337685696618"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-08-19T15:30:16.107Z","publish_time":1787153416107,"_source_registry_name":"default"},"0.1.1-rc.1":{"name":"@deepseek-ai/dsh-message-feedback","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","version":"0.1.1-rc.1","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/deepseek-ai/deepseek-harness.git","directory":"packages/feedback/message-feedback"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","peerDependencies":{"@deepseek-ai/dsh-brand":"^0.1.1-rc.1","@deepseek-ai/dsh-invariants":"^0.1.1-rc.1","@deepseek-ai/dsh-session-persistence":"^0.1.1-rc.1","@deepseek-ai/dsh-storage-domain":"^0.1.1-rc.1","@deepseek-ai/dsh-typert-protocol":"^0.1.1-rc.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1"},"dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"devDependencies":{"@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/dsh-brand":"^0.1.1-rc.1","@deepseek-ai/dsh-invariants":"^0.1.1-rc.1","@deepseek-ai/dsh-session-persistence":"^0.1.1-rc.1","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.1-rc.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-storage-domain":"^0.1.1-rc.1","@deepseek-ai/dsh-storage":"^0.1.1-rc.1","@deepseek-ai/dsh-storage-json":"^0.1.1-rc.1","@deepseek-ai/dsh-typert-protocol":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/cordis":"^4.0.1"},"readmeFilename":"README.zh.md","_id":"@deepseek-ai/dsh-message-feedback@0.1.1-rc.1","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","_integrity":"sha512-uG1+QqnlA7pTLj9ZffQRfIbZDrp7kHnquWotqZkc4EjLF2sCwWDB7YHYhhszjTbfOY4QAWk3tWvcszC0bV1H5Q==","_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.1-rc.1.tgz","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.1-rc.1.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-uG1+QqnlA7pTLj9ZffQRfIbZDrp7kHnquWotqZkc4EjLF2sCwWDB7YHYhhszjTbfOY4QAWk3tWvcszC0bV1H5Q==","shasum":"17996f34b845a025d4e7ce9a835fa733a3870a0a","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.1-rc.1.tgz","fileCount":19,"unpackedSize":98580,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG2WCuS/4bldCUzgA5bth3F/rwTLRM4T8bc92+pa1AxuAiEAnZh0HbDvgjC/3ErGHIq52euoNugtEkQd1CzDLcq06EE="}],"size":23533},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"directories":{},"maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-message-feedback_0.1.1-rc.1_1787294335055_0.8277921166920739"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-08-21T06:38:55.203Z","publish_time":1787294335203,"_source_registry_name":"default"},"0.1.1-rc.2":{"name":"@deepseek-ai/dsh-message-feedback","description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","version":"0.1.1-rc.2","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/deepseek-ai/deepseek-harness.git","directory":"packages/feedback/message-feedback"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"},"./typert":{"types":"./lib/typert.host.d.ts","default":"./lib/typert.host.js"},"./remote":{"types":"./lib/typert.remote-client.d.ts","default":"./lib/typert.remote-client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","peerDependencies":{"@deepseek-ai/dsh-brand":"^0.1.1-rc.2","@deepseek-ai/dsh-llm":"^0.1.1-rc.2","@deepseek-ai/dsh-session":"^0.1.1-rc.2","@deepseek-ai/dsh-session-persistence":"^0.1.1-rc.2","@deepseek-ai/dsh-invariants":"^0.1.1-rc.2","@deepseek-ai/dsh-storage-domain":"^0.1.1-rc.2","@deepseek-ai/dsh-typert-protocol":"^0.1.1-rc.2","@deepseek-ai/cordis":"^4.0.1"},"dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"devDependencies":{"@deepseek-ai/cordis-plugin-include":"^1.0.6","@deepseek-ai/cordis-plugin-loader":"^1.0.2","@deepseek-ai/dsh-brand":"^0.1.1-rc.2","@deepseek-ai/dsh-invariants":"^0.1.1-rc.2","@deepseek-ai/dsh-llm":"^0.1.1-rc.2","@deepseek-ai/dsh-session":"^0.1.1-rc.2","@deepseek-ai/dsh-session-persistence":"^0.1.1-rc.2","@deepseek-ai/dsh-session-persistence-jsonl":"^0.1.1-rc.2","@deepseek-ai/dsh-storage":"^0.1.1-rc.2","@deepseek-ai/dsh-storage-domain":"^0.1.1-rc.2","@deepseek-ai/dsh-storage-json":"^0.1.1-rc.2","@deepseek-ai/dsh-typert-protocol":"^0.1.1-rc.2","@deepseek-ai/cordis":"^4.0.1"},"readmeFilename":"README.zh.md","_id":"@deepseek-ai/dsh-message-feedback@0.1.1-rc.2","bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","_integrity":"sha512-GzxDiNvyUVs/bbbm+Hr3MfuU3wM8ErRF5z9XadnSGPYZvipZDAMrvrS5v6JgOUaZt6ApBpEMJ4xVgIel1VnGYQ==","_resolved":"/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.1-rc.2.tgz","_from":"file:/home/runner/work/deepseek-harness/deepseek-harness/dist/npm/deepseek-ai-dsh-message-feedback-0.1.1-rc.2.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-GzxDiNvyUVs/bbbm+Hr3MfuU3wM8ErRF5z9XadnSGPYZvipZDAMrvrS5v6JgOUaZt6ApBpEMJ4xVgIel1VnGYQ==","shasum":"cdde9bdd346d1145dac70515b45f06c55c938fd2","tarball":"https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.1-rc.2.tgz","fileCount":19,"unpackedSize":98580,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD0YRq4I3jD9RjXDfrsiDUFl4izKH3mAKkPO1JNTufSxwIhALhrgOk6LrAvN74QuNmhgitWQXPjLJ6yKnRi4UVXvJpq"}],"size":23528},"_npmUser":{"name":"imccyu","email":"imccyu@gmail.com"},"directories":{},"maintainers":[{"name":"imccyu","email":"imccyu@gmail.com"},{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-message-feedback_0.1.1-rc.2_1787315521419_0.81655901641899"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-08-21T12:32:01.577Z","publish_time":1787315521577,"_source_registry_name":"default"}},"bugs":{"url":"https://github.com/deepseek-ai/deepseek-harness/issues"},"description":"Lifecycle-bound per-message rating and note sidecar for the DeepSeek Harness","homepage":"https://github.com/deepseek-ai/deepseek-harness#readme","license":"BSD-3-Clause","maintainers":[{"name":"tianyicui-deepseek","email":"tianyi@deepseek.com"},{"name":"imccyu","email":"imccyu@gmail.com"}],"readme":"# @deepseek-ai/dsh-message-feedback\n\nEnglish | [中文](README.zh.md)\n\nHost-owned editable feedback for one finalized assistant message. The package registers `ctx.messageFeedback`, persists one lifecycle-bound sidecar row per Session in storage-domain, and publishes the Host `messageFeedback.list`, `messageFeedback.put`, and `messageFeedback.delete` unary Remote contract. It is separate from the immutable Session-level `feedback/record` event and performs no telemetry handoff. The [message-feedback sidecar Agent Note](../../../.agents/notes/implemented/architecture/2026-08-10-message-feedback-sidecar.md) owns the design boundary.\n\nPublic request, value, version, and failure types are exported from the package root and `@deepseek-ai/dsh-message-feedback/types`; [`src/types.ts`](src/types.ts) is their source.\n\n## Configuration\n\n| key | meaning |\n|---|---|\n| `maxNoteBytes` | Required positive safe integer: maximum UTF-8 byte length of one optional note. |\n\nNotes must contain at least one non-whitespace character, but accepted text is stored verbatim rather than trimmed. Omitting `note` means the desired value has no note, so a version-matched material `put` clears an existing note. Note validation precedes Session lookup and can therefore return `note-blank` or `note-too-large` for a missing Session without touching persistence.\n\n```yaml\n- id: message-feedback\n  name: '@deepseek-ai/dsh-message-feedback'\n  config:\n    maxNoteBytes: 8192\n```\n\nThe service injects `storageDomain`, `sessionPersistence`, and `sessions`. Its durable domain is `message_feedback`, with one `sessions` table row per `SessionId`.\n\n## Data, lifecycle, and durability\n\n`MessageFeedbackItem` contains `messageId`, `rating: 'positive' | 'negative'`, optional `note`, an opaque equality-only `version`, and Host-assigned `createdAt`/`updatedAt` Unix-millisecond timestamps. A material update preserves `createdAt`, replaces `version`, and keeps `updatedAt` from moving backward. `list` returns fresh immutable snapshots in first-creation order; updating an item retains its place, while deleting and later recreating it appends a new item.\n\nEach stored row carries the inspected Session header identity `{createdAt, cwd}`. A mismatch is treated as absence: `list` returns an empty `items` array, `delete` returns the absent postcondition, and `put` may replace the stale row with one bound to the current identity. This fences a reused `SessionId` when its header identity differs. Forks use a distinct Session identity and receive no feedback-row copy.\n\n`SessionPersistence.inspect()` supplies a cold-safe observation without publishing or resuming an Agent and without committing cold repair. For a Session without a live owner, `listSnapshots()` first decides definite absence; an `inspect()` failure for a catalogued Session remains an infrastructure failure rather than being guessed into `session-not-found`. `put` accepts only a non-empty, append-origin `assistant/message` with the requested `MessageId`; replacement-origin messages, empty usage-only assistant records, and non-assistant records return `target-not-found`.\n\nAfter initial validation, `put` establishes a durability barrier before writing the sidecar. A matching live Session commits through the canonical `ctx.sessions.flush` checkpoint, then both live and cold paths are physically read from sequence zero through `SessionPersistence.readFrom`. The resulting observation's header identity and target are validated again. A missing flush participant, changed identity, vanished target, or physical-read failure prevents the sidecar commit, so durable feedback never precedes the durable target message.\n\nMessage feedback is not Session-log content or a Session projection. It emits no `feedback/record` event, does not enter model history, and does not trigger `FEEDBACK_ONLY` telemetry release.\n\n## Service and Host Remote contract\n\nThe same three `MessageFeedbackService` methods are published by `GatewayService` and `@Remote`; the Host endpoint names are `messageFeedback.list`, `messageFeedback.put`, and `messageFeedback.delete`. Every method returns a discriminated business union: `{ ok: true, value }` or `{ ok: false, error }`. Operational storage, corruption, or missing-durability-listener failures reject instead of being mislabeled as business errors.\n\n| Method | Request | Success `value` | Rejected `error.code` |\n|---|---|---|---|\n| `list` | `MessageFeedbackListRequest { sessionId }` | `MessageFeedbackListValue { items }` | `session-not-found` |\n| `put` | `MessageFeedbackPutRequest { sessionId, messageId, rating, note?, ifVersion }` | committed `MessageFeedbackItem` | `session-not-found`, `target-not-found`, `version-conflict`, `note-blank`, `note-too-large` |\n| `delete` | `MessageFeedbackDeleteRequest { sessionId, messageId, ifVersion }` | `MessageFeedbackDeleteValue { absent: true }` | `session-not-found`, `version-conflict` |\n\n`MessageFeedbackVersionConflict` returns the authoritative `current` item, or `null` when no item exists. This lets a caller reconcile the current rating, note, and version without a second `list` request. `MessageFeedbackNoteTooLarge` returns both `maxBytes` and `actualBytes`. The Client Remote aggregate does not mount the generated client contribution yet; Host callers can use the service/Remote contract without that client assembly.\n\n## Compare-and-set and idempotency\n\n`ifVersion: null` requests creation only; every request for an existing item requires its exact current version, including a no-op whose desired value already matches. The check is per message rather than per Session, so changing one item does not conflict with another. Every material create or update assigns a fresh opaque UUID token, preventing stale writes from crossing an ABA value cycle.\n\nA matching-version no-op returns the already stored item with unchanged version and timestamps. After a lost success response, a retry with the old token receives `version-conflict.current`; the caller can compare that authoritative item with its desired value without an extra read. `delete` ignores `ifVersion` when the item is already absent and always returns the stable `{ absent: true }` postcondition after success.\n\nA per-Session promise queue encloses inspection, durability validation, sidecar read, comparison, and whole-row write. These semantics serialize concurrent mutations through one service instance; storage-domain itself has no cross-process conditional write.\n\nPlugin disposal closes mutation admission, drains every operation already accepted into the per-Session queues, and only then closes the storage domain. A mutation submitted after disposal begins rejects as a lifecycle failure instead of entering a closing domain.\n\n## Model Experience\n\n### Local message-feedback state\n\n#### What the model sees\n\nNothing. `ctx.messageFeedback` registers no tool, prompt section, model-facing context, or Session event; feedback stays in a Host-owned sidecar unless a separately documented Consumer explicitly exposes it.\n\n#### Token effect\n\nZero. No request, result, rating, note, timestamp, or failure from this package enters a model request.\n\n#### KV Cache effect\n\nIndependent. Listing or mutating message feedback does not touch a model request prefix and cannot invalidate an otherwise reusable provider cache entry.\n\n## Known Limitations and Deferred Work\n\n- **Client aggregate and UI are absent** — the Host Remote contract ships, but the Client Remote aggregate contribution and any UI consumer are separately owned and deferred.\n- **Compare-and-set is single-process** — the per-Session queue serializes one service instance only; multiple Host processes writing one storage root can still lose updates because storage-domain exposes no cross-process conditional write.\n- **No durable Session deletion cascade** — Session persistence has no deletion API, and `session/disposed`/`host/session-removed` mean detach rather than durable deletion. The service therefore retains empty rows and may leave orphan rows after out-of-band log removal instead of deleting valid feedback on detach.\n- **Detach/catalog retirement window** — a request in the narrow interval after live detach but before the persistence catalog materializes the header can receive `session-not-found`; callers retry after retirement materialization.\n- **Header identity is not a content fingerprint** — `{createdAt, cwd}` detects reuse only when those fields differ; a cloned log retaining the same header identity is indistinguishable.\n- **Trusted caller boundary** — `list`/`put`/`delete` carry no authenticated actor or audit identity. A deployment must expose the Host gateway only through its trusted or separately authenticated boundary until authorization and attribution are added.\n- **Catalog and row bounds** — a cold request scans the complete Session snapshot catalog because persistence has no lookup-by-id metadata operation. `maxNoteBytes` bounds one note, but the item count and aggregate retained bytes of one Session row are not capped; an indexed metadata read and deployment-owned row bound remain deferred until a concrete consumer defines their policy.\n","readmeFilename":"README.zh.md","repository":{"url":"git+https://github.com/deepseek-ai/deepseek-harness.git","type":"git","directory":"packages/feedback/message-feedback"},"_source_registry_name":"default"}