fix: clean up some problems from the implementations
This commit is contained in:
@@ -20,7 +20,7 @@ The project is under active development. Core blogging workflows are broadly ava
|
|||||||
- Local MCP automation over stdio or a localhost-only stateless HTTP endpoint, with project resources, read/search/count tools, inert write proposals, explicit desktop approval, and opt-in Claude Code/Copilot configuration.
|
- Local MCP automation over stdio or a localhost-only stateless HTTP endpoint, with project resources, read/search/count tools, inert write proposals, explicit desktop approval, and opt-in Claude Code/Copilot configuration.
|
||||||
- A fully localized Ratatui terminal workspace, available locally through `bds-cli tui`/`BDS_MODE=tui` and remotely through authenticated SSH shell sessions, with shared post/template/script editing and publishing, project/search/command overlays, settings, tags, Git, reports, task progress, live multi-client locale updates, and airplane-mode AI gating.
|
- A fully localized Ratatui terminal workspace, available locally through `bds-cli tui`/`BDS_MODE=tui` and remotely through authenticated SSH shell sessions, with shared post/template/script editing and publishing, project/search/command overlays, settings, tags, Git, reports, task progress, live multi-client locale updates, and airplane-mode AI gating.
|
||||||
- `bds-cli server` hosting the shared application engines over a loopback-by-default, public-key-only SSH service, with restrictive private key material, live authorization updates, terminal-session transport, CLI-change synchronization, ordered domain/task events, and native desktop remote-project selection.
|
- `bds-cli server` hosting the shared application engines over a loopback-by-default, public-key-only SSH service, with restrictive private key material, live authorization updates, terminal-session transport, CLI-change synchronization, ordered domain/task events, and native desktop remote-project selection.
|
||||||
- bDS2-compatible Markdown/Liquid rendering with native macros, canonical multilingual and flat page routes, recursive menus, calendar archives, feeds, a root hreflang sitemap, Pagefind, and incremental site generation through cancellable section task groups.
|
- bDS2-compatible Markdown/Liquid rendering with native macros, descriptive category archive titles, canonical multilingual and flat page routes, recursive menus, calendar archives, feeds, a root hreflang sitemap, Pagefind, and incremental site generation through cancellable section task groups.
|
||||||
- Navigable generated-route preview in the app or system browser, with draft database overlays and published filesystem content.
|
- Navigable generated-route preview in the app or system browser, with draft database overlays and published filesystem content.
|
||||||
- Optional one-shot AI translation, description, analysis, taxonomy, and language-detection operations run in background tasks with editor-level waiting indicators, using independent online and local OpenAI-compatible profiles. Each profile has secure credentials, persistently discovered chat/title/image model selections, explicit tool/vision overrides, chat testing, and status-bar airplane-mode routing.
|
- Optional one-shot AI translation, description, analysis, taxonomy, and language-detection operations run in background tasks with editor-level waiting indicators, using independent online and local OpenAI-compatible profiles. Each profile has secure credentials, persistently discovered chat/title/image model selections, explicit tool/vision overrides, chat testing, and status-bar airplane-mode routing.
|
||||||
- Persistent conversational AI with safe Markdown, streamed and cancellable responses, model/session/token tracking, bounded project-aware blog tools, and localized conversation management in the Chat workspace. Allowlisted render tools add persistent native cards, charts, forms, lists, metrics, mind maps, tables, and tabs without executing assistant-provided HTML or JavaScript.
|
- Persistent conversational AI with safe Markdown, streamed and cancellable responses, model/session/token tracking, bounded project-aware blog tools, and localized conversation management in the Chat workspace. Allowlisted render tools add persistent native cards, charts, forms, lists, metrics, mind maps, tables, and tabs without executing assistant-provided HTML or JavaScript.
|
||||||
|
|||||||
@@ -915,7 +915,9 @@ fn terminate_child(child: &mut std::process::Child) {
|
|||||||
let _ = child.kill();
|
let _ = child.kill();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prepend_tool_paths(_command: &mut Command) {
|
fn prepend_tool_paths(command: &mut Command) {
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
let _ = command;
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
{
|
{
|
||||||
let mut paths = vec![
|
let mut paths = vec![
|
||||||
|
|||||||
@@ -674,6 +674,12 @@ fn build_language_routes(
|
|||||||
|
|
||||||
for (category, records) in category_posts {
|
for (category, records) in category_posts {
|
||||||
let slug = slugify(&category);
|
let slug = slugify(&category);
|
||||||
|
let display_name = category_settings
|
||||||
|
.get(&category)
|
||||||
|
.and_then(|settings| settings.title.as_deref())
|
||||||
|
.map(str::trim)
|
||||||
|
.filter(|title| !title.is_empty())
|
||||||
|
.unwrap_or(&category);
|
||||||
routes.extend(paginated_route_specs(
|
routes.extend(paginated_route_specs(
|
||||||
&records,
|
&records,
|
||||||
per_page,
|
per_page,
|
||||||
@@ -682,7 +688,7 @@ fn build_language_routes(
|
|||||||
language_root_prefix(language, metadata)
|
language_root_prefix(language, metadata)
|
||||||
),
|
),
|
||||||
page_title.clone(),
|
page_title.clone(),
|
||||||
Some(json!({"kind": "category", "name": category})),
|
Some(json!({"kind": "category", "name": display_name})),
|
||||||
category_settings
|
category_settings
|
||||||
.get(&category)
|
.get(&category)
|
||||||
.and_then(|settings| settings.list_template_slug.clone()),
|
.and_then(|settings| settings.list_template_slug.clone()),
|
||||||
|
|||||||
@@ -609,7 +609,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
|||||||
db.conn(),
|
db.conn(),
|
||||||
&make_list_template(
|
&make_list_template(
|
||||||
"featured-list",
|
"featured-list",
|
||||||
"FEATURED:{% for day_block in day_blocks %}{% for post in day_block.posts %}[{{ post.title }}|{{ post.show_title }}]{% endfor %}{% endfor %}",
|
"FEATURED:{% if archive_context %}{% if archive_context.kind == 'category' %}{{ archive_context.name }}{% endif %}{% endif %}:{% for day_block in day_blocks %}{% for post in day_block.posts %}[{{ post.title }}|{{ post.show_title }}]{% endfor %}{% endfor %}",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@@ -629,7 +629,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
|||||||
(
|
(
|
||||||
"featured".to_string(),
|
"featured".to_string(),
|
||||||
CategorySettings {
|
CategorySettings {
|
||||||
title: None,
|
title: Some("Featured Archive".to_string()),
|
||||||
render_in_lists: true,
|
render_in_lists: true,
|
||||||
show_title: false,
|
show_title: false,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
@@ -692,7 +692,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
|||||||
|
|
||||||
let featured_html =
|
let featured_html =
|
||||||
std::fs::read_to_string(dir.path().join("category/featured/index.html")).unwrap();
|
std::fs::read_to_string(dir.path().join("category/featured/index.html")).unwrap();
|
||||||
assert!(featured_html.contains("FEATURED:[Featured Post|false]"));
|
assert!(featured_html.contains("FEATURED:Featured Archive:[Featured Post|false]"));
|
||||||
|
|
||||||
let rss = std::fs::read_to_string(dir.path().join("rss.xml")).unwrap();
|
let rss = std::fs::read_to_string(dir.path().join("rss.xml")).unwrap();
|
||||||
assert!(rss.contains("hidden-post"));
|
assert!(rss.contains("hidden-post"));
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ fn preview_post_target() -> &'static Mutex<Option<String>> {
|
|||||||
|
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
fn title_bar_metrics() -> Value {
|
fn title_bar_metrics() -> Value {
|
||||||
json!({"macos_left_inset": 72})
|
serde_json::json!({"macos_left_inset": 72})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "macos"))]
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ surface PublishingPreferencesSurface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
value CategoryRenderSettings {
|
value CategoryRenderSettings {
|
||||||
|
title: String?
|
||||||
render_in_lists: Boolean
|
render_in_lists: Boolean
|
||||||
show_title: Boolean
|
show_title: Boolean
|
||||||
post_template_slug: String?
|
post_template_slug: String?
|
||||||
|
|||||||
Reference in New Issue
Block a user