@stelis/say-ur-intent 0.0.0 → 0.0.2

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.
Files changed (234) hide show
  1. package/README.md +4 -39
  2. package/dist/adapters/adapterLifecycleValidators.js +7 -0
  3. package/dist/adapters/adapterPromptSurfaces.js +71 -0
  4. package/dist/adapters/deepbook/deepbookHumanReviewProducer.js +175 -0
  5. package/dist/adapters/deepbook/deepbookQuotePolicy.js +112 -0
  6. package/dist/adapters/deepbook/deepbookReviewEvidence.js +507 -0
  7. package/dist/adapters/deepbook/deepbookReviewLifecycle.js +85 -0
  8. package/dist/adapters/deepbook/deepbookSwapIntent.js +79 -0
  9. package/dist/adapters/deepbook/deepbookTransactionMaterialProducer.js +269 -0
  10. package/dist/adapters/flowx/flowxSwapHumanReviewProducer.js +176 -0
  11. package/dist/adapters/flowx/flowxSwapIntent.js +79 -0
  12. package/dist/adapters/flowx/flowxSwapQuotePolicy.js +104 -0
  13. package/dist/adapters/flowx/flowxSwapReviewEvidence.js +468 -0
  14. package/dist/adapters/flowx/flowxSwapReviewLifecycle.js +85 -0
  15. package/dist/adapters/flowx/flowxSwapTransactionMaterialProducer.js +362 -0
  16. package/dist/adapters/intentPlanFactories.js +59 -0
  17. package/dist/adapters/reviewAdapters.js +81 -0
  18. package/dist/core/action/adapterLifecycleValidation.js +12 -0
  19. package/dist/core/action/forbiddenFields.js +43 -0
  20. package/dist/core/action/humanReadableReviewEvidence.js +203 -0
  21. package/dist/core/action/humanReadableReviewProjectionVerifier.js +29 -0
  22. package/dist/core/action/ptbVisualizationProducer.js +66 -0
  23. package/dist/core/action/reviewCheckResults.js +6 -0
  24. package/dist/core/action/reviewStateValidation.js +11 -0
  25. package/dist/core/action/reviewTimeSimulationEvidence.js +471 -0
  26. package/dist/core/action/schemas.js +529 -0
  27. package/dist/core/action/signableAdapterContract.js +993 -0
  28. package/dist/core/action/swapHumanReadableReviewProjection.js +124 -0
  29. package/dist/core/action/swapQuotePolicyEvidence.js +278 -0
  30. package/dist/core/action/transactionObjectOwnershipEvidence.js +247 -0
  31. package/dist/core/action/transactionObjectOwnershipProducer.js +329 -0
  32. package/dist/core/action/types.js +35 -0
  33. package/dist/core/action/walletReviewContractAssembler.js +282 -0
  34. package/dist/core/activity/activityStore.js +15 -0
  35. package/dist/core/activity/localDataService.js +258 -0
  36. package/dist/core/activity/localDataTypes.js +11 -0
  37. package/dist/core/activity/localDataValidation.js +396 -0
  38. package/dist/core/activity/schemaVersion.js +1 -0
  39. package/dist/core/activity/sqliteActivityStore.js +820 -0
  40. package/dist/core/activity/sqliteActivityStoreRows.js +430 -0
  41. package/dist/core/activity/sqliteActivityStoreSchema.js +258 -0
  42. package/dist/core/activity/sqliteActivityStoreTypes.js +5 -0
  43. package/dist/core/activity/suiFunctionTarget.js +43 -0
  44. package/dist/core/activity/transactionActivityAccountEffects.js +189 -0
  45. package/dist/core/activity/transactionActivityAnalysis.js +295 -0
  46. package/dist/core/activity/transactionActivityClassifier.js +306 -0
  47. package/dist/core/activity/transactionActivityDetails.js +229 -0
  48. package/dist/core/activity/transactionActivityProtocolRules.js +218 -0
  49. package/dist/core/activity/transactionActivityScanPolicy.js +170 -0
  50. package/dist/core/activity/transactionActivityService.js +379 -0
  51. package/dist/core/activity/transactionActivityTypes.js +18 -0
  52. package/dist/core/eventlog/sink.js +35 -0
  53. package/dist/core/evidence/settlementFamilies.js +87 -0
  54. package/dist/core/evidence/userAnswerUse.js +1 -0
  55. package/dist/core/numeric/rawU64.js +63 -0
  56. package/dist/core/preferences/preferencesStore.js +26 -0
  57. package/dist/core/preferences/sqlitePreferencesRepository.js +136 -0
  58. package/dist/core/proposal/externalProposalReview.js +347 -0
  59. package/dist/core/proposal/schemas.js +208 -0
  60. package/dist/core/proposal/types.js +35 -0
  61. package/dist/core/read/amounts.js +14 -0
  62. package/dist/core/read/coinMetadata.js +60 -0
  63. package/dist/core/read/deepbookRawQuoteClient.js +86 -0
  64. package/dist/core/read/deepbookReadHelpers.js +265 -0
  65. package/dist/core/read/deepbookRegistry.js +133 -0
  66. package/dist/core/read/flowxQuoteClient.js +117 -0
  67. package/dist/core/read/flowxReadHelpers.js +145 -0
  68. package/dist/core/read/flowxRegistry.js +174 -0
  69. package/dist/core/read/intentEvidenceResponseFormatting.js +228 -0
  70. package/dist/core/read/readResponseGuidance.js +451 -0
  71. package/dist/core/read/readService.js +1164 -0
  72. package/dist/core/read/readServiceTypes.js +59 -0
  73. package/dist/core/read/settlementParityFormatting.js +82 -0
  74. package/dist/core/read/walletReadHelpers.js +99 -0
  75. package/dist/core/review/reviewChecks.js +54 -0
  76. package/dist/core/review/reviewComputation.js +38 -0
  77. package/dist/core/review/reviewComputationResult.js +87 -0
  78. package/dist/core/session/localSession.js +31 -0
  79. package/dist/core/session/privateReviewArtifacts.js +73 -0
  80. package/dist/core/session/sessionErrors.js +9 -0
  81. package/dist/core/session/sessionStore.js +821 -0
  82. package/dist/core/session/settingsSession.js +1 -0
  83. package/dist/core/session/settingsSessions.js +43 -0
  84. package/dist/core/session/status.js +86 -0
  85. package/dist/core/session/transactionMaterialStore.js +205 -0
  86. package/dist/core/session/wait.js +102 -0
  87. package/dist/core/session/walletIdentity.js +103 -0
  88. package/dist/core/session/walletIdentitySessions.js +189 -0
  89. package/dist/core/suiAddress.js +18 -0
  90. package/dist/core/suiEndpoint.js +72 -0
  91. package/dist/mcp/activeAccountResponse.js +24 -0
  92. package/dist/mcp/prompts.js +146 -0
  93. package/dist/mcp/registerTool.js +19 -0
  94. package/dist/mcp/resources.js +72 -0
  95. package/dist/mcp/responseGuidance.js +381 -0
  96. package/dist/mcp/result.js +17 -0
  97. package/dist/mcp/schemas.js +8 -0
  98. package/dist/mcp/server.js +30 -0
  99. package/dist/mcp/serverInfo.js +123 -0
  100. package/dist/mcp/toolErrors.js +105 -0
  101. package/dist/mcp/toolNames.js +50 -0
  102. package/dist/mcp/tools/account/index.js +44 -0
  103. package/dist/mcp/tools/action/prepareSuiActionReview.js +120 -0
  104. package/dist/mcp/tools/read/commonSchemas.js +43 -0
  105. package/dist/mcp/tools/read/deepbookReadTools.js +453 -0
  106. package/dist/mcp/tools/read/flowxReadTools.js +135 -0
  107. package/dist/mcp/tools/read/index.js +16 -0
  108. package/dist/mcp/tools/read/readToolHelpers.js +68 -0
  109. package/dist/mcp/tools/read/reviewActivityTools.js +176 -0
  110. package/dist/mcp/tools/read/serverStatusTools.js +103 -0
  111. package/dist/mcp/tools/read/transactionActivityOutput.js +300 -0
  112. package/dist/mcp/tools/read/transactionActivityTools.js +544 -0
  113. package/dist/mcp/tools/read/walletReadTools.js +733 -0
  114. package/dist/mcp/tools/session/executionResultTools.js +92 -0
  115. package/dist/mcp/tools/session/index.js +8 -0
  116. package/dist/mcp/tools/session/shared.js +79 -0
  117. package/dist/mcp/tools/session/statusTools.js +134 -0
  118. package/dist/mcp/tools/session/walletIdentityTools.js +119 -0
  119. package/dist/mcp/tools/settings/index.js +64 -0
  120. package/dist/review-app/analysis.css +1 -0
  121. package/dist/review-app/analysis.js +1 -0
  122. package/dist/review-app/arc-BjIacwQm.js +1 -0
  123. package/dist/review-app/architecture-U656AL7Q-aSB9x1OK.js +1 -0
  124. package/dist/review-app/architectureDiagram-VXUJARFQ-C5W6re2I.js +36 -0
  125. package/dist/review-app/array-BmXUUrU6.js +1 -0
  126. package/dist/review-app/blockDiagram-VD42YOAC-20MLNcUm.js +122 -0
  127. package/dist/review-app/c4Diagram-YG6GDRKO-BZXRrcck.js +10 -0
  128. package/dist/review-app/channel-lk2p_CUu.js +1 -0
  129. package/dist/review-app/chunk-4BX2VUAB-BPITOdjX.js +1 -0
  130. package/dist/review-app/chunk-55IACEB6-Dz-pyw5k.js +1 -0
  131. package/dist/review-app/chunk-76Q3JFCE-cK_X1P_l.js +1 -0
  132. package/dist/review-app/chunk-ABZYJK2D-Dt4W53JI.js +81 -0
  133. package/dist/review-app/chunk-ATLVNIR6-fZHLXURb.js +1 -0
  134. package/dist/review-app/chunk-B4BG7PRW-BbgcjusC.js +165 -0
  135. package/dist/review-app/chunk-BJD4TVEz.js +1 -0
  136. package/dist/review-app/chunk-CVBHYZKI-CViawAKX.js +1 -0
  137. package/dist/review-app/chunk-DI55MBZ5-C5aoul-d.js +220 -0
  138. package/dist/review-app/chunk-FMBD7UC4-Chxmw62A.js +15 -0
  139. package/dist/review-app/chunk-FPAJGGOC-DDHjQ09H.js +80 -0
  140. package/dist/review-app/chunk-FWNWRKHM-CVVQUptk.js +1 -0
  141. package/dist/review-app/chunk-HN2XXSSU-yzNpjaSZ.js +1 -0
  142. package/dist/review-app/chunk-JA3XYJ7Z-C5ZJdU01.js +70 -0
  143. package/dist/review-app/chunk-JZLCHNYA-BBST4Cnk.js +54 -0
  144. package/dist/review-app/chunk-LBM3YZW2-CdwAPuHr.js +1 -0
  145. package/dist/review-app/chunk-LHMN2FUI-BtB5uDcp.js +1 -0
  146. package/dist/review-app/chunk-O7ZBX7Z2-pxdK4Sa3.js +1 -0
  147. package/dist/review-app/chunk-QN33PNHL-CbVv3uGK.js +1 -0
  148. package/dist/review-app/chunk-QXUST7PY-DKM2-t2c.js +7 -0
  149. package/dist/review-app/chunk-QZHKN3VN-C5ni2pN_.js +1 -0
  150. package/dist/review-app/chunk-S3R3BYOJ-BWvOhDs0.js +2 -0
  151. package/dist/review-app/chunk-S6J4BHB3-D9Fk0YeD.js +1 -0
  152. package/dist/review-app/chunk-T53DSG4Q-C1qEyzyV.js +1 -0
  153. package/dist/review-app/chunk-TZMSLE5B-B--7eU69.js +1 -0
  154. package/dist/review-app/classDiagram-2ON5EDUG-DlL1m2bp.js +1 -0
  155. package/dist/review-app/classDiagram-v2-WZHVMYZB-FXRskT1j.js +1 -0
  156. package/dist/review-app/clone-BZZb7gpZ.js +1 -0
  157. package/dist/review-app/cose-bilkent-S5V4N54A-CRIb8XEO.js +1 -0
  158. package/dist/review-app/cytoscape.esm-C7jYqDP5.js +321 -0
  159. package/dist/review-app/dagre-6UL2VRFP-FNCAXbdE.js +4 -0
  160. package/dist/review-app/dagre-Be46QtUd.js +1 -0
  161. package/dist/review-app/defaultLocale-BaWNtAUL.js +1 -0
  162. package/dist/review-app/diagram-PSM6KHXK-ylLWjiNM.js +24 -0
  163. package/dist/review-app/diagram-QEK2KX5R-BCDcESxs.js +43 -0
  164. package/dist/review-app/diagram-S2PKOQOG-Vdrc-vrO.js +24 -0
  165. package/dist/review-app/dist-WPc74x_f.js +1 -0
  166. package/dist/review-app/erDiagram-Q2GNP2WA-E5ZsUbDF.js +60 -0
  167. package/dist/review-app/flatten-DHf9IeNI.js +1 -0
  168. package/dist/review-app/flowDiagram-NV44I4VS-DBSQuj6x.js +162 -0
  169. package/dist/review-app/ganttDiagram-LVOFAZNH-CKUOsqwl.js +267 -0
  170. package/dist/review-app/gitGraph-F6HP7TQM-DsAD6qK1.js +1 -0
  171. package/dist/review-app/gitGraphDiagram-NY62KEGX-BCeIMWdl.js +65 -0
  172. package/dist/review-app/graphlib-CiX5CXxR.js +1 -0
  173. package/dist/review-app/http-DMvwuuFk.js +1 -0
  174. package/dist/review-app/identity-DY8PXc6t.js +1 -0
  175. package/dist/review-app/info-NVLQJR56-Dlx1nZic.js +1 -0
  176. package/dist/review-app/infoDiagram-F6ZHWCRC-CAuANIrz.js +2 -0
  177. package/dist/review-app/init-BvqephKz.js +1 -0
  178. package/dist/review-app/journeyDiagram-XKPGCS4Q-C-Z9phnx.js +139 -0
  179. package/dist/review-app/kanban-definition-3W4ZIXB7-DufgZABq.js +89 -0
  180. package/dist/review-app/katex-B-Z-NXXN.js +257 -0
  181. package/dist/review-app/line-DiIv3Jgw.js +1 -0
  182. package/dist/review-app/linear-Cv-UPvo1.js +1 -0
  183. package/dist/review-app/math-kmyYrkHL.js +1 -0
  184. package/dist/review-app/mermaid-parser.core-DkwUYTPl.js +4 -0
  185. package/dist/review-app/mindmap-definition-VGOIOE7T-TM_CqdmV.js +68 -0
  186. package/dist/review-app/ordinal-BliTlkoG.js +1 -0
  187. package/dist/review-app/packet-BFZMPI3H-DqbnU92v.js +1 -0
  188. package/dist/review-app/path-AEo9W6mQ.js +1 -0
  189. package/dist/review-app/pie-7BOR55EZ-LJzaLkgr.js +1 -0
  190. package/dist/review-app/pieDiagram-ADFJNKIX-BAs8OfRS.js +30 -0
  191. package/dist/review-app/quadrantDiagram-AYHSOK5B-CyUDZP5S.js +7 -0
  192. package/dist/review-app/radar-NHE76QYJ-DBpHc8_Y.js +1 -0
  193. package/dist/review-app/reduce-B-HuPpdd.js +1 -0
  194. package/dist/review-app/requirementDiagram-UZGBJVZJ-BEHix78P.js +64 -0
  195. package/dist/review-app/review.css +1 -0
  196. package/dist/review-app/review.js +43 -0
  197. package/dist/review-app/sankeyDiagram-TZEHDZUN-B2bKbmsm.js +10 -0
  198. package/dist/review-app/sequenceDiagram-WL72ISMW-DVLOORFJ.js +145 -0
  199. package/dist/review-app/settings.css +1 -0
  200. package/dist/review-app/settings.js +1 -0
  201. package/dist/review-app/src-Buml7cM5.js +1 -0
  202. package/dist/review-app/stateDiagram-FKZM4ZOC-sFGGp2kV.js +1 -0
  203. package/dist/review-app/stateDiagram-v2-4FDKWEC3-BHfCF4dX.js +1 -0
  204. package/dist/review-app/timeline-definition-IT6M3QCI-BESnBijC.js +61 -0
  205. package/dist/review-app/treemap-KMMF4GRG-wnVLBDeQ.js +1 -0
  206. package/dist/review-app/walletStatus-CcojOdGy.js +7 -0
  207. package/dist/review-app/xychartDiagram-PRI3JC2R-BGWVfCx4.js +7 -0
  208. package/dist/review-server/assets.js +48 -0
  209. package/dist/review-server/html.js +66 -0
  210. package/dist/review-server/http.js +47 -0
  211. package/dist/review-server/middleware/hostOrigin.js +48 -0
  212. package/dist/review-server/middleware/reviewToken.js +7 -0
  213. package/dist/review-server/reviewServerPolicy.js +10 -0
  214. package/dist/review-server/server.js +568 -0
  215. package/dist/review-server/settingsApi.js +182 -0
  216. package/dist/review-server/walletIdentityResponse.js +13 -0
  217. package/dist/runtime/config.js +103 -0
  218. package/dist/runtime/localSettingsService.js +198 -0
  219. package/dist/runtime/logger.js +50 -0
  220. package/dist/runtime/reviewServerAcquire.js +128 -0
  221. package/dist/runtime/smokeMainnetRead.js +529 -0
  222. package/dist/runtime/smokeMainnetReadAssertions.js +308 -0
  223. package/dist/runtime/start.js +295 -0
  224. package/dist/runtime/suiEndpoint.js +97 -0
  225. package/dist/runtime/suiTransactionGraphqlMapping.js +200 -0
  226. package/dist/runtime/suiTransactionGraphqlQueries.js +231 -0
  227. package/dist/runtime/suiTransactionGraphqlSource.js +148 -0
  228. package/docs/AGENT_BEHAVIOR.md +1 -1
  229. package/docs/AGENT_DEVELOPMENT_POLICY.md +20 -0
  230. package/docs/FRONTEND_POLICY.md +4 -3
  231. package/docs/MCP_SETUP.md +59 -7
  232. package/docs/MCP_TOOLS.md +1 -1
  233. package/docs/SDK_API.md +5 -1
  234. package/package.json +3 -2
