100 Commits
Author SHA1 Message Date
JBD ac2332829f Replace Redis Streams queue and controller with direct execution and resource locking
Transition the AX architecture from asynchronous event queues (Redis Streams
and the `ax-controller` worker pool) to direct, synchronous reconciliation in
`ax-server` guarded by fine-grained distributed locks.

Key changes:
- Implement per-resource locking (`lock:task`, `lock:workspace`, `lock:model`)
  using Redis distributed locks (`SET NX PX` with token validation) and an
  in-memory locker for testing.
- Move Substrate reconciliation directly into `ax-server` for Task, Workspace,
  and Model lifecycle methods (`Create`, `Resume`, `Suspend`, `Delete`).
- Decommission `ax-controller`, `deploy/ax-controller.yaml`, and Redis Stream
  event publishing/consuming interfaces.
- Simplify `ax delete` and `ax watch` in the CLI to eliminate two-phase
  polling loops now that operations complete synchronously.
- Update `demo.sh`, build configurations (`Makefile`, `.ko.yaml`), and
  documentation to reflect the single-binary control plane architecture.
2026-09-27 16:54:08 -07:00
JBD 532635dd24 feat: add support for inlined files in workspace specifications 2026-09-25 21:37:53 -07:00
JBD d8ed0fe38b chore: pin workflow actions and add read permissions 2026-09-19 20:27:51 -07:00
JBD dc4f36cdba Restructure AX into a general-purpose orchestration layer for agentic tasks
AX is undergoing a significant redesign, moving away from a single CLI with
an embedded Python harness toward a general-purpose orchestration layer for
agentic tasks. The repository is reorganized around three binaries: ax-server
exposes a gRPC API for submitting Task manifests, ax-controller runs as a
horizontally scaled reconciler that consumes work from Redis Streams, and
ax-task-runner executes tasks inside sandboxed workers. Task state now lives
in Redis rather than Kubernetes CRDs so the system can handle millions of
short-lived tasks without straining etcd. The legacy Python harness, ATE
client, SQL event log, and skill examples are removed, and new design,
concepts, manifest, networking, runner, and sandbox docs plus Kubernetes
deploy manifests describe the new architecture.
2026-09-19 20:14:43 -07:00
JBD b777313020 Add doctor command to diagnose sidecar, assets, and runtime 2026-08-19 22:56:39 -07:00
JBD 20760f4e3d Remove redundant attached field and use cmd nil-check 2026-08-19 22:27:44 -07:00
JBD 34d81b78cf Enable sidecar PID tracking 2026-08-19 22:18:15 -07:00
JBD 1042a66fc6 Remove StreamLifecycle until it's needed
Lifecycle events can be streamed as a part of the Process RPC. Consider introducing lifecycle events in Content when needed.
2026-01-26 18:45:22 -08:00
JBD d4a8d24425 Add TODO about session lifetime 2026-01-26 18:10:54 -08:00
JBD 18c497469c Return the outputs 2026-01-26 18:07:13 -08:00
JBD 6ebe346f00 Fix the example input for the Python agent example 2026-01-26 18:00:27 -08:00
JBD 695ab76259 Add TODO about compaction 2026-01-26 17:55:43 -08:00
JBD 3f1ab3ae8f Fix EVENT_TYPE_HEARTBEAT 2026-01-26 17:53:21 -08:00
JBD 24813a815b Regenerate the proto file 2026-01-26 17:51:34 -08:00
JBD 17c4d847de Fix the index of EVENT_TYPE_HEARTBEAT 2026-01-26 17:50:16 -08:00
JBD f9ed93bcb0 Remove EVENT_TYPE_PROGRESS 2026-01-26 17:44:26 -08:00
JBD a0ff83feb5 Remove advanced load balancing strategies 2026-01-26 17:39:35 -08:00
JBD 9ab7ed4daf Use RemoteAgentConfig when registering remote agents 2026-01-26 17:37:32 -08:00
JBD 1704afbd54 Make event type an enum 2026-01-26 17:20:39 -08:00
JBD ba2ac6d8c6 Send periodic HEARTBEAT events 2026-01-26 17:17:06 -08:00
JBD 7ff4a28c95 Add TODO about CompactionFunc 2026-01-26 17:14:57 -08:00
JBD 91c824e073 Remove unused/obsolete states 2026-01-26 17:11:52 -08:00
JBD a7063e04ac PlanFunc and EvaluateFunc should accept a context 2026-01-26 17:05:05 -08:00
JBD cc8c540ef8 Don't hardcode "no_action" agent 2026-01-25 12:32:46 -08:00
JBD 5db32490ad Remove dead code 2026-01-25 12:29:39 -08:00
JBD 6ce5df2c70 Remove comment about Session, EventLog works as an interface 2026-01-25 12:26:05 -08:00
JBD d6c9212955 Add TODO about making Session an interface 2026-01-25 12:23:59 -08:00
JBD d4cb5a925d Introduce TriggerForkedSession 2026-01-25 12:19:45 -08:00
JBD 96768bc9ce Remove misleading metadata example 2026-01-25 12:10:26 -08:00
JBD 2037f3e76c Add TODO about multimodal input 2026-01-25 12:05:56 -08:00
JBD 29f29f3b81 Don't generate new session_id in the controller 2026-01-25 12:04:34 -08:00
JBD a825e2ecf6 Add TODO to implement session triggering 2026-01-25 12:03:21 -08:00
JBD 824704637f Return session_id in the trigger response 2026-01-25 12:00:37 -08:00
JBD 71aad87024 Simplify the instructions to register the demo agent 2026-01-24 13:28:46 -08:00
JBD a1c1e5f52f Remove duplicate method 2026-01-24 13:26:27 -08:00
JBD 470816f103 Add note about forking session 2026-01-24 13:24:57 -08:00
JBD 8fd03cb7a5 Use idiomatic naming for exists 2026-01-24 13:20:58 -08:00
JBD 6a327c0119 Remove dead code 2026-01-24 13:20:02 -08:00
JBD cae99a3fe1 Move checkpoint_id into Content 2026-01-24 13:19:05 -08:00
JBD 79d050472d Use any instead of interface{} 2026-01-24 12:57:38 -08:00
JBD 7cd2e55c5f Rename AgentTask to Task 2026-01-24 12:24:25 -08:00
JBD 1931ccfb14 Remove redundant comment 2026-01-24 12:21:23 -08:00
JBD c7791f677d Add gar deploy as an idea 2026-01-24 12:20:00 -08:00
JBD 516acaa4ef Remove arbitrary metadata fields 2026-01-24 12:05:03 -08:00
JBD b95c38f763 Allow registering remote agents from config 2026-01-24 11:55:20 -08:00
JBD 565b7eebe2 Allow Goal to be a struct type 2026-01-24 11:43:34 -08:00
JBD 15d062d60f Process handler should take the current session ID 2026-01-24 11:38:24 -08:00
JBD d3643fdcc5 Introduce sequence numbers to event logs 2026-01-21 21:36:06 -08:00
JBD fa0c2a91cb Move controller config to top level 2026-01-21 21:24:45 -08:00
JBD 22f1ae9051 Remove unnecessary output from the CLI 2026-01-21 21:17:50 -08:00
JBD 6d4c7000ce Remove configuration output at server start 2026-01-21 16:25:18 -08:00
JBD 13e43e99d5 Remove misleading metadata example 2026-01-21 16:09:29 -08:00
JBD 37869bb8ee Remove dead code 2026-01-21 16:09:29 -08:00
JBD 0a75bec327 Allow context propagation in the controller 2026-01-21 16:09:29 -08:00
JBD ee7a00f18c Subcommands should have a context 2026-01-21 16:09:29 -08:00
JBD 8ee4b988e6 Remove session_id from SessionInfo 2026-01-21 16:09:29 -08:00
JBD 81853c4cf8 Remove session_id from TriggerSessionResponse 2026-01-21 16:09:29 -08:00
JBD 63c815338c Fix run-local and run-remote 2026-01-21 16:09:29 -08:00
JBD 5c03f4ec1a Fix make build 2026-01-21 16:09:29 -08:00
JBD aa425a6558 Remove agent_id from HealthCheckRequest 2026-01-21 16:09:29 -08:00
JBD 9ef76b5479 Don't log lifecycle events
No use of logging them.
2026-01-21 16:09:29 -08:00
JBD 5c4fa994a9 Remove agent_id from LifecycleEvent 2026-01-21 16:09:29 -08:00
JBD dc87f7ef9b Use timestamp_pb2.Timestamp in the Python framework 2026-01-21 16:09:29 -08:00
JBD 62f6eeb4ec Use timestamppb.Now in the README 2026-01-21 16:09:29 -08:00
JBD 2dbaa2161b EventLog methods should take a context 2026-01-21 16:09:29 -08:00
JBD 27cd792a0b Rename GetEntries to RetrieveEntries 2026-01-21 16:09:29 -08:00
JBD c9310c9e40 Remove session listing 2026-01-21 16:09:29 -08:00
JBD 1ea212346f Rename gemini_planner.go to gemini.go 2026-01-21 16:09:29 -08:00
JBD 0c6c15f5ca Rename openConn to connect 2026-01-21 16:09:29 -08:00
JBD 249d688b38 Add TODO about Content 2026-01-21 16:09:29 -08:00
JBD 7971f8dba9 Remove metadata from HealthCheckResponse 2026-01-21 16:09:29 -08:00
JBD 37b55bbb90 Use timestamppb for timestamps 2026-01-21 16:09:29 -08:00
JBD 4dedfe9cac Make agent ID a constant 2026-01-21 16:09:29 -08:00
JBD f86259ec70 Remove misleading metadata from health check 2026-01-21 16:09:29 -08:00
JBD d35385860a gar trigger --input cannot be optional 2026-01-21 16:09:29 -08:00
JBD 18c63f1f31 Use --agent-name and --agent-description 2026-01-21 16:09:29 -08:00
JBD aaa81e758f gar register should require a name and description 2026-01-21 16:09:29 -08:00
JBD a043e3b7b7 Simplify inspect section 2026-01-21 16:09:29 -08:00
JBD 219fe7a899 Simplify the local example 2026-01-21 16:09:29 -08:00
JBD 0118059a09 Don't allow unregistering local agents 2026-01-21 16:09:29 -08:00
JBD 185e3ec4c3 Remove agent_type from RegisterAgentRequest 2026-01-21 16:09:29 -08:00
JBD f7ab4745b1 Remove root.go 2026-01-21 16:09:29 -08:00
JBD b42b3f9c83 Introduce openConn 2026-01-21 16:09:29 -08:00
JBD 1b15387d7c Make --server flag optional 2026-01-21 16:09:29 -08:00
JBD bf9eaa9ff0 Use cobra for CLI management 2026-01-21 16:09:29 -08:00
JBD c37188784b Ensure that max_steps are per trigger 2026-01-21 16:09:29 -08:00
JBD c7dbc7d967 Fix the indentation 2026-01-21 16:09:29 -08:00
JBD 04472c71b1 Remove gar list 2026-01-21 16:09:29 -08:00
JBD 9b2ed22857 Take a list of content as inputs 2026-01-21 16:09:29 -08:00
JBD 68d4e132fe Simplify the README 2026-01-21 16:09:29 -08:00
JBD b5b5912ac4 Introduce yaml based config 2026-01-21 16:09:29 -08:00
JBD c4b919bf8b Switch to the Gemini planner 2026-01-21 16:09:29 -08:00
JBD 06b5ecbd80 Add a simple Gemini planner 2026-01-21 16:09:29 -08:00
JBD ca1452dfca Add trajectory collection to the the TODOs 2026-01-21 16:09:29 -08:00
JBD 9385046fe5 Run gofmt -w 2026-01-21 16:09:29 -08:00
JBD 17c1fc6784 Add example health check function 2026-01-21 16:09:29 -08:00
JBD d8f08aacae Always return State_STATE_FAILED when there is an error 2026-01-21 16:09:29 -08:00
JBD 44024b2730 Remove extra line 2026-01-21 16:09:29 -08:00
JBD 5e37e609de gofmt the example 2026-01-21 16:09:29 -08:00
JBD 29df044a34 Remove useless descriptions 2026-01-21 16:09:29 -08:00