@plurnk/plurnk-contracts 1.16.4 → 1.17.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.
Files changed (88) hide show
  1. package/README.md +13 -29
  2. package/SPEC.md +605 -518
  3. package/dist/conformance/agui-v1.json +3 -3
  4. package/dist/schema/CapabilityProjection.json +2 -4
  5. package/dist/schema/ClientStatement.json +5 -52
  6. package/dist/schema/FunctionalityDefinitionState.json +2 -2
  7. package/dist/schema/LineMarker.json +1 -1
  8. package/dist/schema/LoopPolicy.json +2 -3
  9. package/dist/schema/MatcherBody.json +6 -6
  10. package/dist/schema/McpServerDefinition.json +17 -0
  11. package/dist/schema/ModelCatalogPage.json +10 -1
  12. package/dist/schema/ModelRoute.json +9 -0
  13. package/dist/schema/Notice.json +1 -1
  14. package/dist/schema/ParsedPath.json +3 -2
  15. package/dist/schema/Plan.json +9 -5
  16. package/dist/schema/PlurnkStatement.json +86 -134
  17. package/dist/schema/ProposalProjection.json +2 -1
  18. package/dist/schema/ResourceSelection.json +51 -27
  19. package/dist/schema/SkillDefinition.json +3 -3
  20. package/dist/src/AcpPlanValue.d.ts +0 -1
  21. package/dist/src/AcpPlanValue.d.ts.map +1 -1
  22. package/dist/src/AcpPlanValue.js +14 -13
  23. package/dist/src/AcpPlanValue.js.map +1 -1
  24. package/dist/src/ApplicationPort.d.ts +16 -14
  25. package/dist/src/ApplicationPort.d.ts.map +1 -1
  26. package/dist/src/AstBuilder.d.ts +3 -2
  27. package/dist/src/AstBuilder.d.ts.map +1 -1
  28. package/dist/src/AstBuilder.js +340 -187
  29. package/dist/src/AstBuilder.js.map +1 -1
  30. package/dist/src/JsonDocument.d.ts +2 -0
  31. package/dist/src/JsonDocument.d.ts.map +1 -0
  32. package/dist/src/JsonDocument.js +14 -0
  33. package/dist/src/JsonDocument.js.map +1 -0
  34. package/dist/src/LoopLifecycle.d.ts +3 -0
  35. package/dist/src/LoopLifecycle.d.ts.map +1 -0
  36. package/dist/src/LoopLifecycle.js +14 -0
  37. package/dist/src/LoopLifecycle.js.map +1 -0
  38. package/dist/src/PlanValue.d.ts +1 -1
  39. package/dist/src/PlanValue.d.ts.map +1 -1
  40. package/dist/src/PlanValue.js +10 -6
  41. package/dist/src/PlanValue.js.map +1 -1
  42. package/dist/src/PlurnkErrorStrategy.d.ts.map +1 -1
  43. package/dist/src/PlurnkErrorStrategy.js +58 -139
  44. package/dist/src/PlurnkErrorStrategy.js.map +1 -1
  45. package/dist/src/PlurnkParseError.d.ts +3 -1
  46. package/dist/src/PlurnkParseError.d.ts.map +1 -1
  47. package/dist/src/PlurnkParseError.js +4 -1
  48. package/dist/src/PlurnkParseError.js.map +1 -1
  49. package/dist/src/PlurnkParser.d.ts +9 -5
  50. package/dist/src/PlurnkParser.d.ts.map +1 -1
  51. package/dist/src/PlurnkParser.js +175 -180
  52. package/dist/src/PlurnkParser.js.map +1 -1
  53. package/dist/src/RecordingListener.d.ts +1 -1
  54. package/dist/src/RecordingListener.d.ts.map +1 -1
  55. package/dist/src/RecordingListener.js +24 -6
  56. package/dist/src/RecordingListener.js.map +1 -1
  57. package/dist/src/TurnDisposition.d.ts +11 -0
  58. package/dist/src/TurnDisposition.d.ts.map +1 -0
  59. package/dist/src/TurnDisposition.js +32 -0
  60. package/dist/src/TurnDisposition.js.map +1 -0
  61. package/dist/src/Validator.js +1 -1
  62. package/dist/src/Validator.js.map +1 -1
  63. package/dist/src/generated/plurnkLexer.d.ts +95 -106
  64. package/dist/src/generated/plurnkLexer.d.ts.map +1 -1
  65. package/dist/src/generated/plurnkLexer.js +674 -828
  66. package/dist/src/generated/plurnkLexer.js.map +1 -1
  67. package/dist/src/generated/plurnkParser.d.ts +111 -152
  68. package/dist/src/generated/plurnkParser.d.ts.map +1 -1
  69. package/dist/src/generated/plurnkParser.js +756 -1082
  70. package/dist/src/generated/plurnkParser.js.map +1 -1
  71. package/dist/src/generated/plurnkParserVisitor.d.ts +15 -36
  72. package/dist/src/generated/plurnkParserVisitor.d.ts.map +1 -1
  73. package/dist/src/generated/plurnkParserVisitor.js +12 -30
  74. package/dist/src/generated/plurnkParserVisitor.js.map +1 -1
  75. package/dist/src/index.d.ts +5 -1
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +4 -1
  78. package/dist/src/index.js.map +1 -1
  79. package/dist/src/types.d.ts +3 -7
  80. package/dist/src/types.d.ts.map +1 -1
  81. package/dist/src/types.generated.d.ts +147 -80
  82. package/dist/src/types.generated.d.ts.map +1 -1
  83. package/dist/src/types.js +3 -3
  84. package/dist/src/types.js.map +1 -1
  85. package/package.json +4 -8
  86. package/plurnk.md +103 -119
  87. package/dist/plurnk.gemma.gbnf +0 -141
  88. package/dist/plurnk.qwen.gbnf +0 -130
