Releases
v0.3.0
Compare
Sorry, something went wrong.
No results found
Changelog
0f8ef7f build(npm): ship a README in the main package; skip already-published versions
1f375f3 build: installer wires niq into PATH automatically
ce76c4b build: move publish-npm.sh into npm/ and add make npm-publish target
aea4e6d build: release pipeline with goreleaser, npm platform packages, and install.sh
30a520d chore(project): events dir is plural (events/), matching other dirs
a5bfc06 chore(reason): batch streaming deltas every 1s
a6ef8fa chore(reason): remove TODO.md
0698a5f chore(webui): update dist entry html for the rebuilt assets
870df70 chore(webui): update dist entry html for the rebuilt assets
9310ed6 core/bus: define core protocol interfaces
9abdfab core/event: add Recipients field for delivery tracking
33ddf63 docs(bus): document the registry API's omitted-allow-list default
0d600bd docs(reason): align ToolProvider comment with BuiltinTools (own call-and-answer tools)
1c532f4 docs(reason): clarify BuiltinTools is the worker's own call-and-answer tools
1dc2f06 docs(reason): don't reference future upstream workers from a dependency
a4a3140 docs(reason): drop 'conversation' from comments/descriptions
7f4775d docs(reason): drop the 'shell' metaphor from comments
31a7abe docs(reason): fix package/comments after BaseReasonWorker extraction
f159d47 docs(reason): fix stale comments after the refactor
43ea7cc docs(reason): relocate and rewrite README/TODO; inline tool-result helpers
96d07e6 docs(reason): replace 'domain-agnostic' with a defensible split
74d5029 docs(reason): treat the three input modes as a spectrum, not a default
5f406e7 feat(bus): enforce publish ACL with target restriction
aaeb149 feat(config): move providers & templates under the shared common dir
ff5302f feat(config): subscriptions support source-restricted patterns
6f9dbe4 feat(control): fixed-port control plane with project start + SPA mode context
c396b55 feat(control,webui): create a new project from a template and start it
165508d feat(control,webui): template management panel; running detects manual CLI starts
a7a62a4 feat(eventbus): multi-worker filter, target_worker_id, deterministic order
6b27c2c feat(events): per-worker traffic role filter; recipients normalized to a table
09a5b15 feat(llm): support provider.json and additional LLM APIs
de9863e feat(project): consolidate sqlite event files under an event/ dir
42e3b17 feat(project): migrate legacy global swarm into a project
4fdad3c feat(project): persisted ports are authoritative — kill any holder
69f4bc2 feat(project): project definition store + project.json CLI
6d6b475 feat(project): reclaim a stale process and check ports on start
ebec9fa feat(project): run a project instance with its own bus, ports and data dirs
8bf1430 feat(provider): configured models list is authoritative over API discovery
ec7f221 feat(providercfg,reason): multi-model providers + runtime LLM provider switching
642f9e1 feat(reason): align handleInput with all three input levels
01f9231 feat(reason): append a completion note after context compaction
de2dd76 feat(reason): cap oversized transcript payloads at 20KB
662e149 feat(reason): context builder — transcript projection, compaction, episodes, spawn seeding
6c5f9ee feat(reason): expose the provider.* domain to the worker's own LLM
c27708a feat(reason): extract Compactor as a replaceable compression strategy
2a5ed81 feat(reason): fall back to the full reply payload when a tool result has no recognized field
476f56a feat(reason): get_worker_info — the detail view behind the slimmed list_workers
31fbd1f feat(reason): meta ops as their own event types; unify responses on request.* + Event.RequestId
2f2eed5 feat(reason): program.query/program.update meta-extensions with durable programs
a8eecb2 feat(reason): retire tool.request — tools become their own event types
a442980 feat(reason): self-synchronized transcript with edit-buffered Apply
f76c172 feat(reason): unify meta operations (compress/rotate) via worker.update
e110e2b feat(swarm): launch and supervise unmanaged (external) workers
0c55c4e feat(swarm): print webui url to stdout and open it in the browser
4a5a91a feat(swarm): wire the SQLite event store per project
77311e6 feat(template): JSON project templates; default template auto-uses providers.json
a489cd7 feat(transport,webui): support dynamic (:0) port allocation
c4c1433 feat(webui): add favicon from the niq logo
319e116 feat(webui): archived workers sort last and show an archived status
e5e66b9 feat(webui): archiving a worker suspends it first; restore resumes it
98b4cdc feat(webui): create workers from the workers view
6b62d99 feat(webui): edit worker subscribe_allow against the bus registry
a0e3d13 feat(webui): gate oversized event payloads behind a hint
4887114 feat(webui): launch declared-but-idle external workers from project.json
5279b58 feat(webui): mention popup left-aligned, right check, exclude archived/suspended
7e61338 feat(webui): persistent worker delete; fix external-worker lifecycle
d6b28ab feat(webui): query and switch a reason worker's provider over the bus
b07bc95 feat(webui): restart a running project, and a real loading state
f46f2f5 feat(webui): send events from a worker's watch contract with schema form
75024de feat(webui): send worker events from its watch contract via schema form
32bd183 feat(webui): show current project name under the logo
4b29439 feat(webui): soft-wrap toggle for tool JSON + click-blank to collapse
0597953 feat(webui): start/create no longer redirect — stay on the Projects page
f5dab83 feat(webui): syntax-highlight the tool_call / tool_call_result JSON
56899d2 feat(webui): talk/events/workers UI overhaul
ee26094 feat(webui): trim the workers list — drop Action and Subscribe columns
18313b9 feat(webui): workers managed column, model switcher, allow-list tags
550d978 feat(worker/reason): pass Compactor and BuiltinTools through the shell
3028ab8 feat(workerhost): durable-change checkpointing; persist runtime provider switches
1b03606 feat(workerhost,swarm): persisted-authoritative worker recovery
04e9f43 feat(workspace): bound bash tool output at 20KB head+tail
39f372c feat: bus-level source-filtered subscriptions, ReplyRejected, UUIDv7 event ids
5dcdc11 feat: drop the tool name from request.* results; merge results into invocations
0f21c17 feat: flat project layout + archived workers
78e6320 feat: init
3d1df92 feat: template detail panel + per-project dated logs
e2354cb feat: worker lifecycle suspend/resume + persistence + WebUI worker view
7b9fb35 fix eventbus: wire EventLog via Engine.OnEvent so Send events reach SSE stream
5e364a8 fix(control): don't respawn a project that is already running
7341ccd fix(control,webui): real running state; Start/Stop/Jump by liveness, not stale ports
2058ad5 fix(discovery): restore worker.discover subscription for managed workers
561b9e6 fix(eventbus): apply sqlite pragmas via DSN so every pooled connection gets them
b25f0f7 fix(eventbus): deliver the watermark event on the live stream
5519989 fix(eventbus): don't persist transient streaming deltas
2a1e38a fix(eventbus): set sqlite busy_timeout to stop silent event drops
1803446 fix(evtstore): order & paginate by insertion order (rowid/index), not timestamp
c7e7386 fix(evtstore,webui): persist request_id; name tool invocations from their type
3ee6d0d fix(httptrans): check scanner.Err() after the SSE read loop
e5a215f fix(llm): guarantee a tool_call_id on every tool call
5753058 fix(preset): update default.json to the request.* event convention
cd2656a fix(project): reason spec subscriptions are broadcast lifecycle only
6355abe fix(project): stop churning project.json on every start
64a3e9e fix(project): validate persisted ports (1-65535)
00f9536 fix(reason): DefaultConverter text branch keeps intended shape (no payload repeat)
d008020 fix(reason): drop tautological parked != nil check on late result
2467717 fix(reason): keep meta tool calls out of the transcript
77fe8c9 fix(reason): precise LLM error policy with event-driven 429 backoff
98e1306 fix(reason): restore tool-name reverse mapping for dotted tool dispatch
9f1470a fix(reason): retry transient provider errors; fix ContextLength retry
2f280e6 fix(reason): route ErrorContextLength compaction through worker.update; rename emitMetaRequest
046bbc8 fix(reason): subscribe the default worker to get_worker_info
e3062b9 fix(reason,timer,swarm): tool naming, unavailable-tool notice, timer cancel, hiw rename, webui banner
e4d5839 fix(swarm): reuse a project's persisted ports so they stop jumping
9639bf6 fix(swarm): use hyphenated default hiw id (default-hiw)
5315ea8 fix(swarm): workspace uses the declared worker id, not a path-derived one
990649c fix(template): clear superseded builtin YAML templates when seeding
069b996 fix(webui): Jump opens the project in a new tab
32e0699 fix(webui): Jump/create/start stay in the current dev origin
839d00f fix(webui): apply the wrap toggle to the element too
5eced3644adac743514fef8480488f790eadab80 fix(webui): hide host suspend/resume tool calls from the talk stream
1433539315a371e2874bd57539844b2d0bcf2d42 fix(webui): keep immediate workers fetch for the talk mention dropdown
4cb3eac783e725b82dc941e493d3d818c69d484f fix(webui): keep the Talk header when there are no messages
4cd19058139d8144c00a4a98ab9e963250c4495a fix(webui): keep the talk viewport stable while paging older history
c0a9497a3564e62825db0ffd94511d364a2e6718 fix(webui): map the frontend to the request.* event convention
5450687a1c0991fcc860faa893240eb3604ed4de fix(webui): no Start-button flash after starting a project
2abdce6069dd0c23fa28a229f131529abdb09dda fix(webui): no flash when switching to the talk view
b42b9cc00183b8b69159bd64f92621dc608be018 fix(webui): project name under logo missing in dev ?project mode
fb827e8374d3db7829c8af8790516cb309ee9139 fix(webui): rename the swarm-owned hiw to webui-hiw everywhere
41c7c279686295ac8b09e7e23d2051ae5aff54cb fix(webui): render every talk event as a card; pair results by request_id
832647966f8ff70da1eaffeedb979f956db9ee88 fix(webui): section dividers span edge-to-edge, content clips at talk divider
90305a3c1992961598ed9a5c2d578222dfe7a694 fix(webui): stop workers polling + SSE on the Projects surface
d9c35ddf64effec597c86c6a27c811e09faf64fd fix(webui): talk shows tool events only when a reason worker is a party
c003b3d1ce63f8cd8019b274109f6b65d0c6606b fix(webui): target picker keyboard nav, view-settings persistence, scroll + SSE races
2aced375172266b098c5e544d52d69b62cc9dced fix(webui): usePolling must re-run when enabled flips
132dea2ea4daeb04788b01b9b0770ece45db0e25 fix(webui): workers polling doesn't fetch on activation
c17ffc90b6b1ee2bf2dd4199d945fae5d7708f2d fix(webui): workers polling hits the project's own address; live project status
244a175e333662946389a4e3fa2c3fe053b60704 fix: Update IdentityRegistry interface to propagate worker type
333a091ba284fa13a951c693bd60e1ad7d21442e fix: add MemoryEventStore for hiw event history
566595c9ef51bd985881a6809e55ff8f11b0a50c fix: add Type field to Identity, fix WebUI workers endpoint
421b421ac81c4b244681c690c55cb660a13fac4d fix: gate unix-only process-group syscalls behind build tags
f66a9ad36ebe8dbe6e2a133e5bfbed6690c30f6a fix: handle duplicate identity registration on restart
bc0e0209f4ac0ab2ac36ce6f8f1741dc8de1d606 migrate all workers to WorkerSideChannel
4e4d74e99e513f1de53007e644f65eb75a62782d perf(evtstore): bare timestamp index for all-history pagination
29b9e54605d5d3bab57a3754adfb8d4f6a18d23a perf(persist): store snapshots as raw JSON; slim list_workers results
8d9c3e83183f09af2ad867b73544dfa8a32416ca pkg/service/eventbus/transport/inprocess: align with 'ball and arrows' model
b4d8c4be7d9e1ac6b5a5476eb89d01d32af1e0ff pkg/service/eventbus: implement event bus engine, transports, and registry API
facbc0607cb6098dfc39f82a3c47e587f6f753a8 pkg/service/swarm: migrate to new eventbus
55353a924b18f1fc2f5b6f63759a733aa478d5b9 pkg/worker/reason: migrate to WorkerSideChannel
db4e7de76b4da8c96b461175598fa0c203a7ce7b pkg/worker/timer: migrate to WorkerSideChannel (experiment)
078a36bc685478841c56d02c1438575d0064aca1 reason: add worker identity & collaboration guidance to the system prompt
c12926987796d99372913a9b51dcd2b5cd31cbf1 reason: clarify transcript docs & naming; update README
015238bde5955197b4cea5edbbe0c674a6cb4fda reason: implement streaming interrupt preservation (TODO 1+2)
081f461d5909b05d0b004ce29497752df8ad1f23 reason: rename built-in tools to DefaultTools / bus-declared capabilities
6caf10015a1d104df7af3f115e77b4fa892f8ff0 reason: route self-tool declarations through the tool provider
e7652c6cfe94ba54be9c41eb3ac842790eee51c3 refactor(build): unify SubscribeAllow — template-first, hardcoded defaults
845b0252927ef7cac1fdc7f96fe30bd262a140fd refactor(bus): remove the worker-side subscription declaration entirely
bf523a6dc7f4db54a583c23c724c3aee84242440 refactor(config): JSON-only, drop YAML template support and migration cleanup
28da04c4c53ad3e99f36e4d91102769e3b7a55d4 refactor(event): drop discriminator/arguments — event type + payload are the whole contract
468ddd06b748fee4e09813d6c1a6f725b4cdf07a refactor(event): type universal bus protocol events as EventType
1a6f6dfcae5018116e9741758e81057e6ece19fd refactor(event): unify grant JSON tags to target / source
e54879afc56099adadde92baf3d36e0dcc3b09fb refactor(eventbus): mark transient events at the source instead of filtering by type in the bus
da06c002a0c3cf2f81da1f1affdf51c5d16f2d75 refactor(project): config.json is the authoritative worker config
ce75301ae99cb413d6c2dfda9a22ead4768594e4 refactor(project): replace wildcard publish/subscribe defaults with explicit grants
66889087ed736bc9bb4357d1db6dbe38a727ec28 refactor(reason): actionable list_workers serialization error
059bda001020e52406fd83d16a9363a78fa9dd45 refactor(reason): capability registry; feat(provider): context window + custom headers; feat(webui): mobile layout
a95ffdc77a54013674c4c29f79072ac5b187b068 refactor(reason): converge mechanism scope; compression becomes a worker-owned event convention
59df72f85d82930273aebb11817fd2b3276bb7b4 refactor(reason): decouple tool-call timeout from the timer worker
12d87d1d7dcd4d0656bf5d72c8e8a4fdb0066a86 refactor(reason): discover own tools from a self-directed worker.ready
c74567f5789bb8cb2502483d698cc98b91b47462 refactor(reason): extract baseworker + transcript/requesttracker subpackages, rename capabilities to extensions
98654c36a1c65bb477393f610200ab5d012bfd07 refactor(reason): extract common reasoning base into pkg/reason
615693dcd4a25000ba940ebe7af7d001d6dd1d98 refactor(reason): extract three-level input handling, consolidate parking, improve naming
be6ff51f7b811171dd94ac759fcd61eb799789df refactor(reason): fold transcript subpackage into main package; rename inputs to Patch
d926e2c25bc89c84e97c90ecaf78a3c617cdf167 refactor(reason): major reason worker restructure + message layer extraction
cbab3b8af25dd831f3806c7672fe22e6a397e5fd refactor(reason): merge compactor.go into compact.go
8a049e3e3ebb368e7746d79922e1668602b38eec refactor(reason): move cloneParams to the end of tools.go
a302c51675a85f9cecebfe2e2ecb4eda83a848eb refactor(reason): move llmToolDefs into tools.go
176254256afa3a7f9edd06b53686276cc5ea5946 refactor(reason): persist provider selection; drop dead compactor/seed seams
e7b05db607ab90044bee3ec799ff286ec0f7b1ac refactor(reason): rename budget.go->compact.go, fix toolset/tools test naming
fb77e05b0cc6a067b79cc610ff6de055f55c4939 refactor(reason): rename compress built-in to context.compress
2bae60e6c6753a3df0472071a38b519d18ac2084 refactor(reason): rename context.close_episode to context.rotate
8ce28b74e10107aec1190703bea2b423dc80c57c refactor(reason): rename pkg/reason/base.go to worker.go
73675f32292c309422dcf37f6d1232060ee7b3d5 refactor(reason): rename recordUsage to handleBudget
feee7cabce6f3d476727ced67c44db500f907238 refactor(reason): rename snapshotMessages to renderTranscriptLocked
6ce74a9887f2a229133c8d124b7253f2b17160ee refactor(reason): split domain-agnostic BaseReasonWorker into pkg/reason
c5917474161341ce642290054f30d0dd1ae6565e refactor(reason): split reason() into focused helpers
db78b64fd4a1a20abaaf924ceb41115aa4a106b5 refactor(reason): split watch into watch (loop) and process (dispatch)
063e0d098aa12c565f3619afe3f6477737a880cd refactor(reason): subscriptions list only broadcast-delivered events
83d1861ff3b69b6e127204545dde0a5f58756e02 refactor(reason): swap append/schedule input_mode names to match semantics
f854ff6589db7a91b00db31d7547f25a3e3cf555 refactor(reason): tool provider interface + private fields
80847c68a09638d6ad07a26a4d4703ce0b8d3480 refactor(reason): unambiguous tool naming via provider__name
81b732aec64fddf625f771411b725385acdf28e5 refactor(reason): when a meta op yields to pending input, drop it cleanly
eb801433f94e932f60356d954bfcd8251eda52c1 refactor(swarm): consolidate LLM provider config into provider subpackage
0afc34ce4639bf042a192a59811b4a2bbeb20299 refactor(swarm): worker dir is truth; provider gate; drop legacy migrations
7782be3927960c2428b1a8167dd794150d98e57c refactor(transcript): buffer only input + late result during a meta edit
e5646188033ae65aff64557c9b65b985910df5f2 refactor(transcript): name files by ownership
e6525cd1688937f4bd2c69851a6d730012c4123e refactor(webui): remove decision.made machinery, converge human decisions into worker.input
19575076716e78b7540754d55eb3bed74cbe83a4 refactor(worker): solidify core tool-serving workers and add reason tests
f8d8e76f34741faf8c7f01ce21c845e3963af84d refactor(workerstore): persist worker snapshots as raw text, not base64
4d0f7947bfa6c28c55271e88524e6aa6005b964d refactor: move eventbus out of services — services are worker backends only
77c578282e63406d8e75782effdf1be1e075f78b refactor: move swarm and webui to internal/, simplify HIW to only SendInput
f47da808770f434a0e99dbd19f36b992144368a1 refactor: normalize layout — workers/services under pkg/, ext keeps only http
dab252e2064d79f483d54f3726c31cf4463bfd02 refactor: rename pkg/llmprovider to pkg/provider
5403b238ce239756fe0f5061fe484facea01cb0a refactor: split internal/swarm into control + project packages, drop the legacy swarm mode
97c59fbcd0c1455264a59c99681964496cac9113 rename ToolCallCause → InterruptCause, use typed constants for interruptReason
80af5ec8d91b2dd0bf83dfa53dfcdf47ff16a9c5 restore TODO.md that was accidentally deleted, update to new constant names
a9dbf993f387525a3cd91a8e197a8b1b0a936b47 style(webui): 2s-coalesced streaming; split invocation/result into two blocks
e444851c6546c13b9279ea0121b8460cf7b7b01b style(webui): breathing room in worker-detail actions
bfb2cdeced08d535920418ea336540613734c5bd style(webui): cap tool_call / tool_call_result height with scroll
5b61d2f0145dd3192fbb6ec891dc82430a64aae4 style(webui): document the create-form allow-list defaults
2cb526908305e71e72e0c5576972d2f0fdcb4df7 style(webui): faster, decelerating logo spring-back
3069a9b0f084a59e1fde8978cbef5af88bc0055c style(webui): no hover background on the subscribe allow edit/close toggle
67b75114d0d5e9913630b5680944887e5a8ed8a1 style(webui): project name as plain text under the logo
5b742cd8ce62079ddf602098d2a0cf60a9bb7a23 style(webui): project name — remove italic
745b0f691151fdca194970abef32b187a01362bb style(webui): pull the logo flush to the text's left edge
58c28172d06f7c1e42333b58ad118be8a057f8df style(webui): refresh sidebar logo typography and add divider
cffb5b6637e647330939ab884d4bb242be21ccd1 style(webui): render subscribe_allow one per line in WorkerDetail
bcf2d29393cb6d3b1cc234d7ce9df222a7df4c10 style(webui): show subscribe_allow in the editor layout, read-only
2221d82fceb63c35b595541219f472105039466d style(webui): source dropdown in SubscribeAllow editor, no read-only placeholders
738f0bee33d85761ad60a5b49753e16e8bb27356 style(webui): swap action descriptions above their buttons in WorkerDetail
66474648e672a0f59cc083c683aff105f875487d style(webui): swap favicon to the reverse niq logo
6268cb01fc6b3b97f298e4ba5f57b7b0b23b2697 style(webui): unify tool-call wording as request
85347abd6267d7609c3d7dc35bae22e2d5d871bb style(webui): unify worker delete button layout with the action buttons
e8151537f6eff8255bdb6edddcf0c0a9f9d2a95b test(bus): lock the type-wildcard target-narrowing publish path; fix target spelling
0d6e1f487845963db48635aadb15847d32a9c8d7 test(reason): consolidate worker/reason tests into a single file
1fcafb693a1aeb259e27d59e9500f309873c5509 test(reason): move handler tests to process_test, watch_test keeps integration
4f3bfe7c30579e2cf42756d05cd4cd3b081d1987 test(reason): rename message_test to process_test, drop duplicated EventPattern test
faca34a5e0faf07a110126a1ed5a3c4e8ac68819 test(reason): tidy helpers_test.go names and docs
bc34230cb510bdbf1a0b17e2237bf3fced5e9966 test(transcript): fix unconditionally-terminated loop in cut-alignment test
1f2f467eeecd5006202908a9806cbdbc4c2d0de5 webui tweaks: logo font/bold, detail block spacing, dev proxy→9527, logo assets
067a098df785b94cf9c67e20eb56246dbfb38173 webui: add en/zh i18n with language toggle and rebuild dist
c12487bed1710aa8718e738e7d463c783a97d656 webui: cap event history fetch and pagination at 30
bd873098d45825c45633245c7444c93bf8e43ad0 webui: clip logo at divider, unify divider width, drop error from tool title
19b2b3e7fff1e2d3c67c5bd06e5cfa5900faca88 webui: polish talk/event views and fix streaming trace loss
b14e9ceb12468b210497b69f51558bf7f6118762 webui: rebuild talk timeline via watermark + history pagination
a33a1ccebfb4b0bfcfae91d959bfc9df478aa6ae webui: stop runaway top-loading in events list; add scroll-to-bottom button
c9c0c02b07fc7eec923e472d3e9797337111936e webui: unify fonts, collapsible code blocks, and worker selector polish
You can’t perform that action at this time.