mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-25 12:11:09 +00:00
feat: ask_user — structured questions from the agent with web card, channel buttons, and text answers (#109922)
* feat(gateway): add transient question runtime (question.* methods + broadcasts) * feat(agents): add blocking ask_user question tool with chat prompt delivery and text-reply claim * feat(ui): interactive in-thread question cards for ask_user * feat(channels): native tap-to-answer buttons for ask_user on Telegram, Discord, and Slack * feat(ui): unify codex and gateway question cards with interactive gateway answering * refactor(agents): collapse ask_user pending state to one registry; docs for ask_user * fix(agents): include ask_user in normal gateway runs; add question-flow control-ui e2e * test(ui): avoid credential-shaped fixture in question card test * refactor(ui): reorder stream-group context keys * fix(gateway,ui): validate question answers at resolve; reject secret/duplicate-label questions; UI retry and reconnect hardening * fix(gateway,agents): canonicalize accepted option answers; bound ask_user option labels to 64 chars * chore(ci): prune unused question exports, allowlist mobile question events, fix discord lint * chore(ci): regenerate protocol/i18n/docs/tool-display artifacts for question surface * fix(protocol): flatten QuestionRecord for native codegen; drop TS-only alias from schema registry * chore(android): regenerate ask-user localization resources * docs: regenerate docs map after rebase * fix(ci): avoid stale read-only dependency disks * test: remove stale reef lint suppression ratchet * fix(ci): keep source locale drift advisory in release gates * fix(ci): scope locale advisory handling to parity check
This commit is contained in:
committed by
GitHub
parent
bab9a5ede7
commit
da44d52ac6
@@ -2066,6 +2066,12 @@ describe("ci workflow guards", () => {
|
||||
expect(installStep.run).toContain(
|
||||
'[ "$sticky_fingerprint" = "${OPENCLAW_STICKY_DEPS_FINGERPRINT:?}" ]',
|
||||
);
|
||||
expect(installStep.run).toContain('[ "$STICKY_WRITER" != "true" ]');
|
||||
expect(installStep.run).toContain('sudo umount "$GITHUB_WORKSPACE/node_modules"');
|
||||
expect(installStep.run).toContain('ephemeral_store="${RUNNER_TEMP:?}/openclaw-pnpm-store"');
|
||||
expect(installStep.run).toContain(
|
||||
"Sticky dependency snapshot is stale; using runner-local storage for this read-only run",
|
||||
);
|
||||
expect(installStep.run).toContain(
|
||||
'bash "$GITHUB_ACTION_PATH/sticky-importers.sh" restore "$STICKY_ROOT" "$GITHUB_WORKSPACE"',
|
||||
);
|
||||
@@ -3628,7 +3634,7 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}"
|
||||
);
|
||||
});
|
||||
|
||||
it("keeps Control UI locale parity advisory until release CI", () => {
|
||||
it("keeps source-only Control UI locale drift advisory", () => {
|
||||
const workflow = readCiWorkflow();
|
||||
const workflowSource = readFileSync(".github/workflows/ci.yml", "utf8");
|
||||
const buildArtifactSteps = workflow.jobs["build-artifacts"].steps;
|
||||
@@ -3649,8 +3655,9 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}"
|
||||
);
|
||||
expect(localeJob.needs).toEqual(["preflight"]);
|
||||
expect(localeJob.if).toBe("needs.preflight.outputs.run_control_ui_i18n == 'true'");
|
||||
expect(localeJob["continue-on-error"]).toBe(
|
||||
"${{ github.event_name != 'workflow_dispatch' && needs.preflight.outputs.strict_control_ui_i18n != 'true' }}",
|
||||
expect(localeJob["continue-on-error"]).toBeUndefined();
|
||||
expect(localeStep["continue-on-error"]).toBe(
|
||||
"${{ needs.preflight.outputs.strict_control_ui_i18n != 'true' }}",
|
||||
);
|
||||
expect(localeStep.run).toBe("pnpm ui:i18n:check");
|
||||
expect(readFileSync(".github/workflows/full-release-validation.yml", "utf8")).toContain(
|
||||
|
||||
Reference in New Issue
Block a user