@@ -1 +1 @@
1
- {"version":3,"file":"PlurnkErrorStrategy.js","sourceRoot":"","sources":["../../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,GAGR,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,MAAM,+BAA+B,GACjC,wGAAwG,CAAC;AAE7G,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoB;IACjE,MAAM,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;IAE7C,MAAM,CAAC,mBAAmB,GAA2B;QACjD,YAAY,EAAE,yBAAyB;QACvC,KAAK,EAAE,uGAAuG;QAC9G,MAAM,EAAE,mDAAmD;QAC3D,QAAQ,EAAE,uEAAuE;QACjF,IAAI,EAAE,SAAS;KAClB,CAAC;IAEF,MAAM,CAAC,cAAc,GAA2B;QAC5C,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,wCAAwC;QAClE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,iCAAiC;QAC3D,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,qCAAqC;QAC/D,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,qCAAqC;QAC/D,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,4BAA4B;QACnD,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,4BAA4B;QACnD,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,oCAAoC;QAC3D,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,mCAAmC;QAC5D,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,oCAAoC;QAC3D,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,mBAAmB;QAC5C,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,+BAA+B;QACzD,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,wBAAwB;QACpD,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,cAAc;QAC1C,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,yBAAyB;QACvD,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,cAAc;QACxC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,kBAAkB;KAC1C,CAAC;IAEF,MAAM,CAAC,qBAAqB,CAAC,KAAkB,EAAE,WAAmB;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC;QAC/D,MAAM,OAAO,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC;QAC1F,MAAM,EAAE,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAClE,wFAAwF;QACxF,mEAAmE;QACnE,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvF,OAAO,wGAAwG,CAAC;QACpH,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YAC7D,OAAO,EAAE,KAAK,MAAM;gBAChB,CAAC,CAAC,oIAAoI;gBACtI,CAAC,CAAC,mCAAmC,EAAE,uFAAuF,EAAE,mBAAmB,CAAC;QAC5J,CAAC;QACD,qFAAqF;QACrF,kFAAkF;QAClF,uFAAuF;QACvF,qEAAqE;QACrE,mFAAmF;QACnF,qFAAqF;QACrF,qDAAqD;QACrD,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnG,OAAO,sBAAsB,EAAE,+PAA+P,CAAC;QACnS,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;eAC1C,CAAC,EAAE,KAAK,KAAK,IAAI,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO,0BAA0B,EAAE,yEAAyE,CAAC;QACjH,CAAC;QACD,OAAO,0BAA0B,EAAE,IAAI,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,uFAAuF;IACvF,oEAAoE;IACpE,MAAM,CAAC,sBAAsB,CAAC,KAAkB;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,IAAI,KAAK,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;QACpF,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,oBAAoB,CAAC,KAAkB;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,IAAI,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,GAAW;QACpC,MAAM,CAAC,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,GAAiB;QACnC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG;YAAE,OAAO,cAAc,CAAC;QAC1D,MAAM,IAAI,GAAG,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,CAAuB;QAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,KAAK,GAAa,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,uEAAuE;QACvE,qFAAqF;QACrF,mEAAmE;QACnE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CACrB,KAAK;iBACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACjD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,CAAC,gBAAgB,CAAC,GAAiB;QACrC,yEAAyE;QACzE,IAAI,GAAG,EAAE,IAAI,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,2GAA2G,CAAC;QACvH,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,YAAY,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAC9D,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IAED,wFAAwF;IACxF,uDAAuD;IACvD,MAAM,CAAC,kBAAkB,CAAC,UAAkB,EAAE,GAAiB;QAC3D,IAAI,GAAG,EAAE,IAAI,KAAK,YAAY,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC;gBACzC,OAAO,qFAAqF,MAAM,sCAAsC,CAAC;YAC7I,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,0FAA0F;IAC1F,0BAA0B;IAC1B,MAAM,CAAC,sBAAsB,CAAC,UAAkB,EAAE,GAAiB;QAC/D,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5G,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;QACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU;gBAAE,QAAQ,GAAG,IAAI,CAAC;YAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM;gBAAE,SAAS,GAAG,IAAI,CAAC;YACzD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;gBACpH,OAAO,KAAK,CAAC,CAAC,CAAC,8FAA8F,CAAC,CAAC,CAAC,IAAI,CAAC;YACzH,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,0FAA0F;IAC1F,oCAAoC;IACpC,MAAM,CAAC,sBAAsB,CAAC,UAAkB,EAAE,GAAiB;QAC/D,IAAI,GAAG,EAAE,IAAI,KAAK,YAAY,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBACrC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,8FAA8F,EAAE,CAAC;YAChI,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,0FAA0F;IAC1F,8FAA8F;IAC9F,+FAA+F;IAC/F,yFAAyF;IACzF,MAAM,CAAC,iBAAiB,GAAwB,IAAI,GAAG,CAAC;QACpD,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS;QAC9F,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS;QAC9C,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS;QAC9F,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS;QAC9F,YAAY,CAAC,WAAW;KAC3B,CAAC,CAAC;IAEH,2FAA2F;IAC3F,MAAM,CAAC,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE9G,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAEN,OAAO,CAAC,UAAkB,EAAE,EAAwB;QAChE,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;QACtC,IAAI,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QAC3C,sFAAsF;QACtF,sFAAsF;QACtF,8FAA8F;QAC9F,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7E,IAAI,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;gBAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;YAAC,CAAC;YACpG,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;YACrC,OAAO;QACX,CAAC;QACD,oFAAoF;QACpF,gDAAgD;QAChD,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;YAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QAAC,CAAC;QAC3I,OAAO,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5F,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,CAAC;IAEe,WAAW,CAAC,UAAkB,EAAE,CAAuB;QACnE,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YAAE,OAAO;QACjD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACxE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO;QACX,CAAC;QACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QACzF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACvB,UAAU,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QAC1F,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO;QACX,CAAC;QACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5F,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAE1D,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC,YAAY,sBAAsB,IAAI,CAAC,YAAY,oBAAoB,EAAE,CAAC;YAC3E,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,GAAG,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC;QACrF,CAAC;aAAM,CAAC;YACJ,GAAG,GAAG,cAAc,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,UAAU,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEe,kBAAkB,CAAC,UAAkB;QACjD,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YAAE,OAAO;QACjD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAC7B,cAAc;iBACT,OAAO,EAAE;iBACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACjD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9E,CAAC,CAAC,YAAY,CAAC;QACnB,MAAM,GAAG,GAAG,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,YAAY,QAAQ,SAAS,GAAG,EAAE,CAAC;QAC/C,UAAU,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAEe,mBAAmB,CAAC,UAAkB;QAClD,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YAAE,OAAO;QACjD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5E,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACvB,UAAU,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC7E,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC/E,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzE,OAAO;QACX,CAAC;QACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAC7B,cAAc;iBACT,OAAO,EAAE;iBACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACjD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9E,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,GAAG,GAAG,QAAQ;YAChB,CAAC,CAAC,cAAc,GAAG,cAAc,QAAQ,EAAE;YAC3C,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC;QAC1B,UAAU,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;CACJ"}
1
+ {"version":3,"file":"PlurnkErrorStrategy.js","sourceRoot":"","sources":["../../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,15 @@ export default class PlurnkParseError extends Error {
5
5
  readonly column: number;
6
6
  readonly source: ErrorSource;
7
7
  readonly severity: Severity;
8
- constructor(line: number, column: number, source: ErrorSource, message: string, severity?: Severity);
8
+ readonly code?: "invalid-turn-structure";
9
+ constructor(line: number, column: number, source: ErrorSource, message: string, severity?: Severity, code?: PlurnkParseError["code"]);
9
10
  toJSON(): {
10
11
  line: number;
11
12
  column: number;
12
13
  source: ErrorSource;
13
14
  severity: Severity;
14
15
  message: string;
16
+ code?: PlurnkParseError["code"];
15
17
  };
16
18
  }
17
19
  //# sourceMappingURL=PlurnkParseError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlurnkParseError.d.ts","sourceRoot":"","sources":["../../src/PlurnkParseError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAkB,EAO3G;IAED,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAQnG;CACJ"}
1
+ {"version":3,"file":"PlurnkParseError.d.ts","sourceRoot":"","sources":["../../src/PlurnkParseError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IAEzC,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAkB,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAQ5I;IAED,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;KAAE,CASpI;CACJ"}
@@ -3,13 +3,15 @@ export default class PlurnkParseError extends Error {
3
3
  column;
4
4
  source;
5
5
  severity;
6
- constructor(line, column, source, message, severity = "error") {
6
+ code;
7
+ constructor(line, column, source, message, severity = "error", code) {
7
8
  super(message);
8
9
  this.name = "PlurnkParseError";
9
10
  this.line = line;
10
11
  this.column = column;
11
12
  this.source = source;
12
13
  this.severity = severity;
14
+ this.code = code;
13
15
  }
14
16
  toJSON() {
15
17
  return {
@@ -18,6 +20,7 @@ export default class PlurnkParseError extends Error {
18
20
  source: this.source,
19
21
  severity: this.severity,
20
22
  message: this.message,
23
+ ...(this.code === undefined ? {} : { code: this.code }),
21
24
  };
22
25
  }
23
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PlurnkParseError.js","sourceRoot":"","sources":["../../src/PlurnkParseError.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IACtC,IAAI,CAAS;IACb,MAAM,CAAS;IACf,MAAM,CAAc;IACpB,QAAQ,CAAW;IAE5B,YAAY,IAAY,EAAE,MAAc,EAAE,MAAmB,EAAE,OAAe,EAAE,QAAQ,GAAa,OAAO;QACxG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,MAAM;QACF,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"PlurnkParseError.js","sourceRoot":"","sources":["../../src/PlurnkParseError.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IACtC,IAAI,CAAS;IACb,MAAM,CAAS;IACf,MAAM,CAAc;IACpB,QAAQ,CAAW;IACnB,IAAI,CAA4B;IAEzC,YAAY,IAAY,EAAE,MAAc,EAAE,MAAmB,EAAE,OAAe,EAAE,QAAQ,GAAa,OAAO,EAAE,IAA+B;QACzI,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,MAAM;QACF,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1D,CAAC;IACN,CAAC;CACJ"}
@@ -1,11 +1,15 @@
1
1
  import { type ClientStatement, type ParseResult } from "./types.ts";
2
+ export interface ParseOptions {
3
+ readonly executors?: readonly string[];
4
+ }
2
5
  export default class PlurnkParser {
3
6
  #private;
4
- static readonly MISSING_SEND = "No valid terminal SEND was parsed; `### SEND0 (NEXT)` was used.";
5
7
  static readonly NO_VALID_OPERATION = "no valid Plurnk operation was found.";
6
- static parse(input: string): ParseResult;
7
- static parseStatements(input: string): ParseResult;
8
- static parseLog(input: string): ParseResult;
9
- static parseClient(input: string): ParseResult<ClientStatement>;
8
+ static frame(header: string, body: string | null): string;
9
+ static stringify(statements: readonly ClientStatement[]): string;
10
+ static parse(input: string, options?: ParseOptions): ParseResult;
11
+ static parseStatements(input: string, options?: ParseOptions): ParseResult;
12
+ static parseLog(input: string, options?: ParseOptions): ParseResult;
13
+ static parseClient(input: string, options?: ParseOptions): ParseResult<ClientStatement>;
10
14
  }
11
15
  //# sourceMappingURL=PlurnkParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlurnkParser.d.ts","sourceRoot":"","sources":["../../src/PlurnkParser.ts"],"names":[],"mappings":"AAOA,OAAO,EAEH,KAAK,eAAe,EAEpB,KAAK,WAAW,EAInB,MAAM,YAAY,CAAC;AAwBpB,MAAM,CAAC,OAAO,OAAO,YAAY;;IAC7B,MAAM,CAAC,QAAQ,CAAC,YAAY,qEAAqE;IACjG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,0CAA0C;IAK5E,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAYvC;IA8KD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAEjD;IAMD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAE1C;IAKD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,CAM9D;CA4IJ"}
1
+ {"version":3,"file":"PlurnkParser.d.ts","sourceRoot":"","sources":["../../src/PlurnkParser.ts"],"names":[],"mappings":"AASA,OAAO,EAEH,KAAK,eAAe,EAEpB,KAAK,WAAW,EAInB,MAAM,YAAY,CAAC;AAqBpB,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;;IAC7B,MAAM,CAAC,QAAQ,CAAC,kBAAkB,0CAA0C;IAK5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAWxD;IAGD,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAyC/D;IAKD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAOnE;IAoDD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAE7E;IAID,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAEtE;IAKD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,CAO1F;CAgMJ"}
@@ -1,172 +1,120 @@
1
- import { CharStream, CommonTokenStream } from "antlr4ng";
1
+ import { CharStream, CommonTokenStream, Token } from "antlr4ng";
2
2
  import { plurnkLexer } from "./generated/plurnkLexer.js";
3
3
  import { plurnkParser } from "./generated/plurnkParser.js";
4
4
  import AstBuilder from "./AstBuilder.js";
5
+ import PlanValue from "./PlanValue.js";
6
+ import TurnDisposition from "./TurnDisposition.js";
5
7
  import PlurnkParseError from "./PlurnkParseError.js";
6
8
  import PlurnkErrorStrategy from "./PlurnkErrorStrategy.js";
7
9
  import RecordingListener from "./RecordingListener.js";
8
- import { UNKNOWN_POSITION, } from "./types.js";
10
+ import { PLURNK_OPS, } from "./types.js";
9
11
  // Statement-bearing contexts the extraction builds into items. `statement` (statementSeq) and
10
- // `midStatement` (mid-turn ops) each wrap one op; PLAN and the terminal SEND attach as direct
11
- // `planStatement`/`sendStatement` children of a turn; `clientStatement` wraps one op in the
12
+ // `midStatement` (mid-turn ops) each wrap one op; the turn disposition attaches as a direct
13
+ // `dispositionStatement` child of a turn; `clientStatement` wraps one op in the
12
14
  // client tier.
13
15
  const STATEMENT_RULES = new Set([
14
16
  plurnkParser.RULE_statement,
15
17
  plurnkParser.RULE_midStatement,
16
- plurnkParser.RULE_planStatement,
17
- plurnkParser.RULE_sendStatement,
18
+ plurnkParser.RULE_dispositionStatement,
18
19
  plurnkParser.RULE_clientStatement,
19
20
  ]);
20
- // Container rules whose children hold one turn's statements. `turnContent`
21
- // carries tolerated preamble text; `turn` is also the direct child of a fenced
22
- // document. parseLog contains multiple turnContent siblings, flattened in order.
21
+ // One-turn containers, flattened in source order for model and saved programs.
23
22
  const CONTAINER_RULES = new Set([
24
- plurnkParser.RULE_modelTurnContent,
25
23
  plurnkParser.RULE_modelTurn,
26
- plurnkParser.RULE_turnContent,
27
24
  plurnkParser.RULE_turn,
28
25
  ]);
29
26
  export default class PlurnkParser {
30
- static MISSING_SEND = "No valid terminal SEND was parsed; `### SEND0 (NEXT)` was used.";
31
27
  static NO_VALID_OPERATION = "no valid Plurnk operation was found.";
32
- // Parse one model turn. Canonical PLAN/SEND framing stays strict in teaching and
33
- // generation; a source operation lets ingestion recover either omitted boundary.
34
- // Tolerated preamble TEXT remains an ordered item without language semantics. {§turn-shape}
35
- static parse(input) {
36
- const { source, tolerated: scoped } = PlurnkParser.#tolerateScopeSlots(input);
37
- const result = PlurnkParser.#run(source, (parser) => parser.document());
38
- PlurnkParser.#scoldScopeSlots(result.items, scoped);
39
- // Value-adds layered on ANTLR's diagnostics while the document boundary
40
- // remains trustworthy. Neither changes what parsed.
41
- if (result.unparsedTail === undefined) {
42
- PlurnkParser.#imperativeTurnShape(result.items);
43
- PlurnkParser.#imperativeMidTermination(result.items);
44
- PlurnkParser.#recoverTurnEnvelope(result.items);
28
+ // {§statement-rendering} — a wider fence keeps shorter inner fences as body ({§fence-closer});
29
+ // a body that itself holds a heading line of four or more backticks needs the numeric
30
+ // delimiter, since such a line ends any block it stands in ({§fence-heading-in-body}).
31
+ static frame(header, body) {
32
+ const longest = (body?.match(/`+/g) ?? []).reduce((maximum, ticks) => Math.max(maximum, ticks.length), 0);
33
+ const fence = "`".repeat(Math.max(4, longest + 1));
34
+ const nested = body !== null && /^`{4,}[0-9]*[A-Za-z]/mu.test(body);
35
+ let delimiter = "";
36
+ if (nested) {
37
+ let candidate = 42;
38
+ while (new RegExp(`^\`{3,}${candidate}(?![0-9])`, "mu").test(body))
39
+ candidate += 1;
40
+ delimiter = String(candidate);
45
41
  }
46
- return result;
42
+ return `${fence}${delimiter}${header}\n${body === null ? "" : `${body}\n`}${fence}${delimiter}`;
47
43
  }
48
- // {§scope-slot-tolerance} — `### COPY0 (worker:///src.md<2,3>)`: the line scope was written inside
49
- // the path slot. `<` and `>` are not URI characters, so a `<...>` right before a slot's closing
50
- // paren can only be a scope: the heading is read as `(worker:///src.md) <2,3>` and the slip is a
51
- // warning advisory after its statement — the statement runs (#442, ruled 2026-08-30: accept with a
52
- // warning). The rewrite adds one character per slot, so a column on the same heading after the
53
- // slot is off by that much; lines stay true.
54
- static #SCOPE_SLOT = /\(([^\s()<>]+)<([^<>()\s]+)>\)/g;
55
- static #tolerateScopeSlots(input) {
56
- const tolerated = [];
57
- const source = input.split("\n").map((text, index) => {
58
- if (!/^#{2,3} [A-Z]+[A-Za-z0-9_]* /.test(text))
59
- return text;
60
- return text.replace(PlurnkParser.#SCOPE_SLOT, (match, path, scope, offset) => {
61
- tolerated.push({ line: index + 1, column: offset + path.length + 2, scope });
62
- return `(${path}) <${scope}>`;
63
- });
64
- }).join("\n");
65
- return { source, tolerated };
66
- }
67
- static #scoldScopeSlots(items, tolerated) {
68
- // Each scold splices in right after its statement; reversed, two slips on one heading
69
- // keep their authored order.
70
- for (const { line, column, scope } of tolerated.toReversed()) {
71
- const scold = {
72
- kind: "error",
73
- error: new PlurnkParseError(line, column, "parser", `\`<${scope}>\` belongs after the \`(path)\` slot, not inside it - \`(path) <${scope}>\` was used.`, "warning"),
44
+ // {§statement-rendering} — framing is syntax, never persisted AST state.
45
+ static stringify(statements) {
46
+ return statements.map((statement) => {
47
+ const name = statement.op === "EXEC" ? statement.executor ?? "EXEC" : statement.op;
48
+ if (statement.op === "EXEC" && statement.executor !== null
49
+ && [...PLURNK_OPS, "LOOK"].includes(name)) {
50
+ throw new TypeError(`Executor name ${JSON.stringify(name)} is reserved for a Plurnk operation.`);
51
+ }
52
+ const modifiers = [];
53
+ // {§naked-pattern} — a lifted matcher is written back bare when the bare form reads back
54
+ // identically; otherwise as its `pattern` option ({§matcher-option}), the escape.
55
+ const naked = (raw) => raw.trim() === raw && raw !== "" && !/[\r\n]/u.test(raw) && !raw.includes("<!--")
56
+ && (/^(\/|\$|~|&|\^)/u.test(raw) || ((statement.op === "FIND" || statement.op === "READ" || statement.op === "KILL") && !/^[[(<`]/u.test(raw)));
57
+ const metadataOf = (metadata, matcher, bare) => metadata !== null && metadata !== undefined ? metadata.map((block) => `[${block}]`)
58
+ : matcher !== null && matcher !== undefined ? [bare && naked(matcher.raw) ? matcher.raw : `[${JSON.stringify({ pattern: matcher.raw })}]`]
59
+ : [];
60
+ // {§local-path-fragment} — a bare path renders its channel back as `#channel`.
61
+ const spelled = (target) => target.kind === "local" && target.fragment !== undefined && target.fragment !== null ? `${target.raw}#${target.fragment}` : target.raw;
62
+ const selection = (resource) => {
63
+ modifiers.push(`(${spelled(resource.target)})`);
64
+ if (resource.lineMarker !== null)
65
+ modifiers.push(`<${resource.lineMarker.marks.join(",")}>`);
66
+ modifiers.push(...metadataOf(resource.metadata, resource.matcher, false));
74
67
  };
75
- const at = items.findIndex((item) => item.kind === "statement" && item.statement.position?.line === line);
76
- if (at === -1)
77
- items.push(scold);
78
- else
79
- items.splice(at + 1, 0, scold);
80
- }
81
- }
82
- // Terminal disposition alphabet. {§waitpid-dispositions} {§wait-obligation-matrix}
83
- // Replace ANTLR's generic structure errors with the exact envelope default when the
84
- // canonical PLAN...SEND shape is cleanly incomplete. The parser admits the useful
85
- // operations and core records this hard diagnostic as the turn's strike. {§turn-shape}
86
- static #imperativeTurnShape(items) {
87
- // {§turn-shape} — PLAN is a SHOULD; only the terminal SEND is structural. A
88
- // recipient SEND does not satisfy it ({§send-label}).
89
- const hasSend = items.some((i) => i.kind === "statement" && i.statement.op === "SEND" && i.statement.status !== null);
90
- if (hasSend)
91
- return;
92
- const isStructErr = (i) => i.kind === "error" && i.error.source === "parser" && i.error.severity === "error";
93
- const structErrors = items.filter(isStructErr);
94
- const statements = items.flatMap((item) => item.kind === "statement" ? [item.statement] : []);
95
- if (statements.length === 0) {
96
- const anchor = structErrors[0]?.error;
97
- // With no operation to retain, the grammar's expected-token cascade is less useful
98
- // than the exact admission failure. Lexer and visitor diagnostics remain intact.
99
- const kept = items.filter((item) => !isStructErr(item));
100
- items.length = 0;
101
- items.push(...kept, {
102
- kind: "error",
103
- error: new PlurnkParseError(anchor?.line ?? 1, anchor?.column ?? 0, "parser", PlurnkParser.NO_VALID_OPERATION),
104
- });
105
- return;
106
- }
107
- // Only add the anchor imperative when the shape is CLEANLY incomplete. If a bounded lexer
108
- // or visitor error is present, the turn derailed within an operation, so the
109
- // missing PLAN/SEND is a parse artifact, not the real fix - that specific bounded error
110
- // is the actionable guidance, and an imperative would mislead.
111
- const hasSpecificError = items.some((i) => i.kind === "error" && i.error.severity === "error" && i.error.source !== "parser");
112
- if (hasSpecificError)
113
- return;
114
- if (!hasSend) {
115
- const position = statements.at(-1)?.position ?? UNKNOWN_POSITION;
116
- items.push({
117
- kind: "error",
118
- error: new PlurnkParseError(position.line, position.column, "parser", PlurnkParser.MISSING_SEND),
119
- });
120
- }
68
+ if (statement.op === "COPY" || statement.op === "MOVE") {
69
+ selection(statement.source);
70
+ selection(statement.destination);
71
+ }
72
+ else {
73
+ if (statement.target !== null) {
74
+ modifiers.push(`(${spelled(statement.target)})`);
75
+ }
76
+ if (statement.lineMarker !== null)
77
+ modifiers.push(`<${statement.lineMarker.marks.join(",")}>`);
78
+ modifiers.push(...metadataOf(statement.metadata, "matcher" in statement ? statement.matcher : null, true));
79
+ }
80
+ if (statement.aside !== null)
81
+ modifiers.push(`<!-- ${statement.aside} -->`);
82
+ const body = TurnDisposition.is(statement) ? PlanValue.stringify(statement.body)
83
+ : statement.op === "COPY" || statement.op === "MOVE" || statement.body === null ? null
84
+ : typeof statement.body === "string" ? statement.body : statement.body.raw;
85
+ const header = `${name}${modifiers.length === 0 ? "" : ` ${modifiers.join(" ")}`}`;
86
+ return PlurnkParser.frame(header, body);
87
+ }).join("\n\n");
121
88
  }
122
- // A model emission with at least one valid operation remains a useful program when it
123
- // omits envelope ceremony. Materialize the exact language defaults in the AST; the raw
124
- // source remains untouched as forensic turnOps evidence. GBNF and parseLog stay strict.
125
- static #recoverTurnEnvelope(items) {
126
- const sourceStatements = items.flatMap((item) => item.kind === "statement" ? [item.statement] : []);
127
- if (sourceStatements.length === 0)
128
- return;
129
- const delimiter = sourceStatements[0]?.delimiter || "0";
130
- const hasTerminalSend = sourceStatements.some((statement) => statement.op === "SEND" && statement.status !== null);
131
- if (!hasTerminalSend) {
132
- const send = {
133
- op: "SEND",
134
- delimiter,
135
- annotation: null,
136
- status: 102,
137
- target: null,
138
- metadata: null,
139
- lineMarker: null,
140
- body: null,
141
- position: UNKNOWN_POSITION,
142
- };
143
- const lastStatement = items.findLastIndex((item) => item.kind === "statement");
144
- items.splice(lastStatement + 1, 0, { kind: "statement", statement: send });
145
- }
89
+ // Parse one model turn. An omitted disposition is silent continuation; a present one
90
+ // may sit anywhere in the turn ({§disposition-anywhere}) and the runtime executes it last.
91
+ // Outside text never becomes a parse item. {§whitespace-contract} {§turn-shape}
92
+ static parse(input, options = {}) {
93
+ const result = PlurnkParser.#run(input, (parser) => parser.document(), undefined, options);
94
+ PlurnkParser.#adviseBareHeadings(input, result.items, options.executors ?? []);
95
+ // Value-adds layered on ANTLR's diagnostics while the document boundary
96
+ // remains trustworthy. Neither changes what parsed.
97
+ if (result.unparsedTail === undefined)
98
+ PlurnkParser.#requireSourceOperation(result.items);
99
+ return result;
146
100
  }
147
- // Lift the mid-turn-termination error. A disposition-coded SEND
148
- // (102/200/202/499) ends the turn, so a following operation is an error.
149
- // Rewrite ANTLR's generic structure message to that rule. {§send-mid-reservation}
150
- // Runs after the begin/end imperative (which handles the incomplete-shape case and, for a
151
- // complete-but-trailing turn, returns early leaving this error in place to rewrite).
152
- static #imperativeMidTermination(items) {
153
- // If a bounded lexer/visitor error derailed the turn, any recovered disposition SEND is
154
- // suspect; don't mislabel its fallout as a mid-termination. Boundary loss never reaches
155
- // this pass. Mirrors #imperativeTurnShape's guard.
156
- if (items.some((i) => i.kind === "error" && i.error.severity === "error" && i.error.source !== "parser"))
157
- return;
158
- const terminal = items.find((i) => i.kind === "statement" && i.statement.op === "SEND" && i.statement.status !== null);
159
- if (!terminal)
101
+ // {§turn-shape} — no source operation is reported as its own fact, beside every diagnostic
102
+ // that explains it: a host admits a turn whose only diagnostic is this one as an empty turn
103
+ // ({§empty-turn}) and rejects one that also carries a malformed heading.
104
+ static #requireSourceOperation(items) {
105
+ if (items.some((item) => item.kind === "statement"))
160
106
  return;
161
- const t = terminal.statement.position;
162
- for (const i of items) {
163
- if (i.kind !== "error" || i.error.source !== "parser" || i.error.severity !== "error")
164
- continue;
165
- const after = i.error.line > t.line || (i.error.line === t.line && i.error.column > t.column);
166
- if (!after)
167
- continue;
168
- i.error = new PlurnkParseError(i.error.line, i.error.column, "parser", "`### SEND0 (NEXT|WAIT|TERM|FAIL)` ends the turn - nothing may follow it");
169
- }
107
+ // The grammar's end-of-input complaint only restates the absence; specific diagnostics
108
+ // (an unclosed slot, a stray character) stay, so the host can tell prose from a malformed heading.
109
+ const restatesAbsence = (item) => item.kind === "error" && item.error.source === "parser" && /^unexpected end of input/u.test(item.error.message);
110
+ const kept = items.filter((item) => !restatesAbsence(item));
111
+ items.length = 0;
112
+ items.push(...kept);
113
+ const anchor = items.find((i) => i.kind === "error" && i.error.severity === "error")?.error;
114
+ items.push({
115
+ kind: "error",
116
+ error: new PlurnkParseError(anchor?.line ?? 1, anchor?.column ?? 0, "parser", PlurnkParser.NO_VALID_OPERATION),
117
+ });
170
118
  }
171
119
  // Collapse a lexer per-character cascade: the SIGNAL/TARGET modes emit one 'unrecognized
172
120
  // character' error PER bad char, so a single malformed `[signal]` floods 10+ near-identical
@@ -193,26 +141,27 @@ export default class PlurnkParser {
193
141
  return m ? m[1] : message;
194
142
  }
195
143
  // Parse a bare sequence of statements - teaching-example collections, single ops,
196
- // documentation snippets. Strict: statements only (whitespace is hidden), no prose,
197
- // no turn shape. Not for model output; use `parse` for that.
198
- static parseStatements(input) {
199
- return PlurnkParser.#run(input, (parser) => parser.statementSeq());
144
+ // documentation snippets. No turn shape; outside text is ignored in every tier.
145
+ // Not for model output; use `parse` for that.
146
+ static parseStatements(input, options = {}) {
147
+ return PlurnkParser.#run(input, (parser) => parser.statementSeq(), undefined, options);
200
148
  }
201
- // Parse a multi-turn LOG - a saved sequence of turns, each a full PLAN-anchored sandwich.
202
- // Items are flat across turns, in source order; turn
203
- // boundaries are recoverable from the terminal SENDs. A log is valid (no error items, no
204
- // unparsedTail) iff every turn in it is a valid turn.
205
- static parseLog(input) {
206
- return PlurnkParser.#run(input, (parser) => parser.log());
149
+ // Parse saved turns in source order; dispositions separate them. Each turn
150
+ // requires a disposition, including when ordinary operations follow it.
151
+ static parseLog(input, options = {}) {
152
+ return PlurnkParser.#run(input, (parser) => parser.log(), undefined, options);
207
153
  }
208
154
  // Parse the CLIENT tier - a bare sequence of protocol statements plus the client-only utility
209
- // ops LOOK and BUFF. The topmost subset (one above Script); never used for model output. The
210
- // protocol entry points reject LOOK/BUFF, so a client op only parses here.
211
- static parseClient(input) {
212
- return PlurnkParser.#run(input, (parser) => parser.clientStatementSeq(), (ctx) => AstBuilder.buildClient(ctx));
155
+ // op LOOK. The topmost subset (one above Script); never used for model output. The
156
+ // protocol entry points reject LOOK, so a client op only parses here.
157
+ static parseClient(input, options = {}) {
158
+ return PlurnkParser.#run(input, (parser) => parser.clientStatementSeq(), (ctx) => AstBuilder.buildClient(ctx), options);
213
159
  }
214
- static #run(input, parseFn, buildFn = ((ctx) => AstBuilder.build(ctx))) {
160
+ static #run(input, parseFn, buildFn = ((ctx) => AstBuilder.build(ctx)), options = {}) {
215
161
  const lexer = new plurnkLexer(CharStream.fromString(input));
162
+ for (const name of options.executors ?? [])
163
+ lexer.knownExecutors.add(name);
164
+ AstBuilder.executorSpellings = new Map([...lexer.knownExecutors].map((name) => [name.toLowerCase(), name]));
216
165
  const errors = [];
217
166
  lexer.removeErrorListeners();
218
167
  lexer.addErrorListener(new RecordingListener("lexer", errors));
@@ -232,7 +181,7 @@ export default class PlurnkParser {
232
181
  for (const note of lexer.takeInlineBodies()) {
233
182
  const advisory = {
234
183
  kind: "error",
235
- error: new PlurnkParseError(note.line, note.column, "parser", `\`${note.heading}\` body text was on the OP line and was taken as the body; body content goes immediately beneath the OP heading line.`, "warning"),
184
+ error: new PlurnkParseError(note.line, note.column, "parser", `\`${note.heading.replace(/^`+/, "")}\` body text was on the OP line and was taken as the body; body content goes immediately beneath the opening fence line.`, "warning"),
236
185
  };
237
186
  const at = items.findIndex((item) => item.kind === "statement" && item.statement.position?.line === note.line);
238
187
  if (at !== -1)
@@ -244,29 +193,74 @@ export default class PlurnkParser {
244
193
  items.push({ kind: "error", error: err });
245
194
  }
246
195
  }
196
+ // {§unclosed-aside} — the aside ran to the end of the line; say so once.
197
+ for (const note of lexer.takeUnclosedAsides()) {
198
+ items.push({
199
+ kind: "error",
200
+ error: new PlurnkParseError(note.line, note.column, "parser", "The aside was not closed with `-->`; it was read to the end of the line.", "warning"),
201
+ });
202
+ }
203
+ // {§interstitial-fence} — a tagged fence that opened nothing is prose; say so once, as a
204
+ // warning, so a misspelled executor is never a silent loss.
205
+ for (const note of lexer.takeUnknownTags()) {
206
+ items.push({
207
+ kind: "error",
208
+ error: new PlurnkParseError(note.line, note.column, "parser", `\`${note.tag}\` is not an operation or a known executor here; the block was read as prose and nothing ran.`, "warning"),
209
+ });
210
+ }
247
211
  return { items, unparsedTail };
248
212
  }
249
213
  // Determine the public trust boundary before visiting recovered contexts. The parser may
250
214
  // synthesize tree nodes after an unfinished lexer mode, but those nodes have no public AST
251
215
  // meaning and can violate AstBuilder's complete-statement precondition. {§unparsed-tail-boundary}
252
216
  static #unparsedTail(lexer) {
253
- // EOF concludes a section body and may directly conclude a bodyless
254
- // heading. Only a partially open modifier destroys the later boundary.
255
217
  const modeName = lexer.modeNames[lexer.mode] ?? "";
256
- if (lexer.mode === 0 || modeName === "BODY" || modeName === "SLOTS")
218
+ // {§closer-fallback} — a block still open at the end of the input ended there; only an
219
+ // unfinished target or metadata slot loses the boundary.
220
+ if (modeName !== "TARGET" && modeName !== "METADATA")
257
221
  return undefined;
258
222
  const openTag = lexer.getOpenTag();
259
223
  const from = { line: lexer.getOpenTagLine(), column: lexer.getOpenTagColumn() };
260
- const heading = lexer.getOpenHeading() || `## ${openTag}`;
224
+ const heading = lexer.getOpenHeading().replace(/^`+[0-9]*/, "") || openTag;
261
225
  const reason = modeName === "METADATA"
262
- ? `metadata modifier of \`${heading}\` opened at line ${from.line} but never closed - add \`}\``
263
- : `target slot of \`${heading}\` opened at line ${from.line} but never closed - add \`)\``;
226
+ ? `metadata modifier of \`${heading}\` opened at line ${from.line} but never closed - add \`]\``
227
+ : modeName === "TARGET"
228
+ ? `target slot of \`${heading}\` opened at line ${from.line} but never closed - add \`)\``
229
+ : `${openTag} block opened at line ${from.line} but was not closed with ${lexer.getFenceLength()} backticks`;
264
230
  return { from, reason };
265
231
  }
266
- // Walk a parse tree, appending statement/error/text items in source order. Statement rules
267
- // are leaves (built directly); container rules (turnContent) are recursed into; TEXT tokens
268
- // surface as text items. So `document` (one turnContent) and `log` (turnContent+) both
269
- // flatten to items in order, while a bounded malformed statement surfaces as an error item.
232
+ // {§bare-heading-advisory} — an operation heading written outside any fence is prose, and prose
233
+ // is silent; one warning names the fence form so the loss is never quiet ({§interstitial-fence}).
234
+ static #adviseBareHeadings(input, items, executors) {
235
+ const names = ["FIND", "READ", "EDIT", "COPY", "MOVE", "SEND", "WORK", "FORK", "BARE", "KILL", "TASK", ...executors]
236
+ .map((name) => name.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"));
237
+ const headingShape = new RegExp(`^[ \\t]*(${names.join("|")})(?=\\s*(?:\\(|<|\\[|$))`, "u");
238
+ const covered = new Set();
239
+ for (const item of items) {
240
+ if (item.kind !== "statement")
241
+ continue;
242
+ const start = item.statement.position.line;
243
+ const body = item.statement.body;
244
+ const raw = typeof body === "string" ? body : body !== null && typeof body === "object" && "raw" in body ? String(body.raw ?? "") : "";
245
+ const span = raw === "" ? 0 : raw.split("\n").length;
246
+ for (let line = start; line <= start + span + 1; line += 1)
247
+ covered.add(line);
248
+ }
249
+ const lines = input.split("\n");
250
+ lines.forEach((text, index) => {
251
+ const line = index + 1;
252
+ if (covered.has(line))
253
+ return;
254
+ const match = headingShape.exec(text);
255
+ if (match === null)
256
+ return;
257
+ items.push({
258
+ kind: "error",
259
+ error: new PlurnkParseError(line, 0, "parser", `\`${match[1]}\` on line ${line} is outside any fence, so it is prose and nothing ran; an operation opens with \`\`\`\`${match[1]} on the fence line.`, "warning"),
260
+ });
261
+ });
262
+ }
263
+ // Walk statement containers in source order; bounded malformed statements become errors.
270
264
  static #collect(ctx, errors, consumedErrors, items, buildFn, boundary) {
271
265
  for (const child of ctx.children ?? []) {
272
266
  const c = child;
@@ -285,16 +279,21 @@ export default class PlurnkParser {
285
279
  consumedErrors.add(error);
286
280
  items.push({ kind: "error", error: errForStatement });
287
281
  }
288
- else if ((c.getChildCount?.() ?? 0) === 0) {
289
- // A phantom statement context synthesized during error recovery (e.g. a
290
- // PLAN slot the parser opened then failed to fill on bare text): zero tokens
291
- // matched, so its opening terminal is null and building it would null-deref.
292
- // The real failure is already recorded; skip the zero-token recovery node.
282
+ else if ((c.getChildCount?.() ?? 0) === 0 || c.exception || c.start?.type === Token.EOF) {
283
+ // A phantom statement context synthesized during error recovery (a required
284
+ // slot the parser opened then failed to fill, or a disposition the log rule
285
+ // demanded at the end of the input): nothing real was matched, so building it
286
+ // would build the recovery token. Surface the parser's own diagnostic instead.
287
+ const pending = errors.find((e) => !consumedErrors.has(e) && !PlurnkParser.#isBefore(e, start));
288
+ if (pending) {
289
+ consumedErrors.add(pending);
290
+ items.push({ kind: "error", error: pending });
291
+ }
293
292
  }
294
293
  else {
295
294
  try {
296
295
  items.push({ kind: "statement", statement: buildFn(c) });
297
- // {§misplaced-annotation-advisory} — the builder's advisories follow their statement.
296
+ // {§misplaced-aside-advisory} — the builder's advisories follow their statement.
298
297
  for (const advisory of AstBuilder.takeAdvisories())
299
298
  items.push({ kind: "error", error: advisory });
300
299
  }
@@ -312,10 +311,6 @@ export default class PlurnkParser {
312
311
  else if (c.ruleIndex !== undefined && CONTAINER_RULES.has(c.ruleIndex)) {
313
312
  PlurnkParser.#collect(c, errors, consumedErrors, items, buildFn, boundary);
314
313
  }
315
- else if (c.symbol?.type === plurnkLexer.TEXT) {
316
- const position = { line: start.line, column: start.column };
317
- items.push({ kind: "text", text: c.symbol.text ?? "", position });
318
- }
319
314
  }
320
315
  }
321
316
  static #isBefore(point, boundary) {