Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
7a4987f
Restore scoped document presentation without regressing v0.10 visuals
JoshuaPurtell Sep 10, 2026
704146d
Require exact-package human consent for persistent template imports
JoshuaPurtell Sep 10, 2026
d2184ee
Restore bounded optimizer snapshot export import and retrieval
JoshuaPurtell Sep 10, 2026
bd5589c
Restore approved user-template authoring and live TSX rendering
JoshuaPurtell Sep 10, 2026
7a81260
Restore live approval inspection and human-only digest resolution
JoshuaPurtell Sep 10, 2026
0099cb6
Bind approval clicks to the proposal digest shown to the operator
JoshuaPurtell Sep 10, 2026
6a53eed
Serialize configuration mutations and atomically preserve settings
JoshuaPurtell Sep 10, 2026
93fb986
Restore project grant persistence and reject discovery symlink escapes
JoshuaPurtell Sep 10, 2026
f9960a2
Restore native project source inspection and picker commands
JoshuaPurtell Sep 10, 2026
3bced39
Persist project source requests and journal human decisions
JoshuaPurtell Sep 10, 2026
f6f4838
Bind source approvals to native picker and compensate failed grants
JoshuaPurtell Sep 10, 2026
1d9277f
Restore workspace source controls and pending approval UX
JoshuaPurtell Sep 10, 2026
f3d24b5
Enforce executable source grants through discovery and queued launch
JoshuaPurtell Sep 10, 2026
9ae2982
Restore host stream receipts and evidence-based visual readiness
JoshuaPurtell Sep 10, 2026
5475499
Freeze observed live evidence into offline visual artifacts
JoshuaPurtell Sep 10, 2026
99b397f
Verify cached Trace projection archive bytes before replay
JoshuaPurtell Sep 10, 2026
8398310
Render atomic host live evidence without stale response rollback
JoshuaPurtell Sep 10, 2026
a274659
Embed certified user source and verify captured Trace offline seals
JoshuaPurtell Sep 10, 2026
900b2e2
Pin browser and native live folds to shared reference cases
JoshuaPurtell Sep 10, 2026
81607fa
Declare the packaged browser dependency independently of test tooling
JoshuaPurtell Sep 10, 2026
7421b04
Merge pull request #99 from synth-laboratories/codex/v010-main-docume…
JoshuaPurtell Sep 10, 2026
be352a1
Port persisted annotation reviews without replacing current visual state
JoshuaPurtell Sep 10, 2026
4155416
Recover Report drafts and guard save navigation and seal races
JoshuaPurtell Sep 10, 2026
0e8e114
Pin source builds and managed MLX runtime to consolidated compatibili…
JoshuaPurtell Sep 10, 2026
005a84d
Prepare immutable 0.10.1 candidate and guard runtime pin and version …
JoshuaPurtell Sep 10, 2026
a8fd670
Merge pull request #102 from synth-laboratories/codex/consolidate-wor…
JoshuaPurtell Sep 10, 2026
543aec7
fix(session): fence late Codex notifications after Stop
JoshuaPurtell Sep 10, 2026
10691d1
Merge pull request #105 from synth-laboratories/codex/product-consoli…
JoshuaPurtell Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/synth_desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@synth/synth-desktop",
"version": "0.10.0",
"version": "0.10.1",
"private": true,
"description": "Synth Workshop \u2014 local-first research engineering workbench",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion apps/synth_desktop/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/synth_desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "synth-desktop"
version = "0.10.0"
version = "0.10.1"
description = "Synth Workshop Tauri host"
edition = "2021"
default-run = "synth-desktop"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fn request(method: &str, path: &str, body: Option<Value>) -> Result<Value, Strin

