Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
5a4da94
Initial tool invoke implementation
vigoo Aug 26, 2026
f49e119
Rebased on streaming invocation
vigoo Aug 29, 2026
9609092
Merge remote-tracking branch 'origin/main' into tool-invoke
vigoo Aug 31, 2026
361d28a
Fixes
vigoo Aug 31, 2026
1ef8c03
Merge remote-tracking branch 'origin/main' into tool-invoke
vigoo Aug 31, 2026
0fcea91
Fix
vigoo Aug 31, 2026
b85fb8c
Missing files
vigoo Sep 1, 2026
42b8930
Fixes
vigoo Sep 1, 2026
7d976b0
Merge branch 'main' into tool-invoke
vigoo Sep 1, 2026
9ec594c
Fixes
vigoo Sep 1, 2026
621b75a
Merge branch 'main' into tool-invoke
vigoo Sep 1, 2026
84b06b1
restore the sdk-path helper tests dropped from helpers.rs
noise64 Sep 1, 2026
8deed15
drop the unreachable stdout arms from decode_client_result
noise64 Sep 1, 2026
d57498b
skip empty stdout chunks in the ts guest writer
noise64 Sep 1, 2026
f86a418
stop retaining the moved tool-stdin handle in the ts pump
noise64 Sep 1, 2026
15ed2ce
skip empty stdout chunks and handle unknown failure tags in scala
noise64 Sep 1, 2026
144aec6
cancel the started invocation when declared stdout is missing
noise64 Sep 1, 2026
c79580c
skip empty stdin chunks and release an unstarted byte_stream source
noise64 Sep 1, 2026
0db4ec8
release tool input and stdin when start fails to encode
noise64 Sep 1, 2026
91672cd
fail read_all on a stdout failure item instead of skipping it
noise64 Sep 1, 2026
f05d74b
stop writing an empty successful stdin item
noise64 Sep 1, 2026
ab2a296
publish staged stdout on the cancelled no-body tool terminal
noise64 Sep 1, 2026
2ab7ca5
notify waiters when an unaccepted tool operation is removed
noise64 Sep 1, 2026
ce9df52
record validated tool invoke integration base
vigoo Sep 1, 2026
7c65004
Keep tool stream operation cancellation non-terminal
vigoo Sep 2, 2026
49ceaec
Preserve replay claim payload failures
vigoo Sep 2, 2026
778dcba
Keep concurrent tool attempt replay identity stable
vigoo Sep 2, 2026
24cafcf
Make tool operation lease cleanup race-free
vigoo Sep 2, 2026
001fe82
Centralize no-body attachment publication
vigoo Sep 2, 2026
e25255b
Expose entity attribution in agent oplogs
vigoo Sep 2, 2026
164ae00
Make tool replay admission deterministic
vigoo Sep 2, 2026
773ac28
Fix Rust started tool invocation observers
vigoo Sep 3, 2026
854d043
Handle TypeScript tool results lazily
vigoo Sep 3, 2026
04c5a0d
Fix MoonBit tool stream lifecycle
vigoo Sep 3, 2026
cfece71
Preserve TypeScript tool stream failures
vigoo Sep 3, 2026
9a79fd7
Finish tool stream contract conformance
vigoo Sep 3, 2026
31a7569
Add Scala streaming method support
vigoo Sep 2, 2026
2df530c
Test Scala streaming lifecycle semantics
vigoo Sep 2, 2026
a4d3480
Preserve Scala declared tool errors during collection
vigoo Sep 3, 2026
8e59ef4
Separate Scala middleware stream handles
vigoo Sep 3, 2026
fd4f726
Fix Scala tool invocation ownership
vigoo Sep 3, 2026
3ddb277
Record final tool invocation verification
vigoo Sep 3, 2026
9dd1fab
Merge remote-tracking branch 'origin/main' into tool-invoke
vigoo Sep 3, 2026
9123c1e
Merge remote-tracking branch 'origin/main' into gol-38-entity-aware-o…
vigoo Sep 3, 2026
8c9dcc3
Fix post-merge CI failures
vigoo Sep 3, 2026
e75a694
Merge remote-tracking branch 'origin/tool-invoke' into gol-38-entity-…
vigoo Sep 3, 2026
6402566
Merge origin/main into gol-38-entity-aware-oplog
vigoo Sep 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions cli/golem-cli/command-output-schema/command-output.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1782,6 +1782,7 @@
"required": [
"$type",
"index",
"attribution",
"entry"
],
"properties": {
Expand All @@ -1792,6 +1793,9 @@
"type": "integer",
"minimum": 0
},
"attribution": {
"$ref": "#/definitions/PublicOplogEntryAttribution"
},
"entry": {
"$ref": "#/definitions/PublicOplogEntry"
}
Expand Down Expand Up @@ -4572,6 +4576,78 @@
},
"additionalProperties": false
},
"PublicOplogEntryAttribution": {
"oneOf": [
{
"type": "object",
"required": ["type"],
"properties": {
"type": { "const": "Agent" }
},
"additionalProperties": false
},
{
"type": "object",
"required": ["type", "invocation", "ancestors"],
"properties": {
"type": { "const": "Entity" },
"invocation": { "$ref": "#/definitions/PublicEntityInvocation" },
"ancestors": {
"type": "array",
"items": { "$ref": "#/definitions/PublicEntityInvocation" }
}
},
"additionalProperties": false
}
]
},
"PublicEntityInvocation": {
"type": "object",
"required": ["entity", "startIndex", "callMode", "operation"],
"properties": {
"entity": { "$ref": "#/definitions/PublicAgentEntity" },
"startIndex": { "type": "integer", "minimum": 1 },
"callMode": { "type": "string", "enum": ["synchronous", "asynchronous", "fireAndForget"] },
"operation": {
"oneOf": [
{ "$ref": "#/definitions/PublicEntityInvocationOperation" },
{ "type": "null" }
]
}
},
"additionalProperties": false
},
"PublicAgentEntity": {
"type": "object",
"required": ["kind", "name"],
"properties": {
"kind": { "type": "string", "enum": ["tool", "toolMiddleware"] },
"name": { "type": "string" }
},
"additionalProperties": false
},
"PublicEntityInvocationOperation": {
"oneOf": [
{
"type": "object",
"required": ["type", "commandPath", "hasStdin", "hasStdout", "declaresStdout"],
"properties": {
"type": { "const": "Tool" },
"commandPath": { "type": "array", "items": { "type": "string" } },
"hasStdin": { "type": "boolean" },
"hasStdout": {
"type": "boolean",
"description": "Whether a live stdout attachment was requested. Stdout bytes are not recorded in the oplog."
},
"declaresStdout": {
"type": "boolean",
"description": "Whether the tool declares stdout support. Stdout bytes are not recorded in the oplog."
}
},
"additionalProperties": false
}
]
},
"PublicOplogEntry": {
"oneOf": [
{ "$ref": "#/definitions/PublicOplogEntryCreate" },
Expand Down Expand Up @@ -7799,6 +7875,7 @@
},
"SecretValuePayload": {
"type": "object",
"description": "Secret handle identity and resolution metadata. Plaintext secret material is never included.",
"required": ["secretId", "version", "resolvedAt"],
"properties": {
"secretId": { "type": "string" },
Expand Down
21 changes: 9 additions & 12 deletions cli/golem-cli/src/command_handler/agent/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ use golem_common::model::component::ComponentName;
use golem_common::model::component::{ComponentId, ComponentRevision};
use golem_common::model::component_metadata::{ParsedFunctionName, ParsedFunctionSite};
use golem_common::model::environment::EnvironmentName;
use golem_common::model::oplog::{OplogCursor, PublicOplogEntry};
use golem_common::model::oplog::{OplogCursor, PublicOplogEntryWithIndex};
use golem_common::model::worker::{
AgentConfigEntryDto, RevertLastInvocations, RevertToOplogIndex, UpdateRecord,
};
Expand Down Expand Up @@ -782,7 +782,7 @@ impl AgentCommandHandler {
let mut cursor = Option::<OplogCursor>::None;
let mut had_entries = false;
loop {
let mut entries = Vec::<(u64, PublicOplogEntry)>::new();
let mut entries = Vec::<PublicOplogEntryWithIndex>::new();
cursor = {
let clients = self.ctx.golem_clients().await?;

Expand All @@ -799,21 +799,18 @@ impl AgentCommandHandler {
.await
.map_service_error()?;

entries.extend(
result
.entries
.into_iter()
.map(|entry| (entry.oplog_index.as_u64(), entry.entry)),
);
entries.extend(result.entries);
result.next
};

if !entries.is_empty() {
had_entries = true;
for (index, entry) in entries {
self.ctx
.log_handler()
.log_output(AgentOplogEntryView { index, entry })?;
for entry in entries {
self.ctx.log_handler().log_output(AgentOplogEntryView {
index: entry.oplog_index.as_u64(),
attribution: entry.attribution,
entry: entry.entry,
})?;
}
}

Expand Down
Loading
Loading