impel-cli 0.20.31 → 0.20.33
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/README.md +11 -10
- package/RELEASE_NOTES.md +21 -0
- package/docs/native-agent-host-capability-matrix.md +4 -4
- package/package.json +1 -1
- package/src/agents.js +4 -4
- package/src/nativeAgentTransport.js +38 -20
package/README.md
CHANGED
|
@@ -187,16 +187,17 @@ it by exact agent ID (preferred) or unique exact title:
|
|
|
187
187
|
impel codex --agent research-agent exec "answer this question"
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
-
This path loads a generated, tenant-bound profile with
|
|
191
|
-
for the thin adapter turns, a read-only local
|
|
192
|
-
binding, and only that binding's answer/run,
|
|
193
|
-
omits unrelated local repository, app,
|
|
194
|
-
and skill-catalog prompt context; the
|
|
195
|
-
substantive work. The path also omits
|
|
196
|
-
so there is no parent spawn, parent
|
|
197
|
-
developer-instruction, MCP, approval,
|
|
198
|
-
with `--agent`. The selected
|
|
199
|
-
Codex starts. Ordinary `impel
|
|
190
|
+
This path loads a generated, tenant-bound profile with the ultra-fast Codex
|
|
191
|
+
Spark model at low reasoning for the thin adapter turns, a read-only local
|
|
192
|
+
sandbox, the exact fixed MCP binding, and only that binding's answer/run,
|
|
193
|
+
resume, and recovery tools. It omits unrelated local repository, app,
|
|
194
|
+
collaboration, permission, environment, and skill-catalog prompt context; the
|
|
195
|
+
selected Eve agent still performs the substantive work. The path also omits
|
|
196
|
+
the normal parent specialist instructions, so there is no parent spawn, parent
|
|
197
|
+
wait, or relay turn. Model, profile, developer-instruction, MCP, approval,
|
|
198
|
+
sandbox, and feature overrides are rejected with `--agent`. The selected
|
|
199
|
+
tenant and profile integrity must match before Codex starts. Ordinary `impel
|
|
200
|
+
codex` passthrough is unchanged.
|
|
200
201
|
|
|
201
202
|
## Remote Fargate sessions
|
|
202
203
|
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Release notes
|
|
2
2
|
|
|
3
|
+
## 0.20.33 — Faster Codex native-agent relay
|
|
4
|
+
|
|
5
|
+
- Uses the ultra-fast Codex Spark model at low reasoning for fixed-binding
|
|
6
|
+
native-agent adapter turns; the selected Eve agent still owns the substantive
|
|
7
|
+
task and model choice.
|
|
8
|
+
- Preserves the direct-only MCP allowlist, read-only sandbox, durable
|
|
9
|
+
continuation recovery, and minimal host prompt while reducing long-answer
|
|
10
|
+
relay latency.
|
|
11
|
+
- Advances the managed profile manifest so existing CLI and Desktop adapters
|
|
12
|
+
refresh immediately on update.
|
|
13
|
+
|
|
14
|
+
## 0.20.32 — Recover transient managed access misses
|
|
15
|
+
|
|
16
|
+
- Retries one exact MCP request when the gateway reports its specific managed
|
|
17
|
+
virtual-key cache-miss rejection, covering catalog binding and direct-answer
|
|
18
|
+
calls before they become visible to the host model.
|
|
19
|
+
- Reuses the same native-answer idempotency key and waits only 250ms, so the
|
|
20
|
+
recovery cannot duplicate an Eve run or add latency to healthy requests.
|
|
21
|
+
- Keeps every nearby authentication and governance rejection definitive and
|
|
22
|
+
bounds a persistent managed-key miss to exactly two attempts.
|
|
23
|
+
|
|
3
24
|
## 0.20.31 — Complete embedded Tasks controls
|
|
4
25
|
|
|
5
26
|
- Allows the guarded `delete_task` operation through the tenant desktop bridge
|
|
@@ -37,10 +37,10 @@ is treated as an eager host.
|
|
|
37
37
|
and re-qualified rather than receiving unknown configuration.
|
|
38
38
|
- `mcp__impel_agent` is the native tool namespace. The server id
|
|
39
39
|
`impel_agent` is not equivalent and does not qualify as direct exposure.
|
|
40
|
-
- Generated Codex fixed-binding adapters use
|
|
41
|
-
tool-selection and terminal-relay turns, with
|
|
42
|
-
catalog context disabled. The selected Eve
|
|
43
|
-
still owns the substantive task.
|
|
40
|
+
- Generated Codex fixed-binding adapters use the ultra-fast Codex Spark model
|
|
41
|
+
at low reasoning for the thin tool-selection and terminal-relay turns, with
|
|
42
|
+
unrelated local host and skill-catalog context disabled. The selected Eve
|
|
43
|
+
agent, not this wrapper model, still owns the substantive task.
|
|
44
44
|
|
|
45
45
|
## Requalification
|
|
46
46
|
|
package/package.json
CHANGED
package/src/agents.js
CHANGED
|
@@ -55,12 +55,12 @@ export const NATIVE_AGENT_RESUME_TOOL = "resume_native_agent_run";
|
|
|
55
55
|
export const NATIVE_AGENT_RECOVER_TOOL = "recover_native_agent_runs";
|
|
56
56
|
export const NATIVE_AGENT_CONTINUATION_SCHEMA = "impel.native-agent-continuation.v1";
|
|
57
57
|
export const MANAGED_AGENT_MCP_SERVER = "impel_agent";
|
|
58
|
-
export const MANAGED_AGENT_MANIFEST_VERSION =
|
|
58
|
+
export const MANAGED_AGENT_MANIFEST_VERSION = 19;
|
|
59
59
|
|
|
60
60
|
// The host model only selects the fixed MCP tool and faithfully returns its
|
|
61
|
-
// result.
|
|
62
|
-
//
|
|
63
|
-
const CODEX_AGENT_ADAPTER_MODEL = "gpt-5.
|
|
61
|
+
// result. Spark minimizes those transport-only turns while the selected Eve
|
|
62
|
+
// agent remains responsible for the substantive work.
|
|
63
|
+
const CODEX_AGENT_ADAPTER_MODEL = "gpt-5.3-codex-spark";
|
|
64
64
|
|
|
65
65
|
const NATIVE_AGENT_TOOL_NAMES = [
|
|
66
66
|
NATIVE_AGENT_RUN_TOOL,
|
|
@@ -63,6 +63,8 @@ const STATE_COMMIT_LEASE_MARGIN_MS = 5_000;
|
|
|
63
63
|
const CIBI_START_IN_PROGRESS_CODE = "eve_run_drain_start_in_progress";
|
|
64
64
|
const CIBI_START_IN_PROGRESS_MESSAGE = "The durable Eve drain workflow is still being enqueued; retry this idempotent start.";
|
|
65
65
|
const CTOS_START_TIMEOUT_MESSAGE = `MCP tool call failed for ${NATIVE_AGENT_START_TOOL}: The operation was aborted due to timeout: mcp tool call failed`;
|
|
66
|
+
const MANAGED_VIRTUAL_KEY_MISS_MESSAGE = "virtual key not found. The provided virtual key does not exist or has been revoked.";
|
|
67
|
+
const MANAGED_VIRTUAL_KEY_MISS_RETRY_DELAY_MS = 250;
|
|
66
68
|
const MCP_TOOL_RESULT_ERROR = Symbol("native-agent MCP tool result error");
|
|
67
69
|
const TERMINAL_STATUSES = new Set(["succeeded", "failed", "cancelled", "canceled"]);
|
|
68
70
|
|
|
@@ -634,6 +636,12 @@ function toolPayload(message) {
|
|
|
634
636
|
return result;
|
|
635
637
|
}
|
|
636
638
|
|
|
639
|
+
function retryableManagedVirtualKeyMiss(error) {
|
|
640
|
+
return error instanceof NativeAgentUpstreamError
|
|
641
|
+
&& (error[MCP_TOOL_RESULT_ERROR] === true || error.code === -32000)
|
|
642
|
+
&& error.message.includes(MANAGED_VIRTUAL_KEY_MISS_MESSAGE);
|
|
643
|
+
}
|
|
644
|
+
|
|
637
645
|
export class NativeAgentUpstreamSession {
|
|
638
646
|
constructor({
|
|
639
647
|
gatewayUrl,
|
|
@@ -756,28 +764,38 @@ export class NativeAgentUpstreamSession {
|
|
|
756
764
|
}
|
|
757
765
|
|
|
758
766
|
async call(name, args, { signal } = {}) {
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
&& error
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
767
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
768
|
+
const id = this.nextId++;
|
|
769
|
+
try {
|
|
770
|
+
const messages = await this.post({
|
|
771
|
+
jsonrpc: "2.0",
|
|
772
|
+
id,
|
|
773
|
+
method: "tools/call",
|
|
774
|
+
params: { name, arguments: args },
|
|
775
|
+
}, { signal });
|
|
776
|
+
return toolPayload(messages.find((message) => message?.id === id));
|
|
777
|
+
} catch (error) {
|
|
778
|
+
if (attempt === 0 && retryableManagedVirtualKeyMiss(error)) {
|
|
779
|
+
// This gateway-authored miss happens before a native run can exist.
|
|
780
|
+
// One same-session replay repairs transient per-task governance-cache
|
|
781
|
+
// drift while leaving every nearby auth/policy rejection definitive.
|
|
782
|
+
await abortableDelay(MANAGED_VIRTUAL_KEY_MISS_RETRY_DELAY_MS, signal);
|
|
783
|
+
continue;
|
|
784
|
+
}
|
|
785
|
+
if ((name === NATIVE_AGENT_START_TOOL || name === NATIVE_AGENT_UPSTREAM_ANSWER_TOOL)
|
|
786
|
+
&& error instanceof NativeAgentUpstreamError
|
|
787
|
+
&& (error.incompleteResponse
|
|
788
|
+
|| error.code === CIBI_START_IN_PROGRESS_CODE
|
|
789
|
+
|| error.data?.code === CIBI_START_IN_PROGRESS_CODE
|
|
790
|
+
|| error.message === CIBI_START_IN_PROGRESS_MESSAGE
|
|
791
|
+
|| (error[MCP_TOOL_RESULT_ERROR] === true
|
|
792
|
+
&& error.message === CTOS_START_TIMEOUT_MESSAGE))) {
|
|
793
|
+
error.ambiguous = true;
|
|
794
|
+
}
|
|
795
|
+
throw error;
|
|
778
796
|
}
|
|
779
|
-
throw error;
|
|
780
797
|
}
|
|
798
|
+
throw new Error("native-agent MCP retry loop exhausted");
|
|
781
799
|
}
|
|
782
800
|
}
|
|
783
801
|
|