multilingualprogramming 0.7.0__tar.gz → 0.8.1__tar.gz

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 (137) hide show
  1. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/PKG-INFO +1 -1
  2. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/__main__.py +274 -1
  3. multilingualprogramming-0.8.1/multilingualprogramming/codegen/js_generator.py +619 -0
  4. multilingualprogramming-0.8.1/multilingualprogramming/codegen/linear_manifest.py +96 -0
  5. multilingualprogramming-0.8.1/multilingualprogramming/codegen/midi_capture.py +156 -0
  6. multilingualprogramming-0.8.1/multilingualprogramming/codegen/midi_manifest.py +110 -0
  7. multilingualprogramming-0.8.1/multilingualprogramming/codegen/opcode_ontology.py +290 -0
  8. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_capabilities.py +140 -0
  9. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_core.py +1138 -0
  10. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_field_projection.py +257 -0
  11. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_graph_projection.py +295 -0
  12. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_migration.py +87 -0
  13. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_program.py +100 -0
  14. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_projection.py +279 -0
  15. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_sequence_projection.py +248 -0
  16. multilingualprogramming-0.8.1/multilingualprogramming/codegen/process_static_projection.py +200 -0
  17. multilingualprogramming-0.8.1/multilingualprogramming/codegen/projection_capabilities.py +37 -0
  18. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/runtime_builtins.py +125 -0
  19. multilingualprogramming-0.8.1/multilingualprogramming/codegen/semantic_core.py +213 -0
  20. multilingualprogramming-0.8.1/multilingualprogramming/codegen/sonic_capture.py +183 -0
  21. multilingualprogramming-0.8.1/multilingualprogramming/codegen/sonic_projection.py +134 -0
  22. multilingualprogramming-0.8.1/multilingualprogramming/codegen/spatial_capture.py +182 -0
  23. multilingualprogramming-0.8.1/multilingualprogramming/codegen/spatial_manifest.py +145 -0
  24. multilingualprogramming-0.8.1/multilingualprogramming/codegen/volumetric_manifest.py +104 -0
  25. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator.py +196 -5
  26. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_core.py +202 -24
  27. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_expression.py +110 -0
  28. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_manifest.py +39 -1
  29. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_orchestrator.py +20 -2
  30. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_runtime.py +715 -2
  31. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_support.py +11 -0
  32. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/lexer/lexer.py +46 -1
  33. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/ast_nodes.py +7 -1
  34. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/usm/builtins_aliases.json +360 -0
  35. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/version.py +1 -1
  36. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming.egg-info/PKG-INFO +1 -1
  37. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming.egg-info/SOURCES.txt +21 -0
  38. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/LICENSE +0 -0
  39. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/README.md +0 -0
  40. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/__init__.py +0 -0
  41. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/__init__.py +0 -0
  42. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/build_orchestrator.py +0 -0
  43. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/encoding_guard.py +0 -0
  44. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/executor.py +0 -0
  45. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/python_generator.py +0 -0
  46. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/repl.py +0 -0
  47. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/ui_lowering.py +0 -0
  48. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wasm_generator.py +0 -0
  49. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_loop.py +0 -0
  50. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_match.py +0 -0
  51. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_oop.py +0 -0
  52. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_print.py +0 -0
  53. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_generator_sequence.py +0 -0
  54. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/codegen/wat_ir_adapter.py +0 -0
  55. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/__init__.py +0 -0
  56. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/effects.py +0 -0
  57. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/ir_nodes.py +0 -0
  58. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/semantic_analyzer.py +0 -0
  59. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/semantic_lowering.py +0 -0
  60. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/types.py +0 -0
  61. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/core/validators.py +0 -0
  62. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/datetime/__init__.py +0 -0
  63. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/datetime/date_parser.py +0 -0
  64. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/datetime/mp_date.py +0 -0
  65. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/datetime/mp_datetime.py +0 -0
  66. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/datetime/mp_time.py +0 -0
  67. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/datetime/resource_loader.py +0 -0
  68. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/exceptions.py +0 -0
  69. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/imports.py +0 -0
  70. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/keyword/__init__.py +0 -0
  71. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/keyword/keyword_registry.py +0 -0
  72. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/keyword/keyword_validator.py +0 -0
  73. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/keyword/language_pack_validator.py +0 -0
  74. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/lexer/__init__.py +0 -0
  75. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/lexer/source_reader.py +0 -0
  76. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/lexer/token.py +0 -0
  77. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/lexer/token_types.py +0 -0
  78. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/__init__.py +0 -0
  79. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/abstract_numeral.py +0 -0
  80. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/complex_numeral.py +0 -0
  81. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/fraction_numeral.py +0 -0
  82. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/mp_numeral.py +0 -0
  83. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/numeral_converter.py +0 -0
  84. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/roman_numeral.py +0 -0
  85. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/numeral/unicode_numeral.py +0 -0
  86. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/__init__.py +0 -0
  87. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/ast_printer.py +0 -0
  88. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/error_messages.py +0 -0
  89. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/lexer.py +0 -0
  90. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/parser.py +0 -0
  91. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/parser/surface_normalizer.py +0 -0
  92. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/datetime/eras.json +0 -0
  93. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/datetime/formats.json +0 -0
  94. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/datetime/months.json +0 -0
  95. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/datetime/weekdays.json +0 -0
  96. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/parser/error_messages.json +0 -0
  97. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/repl/commands.json +0 -0
  98. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/usm/keywords.json +0 -0
  99. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/usm/operators.json +0 -0
  100. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/usm/schema.json +0 -0
  101. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/usm/surface_patterns.json +0 -0
  102. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/resources/usm/ui_lowering.json +0 -0
  103. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/__init__.py +0 -0
  104. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/ai_runtime.py +0 -0
  105. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/ai_types.py +0 -0
  106. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/anthropic_provider.py +0 -0
  107. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/backend_selector.py +0 -0
  108. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/channel.py +0 -0
  109. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/inference_cache.py +0 -0
  110. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/memory_store.py +0 -0
  111. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/model_registry.py +0 -0
  112. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/multimodal_runtime.py +0 -0
  113. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/numeric_primitives.py +0 -0
  114. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/observability.py +0 -0
  115. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/ollama_provider.py +0 -0
  116. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/openai_provider.py +0 -0
  117. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/placement.py +0 -0
  118. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/prompt_optimizer.py +0 -0
  119. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/python_fallbacks.py +0 -0
  120. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/reactive.py +0 -0
  121. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/retrieval_runtime.py +0 -0
  122. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/semantic_match.py +0 -0
  123. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/swarm.py +0 -0
  124. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/runtime/tool_runtime.py +0 -0
  125. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/source_extensions.py +0 -0
  126. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/unicode_string.py +0 -0
  127. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/wasm/loader.py +0 -0
  128. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/wasm/tuple_abi.py +0 -0
  129. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming/wasm/tuple_memory.py +0 -0
  130. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming.egg-info/dependency_links.txt +0 -0
  131. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming.egg-info/entry_points.txt +0 -0
  132. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming.egg-info/requires.txt +0 -0
  133. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/multilingualprogramming.egg-info/top_level.txt +0 -0
  134. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/pyproject.toml +0 -0
  135. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/setup.cfg +0 -0
  136. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/setup.py +0 -0
  137. {multilingualprogramming-0.7.0 → multilingualprogramming-0.8.1}/tests/tests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multilingualprogramming
