@powerhousedao/reactor-browser 6.2.2-dev.84 → 6.2.2-dev.86

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.
@@ -313,6 +313,8 @@ interface DriveSwitchboard {
313
313
  * module is initialized.
314
314
  */
315
315
  declare function getBrowserSyncManager(): ISyncManager | undefined;
316
+ /** Suffix of the per-drive GraphQL channel endpoint the switchboard serves. */
317
+ declare const GQL_CHANNEL_SUFFIX = "/graphql/r";
316
318
  /**
317
319
  * Resolves the switchboard that serves a drive, if any.
318
320
  *
@@ -365,5 +367,5 @@ interface SwitchboardToolDeps {
365
367
  */
366
368
  declare function createSwitchboardSchemaTool(deps?: SwitchboardToolDeps): AiToolDescriptor;
367
369
  //#endregion
368
- export { AgentEvent, AiSettings, AiToolAnnotations, AiToolDescriptor, AiToolsProvider, ApprovalCard, ChatContext, ChatMessage, ChatPart, ChatWindow, DEFAULT_AI_SETTINGS, DriveSwitchboard, FULL_RESULT_TURNS, MAX_AGENT_STEPS, MAX_TOOL_RESULT_CHARS, PendingApproval, ReactorChatAgent, ReactorChatAgentOptions, ReactorChatFab, STUB_MIN_CHARS, SWITCHBOARD_INTROSPECTION_QUERY, SWITCHBOARD_SCHEMA_TOOL_NAME, SchemaFieldSummary, SwitchboardToolDeps, ToolCallState, UseReactorChatResult, WRITE_TOOLS, buildSystemPrompt, clearAiSettings, createReactorChatModel, createSwitchboardSchemaTool, getAiSettings, getBrowserSyncManager, isAiConfigured, isWriteTool, resolveDriveSwitchboard, stubStaleToolResults, subscribeAiSettings, summarizeIntrospectionSchema, unwrapToolResult, updateAiSettings, useChatContext, useReactorChat };
370
+ export { AgentEvent, AiSettings, AiToolAnnotations, AiToolDescriptor, AiToolsProvider, ApprovalCard, ChatContext, ChatMessage, ChatPart, ChatWindow, DEFAULT_AI_SETTINGS, DriveSwitchboard, FULL_RESULT_TURNS, GQL_CHANNEL_SUFFIX, MAX_AGENT_STEPS, MAX_TOOL_RESULT_CHARS, PendingApproval, ReactorChatAgent, ReactorChatAgentOptions, ReactorChatFab, STUB_MIN_CHARS, SWITCHBOARD_INTROSPECTION_QUERY, SWITCHBOARD_SCHEMA_TOOL_NAME, SchemaFieldSummary, SwitchboardToolDeps, ToolCallState, UseReactorChatResult, WRITE_TOOLS, buildSystemPrompt, clearAiSettings, createReactorChatModel, createSwitchboardSchemaTool, getAiSettings, getBrowserSyncManager, isAiConfigured, isWriteTool, resolveDriveSwitchboard, stubStaleToolResults, subscribeAiSettings, summarizeIntrospectionSchema, unwrapToolResult, updateAiSettings, useChatContext, useReactorChat };
369
371
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/ai/types.ts","../../../src/ai/agent.ts","../../../src/ai/components/approval-card.tsx","../../../src/ai/use-reactor-chat.ts","../../../src/ai/components/chat-window.tsx","../../../src/ai/components/reactor-chat-fab.tsx","../../../src/ai/context.ts","../../../src/ai/settings-store.ts","../../../src/ai/switchboard.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/ai/types.ts","../../../src/ai/agent.ts","../../../src/ai/components/approval-card.tsx","../../../src/ai/use-reactor-chat.ts","../../../src/ai/components/chat-window.tsx","../../../src/ai/components/reactor-chat-fab.tsx","../../../src/ai/context.ts","../../../src/ai/settings-store.ts","../../../src/ai/switchboard.ts"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { H as ambientRenownTokenProvider, S as useSelectedDriveSafe, s as useSelectedNode } from "../../document-model-modules-DMIR-uSD.js";
2
- import { n as useSelectedDocumentId } from "../../selected-document-xFBNPc9Q.js";
1
+ import { S as useSelectedDriveSafe, s as useSelectedNode } from "../../document-model-modules-DfQBNGc-.js";
2
+ import { a as getBrowserSyncManager, i as createSwitchboardSchemaTool, l as useSelectedDocumentId, n as SWITCHBOARD_INTROSPECTION_QUERY, o as resolveDriveSwitchboard, r as SWITCHBOARD_SCHEMA_TOOL_NAME, s as summarizeIntrospectionSchema, t as GQL_CHANNEL_SUFFIX } from "../../switchboard-D4-_jwk-.js";
3
3
  import { isFileNode, isFolderNode } from "@powerhousedao/shared/document-drive";
4
4
  import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
5
- import { DriveCollectionId } from "@powerhousedao/reactor";
6
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
6
  import { z } from "zod";
8
7
  import { isStepCount, streamText, tool } from "ai";
@@ -810,234 +809,6 @@ function isAiConfigured(settings) {
810
809
  return settings.baseUrl.trim().length > 0 && settings.apiKey.trim().length > 0 && settings.model.trim().length > 0;
811
810
  }
812
811
  //#endregion
813
- //#region src/ai/switchboard.ts
814
- /**
815
- * Reads the tab-side sync manager from the browser global. Returns
816
- * `undefined` in non-browser environments or before the reactor client
817
- * module is initialized.
818
- */
819
- function getBrowserSyncManager() {
820
- if (typeof window === "undefined") return;
821
- return window.ph?.reactorClientModule?.reactorModule?.syncModule?.syncManager;
822
- }
823
- /** Suffix of the per-drive GraphQL channel endpoint the switchboard serves. */
824
- const GQL_CHANNEL_SUFFIX = "/graphql/r";
825
- /**
826
- * Resolves the switchboard that serves a drive, if any.
827
- *
828
- * Every remote drive stores its switchboard's exact GraphQL channel
829
- * endpoint in its sync remote — `channelConfig = { type: "gql",
830
- * parameters: { url: "<origin>/graphql/r" } }` — and the switchboard base
831
- * is that URL minus the `/graphql/r` suffix. Deriving it per drive (rather
832
- * than from a global setting) is what keeps multi-switchboard deployments
833
- * correct. Drives that are not synced to a remote switchboard (local
834
- * drives, other channel types, unexpected shapes) return `undefined`.
835
- */
836
- function resolveDriveSwitchboard(driveId, syncManager) {
837
- const manager = syncManager ?? getBrowserSyncManager();
838
- if (!driveId || !manager) return;
839
- const collectionId = DriveCollectionId.forDrive(driveId);
840
- const remote = manager.list().find((r) => r.meta.collectionId.equals(collectionId));
841
- if (!remote) return;
842
- const { channelConfig } = remote.meta;
843
- if (channelConfig.type !== "gql") return;
844
- const url = channelConfig.parameters.url;
845
- if (typeof url !== "string" || !url.endsWith(GQL_CHANNEL_SUFFIX)) return;
846
- const switchboardUrl = url.slice(0, -10);
847
- return {
848
- switchboardUrl,
849
- graphqlUrl: `${switchboardUrl}/graphql`
850
- };
851
- }
852
- /**
853
- * Introspection over the switchboard supergraph's root query and mutation
854
- * fields. Types are requested with three levels of `ofType` nesting so
855
- * that common shapes like `[X!]!` (LIST(NON_NULL(LIST(X)))) render fully.
856
- */
857
- const SWITCHBOARD_INTROSPECTION_QUERY = `
858
- query SwitchboardIntrospection {
859
- __schema {
860
- queryType {
861
- fields {
862
- name
863
- description
864
- args {
865
- name
866
- type {
867
- kind
868
- name
869
- ofType {
870
- kind
871
- name
872
- ofType {
873
- kind
874
- name
875
- ofType {
876
- kind
877
- name
878
- }
879
- }
880
- }
881
- }
882
- }
883
- type {
884
- kind
885
- name
886
- ofType {
887
- kind
888
- name
889
- ofType {
890
- kind
891
- name
892
- ofType {
893
- kind
894
- name
895
- }
896
- }
897
- }
898
- }
899
- }
900
- }
901
- mutationType {
902
- fields {
903
- name
904
- description
905
- args {
906
- name
907
- type {
908
- kind
909
- name
910
- ofType {
911
- kind
912
- name
913
- ofType {
914
- kind
915
- name
916
- ofType {
917
- kind
918
- name
919
- }
920
- }
921
- }
922
- }
923
- }
924
- type {
925
- kind
926
- name
927
- ofType {
928
- kind
929
- name
930
- ofType {
931
- kind
932
- name
933
- ofType {
934
- kind
935
- name
936
- }
937
- }
938
- }
939
- }
940
- }
941
- }
942
- }
943
- }
944
- `;
945
- /**
946
- * Renders an introspected type reference as a GraphQL type string.
947
- * Recursion is bounded by the `ofType` nesting of the query, so it always
948
- * terminates.
949
- */
950
- function renderTypeRef(type) {
951
- if (!type) return "Unknown";
952
- switch (type.kind) {
953
- case "NON_NULL": return `${renderTypeRef(type.ofType)}!`;
954
- case "LIST": return `[${renderTypeRef(type.ofType)}]`;
955
- default: return type.name ?? "Unknown";
956
- }
957
- }
958
- /** Cap on the number of fields reported per root type. */
959
- const MAX_FIELDS_PER_ROOT = 200;
960
- function summarizeFields(fields) {
961
- const list = fields ?? [];
962
- return {
963
- fields: list.slice(0, MAX_FIELDS_PER_ROOT).map((field) => ({
964
- name: field.name,
965
- ...field.description ? { description: field.description } : {},
966
- args: field.args.map((arg) => `${arg.name}: ${renderTypeRef(arg.type)}`).join(", "),
967
- returns: renderTypeRef(field.type)
968
- })),
969
- truncated: list.length > MAX_FIELDS_PER_ROOT
970
- };
971
- }
972
- /**
973
- * Reduces a GraphQL `__schema` introspection payload (the `data.__schema`
974
- * object) to a compact summary of its root query and mutation fields.
975
- * Accepts `unknown` because the payload arrives over the wire.
976
- */
977
- function summarizeIntrospectionSchema(schema) {
978
- const introspection = schema ?? {};
979
- const queries = summarizeFields(introspection.queryType?.fields);
980
- const mutations = summarizeFields(introspection.mutationType?.fields);
981
- return {
982
- queries: queries.fields,
983
- mutations: mutations.fields,
984
- truncated: queries.truncated || mutations.truncated
985
- };
986
- }
987
- const SWITCHBOARD_SCHEMA_TOOL_NAME = "getSwitchboardSchema";
988
- /**
989
- * Creates the read-only `getSwitchboardSchema` tool: it introspects the
990
- * GraphQL supergraph of the switchboard serving a drive and returns a
991
- * summary of its root queries and mutations. It reads the schema only and
992
- * never modifies data.
993
- */
994
- function createSwitchboardSchemaTool(deps) {
995
- const getSyncManager = deps?.getSyncManager ?? getBrowserSyncManager;
996
- const getSelectedDriveId = deps?.getSelectedDriveId ?? (() => typeof window === "undefined" ? void 0 : window.ph?.selectedDriveId);
997
- const tokenProvider = deps?.tokenProvider ?? ambientRenownTokenProvider;
998
- const fetchImpl = deps?.fetchImpl ?? fetch;
999
- const timeoutMs = deps?.timeoutMs ?? 1e4;
1000
- return {
1001
- name: SWITCHBOARD_SCHEMA_TOOL_NAME,
1002
- description: "Introspect the GraphQL endpoint of the switchboard serving a drive and list the queries and mutations it exposes (reactor operations, document-model read models, package subgraphs). Read-only: it reads the schema only and never modifies data. Omit driveId to introspect the currently selected drive.",
1003
- inputSchema: { driveId: z.string().describe("Drive to introspect. Omit to use the currently selected drive.").optional() },
1004
- annotations: { readOnlyHint: true },
1005
- callback: async (input) => {
1006
- const driveId = input?.driveId ?? getSelectedDriveId();
1007
- const sb = resolveDriveSwitchboard(driveId, getSyncManager());
1008
- if (!sb) throw new Error(driveId ? `Drive "${driveId}" has no switchboard: it is not synced to a remote switchboard.` : "No drive is currently selected and no driveId was given.");
1009
- const token = await tokenProvider();
1010
- let response;
1011
- try {
1012
- response = await fetchImpl(sb.graphqlUrl, {
1013
- method: "POST",
1014
- headers: {
1015
- "content-type": "application/json",
1016
- ...token ? { authorization: `Bearer ${token}` } : {}
1017
- },
1018
- body: JSON.stringify({ query: SWITCHBOARD_INTROSPECTION_QUERY }),
1019
- signal: AbortSignal.timeout(timeoutMs)
1020
- });
1021
- } catch (error) {
1022
- throw new Error(`Switchboard at ${sb.graphqlUrl} is not reachable: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
1023
- }
1024
- if (response.status === 401 || response.status === 403) throw new Error(`Switchboard at ${sb.graphqlUrl} refused the request (HTTP ${response.status}). Sign in to the switchboard (Renown) and try again.`);
1025
- if (!response.ok) throw new Error(`Switchboard introspection failed: HTTP ${response.status} ${response.statusText} from ${sb.graphqlUrl}`);
1026
- const body = await response.json();
1027
- const schemaErrors = body?.errors;
1028
- if (schemaErrors && schemaErrors.length > 0) throw new Error(schemaErrors.map((e) => e.message ?? "unknown error").join("; "));
1029
- const schema = body?.data?.__schema;
1030
- if (!schema?.queryType) throw new Error(`Switchboard at ${sb.graphqlUrl} did not return a GraphQL schema.`);
1031
- const summary = summarizeIntrospectionSchema(schema);
1032
- return {
1033
- switchboardUrl: sb.switchboardUrl,
1034
- graphqlUrl: sb.graphqlUrl,
1035
- ...summary
1036
- };
1037
- }
1038
- };
1039
- }
1040
- //#endregion
1041
812
  //#region src/ai/context.ts
1042
813
  /**
1043
814
  * Snapshot of the current selection in the drive explorer, used to make the
@@ -1291,6 +1062,6 @@ function ReactorChatFab({ getTools }) {
1291
1062
  })] });
1292
1063
  }
1293
1064
  //#endregion
1294
- export { ApprovalCard, ChatWindow, DEFAULT_AI_SETTINGS, FULL_RESULT_TURNS, MAX_AGENT_STEPS, MAX_TOOL_RESULT_CHARS, ReactorChatAgent, ReactorChatFab, STUB_MIN_CHARS, SWITCHBOARD_INTROSPECTION_QUERY, SWITCHBOARD_SCHEMA_TOOL_NAME, WRITE_TOOLS, buildSystemPrompt, clearAiSettings, createReactorChatModel, createSwitchboardSchemaTool, getAiSettings, getBrowserSyncManager, isAiConfigured, isWriteTool, resolveDriveSwitchboard, stubStaleToolResults, subscribeAiSettings, summarizeIntrospectionSchema, unwrapToolResult, updateAiSettings, useChatContext, useReactorChat };
1065
+ export { ApprovalCard, ChatWindow, DEFAULT_AI_SETTINGS, FULL_RESULT_TURNS, GQL_CHANNEL_SUFFIX, MAX_AGENT_STEPS, MAX_TOOL_RESULT_CHARS, ReactorChatAgent, ReactorChatFab, STUB_MIN_CHARS, SWITCHBOARD_INTROSPECTION_QUERY, SWITCHBOARD_SCHEMA_TOOL_NAME, WRITE_TOOLS, buildSystemPrompt, clearAiSettings, createReactorChatModel, createSwitchboardSchemaTool, getAiSettings, getBrowserSyncManager, isAiConfigured, isWriteTool, resolveDriveSwitchboard, stubStaleToolResults, subscribeAiSettings, summarizeIntrospectionSchema, unwrapToolResult, updateAiSettings, useChatContext, useReactorChat };
1295
1066
 
1296
1067
  //# sourceMappingURL=index.js.map