summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-08-21 10:43:08 -0600
committert <t@tjp.lol>2026-08-21 10:44:33 -0600
commit2d4981b3870f2aee75d03006eea6318c501fe47b (patch)
treece0488e7100a5d096e91d490427590b03ef23afb
parent4183fdc7d3667fb4c2af72ff0098c15168c9e950 (diff)
Expose workflow status to other extensions
-rw-r--r--README.md5
-rw-r--r--init.lua1
-rw-r--r--spec/test_init.lua2
3 files changed, 8 insertions, 0 deletions
diff --git a/README.md b/README.md
index b462053..1cbf917 100644
--- a/README.md
+++ b/README.md
@@ -145,6 +145,11 @@ records through `subagents.workflows[id]`, including named child status and
outputs. Every `ctx:agent` needs a workflow-unique `name`, and the callback must
return the workflow's string result.
+The same read-only workflow records are exposed to other extensions as
+`panto.ext.workflows`. Extensions can iterate this table or look up an ID; each
+record has `id`, `status`, `result`, `error`, and `agents`, and a `status` of
+`running` identifies in-flight background work.
+
Inline `agents` remain scoped to workflows started by that tool call. The API
can await one job or a group and supports one-turn workers whose validated tool
input is their structured result. Persistent TOML workflows remain the simpler
diff --git a/init.lua b/init.lua
index 5f0b411..3175cfa 100644
--- a/init.lua
+++ b/init.lua
@@ -267,6 +267,7 @@ local function activate()
end
jobs.MAX_CONCURRENT = configured_max_concurrent(ext)
+ ext.workflows = workflow_api.workflows
-- Discover through spawn so the workflow lanes, which resolve profiles
-- lazily, share the exact set this tool description advertises.
diff --git a/spec/test_init.lua b/spec/test_init.lua
index eb8777a..bb42c57 100644
--- a/spec/test_init.lua
+++ b/spec/test_init.lua
@@ -236,6 +236,8 @@ return {
{ "background workflows survive turn_end and interruption cancels them", function()
activate_bare(function(handle, ok, err)
assert(ok, tostring(err))
+ assert(handle.ext.workflows == workflow.workflows,
+ "extensions can inspect background workflow status")
local tool = handle.tools_by_name["subagents.lua"]
handle.queue({ output = "finished", settle = 3 })
local id = tool.handler({ source = [[