3
- Version: 0.7.0
3
+ Version: 0.8.1
4
4
  Summary: Python application for multilingual programming
5
5
  Author-email: John Samuel <johnsamuelwrites@example.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -30,6 +30,7 @@ from multilingualprogramming.codegen.encoding_guard import (
30
30
  )
31
31
  from multilingualprogramming.codegen.build_orchestrator import BuildOrchestrator
32
32
  from multilingualprogramming.codegen.executor import ProgramExecutor
33
+ from multilingualprogramming.codegen.js_generator import JavaScriptCodeGenerator
33
34
  from multilingualprogramming.codegen.python_generator import PythonCodeGenerator
34
35
  from multilingualprogramming.codegen.repl import REPL
35
36
  from multilingualprogramming.codegen.wat_generator import WATCodeGenerator
@@ -49,6 +50,16 @@ from multilingualprogramming.source_extensions import (
49
50
  find_package_init,
50
51
  has_source_extension,
51
52
  )
53
+ from multilingualprogramming.codegen.linear_manifest import build_linear_manifest_file
54
+ from multilingualprogramming.codegen.midi_manifest import build_midi_manifest_file
55
+ from multilingualprogramming.codegen.opcode_ontology import write_ontology_manifest
56
+ from multilingualprogramming.codegen.semantic_core import build_semantic_core_file
57
+ from multilingualprogramming.codegen.process_program import build_process_core_file
58
+ from multilingualprogramming.codegen.sonic_projection import build_sonic_manifest_file
59
+ from multilingualprogramming.codegen.spatial_manifest import build_spatial_manifest_file
60
+ from multilingualprogramming.codegen.volumetric_manifest import (
61
+ build_volumetric_manifest_file,
62
+ )
52
63
  from multilingualprogramming.version import __version__