pub(crate) fn tools() -> Value {
let mut manifest = json!({"tools":[
{"name":"optimizer_manage","description":"Operate Synth optimizer runs and the checkpoint catalog. Inline evaluation is the default: draft and inspect the immutable spec, then start it with bounded approval. Catalog recipes are only for an explicit catalog request.","inputSchema":{"type":"object","x-workshop-caller-session-path":"/arguments/session_ref","properties":{"operation":{"type":"string","enum":["evaluation_spec_draft","evaluation_spec_validate","evaluation_spec_admit","evaluation_start","reconcile_evaluation_evidence","list_algorithms","list_recipes","start_workflow","prepare","open_visual","await_ready","start","start_recipe","stage_eval_candidates","launch_artifact_inference","inspect_local_mlx","inspect_training_runtime","install_training_runtime","plan_model_install","install_model_or_runtime","create_training_plan","list_training_artifacts","inspect_training_artifact","launch_artifact_eval","export_or_delete_artifact","list_runs","get_run","watch_run","get_state","get_result","reconcile_cloud","cancel_run","cancel","pause_run","resume_run","finalize","list_checkpoints","archive_checkpoint","import_checkpoint","infer_checkpoint","update_checkpoint","publish_checkpoint"]},"arguments":{"type":"object","additionalProperties":true}},"required":["operation","arguments"],"additionalProperties":false}},
{"name":"optimizer_manage","description":"Operate Synth optimizer runs and the checkpoint catalog. Inline evaluation is the default: draft and inspect the immutable spec, then start it with bounded approval. Catalog recipes are only for an explicit catalog request.","inputSchema":{"type":"object","x-workshop-caller-session-path":"/arguments/session_ref","properties":{"operation":{"type":"string","enum":["evaluation_spec_draft","evaluation_spec_validate","evaluation_spec_admit","evaluation_start","reconcile_evaluation_evidence","list_algorithms","list_recipes","start_workflow","prepare","open_visual","await_ready","start","start_recipe","stage_eval_candidates","launch_artifact_inference","inspect_local_mlx","inspect_training_runtime","install_training_runtime","plan_model_install","install_model_or_runtime","create_training_plan","list_training_artifacts","inspect_training_artifact","launch_artifact_eval","export_or_delete_artifact","export_snapshot","import_snapshot","get_snapshot","list_runs","get_run","watch_run","get_state","get_result","reconcile_cloud","cancel_run","cancel","pause_run","resume_run","finalize","list_checkpoints","archive_checkpoint","import_checkpoint","infer_checkpoint","update_checkpoint","publish_checkpoint"]},"arguments":{"type":"object","additionalProperties":true}},"required":["operation","arguments"],"additionalProperties":false}},
{"name":"optimizer_list_algorithms","description":"List optimizer algorithms and availability","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},
{"name":"optimizer_list_recipes","description":"List workspace-declared recipes for this session plus remaining product training recipes. Task GEPA/eval ids come from workshop.recipe.toml, never a shipped catalog.","inputSchema":{"type":"object","properties":{"session_ref":{"type":"string"}},"additionalProperties":false}},
{"name":"optimizer_evaluation_spec_draft","description":"Default evaluation path. Construct, validate, pin, and hash an inline execution specification from the requested container, policy, model, seeds, and hard limits. Does not request approval or spend.","inputSchema":{"type":"object","properties":{"containerId":{"type":"string"},"family":{"type":"string"},"policyNamespace":{"type":"string"},"policyName":{"type":"string"},"policyOverrides":{"type":"object"},"provider":{"type":"string"},"modelId":{"type":"string"},"seeds":{"type":"array","items":{"type":"integer"},"minItems":1},"maximumRollouts":{"type":"integer","minimum":1},"maximumModelCallsPerRollout":{"type":"integer","minimum":1},"maximumStepsPerRollout":{"type":"integer","minimum":1},"hardTotalCostUsd":{"type":"number","exclusiveMinimum":0}},"required":["policyNamespace","policyName","provider","modelId","seeds","maximumRollouts","maximumModelCallsPerRollout","maximumStepsPerRollout","hardTotalCostUsd"],"additionalProperties":false}},
Expand Down Expand Up @@ -200,7 +200,7 @@ pub(crate) fn call_tool(name: &str, args: &Value) -> Result<Value, String> {
let nested = args.get("arguments").cloned().unwrap_or_else(|| json!({}));
let allow_path = matches!(
operation,
"import_local" | "create_run" | "import_checkpoint"
"import_local" | "create_run" | "import_checkpoint" | "import_snapshot"
);
reject_secret_keys(&nested, allow_path)?;
if operation.starts_with("evaluation_") {
Expand All @@ -213,6 +213,9 @@ pub(crate) fn call_tool(name: &str, args: &Value) -> Result<Value, String> {
"evaluation_start" => "optimizer_evaluation_start",
"reconcile_evaluation_evidence" => "optimizer_reconcile_evaluation_evidence",
"list_algorithms" => "optimizer_list_algorithms",
"export_snapshot" => "optimizer_export_snapshot",
"import_snapshot" => "optimizer_import_snapshot",
"get_snapshot" => "optimizer_get_snapshot",
"list_recipes" => "optimizer_list_recipes",
"start_workflow" => "optimizer_start_workflow",
"prepare" => "optimizer_prepare",
Expand Down Expand Up @@ -661,6 +664,11 @@ mod tests {
let catalog = tools();
let tools = catalog["tools"].as_array().unwrap();
assert!(tools.iter().any(|tool| tool["name"] == "optimizer_manage"));
let manager = tools.iter().find(|tool| tool["name"] == "optimizer_manage").unwrap();
let operations = manager.pointer("/inputSchema/properties/operation/enum").unwrap().as_array().unwrap();
for operation in ["export_snapshot", "import_snapshot", "get_snapshot"] {
assert!(operations.contains(&json!(operation)), "missing {operation}");
}
let encoded = catalog.to_string();
assert!(!encoded.contains("gepa.banking77."));
assert!(!encoded.contains("eval.banking77.baseline.v1"));
Expand Down
9 changes: 9 additions & 0 deletions apps/synth_desktop/src-tauri/src/contract/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ impl Commands {
pub const CODEX_THREAD_ITEMS_LIST: &'static str = "codex_thread_items_list";
pub const CODEX_TURN_STEER: &'static str = "codex_turn_steer";
pub const CODEX_APPROVAL_RESOLVE: &'static str = "codex_approval_resolve";
pub const APPROVALS_PENDING: &'static str = "approvals_pending";
pub const APPROVALS_APPROVE_DIGEST: &'static str = "approvals_approve_digest";
pub const CODEX_SESSION_CLOSE: &'static str = "codex_session_close";
pub const ACCOUNT_BEGIN_SIGN_IN: &'static str = "account_begin_sign_in";
pub const ACCOUNT_POLL_SIGN_IN: &'static str = "account_poll_sign_in";
Expand All @@ -52,6 +54,13 @@ impl Commands {
pub const MODEL_MULTI_AGENT_LIST: &'static str = "model_multi_agent_list";
pub const MODEL_MULTI_AGENT_UPDATE: &'static str = "model_multi_agent_update";
pub const WORKSPACE_ACCESS_GET: &'static str = "workspace_access_get";
pub const WORKSPACE_READ_FILE: &'static str = "workspace_read_file";
pub const WORKSPACE_LIST_DIR: &'static str = "workspace_list_dir";
pub const DOCUMENT_SHOW: &'static str = "document_show";
pub const VISUALS_TEMPLATE_SHELL_SOURCE: &'static str = "visuals_template_shell_source";
pub const VISUALS_TEMPLATE_SAVE: &'static str = "visuals_template_save";
pub const VISUALS_TEMPLATE_CREATE: &'static str = "visuals_template_create";
pub const VISUALS_TEMPLATE_VALIDATE: &'static str = "visuals_template_validate";
pub const WORKSPACE_ACCESS_UPDATE: &'static str = "workspace_access_update";
pub const WORKSPACE_SCOPE_GET: &'static str = "workspace_scope_get";
pub const WORKSPACE_SCOPE_CHOOSE_AND_ATTACH: &'static str = "workspace_scope_choose_and_attach";
Expand Down
Loading
Loading