@ai-matrx/chat 0.2.3 → 0.2.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @ai-matrx/chat
2
2
 
3
+ ## 0.2.5 — 2026-10-06
4
+ ### Re-sync before matrx-frontend consumes the published package (P27)
5
+
6
+ - Carries every matrx-frontend `packages/chat` edit made after base `1b1bc31165`: run-headless-agent-json
7
+ (shortcutId/applicationScope + result keeping), picklist input, surface-catalog profile, host ui-slots and
8
+ window-openers, route-to-surface, tool-call-visualization registry/effects, regenerated `host/db-types.ts`
9
+ (pick-list renames). Alchemy imports stay on `@ai-matrx/alchemy/operate` (ALC-16).
10
+ - `store/hooks.ts` seam hooks (`useAppSelector`/`useAppDispatch`/`useAppStore`) are annotated so their
11
+ .d.ts keep the registered host types instead of the expanded bare shape (P27).
12
+ - Consumer action: none.
13
+
14
+ ## 0.2.4 — 2026-10-06
15
+
16
+ - The Alchemy menu imports come from `@ai-matrx/alchemy/react/workspace` and transfer types from
17
+ `@ai-matrx/alchemy/operate` (ALC-16; design-system 0.69.0 removed `./content-transfer`).
18
+ `conversationJsonFormat` is the contract's lazy `FormatAdapter` (`load()` → `build(draft, options, signal)`).
19
+ - `store/root-state.ts` `ChatHostReadSlices` drops its `[field: string]: unknown` index signatures, so a
20
+ host's concrete slice interfaces (matrx-frontend's `UserAuthState`, …) are assignable to the
21
+ package's emitted selector/thunk signatures (P27: ~490 of the 646 app errors against 0.2.3).
22
+ - Consumer action: none.
23
+
3
24
  ## 0.2.3
4
25
  ### The frontend's last in-flight chat edit, carried at the P27 cutover
5
26
 
@@ -4,7 +4,7 @@ import { useEffect, useId, useRef } from "react";
4
4
  import {
5
5
  createSurfaceTransferHandle
6
6
  } from "@ai-matrx/alchemy/operate";
7
- import { ContentTransferSurfaceProvider } from "@ai-matrx/design-system/content-transfer";
7
+ import { ContentTransferSurfaceProvider } from "@ai-matrx/alchemy/react/workspace";
8
8
  import { getSurfaceManifest } from "../host/ui-slots.js";