@@ -0,0 +1,92 @@
1
+ import { z } from "zod";
2
+ import { executionPollingStatusSchema, executionResultSchema } from "../../../core/action/schemas.js";
3
+ import { waitForExecutionResult } from "../../../core/session/wait.js";
4
+ import { errorToolResult, okToolResult } from "../../result.js";
5
+ import { successOutputSchema } from "../../schemas.js";
6
+ import { sessionStoreToolError } from "../../toolErrors.js";
7
+ import { TOOL_NAMES } from "../../toolNames.js";
8
+ import { executionResultUserAnswerUse } from "../../responseGuidance.js";
9
+ import { userAnswerUseSchema } from "../read/commonSchemas.js";
10
+ import { executionPollingHint, executionStatusCategory, getExecutionPollingStatus } from "../../../core/session/status.js";
11
+ import { executionPollingHintSchema, executionStatusCategorySchema, waitExecutionInputSchema } from "./shared.js";
12
+ export function registerExecutionResultTools(server, deps) {
13
+ server.registerTool(TOOL_NAMES.sessionGetExecutionResult, {
14
+ title: "Get execution polling result",
15
+ description: "Return execution polling status and any recorded result. No result exists until a signable adapter exists.",
16
+ inputSchema: { reviewSessionId: z.string().min(1) },
17
+ outputSchema: successOutputSchema({
18
+ reviewSessionId: z.string(),
19
+ status: executionPollingStatusSchema,
20
+ statusCategory: executionStatusCategorySchema(),
21
+ lastActivityAt: z.string(),
22
+ pollingHint: executionPollingHintSchema(),
23
+ executionResult: executionResultSchema.optional(),
24
+ userAnswerUse: userAnswerUseSchema
25
+ }),
26
+ annotations: { readOnlyHint: false, openWorldHint: false }
27
+ }, async ({ reviewSessionId }) => {
28
+ try {
29
+ const session = await deps.sessions.getReviewSession(reviewSessionId);
30
+ if (!session) {
31
+ return errorToolResult({
32
+ kind: "session_not_found",
33
+ details: { reviewSessionId }
34
+ });
35
+ }
36
+ const status = getExecutionPollingStatus(session);
37
+ return okToolResult({
38
+ reviewSessionId: session.id,
39
+ status,
40
+ statusCategory: executionStatusCategory(status),
41
+ lastActivityAt: session.lastActivityAt,
42
+ pollingHint: executionPollingHint(),
43
+ executionResult: session.executionResult,
44
+ userAnswerUse: executionResultUserAnswerUse({
45
+ hasExecutionResult: session.executionResult !== undefined
46
+ })
47
+ });
48
+ }
49
+ catch (error) {
50
+ return sessionStoreToolError(error, deps.logger);
51
+ }
52
+ });
53
+ server.registerTool(TOOL_NAMES.sessionWaitExecutionResult, {
54
+ title: "Wait for execution polling result",
55
+ description: "Wait briefly for execution polling status to reach a wait-stopping status.",
56
+ inputSchema: waitExecutionInputSchema(),
57
+ outputSchema: successOutputSchema({
58
+ waitOutcome: z.enum(["status_reached", "timed_out"]),
59
+ reviewSessionId: z.string(),
60
+ status: executionPollingStatusSchema,
61
+ statusCategory: executionStatusCategorySchema(),
62
+ lastActivityAt: z.string(),
63
+ pollingHint: executionPollingHintSchema(),
64
+ executionResult: executionResultSchema.optional(),
65
+ userAnswerUse: userAnswerUseSchema
66
+ }),
67
+ annotations: { readOnlyHint: false, openWorldHint: false }
68
+ }, async ({ reviewSessionId, timeoutMs }, extra) => {
69
+ try {
70
+ const result = await waitForExecutionResult(deps.sessions, reviewSessionId, {
71
+ timeoutMs,
72
+ signal: extra.signal
73
+ });
74
+ return okToolResult({
75
+ waitOutcome: result.waitOutcome,
76
+ reviewSessionId: result.session.id,
77
+ status: result.status,
78
+ statusCategory: executionStatusCategory(result.status),
79
+ lastActivityAt: result.session.lastActivityAt,
80
+ pollingHint: executionPollingHint(),
81
+ executionResult: result.session.executionResult,
82
+ userAnswerUse: executionResultUserAnswerUse({
83
+ hasExecutionResult: result.session.executionResult !== undefined,
84
+ hasWaitOutcome: true
85
+ })
86
+ });
87
+ }
88
+ catch (error) {
89
+ return sessionStoreToolError(error, deps.logger);
90
+ }
91
+ });
92
+ }
@@ -0,0 +1,8 @@
1
+ import { registerExecutionResultTools } from "./executionResultTools.js";
2
+ import { registerSessionStatusTools } from "./statusTools.js";
3
+ import { registerWalletIdentityTools } from "./walletIdentityTools.js";
4
+ export function registerSessionTools(server, deps) {
5
+ registerWalletIdentityTools(server, deps);
6
+ registerSessionStatusTools(server, deps);
7
+ registerExecutionResultTools(server, deps);
8
+ }
@@ -0,0 +1,79 @@
1
+ import { z } from "zod";
2
+ import { executionPollingStatusSchema } from "../../../core/action/schemas.js";
3
+ import { EXECUTION_STATUS_CATEGORIES } from "../../../core/session/status.js";
4
+ import { SUI_MAINNET_WALLET_CHAIN, walletIdentityFailureReasonSchema, walletIdentityPollingHint, walletIdentityStatusSchema } from "../../../core/session/walletIdentity.js";
5
+ import { DEFAULT_WAIT_TIMEOUT_MS, MAX_WAIT_TIMEOUT_MS } from "../../../core/session/wait.js";
6
+ export const INTERACTION_STATUS_LIMIT = 5;
7
+ export function walletIdentityPollingHintSchema() {
8
+ return z.object({
9
+ nonTerminalStatuses: z.array(walletIdentityStatusSchema),
10
+ terminalStatuses: z.array(walletIdentityStatusSchema),
11
+ recommendedIntervalSeconds: z.number().int().positive()
12
+ });
13
+ }
14
+ export function executionPollingHintSchema() {
15
+ return z.object({
16
+ nonTerminalStatuses: z.array(executionPollingStatusSchema),
17
+ waitStoppingStatuses: z.array(executionPollingStatusSchema),
18
+ finalStatuses: z.array(executionPollingStatusSchema),
19
+ userActionRequiredStatuses: z.array(executionPollingStatusSchema),
20
+ recommendedIntervalSeconds: z.number().int().positive()
21
+ });
22
+ }
23
+ export function executionStatusCategorySchema() {
24
+ return z.enum(EXECUTION_STATUS_CATEGORIES);
25
+ }
26
+ export function waitWalletIdentityInputSchema() {
27
+ return {
28
+ walletSessionId: z.string().min(1),
29
+ timeoutMs: z.number().int().min(1).max(MAX_WAIT_TIMEOUT_MS).default(DEFAULT_WAIT_TIMEOUT_MS).optional()
30
+ };
31
+ }
32
+ export function waitExecutionInputSchema() {
33
+ return {
34
+ reviewSessionId: z.string().min(1),
35
+ timeoutMs: z.number().int().min(1).max(MAX_WAIT_TIMEOUT_MS).default(DEFAULT_WAIT_TIMEOUT_MS).optional()
36
+ };
37
+ }
38
+ export function walletIdentityResponse(session) {
39
+ return {
40
+ walletSessionId: session.id,
41
+ status: session.status,
42
+ account: session.status === "connected" ? session.account : undefined,
43
+ chain: session.status === "connected" ? session.chain : undefined,
44
+ walletName: session.status === "connected" || session.status === "rejected" || session.status === "failed"
45
+ ? session.walletName
46
+ : undefined,
47
+ walletId: session.status === "connected" || session.status === "rejected" || session.status === "failed"
48
+ ? session.walletId
49
+ : undefined,
50
+ failureReason: session.status === "rejected" || session.status === "failed" ? session.failureReason : undefined,
51
+ failureDetail: session.status === "rejected" || session.status === "failed" ? session.failureDetail : undefined,
52
+ expiresAt: session.expiresAt,
53
+ lastActivityAt: session.lastActivityAt,
54
+ pollingHint: walletIdentityPollingHint()
55
+ };
56
+ }
57
+ export function walletIdentityOutputSchema() {
58
+ return {
59
+ walletSessionId: z.string(),
60
+ status: walletIdentityStatusSchema,
61
+ account: z.string().optional(),
62
+ chain: z.literal(SUI_MAINNET_WALLET_CHAIN).optional(),
63
+ walletName: z.string().optional(),
64
+ walletId: z.string().optional(),
65
+ failureReason: walletIdentityFailureReasonSchema.optional(),
66
+ failureDetail: z.string().optional(),
67
+ expiresAt: z.string(),
68
+ lastActivityAt: z.string(),
69
+ pollingHint: walletIdentityPollingHintSchema()
70
+ };
71
+ }
72
+ export function latest(items) {
73
+ const sorted = [...items].sort((left, right) => right.lastActivityAt.localeCompare(left.lastActivityAt));
74
+ return {
75
+ limit: INTERACTION_STATUS_LIMIT,
76
+ items: sorted.slice(0, INTERACTION_STATUS_LIMIT),
77
+ truncated: sorted.length > INTERACTION_STATUS_LIMIT
78
+ };
79
+ }
@@ -0,0 +1,134 @@
1
+ import { z } from "zod";
2
+ import { executionPollingStatusSchema, internalSessionStatusSchema, reviewStateOutputSchema } from "../../../core/action/schemas.js";
3
+ import { isTerminalWalletIdentityStatus, walletIdentityStatusSchema } from "../../../core/session/walletIdentity.js";
4
+ import { activeAccountResponse, activeAccountResponseSchema } from "../../activeAccountResponse.js";
5
+ import { errorToolResult, okToolResult } from "../../result.js";
6
+ import { noParamsInputSchema, successOutputSchema } from "../../schemas.js";
7
+ import { activityStoreToolError, sessionStoreToolError } from "../../toolErrors.js";
8
+ import { TOOL_NAMES } from "../../toolNames.js";
9
+ import { interactionStatusUserAnswerUse, reviewStatusUserAnswerUse } from "../../responseGuidance.js";
10
+ import { userAnswerUseSchema } from "../read/commonSchemas.js";
11
+ import { executionStatusCategory, getExecutionPollingStatus, isInteractionPendingReviewStatus } from "../../../core/session/status.js";
12
+ import { executionStatusCategorySchema, latest } from "./shared.js";
13
+ const INTERACTION_PENDING_REVIEW_STATUS_CATEGORIES = [
14
+ "user_action_required",
15
+ "awaiting_chain_result",
16
+ "non_terminal"
17
+ ];
18
+ export function registerSessionStatusTools(server, deps) {
19
+ server.registerTool(TOOL_NAMES.sessionGetInteractionStatus, {
20
+ title: "Get local interaction status",
21
+ description: "Return active account context and pending local wallet or review interactions.",
22
+ inputSchema: noParamsInputSchema,
23
+ outputSchema: successOutputSchema({
24
+ activeAccount: activeAccountResponseSchema,
25
+ pendingWalletIdentitySessions: z.object({
26
+ limit: z.number().int().positive(),
27
+ items: z.array(z.object({
28
+ walletSessionId: z.string(),
29
+ status: walletIdentityStatusSchema,
30
+ statusCategory: z.literal("non_terminal"),
31
+ expiresAt: z.string(),
32
+ lastActivityAt: z.string()
33
+ })),
34
+ truncated: z.boolean()
35
+ }),
36
+ pendingReviewSessions: z.object({
37
+ limit: z.number().int().positive(),
38
+ items: z.array(z.object({
39
+ reviewSessionId: z.string(),
40
+ internalStatus: internalSessionStatusSchema,
41
+ status: executionPollingStatusSchema,
42
+ statusCategory: z.enum(INTERACTION_PENDING_REVIEW_STATUS_CATEGORIES),
43
+ lastActivityAt: z.string()
44
+ })),
45
+ truncated: z.boolean()
46
+ }),
47
+ userAnswerUse: userAnswerUseSchema
48
+ }),
49
+ annotations: { readOnlyHint: false, openWorldHint: false }
50
+ }, async () => {
51
+ let active;
52
+ try {
53
+ active = await deps.activityStore.getActiveAccount();
54
+ }
55
+ catch (error) {
56
+ return activityStoreToolError(error, deps.logger);
57
+ }
58
+ try {
59
+ const [walletSessions, reviewSessions] = await Promise.all([
60
+ deps.sessions.listWalletIdentitySessions(),
61
+ deps.sessions.listReviewSessions()
62
+ ]);
63
+ const pendingWallets = latest(walletSessions
64
+ .filter((session) => !isTerminalWalletIdentityStatus(session.status))
65
+ .map((session) => ({
66
+ walletSessionId: session.id,
67
+ status: session.status,
68
+ statusCategory: "non_terminal",
69
+ expiresAt: session.expiresAt,
70
+ lastActivityAt: session.lastActivityAt
71
+ })));
72
+ const pendingReviews = latest(reviewSessions
73
+ .map((session) => ({
74
+ session,
75
+ status: getExecutionPollingStatus(session)
76
+ }))
77
+ .filter(({ status }) => isInteractionPendingReviewStatus(status))
78
+ .map(({ session, status }) => ({
79
+ reviewSessionId: session.id,
80
+ internalStatus: session.status,
81
+ status,
82
+ statusCategory: executionStatusCategory(status),
83
+ lastActivityAt: session.lastActivityAt
84
+ })));
85
+ return okToolResult({
86
+ activeAccount: activeAccountResponse(active),
87
+ pendingWalletIdentitySessions: pendingWallets,
88
+ pendingReviewSessions: pendingReviews,
89
+ userAnswerUse: interactionStatusUserAnswerUse()
90
+ });
91
+ }
92
+ catch (error) {
93
+ return sessionStoreToolError(error, deps.logger);
94
+ }
95
+ });
96
+ server.registerTool(TOOL_NAMES.sessionGetReviewStatus, {
97
+ title: "Get review status",
98
+ description: "Return the current status for a review session.",
99
+ inputSchema: { reviewSessionId: z.string().min(1) },
100
+ outputSchema: successOutputSchema({
101
+ reviewSessionId: z.string(),
102
+ internalStatus: internalSessionStatusSchema,
103
+ pollingStatus: executionPollingStatusSchema,
104
+ statusCategory: executionStatusCategorySchema(),
105
+ lastActivityAt: z.string(),
106
+ userAnswerUse: userAnswerUseSchema,
107
+ reviewState: reviewStateOutputSchema.optional()
108
+ }),
109
+ annotations: { readOnlyHint: false, openWorldHint: false }
110
+ }, async ({ reviewSessionId }) => {
111
+ try {
112
+ const session = await deps.sessions.getReviewSession(reviewSessionId);
113
+ if (!session) {
114
+ return errorToolResult({
115
+ kind: "session_not_found",
116
+ details: { reviewSessionId }
117
+ });
118
+ }
119
+ const pollingStatus = getExecutionPollingStatus(session);
120
+ return okToolResult({
121
+ reviewSessionId: session.id,
122
+ internalStatus: session.status,
123
+ pollingStatus,
124
+ statusCategory: executionStatusCategory(pollingStatus),
125
+ lastActivityAt: session.lastActivityAt,
126
+ userAnswerUse: reviewStatusUserAnswerUse(session.reviewState !== undefined, session.reviewState?.adapterLifecycle !== undefined, session.reviewState?.humanReadableReview !== undefined, session.reviewState?.simulation !== undefined),
127
+ reviewState: session.reviewState
128
+ });
129
+ }
130
+ catch (error) {
131
+ return sessionStoreToolError(error, deps.logger);
132
+ }
133
+ });
134
+ }
@@ -0,0 +1,119 @@
1
+ import { z } from "zod";
2
+ import { SUI_MAINNET_WALLET_CHAIN, walletIdentityFailureReasonSchema, walletIdentityPollingHint, walletIdentityStatusSchema } from "../../../core/session/walletIdentity.js";
3
+ import { waitForWalletIdentitySession } from "../../../core/session/wait.js";
4
+ import { errorToolResult, okToolResult } from "../../result.js";
5
+ import { noParamsInputSchema, successOutputSchema } from "../../schemas.js";
6
+ import { sessionStoreToolError } from "../../toolErrors.js";
7
+ import { TOOL_NAMES } from "../../toolNames.js";
8
+ import { walletIdentityUserAnswerUse } from "../../responseGuidance.js";
9
+ import { userAnswerUseSchema } from "../read/commonSchemas.js";
10
+ import { waitWalletIdentityInputSchema, walletIdentityOutputSchema, walletIdentityPollingHintSchema, walletIdentityResponse } from "./shared.js";
11
+ export function registerWalletIdentityTools(server, deps) {
12
+ server.registerTool(TOOL_NAMES.sessionCreateWalletIdentity, {
13
+ title: "Create wallet identity capture",
14
+ description: "Create a browser session that captures only a Sui mainnet address and chain identifier.",
15
+ inputSchema: noParamsInputSchema,
16
+ outputSchema: successOutputSchema({
17
+ walletSessionId: z.string(),
18
+ walletUrl: z.string(),
19
+ openTarget: z.literal("system_browser"),
20
+ accessScope: z.literal("same_machine_loopback"),
21
+ status: walletIdentityStatusSchema,
22
+ expiresAt: z.string(),
23
+ lastActivityAt: z.string(),
24
+ pollingHint: walletIdentityPollingHintSchema(),
25
+ userAnswerUse: userAnswerUseSchema
26
+ }),
27
+ annotations: { readOnlyHint: false, openWorldHint: false }
28
+ }, async () => {
29
+ try {
30
+ const created = await deps.sessions.createWalletIdentitySession();
31
+ return okToolResult({
32
+ walletSessionId: created.session.id,
33
+ walletUrl: `${deps.reviewBaseUrl}/analysis/${created.session.id}#${created.token}`,
34
+ openTarget: "system_browser",
35
+ accessScope: "same_machine_loopback",
36
+ status: created.session.status,
37
+ expiresAt: created.session.expiresAt,
38
+ lastActivityAt: created.session.lastActivityAt,
39
+ pollingHint: walletIdentityPollingHint(),
40
+ userAnswerUse: walletIdentityUserAnswerUse({ hasOpenFields: true })
41
+ });
42
+ }
43
+ catch (error) {
44
+ return sessionStoreToolError(error, deps.logger);
45
+ }
46
+ });
47
+ server.registerTool(TOOL_NAMES.sessionGetWalletIdentity, {
48
+ title: "Get wallet identity capture status",
49
+ description: "Return current status for a wallet identity capture session.",
50
+ inputSchema: { walletSessionId: z.string().min(1) },
51
+ outputSchema: successOutputSchema({
52
+ ...walletIdentityOutputSchema(),
53
+ userAnswerUse: userAnswerUseSchema
54
+ }),
55
+ annotations: { readOnlyHint: false, openWorldHint: false }
56
+ }, async ({ walletSessionId }) => {
57
+ try {
58
+ const session = await deps.sessions.getWalletIdentitySession(walletSessionId);
59
+ if (!session) {
60
+ return errorToolResult({
61
+ kind: "session_not_found",
62
+ details: { walletSessionId }
63
+ });
64
+ }
65
+ return okToolResult({
66
+ ...walletIdentityResponse(session),
67
+ userAnswerUse: walletIdentityUserAnswerUse({
68
+ hasAccount: session.status === "connected",
69
+ hasFailure: session.status === "rejected" || session.status === "failed"
70
+ })
71
+ });
72
+ }
73
+ catch (error) {
74
+ return sessionStoreToolError(error, deps.logger);
75
+ }
76
+ });
77
+ server.registerTool(TOOL_NAMES.sessionWaitWalletIdentity, {
78
+ title: "Wait for wallet identity capture",
79
+ description: "Wait briefly for a wallet identity capture session to reach a terminal status.",
80
+ inputSchema: waitWalletIdentityInputSchema(),
81
+ outputSchema: successOutputSchema({
82
+ waitOutcome: z.enum(["status_reached", "timed_out"]),
83
+ walletSessionId: z.string(),
84
+ status: walletIdentityStatusSchema,
85
+ statusCategory: z.enum(["terminal", "non_terminal"]),
86
+ account: z.string().optional(),
87
+ chain: z.literal(SUI_MAINNET_WALLET_CHAIN).optional(),
88
+ walletName: z.string().optional(),
89
+ walletId: z.string().optional(),
90
+ failureReason: walletIdentityFailureReasonSchema.optional(),
91
+ failureDetail: z.string().optional(),
92
+ expiresAt: z.string(),
93
+ lastActivityAt: z.string(),
94
+ pollingHint: walletIdentityPollingHintSchema(),
95
+ userAnswerUse: userAnswerUseSchema
96
+ }),
97
+ annotations: { readOnlyHint: false, openWorldHint: false }
98
+ }, async ({ walletSessionId, timeoutMs }, extra) => {
99
+ try {
100
+ const result = await waitForWalletIdentitySession(deps.sessions, walletSessionId, {
101
+ timeoutMs,
102
+ signal: extra.signal
103
+ });
104
+ return okToolResult({
105
+ waitOutcome: result.waitOutcome,
106
+ ...walletIdentityResponse(result.session),
107
+ statusCategory: result.statusCategory,
108
+ userAnswerUse: walletIdentityUserAnswerUse({
109
+ hasAccount: result.session.status === "connected",
110
+ hasFailure: result.session.status === "rejected" || result.session.status === "failed",
111
+ hasWaitOutcome: true
112
+ })
113
+ });
114
+ }
115
+ catch (error) {
116
+ return sessionStoreToolError(error, deps.logger);
117
+ }
118
+ });
119
+ }
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ import { SETTINGS_APPLIES_AFTER_RESTART } from "../../../core/preferences/preferencesStore.js";
3
+ import { registerSayUrIntentTool } from "../../registerTool.js";
4
+ import { okToolResult } from "../../result.js";
5
+ import { noParamsInputSchema, successOutputSchema } from "../../schemas.js";
6
+ import { localSettingsToolError, sessionStoreToolError } from "../../toolErrors.js";
7
+ import { TOOL_NAMES } from "../../toolNames.js";
8
+ const endpointSettingSchema = z.object({
9
+ storedValue: z.string(),
10
+ effectiveValue: z.string(),
11
+ source: z.enum(["environment", "local_db", "builtin_default"]),
12
+ pendingStoredValue: z.string().optional(),
13
+ appliesAfter: z.literal(SETTINGS_APPLIES_AFTER_RESTART).optional()
14
+ });
15
+ export function registerSettingsTools(server, deps) {
16
+ server.registerTool(TOOL_NAMES.settingsCreateLocalSettingsSession, {
17
+ title: "Create local settings session",
18
+ description: "Create a local settings page session.",
19
+ inputSchema: noParamsInputSchema,
20
+ outputSchema: successOutputSchema({
21
+ settingsSessionId: z.string(),
22
+ settingsUrl: z.string(),
23
+ status: z.literal("created"),
24
+ openTarget: z.literal("system_browser"),
25
+ accessScope: z.literal("same_machine_loopback"),
26
+ expiresAt: z.string(),
27
+ lastActivityAt: z.string()
28
+ }),
29
+ annotations: { readOnlyHint: false, openWorldHint: false }
30
+ }, async () => {
31
+ try {
32
+ const created = await deps.sessions.createSettingsSession();
33
+ return okToolResult({
34
+ settingsSessionId: created.session.id,
35
+ settingsUrl: `${deps.reviewBaseUrl}/settings/${created.session.id}#${created.token}`,
36
+ status: "created",
37
+ openTarget: "system_browser",
38
+ accessScope: "same_machine_loopback",
39
+ expiresAt: created.session.expiresAt,
40
+ lastActivityAt: created.session.lastActivityAt
41
+ });
42
+ }
43
+ catch (error) {
44
+ return sessionStoreToolError(error, deps.logger);
45
+ }
46
+ });
47
+ registerSayUrIntentTool(server, TOOL_NAMES.settingsGetLocalSettings, {
48
+ title: "Get local settings",
49
+ description: "Read local Say Ur Intent settings.",
50
+ inputSchema: noParamsInputSchema,
51
+ outputSchema: successOutputSchema({
52
+ suiGrpcUrl: endpointSettingSchema,
53
+ suiGraphqlUrl: endpointSettingSchema
54
+ }),
55
+ annotations: { readOnlyHint: true, openWorldHint: false }
56
+ }, async () => {
57
+ try {
58
+ return okToolResult(await deps.localSettings.getLocalSettings());
59
+ }
60
+ catch (error) {
61
+ return localSettingsToolError(error, deps.logger);
62
+ }
63
+ });
64
+ }
@@ -0,0 +1 @@
1
+ body{color:#15201b;background:#f7f8f6;margin:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.wallet-shell{max-width:560px;margin:48px auto;padding:0 20px}h1{margin:0 0 16px;font-size:28px;line-height:1.2}p{margin:0 0 16px;font-size:15px;line-height:1.5}.status{color:#47524c}.success{color:#11673e;overflow-wrap:anywhere}.error{color:#8a2f1f}.wallet-list{gap:10px;margin-top:20px;display:grid}button{color:#15201b;min-height:42px;font:inherit;text-align:left;cursor:pointer;background:#fff;border:1px solid #c9d3cc;border-radius:8px;padding:10px 12px}button:hover:not(:disabled){border-color:#6f8f7d}button:disabled{cursor:not-allowed;color:#7b857f}
@@ -0,0 +1 @@
1
+ import{n as e,r as t,t as n}from"./http-DMvwuuFk.js";import{a as r,c as i,i as a,n as o,o as s,r as c}from"./walletStatus-CcojOdGy.js";var l=document.querySelector(`#analysis-app`);if(!l)throw Error(`analysis app root missing`);var u=l,d=u.dataset.walletSessionId??``,f=window.location.hash.startsWith(`#`)?window.location.hash.slice(1):``,p=r(),m=!1,h=!1,g=!1,_,v=s();v&&window.setTimeout(()=>{v=!1,y()},2e3),S(`opened`).then(()=>y()).catch(e=>{_=t(e,`The local review server did not accept this wallet session.`),y()}),p.stores.$wallets.subscribe(()=>y()),p.stores.$connection.subscribe(()=>y());function y(){let e=p.stores.$connection.get(),n=p.stores.$wallets.get();u.innerHTML=``;let r=document.createElement(`section`);r.className=`wallet-shell`;let i=document.createElement(`h1`);i.textContent=`Say Ur Intent Analysis`,r.append(i);let a=document.createElement(`p`);a.textContent=`Connect a Sui mainnet wallet to provide the account address used for account-bound checks, then view a wallet asset snapshot and your stored local review records. This page only captures an address and prepares no transaction.`,r.append(a);let o=document.createElement(`p`);if(o.className=`status`,o.setAttribute(`aria-live`,`polite`),o.setAttribute(`aria-atomic`,`true`),o.textContent=P(),r.append(o),_){let e=document.createElement(`p`);e.className=`error`,e.textContent=`Return to your AI client and request a new wallet identity URL.`,r.append(e)}if(!f){let e=document.createElement(`p`);e.className=`error`,e.textContent=`Missing wallet session token. Open the wallet URL from your AI client again.`,r.append(e)}else if(e.status===`connected`){v=!1;let t=document.createElement(`p`);t.className=`success`,t.textContent=`Connected address: ${e.account.address}`,r.append(t);let n=document.createElement(`button`);n.type=`button`,n.className=`secondary`,n.disabled=h||g,n.textContent=`Disconnect / switch wallet`,n.onclick=()=>{p.disconnectWallet().then(()=>y())},r.append(n),r.append(O()),M()}else if(v||e.status===`connecting`){let e=document.createElement(`p`);e.className=`status`,e.textContent=`Reconnecting your wallet…`,r.append(e)}else if(n.length===0){let e=document.createElement(`p`);e.className=`error`,e.textContent=`No compatible Sui wallet was detected in this browser.`,r.append(e);let n=document.createElement(`button`);n.type=`button`,n.disabled=g,n.textContent=`Report no compatible wallet`,n.onclick=()=>{x(c()).then(()=>y()).catch(e=>{_=t(e,`The local review server did not accept this wallet identity result.`),y()})},r.append(n)}else{let e=document.createElement(`div`);e.className=`wallet-list`;for(let t of n){let n=document.createElement(`button`);n.type=`button`,n.disabled=h,n.textContent=t.name,n.onclick=()=>b(t),e.append(n)}r.append(e)}u.append(r)}async function b(e){if(h||g||m)return;h=!0,_=void 0,y();try{await S(`connecting`)}catch(e){_=t(e,`The local review server did not accept this wallet session.`),h=!1,y();return}let n;try{let t=(await p.connectWallet({wallet:e})).accounts[0];n=o(t,{walletName:e.name,walletId:i(e)})}catch(t){n=a(t,{walletName:e.name,walletId:i(e)})}try{await x(n)}catch(e){_=t(e,`The local review server did not accept this wallet identity result.`)}finally{h=!1,y()}}async function x(e){if(!(m||g)){g=!0,_=void 0,y();try{await C(`/api/wallet/${encodeURIComponent(d)}/result`,e),m=!0}finally{g=!1}}}async function S(e){f&&await C(`/api/wallet/${encodeURIComponent(d)}/${e}`,{})}async function C(t,r){let i=await fetch(t,{method:`POST`,headers:{"content-type":`application/json`,"x-say-ur-intent-token":f},body:JSON.stringify(r)});if(!i.ok)throw new n(i.status,await e(i))}var w=!1,T,E,D;function O(){let e=document.createElement(`div`);e.className=`analysis-panels`,e.append(k(`Wallet asset snapshot`,A())),e.append(k(`Local review records`,j()));let t=document.createElement(`p`);return t.className=`boundary-note`,t.textContent=`These panels show a wallet asset snapshot at its fetched time and stored local review records. They are not P&L, not tax or cost-basis data, not payment readiness, and not signing readiness.`,e.append(t),e}function k(e,t){let n=document.createElement(`section`);n.className=`analysis-panel`;let r=document.createElement(`h2`);return r.textContent=e,n.append(r),n.append(t),n}function A(){let e=document.createElement(`div`);if(D)return e.textContent=D,e;if(!T)return e.textContent=`Loading wallet asset snapshot from the local server.`,e;let t=typeof T.fetchedAt==`string`?T.fetchedAt:void 0;if(t){let n=document.createElement(`p`);n.textContent=`Checked at ${t}`,e.append(n)}let n=Array.isArray(T.balances)?T.balances:[];if(n.length===0){let t=document.createElement(`p`);return t.textContent=`No coin balances were returned for this account snapshot.`,e.append(t),e}let r=document.createElement(`ul`);for(let e of n){if(typeof e!=`object`||!e)continue;let t=e,n=document.createElement(`li`),i=typeof t.symbol==`string`?t.symbol:`(unknown symbol)`,a=typeof t.display==`string`?t.display:void 0,o=typeof t.raw==`string`?t.raw:void 0;n.textContent=a===void 0?`${i}: raw ${o??`unavailable`}`:`${i}: ${a}`,r.append(n)}return e.append(r),e}function j(){let e=document.createElement(`div`);if(D)return e.textContent=D,e;if(!E)return e.textContent=`Loading stored local review records from the local server.`,e;let t=document.createElement(`ul`);for(let[e,n]of Object.entries(E)){if(typeof n!=`number`&&typeof n!=`string`)continue;let r=document.createElement(`li`);r.textContent=`${e}: ${n}`,t.append(r)}return t.childElementCount===0?(e.textContent=`No stored local review records were returned.`,e):(e.append(t),e)}async function M(){if(!w){w=!0;try{let[e,t]=await Promise.all([N(`/api/analysis/${encodeURIComponent(d)}/assets`),N(`/api/analysis/${encodeURIComponent(d)}/review-activity`)]);T=e,E=t}catch(e){D=t(e,`The local server could not return analysis data for this session.`)}y()}}async function N(t){let r=await fetch(t,{headers:{"x-say-ur-intent-token":f}});if(!r.ok)throw new n(r.status,await e(r));return await r.json()}function P(){return _||(m?`Wallet identity result was sent to the local server.`:g?`Sending wallet identity result to the local server.`:h?`Finish or cancel the request in your wallet popup.`:`Choose a wallet to continue.`)}
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./path-AEo9W6mQ.js";import{a as n,c as r,d as i,f as a,i as o,l as s,n as c,p as l,r as u,s as d,t as f,u as p}from"./math-kmyYrkHL.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,i,o,s,c){var l=e-n,u=t-i,d=(c?s:-s)/a(l*l+u*u),f=d*u,p=-d*l,m=e+f,h=t+p,g=n+f,_=i+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=o-s,w=m*_-g*h,T=(x<0?-1:1)*a(r(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(o/C-1),y11:D*(o/C-1)}}function x(){var r=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+r.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-d,_=T.apply(this,arguments)-d,v=f(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>l-1e-12)D.moveTo(h*n(g),h*i(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*n(_),m*i(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):a(m*m+h*h)),R=s(f(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=u(L/m*i(I)),W=u(L/h*i(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*n(A),K=h*i(A),q=m*n(N),J=m*i(N);if(R>1e-12){var Y=h*n(j),X=h*i(j),Z=m*n(M),Q=m*i(M),$;if(v<p)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/i(c((ee*ne+te*re)/(a(ee*ee+te*te)*a(ne*ne+re*re)))/2),ae=a($[0]*$[0]+$[1]*$[1]);z=s(R,(m-ae)/(ie-1)),B=s(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,h,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,o(H.y11,H.x11),o(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,m,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,o(H.y11,H.x11),o(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+r.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-p/2;return[n(t)*e,i(t)*e]},k.innerRadius=function(t){return arguments.length?(r=typeof t==`function`?t:e(+t),k):r},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-FPAJGGOC-DDHjQ09H.js";import{n as e}from"./chunk-O7ZBX7Z2-pxdK4Sa3.js";export{e as createArchitectureServices};