Skip to content

Commit 3e6a121

Browse files
committed
Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts: # apps/pythinker-code/dist-web/.web-bundle-manifest.json # apps/pythinker-code/dist-web/assets/CodeBlockNode-12vFvmM_.js # apps/pythinker-code/dist-web/assets/CodeBlockNode-CjK-qql8.js # apps/pythinker-code/dist-web/assets/CodeBlockNode-DoVnw33D.js # apps/pythinker-code/dist-web/assets/DesignSystemView-CN_ao3CW.js # apps/pythinker-code/dist-web/assets/Tooltip-BJqig-gj.js # apps/pythinker-code/dist-web/assets/Tooltip-BvBSuG3h.js # apps/pythinker-code/dist-web/assets/Tooltip-c4Won1tt.js # apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-BovSjQXX.js # apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-DCiNqxUW.js # apps/pythinker-code/dist-web/assets/abnfDiagram-VCTEODGH-lXl6MMW4.js # apps/pythinker-code/dist-web/assets/arc-CHCuM8EI.js # apps/pythinker-code/dist-web/assets/arc-DdybW257.js # apps/pythinker-code/dist-web/assets/arc-ZRdpD3ai.js # apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-BuONUxqp.js # apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-CBU00cgM.js # apps/pythinker-code/dist-web/assets/architectureDiagram-5GKGNRK7-fuE402Hn.js # apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-6OGxmRQx.js # apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-DxgsRiFS.js # apps/pythinker-code/dist-web/assets/blockDiagram-NRAW4CY4-jIhhfGHj.js # apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-9bfMPG6t.js # apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-CyrEjNRj.js # apps/pythinker-code/dist-web/assets/c4Diagram-UCG6FXSJ-DiSWOTH6.js # apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-BA50oZdj.js # apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-D1736ECk.js # apps/pythinker-code/dist-web/assets/chunk-2Q5K7J3B-DjQA9UTZ.js # apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-C_os9UuP.js # apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-Cafhm_Fg.js # apps/pythinker-code/dist-web/assets/chunk-5VM5RSS4-N4SkS_5j.js # apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-BdKYqgBT.js # apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-BhMN3PAu.js # apps/pythinker-code/dist-web/assets/chunk-F27PBJKO-Cj5fiomV.js # apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-2Efyl-dX.js # apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-BW3QWBgT.js # apps/pythinker-code/dist-web/assets/chunk-G27WJ6UU-CYEzNn1f.js # apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-BGoun8cp.js # apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-BLUT8H2f.js # apps/pythinker-code/dist-web/assets/chunk-JWPE2WC7-DEZr87p-.js # apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-0gpIySMQ.js # apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-B_QgwXLP.js # apps/pythinker-code/dist-web/assets/chunk-LCL6LL3I-cMKh9i6p.js # apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-CF_VrAXY.js # apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-DZudYXdU.js # apps/pythinker-code/dist-web/assets/chunk-POPQ4Y6H-rZza1LpH.js # apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-B6TmlzkA.js # apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-Bto4ZW7D.js # apps/pythinker-code/dist-web/assets/chunk-SVP7TREG-Dvyvb2oM.js # apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-B5xstnDi.js # apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-B7QV24vQ.js # apps/pythinker-code/dist-web/assets/chunk-XXDRQBXY-Cwo-G0CM.js # apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-B93OAS8e.js # apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-BVDZkW7K.js # apps/pythinker-code/dist-web/assets/cose-bilkent-JH36ORCC-v5LmJ4Mi.js # apps/pythinker-code/dist-web/assets/cssMode-BJeeakxy.js # apps/pythinker-code/dist-web/assets/cssMode-BtkTJu0U.js # apps/pythinker-code/dist-web/assets/cssMode-DZGxQBT9.js # apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-BXHxCFcZ.js # apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-CAFgpwUj.js # apps/pythinker-code/dist-web/assets/cynefin-OW5HDTMX-DgrwM5Y2.js # apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-DHcQYOTf.js # apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-DTXmqxjM.js # apps/pythinker-code/dist-web/assets/cynefinDiagram-5FMLGOSQ-DfT8MGeB.js # apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-B9I7HaTF.js # apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-DiMgbj4X.js # apps/pythinker-code/dist-web/assets/dagre-3AP2YEHR-KzWM63yH.js # apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-C9mDYxvd.js # apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-DNmZBRG2.js # apps/pythinker-code/dist-web/assets/diagram-S7CK7UJ4-D_MTJ1t0.js # apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN--qfpazzd.js # apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-9fkQpB3C.js # apps/pythinker-code/dist-web/assets/diagram-UQ7AKVKN-CmcpI8dw.js # apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-B6sO84Hg.js # apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-BNrTYIrv.js # apps/pythinker-code/dist-web/assets/diagram-VSXAHHWV-DCxeyFe3.js # apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-DZEuMb7R.js # apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-DxvsXw0w.js # apps/pythinker-code/dist-web/assets/diagram-VX7I27RA-UIiL0hBU.js # apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-B1m2itRU.js # apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-BcJ84wOV.js # apps/pythinker-code/dist-web/assets/diagram-Z3DM3KII-Bfs0Eme3.js # apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-CfdRQQs4.js # apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-D3HuSK2t.js # apps/pythinker-code/dist-web/assets/ebnfDiagram-PWID7BFC-M3RfE2rR.js # apps/pythinker-code/dist-web/assets/editor.main-C6TNVlCF.js # apps/pythinker-code/dist-web/assets/editor.main-D-PM0CFl.js # apps/pythinker-code/dist-web/assets/editor.main-DhKJEJSk.js # apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-BFL22x5t.js # apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-BX7pK_4-.js # apps/pythinker-code/dist-web/assets/erDiagram-SSCWMZ5O-CYgRvTl6.js # apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-C0yaALpQ.js # apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-D9yKcDNQ.js # apps/pythinker-code/dist-web/assets/flowDiagram-A5DVABFB-DLHcFOP7.js # apps/pythinker-code/dist-web/assets/freemarker2-BhvSTxDe.js # apps/pythinker-code/dist-web/assets/freemarker2-VcczEAow.js # apps/pythinker-code/dist-web/assets/freemarker2-xV6BS7VV.js # apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-Cxi7VLSx.js # apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-__HwStIS.js # apps/pythinker-code/dist-web/assets/ganttDiagram-EL5Y4UJY-wayv-I5Q.js # apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-CTUANK60.js # apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-DUce3Nxk.js # apps/pythinker-code/dist-web/assets/gitGraphDiagram-WWUBYQGX-DbBm0NgJ.js # apps/pythinker-code/dist-web/assets/handlebars-DInnBxs4.js # apps/pythinker-code/dist-web/assets/handlebars-Dd4iVNlz.js # apps/pythinker-code/dist-web/assets/handlebars-m2itLTIt.js # apps/pythinker-code/dist-web/assets/html-Cu-c8xRD.js # apps/pythinker-code/dist-web/assets/html-DjVE8Egv.js # apps/pythinker-code/dist-web/assets/html-uqRoBNqa.js # apps/pythinker-code/dist-web/assets/htmlMode-B22dyQM-.js # apps/pythinker-code/dist-web/assets/htmlMode-DXgcuJ8c.js # apps/pythinker-code/dist-web/assets/htmlMode-zJmqMktO.js # apps/pythinker-code/dist-web/assets/index-2v_-81jl.js # apps/pythinker-code/dist-web/assets/index-6pBMsNHE.js # apps/pythinker-code/dist-web/assets/index-72yOhhJB.js # apps/pythinker-code/dist-web/assets/index-BVJX3HA9.js # apps/pythinker-code/dist-web/assets/index-BeVI6x2j.js # apps/pythinker-code/dist-web/assets/index-C9dYiIm-.js # apps/pythinker-code/dist-web/assets/index-CWxol5yV.js # apps/pythinker-code/dist-web/assets/index-CfeF0e0x.js # apps/pythinker-code/dist-web/assets/index-DHt1OT2i.js # apps/pythinker-code/dist-web/assets/index-DKr7WVPb.js # apps/pythinker-code/dist-web/assets/index-DXqzNghF.js # apps/pythinker-code/dist-web/assets/index-wqHWNzr_.js # apps/pythinker-code/dist-web/assets/index10-DYIoNraK.js # apps/pythinker-code/dist-web/assets/index10-OSlXYlm5.js # apps/pythinker-code/dist-web/assets/index10-ZSVeRRPK.js # apps/pythinker-code/dist-web/assets/index11-Bz_hnOOg.js # apps/pythinker-code/dist-web/assets/index11-CRPgvybM.js # apps/pythinker-code/dist-web/assets/index11-RJ4Duo16.js # apps/pythinker-code/dist-web/assets/index5-AB809MEU.js # apps/pythinker-code/dist-web/assets/index5-B2LEFjrZ.js # apps/pythinker-code/dist-web/assets/index5-ByBFzTUK.js # apps/pythinker-code/dist-web/assets/index6-CUxyjnAx.js # apps/pythinker-code/dist-web/assets/index6-DG3Q2Ncx.js # apps/pythinker-code/dist-web/assets/index6-iVuSJ4hs.js # apps/pythinker-code/dist-web/assets/index7-C4Rqs51G.js # apps/pythinker-code/dist-web/assets/index7-DKf1iAuq.js # apps/pythinker-code/dist-web/assets/index7-DnV5Bwht.js # apps/pythinker-code/dist-web/assets/index8-1Hb5LUXu.js # apps/pythinker-code/dist-web/assets/index8-B_4V8-nk.js # apps/pythinker-code/dist-web/assets/index8-a8Z6jIeV.js # apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-BfOUuyWA.js # apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-CNKWWciy.js # apps/pythinker-code/dist-web/assets/infoDiagram-RXCK75RN-CwNMs0vo.js # apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-B7Ny282g.js # apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-DSsgLWOp.js # apps/pythinker-code/dist-web/assets/ishikawaDiagram-5VMMS53U-_vyNztly.js # apps/pythinker-code/dist-web/assets/javascript-BGUex-fn.js # apps/pythinker-code/dist-web/assets/javascript-Ba_eDQwa.js # apps/pythinker-code/dist-web/assets/javascript-BphtRpNI.js # apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-BB1wVCR_.js # apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-C_uua3eS.js # apps/pythinker-code/dist-web/assets/journeyDiagram-EYS64GPL-DhRE4NjD.js # apps/pythinker-code/dist-web/assets/jsonMode-BPY3yx49.js # apps/pythinker-code/dist-web/assets/jsonMode-CqBUWvUN.js # apps/pythinker-code/dist-web/assets/jsonMode-cT5TtDxn.js # apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-B0Y2nFj_.js # apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-CnDi_UGA.js # apps/pythinker-code/dist-web/assets/kanban-definition-3QL26DDD-uCMClg8f.js # apps/pythinker-code/dist-web/assets/layout-B8VgDf9W.js # apps/pythinker-code/dist-web/assets/layout-BBEpZ_1t.js # apps/pythinker-code/dist-web/assets/layout-B_Iz_RzW.js # apps/pythinker-code/dist-web/assets/linear-DH4YISJh.js # apps/pythinker-code/dist-web/assets/linear-NqoMO5q_.js # apps/pythinker-code/dist-web/assets/linear-UFWxZmXu.js # apps/pythinker-code/dist-web/assets/liquid-BGlCBM_n.js # apps/pythinker-code/dist-web/assets/liquid-DP2cntnL.js # apps/pythinker-code/dist-web/assets/liquid-Dfvy1iBr.js # apps/pythinker-code/dist-web/assets/lspLanguageFeatures-BTCo_Y1s.js # apps/pythinker-code/dist-web/assets/lspLanguageFeatures-BW9B-tPg.js # apps/pythinker-code/dist-web/assets/lspLanguageFeatures-tp_S83Ul.js # apps/pythinker-code/dist-web/assets/mdx-BXc6MuOc.js # apps/pythinker-code/dist-web/assets/mdx-Dn-aJVc8.js # apps/pythinker-code/dist-web/assets/mdx-wt0kEkuv.js # apps/pythinker-code/dist-web/assets/mermaid.core-BOrwZTX7.js # apps/pythinker-code/dist-web/assets/mermaid.core-CVcgJ56o.js # apps/pythinker-code/dist-web/assets/mermaid.core-CbQEj9Db.js # apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-BGo4-sXq.js # apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-C0jle5EI.js # apps/pythinker-code/dist-web/assets/mindmap-definition-FBJOCRG2-f7eIdLXz.js # apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-AeAc49AT.js # apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-D6JBhoh5.js # apps/pythinker-code/dist-web/assets/pegDiagram-XKGWAZYB-NgGaBqf2.js # apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-BScaCxHk.js # apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-BTtXMHAE.js # apps/pythinker-code/dist-web/assets/pieDiagram-E7YTZNPT-DgSKCwnw.js # apps/pythinker-code/dist-web/assets/python-BzmtQ1P9.js # apps/pythinker-code/dist-web/assets/python-TrrpWNPJ.js # apps/pythinker-code/dist-web/assets/python-mo40ghbx.js # apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-COwndgQx.js # apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-CreGC5_y.js # apps/pythinker-code/dist-web/assets/quadrantDiagram-AXDQQJYC-CzIgStJr.js # apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-BVM85k9b.js # apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-DF_BK7Or.js # apps/pythinker-code/dist-web/assets/railroadDiagram-O6MQD6OU-DuuPZ0ov.js # apps/pythinker-code/dist-web/assets/razor-B8gDshAu.js # apps/pythinker-code/dist-web/assets/razor-CyMkHBbR.js # apps/pythinker-code/dist-web/assets/razor-Z8f5mG4b.js # apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-CydD8U2M.js # apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-Dj-m3gpu.js # apps/pythinker-code/dist-web/assets/requirementDiagram-EFPCY7ZU-y6v1n-Cd.js # apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-BUXxiSje.js # apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-ChRcRqnp.js # apps/pythinker-code/dist-web/assets/sankeyDiagram-P5KCCOFB-DJYPzks0.js # apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-BmvrEApT.js # apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-CvCapL06.js # apps/pythinker-code/dist-web/assets/sequenceDiagram-WJ2MYXX4-D-1MBEr0.js # apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-CqX0pFU_.js # apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-DwpDfzZU.js # apps/pythinker-code/dist-web/assets/sizeCapture-X5ZJPWSS-SYi_9Qll.js # apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-B7FH38OW.js # apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-BS8cTIVf.js # apps/pythinker-code/dist-web/assets/stateDiagram-HBIQ2CUA-BiaHfHc9.js # apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-DLXBH5G1.js # apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-DlSkivlD.js # apps/pythinker-code/dist-web/assets/swimlanes-XN3QIQJK-TFuOiGgY.js # apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-Cgs4ffZh.js # apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-D_85GgPu.js # apps/pythinker-code/dist-web/assets/timeline-definition-24CTP7MA-TX06oFD8.js # apps/pythinker-code/dist-web/assets/tsMode-BnMpj1RR.js # apps/pythinker-code/dist-web/assets/tsMode-CzvGRnvc.js # apps/pythinker-code/dist-web/assets/tsMode-Dw_GDg88.js # apps/pythinker-code/dist-web/assets/typescript-BOrvMAyl.js # apps/pythinker-code/dist-web/assets/typescript-lSjBHhPp.js # apps/pythinker-code/dist-web/assets/typescript-nVQLT1z-.js # apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-IfImDi7g.js # apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-JwrXIUnz.js # apps/pythinker-code/dist-web/assets/vennDiagram-4TSXK5OY-lT5aQRrb.js # apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-BhJWwbw8.js # apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-CofjRIsJ.js # apps/pythinker-code/dist-web/assets/vue.runtime.esm-bundler-N36pXGj3.js # apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-7XHC57XS.js # apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-DIEFLrvL.js # apps/pythinker-code/dist-web/assets/wardleyDiagram-VM6X3IG4-nYfxTMJ1.js # apps/pythinker-code/dist-web/assets/xml-B2qwnheY.js # apps/pythinker-code/dist-web/assets/xml-BJ0yttf-.js # apps/pythinker-code/dist-web/assets/xml-D6a408Eo.js # apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-DNRyTiID.js # apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-DuYC3aXg.js # apps/pythinker-code/dist-web/assets/xychartDiagram-S5SC5T6Z-VIqk5Xsx.js # apps/pythinker-code/dist-web/assets/yaml-CIHVrM2G.js # apps/pythinker-code/dist-web/assets/yaml-CtFrCf8J.js # apps/pythinker-code/dist-web/assets/yaml-p8_mHh2O.js # apps/pythinker-code/dist-web/index.html # apps/pythinker-web/src/components/Sidebar.vue # apps/pythinker-web/src/components/WorkspaceExplorer.vue # apps/pythinker-web/src/components/WorkspaceGroup.vue # apps/pythinker-web/src/i18n/locales/en/sidebar.ts # apps/pythinker-web/src/lib/icons.ts # apps/pythinker-web/test/app-shell-contracts.test.ts # apps/pythinker-web/test/desktop-update.test.ts # apps/pythinker-web/test/workspace-explorer.test.ts # docs/guides/web.md
2 parents a318976 + 8ac20f0 commit 3e6a121

