@voxgig/sdkgen 1.3.14 → 1.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/action/action.js.map +1 -1
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/AgentGuide.js.map +1 -1
- package/dist/cmp/AgentGuideContent.js.map +1 -1
- package/dist/cmp/AgentGuideFeature.js.map +1 -1
- package/dist/cmp/AgentGuideTop.js.map +1 -1
- package/dist/cmp/Changelog.js.map +1 -1
- package/dist/cmp/Deploy.js.map +1 -1
- package/dist/cmp/Entity.js +5 -1
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js +2 -1
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureHook.js.map +1 -1
- package/dist/cmp/License.js.map +1 -1
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeEntity.js.map +1 -1
- package/dist/cmp/ReadmeErrors.js +1 -1
- package/dist/cmp/ReadmeErrors.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +2 -2
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeHowto.js.map +1 -1
- package/dist/cmp/ReadmeInstall.js.map +1 -1
- package/dist/cmp/ReadmeIntro.js.map +1 -1
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeQuick.js.map +1 -1
- package/dist/cmp/ReadmeRef.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +1 -1
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/Security.js.map +1 -1
- package/dist/cmp/Test.js.map +1 -1
- package/dist/helpers/buildIdNames.js.map +1 -1
- package/dist/helpers/canonType.d.ts +3 -2
- package/dist/helpers/canonType.js +112 -24
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.d.ts +1 -1
- package/dist/helpers/collectDeps.js +36 -13
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/naming.d.ts +7 -1
- package/dist/helpers/naming.js +90 -0
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/opExample.d.ts +1 -1
- package/dist/helpers/opExample.js +37 -20
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.d.ts +5 -1
- package/dist/helpers/opShape.js +174 -7
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -3
- package/dist/sdkgen.js +12 -2
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utility.js.map +1 -1
- package/package.json +20 -14
- package/project/.sdk/model/target/cpp.aontu +4 -4
- package/project/.sdk/model/target/go-cli.aontu +17 -17
- package/project/.sdk/model/target/go-mcp.aontu +11 -11
- package/project/.sdk/model/target/go.aontu +1 -1
- package/project/.sdk/model/target/haskell.aontu +6 -3
- package/project/.sdk/model/target/java.aontu +4 -4
- package/project/.sdk/model/target/kotlin.aontu +4 -4
- package/project/.sdk/model/target/lean.aontu +51 -0
- package/project/.sdk/model/target/scala.aontu +4 -4
- package/project/.sdk/model/target/zig.aontu +12 -2
- package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
- package/project/.sdk/src/cmp/c/EntityTypes_c.ts +167 -0
- package/project/.sdk/src/cmp/c/Entity_c.ts +3 -3
- package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
- package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
- package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +169 -0
- package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
- package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
- package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
- package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
- package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
- package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
- package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
- package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
- package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
- package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
- package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
- package/project/.sdk/src/cmp/c/TestDirect_c.ts +3 -3
- package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
- package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
- package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
- package/project/.sdk/src/cmp/clojure/Entity_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +65 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
- package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
- package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
- package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
- package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
- package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
- package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
- package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
- package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
- package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
- package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
- package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/MainEntity_cpp.ts +2 -2
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExamplesTest_cpp.ts +136 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
- package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
- package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
- package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
- package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
- package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
- package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
- package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
- package/project/.sdk/src/cmp/cpp/TestDirect_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +4 -0
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +195 -0
- package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/MainEntity_csharp.ts +2 -2
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +210 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
- package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
- package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
- package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
- package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
- package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
- package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
- package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -30
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +11 -3
- package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +2 -2
- package/project/.sdk/src/cmp/dart/Main_dart.ts +3 -3
- package/project/.sdk/src/cmp/dart/Package_dart.ts +1 -1
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
- package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
- package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
- package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +4 -4
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
- package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
- package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
- package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
- package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +164 -0
- package/project/.sdk/src/cmp/elixir/Entity_elixir.ts +1 -1
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
- package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +144 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
- package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
- package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
- package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
- package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
- package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
- package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
- package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
- package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
- package/project/.sdk/src/cmp/go/Config_go.ts +4 -1
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +121 -20
- package/project/.sdk/src/cmp/go/Entity_go.ts +3 -3
- package/project/.sdk/src/cmp/go/Main_go.ts +7 -6
- package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +3 -3
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +11 -4
- package/project/.sdk/src/cmp/go/utility_go.ts +28 -2
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +249 -44
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +200 -31
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +135 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
- package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
- package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
- package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
- package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
- package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
- package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
- package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
- package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
- package/project/.sdk/src/cmp/java/EntityTypes_java.ts +206 -0
- package/project/.sdk/src/cmp/java/Entity_java.ts +3 -3
- package/project/.sdk/src/cmp/java/MainEntity_java.ts +2 -2
- package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
- package/project/.sdk/src/cmp/java/Package_java.ts +1 -1
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +208 -0
- package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
- package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
- package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
- package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
- package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
- package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
- package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
- package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
- package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
- package/project/.sdk/src/cmp/java/TestDirect_java.ts +3 -3
- package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -9
- package/project/.sdk/src/cmp/js/Entity_js.ts +3 -3
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +6 -4
- package/project/.sdk/src/cmp/js/Main_js.ts +2 -2
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +10 -9
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
- package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
- package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +200 -0
- package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/MainEntity_kotlin.ts +2 -2
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
- package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +198 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
- package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/lean/Config_lean.ts +88 -0
- package/project/.sdk/src/cmp/lean/Entity_lean.ts +9 -0
- package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Main_lean.ts +120 -0
- package/project/.sdk/src/cmp/lean/Package_lean.ts +68 -0
- package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +29 -0
- package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +19 -0
- package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +38 -0
- package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +24 -0
- package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +22 -0
- package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +50 -0
- package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Test_lean.ts +207 -0
- package/project/.sdk/src/cmp/lean/utility_lean.ts +78 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -6
- package/project/.sdk/src/cmp/lua/Entity_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
- package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +8 -3
- package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +126 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
- package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
- package/project/.sdk/src/cmp/perl/Entity_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/MainEntity_perl.ts +2 -2
- package/project/.sdk/src/cmp/perl/Package_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
- package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
- package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
- package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
- package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
- package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
- package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
- package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
- package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -7
- package/project/.sdk/src/cmp/php/Entity_php.ts +3 -3
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +2 -2
- package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +3 -3
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +8 -3
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -8
- package/project/.sdk/src/cmp/py/Entity_py.ts +4 -12
- package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Main_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Package_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +3 -3
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +8 -3
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +32 -8
- package/project/.sdk/src/cmp/rb/Entity_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/Package_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +8 -3
- package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +6 -2
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +151 -0
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +4 -4
- package/project/.sdk/src/cmp/rust/MainEntity_rust.ts +2 -2
- package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
- package/project/.sdk/src/cmp/rust/Package_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +144 -0
- package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
- package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
- package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
- package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
- package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
- package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
- package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
- package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
- package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
- package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +201 -0
- package/project/.sdk/src/cmp/scala/Entity_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/MainEntity_scala.ts +2 -2
- package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
- package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
- package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +182 -0
- package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
- package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
- package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
- package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
- package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
- package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
- package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
- package/project/.sdk/src/cmp/scala/TestDirect_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
- package/project/.sdk/src/cmp/scala/Test_scala.ts +9 -1
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +151 -0
- package/project/.sdk/src/cmp/swift/Entity_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/MainEntity_swift.ts +2 -2
- package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +187 -0
- package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
- package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
- package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
- package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
- package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
- package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
- package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
- package/project/.sdk/src/cmp/swift/TestDirect_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -6
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +3 -3
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +6 -4
- package/project/.sdk/src/cmp/ts/Main_ts.ts +2 -2
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +17 -15
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
- package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +4 -4
- package/project/.sdk/src/cmp/zig/MainEntity_zig.ts +2 -2
- package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
- package/project/.sdk/src/cmp/zig/Package_zig.ts +61 -0
- package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
- package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
- package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
- package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
- package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
- package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
- package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
- package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
- package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
- package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
- package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
- package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
- package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +8 -16
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +10 -28
- package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
- package/project/.sdk/tm/dart/test/primary_test.dart +7 -0
- package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
- package/project/.sdk/tm/go/feature/test_feature.go +33 -1
- package/project/.sdk/tm/go/test/primary_utility_test.go +41 -42
- package/project/.sdk/tm/go/test/runner_test.go +30 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
- package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +7 -24
- package/project/.sdk/tm/js/Makefile +1 -1
- package/project/.sdk/tm/js/jsconfig.json +12 -0
- package/project/.sdk/tm/js/src/feature/test/TestFeature.js +18 -1
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +8 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +7 -20
- package/project/.sdk/tm/lean/LICENSE +21 -0
- package/project/.sdk/tm/lean/VERSION +1 -0
- package/project/.sdk/tm/lean/src/SdkFeature.lean +171 -0
- package/project/.sdk/tm/lean/src/SdkFeatures.lean +602 -0
- package/project/.sdk/tm/lean/src/SdkJson.lean +134 -0
- package/project/.sdk/tm/lean/src/SdkRuntime.lean +356 -0
- package/project/.sdk/tm/lean/src/SdkUtility.lean +617 -0
- package/project/.sdk/tm/lean/src/VoxgigStruct.lean +2880 -0
- package/project/.sdk/tm/lean/src/Vregex.lean +412 -0
- package/project/.sdk/tm/lean/src/feature/README.md +5 -0
- package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +697 -0
- package/project/.sdk/tm/lean/test/TFeature.lean +268 -0
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +349 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +10 -8
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/perl/t/primary_utility.t +8 -17
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +9 -7
- package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
- package/project/.sdk/tm/py/feature/test_feature.py +28 -1
- package/project/.sdk/tm/py/test/test_primary_utility.py +13 -18
- package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/rb/feature/test_feature.rb +24 -1
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +7 -8
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +37 -1
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +12 -26
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +7 -8
- package/project/.sdk/tm/ts/Makefile +1 -1
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +18 -1
- package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +65 -21
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
- package/src/cmp/Entity.ts +5 -1
- package/src/cmp/Feature.ts +2 -1
- package/src/cmp/ReadmeErrors.ts +2 -2
- package/src/cmp/ReadmeExplanation.ts +3 -3
- package/src/cmp/ReadmeTop.ts +2 -2
- package/src/helpers/canonType.ts +121 -25
- package/src/helpers/collectDeps.ts +39 -12
- package/src/helpers/naming.ts +106 -0
- package/src/helpers/opExample.ts +43 -20
- package/src/helpers/opShape.ts +197 -11
- package/src/sdkgen.ts +13 -3
- package/src/tsconfig.json +2 -0
- package/project/.sdk/tm/zig/build.zig.zon +0 -11
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as Path from 'node:path'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
-
cmp, each,
|
|
5
|
+
cmp, each, deriveEntityNames,
|
|
6
6
|
File, Content, Fragment, Slot,
|
|
7
7
|
} from '@voxgig/sdkgen'
|
|
8
8
|
|
|
@@ -54,6 +54,14 @@ const Main = cmp(function Main(props: any) {
|
|
|
54
54
|
const mcpModule = `github.com/${org}/${model.name}-sdk/go-mcp`
|
|
55
55
|
|
|
56
56
|
const entityMap: any = getModelPath(model, `main.${KIT}.entity`)
|
|
57
|
+
// Derive each entity's PascalCase `Name` here rather than relying on another
|
|
58
|
+
// TARGET having run first. This target sets `phase.entity: { active: false }`
|
|
59
|
+
// (see model/target/go-{cli,mcp}.aontu), so create-sdkgen's Root.ts never
|
|
60
|
+
// calls names() for it — the accessor emitted below used to read `Name` off
|
|
61
|
+
// objects the `go` target happened to have named as a side effect, which
|
|
62
|
+
// yields `client.undefined(nil)` whenever this target is generated without
|
|
63
|
+
// `go`, or before it in target order.
|
|
64
|
+
deriveEntityNames(entityMap)
|
|
57
65
|
const entityNames = Object.keys(entityMap).map(n => n.toLowerCase())
|
|
58
66
|
const entityHelp = entityNames.length > 0 ? entityNames.join(' | ') : '(none)'
|
|
59
67
|
|
|
@@ -70,58 +78,198 @@ const Main = cmp(function Main(props: any) {
|
|
|
70
78
|
/go-mcp
|
|
71
79
|
`))
|
|
72
80
|
|
|
73
|
-
//
|
|
81
|
+
// ==========================================================================
|
|
82
|
+
// README.md — Diátaxis-structured, examples-first usage guide.
|
|
83
|
+
//
|
|
84
|
+
// The server ALWAYS registers exactly two tools (<slug>_list / <slug>_load;
|
|
85
|
+
// see tools.fragment.go), so tools are not gated. Concrete tool-call and
|
|
86
|
+
// entity examples are MODEL-DRIVEN off the real slug + entity names.
|
|
87
|
+
// ==========================================================================
|
|
88
|
+
const bin = `${model.name}-mcp`
|
|
89
|
+
const toolList = `${slugLower}_list`
|
|
90
|
+
const toolLoad = `${slugLower}_load`
|
|
91
|
+
const entityCount = entityNames.length
|
|
92
|
+
const entityNoun = entityCount === 1 ? 'entity' : 'entities'
|
|
74
93
|
const firstEntity = entityNames[0] || 'entity'
|
|
94
|
+
|
|
95
|
+
// Example entities chosen per-op so a doc example never shows an entity that
|
|
96
|
+
// doesn't support the op being demonstrated (both tools are always
|
|
97
|
+
// registered, but a given entity only responds to the ops it exposes).
|
|
98
|
+
const activeEntityObjs: any[] =
|
|
99
|
+
Object.values(entityMap).filter((e: any) => e && e.active !== false)
|
|
100
|
+
const entWithOp = (op: string) => {
|
|
101
|
+
const e = activeEntityObjs.find(
|
|
102
|
+
(x: any) => x.op && x.op[op] && x.op[op].active !== false)
|
|
103
|
+
return e ? String(e.name).toLowerCase() : firstEntity
|
|
104
|
+
}
|
|
105
|
+
const listEntity = entWithOp('list')
|
|
106
|
+
const loadEntity = entWithOp('load')
|
|
107
|
+
|
|
108
|
+
const projUpper = String(model.name).toUpperCase().replace(/[^A-Z0-9]/g, '_')
|
|
109
|
+
const apiKeyEnv = projUpper + '_APIKEY'
|
|
110
|
+
const baseEnv = projUpper + '_BASE'
|
|
111
|
+
|
|
75
112
|
File({ name: 'README.md' }, () => Content(`# ${model.name}-mcp
|
|
76
113
|
|
|
77
|
-
MCP server exposing the ${model.Name} SDK as
|
|
78
|
-
|
|
79
|
-
|
|
114
|
+
[MCP](https://modelcontextprotocol.io) server exposing the ${model.Name} SDK as
|
|
115
|
+
two agent tools — \`${toolList}\` and \`${toolLoad}\` — built on the
|
|
116
|
+
[official Go MCP SDK](https://github.com/modelcontextprotocol/go-sdk) and the
|
|
117
|
+
sibling Go SDK at \`../go\`. Runs over **stdio** (default, for spawnable installs)
|
|
118
|
+
or **streamable HTTP** (one shared server for several agents).
|
|
80
119
|
|
|
81
|
-
##
|
|
120
|
+
## Examples
|
|
82
121
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
| \`${slugLower}_load\` | \`entity\`, \`query\` (e.g. \`{id:N}\`) | Single record as JSON |
|
|
122
|
+
\`\`\`sh
|
|
123
|
+
# 1. Build a native binary (-> dist/<os>-<arch>/${bin})
|
|
124
|
+
make build
|
|
87
125
|
|
|
88
|
-
|
|
89
|
-
|
|
126
|
+
# 2. Provide credentials via the environment
|
|
127
|
+
export ${apiKeyEnv}=sk_live_xxx
|
|
90
128
|
|
|
91
|
-
|
|
129
|
+
# 3a. Install into Claude Code over stdio (most common)
|
|
130
|
+
claude mcp add --scope user ${slugLower} \\
|
|
131
|
+
-- /absolute/path/to/${bin} -transport stdio
|
|
92
132
|
|
|
93
|
-
|
|
133
|
+
# 3b. …or run a shared HTTP server instead
|
|
134
|
+
./${bin} -transport http -addr :8080
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
Tool-call arguments (what an agent sends):
|
|
138
|
+
|
|
139
|
+
\`\`\`jsonc
|
|
140
|
+
// ${toolList}: first page of records
|
|
141
|
+
{ "entity": "${listEntity}" }
|
|
142
|
+
{ "entity": "${listEntity}", "query": { } }
|
|
143
|
+
|
|
144
|
+
// ${toolLoad}: one record by id
|
|
145
|
+
{ "entity": "${loadEntity}", "query": { "id": 1 } }
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
> The rest of this guide follows the [Diátaxis](https://diataxis.fr) framework:
|
|
149
|
+
> a hands-on **Tutorial**, task-focused **How-to guides**, a factual
|
|
150
|
+
> **Reference**, and background **Explanation**.
|
|
151
|
+
|
|
152
|
+
## Tutorial: install and call a tool
|
|
153
|
+
|
|
154
|
+
1. **Build** the server from this \`go-mcp/\` directory:
|
|
94
155
|
|
|
95
|
-
|
|
156
|
+
\`\`\`sh
|
|
157
|
+
make build # -> dist/<os>-<arch>/${bin}
|
|
158
|
+
\`\`\`
|
|
159
|
+
|
|
160
|
+
2. **Set your API key:**
|
|
161
|
+
|
|
162
|
+
\`\`\`sh
|
|
163
|
+
export ${apiKeyEnv}=sk_live_xxx
|
|
164
|
+
\`\`\`
|
|
165
|
+
|
|
166
|
+
3. **Install it into Claude Code** (stdio transport):
|
|
167
|
+
|
|
168
|
+
\`\`\`sh
|
|
169
|
+
claude mcp add --scope user ${slugLower} \\
|
|
170
|
+
-- "$PWD"/dist/*/${bin} -transport stdio
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
4. **Restart Claude Code.** The \`${toolList}\` and \`${toolLoad}\` tools now appear
|
|
174
|
+
in new sessions. Ask the agent to *"list ${listEntity} using ${slugLower}"*
|
|
175
|
+
and it calls \`${toolList}\` with \`{"entity":"${listEntity}"}\`.
|
|
176
|
+
|
|
177
|
+
## How-to guides
|
|
178
|
+
|
|
179
|
+
### Authenticate and choose an environment
|
|
180
|
+
|
|
181
|
+
Configuration is read from the environment — nothing is written to disk:
|
|
96
182
|
|
|
97
183
|
\`\`\`sh
|
|
98
|
-
|
|
184
|
+
export ${apiKeyEnv}=sk_live_xxx # API key
|
|
185
|
+
export ${baseEnv}=https://api.example.com # optional: override the API base URL
|
|
99
186
|
\`\`\`
|
|
100
187
|
|
|
101
|
-
|
|
188
|
+
Set these in the shell that launches the server (or in the \`claude mcp add\`
|
|
189
|
+
environment) so every tool call is authenticated.
|
|
190
|
+
|
|
191
|
+
### Run as a shared HTTP server
|
|
102
192
|
|
|
103
193
|
\`\`\`sh
|
|
104
|
-
|
|
105
|
-
|
|
194
|
+
./${bin} -transport http -addr :8080
|
|
195
|
+
\`\`\`
|
|
196
|
+
|
|
197
|
+
Streamable HTTP lets several agents share one running process; stdio (the
|
|
198
|
+
default) spawns a fresh process per client.
|
|
106
199
|
|
|
107
|
-
|
|
108
|
-
|
|
200
|
+
### Call the \`${toolList}\` tool
|
|
201
|
+
|
|
202
|
+
Args: \`entity\` (required), \`query\` (optional filter map). Returns the first
|
|
203
|
+
page of records as JSON:
|
|
204
|
+
|
|
205
|
+
\`\`\`jsonc
|
|
206
|
+
{ "entity": "${listEntity}" }
|
|
109
207
|
\`\`\`
|
|
110
208
|
|
|
111
|
-
|
|
209
|
+
### Call the \`${toolLoad}\` tool
|
|
210
|
+
|
|
211
|
+
Args: \`entity\` (required), \`query\` = \`{"id":N}\` (required). Returns the single
|
|
212
|
+
record as JSON:
|
|
213
|
+
|
|
214
|
+
\`\`\`jsonc
|
|
215
|
+
{ "entity": "${loadEntity}", "query": { "id": 1 } }
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
### Cross-compile release binaries
|
|
112
219
|
|
|
113
220
|
\`\`\`sh
|
|
114
|
-
|
|
115
|
-
|
|
221
|
+
make build # native binary for this machine
|
|
222
|
+
make build-all # linux/darwin/windows x amd64/arm64, under dist/<os>-<arch>/
|
|
116
223
|
\`\`\`
|
|
117
224
|
|
|
118
|
-
|
|
119
|
-
|
|
225
|
+
## Reference
|
|
226
|
+
|
|
227
|
+
### Tools
|
|
228
|
+
|
|
229
|
+
| Tool | Args | Returns |
|
|
230
|
+
|------|------|---------|
|
|
231
|
+
| \`${toolList}\` | \`entity\` (required), \`query\` (optional map) | First page of records as JSON |
|
|
232
|
+
| \`${toolLoad}\` | \`entity\` (required), \`query\` = \`{id:N}\` | Single record as JSON |
|
|
233
|
+
|
|
234
|
+
On error, a tool returns an MCP error result (\`isError: true\`) whose text is the
|
|
235
|
+
failure message (e.g. unknown entity, or an API error).
|
|
236
|
+
|
|
237
|
+
### \`Args\` schema
|
|
238
|
+
|
|
239
|
+
Both tools take the same argument object:
|
|
240
|
+
|
|
241
|
+
| Field | Type | Notes |
|
|
242
|
+
|-------|------|-------|
|
|
243
|
+
| \`entity\` | string | One of the ${entityCount} supported entities (see below). |
|
|
244
|
+
| \`query\` | object | Optional match map. \`{"id":N}\` for load; omit or \`{}\` for list. |
|
|
245
|
+
|
|
246
|
+
JSON schemas are emitted by the SDK from the \`Args\` struct's \`json\` /
|
|
247
|
+
\`jsonschema\` tags — no schema is hand-written.
|
|
248
|
+
|
|
249
|
+
### Transports & flags
|
|
120
250
|
|
|
121
|
-
|
|
251
|
+
| Flag | Default | Purpose |
|
|
252
|
+
|------|---------|---------|
|
|
253
|
+
| \`-transport\` | \`stdio\` | \`stdio\` (spawnable) or \`http\` (streamable HTTP). |
|
|
254
|
+
| \`-addr\` | \`:8080\` | Listen address for the \`http\` transport. |
|
|
255
|
+
|
|
256
|
+
### Environment variables
|
|
257
|
+
|
|
258
|
+
| Variable | Purpose |
|
|
259
|
+
|----------|---------|
|
|
260
|
+
| \`${apiKeyEnv}\` | API key sent with every request. |
|
|
261
|
+
| \`${baseEnv}\` | Optional override of the API base URL. |
|
|
262
|
+
|
|
263
|
+
### Entities
|
|
264
|
+
|
|
265
|
+
The ${entityCount} ${entityNoun} valid as the \`entity\` argument:
|
|
266
|
+
|
|
267
|
+
${entityHelp}
|
|
268
|
+
|
|
269
|
+
### Smoke test via HTTP (raw JSON-RPC)
|
|
122
270
|
|
|
123
271
|
\`\`\`sh
|
|
124
|
-
./${
|
|
272
|
+
./${bin} -transport http -addr :18080 &
|
|
125
273
|
|
|
126
274
|
# initialize, grab the session id
|
|
127
275
|
curl -sN -X POST http://localhost:18080 \\
|
|
@@ -136,13 +284,34 @@ curl -sN -X POST http://localhost:18080 \\
|
|
|
136
284
|
-H 'Content-Type: application/json' \\
|
|
137
285
|
-H 'Accept: application/json, text/event-stream' \\
|
|
138
286
|
-H "Mcp-Session-Id: $SESSION" \\
|
|
139
|
-
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"${
|
|
287
|
+
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"${toolLoad}","arguments":{"entity":"${loadEntity}","query":{"id":1}}}}'
|
|
140
288
|
\`\`\`
|
|
141
289
|
|
|
290
|
+
## Explanation
|
|
291
|
+
|
|
292
|
+
### How tools map to the SDK
|
|
293
|
+
|
|
294
|
+
\`main.go\` builds the SDK client (configured from the environment) and registers
|
|
295
|
+
two tools. Each dispatches on the \`entity\` argument to the matching entity in
|
|
296
|
+
the sibling Go SDK at \`../go\`, calls \`List\` or \`Load\`, unwraps the \`Entity\`
|
|
297
|
+
wrappers to plain data, and returns it as pretty-printed JSON.
|
|
298
|
+
|
|
299
|
+
### Why two transports
|
|
300
|
+
|
|
301
|
+
**stdio** is the standard for agent hosts that spawn a server per client
|
|
302
|
+
(Claude Code's \`claude mcp add\`). **streamable HTTP** keeps one process running
|
|
303
|
+
that many agents can share — handy for a long-lived deployment.
|
|
304
|
+
|
|
305
|
+
### Schema generation
|
|
306
|
+
|
|
307
|
+
The input schema is derived from the \`Args\` Go struct's \`json\` / \`jsonschema\`
|
|
308
|
+
tags at registration time, so the advertised tool schema can never drift from
|
|
309
|
+
the code that consumes it.
|
|
310
|
+
|
|
142
311
|
## Generated by
|
|
143
312
|
|
|
144
|
-
sdkgen \`go-mcp\` target. See the target source under
|
|
145
|
-
|
|
313
|
+
sdkgen \`go-mcp\` target. See the target source under \`.sdk/src/cmp/go-mcp/\` in
|
|
314
|
+
this repo, or upstream at
|
|
146
315
|
\`github.com/voxgig/sdkgen/project/.sdk/src/cmp/go-mcp/\`.
|
|
147
316
|
`))
|
|
148
317
|
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { hsVarName } from './utility_haskell'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Haskell `Value` literal for a field's canonical type.
|
|
13
|
+
function hsLit(type: any, placeholder: string = 'example'): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'VNum 1'
|
|
16
|
+
if ('BOOLEAN' === k) return 'VBool True'
|
|
17
|
+
if ('ARRAY' === k || 'OBJECT' === k) return 'VNoval'
|
|
18
|
+
return `VStr "${placeholder}"`
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
// A readable Haskell type name for a field's canonical type. The runtime
|
|
23
|
+
// carries every field as a dynamic `Value`; this documents the logical type.
|
|
24
|
+
function hsType(type: any): string {
|
|
25
|
+
const k = canonKey(type)
|
|
26
|
+
if ('STRING' === k) return 'String'
|
|
27
|
+
if ('INTEGER' === k) return 'Int'
|
|
28
|
+
if ('NUMBER' === k) return 'Double'
|
|
29
|
+
if ('BOOLEAN' === k) return 'Bool'
|
|
30
|
+
if ('ARRAY' === k) return '[Value]'
|
|
31
|
+
return 'Value'
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
36
|
+
load: { method: 'eLoad ent match ctrl', desc: 'Load a single entity by match criteria.' },
|
|
37
|
+
list: { method: 'eList ent match ctrl', desc: 'List entities, optionally matching the given criteria.' },
|
|
38
|
+
create: { method: 'eCreate ent data ctrl', desc: 'Create a new entity with the given data.' },
|
|
39
|
+
update: { method: 'eUpdate ent data ctrl', desc: 'Update an existing entity.' },
|
|
40
|
+
remove: { method: 'eRemove ent match ctrl', desc: 'Remove the matching entity.' },
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
45
|
+
const { target } = props
|
|
46
|
+
const { model } = props.ctx$
|
|
47
|
+
|
|
48
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
49
|
+
|
|
50
|
+
const publishedEntities = each(entity)
|
|
51
|
+
.filter((entity: any) => entity.active !== false)
|
|
52
|
+
|
|
53
|
+
if (0 === publishedEntities.length) {
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
Content(`
|
|
58
|
+
|
|
59
|
+
## Entities
|
|
60
|
+
|
|
61
|
+
`)
|
|
62
|
+
|
|
63
|
+
publishedEntities.map((entity: any) => {
|
|
64
|
+
const opnames = Object.keys(entity.op || {})
|
|
65
|
+
const fields = entity.fields || []
|
|
66
|
+
const idF = entityIdField(entity)
|
|
67
|
+
const eFn = hsVarName(entity.name)
|
|
68
|
+
|
|
69
|
+
Content(`
|
|
70
|
+
### ${entity.Name}
|
|
71
|
+
|
|
72
|
+
`)
|
|
73
|
+
|
|
74
|
+
if (entity.short) {
|
|
75
|
+
Content(`${entity.short}
|
|
76
|
+
|
|
77
|
+
`)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
Content(`Create an instance: \`${eFn} <- Sdk.${eFn} sdk VNoval\`
|
|
81
|
+
|
|
82
|
+
`)
|
|
83
|
+
|
|
84
|
+
if (opnames.length > 0) {
|
|
85
|
+
Content(`#### Operations
|
|
86
|
+
|
|
87
|
+
| Method | Description |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
`)
|
|
90
|
+
opnames.map((opname: string) => {
|
|
91
|
+
const info = OP_DESC[opname]
|
|
92
|
+
if (info) {
|
|
93
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
94
|
+
`)
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
Content(`
|
|
99
|
+
`)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (fields.length > 0) {
|
|
103
|
+
Content(`#### Fields
|
|
104
|
+
|
|
105
|
+
| Field | Type | Description |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
`)
|
|
108
|
+
|
|
109
|
+
each(fields, (field: any) => {
|
|
110
|
+
const desc = field.short || ''
|
|
111
|
+
Content(`| \`${field.name}\` | \`${hsType(field.type)}\` | ${desc} |
|
|
112
|
+
`)
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
Content(`
|
|
116
|
+
`)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (opnames.includes('load')) {
|
|
120
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
121
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
122
|
+
.sort((a: any, b: any) =>
|
|
123
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
124
|
+
const loadArg = 0 < loadItems.length
|
|
125
|
+
? `[${loadItems.map((it: any) =>
|
|
126
|
+
`("${it.name}", ${hsLit(it.type,
|
|
127
|
+
it.name === idF ? entity.name + '_id' : it.name)})`).join(', ')}]`
|
|
128
|
+
: '[]'
|
|
129
|
+
Content(`#### Example: Load
|
|
130
|
+
|
|
131
|
+
\`\`\`haskell
|
|
132
|
+
ent <- Sdk.${eFn} sdk VNoval
|
|
133
|
+
match <- jo ${loadArg}
|
|
134
|
+
ctrl <- emptyMap
|
|
135
|
+
${eFn} <- Sdk.eLoad ent match ctrl
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
`)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (opnames.includes('list')) {
|
|
142
|
+
Content(`#### Example: List
|
|
143
|
+
|
|
144
|
+
\`\`\`haskell
|
|
145
|
+
ent <- Sdk.${eFn} sdk VNoval
|
|
146
|
+
match <- emptyMap
|
|
147
|
+
ctrl <- emptyMap
|
|
148
|
+
${eFn}s <- Sdk.eList ent match ctrl
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
`)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (opnames.includes('create')) {
|
|
155
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
156
|
+
.filter((it: any) => !it.optional)
|
|
157
|
+
Content(`#### Example: Create
|
|
158
|
+
|
|
159
|
+
\`\`\`haskell
|
|
160
|
+
ent <- Sdk.${eFn} sdk VNoval
|
|
161
|
+
d <- jo
|
|
162
|
+
[`)
|
|
163
|
+
createItems.map((it: any, i: number) => {
|
|
164
|
+
const bracket = 0 === i ? ' ' : ', '
|
|
165
|
+
Content(`${bracket}("${it.name}", ${hsLit(it.type, 'example_' + it.name)}) -- ${hsType(it.type)}
|
|
166
|
+
`)
|
|
167
|
+
})
|
|
168
|
+
Content(`]
|
|
169
|
+
ctrl <- emptyMap
|
|
170
|
+
${eFn} <- Sdk.eCreate ent d ctrl
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
`)
|
|
174
|
+
}
|
|
175
|
+
})
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
export {
|
|
180
|
+
ReadmeEntity
|
|
181
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, File, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Emits test/TReadmeExamples.hs — a STRUCTURAL gate over every fenced
|
|
6
|
+
// Haskell code block in the three docs that ship Haskell examples:
|
|
7
|
+
// - the root README.md (top-level, multi-language quick start)
|
|
8
|
+
// - the per-language haskell/README.md
|
|
9
|
+
// - the per-language haskell/REFERENCE.md
|
|
10
|
+
//
|
|
11
|
+
// DESIGN NOTE vs the Python gate (ReadmeExamplesTest_py.ts): the Python
|
|
12
|
+
// version parses AND executes every block in a seeded test-mode subprocess.
|
|
13
|
+
// A faithful Haskell port would compile every snippet against the generated
|
|
14
|
+
// SDK — a throwaway module per block plus a GHC invocation — a large,
|
|
15
|
+
// environment-sensitive harness that cannot be authored safely without a build
|
|
16
|
+
// to validate it. This gate instead validates that every documented Haskell
|
|
17
|
+
// block is PRESENT, non-empty, and STRUCTURALLY well-formed (balanced
|
|
18
|
+
// delimiters). Missing docs are tolerated (a run may generate a subset of
|
|
19
|
+
// phases), and no blocks found records no failures — so this never breaks the
|
|
20
|
+
// shared runner. Upgrading it to a true compile gate is left as a follow-up.
|
|
21
|
+
//
|
|
22
|
+
// The emitted module exposes `tests :: Counters -> IO ()`; the generated
|
|
23
|
+
// SdkGenTests calls it, so it runs inside the standard Runner. The triple
|
|
24
|
+
// backtick fence marker is built from its char code (toEnum 96) so this
|
|
25
|
+
// component's Haskell source needs no backtick/backslash gymnastics.
|
|
26
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
27
|
+
const { target, ctx$: { model } } = props
|
|
28
|
+
|
|
29
|
+
const Name = model.const.Name
|
|
30
|
+
|
|
31
|
+
File({ name: 'TReadmeExamples.' + target.ext }, () => {
|
|
32
|
+
Content(`-- ${Name} SDK — documentation Haskell-examples structural gate.
|
|
33
|
+
--
|
|
34
|
+
-- Validates that every fenced Haskell code block in the SDK docs (the root
|
|
35
|
+
-- README.md, the per-language README.md, and REFERENCE.md) is present,
|
|
36
|
+
-- non-empty, and has balanced delimiters. Missing docs are tolerated (a run
|
|
37
|
+
-- may generate a subset of phases), so this gate never breaks the shared
|
|
38
|
+
-- runner. See ReadmeExamplesTest_haskell for why this is a structural gate
|
|
39
|
+
-- rather than a full compile harness. Generated by @voxgig/sdkgen.
|
|
40
|
+
|
|
41
|
+
{-# LANGUAGE ScopedTypeVariables #-}
|
|
42
|
+
|
|
43
|
+
module TReadmeExamples (tests) where
|
|
44
|
+
|
|
45
|
+
import Control.Exception (SomeException, evaluate, try)
|
|
46
|
+
import Control.Monad (forM_)
|
|
47
|
+
|
|
48
|
+
import Testutil (Counters, runTest)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
-- True for the whitespace characters we trim: space, tab, carriage return.
|
|
52
|
+
isWs :: Char -> Bool
|
|
53
|
+
isWs ch = let n = fromEnum ch in n == 32 || n == 9 || n == 13
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
-- Trim leading/trailing whitespace from a line.
|
|
57
|
+
trimWs :: String -> String
|
|
58
|
+
trimWs = f . f
|
|
59
|
+
where f = reverse . dropWhile isWs
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
-- Read a doc file, tolerating absence (returns "" when missing/unreadable).
|
|
63
|
+
readDoc :: FilePath -> IO String
|
|
64
|
+
readDoc path = do
|
|
65
|
+
r <- try (do s <- readFile path; _ <- evaluate (length s); pure s)
|
|
66
|
+
:: IO (Either SomeException String)
|
|
67
|
+
pure (either (const "") id r)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
-- Extract the body of every fenced Haskell block from markdown. Returns
|
|
71
|
+
-- (blocks, allClosed) where allClosed is False when a fence was opened but
|
|
72
|
+
-- never closed before EOF — a malformed doc that must fail rather than pass
|
|
73
|
+
-- silently on the unterminated block. The fence marker (three backticks) is
|
|
74
|
+
-- built from its char code so this source stays backtick-free.
|
|
75
|
+
haskellBlocks :: String -> ([String], Bool)
|
|
76
|
+
haskellBlocks src = go (lines src)
|
|
77
|
+
where
|
|
78
|
+
fence3 = replicate 3 (toEnum 96 :: Char)
|
|
79
|
+
fenceHs = fence3 ++ "haskell"
|
|
80
|
+
go [] = ([], True)
|
|
81
|
+
go (l : ls)
|
|
82
|
+
| trimWs l == fenceHs =
|
|
83
|
+
case break (\\x -> trimWs x == fence3) ls of
|
|
84
|
+
(blk, []) -> ([unlines blk], False)
|
|
85
|
+
(blk, _ : rest) -> let (bs, ok) = go rest in (unlines blk : bs, ok)
|
|
86
|
+
| otherwise = go ls
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
-- Balanced (), [], {} outside of double-quoted string literals, with each
|
|
90
|
+
-- closer matching the most-recent opener via a stack (so "([)]" is rejected,
|
|
91
|
+
-- not merely counted). The generated snippets never embed an escaped quote
|
|
92
|
+
-- inside a string.
|
|
93
|
+
balanced :: String -> Bool
|
|
94
|
+
balanced = go False []
|
|
95
|
+
where
|
|
96
|
+
go inStr stack [] = not inStr && null stack
|
|
97
|
+
go inStr stack (c : cs)
|
|
98
|
+
| c == '"' = go (not inStr) stack cs
|
|
99
|
+
| inStr = go inStr stack cs
|
|
100
|
+
| c == '(' = go inStr (')' : stack) cs
|
|
101
|
+
| c == '[' = go inStr (']' : stack) cs
|
|
102
|
+
| c == '{' = go inStr ('}' : stack) cs
|
|
103
|
+
| c == ')' || c == ']' || c == '}' =
|
|
104
|
+
case stack of
|
|
105
|
+
(top : rest) | top == c -> go inStr rest cs
|
|
106
|
+
_ -> False
|
|
107
|
+
| otherwise = go inStr stack cs
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
-- The three documents held to the gate, tagged by human label.
|
|
111
|
+
docs :: [(String, FilePath)]
|
|
112
|
+
docs =
|
|
113
|
+
[ ("root README", "../README.md")
|
|
114
|
+
, ("${target.name} README", "README.md")
|
|
115
|
+
, ("${target.name} REFERENCE", "REFERENCE.md")
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
tests :: Counters -> IO ()
|
|
120
|
+
tests c =
|
|
121
|
+
forM_ docs (\\(label, path) -> do
|
|
122
|
+
src <- readDoc path
|
|
123
|
+
let (blocks, closed) = haskellBlocks src
|
|
124
|
+
runTest c (label ++ " haskell fences closed") (pure closed)
|
|
125
|
+
forM_ (zip [1 :: Int ..] blocks) (\\(i, blk) ->
|
|
126
|
+
runTest c (label ++ " haskell block " ++ show i ++ " well-formed")
|
|
127
|
+
(pure (not (null (trimWs blk)) && balanced blk))))
|
|
128
|
+
`)
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
export {
|
|
134
|
+
ReadmeExamplesTest
|
|
135
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
|
|
6
|
+
const { target, ctx$: { model } } = props
|
|
7
|
+
|
|
8
|
+
Content(`### Data as struct Values
|
|
9
|
+
|
|
10
|
+
The Haskell SDK models every API record as the dynamic \`Value\` type (from
|
|
11
|
+
the vendored \`VoxgigStruct\` module) rather than bespoke Haskell records.
|
|
12
|
+
This mirrors the dynamic nature of the API and keeps the SDK flexible — no
|
|
13
|
+
new datatypes or code generation are needed when the API schema changes.
|
|
14
|
+
|
|
15
|
+
Build request maps with \`jo [(key, value)]\` and read fields back with
|
|
16
|
+
\`getp value "field"\`; scalars are the \`VStr\` / \`VNum\` / \`VBool\`
|
|
17
|
+
constructors, and \`VNoval\` stands for an absent property.
|
|
18
|
+
|
|
19
|
+
### Module structure
|
|
20
|
+
|
|
21
|
+
\`\`\`
|
|
22
|
+
${target.name}/
|
|
23
|
+
├── src/
|
|
24
|
+
│ ├── VoxgigStruct.hs -- vendored dependency-free struct library (Value)
|
|
25
|
+
│ ├── Vregex.hs -- vendored regex support
|
|
26
|
+
│ ├── SdkTypes.hs -- core types (Client, Entity, Feature)
|
|
27
|
+
│ ├── SdkHelpers.hs -- helper functions (jo, getp, ...)
|
|
28
|
+
│ ├── SdkRuntime.hs -- the generic operation pipeline
|
|
29
|
+
│ ├── SdkFeatures.hs -- built-in features + makeEntity
|
|
30
|
+
│ ├── SdkConfig.hs -- generated API configuration + feature factory
|
|
31
|
+
│ └── SdkClient.hs -- generated public client (newSdk, entity accessors)
|
|
32
|
+
├── test/ -- test suites
|
|
33
|
+
├── Makefile -- stock-GHC build/test (no third-party deps)
|
|
34
|
+
└── ${model.const.Name.toLowerCase()}-sdk.cabal -- package manifest (for Hackage)
|
|
35
|
+
\`\`\`
|
|
36
|
+
|
|
37
|
+
The public module (\`SdkClient\`) exports the SDK constructors (\`newSdk\`,
|
|
38
|
+
\`testSdk\`) and one accessor per entity. Import \`VoxgigStruct\` for the
|
|
39
|
+
\`Value\` constructors and \`SdkHelpers\` for \`jo\` / \`getp\`.
|
|
40
|
+
|
|
41
|
+
`)
|
|
42
|
+
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
export {
|
|
47
|
+
ReadmeExplanation
|
|
48
|
+
}
|