53
64
 
54
65
 
@@ -340,6 +351,19 @@ def cmd_build_wasm_bundle(args):
340
351
  print(f"[PASS] {outputs.build_lockfile}")
341
352
 
342
353
 
354
+ def cmd_build_browser_module(args):
355
+ """Build a browser-native ESM module for rich JSON-compatible output."""
356
+ program = _parse_program_from_file(args.file, args.lang)
357
+ exports = []
358
+ for item in getattr(args, "export", []) or []:
359
+ exports.extend(name.strip() for name in item.split(",") if name.strip())
360
+ module_source = JavaScriptCodeGenerator(exports=exports).generate(program)
361
+ out_path = Path(args.out)
362
+ out_path.parent.mkdir(parents=True, exist_ok=True)
363
+ out_path.write_text(module_source, encoding="utf-8")
364
+ print(f"[PASS] {out_path}")
365
+
366
+
343
367
  def cmd_build_ui_bundle(args):
344
368
  """Build a self-contained reactive UI bundle (HTML + JS)."""
345
369
  entry_file = Path(args.file)
@@ -367,6 +391,101 @@ def cmd_build_ui_bundle(args):
367
391
  print(f"[WARN] {diag}")
368
392
 
369
393
 
394
+ def cmd_spatial_build(args):
395
+ """Build a spatial JSON manifest from a Multilingual source file."""
396
+ manifest = build_spatial_manifest_file(
397
+ args.file,
398
+ args.out,
399
+ language=args.lang or "en",
400
+ )
401
+ print(f"[PASS] {args.out}")
402
+ print(f"[spatial] {manifest['kind']} entities={len(manifest['entities'])}")
403
+
404
+
405
+ def cmd_polymodal_build(args):
406
+ """Build a modality-free semantic core manifest from Multilingual source."""
407
+ core = build_semantic_core_file(
408
+ args.file,
409
+ args.out,
410
+ language=args.lang or "en",
411
+ )
412
+ print(f"[PASS] {args.out}")
413
+ print(f"[polymodal] {core['kind']} entities={len(core['entities'])}")
414
+
415
+
416
+ def cmd_process_build(args):
417
+ """Build a semantic-core-v1 process manifest from Multilingual source."""
418
+ core = build_process_core_file(
419
+ args.file,
420
+ args.out,
421
+ language=args.lang or "en",
422
+ )
423
+ state = core.get("state", {})
424
+ # A lattice program stores loci; a sequence (string-rewriting) program
425
+ # stores an ordered sequence. Report whichever this core carries.
426
+ if "sequence" in state:
427
+ size = f"symbols={len(state['sequence'])}"
428
+ else:
429
+ size = f"loci={len(state.get('loci', []))}"
430
+ print(f"[PASS] {args.out}")
431
+ print(
432
+ f"[process] {core['kind']} "
433
+ f"topology={core['topology'].get('kind')} "
434
+ f"schedule={core['schedule'].get('kind')} {size}"
435
+ )
436
+
437
+
438
+ def cmd_sonic_build(args):
439
+ """Build a sonic JSON manifest from a Multilingual source file."""
440
+ manifest = build_sonic_manifest_file(
441
+ args.file,
442
+ args.out,
443
+ language=args.lang or "en",
444
+ )
445
+ print(f"[PASS] {args.out}")
446
+ print(f"[sonic] {manifest['kind']} voices={len(manifest['voices'])}")
447
+
448
+
449
+ def cmd_ontology_export(args):
450
+ """Write the shared opcode ontology as JSON for browser runtimes."""
451
+ manifest = write_ontology_manifest(args.out)
452
+ print(f"[PASS] {args.out}")
453
+ print(f"[ontology] {manifest['kind']} opcodes={len(manifest['opcodes'])}")
454
+
455
+
456
+ def cmd_linear_build(args):
457
+ """Build a 1D linear JSON manifest from a Multilingual source file."""
458
+ manifest = build_linear_manifest_file(
459
+ args.file,
460
+ args.out,
461
+ language=args.lang or "en",
462
+ )
463
+ print(f"[PASS] {args.out}")
464
+ print(f"[linear] {manifest['kind']} marks={len(manifest['marks'])}")
465
+
466
+
467
+ def cmd_volumetric_build(args):
468
+ """Build a 3D volumetric JSON manifest from a Multilingual source file."""
469
+ manifest = build_volumetric_manifest_file(
470
+ args.file,
471
+ args.out,
472
+ language=args.lang or "en",
473
+ )
474
+ print(f"[PASS] {args.out}")
475
+ print(f"[volumetric] {manifest['kind']} marks={len(manifest['marks'])}")
476
+
477
+
478
+ def cmd_midi_build(args):
479
+ """Build a MIDI JSON manifest from a Multilingual source file."""
480
+ manifest = build_midi_manifest_file(
481
+ args.file,
482
+ args.out,
483
+ language=args.lang or "en",
484
+ )
485
+ print(f"[PASS] {args.out}")
486
+ print(f"[midi] {manifest['kind']} events={len(manifest['events'])}")
487
+
488
+
370
489
  def cmd_ir(args):
