{"_id":"@allis-plugin/create-dsh","_rev":"4-82670abb06c10ee59d7a5bfa7560f6ba","name":"@allis-plugin/create-dsh","dist-tags":{"latest":"1.0.2"},"versions":{"0.1.5":{"name":"@allis-plugin/create-dsh","version":"0.1.5","keywords":["deepseek","deepseek-harness","dsh","plugin","cordis","scaffold","create-dsh"],"license":"MIT","_id":"@allis-plugin/create-dsh@0.1.5","maintainers":[{"name":"yummysauce","email":"james.bond.land@gmail.com"}],"homepage":"https://github.com/yummysource/create-deepseek-harness-plugin#readme","bugs":{"url":"https://github.com/yummysource/create-deepseek-harness-plugin/issues"},"bin":{"create-dsh":"src/cli.js"},"dist":{"shasum":"a724ec0c0ae0091524010bc4591e699e7fa5dc0e","tarball":"https://registry.npmjs.org/@allis-plugin/create-dsh/-/create-dsh-0.1.5.tgz","fileCount":50,"integrity":"sha512-LqjOZWqIZsEcpK6nxQ+3stW6JwnTqMMG0lrdL6UJtbhcqBMGWYJAJ779bGOqcS0bxMiWQShk6l36G8bFRdhLGg==","signatures":[{"sig":"MEYCIQD9t70NcDd2vlZvBA8u2EUTEdDjrg1iqte9XKE2L/eEgAIhAO1Wre2Y1c8iZqbDSFw8BWMpK1rkI6jPzKob7FpcmOjZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allis-plugin%2fcreate-dsh@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":134806},"type":"module","engines":{"node":"^22.19.0 || >=24.0.0"},"gitHead":"32047288b943f543e91770ed40690d797b8c163f","scripts":{"test":"node --test","test:verify":"DSH_SMOKE_VERIFY=1 node --test"},"_npmUser":{"name":"yummysauce","email":"james.bond.land@gmail.com"},"repository":{"url":"git+https://github.com/yummysource/create-deepseek-harness-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Scaffold a DeepSeek Harness (DSH) plugin — basic / tool / service / app / events / webui templates, version pinning aligned to your installed dsh, and a --verify that actually boots the plugin.","directories":{},"_nodeVersion":"24.19.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/create-dsh_0.1.5_1787295870883_0.3087704245584182","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@allis-plugin/create-dsh","version":"1.0.0","keywords":["deepseek","deepseek-harness","dsh","plugin","cordis","scaffold","create-dsh"],"license":"MIT","_id":"@allis-plugin/create-dsh@1.0.0","maintainers":[{"name":"yummysauce","email":"james.bond.land@gmail.com"}],"homepage":"https://github.com/yummysource/create-dsh#readme","bugs":{"url":"https://github.com/yummysource/create-dsh/issues"},"bin":{"create-dsh":"src/cli.js"},"dist":{"shasum":"cf224a80f055da9e7be4f04f2f5798c1566b1660","tarball":"https://registry.npmjs.org/@allis-plugin/create-dsh/-/create-dsh-1.0.0.tgz","fileCount":50,"integrity":"sha512-QbqbJA4pnBctg/7HpdIovfKws+KVLgRGmqZMiraRAlSzjJhEn8kkiMDJAQEU0uB/kP3s4V0s7vQG4VQJv6COyQ==","signatures":[{"sig":"MEYCIQC6E942ryHnQS2UrR2ss8N3F0BsUWmxa/aTfq6wtgbbHgIhAP1HnHeYMjXPBlH07qDT/nQQ+/kIGft/2KKc2P5NZRSm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allis-plugin%2fcreate-dsh@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":134743},"type":"module","engines":{"node":"^22.19.0 || >=24.0.0"},"gitHead":"3e8656aa3a9f78cfa481715e4a8f6b734a292b0a","scripts":{"test":"node --test","test:verify":"DSH_SMOKE_VERIFY=1 node --test"},"_npmUser":{"name":"yummysauce","email":"james.bond.land@gmail.com"},"repository":{"url":"git+https://github.com/yummysource/create-dsh.git","type":"git"},"_npmVersion":"11.17.0","description":"Scaffold a DeepSeek Harness (DSH) plugin — basic / tool / service / app / events / webui templates, version pinning aligned to your installed dsh, and a --verify that actually boots the plugin.","directories":{},"_nodeVersion":"24.19.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/create-dsh_1.0.0_1787299444567_0.20039093220020265","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@allis-plugin/create-dsh","version":"1.0.1","keywords":["deepseek","deepseek-harness","dsh","plugin","cordis","scaffold","create-dsh"],"license":"MIT","_id":"@allis-plugin/create-dsh@1.0.1","maintainers":[{"name":"yummysauce","email":"james.bond.land@gmail.com"}],"homepage":"https://github.com/yummysource/create-dsh#readme","bugs":{"url":"https://github.com/yummysource/create-dsh/issues"},"bin":{"create-dsh":"src/cli.js"},"dist":{"shasum":"6bb44941ded32f69e7b97a5c6061391b763f71de","tarball":"https://registry.npmjs.org/@allis-plugin/create-dsh/-/create-dsh-1.0.1.tgz","fileCount":56,"integrity":"sha512-Lerh5wAT0PtX/FU+0ll6TYJuoHWJV8/EODGunKyXCGv7Od977f7cFR2XDVyAuxrpbKMpd34UjV11T9bck5v5Xg==","signatures":[{"sig":"MEUCIGRcxIApIAHuGDIhkRaXJZ+miiM1vanbHN+tzUMz22fMAiEAnVuyhD+iWZuAImYwuZPdwU0lW4El0n9+rTOOof37ilA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allis-plugin%2fcreate-dsh@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":170334},"type":"module","engines":{"node":"^22.19.0 || >=24.0.0"},"gitHead":"ea130b0c28f757d7c17a0986e119334b445a7896","scripts":{"test":"node --test","test:verify":"DSH_SMOKE_VERIFY=1 node --test"},"_npmUser":{"name":"yummysauce","email":"james.bond.land@gmail.com"},"repository":{"url":"git+https://github.com/yummysource/create-dsh.git","type":"git"},"_npmVersion":"11.17.0","description":"Scaffold a DeepSeek Harness (DSH) plugin — basic / tool / service / app / events / webui templates, version pinning aligned to your installed dsh, and a --verify that actually boots the plugin.","directories":{},"_nodeVersion":"24.19.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/create-dsh_1.0.1_1787315280486_0.3831602341232241","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@allis-plugin/create-dsh","version":"1.0.2","description":"Scaffold a DeepSeek Harness (DSH) plugin — basic / tool / service / app / events / webui templates, version pinning aligned to your installed dsh, and a --verify that actually boots the plugin.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/yummysource/create-dsh.git"},"homepage":"https://github.com/yummysource/create-dsh#readme","bugs":{"url":"https://github.com/yummysource/create-dsh/issues"},"type":"module","bin":{"create-dsh":"src/cli.js"},"engines":{"node":"^22.19.0 || >=24.0.0"},"keywords":["deepseek","deepseek-harness","dsh","plugin","cordis","scaffold","create-dsh"],"publishConfig":{"access":"public"},"scripts":{"test":"node --test","test:verify":"DSH_SMOKE_VERIFY=1 node --test"},"dependencies":{},"devDependencies":{},"gitHead":"b98780d1be5fc4ce0b2ef04ba5ff3f6b8e7fb86f","_id":"@allis-plugin/create-dsh@1.0.2","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-VusCXrwNwjzPTlVv+myqwA//f8zZIiSBMWlBMzSkAofYNNBVvTv8UxLK0xmALXVorOQdOI6ikkyQ9xhYHb9wLA==","shasum":"edfba754bfd3505aeec03c81de85d8dfef2d5435","tarball":"https://registry.npmjs.org/@allis-plugin/create-dsh/-/create-dsh-1.0.2.tgz","fileCount":56,"unpackedSize":170343,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allis-plugin%2fcreate-dsh@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCPoENnU9Fo38504JDjPA1VaY05BLowZpS8TJojhSTWgAIhAK4YCj8coyybqvbWInjR0KbQjheNKAw0k2mKbBJVwFJ+"}]},"_npmUser":{"name":"yummysauce","email":"james.bond.land@gmail.com"},"directories":{},"maintainers":[{"name":"yummysauce","email":"james.bond.land@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/create-dsh_1.0.2_1788400130000_0.8043027930857161"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-21T07:04:30.688Z","modified":"2026-09-03T01:48:50.497Z","0.1.5":"2026-08-21T07:04:31.013Z","1.0.0":"2026-08-21T08:04:04.713Z","1.0.1":"2026-08-21T12:28:00.631Z","1.0.2":"2026-09-03T01:48:50.151Z"},"bugs":{"url":"https://github.com/yummysource/create-dsh/issues"},"license":"MIT","homepage":"https://github.com/yummysource/create-dsh#readme","keywords":["deepseek","deepseek-harness","dsh","plugin","cordis","scaffold","create-dsh"],"repository":{"type":"git","url":"git+https://github.com/yummysource/create-dsh.git"},"description":"Scaffold a DeepSeek Harness (DSH) plugin — basic / tool / service / app / events / webui templates, version pinning aligned to your installed dsh, and a --verify that actually boots the plugin.","maintainers":[{"name":"yummysauce","email":"james.bond.land@gmail.com"}],"readme":"# @allis-plugin/create-dsh\n\n[English](README.md) | 繁體中文\n\n產生一個能一次編譯成功、掛得上去、也真的跑得起來的 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 插件專案。\n\n```sh\nnpx @allis-plugin/create-dsh@latest hello-world -t basic\n```\n\n`@latest` 不要省略：npx 會快取，少了它可能默默跑到你幾個月前那份。\n\n## 模板\n\n| 模板 | 產生什麼 |\n|---|---|\n| `basic` | 帶 `Config` schema 的純副作用插件——一個計時器，間隔與訊息都可設定。 |\n| `tool` | 模型可以呼叫的工具，用 `defineTool`：參數 schema、輸出 schema、render、UI 卡片，外加設定。 |\n| `service` | 一組能力接縫：抽象的 Service Definition 加上一份能跑的實作，發佈成 `ctx.<id>`。 |\n| `app` | 擁有自己命令列參數的應用，並透過 `!!js` 把參數餵進自己那一行設定。 |\n| `events` | 監聽者：session 與工具事件、四種分派模式，以及自己宣告的事件供他人擴充。 |\n| `llm` | LLM adapter：chunk 協定、attribution 契約，以及一個標記好的 provider 呼叫位置。 |\n\n每個模板都附 `Config` schema——因為「讓它能設定」永遠是「讓它能跑」之後的第一個需求。\n\n## 它替你避開的坑\n\n**版本對齊你實際在跑的 harness。** 已安裝的插件在執行期綁定的是你 dsh 裡那幾份副本，所以編譯時用的型別必須是同一條版本線。這個工具會讀 `dsh --version` 並鎖定它回報的那條線，全程不連網——去問 npm 反而會重新踩進它要防的坑：`@deepseek-ai/dsh-tools` 的 `latest` dist-tag 是過期的 `0.0.1-rc.1`。\n\n**相依放在該放的位置。** 所有 `@deepseek-ai/*` 一律放 `devDependencies`。使用者安裝時不會裝這些，所以已安裝的插件會經由 `$DSH_HOME/profiles/node_modules` 解析、綁定到 harness 自己那份；宣告成真正的相依則會連第二份副本一起出貨。本地開發時剛好相反——專案自己的 `node_modules` 會贏得解析——所以那些套件鎖的是版本**線**，而且它們的 peer 要正常安裝。餓著它們的話，插件編譯完全正常，然後每次啟動都失敗。\n\n**`--verify` 會真的啟動插件，不只檢查設定。** `--dump-config` 只證明設定層組合成功；一個 dump 得漂漂亮亮的 profile 照樣可能每次啟動都失敗，因為 Node 根本解析不到那個模組。所以最後一步會啟動真實 profile，等到看見插件套用為止。\n\n```sh\nnpx @allis-plugin/create-dsh@latest my-tool -t tool --yes --verify\n```\n\n**二十條踩坑筆記隨專案附上。** 每個產生出來的 README 結尾都有這份清單，讓人不必重新踩一遍——包含最花時間的那一條：CLI 要用 `npm i -g @deepseek-ai/dsh` 安裝，絕對不要用 `pnpm add -g`。\n\n## 你真正會待在裡面的循環\n\n先把插件掛進一個拋棄式 profile，路徑要用**絕對路徑**：\n\n```sh\ncd my-plugin\ndsh plugin --profile probe add \"$PWD\"\n```\n\n相對路徑會以「你執行指令時所在的目錄」為基準解析；而該目錄若沒有 `package.json`，安裝會**半成功**\n——symlink 建好了，但依賴沒被記錄，bundle 也就沒進 `dsh.profile.bundles`，那一層完全不會生效。\n過程不報任何錯，`--dump-config` 只是安靜地少了你那一行。\n\n本地目錄是以 link 方式掛上、不是複製，所以 profile 永遠看到你當下的 `cordis.patch.yml` 和當下的\n`dist/`。接下來的循環只有兩個指令：\n\n```sh\nnpm run build          # 只有改了 src/ 才需要\ndsh --profile probe    # Ctrl-C 結束\n```\n\n改 patch 既不用重新建置、也不用重新 add。每個產生出來的 README 都附了這個循環，並寫明該專案成功時\n會印出哪一行，你才知道要看什麼。\n\n`dsh --profile probe --dump-config` 可以在不啟動的情況下看組合後的設定。某一行看起來不對時去查它，\n但別把它當成證明：它只說明設定層組合成功，不代表 Node 解析得到你的模組。**真的啟動才是證明。**\n\n清理有兩種方式，而它們不是同一種操作。對 profile 目錄下 `rm -rf` 是整個帶走——裡面的每個插件、\n你自己的 `cordis.patch.yml` 覆寫層、以及 `allowBuilds` 授權全都消失。對拋棄式的 probe profile 來說\n這正好，對你實際在用的 profile 則是錯的。要從保留的 profile 中只拿掉一個插件，用 `dsh plugin remove`\n——它只卸載那一個相依並移除對應的層，其餘原封不動。兩者都不會動到你的插件原始碼、對話歷史、或全域設定，\n因為那些都在 profiles 之外。\n\n```sh\nrm -rf \"${DSH_HOME:-$HOME/.dsh}/profiles/probe\"       # 拋棄式的那個\ndsh plugin --profile my-profile remove my-plugin      # 只拿掉一個插件，profile 保留\n```\n\n產生的專案預設附英文 README；加上 `--lang zh` 則會改用繁體中文撰寫，連踩坑清單一起。無論選哪個，\n程式碼、程式碼註解、以及 CLI 自己的輸出都維持英文。\n\n**產生的專案附帶一份 `AGENTS.md`。** 它是規則而不是教學：在這個專案裡工作的 agent 不准做什麼，\n以及一個改動要拿出什麼才算被驗證過。每個模板都會產生這兩份文件。\n\n## 選項\n\n```\n  -t, --template <name>    basic | tool | service | app | events | llm\n  -n, --name <pkg>         npm 套件名（預設由目錄名推導）\n      --plugin-id <id>     cordis 的 row id 與插件 name 匯出（預設推導）\n      --tool-name <name>   模型看到的工具名，僅 tool 模板適用\n  -l, --lang <en|zh>       產生的 README 語言（預設 en）\n  -y, --yes                全部採用預設值，跳過提問\n      --verify             產生後安裝、建置、掛載並啟動驗證\n      --skip-install       不安裝相依套件\n```\n\n不帶任何參數執行就會逐項詢問。\n\n## 環境需求\n\nNode `^22.19.0 || >=24.0.0`，且 `pnpm` 需在 PATH 上（`dsh plugin` 會用到）。\n\n## 授權\n\nMIT\n","readmeFilename":"README.zh-TW.md"}