feat(util): extract requireEnv/optionalEnv to workflow-util

- requireEnv(name, message) — throws with custom error message
- optionalEnv(name, fallback?) — returns fallback or null
- Update develop and solve-issue bundle entries to use shared helpers
- Remove inline requireEnv/optionalEnv and wrapAgentAsAdapter usage
- Add tests for both functions

小橘 🍊
This commit is contained in:
2026-05-13 04:45:21 +00:00
parent ed38543db4
commit 21cf3db111
7 changed files with 87 additions and 32 deletions
+2 -1
View File
@@ -15,6 +15,7 @@
},
"dependencies": {
"@uncaged/workflow-runtime": "workspace:*",
"@uncaged/workflow-cas": "workspace:*"
"@uncaged/workflow-cas": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -19,12 +19,18 @@ export function wrapAgentAsAdapter(
): AdapterFn {
return <T>(prompt: string, schema: z.ZodType<T>) => {
return async (ctx: ThreadContext, runtime: WorkflowRuntime): Promise<RoleResult<T>> => {
const agentCtx: AgentContext = { ...ctx, currentRole: { name: "agent", systemPrompt: prompt } };
const agentCtx: AgentContext = {
...ctx,
currentRole: { name: "agent", systemPrompt: prompt },
};
const result = await agentFn(agentCtx);
const output = typeof result === "string" ? result : result.output;
const childThread = typeof result === "string" ? null : result.childThread;
const contentHash = await putContentNodeWithRefs(runtime.cas, output, []);
const extracted = await runtime.extract(schema as z.ZodType<Record<string, unknown>>, contentHash);
const extracted = await runtime.extract(
schema as z.ZodType<Record<string, unknown>>,
contentHash,
);
return { meta: extracted.meta as T, childThread };
};
};