@ixo/editor 6.31.0 → 6.31.1
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/dist/action-manifest.json +16640 -3129
- package/dist/{chunk-S7CAGFE3.js → chunk-4475SO6R.js} +2 -2
- package/dist/{chunk-NYQBGIZ2.js → chunk-FQAKOGKS.js} +2355 -926
- package/dist/chunk-FQAKOGKS.js.map +1 -0
- package/dist/{chunk-ZXNBOVAA.js → chunk-TBCPHCFA.js} +2410 -265
- package/dist/chunk-TBCPHCFA.js.map +1 -0
- package/dist/{store-CqvAkvIZ.d.ts → connections-B24zj0RI.d.ts} +340 -323
- package/dist/core/index.d.ts +314 -251
- package/dist/core/index.js +455 -2
- package/dist/core/index.js.map +1 -1
- package/dist/{graphql-client-ZY4Iw0jB.d.ts → graphql-client-BICFLCX8.d.ts} +6 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/mantine/index.d.ts +5 -5
- package/dist/mantine/index.js +2 -2
- package/dist/mantine/index.js.map +1 -1
- package/dist/{nodeContext-C-BsYuYi.d.ts → nodeContext-CV9D4s3X.d.ts} +1 -1
- package/dist/{index-Up8gA_E9.d.ts → runtime-DFPayq89.d.ts} +9378 -8728
- package/package.json +7 -5
- package/style.css.d.ts +5 -5
- package/dist/chunk-NYQBGIZ2.js.map +0 -1
- package/dist/chunk-ZXNBOVAA.js.map +0 -1
- /package/dist/{chunk-S7CAGFE3.js.map → chunk-4475SO6R.js.map} +0 -0
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/templates/oracleInitFlow.ts"],"sourcesContent":["import type { FlowMetadata } from '../types/editor';\nimport type { FlowNode } from '../types/authorization';\n\n// ---------------------------------------------------------------------------\n// SurveyJS schema for the oracle configuration form\n// ---------------------------------------------------------------------------\n\nexport const oracleInitSurveySchema = {\n title: 'Oracle Configuration',\n description: 'Provide the details needed to initialise a new oracle on the IXO network.',\n logoPosition: 'right',\n pages: [\n {\n name: 'basicInfo',\n title: 'Basic Information',\n elements: [\n {\n type: 'text',\n name: 'projectName',\n title: 'Project Name',\n description: 'Used as the folder name — no spaces or special characters.',\n isRequired: true,\n validators: [\n {\n type: 'regex',\n text: 'Only lowercase letters, numbers, and hyphens are allowed (no spaces or special characters).',\n regex: '^[a-z0-9]+(-[a-z0-9]+)*$',\n },\n ],\n },\n {\n type: 'text',\n name: 'pin',\n title: 'PIN',\n description: 'A 6-digit PIN used to secure wallet operations.',\n isRequired: true,\n inputType: 'password',\n maxLength: 6,\n validators: [\n {\n type: 'regex',\n text: 'PIN must be exactly 6 digits.',\n regex: '^\\\\d{6}$',\n },\n ],\n },\n ],\n },\n {\n name: 'oracleDetails',\n title: 'Oracle Details',\n elements: [\n {\n type: 'text',\n name: 'oracleName',\n title: 'Oracle Name',\n isRequired: true,\n },\n {\n type: 'text',\n name: 'orgName',\n title: 'Organisation Name',\n isRequired: true,\n },\n {\n type: 'comment',\n name: 'description',\n title: 'Description',\n isRequired: true,\n },\n {\n type: 'text',\n name: 'location',\n title: 'Location',\n isRequired: true,\n },\n {\n type: 'text',\n name: 'logoUrl',\n title: 'Logo URL',\n isRequired: true,\n inputType: 'url',\n validators: [{ type: 'url' }],\n },\n {\n type: 'text',\n name: 'coverImageUrl',\n title: 'Cover Image URL',\n isRequired: true,\n inputType: 'url',\n validators: [{ type: 'url' }],\n },\n ],\n },\n {\n name: 'serviceConfig',\n title: 'Service Configuration',\n elements: [\n {\n type: 'text',\n name: 'apiUrl',\n title: 'API URL',\n isRequired: true,\n inputType: 'url',\n defaultValue: 'http://localhost:4000',\n validators: [{ type: 'url' }],\n },\n {\n type: 'text',\n name: 'price',\n title: 'Price',\n description: 'Service price in IXO tokens (minimum 1).',\n isRequired: true,\n inputType: 'number',\n defaultValue: 100,\n validators: [\n {\n type: 'numeric',\n text: 'Price must be at least 1.',\n minValue: 1,\n },\n ],\n },\n {\n type: 'dropdown',\n name: 'llmModel',\n title: 'LLM Model',\n isRequired: true,\n choices: [\n { value: 'kimi-k2.5', text: 'Kimi K2.5' },\n { value: 'claude-sonnet', text: 'Claude Sonnet' },\n { value: 'gpt-4o', text: 'GPT-4o' },\n { value: 'gemini-2.5', text: 'Gemini 2.5' },\n { value: 'llama-4', text: 'Llama 4' },\n { value: 'custom', text: 'Custom' },\n ],\n },\n {\n type: 'comment',\n name: 'opening',\n title: 'Opening Message',\n description: 'The greeting or introduction the agent uses when starting a conversation.',\n isRequired: false,\n },\n {\n type: 'comment',\n name: 'communicationStyle',\n title: 'Communication Style',\n description: 'How the agent should communicate (e.g. formal, friendly, concise).',\n isRequired: false,\n },\n {\n type: 'comment',\n name: 'capabilities',\n title: 'What can the agent do?',\n description: 'Describe what this agent is capable of doing for users.',\n isRequired: false,\n },\n ],\n },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Template generator\n// ---------------------------------------------------------------------------\n\nexport function createOracleInitFlowTemplate(): {\n metadata: FlowMetadata;\n nodes: FlowNode[];\n} {\n const metadata: FlowMetadata = {\n '@context': 'https://schema.ixo.world/flow/v1',\n _type: 'flow/oracle-init',\n schema_version: '1.0.0',\n doc_id: '',\n title: 'Oracle Init Flow',\n createdAt: new Date().toISOString(),\n createdBy: '',\n flowOwnerDid: '',\n };\n\n const nodes: FlowNode[] = [\n // ------------------------------------------------------------------\n // [1] Form — collects all oracle configuration\n // ------------------------------------------------------------------\n {\n id: 'oracle-form',\n type: 'form',\n props: {\n title: 'Oracle Configuration',\n description: 'Enter the details for your new oracle.',\n icon: 'checklist',\n surveySchema: JSON.stringify(oracleInitSurveySchema),\n },\n },\n\n // ------------------------------------------------------------------\n // [2] Skills — skill/MCP configuration\n // ------------------------------------------------------------------\n {\n id: 'oracle-skills',\n type: 'skills',\n props: {\n title: 'Oracle Skills & MCP Servers',\n description: 'Configure skills and MCP servers for the oracle.',\n icon: 'tools',\n skills: '[]',\n entityDid: '',\n mcpServers: '[]',\n status: 'pending',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-form',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [3] Action — Generate & Fund Wallet\n // Generates a new wallet and funds it in one step.\n // ------------------------------------------------------------------\n {\n id: 'oracle-wallet',\n type: 'action',\n props: {\n title: 'Generate & Fund Wallet',\n description: 'Generate a new IXO wallet and fund it with tokens.',\n icon: 'bolt',\n actionType: 'qi/wallet.generateAndFund',\n inputs: JSON.stringify({}),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-skills',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [4] Action — Create Identity (IID + Matrix)\n // Creates the on-chain IID document, then registers the Matrix account.\n // ------------------------------------------------------------------\n {\n id: 'oracle-identity',\n type: 'action',\n props: {\n title: 'Create Identity',\n description: 'Create on-chain DID document and register Matrix account.',\n icon: 'bolt',\n actionType: 'qi/identity.create',\n inputs: JSON.stringify({\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n did: '{{oracle-wallet.output.did}}',\n address: '{{oracle-wallet.output.address}}',\n pubKey: '{{oracle-wallet.output.pubKey}}',\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-wallet',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [5] Action — Create Oracle Entity\n // On-chain entity creation with P-256 encryption key.\n // ------------------------------------------------------------------\n {\n id: 'oracle-entity-create',\n type: 'action',\n props: {\n title: 'Create Oracle Entity',\n description: 'Create the oracle entity on the IXO network.',\n icon: 'bolt',\n actionType: 'qi/entity.createOracle',\n inputs: JSON.stringify({\n // Wallet outputs\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n address: '{{oracle-wallet.output.address}}',\n did: '{{oracle-wallet.output.did}}',\n pubKey: '{{oracle-wallet.output.pubKey}}',\n // Matrix outputs (from identity block)\n matrixAccessToken: '{{oracle-identity.output.matrixAccessToken}}',\n matrixRoomId: '{{oracle-identity.output.matrixRoomId}}',\n // Form outputs — whole blob, action parses & destructures\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-identity',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [6] Action — Configure Oracle (contract + secrets + config)\n // Creates the user↔oracle DM room, encrypts secrets, stores config.\n // ------------------------------------------------------------------\n {\n id: 'oracle-configure',\n type: 'action',\n props: {\n title: 'Configure Oracle',\n description: 'Contract oracle, encrypt secrets, and store configuration.',\n icon: 'bolt',\n actionType: 'qi/oracle.configureOracle',\n inputs: JSON.stringify({\n // Contract input\n oracleEntityDid: '{{oracle-entity-create.output.entityDid}}',\n // Secrets routing (matrixRoomId comes from contract phase, not inputs)\n publicKeyMultibase: '{{oracle-entity-create.output.encryptionPublicKeyMultibase}}',\n verificationMethodId: '{{oracle-entity-create.output.encryptionVerificationMethodId}}',\n // Fresh mxLogin params\n matrixHomeServerUrl: '{{oracle-identity.output.matrixHomeServerUrl}}',\n matrixUsername: '{{oracle-identity.output.matrixUserId}}',\n // Sensitive plaintext values\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n matrixPassword: '{{oracle-identity.output.matrixPassword}}',\n matrixRecoveryPhrase: '{{oracle-identity.output.matrixRecoveryPhrase}}',\n // MCP auth secrets (already JWE-encrypted by skills block FlowDetail)\n mcpAuthSecrets: '{{oracle-skills.output.mcpAuthSecrets}}',\n // Skills outputs\n skills: '{{oracle-skills.output.skills}}',\n mcpServers: '{{oracle-skills.output.mcpServers}}',\n // Identifiers\n matrixUserId: '{{oracle-identity.output.matrixUserId}}',\n matrixAccountRoomId: '{{oracle-identity.output.matrixRoomId}}',\n entityDid: '{{oracle-entity-create.output.entityDid}}',\n oracleAddress: '{{oracle-wallet.output.address}}',\n oracleDid: '{{oracle-wallet.output.did}}',\n // Form outputs — whole blob, action parses & destructures\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-entity-create',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [7] Action — Deploy Oracle (setup + start)\n // Clones repo, writes config, builds, then starts the process.\n // ------------------------------------------------------------------\n {\n id: 'oracle-deploy',\n type: 'action',\n props: {\n title: 'Deploy Oracle',\n description: 'Set up environment and start the oracle process.',\n icon: 'bolt',\n actionType: 'qi/oracle.deploy',\n inputs: JSON.stringify({\n entityDid: '{{oracle-entity-create.output.entityDid}}',\n roomId: '{{oracle-configure.output.userOracleRoomId}}',\n skills: '{{oracle-skills.output.skills}}',\n mcpServers: '{{oracle-skills.output.mcpServers}}',\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n matrixPassword: '{{oracle-identity.output.matrixPassword}}',\n matrixRecoveryPhrase: '{{oracle-identity.output.matrixRecoveryPhrase}}',\n matrixUsername: '{{oracle-identity.output.matrixUserId}}',\n matrixAccountRoomId: '{{oracle-identity.output.matrixRoomId}}',\n freshAccessToken: '{{oracle-configure.output.freshAccessToken}}',\n openRouterApiKey: '{{oracle-configure.output.openRouterApiKeyPlaintext}}',\n // Form outputs — whole blob, action parses & destructures\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-configure',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [8] Secrets — display credentials and download\n // ------------------------------------------------------------------\n {\n id: 'oracle-secrets',\n type: 'secrets',\n props: {\n title: 'Oracle Credentials',\n description: 'Download your oracle credentials after setup is complete.',\n icon: 'key',\n downloadEndpoint: '',\n entityDid: '{{oracle-entity-create.output.entityDid}}',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-deploy',\n requiredStatus: 'approved',\n },\n },\n ];\n\n return { metadata, nodes };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,IAAM,yBAAyB;AAAA,EACpC,OAAO;AAAA,EACP,aAAa;AAAA,EACb,cAAc;AAAA,EACd,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,YAAY;AAAA,YACV;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,WAAW;AAAA,UACX,YAAY;AAAA,YACV;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,cAAc;AAAA,UACd,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,cAAc;AAAA,UACd,YAAY;AAAA,YACV;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,SAAS;AAAA,YACP,EAAE,OAAO,aAAa,MAAM,YAAY;AAAA,YACxC,EAAE,OAAO,iBAAiB,MAAM,gBAAgB;AAAA,YAChD,EAAE,OAAO,UAAU,MAAM,SAAS;AAAA,YAClC,EAAE,OAAO,cAAc,MAAM,aAAa;AAAA,YAC1C,EAAE,OAAO,WAAW,MAAM,UAAU;AAAA,YACpC,EAAE,OAAO,UAAU,MAAM,SAAS;AAAA,UACpC;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,UACb,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,UACb,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,UACb,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,+BAGd;AACA,QAAM,WAAyB;AAAA,IAC7B,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAEA,QAAM,QAAoB;AAAA;AAAA;AAAA;AAAA,IAIxB;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,cAAc,KAAK,UAAU,sBAAsB;AAAA,MACrD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ,KAAK,UAAU,CAAC,CAAC;AAAA,QACzB,sBAAsB;AAAA,MACxB;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ,KAAK,UAAU;AAAA,UACrB,UAAU;AAAA,UACV,KAAK;AAAA,UACL,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,aAAa;AAAA,QACf,CAAC;AAAA,QACD,sBAAsB;AAAA,MACxB;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ,KAAK,UAAU;AAAA;AAAA,UAErB,UAAU;AAAA,UACV,SAAS;AAAA,UACT,KAAK;AAAA,UACL,QAAQ;AAAA;AAAA,UAER,mBAAmB;AAAA,UACnB,cAAc;AAAA;AAAA,UAEd,aAAa;AAAA,QACf,CAAC;AAAA,QACD,sBAAsB;AAAA,MACxB;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ,KAAK,UAAU;AAAA;AAAA,UAErB,iBAAiB;AAAA;AAAA,UAEjB,oBAAoB;AAAA,UACpB,sBAAsB;AAAA;AAAA,UAEtB,qBAAqB;AAAA,UACrB,gBAAgB;AAAA;AAAA,UAEhB,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,sBAAsB;AAAA;AAAA,UAEtB,gBAAgB;AAAA;AAAA,UAEhB,QAAQ;AAAA,UACR,YAAY;AAAA;AAAA,UAEZ,cAAc;AAAA,UACd,qBAAqB;AAAA,UACrB,WAAW;AAAA,UACX,eAAe;AAAA,UACf,WAAW;AAAA;AAAA,UAEX,aAAa;AAAA,QACf,CAAC;AAAA,QACD,sBAAsB;AAAA,MACxB;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ,KAAK,UAAU;AAAA,UACrB,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,sBAAsB;AAAA,UACtB,gBAAgB;AAAA,UAChB,qBAAqB;AAAA,UACrB,kBAAkB;AAAA,UAClB,kBAAkB;AAAA;AAAA,UAElB,aAAa;AAAA,QACf,CAAC;AAAA,QACD,sBAAsB;AAAA,MACxB;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,kBAAkB;AAAA,QAClB,WAAW;AAAA,MACb;AAAA,MACA,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,MAAM;AAC3B;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/lib/topicActions/topicActionBridge.ts","../../src/core/lib/topicActions/externalExecutorAdapter.ts","../../src/core/templates/oracleInitFlow.ts"],"sourcesContent":["import * as Y from 'yjs';\nimport { canonicalActionJson, sha256Digest } from '../actionRegistry/digest';\nimport { ACTION_REGISTRY_VERSION, generateActionManifest } from '../actionRegistry/manifest';\nimport { getAction } from '../actionRegistry/registry';\nimport { validateTopicSemanticRecordBatch } from '../actionRegistry/topicSemanticRecords';\nimport type { ActionDefinition, TopicActionRecord, TopicExecutionContext } from '../actionRegistry/types';\n\nexport type TopicActionReceiptStatus = 'requested' | 'awaiting_confirmation' | 'running' | 'succeeded' | 'failed' | 'rejected' | 'cancelled' | 'needs_verification';\nexport type TopicActionTerminalStatus = Extract<TopicActionReceiptStatus, 'succeeded' | 'failed' | 'rejected' | 'cancelled' | 'needs_verification'>;\n\nexport interface TopicActionThreadUpdateV1 {\n version: 1;\n updateId: `sha256:${string}`;\n topicId: string;\n requestId: string;\n receipt: { receiptId: string; operationId?: string };\n action: { type: string; displayName: string; description: string };\n status: TopicActionTerminalStatus;\n occurredAt: string;\n semanticRecords: Array<{ recordId: string; type: string; version: number; displayName: string; description: string }>;\n body: string;\n /** Informational only: this message never advances a governed lifecycle. */\n lifecycleEffect: 'none';\n}\n\nexport interface TopicActionReceiptV2 {\n version: 2;\n receiptId: string;\n sequence: number;\n requestId: string;\n topicId: string;\n topicRevision: string;\n action: { type: string; can: string; registryVersion: string; contractDigest: `sha256:${string}` };\n runtime: {\n provider: TopicExecutionContext['executorProvider'];\n bindingId?: string;\n flowUri?: string;\n sessionRunId?: string;\n nodeId?: string;\n executionId: string;\n };\n actorDid: string;\n executorDid: string;\n status: TopicActionReceiptStatus;\n idempotencyKey: string;\n occurredAt: string;\n authorization: { capability: string; invocation?: string; confirmation?: string };\n input: { digest: `sha256:${string}`; ref?: string; summary?: Record<string, unknown> };\n /** Ordered digest of the complete semantic record envelopes written with this receipt. */\n semanticRecordsDigest: `sha256:${string}`;\n output?: { digest: `sha256:${string}`; ref?: string; summary?: Record<string, unknown> };\n proof?: { kind: 'fields' | 'custom' | 'host-receipt'; digest: `sha256:${string}`; refs?: string[] };\n evidenceRefs?: string[];\n traceRef?: string;\n error?: { code?: string; message: string };\n issuerDid: string;\n signature: string;\n}\n\nexport type UnsignedTopicActionReceiptV2 = Omit<TopicActionReceiptV2, 'issuerDid' | 'signature'>;\n\nexport interface TopicActionReceiptSigner {\n sign(receipt: UnsignedTopicActionReceiptV2): Promise<{ issuerDid: string; signature: string }>;\n}\n\nexport interface TopicActionReceiptVerifier {\n verify(\n receipt: TopicActionReceiptV2,\n expected: { audience: string; capability: 'topic/record-action'; actionType: string; topicId: string }\n ): Promise<{ valid: boolean; reason?: string; audience?: string; capabilities?: string[]; revoked?: boolean; expiresAt?: string }>;\n}\n\nexport interface TopicActionReceiptSink {\n appendReceipt(params: { receipt: TopicActionReceiptV2; semanticRecords: TopicActionRecord[]; previousRevision: string }): Promise<{ operationId: string; topicRevision: string }>;\n appendThreadUpdate(params: { update: TopicActionThreadUpdateV1; transactionId: string }): Promise<{ eventId: string }>;\n}\n\nexport class TopicRevisionConflictError extends Error {\n constructor(readonly currentRevision: string) {\n super(`Topic revision conflict; current revision is ${currentRevision}`);\n this.name = 'TopicRevisionConflictError';\n }\n}\n\nexport interface TopicActionOutboxEntry {\n deduplicationKey: string;\n receipt: TopicActionReceiptV2;\n semanticRecords: TopicActionRecord[];\n writeRevision: string;\n queuedAt: string;\n attempts: number;\n threadUpdate?: TopicActionThreadUpdateV1;\n receiptDelivery?: { operationId: string; topicRevision: string };\n noticeDelivery?: { eventId: string };\n lastError?: string;\n}\n\nexport interface TopicActionOutboxStore {\n nextSequence(topicId: string, requestId: string): Promise<number>;\n enqueue(entry: TopicActionOutboxEntry): Promise<'queued' | 'duplicate'>;\n pending(): Promise<TopicActionOutboxEntry[]>;\n update(entry: TopicActionOutboxEntry): Promise<void>;\n markDelivered(deduplicationKey: string, operationId: string, topicRevision: string): Promise<void>;\n has(deduplicationKey: string): Promise<boolean>;\n}\n\nfunction mergeOutboxProgress(current: TopicActionOutboxEntry, next: TopicActionOutboxEntry): TopicActionOutboxEntry {\n return {\n ...current,\n ...next,\n attempts: Math.max(current.attempts, next.attempts),\n receiptDelivery: next.receiptDelivery ?? current.receiptDelivery,\n noticeDelivery: next.noticeDelivery ?? current.noticeDelivery,\n };\n}\n\nexport class InMemoryTopicActionOutboxStore implements TopicActionOutboxStore {\n private readonly entries = new Map<string, TopicActionOutboxEntry>();\n private readonly delivered = new Set<string>();\n private readonly sequences = new Map<string, number>();\n\n async nextSequence(topicId: string, requestId: string): Promise<number> {\n const key = `${topicId}|${requestId}`;\n const sequence = (this.sequences.get(key) || 0) + 1;\n this.sequences.set(key, sequence);\n return sequence;\n }\n\n async enqueue(entry: TopicActionOutboxEntry): Promise<'queued' | 'duplicate'> {\n if (this.entries.has(entry.deduplicationKey) || this.delivered.has(entry.deduplicationKey)) return 'duplicate';\n this.entries.set(entry.deduplicationKey, structuredClone(entry));\n return 'queued';\n }\n\n async pending(): Promise<TopicActionOutboxEntry[]> {\n return [...this.entries.values()].map((entry) => structuredClone(entry));\n }\n\n async update(entry: TopicActionOutboxEntry): Promise<void> {\n if (this.delivered.has(entry.deduplicationKey)) return;\n const current = this.entries.get(entry.deduplicationKey);\n this.entries.set(entry.deduplicationKey, structuredClone(current ? mergeOutboxProgress(current, entry) : entry));\n }\n\n async markDelivered(deduplicationKey: string): Promise<void> {\n this.entries.delete(deduplicationKey);\n this.delivered.add(deduplicationKey);\n }\n\n async has(deduplicationKey: string): Promise<boolean> {\n return this.entries.has(deduplicationKey) || this.delivered.has(deduplicationKey);\n }\n}\n\n/** Durable, collaboration-safe outbox stored alongside the Flow Y.Doc. */\nexport class YjsTopicActionOutboxStore implements TopicActionOutboxStore {\n private readonly entries: Y.Map<TopicActionOutboxEntry>;\n private readonly delivered: Y.Map<{ operationId: string; topicRevision: string }>;\n private readonly sequences: Y.Map<number>;\n\n constructor(private readonly yDoc: Y.Doc) {\n this.entries = yDoc.getMap<TopicActionOutboxEntry>('topicActionReceiptOutbox');\n this.delivered = yDoc.getMap<{ operationId: string; topicRevision: string }>('topicActionReceiptDelivered');\n this.sequences = yDoc.getMap<number>('topicActionReceiptSequences');\n }\n\n async nextSequence(topicId: string, requestId: string): Promise<number> {\n const key = `${topicId}|${requestId}`;\n let sequence = 0;\n this.yDoc.transact(() => {\n sequence = (this.sequences.get(key) || 0) + 1;\n this.sequences.set(key, sequence);\n }, 'topic-action-sequence');\n return sequence;\n }\n\n async enqueue(entry: TopicActionOutboxEntry): Promise<'queued' | 'duplicate'> {\n if (this.entries.has(entry.deduplicationKey) || this.delivered.has(entry.deduplicationKey)) return 'duplicate';\n this.entries.set(entry.deduplicationKey, structuredClone(entry));\n return 'queued';\n }\n\n async pending(): Promise<TopicActionOutboxEntry[]> {\n return [...this.entries.values()].filter((entry) => !this.delivered.has(entry.deduplicationKey)).map((entry) => structuredClone(entry));\n }\n\n async update(entry: TopicActionOutboxEntry): Promise<void> {\n this.yDoc.transact(() => {\n if (this.delivered.has(entry.deduplicationKey)) return;\n const current = this.entries.get(entry.deduplicationKey);\n this.entries.set(entry.deduplicationKey, structuredClone(current ? mergeOutboxProgress(current, entry) : entry));\n }, 'topic-action-outbox-progress');\n }\n\n async markDelivered(deduplicationKey: string, operationId: string, topicRevision: string): Promise<void> {\n this.yDoc.transact(() => {\n this.entries.delete(deduplicationKey);\n this.delivered.set(deduplicationKey, { operationId, topicRevision });\n }, 'topic-action-delivered');\n }\n\n async has(deduplicationKey: string): Promise<boolean> {\n return this.entries.has(deduplicationKey) || this.delivered.has(deduplicationKey);\n }\n}\n\nexport type TopicActionWriteBackState = 'delivered' | 'queued' | 'duplicate' | 'rejected';\nexport interface TopicActionWriteBackResult {\n state: TopicActionWriteBackState;\n receiptId?: string;\n operationId?: string;\n topicRevision?: string;\n threadEventId?: string;\n error?: string;\n}\n\nexport interface RecordFlowActionPhaseParams {\n topic: TopicExecutionContext;\n actionType: string;\n actorDid: string;\n executorDid: string;\n executionId: string;\n status: TopicActionReceiptStatus;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n semanticRecords?: TopicActionRecord[];\n flowUri?: string;\n sessionRunId?: string;\n nodeId?: string;\n invocationReference?: string;\n traceReference?: string;\n evidenceReferences?: string[];\n error?: { code?: string; message: string };\n occurredAt?: string;\n}\n\nfunction readPath(value: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce<unknown>((current, segment) => (current && typeof current === 'object' ? (current as Record<string, unknown>)[segment] : undefined), value);\n}\n\nfunction safeSummary(value: Record<string, unknown> | undefined, sensitivePaths: string[]): Record<string, unknown> | undefined {\n if (!value) return undefined;\n const sensitiveRoots = new Set(sensitivePaths.map((path) => path.split('.')[0]));\n const summary: Record<string, unknown> = {};\n for (const key of Object.keys(value).sort()) {\n if (Object.keys(summary).length >= 20 || sensitiveRoots.has(key)) continue;\n const item = value[key];\n if (typeof item === 'string') summary[key] = item.length <= 240 ? item : `${item.slice(0, 237)}…`;\n else if (typeof item === 'number' || typeof item === 'boolean' || item === null) summary[key] = item;\n else if (Array.isArray(item)) summary[key] = { count: item.length };\n else if (item && typeof item === 'object') summary[key] = { digest: sha256Digest(item) };\n }\n return Object.keys(summary).length > 0 ? summary : undefined;\n}\n\nfunction proofFor(action: ActionDefinition, output: Record<string, unknown> | undefined): TopicActionReceiptV2['proof'] {\n if (!output || action.proof === 'none') return undefined;\n if ('validate' in action.proof) return { kind: 'custom', digest: sha256Digest(output) };\n const values = action.proof.fields.map((path) => readPath(output, path)).filter((value) => value !== undefined && value !== null && value !== '');\n const refs = values.filter((value): value is string => typeof value === 'string' && value.length <= 500);\n return { kind: 'fields', digest: sha256Digest(values), ...(refs.length > 0 ? { refs: [...new Set(refs)].slice(0, 50) } : {}) };\n}\n\nfunction localPhaseDeduplicationKey(receipt: Pick<TopicActionReceiptV2, 'topicId' | 'requestId' | 'status' | 'idempotencyKey'> & { runtime: { executionId: string } }): string {\n return sha256Digest({\n topicId: receipt.topicId,\n requestId: receipt.requestId,\n executionId: receipt.runtime.executionId,\n status: receipt.status,\n idempotencyKey: receipt.idempotencyKey,\n });\n}\n\nfunction externalReceiptDeduplicationKey(receipt: Pick<TopicActionReceiptV2, 'topicId' | 'requestId' | 'receiptId' | 'sequence'>): string {\n return sha256Digest({ topicId: receipt.topicId, requestId: receipt.requestId, receiptId: receipt.receiptId, sequence: receipt.sequence });\n}\n\nexport function topicSemanticRecordsDigest(records: readonly TopicActionRecord[]): `sha256:${string}` {\n return sha256Digest(records);\n}\n\nfunction validateSemanticRecords(action: ActionDefinition, records: TopicActionRecord[]): void {\n if (!action.topic) throw new Error('Action has no Topic policy');\n const result = validateTopicSemanticRecordBatch(records, action.topic);\n if (!result.valid) throw new Error(`Invalid Topic semantic record (${result.code})`);\n}\n\nconst TERMINAL_STATUSES = new Set<TopicActionReceiptStatus>(['succeeded', 'failed', 'rejected', 'cancelled', 'needs_verification']);\nconst MAX_RECEIPT_DELIVERY_ATTEMPTS = 3;\n\nfunction statusWording(status: TopicActionTerminalStatus): string {\n switch (status) {\n case 'succeeded':\n return 'completed successfully';\n case 'failed':\n return 'failed';\n case 'rejected':\n return 'was rejected';\n case 'cancelled':\n return 'was cancelled';\n case 'needs_verification':\n return 'completed and needs verification';\n }\n}\n\nexport function topicActionThreadUpdateBody(\n action: Pick<ActionDefinition, 'displayName' | 'description'>,\n status: TopicActionTerminalStatus,\n semanticRecords: TopicActionThreadUpdateV1['semanticRecords']\n): string {\n const recordText = semanticRecords.length > 0 ? ` ${semanticRecords.map((record) => `${record.displayName}: ${record.description}`).join(' ')}` : '';\n return `${action.displayName} ${statusWording(status)}. ${action.description}${recordText} This update does not change the Topic, contract, outcome, claim, or settlement lifecycle.`;\n}\n\nexport function topicActionThreadUpdateId(input: {\n topicId: string;\n requestId: string;\n receiptId: string;\n status: TopicActionTerminalStatus;\n semanticRecords: Array<{ recordId: string; type: string; version: number }>;\n}): `sha256:${string}` {\n return sha256Digest(input);\n}\n\n/** Build the one safe, deterministic Matrix update shared by every executor. */\nexport function buildTopicActionThreadUpdate(receipt: TopicActionReceiptV2, action: ActionDefinition, semanticRecords: TopicActionRecord[]): TopicActionThreadUpdateV1 | undefined {\n if (!TERMINAL_STATUSES.has(receipt.status)) return undefined;\n const status = receipt.status as TopicActionTerminalStatus;\n const definitions = new Map((action.topic?.semanticRecordTypes || []).map((definition) => [definition.type, definition]));\n const presentedRecords = semanticRecords.map((record) => {\n const definition = definitions.get(record.type)!;\n return {\n recordId: record.id,\n type: record.type,\n version: record.version,\n displayName: definition.displayName,\n description: definition.description,\n };\n });\n const body = topicActionThreadUpdateBody(action, status, presentedRecords);\n const semanticRecordReferences = presentedRecords.map(({ recordId, type, version }) => ({ recordId, type, version }));\n return {\n version: 1,\n updateId: topicActionThreadUpdateId({\n topicId: receipt.topicId,\n requestId: receipt.requestId,\n receiptId: receipt.receiptId,\n status,\n semanticRecords: semanticRecordReferences,\n }),\n topicId: receipt.topicId,\n requestId: receipt.requestId,\n receipt: { receiptId: receipt.receiptId },\n action: { type: action.type, displayName: action.displayName, description: action.description },\n status,\n occurredAt: receipt.occurredAt,\n semanticRecords: presentedRecords,\n body,\n lifecycleEffect: 'none',\n };\n}\n\nexport function topicActionThreadUpdateTransactionId(update: TopicActionThreadUpdateV1): string {\n return `topic-action-update-${update.updateId.slice('sha256:'.length)}`;\n}\n\nexport class TopicActionBridge {\n private readonly deliveries = new Map<string, Promise<TopicActionWriteBackResult>>();\n\n constructor(\n private readonly sink: TopicActionReceiptSink,\n private readonly signer: TopicActionReceiptSigner,\n private readonly store: TopicActionOutboxStore = new InMemoryTopicActionOutboxStore(),\n private readonly verifier?: TopicActionReceiptVerifier,\n private readonly now: () => Date = () => new Date()\n ) {}\n\n async recordFlowPhase(params: RecordFlowActionPhaseParams): Promise<TopicActionWriteBackResult> {\n const action = getAction(params.actionType);\n if (!action) return { state: 'rejected', error: `Unknown Action '${params.actionType}'` };\n const manifestEntry = generateActionManifest().actions.find((entry) => entry.type === action.type);\n if (!manifestEntry) return { state: 'rejected', error: `Action '${action.type}' is absent from Manifest v4` };\n const baseKind = params.topic.kind.source === 'standard' ? params.topic.kind.kind : params.topic.kind.baseKind;\n if (!action.topic?.supportedBaseKinds.includes(baseKind)) return { state: 'rejected', error: `Action '${action.type}' does not support Topic Kind '${baseKind}'` };\n const semanticRecords = params.semanticRecords || [];\n try {\n validateSemanticRecords(action, semanticRecords);\n } catch (error) {\n return { state: 'rejected', error: error instanceof Error ? error.message : 'Invalid Topic semantic records' };\n }\n\n const stablePhaseKey = localPhaseDeduplicationKey({\n topicId: params.topic.topicId,\n requestId: params.topic.requestId,\n status: params.status,\n idempotencyKey: params.topic.idempotencyKey,\n runtime: { executionId: params.executionId },\n });\n if (await this.store.has(stablePhaseKey)) return { state: 'duplicate' };\n\n const sequence = await this.store.nextSequence(params.topic.topicId, params.topic.requestId);\n const occurredAt = params.occurredAt || this.now().toISOString();\n const idempotencyKey = params.topic.idempotencyKey;\n const inputSummary = safeSummary(params.input, action.sensitiveInputPaths || []);\n const outputSummary = safeSummary(params.output, action.sensitiveOutputPaths || []);\n const proof = proofFor(action, params.output);\n const unsigned: UnsignedTopicActionReceiptV2 = {\n version: 2,\n receiptId: sha256Digest({ topicId: params.topic.topicId, requestId: params.topic.requestId, executionId: params.executionId, sequence, status: params.status }),\n sequence,\n requestId: params.topic.requestId,\n topicId: params.topic.topicId,\n topicRevision: params.topic.topicRevision,\n action: { type: action.type, can: manifestEntry.can, registryVersion: ACTION_REGISTRY_VERSION, contractDigest: manifestEntry.contractDigest },\n runtime: {\n provider: params.topic.executorProvider,\n ...(params.topic.bindingId ? { bindingId: params.topic.bindingId } : {}),\n ...(params.flowUri ? { flowUri: params.flowUri } : {}),\n ...(params.sessionRunId ? { sessionRunId: params.sessionRunId } : {}),\n ...(params.nodeId ? { nodeId: params.nodeId } : {}),\n executionId: params.executionId,\n },\n actorDid: params.actorDid,\n executorDid: params.executorDid,\n status: params.status,\n idempotencyKey,\n occurredAt,\n authorization: {\n capability: params.topic.topicCapabilityReference,\n ...(params.invocationReference ? { invocation: params.invocationReference } : {}),\n ...(params.topic.confirmationReference ? { confirmation: params.topic.confirmationReference } : {}),\n },\n input: { digest: sha256Digest(params.input), ...(inputSummary ? { summary: inputSummary } : {}) },\n semanticRecordsDigest: topicSemanticRecordsDigest(semanticRecords),\n ...(params.output ? { output: { digest: sha256Digest(params.output), ...(outputSummary ? { summary: outputSummary } : {}) } } : {}),\n ...(proof ? { proof } : {}),\n ...(params.evidenceReferences?.length ? { evidenceRefs: [...new Set(params.evidenceReferences)].slice(0, 100) } : {}),\n ...(params.traceReference ? { traceRef: params.traceReference } : {}),\n ...(params.error ? { error: { ...(params.error.code ? { code: params.error.code.slice(0, 80) } : {}), message: params.error.message.slice(0, 2000) } } : {}),\n };\n const signed = await this.signer.sign(unsigned);\n return this.queueAndFlush({ ...unsigned, ...signed }, action, semanticRecords, params.topic.topicRevision, stablePhaseKey);\n }\n\n async ingestExternalReceipt(receipt: TopicActionReceiptV2, semanticRecords: TopicActionRecord[] = []): Promise<TopicActionWriteBackResult> {\n const action = getAction(receipt.action.type);\n const manifest = generateActionManifest();\n const manifestEntry = action && manifest.actions.find((entry) => entry.type === action.type);\n if (!action || !manifestEntry) return { state: 'rejected', error: 'Receipt names an unknown Action' };\n if (receipt.action.contractDigest !== manifestEntry.contractDigest || receipt.action.can !== manifestEntry.can || receipt.action.registryVersion !== manifest.registryVersion) {\n return { state: 'rejected', error: 'Receipt Action contract does not match the live manifest' };\n }\n if (!this.verifier) return { state: 'rejected', error: 'No external receipt verifier is configured' };\n const verification = await this.verifier.verify(receipt, {\n audience: receipt.topicId,\n capability: 'topic/record-action',\n actionType: receipt.action.type,\n topicId: receipt.topicId,\n });\n if (!verification.valid || verification.revoked)\n return { state: 'rejected', error: verification.reason || (verification.revoked ? 'Receipt capability was revoked' : 'Receipt signature is invalid') };\n if (verification.audience && verification.audience !== receipt.topicId) return { state: 'rejected', error: 'Receipt has the wrong audience' };\n if (verification.capabilities && !verification.capabilities.includes('topic/record-action'))\n return { state: 'rejected', error: 'Receipt does not grant Topic receipt recording' };\n if (verification.expiresAt && Date.parse(verification.expiresAt) <= this.now().getTime()) return { state: 'rejected', error: 'Receipt capability is expired' };\n if (Date.parse(receipt.occurredAt) > this.now().getTime() + 5 * 60_000) return { state: 'rejected', error: 'Receipt occurrence time is too far in the future' };\n try {\n validateSemanticRecords(action, semanticRecords);\n } catch (error) {\n return { state: 'rejected', error: error instanceof Error ? error.message : 'Invalid Topic semantic records' };\n }\n if (receipt.semanticRecordsDigest !== topicSemanticRecordsDigest(semanticRecords)) {\n return { state: 'rejected', error: 'Receipt semantic record digest does not match its records' };\n }\n return this.queueAndFlush(receipt, action, semanticRecords, receipt.topicRevision, externalReceiptDeduplicationKey(receipt));\n }\n\n async flush(): Promise<TopicActionWriteBackResult[]> {\n const results: TopicActionWriteBackResult[] = [];\n for (const entry of await this.store.pending()) results.push(await this.deliver(entry));\n return results;\n }\n\n private async queueAndFlush(\n receipt: TopicActionReceiptV2,\n action: ActionDefinition,\n semanticRecords: TopicActionRecord[],\n writeRevision: string,\n key: string\n ): Promise<TopicActionWriteBackResult> {\n if (await this.store.has(key)) return { state: 'duplicate', receiptId: receipt.receiptId };\n const queued = await this.store.enqueue({\n deduplicationKey: key,\n receipt,\n semanticRecords,\n writeRevision,\n queuedAt: this.now().toISOString(),\n attempts: 0,\n threadUpdate: buildTopicActionThreadUpdate(receipt, action, semanticRecords),\n });\n if (queued === 'duplicate') return { state: 'duplicate', receiptId: receipt.receiptId };\n const entry = (await this.store.pending()).find((candidate) => candidate.deduplicationKey === key);\n return entry ? this.deliver(entry) : { state: 'duplicate', receiptId: receipt.receiptId };\n }\n\n private deliver(entry: TopicActionOutboxEntry): Promise<TopicActionWriteBackResult> {\n const inFlight = this.deliveries.get(entry.deduplicationKey);\n if (inFlight) return inFlight;\n const delivery = this.deliverOnce(entry).finally(() => this.deliveries.delete(entry.deduplicationKey));\n this.deliveries.set(entry.deduplicationKey, delivery);\n return delivery;\n }\n\n private async deliverOnce(entry: TopicActionOutboxEntry): Promise<TopicActionWriteBackResult> {\n let current = { ...entry, attempts: entry.attempts + 1 };\n try {\n if (!current.receiptDelivery) {\n const result = await this.sink.appendReceipt({ receipt: current.receipt, semanticRecords: current.semanticRecords, previousRevision: current.writeRevision });\n current = {\n ...current,\n receiptDelivery: result,\n writeRevision: result.topicRevision,\n threadUpdate: current.threadUpdate ? { ...current.threadUpdate, receipt: { ...current.threadUpdate.receipt, operationId: result.operationId } } : undefined,\n lastError: undefined,\n };\n await this.store.update(current);\n }\n if (current.threadUpdate && !current.noticeDelivery) {\n const notice = await this.sink.appendThreadUpdate({\n update: current.threadUpdate,\n transactionId: topicActionThreadUpdateTransactionId(current.threadUpdate),\n });\n current = { ...current, noticeDelivery: notice, lastError: undefined };\n await this.store.update(current);\n }\n const delivery = current.receiptDelivery!;\n await this.store.markDelivered(current.deduplicationKey, delivery.operationId, delivery.topicRevision);\n return {\n state: 'delivered',\n receiptId: current.receipt.receiptId,\n operationId: delivery.operationId,\n topicRevision: delivery.topicRevision,\n ...(current.noticeDelivery ? { threadEventId: current.noticeDelivery.eventId } : {}),\n };\n } catch (error) {\n if (!current.receiptDelivery && error instanceof TopicRevisionConflictError) {\n current = { ...current, writeRevision: error.currentRevision, lastError: error.message };\n await this.store.update(current);\n if (current.attempts < MAX_RECEIPT_DELIVERY_ATTEMPTS) return this.deliverOnce(current);\n }\n current = { ...current, lastError: error instanceof Error ? error.message : 'Topic write-back failed' };\n await this.store.update(current);\n return {\n state: 'queued',\n receiptId: current.receipt.receiptId,\n ...(current.receiptDelivery ? { operationId: current.receiptDelivery.operationId, topicRevision: current.receiptDelivery.topicRevision } : {}),\n error: current.lastError,\n };\n }\n }\n}\n\n/** Stable digest payload for any DID/UCAN/JWS receipt signer. */\nexport function topicActionReceiptSigningPayload(receipt: UnsignedTopicActionReceiptV2): string {\n return canonicalActionJson(receipt);\n}\n","import { generateActionManifest } from '../actionRegistry/manifest';\nimport type { TopicActionInvocationV1, TopicActionRecord, TopicActionRuntimeProvider } from '../actionRegistry/types';\nimport type { TopicActionBridge, TopicActionReceiptV2, TopicActionWriteBackResult } from './topicActionBridge';\n\nexport interface ExternalTopicExecutorResult {\n receipt: TopicActionReceiptV2;\n semanticRecords?: TopicActionRecord[];\n}\n\nexport interface ExternalTopicExecutorPort {\n invoke(invocation: TopicActionInvocationV1): Promise<ExternalTopicExecutorResult>;\n}\n\n/** Shared manifest/invocation boundary for both QiForge and MCP providers. */\nexport class ManifestBoundTopicExecutorAdapter {\n constructor(\n readonly provider: Exclude<TopicActionRuntimeProvider, 'qi-flow'>,\n private readonly executor: ExternalTopicExecutorPort,\n private readonly bridge: TopicActionBridge\n ) {}\n\n async execute(invocation: TopicActionInvocationV1): Promise<TopicActionWriteBackResult> {\n this.validateInvocation(invocation);\n const result = await this.executor.invoke(structuredClone(invocation));\n this.validateResult(invocation, result);\n return this.bridge.ingestExternalReceipt(result.receipt, result.semanticRecords || []);\n }\n\n private validateInvocation(invocation: TopicActionInvocationV1): void {\n if (invocation.version !== 1 || invocation.executorProvider !== this.provider) throw new Error(`Invocation is not addressed to ${this.provider}`);\n if (!invocation.requestId || !invocation.idempotencyKey || !invocation.topicId || !invocation.topicRevision) throw new Error('External Topic invocation is incomplete');\n if (!invocation.actorDid.startsWith('did:') || !invocation.executorDid.startsWith('did:')) throw new Error('External Topic invocation requires actor and executor DIDs');\n if (!invocation.topicCapabilityReference || !invocation.input.digest.startsWith('sha256:')) throw new Error('External Topic invocation lacks capability or safe input digest');\n const manifest = generateActionManifest();\n const action = manifest.actions.find((entry) => entry.type === invocation.actionType);\n if (!action || action.hidden || action.deprecated) throw new Error(`Action '${invocation.actionType}' is unavailable to external executors`);\n if (action.contractDigest !== invocation.actionContractDigest) throw new Error(`Action '${invocation.actionType}' contract digest does not match Manifest v4`);\n }\n\n private validateResult(invocation: TopicActionInvocationV1, result: ExternalTopicExecutorResult): void {\n const receipt = result.receipt;\n if (\n receipt.topicId !== invocation.topicId ||\n receipt.topicRevision !== invocation.topicRevision ||\n receipt.requestId !== invocation.requestId ||\n receipt.idempotencyKey !== invocation.idempotencyKey\n ) {\n throw new Error('External receipt does not correlate to its invocation');\n }\n if (receipt.runtime.provider !== this.provider || receipt.action.type !== invocation.actionType || receipt.action.contractDigest !== invocation.actionContractDigest) {\n throw new Error('External receipt provider or Action contract does not match its invocation');\n }\n if (receipt.actorDid !== invocation.actorDid || receipt.executorDid !== invocation.executorDid)\n throw new Error('External receipt actor or executor DID does not match its invocation');\n if (receipt.input.digest !== invocation.input.digest) throw new Error('External receipt input digest does not match its invocation');\n if (receipt.authorization.capability !== invocation.topicCapabilityReference) throw new Error('External receipt uses a different Topic capability reference');\n }\n}\n\nexport const createQiForgeTopicExecutorAdapter = (executor: ExternalTopicExecutorPort, bridge: TopicActionBridge): ManifestBoundTopicExecutorAdapter =>\n new ManifestBoundTopicExecutorAdapter('qiforge', executor, bridge);\n\nexport const createMcpTopicExecutorAdapter = (executor: ExternalTopicExecutorPort, bridge: TopicActionBridge): ManifestBoundTopicExecutorAdapter =>\n new ManifestBoundTopicExecutorAdapter('mcp', executor, bridge);\n","import type { FlowMetadata } from '../types/editor';\nimport type { FlowNode } from '../types/authorization';\n\n// ---------------------------------------------------------------------------\n// SurveyJS schema for the oracle configuration form\n// ---------------------------------------------------------------------------\n\nexport const oracleInitSurveySchema = {\n title: 'Oracle Configuration',\n description: 'Provide the details needed to initialise a new oracle on the IXO network.',\n logoPosition: 'right',\n pages: [\n {\n name: 'basicInfo',\n title: 'Basic Information',\n elements: [\n {\n type: 'text',\n name: 'projectName',\n title: 'Project Name',\n description: 'Used as the folder name — no spaces or special characters.',\n isRequired: true,\n validators: [\n {\n type: 'regex',\n text: 'Only lowercase letters, numbers, and hyphens are allowed (no spaces or special characters).',\n regex: '^[a-z0-9]+(-[a-z0-9]+)*$',\n },\n ],\n },\n {\n type: 'text',\n name: 'pin',\n title: 'PIN',\n description: 'A 6-digit PIN used to secure wallet operations.',\n isRequired: true,\n inputType: 'password',\n maxLength: 6,\n validators: [\n {\n type: 'regex',\n text: 'PIN must be exactly 6 digits.',\n regex: '^\\\\d{6}$',\n },\n ],\n },\n ],\n },\n {\n name: 'oracleDetails',\n title: 'Oracle Details',\n elements: [\n {\n type: 'text',\n name: 'oracleName',\n title: 'Oracle Name',\n isRequired: true,\n },\n {\n type: 'text',\n name: 'orgName',\n title: 'Organisation Name',\n isRequired: true,\n },\n {\n type: 'comment',\n name: 'description',\n title: 'Description',\n isRequired: true,\n },\n {\n type: 'text',\n name: 'location',\n title: 'Location',\n isRequired: true,\n },\n {\n type: 'text',\n name: 'logoUrl',\n title: 'Logo URL',\n isRequired: true,\n inputType: 'url',\n validators: [{ type: 'url' }],\n },\n {\n type: 'text',\n name: 'coverImageUrl',\n title: 'Cover Image URL',\n isRequired: true,\n inputType: 'url',\n validators: [{ type: 'url' }],\n },\n ],\n },\n {\n name: 'serviceConfig',\n title: 'Service Configuration',\n elements: [\n {\n type: 'text',\n name: 'apiUrl',\n title: 'API URL',\n isRequired: true,\n inputType: 'url',\n defaultValue: 'http://localhost:4000',\n validators: [{ type: 'url' }],\n },\n {\n type: 'text',\n name: 'price',\n title: 'Price',\n description: 'Service price in IXO tokens (minimum 1).',\n isRequired: true,\n inputType: 'number',\n defaultValue: 100,\n validators: [\n {\n type: 'numeric',\n text: 'Price must be at least 1.',\n minValue: 1,\n },\n ],\n },\n {\n type: 'dropdown',\n name: 'llmModel',\n title: 'LLM Model',\n isRequired: true,\n choices: [\n { value: 'kimi-k2.5', text: 'Kimi K2.5' },\n { value: 'claude-sonnet', text: 'Claude Sonnet' },\n { value: 'gpt-4o', text: 'GPT-4o' },\n { value: 'gemini-2.5', text: 'Gemini 2.5' },\n { value: 'llama-4', text: 'Llama 4' },\n { value: 'custom', text: 'Custom' },\n ],\n },\n {\n type: 'comment',\n name: 'opening',\n title: 'Opening Message',\n description: 'The greeting or introduction the agent uses when starting a conversation.',\n isRequired: false,\n },\n {\n type: 'comment',\n name: 'communicationStyle',\n title: 'Communication Style',\n description: 'How the agent should communicate (e.g. formal, friendly, concise).',\n isRequired: false,\n },\n {\n type: 'comment',\n name: 'capabilities',\n title: 'What can the agent do?',\n description: 'Describe what this agent is capable of doing for users.',\n isRequired: false,\n },\n ],\n },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Template generator\n// ---------------------------------------------------------------------------\n\nexport function createOracleInitFlowTemplate(): {\n metadata: FlowMetadata;\n nodes: FlowNode[];\n} {\n const metadata: FlowMetadata = {\n '@context': 'https://schema.ixo.world/flow/v1',\n _type: 'flow/oracle-init',\n schema_version: '1.0.0',\n doc_id: '',\n title: 'Oracle Init Flow',\n createdAt: new Date().toISOString(),\n createdBy: '',\n flowOwnerDid: '',\n };\n\n const nodes: FlowNode[] = [\n // ------------------------------------------------------------------\n // [1] Form — collects all oracle configuration\n // ------------------------------------------------------------------\n {\n id: 'oracle-form',\n type: 'form',\n props: {\n title: 'Oracle Configuration',\n description: 'Enter the details for your new oracle.',\n icon: 'checklist',\n surveySchema: JSON.stringify(oracleInitSurveySchema),\n },\n },\n\n // ------------------------------------------------------------------\n // [2] Skills — skill/MCP configuration\n // ------------------------------------------------------------------\n {\n id: 'oracle-skills',\n type: 'skills',\n props: {\n title: 'Oracle Skills & MCP Servers',\n description: 'Configure skills and MCP servers for the oracle.',\n icon: 'tools',\n skills: '[]',\n entityDid: '',\n mcpServers: '[]',\n status: 'pending',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-form',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [3] Action — Generate & Fund Wallet\n // Generates a new wallet and funds it in one step.\n // ------------------------------------------------------------------\n {\n id: 'oracle-wallet',\n type: 'action',\n props: {\n title: 'Generate & Fund Wallet',\n description: 'Generate a new IXO wallet and fund it with tokens.',\n icon: 'bolt',\n actionType: 'qi/wallet.generateAndFund',\n inputs: JSON.stringify({}),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-skills',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [4] Action — Create Identity (IID + Matrix)\n // Creates the on-chain IID document, then registers the Matrix account.\n // ------------------------------------------------------------------\n {\n id: 'oracle-identity',\n type: 'action',\n props: {\n title: 'Create Identity',\n description: 'Create on-chain DID document and register Matrix account.',\n icon: 'bolt',\n actionType: 'qi/identity.create',\n inputs: JSON.stringify({\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n did: '{{oracle-wallet.output.did}}',\n address: '{{oracle-wallet.output.address}}',\n pubKey: '{{oracle-wallet.output.pubKey}}',\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-wallet',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [5] Action — Create Oracle Entity\n // On-chain entity creation with P-256 encryption key.\n // ------------------------------------------------------------------\n {\n id: 'oracle-entity-create',\n type: 'action',\n props: {\n title: 'Create Oracle Entity',\n description: 'Create the oracle entity on the IXO network.',\n icon: 'bolt',\n actionType: 'qi/entity.createOracle',\n inputs: JSON.stringify({\n // Wallet outputs\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n address: '{{oracle-wallet.output.address}}',\n did: '{{oracle-wallet.output.did}}',\n pubKey: '{{oracle-wallet.output.pubKey}}',\n // Matrix outputs (from identity block)\n matrixAccessToken: '{{oracle-identity.output.matrixAccessToken}}',\n matrixRoomId: '{{oracle-identity.output.matrixRoomId}}',\n // Form outputs — whole blob, action parses & destructures\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-identity',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [6] Action — Configure Oracle (contract + secrets + config)\n // Creates the user↔oracle DM room, encrypts secrets, stores config.\n // ------------------------------------------------------------------\n {\n id: 'oracle-configure',\n type: 'action',\n props: {\n title: 'Configure Oracle',\n description: 'Contract oracle, encrypt secrets, and store configuration.',\n icon: 'bolt',\n actionType: 'qi/oracle.configureOracle',\n inputs: JSON.stringify({\n // Contract input\n oracleEntityDid: '{{oracle-entity-create.output.entityDid}}',\n // Secrets routing (matrixRoomId comes from contract phase, not inputs)\n publicKeyMultibase: '{{oracle-entity-create.output.encryptionPublicKeyMultibase}}',\n verificationMethodId: '{{oracle-entity-create.output.encryptionVerificationMethodId}}',\n // Fresh mxLogin params\n matrixHomeServerUrl: '{{oracle-identity.output.matrixHomeServerUrl}}',\n matrixUsername: '{{oracle-identity.output.matrixUserId}}',\n // Sensitive plaintext values\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n matrixPassword: '{{oracle-identity.output.matrixPassword}}',\n matrixRecoveryPhrase: '{{oracle-identity.output.matrixRecoveryPhrase}}',\n // MCP auth secrets (already JWE-encrypted by skills block FlowDetail)\n mcpAuthSecrets: '{{oracle-skills.output.mcpAuthSecrets}}',\n // Skills outputs\n skills: '{{oracle-skills.output.skills}}',\n mcpServers: '{{oracle-skills.output.mcpServers}}',\n // Identifiers\n matrixUserId: '{{oracle-identity.output.matrixUserId}}',\n matrixAccountRoomId: '{{oracle-identity.output.matrixRoomId}}',\n entityDid: '{{oracle-entity-create.output.entityDid}}',\n oracleAddress: '{{oracle-wallet.output.address}}',\n oracleDid: '{{oracle-wallet.output.did}}',\n // Form outputs — whole blob, action parses & destructures\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-entity-create',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [7] Action — Deploy Oracle (setup + start)\n // Clones repo, writes config, builds, then starts the process.\n // ------------------------------------------------------------------\n {\n id: 'oracle-deploy',\n type: 'action',\n props: {\n title: 'Deploy Oracle',\n description: 'Set up environment and start the oracle process.',\n icon: 'bolt',\n actionType: 'qi/oracle.deploy',\n inputs: JSON.stringify({\n entityDid: '{{oracle-entity-create.output.entityDid}}',\n roomId: '{{oracle-configure.output.userOracleRoomId}}',\n skills: '{{oracle-skills.output.skills}}',\n mcpServers: '{{oracle-skills.output.mcpServers}}',\n mnemonic: '{{oracle-wallet.output.mnemonic}}',\n matrixPassword: '{{oracle-identity.output.matrixPassword}}',\n matrixRecoveryPhrase: '{{oracle-identity.output.matrixRecoveryPhrase}}',\n matrixUsername: '{{oracle-identity.output.matrixUserId}}',\n matrixAccountRoomId: '{{oracle-identity.output.matrixRoomId}}',\n freshAccessToken: '{{oracle-configure.output.freshAccessToken}}',\n openRouterApiKey: '{{oracle-configure.output.openRouterApiKeyPlaintext}}',\n // Form outputs — whole blob, action parses & destructures\n formAnswers: '{{oracle-form.output.form.answers}}',\n }),\n requiresConfirmation: '',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-configure',\n requiredStatus: 'approved',\n },\n },\n\n // ------------------------------------------------------------------\n // [8] Secrets — display credentials and download\n // ------------------------------------------------------------------\n {\n id: 'oracle-secrets',\n type: 'secrets',\n props: {\n title: 'Oracle Credentials',\n description: 'Download your oracle credentials after setup is complete.',\n icon: 'key',\n downloadEndpoint: '',\n entityDid: '{{oracle-entity-create.output.entityDid}}',\n },\n activationCondition: {\n upstreamNodeId: 'oracle-deploy',\n requiredStatus: 'approved',\n },\n },\n ];\n\n return { metadata, nodes };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _blocknote_core from '@blocknote/core';
|
|
2
|
-
import {
|
|
2
|
+
import { ak as IxoBlockProps, k as IxoEditorOptions, a9 as IxoEditorType, h as IxoCollaborativeEditorOptions, c as BlocknoteHandlers, B as BlockRequirements, at as UnlMapConfig, ao as DynamicListDataProvider, ap as DynamicListPanelRenderer, aq as DynamicListRenderer, am as DomainCardRenderer, ad as RunEventAppender, y as Translate, ar as TopicActionRuntimeContext, e as DelegationGrant } from './runtime-DFPayq89.js';
|
|
3
3
|
import { Text, Doc, Map, Array as Array$1 } from 'yjs';
|
|
4
4
|
import React__default from 'react';
|
|
5
5
|
import * as _tiptap_core from '@tiptap/core';
|
|
@@ -500,6 +500,7 @@ interface IxoEditorProps {
|
|
|
500
500
|
visualizationRenderer?: (vizType: string, config: object) => React__default.ReactNode;
|
|
501
501
|
getDynamicListData?: DynamicListDataProvider;
|
|
502
502
|
dynamicListPanelRenderer?: DynamicListPanelRenderer;
|
|
503
|
+
dynamicListRenderer?: DynamicListRenderer;
|
|
503
504
|
domainCardRenderer?: DomainCardRenderer;
|
|
504
505
|
/** Called when an inline flow-step reference chip (`@`-mention of an action
|
|
505
506
|
* block) is clicked, with the referenced node id. The host opens that step. */
|
|
@@ -534,11 +535,13 @@ interface IxoEditorProps {
|
|
|
534
535
|
runEventLog?: RunEventAppender;
|
|
535
536
|
/** Translation function — pass `t` from the host app's i18n setup. Optional. */
|
|
536
537
|
translate?: Translate;
|
|
538
|
+
/** Optional governed Topic binding for this Flow execution surface. */
|
|
539
|
+
topicActionRuntime?: TopicActionRuntimeContext;
|
|
537
540
|
}
|
|
538
541
|
/**
|
|
539
542
|
* IxoEditor component - A customized BlockNote editor for IXO (Mantine UI)
|
|
540
543
|
*/
|
|
541
|
-
declare function IxoEditor({ editor, editable, className, onChange, onSelectionChange, children, mantineTheme: _mantineTheme, handlers, blockRequirements, isPanelVisible, coverImageUrl, logoUrl, visualizationRenderer, getDynamicListData, dynamicListPanelRenderer, domainCardRenderer, onFlowStepRefClick, onExternalDrop, externalDropType, dropIndicator, isPlacementMode, onPlacementCancel, mapConfig, connectedUsers, awarenessInstance, belowTitleSlot, sessionRunId, sessionPreview, runEventLog, translate, }: IxoEditorProps): React__default.ReactElement | null;
|
|
544
|
+
declare function IxoEditor({ editor, editable, className, onChange, onSelectionChange, children, mantineTheme: _mantineTheme, handlers, blockRequirements, isPanelVisible, coverImageUrl, logoUrl, visualizationRenderer, getDynamicListData, dynamicListPanelRenderer, dynamicListRenderer, domainCardRenderer, onFlowStepRefClick, onExternalDrop, externalDropType, dropIndicator, isPlacementMode, onPlacementCancel, mapConfig, connectedUsers, awarenessInstance, belowTitleSlot, sessionRunId, sessionPreview, runEventLog, translate, topicActionRuntime, }: IxoEditorProps): React__default.ReactElement | null;
|
|
542
545
|
|
|
543
546
|
interface CoverImageProps {
|
|
544
547
|
coverImageUrl?: string;
|
|
@@ -758,4 +761,4 @@ declare class GraphQLClient {
|
|
|
758
761
|
}
|
|
759
762
|
declare const ixoGraphQLClient: GraphQLClient;
|
|
760
763
|
|
|
761
|
-
export {
|
|
764
|
+
export { type ApiRequestBlockProps as A, type BlockPresenceUser as B, type CheckboxBlockProps as C, DevUcanGrantButton as D, type Entity as E, FlowPermissionsPanel as F, GrantPermissionModal as G, type HttpMethod as H, IxoEditor as I, useCreateIxoEditor as J, type KeyValuePair as K, type ListBlockProps as L, useTrackBlockFocus as M, type DropPosition as N, OverviewBlock as O, type ProposalBlockProps as P, ExternalDropZone as Q, ApiRequestBlockSpec as a, AuthorizationTab as b, type AuthorizationTabState as c, CheckboxBlockSpec as d, CoverImage as e, type CoverImageProps as f, type EntityResponse as g, EntitySigningSetup as h, type EntityVariables as i, EvaluationTab as j, type EvaluationTabState as k, type FlowStepRefProps as l, FlowStepRefSpec as m, GraphQLClient as n, type GraphQLRequest as o, type GraphQLResponse as p, type IxoEditorProps as q, type ListBlockSettings as r, ListBlockSpec as s, type OverviewBlockProps as t, ProposalBlockSpec as u, getEntity as v, inlineContentSpecs as w, ixoGraphQLClient as x, useBlockPresence as y, useCreateCollaborativeIxoEditor as z };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { A as AuthorizationResult,
|
|
3
|
-
export {
|
|
1
|
+
export { A as ApiRequestBlockProps, a as ApiRequestBlockSpec, b as AuthorizationTab, c as AuthorizationTabState, B as BlockPresenceUser, C as CheckboxBlockProps, d as CheckboxBlockSpec, e as CoverImage, f as CoverImageProps, D as DevUcanGrantButton, E as Entity, g as EntityResponse, h as EntitySigningSetup, i as EntityVariables, j as EvaluationTab, k as EvaluationTabState, F as FlowPermissionsPanel, l as FlowStepRefProps, m as FlowStepRefSpec, G as GrantPermissionModal, n as GraphQLClient, o as GraphQLRequest, p as GraphQLResponse, H as HttpMethod, I as IxoEditor, q as IxoEditorProps, K as KeyValuePair, L as ListBlockProps, r as ListBlockSettings, s as ListBlockSpec, O as OverviewBlock, t as OverviewBlockProps, P as ProposalBlockProps, u as ProposalBlockSpec, v as getEntity, w as inlineContentSpecs, x as ixoGraphQLClient, y as useBlockPresence, z as useCreateCollaborativeIxoEditor, J as useCreateIxoEditor, M as useTrackBlockFocus } from './graphql-client-BICFLCX8.js';
|
|
2
|
+
export { A as AuthorizationResult, B as BaseUcanFlow, a as BuildFlowAgentContextParams, C as CompiledFlow, b as CompilerRegistry, E as ExecuteNodeParams, c as ExecutionContext, d as ExecutionOutcome, F as FLOW_CONNECTIONS_MAP_KEY, e as FLOW_CONNECTION_BINDINGS_MAP_KEY, f as FLOW_PARTICIPANTS_MAP_KEY, g as FlowAgentActor, h as FlowAgentCommand, i as FlowAgentCommandResult, j as FlowAgentContext, k as FlowAgentExecutor, l as FlowAgentLease, m as FlowAgentNodeSnapshot, n as FlowAgentPublicNodeState, o as FlowAgentService, p as FlowAgentTickResult, q as FlowCapability, r as FlowConnection, s as FlowConnectionBinding, t as FlowConnectionRequirementKey, u as FlowParticipant, v as FlowStrategy, M as MergeResult, N as NodeActionResult, R as ReadFlowOptions, w as ReadFlowResult, x as ReadableEditor, S as SetupFlowOptions, y as SetupFlowResult, z as acquireFlowAgentLease, D as appendAgentLedgerEvent, G as buildAuthzFromProps, H as buildFlowAgentContext, I as buildFlowNodeFromBlock, J as cleanupExpiredFlowAgentLeases, K as compileBaseUcanFlow, L as createAgentCommand, O as decompileToBaseUcanFlow, P as evaluateFlowAgentPolicy, Q as executeNode, T as executeQueuedAgentCommands, U as getActiveEditor, V as getFlowAgentMaps, W as isAuthorized, X as mergeCompiledFlows, Y as planRalphLoopCommands, Z as queueAgentCommand, _ as readAgentLedgerEvents, $ as readCompiledFlowFromYDoc, a0 as readFlow, a1 as readFlowAsBaseUcan, a2 as readFlowConnectionBindings, a3 as readFlowConnections, a4 as readFlowFromEditor, a5 as readFlowParticipants, a6 as readQueuedAgentCommands, a7 as releaseFlowAgentLease, a8 as removeFlowConnection, a9 as removeFlowConnectionBinding, aa as removeFlowParticipant, ab as setActiveEditor, ac as setFlowConnectionOptional, ad as setFlowConnectionRequires, ae as setFlowParticipantPowerLevel, af as setFlowParticipantRequirements, ag as setupFlowFromBaseUcan, ah as tickFlowAgent, ai as upsertFlowConnection, aj as upsertFlowConnectionBinding, ak as upsertFlowParticipant, al as validateAgentCommand, am as validateFlowAgentLease } from './connections-B24zj0RI.js';
|
|
3
|
+
export { A as Addr, a as AuthzExecActionTypes, B as BlockRequirements, b as BlocknoteContextValue, c as BlocknoteHandlers, d as BlocknoteProvider, C as CosmosMsgForEmpty, D as DelegationChainValidationResult, e as DelegationGrant, E as Expiration, F as FlowRuntimeStateManager, I as ImportProtocolTemplateResult, f as ImportProtocolTemplatesToSpaceParams, g as InvocationStore, h as IxoCollaborativeEditorOptions, i as IxoCollaborativeUser, j as IxoEditorConfig, k as IxoEditorOptions, l as IxoEditorTheme, L as ListProtocolDeedsWithTemplatesParams, M as MatrixPrivacySettings, m as MatrixRoom, n as MatrixSpace, o as MatrixSpaceStructure, p as MatrixSubspace, P as ProposalAction, q as ProposalResponse, r as ProtocolDeedWithTemplates, s as ProtocolTemplateSummary, S as SingleChoiceProposal, t as StakeType, t as StakeTypeValue, u as Status, v as StoredDelegation, w as StoredInvocation, T as Threshold, x as Timestamp, y as Translate, U as UcanCapability, z as UcanDelegationStore, G as UcanService, H as UcanServiceConfig, J as UcanServiceHandlers, K as Uint128, N as User, V as ValidatorActionType, O as Vote, Q as VoteInfo, R as VoteResponse, W as Votes, X as blockSpecs, Y as createInvocationStore, Z as createMemoryInvocationStore, _ as createMemoryUcanDelegationStore, $ as createRuntimeStateManager, a0 as createUcanDelegationStore, a1 as createUcanService, a2 as getExtraSlashMenuItems, a3 as useBlocknoteContext, a4 as useBlocknoteHandlers, a5 as useTranslate } from './runtime-DFPayq89.js';
|
|
4
4
|
export { Block, BlockNoteEditor, BlockNoteSchema, DefaultBlockSchema, DefaultInlineContentSchema, DefaultStyleSchema, PartialBlock } from '@blocknote/core';
|
|
5
5
|
export { CloneDocumentResult, cloneDocument } from '@ixo/matrix-crdt';
|
|
6
6
|
import 'yjs';
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
useCreateIxoEditor,
|
|
31
31
|
useTrackBlockFocus,
|
|
32
32
|
useTranslate
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-FQAKOGKS.js";
|
|
34
34
|
import {
|
|
35
35
|
FLOW_PARTICIPANTS_MAP_KEY,
|
|
36
36
|
readFlowParticipants,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
setFlowParticipantPowerLevel,
|
|
39
39
|
setFlowParticipantRequirements,
|
|
40
40
|
upsertFlowParticipant
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-4475SO6R.js";
|
|
42
42
|
import {
|
|
43
43
|
FLOW_CONNECTIONS_MAP_KEY,
|
|
44
44
|
FLOW_CONNECTION_BINDINGS_MAP_KEY,
|
|
@@ -87,7 +87,7 @@ import {
|
|
|
87
87
|
upsertFlowConnectionBinding,
|
|
88
88
|
validateAgentCommand,
|
|
89
89
|
validateFlowAgentLease
|
|
90
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-TBCPHCFA.js";
|
|
91
91
|
|
|
92
92
|
// src/index.ts
|
|
93
93
|
import { cloneDocument } from "@ixo/matrix-crdt";
|
package/dist/mantine/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { A as ApiRequestBlockProps, a as ApiRequestBlockSpec, b as AuthorizationTab, c as AuthorizationTabState, B as BlockPresenceUser, C as CheckboxBlockProps, d as CheckboxBlockSpec, e as CoverImage, f as CoverImageProps, D as DevUcanGrantButton, N as DropPosition, E as Entity, g as EntityResponse, h as EntitySigningSetup, i as EntityVariables, j as EvaluationTab, k as EvaluationTabState, Q as ExternalDropZone, F as FlowPermissionsPanel, l as FlowStepRefProps, m as FlowStepRefSpec, G as GrantPermissionModal, n as GraphQLClient, o as GraphQLRequest, p as GraphQLResponse, H as HttpMethod, I as IxoEditor, q as IxoEditorProps, K as KeyValuePair, L as ListBlockProps, r as ListBlockSettings, s as ListBlockSpec, O as OverviewBlock, t as OverviewBlockProps, P as ProposalBlockProps, u as ProposalBlockSpec, v as getEntity, w as inlineContentSpecs, x as ixoGraphQLClient, y as useBlockPresence, z as useCreateCollaborativeIxoEditor, J as useCreateIxoEditor, M as useTrackBlockFocus } from '../graphql-client-BICFLCX8.js';
|
|
2
2
|
import React__default, { PropsWithChildren } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
3
|
+
import { ak as IxoBlockProps, a9 as IxoEditorType, c as BlocknoteHandlers, ad as RunEventAppender, ai as FlowNodeRuntimeState } from '../runtime-DFPayq89.js';
|
|
4
|
+
export { A as Addr, a as AuthzExecActionTypes, B as BlockRequirements, b as BlocknoteContextValue, d as BlocknoteProvider, C as CosmosMsgForEmpty, al as DomainCardData, am as DomainCardRenderer, an as DynamicListData, ao as DynamicListDataProvider, ap as DynamicListPanelRenderer, aq as DynamicListRenderer, E as Expiration, I as ImportProtocolTemplateResult, f as ImportProtocolTemplatesToSpaceParams, h as IxoCollaborativeEditorOptions, i as IxoCollaborativeUser, j as IxoEditorConfig, k as IxoEditorOptions, l as IxoEditorTheme, L as ListProtocolDeedsWithTemplatesParams, M as MatrixPrivacySettings, m as MatrixRoom, n as MatrixSpace, o as MatrixSpaceStructure, p as MatrixSubspace, P as ProposalAction, q as ProposalResponse, r as ProtocolDeedWithTemplates, s as ProtocolTemplateSummary, S as SingleChoiceProposal, t as StakeType, t as StakeTypeValue, u as Status, T as Threshold, x as Timestamp, ar as TopicActionRuntimeContext, K as Uint128, N as User, V as ValidatorActionType, as as VisualizationRenderer, O as Vote, Q as VoteInfo, R as VoteResponse, W as Votes, X as blockSpecs, a2 as getExtraSlashMenuItems, a3 as useBlocknoteContext, a4 as useBlocknoteHandlers } from '../runtime-DFPayq89.js';
|
|
5
5
|
import * as zustand from 'zustand';
|
|
6
6
|
import { SurveyModel } from '@ixo/surveys';
|
|
7
|
-
import { N as NodeContextRecord } from '../nodeContext-
|
|
7
|
+
import { N as NodeContextRecord } from '../nodeContext-CV9D4s3X.js';
|
|
8
8
|
import * as _blocknote_core from '@blocknote/core';
|
|
9
9
|
export { Block, BlockNoteEditor, BlockNoteSchema, DefaultBlockSchema, DefaultInlineContentSchema, DefaultStyleSchema, PartialBlock } from '@blocknote/core';
|
|
10
10
|
import { MatrixClient } from 'matrix-js-sdk';
|
|
@@ -394,7 +394,7 @@ interface UseRegisterOpenSurveyParams {
|
|
|
394
394
|
* Re-registers if the model identity changes (e.g. schema reload).
|
|
395
395
|
* Auto-cleans on unmount.
|
|
396
396
|
*/
|
|
397
|
-
declare function useRegisterOpenSurvey({ id, title, source, schema, context, model, readonly, enabled
|
|
397
|
+
declare function useRegisterOpenSurvey({ id, title, source, schema, context, model, readonly, enabled }: UseRegisterOpenSurveyParams): void;
|
|
398
398
|
|
|
399
399
|
/**
|
|
400
400
|
* Reactive hook over a single block's per-run execution state.
|
package/dist/mantine/index.js
CHANGED
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
useRunSessionId,
|
|
87
87
|
useRunSessionPreview,
|
|
88
88
|
useTrackBlockFocus
|
|
89
|
-
} from "../chunk-
|
|
89
|
+
} from "../chunk-FQAKOGKS.js";
|
|
90
90
|
import {
|
|
91
91
|
DM_NOTIFICATIONS_MAP_KEY,
|
|
92
92
|
RUNS_MAP_KEY,
|
|
@@ -98,7 +98,7 @@ import {
|
|
|
98
98
|
sendDirectMessage,
|
|
99
99
|
setDMNotificationRecord,
|
|
100
100
|
shouldNotify
|
|
101
|
-
} from "../chunk-
|
|
101
|
+
} from "../chunk-TBCPHCFA.js";
|
|
102
102
|
|
|
103
103
|
// src/mantine/components/DebugButton.tsx
|
|
104
104
|
import React, { useEffect, useRef, useState } from "react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mantine/components/DebugButton.tsx","../../src/mantine/components/PageHeader.tsx","../../src/mantine/flow/FlowNodePanel.tsx","../../src/mantine/flow/FlowNodeConfigPanel.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { IconBraces, IconShieldPlus, IconTools } from '@tabler/icons-react';\nimport type { IxoEditorType } from '../../core/types';\nimport type { BlocknoteHandlers } from '../context/BlocknoteContext';\nimport { DevUcanGrantButton } from './DevUcanGrantButton';\nimport { icon } from './ReusablePanel';\nimport { DM_NOTIFICATIONS_MAP_KEY } from '../../core/lib/flowEngine/dmNotificationState';\nimport { RUNS_MAP_KEY, RUNS_TERMINAL_MAP_KEY } from '../../core/lib/flowEngine/runs';\n\nconst ACCENT = '#00ff88';\nconst SURFACE = '#1a1a2e';\n\n/**\n * Dev-tools launcher: a single round button pinned to the bottom-right (the Next.js\n * dev indicator owns the bottom-left) that expands into the individual tools, so the\n * dev overlay costs one small dot instead of a row of bars across the flow canvas.\n */\nexport function DebugButton({ editor, handlers }: { editor: IxoEditorType; handlers?: BlocknoteHandlers }) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [ucanOpen, setUcanOpen] = useState(false);\n const [hovered, setHovered] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!menuOpen) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) setMenuOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setMenuOpen(false);\n };\n\n document.addEventListener('mousedown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [menuOpen]);\n\n const yMapToObject = (map: any) => {\n if (!map) return null;\n const obj: Record<string, any> = {};\n map.forEach((value: any, key: string) => {\n // Recursively unwrap nested Y.Maps so their contents are visible in JSON\n if (value && typeof value.forEach === 'function' && typeof value.get === 'function' && !Array.isArray(value)) {\n obj[key] = yMapToObject(value);\n } else if (value && typeof value.toArray === 'function') {\n obj[key] = value.toArray();\n } else {\n obj[key] = value;\n }\n });\n return Object.keys(obj).length === 0 ? '(empty)' : obj;\n };\n\n const parseJsonProp = (raw: unknown) => {\n if (typeof raw !== 'string' || !raw) return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n };\n\n const handleClick = () => {\n (window as any).__editor = editor;\n const yDoc = (editor as any)._yDoc || (editor as any)._yRuntime?.doc;\n const readShared = (key: string) => yDoc?.share?.get?.(key);\n console.log('Editor exposed as window.__editor. _yDoc?', !!yDoc);\n const dump: Record<string, any> = {};\n\n // 1. BlockNote blocks — with parsed trigger / inputs / assignment so we can\n // see exactly what the listener is subscribing to.\n dump.blocks = editor.document.map((block: any) => ({\n id: block.id,\n type: block.type,\n actionType: block?.props?.actionType,\n triggerRaw: block?.props?.trigger,\n trigger: parseJsonProp(block?.props?.trigger),\n inputs: parseJsonProp(block?.props?.inputs),\n assignment: parseJsonProp(block?.props?.assignment),\n triggerMode: block?.props?.triggerMode,\n props: block.props,\n content: block.content,\n children: block.children,\n }));\n\n // 2. Runtime state\n // a) runs: the run-scoped action state (`runId → { meta, actions }`).\n // `yMapToObject` unwraps the nested containers.\n // b) runsTerminal: write-once closed/cancelled latch per run (Phase B).\n // c) runtime: the legacy flat map. Storage v1 mirrors run-scoped writes;\n // storage v2 deliberately leaves this map behind.\n dump.runs = yMapToObject(editor._yRuns ?? readShared(RUNS_MAP_KEY));\n dump.runsTerminal = yMapToObject(editor._yRunsTerminal ?? readShared(RUNS_TERMINAL_MAP_KEY));\n dump.runtime = yMapToObject(editor._yRuntime);\n dump.xeroConnection = yMapToObject((editor as any)._yXeroConnection);\n dump.xeroWorkItems = yMapToObject((editor as any)._yXeroWorkItems);\n\n // 3. Delegations\n dump.delegations = yMapToObject(editor._yDelegations);\n\n // 4. Invocations\n dump.invocations = yMapToObject(editor._yInvocations);\n\n // 5. Flow metadata\n dump.flowMetadata = editor.getFlowMetadata?.() || null;\n\n // 6. Flow array\n dump.flowArray = editor.getFlow?.() || null;\n\n // 7. Entities Y.Map (companion oracle results)\n dump.entities = yMapToObject(readShared('entities'));\n\n // 8. Trigger/event state — the full chain for debugging block.event.all\n // a) auditTrail: where run records (source emissions) are written\n // b) pendingInvocations: what the Invoke button reads from\n // c) barrierState: partial barrier completion for block.event.all listeners\n // d) dmNotificationState: DM notification dedup (block + pending invocation)\n dump.auditTrail = yMapToObject(readShared('auditTrail'));\n dump.pendingInvocations = yMapToObject(readShared('pendingInvocations'));\n dump.barrierState = yMapToObject(readShared('barrierState'));\n dump.dmNotificationState = yMapToObject(readShared(DM_NOTIFICATIONS_MAP_KEY));\n\n const json = JSON.stringify(dump, null, 2);\n console.log('Editor Debug Dump:\\n' + json);\n };\n\n const tools = [\n {\n id: 'ucans',\n label: 'Grant UCANs',\n title: 'Dev: grant Flow Agent and block action UCANs to room members',\n leftSection: icon(IconShieldPlus, 14, ACCENT),\n onClick: () => setUcanOpen(true),\n },\n {\n id: 'ydoc',\n label: 'Debug Y.Doc',\n title: 'Debug: Log all blocks + runtime state to console',\n leftSection: icon(IconBraces, 14, ACCENT),\n onClick: handleClick,\n },\n ];\n\n return (\n <>\n <DevUcanGrantButton editor={editor} handlers={handlers} opened={ucanOpen} onOpenedChange={setUcanOpen} />\n\n <div\n ref={containerRef}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: 8,\n fontFamily: 'monospace',\n }}\n >\n {menuOpen && (\n <div\n role=\"menu\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n padding: 4,\n minWidth: 168,\n background: SURFACE,\n border: `1px solid ${ACCENT}`,\n borderRadius: 8,\n boxShadow: '0 8px 24px rgba(0, 0, 0, 0.45)',\n }}\n >\n {tools.map((tool) => (\n <button\n key={tool.id}\n role=\"menuitem\"\n title={tool.title}\n onClick={() => {\n tool.onClick();\n setMenuOpen(false);\n }}\n onMouseEnter={() => setHovered(tool.id)}\n onMouseLeave={() => setHovered((current) => (current === tool.id ? null : current))}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n padding: '7px 10px',\n background: hovered === tool.id ? 'rgba(0, 255, 136, 0.12)' : 'transparent',\n color: ACCENT,\n border: 'none',\n borderRadius: 5,\n fontSize: 12,\n fontFamily: 'inherit',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n {tool.leftSection}\n {tool.label}\n </button>\n ))}\n </div>\n )}\n\n <button\n onClick={() => setMenuOpen((current) => !current)}\n onMouseEnter={() => setHovered('launcher')}\n onMouseLeave={() => setHovered((current) => (current === 'launcher' ? null : current))}\n aria-label=\"Dev tools\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n title=\"Dev tools\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 36,\n height: 36,\n padding: 0,\n background: SURFACE,\n color: ACCENT,\n border: `1px solid ${ACCENT}`,\n borderRadius: '50%',\n cursor: 'pointer',\n opacity: menuOpen || hovered === 'launcher' ? 1 : 0.55,\n transition: 'opacity 120ms ease',\n }}\n >\n {icon(IconTools, 18, ACCENT)}\n </button>\n </div>\n </>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nexport interface PageHeaderMenuItem {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n disabled?: boolean;\n divider?: boolean;\n}\n\nexport interface PageHeaderProps {\n title?: string;\n icon?: React.ReactNode;\n isPrivate?: boolean;\n onPrivacyChange?: (isPrivate: boolean) => void;\n lastEdited?: string;\n onShare?: () => void;\n onFavorite?: () => void;\n isFavorited?: boolean;\n menuItems?: PageHeaderMenuItem[];\n}\n\n/**\n * PageHeader component - A Notion-style page header with title, privacy badge, and actions\n */\nexport function PageHeader({\n title = 'New page',\n icon,\n isPrivate = true,\n onPrivacyChange,\n lastEdited,\n onShare,\n onFavorite,\n isFavorited = false,\n menuItems = [],\n}: PageHeaderProps): React.ReactElement {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [isPrivacyOpen, setIsPrivacyOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const privacyRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsMenuOpen(false);\n }\n if (privacyRef.current && !privacyRef.current.contains(event.target as Node)) {\n setIsPrivacyOpen(false);\n }\n }\n\n if (isMenuOpen || isPrivacyOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen, isPrivacyOpen]);\n\n const handleMenuItemClick = (item: PageHeaderMenuItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsMenuOpen(false);\n }\n };\n\n return (\n <div style={styles.container}>\n <div style={styles.leftSection}>\n <span style={styles.icon}>{icon || '📄'}</span>\n <span style={styles.title}>{title}</span>\n <div style={styles.privacyContainer} ref={privacyRef}>\n <button style={styles.privacyBadge} onClick={() => onPrivacyChange && setIsPrivacyOpen(!isPrivacyOpen)}>\n <span style={styles.lockIcon}>{isPrivate ? '🔒' : '🌐'}</span>\n <span>{isPrivate ? 'Private' : 'Public'}</span>\n {onPrivacyChange && <span style={styles.chevron}>▾</span>}\n </button>\n {isPrivacyOpen && onPrivacyChange && (\n <div style={styles.dropdown}>\n <button\n style={{\n ...styles.menuItem,\n ...(isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(true);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🔒</span>\n <span>Private</span>\n </button>\n <button\n style={{\n ...styles.menuItem,\n ...(!isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(false);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🌐</span>\n <span>Public</span>\n </button>\n </div>\n )}\n </div>\n </div>\n <div style={styles.rightSection}>\n {lastEdited && <span style={styles.editedText}>{lastEdited}</span>}\n {onShare && (\n <button style={styles.shareButton} onClick={onShare}>\n Share\n </button>\n )}\n {onFavorite && (\n <button style={styles.iconButton} onClick={onFavorite}>\n {isFavorited ? '★' : '☆'}\n </button>\n )}\n {menuItems.length > 0 && (\n <div style={styles.menuContainer} ref={menuRef}>\n <button style={styles.menuButton} onClick={() => setIsMenuOpen(!isMenuOpen)} aria-label=\"Menu\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" />\n </svg>\n </button>\n {isMenuOpen && (\n <div style={styles.dropdown}>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.divider && index > 0 && <div style={styles.divider} />}\n <button\n style={{\n ...styles.menuItem,\n ...(item.disabled ? styles.menuItemDisabled : {}),\n }}\n onClick={() => handleMenuItemClick(item)}\n disabled={item.disabled}\n >\n {item.icon && <span style={styles.menuItemIcon}>{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'transparent',\n fontSize: '14px',\n minHeight: '44px',\n color: 'rgba(255, 255, 255, 0.9)',\n },\n leftSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n icon: {\n fontSize: '16px',\n },\n title: {\n fontWeight: 500,\n color: 'rgba(255, 255, 255, 0.9)',\n },\n privacyContainer: {\n position: 'relative' as const,\n },\n privacyBadge: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 6px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '12px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n lockIcon: {\n fontSize: '12px',\n },\n chevron: {\n fontSize: '10px',\n marginLeft: '2px',\n },\n rightSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n editedText: {\n color: 'rgba(255, 255, 255, 0.4)',\n fontSize: '12px',\n },\n shareButton: {\n padding: '4px 10px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n borderRadius: '3px',\n fontWeight: 500,\n },\n iconButton: {\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '16px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n menuContainer: {\n position: 'relative',\n },\n menuButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n dropdown: {\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '4px',\n minWidth: '180px',\n backgroundColor: 'rgb(37, 37, 37)',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.4)',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n padding: '4px 0',\n zIndex: 1000,\n },\n menuItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n textAlign: 'left',\n },\n menuItemDisabled: {\n color: 'rgba(255, 255, 255, 0.3)',\n cursor: 'not-allowed',\n },\n menuItemActive: {\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n },\n menuItemIcon: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '16px',\n },\n divider: {\n height: '1px',\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n margin: '4px 0',\n },\n};\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\nimport { RunSessionProvider } from './runSessionContext';\nimport type { RunEventAppender } from '@/core/lib/flowEngine/runLifecycle';\n\n// Panel-based blocks — these export a dedicated \"detail\" panel component that is\n// normally registered via usePanel. We render that panel content directly.\nimport { ActionFlowPanel } from '@/mantine/blocks/action/flow/FlowView';\nimport { FormPanel } from '@/mantine/blocks/form/flow/FormPanel';\nimport { FlowConfig as ProposalFlowConfig } from '@/mantine/blocks/proposal/flow/FlowConfig';\nimport { DomainCreatorSurveyPanel } from '@/mantine/blocks/domainCreator/flow/DomainCreatorSurveyPanel';\nimport { SignPanel } from '@/mantine/blocks/domainCreatorSign/flow/SignPanel';\nimport { GovernanceGroupPanel } from '@/mantine/blocks/governanceGroup/flow/GovernanceGroupPanel';\n\n// Inline-detail blocks — the FlowView itself IS the \"do-the-step\" detail UI\n// (no separate panel; they don't use usePanel for their primary content).\nimport { ClaimFlowView } from '@/mantine/blocks/claim/flow/FlowView';\nimport { EvaluatorFlowView } from '@/mantine/blocks/evaluator/flow/FlowView';\nimport { NotifyFlowView } from '@/mantine/blocks/notify/flow/FlowView';\nimport { CheckboxFlowView } from '@/mantine/blocks/checkbox/flow/FlowView';\nimport { SecretsFlowView } from '@/mantine/blocks/secrets/flow/SecretsFlowView';\nimport { SkillsFlowView } from '@/mantine/blocks/skills/flow/SkillsFlowView';\n\n// email / apiRequest keep their detail UI inside a private (non-exported)\n// PanelContent function, so we dispatch to the full FlowView card instead.\nimport { EmailFlowView } from '@/mantine/blocks/email/flow/FlowView';\nimport { ApiRequestFlowView } from '@/mantine/blocks/apiRequest/flow/FlowView';\n\nexport interface FlowNodePanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n /** Explicit session whose runtime state this panel reads and writes. */\n sessionRunId?: string;\n runEventLog?: RunEventAppender;\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's \"do-the-step\" / detail UI. Lets a host app render the panel for any\n * selected step in its own right column without relying on the per-block\n * usePanel/registeredPanels indirection.\n *\n * NOTE: every rendered detail component reads from BlocknoteContext\n * (useBlocknoteHandlers / useBlocknoteContext throw if the provider is\n * missing). Keep <FlowNodePanel> wrapped in the app's BlocknoteProvider /\n * EditorBlocknoteProvider.\n */\nexport function FlowNodePanel(props: FlowNodePanelProps) {\n // Embedded: the host app supplies the panel header, so BaseRightPanelLayout\n // suppresses its own (no duplicate title / close).\n return (\n <RunSessionProvider sessionRunId={props.sessionRunId} runEventLog={props.runEventLog || props.editor?._runEventLog}>\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodePanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n </RunSessionProvider>\n );\n}\n\nfunction FlowNodePanelContent({ editor, block, isDisabled }: FlowNodePanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionFlowPanel editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'form':\n return <FormPanel editor={editor} block={block} />;\n\n case 'proposal':\n return <ProposalFlowConfig editor={editor} block={block} />;\n\n case 'domainCreator':\n return <DomainCreatorSurveyPanel editor={editor} block={block} />;\n\n case 'domainCreatorSign':\n return <SignPanel editor={editor} block={block} />;\n\n case 'governanceGroup':\n return <GovernanceGroupPanel editor={editor} block={block} />;\n\n case 'claim':\n return <ClaimFlowView editor={editor} block={block} />;\n\n case 'evaluator':\n return <EvaluatorFlowView editor={editor} block={block} />;\n\n case 'notify':\n return <NotifyFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'checkbox':\n return <CheckboxFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'secrets':\n return <SecretsFlowView editor={editor} block={block} />;\n\n case 'skills':\n return <SkillsFlowView editor={editor} block={block} />;\n\n // email / apiRequest: detail UI is a private PanelContent fn; render the\n // full FlowView card (its own onClick opens the registered panel).\n case 'email':\n return <EmailFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'apiRequest':\n return <ApiRequestFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n // enumChecklist has no flow-mode panel (renders EnumChecklistBlock in all\n // modes). Fallback to null / \"open in document\".\n case 'enumChecklist':\n default:\n return null;\n }\n}\n\nexport default FlowNodePanel;\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\n\n// Per-block TEMPLATE config panels — the authoring counterpart to FlowNodePanel.\n// Each exposes the block's rich configuration (General + the shared\n// Authorization / Assignment / Commitment / TTL / Evaluation tabs) on the same\n// BaseRightPanelLayout the runtime panels use.\nimport { TemplateConfig as ActionConfig } from '@/mantine/blocks/action/template/TemplateConfig';\nimport { TemplateConfig as ClaimConfig } from '@/mantine/blocks/claim/template/TemplateConfig';\nimport { TemplateConfig as FormConfig } from '@/mantine/blocks/form/template/TemplateConfig';\nimport { TemplateConfig as CheckboxConfig } from '@/mantine/blocks/checkbox/template/TemplateConfig';\nimport { TemplateConfig as EvaluatorConfig } from '@/mantine/blocks/evaluator/template/TemplateConfig';\nimport { TemplateConfig as NotifyConfig } from '@/mantine/blocks/notify/template/TemplateConfig';\nimport { TemplateConfig as EmailConfig } from '@/mantine/blocks/email/template/TemplateConfig';\nimport { TemplateConfig as ApiRequestConfig } from '@/mantine/blocks/apiRequest/template/TemplateConfig';\nimport { TemplateConfig as ProposalConfig } from '@/mantine/blocks/proposal/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorConfig } from '@/mantine/blocks/domainCreator/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorSignConfig } from '@/mantine/blocks/domainCreatorSign/template/TemplateConfig';\nimport { TemplateConfig as GovernanceGroupConfig } from '@/mantine/blocks/governanceGroup/template/TemplateConfig';\n\n// secrets / skills have a template VIEW rather than a tabbed config.\nimport { SecretsTemplateView } from '@/mantine/blocks/secrets/template/SecretsTemplateView';\nimport { SkillsTemplateView } from '@/mantine/blocks/skills/template/SkillsTemplateView';\n\nexport interface FlowNodeConfigPanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's TEMPLATE configuration panel — the authoring counterpart to\n * `FlowNodePanel` (which renders the runtime \"do-the-step\" UI). Lets a host app\n * render the rich config (General + Authorization/Assignment/Commitment/TTL/…)\n * for any selected step in its own right column.\n *\n * Since `addFlowNode` and the registry route every capability through the\n * generic `action` block, `action → ActionConfig` is the primary case; the\n * dedicated block types are covered for documents that use them directly.\n *\n * Wrapped in `FlowPanelEmbeddedContext` so each config's `BaseRightPanelLayout`\n * suppresses its own header/close (the host supplies those).\n */\nexport function FlowNodeConfigPanel(props: FlowNodeConfigPanelProps) {\n return (\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodeConfigPanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n );\n}\n\nfunction FlowNodeConfigPanelContent({ editor, block }: FlowNodeConfigPanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionConfig editor={editor} block={block} />;\n case 'claim':\n return <ClaimConfig editor={editor} block={block} />;\n case 'form':\n return <FormConfig editor={editor} block={block} />;\n case 'checkbox':\n return <CheckboxConfig editor={editor} block={block} />;\n case 'evaluator':\n return <EvaluatorConfig editor={editor} block={block} />;\n case 'notify':\n return <NotifyConfig editor={editor} block={block} />;\n case 'email':\n return <EmailConfig editor={editor} block={block} />;\n case 'apiRequest':\n return <ApiRequestConfig editor={editor} block={block} />;\n case 'proposal':\n return <ProposalConfig editor={editor} block={block} />;\n case 'domainCreator':\n return <DomainCreatorConfig editor={editor} block={block} />;\n case 'domainCreatorSign':\n return <DomainCreatorSignConfig editor={editor} block={block} />;\n case 'governanceGroup':\n return <GovernanceGroupConfig editor={editor} block={block} />;\n case 'secrets':\n return <SecretsTemplateView editor={editor} block={block} />;\n case 'skills':\n return <SkillsTemplateView editor={editor} block={block} />;\n default:\n return null;\n }\n}\n\nexport default FlowNodeConfigPanel;\n"],"mappings":"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","names":["React","useState","useRef","useEffect","icon","React","React","React","React","TemplateConfig"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mantine/components/DebugButton.tsx","../../src/mantine/components/PageHeader.tsx","../../src/mantine/flow/FlowNodePanel.tsx","../../src/mantine/flow/FlowNodeConfigPanel.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { IconBraces, IconShieldPlus, IconTools } from '@tabler/icons-react';\nimport type { IxoEditorType } from '../../core/types';\nimport type { BlocknoteHandlers } from '../context/BlocknoteContext';\nimport { DevUcanGrantButton } from './DevUcanGrantButton';\nimport { icon } from './ReusablePanel';\nimport { DM_NOTIFICATIONS_MAP_KEY } from '../../core/lib/flowEngine/dmNotificationState';\nimport { RUNS_MAP_KEY, RUNS_TERMINAL_MAP_KEY } from '../../core/lib/flowEngine/runs';\n\nconst ACCENT = '#00ff88';\nconst SURFACE = '#1a1a2e';\n\n/**\n * Dev-tools launcher: a single round button pinned to the bottom-right (the Next.js\n * dev indicator owns the bottom-left) that expands into the individual tools, so the\n * dev overlay costs one small dot instead of a row of bars across the flow canvas.\n */\nexport function DebugButton({ editor, handlers }: { editor: IxoEditorType; handlers?: BlocknoteHandlers }) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [ucanOpen, setUcanOpen] = useState(false);\n const [hovered, setHovered] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!menuOpen) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) setMenuOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setMenuOpen(false);\n };\n\n document.addEventListener('mousedown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [menuOpen]);\n\n const yMapToObject = (map: any) => {\n if (!map) return null;\n const obj: Record<string, any> = {};\n map.forEach((value: any, key: string) => {\n // Recursively unwrap nested Y.Maps so their contents are visible in JSON\n if (value && typeof value.forEach === 'function' && typeof value.get === 'function' && !Array.isArray(value)) {\n obj[key] = yMapToObject(value);\n } else if (value && typeof value.toArray === 'function') {\n obj[key] = value.toArray();\n } else {\n obj[key] = value;\n }\n });\n return Object.keys(obj).length === 0 ? '(empty)' : obj;\n };\n\n const parseJsonProp = (raw: unknown) => {\n if (typeof raw !== 'string' || !raw) return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n };\n\n const handleClick = () => {\n (window as any).__editor = editor;\n const yDoc = (editor as any)._yDoc || (editor as any)._yRuntime?.doc;\n const readShared = (key: string) => yDoc?.share?.get?.(key);\n console.log('Editor exposed as window.__editor. _yDoc?', !!yDoc);\n const dump: Record<string, any> = {};\n\n // 1. BlockNote blocks — with parsed trigger / inputs / assignment so we can\n // see exactly what the listener is subscribing to.\n dump.blocks = editor.document.map((block: any) => ({\n id: block.id,\n type: block.type,\n actionType: block?.props?.actionType,\n triggerRaw: block?.props?.trigger,\n trigger: parseJsonProp(block?.props?.trigger),\n inputs: parseJsonProp(block?.props?.inputs),\n assignment: parseJsonProp(block?.props?.assignment),\n triggerMode: block?.props?.triggerMode,\n props: block.props,\n content: block.content,\n children: block.children,\n }));\n\n // 2. Runtime state\n // a) runs: the run-scoped action state (`runId → { meta, actions }`).\n // `yMapToObject` unwraps the nested containers.\n // b) runsTerminal: write-once closed/cancelled latch per run (Phase B).\n // c) runtime: the legacy flat map. Storage v1 mirrors run-scoped writes;\n // storage v2 deliberately leaves this map behind.\n dump.runs = yMapToObject(editor._yRuns ?? readShared(RUNS_MAP_KEY));\n dump.runsTerminal = yMapToObject(editor._yRunsTerminal ?? readShared(RUNS_TERMINAL_MAP_KEY));\n dump.runtime = yMapToObject(editor._yRuntime);\n dump.xeroConnection = yMapToObject((editor as any)._yXeroConnection);\n dump.xeroWorkItems = yMapToObject((editor as any)._yXeroWorkItems);\n\n // 3. Delegations\n dump.delegations = yMapToObject(editor._yDelegations);\n\n // 4. Invocations\n dump.invocations = yMapToObject(editor._yInvocations);\n\n // 5. Flow metadata\n dump.flowMetadata = editor.getFlowMetadata?.() || null;\n\n // 6. Flow array\n dump.flowArray = editor.getFlow?.() || null;\n\n // 7. Entities Y.Map (Personal Agent results)\n dump.entities = yMapToObject(readShared('entities'));\n\n // 8. Trigger/event state — the full chain for debugging block.event.all\n // a) auditTrail: where run records (source emissions) are written\n // b) pendingInvocations: what the Invoke button reads from\n // c) barrierState: partial barrier completion for block.event.all listeners\n // d) dmNotificationState: DM notification dedup (block + pending invocation)\n dump.auditTrail = yMapToObject(readShared('auditTrail'));\n dump.pendingInvocations = yMapToObject(readShared('pendingInvocations'));\n dump.barrierState = yMapToObject(readShared('barrierState'));\n dump.dmNotificationState = yMapToObject(readShared(DM_NOTIFICATIONS_MAP_KEY));\n\n const json = JSON.stringify(dump, null, 2);\n console.log('Editor Debug Dump:\\n' + json);\n };\n\n const tools = [\n {\n id: 'ucans',\n label: 'Grant UCANs',\n title: 'Dev: grant Flow Agent and block action UCANs to room members',\n leftSection: icon(IconShieldPlus, 14, ACCENT),\n onClick: () => setUcanOpen(true),\n },\n {\n id: 'ydoc',\n label: 'Debug Y.Doc',\n title: 'Debug: Log all blocks + runtime state to console',\n leftSection: icon(IconBraces, 14, ACCENT),\n onClick: handleClick,\n },\n ];\n\n return (\n <>\n <DevUcanGrantButton editor={editor} handlers={handlers} opened={ucanOpen} onOpenedChange={setUcanOpen} />\n\n <div\n ref={containerRef}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: 8,\n fontFamily: 'monospace',\n }}\n >\n {menuOpen && (\n <div\n role=\"menu\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n padding: 4,\n minWidth: 168,\n background: SURFACE,\n border: `1px solid ${ACCENT}`,\n borderRadius: 8,\n boxShadow: '0 8px 24px rgba(0, 0, 0, 0.45)',\n }}\n >\n {tools.map((tool) => (\n <button\n key={tool.id}\n role=\"menuitem\"\n title={tool.title}\n onClick={() => {\n tool.onClick();\n setMenuOpen(false);\n }}\n onMouseEnter={() => setHovered(tool.id)}\n onMouseLeave={() => setHovered((current) => (current === tool.id ? null : current))}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n padding: '7px 10px',\n background: hovered === tool.id ? 'rgba(0, 255, 136, 0.12)' : 'transparent',\n color: ACCENT,\n border: 'none',\n borderRadius: 5,\n fontSize: 12,\n fontFamily: 'inherit',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n {tool.leftSection}\n {tool.label}\n </button>\n ))}\n </div>\n )}\n\n <button\n onClick={() => setMenuOpen((current) => !current)}\n onMouseEnter={() => setHovered('launcher')}\n onMouseLeave={() => setHovered((current) => (current === 'launcher' ? null : current))}\n aria-label=\"Dev tools\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n title=\"Dev tools\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 36,\n height: 36,\n padding: 0,\n background: SURFACE,\n color: ACCENT,\n border: `1px solid ${ACCENT}`,\n borderRadius: '50%',\n cursor: 'pointer',\n opacity: menuOpen || hovered === 'launcher' ? 1 : 0.55,\n transition: 'opacity 120ms ease',\n }}\n >\n {icon(IconTools, 18, ACCENT)}\n </button>\n </div>\n </>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nexport interface PageHeaderMenuItem {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n disabled?: boolean;\n divider?: boolean;\n}\n\nexport interface PageHeaderProps {\n title?: string;\n icon?: React.ReactNode;\n isPrivate?: boolean;\n onPrivacyChange?: (isPrivate: boolean) => void;\n lastEdited?: string;\n onShare?: () => void;\n onFavorite?: () => void;\n isFavorited?: boolean;\n menuItems?: PageHeaderMenuItem[];\n}\n\n/**\n * PageHeader component - A Notion-style page header with title, privacy badge, and actions\n */\nexport function PageHeader({\n title = 'New page',\n icon,\n isPrivate = true,\n onPrivacyChange,\n lastEdited,\n onShare,\n onFavorite,\n isFavorited = false,\n menuItems = [],\n}: PageHeaderProps): React.ReactElement {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [isPrivacyOpen, setIsPrivacyOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const privacyRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsMenuOpen(false);\n }\n if (privacyRef.current && !privacyRef.current.contains(event.target as Node)) {\n setIsPrivacyOpen(false);\n }\n }\n\n if (isMenuOpen || isPrivacyOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen, isPrivacyOpen]);\n\n const handleMenuItemClick = (item: PageHeaderMenuItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsMenuOpen(false);\n }\n };\n\n return (\n <div style={styles.container}>\n <div style={styles.leftSection}>\n <span style={styles.icon}>{icon || '📄'}</span>\n <span style={styles.title}>{title}</span>\n <div style={styles.privacyContainer} ref={privacyRef}>\n <button style={styles.privacyBadge} onClick={() => onPrivacyChange && setIsPrivacyOpen(!isPrivacyOpen)}>\n <span style={styles.lockIcon}>{isPrivate ? '🔒' : '🌐'}</span>\n <span>{isPrivate ? 'Private' : 'Public'}</span>\n {onPrivacyChange && <span style={styles.chevron}>▾</span>}\n </button>\n {isPrivacyOpen && onPrivacyChange && (\n <div style={styles.dropdown}>\n <button\n style={{\n ...styles.menuItem,\n ...(isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(true);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🔒</span>\n <span>Private</span>\n </button>\n <button\n style={{\n ...styles.menuItem,\n ...(!isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(false);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🌐</span>\n <span>Public</span>\n </button>\n </div>\n )}\n </div>\n </div>\n <div style={styles.rightSection}>\n {lastEdited && <span style={styles.editedText}>{lastEdited}</span>}\n {onShare && (\n <button style={styles.shareButton} onClick={onShare}>\n Share\n </button>\n )}\n {onFavorite && (\n <button style={styles.iconButton} onClick={onFavorite}>\n {isFavorited ? '★' : '☆'}\n </button>\n )}\n {menuItems.length > 0 && (\n <div style={styles.menuContainer} ref={menuRef}>\n <button style={styles.menuButton} onClick={() => setIsMenuOpen(!isMenuOpen)} aria-label=\"Menu\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" />\n </svg>\n </button>\n {isMenuOpen && (\n <div style={styles.dropdown}>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.divider && index > 0 && <div style={styles.divider} />}\n <button\n style={{\n ...styles.menuItem,\n ...(item.disabled ? styles.menuItemDisabled : {}),\n }}\n onClick={() => handleMenuItemClick(item)}\n disabled={item.disabled}\n >\n {item.icon && <span style={styles.menuItemIcon}>{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'transparent',\n fontSize: '14px',\n minHeight: '44px',\n color: 'rgba(255, 255, 255, 0.9)',\n },\n leftSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n icon: {\n fontSize: '16px',\n },\n title: {\n fontWeight: 500,\n color: 'rgba(255, 255, 255, 0.9)',\n },\n privacyContainer: {\n position: 'relative' as const,\n },\n privacyBadge: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 6px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '12px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n lockIcon: {\n fontSize: '12px',\n },\n chevron: {\n fontSize: '10px',\n marginLeft: '2px',\n },\n rightSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n editedText: {\n color: 'rgba(255, 255, 255, 0.4)',\n fontSize: '12px',\n },\n shareButton: {\n padding: '4px 10px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n borderRadius: '3px',\n fontWeight: 500,\n },\n iconButton: {\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '16px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n menuContainer: {\n position: 'relative',\n },\n menuButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n dropdown: {\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '4px',\n minWidth: '180px',\n backgroundColor: 'rgb(37, 37, 37)',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.4)',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n padding: '4px 0',\n zIndex: 1000,\n },\n menuItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n textAlign: 'left',\n },\n menuItemDisabled: {\n color: 'rgba(255, 255, 255, 0.3)',\n cursor: 'not-allowed',\n },\n menuItemActive: {\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n },\n menuItemIcon: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '16px',\n },\n divider: {\n height: '1px',\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n margin: '4px 0',\n },\n};\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\nimport { RunSessionProvider } from './runSessionContext';\nimport type { RunEventAppender } from '@/core/lib/flowEngine/runLifecycle';\n\n// Panel-based blocks — these export a dedicated \"detail\" panel component that is\n// normally registered via usePanel. We render that panel content directly.\nimport { ActionFlowPanel } from '@/mantine/blocks/action/flow/FlowView';\nimport { FormPanel } from '@/mantine/blocks/form/flow/FormPanel';\nimport { FlowConfig as ProposalFlowConfig } from '@/mantine/blocks/proposal/flow/FlowConfig';\nimport { DomainCreatorSurveyPanel } from '@/mantine/blocks/domainCreator/flow/DomainCreatorSurveyPanel';\nimport { SignPanel } from '@/mantine/blocks/domainCreatorSign/flow/SignPanel';\nimport { GovernanceGroupPanel } from '@/mantine/blocks/governanceGroup/flow/GovernanceGroupPanel';\n\n// Inline-detail blocks — the FlowView itself IS the \"do-the-step\" detail UI\n// (no separate panel; they don't use usePanel for their primary content).\nimport { ClaimFlowView } from '@/mantine/blocks/claim/flow/FlowView';\nimport { EvaluatorFlowView } from '@/mantine/blocks/evaluator/flow/FlowView';\nimport { NotifyFlowView } from '@/mantine/blocks/notify/flow/FlowView';\nimport { CheckboxFlowView } from '@/mantine/blocks/checkbox/flow/FlowView';\nimport { SecretsFlowView } from '@/mantine/blocks/secrets/flow/SecretsFlowView';\nimport { SkillsFlowView } from '@/mantine/blocks/skills/flow/SkillsFlowView';\n\n// email / apiRequest keep their detail UI inside a private (non-exported)\n// PanelContent function, so we dispatch to the full FlowView card instead.\nimport { EmailFlowView } from '@/mantine/blocks/email/flow/FlowView';\nimport { ApiRequestFlowView } from '@/mantine/blocks/apiRequest/flow/FlowView';\n\nexport interface FlowNodePanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n /** Explicit session whose runtime state this panel reads and writes. */\n sessionRunId?: string;\n runEventLog?: RunEventAppender;\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's \"do-the-step\" / detail UI. Lets a host app render the panel for any\n * selected step in its own right column without relying on the per-block\n * usePanel/registeredPanels indirection.\n *\n * NOTE: every rendered detail component reads from BlocknoteContext\n * (useBlocknoteHandlers / useBlocknoteContext throw if the provider is\n * missing). Keep <FlowNodePanel> wrapped in the app's BlocknoteProvider /\n * EditorBlocknoteProvider.\n */\nexport function FlowNodePanel(props: FlowNodePanelProps) {\n // Embedded: the host app supplies the panel header, so BaseRightPanelLayout\n // suppresses its own (no duplicate title / close).\n return (\n <RunSessionProvider sessionRunId={props.sessionRunId} runEventLog={props.runEventLog || props.editor?._runEventLog}>\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodePanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n </RunSessionProvider>\n );\n}\n\nfunction FlowNodePanelContent({ editor, block, isDisabled }: FlowNodePanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionFlowPanel editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'form':\n return <FormPanel editor={editor} block={block} />;\n\n case 'proposal':\n return <ProposalFlowConfig editor={editor} block={block} />;\n\n case 'domainCreator':\n return <DomainCreatorSurveyPanel editor={editor} block={block} />;\n\n case 'domainCreatorSign':\n return <SignPanel editor={editor} block={block} />;\n\n case 'governanceGroup':\n return <GovernanceGroupPanel editor={editor} block={block} />;\n\n case 'claim':\n return <ClaimFlowView editor={editor} block={block} />;\n\n case 'evaluator':\n return <EvaluatorFlowView editor={editor} block={block} />;\n\n case 'notify':\n return <NotifyFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'checkbox':\n return <CheckboxFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'secrets':\n return <SecretsFlowView editor={editor} block={block} />;\n\n case 'skills':\n return <SkillsFlowView editor={editor} block={block} />;\n\n // email / apiRequest: detail UI is a private PanelContent fn; render the\n // full FlowView card (its own onClick opens the registered panel).\n case 'email':\n return <EmailFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'apiRequest':\n return <ApiRequestFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n // enumChecklist has no flow-mode panel (renders EnumChecklistBlock in all\n // modes). Fallback to null / \"open in document\".\n case 'enumChecklist':\n default:\n return null;\n }\n}\n\nexport default FlowNodePanel;\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\n\n// Per-block TEMPLATE config panels — the authoring counterpart to FlowNodePanel.\n// Each exposes the block's rich configuration (General + the shared\n// Authorization / Assignment / Commitment / TTL / Evaluation tabs) on the same\n// BaseRightPanelLayout the runtime panels use.\nimport { TemplateConfig as ActionConfig } from '@/mantine/blocks/action/template/TemplateConfig';\nimport { TemplateConfig as ClaimConfig } from '@/mantine/blocks/claim/template/TemplateConfig';\nimport { TemplateConfig as FormConfig } from '@/mantine/blocks/form/template/TemplateConfig';\nimport { TemplateConfig as CheckboxConfig } from '@/mantine/blocks/checkbox/template/TemplateConfig';\nimport { TemplateConfig as EvaluatorConfig } from '@/mantine/blocks/evaluator/template/TemplateConfig';\nimport { TemplateConfig as NotifyConfig } from '@/mantine/blocks/notify/template/TemplateConfig';\nimport { TemplateConfig as EmailConfig } from '@/mantine/blocks/email/template/TemplateConfig';\nimport { TemplateConfig as ApiRequestConfig } from '@/mantine/blocks/apiRequest/template/TemplateConfig';\nimport { TemplateConfig as ProposalConfig } from '@/mantine/blocks/proposal/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorConfig } from '@/mantine/blocks/domainCreator/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorSignConfig } from '@/mantine/blocks/domainCreatorSign/template/TemplateConfig';\nimport { TemplateConfig as GovernanceGroupConfig } from '@/mantine/blocks/governanceGroup/template/TemplateConfig';\n\n// secrets / skills have a template VIEW rather than a tabbed config.\nimport { SecretsTemplateView } from '@/mantine/blocks/secrets/template/SecretsTemplateView';\nimport { SkillsTemplateView } from '@/mantine/blocks/skills/template/SkillsTemplateView';\n\nexport interface FlowNodeConfigPanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's TEMPLATE configuration panel — the authoring counterpart to\n * `FlowNodePanel` (which renders the runtime \"do-the-step\" UI). Lets a host app\n * render the rich config (General + Authorization/Assignment/Commitment/TTL/…)\n * for any selected step in its own right column.\n *\n * Since `addFlowNode` and the registry route every capability through the\n * generic `action` block, `action → ActionConfig` is the primary case; the\n * dedicated block types are covered for documents that use them directly.\n *\n * Wrapped in `FlowPanelEmbeddedContext` so each config's `BaseRightPanelLayout`\n * suppresses its own header/close (the host supplies those).\n */\nexport function FlowNodeConfigPanel(props: FlowNodeConfigPanelProps) {\n return (\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodeConfigPanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n );\n}\n\nfunction FlowNodeConfigPanelContent({ editor, block }: FlowNodeConfigPanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionConfig editor={editor} block={block} />;\n case 'claim':\n return <ClaimConfig editor={editor} block={block} />;\n case 'form':\n return <FormConfig editor={editor} block={block} />;\n case 'checkbox':\n return <CheckboxConfig editor={editor} block={block} />;\n case 'evaluator':\n return <EvaluatorConfig editor={editor} block={block} />;\n case 'notify':\n return <NotifyConfig editor={editor} block={block} />;\n case 'email':\n return <EmailConfig editor={editor} block={block} />;\n case 'apiRequest':\n return <ApiRequestConfig editor={editor} block={block} />;\n case 'proposal':\n return <ProposalConfig editor={editor} block={block} />;\n case 'domainCreator':\n return <DomainCreatorConfig editor={editor} block={block} />;\n case 'domainCreatorSign':\n return <DomainCreatorSignConfig editor={editor} block={block} />;\n case 'governanceGroup':\n return <GovernanceGroupConfig editor={editor} block={block} />;\n case 'secrets':\n return <SecretsTemplateView editor={editor} block={block} />;\n case 'skills':\n return <SkillsTemplateView editor={editor} block={block} />;\n default:\n return null;\n }\n}\n\nexport default FlowNodeConfigPanel;\n"],"mappings":"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","names":["React","useState","useRef","useEffect","icon","React","React","React","React","TemplateConfig"]}
|
|
@@ -42,4 +42,4 @@ declare const NODE_CONTEXT_OVERRIDES_MAP_NAME = "nodeContextOverrides";
|
|
|
42
42
|
*/
|
|
43
43
|
declare function isNodeContextRecord(value: unknown): value is NodeContextRecord;
|
|
44
44
|
|
|
45
|
-
export { type NodeContextRecord as N,
|
|
45
|
+
export { type NodeContextRecord as N, NODE_CONTEXT_MAP_NAME as a, NODE_CONTEXT_OVERRIDES_MAP_NAME as b, type NodeContextFieldProvenance as c, isNodeContextRecord as i };
|