@akira-tl/forgerelay 0.10.3 → 0.10.5

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +8 -8
  3. package/capabilities/shell-processes/GUIDE.md +3 -1
  4. package/dist/cli/setup-support.js +0 -15
  5. package/dist/cli/shell/setup.js +4 -1
  6. package/dist/cli.js +11 -3
  7. package/dist/mcp/server/workspace/runtime/workspace-open-presentation.js +19 -6
  8. package/dist/mcp/server/workspace/runtime/workspace-open-schema.js +26 -0
  9. package/dist/mcp/server/workspace/runtime/workspace-open.js +7 -0
  10. package/dist/mcp/server-instructions.js +23 -1
  11. package/dist/server.js +32 -12
  12. package/dist/ui/.vite/manifest.json +275 -275
  13. package/dist/ui/activity-panel-app.html +1 -1
  14. package/dist/ui/assets/{activity-panel-app-BkODhDLg.js → activity-panel-app-XlqSanXT.js} +1 -1
  15. package/dist/ui/assets/{angular-html-DjuELMdF.js → angular-html-tB9EchbM.js} +1 -1
  16. package/dist/ui/assets/{angular-ts-2EXVZIIX.js → angular-ts-BearSZDb.js} +1 -1
  17. package/dist/ui/assets/{apl-Bb4IeT5V.js → apl-CYQtr-y6.js} +1 -1
  18. package/dist/ui/assets/{astro-Bjavu3nT.js → astro-DDzqKIjK.js} +1 -1
  19. package/dist/ui/assets/{blade-DKW2uHZo.js → blade-DkwEyHvQ.js} +1 -1
  20. package/dist/ui/assets/{c-oLeHmzbj.js → c-Dv-N5hjn.js} +1 -1
  21. package/dist/ui/assets/{cobol-CcqFMr5T.js → cobol-xBn5JxHE.js} +1 -1
  22. package/dist/ui/assets/{coffee-BA20zqRF.js → coffee-BaXXvoJw.js} +1 -1
  23. package/dist/ui/assets/{cpp-D750WmDa.js → cpp-C3unXX-3.js} +1 -1
  24. package/dist/ui/assets/{crystal-Cv5I6OMI.js → crystal-DjOpXVU1.js} +1 -1
  25. package/dist/ui/assets/{css-CjPPWPeH.js → css-8Xr4kNNH.js} +1 -1
  26. package/dist/ui/assets/{edge-aYRuudEZ.js → edge-DNaRizoR.js} +1 -1
  27. package/dist/ui/assets/{elixir-ChLitmz7.js → elixir-CwBMwZmy.js} +1 -1
  28. package/dist/ui/assets/{elm-Fs7L7u36.js → elm-gOUD2CW3.js} +1 -1
  29. package/dist/ui/assets/{erb-B-qXHxN1.js → erb-BcR-fjUp.js} +1 -1
  30. package/dist/ui/assets/{git-rebase-DOVN5OEg.js → git-rebase-BAQPKHF6.js} +1 -1
  31. package/dist/ui/assets/{glimmer-js-BFt_vCTW.js → glimmer-js-P_wOfSz_.js} +1 -1
  32. package/dist/ui/assets/{glimmer-ts-ufCHlR6C.js → glimmer-ts-B44aY1fZ.js} +1 -1
  33. package/dist/ui/assets/{glsl-Ex4JXGuC.js → glsl-BvCQg9MI.js} +1 -1
  34. package/dist/ui/assets/{graphql-pQPXtBk5.js → graphql-C9S90gn_.js} +1 -1
  35. package/dist/ui/assets/{hack-B5hDguhd.js → hack-ddU2k0nt.js} +1 -1
  36. package/dist/ui/assets/{haml-BrNeI29U.js → haml-Bb1w9rMG.js} +1 -1
  37. package/dist/ui/assets/{handlebars-DCqTsL9-.js → handlebars-BpzaUpmz.js} +1 -1
  38. package/dist/ui/assets/{heavy-payload-DsmmHgvt.js → heavy-payload-CJKqi8Ac.js} +3 -3
  39. package/dist/ui/assets/{html-D8k0CC9V.js → html-dUOs5pA9.js} +1 -1
  40. package/dist/ui/assets/{html-derivative-CC8flWmC.js → html-derivative-B2beVdmA.js} +1 -1
  41. package/dist/ui/assets/{http-BYnWqNep.js → http-iEskZy8U.js} +1 -1
  42. package/dist/ui/assets/{hurl-BND-z85s.js → hurl-BuUsLSKv.js} +1 -1
  43. package/dist/ui/assets/{java-Dug0oB9T.js → java-BFZCrORY.js} +1 -1
  44. package/dist/ui/assets/{javascript-oDJ7WITC.js → javascript-DaIQ0Zqj.js} +1 -1
  45. package/dist/ui/assets/{jinja-Cv0t_F1U.js → jinja-CRpkWwrH.js} +1 -1
  46. package/dist/ui/assets/{jison-Car3MF55.js → jison-BYfSnuHj.js} +1 -1
  47. package/dist/ui/assets/{json-CEViCsf4.js → json-BQC_Yp48.js} +1 -1
  48. package/dist/ui/assets/{jsx-BfZ0zgSH.js → jsx-Dd-CJRf9.js} +1 -1
  49. package/dist/ui/assets/{julia-CmX0b3Tn.js → julia-B8Rxy7vD.js} +1 -1
  50. package/dist/ui/assets/{just-BuugLCVk.js → just-DzhIWpFP.js} +1 -1
  51. package/dist/ui/assets/{latex-FpTXqO03.js → latex-CUNjUUL-.js} +1 -1
  52. package/dist/ui/assets/{liquid-B37OzUFu.js → liquid-hUg7nC61.js} +1 -1
  53. package/dist/ui/assets/{lua-BHjcb8oq.js → lua-BoZTiL2I.js} +1 -1
  54. package/dist/ui/assets/{marko-CApj_fsH.js → marko-CQmIkwMF.js} +1 -1
  55. package/dist/ui/assets/{mdc-Ed5vQWq8.js → mdc-CB-6dHYa.js} +1 -1
  56. package/dist/ui/assets/{nginx-u_rVEBox.js → nginx-CQORo_Bt.js} +1 -1
  57. package/dist/ui/assets/{nim-Ba9EdchT.js → nim-BNwBNzdn.js} +1 -1
  58. package/dist/ui/assets/{perl-BpU_6Wvz.js → perl-Cnz14fAJ.js} +1 -1
  59. package/dist/ui/assets/{php-bKabofky.js → php-YywDo63b.js} +1 -1
  60. package/dist/ui/assets/{pug-C_aLNkqe.js → pug-BwbJp4cM.js} +1 -1
  61. package/dist/ui/assets/{qml-D9VisnRy.js → qml-D2DY6dMH.js} +1 -1
  62. package/dist/ui/assets/{r-CYqB1sLx.js → r-B5nYsy-M.js} +1 -1
  63. package/dist/ui/assets/{razor-DNJKI8Rs.js → razor-pMTG7k41.js} +1 -1
  64. package/dist/ui/assets/{regexp-DHrTHXkz.js → regexp-oP0lbks_.js} +1 -1
  65. package/dist/ui/assets/{rst-CbNdSFHv.js → rst-CO_ndDm4.js} +1 -1
  66. package/dist/ui/assets/{ruby-FyKG-pkF.js → ruby-xzRn9gTh.js} +1 -1
  67. package/dist/ui/assets/{sas-BbSPDl3X.js → sas-CBdtFKLA.js} +1 -1
  68. package/dist/ui/assets/{scss-2nX9g6gD.js → scss-CEqgKQNf.js} +1 -1
  69. package/dist/ui/assets/{shellscript-CmON6x2x.js → shellscript-DzJJiWQC.js} +1 -1
  70. package/dist/ui/assets/{shellsession-DtqIGlAX.js → shellsession-BaZnm5rZ.js} +1 -1
  71. package/dist/ui/assets/{soy-BzUJMmJT.js → soy-IouG3xdB.js} +1 -1
  72. package/dist/ui/assets/{sql-CgVcFZmb.js → sql-DC2rdTzV.js} +1 -1
  73. package/dist/ui/assets/{stata-CNitlMot.js → stata-dgbkIZHP.js} +1 -1
  74. package/dist/ui/assets/{surrealql-BA8-xsRZ.js → surrealql-CBROnw_p.js} +1 -1
  75. package/dist/ui/assets/{svelte-El02yAxv.js → svelte-6r6BpX4-.js} +1 -1
  76. package/dist/ui/assets/{templ-DeUQ84aR.js → templ-BKD_PsbL.js} +1 -1
  77. package/dist/ui/assets/{tex-Cu-FqpPS.js → tex-CKY1bwHb.js} +1 -1
  78. package/dist/ui/assets/{ts-tags-X42N6TGA.js → ts-tags-BiYP5N_C.js} +1 -1
  79. package/dist/ui/assets/{tsx-C1aPp9rY.js → tsx-D2OMiPNF.js} +1 -1
  80. package/dist/ui/assets/{twig-Cj1Q4SQc.js → twig-BTe1oPFW.js} +1 -1
  81. package/dist/ui/assets/{typescript-Du9lVt1G.js → typescript-BGIABksB.js} +1 -1
  82. package/dist/ui/assets/{vue-_uMGbFv8.js → vue-CT0IiySh.js} +1 -1
  83. package/dist/ui/assets/{vue-html-D61naG-Q.js → vue-html-B-tXcbat.js} +1 -1
  84. package/dist/ui/assets/{vue-vine-CkFae4yV.js → vue-vine-C5ZyDCrs.js} +1 -1
  85. package/dist/ui/assets/{xml-Cbwsc6ws.js → xml-CfeBNlMP.js} +1 -1
  86. package/dist/ui/assets/{xsl-NyBx72XB.js → xsl-DvDSndNI.js} +1 -1
  87. package/dist/ui/assets/{yaml-Cgb6Uq9u.js → yaml-umbj2r1g.js} +1 -1
  88. package/dist/workspaces/bootstrap.js +0 -1
  89. package/dist/workspaces/presentation/workspace-presentation.js +22 -0
  90. package/dist/workspaces/relay/tests/test-support.js +24 -2
  91. package/dist/workspaces/relay/workspace-relay.js +6 -0
  92. package/dist/workspaces/resources/resource-monitor.js +4 -5
  93. package/dist/workspaces/resources/skills.js +0 -1
  94. package/docs/gotchas.md +1 -1
  95. package/docs/roadmap.md +3 -2
  96. package/package.json +2 -1
  97. package/scripts/ci/windows-product-acceptance.mjs +321 -0
