Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
136 lines
4.0 KiB
TypeScript
136 lines
4.0 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import type { AgentProviderComposerOptionsResponse } from "@tutti-os/client-tuttid-ts";
|
|
import { agentActivityComposerOptionsFromTuttidResult } from "./composerOptions.ts";
|
|
|
|
test("maps daemon composer options into the canonical activity contract", () => {
|
|
const options = agentActivityComposerOptionsFromTuttidResult("codex", {
|
|
codexSaverModeSupported: true,
|
|
rtkSaverModeSupported: true,
|
|
behavior: {
|
|
collapseModelOptionsToLatest: false,
|
|
modelOptionsAuthoritative: true,
|
|
planModeExclusiveWithPermissionMode: false,
|
|
prewarmDraftSession: false,
|
|
refreshModelOptionsAfterSettings: true
|
|
},
|
|
effectiveSettings: {
|
|
codexSaverMode: true,
|
|
rtkSaverMode: true,
|
|
model: "gpt-5"
|
|
},
|
|
modelConfig: {
|
|
configurable: true,
|
|
effectiveValue: "claude-haiku-4-5-20251001",
|
|
options: [
|
|
{
|
|
id: "gpt-5",
|
|
label: "GPT-5",
|
|
value: "gpt-5",
|
|
consumptionMultiplier: "0.71"
|
|
}
|
|
]
|
|
},
|
|
permissionConfig: { configurable: false, modes: [] },
|
|
reasoningConfig: { configurable: false, options: [] },
|
|
reasoningOptionsByModel: {},
|
|
runtimeContext: {},
|
|
commands: [],
|
|
skills: [],
|
|
capabilityCatalog: [],
|
|
provider: "codex"
|
|
} satisfies AgentProviderComposerOptionsResponse);
|
|
|
|
assert.equal(options.provider, "codex");
|
|
assert.equal(options.codexSaverModeSupported, true);
|
|
assert.equal(options.rtkSaverModeSupported, true);
|
|
assert.equal(options.effectiveSettings?.codexSaverMode, true);
|
|
assert.equal(options.effectiveSettings?.rtkSaverMode, true);
|
|
assert.equal(options.modelConfigurable, true);
|
|
assert.equal(options.effectiveModel, "claude-haiku-4-5-20251001");
|
|
assert.deepEqual(options.models, [
|
|
{
|
|
label: "GPT-5",
|
|
value: "gpt-5",
|
|
consumptionMultiplier: "0.71"
|
|
}
|
|
]);
|
|
assert.equal(options.effectiveSettings?.model, "gpt-5");
|
|
});
|
|
|
|
test("keeps fallback slash commands when effects are absent", () => {
|
|
const response = {
|
|
behavior: {
|
|
collapseModelOptionsToLatest: false,
|
|
modelOptionsAuthoritative: false,
|
|
planModeExclusiveWithPermissionMode: false,
|
|
prewarmDraftSession: false,
|
|
refreshModelOptionsAfterSettings: false
|
|
},
|
|
capabilityCatalog: [],
|
|
commands: [],
|
|
effectiveSettings: {},
|
|
modelConfig: { configurable: false, options: [] },
|
|
permissionConfig: { configurable: false, modes: [] },
|
|
provider: "acp:hermes",
|
|
reasoningConfig: { configurable: false, options: [] },
|
|
reasoningOptionsByModel: {},
|
|
runtimeContext: {},
|
|
skills: [],
|
|
slashCommandPolicy: {
|
|
fallbackCommands: ["compact", "help"]
|
|
}
|
|
} as unknown as AgentProviderComposerOptionsResponse;
|
|
const options = agentActivityComposerOptionsFromTuttidResult(
|
|
"acp:hermes",
|
|
response
|
|
);
|
|
|
|
assert.deepEqual(options.slashCommandPolicy, {
|
|
fallbackCommands: ["compact", "help"],
|
|
commandEffects: []
|
|
});
|
|
});
|
|
|
|
test("projects connector presentation icons from the daemon catalog", () => {
|
|
const response = {
|
|
behavior: {},
|
|
capabilityCatalog: [
|
|
{
|
|
id: "connector:github",
|
|
kind: "connector",
|
|
name: "github",
|
|
label: "GitHub",
|
|
status: "available",
|
|
invocation: "textTrigger",
|
|
iconUrl: "data:image/png;base64,Z2l0aHVi",
|
|
installedAtUnixMs: 1_786_089_600_000,
|
|
trigger: "/github"
|
|
}
|
|
],
|
|
commands: [],
|
|
effectiveSettings: {},
|
|
modelConfig: { configurable: false, options: [] },
|
|
permissionConfig: { configurable: false, modes: [] },
|
|
provider: "codex",
|
|
reasoningConfig: { configurable: false, options: [] },
|
|
reasoningOptionsByModel: {},
|
|
runtimeContext: {},
|
|
skills: []
|
|
} as unknown as AgentProviderComposerOptionsResponse;
|
|
|
|
const options = agentActivityComposerOptionsFromTuttidResult(
|
|
"codex",
|
|
response
|
|
);
|
|
|
|
assert.equal(
|
|
options.capabilityCatalog?.[0]?.iconUrl,
|
|
"data:image/png;base64,Z2l0aHVi"
|
|
);
|
|
assert.equal(
|
|
options.capabilityCatalog?.[0]?.installedAtUnixMs,
|
|
1_786_089_600_000
|
|
);
|
|
});
|