diff --git a/docs/screenshots/README.md b/docs/screenshots/README.md index a547c08..d69fc0b 100644 --- a/docs/screenshots/README.md +++ b/docs/screenshots/README.md @@ -20,3 +20,6 @@ Light and dark, 390 and 1440 px: - `profile-*`: a profile (persona), with its personality, its scope and its Skills child list. - `skill-*`: a skill: its instructions and when it is used. - `policy-*`: the policy, with its "Tools and data" section. +- `panel-persona-*`: the panel with the configured persona. This is the Next UI build of qqq-frontend-next#94; the demo's admin matches the permission-scoped "Ada (analytics)" profile. +- `panel-pending-*`: the assistant proposed `update_record` on page 12, which is READ_WRITE. The card shows the change with Save and Cancel; nothing is saved yet. +- `panel-confirmed-*`: after Save, the write ran once through `PATCH /qqq/v1/table/page/12` with the user's session. The card says Done, and the record screen behind the panel shows the new value. diff --git a/docs/screenshots/panel-confirmed-dark-1440.png b/docs/screenshots/panel-confirmed-dark-1440.png new file mode 100644 index 0000000..b9ce73f Binary files /dev/null and b/docs/screenshots/panel-confirmed-dark-1440.png differ diff --git a/docs/screenshots/panel-confirmed-dark-390.png b/docs/screenshots/panel-confirmed-dark-390.png new file mode 100644 index 0000000..42f4af0 Binary files /dev/null and b/docs/screenshots/panel-confirmed-dark-390.png differ diff --git a/docs/screenshots/panel-confirmed-light-1440.png b/docs/screenshots/panel-confirmed-light-1440.png new file mode 100644 index 0000000..7cac6c9 Binary files /dev/null and b/docs/screenshots/panel-confirmed-light-1440.png differ diff --git a/docs/screenshots/panel-confirmed-light-390.png b/docs/screenshots/panel-confirmed-light-390.png new file mode 100644 index 0000000..ae0a9a9 Binary files /dev/null and b/docs/screenshots/panel-confirmed-light-390.png differ diff --git a/docs/screenshots/panel-pending-dark-1440.png b/docs/screenshots/panel-pending-dark-1440.png new file mode 100644 index 0000000..8309a73 Binary files /dev/null and b/docs/screenshots/panel-pending-dark-1440.png differ diff --git a/docs/screenshots/panel-pending-dark-390.png b/docs/screenshots/panel-pending-dark-390.png new file mode 100644 index 0000000..1ecdffd Binary files /dev/null and b/docs/screenshots/panel-pending-dark-390.png differ diff --git a/docs/screenshots/panel-pending-light-1440.png b/docs/screenshots/panel-pending-light-1440.png new file mode 100644 index 0000000..5f916ae Binary files /dev/null and b/docs/screenshots/panel-pending-light-1440.png differ diff --git a/docs/screenshots/panel-pending-light-390.png b/docs/screenshots/panel-pending-light-390.png new file mode 100644 index 0000000..7d94773 Binary files /dev/null and b/docs/screenshots/panel-pending-light-390.png differ diff --git a/docs/screenshots/panel-persona-dark-1440.png b/docs/screenshots/panel-persona-dark-1440.png new file mode 100644 index 0000000..9998481 Binary files /dev/null and b/docs/screenshots/panel-persona-dark-1440.png differ diff --git a/docs/screenshots/panel-persona-dark-390.png b/docs/screenshots/panel-persona-dark-390.png new file mode 100644 index 0000000..8faf80b Binary files /dev/null and b/docs/screenshots/panel-persona-dark-390.png differ diff --git a/docs/screenshots/panel-persona-light-1440.png b/docs/screenshots/panel-persona-light-1440.png new file mode 100644 index 0000000..e266e7e Binary files /dev/null and b/docs/screenshots/panel-persona-light-1440.png differ diff --git a/docs/screenshots/panel-persona-light-390.png b/docs/screenshots/panel-persona-light-390.png new file mode 100644 index 0000000..cb1ffc3 Binary files /dev/null and b/docs/screenshots/panel-persona-light-390.png differ diff --git a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java index e95553e..2ee862a 100644 --- a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java +++ b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java @@ -160,6 +160,15 @@ public class AssistantDemoServer extends AbstractQQQApplication api.thenError(529, "overloaded.json").thenError(529, "overloaded.json").thenError(529, "overloaded.json"); runner.run(AssistantTestFixture.OTHER_EDITOR, "Draft a post outline."); + /////////////////////////////////////////////////////////////////// + // the first question asked in the panel proposes a page change // + // (page is READ_WRITE): the panel shows the confirmation card // + /////////////////////////////////////////////////////////////////// + for(int i = 0; i < 8; i++) + { + api.thenStream("propose-page-update.sse", 0).thenStream("proposed-answer.sse", 0); + } + instance.withInstanceDefaultAuthentication(new QAuthenticationMetaData().withName("mock").withType(QAuthenticationType.MOCK) .withCustomizer(new QCodeReference(DemoSessionCustomizer.class))); instance.setHomeAppName(AssistantMetaDataBuilder.APP_NAME); diff --git a/qbit-assistant-provider-anthropic/src/test/resources/fixtures/propose-page-update.sse b/qbit-assistant-provider-anthropic/src/test/resources/fixtures/propose-page-update.sse new file mode 100644 index 0000000..09e43d3 --- /dev/null +++ b/qbit-assistant-provider-anthropic/src/test/resources/fixtures/propose-page-update.sse @@ -0,0 +1,39 @@ +event: message_start +data: {"type":"message_start","message":{"id":"msg_tools_01","type":"message","role":"assistant","model":"claude-sonnet-5-5","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":300,"output_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":5000}}} + +event: content_block_start +data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"sig-tools-1"}} + +event: content_block_stop +data: {"type":"content_block_stop","index":0} + +event: content_block_start +data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"I can draft that page change for you."}} + +event: content_block_stop +data: {"type":"content_block_stop","index":1} + +event: content_block_start +data: {"type":"content_block_start","index":2,"content_block":{"type":"tool_use","id":"toolu_W","name":"update_record","input":{}}} + +event: content_block_delta +data: {"type":"content_block_delta","index":2,"delta":{"type":"input_json_delta","partial_json":"{\"table\": \"page\", \"id\": \"12\", "}} + +event: content_block_delta +data: {"type":"content_block_delta","index":2,"delta":{"type":"input_json_delta","partial_json":"\"values\": {\"metaDescription\": \"Who I am, what I build, and the home lab behind it.\"}}"}} + +event: content_block_stop +data: {"type":"content_block_stop","index":2} + +event: message_delta +data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"output_tokens":60}} + +event: message_stop +data: {"type":"message_stop"} + diff --git a/qbit-assistant-provider-anthropic/src/test/resources/fixtures/proposed-answer.sse b/qbit-assistant-provider-anthropic/src/test/resources/fixtures/proposed-answer.sse new file mode 100644 index 0000000..bab2902 --- /dev/null +++ b/qbit-assistant-provider-anthropic/src/test/resources/fixtures/proposed-answer.sse @@ -0,0 +1,36 @@ +event: message_start +data: {"type":"message_start","message":{"id":"msg_text_01","type":"message","role":"assistant","model":"claude-sonnet-5-5","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":120,"output_tokens":1,"cache_creation_input_tokens":2048,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":48,"ephemeral_1h_input_tokens":2000}}}} + +event: content_block_start +data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"SECRET_THINKING_TEXT"}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"sig-abc-123"}} + +event: content_block_stop +data: {"type":"content_block_stop","index":0} + +event: content_block_start +data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}} + +event: ping +data: {"type":"ping"} + +event: content_block_delta +data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"I proposed the new meta description for page 12. Confirm it in the card to save it."}} + +event: content_block_stop +data: {"type":"content_block_stop","index":1} + +event: message_delta +data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":42}} + +event: message_stop +data: {"type":"message_stop"} +