@geminixiang/mikan 1.0.0-beta.37 → 1.0.0-beta.39

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 (201) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +1 -1
  3. package/dist/adapter.js +1 -1
  4. package/dist/adapter.js.map +1 -1
  5. package/dist/adapters/discord/bot.d.ts +3 -6
  6. package/dist/adapters/discord/bot.d.ts.map +1 -1
  7. package/dist/adapters/discord/bot.js +16 -39
  8. package/dist/adapters/discord/bot.js.map +1 -1
  9. package/dist/adapters/github/bot.d.ts +2 -0
  10. package/dist/adapters/github/bot.d.ts.map +1 -1
  11. package/dist/adapters/github/bot.js +15 -11
  12. package/dist/adapters/github/bot.js.map +1 -1
  13. package/dist/adapters/github/github-ops.d.ts +1 -1
  14. package/dist/adapters/github/github-ops.d.ts.map +1 -1
  15. package/dist/adapters/github/github-ops.js +2 -1
  16. package/dist/adapters/github/github-ops.js.map +1 -1
  17. package/dist/adapters/github/repo.d.ts +2 -1
  18. package/dist/adapters/github/repo.d.ts.map +1 -1
  19. package/dist/adapters/github/repo.js +2 -3
  20. package/dist/adapters/github/repo.js.map +1 -1
  21. package/dist/adapters/github/types.d.ts +1 -1
  22. package/dist/adapters/github/types.d.ts.map +1 -1
  23. package/dist/adapters/github/types.js.map +1 -1
  24. package/dist/adapters/intake.js +1 -1
  25. package/dist/adapters/intake.js.map +1 -1
  26. package/dist/adapters/shared.d.ts +17 -5
  27. package/dist/adapters/shared.d.ts.map +1 -1
  28. package/dist/adapters/shared.js +44 -8
  29. package/dist/adapters/shared.js.map +1 -1
  30. package/dist/adapters/slack/blocks.d.ts +14 -0
  31. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  32. package/dist/adapters/slack/blocks.js +34 -0
  33. package/dist/adapters/slack/blocks.js.map +1 -1
  34. package/dist/adapters/slack/bot.d.ts +19 -6
  35. package/dist/adapters/slack/bot.d.ts.map +1 -1
  36. package/dist/adapters/slack/bot.js +88 -21
  37. package/dist/adapters/slack/bot.js.map +1 -1
  38. package/dist/adapters/slack/types.d.ts +1 -1
  39. package/dist/adapters/slack/types.js.map +1 -1
  40. package/dist/adapters/telegram/bot.d.ts +5 -6
  41. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  42. package/dist/adapters/telegram/bot.js +29 -51
  43. package/dist/adapters/telegram/bot.js.map +1 -1
  44. package/dist/adapters/types.d.ts +19 -1
  45. package/dist/adapters/types.d.ts.map +1 -1
  46. package/dist/adapters/types.js.map +1 -1
  47. package/dist/agent.d.ts +0 -1
  48. package/dist/agent.d.ts.map +1 -1
  49. package/dist/agent.js +79 -101
  50. package/dist/agent.js.map +1 -1
  51. package/dist/cli/ext-dev.d.ts.map +1 -1
  52. package/dist/cli/ext-dev.js +8 -8
  53. package/dist/cli/ext-dev.js.map +1 -1
  54. package/dist/cli/ext.js +3 -3
  55. package/dist/cli/ext.js.map +1 -1
  56. package/dist/cli/office.js +2 -2
  57. package/dist/cli/office.js.map +1 -1
  58. package/dist/commands/auto-reply.d.ts.map +1 -1
  59. package/dist/commands/auto-reply.js +1 -2
  60. package/dist/commands/auto-reply.js.map +1 -1
  61. package/dist/commands/login.js +1 -1
  62. package/dist/commands/login.js.map +1 -1
  63. package/dist/commands/manifest.d.ts.map +1 -1
  64. package/dist/commands/manifest.js +3 -1
  65. package/dist/commands/manifest.js.map +1 -1
  66. package/dist/commands/model.d.ts.map +1 -1
  67. package/dist/commands/model.js +3 -7
  68. package/dist/commands/model.js.map +1 -1
  69. package/dist/commands/sandbox.d.ts.map +1 -1
  70. package/dist/commands/sandbox.js +7 -7
  71. package/dist/commands/sandbox.js.map +1 -1
  72. package/dist/commands/session-view.d.ts.map +1 -1
  73. package/dist/commands/session-view.js +1 -2
  74. package/dist/commands/session-view.js.map +1 -1
  75. package/dist/commands/types.d.ts +2 -1
  76. package/dist/commands/types.d.ts.map +1 -1
  77. package/dist/commands/types.js.map +1 -1
  78. package/dist/config.d.ts +10 -18
  79. package/dist/config.d.ts.map +1 -1
  80. package/dist/config.js +16 -15
  81. package/dist/config.js.map +1 -1
  82. package/dist/execution-resolver.d.ts +4 -6
  83. package/dist/execution-resolver.d.ts.map +1 -1
  84. package/dist/execution-resolver.js +10 -19
  85. package/dist/execution-resolver.js.map +1 -1
  86. package/dist/harness/extensions/loader.js +1 -1
  87. package/dist/harness/extensions/loader.js.map +1 -1
  88. package/dist/harness/skills.d.ts +8 -0
  89. package/dist/harness/skills.d.ts.map +1 -1
  90. package/dist/harness/skills.js +46 -4
  91. package/dist/harness/skills.js.map +1 -1
  92. package/dist/harness/types.d.ts +2 -0
  93. package/dist/harness/types.d.ts.map +1 -1
  94. package/dist/harness/types.js.map +1 -1
  95. package/dist/index.d.ts +2 -0
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +1 -0
  98. package/dist/index.js.map +1 -1
  99. package/dist/main.js +16 -16
  100. package/dist/main.js.map +1 -1
  101. package/dist/{office-address.d.ts → office/address.d.ts} +13 -14
  102. package/dist/office/address.d.ts.map +1 -0
  103. package/dist/{office-address.js → office/address.js} +13 -18
  104. package/dist/office/address.js.map +1 -0
  105. package/dist/office/index.d.ts +11 -0
  106. package/dist/office/index.d.ts.map +1 -0
  107. package/dist/office/index.js +11 -0
  108. package/dist/office/index.js.map +1 -0
  109. package/dist/office/layout.d.ts +20 -0
  110. package/dist/office/layout.d.ts.map +1 -0
  111. package/dist/office/layout.js +88 -0
  112. package/dist/office/layout.js.map +1 -0
  113. package/dist/{office-migration.d.ts → office/migration.d.ts} +3 -3
  114. package/dist/office/migration.d.ts.map +1 -0
  115. package/dist/{office-migration.js → office/migration.js} +8 -12
  116. package/dist/office/migration.js.map +1 -0
  117. package/dist/{office-registry.d.ts → office/registry.d.ts} +18 -24
  118. package/dist/office/registry.d.ts.map +1 -0
  119. package/dist/{office-registry.js → office/registry.js} +22 -83
  120. package/dist/office/registry.js.map +1 -0
  121. package/dist/office/types.d.ts +71 -0
  122. package/dist/office/types.d.ts.map +1 -0
  123. package/dist/office/types.js +2 -0
  124. package/dist/office/types.js.map +1 -0
  125. package/dist/packages/admin.js +5 -5
  126. package/dist/packages/admin.js.map +1 -1
  127. package/dist/packages/inspect.d.ts.map +1 -1
  128. package/dist/packages/inspect.js +3 -8
  129. package/dist/packages/inspect.js.map +1 -1
  130. package/dist/packages/materialize.js +1 -1
  131. package/dist/packages/materialize.js.map +1 -1
  132. package/dist/packages/resolve.js +5 -8
  133. package/dist/packages/resolve.js.map +1 -1
  134. package/dist/packages/types.d.ts +2 -5
  135. package/dist/packages/types.d.ts.map +1 -1
  136. package/dist/packages/types.js.map +1 -1
  137. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  138. package/dist/runtime/conversation-runtime.js +13 -15
  139. package/dist/runtime/conversation-runtime.js.map +1 -1
  140. package/dist/runtime/session-lifecycle.js +1 -1
  141. package/dist/runtime/session-lifecycle.js.map +1 -1
  142. package/dist/runtime/types.d.ts +3 -2
  143. package/dist/runtime/types.d.ts.map +1 -1
  144. package/dist/runtime/types.js.map +1 -1
  145. package/dist/sandbox/identity.js +1 -1
  146. package/dist/sandbox/identity.js.map +1 -1
  147. package/dist/settings-mutation.d.ts +3 -2
  148. package/dist/settings-mutation.d.ts.map +1 -1
  149. package/dist/settings-mutation.js +6 -7
  150. package/dist/settings-mutation.js.map +1 -1
  151. package/dist/tools/generate-image.d.ts +8 -2
  152. package/dist/tools/generate-image.d.ts.map +1 -1
  153. package/dist/tools/generate-image.js +5 -3
  154. package/dist/tools/generate-image.js.map +1 -1
  155. package/dist/tools/index.d.ts +5 -0
  156. package/dist/tools/index.d.ts.map +1 -1
  157. package/dist/tools/index.js +3 -5
  158. package/dist/tools/index.js.map +1 -1
  159. package/dist/trigger.d.ts +1 -1
  160. package/dist/trigger.d.ts.map +1 -1
  161. package/dist/trigger.js +5 -10
  162. package/dist/trigger.js.map +1 -1
  163. package/dist/types.d.ts +3 -22
  164. package/dist/types.d.ts.map +1 -1
  165. package/dist/types.js.map +1 -1
  166. package/dist/vault/index.js +1 -1
  167. package/dist/vault/index.js.map +1 -1
  168. package/dist/vault/injection.d.ts +3 -1
  169. package/dist/vault/injection.d.ts.map +1 -1
  170. package/dist/vault/injection.js +2 -2
  171. package/dist/vault/injection.js.map +1 -1
  172. package/dist/web/admin/portal.d.ts.map +1 -1
  173. package/dist/web/admin/portal.js +67 -80
  174. package/dist/web/admin/portal.js.map +1 -1
  175. package/dist/web/admin/types.d.ts +2 -1
  176. package/dist/web/admin/types.d.ts.map +1 -1
  177. package/dist/web/admin/types.js.map +1 -1
  178. package/dist/web/server.d.ts +1 -1
  179. package/dist/web/server.d.ts.map +1 -1
  180. package/dist/web/server.js +3 -3
  181. package/dist/web/server.js.map +1 -1
  182. package/dist/web/session-view/portal.js +1 -1
  183. package/dist/web/session-view/portal.js.map +1 -1
  184. package/dist/workspace-projection/index.d.ts +2 -4
  185. package/dist/workspace-projection/index.d.ts.map +1 -1
  186. package/dist/workspace-projection/index.js +21 -56
  187. package/dist/workspace-projection/index.js.map +1 -1
  188. package/dist/workspace-projection/types.d.ts +0 -2
  189. package/dist/workspace-projection/types.d.ts.map +1 -1
  190. package/dist/workspace-projection/types.js.map +1 -1
  191. package/package.json +41 -16
  192. package/dist/office-address.d.ts.map +0 -1
  193. package/dist/office-address.js.map +0 -1
  194. package/dist/office-migration.d.ts.map +0 -1
  195. package/dist/office-migration.js.map +0 -1
  196. package/dist/office-registry.d.ts.map +0 -1
  197. package/dist/office-registry.js.map +0 -1
  198. package/dist/store.d.ts +0 -51
  199. package/dist/store.d.ts.map +0 -1
  200. package/dist/store.js +0 -185
  201. package/dist/store.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGjF,gFAAgF;AAChF,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AA8FxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,GAI1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAgBlF,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,GAEhB,MAAM,oBAAoB,CAAC","sourcesContent":["export { defaultCommandHandlers, dispatchCommand } from \"./commands/registry.js\";\nexport type { CommandContext, CommandHandler, CommandServices } from \"./commands/types.js\";\n\n// Public harness interface. Keep this list explicit: adding an internal harness\n// helper must not silently expand the npm package interface.\nexport { FileCredentialStore, defaultAuthPath } from \"./harness/auth.js\";\nexport {\n DEFAULT_HTTP_IDLE_TIMEOUT_MS,\n configureHttpDispatcher,\n parseHttpIdleTimeoutMs,\n} from \"./harness/http.js\";\nexport { MikanModels, defaultModelsJsonPath } from \"./harness/models.js\";\nexport {\n SessionStore,\n loadSessionFileEntries,\n parseSessionFileEntries,\n} from \"./harness/session-store.js\";\nexport { MikanAgentSession } from \"./harness/runner.js\";\nexport { formatSkillsForPrompt, loadSkillsFromDir, parseFrontmatter } from \"./harness/skills.js\";\nexport { loadSubagentProfiles } from \"./harness/subagent-profiles.js\";\nexport {\n DEFAULT_BUDGET_SETTINGS,\n DEFAULT_EVENT_BUDGET,\n DEFAULT_RETRY_SETTINGS,\n resolveHarnessSettings,\n} from \"./harness/settings.js\";\nexport { buildEventPayload, EventTypeSchema, parseEventPayload } from \"./harness/event-format.js\";\nexport { ExtensionRegistry, parseCommandInput } from \"./harness/extensions/registry.js\";\nexport {\n EXT_ACTION_PREFIX,\n namespaceActionIds,\n parseExtActionId,\n} from \"./harness/extensions/blockkit.js\";\nexport {\n defaultExtensionDirs,\n extensionSlug,\n listInstalledExtensions,\n loadExtensions,\n validateExtension,\n} from \"./harness/extensions/loader.js\";\nexport type { CreateMikanModelsOptions } from \"./harness/models.js\";\nexport type {\n CompactionReason,\n HarnessEvent,\n HarnessEventListener,\n MikanAgentSessionOptions,\n PromptBlockedOutcome,\n} from \"./harness/runner.js\";\nexport type { LoadSkillsResult, MikanSkill, SkillDiagnostic } from \"./harness/skills.js\";\nexport type {\n LoadSubagentProfilesResult,\n SubagentProfileDiagnostic,\n} from \"./harness/subagent-profiles.js\";\nexport type {\n BudgetSettings,\n CompactionSettings,\n HarnessSettings,\n RetrySettings,\n} from \"./harness/settings.js\";\nexport type {\n EventConversationKind,\n EventFilePayload,\n EventPayloadInput,\n EventType,\n ImmediateEventPayload,\n OneShotEventPayload,\n PeriodicEventPayload,\n} from \"./harness/event-format.js\";\nexport type {\n ExtensionValidation,\n InstalledExtensionInfo,\n LoadExtensionsOptions,\n LoadExtensionsResult,\n} from \"./harness/extensions/loader.js\";\nexport type {\n AgentErrorHookEvent,\n BeforeAgentStartHookEvent,\n BeforeAgentStartHookResult,\n BudgetExceededHookEvent,\n ContextHookEvent,\n ContextHookResult,\n ExtensionBlockAction,\n ExtensionBlockActionHandler,\n ExtensionBlockKitMessage,\n ExtensionCommand,\n ExtensionCommandContext,\n ExtensionDisposer,\n ExtensionHostServices,\n ExtensionLoadError,\n ExtensionManifest,\n ExtensionScheduleInfo,\n ExtensionSchedulePayload,\n ExtensionScheduleSpec,\n ExtensionScheduleStore,\n LoadedExtension,\n MessageEndHookEvent,\n MessageEndHookResult,\n MikanExtensionActivate,\n MikanExtensionApi,\n MikanExtensionModule,\n MikanHookMap,\n MikanHookName,\n RunOrigin,\n SessionCompactHookEvent,\n SubagentApi,\n ToolCallHookEvent,\n ToolCallHookResult,\n ToolResultHookEvent,\n ToolResultHookResult,\n TurnEndHookEvent,\n} from \"./harness/extensions/types.js\";\nexport type {\n BranchSummaryEntry,\n CompactionEntry,\n CustomEntry,\n CustomMessageEntry,\n SessionContext,\n SessionEntry,\n SessionFileEntry,\n SessionHeader,\n SessionInfoEntry,\n SessionMessageEntry,\n SubagentModelSpec,\n SubagentParentContext,\n SubagentProfile,\n SubagentRunBudget,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentRunStatus,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./harness/types.js\";\nexport { CURRENT_SESSION_VERSION } from \"./harness/types.js\";\n\nexport {\n ChatHistorySync,\n hasMaterializedChatSession,\n registerThreadSession,\n waitForThreadSessionBootstrap,\n} from \"./sessions/chat-history-sync.js\";\nexport type {\n ChatHistorySyncOptions,\n ChatSyncReport,\n HasMaterializedSessionOptions,\n RegisterThreadSessionOptions,\n ResetChatSessionOptions,\n ResolveChatSessionScopeOptions,\n SyncChatSessionOptions,\n ThreadBootstrapWaitOptions,\n} from \"./sessions/chat-history-sync.js\";\nexport { isPlatformHistorySession } from \"./sessions/metadata.js\";\nexport type { MikanSessionHeader } from \"./sessions/metadata.js\";\nexport { inferConversationKind, resolveChatSessionKey } from \"./sessions/policy.js\";\nexport type { ResolveSessionKeyOptions } from \"./sessions/policy.js\";\nexport {\n createManagedSessionFile,\n createManagedSessionFileAtPath,\n createNewSessionFile,\n extractSessionSuffix,\n extractSessionUuid,\n getChannelSessionDir,\n getThreadSessionFile,\n openManagedSession,\n resolveChannelSessionFile,\n resolveManagedSessionFile,\n resolveSessionFile,\n tryResolveCurrentSession,\n tryResolveThreadSession,\n} from \"./sessions/store.js\";\nexport type { ResolvedSessionScope, ThreadRootMessage } from \"./sessions/store.js\";\nexport {\n createConversationRuntime,\n type ConversationRuntime,\n type ConversationRuntimeOptions,\n type RunSessionOptions,\n} from \"./runtime/conversation-runtime.js\";\nexport { createConversationEvent, createConversationMessage } from \"./adapter.js\";\nexport type {\n ChatAdapter,\n ChatToolResult,\n ConversationContext,\n ConversationEvent,\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingBot,\n OfficeAddress,\n OfficeKey,\n MessagingEventHandler,\n MessagingInfo,\n RunningSession,\n} from \"./adapter.js\";\nexport {\n SandboxError,\n configureGondolinRuntime,\n createExecutor,\n getSandboxAdapters,\n parseSandboxArg,\n validateSandbox,\n type GondolinBootstrapOptions,\n} from \"./sandbox/index.js\";\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n SandboxAdapter,\n SandboxConfig,\n} from \"./sandbox/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGjF,gFAAgF;AAChF,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AA8FxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,GAI1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAiBpF,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,GAEhB,MAAM,oBAAoB,CAAC","sourcesContent":["export { defaultCommandHandlers, dispatchCommand } from \"./commands/registry.js\";\nexport type { CommandContext, CommandHandler, CommandServices } from \"./commands/types.js\";\n\n// Public harness interface. Keep this list explicit: adding an internal harness\n// helper must not silently expand the npm package interface.\nexport { FileCredentialStore, defaultAuthPath } from \"./harness/auth.js\";\nexport {\n DEFAULT_HTTP_IDLE_TIMEOUT_MS,\n configureHttpDispatcher,\n parseHttpIdleTimeoutMs,\n} from \"./harness/http.js\";\nexport { MikanModels, defaultModelsJsonPath } from \"./harness/models.js\";\nexport {\n SessionStore,\n loadSessionFileEntries,\n parseSessionFileEntries,\n} from \"./harness/session-store.js\";\nexport { MikanAgentSession } from \"./harness/runner.js\";\nexport { formatSkillsForPrompt, loadSkillsFromDir, parseFrontmatter } from \"./harness/skills.js\";\nexport { loadSubagentProfiles } from \"./harness/subagent-profiles.js\";\nexport {\n DEFAULT_BUDGET_SETTINGS,\n DEFAULT_EVENT_BUDGET,\n DEFAULT_RETRY_SETTINGS,\n resolveHarnessSettings,\n} from \"./harness/settings.js\";\nexport { buildEventPayload, EventTypeSchema, parseEventPayload } from \"./harness/event-format.js\";\nexport { ExtensionRegistry, parseCommandInput } from \"./harness/extensions/registry.js\";\nexport {\n EXT_ACTION_PREFIX,\n namespaceActionIds,\n parseExtActionId,\n} from \"./harness/extensions/blockkit.js\";\nexport {\n defaultExtensionDirs,\n extensionSlug,\n listInstalledExtensions,\n loadExtensions,\n validateExtension,\n} from \"./harness/extensions/loader.js\";\nexport type { CreateMikanModelsOptions } from \"./harness/models.js\";\nexport type {\n CompactionReason,\n HarnessEvent,\n HarnessEventListener,\n MikanAgentSessionOptions,\n PromptBlockedOutcome,\n} from \"./harness/runner.js\";\nexport type { LoadSkillsResult, MikanSkill, SkillDiagnostic } from \"./harness/skills.js\";\nexport type {\n LoadSubagentProfilesResult,\n SubagentProfileDiagnostic,\n} from \"./harness/subagent-profiles.js\";\nexport type {\n BudgetSettings,\n CompactionSettings,\n HarnessSettings,\n RetrySettings,\n} from \"./harness/settings.js\";\nexport type {\n EventConversationKind,\n EventFilePayload,\n EventPayloadInput,\n EventType,\n ImmediateEventPayload,\n OneShotEventPayload,\n PeriodicEventPayload,\n} from \"./harness/event-format.js\";\nexport type {\n ExtensionValidation,\n InstalledExtensionInfo,\n LoadExtensionsOptions,\n LoadExtensionsResult,\n} from \"./harness/extensions/loader.js\";\nexport type {\n AgentErrorHookEvent,\n BeforeAgentStartHookEvent,\n BeforeAgentStartHookResult,\n BudgetExceededHookEvent,\n ContextHookEvent,\n ContextHookResult,\n ExtensionBlockAction,\n ExtensionBlockActionHandler,\n ExtensionBlockKitMessage,\n ExtensionCommand,\n ExtensionCommandContext,\n ExtensionDisposer,\n ExtensionHostServices,\n ExtensionLoadError,\n ExtensionManifest,\n ExtensionScheduleInfo,\n ExtensionSchedulePayload,\n ExtensionScheduleSpec,\n ExtensionScheduleStore,\n LoadedExtension,\n MessageEndHookEvent,\n MessageEndHookResult,\n MikanExtensionActivate,\n MikanExtensionApi,\n MikanExtensionModule,\n MikanHookMap,\n MikanHookName,\n RunOrigin,\n SessionCompactHookEvent,\n SubagentApi,\n ToolCallHookEvent,\n ToolCallHookResult,\n ToolResultHookEvent,\n ToolResultHookResult,\n TurnEndHookEvent,\n} from \"./harness/extensions/types.js\";\nexport type {\n BranchSummaryEntry,\n CompactionEntry,\n CustomEntry,\n CustomMessageEntry,\n SessionContext,\n SessionEntry,\n SessionFileEntry,\n SessionHeader,\n SessionInfoEntry,\n SessionMessageEntry,\n SubagentModelSpec,\n SubagentParentContext,\n SubagentProfile,\n SubagentRunBudget,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentRunStatus,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./harness/types.js\";\nexport { CURRENT_SESSION_VERSION } from \"./harness/types.js\";\n\nexport {\n ChatHistorySync,\n hasMaterializedChatSession,\n registerThreadSession,\n waitForThreadSessionBootstrap,\n} from \"./sessions/chat-history-sync.js\";\nexport type {\n ChatHistorySyncOptions,\n ChatSyncReport,\n HasMaterializedSessionOptions,\n RegisterThreadSessionOptions,\n ResetChatSessionOptions,\n ResolveChatSessionScopeOptions,\n SyncChatSessionOptions,\n ThreadBootstrapWaitOptions,\n} from \"./sessions/chat-history-sync.js\";\nexport { isPlatformHistorySession } from \"./sessions/metadata.js\";\nexport type { MikanSessionHeader } from \"./sessions/metadata.js\";\nexport { inferConversationKind, resolveChatSessionKey } from \"./sessions/policy.js\";\nexport type { ResolveSessionKeyOptions } from \"./sessions/policy.js\";\nexport {\n createManagedSessionFile,\n createManagedSessionFileAtPath,\n createNewSessionFile,\n extractSessionSuffix,\n extractSessionUuid,\n getChannelSessionDir,\n getThreadSessionFile,\n openManagedSession,\n resolveChannelSessionFile,\n resolveManagedSessionFile,\n resolveSessionFile,\n tryResolveCurrentSession,\n tryResolveThreadSession,\n} from \"./sessions/store.js\";\nexport type { ResolvedSessionScope, ThreadRootMessage } from \"./sessions/store.js\";\nexport {\n createConversationRuntime,\n type ConversationRuntime,\n type ConversationRuntimeOptions,\n type RunSessionOptions,\n} from \"./runtime/conversation-runtime.js\";\nexport { createConversationEvent, createConversationMessage } from \"./adapter.js\";\nexport { createOfficeAddress, createWorkspace, officeKey } from \"./office/index.js\";\nexport type { Office, Workspace } from \"./office/index.js\";\nexport type {\n ChatAdapter,\n ChatToolResult,\n ConversationContext,\n ConversationEvent,\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingBot,\n OfficeAddress,\n OfficeKey,\n MessagingEventHandler,\n MessagingInfo,\n RunningSession,\n} from \"./adapter.js\";\nexport {\n SandboxError,\n configureGondolinRuntime,\n createExecutor,\n getSandboxAdapters,\n parseSandboxArg,\n validateSandbox,\n type GondolinBootstrapOptions,\n} from \"./sandbox/index.js\";\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n SandboxAdapter,\n SandboxConfig,\n} from \"./sandbox/index.js\";\n"]}