@@ -1 +1 @@
1
- import{c as e}from"./activity-panel-app-BkODhDLg.js";import{t}from"./java-Dug0oB9T.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
1
+ import{c as e}from"./activity-panel-app-XlqSanXT.js";import{t}from"./java-BFZCrORY.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
@@ -1 +1 @@
1
- import{t as e}from"./xml-Cbwsc6ws.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
1
+ import{t as e}from"./xml-CfeBNlMP.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
@@ -1 +1 @@
1
- import{c as e}from"./activity-panel-app-BkODhDLg.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
1
+ import{c as e}from"./activity-panel-app-XlqSanXT.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
@@ -34,7 +34,6 @@ export function bootstrapContextFingerprints(workspace, agentsFiles, availableAg
34
34
  name: skill.name,
35
35
  description: skill.description,
36
36
  filePath: resolve(skill.filePath),
37
- disableModelInvocation: skill.disableModelInvocation ?? false,
38
37
  }))
39
38
  .sort((left, right) => left.name.localeCompare(right.name) || left.filePath.localeCompare(right.filePath)),
40
39
  skillDiagnostics: workspace.skillDiagnostics,
@@ -20,6 +20,9 @@ export function compactWorkspacePresentation(card) {
20
20
  if (value !== undefined)
21
21
  presentation[field] = value;
22
22
  }