248 files changed

Lines changed: 12383 additions & 724 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/add-discussion-mode.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": minor
3+
---
4+
5+
Add experimental Expert Talk for automatic two-model analysis, reciprocal review, and fused answers.

AGENTS.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,48 @@ Gate behind flags. Env: `PYTHINKER_CODE_EXPERIMENTAL_<NAME>` toggles one; `PYTHI
127127
- Hard rules that affect almost every task: update the root `AGENTS.md`.
128128
- Rules that only affect a specific directory: update the nearest sub-directory `AGENTS.md`.
129129
- Project-map entries stay at 1–2 sentences; deep package docs live in the package's own `AGENTS.md`.
130+
131+
<!-- gitnexus:start -->
132+
# GitNexus — Code Intelligence
133+
134+
This project is indexed by GitNexus as **pythinker-code** (91454 symbols, 263612 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
135+
136+
> Index stale? Run `node .gitnexus/run.cjs analyze` from the project root — it auto-selects an available runner. No `.gitnexus/run.cjs` yet? `npx gitnexus analyze` (npm 11 crash → `npm i -g gitnexus`; #1939).
137+
138+
## Always Do
139+
140+
- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
141+
- **MUST run `detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: `detect_changes({scope: "compare", base_ref: "main"})`.
142+
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
143+
- When exploring unfamiliar code, use `query({search_query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
144+
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `context({name: "symbolName"})`.
145+
- For security review, `explain({target: "fileOrSymbol"})` lists taint findings (source→sink flows; needs `analyze --pdg`).
146+
147+
## Never Do
148+
149+
- NEVER edit a function, class, or method without first running `impact` on it.
150+
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
151+
- NEVER rename symbols with find-and-replace — use `rename` which understands the call graph.
152+
- NEVER commit changes without running `detect_changes()` to check affected scope.
153+
154+
## Resources
155+
156+
| Resource | Use for |
157+
|----------|---------|
158+
| `gitnexus://repo/pythinker-code/context` | Codebase overview, check index freshness |
159+
| `gitnexus://repo/pythinker-code/clusters` | All functional areas |
160+
| `gitnexus://repo/pythinker-code/processes` | All execution flows |
161+
| `gitnexus://repo/pythinker-code/process/{name}` | Step-by-step execution trace |
162+
163+
## CLI
164+
165+
| Task | Read this skill file |
166+
|------|---------------------|
167+
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
168+
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
169+
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
170+
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
171+
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
172+
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |
173+
174+
<!-- gitnexus:end -->

