@hienlh/ppm 0.17.14 → 0.17.16
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/CHANGELOG.md +14 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/{ai-resource-editor-DfCN7LjR.js → ai-resource-editor-CsossqDO.js} +1 -1
- package/dist/web/assets/{angular-html-DkR4iCth.js → angular-html-CkxY2iBQ.js} +1 -1
- package/dist/web/assets/{angular-ts-DcyL4Chx.js → angular-ts-BePeGkkC.js} +1 -1
- package/dist/web/assets/{apl-BVlrVtjt.js → apl-DBS7PWvB.js} +1 -1
- package/dist/web/assets/architecture-PBZL5I3N-NAS99xy0.js +1 -0
- package/dist/web/assets/{astro-MjJlozLj.js → astro-Clbk1k4h.js} +1 -1
- package/dist/web/assets/{audio-preview-DbFUkIzm.js → audio-preview-DIkokvPM.js} +1 -1
- package/dist/web/assets/{blade-DnJWi1fz.js → blade-BeBsBuGS.js} +1 -1
- package/dist/web/assets/{bsl-DCmJxSIz.js → bsl-DYigT3JZ.js} +1 -1
- package/dist/web/assets/{cairo-C8dDenub.js → cairo-BjpO78wI.js} +1 -1
- package/dist/web/assets/chat-tab-Bh6l253v.js +18 -0
- package/dist/web/assets/click-outside-container-DXZVmhaX.js +1 -0
- package/dist/web/assets/{cobol-DPx_nifl.js → cobol-CpuUx69s.js} +1 -1
- package/dist/web/assets/code-editor-B7F-d4DK.js +10 -0
- package/dist/web/assets/{coffee-DvFzqhgN.js → coffee-FoFd2Cxo.js} +1 -1
- package/dist/web/assets/{conflict-editor-BAAffNdj.js → conflict-editor-Dqm1bkyL.js} +3 -3
- package/dist/web/assets/{cpp-BLJN0umi.js → cpp-CO_nPfdr.js} +1 -1
- package/dist/web/assets/{crystal-BXR-9fGw.js → crystal-D-UygAAF.js} +1 -1
- package/dist/web/assets/{csv-preview-DzhSC0fd.js → csv-preview-CvP4xzug.js} +1 -1
- package/dist/web/assets/data-grid-overlay-editor-CUlFsD-D.js +1 -0
- package/dist/web/assets/database-viewer-5oNTPgjF.js +1 -0
- package/dist/web/assets/{diff-viewer-DvXxlk47.js → diff-viewer-BfWixe_z.js} +1 -1
- package/dist/web/assets/dist-BsziT-tR.js +11 -0
- package/dist/web/assets/{docx-preview-DfjH-dIr.js → docx-preview-CguUoTKe.js} +1 -1
- package/dist/web/assets/{edge-rWOlCmXT.js → edge-BSzxzX11.js} +1 -1
- package/dist/web/assets/{elixir-E7Y82okW.js → elixir-DH1-Mrep.js} +1 -1
- package/dist/web/assets/{elm-DTPGbc-w.js → elm-B0ln5J70.js} +1 -1
- package/dist/web/assets/{erb-DHqLHrE6.js → erb-GIz6NnlZ.js} +1 -1
- package/dist/web/assets/{erlang-Byg0nNiV.js → erlang-B8MgYhib.js} +1 -1
- package/dist/web/assets/esm-CjVeOTNQ.js +2 -0
- package/dist/web/assets/{extension-webview-wuMQ8pD7.js → extension-webview-DTpFt1eL.js} +1 -1
- package/dist/web/assets/{fortran-fixed-form-CY1n0Xf6.js → fortran-fixed-form-D_-TrK6U.js} +1 -1
- package/dist/web/assets/{fsharp-_vEDSCJz.js → fsharp-C9cLCk2b.js} +1 -1
- package/dist/web/assets/{gdresource-B6XT0wAC.js → gdresource-CsZ3lXwY.js} +1 -1
- package/dist/web/assets/{git-commit-Wk9ovq59.js → git-commit-xmq0KqrA.js} +1 -1
- package/dist/web/assets/{git-log-panel-SPPYmbCr.js → git-log-panel-DUX7N5tN.js} +1 -1
- package/dist/web/assets/{git-rebase-DSarGPvK.js → git-rebase-D3O-jsSX.js} +1 -1
- package/dist/web/assets/gitGraph-HDMCJU4V-B4I3L4Sf.js +1 -0
- package/dist/web/assets/glide-data-grid-7vB1SNne.js +138 -0
- package/dist/web/assets/{glimmer-js-CkYI35_P.js → glimmer-js-g74gESrC.js} +1 -1
- package/dist/web/assets/{glimmer-ts-BqmIZcds.js → glimmer-ts-DF4aDWHT.js} +1 -1
- package/dist/web/assets/{glsl-Be-yBCF5.js → glsl-D5LmfW7l.js} +1 -1
- package/dist/web/assets/{graphql-a5DrENHY.js → graphql-_KI4RuXL.js} +1 -1
- package/dist/web/assets/group-chat-tab-CNECY-zg.js +1 -0
- package/dist/web/assets/{hack-BLAg20aD.js → hack-B1NaTC39.js} +1 -1
- package/dist/web/assets/{haml-Dj6bGOQH.js → haml-DDFXadZ4.js} +1 -1
- package/dist/web/assets/{handlebars-dmEa36Oh.js → handlebars-Bp-Jq3K9.js} +1 -1
- package/dist/web/assets/{html-yacZYzSE.js → html-DyB9_5Tj.js} +1 -1
- package/dist/web/assets/{html-derivative-lLi3-RNT.js → html-derivative-CC60wi-3.js} +1 -1
- package/dist/web/assets/{http-1KaxcE4e.js → http-C-9qngH4.js} +1 -1
- package/dist/web/assets/{hurl-ST-dEEZR.js → hurl-BtxgpNDs.js} +1 -1
- package/dist/web/assets/{hxml-CpDtuq__.js → hxml-DOoOS9op.js} +1 -1
- package/dist/web/assets/{image-preview-D_8o6OLx.js → image-preview-CZg6FQ3w.js} +1 -1
- package/dist/web/assets/{index-C1Q59prB.js → index-D2G6kmTs.js} +7 -7
- package/dist/web/assets/index-DCmrZnq0.css +2 -0
- package/dist/web/assets/info-3K5VOQVL-CBbbOe3C.js +1 -0
- package/dist/web/assets/{jinja-Cjw-evAn.js → jinja-cN-150ao.js} +1 -1
- package/dist/web/assets/{jison-DfATMYoY.js → jison-CqjsqPq5.js} +1 -1
- package/dist/web/assets/{julia-DDCaxiqT.js → julia-C-I5m8W4.js} +1 -1
- package/dist/web/assets/{just-CJL529u6.js → just-CgsSW9zs.js} +1 -1
- package/dist/web/assets/keybindings-store-D8Cppv4w.js +1 -0
- package/dist/web/assets/{latex-Zc4EpLpW.js → latex-BFzR9N2d.js} +1 -1
- package/dist/web/assets/{liquid-B_6KMNYS.js → liquid-BWfr-_iC.js} +1 -1
- package/dist/web/assets/{lua-BtS2idK7.js → lua-DsXVun6g.js} +1 -1
- package/dist/web/assets/{markdown-renderer-DVVx3WCU.js → markdown-renderer-CiQkvWP_.js} +3 -3
- package/dist/web/assets/{marko-Wk6LBnck.js → marko-DWBbo09n.js} +1 -1
- package/dist/web/assets/{mdc-cRaXBrzL.js → mdc-CUMe9LOG.js} +1 -1
- package/dist/web/assets/{nextflow-Bos2wvDV.js → nextflow-CoYbADOm.js} +1 -1
- package/dist/web/assets/{nginx-DMlOwzdr.js → nginx-z-JRZREw.js} +1 -1
- package/dist/web/assets/{nim-D2dZQA88.js → nim-Ci4LHyBm.js} +1 -1
- package/dist/web/assets/notification-store-DOGxkWih.js +1 -0
- package/dist/web/assets/{number-overlay-editor-Du_UgiD3.js → number-overlay-editor-lnnuUpPI.js} +1 -1
- package/dist/web/assets/packet-RMMSAZCW-fr8-QSTF.js +1 -0
- package/dist/web/assets/{pdf-preview-HTC73FyK.js → pdf-preview-B6ZqANpw.js} +1 -1
- package/dist/web/assets/{perl-C5-Z6fPn.js → perl-pbDimKOO.js} +1 -1
- package/dist/web/assets/{php-BXNNhkMH.js → php-B003E5v7.js} +1 -1
- package/dist/web/assets/pie-UPGHQEXC-Biu7_Pbb.js +1 -0
- package/dist/web/assets/postgres-viewer-B23xTCSs.js +3 -0
- package/dist/web/assets/{pug-C1zf1yWy.js → pug-AoueAWJo.js} +1 -1
- package/dist/web/assets/{qml-OW58jGpD.js → qml-CepxioQA.js} +1 -1
- package/dist/web/assets/radar-KQ55EAFF-CMtNRpK6.js +1 -0
- package/dist/web/assets/{razor-DzjSaobM.js → razor-lIvU-Gu-.js} +1 -1
- package/dist/web/assets/{rst-RfuihOUW.js → rst-Dn-dwElE.js} +1 -1
- package/dist/web/assets/{ruby-CNO3pli1.js → ruby-DmsD1Iz5.js} +1 -1
- package/dist/web/assets/{sas-DZY5BtXx.js → sas-6IM2P4YP.js} +1 -1
- package/dist/web/assets/{scss--4g-REcN.js → scss-RgYEZQqh.js} +1 -1
- package/dist/web/assets/{settings-store-mWnY4Kt0.js → settings-store-BkSf4SPQ.js} +2 -2
- package/dist/web/assets/settings-tab-D5hAA1bY.js +1 -0
- package/dist/web/assets/{shaderlab-Cu4sBiVn.js → shaderlab-B0MNEwt4.js} +1 -1
- package/dist/web/assets/{shellsession-DWzJfEv7.js → shellsession-F8S4LrQI.js} +1 -1
- package/dist/web/assets/{soy-BnqE-5Ff.js → soy-DDlMbX7u.js} +1 -1
- package/dist/web/assets/{sparql-Ctg__NhZ.js → sparql-kthmGAAe.js} +1 -1
- package/dist/web/assets/{sql-query-editor-CJdpO95g.js → sql-query-editor-BYNM0RRl.js} +1 -1
- package/dist/web/assets/sqlite-viewer-DW9f2Hqj.js +1 -0
- package/dist/web/assets/{stata-Qk2h66XW.js → stata-Tfbew8La.js} +1 -1
- package/dist/web/assets/{surrealql-8QEX7EfH.js → surrealql-C0LIGqRx.js} +1 -1
- package/dist/web/assets/{svelte-D_mubC5-.js → svelte-CfTy8CGF.js} +1 -1
- package/dist/web/assets/{system-monitor-tab-BA9gqJRW.js → system-monitor-tab-B5f4pgdX.js} +1 -1
- package/dist/web/assets/{templ-C1jV0fsO.js → templ-V5H1Sbfy.js} +1 -1
- package/dist/web/assets/{terminal-tab-DWncjHEA.js → terminal-tab-CK3lX-0Y.js} +2 -2
- package/dist/web/assets/{tex-D_StFXy_.js → tex-C3H3uMZf.js} +1 -1
- package/dist/web/assets/treemap-KZPCXAKY-ZYVFjoaN.js +1 -0
- package/dist/web/assets/{ts-tags-B5m47rEm.js → ts-tags-7AXgG5YS.js} +1 -1
- package/dist/web/assets/{twig-C_br6GIl.js → twig-BSyS38T3.js} +1 -1
- package/dist/web/assets/{use-monaco-theme-Ch2jRiGj.js → use-monaco-theme-Jj2OxkAE.js} +1 -1
- package/dist/web/assets/{use-websocket-MvxbuTdy.js → use-websocket-DrDBgIWU.js} +1 -1
- package/dist/web/assets/{vendor-mermaid-DP1CEcGn.js → vendor-mermaid-DGOXKrJC.js} +193 -193
- package/dist/web/assets/{video-preview-rWrNCfZX.js → video-preview-BOHxkwKG.js} +1 -1
- package/dist/web/assets/{vue-DQwCnLdr.js → vue-C4d_br9u.js} +1 -1
- package/dist/web/assets/{vue-html-T_EoGpPJ.js → vue-html-CGdoz4vW.js} +1 -1
- package/dist/web/assets/{vue-vine-DmxLqX50.js → vue-vine-CqNolQlN.js} +1 -1
- package/dist/web/assets/{xml-Bs6Bw8is.js → xml-UmCmu-Od.js} +1 -1
- package/dist/web/assets/{xsl-f5ZNhRCc.js → xsl-DJG6USGh.js} +1 -1
- package/dist/web/index.html +14 -14
- package/dist/web/monacoeditorwork/css.worker.bundle.js +122 -122
- package/dist/web/monacoeditorwork/editor.worker.bundle.js +78 -78
- package/dist/web/monacoeditorwork/html.worker.bundle.js +110 -110
- package/dist/web/monacoeditorwork/json.worker.bundle.js +108 -108
- package/dist/web/monacoeditorwork/ts.worker.bundle.js +81 -81
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/schemas/ppm-config.schema.json +3 -3
- package/src/cli/commands/init.ts +8 -5
- package/src/providers/claude-agent-sdk-query-options.ts +57 -0
- package/src/providers/claude-agent-sdk.ts +21 -9
- package/src/server/ws/chat.ts +91 -10
- package/src/services/account.service.ts +13 -7
- package/src/services/db.service.ts +31 -1
- package/src/types/api.ts +4 -2
- package/src/types/chat.ts +8 -0
- package/src/types/config.ts +4 -9
- package/src/web/components/chat/chat-tab.tsx +8 -0
- package/src/web/components/chat/message-input.tsx +27 -7
- package/src/web/components/chat/message-list.tsx +48 -3
- package/src/web/components/chat/model-thinking-selector-helpers.ts +33 -0
- package/src/web/components/chat/model-thinking-selector.tsx +189 -0
- package/src/web/components/settings/ai-settings-section.tsx +2 -0
- package/src/web/components/settings/proxy-test-section.tsx +3 -1
- package/src/web/hooks/use-chat.ts +45 -0
- package/C:/Users/PC/AppData/Local/Temp/ppmbuild/index.js +0 -118043
- package/dist/web/assets/architecture-PBZL5I3N-CqTF9Xn6.js +0 -1
- package/dist/web/assets/chat-tab-C6nMDb9l.js +0 -18
- package/dist/web/assets/code-editor-C38IIs_y.js +0 -10
- package/dist/web/assets/data-grid-overlay-editor-cOzDcGkl.js +0 -1
- package/dist/web/assets/data-grid-types-CWHnFOc-.js +0 -1
- package/dist/web/assets/database-viewer-DxmL2veb.js +0 -1
- package/dist/web/assets/dist-B5ErTtYs.js +0 -11
- package/dist/web/assets/esm-DU7axMjq.js +0 -2
- package/dist/web/assets/gitGraph-HDMCJU4V-X12vfQ3i.js +0 -1
- package/dist/web/assets/glide-data-grid-BC0AHzMn.js +0 -138
- package/dist/web/assets/group-chat-tab-D20bF8q5.js +0 -1
- package/dist/web/assets/index-CMJ6whqq.css +0 -2
- package/dist/web/assets/info-3K5VOQVL-Bcz-Qhua.js +0 -1
- package/dist/web/assets/keybindings-store-TINaziU9.js +0 -1
- package/dist/web/assets/notification-store-DN8oDV7o.js +0 -1
- package/dist/web/assets/packet-RMMSAZCW-BTwjB70W.js +0 -1
- package/dist/web/assets/pie-UPGHQEXC-Cn-lrQYZ.js +0 -1
- package/dist/web/assets/postgres-viewer-pWjwP3GD.js +0 -3
- package/dist/web/assets/radar-KQ55EAFF-Cmppm_Ia.js +0 -1
- package/dist/web/assets/settings-tab-BoRuss3O.js +0 -1
- package/dist/web/assets/sqlite-viewer-BgewX3tM.js +0 -1
- package/dist/web/assets/treemap-KZPCXAKY-BLWus1wm.js +0 -1
- package/docs/journal/binary-self-upgrade-260724.md +0 -66
- package/nul/docs/claude-agent-sdk-reference.md +0 -780
- package/nul/docs/code-standards.md +0 -1080
- package/nul/docs/codebase-summary.md +0 -916
- package/nul/docs/deployment-guide.md +0 -702
- package/nul/docs/design-guidelines.md +0 -767
- package/nul/docs/extension-development-guide.md +0 -629
- package/nul/docs/journals/260414-1400-ext-git-graph-port-complete.md +0 -147
- package/nul/docs/journals/260414-1452-git-graph-faithful-port.md +0 -144
- package/nul/docs/journals/260414-1810-git-graph-ui-improvements-complete.md +0 -261
- package/nul/docs/journals/260414-2001-bundled-extensions.md +0 -219
- package/nul/docs/journals/260415-frontend-memory-optimization.md +0 -73
- package/nul/docs/lessons-learned.md +0 -70
- package/nul/docs/project-changelog.md +0 -574
- package/nul/docs/project-overview-pdr.md +0 -205
- package/nul/docs/project-roadmap.md +0 -222
- package/nul/docs/system-architecture.md +0 -1961
- package/packages/vscode-compat/node_modules/.bin/tsc.bunx +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsc.exe +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsserver.bunx +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsserver.exe +0 -0
- package/spike-group-channel.mjs +0 -156
- package/spike-group-chat.mjs +0 -181
- /package/dist/web/assets/{abap-tkptwpsK.js → abap-BZ3J5hF3.js} +0 -0
- /package/dist/web/assets/{actionscript-3-Di9TMGwg.js → actionscript-3-CkyGfT-8.js} +0 -0
- /package/dist/web/assets/{ada-CB9F079D.js → ada-CxNLBoe7.js} +0 -0
- /package/dist/web/assets/{andromeeda-Dcl8jpb7.js → andromeeda-BPN5rsDz.js} +0 -0
- /package/dist/web/assets/{apache-D0Nk0qsH.js → apache-C1F5wHL6.js} +0 -0
- /package/dist/web/assets/{apex-mQIoWncD.js → apex-BaNixdO-.js} +0 -0
- /package/dist/web/assets/{api-themes-BdQCjXQk.js → api-themes-84MT-XqR.js} +0 -0
- /package/dist/web/assets/{applescript-C6ljbcsI.js → applescript-Cl_pdcch.js} +0 -0
- /package/dist/web/assets/{ara-WFqRPGPe.js → ara-B6UAE7M2.js} +0 -0
- /package/dist/web/assets/{asciidoc-bNd8w4nf.js → asciidoc-D9c9Twki.js} +0 -0
- /package/dist/web/assets/{asm-BQ1_F580.js → asm-CNmtv7Y9.js} +0 -0
- /package/dist/web/assets/{aurora-x-Ciqs_Dbu.js → aurora-x-C9z-NyzR.js} +0 -0
- /package/dist/web/assets/{awk-GCR-6KZV.js → awk-BfLHEnKa.js} +0 -0
- /package/dist/web/assets/{ayu-dark-DxJXuj99.js → ayu-dark-Bn7trkt_.js} +0 -0
- /package/dist/web/assets/{ayu-light-jvSyJWDV.js → ayu-light-Dpya9hPf.js} +0 -0
- /package/dist/web/assets/{ayu-mirage-Cg3BPO6H.js → ayu-mirage-Cc0jfABD.js} +0 -0
- /package/dist/web/assets/{ballerina-BPz4CrX6.js → ballerina-BtiCmN7T.js} +0 -0
- /package/dist/web/assets/{bat-CSTs2hIG.js → bat-tmFM76zR.js} +0 -0
- /package/dist/web/assets/{beancount-DMateAZX.js → beancount-BjPqRrcH.js} +0 -0
- /package/dist/web/assets/{berry-9lXg0GRM.js → berry-D0SQBxN2.js} +0 -0
- /package/dist/web/assets/{bibtex-DIbqmvFg.js → bibtex-CkjRWQKr.js} +0 -0
- /package/dist/web/assets/{bicep-02WGsoJ8.js → bicep-Bhq28Cxc.js} +0 -0
- /package/dist/web/assets/{bird2-BY0tbu3k.js → bird2-DFGInYb3.js} +0 -0
- /package/dist/web/assets/{c-jMBX_9Je.js → c-CP8cB4k_.js} +0 -0
- /package/dist/web/assets/{c3-B8JVbNjW.js → c3-oRytyeWo.js} +0 -0
- /package/dist/web/assets/{cadence-DUIf1tvL.js → cadence-Inf1rGb7.js} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-FhUCVxex.js → catppuccin-frappe-DAzribQo.js} +0 -0
- /package/dist/web/assets/{catppuccin-latte-CzfrtmgL.js → catppuccin-latte-B6Y_mCCQ.js} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-6xL0lOtj.js → catppuccin-macchiato-COLbYqVL.js} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-D39-xS3P.js → catppuccin-mocha-DKWaML1B.js} +0 -0
- /package/dist/web/assets/{clarity-D8TeGvoT.js → clarity-_ZLLrrsX.js} +0 -0
- /package/dist/web/assets/{clojure-Dx_acSX7.js → clojure-DWGVCg_P.js} +0 -0
- /package/dist/web/assets/{cmake-CyeYPq8o.js → cmake-Cwh3mug7.js} +0 -0
- /package/dist/web/assets/{codeowners-DrTI0lmI.js → codeowners-BdV6CFYi.js} +0 -0
- /package/dist/web/assets/{codeql-CPkFxVW-.js → codeql-NvupDIDf.js} +0 -0
- /package/dist/web/assets/{common-lisp-B0k-3LTj.js → common-lisp-B-vtBh5k.js} +0 -0
- /package/dist/web/assets/{coq-uygpo7to.js → coq-M8-FTfiZ.js} +0 -0
- /package/dist/web/assets/{csharp-DKUYGfSp.js → csharp-B7Ugdtd-.js} +0 -0
- /package/dist/web/assets/{css-DoOUp7v4.js → css-86k3Z-YA.js} +0 -0
- /package/dist/web/assets/{csv-B3YE13gi.js → csv-BX5XYhfH.js} +0 -0
- /package/dist/web/assets/{csv-parser-CB6bK93y.js → csv-parser-d56Fzpwc.js} +0 -0
- /package/dist/web/assets/{cue-DViO2wvn.js → cue-B7099gQa.js} +0 -0
- /package/dist/web/assets/{cypher-4BMCIW5N.js → cypher-D99mWVIu.js} +0 -0
- /package/dist/web/assets/{d-BT_sTHas.js → d-CFE8oQwh.js} +0 -0
- /package/dist/web/assets/{dark-plus-DVVXu-1N.js → dark-plus-BEeeDwdg.js} +0 -0
- /package/dist/web/assets/{dart-DHz6f6_6.js → dart-HVSWGnI5.js} +0 -0
- /package/dist/web/assets/{dax-ChYCjweK.js → dax-DjDgSJkh.js} +0 -0
- /package/dist/web/assets/{desktop-D6Lt4p04.js → desktop-B5A3i7J1.js} +0 -0
- /package/dist/web/assets/{diff-D8TDe4hP.js → diff-CpTrlaE9.js} +0 -0
- /package/dist/web/assets/{dist-D1CjMuoa.js → dist-BSCgJs-V.js} +0 -0
- /package/dist/web/assets/{docker-Bsp0YbPx.js → docker-xBhmJeHj.js} +0 -0
- /package/dist/web/assets/{dotenv-B_7giSY_.js → dotenv-DKKhLEv5.js} +0 -0
- /package/dist/web/assets/{dracula-TrQL2iB5.js → dracula-CVwQuzra.js} +0 -0
- /package/dist/web/assets/{dracula-soft-n2XOlgh-.js → dracula-soft-CG6mB-lf.js} +0 -0
- /package/dist/web/assets/{dream-maker-CdIEdhpT.js → dream-maker-SC-IdYY3.js} +0 -0
- /package/dist/web/assets/{edit-diff-preview-Cj6-iplb.js → edit-diff-preview-C50i1H63.js} +0 -0
- /package/dist/web/assets/{emacs-lisp-CSbixs6u.js → emacs-lisp-CIBFq6W8.js} +0 -0
- /package/dist/web/assets/{everforest-dark-BuZahZYp.js → everforest-dark-odRT_lec.js} +0 -0
- /package/dist/web/assets/{everforest-light-DPH53z5H.js → everforest-light-or1Voqjl.js} +0 -0
- /package/dist/web/assets/{fennel-B1-K_hlJ.js → fennel-tQd1z3iu.js} +0 -0
- /package/dist/web/assets/{fish-Cy12Dbua.js → fish-DSuZQG0k.js} +0 -0
- /package/dist/web/assets/{fluent-B_82ys8E.js → fluent-D7xI8a8e.js} +0 -0
- /package/dist/web/assets/{fortran-free-form-BRQdNzZF.js → fortran-free-form-BlAtcPd3.js} +0 -0
- /package/dist/web/assets/{gdscript-XBDmLUm9.js → gdscript-VsEQXBPm.js} +0 -0
- /package/dist/web/assets/{gdshader-DhVfB3u4.js → gdshader-iqHMOdwW.js} +0 -0
- /package/dist/web/assets/{genie-X3K29Y49.js → genie-C4XU4g1a.js} +0 -0
- /package/dist/web/assets/{gherkin-DKIx-6cX.js → gherkin-C4nfQzAB.js} +0 -0
- /package/dist/web/assets/{github-dark-Bf7zdp5s.js → github-dark-B_pbG3CC.js} +0 -0
- /package/dist/web/assets/{github-dark-default-DqsBBV11.js → github-dark-default-kFbx7C95.js} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-X2gqRz6w.js → github-dark-dimmed-CpVfQEqs.js} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-Z7tvbGX4.js → github-dark-high-contrast-DYKqQwZh.js} +0 -0
- /package/dist/web/assets/{github-light-default-B0liF4d4.js → github-light-default-DVHfMPQ2.js} +0 -0
- /package/dist/web/assets/{github-light-BKxt-7zZ.js → github-light-gEYBmKaj.js} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-F4encJwr.js → github-light-high-contrast-ClVJDu-q.js} +0 -0
- /package/dist/web/assets/{gleam-Pz2bHgBB.js → gleam-BLaPu7ft.js} +0 -0
- /package/dist/web/assets/{gn-CgmdNsPU.js → gn-BKgerUyI.js} +0 -0
- /package/dist/web/assets/{gnuplot-qLNF5yZ9.js → gnuplot-cqJuEFb-.js} +0 -0
- /package/dist/web/assets/{go-CSDUNhE7.js → go-B2EHdyD8.js} +0 -0
- /package/dist/web/assets/{groovy-B3NEnOHF.js → groovy-DdImoj8s.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-DcoftiUX.js → gruvbox-dark-hard-DlwstAds.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-D1wVSuD8.js → gruvbox-dark-medium-CiYEd1vd.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-DWpunymH.js → gruvbox-dark-soft-C-wEa4h4.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-rHMvyUdS.js → gruvbox-light-hard-BqYmfna-.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-3O2KiXO7.js → gruvbox-light-medium-CxmfalT2.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-lNlXJPwH.js → gruvbox-light-soft-DGWXXMCB.js} +0 -0
- /package/dist/web/assets/{haskell-aaG3aC0h.js → haskell-H_C_IuVb.js} +0 -0
- /package/dist/web/assets/{haxe-CPcHhUDd.js → haxe-CGNSMpeZ.js} +0 -0
- /package/dist/web/assets/{hcl-CMQNlR_4.js → hcl-B7bSTSQf.js} +0 -0
- /package/dist/web/assets/{hjson-DeuklPFj.js → hjson-DlJ-glQZ.js} +0 -0
- /package/dist/web/assets/{hlsl-BI3hlsaM.js → hlsl-CehW5SJN.js} +0 -0
- /package/dist/web/assets/{horizon-C7-gOcjs.js → horizon-Beabcz2d.js} +0 -0
- /package/dist/web/assets/{horizon-bright-Cxt9bRW7.js → horizon-bright-BC87RXPa.js} +0 -0
- /package/dist/web/assets/{houston-DbF2G7iD.js → houston-Da7RFwUy.js} +0 -0
- /package/dist/web/assets/{hy-DRG6Hs2I.js → hy-m1H70w19.js} +0 -0
- /package/dist/web/assets/{imba-CxKv_2TW.js → imba-MExFsdAA.js} +0 -0
- /package/dist/web/assets/{ini-BiHsyCdO.js → ini-CJy_zmwy.js} +0 -0
- /package/dist/web/assets/{java-D3RZzgDB.js → java-DqDFvJBH.js} +0 -0
- /package/dist/web/assets/{javascript-4FmSqG-T.js → javascript-C3Wyv22X.js} +0 -0
- /package/dist/web/assets/{json-CjB236_E.js → json-DnGBw_DZ.js} +0 -0
- /package/dist/web/assets/{json5-bkfO-Rco.js → json5-CRN-zoN4.js} +0 -0
- /package/dist/web/assets/{jsonc-BwaTeLyv.js → jsonc-CKRUZNRo.js} +0 -0
- /package/dist/web/assets/{jsonl-CfxNSwGd.js → jsonl-CGfD6FrH.js} +0 -0
- /package/dist/web/assets/{jsonnet-CQETCYrp.js → jsonnet-nbFuDj0o.js} +0 -0
- /package/dist/web/assets/{jssm-D5o3Zzdz.js → jssm-D0ShzIqD.js} +0 -0
- /package/dist/web/assets/{jsx-BAMILPLo.js → jsx-D27hbRbs.js} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-BhGVxu3R.js → kanagawa-dragon-Ov3f8K0T.js} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-FH4Y59ro.js → kanagawa-lotus-CLyOqh-g.js} +0 -0
- /package/dist/web/assets/{kanagawa-wave-eilvP9MB.js → kanagawa-wave-Kj3dzabH.js} +0 -0
- /package/dist/web/assets/{kdl-BQ-yvXUK.js → kdl-DFF58Gu4.js} +0 -0
- /package/dist/web/assets/{kotlin-BuCx0-VT.js → kotlin-BM4PKaB4.js} +0 -0
- /package/dist/web/assets/{kusto-DAN_n_Cy.js → kusto-DrvHLCv5.js} +0 -0
- /package/dist/web/assets/{laserwave-Cq2BlxrT.js → laserwave-Db6i6ZkO.js} +0 -0
- /package/dist/web/assets/{lean-Dhq7uXKw.js → lean-D0hEjzwk.js} +0 -0
- /package/dist/web/assets/{less-CxaMQb8j.js → less-BEj4npGG.js} +0 -0
- /package/dist/web/assets/{lib-MIEszzkI.js → lib-CBdlQ75W.js} +0 -0
- /package/dist/web/assets/{light-plus-B4sMAend.js → light-plus-DLIIbDea.js} +0 -0
- /package/dist/web/assets/{llvm-DQ6-B_6Y.js → llvm-DMt6umsO.js} +0 -0
- /package/dist/web/assets/{log-Bb_vqvu7.js → log-BopvdtPW.js} +0 -0
- /package/dist/web/assets/{logo-BzfYv3A_.js → logo-CYSUFPFR.js} +0 -0
- /package/dist/web/assets/{luau-BnAeNR77.js → luau-XC611HNO.js} +0 -0
- /package/dist/web/assets/{make-B6IFuxpC.js → make-BMYZIfBj.js} +0 -0
- /package/dist/web/assets/{markdown-Z0xi77Fn.js → markdown-BLza5nvF.js} +0 -0
- /package/dist/web/assets/{material-theme-1scy1SYn.js → material-theme-Uw27UfJW.js} +0 -0
- /package/dist/web/assets/{material-theme-darker-G-JykXQP.js → material-theme-darker-dfqt8XBY.js} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BtKkCMVq.js → material-theme-lighter-CPtBTblV.js} +0 -0
- /package/dist/web/assets/{material-theme-ocean-irrDC89L.js → material-theme-ocean-BfZgVqC-.js} +0 -0
- /package/dist/web/assets/{material-theme-palenight-Eq5_K4LM.js → material-theme-palenight-DAZoVYg8.js} +0 -0
- /package/dist/web/assets/{matlab-BE3oCXZC.js → matlab-cSzmquiW.js} +0 -0
- /package/dist/web/assets/{mdx-DYiuFTGw.js → mdx-Dq0kW5VM.js} +0 -0
- /package/dist/web/assets/{mermaid-DVlaEvtw.js → mermaid-DoIKF0yS.js} +0 -0
- /package/dist/web/assets/{min-dark-DSkeTpQa.js → min-dark-DyraimDU.js} +0 -0
- /package/dist/web/assets/{min-light-CFv2Q0uF.js → min-light-Co9cbcUv.js} +0 -0
- /package/dist/web/assets/{mipsasm-CiAFuZQ2.js → mipsasm-ph6cKgHn.js} +0 -0
- /package/dist/web/assets/{mojo-ARshcaSQ.js → mojo-BBT0XwmY.js} +0 -0
- /package/dist/web/assets/{monokai-CPTV-SOg.js → monokai-IP0T5Rtg.js} +0 -0
- /package/dist/web/assets/{moonbit-D57B0dZr.js → moonbit-B8cogNXl.js} +0 -0
- /package/dist/web/assets/{move-qgy3G_o9.js → move-DkY26NtM.js} +0 -0
- /package/dist/web/assets/{narrat-CZ3rC-oc.js → narrat-rBs3byG0.js} +0 -0
- /package/dist/web/assets/{nextflow-groovy-BxxIOcI4.js → nextflow-groovy-DkO9wMLP.js} +0 -0
- /package/dist/web/assets/{night-owl-B1ryGCda.js → night-owl-jVR4lFji.js} +0 -0
- /package/dist/web/assets/{night-owl-light-BZvNnvMF.js → night-owl-light-fBYJ7s3U.js} +0 -0
- /package/dist/web/assets/{nix-BVBQi8yv.js → nix-WX9oavu6.js} +0 -0
- /package/dist/web/assets/{nord-3NXw613h.js → nord-Cf7G21Pu.js} +0 -0
- /package/dist/web/assets/{nushell-BMOLRalb.js → nushell-DQdzcJ1H.js} +0 -0
- /package/dist/web/assets/{objective-c-AxruEUgh.js → objective-c-JSO2uvZ-.js} +0 -0
- /package/dist/web/assets/{objective-cpp-cFT0qRsD.js → objective-cpp-CZMGJ9Fb.js} +0 -0
- /package/dist/web/assets/{ocaml-_8JH6O8J.js → ocaml-C4S4NSDo.js} +0 -0
- /package/dist/web/assets/{odin-nwYvR0O6.js → odin-Y2jXCgVq.js} +0 -0
- /package/dist/web/assets/{one-dark-pro-C1LaYJaH.js → one-dark-pro-dVIxuoJY.js} +0 -0
- /package/dist/web/assets/{one-light-B7rMc__c.js → one-light-BQ1IKfD1.js} +0 -0
- /package/dist/web/assets/{openscad-Cwes8bKO.js → openscad-Bddw4I3z.js} +0 -0
- /package/dist/web/assets/{pascal-DMt-6tdZ.js → pascal-BKVXrzC1.js} +0 -0
- /package/dist/web/assets/{pkl-QBTyYQmB.js → pkl-BTd-YRsO.js} +0 -0
- /package/dist/web/assets/{plastic-BTSUp8Fk.js → plastic-eiGvBIxV.js} +0 -0
- /package/dist/web/assets/{plsql-DQv3IFXP.js → plsql-C290tieP.js} +0 -0
- /package/dist/web/assets/{po-CNwZx4tW.js → po-DyDwh0tx.js} +0 -0
- /package/dist/web/assets/{poimandres-8Os7Qequ.js → poimandres-B87zc_g-.js} +0 -0
- /package/dist/web/assets/{polar-b4yK8oD8.js → polar-Cdub1YMT.js} +0 -0
- /package/dist/web/assets/{postcss-sFctwpxx.js → postcss-BcI_3K0v.js} +0 -0
- /package/dist/web/assets/{powerquery-Cg_WrtuN.js → powerquery-OdMrkJSe.js} +0 -0
- /package/dist/web/assets/{powershell-C7Ifz95h.js → powershell-C8auT6xg.js} +0 -0
- /package/dist/web/assets/{prisma-Z52HUJzQ.js → prisma-DIbVv8PA.js} +0 -0
- /package/dist/web/assets/{prolog-DLqW-zR1.js → prolog-DbTOH3Ld.js} +0 -0
- /package/dist/web/assets/{proto-BOIzxCCJ.js → proto-C4Cq2dCD.js} +0 -0
- /package/dist/web/assets/{puppet-De7TjZIf.js → puppet-DJp3uqum.js} +0 -0
- /package/dist/web/assets/{purescript-R76ou1WT.js → purescript-CLsV4rPU.js} +0 -0
- /package/dist/web/assets/{python-Dprm0tNP.js → python-2gBtEza2.js} +0 -0
- /package/dist/web/assets/{qmldir-Clp_jpNw.js → qmldir-DfhULcua.js} +0 -0
- /package/dist/web/assets/{qss-eQPYYzSo.js → qss-DK--VTTV.js} +0 -0
- /package/dist/web/assets/{r-CCcRHIf5.js → r-BArBO2Sa.js} +0 -0
- /package/dist/web/assets/{racket-CzE472yp.js → racket-5mijHsVy.js} +0 -0
- /package/dist/web/assets/{raku-DQwXrTSi.js → raku-ir0suElk.js} +0 -0
- /package/dist/web/assets/{red-KCS6wyop.js → red-DSecpIOT.js} +0 -0
- /package/dist/web/assets/{reg-CcrAddUh.js → reg-Dp30FusS.js} +0 -0
- /package/dist/web/assets/{regexp-DDbud-Ri.js → regexp-DXJnEM_6.js} +0 -0
- /package/dist/web/assets/{rel-99GDgaHp.js → rel-Dr483ozj.js} +0 -0
- /package/dist/web/assets/{riscv-Dm2eNv0R.js → riscv-ZfBy5IA1.js} +0 -0
- /package/dist/web/assets/{ron-CzFt0ygH.js → ron-ZJ_CljGP.js} +0 -0
- /package/dist/web/assets/{rose-pine-Ck6lCrCP.js → rose-pine-CcW_eJ6G.js} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-vtALRJNj.js → rose-pine-dawn-v2l_UF-j.js} +0 -0
- /package/dist/web/assets/{rose-pine-moon-DPto8qXw.js → rose-pine-moon-CNXkwf3D.js} +0 -0
- /package/dist/web/assets/{rosmsg-NtS6429H.js → rosmsg-BMYMVW84.js} +0 -0
- /package/dist/web/assets/{rust-BjIXvF9h.js → rust-BR-zJh5q.js} +0 -0
- /package/dist/web/assets/{sass-CQ23wf5E.js → sass-BukPOBFz.js} +0 -0
- /package/dist/web/assets/{scala-LfKLM143.js → scala-DUFY7D6D.js} +0 -0
- /package/dist/web/assets/{scheme-D3SLBXlF.js → scheme-Dl-dNNxQ.js} +0 -0
- /package/dist/web/assets/{sdbl-ODRd2rGN.js → sdbl-DdmlQhia.js} +0 -0
- /package/dist/web/assets/{shellscript-3KB1G_oA.js → shellscript-UyhrvGcd.js} +0 -0
- /package/dist/web/assets/{slack-dark-DTtyWmIy.js → slack-dark-Cv6Szr-q.js} +0 -0
- /package/dist/web/assets/{slack-ochin-Bu0PApk3.js → slack-ochin-V6Ii3lAm.js} +0 -0
- /package/dist/web/assets/{smalltalk-haMT-Sbe.js → smalltalk-BUCv5G91.js} +0 -0
- /package/dist/web/assets/{snazzy-light-DXJzefE9.js → snazzy-light-B67a78qi.js} +0 -0
- /package/dist/web/assets/{solarized-dark-B6LyYa18.js → solarized-dark-ccWnfYyA.js} +0 -0
- /package/dist/web/assets/{solarized-light-QLADebkv.js → solarized-light-C3WyRO5I.js} +0 -0
- /package/dist/web/assets/{solidity-mzfq1aDc.js → solidity-BFbRPNi_.js} +0 -0
- /package/dist/web/assets/{splunk-CyH4RWBp.js → splunk-zdpwCJLE.js} +0 -0
- /package/dist/web/assets/{sql-CWVlT5D3.js → sql-B2IPUsfz.js} +0 -0
- /package/dist/web/assets/{ssh-config-DNvQJ1Qx.js → ssh-config-Co4cXifq.js} +0 -0
- /package/dist/web/assets/{stylus-ByQQdtmf.js → stylus-CmI75XY8.js} +0 -0
- /package/dist/web/assets/{swift-D1cpY4ow.js → swift-Dfks9YQI.js} +0 -0
- /package/dist/web/assets/{synthwave-84-BDF_-QiW.js → synthwave-84-B3LERzNS.js} +0 -0
- /package/dist/web/assets/{system-verilog-BYrkMydC.js → system-verilog-BFvldiwl.js} +0 -0
- /package/dist/web/assets/{systemd-CQm3zyK0.js → systemd-Cu4Vvgbu.js} +0 -0
- /package/dist/web/assets/{talonscript-DMW5CzE1.js → talonscript-Bnq32pUB.js} +0 -0
- /package/dist/web/assets/{tasl-BhFzMCr2.js → tasl-Nwe2K3J1.js} +0 -0
- /package/dist/web/assets/{tcl-D7VEAF-9.js → tcl-zOnpywrl.js} +0 -0
- /package/dist/web/assets/{terraform-DdT5A0Vy.js → terraform-Bc9Vj-n3.js} +0 -0
- /package/dist/web/assets/{tokyo-night-WGLMM6Q9.js → tokyo-night-9_KyM8M2.js} +0 -0
- /package/dist/web/assets/{toml-CZ7ipXHZ.js → toml-ByH-fxOY.js} +0 -0
- /package/dist/web/assets/{tsv-B1zVvoTr.js → tsv-DrCnDClP.js} +0 -0
- /package/dist/web/assets/{tsx-D4HwRUBq.js → tsx-B8LafSYr.js} +0 -0
- /package/dist/web/assets/{turtle-B4r8KEJH.js → turtle-DuyP_QCJ.js} +0 -0
- /package/dist/web/assets/{typescript-BnHhxMtp.js → typescript-BTBJb5RD.js} +0 -0
- /package/dist/web/assets/{typespec-DP2q46GT.js → typespec-DdOFo7M5.js} +0 -0
- /package/dist/web/assets/{typst-DFsD_yaD.js → typst-LYvnBWQu.js} +0 -0
- /package/dist/web/assets/{use-blob-url-DpDVcTeK.js → use-blob-url-CpyRr7Cx.js} +0 -0
- /package/dist/web/assets/{v-Bji8hSVT.js → v-BuBYA1_x.js} +0 -0
- /package/dist/web/assets/{vala-D3TIgGmU.js → vala-vRIBYYe3.js} +0 -0
- /package/dist/web/assets/{vb-DvcxFS2q.js → vb-DwGi-IYM.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-DfNMj6xt.js → vendor-xterm-i6SHFTfU.js} +0 -0
- /package/dist/web/assets/{verilog-Dy7cF35d.js → verilog-6B1X4G2-.js} +0 -0
- /package/dist/web/assets/{vesper-BzjwUv9J.js → vesper-Dw1y_Ae7.js} +0 -0
- /package/dist/web/assets/{vhdl-DuFnFNmW.js → vhdl-DK8JwBzJ.js} +0 -0
- /package/dist/web/assets/{viml-yAPgKlbz.js → viml-BTKIEIqm.js} +0 -0
- /package/dist/web/assets/{vitesse-black-oSSQdyIZ.js → vitesse-black-BqqolhEg.js} +0 -0
- /package/dist/web/assets/{vitesse-dark-BZxwPihB.js → vitesse-dark-B9JL5WQA.js} +0 -0
- /package/dist/web/assets/{vitesse-light-uIigycvt.js → vitesse-light-DYJKj2se.js} +0 -0
- /package/dist/web/assets/{vyper-CX3NAxm5.js → vyper-D-jDI3WH.js} +0 -0
- /package/dist/web/assets/{wasm-Coen1MOg.js → wasm-1-GlNdpk.js} +0 -0
- /package/dist/web/assets/{wasm-D9td37qO.js → wasm-BBW4WmT2.js} +0 -0
- /package/dist/web/assets/{wenyan-lwNIHgk6.js → wenyan-B6cM7sDO.js} +0 -0
- /package/dist/web/assets/{wgsl-DQAzCfog.js → wgsl-FaHGQgko.js} +0 -0
- /package/dist/web/assets/{wikitext-DTXmt5NE.js → wikitext-DtIyPUrk.js} +0 -0
- /package/dist/web/assets/{wit-Bdw_7WDH.js → wit-BMVRif5Y.js} +0 -0
- /package/dist/web/assets/{wolfram-DqyHDZ07.js → wolfram-DQsCGohn.js} +0 -0
- /package/dist/web/assets/{yaml-CPXhdByd.js → yaml-C-Va56Gt.js} +0 -0
- /package/dist/web/assets/{zenscript-6s_i5zek.js → zenscript-DdobKGI-.js} +0 -0
- /package/dist/web/assets/{zig-B2htezJ_.js → zig-vqDFwj6q.js} +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/spike-group-channel.mjs
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
// Feasibility spike v2 — shared-channel group DISCUSSION (member<->member).
|
|
2
|
-
// Throwaway diagnostic. Mirrors test-tool.mjs (direct provider, no DB/UI).
|
|
3
|
-
//
|
|
4
|
-
// Implements the agreed model:
|
|
5
|
-
// - shared broadcast channel (in-memory bus) — all agents see it
|
|
6
|
-
// - windowed context injection (last K messages) per turn
|
|
7
|
-
// - speaker selection: @mention-driven, leader as fallback facilitator
|
|
8
|
-
// - talk = sequential turns; termination = leader "DONE:" OR max-turns cap OR budget-ish (turn cap)
|
|
9
|
-
// - prints the full GROUP CHAT HISTORY at the end (what the user asked to see)
|
|
10
|
-
//
|
|
11
|
-
// Usage: bun spike-group-channel.mjs [projectPath] [--turns N] [--keep]
|
|
12
|
-
|
|
13
|
-
import { homedir } from "node:os";
|
|
14
|
-
import { join } from "node:path";
|
|
15
|
-
import { readdir, mkdir, copyFile, rm, stat } from "node:fs/promises";
|
|
16
|
-
import { ClaudeAgentSdkProvider } from "./src/providers/claude-agent-sdk.ts";
|
|
17
|
-
import { configService } from "./src/services/config.service.ts";
|
|
18
|
-
|
|
19
|
-
configService.load();
|
|
20
|
-
delete process.env.CLAUDECODE;
|
|
21
|
-
|
|
22
|
-
const projectPath = process.argv.find((a, i) => i >= 2 && !a.startsWith("--")) || process.cwd();
|
|
23
|
-
const KEEP = process.argv.includes("--keep");
|
|
24
|
-
const turnsArg = process.argv.indexOf("--turns");
|
|
25
|
-
const MAX_TURNS = turnsArg > -1 ? Number(process.argv[turnsArg + 1]) : 8;
|
|
26
|
-
const WINDOW = 8; // inject last N channel messages
|
|
27
|
-
const TIMEOUT_MS = 120_000;
|
|
28
|
-
const CLAUDE_PROJECTS = join(homedir(), ".claude", "projects");
|
|
29
|
-
const ARCHIVE_DIR = join(homedir(), ".ppm", "teams", "spike", "transcripts");
|
|
30
|
-
|
|
31
|
-
const provider = new ClaudeAgentSdkProvider();
|
|
32
|
-
const opts = { permissionMode: "bypassPermissions" };
|
|
33
|
-
|
|
34
|
-
// The group. Leader is a normal participant that also facilitates + finalizes.
|
|
35
|
-
const TEAM = [
|
|
36
|
-
{ name: "lead", role: "the team LEAD. You kick off, keep discussion on track, and are the ONLY one who may finalize." },
|
|
37
|
-
{ name: "alice", role: "a backend engineer who favors simple, minimal schemas (YAGNI)." },
|
|
38
|
-
{ name: "bob", role: "a backend engineer who worries about query flexibility and future needs." },
|
|
39
|
-
];
|
|
40
|
-
|
|
41
|
-
const TASK =
|
|
42
|
-
"Agree on how to store the group-chat message bus in PPM: ONE single SQLite table, " +
|
|
43
|
-
"or SEPARATE tables per concern. Discuss briefly, then lead finalizes with the decision + 1 reason.";
|
|
44
|
-
|
|
45
|
-
const sessions = {}; // name -> session
|
|
46
|
-
const channel = []; // { from, to, text }
|
|
47
|
-
|
|
48
|
-
function log(...a) { console.log(...a); }
|
|
49
|
-
function hr(t) { log("\n" + "=".repeat(64) + "\n" + t + "\n" + "=".repeat(64)); }
|
|
50
|
-
|
|
51
|
-
async function run(sessionId, prompt) {
|
|
52
|
-
const abort = new AbortController();
|
|
53
|
-
const timer = setTimeout(() => abort.abort(), TIMEOUT_MS);
|
|
54
|
-
let full = "", error = null;
|
|
55
|
-
try {
|
|
56
|
-
for await (const ev of provider.sendMessage(sessionId, prompt, { ...opts, signal: abort.signal })) {
|
|
57
|
-
if (abort.signal.aborted) break;
|
|
58
|
-
if (ev.type === "text") full += ev.content ?? "";
|
|
59
|
-
else if (ev.type === "error") error = ev.message;
|
|
60
|
-
else if (ev.type === "done") break;
|
|
61
|
-
}
|
|
62
|
-
} catch (e) { error = e instanceof Error ? e.message : String(e); }
|
|
63
|
-
clearTimeout(timer);
|
|
64
|
-
return { text: full.trim(), error };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function windowed() {
|
|
68
|
-
return channel.slice(-WINDOW)
|
|
69
|
-
.map((m) => `${m.from} -> ${m.to}: ${m.text}`)
|
|
70
|
-
.join("\n") || "(channel empty)";
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function turnPrompt(member, isFinalForced) {
|
|
74
|
-
const others = TEAM.filter((t) => t.name !== member.name).map((t) => t.name).join(", ");
|
|
75
|
-
return (
|
|
76
|
-
`You are "${member.name}", ${member.role}\n` +
|
|
77
|
-
`Team task: ${TASK}\n\n` +
|
|
78
|
-
`TEAM CHANNEL (recent, others: ${others}):\n${windowed()}\n\n` +
|
|
79
|
-
`Reply as ${member.name} in MAX 2 sentences. Address a teammate with @name (e.g. @bob).\n` +
|
|
80
|
-
(member.name === "lead"
|
|
81
|
-
? (isFinalForced
|
|
82
|
-
? `You MUST finalize now: start your message with "DONE:" then the decision + 1 reason.`
|
|
83
|
-
: `If the team has converged, start with "DONE:" then the decision + 1 reason. Otherwise steer the discussion and @ someone.`)
|
|
84
|
-
: `Do NOT write "DONE:" — only lead finalizes.`)
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// pick next speaker from an @mention in text; else fall back to lead.
|
|
89
|
-
function nextSpeaker(text, current) {
|
|
90
|
-
const names = TEAM.map((t) => t.name);
|
|
91
|
-
const m = text.toLowerCase().match(/@(\w+)/);
|
|
92
|
-
if (m && names.includes(m[1]) && m[1] !== current) return m[1];
|
|
93
|
-
return current === "lead" ? "alice" : "lead"; // fallback keeps it moving
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
async function findJsonl(id) {
|
|
97
|
-
let dirs = [];
|
|
98
|
-
try { dirs = await readdir(CLAUDE_PROJECTS); } catch { return null; }
|
|
99
|
-
for (const d of dirs) {
|
|
100
|
-
const p = join(CLAUDE_PROJECTS, d, `${id}.jsonl`);
|
|
101
|
-
try { await stat(p); return p; } catch {}
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
async function archiveAndDelete(id) {
|
|
106
|
-
const src = await findJsonl(id);
|
|
107
|
-
if (!src) return;
|
|
108
|
-
await mkdir(ARCHIVE_DIR, { recursive: true });
|
|
109
|
-
await copyFile(src, join(ARCHIVE_DIR, `${id}.jsonl`));
|
|
110
|
-
await rm(src, { force: true });
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// ---------------------------------------------------------------------------
|
|
114
|
-
hr(`SPIKE v2: shared-channel group discussion | project=${projectPath} | maxTurns=${MAX_TURNS}`);
|
|
115
|
-
|
|
116
|
-
for (const m of TEAM) {
|
|
117
|
-
sessions[m.name] = await provider.createSession({ title: `spike-${m.name}`, projectPath });
|
|
118
|
-
log(` ${m.name} session: ${sessions[m.name].id}`);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
let speaker = "lead";
|
|
122
|
-
let done = false;
|
|
123
|
-
for (let turn = 1; turn <= MAX_TURNS && !done; turn++) {
|
|
124
|
-
const member = TEAM.find((t) => t.name === speaker);
|
|
125
|
-
const forceFinal = turn === MAX_TURNS && speaker === "lead";
|
|
126
|
-
const { text, error } = await run(sessions[speaker].id, turnPrompt(member, forceFinal));
|
|
127
|
-
if (error) { log(`\n[turn ${turn}] ${speaker} ERROR: ${error}`); break; }
|
|
128
|
-
|
|
129
|
-
const isDone = speaker === "lead" && /^\s*DONE:/i.test(text);
|
|
130
|
-
const to = (text.match(/@(\w+)/) || [])[1] || "all";
|
|
131
|
-
channel.push({ from: speaker, to: isDone ? "all" : to, text });
|
|
132
|
-
log(`\n[turn ${turn}] ${speaker} -> ${isDone ? "all" : to}:\n ${text.replace(/\n/g, "\n ")}`);
|
|
133
|
-
|
|
134
|
-
if (isDone) { done = true; break; }
|
|
135
|
-
|
|
136
|
-
// If max-turns is about to hit and lead hasn't spoken, force lead next to finalize.
|
|
137
|
-
speaker = (turn === MAX_TURNS - 1) ? "lead" : nextSpeaker(text, speaker);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (!done) log("\n(!) discussion hit turn cap without explicit DONE — see last lead message");
|
|
141
|
-
|
|
142
|
-
// ---- what the user asked to see: the group chat history ----
|
|
143
|
-
hr("GROUP CHAT HISTORY (channel transcript)");
|
|
144
|
-
for (const m of channel) {
|
|
145
|
-
log(`[${m.from} -> ${m.to}] ${m.text}`);
|
|
146
|
-
log("");
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// ---- Option A+ cleanup (proves clean-up path again) ----
|
|
150
|
-
if (!KEEP) {
|
|
151
|
-
hr("Option A+ archive-and-delete");
|
|
152
|
-
for (const m of TEAM) { await archiveAndDelete(sessions[m.name].id); }
|
|
153
|
-
log(`archived to ${ARCHIVE_DIR}, raw JSONL removed from ~/.claude/projects`);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
hr(`RESULT: ${done ? "CONVERGED with leader DONE" : "capped"} | ${channel.length} messages | member<->member exchange demonstrated`);
|
package/spike-group-chat.mjs
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
// Feasibility spike for the native PPM group-chat engine.
|
|
2
|
-
// Throwaway diagnostic — NOT production code. Mirrors test-tool.mjs (direct provider, no DB/UI).
|
|
3
|
-
//
|
|
4
|
-
// Proves, headless & real (no mocks):
|
|
5
|
-
// 1. Parallel multi-agent: 1 leader + N member sessions on the SAME project cwd.
|
|
6
|
-
// 2. Leader-driven task split -> dispatch to members -> collect (the orchestration loop).
|
|
7
|
-
// 3. Summary-vs-full (#2): capture short summary for the feed + full text kept aside.
|
|
8
|
-
// 4. Option A+ (#3): archive each member JSONL to ~/.ppm/teams/<group>/transcripts/,
|
|
9
|
-
// then delete the raw JSONL from ~/.claude/projects so CLI/VSCode stay clean.
|
|
10
|
-
// 5. Synthesis: feed member summaries back to the leader for a final group answer.
|
|
11
|
-
//
|
|
12
|
-
// Usage: bun spike-group-chat.mjs [projectPath] [--keep]
|
|
13
|
-
// --keep : skip the archive+delete step (leave raw JSONLs in place)
|
|
14
|
-
|
|
15
|
-
import { homedir, tmpdir } from "node:os";
|
|
16
|
-
import { join } from "node:path";
|
|
17
|
-
import { readdir, mkdir, copyFile, rm, stat } from "node:fs/promises";
|
|
18
|
-
import { ClaudeAgentSdkProvider } from "./src/providers/claude-agent-sdk.ts";
|
|
19
|
-
import { configService } from "./src/services/config.service.ts";
|
|
20
|
-
|
|
21
|
-
configService.load();
|
|
22
|
-
delete process.env.CLAUDECODE; // avoid nested-session error
|
|
23
|
-
|
|
24
|
-
const projectPath = process.argv.find((a, i) => i >= 2 && !a.startsWith("--")) || process.cwd();
|
|
25
|
-
const KEEP = process.argv.includes("--keep");
|
|
26
|
-
const GROUP = "spike";
|
|
27
|
-
const CLAUDE_PROJECTS = join(homedir(), ".claude", "projects");
|
|
28
|
-
const ARCHIVE_DIR = join(homedir(), ".ppm", "teams", GROUP, "transcripts");
|
|
29
|
-
const TIMEOUT_MS = 180_000;
|
|
30
|
-
|
|
31
|
-
const provider = new ClaudeAgentSdkProvider();
|
|
32
|
-
const opts = { permissionMode: "bypassPermissions" };
|
|
33
|
-
const results = {}; // criterion -> boolean
|
|
34
|
-
|
|
35
|
-
// The user's "task" given to the group.
|
|
36
|
-
const TASK =
|
|
37
|
-
"Working from the CLAUDE.md in this project, report two facts: (a) the runtime used, " +
|
|
38
|
-
"(b) the command to run tests.";
|
|
39
|
-
|
|
40
|
-
function log(...a) { console.log(...a); }
|
|
41
|
-
function hr(t) { log("\n" + "=".repeat(64) + "\n" + t + "\n" + "=".repeat(64)); }
|
|
42
|
-
|
|
43
|
-
// Run one prompt on a session, capture summary (last assistant text) + full text.
|
|
44
|
-
async function run(sessionId, prompt) {
|
|
45
|
-
const abort = new AbortController();
|
|
46
|
-
const timer = setTimeout(() => abort.abort(), TIMEOUT_MS);
|
|
47
|
-
let full = "", last = "", error = null;
|
|
48
|
-
try {
|
|
49
|
-
for await (const ev of provider.sendMessage(sessionId, prompt, { ...opts, signal: abort.signal })) {
|
|
50
|
-
if (abort.signal.aborted) break;
|
|
51
|
-
if (ev.type === "text") { last = ev.content ?? ""; full += ev.content ?? ""; }
|
|
52
|
-
else if (ev.type === "error") { error = ev.message; }
|
|
53
|
-
else if (ev.type === "done") break;
|
|
54
|
-
}
|
|
55
|
-
} catch (e) { error = e instanceof Error ? e.message : String(e); }
|
|
56
|
-
clearTimeout(timer);
|
|
57
|
-
return { summary: (last || full).trim().slice(0, 400), full: full.trim(), error };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Locate <sessionId>.jsonl anywhere under ~/.claude/projects (avoids slug guessing).
|
|
61
|
-
async function findJsonl(sessionId) {
|
|
62
|
-
let dirs = [];
|
|
63
|
-
try { dirs = await readdir(CLAUDE_PROJECTS); } catch { return null; }
|
|
64
|
-
for (const d of dirs) {
|
|
65
|
-
const p = join(CLAUDE_PROJECTS, d, `${sessionId}.jsonl`);
|
|
66
|
-
try { await stat(p); return p; } catch { /* keep looking */ }
|
|
67
|
-
}
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Option A+: archive JSONL to PPM store, then delete the raw file.
|
|
72
|
-
async function archiveAndDelete(sessionId) {
|
|
73
|
-
const src = await findJsonl(sessionId);
|
|
74
|
-
if (!src) return { archived: false, deleted: false, reason: "raw JSONL not found" };
|
|
75
|
-
await mkdir(ARCHIVE_DIR, { recursive: true });
|
|
76
|
-
const dest = join(ARCHIVE_DIR, `${sessionId}.jsonl`);
|
|
77
|
-
await copyFile(src, dest);
|
|
78
|
-
const archived = await stat(dest).then(() => true).catch(() => false);
|
|
79
|
-
await rm(src, { force: true });
|
|
80
|
-
const stillThere = await stat(src).then(() => true).catch(() => false);
|
|
81
|
-
return { archived, deleted: !stillThere, dest };
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// ---------------------------------------------------------------------------
|
|
85
|
-
hr(`SPIKE: native group-chat engine | project=${projectPath} | keep=${KEEP}`);
|
|
86
|
-
|
|
87
|
-
// --- Criterion 1 + 2: leader session decides the work split -----------------
|
|
88
|
-
hr("STEP 1 — Leader splits the task");
|
|
89
|
-
const leader = await provider.createSession({ title: "spike-leader", projectPath });
|
|
90
|
-
log(`leader session: ${leader.id}`);
|
|
91
|
-
|
|
92
|
-
const splitPrompt =
|
|
93
|
-
`You are the LEADER of an agent team on this project. User task:\n"${TASK}"\n\n` +
|
|
94
|
-
`Split it into EXACTLY 2 independent subtasks. Reply with ONLY two lines, no preamble:\n` +
|
|
95
|
-
`M1: <subtask one>\nM2: <subtask two>`;
|
|
96
|
-
const split = await run(leader.id, splitPrompt);
|
|
97
|
-
log("leader raw:\n" + split.full);
|
|
98
|
-
|
|
99
|
-
let subtasks = split.full
|
|
100
|
-
.split("\n")
|
|
101
|
-
.map((l) => l.replace(/^M\d+:\s*/i, "").trim())
|
|
102
|
-
.filter((l) => l && /subtask|report|find|read|runtime|test|command|CLAUDE/i.test(l))
|
|
103
|
-
.slice(0, 2);
|
|
104
|
-
if (subtasks.length < 2) {
|
|
105
|
-
log("!! parse fallback — leader output not in expected format, using default split");
|
|
106
|
-
subtasks = [
|
|
107
|
-
"Read CLAUDE.md and report ONLY the runtime used. One sentence.",
|
|
108
|
-
"Read CLAUDE.md and report ONLY the command to run tests. One sentence.",
|
|
109
|
-
];
|
|
110
|
-
}
|
|
111
|
-
results["1_leader_split"] = subtasks.length === 2;
|
|
112
|
-
log("subtasks:", subtasks);
|
|
113
|
-
|
|
114
|
-
// --- Criterion 1 (parallel) + 3 (summary/full): members work concurrently ---
|
|
115
|
-
hr("STEP 2 — Members work in parallel (own sessions)");
|
|
116
|
-
const members = await Promise.all(
|
|
117
|
-
subtasks.map((_, i) => provider.createSession({ title: `spike-m${i + 1}`, projectPath })),
|
|
118
|
-
);
|
|
119
|
-
members.forEach((m, i) => log(`member${i + 1} session: ${m.id}`));
|
|
120
|
-
|
|
121
|
-
const memberRuns = await Promise.all(
|
|
122
|
-
subtasks.map((st, i) =>
|
|
123
|
-
run(members[i].id, `${st}\n\nReply with a 1-2 sentence summary only.`),
|
|
124
|
-
),
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
results["2_parallel_members"] = memberRuns.every((r) => !r.error);
|
|
128
|
-
results["3_summary_vs_full"] = memberRuns.every((r) => r.summary.length > 0 && r.full.length >= r.summary.length);
|
|
129
|
-
memberRuns.forEach((r, i) => {
|
|
130
|
-
log(`\n--- member${i + 1} ---`);
|
|
131
|
-
if (r.error) log(` ERROR: ${r.error}`);
|
|
132
|
-
log(` FEED (summary): ${r.summary}`);
|
|
133
|
-
log(` FULL kept aside: ${r.full.length} chars (hidden from feed)`);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
// --- Criterion 4: Option A+ archive-and-delete ------------------------------
|
|
137
|
-
hr("STEP 3 — Option A+ archive-and-delete member transcripts");
|
|
138
|
-
let aPlusOk = true;
|
|
139
|
-
if (KEEP) {
|
|
140
|
-
log("(--keep) skipping archive/delete");
|
|
141
|
-
aPlusOk = false;
|
|
142
|
-
} else {
|
|
143
|
-
for (const m of members) {
|
|
144
|
-
const res = await archiveAndDelete(m.id);
|
|
145
|
-
log(`member ${m.id}: archived=${res.archived} deleted=${res.deleted}` + (res.reason ? ` (${res.reason})` : ""));
|
|
146
|
-
if (!res.archived || !res.deleted) aPlusOk = false;
|
|
147
|
-
}
|
|
148
|
-
log(`archive dir: ${ARCHIVE_DIR}`);
|
|
149
|
-
}
|
|
150
|
-
results["4_archive_delete"] = aPlusOk;
|
|
151
|
-
|
|
152
|
-
// --- Criterion 5: leader synthesizes member summaries -----------------------
|
|
153
|
-
hr("STEP 4 — Leader synthesizes final group answer");
|
|
154
|
-
const synthPrompt =
|
|
155
|
-
`Your members reported:\n` +
|
|
156
|
-
memberRuns.map((r, i) => `- member${i + 1}: ${r.summary}`).join("\n") +
|
|
157
|
-
`\n\nSynthesize a short final answer to the user's task.`;
|
|
158
|
-
const synth = await run(leader.id, synthPrompt);
|
|
159
|
-
log("FINAL group answer:\n" + synth.summary);
|
|
160
|
-
results["5_synthesis"] = !synth.error && synth.summary.length > 0;
|
|
161
|
-
|
|
162
|
-
// Clean up leader too (it created a JSONL).
|
|
163
|
-
if (!KEEP) { await archiveAndDelete(leader.id).catch(() => {}); }
|
|
164
|
-
|
|
165
|
-
// --- Verdict ----------------------------------------------------------------
|
|
166
|
-
hr("VERDICT");
|
|
167
|
-
const labels = {
|
|
168
|
-
"1_leader_split": "Leader splits task into subtasks",
|
|
169
|
-
"2_parallel_members": "Members run in parallel (own sessions)",
|
|
170
|
-
"3_summary_vs_full": "Summary (feed) vs full (hidden) captured",
|
|
171
|
-
"4_archive_delete": "Option A+ archive-and-delete works",
|
|
172
|
-
"5_synthesis": "Leader synthesizes final answer",
|
|
173
|
-
};
|
|
174
|
-
let allPass = true;
|
|
175
|
-
for (const [k, label] of Object.entries(labels)) {
|
|
176
|
-
const ok = results[k];
|
|
177
|
-
if (!ok && !(k === "4_archive_delete" && KEEP)) allPass = false;
|
|
178
|
-
log(` ${ok ? "PASS" : (k === "4_archive_delete" && KEEP ? "SKIP" : "FAIL")} ${label}`);
|
|
179
|
-
}
|
|
180
|
-
hr(allPass ? "FEASIBLE — core engine works end-to-end" : "NEEDS ATTENTION — see failures above");
|
|
181
|
-
process.exit(allPass ? 0 : 1);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/web/assets/{catppuccin-macchiato-6xL0lOtj.js → catppuccin-macchiato-COLbYqVL.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/web/assets/{github-dark-default-DqsBBV11.js → github-dark-default-kFbx7C95.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/web/assets/{github-light-default-B0liF4d4.js → github-light-default-DVHfMPQ2.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/web/assets/{gruvbox-dark-medium-D1wVSuD8.js → gruvbox-dark-medium-CiYEd1vd.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/web/assets/{gruvbox-light-medium-3O2KiXO7.js → gruvbox-light-medium-CxmfalT2.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|