Releases: ObjectiveAI/objectiveai
Releases Β· ObjectiveAI/objectiveai
v2.2.1
- Merge pull request #229 from ObjectiveAI/2-2-1
- release: bump all packages to 2.2.1
- ci: release the objectiveai-db binary (5 legs); activate db update
- test: fix two failures surfaced by the full suite run
- regen: schema + go/py/js SDKs
- tasks run: move stream_all into dangerous_advanced
- tools/plugins run: pass OBJECTIVEAI_BIN_DIR (the cli/ folder)
- tools: add
tools install githubcommand (mirror plugins) - install: extract shared GitHub-install engine for tools + plugins
- regen: json-schema + go/py/js SDKs for manifest reshape
- viewer: detect plugin viewer bundles on disk; nested cli/ layout
- manifests: reshape tool + plugin manifests; drop tool_name helpers
- conduit: always reply in the response variant matching the request
- tools: run from a nested cli/ subfolder, like plugins
- cli: render response timestamps as RFC3339 strings; rename fields
v2.2.0
- Merge pull request #228 from ObjectiveAI/release-2-2-0
- release: bump all packages to 2.2.0
- api agent: forward a failed tool call as an error tool-response
- mcp: double default connect/call timeout to 60s
- agents logs: group tool responses by tool_call_id; drop the Container
- cli logs: key tool-call rows by the wire index, not the Vec position
- cli logs: persist rows from the cumulative aggregate, not a per-batch slice
- viewer: validate JS build in test.sh
- viewer: reconcile to PR 227
- sdk-go: reconcile to PR 227
- sdk-py: reconcile to PR 227
- sdk-js: reconcile to PR 227
- sdk-rs, json-schema: rename relocated cli get Response types; regen schema
- snapshots: drop retry_token from execution snapshots
- api: drop list-API mock tests
- Merge remote-tracking branch 'origin/main' into no-api-filesystem
- refactor: rename Filesystem remote -> Client; resolve it over the websocket
- ci: build-cli-leg stages the binary from .objectiveai/bin/
- cli: agents/swarms get return the base definition, not the converted full form
- api+sdk: remove the 14 retrieval endpoints; relocate Get*Response into CLI get modules
- Merge remote-tracking branch 'origin/main' into no-api-filesystem
- cli: resolve agents/swarms/functions/profiles get+list locally, not via API
- sdk: add http::github β fetch agent/swarm/function/profile from GitHub
- api+sdk+cli: remove dead write/publish code and all commit-author plumbing
- Merge remote-tracking branch 'origin/main' into no-api-filesystem
- api+sdk: remove vector completions cache and vote-reuse/retry
v2.1.3
- release: bump all packages to 2.1.3
- cli tests: wait via
agents wait, not agent_continuations polling - db logs: accumulate the response blob across the whole stream
- logs read id: fix Text serialize bug; rename ToolCall, embed text
- test scripts: post-test cleanup is kill-only, preserving state/
- test infra: pre-build per-suite test binaries up front (fix relink race)
- mcp-proxy: fix queue_delegate test build + build debug not release
- codegen: regenerate AssistantResponsePart for Option function_name
- test snapshot: regen twenty_agents_10x_tools for new tool names
- fix: connect_handles Vec annotation after dropping the tools tuple
- agent completions: drop redundant client-tool presence validation
- mcp tool names: objectiveai-mcp advertises ResponseManifest::tool_name()
- agents continuation tool session e2e: pass required timeout/max_tokens
- test root: gitignore bin/api proxy trace logs
- cli e2e tests: adapt to Option function_name
- mcp-proxy: optional JSONL request/response trace
- logs read all: function_name only on tool_call parts
- test-cleanup: OBJECTIVEAI_TEST_CLEANUP_KILL_ONLY to preserve state for inspection
- logs schema: repoint log_reader role at objectiveai (logs schema removed)
- cli/python tests: exec returns Option, cover None vs Some(Null)
- build: commit @objectiveai/sdk dist (tsup output)
- cli: also enable RustPython host_env so
import ioworks in the wasm sandbox - cli: enable RustPython stdio feature so WASI sys.stdout/stderr aren't None
- schema: eliminate the 5 bare-$ref root newtypes (alias list ResponseItems, drop AgentSpec)
- schema test: forbid a root $ref without a type
- schema: json_schema_ignore RunValue instead of publishing its degenerate anyOf
- py: drop stale inventions/laboratories, regenerate RunValue
- js: round-trip bare top-level $ref schemas via z.lazy
- go: green the suite β drop stale inventions/laboratories, fix $ref roundtrip, name RunValue variants
- fix: RunValue in json_schemas(); python harness avoids WASI shutdown-flush
- fix: viewer RawArgs request_base + break run/executor opaque-type cycle
- sdk-js: teach viewer-execute codegen the transform envelope
- build: regenerate go / js / py SDKs from updated schemas (partial)
- json-schema: regenerate from the envelope + per-leaf changes
- sdk: implement request_base / request_base_mut for every leaf
- mcp: timeout / max_tokens / jq / python on the three run tools
- cli run: drive CliCommandExecutor; RunStream is Execute | ExecuteTransform
- cli executor: JqTransformStream + Value-first null-skip for both transforms
- cli executor: python output-transform adapter; harness gains args + Option output
- cli executor: token-budget stream adapter + Serialize bound on T
- CommandRequest: add required request_base() -> &RequestBase
- cli executor: identity fast-path when T is the root ResponseItem
- request base: add transform() accessor
- cli: tasks run propagates its scheduled command verbatim
- cli: re-exec / nested-run strips parent-only envelope fields
- cli: execute python via embedded WASI rustpython, sandboxed under wasmtime
- db query: timeout is optional β capped when set, uncapped when omitted
- caps: enforcement pared back β postgres-only timeout, no token counting
- request base: timeout (humantime) + max_tokens join the envelope
- db: one 'objectiveai' schema for every base table
- cli: rustpython wasm pin 0.4.0 -> 0.5.0; fix recipe to deterministic minimal flags
- cli: build.rs provisions the WASI rustpython blob into a lockfile-guarded cache
- db compartments: OBJECTIVEAI_POSTGRES_URL for plugins/tools; STATE_DIR -> OBJECTIVEAI_STATE_DIR
- request base: python transform alongside jq; python overrides jq
- sdk: RequestBase envelope replaces per-leaf jq; execute_jq -> execute_transform
- termination hardening: atomic config/manifest writes, initdb commit gate, drop dead drain
- sdk-js: drop orphaned laboratories module
- agents wait: block until an agent (instance or tag) is done
- cli: github_authorization comes from the json config only
- lockfile: try_held never reports from a partial state
- db: lock discipline β fail fast on the final lock, fail slow on the init gate, never exit 0
- api: thread reverse_channel_timeout through ctx and handle
- cli tests: resume via second spawn in the continuation e2e
- test-cleanup: own crate at objectiveai-tests/test-cleanup
- cli spawn: embed the dead child's stdout/stderr in the error, no file
- viewer suite green (3/3): config-scope argv in cli_command snapshot test
- cli suite green (146/146): db supervisor fixes, leak sweep, reverse-channel budget
- test infra: prebuilt-binary shims; api suite green (318/318)
- mcp-proxy tests: migrate notify suite to in-process QueueDelegate
- sdk-go/py/js: regen for the accumulated wire changes
- Cargo.lock: fixture member moves + objectiveai-tests bin deps
- json-schema: regen for the accumulated wire changes
- test root: fixtures live in .objectiveai; suites self-resolve; test-cleanup
- plugins: tools-style exec + cli_zip; STATE_DIR; spawn env allowlist; api dotenv
- test root: committed .objectiveai tree groundwork β shims, launcher, gitignores
- websockets/mcp_server: resolved layout coordinates for the in-process mcp
- agents logs read subscribe: watch the SDK instance locks
- agents queue deliver: SDK lockfile + grouped-tag targets; tag locks never transfer
- agents enqueue: own command; agents message loses enqueue mode
- cli: agents spawn/message on the SDK lockfile β selector, locks, transfer
- sdk: shared AgentSelector for agents spawn/message; message goes unary; lock transfer on BinaryExecutor
- Merge pull request #225 from ObjectiveAI/api-minify
- api+sdk: remove laboratories, function invention, and API viewer support
- context: lazy lock-discovered clients β api_client/viewer_client/db_client
- spawn: on child exit, re-probe the lock β a lost claim race is success
- spawn: lock-based readiness β orphan child, fresh env, URL from lockfile
- workspace: drop deleted objectiveai-tests-pg-installer member
- kill: terminate by lockfile owner; scope flags; SDK lockfile::owners
- mcp: per-state singleton lock publishing its connect URL
- config --final: the per-state config wins conflicts over the global base
- config commands: scope semantics β global file, state file, final merge
- api config: authorization mutations are global only
- config move: fix schema sub-leaf argv word order
- config: root command deleted β each service owns its own
configsubtree - config: delete the functions tier β empty after the favorites purge
- favorites: removed altogether β config, commands, refs, list sources, viewer notify
- config: drop api/db/viewer port + sdk booleans; require scope flags everywhere
- objectiveai-db: clap arguments exclusively; localhost + random free port only
- objectiveai-db: resident supervisor β postgres lives and dies with it
- viewer: per-state singleton lock publishing its connect URL; mirror the api shape
- sdk/lockfile: rename to the full try_/wait_ pattern
- sdk/lockfile: wait_locked subscription; wait_read = wait_locked + try_read
- sdk/lockfile: double-lock claims + event-certified reads
- sdk/lockfile: locks carry content; api: singleton lock publishes its connect URL
- sdk/lockfile: ManuallyDrop β dropping a LockClaim no longer releases it
- sdk/lockfile: (dir, key) addressing; api: claim bin/locks/api/_
- sdk/lockfile: correct release() docs β transfer consumes, so no post-transfer state exists
- sdk/lockfile: LockClaim::release β drop the lock intentfully
- sdk/lockfile: LockClaim ownership transfer to one specific child
- sdk: new non-default
lockfilefeature hoisting the shared lock-file module - install: the cli installs to ~/.objectiveai/bin; PATH carries bin only
- sdk+viewer+api+mcp: OBJECTIVEAI_DIR/STATE; cli binary lives in bin/
- objectiveai-db: pg-bin shared in /bin, cluster per state
- cli: split the layout into bin/ and state/; OBJECTIVEAI_DIR + OBJECTIVEAI_STATE
- cli: connect to postgres via
config db; drop the embedded-postgres bootstrap - sdk: db spawn/kill + config db tier; axe the vestigial config-get filter
- objectiveai-db: new crate β embedded-postgres vehicle binary
- plugins: carry nested-command argv structured (Vec), not space-joined
- publish: mcp before cli β fix the stale wave order that broke every release
v2.1.2
- release: bump all packages to 2.1.2
- build: drop the viewer phase from root build.sh
- sdks: regenerate for the api + config api command tiers
- json-schema: regenerate for the api + config api command tiers
- cli: api spawn/kill + config api handlers; spawn helper takes extra env
- sdk: add
apicommand tier (spawn/kill) + fullconfig apifield surface
v
- sdk/lockfile: (dir, key) addressing; api: claim bin/locks/api/_
- sdk/lockfile: correct release() docs β transfer consumes, so no post-transfer state exists
- sdk/lockfile: LockClaim::release β drop the lock intentfully
- sdk/lockfile: LockClaim ownership transfer to one specific child
- sdk: new non-default
lockfilefeature hoisting the shared lock-file module - install: the cli installs to ~/.objectiveai/bin; PATH carries bin only
- sdk+viewer+api+mcp: OBJECTIVEAI_DIR/STATE; cli binary lives in bin/
- objectiveai-db: pg-bin shared in /bin, cluster per state
- cli: split the layout into bin/ and state/; OBJECTIVEAI_DIR + OBJECTIVEAI_STATE
- cli: connect to postgres via
config db; drop the embedded-postgres bootstrap - sdk: db spawn/kill + config db tier; axe the vestigial config-get filter
- objectiveai-db: new crate β embedded-postgres vehicle binary
- plugins: carry nested-command argv structured (Vec), not space-joined
- publish: mcp before cli β fix the stale wave order that broke every release
v2.1.1
- 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
trueschemas 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
tasksto 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:
messagefield is required (drop Option wrapper) - agents instances message: rename
SpawnId/SpawnChunkto match spawn's variants - agents instances message: stream-aware delivery with file-lock + DB race
- sdk+cli:
agents instances messagemessagefield 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 spawnprompt optional - cli: move shared modules out of instance/
- cli: agents spawn now runs in-process with message-queue restart
- cli: rename
promptsdb tier tomessage_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_queueserver 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:nullfields 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:nullfields 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
-...
v2.0.11
- v2.0.11
- cleanup + test-suite fixes
- build: regenerated SDK artefacts after MCP + WS-handler fixes
- mcp: TEST_MODE env var strips agent_id from tool result bodies
- sdk: strip agent_id from tool-message contents in normalize_for_tests
- mcp: expose CLI tools alongside plugins; fixtures use a real exec
- fix: WS-handler deadlock + conduit hop-by-hop framing bug
- agent: skip list_tools round-trip when no client_objectiveai_mcp declaration
- agent: validate client_objectiveai_mcp.tools against live proxy list_tools
- test-spawn-mcp-server: switch to objectiveai-mcp, isolate CONFIG_BASE_DIR
- api+cli+sdk: wire client_objectiveai_mcp into per-agent MCP proxy connections
- api+cli: switch 20-agent snapshot to JsonSchema mode
- cli: snapshot test aggregates chunks via push, moves snapshot to cli/assets
- cli: snapshot test β 20-agent mock swarm w/ 10x client-mcp tools
- sdk-rs+cli+go+py: codegen sanitization + feature ungating
- sdk-rs+go: stamp X-Transport: sse, refactor client_response::Response
- sdk+api+cli: precise capturing, indexmap dep, AgentBase field updates
- sdk-go: derive variant title from
typeenum when not in schema - cli: conduit dials a REMOTE MCP from config, no subprocess
- cli: conduit holds a process-lifetime sdk::mcp::Connection
- cli+api: handle rmcp SSE responses, stamp Mcp-Session-Id correctly
- sdk+api+cli: HTTP-shaped server_request/response + CLI MCP conduit
- sdk-js, sdk-py: opt into SSE transport on streaming requests
- sdk-rs: WS streaming + Notifier + McpHandler scaffold
- api: spawn notify dispatch in recv_loop
- api+sdk+proxy: scaffold reverse-attach MCP + per-upstream tool filter
- sdk: validate install identifiers + tool-name materializer
- mcp: rename serverInfo.name oaicli -> oai
- sdk: tools + plugins manifests get owner; tools also gets version
- api: per-stream WS notifications with id-correlated request/response
- sdk-rs: split client_objectiveai_mcp::Request into client_request + server_request
- sdk-rs: add client_objectiveai_mcp::Request; remove notify endpoint
- sdk-rs: add client_objectiveai_mcp field to agents
- api: route streaming endpoints by X-Transport header, not by method
- cli: e2e snapshot tests for tools dispatch
- cli: tools <args...> dispatch with stdout/stderr forwarding
- cli: add tools list / get / install
- json-schema: regenerate for filesystem.tools
- filesystem: add local-tools module
- mcp: flatten cli_config into Config; expose 3 filesystem env vars
- rename crate objectiveai-mcp-cli to objectiveai-mcp
- mcp-cli: one MCP tool per installed plugin
- development-launcher/install.sh: drop trailing footer
- development-launcher: drop the .real backups, one-or-the-other
- install: --dev flag; rename faux-launcher -> development-launcher
- dev-tool: objectiveai-faux-launcher
- viewer/chat: tool calls + tool responses + reasoning collapsibles + queue viz
- viewer/chat: flat
entries: PanelTabEntry[]per panel tab - viewer: streaming chat per panel tab with notify mid-flight + drain
- sdk-js: regenerate zod + merge helper for messages_queued
- json-schema: regenerate for messages_queued on agent completion chunk
- api+cli: POST /agent/completions/notify endpoint
- sdk: From impls between RichContent and Vec, dedupe call sites
- mcp-proxy/sdk/api: messages_queued on agent completions final chunk
- cli/api: rename per-leaf field
agent_id_arg->agent_id, AST-test it - cli/api: --agent-id as a per-endpoint flag, off of Config
- cli/api: --agent-id flag overrides X-OBJECTIVEAI-AGENT-ID when env unset
- viewer: right overlay panel with favorites picker + chat-pane scaffold
- viewer: useFavoriteAgents hook listing favorites + subscribing to changes
- sdk-js: regenerate zod for agent.favorites.* + viewer Request variant
- json-schema: regenerate for agent.favorites.* + http.viewer.Request
- agent_favorites: add ChangedNotification + viewer SDK plumbing
- py+viewer: fix remaining root-test.sh failures
- cli+py: fix stragglers caught by root test.sh
- sdk+codegen: title each variant of the http.viewer untagged enums
- sdk: regenerate schemas + add http.viewer types to json_schemas()
- cli+sdk: stamp agent_id on every emitted notification and error
- mcp-proxy: stamp X-OBJECTIVEAI-AGENT-ID on every upstream request
- api+runners: forward composite agent_id as OBJECTIVEAI_AGENT_ID env
- api+proxy: thread X-OBJECTIVEAI-AGENT-ID through agent completions
- sdks: add agent_id (X-OBJECTIVEAI-AGENT-ID) to every http client
- mcp-cli: per-request X-OBJECTIVEAI-AGENT-ID override of cli_config.agent_id
- cli: add agent_id to Config (env OBJECTIVEAI_AGENT_ID)
- cli/tests: route snapshot tests at a locally-spawned api
- cli: hint at
api spawnon connection-failure errors - cli/viewer: resolve send.rs broken-runner carve-out
- cli/api: collapse the runner to always-remote
- cli/mcp: align with api+viewer β add Config (jq) subcommand, reuse client
- cli: add
{viewer,api,mcp} spawn|kill+ McpConfig - cli: unbundle viewer + api from the binary
- viewer + viewer-sdk: dispatch via cli, drop ApiCall* and SDK http feature
- sdk/cli: flatten ApiConfig (drop ApiHeadersConfig); strip
x_prefix - cli: re-implement the SDK env-var fallback at the api/ layer
- cli: drop the SDK's mcp and viewer features
- cli: disable the SDK's
envfeature - cli: mirror every objectiveai-api endpoint under
objectiveai api ... - sdk/cli: add address and port to ViewerConfig
- sdk/cli: flatten ApiConfig and ViewerConfig, drop the local/remote mode
- sdk: drop the stale cooldown reference from the Skipped notification doc
- sdk/cli: move the updater into objectiveai-cli, drop the SDK feature
- release: reorder asset names by platform, drop no-viewer cli variant
- clear-cache.sh: use shell glob, not find, to wipe target contents
v2.0.10
- release: bump everything to 2.0.10
- viewer send: spawn-send-kill in local viewer mode
v2.0.9
- release: bump everything to 2.0.9
- cli/viewer: e2e test for
viewer sendagainst a wiremock viewer - cli/viewer: add
viewer send <path> <body>to POST synchronously - sdk: move viewer client to objectiveai-sdk::http::viewer; api keeps a thin ctx-aware wrapper
- viewer: tailwind + cn() refactor, fix invisible tab bar
- cli/help: emit --help as a notification, not a fatal error
v2.0.8
- release: bump everything to 2.0.8
- mcp: drain proxy /notify queue at agent turn start
- viewer/test: skip bin target from cargo test (--lib --tests)
- api/test: bump FUNCTIONS_INVENTIONS_SUBSCRIBE_TOOLS_TIMEOUT 60s -> 5min
- README: reframe execution modes as actions; drop vector completions as user surface
- README: remove all logprob references
- README: reposition as 'The Swarm Judgment Harness'
- build artifacts: regenerated SDKs from clean build
- README: full refactor β packages grid, binaries table, comprehensive sections
- build: drop objectiveai-dotnet from the root build pipeline
- updater + skipreason: add #[schemars(title = "...")] on each variant
- plugins install: split into
githubandfilesystemsubcommands - viewer-plugins: remote URL as iframe source (alongside zip bundles)
- plugins/resolve: multi-extension fallback for plugin binaries
- updater: shared sdk module, JSONL emission, opt-in feature for all 4 binaries
- clear-cache.sh: empty contents in place, preserve junctions/dirs
- objectiveai-mcp-cli: update CLI invocation to new run() signature
- release: add objectiveai-mcp binary releases (objectiveai-mcp-cli crate)
- install.sh + README: install all three binaries (cli + api + viewer)