371
490
  """Lower a source file to semantic IR and print a summary."""
372
491
  program = _parse_program_from_file(args.file, args.lang)
@@ -576,7 +695,7 @@ def _maybe_dispatch_direct_file_run(argv):
576
695
  return True
577
696
 
578
697
 
579
- def main(): # pylint: disable=too-many-statements
698
+ def main(): # pylint: disable=too-many-statements,too-many-locals,too-many-branches
580
699
  """Run the CLI entry point and dispatch subcommands."""
581
700
  argv = sys.argv[1:]
582
701
  if _maybe_dispatch_direct_file_run(argv):
@@ -724,6 +843,35 @@ def main(): # pylint: disable=too-many-statements
724
843
  ),
725
844
  )
726
845
 
846
+ build_browser_module_parser = subparsers.add_parser(
847
+ "build-browser-module",
848
+ help="Build a browser-native ESM module for rich JSON-compatible functions",
849
+ )
850
+ build_browser_module_parser.add_argument("file", help="Path to the source file")
851
+ build_browser_module_parser.add_argument(
852
+ "--lang", default=None,
853
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
854
+ )
855
+ build_browser_module_parser.add_argument(
856
+ "--out", default="program.browser.mjs",
857
+ help="Output ESM module path (default: program.browser.mjs)",
858
+ )
859
+ build_browser_module_parser.add_argument(
860
+ "--export",
861
+ action="append",
862
+ default=[],
863
+ help=(
864
+ "Function to export. May be repeated or comma-separated. "
865
+ "If omitted, the module exposes call(name, ...args)."
866
+ ),
867
+ )
868
+ build_browser_module_parser.add_argument(
869
+ "--stub-module",
870
+ action="append",
871
+ default=[],
872
+ help="Deprecated compatibility flag; native JS generation does not load Python modules.",
873
+ )
874
+
727
875
  # build-ui-bundle subcommand
728
876
  build_ui_bundle_parser = subparsers.add_parser(
729
877
  "build-ui-bundle",
@@ -739,6 +887,113 @@ def main(): # pylint: disable=too-many-statements
739
887
  help="Output directory for generated artifacts (default: build/ui)",
740
888
  )
741
889
 