9
9
  function useAlchemySurfaceHandle(surfaceName, getScope) {
10
10
  const instanceId = useId();
@@ -1,5 +1,5 @@
1
- import type { FormatAdapter, Payload, Source } from "@ai-matrx/kit/content-transfer";
2
- import type { EnvelopeMeta, TransferMenuVariant } from "@ai-matrx/design-system/content-transfer";
1
+ import type { FormatAdapter, Payload, Source } from "@ai-matrx/alchemy/operate";
2
+ import type { EnvelopeMeta, TransferMenuVariant } from "@ai-matrx/alchemy/react/workspace";
3
3
  export type AlchemySessionIntent =
4
4
  /**
5
5
  * The preparation workspace (trim, choose, AI preparation, destinations). `forDestination`: the
@@ -15,7 +15,7 @@
15
15
  * network — the suite drives it directly.
16
16
  */
17
17
  import type { AgentPayloadInput } from "@ai-matrx/alchemy/operate";
18
- import type { AlchemyGroomerConfig } from "@ai-matrx/design-system/content-transfer";
18
+ import type { AlchemyGroomerConfig } from "@ai-matrx/alchemy/react/workspace";
19
19
  export type PageCaptureKind = "table-page" | "record" | "dialog" | "admin-page";
20
20
  /** A chosen thing, by name and id. Either may be null (not chosen / not loaded). */
21
21
  export interface PageCaptureNamed {
@@ -10,7 +10,7 @@ import {
10
10
  buildPicklistItemFence,
11
11
  readPicklistSelection
12
12
  } from "@ai-matrx/agents/envelope";
13
- import { useStructuredListForSelection } from "../../../../host/ui-slots.js";
13
+ import { usePickListForSelection } from "../../../../host/ui-slots.js";
14
14
  import { ReadFailure } from "../../../../host/ui-slots.js";
15
15
  const OTHER_PREFIX = "Other: ";
16
16
  function PicklistVariableInput({
@@ -23,7 +23,7 @@ function PicklistVariableInput({
23
23
  containerWidth = 0
24
24
  }) {
25
25
  const binding = readStructuredList(customComponent);
26
- const { items, loading, unavailable, error, retry } = useStructuredListForSelection(
26
+ const { items, loading, unavailable, error, retry } = usePickListForSelection(
27
27
  binding?.listId ?? null,
28
28
  binding?.groupName
29
29
  );
@@ -20,7 +20,7 @@ export declare function surfaceNameForKind(kind: WorkingDocumentKind): string;
20
20
  export declare function sourceFeatureForKind(kind: WorkingDocumentKind): SourceFeature;
21
21
  /** `UnifiedAgentContextMenu` prop bundle for a document kind. */
22
22
  export declare function workingDocumentContextMenuProps(kind: WorkingDocumentKind): {
23
- sourceFeature: "action_request_continuation" | "action_request_credential" | "action_request_one_time_code" | "action_request_park" | "action_request_resolve" | "admin" | "agent" | "agent-app" | "agent-builder" | "agent-comparison" | "agent-factory" | "agent-generator" | "agent-runner" | "agent-service" | "agent-studio" | "agent_blocks" | "agent_call" | "agent_flow_v1" | "agent_foundry_v1" | "agent_run" | "agent_structure_builder" | "agent_tool" | "agent_usage_sync" | "agents-other" | "ai-results" | "ai_judge" | "analysis-studio" | "auto_ingest" | "auto_ingest_ner" | "background_agent" | "billing" | "browser_handoff_delegate" | "browser_handoff_resolve" | "browser_session_health" | "builtin_agent" | "builtin_categorize" | "canvas" | "chat" | "claude-code" | "clean_pdf_extracted_content" | "client-unmapped" | "cloud_browser.local_login_learning" | "cms" | "code-editor" | "codex" | "coding_session_bridge.backfill" | "coding_session_native" | "coding_session_reply" | "communications.sms" | "conductor" | "content-extractor" | "content_plan_acceptance" | "content_plan_cms_fill" | "content_plan_cms_fill_preview" | "content_plan_deepen" | "content_plan_generate" | "content_processing" | "content_processing.research_landing" | "content_processing.transcript_landing" | "content_processing_upload_hook" | "context-parity" | "context_compare_answer" | "context_follow_listener" | "context_summary" | "conversation" | "conversation_context" | "conversation_crash_recovery" | "conversation_fork" | "conversation_resume" | "coverage" | "crawl_run" | "crm" | "crm.media_list_refresh" | "crm.media_list_research" | "crm.party_kind" | "crm.personalization" | "cursor" | "deep_research_v1" | "deferred_claim_recovery" | "dictionary" | "distillation_coherence" | "doc_verify" | "documents" | "education-analytics" | "education-assessment" | "education-fastfire" | "education-flashcards" | "education-ingest" | "education-media-reconcile" | "education-mindmap" | "education-planner" | "education-tutor" | "education_card_image_generator" | "education_card_image_prompt_writer" | "education_card_image_qc_judge" | "education_card_image_rot" | "education_card_image_web_source" | "education_card_images" | "education_study_pack" | "education_study_pack_v2" | "endpoint_family_sweep" | "external_url_change" | "files" | "fork_and_run" | "google_workspace.approval_replay" | "group_chat_cadence" | "hindsight" | "hindsight/crystallization" | "hindsight/wire_replay" | "hindsight_replay" | "hindsight_replay_worker" | "hindsight_shadow_recompilation" | "hr" | "human_decisions" | "image-studio" | "incident-assurance" | "internal" | "judge" | "kg_clustering_namer" | "legal" | "local_proxy" | "mandate_candidate_review" | "mandates.batch_lane" | "manual" | "marketing" | "masterwork" | "masterwork_audition_elicitation_vanilla" | "masterwork_audition_outcome_vanilla" | "masterwork_audition_unfolding_vanilla" | "masterwork_audition_vanilla" | "masterwork_bench_a2" | "masterwork_bench_extract" | "masterwork_bench_judge" | "masterwork_bench_panel" | "masterwork_build" | "masterwork_recovery" | "media_catalog" | "media_heal" | "meet:after_meeting_workflow" | "mermaid-workbench" | "messages" | "ner" | "news_monitor" | "notes" | "notify_listener" | "outcome_attribution" | "outreach" | "page_extraction" | "page_extraction_retry" | "pdf-cleaner" | "pdf-extractor" | "pdf-widgets" | "personal-staff" | "personal_staff_workspace_listener" | "platform_checks" | "platform_checks_drain" | "podcasts" | "print" | "product_capture_intake" | "product_capture_research" | "projects" | "prompt" | "proof_run:content_plan_family_grounding" | "proof_run:news_self_validating" | "provenance" | "provider_outage" | "rag" | "rag-search" | "rag.page_clean" | "rag_chunk_contextualizer" | "rag_hyde_generator" | "rag_pdf_page_cleaner" | "rag_query_expander" | "reachability" | "realtime" | "realtime_tool" | "registry_ingestion.pass" | "reroute" | "research" | "research_condenser_1" | "research_condenser_2" | "research_refresh_dispatch" | "row_history" | "scanner" | "scheduled" | "schema_coerce" | "scraper" | "scratchpad" | "screen_tool_run" | "seo" | "seo.engine_schedule_dispatcher" | "seo.keyword_place_backfill" | "seo.page_analysis" | "seo.rank_schedule" | "seo_analysis_sweep" | "seo_keyword_research" | "server-door" | "server-run" | "sharing" | "sms-assistant" | "sms-outbound" | "socket_compat" | "source_intelligence" | "staff-inbox-driver" | "suggestion_sweep" | "summarize_content" | "sweep_listener" | "system" | "tasks" | "tool-call-visualization" | "tool-testing" | "transcription" | "udt" | "vision_interview" | "vision_interview_tracker" | "voice-agent" | "vscode" | "web-capture" | "web_crawl_crash_resume" | "web_crawl_schedule_dispatch" | "web_research" | "web_url_announce" | "whole_value_follower" | "workflow_decision_fallback" | "workflow_extract_sweep" | "workflow_node_test" | "workflow_plan_assist" | "workflow_recovery_advisor" | "workflow_recovery_push" | "workflow_recovery_resolve" | "workflow_run" | "workflow_run_assists" | "workflow_worker" | "working-document" | "youtube_research_processing" | "youtube_transcription";
23
+ sourceFeature: "action_request_continuation" | "action_request_credential" | "action_request_one_time_code" | "action_request_park" | "action_request_resolve" | "admin" | "agent" | "agent-app" | "agent-builder" | "agent-comparison" | "agent-factory" | "agent-generator" | "agent-runner" | "agent-service" | "agent-studio" | "agent_blocks" | "agent_call" | "agent_factory.copy_probe" | "agent_factory.tool_probe" | "agent_flow_v1" | "agent_foundry_v1" | "agent_run" | "agent_structure_builder" | "agent_tool" | "agent_usage_sync" | "agents-other" | "ai-results" | "ai_judge" | "analysis-studio" | "auto_ingest" | "auto_ingest_ner" | "background_agent" | "billing" | "browser_handoff_delegate" | "browser_handoff_resolve" | "browser_session_health" | "builtin_agent" | "builtin_categorize" | "canvas" | "chat" | "claude-code" | "clean_pdf_extracted_content" | "client-unmapped" | "cloud_browser.local_login_learning" | "cms" | "code-editor" | "codex" | "coding_session_bridge.backfill" | "coding_session_native" | "coding_session_reply" | "communications.sms" | "conductor" | "content-extractor" | "content_plan_acceptance" | "content_plan_cms_fill" | "content_plan_cms_fill_preview" | "content_plan_deepen" | "content_plan_generate" | "content_processing" | "content_processing.research_landing" | "content_processing.transcript_landing" | "content_processing_upload_hook" | "context-parity" | "context_compare_answer" | "context_follow_listener" | "context_summary" | "conversation" | "conversation_context" | "conversation_crash_recovery" | "conversation_fork" | "conversation_resume" | "coverage" | "crawl_run" | "crm" | "crm.media_list_refresh" | "crm.media_list_research" | "crm.party_kind" | "crm.personalization" | "cursor" | "deep_research_v1" | "deferred_claim_recovery" | "dictionary" | "distillation_coherence" | "doc_verify" | "documents" | "education-analytics" | "education-assessment" | "education-fastfire" | "education-flashcards" | "education-ingest" | "education-media-reconcile" | "education-mindmap" | "education-planner" | "education-tutor" | "education_card_image_generator" | "education_card_image_prompt_writer" | "education_card_image_qc_judge" | "education_card_image_rot" | "education_card_image_web_source" | "education_card_images" | "education_study_pack" | "education_study_pack_v2" | "endpoint_family_sweep" | "external_url_change" | "files" | "fork_and_run" | "google_workspace.approval_replay" | "group_chat_cadence" | "hindsight" | "hindsight/crystallization" | "hindsight/wire_replay" | "hindsight_replay" | "hindsight_replay_worker" | "hindsight_shadow_recompilation" | "hr" | "human_decisions" | "image-studio" | "incident-assurance" | "internal" | "judge" | "kg_clustering_namer" | "legal" | "local_proxy" | "mandate_candidate_review" | "mandates.batch_lane" | "manual" | "marketing" | "masterwork" | "masterwork_audition_elicitation_vanilla" | "masterwork_audition_outcome_vanilla" | "masterwork_audition_unfolding_vanilla" | "masterwork_audition_vanilla" | "masterwork_bench_a2" | "masterwork_bench_extract" | "masterwork_bench_judge" | "masterwork_bench_panel" | "masterwork_build" | "masterwork_recovery" | "media_catalog" | "media_heal" | "meet:after_meeting_workflow" | "mermaid-workbench" | "messages" | "ner" | "news_monitor" | "notes" | "notify_listener" | "outcome_attribution" | "outreach" | "page_extraction" | "page_extraction_retry" | "pdf-cleaner" | "pdf-extractor" | "pdf-widgets" | "personal-staff" | "personal_staff_workspace_listener" | "platform_checks" | "platform_checks_drain" | "podcasts" | "print" | "product_capture_intake" | "product_capture_research" | "projects" | "prompt" | "proof_run:content_plan_family_grounding" | "proof_run:news_self_validating" | "provenance" | "provider_outage" | "rag" | "rag-search" | "rag.page_clean" | "rag_chunk_contextualizer" | "rag_hyde_generator" | "rag_pdf_page_cleaner" | "rag_query_expander" | "reachability" | "realtime" | "realtime_tool" | "registry_ingestion.pass" | "request_snapshot_blob" | "reroute" | "research" | "research_condenser_1" | "research_condenser_2" | "research_refresh_dispatch" | "row_history" | "scanner" | "scheduled" | "schema_coerce" | "scraper" | "scratchpad" | "screen_tool_run" | "seo" | "seo.engine_schedule_dispatcher" | "seo.keyword_place_backfill" | "seo.page_analysis" | "seo.rank_schedule" | "seo_analysis_sweep" | "seo_keyword_research" | "server-door" | "server-run" | "sharing" | "sms-assistant" | "sms-outbound" | "socket_compat" | "source_intelligence" | "staff-inbox-driver" | "suggestion_sweep" | "summarize_content" | "sweep_listener" | "system" | "tasks" | "test.agent_factory.intake" | "tool-call-visualization" | "tool-testing" | "transcription" | "udt" | "vision_interview" | "vision_interview_tracker" | "voice-agent" | "vscode" | "web-capture" | "web_crawl_crash_resume" | "web_crawl_schedule_dispatch" | "web_research" | "web_url_announce" | "whole_value_follower" | "workflow_decision_fallback" | "workflow_extract_sweep" | "workflow_holder_proof" | "workflow_node_test" | "workflow_plan_assist" | "workflow_recovery_advisor" | "workflow_recovery_push" | "workflow_recovery_resolve" | "workflow_run" | "workflow_run_assists" | "workflow_worker" | "working-document" | "youtube_research_processing" | "youtube_transcription";
24
24
  surfaceName: string;
25
25
  isEditable: true;
26
26
  enabledPlacements: ("ai-action" | "content-block" | "quick-action")[];
@@ -1,6 +1,6 @@
1
1
  import type { ConversationTransferRow } from "./conversation-transfer-rows.js";
2
2
  import type { Payload, Section, Source } from "@ai-matrx/alchemy/operate";
3
- import type { FormatAdapter } from "@ai-matrx/kit/content-transfer";
3
+ import type { FormatAdapter } from "@ai-matrx/alchemy/operate";
4
4
  import type { ChatDispatch, ChatRootState } from "../../store/root-state.js";
5
5
  export interface ConversationMessageRow {
6
6
  role: "user" | "assistant";
@@ -100,8 +100,13 @@ function conversationJsonFormat(read) {
100
100
  return {
101
101
  id: "json",
102
102
  label: "JSON",
103
+ extension: "json",
104
+ mime: "application/json;charset=utf-8",
105
+ modes: ["copy", "download"],
106
+ runsOn: "client",
103
107
  supports: (payload) => payload.kind === "markdown" || payload.kind === "text",
104
- build: async (draft, signal) => {
108
+ // The contract's lazy adapter (`@ai-matrx/alchemy/operate`): the engine is this closure.
109
+ load: async () => ({ build: async (draft, _options, signal) => {
105
110
  const c = await read();
106
111
  signal.throwIfAborted();
107
112
  const onlyCut = !draft.manuallyEdited && draft.provenance.every((p) => p.kind === "original" || p.kind === "deterministic") && draft.omissions.every((o) => o.reason === "excluded");
@@ -128,7 +133,7 @@ function conversationJsonFormat(read) {
128
133
  file: { filename: `${c.fileBase}.json`, mime: "application/json;charset=utf-8", bytes: new TextEncoder().encode(json) },
129
134
  omissions: draft.omissions.map((o) => ({ ...o }))
130
135
  });
131
- }
136
+ } })
132
137
  };
133
138
  }
134
139
  function sourceOf(id, label, read) {
@@ -418,10 +418,8 @@ export declare function makeSelectAssembledRequest(conversationId: string): ((st
418
418
  resetResultsCount: () => void;
419
419
  } & {
420
420
  resultFunc: (resultFuncArgs_0: import("../conversations/conversations.slice.js").ConversationsState, resultFuncArgs_1: import("../instance-ui-state/instance-ui-state.slice.js").InstanceUIStateSlice, resultFuncArgs_2: import("../instance-user-input/instance-user-input.slice.js").InstanceUserInputSliceState, resultFuncArgs_3: import("../instance-resources/instance-resources.slice.js").InstanceResourcesState, resultFuncArgs_4: import("../instance-variable-values/instance-variable-values.slice.js").InstanceVariableValuesState, resultFuncArgs_5: import("../instance-model-overrides/instance-model-overrides.slice.js").InstanceModelOverridesState, resultFuncArgs_6: import("../instance-context/instance-context.slice.js").InstanceContextState, resultFuncArgs_7: import("../instance-client-tools/instance-client-tools.slice.js").InstanceClientToolsState, resultFuncArgs_8: {
421
- [field: string]: unknown;
422
421
  organization_id?: string | null;
423
422
  } | undefined, resultFuncArgs_9: import("../../../../store/chat-host.slice.js").ChatHostState, resultFuncArgs_10: import("../../../types/agent-definition.types.js").AgentDefinitionSliceState, resultFuncArgs_11: import("../../../../surfaces/redux/userStateSlice.js").SurfaceUserStateSlice, resultFuncArgs_12: import("../messages/messages.slice.js").MessagesState, resultFuncArgs_13: {
424
- [field: string]: unknown;
425
423
  id: string | null;
426
424
  email?: string | null;
427
425
  isAnonymous?: boolean;
@@ -430,20 +428,16 @@ export declare function makeSelectAssembledRequest(conversationId: string): ((st
430
428
  adminLaneOpen?: boolean;
431
429
  adminLevel?: string | null;
432
430
  } | undefined, resultFuncArgs_14: {
433
- [field: string]: unknown;
434
431
  fingerprintId?: string | null;
435
432
  userMetadata?: {
436
433
  fullName?: string | null;
437
434
  name?: string | null;
438
435
  preferredUsername?: string | null;
439
- [field: string]: unknown;
440
436
  } | null;
441
437
  } | undefined) => AssembledAgentStartRequest | null;
442
438
  memoizedResultFunc: ((resultFuncArgs_0: import("../conversations/conversations.slice.js").ConversationsState, resultFuncArgs_1: import("../instance-ui-state/instance-ui-state.slice.js").InstanceUIStateSlice, resultFuncArgs_2: import("../instance-user-input/instance-user-input.slice.js").InstanceUserInputSliceState, resultFuncArgs_3: import("../instance-resources/instance-resources.slice.js").InstanceResourcesState, resultFuncArgs_4: import("../instance-variable-values/instance-variable-values.slice.js").InstanceVariableValuesState, resultFuncArgs_5: import("../instance-model-overrides/instance-model-overrides.slice.js").InstanceModelOverridesState, resultFuncArgs_6: import("../instance-context/instance-context.slice.js").InstanceContextState, resultFuncArgs_7: import("../instance-client-tools/instance-client-tools.slice.js").InstanceClientToolsState, resultFuncArgs_8: {
443
- [field: string]: unknown;
444
439
  organization_id?: string | null;
445
440
  } | undefined, resultFuncArgs_9: import("../../../../store/chat-host.slice.js").ChatHostState, resultFuncArgs_10: import("../../../types/agent-definition.types.js").AgentDefinitionSliceState, resultFuncArgs_11: import("../../../../surfaces/redux/userStateSlice.js").SurfaceUserStateSlice, resultFuncArgs_12: import("../messages/messages.slice.js").MessagesState, resultFuncArgs_13: {
446
- [field: string]: unknown;
447
441
  id: string | null;
448
442
  email?: string | null;
449
443
  isAnonymous?: boolean;
@@ -452,13 +446,11 @@ export declare function makeSelectAssembledRequest(conversationId: string): ((st
452
446
  adminLaneOpen?: boolean;
453
447
  adminLevel?: string | null;
454
448
  } | undefined, resultFuncArgs_14: {
455
- [field: string]: unknown;
456
449
  fingerprintId?: string | null;
457
450
  userMetadata?: {
458
451
  fullName?: string | null;
459
452
  name?: string | null;
460
453
  preferredUsername?: string | null;
461
- [field: string]: unknown;
462
454
  } | null;
463
455
  } | undefined) => AssembledAgentStartRequest | null) & {
464
456
  clearCache: () => void;
@@ -467,10 +459,8 @@ export declare function makeSelectAssembledRequest(conversationId: string): ((st
467
459
  };
468
460
  lastResult: () => AssembledAgentStartRequest | null;
469
461
  dependencies: [(s: ChatRootState) => import("../conversations/conversations.slice.js").ConversationsState, (s: ChatRootState) => import("../instance-ui-state/instance-ui-state.slice.js").InstanceUIStateSlice, (s: ChatRootState) => import("../instance-user-input/instance-user-input.slice.js").InstanceUserInputSliceState, (s: ChatRootState) => import("../instance-resources/instance-resources.slice.js").InstanceResourcesState, (s: ChatRootState) => import("../instance-variable-values/instance-variable-values.slice.js").InstanceVariableValuesState, (s: ChatRootState) => import("../instance-model-overrides/instance-model-overrides.slice.js").InstanceModelOverridesState, (s: ChatRootState) => import("../instance-context/instance-context.slice.js").InstanceContextState, (s: ChatRootState) => import("../instance-client-tools/instance-client-tools.slice.js").InstanceClientToolsState, (s: ChatRootState) => {
470
- [field: string]: unknown;
471
462
  organization_id?: string | null;
472
463
  } | undefined, (s: ChatRootState) => import("../../../../store/chat-host.slice.js").ChatHostState, (s: ChatRootState) => import("../../../types/agent-definition.types.js").AgentDefinitionSliceState, (s: ChatRootState) => import("../../../../surfaces/redux/userStateSlice.js").SurfaceUserStateSlice, (s: ChatRootState) => import("../messages/messages.slice.js").MessagesState, (s: ChatRootState) => {
473
- [field: string]: unknown;
474
464
  id: string | null;
475
465
  email?: string | null;
476
466
  isAnonymous?: boolean;
@@ -479,13 +469,11 @@ export declare function makeSelectAssembledRequest(conversationId: string): ((st
479
469
  adminLaneOpen?: boolean;
480
470
  adminLevel?: string | null;
481
471
  } | undefined, (s: ChatRootState) => {
482
- [field: string]: unknown;
483
472
  fingerprintId?: string | null;
484
473
  userMetadata?: {
485
474
  fullName?: string | null;
486
475
  name?: string | null;
487
476
  preferredUsername?: string | null;
488
- [field: string]: unknown;
489
477
  } | null;
490
478
  } | undefined];
491
479
  recomputations: () => number;
@@ -104,9 +104,12 @@ export interface HeadlessAgentJsonOptions {
104
104
  *
105
105
  * A markdown agent asked for "json" fails with "produced no structured
106
106
  * JSON" even though it answered perfectly — which is the whole reason this
107
- * option exists rather than a second primitive.
107
+ * option exists rather than a second primitive. `"media"` — the run's
108
+ * finished media blocks are the product (an image/audio/video model answers
109
+ * with a media block, never text); `data` is the array of unified media
110
+ * blocks (`fileId`, `mimeType`, `width`, `height`, …).
108
111
  */
109
- expect?: "json" | "text";
112
+ expect?: "json" | "text" | "media";
110
113
  /** Let the extractor fuzzy-parse at finalize. Default true. */
111
114
  fuzzyOnFinalize?: boolean;
112
115
  /**
@@ -190,6 +193,8 @@ export interface HeadlessAgentJsonOptions {
190
193
  noJson?: string;
191
194
  /** `expect: "text"` run finished but produced no answer text. */
192
195
  noText?: string;
196
+ /** `expect: "media"` run finished but produced no media. */
197
+ noMedia?: string;
193
198
  /** Ceiling elapsed. */
194
199
  timeout?: string;
195
200
  };
@@ -302,7 +307,7 @@ export interface AdoptedAgentJsonOptions {
302
307
  /** Bounded settle window after a terminal stream state. Default 6s. */
303
308
  settleMs?: number;
304
309
  /** See `expect` on `HeadlessAgentJsonOptions`. Default "json". */
305
- expect?: "json" | "text";
310
+ expect?: "json" | "text" | "media";
306
311
  /**
307
312
  * Keep the conversation/instance alive after the run. Default false — the
308
313
  * instance is destroyed on settle, matching the launched path. A caller
@@ -9,7 +9,8 @@ import {
9
9
  selectFirstExtractedObject,
10
10
  selectJsonExtractionComplete,
11
11
  selectRequestError,
12
- selectRequestStatus
12
+ selectRequestStatus,
13
+ selectRenderBlocksByType
13
14
  } from "../active-requests/active-requests.selectors.js";
14
15
  import {
15
16
  selectLatestAnswerText,
@@ -47,10 +48,22 @@ const DEFAULT_MESSAGES = {
47
48
  streamError: "The agent failed before returning a result.",
48
49
  noJson: "The agent finished but produced no structured JSON.",
49
50
  noText: "The agent finished but produced no text.",
51
+ noMedia: "The agent finished but produced no image, audio or video.",
50
52
  timeout: "The AI response timed out. If you switched browser tabs during this process, the connection may have been suspended \u2014 keep this tab active and try again."
51
53
  };
52
54
  const TERMINAL_STATUSES = /* @__PURE__ */ new Set(["complete", "error", "timeout", "cancelled"]);
53
55
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
56
+ const MEDIA_BLOCK_TYPES = ["image_output", "audio_output", "video_output"];
57
+ function completedMediaOf(getState, requestId) {
58
+ const state = getState();
59
+ const out = [];
60
+ for (const type of MEDIA_BLOCK_TYPES) {
61
+ for (const block of selectRenderBlocksByType(requestId, type)(state) ?? []) {
62
+ if (block.status === "complete" && block.data) out.push(block.data);
63
+ }
64
+ }
65
+ return out;
66
+ }
54
67
  function screamFlattening(verdict, ctx) {
55
68
  console.error(verdict.message);
56
69
  captureError({
@@ -99,7 +112,7 @@ async function deliverResult(seam, result) {
99
112
  }
100
113
  }
101
114
  async function failWarnedOutputMissingKeys(getState, opts, result) {
102
- if (!opts.mandateKey || (opts.expect ?? "json") === "text") return result;
115
+ if (!opts.mandateKey || (opts.expect ?? "json") !== "json") return result;
103
116
  const mandateKey = opts.mandateKey;
104
117
  const data = result.data;
105
118
  const isRecord = typeof data === "object" && data !== null && !Array.isArray(data);
@@ -414,7 +427,7 @@ function reportNoResult(getState, args) {
414
427
  }
415
428
  async function waitForExtraction(dispatch, getState, args) {
416
429
  const { conversationId, requestId, msgs } = args;
417
- const noResultMsg = args.expect === "text" ? msgs.noText : msgs.noJson;
430
+ const noResultMsg = args.expect === "text" ? msgs.noText : args.expect === "media" ? msgs.noMedia : msgs.noJson;
418
431
  const start = Date.now();
419
432
  let terminalAt = null;
420
433
  const viewerId = `runHeadlessAgentJson:${args.surfaceKey}:${requestId}`;
@@ -425,6 +438,23 @@ async function waitForExtraction(dispatch, getState, args) {
425
438
  fullResponse: selectLatestAnswerText(conversationId)(getState())
426
439
  });
427
440
  const settle = (reason, message) => {
441
+ if (args.expect === "media") {
442
+ const b = base();
443
+ const media = completedMediaOf(getState, requestId);
444
+ if (media.length > 0) return { success: true, data: media, ...b };
445
+ if (reason === "aborted") return { success: false, data: null, error: message, ...b };
446
+ if (!args.deferNoJsonCapture || reason === "timeout") {
447
+ reportNoResult(getState, {
448
+ requestId,
449
+ conversationId,
450
+ surfaceKey: args.surfaceKey,
451
+ agentRef: args.agentRef,
452
+ reason,
453
+ message
454
+ });
455
+ }
456
+ return { success: false, data: null, error: message, ...b };
457
+ }
428
458
  if (args.expect === "text") {
429
459
  const b = base();
430
460
  if (b.fullResponse.trim()) {
@@ -511,6 +541,9 @@ async function waitForExtraction(dispatch, getState, args) {
511
541
  return settle("extraction-complete", noResultMsg);
512
542
  }
513
543
  if (status !== void 0 && TERMINAL_STATUSES.has(status)) {
544
+ if (args.expect === "media" && completedMediaOf(getState, requestId).length > 0) {
545
+ return settle("stream-ended", noResultMsg);
546
+ }
514
547
  terminalAt ??= Date.now();
515
548
  if (Date.now() - terminalAt > args.settleMs) {
516
549
  return settle("stream-ended", noResultMsg);
@@ -17,7 +17,7 @@
17
17
  *
18
18
  * Two target definitions over the same fields is a defect, not a coincidence:
19
19
  * the campaign's own precedent is `matrx-user/lists` / `matrx-user/list-manager`,
20
- * whose shared targets were lifted into `features/user-lists/`. So the CONTRACT
20
+ * whose shared targets were lifted into `features/data-tables/pick-lists/`. So the CONTRACT
21
21
  * — the accepted keys, the per-field bounds, the replace-vs-patch semantics,
22
22
  * and the model-facing prose that states them — is defined exactly once, here.
23
23
  *
@@ -26155,6 +26155,88 @@ export type ChatDatabase = {
26155
26155
  };
26156
26156
  Returns: boolean;
26157
26157
  };
26158
+ _entity_cursor_decode: {
26159
+ Args: {
26160
+ p: string;
26161
+ };
26162
+ Returns: Json;
26163
+ };
26164
+ _entity_cursor_encode: {
26165
+ Args: {
26166
+ p: Json;
26167
+ };
26168
+ Returns: string;
26169
+ };
26170
+ _entity_identifier: {
26171
+ Args: {
26172
+ p_cols: Json;
26173
+ p_name: string;
26174
+ };
26175
+ Returns: string;
26176
+ };
26177
+ _entity_org_notice: {
26178
+ Args: {
26179
+ p_ids: Json;
26180
+ p_op: string;
26181
+ p_organization_id: string;
26182
+ p_token: string;
26183
+ };
26184
+ Returns: undefined;
26185
+ };
26186
+ _entity_refuse: {
26187
+ Args: {
26188
+ p_code: string;
26189
+ p_detail?: Json;
26190
+ p_message: string;
26191
+ };
26192
+ Returns: undefined;
26193
+ };
26194
+ _entity_reraise: {
26195
+ Args: {
26196
+ p_detail: string;
26197
+ p_hint: string;
26198
+ p_message: string;
26199
+ p_state: string;
26200
+ };
26201
+ Returns: undefined;
26202
+ };
26203
+ _entity_trash_or_restore: {
26204
+ Args: {
26205
+ p_entity_type: string;
26206
+ p_ids: string[];
26207
+ p_trash: boolean;
26208
+ };
26209
+ Returns: Json;
26210
+ };
26211
+ _entity_wire_rows: {
26212
+ Args: {
26213
+ p_columns: Json;
26214
+ p_rows: Json;
26215
+ p_token: string;
26216
+ };
26217
+ Returns: Json;
26218
+ };
26219
+ _entity_write_refusal: {
26220
+ Args: {
26221
+ p_column?: string;
26222
+ p_constraint?: string;
26223
+ p_detail: string;
26224
+ p_extra?: Json;
26225
+ p_hint: string;
26226
+ p_message: string;
26227
+ p_state: string;
26228
+ };
26229
+ Returns: undefined;
26230
+ };
26231
+ _entity_write_values: {
26232
+ Args: {
26233
+ p_insert: boolean;
26234
+ p_org: string;
26235
+ p_token: string;
26236
+ p_values: Json;
26237
+ };
26238
+ Returns: Json;
26239
+ };
26158
26240
  _final_switch_is_on: {
26159
26241
  Args: never;
26160
26242
  Returns: boolean;
@@ -28042,6 +28124,13 @@ export type ChatDatabase = {
28042
28124
  };
28043
28125
  Returns: string;
28044
28126
  };
28127
+ entity_archive: {
28128
+ Args: {
28129
+ p_entity_type: string;
28130
+ p_ids: string[];
28131
+ };
28132
+ Returns: Json;
28133
+ };
28045
28134
  entity_columns: {
28046
28135
  Args: {
28047
28136
  p_organization_id: string;
@@ -28061,6 +28150,22 @@ export type ChatDatabase = {
28061
28150
  };
28062
28151
  Returns: Database["platform"]["Enums"]["visibility"];
28063
28152
  };
28153
+ entity_get: {
28154
+ Args: {
28155
+ p_entity_type: string;
28156
+ p_ids: string[];
28157
+ p_include?: Json;
28158
+ };
28159
+ Returns: Json;
28160
+ };
28161
+ entity_insert: {
28162
+ Args: {
28163
+ p_entity_type: string;
28164
+ p_organization_id: string;
28165
+ p_rows: Json;
28166
+ };
28167
+ Returns: Json;
28168
+ };
28064
28169
  entity_is_org_scoped: {
28065
28170
  Args: {
28066
28171
  p_token: string;
@@ -28073,6 +28178,33 @@ export type ChatDatabase = {
28073
28178
  };
28074
28179
  Returns: boolean;
28075
28180
  };
28181
+ entity_list_scoped: {
28182
+ Args: {
28183
+ p_after?: string;
28184
+ p_archived?: string;
28185
+ p_deep?: boolean;
28186
+ p_entity_type: string;
28187
+ p_favorites_first?: boolean;
28188
+ p_filter?: Json;
28189
+ p_include?: Json;
28190
+ p_page?: number;
28191
+ p_page_size?: number;
28192
+ p_scope?: Json;
28193
+ p_search?: string;
28194
+ p_search_columns?: string[];
28195
+ p_search_match?: string;
28196
+ p_sort?: Json;
28197
+ p_trash?: boolean;
28198
+ p_with_total?: boolean;
28199
+ };
28200
+ Returns: Json;
28201
+ };
28202
+ entity_org_topic_admits: {
28203
+ Args: {
28204
+ p_topic: string;
28205
+ };
28206
+ Returns: boolean;
28207
+ };
28076
28208
  entity_organization_id: {
28077
28209
  Args: {
28078
28210
  p_id: string;
@@ -28110,6 +28242,22 @@ export type ChatDatabase = {
28110
28242
  };
28111
28243
  Returns: boolean;
28112
28244
  };
28245
+ entity_unarchive: {
28246
+ Args: {
28247
+ p_entity_type: string;
28248
+ p_ids: string[];
28249
+ };
28250
+ Returns: Json;
28251
+ };
28252
+ entity_update: {
28253
+ Args: {
28254
+ p_base_version?: number;
28255
+ p_entity_type: string;
28256
+ p_id: string;
28257
+ p_patch?: Json;
28258
+ };
28259
+ Returns: Json;
28260
+ };
28113
28261
  extensibility_knob: {
28114
28262
  Args: {
28115
28263
  p_definition_id?: string;
@@ -31988,7 +32136,7 @@ export type ChatDatabase = {
31988
32136
  isSetofReturn: true;
31989
32137
  };
31990
32138
  };
31991
- _d31_impl_get_user_list_with_items: {
32139
+ _d31_impl_get_pick_list_with_items: {
31992
32140
  Args: {
31993
32141
  p_list_id: string;
31994
32142
  };
@@ -32032,7 +32180,7 @@ export type ChatDatabase = {
32032
32180
  };
32033
32181
  Returns: Json;
32034
32182
  };
32035
- _d31_impl_update_user_list: {
32183
+ _d31_impl_update_pick_list: {
32036
32184
  Args: {
32037
32185
  p_authenticated_read?: boolean;
32038
32186
  p_description?: string;
@@ -38384,7 +38532,7 @@ export type ChatDatabase = {
38384
38532
  };
38385
38533
  Returns: Json;
38386
38534
  };
38387
- get_structured_list_for_selection: {
38535
+ get_pick_list_for_selection: {
38388
38536
  Args: {
38389
38537
  p_list_id: string;
38390
38538
  };
@@ -38541,13 +38689,13 @@ export type ChatDatabase = {
38541
38689
  };
38542
38690
  Returns: Json;
38543
38691
  };
38544
- get_user_list_with_items: {
38692
+ get_pick_list_with_items: {
38545
38693
  Args: {
38546
38694
  p_list_id: string;
38547
38695
  };
38548
38696
  Returns: Json;
38549
38697
  };
38550
- get_user_lists_summary: {
38698
+ get_pick_lists_summary: {
38551
38699
  Args: {
38552
38700
  p_user_id: string;
38553
38701
  };
@@ -43772,7 +43920,7 @@ export type ChatDatabase = {
43772
43920
  };
43773
43921
  Returns: Json;
43774
43922
  };
43775
- update_user_list: {
43923
+ update_pick_list: {
43776
43924
  Args: {
43777
43925
  p_authenticated_read?: boolean;
43778
43926
  p_description?: string;
@@ -285,7 +285,7 @@ export interface ChatUiSlots {
285
285
  };
286
286
  useAutoLabel: AnyFn;
287
287
  generateLabelFromContent: AnyFn;
288
- useStructuredListForSelection: (listId: string | null | undefined, groupName?: string) => {
288
+ usePickListForSelection: (listId: string | null | undefined, groupName?: string) => {
289
289
  items: PicklistItem[];
290
290
  groups: unknown[];
291
291
  loading: boolean;
@@ -688,7 +688,7 @@ export declare const useSkills: () => {
688
688
  };
689
689
  export declare const useAutoLabel: AnyFn;
690
690
  export declare const generateLabelFromContent: AnyFn;
691
- export declare const useStructuredListForSelection: (listId: string | null | undefined, groupName?: string) => {
691
+ export declare const usePickListForSelection: (listId: string | null | undefined, groupName?: string) => {
692
692
  items: PicklistItem[];
693
693
  groups: unknown[];
694
694
  loading: boolean;
@@ -167,7 +167,7 @@ const STAND_INS = {
167
167
  beginPlaybackSession: () => ({ id: "", update: () => void 0, end: () => void 0 }),
168
168
  useCanvasOpenGuard: () => ({ ensureCanvasReachable: async () => true }),
169
169
  useSkills: () => ({ skills: NONE, grouped: {}, count: 0, loading: false, error: null, reload: async () => void 0 }),
170
- useStructuredListForSelection: () => ({ items: NONE, groups: NONE, loading: false, unavailable: true, error: null, retry: () => void 0 }),
170
+ usePickListForSelection: () => ({ items: NONE, groups: NONE, loading: false, unavailable: true, error: null, retry: () => void 0 }),
171
171
  useOutputFeedback: () => ({ verdict: null, isLoaded: true })
172
172
  };
173
173
  function slotFn(name, declared) {
@@ -408,7 +408,7 @@ const useRegisterChatAttachTarget = slotFn("useRegisterChatAttachTarget", () =>
408
408
  const useSkills = slotFn("useSkills");
409
409
  const useAutoLabel = slotFn("useAutoLabel", () => void 0);
410
410
  const generateLabelFromContent = slotFn("generateLabelFromContent");
411
- const useStructuredListForSelection = slotFn("useStructuredListForSelection");
411
+ const usePickListForSelection = slotFn("usePickListForSelection");
412
412
  const useGitHubConnection = slotFn("useGitHubConnection");
413
413
  const useOutputFeedback = slotFn("useOutputFeedback");
414
414
  const saveOutputFeedback = slotFn("saveOutputFeedback");
@@ -789,12 +789,12 @@ export {
789
789
  useOverlaySurfaceRenderAck,
790
790
  usePageCapture,
791
791
  usePageCaptureContribution,
792
+ usePickListForSelection,
792
793
  usePopoutContainer,
793
794
  useRecordAndTranscribe,
794
795
  useRegisterChatAttachTarget,
795
796
  useRunControlCounts,
796
797
  useSkills,
797
- useStructuredListForSelection,
798
798
  useTablesEverywhere,
799
799
  useTextareaFormatting,
800
800
  useUrlSync,
@@ -145,7 +145,7 @@ export interface OpenScraperWindowOptions {
145
145
  url?: string;
146
146
  mode?: ScraperWindowMode;
147
147
  }
148
- export interface OpenStructuredListManagerV2WindowOptions {
148
+ export interface OpenPickListManagerWindowOptions {
149
149
  title?: string;
150
150
  forcedListId?: string | null;
151
151
  }
@@ -297,7 +297,7 @@ export interface ChatWindowOpeners {
297
297
  openSaveTemplateDialog: (opts?: OpenSaveTemplateDialogOptions) => void;
298
298
  openScraperWindow: (opts?: OpenScraperWindowOptions) => ChatWindowHandle;
299
299
  openScratchpadPanel: (opts?: OpenScratchpadPanelOptions) => ChatWindowHandle;
300
- openStructuredListManagerV2Window: (opts?: OpenStructuredListManagerV2WindowOptions) => ChatWindowHandle;
300
+ openPickListManagerWindow: (opts?: OpenPickListManagerWindowOptions) => ChatWindowHandle;
301
301
  openSurfaceContextInspector: (opts: OpenSurfaceContextInspectorOptions) => ChatWindowHandle;
302
302
  openSurfaceContextWindow: (opts: OpenSurfaceContextWindowOptions) => void;
303
303
  openSystemInstructionWindow: (opts: OpenSystemInstructionWindowOptions) => ChatWindowHandle;
@@ -352,7 +352,7 @@ export declare function useOpenQuickChatSheet(): (opts?: OpenQuickChatSheetOptio
352
352
  export declare function useOpenRunControlsWindow(): (opts: OpenRunControlsWindowOptions) => ChatWindowHandle;
353
353
  export declare function useOpenSaveTemplateDialog(): (opts?: OpenSaveTemplateDialogOptions) => void;
354
354
  export declare function useOpenScraperWindow(): (opts?: OpenScraperWindowOptions) => ChatWindowHandle;
355
- export declare function useOpenStructuredListManagerV2Window(): (opts?: OpenStructuredListManagerV2WindowOptions) => ChatWindowHandle;
355
+ export declare function useOpenPickListManagerWindow(): (opts?: OpenPickListManagerWindowOptions) => ChatWindowHandle;
356
356
  export declare function useOpenSurfaceContextInspector(): (opts: OpenSurfaceContextInspectorOptions) => ChatWindowHandle;
357
357
  export declare function useOpenSurfaceContextWindow(): (opts: OpenSurfaceContextWindowOptions) => void;
358
358
  export declare function useOpenSystemInstructionWindow(): (opts: OpenSystemInstructionWindowOptions) => ChatWindowHandle;
@@ -52,7 +52,7 @@ const UNHOSTED_WINDOW_OPENERS = {
52
52
  openSaveTemplateDialog: unhosted("openSaveTemplateDialog"),
53
53
  openScraperWindow: unhosted("openScraperWindow"),
54
54
  openScratchpadPanel: unhosted("openScratchpadPanel"),
55
- openStructuredListManagerV2Window: unhosted("openStructuredListManagerV2Window"),
55
+ openPickListManagerWindow: unhosted("openPickListManagerWindow"),
56
56
  openSurfaceContextInspector: unhosted("openSurfaceContextInspector"),
57
57
  openSurfaceContextWindow: unhosted("openSurfaceContextWindow"),
58
58
  openSystemInstructionWindow: unhosted("openSystemInstructionWindow"),
@@ -206,8 +206,8 @@ function useOpenSaveTemplateDialog() {
206
206
  function useOpenScraperWindow() {
207
207
  return useOpener("openScraperWindow");
208
208
  }
209
- function useOpenStructuredListManagerV2Window() {
210
- return useOpener("openStructuredListManagerV2Window");
209
+ function useOpenPickListManagerWindow() {
210
+ return useOpener("openPickListManagerWindow");
211
211
  }
212
212
  function useOpenSurfaceContextInspector() {
213
213
  return useOpener("openSurfaceContextInspector");
@@ -261,6 +261,7 @@ export {
261
261
  useOpenLiveRunWindow,
262
262
  useOpenMandateWindow,
263
263
  useOpenNotesWindow,
264
+ useOpenPickListManagerWindow,
264
265
  useOpenPromptPreviewWindow,
265
266
  useOpenQuickChatSheet,
266
267
  useOpenRunControlsWindow,
@@ -268,7 +269,6 @@ export {
268
269
  useOpenScraperWindow,
269
270
  useOpenScratchpadPanel,
270
271
  useOpenShortcutEditorWindow,
271
- useOpenStructuredListManagerV2Window,
272
272
  useOpenSurfaceContextInspector,
273
273
  useOpenSurfaceContextWindow,
274
274
  useOpenSystemInstructionWindow,
@@ -6,138 +6,6 @@ export declare const useChatSelector: UseSelector<ChatRootState>;
6
6
  export declare const useChatDispatch: UseDispatch<ChatDispatch>;
7
7
  /** The chat store itself (for `getState()` inside callbacks). */
8
8
  export declare const useChatStore: UseStore<ChatAppStore>;
9
- export declare const useAppSelector: UseSelector<{
10
- voiceAgent: import("../voice-agent/types.js").VoiceAgentState;
11
- agentDefinition: import("../agents/types/agent-definition.types.js").AgentDefinitionSliceState;
12
- conversationList: import("../agents/redux/conversation-list/conversation-list.types.js").ConversationListState;
13
- conversationHistory: import("../agents/redux/conversation-history/index.js").ConversationHistoryState;
14
- agentShortcut: import("../agents/redux/agent-shortcuts/types.js").AgentShortcutSliceState;
15
- agentShortcutCategory: import("../agents/redux/agent-shortcut-categories/types.js").AgentShortcutCategorySliceState;
16
- surfaceUserState: import("../surfaces/redux/userStateSlice.js").SurfaceUserStateSlice;
17
- tools: import("../agents/redux/tools/tools.slice.js").ToolsSliceState;
18
- conversations: import("../agents/redux/execution-system/conversations/conversations.slice.js").ConversationsState;
19
- chatIncognito: import("../agents/redux/chat/chat-incognito.slice.js").ChatIncognitoState;
20
- chatRoute: import("../agents/redux/chat/chat-route.slice.js").ChatRouteState;
21
- instanceModelOverrides: import("../agents/redux/execution-system/instance-model-overrides/instance-model-overrides.slice.js").InstanceModelOverridesState;
22
- instanceInputCapabilities: import("../agents/redux/execution-system/instance-input-capabilities/instance-input-capabilities.slice.js").InstanceInputCapabilitiesState;
23
- instanceVariableValues: import("../agents/redux/execution-system/instance-variable-values/instance-variable-values.slice.js").InstanceVariableValuesState;
24
- instanceResources: import("../agents/redux/execution-system/instance-resources/instance-resources.slice.js").InstanceResourcesState;
25
- instanceContext: import("../agents/redux/execution-system/instance-context/instance-context.slice.js").InstanceContextState;
26
- instanceWorkingDocument: import("../agents/redux/execution-system/instance-working-document/instance-working-document.slice.js").InstanceWorkingDocumentSliceState;
27
- instanceUserInput: import("../agents/redux/execution-system/instance-user-input/instance-user-input.slice.js").InstanceUserInputSliceState;
28
- instanceClientTools: import("../agents/redux/execution-system/instance-client-tools/instance-client-tools.slice.js").InstanceClientToolsState;
29
- pendingAsks: import("../agents/ui-first-tools/redux/pending-asks.slice.js").PendingAsksState;
30
- conversationInbox: import("../agents/redux/execution-system/inbox/inbox.slice.js").ConversationInboxState;
31
- agentLists: import("../agents/ui-first-tools/redux/agent-lists.slice.js").AgentListsState;
32
- instanceUIState: import("../agents/redux/execution-system/instance-ui-state/instance-ui-state.slice.js").InstanceUIStateSlice;
33
- activeTools: import("../agents/redux/execution-system/active-tools/active-tools.slice.js").ActiveToolsState;
34
- activeRequests: import("../agents/redux/execution-system/active-requests/active-requests.slice.js").ActiveRequestsState;
35
- runSets: import("../agents/redux/execution-system/run-sets/run-sets.slice.js").RunSetsState;
36
- messages: import("../agents/redux/execution-system/messages/messages.slice.js").MessagesState;
37
- observability: import("../agents/redux/execution-system/observability/observability.slice.js").ObservabilityState;
38
- contextState: import("../agents/redux/execution-system/context-state/context-state.slice.js").ContextStateSliceState;
39
- observationalMemory: import("../agents/redux/execution-system/observational-memory/observational-memory.slice.js").ObservationalMemoryState;
40
- cacheBypass: import("../agents/redux/execution-system/message-crud/cache-bypass.slice.js").CacheBypassState;
41
- conversationFocus: import("../agents/redux/execution-system/conversation-focus/conversation-focus.slice.js").ConversationFocusState;
42
- surfaces: import("../agents/redux/surfaces/surfaces.slice.js").SurfacesState;
43
- surfacesCatalog: import("../surfaces/redux/surfacesCatalogSlice.js").SurfacesCatalogSliceState;
44
- agentSurfaceBindings: import("../surfaces/redux/agentSurfaceBindingsSlice.js").AgentSurfaceBindingsSliceState;
45
- surfaceConfig: import("../surfaces/redux/surfaceConfigSlice.js").SurfaceConfigSliceState;
46
- agentAssistantMarkdownDraft: import("../agents/redux/agent-assistant-markdown-draft.slice.js").AgentAssistantMarkdownDraftState;
47
- mcp: import("../agents/redux/mcp/mcp.slice.js").McpSliceState;
48
- proposedDirectives: import("../agents/redux/proposed-directives/proposedDirectivesSlice.js").ProposedDirectivesState;
49
- agentSettings: import("../agents/redux/agent-settings/types.js").AgentSettingsState;
50
- conversationAttachments: import("../agents/connectors/attachments.slice.js").AttachmentsSliceState;
51
- modelRegistry: import("../agents/model-registry/modelRegistrySlice.js").ModelRegistryState;
52
- chatHost: import("./chat-host.slice.js").ChatHostState;
53
- } & import("./root-state.js").ChatHostReadSlices>;
54
- export declare const useAppDispatch: UseDispatch<import("redux-thunk").ThunkDispatch<{
55
- voiceAgent: import("../voice-agent/types.js").VoiceAgentState;
56
- agentDefinition: import("../agents/types/agent-definition.types.js").AgentDefinitionSliceState;
57
- conversationList: import("../agents/redux/conversation-list/conversation-list.types.js").ConversationListState;
58
- conversationHistory: import("../agents/redux/conversation-history/index.js").ConversationHistoryState;
59
- agentShortcut: import("../agents/redux/agent-shortcuts/types.js").AgentShortcutSliceState;
60
- agentShortcutCategory: import("../agents/redux/agent-shortcut-categories/types.js").AgentShortcutCategorySliceState;
61
- surfaceUserState: import("../surfaces/redux/userStateSlice.js").SurfaceUserStateSlice;
62
- tools: import("../agents/redux/tools/tools.slice.js").ToolsSliceState;
63
- conversations: import("../agents/redux/execution-system/conversations/conversations.slice.js").ConversationsState;
64
- chatIncognito: import("../agents/redux/chat/chat-incognito.slice.js").ChatIncognitoState;
65
- chatRoute: import("../agents/redux/chat/chat-route.slice.js").ChatRouteState;
66
- instanceModelOverrides: import("../agents/redux/execution-system/instance-model-overrides/instance-model-overrides.slice.js").InstanceModelOverridesState;
67
- instanceInputCapabilities: import("../agents/redux/execution-system/instance-input-capabilities/instance-input-capabilities.slice.js").InstanceInputCapabilitiesState;
68
- instanceVariableValues: import("../agents/redux/execution-system/instance-variable-values/instance-variable-values.slice.js").InstanceVariableValuesState;
69
- instanceResources: import("../agents/redux/execution-system/instance-resources/instance-resources.slice.js").InstanceResourcesState;
70
- instanceContext: import("../agents/redux/execution-system/instance-context/instance-context.slice.js").InstanceContextState;
71
- instanceWorkingDocument: import("../agents/redux/execution-system/instance-working-document/instance-working-document.slice.js").InstanceWorkingDocumentSliceState;
72
- instanceUserInput: import("../agents/redux/execution-system/instance-user-input/instance-user-input.slice.js").InstanceUserInputSliceState;
73
- instanceClientTools: import("../agents/redux/execution-system/instance-client-tools/instance-client-tools.slice.js").InstanceClientToolsState;
74
- pendingAsks: import("../agents/ui-first-tools/redux/pending-asks.slice.js").PendingAsksState;
75
- conversationInbox: import("../agents/redux/execution-system/inbox/inbox.slice.js").ConversationInboxState;
76
- agentLists: import("../agents/ui-first-tools/redux/agent-lists.slice.js").AgentListsState;
77
- instanceUIState: import("../agents/redux/execution-system/instance-ui-state/instance-ui-state.slice.js").InstanceUIStateSlice;
78
- activeTools: import("../agents/redux/execution-system/active-tools/active-tools.slice.js").ActiveToolsState;
79
- activeRequests: import("../agents/redux/execution-system/active-requests/active-requests.slice.js").ActiveRequestsState;
80
- runSets: import("../agents/redux/execution-system/run-sets/run-sets.slice.js").RunSetsState;
81
- messages: import("../agents/redux/execution-system/messages/messages.slice.js").MessagesState;
82
- observability: import("../agents/redux/execution-system/observability/observability.slice.js").ObservabilityState;
83
- contextState: import("../agents/redux/execution-system/context-state/context-state.slice.js").ContextStateSliceState;
84
- observationalMemory: import("../agents/redux/execution-system/observational-memory/observational-memory.slice.js").ObservationalMemoryState;
85
- cacheBypass: import("../agents/redux/execution-system/message-crud/cache-bypass.slice.js").CacheBypassState;
86
- conversationFocus: import("../agents/redux/execution-system/conversation-focus/conversation-focus.slice.js").ConversationFocusState;
87
- surfaces: import("../agents/redux/surfaces/surfaces.slice.js").SurfacesState;
88
- surfacesCatalog: import("../surfaces/redux/surfacesCatalogSlice.js").SurfacesCatalogSliceState;
89
- agentSurfaceBindings: import("../surfaces/redux/agentSurfaceBindingsSlice.js").AgentSurfaceBindingsSliceState;
90
- surfaceConfig: import("../surfaces/redux/surfaceConfigSlice.js").SurfaceConfigSliceState;
91
- agentAssistantMarkdownDraft: import("../agents/redux/agent-assistant-markdown-draft.slice.js").AgentAssistantMarkdownDraftState;
92
- mcp: import("../agents/redux/mcp/mcp.slice.js").McpSliceState;
93
- proposedDirectives: import("../agents/redux/proposed-directives/proposedDirectivesSlice.js").ProposedDirectivesState;
94
- agentSettings: import("../agents/redux/agent-settings/types.js").AgentSettingsState;
95
- conversationAttachments: import("../agents/connectors/attachments.slice.js").AttachmentsSliceState;
96
- modelRegistry: import("../agents/model-registry/modelRegistrySlice.js").ModelRegistryState;
97
- chatHost: import("./chat-host.slice.js").ChatHostState;
98
- } & import("./root-state.js").ChatHostReadSlices, unknown, import("redux").UnknownAction> & import("redux").Dispatch<import("redux").UnknownAction>>;
99
- export declare const useAppStore: UseStore<import("redux").Store<{
100
- voiceAgent: import("../voice-agent/types.js").VoiceAgentState;
101
- agentDefinition: import("../agents/types/agent-definition.types.js").AgentDefinitionSliceState;
102
- conversationList: import("../agents/redux/conversation-list/conversation-list.types.js").ConversationListState;
103
- conversationHistory: import("../agents/redux/conversation-history/index.js").ConversationHistoryState;
104
- agentShortcut: import("../agents/redux/agent-shortcuts/types.js").AgentShortcutSliceState;
105
- agentShortcutCategory: import("../agents/redux/agent-shortcut-categories/types.js").AgentShortcutCategorySliceState;
106
- surfaceUserState: import("../surfaces/redux/userStateSlice.js").SurfaceUserStateSlice;
107
- tools: import("../agents/redux/tools/tools.slice.js").ToolsSliceState;
108
- conversations: import("../agents/redux/execution-system/conversations/conversations.slice.js").ConversationsState;
109
- chatIncognito: import("../agents/redux/chat/chat-incognito.slice.js").ChatIncognitoState;
110
- chatRoute: import("../agents/redux/chat/chat-route.slice.js").ChatRouteState;
111
- instanceModelOverrides: import("../agents/redux/execution-system/instance-model-overrides/instance-model-overrides.slice.js").InstanceModelOverridesState;
112
- instanceInputCapabilities: import("../agents/redux/execution-system/instance-input-capabilities/instance-input-capabilities.slice.js").InstanceInputCapabilitiesState;
113
- instanceVariableValues: import("../agents/redux/execution-system/instance-variable-values/instance-variable-values.slice.js").InstanceVariableValuesState;
114
- instanceResources: import("../agents/redux/execution-system/instance-resources/instance-resources.slice.js").InstanceResourcesState;
115
- instanceContext: import("../agents/redux/execution-system/instance-context/instance-context.slice.js").InstanceContextState;
116
- instanceWorkingDocument: import("../agents/redux/execution-system/instance-working-document/instance-working-document.slice.js").InstanceWorkingDocumentSliceState;
117
- instanceUserInput: import("../agents/redux/execution-system/instance-user-input/instance-user-input.slice.js").InstanceUserInputSliceState;
118
- instanceClientTools: import("../agents/redux/execution-system/instance-client-tools/instance-client-tools.slice.js").InstanceClientToolsState;
119
- pendingAsks: import("../agents/ui-first-tools/redux/pending-asks.slice.js").PendingAsksState;
120
- conversationInbox: import("../agents/redux/execution-system/inbox/inbox.slice.js").ConversationInboxState;
121
- agentLists: import("../agents/ui-first-tools/redux/agent-lists.slice.js").AgentListsState;
122
- instanceUIState: import("../agents/redux/execution-system/instance-ui-state/instance-ui-state.slice.js").InstanceUIStateSlice;
123
- activeTools: import("../agents/redux/execution-system/active-tools/active-tools.slice.js").ActiveToolsState;
124
- activeRequests: import("../agents/redux/execution-system/active-requests/active-requests.slice.js").ActiveRequestsState;
125
- runSets: import("../agents/redux/execution-system/run-sets/run-sets.slice.js").RunSetsState;
126
- messages: import("../agents/redux/execution-system/messages/messages.slice.js").MessagesState;
127
- observability: import("../agents/redux/execution-system/observability/observability.slice.js").ObservabilityState;
128
- contextState: import("../agents/redux/execution-system/context-state/context-state.slice.js").ContextStateSliceState;
129
- observationalMemory: import("../agents/redux/execution-system/observational-memory/observational-memory.slice.js").ObservationalMemoryState;
130
- cacheBypass: import("../agents/redux/execution-system/message-crud/cache-bypass.slice.js").CacheBypassState;
131
- conversationFocus: import("../agents/redux/execution-system/conversation-focus/conversation-focus.slice.js").ConversationFocusState;
132
- surfaces: import("../agents/redux/surfaces/surfaces.slice.js").SurfacesState;
133
- surfacesCatalog: import("../surfaces/redux/surfacesCatalogSlice.js").SurfacesCatalogSliceState;
134
- agentSurfaceBindings: import("../surfaces/redux/agentSurfaceBindingsSlice.js").AgentSurfaceBindingsSliceState;
135
- surfaceConfig: import("../surfaces/redux/surfaceConfigSlice.js").SurfaceConfigSliceState;
136
- agentAssistantMarkdownDraft: import("../agents/redux/agent-assistant-markdown-draft.slice.js").AgentAssistantMarkdownDraftState;
137
- mcp: import("../agents/redux/mcp/mcp.slice.js").McpSliceState;
138
- proposedDirectives: import("../agents/redux/proposed-directives/proposedDirectivesSlice.js").ProposedDirectivesState;
139
- agentSettings: import("../agents/redux/agent-settings/types.js").AgentSettingsState;
140
- conversationAttachments: import("../agents/connectors/attachments.slice.js").AttachmentsSliceState;
141
- modelRegistry: import("../agents/model-registry/modelRegistrySlice.js").ModelRegistryState;
142
- chatHost: import("./chat-host.slice.js").ChatHostState;
143
- } & import("./root-state.js").ChatHostReadSlices, import("redux").UnknownAction, unknown>>;
9
+ export declare const useAppSelector: UseSelector<ChatRootState>;
10
+ export declare const useAppDispatch: UseDispatch<ChatDispatch>;
11
+ export declare const useAppStore: UseStore<ChatAppStore>;
@@ -6,7 +6,8 @@ export interface ChatStoreRegister {
6
6
  /**
7
7
  * Slices the HOST owns that package code reads when present (§2.3). A private store has none of
8
8
  * them, so every read is optional; a registered host store supplies the real shapes. Only the
9
- * fields the package reads are named — anything else stays `unknown`.
9
+ * fields the package reads are named, with no index signatures, so a host's concrete slice
10
+ * interfaces (which carry extra fields) stay assignable.
10
11
  */
11
12
  export interface ChatHostReadSlices {
12
13
  userAuth?: {
@@ -17,11 +18,9 @@ export interface ChatHostReadSlices {
17
18
  isAdmin?: boolean;
18
19
  adminLaneOpen?: boolean;
19
20
  adminLevel?: string | null;
20
- [field: string]: unknown;
21
21
  };
22
22
  appContext?: {
23
23
  organization_id?: string | null;
24
- [field: string]: unknown;
25
24
  };
26
25
  userProfile?: {
27
26
  fingerprintId?: string | null;
@@ -29,16 +28,12 @@ export interface ChatHostReadSlices {
29
28
  fullName?: string | null;
30
29
  name?: string | null;
31
30
  preferredUsername?: string | null;
32
- [field: string]: unknown;
33
31
  } | null;
34
- [field: string]: unknown;
35
32
  };
36
33
  cloudFiles?: {
37
34
  filesById: Record<string, {
38
35
  fileName?: string | null;
39
- [field: string]: unknown;
40
36
  } | undefined>;
41
- [field: string]: unknown;
42
37
  };
43
38
  transcriptStudio?: {
44
39
  byId?: Record<string, {
@@ -46,16 +41,12 @@ export interface ChatHostReadSlices {
46
41
  assistantConversationId?: string | null;
47
42
  assistantConversations?: readonly {
48
43
  conversationId: string;
49
- [field: string]: unknown;
50
44
  }[];
51
- [field: string]: unknown;
52
45
  } | undefined>;
53
46
  documentsById?: Record<string, Record<string, {
54
47
  id?: string;
55
48
  content?: string | null;
56
- [field: string]: unknown;
57
49
  } | undefined> | undefined>;
58
- [field: string]: unknown;
59
50
  };
60
51
  }
61
52
  /** The full store state the package runs in: the host's when registered, else `ChatState` + optional host reads. */
@@ -95,7 +95,7 @@ const SURFACE_ROUTE_MAPPINGS = [
95
95
  { prefix: "/work", surface: "matrx-user/ai-work" },
96
96
  { prefix: "/files", surface: "matrx-user/files" },
97
97
  { prefix: "/projects", surface: "matrx-user/projects" },
98
- { prefix: "/lists", surface: "matrx-user/lists" },
98
+ { prefix: "/pick-lists", surface: "matrx-user/lists" },
99
99
  { prefix: "/tools/pdf-extractor", surface: "matrx-user/pdf-extractor" },
100
100
  { prefix: "/tools/scanner", surface: "matrx-user/scanner" },
101
101
  { prefix: "/documents", surface: "matrx-user/documents" },
@@ -26,7 +26,7 @@
26
26
  * ADDING AN ENTITY: one entry in `TOOL_STATE_EFFECTS` — tool names + a `run`
27
27
  * that dispatches the feature's refetch thunk(s). Known not-yet-covered
28
28
  * writers (no canonical Redux refetch today, or their state is hook-local):
29
- * picklist (session-cached `usePicklistDetail`), dictionary, workbook,
29
+ * picklist (session-cached `usePickListDetail`), dictionary, workbook,
30
30
  * dataset/usertable, document. The working document is already reconciled by
31
31
  * its own `context_changed` re-read; the scratchpad is agent-readonly.
32
32
  */
@@ -4,7 +4,6 @@ import {
4
4
  CheckCircle,
5
5
  FileSearch,
6
6
  ListChecks,
7
- List,
8
7
  SquareCheckBig,
9
8
  ListTodo,
10
9
  FileText,
@@ -1061,14 +1060,13 @@ const APP_FEATURE_TOOL_NAMES = /* @__PURE__ */ new Set([
1061
1060
  "seo_check_meta_descriptions",
1062
1061
  "seo_get_keyword_data",
1063
1062
  "topical_map",
1064
- "picklist",
1063
+ "pick_list",
1065
1064
  "task",
1066
1065
  "tasks",
1067
1066
  "user_todos",
1068
1067
  "document",
1069
1068
  "dataset",
1070
1069
  "usertable_create",
1071
- "get_user_lists",
1072
1070
  "knowledge_search",
1073
1071
  "document_search",
1074
1072
  "knowledge_browse",
@@ -1165,14 +1163,13 @@ const RESULT_IS_PURPOSE_TOOLS = /* @__PURE__ */ new Set([
1165
1163
  // the inventory / passage / store / entity map IS the answer
1166
1164
  "document_content",
1167
1165
  // the fetched pages/text ARE the answer
1168
- "get_user_lists",
1169
1166
  "seo",
1170
1167
  // the analyzed SERP previews / keyword table ARE the deliverable
1171
1168
  "seo_check_meta_tags_batch",
1172
1169
  "seo_check_meta_titles",
1173
1170
  "seo_check_meta_descriptions",
1174
1171
  "seo_get_keyword_data",
1175
- "picklist",
1172
+ "pick_list",
1176
1173
  // the created/loaded list is the deliverable
1177
1174
  "document",
1178
1175
  "dataset",
@@ -1198,8 +1195,7 @@ function getToolDisplayMode(toolName, entry) {
1198
1195
  }
1199
1196
  const TOOL_GLYPHS = {
1200
1197
  // entity tools
1201
- picklist: { icon: ListChecks, accent: "violet" },
1202
- get_user_lists: { icon: List, accent: "violet" },
1198
+ pick_list: { icon: ListChecks, accent: "violet" },
1203
1199
  task: { icon: SquareCheckBig, accent: "blue" },
1204
1200
  tasks: { icon: ListTodo, accent: "blue" },
1205
1201
  user_todos: { icon: ListTodo, accent: "blue" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-matrx/chat",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "THE one AI Matrx person-to-agent chat system: the full chat (running agents, conversations, tool calls, streaming, context, surfaces, voice) as per-module subpaths @ai-matrx/chat/<domain>/<module> over a host contract (/host, /host/react) whose only required value is a db; plus the kernel compatibility entries (., /external-store, /matrx, /react, /tools, styles.css, tokens.css) until P28.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -202,23 +202,23 @@
202
202
  "uuid": "^14.0.2",
203
203
  "zod": "^4.6.5",
204
204
  "@ai-matrx/alchemy": "latest",
205
- "@ai-matrx/browser-audio": "latest",
206
205
  "@ai-matrx/associations": "latest",
206
+ "@ai-matrx/browser-audio": "latest",
207
207
  "@ai-matrx/canvas": "latest",
208
208
  "@ai-matrx/content-ir": "latest",
209
+ "@ai-matrx/agents": "latest",
209
210
  "@ai-matrx/content-ir-react": "latest",
210
- "@ai-matrx/design-system": "latest",
211
+ "@ai-matrx/data": "latest",
211
212
  "@ai-matrx/diff": "latest",
212
213
  "@ai-matrx/icons": "latest",
214
+ "@ai-matrx/design-system": "latest",
213
215
  "@ai-matrx/kit": "latest",
214
216
  "@ai-matrx/media": "latest",
215
217
  "@ai-matrx/print": "latest",
216
218
  "@ai-matrx/realtime": "latest",
217
219
  "@ai-matrx/records": "latest",
218
220
  "@ai-matrx/records-ui": "latest",
219
- "@ai-matrx/tap-target": "latest",
220
- "@ai-matrx/agents": "latest",
221
- "@ai-matrx/data": "latest"
221
+ "@ai-matrx/tap-target": "latest"
222
222
  },
223
223
  "devDependencies": {
224
224
  "@arethetypeswrong/cli": "^0.18.5",