[pull] master from GaijinEntertainment:master#999
Merged
Conversation
Adds Boris's "Internal tools" blog post under site/blog/_posts/ and four new mouse-data/docs/ cards surfaced while landing the dasImgui harness + headless initiative (separate PR on borisbat/dasImgui). Mouse cards: - daslang-private-require-structural-symbol-gate — the wrapper-module pattern where private requires keep GLFW/GL symbols out of user scope, used by imgui_harness to make lint guarantees structural instead of comment-only. - dasimgui-new-widget-module-needs-das-module-entry — `.das_module` registration is mandatory for new sibling modules under modules/dasImgui/widgets/; new file alone won't resolve via `require imgui/<name>`. - daslang-script-flags-need-dash-dash-separator — script-side flags via `daslang FILE.das -- --flag` (the `--` is required in interpreter mode); daslang-live doesn't pass argv to scripts. - why-does-my-dastest-integration-test-hang-at-readiness-gate-failed ... — captures the require-order land-mine surfaced during imgui_harness PR 2 verification: `live/live_api` required before `imgui_app + glfw_live` makes `wait_until_ready` time out from a popen parent even though external curl gets 200. Workaround: reorder requires. Filed as daslang #2677. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ds batch
Extract a single transport-agnostic JSON-RPC 2.0 implementation under
`daslib/jsonrpc` and migrate both in-tree callers onto it. Picks up
JSON-RPC §6 batch (multiple messages in one wire payload) for both
transports. Adds a parallel batch path on the live HTTP transport for
the dasimgui state-control workflow.
Library (daslib/jsonrpc.das):
- Server: parse_request / parse_batch / dispatch_line + envelope helpers
(response, error, error_with_data, serialize_id).
- Client: make_request (int + string id) / make_notification / make_batch /
parse_response / parse_response_batch.
- Standard error code constants (PARSE_ERROR ... INTERNAL_ERROR).
- Permissive jsonrpc-field handling by default, opt-in strict=true for
full §4 compliance.
- compact_json_whitespace transport-framing helper.
- 120 [test] cases under tests/jsonrpc/ across 10 spec-section-aligned
files. Includes a gc_node reachability test for the borrowed-view
ParsedRequest.params field (no `root` field needed; daslib JsonValue
is a plain raw pointer tracked by gc_node, not smart_ptr).
Migrations:
- modules/dasLiveHost/live/live_api_stdio.das: drops 5 duplicate
publics (-148 lines); handle_jsonrpc_line is now a thin
jsonrpc::dispatch_line bridge to live_host's dispatch_command.
tests/live_host/test_live_api_stdio.das deleted (coverage subsumed
by tests/jsonrpc/).
- utils/mcp/protocol.das: 25 call sites swept onto jsonrpc::*;
dispatch_jsonrpc rewritten on parse_batch + a new dispatch_one
helper. The MCP server now accepts JSON-RPC §6 batched tools/call
requests as a side effect.
HTTP `/commands` + live_commands MCP tool:
- modules/dasLiveHost/live/live_api.das: new POST /commands endpoint —
body is a JSON array of {name,args} objects, response is a JSON array
of per-entry results in input order. Continue-on-error: malformed
entries surface {"error":...} in their slot. Concrete consumer is
dasimgui state-control bursts.
- utils/mcp/tools/live.das + utils/mcp/protocol.das: new live_commands
MCP tool wrapping the /commands endpoint.
Examples + tutorials + docs:
- examples/mcp/echo/: minimal client (clargs-driven, Demo + Emit
modes) + server + README. Pipes end-to-end.
- tutorials/jsonrpc/: three tutorials (request-response, dispatch_line,
batch). CMake install hook registered.
- doc/reflections/das2rst.das: document_module_jsonrpc registration.
- doc/source/stdlib/handmade/module-jsonrpc.rst (handmade prose) +
doc/source/stdlib/sec_data_formats.rst toctree entry.
- doc/source/reference/tutorials/jsonrpc_*.rst (3 tutorial RSTs) +
toctree section in tutorials.rst.
- doc/source/reference/utils/daslang_live.rst: rewritten stdio API
section to point at daslib/jsonrpc; documented new POST /commands
endpoint.
- mouse-data/docs/...json-rpc...md: rewritten as canonical pointer to
daslib/jsonrpc (was "two parallel implementations" history note).
Sphinx -W builds clean. All 120 jsonrpc tests pass; live_host
test_commands (17/17) and test_lifecycle (14/14) regression-clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- tests/aot/CMakeLists.txt: register test_aot_jsonrpc target — the tests/jsonrpc/*.das files were running via the AOT-driven test_aot driver but had no AOT stubs generated, so every test failed error[50101] AOT link failed on the Mac Release builds. Adds the standard FILE(GLOB) + DAS_AOT + source-list + dependency wiring. - utils/mcp/protocol.das: restore request-body logging. The refactor hard-coded log_request(method, "") losing the JSON body for every incoming MCP call; thread body through dispatch_one so REQ log output keeps parity with pre-refactor behaviour. - tests/jsonrpc/test_parse_single.das: comment said "smart_ptr" but JsonValue? is a plain raw pointer tracked by gc_node — reword. - mouse-data card: last_verified bumped to 2026-05-16 (was earlier than created date). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-blog-may15 docs + mouse: blog "Internal tools" + 4 new mouse cards
daslib/jsonrpc: unified JSON-RPC 2.0 library + §6 batch + live_commands batch
…uments Mirrors daslang.exe behavior. daslang-live ignored everything after `--` itself but never called setCommandLineArguments, so the script's get_user_args() (post-`--` slice) returned empty. Unblocks dasImgui harness `--headless` under live-reload — harness_is_headless() reads `--headless` via get_user_args() and was unreachable from a daslang-live session before this. Spawned playwright tests can now run headless without xvfb on Linux CI (follow-up PR in dasImgui repo). Smoke: daslang-live foo.das -- --headless --headless-frames=60 hello -> script's get_user_args() returns ["--headless", "--headless-frames=60", "hello"] Help-text update reflects the new forwarding behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e-forward-argv daslang-live: forward post-`--` argv to scripts
Adds new CLI flag and CodeOfPolicies::log_module_compile_time field that emits a per-module compile-time breakdown (parse / infer + pass count / optimize / macro / macro-mods) for every required module, plus a simulate-time line with the owning module name. Useful for diagnosing which submodule dominates compile time on large module graphs (motivating case: profiling a daspkg-installed dasImgui). - include/daScript/ast/ast.h: new policy field + Program::inferPassesUsed - src/ast/ast_infer_type.cpp: record outer macro pass count after inferTypes loop - src/ast/ast_parse.cpp: per-phase local accumulators in parseDaScript; new per-module breakdown log; extend top-level summary gate - src/ast/ast_simulate.cpp: simulate hook now logs module name and fires on either log_total_compile_time or log_module_compile_time - src/builtin/module_builtin_rtti.cpp: register log_module_compile_time for RTTI so daslib/rst.das + das2rst see the field - utils/daScript/main.cpp: -log-compile-time argv + policies wiring (both getPolicies() and compile_and_run paths) + help text - doc/source/stdlib/handmade/structure_annotation-rtti-CodeOfPolicies.rst: add description for the new field; also fix a pre-existing missing description for max_call_depth that was silently shifting ~30 later field descriptions up by one in generated/rtti.rst - doc/source/reference/language/options.rst: row in options table - mouse-data/docs/: 3 new cards for the discoveries during this work (CodeOfPolicies-field full checklist, das2rst handmade positional mapping + silent-shift trap, daslang CLI flag wiring), plus a carryover JSON-cast card from a prior session Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-time-cli daslang: -log-compile-time CLI flag for per-module compile diagnostics
build_blog.py already emits site/blog/feed.xml with every post, but
nothing pointed at it — no <link rel="alternate"> for reader auto-
discovery, no visible link on the index. Adds both:
- <link rel="alternate" type="application/atom+xml"> in template.html
<head>, so it lands on every generated page (blog index, post pages,
changelist, news pages). {{root}} resolves to the right relative path
for each.
- An inline "RSS" text link at the end of the blog index intro
paragraph. Reuses Forge link styling, no new CSS.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
site/blog: surface the existing Atom feed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )