scrybe-cli 0.6.3__tar.gz → 0.7.0__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 (107) hide show
  1. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/Cargo.lock +56 -14
  2. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/Cargo.toml +15 -13
  3. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/PKG-INFO +14 -3
  4. {scrybe_cli-0.6.3/scrybe-cli → scrybe_cli-0.7.0}/README.md +13 -2
  5. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/pyproject.toml +1 -1
  6. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-cli/Cargo.toml +8 -0
  7. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0/scrybe-cli}/README.md +13 -2
  8. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-cli/src/lib.rs +74 -2
  9. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-cli/src/main.rs +192 -21
  10. scrybe_cli-0.7.0/scrybe-cli/src/shell_command.rs +782 -0
  11. scrybe_cli-0.7.0/scrybe-cli/src/viewer.rs +283 -0
  12. scrybe_cli-0.7.0/scrybe-cli/tests/fixtures/render-default.html +12 -0
  13. scrybe_cli-0.7.0/scrybe-cli/tests/fixtures/render-input.md +7 -0
  14. scrybe_cli-0.7.0/scrybe-cli/tests/render_profile.rs +98 -0
  15. scrybe_cli-0.7.0/scrybe-core/build.rs +96 -0
  16. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/ast.rs +94 -4
  17. scrybe_cli-0.7.0/scrybe-core/src/build_info.rs +33 -0
  18. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/document.rs +7 -6
  19. scrybe_cli-0.7.0/scrybe-core/src/frontmatter.rs +117 -0
  20. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/lib.rs +2 -0
  21. scrybe_cli-0.7.0/scrybe-core/tests/ast_frontmatter.rs +78 -0
  22. scrybe_cli-0.7.0/scrybe-core/tests/frontmatter_fixtures.rs +66 -0
  23. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/README.md +1 -1
  24. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/pyproject.toml +1 -1
  25. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/src/server.rs +19 -5
  26. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/docx_packaging.rs +4 -0
  27. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/mcp_contract.rs +40 -24
  28. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/pyproject.toml +1 -1
  29. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/src/codec.rs +22 -0
  30. scrybe_cli-0.7.0/scrybe-ratatui/Cargo.toml +44 -0
  31. scrybe_cli-0.7.0/scrybe-ratatui/README.md +50 -0
  32. scrybe_cli-0.7.0/scrybe-ratatui/src/lib.rs +50 -0
  33. scrybe_cli-0.7.0/scrybe-ratatui/src/render.rs +1004 -0
  34. scrybe_cli-0.7.0/scrybe-ratatui/src/view.rs +646 -0
  35. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/Cargo.toml +1 -0
  36. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/html.rs +132 -75
  37. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/lib.rs +3 -2
  38. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/math.rs +18 -17
  39. scrybe_cli-0.7.0/scrybe-render/src/site.rs +130 -0
  40. scrybe_cli-0.7.0/scrybe-render/tests/fixtures/site/production.html +50 -0
  41. scrybe_cli-0.7.0/scrybe-render/tests/fixtures/site/production.md +55 -0
  42. scrybe_cli-0.7.0/scrybe-render/tests/frontmatter_fixtures.rs +39 -0
  43. scrybe_cli-0.7.0/scrybe-render/tests/render_correctness.rs +121 -0
  44. scrybe_cli-0.7.0/scrybe-render/tests/render_profiles.rs +176 -0
  45. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-rpc/Cargo.toml +6 -2
  46. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-rpc/README.md +8 -7
  47. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-rpc/src/client.rs +199 -16
  48. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-rpc/src/lib.rs +120 -12
  49. scrybe_cli-0.7.0/scrybe-rpc/src/transport.rs +44 -0
  50. scrybe_cli-0.7.0/scrybe-rpc/tests/windows_named_pipe.rs +150 -0
  51. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-rpc/tests/wire_contract.rs +2 -2
  52. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/Cargo.toml +1 -2
  53. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/figures.rs +317 -10
  54. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/lib.rs +4 -1
  55. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/tabs.rs +22 -2
  56. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/ui.rs +254 -11
  57. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/python/scrybe_cli/__init__.py +0 -0
  58. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/python/scrybe_cli/py.typed +0 -0
  59. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-cli/src/rpc_client.rs +0 -0
  60. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-cli/src/wrap.rs +0 -0
  61. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-cli/tests/rpc_socket.rs +0 -0
  62. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/Cargo.toml +0 -0
  63. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/README.md +0 -0
  64. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/change.rs +0 -0
  65. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/content.rs +0 -0
  66. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/error.rs +0 -0
  67. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/plugin.rs +0 -0
  68. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-core/src/workspace.rs +0 -0
  69. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/Cargo.toml +0 -0
  70. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/python/scrybe_mcp_server/__init__.py +0 -0
  71. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/python/scrybe_mcp_server/py.typed +0 -0
  72. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/src/lib.rs +0 -0
  73. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/src/main.rs +0 -0
  74. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/fixtures/call_invalid_args.json +0 -0
  75. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/fixtures/call_lint_success.json +0 -0
  76. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/fixtures/call_no_live_app.json +0 -0
  77. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/fixtures/call_remote_app_error.json +0 -0
  78. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/fixtures/call_unknown_tool.json +0 -0
  79. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mcp-server/tests/live_app_open.rs +0 -0
  80. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/Cargo.toml +0 -0
  81. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/README.md +0 -0
  82. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/python/scrybe_mermaid/__init__.py +0 -0
  83. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/python/scrybe_mermaid/py.typed +0 -0
  84. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/src/error.rs +0 -0
  85. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/src/lib.rs +0 -0
  86. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid/tests/test_python_quickstart.py +0 -0
  87. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid-render/Cargo.toml +0 -0
  88. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid-render/README.md +0 -0
  89. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid-render/examples/provenance_drive.rs +0 -0
  90. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-mermaid-render/src/lib.rs +0 -0
  91. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/README.md +0 -0
  92. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/mermaid.rs +0 -0
  93. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/theme.rs +0 -0
  94. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/themes/dark.css +0 -0
  95. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/themes/default.css +0 -0
  96. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-render/src/themes/solarized.css +0 -0
  97. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/README.md +0 -0
  98. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/examples/render_drive.rs +0 -0
  99. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/autolaunch.rs +0 -0
  100. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/lint.rs +0 -0
  101. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/schema.rs +0 -0
  102. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/editor.rs +0 -0
  103. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/export.rs +0 -0
  104. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/lint.rs +0 -0
  105. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/mermaid.rs +0 -0
  106. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/mod.rs +0 -0
  107. {scrybe_cli-0.6.3 → scrybe_cli-0.7.0}/scrybe-tools/src/tools/render.rs +0 -0
@@ -1060,6 +1060,12 @@ dependencies = [
1060
1060
  "syn 2.0.117",
1061
1061
  ]
1062
1062
 
1063
+ [[package]]
1064
+ name = "doctest-file"
1065
+ version = "1.1.1"
1066
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1067
+ checksum = "c2db04e74f0a9a93103b50e90b96024c9b2bdca8bce6a632ec71b88736d3d359"
1068
+
1063
1069
  [[package]]
1064
1070
  name = "dom_query"
1065
1071
  version = "0.27.0"
@@ -2200,6 +2206,19 @@ dependencies = [
2200
2206
  "syn 2.0.117",
2201
2207
  ]
2202
2208
 
2209
+ [[package]]
2210
+ name = "interprocess"
2211
+ version = "2.4.3"
2212
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2213
+ checksum = "798de1433ba514cc6c04c4144c2469af81396e4906195218737c776d47769572"
2214
+ dependencies = [
2215
+ "doctest-file",
2216
+ "libc",
2217
+ "recvmsg",
2218
+ "widestring",
2219
+ "windows-sys 0.61.2",
2220
+ ]
2221
+
2203
2222
  [[package]]
2204
2223
  name = "ipnet"
2205
2224
  version = "2.12.0"
@@ -3588,6 +3607,12 @@ version = "0.6.2"
3588
3607
  source = "registry+https://github.com/rust-lang/crates.io-index"