23
+ const executionContext = projectExecutionContext(card.executionContext);
24
+ if (executionContext)
25
+ presentation.executionContext = executionContext;
23
26
  assignProjectedArray(presentation, "agentsFiles", card.agentsFiles, (entry) => pickFields(entry, ["path"]));
24
27
  assignProjectedArray(presentation, "availableAgentsFiles", card.availableAgentsFiles, (entry) => pickFields(entry, ["path"]));
25
28
  assignProjectedArray(presentation, "workspaceInstructions", card.workspaceInstructions, (entry) => pickFields(entry, ["path", "status"]));
@@ -34,6 +37,25 @@ export function compactWorkspacePresentation(card) {
34
37
  presentation.presentationRevision = presentationRevision(card, presentation);
35
38
  return presentation;
36
39
  }
40
+ function projectExecutionContext(value) {
41
+ if (!value || typeof value !== "object" || Array.isArray(value))
42
+ return undefined;
43
+ const context = value;
44
+ const projected = pickFields(context, ["platform"]);
45
+ const commandShellRuntime = context.commandShellRuntime;
46
+ if (commandShellRuntime && typeof commandShellRuntime === "object" && !Array.isArray(commandShellRuntime)) {
47
+ projected.commandShellRuntime = pickFields(commandShellRuntime, ["family", "executable", "source", "version"]);
48
+ }
49
+ const runtimePrivilege = context.runtimePrivilege;
50
+ if (runtimePrivilege && typeof runtimePrivilege === "object" && !Array.isArray(runtimePrivilege)) {
51
+ projected.runtimePrivilege = pickFields(runtimePrivilege, ["level"]);
52
+ }
53
+ const shellInstructions = context.shellInstructions;
54
+ if (shellInstructions && typeof shellInstructions === "object" && !Array.isArray(shellInstructions)) {
55
+ projected.shellInstructions = pickFields(shellInstructions, ["enabled", "path", "status"]);
56
+ }
57
+ return Object.keys(projected).length > 0 ? projected : undefined;
58
+ }
37
59
  function assignProjectedArray(target, field, value, project) {
38
60
  if (!Array.isArray(value))
39
61
  return;
@@ -2,7 +2,7 @@ import assert from "node:assert/strict";
2
2
  import { execFileSync } from "node:child_process";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
4
  import { createRequire, syncBuiltinESMExports } from "node:module";
5
- import { join } from "node:path";
5
+ import { dirname, join } from "node:path";
6
6
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
7
7
  import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
8
8
  import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js";
@@ -12,6 +12,7 @@ import { HostTurnStore } from "../../../activity/history/host-turn-store.js";
12
12
  import { ActivityLifecycle } from "../../../activity/runtime/lifecycle.js";
13
13
  import { ActivityQueryService } from "../../../activity/history/query-service.js";
14
14
  import { loadConfig } from "../../../runtime/config/config.js";
15
+ import { shellInstructionPath } from "../../../runtime/instructions/shell-instructions.js";
15
16
  import { CodeIntelligenceManager } from "../../../lsp/runtime/manager.js";
16
17
  import { createReviewCheckpointManager } from "../../review/review-checkpoints.js";
17
18
  import { ProcessManager } from "../../../mcp/process/process-sessions.js";
@@ -29,6 +30,24 @@ export async function setupGitRepository(root) {
29
30
  execFileSync("git", ["add", "README.md"], { cwd: root });
30
31
  execFileSync("git", ["commit", "-m", "TEST: (relay) initialize worktree fixture"], { cwd: root, stdio: "ignore" });
31
32
  }
33
+ async function applyTestExecutionRuntime(config, configDir, executionRuntime) {
34
+ if (!executionRuntime)
35
+ return;
36
+ config.commandShellRuntime = {
37
+ ...executionRuntime.commandShellRuntime,
38
+ capabilities: [...executionRuntime.commandShellRuntime.capabilities],
39
+ };
40
+ config.runtimePrivilege = executionRuntime.runtimePrivilege ?? {
41
+ level: "standard",
42
+ platform: executionRuntime.platform,
43
+ source: "unsupported",
44
+ };
45
+ config.shellInstructionPath = shellInstructionPath(configDir, config.commandShellRuntime.family);
46
+ if (config.shellInstructionPath && executionRuntime.shellInstructionContent !== undefined) {
47
+ await mkdir(dirname(config.shellInstructionPath), { recursive: true });
48
+ await writeFile(config.shellInstructionPath, executionRuntime.shellInstructionContent);
49
+ }
50
+ }
32
51
  export async function startForge(t, options) {
33
52
  const configDir = options.existingConfigDir ?? join(options.root, "config");
34
53
  const stateDir = join(options.root, "state");
@@ -57,7 +76,9 @@ export async function startForge(t, options) {
57
76
  FORGERELAY_WIDGETS: "off",
58
77
  FORGERELAY_SKILLS: "0",
59
78
  };
60
- const running = createServer(loadConfig(env));
79
+ const config = loadConfig(env);
80
+ await applyTestExecutionRuntime(config, configDir, options.executionRuntime);
81
+ const running = createServer(config);
61
82
  const httpServer = running.app.listen(0, "127.0.0.1");
62
83
  await new Promise((resolve) => httpServer.once("listening", resolve));
63
84
  const port = httpServer.address().port;
@@ -92,6 +113,7 @@ export async function startGatewayClient(t, options) {
92
113
  FORGERELAY_WIDGETS: "off",
93
114
  FORGERELAY_SKILLS: "0",
94
115
  });
116
+ await applyTestExecutionRuntime(config, options.configDir, options.executionRuntime);
95
117
  const workspaceStore = new SqliteWorkspaceStore(stateDir);
96
118
  const workspaces = new WorkspaceRegistry(config, workspaceStore);
97
119
  const auditStore = new ActivityAuditStore(stateDir);
@@ -136,6 +136,12 @@ export class RemoteWorkspaceRelay {
136
136
  ...(structured?.capabilityCatalog !== undefined
137
137
  ? { capabilityCatalog: remapContext(structured.capabilityCatalog) }
138
138
  : {}),
139
+ ...(structured?.executionContext !== undefined
140
+ ? { executionContext: remapContext(structured.executionContext) }
141
+ : {}),
142
+ ...(structured?.workspaceInstructions !== undefined
143
+ ? { workspaceInstructions: remapContext(structured.workspaceInstructions) }
144
+ : {}),
139
145
  ...(structured?.capabilityGuides !== undefined
140
146
  ? { capabilityGuides: remapContext(structured.capabilityGuides) }
141
147
  : {}),
@@ -348,17 +348,16 @@ function formatSkillMetadataDelta(change) {
348
348
  if (JSON.stringify(oldSummary) === JSON.stringify(newSummary))
349
349
  return undefined;
350
350
  if (!oldSummary) {
351
- return `Skill metadata added: ${change.displayPath}\n+ name: ${newSummary?.name ?? change.skillName ?? "unknown"}\n+ description: ${newSummary?.description ?? ""}\n+ disable-model-invocation: ${newSummary?.disableModelInvocation === true}`;
351
+ return `Skill metadata added: ${change.displayPath}\n+ name: ${newSummary?.name ?? change.skillName ?? "unknown"}\n+ description: ${newSummary?.description ?? ""}`;
352
352
  }
353
353
  if (!newSummary)
354
354
  return `Skill removed: ${change.displayPath}`;
355
355
  const lines = [`Skill metadata delta: ${change.displayPath}`];
356
- for (const field of ["name", "description", "disableModelInvocation"]) {
356
+ for (const field of ["name", "description"]) {
357
357
  if (oldSummary[field] === newSummary[field])
358
358
  continue;
359
- const label = field === "disableModelInvocation" ? "disable-model-invocation" : field;
360
- lines.push(`- ${label}: ${String(oldSummary[field])}`);
361
- lines.push(`+ ${label}: ${String(newSummary[field])}`);
359
+ lines.push(`- ${field}: ${String(oldSummary[field])}`);
360
+ lines.push(`+ ${field}: ${String(newSummary[field])}`);
362
361
  }
363
362
  return lines.join("\n");
364
363
  }
@@ -173,7 +173,6 @@ function skillSummaryFromFrontmatter(frontmatter, filePath) {
173
173
  return {
174
174
  name: normalizedSkillName(frontmatter.name, filePath),
175
175
  description: typeof frontmatter.description === "string" ? frontmatter.description.trim() : "",
176
- disableModelInvocation: frontmatter["disable-model-invocation"] === true,
177
176
  };
178
177
  }
179
178
  function parseSkillFrontmatter(content) {
package/docs/gotchas.md CHANGED
@@ -162,7 +162,7 @@ ForgeRelay does not intentionally leave the source checkout in a merge-conflict
162
162
 
163
163
  ## Windows shell commands fail
164
164
 
165
- ForgeRelay supports PowerShell 7 (`pwsh`) and Windows PowerShell 5.1 (`powershell.exe`) as native Windows Command Shell Runtimes. Agent commands and Hooks share the selected runtime and PowerShell execution does not load the user profile. `cmd.exe` is also a first-class Agent/Hook runtime: use `%NAME%`, `%ERRORLEVEL%`, cmd quoting/chaining/redirection, and `^` escaping rather than silently substituting PowerShell or Bash syntax. cmd PTY/ConPTY and packaged `.cmd` launcher lifecycle coverage is completed separately. Git Bash, WSL, MSYS2, and Cygwin Bash remain supported compatibility paths.
165
+ ForgeRelay supports PowerShell 7 (`pwsh`), Windows PowerShell 5.1 (`powershell.exe`), and `cmd.exe` as native Windows Command Shell Runtimes across Agent commands, Hooks, pipe/PTY lifecycle, packaged launchers, and editable shell Instructions. PowerShell execution does not load the user profile; cmd commands use `%NAME%`, `%ERRORLEVEL%`, cmd quoting/chaining/redirection, and `^` escaping rather than silently substituting PowerShell or Bash syntax. The public Core tool name remains `bash` only for Host-contract compatibility, so follow the Command Shell Runtime reported by `open_workspace.executionContext` or `forgerelay doctor`. Git Bash, WSL, MSYS2, and Cygwin Bash remain supported compatibility paths.
166
166
 
167
167
  Check the selected runtime with:
168
168
 
package/docs/roadmap.md CHANGED
@@ -349,8 +349,9 @@ results. Development acceptance remains on isolated 7677/7678 instances and neve
349
349
  the normal 7676 installation.
350
350
 
351
351
  Later refinements may add `.worktreeinclude`-style explicit copying of selected
352
- Git-ignored files. Native PowerShell/`cmd.exe` shell execution is also a separate
353
- compatibility decision rather than part of the 0.9 recovery/history line.
352
+ Git-ignored files. Native Windows Command Shell Runtime support was intentionally
353
+ kept out of the 0.9 recovery/history line and was subsequently delivered across
354
+ the 0.10.x P3 work for PowerShell 7, Windows PowerShell 5.1, and `cmd.exe`.
354
355
 
355
356
  ## Workspace Task Lists
356
357
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akira-tl/forgerelay",
3
- "version": "0.10.3",
3
+ "version": "0.10.5",
4
4
  "description": "Local development control plane for MCP coding agents.",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/Akira-TL/forgerelay#readme",
@@ -45,6 +45,7 @@
45
45
  "pwsh:accept": "node scripts/ci/pwsh-acceptance.mjs",
46
46
  "powershell51:accept": "node scripts/ci/powershell51-acceptance.mjs",
47
47
  "cmd:accept": "node scripts/ci/cmd-acceptance.mjs",
48
+ "windows:product-accept": "node scripts/ci/windows-product-acceptance.mjs",
48
49
  "wiki:check": "node scripts/wiki/sync.mjs check",
49
50
  "wiki:publish": "node scripts/wiki/sync.mjs publish",
50
51
  "architecture:check": "node scripts/ci/architecture.mjs",
@@ -0,0 +1,321 @@
1
+ #!/usr/bin/env node
2
+
3
+ import assert from "node:assert/strict";
4
+ import { existsSync } from "node:fs";
5
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import { tmpdir } from "node:os";
7
+ import { join } from "node:path";
8
+ import { pathToFileURL } from "node:url";
9
+ import { spawnSync } from "node:child_process";
10
+
11
+ if (process.platform !== "win32") {
12
+ console.log("Windows packaged product acceptance skipped outside Windows.");
13
+ process.exit(0);
14
+ }
15
+
16
+ const npmCli = process.env.npm_execpath;
17
+ if (!npmCli) throw new Error("Windows product acceptance must run through npm so npm_execpath is available");
18
+
19
+ const root = await import("node:fs/promises").then(({ mkdtemp }) =>
20
+ mkdtemp(join(tmpdir(), "forgerelay-windows-product-acceptance-"))
21
+ );
22
+
23
+ try {
24
+ const artifactDir = join(root, "artifact");
25
+ const prefix = join(root, "prefix");
26
+ const projectRoot = join(root, "project");
27
+ await Promise.all([
28
+ mkdir(artifactDir, { recursive: true }),
29
+ mkdir(prefix, { recursive: true }),
30
+ mkdir(projectRoot, { recursive: true }),
31
+ ]);
32
+ await writeFile(join(projectRoot, "README.md"), "Windows product acceptance workspace\n", "utf8");
33
+
34
+ const packed = runNpm(["pack", "--json", "--pack-destination", artifactDir]);
35
+ const packResult = JSON.parse(packed.stdout);
36
+ const filename = packResult?.[0]?.filename;
37
+ if (!filename) throw new Error(`npm pack did not report a package filename: ${packed.stdout}`);
38
+ const tarball = join(artifactDir, filename);
39
+ assert.ok(existsSync(tarball), `packed artifact is missing: ${tarball}`);
40
+
41
+ runNpm(["install", "--global", "--prefix", prefix, tarball]);
42
+ const shim = join(prefix, "forgerelay.cmd");
43
+ assert.ok(existsSync(shim), `npm did not create the Windows launcher shim: ${shim}`);
44
+
45
+ const installedRoot = join(prefix, "node_modules", "@akira-tl", "forgerelay");
46
+ assert.ok(existsSync(join(installedRoot, "dist", "cli.js")), `installed package is missing dist/cli.js: ${installedRoot}`);
47
+ const workspaceProbe = join(root, "packaged-workspace-probe.mjs");
48
+ await writeFile(workspaceProbe, packagedWorkspaceProbe(), "utf8");
49
+
50
+ const pwsh = resolveWhere("pwsh.exe", "PowerShell 7");
51
+ const powershell = resolveWhere("powershell.exe", "Windows PowerShell 5.1");
52
+ const cmd = process.env.ComSpec ?? process.env.COMSPEC;
53
+ assert.ok(cmd && existsSync(cmd), `Windows product acceptance requires a valid ComSpec; got ${cmd ?? "unset"}.`);
54
+
55
+ const runtimes = [
56
+ { family: "pwsh", executable: pwsh, doctorIdentity: /Command shell: pwsh / },
57
+ { family: "powershell", executable: powershell, doctorIdentity: /Command shell: powershell 5\.1\./ },
58
+ { family: "cmd", executable: cmd, doctorIdentity: /Command shell: cmd / },
59
+ ];
60
+
61
+ for (const runtime of runtimes) {
62
+ await exercisePackagedRuntime({
63
+ ...runtime,
64
+ root,
65
+ projectRoot,
66
+ shim,
67
+ installedRoot,
68
+ workspaceProbe,
69
+ });
70
+ }
71
+
72
+ await exercisePackagedElevationContract(installedRoot, { root, projectRoot, shim, cmd });
73
+ console.log("Windows packaged product acceptance passed for pwsh, Windows PowerShell 5.1, cmd.exe, editable Instructions, and elevated startup protection.");
74
+ } finally {
75
+ await rm(root, { recursive: true, force: true });
76
+ }
77
+
78
+ async function exercisePackagedRuntime({ family, executable, doctorIdentity, root, projectRoot, shim, installedRoot, workspaceProbe }) {
79
+ const configDir = join(root, `config-${family}`);
80
+ const stateDir = join(root, `state-${family}`);
81
+ const instructionsDir = join(configDir, "instructions");
82
+ const instructionPath = join(instructionsDir, `${family}.md`);
83
+ const instructionMarker = `WINDOWS-PACKAGED-${family.toUpperCase()}-EDITABLE-INSTRUCTION`;
84
+ await Promise.all([
85
+ mkdir(configDir, { recursive: true }),
86
+ mkdir(stateDir, { recursive: true }),
87
+ mkdir(instructionsDir, { recursive: true }),
88
+ ]);
89
+ await writeFile(
90
+ instructionPath,
91
+ `# User-edited ${family} Instructions\n\n${instructionMarker}\n`,
92
+ "utf8",
93
+ );
94
+ await writeFile(
95
+ join(configDir, "config.json"),
96
+ JSON.stringify({
97
+ host: "127.0.0.1",
98
+ port: 7678,
99
+ allowedRoots: [projectRoot],
100
+ stateDir,
101
+ worktreeRoot: join(root, `worktrees-${family}`),
102
+ commandShell: {
103
+ mode: "pinned",
104
+ family,
105
+ executable,
106
+ },
107
+ shellInstructions: true,
108
+ skillsEnabled: false,
109
+ }, null, 2),
110
+ "utf8",
111
+ );
112
+
113
+ const env = cleanAcceptanceEnv(configDir);
114
+ const doctor = runPackagedShim(shim, ["doctor"], env);
115
+ assert.match(doctor.stdout, doctorIdentity);
116
+ assert.match(doctor.stdout, /Command shell source: explicit/);
117
+ assert.match(doctor.stdout, /Command shell compatibility: /);
118
+ assert.match(doctor.stdout, /Shell Instructions: enabled \(.+; available\)/);
119
+ assert.doesNotMatch(doctor.stdout, /Bash shell:/);
120
+
121
+ const probeResultPath = join(root, `workspace-probe-${family}.json`);
122
+ const probe = spawnSync(
123
+ process.execPath,
124
+ [
125
+ workspaceProbe,
126
+ installedRoot,
127
+ projectRoot,
128
+ stateDir,
129
+ instructionPath,
130
+ instructionMarker,
131
+ `windows-product-${family}`,
132
+ probeResultPath,
133
+ ],
134
+ {
135
+ cwd: process.cwd(),
136
+ env,
137
+ encoding: "utf8",
138
+ windowsHide: true,
139
+ timeout: 20_000,
140
+ },
141
+ );
142
+ if (probe.error || probe.status !== 0) {
143
+ throw new Error(`Packaged Workspace probe failed for ${family}: ${probe.error?.message ?? probe.stderr ?? probe.status}`);
144
+ }
145
+ const opened = JSON.parse(await readFile(probeResultPath, "utf8"));
146
+ assert.equal(opened.workspaceRoot, projectRoot);
147
+ assert.equal(opened.instructionPath, instructionPath);
148
+ assert.match(opened.instructionContent ?? "", new RegExp(instructionMarker));
149
+ assert.equal(opened.instructionStatus, "loaded", `${family} shell Instructions were not advertised as loaded`);
150
+ }
151
+
152
+ async function exercisePackagedElevationContract(installedRoot, { root, projectRoot, shim, cmd }) {
153
+ const { assertRuntimePrivilegeAllowed, detectRuntimePrivilege, elevatedRuntimeWarning } = await importInstalled(
154
+ installedRoot,
155
+ "dist/runtime/security/runtime-privilege.js",
156
+ );
157
+ const actualPrivilege = detectRuntimePrivilege();
158
+ if (actualPrivilege.level !== "standard") {
159
+ const configDir = join(root, "config-elevated-refusal");
160
+ const stateDir = join(root, "state-elevated-refusal");
161
+ await Promise.all([
162
+ mkdir(configDir, { recursive: true }),
163
+ mkdir(stateDir, { recursive: true }),
164
+ ]);
165
+ await writeFile(
166
+ join(configDir, "config.json"),
167
+ JSON.stringify({
168
+ host: "127.0.0.1",
169
+ port: 7678,
170
+ allowedRoots: [projectRoot],
171
+ stateDir,
172
+ worktreeRoot: join(root, "worktrees-elevated-refusal"),
173
+ commandShell: { mode: "pinned", family: "cmd", executable: cmd },
174
+ shellInstructions: false,
175
+ }, null, 2),
176
+ "utf8",
177
+ );
178
+ const refused = runPackagedShimResult(shim, ["serve"], cleanAcceptanceEnv(configDir));
179
+ assert.equal(refused.status, 1, `elevated packaged serve should fail closed, got ${refused.status}`);
180
+ assert.match(
181
+ `${refused.stdout ?? ""}\n${refused.stderr ?? ""}`,
182
+ /refuses to start its Agent\/Hook runtime with system-level or unknown privilege by default/,
183
+ );
184
+ }
185
+
186
+ const elevated = {
187
+ level: "elevated",
188
+ platform: "win32",
189
+ source: "windows-token",
190
+ detail: "packaged acceptance synthetic high-integrity token",
191
+ };
192
+ assert.throws(
193
+ () => assertRuntimePrivilegeAllowed(elevated, false),
194
+ /refuses to start its Agent\/Hook runtime with system-level or unknown privilege by default/,
195
+ );
196
+ assert.doesNotThrow(() => assertRuntimePrivilegeAllowed(elevated, true));
197
+ assert.match(elevatedRuntimeWarning(elevated), /system-wide or irreversible changes/);
198
+
199
+ const unknown = {
200
+ level: "unknown",
201
+ platform: "win32",
202
+ source: "windows-token",
203
+ detail: "packaged acceptance token inspection unavailable",
204
+ };
205
+ assert.throws(
206
+ () => assertRuntimePrivilegeAllowed(unknown, false),
207
+ /could not safely determine whether this process is elevated/,
208
+ );
209
+ assert.doesNotThrow(() => assertRuntimePrivilegeAllowed(unknown, true));
210
+ }
211
+
212
+ function packagedWorkspaceProbe() {
213
+ return String.raw`
214
+ import { writeFile } from "node:fs/promises";
215
+ import { join } from "node:path";
216
+ import { pathToFileURL } from "node:url";
217
+
218
+ const [installedRoot, projectRoot, stateDir, instructionPath, instructionMarker, conversationScopeId, resultPath] = process.argv.slice(2);
219
+ const importInstalled = (relativePath) => import(pathToFileURL(join(installedRoot, relativePath)).href);
220
+ const [{ loadConfig }, { SqliteWorkspaceStore }, { WorkspaceRegistry }] = await Promise.all([
221
+ importInstalled("dist/runtime/config/config.js"),
222
+ importInstalled("dist/workspaces/state/workspace-store.js"),
223
+ importInstalled("dist/workspaces.js"),
224
+ ]);
225
+ const config = loadConfig(process.env);
226
+ const store = new SqliteWorkspaceStore(stateDir);
227
+ try {
228
+ const registry = new WorkspaceRegistry(config, store);
229
+ const opened = await registry.openWorkspace(
230
+ { path: projectRoot, context: "full" },
231
+ { conversationScopeId },
232
+ );
233
+ const loadedShellInstruction = opened.agentsFiles.find((file) => file.path === instructionPath);
234
+ const instructionState = opened.workspace.workspaceInstructions.find((entry) => entry.path === instructionPath);
235
+ if (!loadedShellInstruction || !loadedShellInstruction.content.includes(instructionMarker)) {
236
+ throw new Error("Packaged shell Instructions were not loaded from the editable instruction file.");
237
+ }
238
+ await writeFile(resultPath, JSON.stringify({
239
+ workspaceRoot: opened.workspace.root,
240
+ instructionPath: loadedShellInstruction.path,
241
+ instructionContent: loadedShellInstruction.content,
242
+ instructionStatus: instructionState?.status ?? null,
243
+ }), "utf8");
244
+ } finally {
245
+ store.close();
246
+ }
247
+ `;
248
+ }
249
+
250
+ function cleanAcceptanceEnv(configDir) {
251
+ const env = Object.fromEntries(
252
+ Object.entries(process.env).filter(([name]) => !name.startsWith("FORGERELAY_")),
253
+ );
254
+ delete env.npm_lifecycle_event;
255
+ return {
256
+ ...env,
257
+ FORGERELAY_CONFIG_DIR: configDir,
258
+ FORGERELAY_OAUTH_OWNER_TOKEN: "windows-product-acceptance-owner-token-long-enough",
259
+ FORGERELAY_SKILLS: "0",
260
+ FORGERELAY_WIDGETS: "off",
261
+ };
262
+ }
263
+
264
+ function runPackagedShim(shim, args, env) {
265
+ const result = runPackagedShimResult(shim, args, env);
266
+ if (result.error || result.status !== 0) {
267
+ throw new Error(`Packaged launcher failed (${args.join(" ")}): ${result.error?.message ?? result.stderr ?? result.status}`);
268
+ }
269
+ return result;
270
+ }
271
+
272
+ function runPackagedShimResult(shim, args, env) {
273
+ const cmd = process.env.ComSpec ?? process.env.COMSPEC ?? "cmd.exe";
274
+ const command = [`\"${shim}\"`, ...args.map(quoteCmdArg)].join(" ");
275
+ return spawnSync(
276
+ cmd,
277
+ ["/d", "/s", "/c", `"${command}"`],
278
+ {
279
+ cwd: process.cwd(),
280
+ env,
281
+ encoding: "utf8",
282
+ windowsHide: true,
283
+ windowsVerbatimArguments: true,
284
+ timeout: 10_000,
285
+ },
286
+ );
287
+ }
288
+
289
+ function resolveWhere(executable, label) {
290
+ const result = spawnSync("where.exe", [executable], {
291
+ encoding: "utf8",
292
+ windowsHide: true,
293
+ });
294
+ if (result.error || result.status !== 0) {
295
+ throw new Error(`Windows product acceptance requires ${label} (${executable}) on PATH.`);
296
+ }
297
+ const resolved = result.stdout?.split(/\r?\n/).map((line) => line.trim()).find(Boolean);
298
+ if (!resolved) throw new Error(`where.exe reported no ${executable} path.`);
299
+ return resolved;
300
+ }
301
+
302
+ function runNpm(args) {
303
+ const result = spawnSync(process.execPath, [npmCli, ...args], {
304
+ cwd: process.cwd(),
305
+ env: process.env,
306
+ encoding: "utf8",
307
+ windowsHide: true,
308
+ });
309
+ if (result.error || result.status !== 0) {
310
+ throw new Error(`npm ${args.join(" ")} failed: ${result.error?.message ?? result.stderr ?? result.status}`);
311
+ }
312
+ return result;
313
+ }
314
+
315
+ function importInstalled(installedRoot, relativePath) {
316
+ return import(pathToFileURL(join(installedRoot, relativePath)).href);
317
+ }
318
+
319
+ function quoteCmdArg(value) {
320
+ return `"${String(value).replaceAll('"', '""')}"`;
321
+ }