impel-cli 0.20.8 → 0.20.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RELEASE_NOTES.md +20 -0
- package/package.json +1 -1
- package/src/agents.js +11 -3
- package/src/nativeAgentTransport.js +8 -1
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Release notes
|
|
2
2
|
|
|
3
|
+
## 0.20.10 — Direct-answer continuation surface
|
|
4
|
+
|
|
5
|
+
- Limits answer-only native agents to the exact answer and resume tools.
|
|
6
|
+
- Removes the unnecessary recovery branch after an authoritative continuation
|
|
7
|
+
handle exists, keeping healthy long-running answers within four inference
|
|
8
|
+
rounds while durable profiles retain ambiguous-start recovery.
|
|
9
|
+
- Regenerates managed agent profiles so the eager allowlist matches the
|
|
10
|
+
fail-closed local MCP surface.
|
|
11
|
+
|
|
12
|
+
## 0.20.9 — Claude managed-tool permissions
|
|
13
|
+
|
|
14
|
+
- Lets eager Claude custom agents execute their fixed, tenant-bound MCP tools
|
|
15
|
+
in non-interactive `dontAsk` sessions without a permission prompt.
|
|
16
|
+
- Scopes prompt bypass to custom agents whose `tools` frontmatter contains only
|
|
17
|
+
the generated Impel run/resume/recovery allowlist; fallback profiles keep the
|
|
18
|
+
host's normal permission behavior.
|
|
19
|
+
- Preserves the terminal answer schema, status, and run id in the local result
|
|
20
|
+
so privacy-safe telemetry and native hosts can distinguish success from a
|
|
21
|
+
model process that merely exited cleanly.
|
|
22
|
+
|
|
3
23
|
## 0.20.8 — Claude direct-answer compatibility
|
|
4
24
|
|
|
5
25
|
- Publishes the bound direct-answer tool with Claude's supported closed object
|
package/package.json
CHANGED
package/src/agents.js
CHANGED
|
@@ -51,7 +51,7 @@ export const NATIVE_AGENT_RUN_TOOL = "run_native_agent";
|
|
|
51
51
|
export const NATIVE_AGENT_RESUME_TOOL = "resume_native_agent_run";
|
|
52
52
|
export const NATIVE_AGENT_RECOVER_TOOL = "recover_native_agent_runs";
|
|
53
53
|
export const MANAGED_AGENT_MCP_SERVER = "impel_agent";
|
|
54
|
-
export const MANAGED_AGENT_MANIFEST_VERSION =
|
|
54
|
+
export const MANAGED_AGENT_MANIFEST_VERSION = 9;
|
|
55
55
|
|
|
56
56
|
const NATIVE_AGENT_TOOL_NAMES = [
|
|
57
57
|
NATIVE_AGENT_RUN_TOOL,
|
|
@@ -61,7 +61,7 @@ const NATIVE_AGENT_TOOL_NAMES = [
|
|
|
61
61
|
const NATIVE_AGENT_RECOVERY_TOOL_NAMES = [NATIVE_AGENT_RESUME_TOOL, NATIVE_AGENT_RECOVER_TOOL];
|
|
62
62
|
function nativeAgentToolNames(agent) {
|
|
63
63
|
return usesDirectAnswer(agent)
|
|
64
|
-
? [NATIVE_AGENT_ANSWER_TOOL,
|
|
64
|
+
? [NATIVE_AGENT_ANSWER_TOOL, NATIVE_AGENT_RESUME_TOOL]
|
|
65
65
|
: NATIVE_AGENT_TOOL_NAMES;
|
|
66
66
|
}
|
|
67
67
|
function eagerNativeAgentTransportEnabled() {
|
|
@@ -706,7 +706,15 @@ function renderClaudeAgent({ tenantId, agent, name, invocation, recoveryOnly = f
|
|
|
706
706
|
`description: ${JSON.stringify(description)}`,
|
|
707
707
|
"model: haiku",
|
|
708
708
|
...(eager
|
|
709
|
-
? [
|
|
709
|
+
? [
|
|
710
|
+
// This agent receives only the exact fixed-binding MCP allowlist below,
|
|
711
|
+
// so bypassing prompts cannot grant filesystem, shell, connector, or
|
|
712
|
+
// arbitrary MCP access. It lets non-interactive/dontAsk hosts execute
|
|
713
|
+
// the selected managed adapter instead of auto-denying its sole call.
|
|
714
|
+
"permissionMode: bypassPermissions",
|
|
715
|
+
"tools:",
|
|
716
|
+
...toolNames.map((tool) => ` - ${JSON.stringify(nativeToolName(tool))}`),
|
|
717
|
+
]
|
|
710
718
|
: []),
|
|
711
719
|
"mcpServers:",
|
|
712
720
|
` - ${MANAGED_AGENT_MCP_SERVER}:`,
|
|
@@ -1735,10 +1735,13 @@ export class NativeAgentCompositeTransport {
|
|
|
1735
1735
|
});
|
|
1736
1736
|
if (result?.schema === NATIVE_AGENT_RESULT_SCHEMA && result.status === "succeeded") {
|
|
1737
1737
|
return {
|
|
1738
|
+
schema: "impel.native-agent-answer.v1",
|
|
1739
|
+
status: "succeeded",
|
|
1738
1740
|
forUser: result.finalText,
|
|
1739
1741
|
answer: result.finalText,
|
|
1740
1742
|
agentId: this.agentId,
|
|
1741
1743
|
scopeParam: this.scopeParam,
|
|
1744
|
+
runId: state.upstreamRunId,
|
|
1742
1745
|
};
|
|
1743
1746
|
}
|
|
1744
1747
|
return result;
|
|
@@ -2190,7 +2193,11 @@ export function nativeAgentCompositeTools({ mode = "durable" } = {}) {
|
|
|
2190
2193
|
},
|
|
2191
2194
|
];
|
|
2192
2195
|
if (mode === "answer") {
|
|
2193
|
-
|
|
2196
|
+
// A bounded answer either returns terminal text or the authoritative
|
|
2197
|
+
// continuation handle. Once that handle exists, resume is the only valid
|
|
2198
|
+
// next action; exposing recovery here gives the wrapper model an
|
|
2199
|
+
// unnecessary branch and can add a fifth inference round to healthy runs.
|
|
2200
|
+
return [answerTool, tools.find(({ name }) => name === NATIVE_AGENT_RESUME_TOOL)];
|
|
2194
2201
|
}
|
|
2195
2202
|
return mode === "recovery" ? tools.filter(({ name }) => name !== NATIVE_AGENT_RUN_TOOL) : tools;
|
|
2196
2203
|
}
|