CLAUDE.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,46 @@
11
@AGENTS.md
2+
3+
<!-- gitnexus:start -->
4+
# GitNexus — Code Intelligence
5+
6+
This project is indexed by GitNexus as **pythinker-code** (91454 symbols, 263612 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
7+
8+
> Index stale? Run `node .gitnexus/run.cjs analyze` from the project root — it auto-selects an available runner. No `.gitnexus/run.cjs` yet? `npx gitnexus analyze` (npm 11 crash → `npm i -g gitnexus`; #1939).
9+
10+
## Always Do
11+
12+
- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
13+
- **MUST run `detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: `detect_changes({scope: "compare", base_ref: "main"})`.
14+
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
15+
- When exploring unfamiliar code, use `query({search_query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
16+
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `context({name: "symbolName"})`.
17+
- For security review, `explain({target: "fileOrSymbol"})` lists taint findings (source→sink flows; needs `analyze --pdg`).
18+
19+
## Never Do
20+
21+
- NEVER edit a function, class, or method without first running `impact` on it.
22+
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
23+
- NEVER rename symbols with find-and-replace — use `rename` which understands the call graph.
24+
- NEVER commit changes without running `detect_changes()` to check affected scope.
25+
26+
## Resources
27+
28+
| Resource | Use for |
29+
|----------|---------|
30+
| `gitnexus://repo/pythinker-code/context` | Codebase overview, check index freshness |
31+
| `gitnexus://repo/pythinker-code/clusters` | All functional areas |
32+
| `gitnexus://repo/pythinker-code/processes` | All execution flows |
33+
| `gitnexus://repo/pythinker-code/process/{name}` | Step-by-step execution trace |
34+
35+
## CLI
36+
37+
| Task | Read this skill file |
38+
|------|---------------------|
39+
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
40+
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
41+
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
42+
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
43+
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
44+
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |
45+
46+
<!-- gitnexus:end -->
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"sourceHash": "09c4da42042f6a0112a3baa1aecd6062c9f46f6e848edab9c077c2076bfdf819",
3-
"sourceFileCount": 411
2+
"sourceHash": "0a37c819db91d9c13c59e2b4cd1b26e5e6eda54d5dab911b7d233bc3e6a1868a",
3+
"sourceFileCount": 417
44
}

0 commit comments

Comments
 (0)