Releases
v2.1.1
Compare
Sorry, something went wrong.
No results found
release: macos-13 → macos-15-intel for the Intel mac legs
cli leg: pass GITHUB_TOKEN to the build for postgresql_embedded
viewer install.sh: build @objectiveai/function-tree before tauri build
fix v2.1.1 release legs: unix flock fds, mcp features, viewer dep, leg cp paths
Merge pull request #222 from ObjectiveAI/release-2.1.1
release: bump all packages to 2.1.1
cli tools run: resolve relative exec paths against the version dir; regen snapshot
sdk-rs: bound request_message_ids arbitrary generation to JS-safe i64s
root build: add function-tree to build graph, fix viewer vote adapter; regenerate all SDK outputs
sdk json_schema: register PR #220 's 17 new cli types; title tasks.run.ResponseItem variants
Merge pull request #220 from ObjectiveAI/cli-tasks-rework
mcp: refresh plugin/tool run input-schema descriptions
sdk-rs: arbitrary Decimal divides its f32 sample by 10^13 (true hard bound)
sdk-rs: scale arbitrary Decimal's f32 sample down by 1_000
cli: agents queue deliver — wake queue-pending descendants
cli: tasks run --stream-all — full streaming vs per-task success summaries
cli: tasks runs+logs — versioned rows, race-free claim, run log writer
cli: tasks run — fixed caller-subtree scope, dispatch via crate::run, plugin-aware ctx, 4-field envelope
cli: tasks list on Target pattern; per-target concurrent streaming; unlimited default
json-schema-builder: objectify bare true schemas in all schema positions
cli: tasks schedule — per-AIH uniqueness, plugin triple, overwrite + version
cli: run plugin-originated commands in-process, forbid plugins/tools
sdk json_schema: register tools::get::Exec; regenerate after cli-tasks-rework merge
Merge remote-tracking branch 'origin/cli-tasks-rework'
sdk+schemas: title agents.message Response/ResponseItem variants; regenerate
cli: rework plugin/tool storage, run/get surface, and plugin-path context
sdk json_schema: module-aligned feature blocks, dedup, complete cli coverage
no feature gate agent arguments
cli: add agents instances get, remove me, list -> direct children
Merge remote-tracking branch 'origin/main' into cli-tasks-rework
cli: implement agents instances list
test scripts: uniform hardened api-server spawn/reap + standardize viewer snapshot env var
objectiveai-api tests: set request_message_ids on response chunk inits
cli: add 'me' target to logs/queue readers
sdk: add missing request_message_ids to AssistantResponseChunk test fixtures
cli test.sh: reap spawned api server, fix summary miscount
cli tests: green suite + harness fixes (seed→dangerous_advanced, function_name, snapshot bridge)
Merge pull request #208 from ObjectiveAI/maya/web
cli: authorize agents queue delete by sender hierarchy
cli+sdk: postgres tcp bootstrap, seed → dangerous_advanced, tool function_name in logs
db query: arbitrary single-statement read-only SQL with token budget (#219 )
json-schema-builder: forbid single-variant anyOf with a titled lone variant
agents/logs: collapse single-variant Request/ResponseItem to read aliases
agents logs read all: surface message_queue.key on ClientNotification
mcp-proxy: in-process queue delegate with token-based delivery confirmation (#218 )
ReadMessageQueueResult: per-row shape
cli+sdk: hoist tasks to a root-level command
queue read pending: surface message_queue.id as delete_id
agents logs read subscribe: first-ping-or-go-inactive wait loop
unify queue read pending with logs read all + thread sender AIH
logs: wire agents logs read all + read pending to LogItem blocks
queue: soft-delete via active flag + LogWriter logs MessageQueueContent rows
move queue-row signal from ClearMessageQueue RPC to request_message_ids on chunk
logs: drop is_input column from the two video content tables
agents logs read id: media variants become tuple variants, drop is_input
agents logs read id: typed 10-variant Response, no serde_json::Value
logs::lookup_session: read continuation from agent_continuations, not the response blob
db: agent_continuations registry — per-chunk upsert in the yielder loops
spawn + functions runner: gate Id emission on LogWriter.written_once
logs: LogWriter written_once / wait_written_once
logs: LogWriter owns the coalescing listener task; write is sync
logs: drop dead agent_instance_hierarchy column from agent_completion_responses
agents message: --enqueue / --enqueue-with-key
cli+sdk: hoist spawn/message out of instances, add agents/logs/read, rename message_queue → queue
tags: tag_groups table + spawn-by-tag + conduit-driven upgrade
spawn + message: message field is required (drop Option wrapper)
agents instances message: rename SpawnId/SpawnChunk to match spawn's variants
agents instances message: stream-aware delivery with file-lock + DB race
sdk+cli: agents instances message message field is now optional (no-op when None)
sdk+cli: spawn prompt: Option<Vec<Message>> -> message: Option<RichContent>
cli: drop spawn-time message_queue drain (API pulls via conduit)
cli: collapse agents-spawn multi-hierarchy bookkeeping to single capture
cli: inline functions execute; delete instance/ + subprocess plumbing
cli: consolidate shared modules under websockets/
cli: drop RunItem; run() returns ResponseItem stream directly
cli: agents spawn stream=false now self-respawns via BinaryExecutor
sdk: add BinaryExecutor::detach(bool) for orphan-survival spawns
sdk+cli: make agents instances spawn prompt optional
cli: move shared modules out of instance/
cli: agents spawn now runs in-process with message-queue restart
cli: rename prompts db tier to message_queue
cli: propagate AgentInstanceRegistry::new failures instead of swallowing
cli: keep claim file persistent on unix; flock state is source of truth
cli: fix TOCTOU race in unix claim-file reclaim path
cli: per-agent process-owned lock files in instance subprocess
cli: rename functions executions create -> functions execute
cli: drop vestigial caller_agent_instance_hierarchy from LogWriter
cli: drop redundant bucket_list Vec in writer.write
cli: per-agent sequential dispatch; request blob loses agent hierarchy
cli: drop explicit "index" + nextval() from writer CTEs
cli: collapse logs.messages_index_seq into BIGSERIAL on the column
cli: reorder assistant-row emission — refusal last, reasoning first
cli: bring back messages + messages_queue, downgrade-on-update semantics
cli: fan out streaming-content row writes concurrently
cli: remove messages / queue / pending / schema surface; rewire logs writer
cli: drop unused mime_guess and ratatui deps; tighten writer.write_notification doc
cli: drop unused blob_fingerprint call at end of writer.write
cli: implement db::logs::writer body — iterator-driven streaming UPSERTs
cli: move all log types + walkers into objectiveai-cli; drop SDK logs module
sdk+cli: log_rows iterator API; delete legacy *Log struct types
cli: replace logs schema with hybrid blob + streaming-content design
cli: postgres logs schema + log_reader role
sdk+cli: postgres-backed log shapes; drop filesystem logs tree
sdk: drop function-invention log types (#217 )
cli: remove function invention; tracked by #217
cli: remove instance unix sockets entirely
cli: drop pg_hba.conf rewrite; auth with the fixed initdb password
cli: scrub stale filesystem::db::* doc-link references (post-stage 11)
cli: inline schema into db::init, drop migrations dir + fix initdb password
cli: db::tasks sqlx impls — schedules table (stage 9)
cli: db::prompts sqlx impls — the big one (stage 8)
cli: db::messages Queue sqlx impls (stage 7)
cli: db::tags sqlx impls (stage 6)
cli: db::schema sqlx impls — messages/files primitives (stage 5)
cli: db::init pool/migration runner + 0001_initial_schema.sql (stage 2)
cli: scaffold db/ + drop filesystem/db/ + sqlite→sqlx callsite fan-out (stage 1, big-bang)
cli: switch postgresql_embedded to bundled + drop default features
cli: cross-platform embedded postgres bootstrap (unix socket + windows tcp loopback)
cli: stage 1 embedded postgres bootstrap
sdk+cli+api: remove AgentCompletionNotify path; agents instances message becomes pure enqueue
api+sdk+cli: queue drain now flows through the WS reverse-attach
Merge branch 'main' of https://github.com/ObjectiveAI/objectiveai
cleanup
api snapshots: regenerate vector_completions + functions_executions client_tests
sdk+cli: add read_message_queue / clear_message_queue server requests
cli: drop apply-tag-as-side-effect from agents instances message
cli: agents tags apply --agent-tag <src> aliases an existing tag
cli: rename agents tags add -> agents tags apply; three-way Target enum
treewide: recover utf-8 punctuation in source files
cli: move agents {spawn,message,read,me,list/active} under agents/instances/; flatten agents/list
cli tests: ride the agents → agents instances command refactor
sdk-js: rebuild dist/ + wasm loader
agents tasks run: ship the typed-ResponseItem execute path
sdk-js: prune mcp + client_objectiveai_mcp generated trees
vote: regenerate JSON schema + sdk-js zod export
vector_completion: replace Vote.agent (hierarchy) with agent_full_id + agent_id
json-schema: drop mcp / client_objectiveai_mcp from published set + ban bare null properties
Revert "sdk-go: roundtrip preserves type:null fields via nullType tag"
api: share one test api server across all integration binaries
api: tune nextest retries to 3× exp 2s/10s; sdk-js: rebuild wasm
sdk-go: roundtrip preserves type:null fields via nullType tag
Revert "sdk-rs: bound arbitrary Decimal to ±1000 to dodge AddAssign overflow"
sdk-rs: bound arbitrary Decimal to ±1000 to dodge AddAssign overflow
sdk-go: roundtrip emits anyOf for sum-type variants; api: test.sh --no-fail-fast
vector_completion: strip per-process suffix from Vote.agent in normalize
api: bump nextest retries to exponential 1s/10s × 5
sdk-py: escape stdlib top-level package names; api: limit nextest parallelism
mcp-proxy: return 404 from handle_delete uncached path when payload is empty
json-schema: unregister logs::*::ResponseItem tier aggregates
sdk-py: escape py keywords + relocate file/dir path collisions + docstring fix
sdk-go: fix type X X self-alias bug + regen
json-schema: unregister tier-aggregate ResponseItems
sdk-go: regenerate from updated JSON schemas
viewer: update cli_command_config_viewer_get snapshot to untagged ResponseItem
test-fixtures: add serde_json preserve_order to both mcp-plugin Cargo.tomls
sdk-rs json_schema_coverage: register LookupState, shorten message_log_reference renames
json_schema.rs: register all transitively-referenced cli command types
viewer/test.sh: share the rustpython-only cli binary with the cli suite
agents_duplicate_server_names_e2e: proxy disambiguates colliding serverInfo.name
cli: agents tasks run + required schedule --name; wire id = "{name}-{db_id}"
agents_duplicate_tool_names_e2e: bump SEED to 13 for ≥2 unique tool calls
cli: humantime-format interval on agents tasks list ResponseItem
cli: agents tasks list + required description on schedule
Merge remote-tracking branch 'origin/main' into maya/web
cli: rename schedules.last_invoked_at → last_ran_at
cli: add last_invoked_at column to schedules
test_twenty_agents_json_schema_10x_tools_seed_42: install the 10 fixture tools
items reset timeout
cli: add --oneshot to agents tasks schedule; make interval optional
cli: agents tasks schedule — register a command + interval in tasks.sqlite
instance/streaming: react to log_ready_id_rx via select! in main chunk loop
cli: agents message-queue deliver — parallel fan-out drain
IndexedLogReference: optional path + optional error for empty-id wrappers
plugin executor: derive Clone (counter goes behind Arc)
sdk: adjacently tag agents read id Response with type/value
log_file_kind tests: update id_with_internal_underscore to assistant-prefixed path
Merge pull request #215 from ObjectiveAI/drop-message-queue-key-migration
cli: drop prompts.key ALTER migration
Merge pull request #214 from ObjectiveAI/add-message-queue-key
cli: --key upsert for agents message-queue add (closes #213 )
recursive invention snapshot tests: align cli body with SDK shape
Merge pull request #212 from ObjectiveAI/add-message-enqueue
Merge remote-tracking branch 'origin/main' into add-message-enqueue
cli: move message-queue list → message-queue read pending (#211 )
viewer: fix plugins list Request field for path -> path_type rename
mcp-proxy: fix session_manager test for slimmed SessionPayload
logs: role-split messages command tree + role-tagged master-chunk refs
cli: rename queue → message-queue + add delete leaf (#211 )
cli: Error::DrainLost preserves both errors on re-enqueue failure (#211 )
cli logs: complete role-subdir classification, drop dead bare classifiers
cli: drop rollback_drain eprintln helper
cli: re-enqueue drained queue items on spawn/message failure (#211 )
cli: drain queue into spawn and message pre-instance (#211 )
instance/streaming: emit LogStreamReady first by buffering chunks
cli: simplify queue payload to one RichContent per row (#211 )
cli prepare.sh: also seed the shared _mcp_session/tools/ registry
cli: inline-SQLite queue content + agents queue read id leaf (#211 )
tests: migrate agents-read-all callers to targets/Target
tests: migrate agents-message + agents-spawn callers to MessageTarget/agent_tag
Revert "cli command/agents/message.rs: accept Chunk-first from instance subprocess"
instance/streaming: emit LogStreamReady from the chunk loop, ahead of any Chunk
cli: fix Windows handle-inheritance leak, plugin orphans, message Chunk ordering, and stale snapshots
cli: merge prompt-queue into tags.sqlite, add agents queue list, hoist Absent to top-level Response variant (#211 )
cli: add agents queue add (write-only enqueue) with Direct-existence + Tag pass-through (#211 )
Merge pull request #210 from ObjectiveAI/add-agent-tags
Merge branch 'main' into add-agent-tags
cli: agents message target → MessageTarget enum (Direct | Tag) with tag-resolution mode
cli: surface bound tags on agents me
cli tests: add HangPreventingBinaryCommandExecutor with 60s CONFIG_BASE_DIR watchdog
cli snapshot tests: match the 3-SDK canonical comparison pattern
cli: tag-based targets in agents read + multi-tag lookup with explicit pending state
agents/message: add dangerous_advanced.stream, mirroring agents/spawn
cli: agents read all/pending — repeated --target flag with docker-style instance=L[,parent=P] syntax
cli: agents read subscribe — mirror agents message arg shape
cli: rename agents tags get → agents tags lookup
cli: agent tags — agents tags get/add + --agent-tag on spawn/message + first-chunk auto-upgrade (#209 )
cli tests: rewire integration tests to consume pre-staged .objectiveai-tests/
asdf
ignore runtime test data
cli test.sh: stop killing child processes in cleanup trap
cli test.sh: stage runtime tree from objectiveai-tests/ + run prepare.sh
cli: expand agents me response with agent_id / agent_full_id / agent_remote
cli: add objectiveai-tests/prepare.sh + fix tool-slot directory shape
cli: move snapshot from assets/vector/completions/ to assets/function/executions/
cli: stage every integration test's static on-disk data under objectiveai-tests/
test: switch Rust test.sh harness to cargo-nextest
api: remove laboratory-execution integration tests + snapshots
viewer: migrate to renamed SDK types after main merge
Merge remote-tracking branch 'origin/main' into maya/web
api: double MCP_CALL_TIMEOUT_MS in test_clients (30s → 60s)
api: regenerate snapshot fixtures (UPDATE_SNAPSHOTS=1)
mcp: parse + act on X-OBJECTIVEAI-MCP-{ROOT,TOOLS,PLUGINS} headers per session
api: stamp X-OBJECTIVEAI-MCP-{ROOT,TOOLS,PLUGINS} on the /objectiveai per-URL entry
sdk: add ClientObjectiveaiMcp::mcp_headers + ClientObjectiveaiMcpHeaders
cli main: thread fatal through write_error_line
sdk mcp: gate Connection on server-declared capabilities
sdk: remove dead MCP "mock" URL feature wholesale
cli streaming: strip MCP-trace instrumentation from run_subprocess
functions executions create: restore full source-form convention on function/profile/input
agents_duplicate_tool_names_e2e: add 500ms settle delays between turns
fix vector_completion_snapshots: migrate fixture to current Alpha vector schema
fix function_shared_session_id_e2e: replace function execution with agents spawn
fix agents_continuation_tool_session_e2e: 4 layered fixes
cli streaming: add Error variant to InstanceEmission
fix plugin_mcp_function_swarm_e2e: snake_case Special variant
fix function_shared_session_id_e2e: lowercase Special variant + direct InlineFunction deser
fix function_invention_recursive_snapshots: aggregate chunks into unary
fix: scope 'state' group to nested StateArgs in functions inventions recursive create remote
update mock_7/mock_20 function-execution snapshots to current values
fix function_execution_snapshots: drill output.output on actual side
fix function_execution_snapshots: stream for split_tweet_scorer
sdk: scope the "input" clap group to a nested InputArgs sub-struct
cli tests: drop externally-tagged wrapper from plugin_dispatch_e2e pointer
cli tests: accept tool_dispatch_e2e error baseline w/ cli exit-status line
cli tests: drop externally-tagged wrapper from tool_dispatch_e2e pointers
cli tests: drop externally-tagged wrapper from viewer_send_e2e pointers
cli tests: fix agents_duplicate_tool_names_e2e legacy expectations
cli tests: fix agents_continuation_tool_session_e2e legacy expectations
cli tests: enable streaming on plugin_mcp_function_swarm_e2e
cli tests: fix function_shared_session_id_e2e legacy expectations (A, E)
cli tests: enable streaming on function_invention_recursive_snapshots
cli tests: enable streaming on function_execution_snapshots
cli tests: accept plugin_mcp_dispatch_round_trip baseline snapshot
json-schema: regen for ws_session_id → mcp_session_id reverse-attach refactor
json-schema: regen openrouter Agent + AgentBase with context_compression field
cli tests: project plugin_mcp_dispatch_e2e snapshot from per-message log files
openrouter: add context_compression agent field, plumb to plugins on chat completion
cli: clear stdio inheritance flag in instance subprocess (Windows)
api+cli: make X-OBJECTIVEAI-AGENT-REMOTE genuinely optional, not empty-string
cli conduit: accept empty X-OBJECTIVEAI-AGENT-REMOTE in require_transient
api: stop stripping X-OBJECTIVEAI-* headers from reverse-channel forwards
api: register reverse-channel by response_id; drop dead ws_session_id
cli tests: fix plugin_mcp_dispatch_e2e legacy expectations
api+cli: wire twenty-agents-json-schema-10x-tools fixtures for vector completion snapshot test
cli tests: fix agents_message_continuation_e2e to current conventions
release: Go SDK versions independently via objectiveai-sdk-go/version.txt
release: objectiveai-sdk + objectiveai-sdk-macros 2.1.0
api: update test call sites to current SDK method signatures
sdk: mark every cli/command aggregator Response/ResponseItem as #[serde(untagged)]
sdk: drop strip_agent_instance_hierarchy_lines from AgentCompletion::normalize_for_tests
ci: release-triggered Rust-SDK-only publish workflow
tests: drop standalone objectiveai-mcp, seed only the on-disk fixtures
sdk+cli+mcp: thread mcp_session_id through AgentArguments
api/build: fix botched std::path_type::Path → std::path::Path
cli: mark the handshake-pipe read end inheritable on Windows
cli/python_tests: fix botched std::path_type::Path → std::path::Path
proxy: stamp session-global transient headers on the initial upstream connect
cli/command: wrap schemars::schema_for!(…) in ResponseSchema(…)
sdk: drop notification_value_test_coverage test
sdk-js: regen for the tier-alias conversion — full suite green
sdk + cli: single-subcommand tiers become type aliases
sdk-js: raise dts worker heap in build.sh
sdk: #[json_schema_ignore] every tier aggregate; always-inline Value
sdk: #[json_schema_ignore] the root ResponseItem aggregates; inline Value everywhere
sdk: add #[schemars(extend("omitempty" = true))] to cli::Error optional fields
sdk: ResponseSchema wrapper + omitempty fixes + all schema tests pass
sdk: restore manual WithExpression + Schema registrations
sdk: register split-folder cli/command types + add variant titles
cli/command: split each leaf into its own folder + per-submod folder
cli/command: rename discriminator field path → path_type
sdk: schemars renames + json_schemas registrations for cli/command tree
sdk: missing serde/scope fixes surfaced by cargo test -p objectiveai-sdk
cli tests: switch MessageRequest to parent/instance shape
agents message Response: agent_id → agent_instance_hierarchy (full lineage)
agents message cli: rename fallback's bare_id → agent_instance
agents message: split target id into parent_agent_instance_hierarchy + agent_instance
sdk: add path: Path discriminator field to every leaf Request
sdk-js + viewer: generated viewer execute fns over typed-request transport
bindings: accept (RemoteAgentBaseWithFallbacks, RemotePath) tuples
objectiveai-mcp: per-session AgentArguments + accept-any-session reconnect
sdk-js: delete viewer mode from the API client
sdk: thread AgentArguments through every CommandExecutor call
viewer + sdk: cli_run spawns the cli binary via BinaryExecutor
executor: respect AgentArguments on CliCommandExecutor
spawn: env_remove the five transient identity keys on None
in-process objectiveai-mcp for the instance subprocess
tests: unify all CLI integration tests under .objectiveai-tests/
json schemas: regen + register missing client_objectiveai_mcp types
viewer: post to plugin iframes with targetOrigin "*" (#203 )
conduit: dial plugin MCP via shared plugins::run::execute
test: replace fn-exec continuation token with agents list active + per-agent message
cli: shared child stdout+stderr reader, used by plugins run + tools run
test: extend shared-session test with continuation + resumption
plugins protocol: flatten Output, move MCP into ResponseItem
conduit: drop loser-eviction sweep; respect upstream DELETE on SessionTerminate
cli: require all 6 transient headers; propagate to plugin subprocess env
proxy: agent-identity headers join the transient bag
test: drop stale X-FOO mention from assertion comment
proxy: transient-per-session header overrides on every outbound request
cli: strip argv[0] before parse_request
mcp args: move from URL query to X-OBJECTIVEAI-ARGUMENTS header
per-MCP routing: proxy treats every CLI-hosted MCP as its own upstream
test: plugin-MCP function-execution swarm e2e + fixture
Merge remote-tracking branch 'origin/main' into maya/web
mock: deterministic calls override on AgentBase
mcp: orphan DELETE for fresh-mint connections dropped without use
objectiveai-api: serve /objectiveai-mcp on a loopback-only listener
client_objectiveai_mcp: type server_request / server_response end-to-end
mcp: fan DELETE out to upstreams across proxy + SDK
objectiveai-mcp: SDK-only refactor; add parse_request to SDK
objectiveai-cli + objectiveai-mcp: drop the unused mcp bool config
objectiveai-cli + objectiveai-mcp: use default SDK features
sdk-rs: complete CommandResponse rollout — tier delegations + executors
sdk-rs: hand-roll CommandResponse for inline-defined leaf types
sdk-rs+cli+mcp: CommandResponse for plugins/tools run; supporting refactors
sdk-rs: impl CommandResponse for agents::read::id::Response
sdk-rs: swap .expect("CommandResponse serializes") for .unwrap()
sdk-rs: hand-roll CommandResponse JSONL impls for 19 alias targets
sdk-rs: inventory all leaf Response / ResponseItem types
sdk-rs: impl CommandResponse for the four bare media types
sdk-rs: delegate From<RichContentPart> arms; unify video carriers
sdk-rs: add per-type From<…> for ContentBlock impls
sdk-rs: add CommandResponse trait + McpResponseItem carrier
sdk-rs: drop CommandRequest::from_command + CommandRequestError
objectiveai-mcp: migrate off legacy cli::output to typed RunItem stream
cli tests: fix imports and re-anchor wire-shape assertions
make all features default
cli: revert run.rs delegation through CliCommandExecutor
cli: add CliCommandExecutor, delegate run.rs through it
json-schema: regenerate; drop orphaned viewer schema, add missing cli leaves
sdk+cli: typed Manifest conversions, drop plugins/tools round-trips
cli: drop local ActiveAgent struct, use SDK ResponseItem natively
sdk+cli: collapse QueueItem/QueueMessage/Content duplicates
sdk+cli: functions/get + profiles/get expose resolved RemotePath
cli + sdk: make objectiveai-cli compile
cli: run.rs returns a typed stream; instance returns a stream too
cli: rework instance dispatch to JSON-blob over inherited-pipe handshake
Fix borrow + convert-signature errors from agent-identity refactor
cli: implement plugins/run as bidirectional bare-naked port
Forward agent_full_id and agent_remote through MCP proxy session resume
cli: revert standard.rs + Context Clone from 8db7574
Finish agent-identity exposure on completion responses
cli: streaming endpoints actually stream
cli: rework tools/run to yield items inline as they arrive
cli: implement tools/run as channel-backed stream
agent identity refactor: agent_id, agent_full_id, agent_remote
Remove unused schemas module and its builder
Replace CLI MessageKind with SDK RequestMessageKind
cli: implement plugins/install/github
cli: implement agents/read/subscribe channel-backed stream
cli: implement agents/read/{all,pending} read-multi leaves
cli: implement 3 simple stream-iter list leaves
cli: implement 3 publish leaves (agents, functions, profiles)
cli: implement plugins/install/filesystem + tools/install instructions
cli: implement plugins/get + tools/get unary filesystem reads
cli: implement 4 unary HTTP read leaves
cli: implement command/agents/me execute
cli: implement command/agents/message execute
sdk+cli: drop detach field, rename to stream throughout
cli: implement functions/executions/create/{standard,swiss_system} + functions/inventions/recursive/create/{alpha_scalar,alpha_vector,remote} execute bodies
cli: implement command/agents/spawn execute
api: skip merged_messages on continuation to stop personality spam
cli+sdk: relocate produce_message_rows for vector tier
cli+sdk: relocate produce_message_rows for functions/inventions/recursive tier
cli+sdk: relocate produce_message_rows for functions/inventions tier
cli+sdk: relocate produce_message_rows for functions/executions tier
cli+sdk: relocate produce_message_rows for agents tier
sdk+cli: move LogReference types into objectiveai_sdk::logs module, drop re-exports
Fix per-agent identity construction in agent completions
sdk: hoist LogReference/IndexedLogReference into crate root + ungate *_log modules
cli+sdk: relocate vector tier filesystem helpers (vector, not vectors)
cli+sdk: relocate functions/inventions/recursive tier filesystem helpers
cli+sdk: relocate functions/inventions tier filesystem helpers
cli+sdk: relocate functions/executions tier filesystem helpers
cli+sdk: relocate agents tier filesystem helpers to logs/agents/
cli: scaffold logs/ mirror module + relocate ProducesRequestFiles
sdk: strip dead crate::filesystem refs from cli-gated json_schema block
cli: relocate RichContent/SimpleContent extract_media as free functions
cli: config/functions/profiles/pairs/* execute bodies (4)
sdk: pair-favorites leaves carry twin function+profile paths
cli: port legacy --source all dedup + concurrency to list leaves
cli: config/functions/* execute bodies (18)
cli: config/{swarms,mcp,viewer}/* execute bodies (19)
cli: config/agents/* execute bodies (5)
cli: port legacy build_http_client precedence chain into Context::new
reasoning/refusal logs are raw text — write .txt not .json
cli: surface filesystem clear count in every logs/.../clear Response
cli: vector tier cli leaf bodies (6) + top-level logs/clear
cli: typed reads for functions/inventions + vector tiers; refactor read_file_by_id + agents/read/id
cli: typed reads + 9 cli leaf bodies for logs/functions/executions/
cli: typed read_*/subscribe_*/list_* for response tier; fill 40 cli leaf execute bodies
cli: typed read_* for logs/agents/completions/request/; fill 12 cli leaf execute bodies
cli: add read_json_typed helper + Error::TypedDeserialize for upcoming typed log reads
cli: port update execute body — channel-backed streaming
sdk-rs+cli: convert update to a streaming leaf
sdk-rs: typed docker-style paths on cli leaves — RemotePathCommitOptional[OrFavorite]
cli: Context now carries an SDK HttpClient; enable sdk's env feature
cli: implement mcp + viewer execute bodies (kill, spawn, send, generate-secret-signature-pair)
cli: scaffold remaining 2 tiers (functions + logs) — full SDK tree mirror
cli: scaffold command tree mirror — Context + 8/10 tier stubs
sdk-rs: delete filesystem module + feature flag + unused deps
sdk-rs: delete cli::output module + strip its schema_for! registrations
cli: rewire 48 consumer files to local filesystem module
cli: transplant filesystem module from SDK (verbatim copy + intra-crate-path rewrite)
sdk-rs: cli-local AgentSpec/FunctionSpec/ProfileSpec wrappers carry the Favorite variant
Revert "sdk-rs: add Favorite(String) variant to every inline-or-remote enum"
sdk-rs: pub async fn execute + execute_jq on every tier mod.rs + root command.rs
sdk-rs: port StreamOnce + tier-level execute/execute_jq on agents/list (proof of pattern)
sdk-rs: root-level Command/Request/ResponseItem at cli::command
sdk-rs: tier-level Request/Response[Item] aggregators + schema TryFrom impls
sdk-rs: split execute into execute_streaming + execute for the 6 chunk-or-id leaves
sdk-rs: per-leaf pub async fn execute (+ execute_jq) on every leaf and schema submodule
sdk-rs: rename executor → command_executor; add CommandExecutor::execute_one
sdk-rs: TryFrom for Request on logs/agents/ subtree
sdk-rs: TryFrom for Request on logs/{clear, vector, functions}
sdk-rs: TryFrom for Request on config/{mcp, swarms, viewer} (19 leaves)
sdk-rs: TryFrom for Request on config/functions/ tree
sdk-rs: TryFrom for Request on config/agents/{get, favorites/*}
sdk-rs: TryFrom for Request on agents/{spawn, message, publish}
sdk-rs: TryFrom for Request on agents/list/* + agents/read/*
sdk-rs: TryFrom for Request on trivial agents/ leaves
sdk-rs: TryFrom for Request on functions/inventions/recursive/create/{alpha_scalar, alpha_vector, remote}
sdk-rs: TryFrom for Request on functions/executions/create/swiss_system
sdk-rs: TryFrom for Request on functions/executions/create/{standard, swiss_system}
sdk-rs: TryFrom for Request on functions/publish + functions/profiles/publish
sdk-rs: TryFrom for Request on remaining trivial functions/ leaves
sdk-rs: TryFrom for Request on trivial functions/ leaves
sdk-rs: TryFrom for Request on swarms/publish
sdk-rs: switch trivial TryFrom Error from Infallible to FromArgsError
sdk-rs: TryFrom for Request on viewer/ leaves
sdk-rs: TryFrom for Request on tools/{get, install, list}
sdk-rs: TryFrom for Request on tools/ leaves
sdk-rs: TryFrom for Request on plugins/{list, install/filesystem, install/github}
sdk-rs: TryFrom for Request on plugins/ leaves
sdk-rs: TryFrom for Request on mcp/kill (missed in prior commit)
sdk-rs: TryFrom for Request on mcp/ leaves
sdk-rs: add FromArgsError for TryFrom for Request impls
sdk-rs: add Favorite(String) variant to every inline-or-remote enum
sdk-rs: harden PluginExecutor against listener death
sdk-rs: implement PluginExecutor
sdk-rs: make cli::plugins::TypedOutput::Command.id required
sdk-rs: rename cli::plugins PluginOutput→Output, TypedPluginOutput→TypedOutput; add Mcp.headers
sdk-rs: drop PluginCommandResponse + CommandResponseValue from cli::plugins
sdk-rs: decouple cli::plugins from cli::output
sdk-rs: implement BinaryExecutor
sdk-rs: emit --jq before positional name + trailing args on plugins/tools run
sdk-rs: scaffold cli-executor binary + plugin submodules
sdk-rs: add CommandExecutor trait behind cli-executor feature
sdk-rs: functions/mcp/plugins/swarms/tools/viewer/update — clap Args/Command/Schema on every leaf, Command enum at every tier
sdk-rs: logs — clap Args/Command/Schema on every leaf, Command enum at every tier
sdk-rs: config — clap Args/Command/Schema on every leaf, Command enum at every tier
sdk-rs: agents — schemas wired into the clap tree as leaf subcommands
sdk-rs: agents — pub enum Command at every routing tier
sdk-rs: strip redundant feature = "cli" cfgs from inside cli::command
sdk-rs: cli::command::agents — add clap-derived Args to every leaf + schema submodule
sdk-rs: add jq to every nested request_schema / response_schema Request
sdk-rs: list leaves — --source flag, not a sub-command path segment
sdk-rs: add clap as a cli-feature-gated optional dep
sdk-rs: add pub jq: Option<String> to every non-Ok-returning Request
sdk-rs: hoist config out of every endpoint subtree into a single top-level tree
sdk-rs: cli::command — add Command stub
sdk-rs: CommandRequest — add from_command + CommandRequestError
sdk-rs: cli::command list Responses match the cli's actual emit shape
sdk-rs: same untagged-collapse on the remaining three list Responses
sdk-rs: cli::command — Response/ResponseItem enums untagged + collapsed where degenerate
sdk-rs: agents/read/id Response — variant names mirror full leaf path
sdk-rs: agents/read/id Response — untagged tuple variants, alias to leaf Response
sdk-rs: agents/read/id Response — typed 18-variant log-content enum
sdk-rs: cli::command — CommandRequest impl on nested schema Requests
sdk-rs: rename IntoCommand trait → CommandRequest
sdk-rs: cli::command — inline request_schema / response_schema modules on every leaf
sdk-rs: cli::command::logs — inline ResponseItem on the 5 list leaves
sdk-rs: cli::command::logs — typed Response on vector / function-invention request envelopes
sdk-rs: cli::command::logs — request/response split + 24 missing leaves
sdk-rs: cli::command::logs — media leaves use the read methods' actual return types
sdk-rs: cli::command::logs — messages logprobs Response = Logprobs
sdk-rs: response-side continuation + retry_token logs are .txt, not .json
sdk-rs: cli::command::logs — typed *Log Response on the 12 leaves that have one
sdk-rs: cli::command::logs — unified Request tree mirroring logs …
sdk-rs: cli::command — pub type for Response aliases, not pub use
sdk-rs: swarms/get Response is GetSwarmResponse, not RemoteSwarmBase
sdk-rs: also derive Debug + Clone + PartialEq across cli::command
sdk-rs: derive Serialize/Deserialize/JsonSchema across cli::command
cli: remove the entire api module
sdk-rs: gate --stream behind --dangerous-advanced JSON on Request
sdk-rs: --stream on the 3 streaming-endpoint families
sdk-rs: tools/run Stderr carries cli::Error; drop the separate Error
sdk-rs: tools/run split Line into Stdout/Stderr variants
sdk-rs: tools/run ResponseItem::Line carries just a String
sdk-rs: the remaining list leaves become streams
sdk-rs: favorites/config/get leaves become streams
sdk-rs: type the functions/inventions Value placeholders
sdk-rs: type the plugins module — drop serde_json::Value where typed
sdk-rs: type the tools module — drop serde_json::Value
sdk-rs: drop Default on ErrorType + redundant rename on Error.type
sdk-rs: Error level/fatal optional; tools/run mirrors plugins/run shape
sdk-rs: add Response/ResponseItem to every remaining cli leaf
sdk-rs: ResponseItem for tools/run + plugins/run
sdk-rs: add Request to tools/run + plugins/run with run subcommand
sdk-rs: drop cli::command::instance entirely
sdk-rs: agents/me Response = struct { agent_instance_hierarchy }
sdk-rs: agents/publish Response = struct { sha }
sdk-rs: agents/spawn Response = struct { agent_instance }
sdk-rs: add cli::command::Ok and use it for unit-success responses
sdk-rs: inline filesystem types into agent leaves, prefix support types
sdk-rs: rewrite agents leaf Response/ResponseItem with domain types
sdk-rs: add Response / ResponseItem to every agents leaf
sdk-rs: replace serde_json::Value with typed SDK bodies
sdk-rs: Request + IntoCommand for every remaining cli leaf
sdk-rs: resolve agents/spawn IntoCommand TODO — always emit --agent-inline
sdk-rs: add Request + IntoCommand to every agents leaf
sdk-rs: add IntoCommand trait at cli::command root
sdk-rs: hoist cli::output::Error up to cli::Error
sdk-rs: drop logs from cli::command, add instance
sdk-rs: scaffold cli::command leaf-stub tree
Fold objectiveai-cli-stream into objectiveai-cli as instance subcommand
cli: quadruple two_agents continuation teardown timeout to 720s
sdk-go: fix Notification roundtrip — preserve type:object on $ref variants
sdk-py: fix pydantic-roundtrip for Notification + TypedPluginOutput
Fix tests after agent_id rename
Regenerate JSON schemas + SDKs after agent_id rename
Rename: agent_id (hierarchy) → agent_instance_hierarchy; agent_id_base (leaf) → agent_id
sdk: register CommandComplete + PluginCommandResponse for codegen; regen SDK artifacts
sdk + cli: plugin↔CLI channel switches to {id, value: Output} envelope
cli + sdk: bidirectional plugin↔CLI commands with request_id correlation
cli: emit bare-leaf agent_id in MessageDelivered / MessageQueued
cli: drop SLOT_TAKEN_MAX_RETRIES cap, retry forever
cli + cli-stream: single-flight admission via atomic socket bind
sdk: add Effort::Xhigh to claude_agent_sdk + plug schema-coverage gaps
api: refresh stale agent_id resolution comment
claude-agent-sdk-runner: bump claude-agent-sdk 0.1.58 → 0.2.87
api: per-slot id flows through AgentAttempt; viewer-begin defers to first chunk
api+cli-stream: per-agent response_id + sibling-group sweep
cli-stream: key conduit state on agent_id_base, not lineage
cli-stream: drop losing-agent connections on first selected chunk
sdk+api+cli-stream: arguments values become Option; bare flags supported
drop SDK HttpClient.agent_id_base + API Context.agent_id_base — unused
api: stamp X-OBJECTIVEAI-AGENT-ID-BASE with the new agent's leaf, not the caller's
cli config propagation; X-OBJECTIVEAI-AGENT-ID-BASE sibling header everywhere
cli: add agent_id_base config field from OBJECTIVEAI_AGENT_ID_BASE
cli-stream: pass plugin arguments as --k v instead of --k=v
sdk+api+cli-stream: arguments for plugin MCP servers, per-agent isolation
mcp/format: adversarial mangle-and-length round-trip tests
sdk+cli+mcp: flatten NotificationValue; drop value-wrapper; untag Output and PluginOutput
sdk+mcp: RichContentPart pipeline; round-trip-solid From for ContentBlock
sdk+cli: NotificationValue::PluginNotification — nest plugin payloads under value
mcp: unify the formatter into one mode (drop OutputMode)
sdk: hoist parse_data_url to crate::data_url; tighten validation
mcp: format_outputs returns Vec; drop the blocks.rs side-renderer
sdk/mcp: resolve ResourceLink → EmbeddedResource inside call_tool
sdk: type LogContent at the filesystem layer; route media to native MCP blocks
sdk/mcp: detect data-URLs in MCP text blocks → route through media dispatch
sdk/mcp: hoist resource→RichContentPart into a From impl, add audio/video mime dispatch
cli: consolidate agents list + agents list-active under nested agents list
agents read subscribe: event-driven, out-of-sync-proof subscription
tests/agents_continuation_tool_session: drop cross-agent symmetry assertion
api/agent/completions: resume proxy session from wire continuation
filesystem/logs: LogFileKind enum + read_file_by_id dispatches to typed readers
fix test.sh suite + drop queue::Id newtype + strip agent_id default
Merge remote-tracking branch 'origin/main' into maya/web
add CLI plugin-MCP snapshot test (RMCP, 10 tools)
drop PLUGIN_MCP_CONNECT; dial all upstreams during CLI initialize
conditional primary + aggregate session id + API-canonical InitializeResult
cli: assert McpConfig header presence on tools/list, resources/list, tools/call, resources/read
cli: synthesized JSON-RPC error envelopes echo the request's id
cli proxy: resources/list aggregation + tools/call + resources/read routing
cli proxy: McpConfig header drives tools/list aggregation + list_changed forwarding
cli: persist plugin MCP connections instead of discarding them
plugin MCP connect: API fans out PLUGIN_MCP_CONNECT; CLI acks + background dial-discard
sdk: add PluginOutput::Mcp variant; CLI dispatches on it directly
plugin MCP begin RPC: SDK wire shape + CLI dispatch + executable/name plumbing
sdk: plugin manifests declare mcp_servers; add mcp plugin notification
api: wire McpListChanged dispatch — proxy SSE now sees tool/resource list_changed
sdk: delete mcp::conduit; migrate server half into api objectiveai_mcp
tools/list filtering moves from API → CLI via X-OBJECTIVEAI-TOOLS-ALLOWED header
cli-stream: install list-changed pump in ConduitMcpHandler; drop SDK client-side conduit
api: mirror proxy's Accept-header gate on /objectiveai-mcp POST
api: implement /objectiveai-mcp routes for real; route on X-OBJECTIVEAI-RESPONSE-ID header
api: scaffold full /objectiveai-mcp/{session_id} MCP server — routes wired, delegates todo!()
sdk: mcp::conduit::server module + list-changed forwarding plumbing (Commit A)
sdk: introduce mcp::conduit feature; add canonical mcp::conduit::client::Conduit
sdk/mcp: clear Connection caches on SSE stream drop; lazy-fetch on next list_tools/list_resources
sdk+cli+mcp: agents me + non-optional agent_id + MCP unconditional agent_id strip
mcp: replace newline-joined JSONL with per-mode response formatter
sdk+cli+cli-stream+api+mcp+mcp-proxy: rip out OBJECTIVEAI_DIAGNOSTIC_LOG instrumentation
sdk+cli+mcp: OBJECTIVEAI_MCP marker env, set by mcp at startup, re-emitted by cli onto plugin/tool subprocesses
sdk+cli-stream: enforce nested-sub-folder rule; explicit response_id throughout (drops agent_id-parsing anti-pattern)
tests: add objectiveai-tests crate enforcing serde_json preserve_order
sdk: LogWriter::with_request uses ProducesRequestFiles, defers file production to first chunk
sdk+cli+cli-stream+api+mcp+mcp-proxy: fix detached cli-stream death + add OBJECTIVEAI_DIAGNOSTIC_LOG infra
sdk+cli+mcp: plumb Mcp-Session-Id end-to-end + count-tool fixture + e2e scaffold
sdk+cli-stream: writer stamps caller lineage on messages.agent_id (revert 722477d 's reverse fix)
cli: snapshot e2e proves agents message reuses the prior turn's response continuation
sdk: read_latest_continuation reads response-side .json, not request-side .txt
sdk+cli: read_latest_continuation walks back past missing files
cli: add agents message — deliver-or-continue notification
sdk: cover every NotificationValue variant with a round-trip test + AST meta-test
sdk+cli: collapse Output/Notification, add NotificationValue enum
cli: add agents read id <id> — read file content by SQL row id
sdk: LogWriter defers chunk processing by one; flushes last on finalize
sdk+cli: remove Output::Begin / Output::End JSONL framing markers
cli: add agents read all — drain every queue item, advance watermark
cli: agents read pending — one AgentItems notification per spawned id
cli: promote read-pending to read pending (new agents/read/ subtree)
cli: drop the prompt_ prefix from agents spawn's PromptSource fields
cli: rename messages to prompt on agents spawn
cli: remove instructions subcommand tree and --instructions-id arg
cli: agents spawn — minimal fire-and-forget surface; emit agent_id only
cli: drop the standard subcommand under agents spawn
cli: flatten agents/spawn/mod.rs into agents/spawn.rs
cli: relocate agents completions create to agents spawn
cli: drop caller-prefix from list-active output and read-pending input
cli: agents list-active — direct-child agents + last assistant_response timestamp
cli: add agents read-pending — drain typed queue items per spawned agent id
sdk: Id as SQL row id (lazy-populated files table)
sdk: queue renames — drop Message suffix on QueueMessage variants; UserRequest → AgentCompletionRequest
sdk: Client::read_new_from_queue — typed queue reader
sdk: AssistantMessageLog extracts refusal / reasoning / tool_calls to refs
sdk: notifications belong under request/, not response/
sdk: flip log layout from -{request,response} suffix to request/ + response/ subdir
sdk: add request-side Log types + ProducesRequestFiles trait (additive)
cli/instructions: fix stale filesystem::config::db path + drop lab scope
remove laboratory-execution surface from cli / cli-stream / logs
sdk: RichContentLog is all references — extract text + non-decodable parts too
sdk: extract reasoning/refusal/tool_calls to references in AssistantResponseChunkLog
sdk/db: messages_queue table + Queue::read_new_messages watermark API
sdk: filesystem/db/ — single shared db.sqlite; messages.agent_id column; bare-id path
sdk: filesystem/logs/queue module — shared per-agent-id db API; all ops funnel through it
sdk+cli-stream: notification queue local to cli-stream; LogWriter accepts pending notifications as an argument
api: prepend drained-notifications user message (push → insert(0, ...))
sdk+proxy: ToolResponseMetadata on tool responses; proxy populates notifications counter
sdk: async messages-db writes; per-agent request rows; iterator chunk-rows
sdk: per-agent SQLite db alongside socket; LogWriter inserts into messages table
sdk: log requests alongside responses; suffix root files -request/-response
api: response IDs become base62 {prefix}-{rand}{created}; drop agtcpl- prefix
sdk: split LogReference into per-site types (shared name, distinct module paths)
sdk/json-schema: add JsonSchema + omitempty attrs to *Log structs
sdk: replace inline serde_json! in log paths with typed *Log structs
cli: default agent_id to "cli" when env unset
cli: delegate streaming subcommands to cli-stream subprocess
cli-stream: add the remaining streaming endpoints from cli
cli-stream: rename --body-inline → --body
restore 12 files from main lost during merge
Merge remote-tracking branch 'origin/main' into maya/web
viewer: add mock entries for browser-mode demo
cli-stream: drop --body-file, --body-inline is now required
cli-stream: rearrange to match objectiveai-cli's conventions
cli-stream: write logs to disk + emit LogStreamReady
agent_id: stable lineage across continuation re-use + MCP-boundary
cli-stream/pipes: same FS path layout on every platform
cli-stream: function-executions endpoint + per-agent named-pipe notify bridge
add objectiveai-cli-stream crate (hello-world skeleton)
api: re-regen scalar_d2_unrouted_2 snapshot — earlier capture flaked
api/agent: use response_id as the agent identifier instead of a racy counter
viewer: migrate all classNames to cn() one-class-per-arg convention
Merge remote-tracking branch 'origin/main' into maya/web
Merge remote-tracking branch 'origin/main' into maya/web
viewer: design audit phase 3 — tokens, tooltips, final cleanup
viewer: design audit phase 2 — transitions, UX, polish
viewer: design audit phase 1 — contrast, tokens, a11y, perf
viewer: detail panel, micro-interactions, polish
viewer: styling refactor — three-pane layout, transitions, entry density
viewer: accessibility, performance, and polish
viewer: P0/P1 bug fixes + visual polish pass
Merge remote-tracking branch 'origin/main' into maya/web
chore: gitignore audit files, test harness, and experiment dirs
viewer: comprehensive UX audit — 32 of 44 items shipped
viewer: single-channel events, network panel, inner errors, command palette
viewer: session persistence, auto-collapse, tree view, and entry summaries
Merge remote-tracking branch 'origin/main' into maya/web
viewer: fix multi-turn streaming, chunk validation, and design system cleanup
viewer: polish pass — code cleanup, branding, scoring viz, UX improvements
viewer: fix chunk classification and StatusBar active detection
viewer: redesign with Tailwind v4, Radix UI, and ObjectiveAI design system
web: remove parallel viewer implementation — viewer lives in objectiveai-viewer
web: add viewer page, agent chat, and viewer event hooks
Merge remote-tracking branch 'origin/main' into maya/web
Merge remote-tracking branch 'origin/main' into maya/web
revert all non-frontend edits — restore objectiveai-js, objectiveai-viewer, .gitignore to main
Merge remote-tracking branch 'origin/main' into maya/web
web: shelve JudgmentStack rethink, ConvergenceTimeline WIP, demo data
viewer: design system, mock harness, VoteMatrix, entry type badges
web: ensemble → swarm terminology, focus-visible styles, design token cleanup, mock fallbacks
Merge remote-tracking branch 'origin/main' into maya/web
Merge branch 'main' of https://github.com/ObjectiveAI/objectiveai into maya/web
Merge remote-tracking branch 'origin/main' into maya/web
Explore: cap toolbar width at 1400px, tighten tab bar spacing
Merge remote-tracking branch 'origin/main' into maya/web
Shell: add logo mark + wordmark SVGs, polish explore layout and filter groups
Web: extract useSDKStream, consolidate CSS modules, delete dead code, add profile/explore pages
ProfileCard: remove hover transition effects
Explore: add sticky tab bar navigation with scroll-tracking, swap to mock data for density testing
Add favicon, SEO metadata, robots.txt, sitemap, and web manifest
Merge remote-tracking branch 'origin/main' into maya/web
Add Dockerfile and cloudbuild.yaml for web deployment
Replace all Lorem ipsum with real copy grounded in Ronald's language
Web cleanup: JudgmentStack split, error boundaries, testing infra, dead code removal
Merge remote-tracking branch 'origin/main' into maya/web
Full site iteration: unified explore, landing skeleton, route cleanup
Restore ComingSoon as homepage — Landing is future work
Page structure: /explore route, viewer preview, minimal nav
Streaming transitions, component width constraints, streaming demo
Polish JudgmentStack: contribution bars, agent bars, header truncation
Landing page: hero + execution comparison + content placeholders
Scaffold InventionStream, VectorPlayground, and streaming hooks
Execute panel, SchemaForm, demo cleanup — archive old prototypes
JudgmentStack structural view + SDK migration to flat API
You can’t perform that action at this time.