package/dist/main.js CHANGED
@@ -31,10 +31,8 @@ import { configureGondolinRuntime, gondolinResources, reconcileGondolinRuntimes,
31
31
  import { FileVaultManager } from "./vault/index.js";
32
32
  import { runExtCommand } from "./cli/ext.js";
33
33
  import { runOfficeCommand } from "./cli/office.js";
34
- import { buildContainerBindTranslator, formatUnmigratedOfficesError, migrateLegacyOffices, } from "./office-migration.js";
35
- import { OfficeRegistry } from "./office-registry.js";
34
+ import { buildContainerBindTranslator, createWorkspace, formatUnmigratedOfficesError, migrateLegacyOffices, OfficeRegistry, } from "./office/index.js";
36
35
  import { createConversationRuntime } from "./runtime/conversation-runtime.js";
37
- import { ChannelStore } from "./store.js";
38
36
  import * as Sentry from "@sentry/node";
39
37
  function getVersion() {
40
38
  // Try to find package.json in the dist directory or parent
@@ -246,6 +244,10 @@ try {
246
244
  catch (error) {
247
245
  handleStartupError(error);
248
246
  }
247
+ // The one Workspace value for this process: workspace-global paths plus the
248
+ // per-conversation Office factory. Constructed after the office migration so
249
+ // every office it materializes lands in the office-key layout.
250
+ const workspace = createWorkspace({ root: workingDir, stateDir });
249
251
  const vaultManager = new FileVaultManager(stateDir);
250
252
  if (vaultManager.isEnabled()) {
251
253
  console.log(sandbox.type === "container"
@@ -316,11 +318,11 @@ const resourceController = sandbox.type === "image"
316
318
  ? gondolinResources
317
319
  : undefined;
318
320
  if (sandbox.type === "image" || sandbox.type === "gondolin") {
319
- ensureDirExists(join(workingDir, "skills"));
320
- ensureDirExists(join(workingDir, "events"));
321
- ensureDirExists(join(workingDir, "agents"));
321
+ ensureDirExists(workspace.skillsDir);
322
+ ensureDirExists(workspace.eventsDir);
323
+ ensureDirExists(workspace.agentsDir);
322
324
  try {
323
- writeFileSync(join(workingDir, "MEMORY.md"), "", { flag: "wx" });
325
+ writeFileSync(workspace.memoryPath, "", { flag: "wx" });
324
326
  }
325
327
  catch (err) {
326
328
  if (err.code !== "EEXIST")
@@ -468,7 +470,7 @@ function buildPlatformToolPackFactories() {
468
470
  return factories;
469
471
  }
470
472
  const handler = createConversationRuntime({
471
- workingDir,
473
+ workspace,
472
474
  sandbox,
473
475
  vaultManager,
474
476
  provisioner,
@@ -531,12 +533,10 @@ if (hasSlack) {
531
533
  if (!slackMessagingBotToken || !slackAppToken) {
532
534
  throw new Error("Slack startup requires both SLACK_APP_TOKEN and SLACK_BOT_TOKEN");
533
535
  }
534
- const sharedStore = new ChannelStore({ workingDir, botToken: slackMessagingBotToken });
535
536
  const slackMessagingBot = new SlackMessagingBotClass(handler, {
536
537
  appToken: slackAppToken,
537
538
  botToken: slackMessagingBotToken,
538
- workingDir,
539
- store: sharedStore,
539
+ workspace,
540
540
  });
541
541
  botsByPlatform.slack = slackMessagingBot;
542
542
  log.logInfo("Platform: Slack");
@@ -548,7 +548,7 @@ if (hasTelegram) {
548
548
  }
549
549
  const telegramMessagingBot = new TelegramMessagingBot(handler, {
550
550
  token: telegramToken,
551
- workingDir,
551
+ workspace,
552
552
  });
553
553
  botsByPlatform.telegram = telegramMessagingBot;
554
554
  log.logInfo("Platform: Telegram");
@@ -560,7 +560,7 @@ if (hasDiscord) {
560
560
  }
561
561
  const discordMessagingBot = new DiscordMessagingBot(handler, {
562
562
  token: discordToken,
563
- workingDir,
563
+ workspace,
564
564
  });
565
565
  botsByPlatform.discord = discordMessagingBot;
566
566
  log.logInfo("Platform: Discord");
@@ -588,7 +588,7 @@ if (hasGithub) {
588
588
  : [],
589
589
  pollIntervalMs: (Number.isFinite(pollIntervalSeconds) && pollIntervalSeconds > 0 ? pollIntervalSeconds : 60) *
590
590
  1000,
591
- workingDir,
591
+ workspace,
592
592
  syncStatePath: join(stateDir, "github-sync.json"),
593
593
  // Host-side GCP creds (e.g. a WIF external_account file) unlock Cloud
594
594
  // Build logs in github_checks; without them external CI degrades to
@@ -617,11 +617,11 @@ if (LINK_PORT) {
617
617
  },
618
618
  sessionViewTokenStore,
619
619
  sessionViewInteractive: { handler, botsByPlatform },
620
- adminOptions: { adminTokenStore, workingDir, runtime: handler, sandbox, botsByPlatform },
620
+ adminOptions: { adminTokenStore, workspace, runtime: handler, sandbox, botsByPlatform },
621
621
  });
622
622
  }
623
623
  // Start events watcher with explicit platform routing
624
- const eventsWatcher = new EventsWatcher(join(workingDir, "events"), botsByPlatform);
624
+ const eventsWatcher = new EventsWatcher(workspace.eventsDir, botsByPlatform);
625
625
  const slackMessagingBot = botsByPlatform.slack;
626
626
  if (slackMessagingBot) {
627
627
  slackMessagingBot.setEventsWatcher(eventsWatcher);
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport \"./observability/instrument.js\";\n\nimport { join } from \"path\";\nimport { mkdirSync, statSync, writeFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, join as pathJoin } from \"path\";\nimport type {\n MessagingBot,\n PlatformBlockKit,\n PlatformName,\n PlatformNotifier,\n PlatformReactor,\n PlatformUploader,\n} from \"./adapter.js\";\nimport { DiscordMessagingBot } from \"./adapters/discord/bot.js\";\nimport { GithubMessagingBot } from \"./adapters/github/bot.js\";\nimport { createGithubToolPack } from \"./adapters/github/tool-pack.js\";\nimport type { PlatformGithubOps } from \"./adapters/github/types.js\";\nimport { GcpTokenProvider } from \"./adapters/github/gcp-auth.js\";\nimport { TelegramMessagingBot } from \"./adapters/telegram/bot.js\";\nimport { SlackMessagingBot as SlackMessagingBotClass } from \"./adapters/slack/bot.js\";\nimport { createSlackToolPack } from \"./adapters/slack/tool-pack.js\";\nimport type { PlatformSlackOps } from \"./adapters/slack/types.js\";\nimport type { PlatformToolPackFactory } from \"./tools/types.js\";\nimport { downloadChannel } from \"./cli/download.js\";\nimport { EventsWatcher } from \"./events.js\";\nimport * as log from \"./log.js\";\nimport { startWebServer } from \"./web/server.js\";\nimport { InMemoryAdminTokenStore } from \"./web/admin/store.js\";\nimport { InMemoryLinkTokenStore } from \"./web/login/store.js\";\nimport { InMemorySessionViewTokenStore } from \"./web/session-view/store.js\";\nimport { DockerContainerManager } from \"./provisioner.js\";\nimport {\n assertStateDirOutsideWorkspace,\n createGlobalSettingsFile,\n loadGlobalSettings,\n MissingGlobalSettingsError,\n resolveLinkBaseUrl,\n} from \"./config.js\";\nimport {\n configureHttpDispatcher,\n defaultAuthPath,\n defaultModelsJsonPath,\n parseHttpIdleTimeoutMs,\n} from \"./harness/index.js\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { readEnv, setEnvAliases } from \"./utils/env.js\";\nimport { ensureDirExists, isRecord, readJsonFileIfExists } from \"./utils/file-guards.js\";\nimport { SandboxError, validateSandbox } from \"./sandbox/index.js\";\nimport { helpText, resolveBoot, type BootPlan } from \"./cli/boot.js\";\nimport { envReport, noPlatformsMessage, platformIsActive } from \"./env-manifest.js\";\nimport {\n configureGondolinRuntime,\n gondolinResources,\n reconcileGondolinRuntimes,\n stopAllGondolinRuntimes,\n stopIdleGondolinVms,\n} from \"./sandbox/gondolin.js\";\nimport { FileVaultManager } from \"./vault/index.js\";\nimport { runExtCommand } from \"./cli/ext.js\";\nimport { runOfficeCommand } from \"./cli/office.js\";\nimport {\n buildContainerBindTranslator,\n formatUnmigratedOfficesError,\n migrateLegacyOffices,\n} from \"./office-migration.js\";\nimport { OfficeRegistry } from \"./office-registry.js\";\nimport { createConversationRuntime } from \"./runtime/conversation-runtime.js\";\nimport { ChannelStore } from \"./store.js\";\nimport * as Sentry from \"@sentry/node\";\n\nfunction getVersion(): string {\n // Try to find package.json in the dist directory or parent\n const possiblePaths = [\n pathJoin(dirname(fileURLToPath(import.meta.url)), \"package.json\"),\n pathJoin(dirname(fileURLToPath(import.meta.url)), \"..\", \"package.json\"),\n pathJoin(process.cwd(), \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n const pkg = readJsonFileIfExists(\n pkgPath,\n (value): value is { version?: unknown } => isRecord(value),\n () => \"Ignoring package.json while resolving version\",\n );\n if (typeof pkg?.version === \"string\" && pkg.version) return pkg.version;\n }\n return \"unknown\";\n}\n\nconst SLACK_APP_TOKEN = readEnv(\"SLACK_APP_TOKEN\");\nconst SLACK_BOT_TOKEN = readEnv(\"SLACK_BOT_TOKEN\");\nconst TELEGRAM_BOT_TOKEN = readEnv(\"TELEGRAM_BOT_TOKEN\");\nconst DISCORD_BOT_TOKEN = readEnv(\"DISCORD_BOT_TOKEN\");\nconst GITHUB_APP_ID = readEnv(\"GITHUB_APP_ID\");\nconst GITHUB_APP_PRIVATE_KEY = readEnv(\"GITHUB_APP_PRIVATE_KEY\");\nconst GITHUB_APP_PRIVATE_KEY_PATH = readEnv(\"GITHUB_APP_PRIVATE_KEY_PATH\");\nconst GITHUB_INSTALLATION_ID = readEnv(\"GITHUB_INSTALLATION_ID\");\nconst GITHUB_REPOS = readEnv(\"GITHUB_REPOS\");\nconst GITHUB_POLL_INTERVAL = readEnv(\"GITHUB_POLL_INTERVAL\");\nconst GOOGLE_APPLICATION_CREDENTIALS = readEnv(\"GOOGLE_APPLICATION_CREDENTIALS\");\nconst GOOGLE_CLOUD_PROJECT = readEnv(\"GOOGLE_CLOUD_PROJECT\");\n// Externally-visible base URL of the link/OAuth server; the env read and\n// trailing-slash normalization live in config.resolveLinkBaseUrl.\nconst LINK_BASE_URL = resolveLinkBaseUrl();\nconst LINK_PORT_RAW = readEnv(\"LINK_PORT\");\nconst LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) : LINK_BASE_URL ? 8181 : undefined;\n\nconst WORLD_WRITABLE_MODE = 0o002;\n\nfunction ensureSecureStateDir(path: string): void {\n let stat;\n try {\n stat = statSync(path);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === \"ENOENT\") {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n return;\n }\n console.error(`Error: cannot access --state-dir ${path}: ${(err as Error).message}`);\n process.exit(1);\n }\n\n if (!stat.isDirectory()) {\n console.error(`Error: --state-dir ${path} exists but is not a directory`);\n process.exit(1);\n }\n\n if (stat.mode & WORLD_WRITABLE_MODE) {\n console.error(\n `Error: --state-dir ${path} is world-writable (mode ${(stat.mode & 0o777).toString(8)}). ` +\n `Credentials stored there would be exposed to other local users. ` +\n `Fix with: chmod 0700 ${path}`,\n );\n process.exit(1);\n }\n\n const euid = typeof process.geteuid === \"function\" ? process.geteuid() : undefined;\n if (euid !== undefined && stat.uid !== euid) {\n console.error(\n `Error: --state-dir ${path} is owned by uid ${stat.uid} but mikan is running as uid ${euid}. ` +\n `Run mikan as the directory owner or point --state-dir at a directory you own.`,\n );\n process.exit(1);\n }\n}\n\nfunction handleStartupError(error: unknown): never {\n if (error instanceof SandboxError) {\n for (const line of error.formatForCli()) {\n console.error(line);\n }\n process.exit(1);\n }\n if (error instanceof MissingGlobalSettingsError) {\n console.error(`Missing global settings: ${error.settingsPath}`);\n console.error(\"\");\n console.error(\"Run onboarding to create it:\");\n console.error(` mikan --onboard --state-dir ${stateDir}`);\n console.error(\"\");\n console.error(\"Then review the generated settings.json and start mikan again.\");\n process.exit(1);\n }\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n process.exit(1);\n }\n console.error(String(error));\n process.exit(1);\n}\n\nlet plan: BootPlan;\ntry {\n plan = resolveBoot();\n} catch (error) {\n handleStartupError(error);\n}\n\n// `mikan ext …` manages extensions and exits; handle it before the normal\n// bot-mode startup (which requires platform tokens).\nif (plan.mode === \"ext\") {\n const code = await runExtCommand(plan.extArgs ?? []);\n process.exit(code);\n}\n\n// `mikan office …` inspects/claims conversation offices and exits.\nif (plan.mode === \"office\") {\n process.exit(runOfficeCommand(plan.officeArgs ?? []));\n}\n\n// Global fetch: proxy support (HTTP_PROXY/HTTPS_PROXY/NO_PROXY) and idle\n// timeouts so a stalled LLM stream errors out instead of hanging a session.\nconst httpIdleTimeoutMs = parseHttpIdleTimeoutMs(readEnv(\"HTTP_IDLE_TIMEOUT\"));\nconfigureHttpDispatcher(httpIdleTimeoutMs);\n\nif (plan.mode === \"help\") {\n console.log(helpText());\n process.exit(0);\n}\n\nif (plan.mode === \"env\") {\n console.log(envReport());\n process.exit(0);\n}\n\nif (plan.mode === \"version\") {\n console.log(getVersion());\n process.exit(0);\n}\n\n// Handle --onboard mode\nif (plan.mode === \"onboard\") {\n const stateDir = plan.stateDir;\n setEnvAliases(\"STATE_DIR\", stateDir);\n ensureSecureStateDir(stateDir);\n try {\n const settingsPath = createGlobalSettingsFile(stateDir);\n console.log(`Created global settings at ${settingsPath}`);\n console.log(\n `Review the file, then start mikan (workspace defaults to ${join(stateDir, \"workspace\")}).`,\n );\n process.exit(0);\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\n// Handle --download mode (Slack only)\nif (plan.mode === \"download\" && plan.downloadChannel) {\n if (!SLACK_BOT_TOKEN) {\n console.error(\"Missing env: SLACK_BOT_TOKEN\");\n process.exit(1);\n }\n await downloadChannel(plan.downloadChannel, SLACK_BOT_TOKEN);\n process.exit(0);\n}\n\n// Normal bot mode - working dir is optional and defaults under the state dir\nconst sandbox = plan.sandbox;\nconst stateDir = plan.stateDir;\nconst workingDir = plan.workingDir;\nsetEnvAliases(\"STATE_DIR\", stateDir);\nensureSecureStateDir(stateDir);\nif (!plan.workingDirExplicit) {\n ensureDirExists(workingDir);\n}\ntry {\n assertStateDirOutsideWorkspace(stateDir, workingDir, sandbox.type);\n} catch (error) {\n handleStartupError(error);\n}\n\n// Validate platform tokens — activation rules live in the env manifest.\nconst hasSlack = platformIsActive(\"slack\");\nconst hasTelegram = platformIsActive(\"telegram\");\nconst hasDiscord = platformIsActive(\"discord\");\nconst hasGithub = platformIsActive(\"github\");\n\nif (!hasSlack && !hasTelegram && !hasDiscord && !hasGithub) {\n console.error(noPlatformsMessage());\n process.exit(1);\n}\n\n// Move legacy raw-id conversation directories to the office-key layout before\n// anything touches the workspace. Runs every boot; a completed migration is a\n// no-op. Unowned or failed offices are fatal: after the layout flip a legacy\n// directory is invisible to the runtime, and booting anyway would present\n// those conversations as silently empty.\nconst enabledPlatforms: PlatformName[] = [\n ...(hasSlack ? ([\"slack\"] as const) : []),\n ...(hasTelegram ? ([\"telegram\"] as const) : []),\n ...(hasDiscord ? ([\"discord\"] as const) : []),\n ...(hasGithub ? ([\"github\"] as const) : []),\n];\nconst officeMigration = (() => {\n try {\n return migrateLegacyOffices({ workspaceRoot: workingDir, stateDir, enabledPlatforms });\n } catch (error) {\n handleStartupError(error);\n }\n})();\nif (\n officeMigration.unowned.length > 0 ||\n officeMigration.failed.length > 0 ||\n officeMigration.vaultConflicts.length > 0 ||\n officeMigration.stateDirConflicts.length > 0\n) {\n console.error(formatUnmigratedOfficesError(officeMigration));\n process.exit(1);\n}\nif (officeMigration.migrated.length > 0 || officeMigration.recovered.length > 0) {\n console.log(\n ` Office layout migration: ${officeMigration.migrated.length} moved, ` +\n `${officeMigration.recovered.length} recovered.`,\n );\n}\nif (officeMigration.vaultKeysMigrated.length > 0) {\n console.log(` Vault keys migrated to office keys: ${officeMigration.vaultKeysMigrated.length}.`);\n}\nif (officeMigration.stateDirsMigrated.length > 0) {\n console.log(\n ` Host state dirs migrated to office keys: ${officeMigration.stateDirsMigrated.length}.`,\n );\n}\n\ntry {\n await validateSandbox(sandbox);\n} catch (error) {\n handleStartupError(error);\n}\n\nconst vaultManager = new FileVaultManager(stateDir);\nif (vaultManager.isEnabled()) {\n console.log(\n sandbox.type === \"container\"\n ? \" Vault system enabled. Container vault active.\"\n : sandbox.type === \"image\" ||\n sandbox.type === \"gondolin\" ||\n sandbox.type === \"firecracker\" ||\n sandbox.type === \"cloudflare\"\n ? \" Vault system enabled. Conversation-scoped credential routing active.\"\n : \" Vault system enabled. Host mode will not inject vault env.\",\n );\n}\n\nconst startupConfig = (() => {\n try {\n return loadGlobalSettings();\n } catch (error) {\n handleStartupError(error);\n }\n})();\nconst sandboxSettings = startupConfig.sandbox;\nconst sandboxLimits =\n sandboxSettings?.cpus || sandboxSettings?.memory\n ? { cpus: sandboxSettings?.cpus, memory: sandboxSettings?.memory }\n : undefined;\nconst sandboxBoostLimits =\n sandboxSettings?.boost?.cpus || sandboxSettings?.boost?.memory\n ? { cpus: sandboxSettings?.boost?.cpus, memory: sandboxSettings?.boost?.memory }\n : undefined;\n\nconst provisioner =\n sandbox.type === \"image\"\n ? new DockerContainerManager(sandbox.image, {\n limits: sandboxLimits,\n boostLimits: sandboxBoostLimits,\n })\n : undefined;\n// Containers provisioned before the office migration mount the renamed\n// legacy paths. Their writable layers (everything installed inside) are\n// preserved: each container is committed and recreated with translated\n// mounts — on demand before its next message, and via a background sweep\n// after the bots start. MIKAN_SKIP_CONTAINER_PRESERVATION=1 falls back to\n// plain removal (containers rebuild from the base image on next use).\nconst registryOffices = new OfficeRegistry(stateDir).getOffices();\nif (provisioner && registryOffices.length > 0) {\n if (readEnv(\"SKIP_CONTAINER_PRESERVATION\") === \"1\") {\n if (officeMigration.migrated.length > 0 || officeMigration.recovered.length > 0) {\n await provisioner.removeContainersForConversations(\n new Set([...officeMigration.migrated, ...officeMigration.recovered]),\n );\n }\n } else {\n provisioner.armContainerLayoutMigration(\n buildContainerBindTranslator({\n offices: registryOffices,\n workspaceRoot: workingDir,\n stateDir,\n }),\n );\n }\n}\nif (sandbox.type === \"gondolin\") {\n try {\n configureGondolinRuntime({\n limits: sandboxLimits,\n boostLimits: sandboxBoostLimits,\n });\n } catch (error) {\n handleStartupError(error);\n }\n}\nconst resourceController =\n sandbox.type === \"image\"\n ? provisioner\n : sandbox.type === \"gondolin\"\n ? gondolinResources\n : undefined;\n\nif (sandbox.type === \"image\" || sandbox.type === \"gondolin\") {\n ensureDirExists(join(workingDir, \"skills\"));\n ensureDirExists(join(workingDir, \"events\"));\n ensureDirExists(join(workingDir, \"agents\"));\n try {\n writeFileSync(join(workingDir, \"MEMORY.md\"), \"\", { flag: \"wx\" });\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n }\n}\n\nconst linkTokenStore = new InMemoryLinkTokenStore();\nconst sessionViewTokenStore = new InMemorySessionViewTokenStore();\nconst adminTokenStore = new InMemoryAdminTokenStore();\nsetInterval(() => linkTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => sessionViewTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => adminTokenStore.purge(), 5 * 60 * 1000).unref();\n\nfunction portalBaseUrl(): string | undefined {\n if (LINK_BASE_URL) return LINK_BASE_URL;\n if (LINK_PORT) return `http://localhost:${LINK_PORT}`;\n return undefined;\n}\n/** Idle timeout for managed sandboxes (10 minutes) */\nconst MANAGED_SANDBOX_IDLE_TIMEOUT_MS = 10 * 60 * 1000;\n\nif (provisioner) {\n await provisioner.reconcile();\n await provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);\n setInterval(\n () => provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS),\n MANAGED_SANDBOX_IDLE_TIMEOUT_MS,\n ).unref();\n}\n\nif (sandbox.type === \"gondolin\") {\n await reconcileGondolinRuntimes();\n setInterval(\n () => void stopIdleGondolinVms(MANAGED_SANDBOX_IDLE_TIMEOUT_MS),\n MANAGED_SANDBOX_IDLE_TIMEOUT_MS,\n ).unref();\n}\nconst botsByPlatform: Record<string, MessagingBot> = {};\n\n/**\n * Resolve which platform bot to use: an explicit platform, or the sole\n * running one. Mirrors event-file platform resolution.\n */\nfunction resolvePlatformBot(op: string, platform: string | undefined): [string, MessagingBot] {\n const available = Object.keys(botsByPlatform);\n const key = platform?.trim().toLowerCase() || (available.length === 1 ? available[0] : undefined);\n const bot = key ? botsByPlatform[key] : undefined;\n if (!bot) {\n throw new Error(\n platform\n ? `${op}: unknown platform '${platform}' (available: ${available.join(\", \") || \"none\"})`\n : `${op}: multiple platforms active (${available.join(\", \")}); specify platform`,\n );\n }\n return [key!, bot];\n}\n\n/** Extension `api.notify` backend: post into a conversation without a run. */\nconst platformNotifier: PlatformNotifier = async (conversationId, text, platform) => {\n const [key, bot] = resolvePlatformBot(\"notify\", platform);\n await bot.postMessage(conversationId, text);\n log.logInfo(`[notify] posted to ${key}/${conversationId} (${text.length} chars)`);\n};\n\n/** Extension `api.react` backend: add a reaction to a message. */\nconst platformReactor: PlatformReactor = async (conversationId, messageTs, emoji, platform) => {\n const [key, bot] = resolvePlatformBot(\"react\", platform);\n if (!bot.addReaction) {\n throw new Error(`react: platform '${key}' does not support reactions`);\n }\n await bot.addReaction(conversationId, messageTs, emoji);\n log.logInfo(`[react] :${emoji}: on ${key}/${conversationId}`);\n};\n\n/** Extension `api.uploadFile` backend: send a host file into a conversation. */\nconst platformUploader: PlatformUploader = async (conversationId, filePath, title, platform) => {\n const [key, bot] = resolvePlatformBot(\"upload\", platform);\n if (!bot.uploadFile) {\n throw new Error(`upload: platform '${key}' does not support file uploads`);\n }\n await bot.uploadFile(conversationId, filePath, title);\n log.logInfo(`[upload] ${filePath} to ${key}/${conversationId}`);\n};\n\n/** github_* tool backends: PR push/create and CI checks, host-side. */\nfunction requireGithubBot(op: string): GithubMessagingBot {\n const bot = botsByPlatform.github as GithubMessagingBot | undefined;\n if (!bot) {\n throw new Error(`${op}: the GitHub platform is not running`);\n }\n return bot;\n}\n\n/** slack_* tool backends: Block Kit posting/updating, host-side. */\nfunction requireSlackBot(op: string): SlackMessagingBotClass {\n const bot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\n if (!bot) {\n throw new Error(`${op}: the Slack platform is not running`);\n }\n return bot;\n}\n\n/** Extension `api.blockkit` backend: interactive Block Kit, Slack-only today. */\nconst platformBlockKit: PlatformBlockKit = {\n postBlocks: async (conversationId, message, platform) => {\n if (platform && platform !== \"slack\") {\n throw new Error(`blockkit: platform '${platform}' does not support Block Kit`);\n }\n const bot = requireSlackBot(\"blockkit\");\n const ts = message.threadTs\n ? await bot.postInThreadBlocks(conversationId, message.threadTs, message.text, message.blocks)\n : await bot.postMessageBlocks(conversationId, message.text, message.blocks);\n return { ts };\n },\n updateBlocks: async (conversationId, messageTs, message, platform) => {\n if (platform && platform !== \"slack\") {\n throw new Error(`blockkit: platform '${platform}' does not support Block Kit`);\n }\n await requireSlackBot(\"blockkit\").updateMessageBlocks(\n conversationId,\n messageTs,\n message.text,\n message.blocks,\n );\n },\n};\n\n/**\n * Platform capability pack factories — only when the corresponding bot is\n * configured. Factories, not instances: each runner materializes its own\n * pack so per-run bind state never crosses conversations.\n */\nfunction buildPlatformToolPackFactories(): PlatformToolPackFactory[] {\n const factories: PlatformToolPackFactory[] = [];\n if (hasSlack) {\n const platformSlackOps: PlatformSlackOps = {\n postBlocks: async (conversationId, { text, blocks, threadTs }) => {\n const bot = requireSlackBot(\"slack_blockkit\");\n const ts = threadTs\n ? await bot.postInThreadBlocks(conversationId, threadTs, text, blocks)\n : await bot.postMessageBlocks(conversationId, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, blocks);\n return { ts };\n },\n updateBlocks: async (conversationId, { ts, text, blocks, threadTs }) => {\n const bot = requireSlackBot(\"slack_blockkit\");\n await bot.updateMessageBlocks(conversationId, ts, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, blocks);\n },\n ownsBlockKitMessage: (conversationId, ts, threadTs) =>\n requireSlackBot(\"slack_blockkit\").ownsBlockKitMessage(conversationId, ts, threadTs),\n };\n factories.push(() => createSlackToolPack(platformSlackOps));\n }\n if (!hasGithub) return factories;\n const platformGithubOps: PlatformGithubOps = {\n pushAndCreatePr: (conversationId, request) =>\n requireGithubBot(\"github_pr\").ops.pushAndCreatePr(conversationId, request),\n getChecks: (conversationId, branch) =>\n requireGithubBot(\"github_checks\").ops.getChecks(conversationId, branch),\n getJobLog: (conversationId, jobId) =>\n requireGithubBot(\"github_checks\").ops.getJobLog(conversationId, jobId),\n getBuildLog: (conversationId, buildId) =>\n requireGithubBot(\"github_checks\").ops.getBuildLog(conversationId, buildId),\n replyToReviewThread: (conversationId, commentId, body) =>\n requireGithubBot(\"github_review_reply\").ops.replyToReviewThread(\n conversationId,\n commentId,\n body,\n ),\n syncRepo: (conversationId, branch) =>\n requireGithubBot(\"github_sync\").ops.syncRepo(conversationId, branch),\n readGithub: (conversationId, request) =>\n requireGithubBot(\"github_read\").ops.readGithub(conversationId, request),\n manageIssue: (conversationId, request) =>\n requireGithubBot(\"github_issue\").ops.manageIssue(conversationId, request),\n };\n factories.push(() => createGithubToolPack(platformGithubOps));\n return factories;\n}\n\nconst handler = createConversationRuntime({\n workingDir,\n sandbox,\n vaultManager,\n provisioner,\n resourceController,\n linkTokenStore,\n sessionViewTokenStore,\n adminTokenStore,\n portalBaseUrl: portalBaseUrl(),\n platformNotifier,\n platformReactor,\n platformUploader,\n platformBlockKit,\n platformToolPackFactories: buildPlatformToolPackFactories(),\n});\n\nconst sandboxDesc =\n sandbox.type === \"host\"\n ? \"host\"\n : sandbox.type === \"container\"\n ? `container:${sandbox.container}`\n : sandbox.type === \"image\"\n ? `image:${sandbox.image}`\n : sandbox.type === \"gondolin\"\n ? `gondolin:${sandbox.profile}`\n : sandbox.type === \"firecracker\"\n ? `firecracker:${sandbox.vmId}`\n : `cloudflare:${sandbox.sandboxId}`;\nlog.logStartup(workingDir, sandboxDesc);\nlogHarnessStartupSummary();\n\n/**\n * One-look confirmation of the harness runtime surface, aimed at upgrade\n * verification: config moved from ~/.pi to ~/.mikan with no fallback, so a\n * missing auth.json here is the first thing to check when runs fail.\n */\nfunction logHarnessStartupSummary(): void {\n const proxy =\n process.env.HTTPS_PROXY ??\n process.env.https_proxy ??\n process.env.HTTP_PROXY ??\n process.env.http_proxy;\n log.logInfo(\n `HTTP dispatcher: idle timeout ${httpIdleTimeoutMs}ms${proxy ? `, proxy ${proxy}` : \", no proxy\"}`,\n );\n\n const authPath = defaultAuthPath();\n if (existsSync(authPath)) {\n try {\n const providers = Object.keys(JSON.parse(readFileSync(authPath, \"utf-8\")) as object);\n log.logInfo(`Harness auth: ${authPath} (providers: ${providers.join(\", \") || \"none\"})`);\n } catch {\n log.logWarning(`Harness auth: ${authPath} exists but is not valid JSON`);\n }\n } else {\n log.logInfo(`Harness auth: ${authPath} missing — provider keys come from env vars only`);\n }\n\n const modelsPath = defaultModelsJsonPath();\n log.logInfo(\n existsSync(modelsPath)\n ? `Harness models.json: ${modelsPath}`\n : `Harness models.json: none (${modelsPath}) — built-in providers only`,\n );\n}\n\nif (hasSlack) {\n const slackMessagingBotToken = SLACK_BOT_TOKEN;\n const slackAppToken = SLACK_APP_TOKEN;\n if (!slackMessagingBotToken || !slackAppToken) {\n throw new Error(\"Slack startup requires both SLACK_APP_TOKEN and SLACK_BOT_TOKEN\");\n }\n const sharedStore = new ChannelStore({ workingDir, botToken: slackMessagingBotToken });\n const slackMessagingBot = new SlackMessagingBotClass(handler, {\n appToken: slackAppToken,\n botToken: slackMessagingBotToken,\n workingDir,\n store: sharedStore,\n });\n botsByPlatform.slack = slackMessagingBot;\n log.logInfo(\"Platform: Slack\");\n}\nif (hasTelegram) {\n const telegramToken = TELEGRAM_BOT_TOKEN;\n if (!telegramToken) {\n throw new Error(\"Telegram startup requires TELEGRAM_BOT_TOKEN\");\n }\n const telegramMessagingBot = new TelegramMessagingBot(handler, {\n token: telegramToken,\n workingDir,\n });\n botsByPlatform.telegram = telegramMessagingBot;\n log.logInfo(\"Platform: Telegram\");\n}\nif (hasDiscord) {\n const discordToken = DISCORD_BOT_TOKEN;\n if (!discordToken) {\n throw new Error(\"Discord startup requires DISCORD_BOT_TOKEN\");\n }\n const discordMessagingBot = new DiscordMessagingBot(handler, {\n token: discordToken,\n workingDir,\n });\n botsByPlatform.discord = discordMessagingBot;\n log.logInfo(\"Platform: Discord\");\n}\nif (hasGithub) {\n if (!GITHUB_APP_ID || !GITHUB_INSTALLATION_ID) {\n throw new Error(\"GitHub startup requires GITHUB_APP_ID and GITHUB_INSTALLATION_ID\");\n }\n // Env vars flatten PEM newlines to literal `\\n`; a key file avoids that.\n const githubPrivateKey = GITHUB_APP_PRIVATE_KEY_PATH\n ? readFileSync(GITHUB_APP_PRIVATE_KEY_PATH, \"utf-8\")\n : GITHUB_APP_PRIVATE_KEY?.replace(/\\\\n/g, \"\\n\");\n if (!githubPrivateKey) {\n throw new Error(\n \"GitHub startup requires GITHUB_APP_PRIVATE_KEY or GITHUB_APP_PRIVATE_KEY_PATH\",\n );\n }\n const pollIntervalSeconds = GITHUB_POLL_INTERVAL ? parseInt(GITHUB_POLL_INTERVAL, 10) : NaN;\n const githubMessagingBot = new GithubMessagingBot(handler, {\n appId: GITHUB_APP_ID,\n privateKey: githubPrivateKey,\n installationId: GITHUB_INSTALLATION_ID,\n repos: GITHUB_REPOS\n ? GITHUB_REPOS.split(\",\")\n .map((repo) => repo.trim())\n .filter(Boolean)\n : [],\n pollIntervalMs:\n (Number.isFinite(pollIntervalSeconds) && pollIntervalSeconds > 0 ? pollIntervalSeconds : 60) *\n 1000,\n workingDir,\n syncStatePath: join(stateDir, \"github-sync.json\"),\n // Host-side GCP creds (e.g. a WIF external_account file) unlock Cloud\n // Build logs in github_checks; without them external CI degrades to\n // guidance text. Credentials never enter the sandbox.\n cloudBuild: GOOGLE_APPLICATION_CREDENTIALS\n ? {\n tokenProvider: new GcpTokenProvider({\n credentialsPath: GOOGLE_APPLICATION_CREDENTIALS,\n }),\n projectFallback: GOOGLE_CLOUD_PROJECT,\n }\n : undefined,\n });\n botsByPlatform.github = githubMessagingBot;\n log.logInfo(\n `Platform: GitHub${GOOGLE_APPLICATION_CREDENTIALS ? \" (Cloud Build logs enabled)\" : \"\"}`,\n );\n}\n\nif (LINK_PORT) {\n startWebServer({\n port: LINK_PORT,\n linkTokenStore,\n vaultManager,\n notify: async (platform, conversationId, message) => {\n const bot = botsByPlatform[platform];\n if (bot) await bot.postMessage(conversationId, message);\n },\n sessionViewTokenStore,\n sessionViewInteractive: { handler, botsByPlatform },\n adminOptions: { adminTokenStore, workingDir, runtime: handler, sandbox, botsByPlatform },\n });\n}\n\n// Start events watcher with explicit platform routing\nconst eventsWatcher = new EventsWatcher(join(workingDir, \"events\"), botsByPlatform);\nconst slackMessagingBot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\nif (slackMessagingBot) {\n slackMessagingBot.setEventsWatcher(eventsWatcher);\n}\neventsWatcher.start();\n\n// Handle shutdown\nasync function shutdown(): Promise<void> {\n await handler.shutdown();\n eventsWatcher.stop();\n await stopAllGondolinRuntimes();\n await Sentry.close(5000);\n process.exit(0);\n}\n\nprocess.on(\"SIGINT\", shutdown);\nprocess.on(\"SIGTERM\", shutdown);\n\n// Start all bots\nawait Promise.all(\n Object.values(botsByPlatform).map((bot) =>\n bot.start().catch((err) => {\n log.logWarning(\"Failed to start bot\", err instanceof Error ? err.message : String(err));\n process.exit(1);\n }),\n ),\n);\n\n// Drain the container layout migration off the hot path; every unit is\n// idempotent, so an interrupted sweep simply resumes on the next boot.\nif (provisioner) {\n void provisioner.sweepContainerLayoutMigration().catch((err) => {\n log.logWarning(\n \"Container layout sweep failed\",\n err instanceof Error ? err.message : String(err),\n );\n });\n}\n"]}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,+BAA+B,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AASjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAiB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,4BAA4B,EAC5B,eAAe,EACf,4BAA4B,EAC5B,oBAAoB,EACpB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAEvC,SAAS,UAAU;IACjB,2DAA2D;IAC3D,MAAM,aAAa,GAAG;QACpB,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC;QACjE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC;QACvE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;KACxC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,oBAAoB,CAC9B,OAAO,EACP,CAAC,KAAK,EAAkC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1D,GAAG,EAAE,CAAC,+CAA+C,CACtD,CAAC;QACF,IAAI,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACzD,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACvD,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAC/C,MAAM,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACjE,MAAM,2BAA2B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAC3E,MAAM,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACjE,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAC7C,MAAM,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAC7D,MAAM,8BAA8B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;AACjF,MAAM,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAC7D,yEAAyE;AACzE,kEAAkE;AAClE,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;AAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAEjG,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,oCAAoC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,gCAAgC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CACX,sBAAsB,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YACxF,kEAAkE;YAClE,wBAAwB,IAAI,EAAE,CACjC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CACX,sBAAsB,IAAI,oBAAoB,IAAI,CAAC,GAAG,gCAAgC,IAAI,IAAI;YAC5F,+EAA+E,CAClF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,YAAY,0BAA0B,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAc,CAAC;AACnB,IAAI,CAAC;IACH,IAAI,GAAG,WAAW,EAAE,CAAC;AACvB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,0EAA0E;AAC1E,qDAAqD;AACrD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,mEAAmE;AACnE,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,yEAAyE;AACzE,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC/E,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;AAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,wBAAwB;AACxB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CACT,4DAA4D,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAC5F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;IACrD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,6EAA6E;AAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACrC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC7B,eAAe,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AACD,IAAI,CAAC;IACH,8BAA8B,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAE7C,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,yCAAyC;AACzC,MAAM,gBAAgB,GAAmB;IACvC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,UAAU,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,SAAS,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5C,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AACL,IACE,eAAe,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;IAClC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;IACjC,eAAe,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;IACzC,eAAe,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAC5C,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAChF,OAAO,CAAC,GAAG,CACT,8BAA8B,eAAe,CAAC,QAAQ,CAAC,MAAM,UAAU;QACrE,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,aAAa,CACnD,CAAC;AACJ,CAAC;AACD,IAAI,eAAe,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,yCAAyC,eAAe,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AACpG,CAAC;AACD,IAAI,eAAe,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,GAAG,CACT,8CAA8C,eAAe,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAC1F,CAAC;AACJ,CAAC;AAED,IAAI,CAAC;IACH,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,4EAA4E;AAC5E,6EAA6E;AAC7E,+DAA+D;AAC/D,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAElE,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CACT,OAAO,CAAC,IAAI,KAAK,WAAW;QAC1B,CAAC,CAAC,iDAAiD;QACnD,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YACtB,OAAO,CAAC,IAAI,KAAK,UAAU;YAC3B,OAAO,CAAC,IAAI,KAAK,aAAa;YAC9B,OAAO,CAAC,IAAI,KAAK,YAAY;YAC/B,CAAC,CAAC,wEAAwE;YAC1E,CAAC,CAAC,8DAA8D,CACrE,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE;IAC1B,IAAI,CAAC;QACH,OAAO,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;AAC9C,MAAM,aAAa,GACjB,eAAe,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM;IAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE;IAClE,CAAC,CAAC,SAAS,CAAC;AAChB,MAAM,kBAAkB,GACtB,eAAe,EAAE,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,KAAK,EAAE,MAAM;IAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;IAChF,CAAC,CAAC,SAAS,CAAC;AAEhB,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,OAAO;IACtB,CAAC,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC,KAAK,EAAE;QACxC,MAAM,EAAE,aAAa;QACrB,WAAW,EAAE,kBAAkB;KAChC,CAAC;IACJ,CAAC,CAAC,SAAS,CAAC;AAChB,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,eAAe,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;AAClE,IAAI,WAAW,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC9C,IAAI,OAAO,CAAC,6BAA6B,CAAC,KAAK,GAAG,EAAE,CAAC;QACnD,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChF,MAAM,WAAW,CAAC,gCAAgC,CAChD,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,2BAA2B,CACrC,4BAA4B,CAAC;YAC3B,OAAO,EAAE,eAAe;YACxB,aAAa,EAAE,UAAU;YACzB,QAAQ;SACT,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,wBAAwB,CAAC;YACvB,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,kBAAkB;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AACD,MAAM,kBAAkB,GACtB,OAAO,CAAC,IAAI,KAAK,OAAO;IACtB,CAAC,CAAC,WAAW;IACb,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;QAC3B,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,SAAS,CAAC;AAElB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;IAC5D,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACpD,MAAM,qBAAqB,GAAG,IAAI,6BAA6B,EAAE,CAAC;AAClE,MAAM,eAAe,GAAG,IAAI,uBAAuB,EAAE,CAAC;AACtD,WAAW,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjE,WAAW,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACxE,WAAW,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAElE,SAAS,aAAa;IACpB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,SAAS;QAAE,OAAO,oBAAoB,SAAS,EAAE,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,sDAAsD;AACtD,MAAM,+BAA+B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,IAAI,WAAW,EAAE,CAAC;IAChB,MAAM,WAAW,CAAC,SAAS,EAAE,CAAC;IAC9B,MAAM,WAAW,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IAC5D,WAAW,CACT,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAC3D,+BAA+B,CAChC,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;IAChC,MAAM,yBAAyB,EAAE,CAAC;IAClC,WAAW,CACT,GAAG,EAAE,CAAC,KAAK,mBAAmB,CAAC,+BAA+B,CAAC,EAC/D,+BAA+B,CAChC,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AACD,MAAM,cAAc,GAAiC,EAAE,CAAC;AAExD;;;GAGG;AACH,SAAS,kBAAkB,CAAC,EAAU,EAAE,QAA4B;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,QAAQ;YACN,CAAC,CAAC,GAAG,EAAE,uBAAuB,QAAQ,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG;YACxF,CAAC,CAAC,GAAG,EAAE,gCAAgC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAI,EAAE,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,MAAM,gBAAgB,GAAqB,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAClF,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC5C,GAAG,CAAC,OAAO,CAAC,sBAAsB,GAAG,IAAI,cAAc,KAAK,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF,kEAAkE;AAClE,MAAM,eAAe,GAAoB,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC5F,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,8BAA8B,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxD,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,gFAAgF;AAChF,MAAM,gBAAgB,GAAqB,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC7F,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,iCAAiC,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtD,GAAG,CAAC,OAAO,CAAC,YAAY,QAAQ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,uEAAuE;AACvE,SAAS,gBAAgB,CAAC,EAAU;IAClC,MAAM,GAAG,GAAG,cAAc,CAAC,MAAwC,CAAC;IACpE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oEAAoE;AACpE,SAAS,eAAe,CAAC,EAAU;IACjC,MAAM,GAAG,GAAG,cAAc,CAAC,KAA2C,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iFAAiF;AACjF,MAAM,gBAAgB,GAAqB;IACzC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QACtD,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,8BAA8B,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ;YACzB,CAAC,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;YAC9F,CAAC,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9E,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC;IACD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QACnE,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,8BAA8B,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC,mBAAmB,CACnD,cAAc,EACd,SAAS,EACT,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,MAAM,CACf,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAS,8BAA8B;IACrC,MAAM,SAAS,GAA8B,EAAE,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,gBAAgB,GAAqB;YACzC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC/D,MAAM,GAAG,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,QAAQ;oBACjB,CAAC,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC;oBACtE,CAAC,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9D,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC/D,OAAO,EAAE,EAAE,EAAE,CAAC;YAChB,CAAC;YACD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACrE,MAAM,GAAG,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAC9C,MAAM,GAAG,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChE,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC;YACD,mBAAmB,EAAE,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CACpD,eAAe,CAAC,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,CAAC;SACtF,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,iBAAiB,GAAsB;QAC3C,eAAe,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CAC3C,gBAAgB,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,OAAO,CAAC;QAC5E,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CACpC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;QACzE,SAAS,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,CACnC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC;QACxE,WAAW,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CACvC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;QAC5E,mBAAmB,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CACvD,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAC7D,cAAc,EACd,SAAS,EACT,IAAI,CACL;QACH,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CACnC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QACtE,UAAU,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CACtC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC;QACzE,WAAW,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CACvC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;KAC5E,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,OAAO,GAAG,yBAAyB,CAAC;IACxC,SAAS;IACT,OAAO;IACP,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,qBAAqB;IACrB,eAAe;IACf,aAAa,EAAE,aAAa,EAAE;IAC9B,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,yBAAyB,EAAE,8BAA8B,EAAE;CAC5D,CAAC,CAAC;AAEH,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,MAAM;IACrB,CAAC,CAAC,MAAM;IACR,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;QAC5B,CAAC,CAAC,aAAa,OAAO,CAAC,SAAS,EAAE;QAClC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YACxB,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE;YAC1B,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;gBAC3B,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE;gBAC/B,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa;oBAC9B,CAAC,CAAC,eAAe,OAAO,CAAC,IAAI,EAAE;oBAC/B,CAAC,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC;AAChD,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACxC,wBAAwB,EAAE,CAAC;AAE3B;;;;GAIG;AACH,SAAS,wBAAwB;IAC/B,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB,GAAG,CAAC,OAAO,CACT,iCAAiC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CACnG,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAW,CAAC,CAAC;YACrF,GAAG,CAAC,OAAO,CAAC,iBAAiB,QAAQ,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;QAC1F,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,UAAU,CAAC,iBAAiB,QAAQ,+BAA+B,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,iBAAiB,QAAQ,kDAAkD,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,GAAG,CAAC,OAAO,CACT,UAAU,CAAC,UAAU,CAAC;QACpB,CAAC,CAAC,wBAAwB,UAAU,EAAE;QACtC,CAAC,CAAC,8BAA8B,UAAU,6BAA6B,CAC1E,CAAC;AACJ,CAAC;AAED,IAAI,QAAQ,EAAE,CAAC;IACb,MAAM,sBAAsB,GAAG,eAAe,CAAC;IAC/C,MAAM,aAAa,GAAG,eAAe,CAAC;IACtC,IAAI,CAAC,sBAAsB,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,sBAAsB,CAAC,OAAO,EAAE;QAC5D,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,sBAAsB;QAChC,SAAS;KACV,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,GAAG,iBAAiB,CAAC;IACzC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACjC,CAAC;AACD,IAAI,WAAW,EAAE,CAAC;IAChB,MAAM,aAAa,GAAG,kBAAkB,CAAC;IACzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE;QAC7D,KAAK,EAAE,aAAa;QACpB,SAAS;KACV,CAAC,CAAC;IACH,cAAc,CAAC,QAAQ,GAAG,oBAAoB,CAAC;IAC/C,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACpC,CAAC;AACD,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,YAAY,GAAG,iBAAiB,CAAC;IACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,OAAO,EAAE;QAC3D,KAAK,EAAE,YAAY;QACnB,SAAS;KACV,CAAC,CAAC;IACH,cAAc,CAAC,OAAO,GAAG,mBAAmB,CAAC;IAC7C,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC;AACD,IAAI,SAAS,EAAE,CAAC;IACd,IAAI,CAAC,aAAa,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,yEAAyE;IACzE,MAAM,gBAAgB,GAAG,2BAA2B;QAClD,CAAC,CAAC,YAAY,CAAC,2BAA2B,EAAE,OAAO,CAAC;QACpD,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IACD,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5F,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,OAAO,EAAE;QACzD,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE,gBAAgB;QAC5B,cAAc,EAAE,sBAAsB;QACtC,KAAK,EAAE,YAAY;YACjB,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;iBACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC;YACpB,CAAC,CAAC,EAAE;QACN,cAAc,EACZ,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,IAAI;QACN,SAAS;QACT,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QACjD,sEAAsE;QACtE,oEAAoE;QACpE,sDAAsD;QACtD,UAAU,EAAE,8BAA8B;YACxC,CAAC,CAAC;gBACE,aAAa,EAAE,IAAI,gBAAgB,CAAC;oBAClC,eAAe,EAAE,8BAA8B;iBAChD,CAAC;gBACF,eAAe,EAAE,oBAAoB;aACtC;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IACH,cAAc,CAAC,MAAM,GAAG,kBAAkB,CAAC;IAC3C,GAAG,CAAC,OAAO,CACT,mBAAmB,8BAA8B,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,EAAE,CACzF,CAAC;AACJ,CAAC;AAED,IAAI,SAAS,EAAE,CAAC;IACd,cAAc,CAAC;QACb,IAAI,EAAE,SAAS;QACf,cAAc;QACd,YAAY;QACZ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE;YAClD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,qBAAqB;QACrB,sBAAsB,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;QACnD,YAAY,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE;KACxF,CAAC,CAAC;AACL,CAAC;AAED,sDAAsD;AACtD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC7E,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAA2C,CAAC;AACrF,IAAI,iBAAiB,EAAE,CAAC;IACtB,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACpD,CAAC;AACD,aAAa,CAAC,KAAK,EAAE,CAAC;AAEtB,kBAAkB;AAClB,KAAK,UAAU,QAAQ;IACrB,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzB,aAAa,CAAC,IAAI,EAAE,CAAC;IACrB,MAAM,uBAAuB,EAAE,CAAC;IAChC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEhC,iBAAiB;AACjB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACxC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxB,GAAG,CAAC,UAAU,CAAC,qBAAqB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACH,CACF,CAAC;AAEF,uEAAuE;AACvE,uEAAuE;AACvE,IAAI,WAAW,EAAE,CAAC;IAChB,KAAK,WAAW,CAAC,6BAA6B,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7D,GAAG,CAAC,UAAU,CACZ,+BAA+B,EAC/B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport \"./observability/instrument.js\";\n\nimport { join } from \"path\";\nimport { mkdirSync, statSync, writeFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, join as pathJoin } from \"path\";\nimport type {\n MessagingBot,\n PlatformBlockKit,\n PlatformName,\n PlatformNotifier,\n PlatformReactor,\n PlatformUploader,\n} from \"./adapter.js\";\nimport { DiscordMessagingBot } from \"./adapters/discord/bot.js\";\nimport { GithubMessagingBot } from \"./adapters/github/bot.js\";\nimport { createGithubToolPack } from \"./adapters/github/tool-pack.js\";\nimport type { PlatformGithubOps } from \"./adapters/github/types.js\";\nimport { GcpTokenProvider } from \"./adapters/github/gcp-auth.js\";\nimport { TelegramMessagingBot } from \"./adapters/telegram/bot.js\";\nimport { SlackMessagingBot as SlackMessagingBotClass } from \"./adapters/slack/bot.js\";\nimport { createSlackToolPack } from \"./adapters/slack/tool-pack.js\";\nimport type { PlatformSlackOps } from \"./adapters/slack/types.js\";\nimport type { PlatformToolPackFactory } from \"./tools/types.js\";\nimport { downloadChannel } from \"./cli/download.js\";\nimport { EventsWatcher } from \"./events.js\";\nimport * as log from \"./log.js\";\nimport { startWebServer } from \"./web/server.js\";\nimport { InMemoryAdminTokenStore } from \"./web/admin/store.js\";\nimport { InMemoryLinkTokenStore } from \"./web/login/store.js\";\nimport { InMemorySessionViewTokenStore } from \"./web/session-view/store.js\";\nimport { DockerContainerManager } from \"./provisioner.js\";\nimport {\n assertStateDirOutsideWorkspace,\n createGlobalSettingsFile,\n loadGlobalSettings,\n MissingGlobalSettingsError,\n resolveLinkBaseUrl,\n} from \"./config.js\";\nimport {\n configureHttpDispatcher,\n defaultAuthPath,\n defaultModelsJsonPath,\n parseHttpIdleTimeoutMs,\n} from \"./harness/index.js\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { readEnv, setEnvAliases } from \"./utils/env.js\";\nimport { ensureDirExists, isRecord, readJsonFileIfExists } from \"./utils/file-guards.js\";\nimport { SandboxError, validateSandbox } from \"./sandbox/index.js\";\nimport { helpText, resolveBoot, type BootPlan } from \"./cli/boot.js\";\nimport { envReport, noPlatformsMessage, platformIsActive } from \"./env-manifest.js\";\nimport {\n configureGondolinRuntime,\n gondolinResources,\n reconcileGondolinRuntimes,\n stopAllGondolinRuntimes,\n stopIdleGondolinVms,\n} from \"./sandbox/gondolin.js\";\nimport { FileVaultManager } from \"./vault/index.js\";\nimport { runExtCommand } from \"./cli/ext.js\";\nimport { runOfficeCommand } from \"./cli/office.js\";\nimport {\n buildContainerBindTranslator,\n createWorkspace,\n formatUnmigratedOfficesError,\n migrateLegacyOffices,\n OfficeRegistry,\n} from \"./office/index.js\";\nimport { createConversationRuntime } from \"./runtime/conversation-runtime.js\";\nimport * as Sentry from \"@sentry/node\";\n\nfunction getVersion(): string {\n // Try to find package.json in the dist directory or parent\n const possiblePaths = [\n pathJoin(dirname(fileURLToPath(import.meta.url)), \"package.json\"),\n pathJoin(dirname(fileURLToPath(import.meta.url)), \"..\", \"package.json\"),\n pathJoin(process.cwd(), \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n const pkg = readJsonFileIfExists(\n pkgPath,\n (value): value is { version?: unknown } => isRecord(value),\n () => \"Ignoring package.json while resolving version\",\n );\n if (typeof pkg?.version === \"string\" && pkg.version) return pkg.version;\n }\n return \"unknown\";\n}\n\nconst SLACK_APP_TOKEN = readEnv(\"SLACK_APP_TOKEN\");\nconst SLACK_BOT_TOKEN = readEnv(\"SLACK_BOT_TOKEN\");\nconst TELEGRAM_BOT_TOKEN = readEnv(\"TELEGRAM_BOT_TOKEN\");\nconst DISCORD_BOT_TOKEN = readEnv(\"DISCORD_BOT_TOKEN\");\nconst GITHUB_APP_ID = readEnv(\"GITHUB_APP_ID\");\nconst GITHUB_APP_PRIVATE_KEY = readEnv(\"GITHUB_APP_PRIVATE_KEY\");\nconst GITHUB_APP_PRIVATE_KEY_PATH = readEnv(\"GITHUB_APP_PRIVATE_KEY_PATH\");\nconst GITHUB_INSTALLATION_ID = readEnv(\"GITHUB_INSTALLATION_ID\");\nconst GITHUB_REPOS = readEnv(\"GITHUB_REPOS\");\nconst GITHUB_POLL_INTERVAL = readEnv(\"GITHUB_POLL_INTERVAL\");\nconst GOOGLE_APPLICATION_CREDENTIALS = readEnv(\"GOOGLE_APPLICATION_CREDENTIALS\");\nconst GOOGLE_CLOUD_PROJECT = readEnv(\"GOOGLE_CLOUD_PROJECT\");\n// Externally-visible base URL of the link/OAuth server; the env read and\n// trailing-slash normalization live in config.resolveLinkBaseUrl.\nconst LINK_BASE_URL = resolveLinkBaseUrl();\nconst LINK_PORT_RAW = readEnv(\"LINK_PORT\");\nconst LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) : LINK_BASE_URL ? 8181 : undefined;\n\nconst WORLD_WRITABLE_MODE = 0o002;\n\nfunction ensureSecureStateDir(path: string): void {\n let stat;\n try {\n stat = statSync(path);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === \"ENOENT\") {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n return;\n }\n console.error(`Error: cannot access --state-dir ${path}: ${(err as Error).message}`);\n process.exit(1);\n }\n\n if (!stat.isDirectory()) {\n console.error(`Error: --state-dir ${path} exists but is not a directory`);\n process.exit(1);\n }\n\n if (stat.mode & WORLD_WRITABLE_MODE) {\n console.error(\n `Error: --state-dir ${path} is world-writable (mode ${(stat.mode & 0o777).toString(8)}). ` +\n `Credentials stored there would be exposed to other local users. ` +\n `Fix with: chmod 0700 ${path}`,\n );\n process.exit(1);\n }\n\n const euid = typeof process.geteuid === \"function\" ? process.geteuid() : undefined;\n if (euid !== undefined && stat.uid !== euid) {\n console.error(\n `Error: --state-dir ${path} is owned by uid ${stat.uid} but mikan is running as uid ${euid}. ` +\n `Run mikan as the directory owner or point --state-dir at a directory you own.`,\n );\n process.exit(1);\n }\n}\n\nfunction handleStartupError(error: unknown): never {\n if (error instanceof SandboxError) {\n for (const line of error.formatForCli()) {\n console.error(line);\n }\n process.exit(1);\n }\n if (error instanceof MissingGlobalSettingsError) {\n console.error(`Missing global settings: ${error.settingsPath}`);\n console.error(\"\");\n console.error(\"Run onboarding to create it:\");\n console.error(` mikan --onboard --state-dir ${stateDir}`);\n console.error(\"\");\n console.error(\"Then review the generated settings.json and start mikan again.\");\n process.exit(1);\n }\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n process.exit(1);\n }\n console.error(String(error));\n process.exit(1);\n}\n\nlet plan: BootPlan;\ntry {\n plan = resolveBoot();\n} catch (error) {\n handleStartupError(error);\n}\n\n// `mikan ext …` manages extensions and exits; handle it before the normal\n// bot-mode startup (which requires platform tokens).\nif (plan.mode === \"ext\") {\n const code = await runExtCommand(plan.extArgs ?? []);\n process.exit(code);\n}\n\n// `mikan office …` inspects/claims conversation offices and exits.\nif (plan.mode === \"office\") {\n process.exit(runOfficeCommand(plan.officeArgs ?? []));\n}\n\n// Global fetch: proxy support (HTTP_PROXY/HTTPS_PROXY/NO_PROXY) and idle\n// timeouts so a stalled LLM stream errors out instead of hanging a session.\nconst httpIdleTimeoutMs = parseHttpIdleTimeoutMs(readEnv(\"HTTP_IDLE_TIMEOUT\"));\nconfigureHttpDispatcher(httpIdleTimeoutMs);\n\nif (plan.mode === \"help\") {\n console.log(helpText());\n process.exit(0);\n}\n\nif (plan.mode === \"env\") {\n console.log(envReport());\n process.exit(0);\n}\n\nif (plan.mode === \"version\") {\n console.log(getVersion());\n process.exit(0);\n}\n\n// Handle --onboard mode\nif (plan.mode === \"onboard\") {\n const stateDir = plan.stateDir;\n setEnvAliases(\"STATE_DIR\", stateDir);\n ensureSecureStateDir(stateDir);\n try {\n const settingsPath = createGlobalSettingsFile(stateDir);\n console.log(`Created global settings at ${settingsPath}`);\n console.log(\n `Review the file, then start mikan (workspace defaults to ${join(stateDir, \"workspace\")}).`,\n );\n process.exit(0);\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\n// Handle --download mode (Slack only)\nif (plan.mode === \"download\" && plan.downloadChannel) {\n if (!SLACK_BOT_TOKEN) {\n console.error(\"Missing env: SLACK_BOT_TOKEN\");\n process.exit(1);\n }\n await downloadChannel(plan.downloadChannel, SLACK_BOT_TOKEN);\n process.exit(0);\n}\n\n// Normal bot mode - working dir is optional and defaults under the state dir\nconst sandbox = plan.sandbox;\nconst stateDir = plan.stateDir;\nconst workingDir = plan.workingDir;\nsetEnvAliases(\"STATE_DIR\", stateDir);\nensureSecureStateDir(stateDir);\nif (!plan.workingDirExplicit) {\n ensureDirExists(workingDir);\n}\ntry {\n assertStateDirOutsideWorkspace(stateDir, workingDir, sandbox.type);\n} catch (error) {\n handleStartupError(error);\n}\n\n// Validate platform tokens — activation rules live in the env manifest.\nconst hasSlack = platformIsActive(\"slack\");\nconst hasTelegram = platformIsActive(\"telegram\");\nconst hasDiscord = platformIsActive(\"discord\");\nconst hasGithub = platformIsActive(\"github\");\n\nif (!hasSlack && !hasTelegram && !hasDiscord && !hasGithub) {\n console.error(noPlatformsMessage());\n process.exit(1);\n}\n\n// Move legacy raw-id conversation directories to the office-key layout before\n// anything touches the workspace. Runs every boot; a completed migration is a\n// no-op. Unowned or failed offices are fatal: after the layout flip a legacy\n// directory is invisible to the runtime, and booting anyway would present\n// those conversations as silently empty.\nconst enabledPlatforms: PlatformName[] = [\n ...(hasSlack ? ([\"slack\"] as const) : []),\n ...(hasTelegram ? ([\"telegram\"] as const) : []),\n ...(hasDiscord ? ([\"discord\"] as const) : []),\n ...(hasGithub ? ([\"github\"] as const) : []),\n];\nconst officeMigration = (() => {\n try {\n return migrateLegacyOffices({ workspaceRoot: workingDir, stateDir, enabledPlatforms });\n } catch (error) {\n handleStartupError(error);\n }\n})();\nif (\n officeMigration.unowned.length > 0 ||\n officeMigration.failed.length > 0 ||\n officeMigration.vaultConflicts.length > 0 ||\n officeMigration.stateDirConflicts.length > 0\n) {\n console.error(formatUnmigratedOfficesError(officeMigration));\n process.exit(1);\n}\nif (officeMigration.migrated.length > 0 || officeMigration.recovered.length > 0) {\n console.log(\n ` Office layout migration: ${officeMigration.migrated.length} moved, ` +\n `${officeMigration.recovered.length} recovered.`,\n );\n}\nif (officeMigration.vaultKeysMigrated.length > 0) {\n console.log(` Vault keys migrated to office keys: ${officeMigration.vaultKeysMigrated.length}.`);\n}\nif (officeMigration.stateDirsMigrated.length > 0) {\n console.log(\n ` Host state dirs migrated to office keys: ${officeMigration.stateDirsMigrated.length}.`,\n );\n}\n\ntry {\n await validateSandbox(sandbox);\n} catch (error) {\n handleStartupError(error);\n}\n\n// The one Workspace value for this process: workspace-global paths plus the\n// per-conversation Office factory. Constructed after the office migration so\n// every office it materializes lands in the office-key layout.\nconst workspace = createWorkspace({ root: workingDir, stateDir });\n\nconst vaultManager = new FileVaultManager(stateDir);\nif (vaultManager.isEnabled()) {\n console.log(\n sandbox.type === \"container\"\n ? \" Vault system enabled. Container vault active.\"\n : sandbox.type === \"image\" ||\n sandbox.type === \"gondolin\" ||\n sandbox.type === \"firecracker\" ||\n sandbox.type === \"cloudflare\"\n ? \" Vault system enabled. Conversation-scoped credential routing active.\"\n : \" Vault system enabled. Host mode will not inject vault env.\",\n );\n}\n\nconst startupConfig = (() => {\n try {\n return loadGlobalSettings();\n } catch (error) {\n handleStartupError(error);\n }\n})();\nconst sandboxSettings = startupConfig.sandbox;\nconst sandboxLimits =\n sandboxSettings?.cpus || sandboxSettings?.memory\n ? { cpus: sandboxSettings?.cpus, memory: sandboxSettings?.memory }\n : undefined;\nconst sandboxBoostLimits =\n sandboxSettings?.boost?.cpus || sandboxSettings?.boost?.memory\n ? { cpus: sandboxSettings?.boost?.cpus, memory: sandboxSettings?.boost?.memory }\n : undefined;\n\nconst provisioner =\n sandbox.type === \"image\"\n ? new DockerContainerManager(sandbox.image, {\n limits: sandboxLimits,\n boostLimits: sandboxBoostLimits,\n })\n : undefined;\n// Containers provisioned before the office migration mount the renamed\n// legacy paths. Their writable layers (everything installed inside) are\n// preserved: each container is committed and recreated with translated\n// mounts — on demand before its next message, and via a background sweep\n// after the bots start. MIKAN_SKIP_CONTAINER_PRESERVATION=1 falls back to\n// plain removal (containers rebuild from the base image on next use).\nconst registryOffices = new OfficeRegistry(stateDir).getOffices();\nif (provisioner && registryOffices.length > 0) {\n if (readEnv(\"SKIP_CONTAINER_PRESERVATION\") === \"1\") {\n if (officeMigration.migrated.length > 0 || officeMigration.recovered.length > 0) {\n await provisioner.removeContainersForConversations(\n new Set([...officeMigration.migrated, ...officeMigration.recovered]),\n );\n }\n } else {\n provisioner.armContainerLayoutMigration(\n buildContainerBindTranslator({\n offices: registryOffices,\n workspaceRoot: workingDir,\n stateDir,\n }),\n );\n }\n}\nif (sandbox.type === \"gondolin\") {\n try {\n configureGondolinRuntime({\n limits: sandboxLimits,\n boostLimits: sandboxBoostLimits,\n });\n } catch (error) {\n handleStartupError(error);\n }\n}\nconst resourceController =\n sandbox.type === \"image\"\n ? provisioner\n : sandbox.type === \"gondolin\"\n ? gondolinResources\n : undefined;\n\nif (sandbox.type === \"image\" || sandbox.type === \"gondolin\") {\n ensureDirExists(workspace.skillsDir);\n ensureDirExists(workspace.eventsDir);\n ensureDirExists(workspace.agentsDir);\n try {\n writeFileSync(workspace.memoryPath, \"\", { flag: \"wx\" });\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n }\n}\n\nconst linkTokenStore = new InMemoryLinkTokenStore();\nconst sessionViewTokenStore = new InMemorySessionViewTokenStore();\nconst adminTokenStore = new InMemoryAdminTokenStore();\nsetInterval(() => linkTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => sessionViewTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => adminTokenStore.purge(), 5 * 60 * 1000).unref();\n\nfunction portalBaseUrl(): string | undefined {\n if (LINK_BASE_URL) return LINK_BASE_URL;\n if (LINK_PORT) return `http://localhost:${LINK_PORT}`;\n return undefined;\n}\n/** Idle timeout for managed sandboxes (10 minutes) */\nconst MANAGED_SANDBOX_IDLE_TIMEOUT_MS = 10 * 60 * 1000;\n\nif (provisioner) {\n await provisioner.reconcile();\n await provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);\n setInterval(\n () => provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS),\n MANAGED_SANDBOX_IDLE_TIMEOUT_MS,\n ).unref();\n}\n\nif (sandbox.type === \"gondolin\") {\n await reconcileGondolinRuntimes();\n setInterval(\n () => void stopIdleGondolinVms(MANAGED_SANDBOX_IDLE_TIMEOUT_MS),\n MANAGED_SANDBOX_IDLE_TIMEOUT_MS,\n ).unref();\n}\nconst botsByPlatform: Record<string, MessagingBot> = {};\n\n/**\n * Resolve which platform bot to use: an explicit platform, or the sole\n * running one. Mirrors event-file platform resolution.\n */\nfunction resolvePlatformBot(op: string, platform: string | undefined): [string, MessagingBot] {\n const available = Object.keys(botsByPlatform);\n const key = platform?.trim().toLowerCase() || (available.length === 1 ? available[0] : undefined);\n const bot = key ? botsByPlatform[key] : undefined;\n if (!bot) {\n throw new Error(\n platform\n ? `${op}: unknown platform '${platform}' (available: ${available.join(\", \") || \"none\"})`\n : `${op}: multiple platforms active (${available.join(\", \")}); specify platform`,\n );\n }\n return [key!, bot];\n}\n\n/** Extension `api.notify` backend: post into a conversation without a run. */\nconst platformNotifier: PlatformNotifier = async (conversationId, text, platform) => {\n const [key, bot] = resolvePlatformBot(\"notify\", platform);\n await bot.postMessage(conversationId, text);\n log.logInfo(`[notify] posted to ${key}/${conversationId} (${text.length} chars)`);\n};\n\n/** Extension `api.react` backend: add a reaction to a message. */\nconst platformReactor: PlatformReactor = async (conversationId, messageTs, emoji, platform) => {\n const [key, bot] = resolvePlatformBot(\"react\", platform);\n if (!bot.addReaction) {\n throw new Error(`react: platform '${key}' does not support reactions`);\n }\n await bot.addReaction(conversationId, messageTs, emoji);\n log.logInfo(`[react] :${emoji}: on ${key}/${conversationId}`);\n};\n\n/** Extension `api.uploadFile` backend: send a host file into a conversation. */\nconst platformUploader: PlatformUploader = async (conversationId, filePath, title, platform) => {\n const [key, bot] = resolvePlatformBot(\"upload\", platform);\n if (!bot.uploadFile) {\n throw new Error(`upload: platform '${key}' does not support file uploads`);\n }\n await bot.uploadFile(conversationId, filePath, title);\n log.logInfo(`[upload] ${filePath} to ${key}/${conversationId}`);\n};\n\n/** github_* tool backends: PR push/create and CI checks, host-side. */\nfunction requireGithubBot(op: string): GithubMessagingBot {\n const bot = botsByPlatform.github as GithubMessagingBot | undefined;\n if (!bot) {\n throw new Error(`${op}: the GitHub platform is not running`);\n }\n return bot;\n}\n\n/** slack_* tool backends: Block Kit posting/updating, host-side. */\nfunction requireSlackBot(op: string): SlackMessagingBotClass {\n const bot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\n if (!bot) {\n throw new Error(`${op}: the Slack platform is not running`);\n }\n return bot;\n}\n\n/** Extension `api.blockkit` backend: interactive Block Kit, Slack-only today. */\nconst platformBlockKit: PlatformBlockKit = {\n postBlocks: async (conversationId, message, platform) => {\n if (platform && platform !== \"slack\") {\n throw new Error(`blockkit: platform '${platform}' does not support Block Kit`);\n }\n const bot = requireSlackBot(\"blockkit\");\n const ts = message.threadTs\n ? await bot.postInThreadBlocks(conversationId, message.threadTs, message.text, message.blocks)\n : await bot.postMessageBlocks(conversationId, message.text, message.blocks);\n return { ts };\n },\n updateBlocks: async (conversationId, messageTs, message, platform) => {\n if (platform && platform !== \"slack\") {\n throw new Error(`blockkit: platform '${platform}' does not support Block Kit`);\n }\n await requireSlackBot(\"blockkit\").updateMessageBlocks(\n conversationId,\n messageTs,\n message.text,\n message.blocks,\n );\n },\n};\n\n/**\n * Platform capability pack factories — only when the corresponding bot is\n * configured. Factories, not instances: each runner materializes its own\n * pack so per-run bind state never crosses conversations.\n */\nfunction buildPlatformToolPackFactories(): PlatformToolPackFactory[] {\n const factories: PlatformToolPackFactory[] = [];\n if (hasSlack) {\n const platformSlackOps: PlatformSlackOps = {\n postBlocks: async (conversationId, { text, blocks, threadTs }) => {\n const bot = requireSlackBot(\"slack_blockkit\");\n const ts = threadTs\n ? await bot.postInThreadBlocks(conversationId, threadTs, text, blocks)\n : await bot.postMessageBlocks(conversationId, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, blocks);\n return { ts };\n },\n updateBlocks: async (conversationId, { ts, text, blocks, threadTs }) => {\n const bot = requireSlackBot(\"slack_blockkit\");\n await bot.updateMessageBlocks(conversationId, ts, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, blocks);\n },\n ownsBlockKitMessage: (conversationId, ts, threadTs) =>\n requireSlackBot(\"slack_blockkit\").ownsBlockKitMessage(conversationId, ts, threadTs),\n };\n factories.push(() => createSlackToolPack(platformSlackOps));\n }\n if (!hasGithub) return factories;\n const platformGithubOps: PlatformGithubOps = {\n pushAndCreatePr: (conversationId, request) =>\n requireGithubBot(\"github_pr\").ops.pushAndCreatePr(conversationId, request),\n getChecks: (conversationId, branch) =>\n requireGithubBot(\"github_checks\").ops.getChecks(conversationId, branch),\n getJobLog: (conversationId, jobId) =>\n requireGithubBot(\"github_checks\").ops.getJobLog(conversationId, jobId),\n getBuildLog: (conversationId, buildId) =>\n requireGithubBot(\"github_checks\").ops.getBuildLog(conversationId, buildId),\n replyToReviewThread: (conversationId, commentId, body) =>\n requireGithubBot(\"github_review_reply\").ops.replyToReviewThread(\n conversationId,\n commentId,\n body,\n ),\n syncRepo: (conversationId, branch) =>\n requireGithubBot(\"github_sync\").ops.syncRepo(conversationId, branch),\n readGithub: (conversationId, request) =>\n requireGithubBot(\"github_read\").ops.readGithub(conversationId, request),\n manageIssue: (conversationId, request) =>\n requireGithubBot(\"github_issue\").ops.manageIssue(conversationId, request),\n };\n factories.push(() => createGithubToolPack(platformGithubOps));\n return factories;\n}\n\nconst handler = createConversationRuntime({\n workspace,\n sandbox,\n vaultManager,\n provisioner,\n resourceController,\n linkTokenStore,\n sessionViewTokenStore,\n adminTokenStore,\n portalBaseUrl: portalBaseUrl(),\n platformNotifier,\n platformReactor,\n platformUploader,\n platformBlockKit,\n platformToolPackFactories: buildPlatformToolPackFactories(),\n});\n\nconst sandboxDesc =\n sandbox.type === \"host\"\n ? \"host\"\n : sandbox.type === \"container\"\n ? `container:${sandbox.container}`\n : sandbox.type === \"image\"\n ? `image:${sandbox.image}`\n : sandbox.type === \"gondolin\"\n ? `gondolin:${sandbox.profile}`\n : sandbox.type === \"firecracker\"\n ? `firecracker:${sandbox.vmId}`\n : `cloudflare:${sandbox.sandboxId}`;\nlog.logStartup(workingDir, sandboxDesc);\nlogHarnessStartupSummary();\n\n/**\n * One-look confirmation of the harness runtime surface, aimed at upgrade\n * verification: config moved from ~/.pi to ~/.mikan with no fallback, so a\n * missing auth.json here is the first thing to check when runs fail.\n */\nfunction logHarnessStartupSummary(): void {\n const proxy =\n process.env.HTTPS_PROXY ??\n process.env.https_proxy ??\n process.env.HTTP_PROXY ??\n process.env.http_proxy;\n log.logInfo(\n `HTTP dispatcher: idle timeout ${httpIdleTimeoutMs}ms${proxy ? `, proxy ${proxy}` : \", no proxy\"}`,\n );\n\n const authPath = defaultAuthPath();\n if (existsSync(authPath)) {\n try {\n const providers = Object.keys(JSON.parse(readFileSync(authPath, \"utf-8\")) as object);\n log.logInfo(`Harness auth: ${authPath} (providers: ${providers.join(\", \") || \"none\"})`);\n } catch {\n log.logWarning(`Harness auth: ${authPath} exists but is not valid JSON`);\n }\n } else {\n log.logInfo(`Harness auth: ${authPath} missing — provider keys come from env vars only`);\n }\n\n const modelsPath = defaultModelsJsonPath();\n log.logInfo(\n existsSync(modelsPath)\n ? `Harness models.json: ${modelsPath}`\n : `Harness models.json: none (${modelsPath}) — built-in providers only`,\n );\n}\n\nif (hasSlack) {\n const slackMessagingBotToken = SLACK_BOT_TOKEN;\n const slackAppToken = SLACK_APP_TOKEN;\n if (!slackMessagingBotToken || !slackAppToken) {\n throw new Error(\"Slack startup requires both SLACK_APP_TOKEN and SLACK_BOT_TOKEN\");\n }\n const slackMessagingBot = new SlackMessagingBotClass(handler, {\n appToken: slackAppToken,\n botToken: slackMessagingBotToken,\n workspace,\n });\n botsByPlatform.slack = slackMessagingBot;\n log.logInfo(\"Platform: Slack\");\n}\nif (hasTelegram) {\n const telegramToken = TELEGRAM_BOT_TOKEN;\n if (!telegramToken) {\n throw new Error(\"Telegram startup requires TELEGRAM_BOT_TOKEN\");\n }\n const telegramMessagingBot = new TelegramMessagingBot(handler, {\n token: telegramToken,\n workspace,\n });\n botsByPlatform.telegram = telegramMessagingBot;\n log.logInfo(\"Platform: Telegram\");\n}\nif (hasDiscord) {\n const discordToken = DISCORD_BOT_TOKEN;\n if (!discordToken) {\n throw new Error(\"Discord startup requires DISCORD_BOT_TOKEN\");\n }\n const discordMessagingBot = new DiscordMessagingBot(handler, {\n token: discordToken,\n workspace,\n });\n botsByPlatform.discord = discordMessagingBot;\n log.logInfo(\"Platform: Discord\");\n}\nif (hasGithub) {\n if (!GITHUB_APP_ID || !GITHUB_INSTALLATION_ID) {\n throw new Error(\"GitHub startup requires GITHUB_APP_ID and GITHUB_INSTALLATION_ID\");\n }\n // Env vars flatten PEM newlines to literal `\\n`; a key file avoids that.\n const githubPrivateKey = GITHUB_APP_PRIVATE_KEY_PATH\n ? readFileSync(GITHUB_APP_PRIVATE_KEY_PATH, \"utf-8\")\n : GITHUB_APP_PRIVATE_KEY?.replace(/\\\\n/g, \"\\n\");\n if (!githubPrivateKey) {\n throw new Error(\n \"GitHub startup requires GITHUB_APP_PRIVATE_KEY or GITHUB_APP_PRIVATE_KEY_PATH\",\n );\n }\n const pollIntervalSeconds = GITHUB_POLL_INTERVAL ? parseInt(GITHUB_POLL_INTERVAL, 10) : NaN;\n const githubMessagingBot = new GithubMessagingBot(handler, {\n appId: GITHUB_APP_ID,\n privateKey: githubPrivateKey,\n installationId: GITHUB_INSTALLATION_ID,\n repos: GITHUB_REPOS\n ? GITHUB_REPOS.split(\",\")\n .map((repo) => repo.trim())\n .filter(Boolean)\n : [],\n pollIntervalMs:\n (Number.isFinite(pollIntervalSeconds) && pollIntervalSeconds > 0 ? pollIntervalSeconds : 60) *\n 1000,\n workspace,\n syncStatePath: join(stateDir, \"github-sync.json\"),\n // Host-side GCP creds (e.g. a WIF external_account file) unlock Cloud\n // Build logs in github_checks; without them external CI degrades to\n // guidance text. Credentials never enter the sandbox.\n cloudBuild: GOOGLE_APPLICATION_CREDENTIALS\n ? {\n tokenProvider: new GcpTokenProvider({\n credentialsPath: GOOGLE_APPLICATION_CREDENTIALS,\n }),\n projectFallback: GOOGLE_CLOUD_PROJECT,\n }\n : undefined,\n });\n botsByPlatform.github = githubMessagingBot;\n log.logInfo(\n `Platform: GitHub${GOOGLE_APPLICATION_CREDENTIALS ? \" (Cloud Build logs enabled)\" : \"\"}`,\n );\n}\n\nif (LINK_PORT) {\n startWebServer({\n port: LINK_PORT,\n linkTokenStore,\n vaultManager,\n notify: async (platform, conversationId, message) => {\n const bot = botsByPlatform[platform];\n if (bot) await bot.postMessage(conversationId, message);\n },\n sessionViewTokenStore,\n sessionViewInteractive: { handler, botsByPlatform },\n adminOptions: { adminTokenStore, workspace, runtime: handler, sandbox, botsByPlatform },\n });\n}\n\n// Start events watcher with explicit platform routing\nconst eventsWatcher = new EventsWatcher(workspace.eventsDir, botsByPlatform);\nconst slackMessagingBot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\nif (slackMessagingBot) {\n slackMessagingBot.setEventsWatcher(eventsWatcher);\n}\neventsWatcher.start();\n\n// Handle shutdown\nasync function shutdown(): Promise<void> {\n await handler.shutdown();\n eventsWatcher.stop();\n await stopAllGondolinRuntimes();\n await Sentry.close(5000);\n process.exit(0);\n}\n\nprocess.on(\"SIGINT\", shutdown);\nprocess.on(\"SIGTERM\", shutdown);\n\n// Start all bots\nawait Promise.all(\n Object.values(botsByPlatform).map((bot) =>\n bot.start().catch((err) => {\n log.logWarning(\"Failed to start bot\", err instanceof Error ? err.message : String(err));\n process.exit(1);\n }),\n ),\n);\n\n// Drain the container layout migration off the hot path; every unit is\n// idempotent, so an interrupted sweep simply resumes on the next boot.\nif (provisioner) {\n void provisioner.sweepContainerLayoutMigration().catch((err) => {\n log.logWarning(\n \"Container layout sweep failed\",\n err instanceof Error ? err.message : String(err),\n );\n });\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { OfficeAddress, OfficeKey, PlatformName } from "./types.js";
1
+ import type { OfficeAddress, OfficeKey, PlatformName } from "../types.js";
2
2
  /** Construct the canonical identity used by future office consumers. */
3
3
  export declare function createOfficeAddress(platform: PlatformName, conversationId: string): OfficeAddress;
4
4
  /** Validate an untrusted runtime value as a canonical office address. */
@@ -9,24 +9,23 @@ export declare function assertPlatformName(value: string): PlatformName;
9
9
  export declare function assertConversationId(value: string): string;
10
10
  /** Derive a readable diagnostic key whose digest remains the identity authority. */
11
11
  export declare function officeKey(address: OfficeAddress): OfficeKey;
12
- /** Resolve the persistent workspace directory for an office. */
12
+ /**
13
+ * Resolve the persistent workspace directory for an office.
14
+ * Module-internal: registry/migration record target paths with it. Callers
15
+ * outside `src/office/` use the `Office` value's `dir` field instead.
16
+ */
13
17
  export declare function officeDir(workspaceRoot: string, address: OfficeAddress): string;
14
- /** Resolve the host-only state directory for an office. */
15
- export declare function officeStateDir(stateDir: string, address: OfficeAddress): string;
16
18
  /**
17
- * The directory segment naming an office under a workspace root — the same
18
- * segment on the host and inside the sandbox runtime, so mounts stay a plain
19
- * root swap. This is the office key: platform-scoped and collision-resistant,
20
- * so two platforms sharing a raw conversation id can never share a directory.
21
- * Raw ids reach the filesystem only through the office registry's migration
22
- * journal (ADR 0005).
19
+ * Resolve the host-only state directory for an office.
20
+ *
21
+ * Transitional: settings/packages/extension callers that only hold a
22
+ * `stateDir` string keep using this until their option bags carry an
23
+ * `Office` value (which exposes the same path as `stateDir`).
23
24
  */
24
- export declare function officeDirName(address: OfficeAddress): string;
25
- /** The host working directory for an office (see officeDirName). */
26
- export declare function conversationOfficeDir(workspaceRoot: string, address: OfficeAddress): string;
25
+ export declare function officeStateDir(stateDir: string, address: OfficeAddress): string;
27
26
  /** Compare canonical office identities without relying on their readable key. */
28
27
  export declare function sameOffice(left: OfficeAddress, right: OfficeAddress): boolean;
29
28
  /** Validate a persisted or externally supplied office key. */
30
29
  export declare function assertOfficeKey(value: string): OfficeKey;
31
30
  export declare function isOfficeKey(value: unknown): value is OfficeKey;
32
- //# sourceMappingURL=office-address.d.ts.map
31
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/office/address.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ1E,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,CAIjG;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CASnE;AAOD,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAG9D;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB1D;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAQ3D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAE/E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAE/E;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAO7E;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAIxD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D"}
@@ -60,28 +60,23 @@ export function officeKey(address) {
60
60
  .slice(0, OFFICE_KEY_DIGEST_LENGTH);
61
61
  return `${OFFICE_KEY_VERSION}-${normalized.platform}-${readable}-${digest}`;
62
62
  }
63
- /** Resolve the persistent workspace directory for an office. */
63
+ /**
64
+ * Resolve the persistent workspace directory for an office.
65
+ * Module-internal: registry/migration record target paths with it. Callers
66
+ * outside `src/office/` use the `Office` value's `dir` field instead.
67
+ */
64
68
  export function officeDir(workspaceRoot, address) {
65
69
  return join(workspaceRoot, officeKey(address));
66
70
  }
67
- /** Resolve the host-only state directory for an office. */
68
- export function officeStateDir(stateDir, address) {
69
- return join(stateDir, "conversations", officeKey(address));
70
- }
71
71
  /**
72
- * The directory segment naming an office under a workspace root — the same
73
- * segment on the host and inside the sandbox runtime, so mounts stay a plain
74
- * root swap. This is the office key: platform-scoped and collision-resistant,
75
- * so two platforms sharing a raw conversation id can never share a directory.
76
- * Raw ids reach the filesystem only through the office registry's migration
77
- * journal (ADR 0005).
72
+ * Resolve the host-only state directory for an office.
73
+ *
74
+ * Transitional: settings/packages/extension callers that only hold a
75
+ * `stateDir` string keep using this until their option bags carry an
76
+ * `Office` value (which exposes the same path as `stateDir`).
78
77
  */
79
- export function officeDirName(address) {
80
- return officeKey(address);
81
- }
82
- /** The host working directory for an office (see officeDirName). */
83
- export function conversationOfficeDir(workspaceRoot, address) {
84
- return join(workspaceRoot, officeDirName(address));
78
+ export function officeStateDir(stateDir, address) {
79
+ return join(stateDir, "conversations", officeKey(address));
85
80
  }
86
81
  /** Compare canonical office identities without relying on their readable key. */
87
82
  export function sameOffice(left, right) {
@@ -115,4 +110,4 @@ function patternMatchesOfficeKey(value) {
115
110
  function isRecord(value) {
116
111
  return typeof value === "object" && value !== null && !Array.isArray(value);
117
112
  }
118
- //# sourceMappingURL=office-address.js.map
113
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/office/address.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport type { OfficeAddress, OfficeKey, PlatformName } from \"../types.js\";\n\nconst OFFICE_KEY_VERSION = \"v1\";\nconst OFFICE_KEY_DOMAIN = \"office-address-v1\";\nconst OFFICE_KEY_DIGEST_LENGTH = 16;\nconst READABLE_ID_LENGTH = 32;\nconst PLATFORM_NAMES = new Set<PlatformName>([\"slack\", \"discord\", \"telegram\", \"github\"]);\n\n/** Construct the canonical identity used by future office consumers. */\nexport function createOfficeAddress(platform: PlatformName, conversationId: string): OfficeAddress {\n assertPlatformName(platform);\n assertConversationId(conversationId);\n return Object.freeze({ platform, conversationId });\n}\n\n/** Validate an untrusted runtime value as a canonical office address. */\nexport function validateOfficeAddress(value: unknown): OfficeAddress {\n if (!isRecord(value)) throw new Error(\"Office address must be an object\");\n if (typeof value.platform !== \"string\") {\n throw new Error(\"Office address platform must be a string\");\n }\n if (typeof value.conversationId !== \"string\") {\n throw new Error(\"Office address conversation id must be a string\");\n }\n return createOfficeAddress(assertPlatformName(value.platform), value.conversationId);\n}\n\n/** Return true only for a supported platform name. */\nfunction isPlatformName(value: unknown): value is PlatformName {\n return typeof value === \"string\" && PLATFORM_NAMES.has(value as PlatformName);\n}\n\n/** Validate a platform name and return it for typed callers. */\nexport function assertPlatformName(value: string): PlatformName {\n if (!isPlatformName(value)) throw new Error(`Unsupported platform: ${JSON.stringify(value)}`);\n return value;\n}\n\n/** Validate a raw platform conversation identifier before it enters storage. */\nexport function assertConversationId(value: string): string {\n if (value.length === 0 || value === \".\" || value === \"..\") {\n throw new Error(\"Conversation id must be non-empty and not a path marker\");\n }\n for (const character of value) {\n const code = character.codePointAt(0) ?? 0;\n if (\n character === \"/\" ||\n character === \"\\\\\" ||\n code === 0 ||\n code <= 0x1f ||\n (code >= 0x7f && code <= 0x9f)\n ) {\n throw new Error(\"Conversation id must not contain path separators or control characters\");\n }\n }\n return value;\n}\n\n/** Derive a readable diagnostic key whose digest remains the identity authority. */\nexport function officeKey(address: OfficeAddress): OfficeKey {\n const normalized = validateOfficeAddress(address);\n const readable = readableConversationId(normalized.conversationId);\n const digest = createHash(\"sha256\")\n .update(`${OFFICE_KEY_DOMAIN}\\0${normalized.platform}\\0${normalized.conversationId}`)\n .digest(\"hex\")\n .slice(0, OFFICE_KEY_DIGEST_LENGTH);\n return `${OFFICE_KEY_VERSION}-${normalized.platform}-${readable}-${digest}` as OfficeKey;\n}\n\n/**\n * Resolve the persistent workspace directory for an office.\n * Module-internal: registry/migration record target paths with it. Callers\n * outside `src/office/` use the `Office` value's `dir` field instead.\n */\nexport function officeDir(workspaceRoot: string, address: OfficeAddress): string {\n return join(workspaceRoot, officeKey(address));\n}\n\n/**\n * Resolve the host-only state directory for an office.\n *\n * Transitional: settings/packages/extension callers that only hold a\n * `stateDir` string keep using this until their option bags carry an\n * `Office` value (which exposes the same path as `stateDir`).\n */\nexport function officeStateDir(stateDir: string, address: OfficeAddress): string {\n return join(stateDir, \"conversations\", officeKey(address));\n}\n\n/** Compare canonical office identities without relying on their readable key. */\nexport function sameOffice(left: OfficeAddress, right: OfficeAddress): boolean {\n const leftAddress = validateOfficeAddress(left);\n const rightAddress = validateOfficeAddress(right);\n return (\n leftAddress.platform === rightAddress.platform &&\n leftAddress.conversationId === rightAddress.conversationId\n );\n}\n\n/** Validate a persisted or externally supplied office key. */\nexport function assertOfficeKey(value: string): OfficeKey {\n const pattern = /^v1-(slack|discord|telegram|github)-[a-z0-9]+(?:-[a-z0-9]+)*-[a-f0-9]{16}$/;\n if (!pattern.test(value)) throw new Error(`Invalid office key: ${JSON.stringify(value)}`);\n return value as OfficeKey;\n}\n\nexport function isOfficeKey(value: unknown): value is OfficeKey {\n return typeof value === \"string\" && patternMatchesOfficeKey(value);\n}\n\nfunction readableConversationId(conversationId: string): string {\n const readable = conversationId\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, READABLE_ID_LENGTH)\n .replace(/-+$/g, \"\");\n return readable || \"conversation\";\n}\n\nfunction patternMatchesOfficeKey(value: string): boolean {\n return /^v1-(slack|discord|telegram|github)-[a-z0-9]+(?:-[a-z0-9]+)*-[a-f0-9]{16}$/.test(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The Conversation office module: canonical identity (`address.ts`), the
3
+ * Workspace/Office layout values (`layout.ts`), the durable registry journal
4
+ * (`registry.ts`), and the boot-time legacy migration (`migration.ts`).
5
+ * Everything outside `src/office/` imports from this barrel.
6
+ */
7
+ export { assertConversationId, assertOfficeKey, assertPlatformName, createOfficeAddress, isOfficeKey, officeKey, officeStateDir, sameOffice, validateOfficeAddress, } from "./address.js";
8
+ export { createWorkspace, RESERVED_WORKSPACE_NAMES, type Office, type Workspace, } from "./layout.js";
9
+ export { listRegisteredOffices, OfficeRegistry, resolveOwnedOfficeAddress } from "./registry.js";
10
+ export { buildContainerBindTranslator, formatUnmigratedOfficesError, migrateLegacyOffices, } from "./migration.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/office/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,KAAK,MAAM,EACX,KAAK,SAAS,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The Conversation office module: canonical identity (`address.ts`), the
3
+ * Workspace/Office layout values (`layout.ts`), the durable registry journal
4
+ * (`registry.ts`), and the boot-time legacy migration (`migration.ts`).
5
+ * Everything outside `src/office/` imports from this barrel.
6
+ */
7
+ export { assertConversationId, assertOfficeKey, assertPlatformName, createOfficeAddress, isOfficeKey, officeKey, officeStateDir, sameOffice, validateOfficeAddress, } from "./address.js";
8
+ export { createWorkspace, RESERVED_WORKSPACE_NAMES, } from "./layout.js";
9
+ export { listRegisteredOffices, OfficeRegistry, resolveOwnedOfficeAddress } from "./registry.js";
10
+ export { buildContainerBindTranslator, formatUnmigratedOfficesError, migrateLegacyOffices, } from "./migration.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/office/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,wBAAwB,GAGzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * The Conversation office module: canonical identity (`address.ts`), the\n * Workspace/Office layout values (`layout.ts`), the durable registry journal\n * (`registry.ts`), and the boot-time legacy migration (`migration.ts`).\n * Everything outside `src/office/` imports from this barrel.\n */\nexport {\n assertConversationId,\n assertOfficeKey,\n assertPlatformName,\n createOfficeAddress,\n isOfficeKey,\n officeKey,\n officeStateDir,\n sameOffice,\n validateOfficeAddress,\n} from \"./address.js\";\nexport {\n createWorkspace,\n RESERVED_WORKSPACE_NAMES,\n type Office,\n type Workspace,\n} from \"./layout.js\";\nexport { listRegisteredOffices, OfficeRegistry, resolveOwnedOfficeAddress } from \"./registry.js\";\nexport {\n buildContainerBindTranslator,\n formatUnmigratedOfficesError,\n migrateLegacyOffices,\n} from \"./migration.js\";\n"]}
@@ -0,0 +1,20 @@
1
+ import type { Workspace } from "./types.js";
2
+ export type { Office, Workspace } from "./types.js";
3
+ /**
4
+ * Workspace-root entries that are shared infrastructure, never office dirs.
5
+ * The single definition behind boot-time directory setup, the events
6
+ * watcher, the workspace projection, and the migration's legacy-dir scan.
7
+ */
8
+ export declare const RESERVED_WORKSPACE_NAMES: ReadonlySet<string>;
9
+ /**
10
+ * Construct the Workspace value for a deployment. One construction site per
11
+ * process (main.ts for the daemon; CLI subcommands and tests build their
12
+ * own). The value owns the registry instance and the recorded-office cache
13
+ * that office materialization uses on hot paths, so there is no process-wide
14
+ * registry state.
15
+ */
16
+ export declare function createWorkspace(options: {
17
+ root: string;
18
+ stateDir: string;
19
+ }): Workspace;
20
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/office/layout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,YAAY,CAAC;AAIpD,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAExD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAsDtF"}