@linghun/tui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/dist/agent-completion-finalizer.d.ts +31 -0
- package/dist/agent-completion-finalizer.d.ts.map +1 -0
- package/dist/agent-completion-finalizer.js +20 -0
- package/dist/agent-handoff-safety.d.ts +13 -0
- package/dist/agent-handoff-safety.d.ts.map +1 -0
- package/dist/agent-handoff-safety.js +43 -0
- package/dist/agent-workflow-registry.d.ts +45 -0
- package/dist/agent-workflow-registry.d.ts.map +1 -0
- package/dist/agent-workflow-registry.js +12 -0
- package/dist/architecture-boundary.d.ts +151 -0
- package/dist/architecture-boundary.d.ts.map +1 -0
- package/dist/architecture-boundary.js +24 -0
- package/dist/architecture-runtime.d.ts +56 -0
- package/dist/architecture-runtime.d.ts.map +1 -0
- package/dist/architecture-runtime.js +18 -0
- package/dist/background-control-runtime.d.ts +29 -0
- package/dist/background-control-runtime.d.ts.map +1 -0
- package/dist/background-control-runtime.js +148 -0
- package/dist/bash-subcommand-parser.d.ts +34 -0
- package/dist/bash-subcommand-parser.d.ts.map +1 -0
- package/dist/bash-subcommand-parser.js +8 -0
- package/dist/batch-tool-confirmation.d.ts +18 -0
- package/dist/batch-tool-confirmation.d.ts.map +1 -0
- package/dist/batch-tool-confirmation.js +100 -0
- package/dist/break-cache-runtime.d.ts +40 -0
- package/dist/break-cache-runtime.d.ts.map +1 -0
- package/dist/break-cache-runtime.js +17 -0
- package/dist/btw-runtime.d.ts +45 -0
- package/dist/btw-runtime.d.ts.map +1 -0
- package/dist/btw-runtime.js +14 -0
- package/dist/cache-command-runtime.d.ts +22 -0
- package/dist/cache-command-runtime.d.ts.map +1 -0
- package/dist/cache-command-runtime.js +33 -0
- package/dist/cache-freshness.d.ts +26 -0
- package/dist/cache-freshness.d.ts.map +1 -0
- package/dist/cache-freshness.js +14 -0
- package/dist/capability-runtime.d.ts +75 -0
- package/dist/capability-runtime.d.ts.map +1 -0
- package/dist/capability-runtime.js +97 -0
- package/dist/chunk-2FVEKTKN.js +86 -0
- package/dist/chunk-2YL5VKJ5.js +531 -0
- package/dist/chunk-3AKXDMVS.js +85 -0
- package/dist/chunk-3GCIXKCI.js +221 -0
- package/dist/chunk-3LT6OWQ2.js +258 -0
- package/dist/chunk-3XNUDLOM.js +91 -0
- package/dist/chunk-4EIC5BCT.js +475 -0
- package/dist/chunk-4EP3TUFF.js +238 -0
- package/dist/chunk-4I2NWBOM.js +117 -0
- package/dist/chunk-4K6UB524.js +443 -0
- package/dist/chunk-4T5DJW54.js +88 -0
- package/dist/chunk-4WHZ6JKD.js +8105 -0
- package/dist/chunk-5H7RRF7C.js +6 -0
- package/dist/chunk-64MJP6FK.js +558 -0
- package/dist/chunk-66BNE332.js +1617 -0
- package/dist/chunk-6CI6TKLN.js +50 -0
- package/dist/chunk-6RJVTUWI.js +16 -0
- package/dist/chunk-6SMM5CMP.js +100 -0
- package/dist/chunk-6USL33ZO.js +289 -0
- package/dist/chunk-7ZE5JFAZ.js +760 -0
- package/dist/chunk-AKPXMCVF.js +1373 -0
- package/dist/chunk-AO4CXI37.js +284 -0
- package/dist/chunk-APJIC2O5.js +150 -0
- package/dist/chunk-B4GQTZMT.js +607 -0
- package/dist/chunk-BFVPLGAC.js +93 -0
- package/dist/chunk-BOV4K7FP.js +588 -0
- package/dist/chunk-CFMSB6ST.js +59 -0
- package/dist/chunk-CFXB5SE5.js +502 -0
- package/dist/chunk-CRQORMFF.js +32 -0
- package/dist/chunk-CRSLDQOA.js +146 -0
- package/dist/chunk-CRW3636S.js +214 -0
- package/dist/chunk-D3UTL2QX.js +86 -0
- package/dist/chunk-D7TCSOAZ.js +331 -0
- package/dist/chunk-DDXS2RDZ.js +228 -0
- package/dist/chunk-DICVLZHH.js +144 -0
- package/dist/chunk-DNQN74CC.js +1186 -0
- package/dist/chunk-DTK5NBTV.js +912 -0
- package/dist/chunk-E72U7WW7.js +50 -0
- package/dist/chunk-EBACIBJP.js +356 -0
- package/dist/chunk-ECFLCY5V.js +530 -0
- package/dist/chunk-EORRZP3F.js +109 -0
- package/dist/chunk-F43AMWLZ.js +115 -0
- package/dist/chunk-F46N43MG.js +56 -0
- package/dist/chunk-F6TVBCZV.js +51 -0
- package/dist/chunk-FRIMDSRU.js +242 -0
- package/dist/chunk-FTAEPAVY.js +314 -0
- package/dist/chunk-GC55DMZV.js +156 -0
- package/dist/chunk-GCMH5P4W.js +422 -0
- package/dist/chunk-GDQQNPBP.js +251 -0
- package/dist/chunk-GKZYTPN2.js +279 -0
- package/dist/chunk-GLWTWEGX.js +272 -0
- package/dist/chunk-GMUCSNUD.js +586 -0
- package/dist/chunk-GTP2KPLY.js +167 -0
- package/dist/chunk-GW5YDCRZ.js +42 -0
- package/dist/chunk-H3T4EF5F.js +87 -0
- package/dist/chunk-HAEU6OTS.js +381 -0
- package/dist/chunk-HQIJGQYU.js +172 -0
- package/dist/chunk-HW2TBXVK.js +34 -0
- package/dist/chunk-HWD22O6F.js +94 -0
- package/dist/chunk-I3NTAIMF.js +280 -0
- package/dist/chunk-IN42UISW.js +372 -0
- package/dist/chunk-IWUIOLMF.js +82 -0
- package/dist/chunk-J7ZE2JKP.js +283 -0
- package/dist/chunk-JBLVBO3U.js +109 -0
- package/dist/chunk-JDWXC2OQ.js +800 -0
- package/dist/chunk-JGDIO2NF.js +74 -0
- package/dist/chunk-JHGWGH2C.js +182 -0
- package/dist/chunk-JLCPHVBN.js +42 -0
- package/dist/chunk-JO5ANTMR.js +6027 -0
- package/dist/chunk-JPXSFZFC.js +100 -0
- package/dist/chunk-JQCRCDOC.js +1195 -0
- package/dist/chunk-K4FSYBSY.js +41 -0
- package/dist/chunk-K56D3X7S.js +1225 -0
- package/dist/chunk-KI7C6ZOD.js +92 -0
- package/dist/chunk-KO64OFSG.js +58 -0
- package/dist/chunk-KQJHVJZB.js +227 -0
- package/dist/chunk-KTWV5JC5.js +59 -0
- package/dist/chunk-L4XXW6Y5.js +374 -0
- package/dist/chunk-L5GOCMZP.js +18 -0
- package/dist/chunk-LDABZV5V.js +278 -0
- package/dist/chunk-LHHKPGLX.js +903 -0
- package/dist/chunk-LL7LBRDL.js +60 -0
- package/dist/chunk-LQTVYUT3.js +421 -0
- package/dist/chunk-LVIM2PA7.js +663 -0
- package/dist/chunk-M4AIK2SP.js +215 -0
- package/dist/chunk-MLUIOBKL.js +420 -0
- package/dist/chunk-MOJL4X4L.js +47 -0
- package/dist/chunk-MVONSJEN.js +300 -0
- package/dist/chunk-N7G2X2LK.js +709 -0
- package/dist/chunk-NKFKOEYX.js +146 -0
- package/dist/chunk-NMNOAFFT.js +167 -0
- package/dist/chunk-NSIKYD3X.js +74 -0
- package/dist/chunk-O7EFPSMC.js +60 -0
- package/dist/chunk-O7S3HYE6.js +210 -0
- package/dist/chunk-OEYW3JE3.js +262 -0
- package/dist/chunk-OF3K3CU5.js +159 -0
- package/dist/chunk-OMZYPQVA.js +298 -0
- package/dist/chunk-OZMX3E35.js +248 -0
- package/dist/chunk-P277M7Z5.js +303 -0
- package/dist/chunk-P4CPRJLI.js +65 -0
- package/dist/chunk-PBIPV4LD.js +494 -0
- package/dist/chunk-PGNALDEH.js +2003 -0
- package/dist/chunk-PGWW3DVE.js +157 -0
- package/dist/chunk-QB4VWH7W.js +515 -0
- package/dist/chunk-QBCGAIU7.js +120 -0
- package/dist/chunk-QIU3FJPC.js +99 -0
- package/dist/chunk-QLRTQHTR.js +744 -0
- package/dist/chunk-QTDGRZMZ.js +171 -0
- package/dist/chunk-RBOQJFIZ.js +183 -0
- package/dist/chunk-RDGM4RUE.js +178 -0
- package/dist/chunk-RM5JDRCW.js +71 -0
- package/dist/chunk-RM5QMOFY.js +189 -0
- package/dist/chunk-RMLTVKOY.js +588 -0
- package/dist/chunk-RVY34HK4.js +79 -0
- package/dist/chunk-S3YWTBXL.js +43 -0
- package/dist/chunk-SJOS5PM6.js +64 -0
- package/dist/chunk-SOPYWTFV.js +90 -0
- package/dist/chunk-SQIBPLLV.js +15 -0
- package/dist/chunk-SRZIA6B4.js +136 -0
- package/dist/chunk-SYBNJZEL.js +250 -0
- package/dist/chunk-TFZEFIQT.js +17 -0
- package/dist/chunk-THZBFYAH.js +136 -0
- package/dist/chunk-TJLC3QAS.js +83 -0
- package/dist/chunk-TYF4GJR3.js +598 -0
- package/dist/chunk-UDQT5CWK.js +252 -0
- package/dist/chunk-UOHZQIVL.js +168 -0
- package/dist/chunk-URNQUECO.js +187 -0
- package/dist/chunk-UT2TYK2A.js +148 -0
- package/dist/chunk-UT5BOJKU.js +190 -0
- package/dist/chunk-V7GDHHBL.js +526 -0
- package/dist/chunk-VCSRBS47.js +133 -0
- package/dist/chunk-VIBENDE3.js +152 -0
- package/dist/chunk-VTQL23UM.js +302 -0
- package/dist/chunk-W3KHJNSH.js +281 -0
- package/dist/chunk-W6NU7ZAV.js +52 -0
- package/dist/chunk-WHFDDZHY.js +407 -0
- package/dist/chunk-WJWYRBWH.js +48 -0
- package/dist/chunk-WKMBK5UP.js +145 -0
- package/dist/chunk-WQMSRO4D.js +489 -0
- package/dist/chunk-WV6YJGZR.js +81 -0
- package/dist/chunk-WVAQYKGL.js +269 -0
- package/dist/chunk-X7A22JHP.js +106 -0
- package/dist/chunk-XFPNU42I.js +59 -0
- package/dist/chunk-YH6UIHNF.js +161 -0
- package/dist/chunk-YPQFSFYK.js +19 -0
- package/dist/chunk-YTQFOZRZ.js +110 -0
- package/dist/chunk-ZJK25VFP.js +506 -0
- package/dist/chunk-ZOSK2UEU.js +1555 -0
- package/dist/chunk-ZYSN7AWW.js +336 -0
- package/dist/chunk-ZZ2CNCXJ.js +282 -0
- package/dist/command-panel-runtime.d.ts +33 -0
- package/dist/command-panel-runtime.d.ts.map +1 -0
- package/dist/command-panel-runtime.js +80 -0
- package/dist/compact-cache-command-runtime.d.ts +38 -0
- package/dist/compact-cache-command-runtime.d.ts.map +1 -0
- package/dist/compact-cache-command-runtime.js +146 -0
- package/dist/compact-context.d.ts +35 -0
- package/dist/compact-context.d.ts.map +1 -0
- package/dist/compact-context.js +16 -0
- package/dist/compact-preflight-runtime.d.ts +46 -0
- package/dist/compact-preflight-runtime.d.ts.map +1 -0
- package/dist/compact-preflight-runtime.js +62 -0
- package/dist/connector-runtime.d.ts +72 -0
- package/dist/connector-runtime.d.ts.map +1 -0
- package/dist/connector-runtime.js +88 -0
- package/dist/context-estimator.d.ts +20 -0
- package/dist/context-estimator.d.ts.map +1 -0
- package/dist/context-estimator.js +18 -0
- package/dist/context-window-runtime.d.ts +12 -0
- package/dist/context-window-runtime.d.ts.map +1 -0
- package/dist/context-window-runtime.js +10 -0
- package/dist/deep-compact-runtime.d.ts +53 -0
- package/dist/deep-compact-runtime.d.ts.map +1 -0
- package/dist/deep-compact-runtime.js +35 -0
- package/dist/deferred-tools-catalog.d.ts +52 -0
- package/dist/deferred-tools-catalog.d.ts.map +1 -0
- package/dist/deferred-tools-catalog.js +42 -0
- package/dist/details-status-runtime.d.ts +48 -0
- package/dist/details-status-runtime.d.ts.map +1 -0
- package/dist/details-status-runtime.js +102 -0
- package/dist/evidence-runtime.d.ts +48 -0
- package/dist/evidence-runtime.d.ts.map +1 -0
- package/dist/evidence-runtime.js +92 -0
- package/dist/extension-command-runtime.d.ts +63 -0
- package/dist/extension-command-runtime.d.ts.map +1 -0
- package/dist/extension-command-runtime.js +67 -0
- package/dist/extension-slash-runtime.d.ts +11 -0
- package/dist/extension-slash-runtime.d.ts.map +1 -0
- package/dist/extension-slash-runtime.js +79 -0
- package/dist/external-editor-runtime.d.ts +32 -0
- package/dist/external-editor-runtime.d.ts.map +1 -0
- package/dist/external-editor-runtime.js +71 -0
- package/dist/failure-learning-command-runtime.d.ts +10 -0
- package/dist/failure-learning-command-runtime.d.ts.map +1 -0
- package/dist/failure-learning-command-runtime.js +78 -0
- package/dist/failure-learning-presenter.d.ts +6 -0
- package/dist/failure-learning-presenter.d.ts.map +1 -0
- package/dist/failure-learning-presenter.js +12 -0
- package/dist/failure-learning-runtime.d.ts +39 -0
- package/dist/failure-learning-runtime.d.ts.map +1 -0
- package/dist/failure-learning-runtime.js +39 -0
- package/dist/feature-flag-runtime.d.ts +8 -0
- package/dist/feature-flag-runtime.d.ts.map +1 -0
- package/dist/feature-flag-runtime.js +12 -0
- package/dist/feishu-long-connection-runtime.d.ts +12 -0
- package/dist/feishu-long-connection-runtime.d.ts.map +1 -0
- package/dist/feishu-long-connection-runtime.js +7 -0
- package/dist/final-answer-gate.d.ts +24 -0
- package/dist/final-answer-gate.d.ts.map +1 -0
- package/dist/final-answer-gate.js +26 -0
- package/dist/ghost-text.d.ts +16 -0
- package/dist/ghost-text.d.ts.map +1 -0
- package/dist/ghost-text.js +8 -0
- package/dist/git-branch-runtime.d.ts +14 -0
- package/dist/git-branch-runtime.d.ts.map +1 -0
- package/dist/git-branch-runtime.js +68 -0
- package/dist/git-command-runtime.d.ts +22 -0
- package/dist/git-command-runtime.d.ts.map +1 -0
- package/dist/git-command-runtime.js +89 -0
- package/dist/git-operation-runtime.d.ts +188 -0
- package/dist/git-operation-runtime.d.ts.map +1 -0
- package/dist/git-operation-runtime.js +45 -0
- package/dist/git-runtime.d.ts +113 -0
- package/dist/git-runtime.d.ts.map +1 -0
- package/dist/git-runtime.js +16 -0
- package/dist/git-slash-runtime.d.ts +38 -0
- package/dist/git-slash-runtime.d.ts.map +1 -0
- package/dist/git-slash-runtime.js +18 -0
- package/dist/git-tool-dispatch-runtime.d.ts +108 -0
- package/dist/git-tool-dispatch-runtime.d.ts.map +1 -0
- package/dist/git-tool-dispatch-runtime.js +25 -0
- package/dist/git-tool-runtime.d.ts +64 -0
- package/dist/git-tool-runtime.d.ts.map +1 -0
- package/dist/git-tool-runtime.js +36 -0
- package/dist/guard-wiring.d.ts +67 -0
- package/dist/guard-wiring.d.ts.map +1 -0
- package/dist/guard-wiring.js +21 -0
- package/dist/handoff-session-runtime.d.ts +11 -0
- package/dist/handoff-session-runtime.d.ts.map +1 -0
- package/dist/handoff-session-runtime.js +36 -0
- package/dist/index-result-presenter.d.ts +14 -0
- package/dist/index-result-presenter.d.ts.map +1 -0
- package/dist/index-result-presenter.js +28 -0
- package/dist/index-runtime.d.ts +64 -0
- package/dist/index-runtime.d.ts.map +1 -0
- package/dist/index-runtime.js +28 -0
- package/dist/index-tool-runtime.d.ts +44 -0
- package/dist/index-tool-runtime.d.ts.map +1 -0
- package/dist/index-tool-runtime.js +24 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2346 -0
- package/dist/job-agent-command-runtime.d.ts +127 -0
- package/dist/job-agent-command-runtime.d.ts.map +1 -0
- package/dist/job-agent-command-runtime.js +138 -0
- package/dist/job-runner-presenter.d.ts +32 -0
- package/dist/job-runner-presenter.d.ts.map +1 -0
- package/dist/job-runner-presenter.js +30 -0
- package/dist/job-runtime.d.ts +65 -0
- package/dist/job-runtime.d.ts.map +1 -0
- package/dist/job-runtime.js +88 -0
- package/dist/keybinding-runtime.d.ts +29 -0
- package/dist/keybinding-runtime.d.ts.map +1 -0
- package/dist/keybinding-runtime.js +14 -0
- package/dist/log-artifact.d.ts +55 -0
- package/dist/log-artifact.d.ts.map +1 -0
- package/dist/log-artifact.js +10 -0
- package/dist/mcp-index-command-runtime.d.ts +21 -0
- package/dist/mcp-index-command-runtime.d.ts.map +1 -0
- package/dist/mcp-index-command-runtime.js +18 -0
- package/dist/mcp-index-runtime.d.ts +106 -0
- package/dist/mcp-index-runtime.d.ts.map +1 -0
- package/dist/mcp-index-runtime.js +142 -0
- package/dist/mcp-sse-runtime.d.ts +13 -0
- package/dist/mcp-sse-runtime.d.ts.map +1 -0
- package/dist/mcp-sse-runtime.js +8 -0
- package/dist/mcp-stdio-runtime.d.ts +37 -0
- package/dist/mcp-stdio-runtime.d.ts.map +1 -0
- package/dist/mcp-stdio-runtime.js +15 -0
- package/dist/memory-command-runtime.d.ts +37 -0
- package/dist/memory-command-runtime.d.ts.map +1 -0
- package/dist/memory-command-runtime.js +88 -0
- package/dist/memory-eviction-runtime.d.ts +7 -0
- package/dist/memory-eviction-runtime.d.ts.map +1 -0
- package/dist/memory-eviction-runtime.js +12 -0
- package/dist/memory-extraction-runtime.d.ts +40 -0
- package/dist/memory-extraction-runtime.d.ts.map +1 -0
- package/dist/memory-extraction-runtime.js +20 -0
- package/dist/memory-rules-runtime.d.ts +15 -0
- package/dist/memory-rules-runtime.d.ts.map +1 -0
- package/dist/memory-rules-runtime.js +14 -0
- package/dist/meta-scheduler-complexity.d.ts +16 -0
- package/dist/meta-scheduler-complexity.d.ts.map +1 -0
- package/dist/meta-scheduler-complexity.js +37 -0
- package/dist/meta-scheduler-runtime.d.ts +288 -0
- package/dist/meta-scheduler-runtime.d.ts.map +1 -0
- package/dist/meta-scheduler-runtime.js +17 -0
- package/dist/model-command-runtime.d.ts +12 -0
- package/dist/model-command-runtime.d.ts.map +1 -0
- package/dist/model-command-runtime.js +84 -0
- package/dist/model-doctor-runtime.d.ts +81 -0
- package/dist/model-doctor-runtime.d.ts.map +1 -0
- package/dist/model-doctor-runtime.js +46 -0
- package/dist/model-loop-runtime.d.ts +189 -0
- package/dist/model-loop-runtime.d.ts.map +1 -0
- package/dist/model-loop-runtime.js +141 -0
- package/dist/model-prompt-runtime.d.ts +25 -0
- package/dist/model-prompt-runtime.d.ts.map +1 -0
- package/dist/model-prompt-runtime.js +33 -0
- package/dist/model-setup-runtime.d.ts +28 -0
- package/dist/model-setup-runtime.d.ts.map +1 -0
- package/dist/model-setup-runtime.js +26 -0
- package/dist/model-stream-runtime.d.ts +47 -0
- package/dist/model-stream-runtime.d.ts.map +1 -0
- package/dist/model-stream-runtime.js +136 -0
- package/dist/model-tool-runtime.d.ts +114 -0
- package/dist/model-tool-runtime.d.ts.map +1 -0
- package/dist/model-tool-runtime.js +144 -0
- package/dist/natural-command-bridge.d.ts +158 -0
- package/dist/natural-command-bridge.d.ts.map +1 -0
- package/dist/natural-command-bridge.js +36 -0
- package/dist/pending-details-presenter.d.ts +8 -0
- package/dist/pending-details-presenter.d.ts.map +1 -0
- package/dist/pending-details-presenter.js +12 -0
- package/dist/permission-approval-runtime.d.ts +28 -0
- package/dist/permission-approval-runtime.d.ts.map +1 -0
- package/dist/permission-approval-runtime.js +136 -0
- package/dist/permission-continuation-runtime.d.ts +90 -0
- package/dist/permission-continuation-runtime.d.ts.map +1 -0
- package/dist/permission-continuation-runtime.js +68 -0
- package/dist/permission-policy-engine.d.ts +51 -0
- package/dist/permission-policy-engine.d.ts.map +1 -0
- package/dist/permission-policy-engine.js +12 -0
- package/dist/permission-presenter.d.ts +13 -0
- package/dist/permission-presenter.d.ts.map +1 -0
- package/dist/permission-presenter.js +8 -0
- package/dist/persistent-history.d.ts +18 -0
- package/dist/persistent-history.d.ts.map +1 -0
- package/dist/persistent-history.js +126 -0
- package/dist/platform-security.d.ts +4 -0
- package/dist/platform-security.d.ts.map +1 -0
- package/dist/platform-security.js +10 -0
- package/dist/process-command-runtime.d.ts +9 -0
- package/dist/process-command-runtime.d.ts.map +1 -0
- package/dist/process-command-runtime.js +11 -0
- package/dist/process-guard.d.ts +56 -0
- package/dist/process-guard.d.ts.map +1 -0
- package/dist/process-guard.js +22 -0
- package/dist/prompt-command-runtime.d.ts +12 -0
- package/dist/prompt-command-runtime.d.ts.map +1 -0
- package/dist/prompt-command-runtime.js +10 -0
- package/dist/prompt-stash.d.ts +15 -0
- package/dist/prompt-stash.d.ts.map +1 -0
- package/dist/prompt-stash.js +8 -0
- package/dist/provider-circuit-breaker.d.ts +132 -0
- package/dist/provider-circuit-breaker.d.ts.map +1 -0
- package/dist/provider-circuit-breaker.js +31 -0
- package/dist/provider-loop-runtime.d.ts +18 -0
- package/dist/provider-loop-runtime.d.ts.map +1 -0
- package/dist/provider-loop-runtime.js +16 -0
- package/dist/remote-command-runtime.d.ts +47 -0
- package/dist/remote-command-runtime.d.ts.map +1 -0
- package/dist/remote-command-runtime.js +125 -0
- package/dist/remote-inbound-bridge-runtime.d.ts +152 -0
- package/dist/remote-inbound-bridge-runtime.d.ts.map +1 -0
- package/dist/remote-inbound-bridge-runtime.js +44 -0
- package/dist/remote-mcp-presenter.d.ts +5 -0
- package/dist/remote-mcp-presenter.d.ts.map +1 -0
- package/dist/remote-mcp-presenter.js +10 -0
- package/dist/remote-repl-bridge-runtime.d.ts +134 -0
- package/dist/remote-repl-bridge-runtime.d.ts.map +1 -0
- package/dist/remote-repl-bridge-runtime.js +20 -0
- package/dist/remote-transport.d.ts +50 -0
- package/dist/remote-transport.d.ts.map +1 -0
- package/dist/remote-transport.js +14 -0
- package/dist/request-lifecycle-presenter.d.ts +25 -0
- package/dist/request-lifecycle-presenter.d.ts.map +1 -0
- package/dist/request-lifecycle-presenter.js +22 -0
- package/dist/runner-runtime.d.ts +41 -0
- package/dist/runner-runtime.d.ts.map +1 -0
- package/dist/runner-runtime.js +35 -0
- package/dist/runtime-budget.d.ts +38 -0
- package/dist/runtime-budget.d.ts.map +1 -0
- package/dist/runtime-budget.js +78 -0
- package/dist/runtime-path-marker.d.ts +112 -0
- package/dist/runtime-path-marker.d.ts.map +1 -0
- package/dist/runtime-path-marker.js +18 -0
- package/dist/runtime-status-presenter.d.ts +22 -0
- package/dist/runtime-status-presenter.d.ts.map +1 -0
- package/dist/runtime-status-presenter.js +15 -0
- package/dist/runtime-status-snapshot.d.ts +52 -0
- package/dist/runtime-status-snapshot.d.ts.map +1 -0
- package/dist/runtime-status-snapshot.js +11 -0
- package/dist/runtime-utils.d.ts +2 -0
- package/dist/runtime-utils.d.ts.map +1 -0
- package/dist/runtime-utils.js +6 -0
- package/dist/shell/clipboard.d.ts +23 -0
- package/dist/shell/clipboard.d.ts.map +1 -0
- package/dist/shell/clipboard.js +8 -0
- package/dist/shell/components/AgentProgressTree.d.ts +9 -0
- package/dist/shell/components/AgentProgressTree.d.ts.map +1 -0
- package/dist/shell/components/AgentProgressTree.js +9 -0
- package/dist/shell/components/BackgroundTaskOverlay.d.ts +8 -0
- package/dist/shell/components/BackgroundTaskOverlay.d.ts.map +1 -0
- package/dist/shell/components/BackgroundTaskOverlay.js +8 -0
- package/dist/shell/components/BtwPanel.d.ts +16 -0
- package/dist/shell/components/BtwPanel.d.ts.map +1 -0
- package/dist/shell/components/BtwPanel.js +8 -0
- package/dist/shell/components/CommandPanel.d.ts +11 -0
- package/dist/shell/components/CommandPanel.d.ts.map +1 -0
- package/dist/shell/components/CommandPanel.js +8 -0
- package/dist/shell/components/Composer.d.ts +187 -0
- package/dist/shell/components/Composer.d.ts.map +1 -0
- package/dist/shell/components/Composer.js +99 -0
- package/dist/shell/components/ConfigPanel.d.ts +11 -0
- package/dist/shell/components/ConfigPanel.d.ts.map +1 -0
- package/dist/shell/components/ConfigPanel.js +8 -0
- package/dist/shell/components/CtrlOToExpand.d.ts +30 -0
- package/dist/shell/components/CtrlOToExpand.d.ts.map +1 -0
- package/dist/shell/components/CtrlOToExpand.js +16 -0
- package/dist/shell/components/HelpPanel.d.ts +19 -0
- package/dist/shell/components/HelpPanel.d.ts.map +1 -0
- package/dist/shell/components/HelpPanel.js +8 -0
- package/dist/shell/components/HistorySearchPanel.d.ts +14 -0
- package/dist/shell/components/HistorySearchPanel.d.ts.map +1 -0
- package/dist/shell/components/HistorySearchPanel.js +104 -0
- package/dist/shell/components/MessageMarkdown.d.ts +34 -0
- package/dist/shell/components/MessageMarkdown.d.ts.map +1 -0
- package/dist/shell/components/MessageMarkdown.js +18 -0
- package/dist/shell/components/MessageResponse.d.ts +14 -0
- package/dist/shell/components/MessageResponse.d.ts.map +1 -0
- package/dist/shell/components/MessageResponse.js +6 -0
- package/dist/shell/components/MouseInputRouter.d.ts +28 -0
- package/dist/shell/components/MouseInputRouter.d.ts.map +1 -0
- package/dist/shell/components/MouseInputRouter.js +84 -0
- package/dist/shell/components/NotificationStack.d.ts +19 -0
- package/dist/shell/components/NotificationStack.d.ts.map +1 -0
- package/dist/shell/components/NotificationStack.js +6 -0
- package/dist/shell/components/OutputLine.d.ts +19 -0
- package/dist/shell/components/OutputLine.d.ts.map +1 -0
- package/dist/shell/components/OutputLine.js +38 -0
- package/dist/shell/components/ProductBlock.d.ts +10 -0
- package/dist/shell/components/ProductBlock.d.ts.map +1 -0
- package/dist/shell/components/ProductBlock.js +12 -0
- package/dist/shell/components/ScrollViewport.d.ts +43 -0
- package/dist/shell/components/ScrollViewport.d.ts.map +1 -0
- package/dist/shell/components/ScrollViewport.js +86 -0
- package/dist/shell/components/SessionsPanel.d.ts +24 -0
- package/dist/shell/components/SessionsPanel.d.ts.map +1 -0
- package/dist/shell/components/SessionsPanel.js +8 -0
- package/dist/shell/components/ShellApp.d.ts +8 -0
- package/dist/shell/components/ShellApp.d.ts.map +1 -0
- package/dist/shell/components/ShellApp.js +45 -0
- package/dist/shell/components/ShortcutPanel.d.ts +14 -0
- package/dist/shell/components/ShortcutPanel.d.ts.map +1 -0
- package/dist/shell/components/ShortcutPanel.js +59 -0
- package/dist/shell/components/SlashSuggestions.d.ts +24 -0
- package/dist/shell/components/SlashSuggestions.d.ts.map +1 -0
- package/dist/shell/components/SlashSuggestions.js +7 -0
- package/dist/shell/components/StatusFooter.d.ts +30 -0
- package/dist/shell/components/StatusFooter.d.ts.map +1 -0
- package/dist/shell/components/StatusFooter.js +7 -0
- package/dist/shell/components/StatusTray.d.ts +9 -0
- package/dist/shell/components/StatusTray.d.ts.map +1 -0
- package/dist/shell/components/StatusTray.js +6 -0
- package/dist/shell/components/StructuredDiff.d.ts +9 -0
- package/dist/shell/components/StructuredDiff.d.ts.map +1 -0
- package/dist/shell/components/StructuredDiff.js +7 -0
- package/dist/shell/components/TaskListView.d.ts +9 -0
- package/dist/shell/components/TaskListView.d.ts.map +1 -0
- package/dist/shell/components/TaskListView.js +9 -0
- package/dist/shell/components/TaskSuggestionBar.d.ts +15 -0
- package/dist/shell/components/TaskSuggestionBar.d.ts.map +1 -0
- package/dist/shell/components/TaskSuggestionBar.js +8 -0
- package/dist/shell/components/UnseenMessagePill.d.ts +12 -0
- package/dist/shell/components/UnseenMessagePill.d.ts.map +1 -0
- package/dist/shell/components/UnseenMessagePill.js +6 -0
- package/dist/shell/components/WorkflowProgressView.d.ts +9 -0
- package/dist/shell/components/WorkflowProgressView.d.ts.map +1 -0
- package/dist/shell/components/WorkflowProgressView.js +9 -0
- package/dist/shell/components/useAnchoredCursor.d.ts +32 -0
- package/dist/shell/components/useAnchoredCursor.d.ts.map +1 -0
- package/dist/shell/components/useAnchoredCursor.js +6 -0
- package/dist/shell/hooks/useRenderThrottle.d.ts +2 -0
- package/dist/shell/hooks/useRenderThrottle.d.ts.map +1 -0
- package/dist/shell/hooks/useRenderThrottle.js +35 -0
- package/dist/shell/hooks/useScrollBatcher.d.ts +10 -0
- package/dist/shell/hooks/useScrollBatcher.d.ts.map +1 -0
- package/dist/shell/hooks/useScrollBatcher.js +23 -0
- package/dist/shell/hooks/useScrollRuntime.d.ts +2 -0
- package/dist/shell/hooks/useScrollRuntime.d.ts.map +1 -0
- package/dist/shell/hooks/useScrollRuntime.js +6 -0
- package/dist/shell/hyperlink-utils.d.ts +18 -0
- package/dist/shell/hyperlink-utils.d.ts.map +1 -0
- package/dist/shell/hyperlink-utils.js +8 -0
- package/dist/shell/ink-renderer.d.ts +18 -0
- package/dist/shell/ink-renderer.d.ts.map +1 -0
- package/dist/shell/ink-renderer.js +54 -0
- package/dist/shell/models/command-transcript-presenter.d.ts +73 -0
- package/dist/shell/models/command-transcript-presenter.d.ts.map +1 -0
- package/dist/shell/models/command-transcript-presenter.js +26 -0
- package/dist/shell/models/help-panel.d.ts +37 -0
- package/dist/shell/models/help-panel.d.ts.map +1 -0
- package/dist/shell/models/help-panel.js +10 -0
- package/dist/shell/models/permission-elevation.d.ts +65 -0
- package/dist/shell/models/permission-elevation.d.ts.map +1 -0
- package/dist/shell/models/permission-elevation.js +10 -0
- package/dist/shell/models/permission-explanation.d.ts +45 -0
- package/dist/shell/models/permission-explanation.d.ts.map +1 -0
- package/dist/shell/models/permission-explanation.js +14 -0
- package/dist/shell/models/session-panel.d.ts +22 -0
- package/dist/shell/models/session-panel.d.ts.map +1 -0
- package/dist/shell/models/session-panel.js +18 -0
- package/dist/shell/models/task-scroll-state.d.ts +24 -0
- package/dist/shell/models/task-scroll-state.d.ts.map +1 -0
- package/dist/shell/models/task-scroll-state.js +26 -0
- package/dist/shell/models/terminal-input-runtime.d.ts +37 -0
- package/dist/shell/models/terminal-input-runtime.d.ts.map +1 -0
- package/dist/shell/models/terminal-input-runtime.js +18 -0
- package/dist/shell/models/transcript-scroll-state.d.ts +57 -0
- package/dist/shell/models/transcript-scroll-state.d.ts.map +1 -0
- package/dist/shell/models/transcript-scroll-state.js +12 -0
- package/dist/shell/models/transcript-selection-state.d.ts +39 -0
- package/dist/shell/models/transcript-selection-state.d.ts.map +1 -0
- package/dist/shell/models/transcript-selection-state.js +25 -0
- package/dist/shell/models/wheel-acceleration.d.ts +52 -0
- package/dist/shell/models/wheel-acceleration.d.ts.map +1 -0
- package/dist/shell/models/wheel-acceleration.js +6 -0
- package/dist/shell/output-utils.d.ts +22 -0
- package/dist/shell/output-utils.d.ts.map +1 -0
- package/dist/shell/output-utils.js +12 -0
- package/dist/shell/plain-renderer.d.ts +12 -0
- package/dist/shell/plain-renderer.d.ts.map +1 -0
- package/dist/shell/plain-renderer.js +13 -0
- package/dist/shell/progress-views.d.ts +10 -0
- package/dist/shell/progress-views.d.ts.map +1 -0
- package/dist/shell/progress-views.js +17 -0
- package/dist/shell/stdout-flush-barrier.d.ts +39 -0
- package/dist/shell/stdout-flush-barrier.d.ts.map +1 -0
- package/dist/shell/stdout-flush-barrier.js +10 -0
- package/dist/shell/terminal-capability.d.ts +54 -0
- package/dist/shell/terminal-capability.d.ts.map +1 -0
- package/dist/shell/terminal-capability.js +10 -0
- package/dist/shell/terminal-interaction-runtime.d.ts +11 -0
- package/dist/shell/terminal-interaction-runtime.d.ts.map +1 -0
- package/dist/shell/terminal-interaction-runtime.js +38 -0
- package/dist/shell/terminal-state-recovery.d.ts +52 -0
- package/dist/shell/terminal-state-recovery.d.ts.map +1 -0
- package/dist/shell/terminal-state-recovery.js +11 -0
- package/dist/shell/text-utils.d.ts +40 -0
- package/dist/shell/text-utils.d.ts.map +1 -0
- package/dist/shell/text-utils.js +26 -0
- package/dist/shell/theme.d.ts +41 -0
- package/dist/shell/theme.d.ts.map +1 -0
- package/dist/shell/theme.js +8 -0
- package/dist/shell/types.d.ts +784 -0
- package/dist/shell/types.d.ts.map +1 -0
- package/dist/shell/types.js +0 -0
- package/dist/shell/view-model.d.ts +82 -0
- package/dist/shell/view-model.d.ts.map +1 -0
- package/dist/shell/view-model.js +48 -0
- package/dist/slash-command-runtime.d.ts +64 -0
- package/dist/slash-command-runtime.d.ts.map +1 -0
- package/dist/slash-command-runtime.js +186 -0
- package/dist/slash-dispatch.d.ts +48 -0
- package/dist/slash-dispatch.d.ts.map +1 -0
- package/dist/slash-dispatch.js +53 -0
- package/dist/startup-runtime.d.ts +48 -0
- package/dist/startup-runtime.d.ts.map +1 -0
- package/dist/startup-runtime.js +43 -0
- package/dist/terminal-readiness-presenter.d.ts +131 -0
- package/dist/terminal-readiness-presenter.d.ts.map +1 -0
- package/dist/terminal-readiness-presenter.js +16 -0
- package/dist/terminal-readiness-runtime.d.ts +5 -0
- package/dist/terminal-readiness-runtime.d.ts.map +1 -0
- package/dist/terminal-readiness-runtime.js +15 -0
- package/dist/terminal-setup-runtime.d.ts +34 -0
- package/dist/terminal-setup-runtime.d.ts.map +1 -0
- package/dist/terminal-setup-runtime.js +257 -0
- package/dist/tool-output-presenter.d.ts +38 -0
- package/dist/tool-output-presenter.d.ts.map +1 -0
- package/dist/tool-output-presenter.js +16 -0
- package/dist/tool-result-budget.d.ts +42 -0
- package/dist/tool-result-budget.d.ts.map +1 -0
- package/dist/tool-result-budget.js +11 -0
- package/dist/tui-agent-job-runtime.d.ts +38 -0
- package/dist/tui-agent-job-runtime.d.ts.map +1 -0
- package/dist/tui-agent-job-runtime.js +86 -0
- package/dist/tui-context-runtime.d.ts +426 -0
- package/dist/tui-context-runtime.d.ts.map +1 -0
- package/dist/tui-context-runtime.js +65 -0
- package/dist/tui-data-types.d.ts +923 -0
- package/dist/tui-data-types.d.ts.map +1 -0
- package/dist/tui-data-types.js +0 -0
- package/dist/tui-details-runtime.d.ts +25 -0
- package/dist/tui-details-runtime.d.ts.map +1 -0
- package/dist/tui-details-runtime.js +29 -0
- package/dist/tui-memory-runtime.d.ts +33 -0
- package/dist/tui-memory-runtime.d.ts.map +1 -0
- package/dist/tui-memory-runtime.js +58 -0
- package/dist/tui-messages.d.ts +4 -0
- package/dist/tui-messages.d.ts.map +1 -0
- package/dist/tui-messages.js +6 -0
- package/dist/tui-model-runtime.d.ts +30 -0
- package/dist/tui-model-runtime.d.ts.map +1 -0
- package/dist/tui-model-runtime.js +39 -0
- package/dist/tui-output-surface.d.ts +141 -0
- package/dist/tui-output-surface.d.ts.map +1 -0
- package/dist/tui-output-surface.js +55 -0
- package/dist/tui-permission-runtime.d.ts +62 -0
- package/dist/tui-permission-runtime.d.ts.map +1 -0
- package/dist/tui-permission-runtime.js +24 -0
- package/dist/tui-state-runtime.d.ts +21 -0
- package/dist/tui-state-runtime.d.ts.map +1 -0
- package/dist/tui-state-runtime.js +47 -0
- package/dist/turn-continuity-runtime.d.ts +30 -0
- package/dist/turn-continuity-runtime.d.ts.map +1 -0
- package/dist/turn-continuity-runtime.js +8 -0
- package/dist/undo-ring.d.ts +16 -0
- package/dist/undo-ring.d.ts.map +1 -0
- package/dist/undo-ring.js +12 -0
- package/dist/usage-stats-presenter.d.ts +17 -0
- package/dist/usage-stats-presenter.d.ts.map +1 -0
- package/dist/usage-stats-presenter.js +22 -0
- package/dist/user-state-signal-runtime.d.ts +33 -0
- package/dist/user-state-signal-runtime.d.ts.map +1 -0
- package/dist/user-state-signal-runtime.js +8 -0
- package/dist/verification-command-runtime.d.ts +25 -0
- package/dist/verification-command-runtime.d.ts.map +1 -0
- package/dist/verification-command-runtime.js +51 -0
- package/dist/verification-level.d.ts +93 -0
- package/dist/verification-level.d.ts.map +1 -0
- package/dist/verification-level.js +18 -0
- package/dist/workflow-agent-runtime-bridge.d.ts +169 -0
- package/dist/workflow-agent-runtime-bridge.d.ts.map +1 -0
- package/dist/workflow-agent-runtime-bridge.js +9 -0
- package/dist/workflow-command-runtime.d.ts +94 -0
- package/dist/workflow-command-runtime.d.ts.map +1 -0
- package/dist/workflow-command-runtime.js +114 -0
- package/dist/workflow-plan-schema.d.ts +161 -0
- package/dist/workflow-plan-schema.d.ts.map +1 -0
- package/dist/workflow-plan-schema.js +12 -0
- package/dist/workflow-planner-entry.d.ts +52 -0
- package/dist/workflow-planner-entry.d.ts.map +1 -0
- package/dist/workflow-planner-entry.js +328 -0
- package/dist/workflow-task-surface.d.ts +39 -0
- package/dist/workflow-task-surface.d.ts.map +1 -0
- package/dist/workflow-task-surface.js +7 -0
- package/dist/workspace-reference-cache.d.ts +110 -0
- package/dist/workspace-reference-cache.d.ts.map +1 -0
- package/dist/workspace-reference-cache.js +12 -0
- package/package.json +41 -0
|
@@ -0,0 +1,663 @@
|
|
|
1
|
+
import {
|
|
2
|
+
redactedPath,
|
|
3
|
+
runCommandCapture
|
|
4
|
+
} from "./chunk-RVY34HK4.js";
|
|
5
|
+
import {
|
|
6
|
+
formatFeatureFlags,
|
|
7
|
+
getFeatureFlags
|
|
8
|
+
} from "./chunk-E72U7WW7.js";
|
|
9
|
+
import {
|
|
10
|
+
createHookState,
|
|
11
|
+
createPluginState,
|
|
12
|
+
createSkillState,
|
|
13
|
+
stableId
|
|
14
|
+
} from "./chunk-QLRTQHTR.js";
|
|
15
|
+
import {
|
|
16
|
+
getRuntimeStatusProvider
|
|
17
|
+
} from "./chunk-3LT6OWQ2.js";
|
|
18
|
+
import {
|
|
19
|
+
stableHash
|
|
20
|
+
} from "./chunk-4T5DJW54.js";
|
|
21
|
+
import {
|
|
22
|
+
formatError,
|
|
23
|
+
sanitizeDiagnosticText,
|
|
24
|
+
truncateDisplay
|
|
25
|
+
} from "./chunk-OMZYPQVA.js";
|
|
26
|
+
|
|
27
|
+
// src/extension-command-runtime.ts
|
|
28
|
+
import { randomUUID } from "crypto";
|
|
29
|
+
import { mkdir, mkdtemp, readFile, rm, stat, writeFile } from "fs/promises";
|
|
30
|
+
import { tmpdir } from "os";
|
|
31
|
+
import { basename, extname, join, resolve } from "path";
|
|
32
|
+
import { resetExtensionTrustForInstall, saveExtensionEnablement } from "@linghun/config";
|
|
33
|
+
function formatConfigOverview(context) {
|
|
34
|
+
const zh = context.language === "zh-CN";
|
|
35
|
+
const yes = zh ? "\u662F" : "yes";
|
|
36
|
+
const no = zh ? "\u5426" : "no";
|
|
37
|
+
const onOff = (b) => b ? yes : no;
|
|
38
|
+
const executor = context.config.modelRoutes.routes.find((r) => r.role === "executor");
|
|
39
|
+
const trust = context.config.workspaceTrust;
|
|
40
|
+
const trustLabel = trust.recorded ? trust.level === "trusted" ? zh ? "\u5DF2\u4FE1\u4EFB" : "trusted" : zh ? "\u53D7\u9650" : "restricted" : zh ? "\u672A\u8BB0\u5F55" : "unrecorded";
|
|
41
|
+
const mcpServers = context.config.mcp.enabledServers.join(", ") || (zh ? "\u65E0" : "none");
|
|
42
|
+
const indexStatus = context.index.status || (zh ? "\u672A\u77E5" : "unknown");
|
|
43
|
+
const cacheCount = context.cache.history.length;
|
|
44
|
+
const bgRunning = context.backgroundTasks.filter((t) => t.status === "running").length;
|
|
45
|
+
const skillsTrusted = context.skills.trustedIds.length;
|
|
46
|
+
const pluginsTrusted = context.plugins.trustedIds.length;
|
|
47
|
+
const remoteEnabled = Boolean(
|
|
48
|
+
context.config.remote?.enabled
|
|
49
|
+
);
|
|
50
|
+
if (zh) {
|
|
51
|
+
return [
|
|
52
|
+
"\u914D\u7F6E\u6982\u89C8\uFF08\u4E00\u7AD9\u5F0F\u53EA\u8BFB\uFF09",
|
|
53
|
+
`- \u8BED\u8A00\uFF1A${context.config.language}\uFF08\u7528 /language en-US \u5207\u6362\uFF09`,
|
|
54
|
+
`- \u6A21\u578B\uFF1A${context.model}\uFF08\u6267\u884C\u5668\u5DE5\u5177 ${onOff(Boolean(executor?.allowTools))}\uFF1B\u7528 /model\u3001/model doctor\u3001/model route \u67E5\u770B\u4E0E\u8BCA\u65AD\uFF09`,
|
|
55
|
+
`- \u6743\u9650\u6A21\u5F0F\uFF1A${context.permissionMode}\uFF08\u7528 /mode \u5207\u6362\uFF1B\u89C4\u5219\u7528 /permissions\uFF09`,
|
|
56
|
+
`- \u5DE5\u4F5C\u533A\u4FE1\u4EFB\uFF1A${trustLabel}\uFF08\u7528 /trust \u8C03\u6574\uFF09`,
|
|
57
|
+
`- \u7D22\u5F15\uFF1A${indexStatus}\uFF08\u7528 /index status\u3001/index doctor\u3001/index check\uFF09`,
|
|
58
|
+
`- MCP\uFF1A\u5DF2\u914D\u7F6E\u670D\u52A1 ${mcpServers}\uFF08\u7528 /mcp\u3001/mcp doctor\u3001/mcp tools\uFF09`,
|
|
59
|
+
"- \u8BB0\u5FC6\uFF1A\u7528 /memory\u3001/memory storage\u3001/memory review\u3001/memory learn",
|
|
60
|
+
`- \u7F13\u5B58\uFF1A\u5386\u53F2 ${cacheCount} \u6761\uFF08\u7528 /cache status\u3001/cache-log\u3001/usage\u3001/stats\uFF09`,
|
|
61
|
+
`- \u540E\u53F0\uFF1A\u8FD0\u884C\u4E2D ${bgRunning}\uFF08\u7528 /background\u3001/job\u3001/details\uFF09`,
|
|
62
|
+
`- \u8FDC\u7A0B\uFF1A${onOff(remoteEnabled)}\uFF08\u7528 /remote\uFF09`,
|
|
63
|
+
`- \u94A9\u5B50\uFF1A${onOff(context.hooks.enabled)}\uFF1B\u9879\u76EE\u4FE1\u4EFB ${onOff(context.hooks.projectTrusted)}\uFF08\u7528 /doctor hooks\uFF09`,
|
|
64
|
+
`- \u63D2\u4EF6\uFF1A\u53D1\u73B0 ${onOff(context.plugins.enabled)}\uFF1B\u4FE1\u4EFB id \u6570 ${pluginsTrusted}\uFF08\u7528 /plugins\u3001/plugins doctor\uFF09`,
|
|
65
|
+
`- \u6280\u80FD\uFF1A\u53D1\u73B0 ${onOff(context.skills.enabled)}\uFF1B\u4FE1\u4EFB id \u6570 ${skillsTrusted}\uFF08\u7528 /skills\u3001/skills status\uFF09`,
|
|
66
|
+
`- \u5DE5\u4F5C\u6D41\uFF1A\u53D1\u73B0 ${onOff(context.workflows.enabled)}\uFF08\u7528 /workflows\uFF09`,
|
|
67
|
+
"\u4E0B\u4E00\u6B65\uFF1A\u76F4\u63A5\u8F93\u5165\u5BF9\u5E94 slash \u8FDB\u5165\uFF1B\u7528 /features \u67E5\u770B\u9ED8\u8BA4\u529F\u80FD\u7B56\u7565\uFF0C\u7528 /help all \u67E5\u770B\u5B8C\u6574\u547D\u4EE4\u8868\u3002"
|
|
68
|
+
].join("\n");
|
|
69
|
+
}
|
|
70
|
+
return [
|
|
71
|
+
"Configuration overview (one-stop read-only)",
|
|
72
|
+
`- language: ${context.config.language} (switch via /language en-US)`,
|
|
73
|
+
`- model: ${context.model} (executor tools ${onOff(Boolean(executor?.allowTools))}; use /model, /model doctor, /model route)`,
|
|
74
|
+
`- permission mode: ${context.permissionMode} (switch via /mode; rules via /permissions)`,
|
|
75
|
+
`- workspace trust: ${trustLabel} (adjust via /trust)`,
|
|
76
|
+
`- index: ${indexStatus} (use /index status, /index doctor, /index check)`,
|
|
77
|
+
`- MCP: configured servers ${mcpServers} (use /mcp, /mcp doctor, /mcp tools)`,
|
|
78
|
+
"- memory: use /memory, /memory storage, /memory review, /memory learn",
|
|
79
|
+
`- cache: history ${cacheCount} (use /cache status, /cache-log, /usage, /stats)`,
|
|
80
|
+
`- background: running ${bgRunning} (use /background, /job, /details)`,
|
|
81
|
+
`- remote: ${onOff(remoteEnabled)} (use /remote)`,
|
|
82
|
+
`- hooks: ${onOff(context.hooks.enabled)}; project trusted ${onOff(context.hooks.projectTrusted)} (use /doctor hooks)`,
|
|
83
|
+
`- plugins: discover ${onOff(context.plugins.enabled)}; trusted ids ${pluginsTrusted} (use /plugins, /plugins doctor)`,
|
|
84
|
+
`- skills: discover ${onOff(context.skills.enabled)}; trusted ids ${skillsTrusted} (use /skills, /skills status)`,
|
|
85
|
+
`- workflows: discover ${onOff(context.workflows.enabled)} (use /workflows)`,
|
|
86
|
+
"Next: type the slash to enter the panel. /features for default policy. /help all for the full command list."
|
|
87
|
+
].join("\n");
|
|
88
|
+
}
|
|
89
|
+
function formatFeaturePolicy(context) {
|
|
90
|
+
return [
|
|
91
|
+
"Feature policy\uFF08default CCB-style posture\uFF09",
|
|
92
|
+
"Recommended foundation\uFF08default on / visible\uFF09",
|
|
93
|
+
`- language: ${context.config.language}; en-US available via /language en-US`,
|
|
94
|
+
`- model/tool loop: provider tools ${context.config.modelRoutes.routes.find((route) => route.role === "executor")?.allowTools ? "yes" : "no"}; evidence and long output are kept in details, available via /details`,
|
|
95
|
+
`- cache/stats: /cache status, /break-cache status, /usage, /stats; history ${context.cache.history.length}`,
|
|
96
|
+
`- model doctor: /model doctor and /model route doctor; provider ${getRuntimeStatusProvider(context)} model ${context.model}`,
|
|
97
|
+
"- index: status/search/architecture are readonly; init fast/refresh are safe local actions with safety scan; auto full-repo index on startup no",
|
|
98
|
+
`- codebase-memory MCP: discoverable/diagnosable via /mcp doctor; enabled servers ${context.config.mcp.enabledServers.join(",") || "none"}`,
|
|
99
|
+
`- permissions: project allowlist visible via /permissions; default mode ${context.permissionMode}`,
|
|
100
|
+
"Advanced/high-cost/automation\uFF08discoverable, not auto-run\uFF09",
|
|
101
|
+
"- memory: controlled extraction runtime on when learning is active; stable taxonomy memory writes only to dedicated memory dir; review via /memory review",
|
|
102
|
+
`- skills: discover manifests ${context.skills.enabled ? "yes" : "no"}; auto execute no; trusted ids ${context.skills.trustedIds.join(",") || "none"}`,
|
|
103
|
+
`- workflows: discover templates ${context.workflows.enabled ? "yes" : "no"}; auto run no; /workflows <name> only shows Start Gate`,
|
|
104
|
+
`- plugins: discover manifests ${context.plugins.enabled ? "yes" : "no"}; auto execute no; trusted ids ${context.plugins.trustedIds.join(",") || "none"}`,
|
|
105
|
+
"- agents/background: manual commands only; verifier auto fork no; coordinator/multi-worker unsupported",
|
|
106
|
+
"Dangerous defaults\uFF08off\uFF09",
|
|
107
|
+
"- mode switching: direct /mode and Shift+Tab cycling; switching modes does not bypass hard denies, path safety, or the permission pipeline",
|
|
108
|
+
`- hooks: enabled ${context.hooks.enabled ? "yes" : "no"}; project trusted ${context.hooks.projectTrusted ? "yes" : "no"}; auto execution no`,
|
|
109
|
+
"- auto accept all edits no; auto dependency install no; auto networking no; delete/rename/restore auto execution no",
|
|
110
|
+
"- plugin marketplace auto install/update no; remote bridge/control auto connect no; continuous phase progression no",
|
|
111
|
+
"Runtime feature flags\uFF08local, not remote GrowthBook\uFF09",
|
|
112
|
+
...formatFeatureFlags(getFeatureFlags(context)),
|
|
113
|
+
"Unsupported / pending",
|
|
114
|
+
"- remote channels, voice, computer-use/browser control, daemon jobs, plugin marketplace, and AI sessions auto injection are not default features."
|
|
115
|
+
].join("\n");
|
|
116
|
+
}
|
|
117
|
+
function formatSkills(context) {
|
|
118
|
+
const lines = [
|
|
119
|
+
"Skills\uFF08summary-first / load-on-demand\uFF09",
|
|
120
|
+
`- projectDir: ${context.skills.projectDir}`,
|
|
121
|
+
`- userDir: ${context.skills.userDir}`,
|
|
122
|
+
`- enabled: ${context.skills.enabled ? "yes" : "no"}`,
|
|
123
|
+
`- evolution candidates: ${context.skills.evolutionCandidates.length}\uFF08candidate only; auto enable no\uFF09`
|
|
124
|
+
];
|
|
125
|
+
if (context.skills.lastError) {
|
|
126
|
+
lines.push(`- lastError: ${context.skills.lastError}`);
|
|
127
|
+
}
|
|
128
|
+
if (context.skills.skills.length === 0) {
|
|
129
|
+
lines.push(
|
|
130
|
+
"- none\uFF1A\u53EF\u8FD0\u884C /skills add \u67E5\u770B\u6CE8\u518C\u8DEF\u5F84\uFF0C\u6216 /skills install local <path> \u5B89\u88C5\u672C\u5730 skill manifest\u3002"
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
for (const skill of context.skills.skills) {
|
|
134
|
+
const error = skill.lastError ? `; last error ${skill.lastError}` : "";
|
|
135
|
+
lines.push(
|
|
136
|
+
`- ${skill.id}: ${skill.enabled ? "enabled" : "disabled"}; trusted ${skill.trusted ? "yes" : "no"}; source ${skill.source}; scope ${skill.scope}; version ${skill.version}; triggers ${skill.triggers.join(",") || "-"}; write ${skill.mayWrite ? "yes" : "no"}; bash ${skill.mayExecute ? "yes" : "no"}; network ${skill.mayNetwork ? "yes" : "no"}; summary ${skill.summary}${error}`
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
lines.push(
|
|
140
|
+
"- note: \u9ED8\u8BA4\u53EA\u52A0\u8F7D metadata/description/triggers/stable summary\uFF1B\u4E0D\u4F1A\u628A skill \u6B63\u6587\u585E\u8FDB prompt\uFF1Bevolution candidate \u53EA\u8BB0\u5F55\u5EFA\u8BAE\uFF0C\u4E0D\u5199\u6587\u4EF6\u3001\u4E0D\u542F\u7528\u3002"
|
|
141
|
+
);
|
|
142
|
+
return lines.join("\n");
|
|
143
|
+
}
|
|
144
|
+
function createSkillEvolutionCandidate(summary, source) {
|
|
145
|
+
return {
|
|
146
|
+
id: randomUUID(),
|
|
147
|
+
status: "candidate",
|
|
148
|
+
summary: truncateDisplay(summary.replace(/\s+/g, " "), 240),
|
|
149
|
+
triggerCondition: "repeated verified workflow success or explicit user request",
|
|
150
|
+
source,
|
|
151
|
+
risk: "medium",
|
|
152
|
+
suggestedPath: "manual-review-only; use /skills install local <path> after creating a trusted manifest",
|
|
153
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function formatWorkflows(context) {
|
|
157
|
+
const isEn = context.language === "en-US";
|
|
158
|
+
return [
|
|
159
|
+
isEn ? "Workflows (local templates + real runner entry)" : "Workflows\uFF08\u672C\u5730\u6A21\u677F\u4E0E\u771F\u5B9E runner \u5165\u53E3\uFF09",
|
|
160
|
+
...context.workflows.templates.map(
|
|
161
|
+
(item) => `- ${item.id}: purpose ${item.purpose}; risk ${item.risk}; writes files ${item.writesFiles ? "yes" : "no"}; validation ${item.recommendedValidation.join(" | ")}`
|
|
162
|
+
),
|
|
163
|
+
isEn ? "- preview: /workflows plan <goal> generates preview only, no execution." : "- preview: /workflows plan <goal> \u53EA\u751F\u6210\u9884\u89C8\uFF0C\u4E0D\u6267\u884C\u3002",
|
|
164
|
+
isEn ? "- run: /workflows run <goal> reuses durable job runner, writes real task/transcript/report." : "- run: /workflows run <goal> \u590D\u7528 durable job runner\uFF0C\u5199\u5165\u771F\u5B9E task/transcript/report\u3002",
|
|
165
|
+
isEn ? "- gate: /workflows <name> enters start confirmation; write/bash/network/install still go through permission pipeline." : "- gate: /workflows <name> \u53EA\u8FDB\u5165\u542F\u52A8\u786E\u8BA4\u8BF4\u660E\uFF1B\u5199\u6587\u4EF6/Bash/\u8054\u7F51/\u5B89\u88C5\u4F9D\u8D56\u4ECD\u8D70\u6743\u9650\u7BA1\u9053\u3002"
|
|
166
|
+
].join("\n");
|
|
167
|
+
}
|
|
168
|
+
function formatPlugins(context) {
|
|
169
|
+
const lines = [
|
|
170
|
+
"Plugins\uFF08\u672C\u5730 manifest loader\uFF09",
|
|
171
|
+
`- projectDir: ${context.plugins.projectDir}`,
|
|
172
|
+
`- userDir: ${context.plugins.userDir}`,
|
|
173
|
+
`- enabled: ${context.plugins.enabled ? "yes" : "no"}`
|
|
174
|
+
];
|
|
175
|
+
if (context.plugins.lastError) {
|
|
176
|
+
lines.push(`- lastError: ${context.plugins.lastError}`);
|
|
177
|
+
}
|
|
178
|
+
if (context.plugins.plugins.length === 0) {
|
|
179
|
+
lines.push(
|
|
180
|
+
"- none\uFF1A\u628A\u672C\u5730 manifest \u653E\u5230 project/user plugins \u76EE\u5F55\uFF0C\u6216\u8FD0\u884C /plugins install local <path>\uFF1BGit/GitHub \u4EC5\u652F\u6301\u53D7\u63A7 metadata \u5B89\u88C5\u3002"
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
for (const plugin of context.plugins.plugins) {
|
|
184
|
+
lines.push(
|
|
185
|
+
`- ${plugin.id}: ${plugin.enabled ? "enabled" : "disabled"}; trusted ${plugin.trusted ? "yes" : "no"}; source ${plugin.source}; scope ${plugin.scope}; version ${plugin.version}; write ${plugin.mayWrite ? "yes" : "no"}; bash ${plugin.mayExecute ? "yes" : "no"}; network ${plugin.mayNetwork ? "yes" : "no"}; commands ${plugin.contributions.commands.join(",") || "-"}; hooks ${plugin.contributions.hooks.join(",") || "-"}; workflows ${plugin.contributions.workflows.join(",") || "-"}; skills ${plugin.contributions.skills.join(",") || "-"}`
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
lines.push("- note: plugin \u8D21\u732E\u9879\u7A33\u5B9A\u6392\u5E8F\uFF1B\u8D21\u732E\u5DE5\u5177\u4ECD\u8D70\u7EDF\u4E00\u6743\u9650\u7BA1\u9053\uFF0C\u52A0\u8F7D\u5931\u8D25\u9694\u79BB\u3002");
|
|
189
|
+
return lines.join("\n");
|
|
190
|
+
}
|
|
191
|
+
function formatPluginsDoctor(context) {
|
|
192
|
+
return [
|
|
193
|
+
"Plugins doctor",
|
|
194
|
+
`- manifest count: ${context.plugins.plugins.length}`,
|
|
195
|
+
`- disabled ids: ${context.plugins.disabledIds.join(",") || "none"}`,
|
|
196
|
+
`- trusted ids: ${context.plugins.trustedIds.join(",") || "none"}`,
|
|
197
|
+
...context.plugins.plugins.map((plugin) => {
|
|
198
|
+
const risk = !plugin.trusted ? `BLOCK untrusted ${plugin.source}` : "ok";
|
|
199
|
+
const error = plugin.lastError ? `; last error ${plugin.lastError}` : "";
|
|
200
|
+
return `- ${plugin.id}: ${risk}; path ${plugin.path}; permissions ${plugin.permissions.join(",") || "none"}${error}`;
|
|
201
|
+
}),
|
|
202
|
+
"- boundary: \u4E0D\u6267\u884C\u8FDC\u7A0B\u5B89\u88C5/\u81EA\u52A8\u66F4\u65B0/\u5B8C\u6574\u6C99\u7BB1\uFF1B\u672A\u4FE1\u4EFB extension \u4E0D\u5F97\u5199\u6587\u4EF6\u3001\u8054\u7F51\u6216\u6267\u884C\u547D\u4EE4\u3002"
|
|
203
|
+
].join("\n");
|
|
204
|
+
}
|
|
205
|
+
function formatHooksDoctor(context) {
|
|
206
|
+
const cacheImpact = stableHash(createExtensionFreshnessSummaryForDoctor(context));
|
|
207
|
+
const lines = [
|
|
208
|
+
"Hooks doctor",
|
|
209
|
+
`- hooks enabled: ${context.hooks.enabled ? "yes" : "no"}\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09`,
|
|
210
|
+
`- project trusted: ${context.hooks.projectTrusted ? "yes" : "no"}`,
|
|
211
|
+
`- timeout: ${context.hooks.timeoutMs}ms`,
|
|
212
|
+
`- output limit: ${context.hooks.outputLimitBytes} bytes`,
|
|
213
|
+
`- cache impact hash: ${cacheImpact}`
|
|
214
|
+
];
|
|
215
|
+
if (context.hooks.hooks.length === 0) {
|
|
216
|
+
lines.push("- hooks: none");
|
|
217
|
+
}
|
|
218
|
+
for (const hook of context.hooks.hooks) {
|
|
219
|
+
lines.push(
|
|
220
|
+
`- ${hook.id}: event ${hook.event}; enabled ${hook.enabled ? "yes" : "no"}; trusted ${hook.trusted ? "yes" : "no"}; source ${hook.source}; scope ${hook.scope}; path ${hook.path}; timeout ${hook.timeoutMs}ms; output limit ${hook.outputLimitBytes} bytes; permissions ${hook.permissions.join(",") || "none"}; log ${hook.logPath ?? "-"}; last error ${hook.lastError ?? "none"}`
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
lines.push(
|
|
224
|
+
"- boundary: hook \u8BCA\u65AD\u53EA\u68C0\u67E5\u6765\u6E90\u3001\u8FB9\u754C\u548C\u53EF\u89C1\u72B6\u6001\uFF0C\u4E0D\u6267\u884C\u5B8C\u6574 hook \u811A\u672C\uFF1Bhook \u4E0D\u80FD\u7ED5\u8FC7\u6743\u9650\u7CFB\u7EDF\uFF1B\u5931\u8D25\u9694\u79BB\uFF1B\u663E\u793A\u8F93\u51FA\u6309 outputLimitBytes \u622A\u65AD\uFF0C\u5B8C\u6574\u8F93\u51FA\u53EA\u80FD\u5199 logPath\u3002"
|
|
225
|
+
);
|
|
226
|
+
return lines.join("\n");
|
|
227
|
+
}
|
|
228
|
+
function formatTrustNotice(kind, item) {
|
|
229
|
+
return [
|
|
230
|
+
`Trust notice\uFF1A\u5373\u5C06\u542F\u7528 ${kind} ${item.id}`,
|
|
231
|
+
`- source: ${item.source}`,
|
|
232
|
+
`- path: ${item.path}`,
|
|
233
|
+
`- version: ${item.version}`,
|
|
234
|
+
`- sourceUrl: ${item.lifecycle.sourceUrl ? sanitizeDiagnosticText(item.lifecycle.sourceUrl) : "-"}`,
|
|
235
|
+
`- ref/commit: ${item.lifecycle.ref ?? "-"}/${item.lifecycle.commit ?? "-"}`,
|
|
236
|
+
`- installedAt: ${item.lifecycle.installedAt ?? "unknown"}`,
|
|
237
|
+
`- permissions: ${item.permissions.join(",") || "none"}`,
|
|
238
|
+
`- trust: ${item.trusted ? "trusted" : "untrusted"}`,
|
|
239
|
+
`- may write ${item.mayWrite ? "yes" : "no"}; may execute ${item.mayExecute ? "yes" : "no"}; may network ${item.mayNetwork ? "yes" : "no"}`,
|
|
240
|
+
"- \u672A\u4FE1\u4EFB extension \u4E0D\u5F97\u5199\u6587\u4EF6\u3001\u8054\u7F51\u6216\u6267\u884C\u547D\u4EE4\uFF1B\u5B9E\u9645\u5DE5\u5177\u8C03\u7528\u4ECD\u8D70\u6743\u9650\u7BA1\u9053\u3002"
|
|
241
|
+
].join("\n");
|
|
242
|
+
}
|
|
243
|
+
function formatExtensionStatus(kind, context) {
|
|
244
|
+
const items = kind === "skills" ? context.skills.skills : context.plugins.plugins;
|
|
245
|
+
const title = kind === "skills" ? "Skills Connect Lite status" : "Plugins Connect Lite status";
|
|
246
|
+
const disabledIds = kind === "skills" ? context.skills.disabledIds : context.plugins.disabledIds;
|
|
247
|
+
const trustedIds = kind === "skills" ? context.skills.trustedIds : context.plugins.trustedIds;
|
|
248
|
+
return [
|
|
249
|
+
title,
|
|
250
|
+
"- lifecycle: add/install, validate, enable/disable, remove/update, trust notice, doctor/status",
|
|
251
|
+
`- installed: ${items.length}`,
|
|
252
|
+
`- disabled ids: ${disabledIds.join(",") || "none"}`,
|
|
253
|
+
`- trusted ids: ${trustedIds.join(",") || "none"}`,
|
|
254
|
+
...items.map((item) => {
|
|
255
|
+
const source = item.lifecycle.sourceUrl ? `source url ${sanitizeDiagnosticText(item.lifecycle.sourceUrl)}` : `local path ${redactedPath(item.lifecycle.localPath)}`;
|
|
256
|
+
return `- ${item.id}: ${item.enabled ? "enabled" : "disabled"}; trust ${item.lifecycle.trustLevel}; ${source}; ref ${item.lifecycle.ref ?? "-"}; commit ${item.lifecycle.commit ?? "-"}; permissions ${item.lifecycle.permissionSummary}; discovered ${item.lifecycle.discovered ? "yes" : "no"}; registered ${item.lifecycle.registered ? "yes" : "no"}; schema loaded ${item.lifecycle.schemaLoaded ? "yes" : "no"}; runtime ${item.lifecycle.runtimeVersion}${item.lastError ? `; load error ${truncateDisplay(item.lastError, 80)}` : ""}`;
|
|
257
|
+
}),
|
|
258
|
+
"- boundary: Git/GitHub \u5B89\u88C5\u53EA\u505A\u53D7\u63A7 clone/fetch \u548C manifest/SKILL.md \u8BFB\u53D6\uFF1B\u4E0D\u6267\u884C postinstall\u3001hook\u3001\u4ED3\u5E93\u811A\u672C\u6216\u7B2C\u4E09\u65B9\u4EE3\u7801\u3002"
|
|
259
|
+
].join("\n");
|
|
260
|
+
}
|
|
261
|
+
function parseExtensionInstallRequest(args) {
|
|
262
|
+
const [first, second, ...remaining] = args;
|
|
263
|
+
if (!first) {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
let source;
|
|
267
|
+
let locator;
|
|
268
|
+
let rest;
|
|
269
|
+
if (first === "local" || first === "git" || first === "github") {
|
|
270
|
+
if (!second) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
source = first;
|
|
274
|
+
locator = second;
|
|
275
|
+
rest = remaining;
|
|
276
|
+
} else if (first.startsWith("github:")) {
|
|
277
|
+
source = "github";
|
|
278
|
+
locator = first.slice("github:".length);
|
|
279
|
+
rest = [second, ...remaining].filter((item) => Boolean(item));
|
|
280
|
+
} else if (isGitLocator(first)) {
|
|
281
|
+
source = "git";
|
|
282
|
+
locator = first;
|
|
283
|
+
rest = [second, ...remaining].filter((item) => Boolean(item));
|
|
284
|
+
} else {
|
|
285
|
+
source = "local";
|
|
286
|
+
locator = first;
|
|
287
|
+
rest = [second, ...remaining].filter((item) => Boolean(item));
|
|
288
|
+
}
|
|
289
|
+
if (!locator) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
let scope = "project";
|
|
293
|
+
let ref;
|
|
294
|
+
let confirmNetwork = false;
|
|
295
|
+
for (let index = 0; index < rest.length; index += 1) {
|
|
296
|
+
const value = rest[index];
|
|
297
|
+
if (value === "--scope" && (rest[index + 1] === "project" || rest[index + 1] === "user")) {
|
|
298
|
+
scope = rest[index + 1];
|
|
299
|
+
index += 1;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (value === "--ref" && rest[index + 1]) {
|
|
303
|
+
ref = rest[index + 1];
|
|
304
|
+
index += 1;
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
if (value === "--confirm-network") {
|
|
308
|
+
confirmNetwork = true;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return { source, locator, scope, ref, confirmNetwork };
|
|
312
|
+
}
|
|
313
|
+
function isGitLocator(value) {
|
|
314
|
+
return /^https?:\/\//iu.test(value) || /^git@/iu.test(value) || value.endsWith(".git");
|
|
315
|
+
}
|
|
316
|
+
function formatExtensionInstallGate(kind, request, command) {
|
|
317
|
+
return [
|
|
318
|
+
`Connect Lite Start Gate\uFF1A${kind} install ${request.source}`,
|
|
319
|
+
`- source: ${sanitizeDiagnosticText(request.locator)}`,
|
|
320
|
+
`- scope: ${request.scope}`,
|
|
321
|
+
`- ref: ${request.ref ?? "default"}`,
|
|
322
|
+
"- risk: network + third-party extension metadata; install \u524D\u53EA\u8BFB\u53D6 manifest / SKILL.md / metadata\u3002",
|
|
323
|
+
"- boundary: \u4E0D\u6267\u884C\u4ED3\u5E93\u811A\u672C\u3001postinstall\u3001hook\u3001\u4F9D\u8D56\u5B89\u88C5\u6216\u4EFB\u610F\u7B2C\u4E09\u65B9\u4EE3\u7801\u3002",
|
|
324
|
+
"- recovery: \u5931\u8D25\u4E0D\u4F1A\u8986\u76D6\u5DF2\u6709\u542F\u7528\u9879\uFF1B\u53EF\u8FD0\u884C status/doctor \u67E5\u770B\u6765\u6E90\u3001\u52A0\u8F7D\u9519\u8BEF\u548C\u4E0B\u4E00\u6B65\u3002",
|
|
325
|
+
"- permission: --confirm-network \u662F exact-command Start Gate confirmation\uFF0C\u4E0D\u662F\u5B8C\u6574 permission approval\uFF1B\u540E\u7EED\u5DE5\u5177/Bash/\u8054\u7F51\u4ECD\u8D70\u6743\u9650\u7BA1\u9053\uFF0C\u786E\u8BA4\u6267\u884C\u4F1A\u5199\u5165 audit event\u3002",
|
|
326
|
+
`- exact command: ${formatExtensionInstallExactCommand(command, request)}`
|
|
327
|
+
].join("\n");
|
|
328
|
+
}
|
|
329
|
+
function formatExtensionInstallExactCommand(command, request) {
|
|
330
|
+
const parts = [command];
|
|
331
|
+
if (!/\supdate\s/u.test(command)) {
|
|
332
|
+
parts.push(request.source, request.locator);
|
|
333
|
+
if (request.scope !== "project") {
|
|
334
|
+
parts.push("--scope", request.scope);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (request.ref) {
|
|
338
|
+
parts.push("--ref", request.ref);
|
|
339
|
+
}
|
|
340
|
+
parts.push("--confirm-network");
|
|
341
|
+
return parts.join(" ");
|
|
342
|
+
}
|
|
343
|
+
async function installExtensionFromRequest(kind, request, context, onNetworkConfirmed) {
|
|
344
|
+
const targetDir = getExtensionTargetDir(kind, request.scope, context);
|
|
345
|
+
await mkdir(targetDir, { recursive: true });
|
|
346
|
+
if (request.source === "local") {
|
|
347
|
+
const localPath = resolve(context.projectPath, request.locator);
|
|
348
|
+
const result = await installExtensionFromDirectory(kind, localPath, targetDir, {
|
|
349
|
+
localPath,
|
|
350
|
+
source: "local"
|
|
351
|
+
});
|
|
352
|
+
if (result.ok) {
|
|
353
|
+
context.config = await resetExtensionTrustForInstall(kind, result.id, context.projectPath);
|
|
354
|
+
}
|
|
355
|
+
return result;
|
|
356
|
+
}
|
|
357
|
+
if (request.confirmNetwork) {
|
|
358
|
+
await onNetworkConfirmed?.(
|
|
359
|
+
`connect_lite_network_start_gate_confirmed: kind ${kind}; source ${request.source}; scope ${request.scope}; ref ${request.ref ?? "default"}; locator ${sanitizeDiagnosticText(request.locator)}; boundary exact-command_start_gate_not_full_permission_approval`
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
if (!request.confirmNetwork) {
|
|
363
|
+
return { ok: false, summary: "network confirmation required" };
|
|
364
|
+
}
|
|
365
|
+
const sourceUrl = request.source === "github" ? githubRepoToUrl(request.locator) : request.locator;
|
|
366
|
+
if (!sourceUrl) {
|
|
367
|
+
return { ok: false, summary: "GitHub repo \u683C\u5F0F\u5E94\u4E3A owner/repo\uFF0C\u6216\u4F7F\u7528\u5B8C\u6574 Git URL\u3002" };
|
|
368
|
+
}
|
|
369
|
+
const tempRoot = await mkdtemp(join(tmpdir(), "linghun-connect-lite-"));
|
|
370
|
+
try {
|
|
371
|
+
const cloneArgs = ["-c", "core.hooksPath=/dev/null", "clone", "--depth", "1"];
|
|
372
|
+
if (request.ref) {
|
|
373
|
+
cloneArgs.push("--branch", request.ref);
|
|
374
|
+
}
|
|
375
|
+
cloneArgs.push("--", sourceUrl, tempRoot);
|
|
376
|
+
const clone = await runCommandCapture("git", cloneArgs, context.projectPath, 6e4);
|
|
377
|
+
if (clone.exitCode !== 0) {
|
|
378
|
+
return { ok: false, summary: `\u53D7\u63A7 git clone/fetch \u5931\u8D25\uFF1A${clone.summary}` };
|
|
379
|
+
}
|
|
380
|
+
const commit = await runCommandCapture(
|
|
381
|
+
"git",
|
|
382
|
+
["-C", tempRoot, "rev-parse", "HEAD"],
|
|
383
|
+
context.projectPath,
|
|
384
|
+
1e4
|
|
385
|
+
);
|
|
386
|
+
const result = await installExtensionFromDirectory(kind, tempRoot, targetDir, {
|
|
387
|
+
sourceUrl,
|
|
388
|
+
ref: request.ref,
|
|
389
|
+
commit: commit.exitCode === 0 ? commit.stdout.trim().slice(0, 40) : void 0
|
|
390
|
+
});
|
|
391
|
+
if (result.ok) {
|
|
392
|
+
context.config = await resetExtensionTrustForInstall(kind, result.id, context.projectPath);
|
|
393
|
+
}
|
|
394
|
+
return result;
|
|
395
|
+
} finally {
|
|
396
|
+
await rm(tempRoot, { recursive: true, force: true });
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
function githubRepoToUrl(locator) {
|
|
400
|
+
if (/^https?:\/\//iu.test(locator) || locator.endsWith(".git")) {
|
|
401
|
+
return locator;
|
|
402
|
+
}
|
|
403
|
+
if (/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u.test(locator)) {
|
|
404
|
+
return `https://github.com/${locator}.git`;
|
|
405
|
+
}
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
function getExtensionTargetDir(kind, scope, context) {
|
|
409
|
+
if (kind === "skills") {
|
|
410
|
+
return scope === "project" ? context.skills.projectDir : context.skills.userDir;
|
|
411
|
+
}
|
|
412
|
+
return scope === "project" ? context.plugins.projectDir : context.plugins.userDir;
|
|
413
|
+
}
|
|
414
|
+
async function installExtensionFromDirectory(kind, sourcePath, targetDir, lifecycle) {
|
|
415
|
+
const manifest = await readExtensionSourceManifest(kind, sourcePath);
|
|
416
|
+
if (!manifest.ok) {
|
|
417
|
+
return manifest;
|
|
418
|
+
}
|
|
419
|
+
const id = stableId(manifest.value.id, basename(sourcePath, extname(sourcePath)));
|
|
420
|
+
const outputPath = join(targetDir, `${id}.json`);
|
|
421
|
+
const value = {
|
|
422
|
+
...manifest.value,
|
|
423
|
+
id,
|
|
424
|
+
source: lifecycle.source ?? manifest.value.source ?? "third-party",
|
|
425
|
+
lifecycle: {
|
|
426
|
+
...lifecycle,
|
|
427
|
+
installedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
428
|
+
trustLevel: "untrusted"
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
await writeFile(outputPath, `${JSON.stringify(value, null, 2)}
|
|
432
|
+
`, "utf8");
|
|
433
|
+
return {
|
|
434
|
+
ok: true,
|
|
435
|
+
id,
|
|
436
|
+
summary: `\u5DF2\u5B89\u88C5 ${kind === "skills" ? "skill" : "plugin"} manifest\uFF1A${id}`
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
async function readExtensionSourceManifest(kind, sourcePath) {
|
|
440
|
+
const resolved = resolve(sourcePath);
|
|
441
|
+
const info = await stat(resolved).catch(() => null);
|
|
442
|
+
if (!info) {
|
|
443
|
+
return { ok: false, summary: `\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A${redactedPath(resolved)}` };
|
|
444
|
+
}
|
|
445
|
+
const candidates = info.isDirectory() ? [
|
|
446
|
+
kind === "skills" ? "skill.json" : "plugin.json",
|
|
447
|
+
kind === "skills" ? "linghun-skill.json" : "linghun-plugin.json",
|
|
448
|
+
"manifest.json",
|
|
449
|
+
"metadata.json"
|
|
450
|
+
].map((file) => join(resolved, file)) : [resolved];
|
|
451
|
+
for (const candidate of candidates) {
|
|
452
|
+
const content = await readFile(candidate, "utf8").catch(() => null);
|
|
453
|
+
if (!content) {
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
try {
|
|
457
|
+
const parsed = JSON.parse(content);
|
|
458
|
+
return { ok: true, value: parsed };
|
|
459
|
+
} catch (error) {
|
|
460
|
+
return {
|
|
461
|
+
ok: false,
|
|
462
|
+
summary: `manifest JSON \u65E0\u6548\uFF1A${redactedPath(candidate)} ${formatError(error)}`
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
if (kind === "skills" && info.isDirectory()) {
|
|
467
|
+
const markdown = await readFile(join(resolved, "SKILL.md"), "utf8").catch(() => null);
|
|
468
|
+
if (markdown) {
|
|
469
|
+
const title = markdown.match(/^#\s+(.+)$/mu)?.[1]?.trim() ?? basename(resolved);
|
|
470
|
+
const summary = markdown.split(/\r?\n/u).map((line) => line.trim()).find((line) => line && !line.startsWith("#"));
|
|
471
|
+
return {
|
|
472
|
+
ok: true,
|
|
473
|
+
value: {
|
|
474
|
+
id: stableId(title, basename(resolved)),
|
|
475
|
+
name: title,
|
|
476
|
+
description: summary ?? title,
|
|
477
|
+
summary: summary ?? title,
|
|
478
|
+
triggers: [],
|
|
479
|
+
permissions: ["read"]
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return {
|
|
485
|
+
ok: false,
|
|
486
|
+
summary: "\u672A\u627E\u5230 manifest.json / metadata.json / skill.json / plugin.json\uFF1Bskill \u53EF\u63D0\u4F9B SKILL.md\u3002"
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
async function refreshExtensionState(kind, context) {
|
|
490
|
+
if (kind === "skills") {
|
|
491
|
+
context.skills = await createSkillState(context.config, context.projectPath);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
context.plugins = await createPluginState(context.config, context.projectPath);
|
|
495
|
+
context.hooks = await createHookState(context.config, context.projectPath);
|
|
496
|
+
}
|
|
497
|
+
async function removeExtension(kind, id, context) {
|
|
498
|
+
const item = kind === "skills" ? context.skills.skills.find((skill) => skill.id === id) : context.plugins.plugins.find((plugin) => plugin.id === id);
|
|
499
|
+
if (!item) {
|
|
500
|
+
return `\u672A\u627E\u5230 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}`;
|
|
501
|
+
}
|
|
502
|
+
await rm(item.path, { force: true });
|
|
503
|
+
context.config = await saveExtensionEnablement(kind, id, false, context.projectPath);
|
|
504
|
+
await refreshExtensionState(kind, context);
|
|
505
|
+
return `\u5DF2\u79FB\u9664 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}\uFF1B\u82E5\u9700\u8981\u6062\u590D\uFF0C\u8BF7\u4ECE\u539F source \u91CD\u65B0 install\u3002`;
|
|
506
|
+
}
|
|
507
|
+
async function updateExtension(kind, id, context, args, onNetworkConfirmed) {
|
|
508
|
+
const item = kind === "skills" ? context.skills.skills.find((skill) => skill.id === id) : context.plugins.plugins.find((plugin) => plugin.id === id);
|
|
509
|
+
if (!item) {
|
|
510
|
+
return `\u672A\u627E\u5230 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}`;
|
|
511
|
+
}
|
|
512
|
+
const source = item.lifecycle.sourceUrl ? "git" : "local";
|
|
513
|
+
const refIndex = args.indexOf("--ref");
|
|
514
|
+
if (refIndex !== -1) {
|
|
515
|
+
const refValue = args[refIndex + 1];
|
|
516
|
+
if (refValue === void 0 || refValue.trim().length === 0 || refValue.startsWith("--")) {
|
|
517
|
+
return "--ref \u9700\u8981\u63D0\u4F9B\u975E\u7A7A ref\uFF0C\u4F8B\u5982 --ref v1.0.0\u3002";
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
const request = {
|
|
521
|
+
source,
|
|
522
|
+
locator: item.lifecycle.sourceUrl ?? item.lifecycle.localPath ?? item.path,
|
|
523
|
+
scope: item.scope,
|
|
524
|
+
ref: refIndex === -1 ? item.lifecycle.ref : args[refIndex + 1],
|
|
525
|
+
confirmNetwork: args.includes("--confirm-network")
|
|
526
|
+
};
|
|
527
|
+
if (source === "git" && !request.confirmNetwork) {
|
|
528
|
+
return formatExtensionInstallGate(kind, request, `/${kind} update ${id}`);
|
|
529
|
+
}
|
|
530
|
+
const result = await installExtensionFromRequest(kind, request, context, onNetworkConfirmed);
|
|
531
|
+
if (result.ok) {
|
|
532
|
+
await refreshExtensionState(kind, context);
|
|
533
|
+
return `\u5DF2\u66F4\u65B0 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}\uFF1B${result.summary}`;
|
|
534
|
+
}
|
|
535
|
+
return result.summary;
|
|
536
|
+
}
|
|
537
|
+
function validateExtensionItems(kind, context, id) {
|
|
538
|
+
const items = kind === "skills" ? context.skills.skills : context.plugins.plugins;
|
|
539
|
+
const selected = id ? items.filter((item) => item.id === id) : items;
|
|
540
|
+
if (selected.length === 0) {
|
|
541
|
+
return id ? `\u672A\u627E\u5230 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}` : `\u6CA1\u6709\u5DF2\u53D1\u73B0\u7684 ${kind} manifest\u3002`;
|
|
542
|
+
}
|
|
543
|
+
return [
|
|
544
|
+
`${kind === "skills" ? "Skills" : "Plugins"} validate`,
|
|
545
|
+
...selected.map((item) => {
|
|
546
|
+
const problems = [];
|
|
547
|
+
if (!item.lifecycle.discovered) problems.push("not discovered");
|
|
548
|
+
if (!item.lifecycle.registered) problems.push("not registered");
|
|
549
|
+
if (!item.trusted) problems.push("untrusted");
|
|
550
|
+
if (!item.lifecycle.schemaLoaded) problems.push("schema not loaded");
|
|
551
|
+
if (item.lifecycle.runtimeVersion !== "compatible") problems.push("runtime incompatible");
|
|
552
|
+
if (item.lastError) problems.push("load error");
|
|
553
|
+
return `- ${item.id}: ${problems.length === 0 ? "ok" : problems.join("; ")}; next ${problems.length === 0 ? "enable/use explicit command" : `run /${kind} doctor, then validate/enable after fixing`}`;
|
|
554
|
+
})
|
|
555
|
+
].join("\n");
|
|
556
|
+
}
|
|
557
|
+
function validateExtensionContributionExecution(kind, id, contribution, context) {
|
|
558
|
+
const item = kind === "skills" ? context.skills.skills.find((skill) => skill.id === id) : context.plugins.plugins.find((plugin2) => plugin2.id === id);
|
|
559
|
+
if (!item) {
|
|
560
|
+
return {
|
|
561
|
+
ok: false,
|
|
562
|
+
summary: `Connect Lite guard: ${kind}:${id} \u672A\u53D1\u73B0\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7\u5148 install/validate\u3002`
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
if (!item.enabled || !item.trusted) {
|
|
566
|
+
return {
|
|
567
|
+
ok: false,
|
|
568
|
+
summary: `Connect Lite guard: ${kind}:${id} \u672A\u542F\u7528\u6216\u672A\u4FE1\u4EFB\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7\u5148 validate/enable/doctor\u3002`
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
if (!item.lifecycle.discovered || !item.lifecycle.registered || !item.lifecycle.schemaLoaded) {
|
|
572
|
+
return {
|
|
573
|
+
ok: false,
|
|
574
|
+
summary: `Connect Lite guard: ${kind}:${id} \u5C1A\u672A\u5B8C\u6210 discover/register/schema load\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7\u5148 validate/doctor\u3002`
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
if (item.lifecycle.runtimeVersion !== "compatible") {
|
|
578
|
+
return {
|
|
579
|
+
ok: false,
|
|
580
|
+
summary: `Connect Lite guard: ${kind}:${id} runtime version ${item.lifecycle.runtimeVersion} \u4E0D\u517C\u5BB9\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7 update \u6216 disable\u3002`
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
if (kind === "skills") {
|
|
584
|
+
const skill = item;
|
|
585
|
+
if (!skill.triggers.includes(contribution)) {
|
|
586
|
+
return {
|
|
587
|
+
ok: false,
|
|
588
|
+
summary: `Connect Lite guard: skill:${id} \u672A\u6CE8\u518C\u89E6\u53D1\u9879 ${contribution}\uFF0C\u5DF2\u62D2\u7EDD\u76F2\u6267\u884C\u3002`
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
return { ok: true };
|
|
592
|
+
}
|
|
593
|
+
const plugin = item;
|
|
594
|
+
const contributions = Object.values(plugin.contributions).flat();
|
|
595
|
+
if (!contributions.includes(contribution)) {
|
|
596
|
+
return {
|
|
597
|
+
ok: false,
|
|
598
|
+
summary: `Connect Lite guard: plugin:${id} \u672A\u6CE8\u518C\u8D21\u732E\u9879 ${contribution}\uFF0C\u5DF2\u62D2\u7EDD\u76F2\u6267\u884C\u3002`
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
return { ok: true };
|
|
602
|
+
}
|
|
603
|
+
function createExtensionFreshnessSummaryForDoctor(context) {
|
|
604
|
+
return {
|
|
605
|
+
skills: context.skills.skills.map((skill) => ({
|
|
606
|
+
id: skill.id,
|
|
607
|
+
enabled: skill.enabled,
|
|
608
|
+
source: skill.source,
|
|
609
|
+
trusted: skill.trusted,
|
|
610
|
+
triggers: skill.triggers,
|
|
611
|
+
summary: skill.summary,
|
|
612
|
+
permissions: skill.permissions
|
|
613
|
+
})).sort((a, b) => a.id.localeCompare(b.id)),
|
|
614
|
+
workflows: context.workflows.templates.map((workflow) => ({
|
|
615
|
+
id: workflow.id,
|
|
616
|
+
risk: workflow.risk,
|
|
617
|
+
writesFiles: workflow.writesFiles,
|
|
618
|
+
validation: workflow.recommendedValidation
|
|
619
|
+
})).sort((a, b) => a.id.localeCompare(b.id)),
|
|
620
|
+
hooks: context.hooks.hooks.map((hook) => ({
|
|
621
|
+
id: hook.id,
|
|
622
|
+
event: hook.event,
|
|
623
|
+
enabled: hook.enabled,
|
|
624
|
+
trusted: hook.trusted,
|
|
625
|
+
permissions: hook.permissions
|
|
626
|
+
})).sort((a, b) => `${a.event}:${a.id}`.localeCompare(`${b.event}:${b.id}`)),
|
|
627
|
+
plugins: context.plugins.plugins.map((plugin) => ({
|
|
628
|
+
id: plugin.id,
|
|
629
|
+
enabled: plugin.enabled,
|
|
630
|
+
source: plugin.source,
|
|
631
|
+
trusted: plugin.trusted,
|
|
632
|
+
permissions: plugin.permissions,
|
|
633
|
+
contributions: plugin.contributions
|
|
634
|
+
})).sort((a, b) => a.id.localeCompare(b.id))
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
export {
|
|
639
|
+
formatConfigOverview,
|
|
640
|
+
formatFeaturePolicy,
|
|
641
|
+
formatSkills,
|
|
642
|
+
createSkillEvolutionCandidate,
|
|
643
|
+
formatWorkflows,
|
|
644
|
+
formatPlugins,
|
|
645
|
+
formatPluginsDoctor,
|
|
646
|
+
formatHooksDoctor,
|
|
647
|
+
formatTrustNotice,
|
|
648
|
+
formatExtensionStatus,
|
|
649
|
+
parseExtensionInstallRequest,
|
|
650
|
+
isGitLocator,
|
|
651
|
+
formatExtensionInstallGate,
|
|
652
|
+
formatExtensionInstallExactCommand,
|
|
653
|
+
installExtensionFromRequest,
|
|
654
|
+
githubRepoToUrl,
|
|
655
|
+
getExtensionTargetDir,
|
|
656
|
+
installExtensionFromDirectory,
|
|
657
|
+
readExtensionSourceManifest,
|
|
658
|
+
refreshExtensionState,
|
|
659
|
+
removeExtension,
|
|
660
|
+
updateExtension,
|
|
661
|
+
validateExtensionItems,
|
|
662
|
+
validateExtensionContributionExecution
|
|
663
|
+
};
|