3589
3608
  checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
3590
3609
 
3610
+ [[package]]
3611
+ name = "recvmsg"
3612
+ version = "1.0.0"
3613
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3614
+ checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175"
3615
+
3591
3616
  [[package]]
3592
3617
  name = "redox_syscall"
3593
3618
  version = "0.5.18"
@@ -3915,7 +3940,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
3915
3940
 
3916
3941
  [[package]]
3917
3942
  name = "scrybe-app"
3918
- version = "0.6.3"
3943
+ version = "0.7.0"
3919
3944
  dependencies = [
3920
3945
  "anyhow",
3921
3946
  "dirs 5.0.1",
@@ -3943,25 +3968,29 @@ dependencies = [
3943
3968
 
3944
3969
  [[package]]
3945
3970
  name = "scrybe-cli"
3946
- version = "0.6.3"
3971
+ version = "0.7.0"
3947
3972
  dependencies = [
3948
3973
  "anyhow",
3949
3974
  "clap",
3975
+ "crossterm",
3976
+ "ratatui",
3950
3977
  "scrybe-core",
3951
3978
  "scrybe-mcp-server",
3952
3979
  "scrybe-mermaid",
3980
+ "scrybe-ratatui",
3953
3981
  "scrybe-render",
3954
3982
  "scrybe-rpc",
3955
3983
  "scrybe-tools",
3956
3984
  "serde",
3957
3985
  "serde_json",
3986
+ "tempfile",
3958
3987
  "tracing",
3959
3988
  "tracing-subscriber",
3960
3989
  ]
3961
3990
 
3962
3991
  [[package]]
3963
3992
  name = "scrybe-core"
3964
- version = "0.6.3"
3993
+ version = "0.7.0"
3965
3994
  dependencies = [
3966
3995
  "anyhow",
3967
3996
  "blake3",
@@ -3978,7 +4007,7 @@ dependencies = [
3978
4007
 
3979
4008
  [[package]]
3980
4009
  name = "scrybe-mcp-client"
3981
- version = "0.6.3"
4010
+ version = "0.7.0"
3982
4011
  dependencies = [
3983
4012
  "anyhow",
3984
4013
  "dirs 5.0.1",
@@ -3993,7 +4022,7 @@ dependencies = [
3993
4022
 
3994
4023
  [[package]]
3995
4024
  name = "scrybe-mcp-server"
3996
- version = "0.6.3"
4025
+ version = "0.7.0"
3997
4026
  dependencies = [
3998
4027
  "anyhow",
3999
4028
  "clap",
@@ -4013,7 +4042,7 @@ dependencies = [
4013
4042
 
4014
4043
  [[package]]
4015
4044
  name = "scrybe-mermaid"
4016
- version = "0.6.3"
4045
+ version = "0.7.0"
4017
4046
  dependencies = [
4018
4047
  "anyhow",
4019
4048
  "base64 0.22.1",
@@ -4030,7 +4059,7 @@ dependencies = [
4030
4059
 
4031
4060
  [[package]]
4032
4061
  name = "scrybe-mermaid-render"
4033
- version = "0.6.3"
4062
+ version = "0.7.0"
4034
4063
  dependencies = [
4035
4064
  "anyhow",
4036
4065
  "hex",
@@ -4040,7 +4069,7 @@ dependencies = [
4040
4069
 
4041
4070
  [[package]]
4042
4071
  name = "scrybe-py"
4043
- version = "0.6.3"
4072
+ version = "0.7.0"
4044
4073
  dependencies = [
4045
4074
  "anyhow",
4046
4075
  "pyo3",
@@ -4054,18 +4083,21 @@ dependencies = [
4054
4083
 
4055
4084
  [[package]]
4056
4085
  name = "scrybe-ratatui"
4057
- version = "0.6.3"
4086
+ version = "0.7.0"
4058
4087
  dependencies = [
4059
4088
  "ratatui",
4060
4089
  "scrybe-core",
4090
+ "syntect",
4091
+ "unicode-width 0.2.0",
4061
4092
  ]
4062
4093
 
4063
4094
  [[package]]
4064
4095
  name = "scrybe-render"
4065
- version = "0.6.3"
4096
+ version = "0.7.0"
4066
4097
  dependencies = [
4067
4098
  "anyhow",
4068
4099
  "pulldown-cmark",
4100
+ "regex",
4069
4101
  "scrybe-core",
4070
4102
  "serde",
4071
4103
  "syntect",
@@ -4075,18 +4107,21 @@ dependencies = [
4075
4107
 
4076
4108
  [[package]]
4077
4109
  name = "scrybe-rpc"
4078
- version = "0.6.3"
4110
+ version = "0.7.0"
4079
4111
  dependencies = [
4112
+ "interprocess",
4080
4113
  "serde",
4081
4114
  "serde_json",
4082
4115
  "thiserror 2.0.18",
4116
+ "windows-sys 0.61.2",
4083
4117
  ]
4084
4118
 
4085
4119
  [[package]]
4086
4120
  name = "scrybe-tools"
4087
- version = "0.6.3"
4121
+ version = "0.7.0"
4088
4122
  dependencies = [
4089
4123
  "anyhow",
4124
+ "base64 0.22.1",
4090
4125
  "scrybe-core",
4091
4126
  "scrybe-mermaid",
4092
4127
  "scrybe-mermaid-render",
@@ -4102,11 +4137,12 @@ dependencies = [
4102
4137
 
4103
4138
  [[package]]
4104
4139
  name = "scrybe-tui"
4105
- version = "0.6.3"
4140
+ version = "0.7.0"
4106
4141
  dependencies = [
4107
4142
  "anyhow",
4108
4143
  "clap",
4109
4144
  "crossterm",
4145
+ "open",
4110
4146
  "ratatui",
4111
4147
  "scrybe-core",
4112
4148
  "scrybe-ratatui",
@@ -4114,7 +4150,7 @@ dependencies = [
4114
4150
 
4115
4151
  [[package]]
4116
4152
  name = "scrybe-vcs"
4117
- version = "0.6.3"
4153
+ version = "0.7.0"
4118
4154
  dependencies = [
4119
4155
  "anyhow",
4120
4156
  "chrono",
@@ -6036,6 +6072,12 @@ dependencies = [
6036
6072
  "winsafe",
6037
6073
  ]
6038
6074
 
6075
+ [[package]]
6076
+ name = "widestring"
6077
+ version = "1.2.1"
6078
+ source = "registry+https://github.com/rust-lang/crates.io-index"
6079
+ checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
6080
+
6039
6081
  [[package]]
6040
6082
  name = "winapi"
6041
6083
  version = "0.3.9"
@@ -1,12 +1,12 @@
1
1
  [workspace]
2
2
  resolver = "2"
3
- members = ["scrybe-core", "scrybe-render", "scrybe-mcp-server", "scrybe-mermaid", "scrybe-mermaid-render", "scrybe-cli", "scrybe-rpc", "scrybe-tools"]
3
+ members = ["scrybe-core", "scrybe-render", "scrybe-mcp-server", "scrybe-mermaid", "scrybe-mermaid-render", "scrybe-cli", "scrybe-rpc", "scrybe-tools", "scrybe-ratatui"]
4
4
 
5
5
  # Shared package metadata. Every member inherits the version via
6
6
  # `version.workspace = true`, so a release bumps all crates in lock-step
7
7
  # from one place. (See RELEASE.md; issue #128.)
8
8
  [workspace.package]
9
- version = "0.6.3"
9
+ version = "0.7.0"
10
10
 
11
11
  # Workspace-level dependency pins keep all crates in lock-step.
12
12
  [workspace.dependencies]
@@ -45,6 +45,8 @@ clap = { version = "4", features = ["derive", "env"] }
45
45
  ratatui = "0.29"
46
46
  crossterm = "0.28"
47
47
  which = "7"
48
+ interprocess = "2.4.3"
49
+ windows-sys = { version = "0.61.2", features = ["Win32_Foundation", "Win32_System_Pipes"] }
48
50
 
49
51
  # PNG / image codec (scrybe-mermaid iTXt)
50
52
  png = "0.17"
@@ -60,17 +62,17 @@ tauri-build = { version = "2", features = [] }
60
62
  # Internal crates — version pinned (=) so cargo publish accepts the
61
63
  # tarballs (path-deps without versions are rejected at publish time).
62
64
  # Workspace lock-step: every release bumps all members together.
63
- scrybe-core = { path = "scrybe-core", version = "=0.6.3" }
64
- scrybe-render = { path = "scrybe-render", version = "=0.6.3" }
65
- scrybe-mcp-client = { path = "scrybe-mcp-client", version = "=0.6.3" }
66
- scrybe-mcp-server = { path = "scrybe-mcp-server", version = "=0.6.3" }
67
- scrybe-mermaid = { path = "scrybe-mermaid", version = "=0.6.3" }
68
- scrybe-vcs = { path = "scrybe-vcs", version = "=0.6.3" }
69
- scrybe-py = { path = "scrybe-py", version = "=0.6.3" }
70
- scrybe-rpc = { path = "scrybe-rpc", version = "=0.6.3" }
71
- scrybe-tools = { path = "scrybe-tools", version = "=0.6.3" }
72
- scrybe-ratatui = { path = "scrybe-ratatui", version = "=0.6.3" }
73
- scrybe-mermaid-render = { path = "scrybe-mermaid-render", version = "=0.6.3" }
65
+ scrybe-core = { path = "scrybe-core", version = "=0.7.0" }
66
+ scrybe-render = { path = "scrybe-render", version = "=0.7.0" }
67
+ scrybe-mcp-client = { path = "scrybe-mcp-client", version = "=0.7.0" }
68
+ scrybe-mcp-server = { path = "scrybe-mcp-server", version = "=0.7.0" }
69
+ scrybe-mermaid = { path = "scrybe-mermaid", version = "=0.7.0" }
70
+ scrybe-vcs = { path = "scrybe-vcs", version = "=0.7.0" }
71
+ scrybe-py = { path = "scrybe-py", version = "=0.7.0" }
72
+ scrybe-rpc = { path = "scrybe-rpc", version = "=0.7.0" }
73
+ scrybe-tools = { path = "scrybe-tools", version = "=0.7.0" }
74
+ scrybe-ratatui = { path = "scrybe-ratatui", version = "=0.7.0" }
75
+ scrybe-mermaid-render = { path = "scrybe-mermaid-render", version = "=0.7.0" }
74
76
 
75
77
  # Adopted pure-Rust Mermaid → SVG renderer (#132 spike-Pass, 2026-07-17).
76
78
  # SVG-only by default here; the `png` feature (resvg) is opted into per-crate.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scrybe-cli
3
- Version: 0.6.3
3
+ Version: 0.7.0
4
4
  Summary: Scrybe CLI — headless Markdown render/lint/mermaid tool (binary wheel)
5
5
  Home-Page: https://github.com/hartsock/scrybe
6
6
  License: Apache-2.0
@@ -21,7 +21,7 @@ the outside, Rust on the inside.
21
21
 
22
22
  ## What it does
23
23
 
24
- Provides a `scrybe` command-line tool with four primary subcommands plus a
24
+ Provides a `scrybe` command-line tool with a set of subcommands plus a
25
25
  bare invocation shortcut. The binary is self-contained — no Python runtime
26
26
  required at execution time when installed from the wheel.
27
27
 
@@ -36,7 +36,8 @@ also the launcher for the Tauri GUI app: `scrybe file.md` locates the
36
36
 
37
37
  | Command | Description |
38
38
  |---------|-------------|
39
- | `scrybe render [FILE]` | Render Markdown to HTML (stdin → stdout by default); `--theme`, `--full-html`, `--output` |
39
+ | `scrybe render [FILE]` | Render Markdown to HTML (stdin → stdout by default); `--theme`, `--profile app\|site` (default `app`), `--body-only`, `--full-html`, `--output` |
40
+ | `scrybe view FILE` | View a Markdown file in the terminal (single-pane TUI): j/k scroll, g/G top/bottom, q quits; requires a TTY (exits 2 in a pipe) |
40
41
  | `scrybe lint FILE` | Word count, headings, code blocks, broken links; `--json` for machine output; exits 1 if broken links found |
41
42
  | `scrybe mermaid embed PNG SOURCE` | Embed Mermaid source into PNG iTXt chunk |
42
43
  | `scrybe mermaid extract PNG` | Print embedded Mermaid source, verifying its SHA-256 by default; exit 2 if tampered, `--unverified` to skip the check (forensics) |
@@ -70,3 +71,13 @@ pip install target/wheels/scrybe_cli-*.whl
70
71
  cargo test -p scrybe-cli
71
72
  ```
72
73
 
74
+ ### Site HTML fragments
75
+
76
+ Use `scrybe render --profile site --body-only` with Markdown on stdin to write a
77
+ body-only HTML fragment on stdout for a site converter. The site profile enables
78
+ smart punctuation and keeps math delimiters literal. `--body-only` omits the theme
79
+ `<style>` block and conflicts with `--full-html`. Site uses unhighlighted,
80
+ production-shaped code blocks, ordinary Mermaid fences, automatic heading IDs,
81
+ and namespaced footnote IDs. HTML remains escaped. Without the new flags, output is
82
+ unchanged: the app dialect with theme CSS prepended. Unknown profiles are rejected.
83
+
@@ -11,7 +11,7 @@ the outside, Rust on the inside.
11
11
 
12
12
  ## What it does
13
13
 
14
- Provides a `scrybe` command-line tool with four primary subcommands plus a
14
+ Provides a `scrybe` command-line tool with a set of subcommands plus a
15
15
  bare invocation shortcut. The binary is self-contained — no Python runtime
16
16
  required at execution time when installed from the wheel.
17
17
 
@@ -26,7 +26,8 @@ also the launcher for the Tauri GUI app: `scrybe file.md` locates the
26
26
 
27
27
  | Command | Description |
28
28
  |---------|-------------|
29
- | `scrybe render [FILE]` | Render Markdown to HTML (stdin → stdout by default); `--theme`, `--full-html`, `--output` |
29
+ | `scrybe render [FILE]` | Render Markdown to HTML (stdin → stdout by default); `--theme`, `--profile app\|site` (default `app`), `--body-only`, `--full-html`, `--output` |
30
+ | `scrybe view FILE` | View a Markdown file in the terminal (single-pane TUI): j/k scroll, g/G top/bottom, q quits; requires a TTY (exits 2 in a pipe) |
30
31
  | `scrybe lint FILE` | Word count, headings, code blocks, broken links; `--json` for machine output; exits 1 if broken links found |
31
32
  | `scrybe mermaid embed PNG SOURCE` | Embed Mermaid source into PNG iTXt chunk |
32
33
  | `scrybe mermaid extract PNG` | Print embedded Mermaid source, verifying its SHA-256 by default; exit 2 if tampered, `--unverified` to skip the check (forensics) |
@@ -59,3 +60,13 @@ pip install target/wheels/scrybe_cli-*.whl
59
60
  # Run tests
60
61
  cargo test -p scrybe-cli
61
62
  ```
63
+
64
+ ### Site HTML fragments
65
+
66
+ Use `scrybe render --profile site --body-only` with Markdown on stdin to write a
67
+ body-only HTML fragment on stdout for a site converter. The site profile enables
68
+ smart punctuation and keeps math delimiters literal. `--body-only` omits the theme
69
+ `<style>` block and conflicts with `--full-html`. Site uses unhighlighted,
70
+ production-shaped code blocks, ordinary Mermaid fences, automatic heading IDs,
71
+ and namespaced footnote IDs. HTML remains escaped. Without the new flags, output is
72
+ unchanged: the app dialect with theme CSS prepended. Unknown profiles are rejected.
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "scrybe-cli"
7
- version = "0.6.3"
7
+ version = "0.7.0"
8
8
  description = "Scrybe CLI — headless Markdown render/lint/mermaid tool (binary wheel)"
9
9
  license = {text = "Apache-2.0"}
10
10
  readme = "README.md"
@@ -25,12 +25,20 @@ scrybe-mermaid.workspace = true
25
25
  scrybe-mcp-server.workspace = true
26
26
  scrybe-rpc.workspace = true
27
27
  scrybe-tools.workspace = true
28
+ # `scrybe view` (#162) renders through the published rendering crate —
29
+ # scrybe-cli must NOT depend on the unpublished scrybe-tui (#194).
30
+ scrybe-ratatui.workspace = true
28
31
  anyhow.workspace = true
29
32
  serde.workspace = true
30
33
  serde_json.workspace = true
31
34
  tracing.workspace = true
32
35
  tracing-subscriber.workspace = true
33
36
  clap.workspace = true
37
+ ratatui.workspace = true
38
+ crossterm.workspace = true
34
39
 
35
40
  [lints]
36
41
  workspace = true
42
+
43
+ [dev-dependencies]
44
+ tempfile = "3"
@@ -11,7 +11,7 @@ the outside, Rust on the inside.
11
11
 
12
12
  ## What it does
13
13
 
14
- Provides a `scrybe` command-line tool with four primary subcommands plus a
14
+ Provides a `scrybe` command-line tool with a set of subcommands plus a
15
15
  bare invocation shortcut. The binary is self-contained — no Python runtime
16
16
  required at execution time when installed from the wheel.
17
17
 
@@ -26,7 +26,8 @@ also the launcher for the Tauri GUI app: `scrybe file.md` locates the
26
26
 
27
27
  | Command | Description |
28
28
  |---------|-------------|
29
- | `scrybe render [FILE]` | Render Markdown to HTML (stdin → stdout by default); `--theme`, `--full-html`, `--output` |
29
+ | `scrybe render [FILE]` | Render Markdown to HTML (stdin → stdout by default); `--theme`, `--profile app\|site` (default `app`), `--body-only`, `--full-html`, `--output` |
30
+ | `scrybe view FILE` | View a Markdown file in the terminal (single-pane TUI): j/k scroll, g/G top/bottom, q quits; requires a TTY (exits 2 in a pipe) |
30
31
  | `scrybe lint FILE` | Word count, headings, code blocks, broken links; `--json` for machine output; exits 1 if broken links found |
31
32
  | `scrybe mermaid embed PNG SOURCE` | Embed Mermaid source into PNG iTXt chunk |
32
33
  | `scrybe mermaid extract PNG` | Print embedded Mermaid source, verifying its SHA-256 by default; exit 2 if tampered, `--unverified` to skip the check (forensics) |
@@ -59,3 +60,13 @@ pip install target/wheels/scrybe_cli-*.whl
59
60
  # Run tests
60
61
  cargo test -p scrybe-cli
61
62
  ```
63
+
64
+ ### Site HTML fragments
65
+
66
+ Use `scrybe render --profile site --body-only` with Markdown on stdin to write a
67
+ body-only HTML fragment on stdout for a site converter. The site profile enables
68
+ smart punctuation and keeps math delimiters literal. `--body-only` omits the theme
69
+ `<style>` block and conflicts with `--full-html`. Site uses unhighlighted,
70
+ production-shaped code blocks, ordinary Mermaid fences, automatic heading IDs,
71
+ and namespaced footnote IDs. HTML remains escaped. Without the new flags, output is
72
+ unchanged: the app dialect with theme CSS prepended. Unknown profiles are rejected.
@@ -7,6 +7,7 @@
7
7
  //! can be unit-tested without spawning a process.
8
8
 
9
9
  pub mod rpc_client;
10
+ pub mod viewer;
10
11
  pub mod wrap;
11
12
 
12
13
  // Re-export the primary public API for convenience. The linter now lives in
@@ -16,13 +17,54 @@ pub mod wrap;
16
17
  pub use scrybe_tools::lint::{lint_document, BrokenLink, LintReport};
17
18
  pub use wrap::wrap_full_html;
18
19
 
20
+ /// Markdown dialect accepted by `scrybe render --profile`.
21
+ #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, clap::ValueEnum)]
22
+ pub enum CliRenderProfile {
23
+ /// Desktop compatibility dialect.
24
+ #[default]
25
+ App,
26
+ /// Site dialect: smart punctuation, with math left literal.
27
+ Site,
28
+ }
29
+
30
+ /// Map CLI flags to the renderer dialect and fragment selection.
31
+ pub fn render_settings(
32
+ profile: CliRenderProfile,
33
+ body_only: bool,
34
+ ) -> (scrybe_render::RenderProfile, bool) {
35
+ let profile = match profile {
36
+ CliRenderProfile::App => scrybe_render::RenderProfile::App,
37
+ CliRenderProfile::Site => scrybe_render::RenderProfile::Site,
38
+ };
39
+ (profile, body_only)
40
+ }
41
+
42
+ /// Select the body, themed fragment, or full document without changing rendering.
43
+ ///
44
+ /// The clap shell rejects body-only plus full-HTML before calling this function.
45
+ pub fn select_render_output(
46
+ output: &scrybe_render::RenderOutput,
47
+ body_only: bool,
48
+ full_html_title: Option<&str>,
49
+ ) -> String {
50
+ if body_only {
51
+ output.body_html.clone()
52
+ } else if let Some(title) = full_html_title {
53
+ wrap_full_html(output, title)
54
+ } else {
55
+ output.html.clone()
56
+ }
57
+ }
58
+
19
59
  // ---------------------------------------------------------------------------
20
60
  // Version info
21
61
  // ---------------------------------------------------------------------------
22
62
 
23
- /// Returns the crate version string.
63
+ /// Returns the crate version string, including the Git commit the binary
64
+ /// was built from (and a `-dirty` marker if the worktree had local changes),
65
+ /// e.g. `0.6.3 (a1b2c3d4e5f6)`.
24
66
  pub fn version_string() -> &'static str {
25
- env!("CARGO_PKG_VERSION")
67
+ scrybe_core::build_info::VERSION_WITH_COMMIT
26
68
  }
27
69
 
28
70
  /// Returns a list of active Cargo feature flags (as a static string).
@@ -41,6 +83,36 @@ mod tests {
41
83
  use scrybe_core::Document;
42
84
  use scrybe_render::{render_html, Theme};
43
85
 
86
+ #[test]
87
+ fn render_flag_mapping() {
88
+ use crate::{render_settings, CliRenderProfile};
89
+ use scrybe_render::RenderProfile;
90
+ assert_eq!(CliRenderProfile::default(), CliRenderProfile::App);
91
+ for (flag, expected) in [
92
+ (CliRenderProfile::App, RenderProfile::App),
93
+ (CliRenderProfile::Site, RenderProfile::Site),
94
+ ] {
95
+ for body_only in [false, true] {
96
+ assert_eq!(render_settings(flag, body_only), (expected, body_only));
97
+ }
98
+ }
99
+ }
100
+
101
+ #[test]
102
+ fn render_output_selection() {
103
+ use crate::select_render_output;
104
+ let rendered = render_html(&Document::new("# Title"), Theme::Default);
105
+ assert_eq!(select_render_output(&rendered, false, None), rendered.html);
106
+ assert_eq!(
107
+ select_render_output(&rendered, true, None),
108
+ rendered.body_html
109
+ );
110
+ assert_eq!(
111
+ select_render_output(&rendered, false, Some("Title")),
112
+ wrap_full_html(&rendered, "Title")
113
+ );
114
+ }
115
+
44
116
  #[test]
45
117
  fn test_lint_word_count() {
46
118
  let doc = Document::new("Hello world foo bar");