890
+ spatial_build_parser = subparsers.add_parser(
891
+ "spatial-build",
892
+ help="Build a fixed-semantic spatial JSON manifest",
893
+ )
894
+ spatial_build_parser.add_argument("file", help="Path to the source file")
895
+ spatial_build_parser.add_argument(
896
+ "--lang", default=None,
897
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
898
+ )
899
+ spatial_build_parser.add_argument(
900
+ "--out", default="program.spatial.json",
901
+ help="Output JSON manifest path (default: program.spatial.json)",
902
+ )
903
+
904
+ polymodal_build_parser = subparsers.add_parser(
905
+ "polymodal-build",
906
+ help="Build a modality-free semantic core manifest",
907
+ )
908
+ polymodal_build_parser.add_argument("file", help="Path to the source file")
909
+ polymodal_build_parser.add_argument(
910
+ "--lang", default=None,
911
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
912
+ )
913
+ polymodal_build_parser.add_argument(
914
+ "--out", default="program.semantic.json",
915
+ help="Output JSON manifest path (default: program.semantic.json)",
916
+ )
917
+
918
+ process_build_parser = subparsers.add_parser(
919
+ "process-build",
920
+ help="Build a semantic-core-v1 process manifest (dynamics as data)",
921
+ )
922
+ process_build_parser.add_argument("file", help="Path to the source file")
923
+ process_build_parser.add_argument(
924
+ "--lang", default=None,
925
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
926
+ )
927
+ process_build_parser.add_argument(
928
+ "--out", default="program.v1.json",
929
+ help="Output JSON manifest path (default: program.v1.json)",
930
+ )
931
+
932
+ sonic_build_parser = subparsers.add_parser(
933
+ "sonic-build",
934
+ help="Build a sonic projection JSON manifest",
935
+ )
936
+ sonic_build_parser.add_argument("file", help="Path to the source file")
937
+ sonic_build_parser.add_argument(
938
+ "--lang", default=None,
939
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
940
+ )
941
+ sonic_build_parser.add_argument(
942
+ "--out", default="program.sonic.json",
943
+ help="Output JSON manifest path (default: program.sonic.json)",
944
+ )
945
+
946
+ ontology_export_parser = subparsers.add_parser(
947
+ "ontology-export",
948
+ help="Write the shared opcode ontology JSON (for browser runtimes)",
949
+ )
950
+ ontology_export_parser.add_argument(
951
+ "--out", default="ontology.json",
952
+ help="Output JSON path (default: ontology.json)",
953
+ )
954
+
955
+ linear_build_parser = subparsers.add_parser(
956
+ "linear-build",
957
+ help="Build a 1D linear timeline JSON manifest",
958
+ )
959
+ linear_build_parser.add_argument("file", help="Path to the source file")
960
+ linear_build_parser.add_argument(
961
+ "--lang", default=None,
962
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
963
+ )
964
+ linear_build_parser.add_argument(
965
+ "--out", default="program.linear.json",
966
+ help="Output JSON manifest path (default: program.linear.json)",
967
+ )
968
+
969
+ volumetric_build_parser = subparsers.add_parser(
970
+ "volumetric-build",
971
+ help="Build a 3D volumetric JSON manifest",
972
+ )
973
+ volumetric_build_parser.add_argument("file", help="Path to the source file")
974
+ volumetric_build_parser.add_argument(
975
+ "--lang", default=None,
976
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
977
+ )
978
+ volumetric_build_parser.add_argument(
979
+ "--out", default="program.volumetric.json",
980
+ help="Output JSON manifest path (default: program.volumetric.json)",
981
+ )
982
+
983
+ midi_build_parser = subparsers.add_parser(
984
+ "midi-build",
985
+ help="Build a MIDI event JSON manifest",
986
+ )
987
+ midi_build_parser.add_argument("file", help="Path to the source file")
988
+ midi_build_parser.add_argument(
989
+ "--lang", default=None,
990
+ help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
991
+ )
992
+ midi_build_parser.add_argument(
993
+ "--out", default="program.midi.json",
994
+ help="Output JSON manifest path (default: program.midi.json)",
995
+ )
996
+
742
997
  # ir subcommand
743
998
  ir_parser = subparsers.add_parser(
744
999
  "ir", help="Show the semantic IR for a source file"
@@ -803,8 +1058,26 @@ def main(): # pylint: disable=too-many-statements
803
1058
  cmd_encoding_check_generated(args)
804
1059
  elif args.command == "build-wasm-bundle":
805
1060
  cmd_build_wasm_bundle(args)
1061
+ elif args.command == "build-browser-module":
1062
+ cmd_build_browser_module(args)
806
1063
  elif args.command == "build-ui-bundle":
807
1064
  cmd_build_ui_bundle(args)
1065
+ elif args.command == "spatial-build":
1066
+ cmd_spatial_build(args)
1067
+ elif args.command == "polymodal-build":
1068
+ cmd_polymodal_build(args)
1069
+ elif args.command == "process-build":
1070
+ cmd_process_build(args)
1071
+ elif args.command == "sonic-build":
1072
+ cmd_sonic_build(args)
1073
+ elif args.command == "ontology-export":
1074
+ cmd_ontology_export(args)
1075
+ elif args.command == "linear-build":
1076
+ cmd_linear_build(args)
1077
+ elif args.command == "volumetric-build":
1078
+ cmd_volumetric_build(args)
1079
+ elif args.command == "midi-build":
1080
+ cmd_midi_build(args)
808
1081
  elif args.command == "ir":
809
1082
  cmd_ir(args)
810
1083
  elif args.command == "explain":