pi-roundtable 0.33.0 → 0.35.0

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 (261) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/README.zh-TW.md +1 -1
  4. package/docs/plugins.md +2 -2
  5. package/package.json +1 -2
  6. package/src/cli/checks/configuration.ts +2 -2
  7. package/src/cli/checks/database.ts +2 -2
  8. package/src/cli/checks/identity.ts +1 -1
  9. package/src/cli/checks/model.ts +1 -1
  10. package/src/cli/cli.ts +2 -2
  11. package/src/cli/principal.ts +1 -1
  12. package/src/cli/project.ts +2 -2
  13. package/src/cli/runtime.ts +3 -3
  14. package/src/cli/start.ts +1 -1
  15. package/src/core/agents/agent-claim.ts +4 -4
  16. package/src/core/agents/agent-dashboard.ts +3 -3
  17. package/src/core/agents/agent-messages.ts +2 -2
  18. package/src/core/agents/agent-outbox.ts +1 -1
  19. package/src/core/agents/agent-ports.ts +1 -1
  20. package/src/core/agents/agent-prompt.ts +4 -4
  21. package/src/core/agents/agent-rules.ts +1 -1
  22. package/src/core/agents/agent-schema.ts +4 -1
  23. package/src/core/agents/agent-settings.ts +2 -2
  24. package/src/core/agents/agent-store.ts +9 -9
  25. package/src/core/agents/agent-team-fixture.ts +4 -3
  26. package/src/core/agents/agent-team.ts +12 -16
  27. package/src/core/agents/agent-tools.ts +15 -15
  28. package/src/core/agents/avatar-refresh.ts +1 -1
  29. package/src/core/agents/avatar-studio.ts +2 -2
  30. package/src/core/agents/group-round.ts +2 -2
  31. package/src/core/agents/group-turns.ts +1 -1
  32. package/src/core/agents/helper-create.ts +24 -40
  33. package/src/core/agents/helper-modes.ts +2 -2
  34. package/src/core/agents/helper-preset-ops.ts +207 -0
  35. package/src/core/agents/helper-preset-tools.ts +109 -0
  36. package/src/core/agents/helper-presets.ts +128 -0
  37. package/src/core/agents/helper-test-kit.ts +1 -1
  38. package/src/core/agents/helper-tools.ts +42 -22
  39. package/src/core/agents/helper-work.ts +1 -1
  40. package/src/core/agents/message-target.ts +1 -1
  41. package/src/core/agents/routes.ts +1 -1
  42. package/src/core/agents/team-approval.ts +2 -2
  43. package/src/core/agents/team-editing.ts +2 -2
  44. package/src/core/agents/team-keys.ts +1 -1
  45. package/src/core/agents/team-layout.ts +1 -1
  46. package/src/core/agents/team-options.ts +4 -4
  47. package/src/core/agents/team-selection.ts +1 -1
  48. package/src/core/agents/team-status.ts +1 -1
  49. package/src/core/agents/team-text.ts +3 -3
  50. package/src/core/agents/team-turn-types.ts +7 -7
  51. package/src/core/agents/team-turns.ts +3 -3
  52. package/src/core/attachments/attachment-fetcher.ts +1 -1
  53. package/src/core/attachments/attachment-port.ts +2 -2
  54. package/src/core/attachments/attachment-retention.ts +3 -3
  55. package/src/core/attachments/attachment-store.ts +2 -2
  56. package/src/core/attachments/model-images.ts +1 -1
  57. package/src/core/attachments/turn-attachments.ts +1 -1
  58. package/src/core/builtin/agent-server.ts +17 -10
  59. package/src/core/builtin/channel-context.ts +2 -2
  60. package/src/core/builtin/discord-admin.ts +2 -2
  61. package/src/core/builtin/discord.ts +4 -3
  62. package/src/core/{identity/identity-plugin.ts → builtin/identity.ts} +15 -12
  63. package/src/core/builtin/modules.ts +12 -12
  64. package/src/core/builtin/prompts.ts +3 -3
  65. package/src/core/builtin/seeds.ts +1 -1
  66. package/src/core/builtin/session-tool.ts +1 -1
  67. package/src/core/builtin/skills.ts +3 -3
  68. package/src/core/builtin/stores.ts +10 -5
  69. package/src/core/builtin/threads.ts +2 -2
  70. package/src/core/builtin/worker-sessions.ts +3 -3
  71. package/src/core/config/access.ts +3 -3
  72. package/src/core/config/adapters.ts +1 -1
  73. package/src/core/config/config-schema.ts +9 -3
  74. package/src/core/config/config.ts +9 -10
  75. package/src/core/config/ops.ts +1 -1
  76. package/src/core/config/peer-bots.ts +74 -0
  77. package/src/core/config/routing.ts +1 -1
  78. package/src/core/contract/attachments.ts +1 -1
  79. package/src/core/contract/channels.ts +3 -5
  80. package/src/core/contract/runtime.ts +6 -6
  81. package/src/core/contract/surface.ts +3 -3
  82. package/src/core/conversations/conversation-registry.ts +1 -1
  83. package/src/core/conversations/conversation-retention.ts +2 -2
  84. package/src/core/conversations/conversation-store.ts +1 -1
  85. package/src/core/conversations/conversations-plugin.ts +2 -2
  86. package/src/core/db/migrations.ts +2 -2
  87. package/src/core/discord/agent-commands.ts +2 -2
  88. package/src/core/discord/agent-discord.ts +1 -1
  89. package/src/core/discord/agent-panel.ts +1 -1
  90. package/src/core/discord/card-audience.ts +1 -1
  91. package/src/core/discord/card-copies.ts +1 -1
  92. package/src/core/discord/channel-context.ts +1 -1
  93. package/src/core/discord/channel-executor.ts +1 -1
  94. package/src/core/discord/channel-operations.ts +1 -1
  95. package/src/core/discord/command-collection.ts +1 -1
  96. package/src/core/discord/compose-commands.ts +1 -1
  97. package/src/core/discord/context-images.ts +1 -1
  98. package/src/core/discord/discord-owners.ts +2 -2
  99. package/src/core/discord/discord-surface.ts +2 -2
  100. package/src/core/discord/member-events.ts +2 -2
  101. package/src/core/discord/message-changes.ts +1 -1
  102. package/src/core/discord/owner-cards.ts +1 -1
  103. package/src/core/discord/owner-command.ts +1 -1
  104. package/src/core/discord/schedule-commands.ts +1 -1
  105. package/src/core/domain/conversation.ts +5 -3
  106. package/src/core/{models.ts → domain/models.ts} +1 -1
  107. package/src/core/domain/ports.ts +2 -2
  108. package/src/core/{sessions.ts → domain/sessions.ts} +6 -6
  109. package/src/core/{define-roundtable.ts → host/define-roundtable.ts} +29 -29
  110. package/src/core/{drain.ts → host/drain.ts} +2 -7
  111. package/src/core/{events.ts → host/events.ts} +2 -2
  112. package/src/core/{host-background.ts → host/host-background.ts} +3 -3
  113. package/src/core/{host-registration.ts → host/host-registration.ts} +30 -30
  114. package/src/core/{host.ts → host/host.ts} +19 -15
  115. package/src/core/http/listeners.ts +2 -2
  116. package/src/core/http/websocket.ts +1 -1
  117. package/src/core/identity/access-policy.ts +8 -8
  118. package/src/core/identity/actor-facts.ts +1 -1
  119. package/src/core/identity/caching-principal-store.ts +1 -1
  120. package/src/core/identity/config-owner.ts +1 -1
  121. package/src/core/identity/contact.ts +2 -2
  122. package/src/core/identity/identity-links.ts +2 -2
  123. package/src/core/identity/identity-port.ts +2 -2
  124. package/src/core/identity/identity-schema.ts +1 -1
  125. package/src/core/identity/identity-service.ts +3 -3
  126. package/src/core/identity/identity-view.ts +1 -1
  127. package/src/core/{identity.ts → identity/owner-identity.ts} +1 -1
  128. package/src/core/identity/person-profiles.ts +1 -1
  129. package/src/core/identity/plugin-identities.ts +2 -2
  130. package/src/core/identity/principal-reads.ts +1 -1
  131. package/src/core/identity/principal-store.ts +1 -1
  132. package/src/core/identity/principal-types.ts +1 -1
  133. package/src/core/identity/seen-throttle.ts +1 -1
  134. package/src/core/{speakers.ts → identity/speakers.ts} +3 -6
  135. package/src/core/images/codex-images-plugin.ts +3 -3
  136. package/src/core/interactions/prompts.ts +1 -1
  137. package/src/core/judging/confirmation-judge.ts +1 -1
  138. package/src/core/judging/effort-judge.ts +2 -2
  139. package/src/core/judging/model-judge.ts +1 -1
  140. package/src/core/modes/conversation-modes.ts +4 -4
  141. package/src/core/modes/mode-inheritance.ts +1 -1
  142. package/src/core/modes/modes-plugin.ts +2 -2
  143. package/src/core/modules/background/background-turns.ts +4 -4
  144. package/src/core/modules/delegation/delegate.ts +3 -3
  145. package/src/core/modules/delegation/delegator.ts +4 -4
  146. package/src/core/modules/delegation/web-research-worker.ts +2 -2
  147. package/src/core/modules/delegation/worker-session.ts +5 -2
  148. package/src/core/modules/discord-admin/discord-admin.ts +1 -1
  149. package/src/core/modules/host-shell/shell-policy.ts +1 -1
  150. package/src/core/modules/memory/owner-memory-store.ts +1 -1
  151. package/src/core/modules/memory/owner-memory.ts +6 -3
  152. package/src/core/modules/notify/notify.ts +4 -1
  153. package/src/core/modules/notify/session-notify.ts +3 -3
  154. package/src/core/modules/prompts/prompt-documents.ts +1 -1
  155. package/src/core/modules/schedules/precheck-tools.ts +4 -4
  156. package/src/core/modules/schedules/prechecks.ts +2 -2
  157. package/src/core/modules/schedules/recurrence.ts +6 -1
  158. package/src/core/modules/schedules/schedule-prechecks.ts +4 -4
  159. package/src/core/modules/schedules/schedule-store.ts +2 -2
  160. package/src/core/modules/schedules/schedule-tools.ts +4 -4
  161. package/src/core/modules/schedules/scheduled-turn-text.ts +1 -1
  162. package/src/core/modules/schedules/scheduler.ts +3 -3
  163. package/src/core/modules/schedules/schedules.ts +5 -5
  164. package/src/core/modules/skills/missing-warning.ts +1 -1
  165. package/src/core/modules/skills/package-skills.ts +1 -1
  166. package/src/core/modules/skills/skill-registry.ts +2 -2
  167. package/src/core/modules/skills/skill-rules.ts +1 -1
  168. package/src/core/modules/skills/skill-tools.ts +1 -1
  169. package/src/core/ops/error-reporter.ts +2 -2
  170. package/src/core/ops/ops-alerts.ts +1 -1
  171. package/src/core/{define.ts → plugin-api/define.ts} +18 -20
  172. package/src/core/{event-types.ts → plugin-api/event-types.ts} +1 -1
  173. package/src/core/{holds.ts → plugin-api/holds.ts} +3 -3
  174. package/src/core/{plugin-removed.ts → plugin-api/plugin-removed.ts} +2 -2
  175. package/src/core/{plugin.ts → plugin-api/plugin.ts} +26 -26
  176. package/src/core/{services.ts → plugin-api/services.ts} +28 -28
  177. package/src/core/{tool-turn.ts → plugin-api/tool-turn.ts} +12 -5
  178. package/src/core/presence/delivery-router.ts +1 -1
  179. package/src/core/presence/direct-channels.ts +1 -1
  180. package/src/core/registry/chat-commands.ts +1 -1
  181. package/src/core/registry/contributions.ts +11 -11
  182. package/src/core/registry/providers.ts +2 -2
  183. package/src/core/registry/services.ts +2 -2
  184. package/src/core/registry/surface-service.ts +1 -1
  185. package/src/core/routing/actor-of.ts +1 -1
  186. package/src/core/routing/channel-queue.ts +2 -2
  187. package/src/core/routing/channel-router.ts +3 -3
  188. package/src/core/routing/claim-events.ts +2 -2
  189. package/src/core/routing/conversation-turns.ts +10 -6
  190. package/src/core/routing/forward-join.ts +1 -1
  191. package/src/core/routing/message-observers.ts +1 -1
  192. package/src/core/routing/message-text.ts +1 -1
  193. package/src/core/routing/peer-bots.ts +6 -74
  194. package/src/core/routing/queued-messages.ts +2 -2
  195. package/src/core/routing/settle-turn.ts +1 -1
  196. package/src/core/routing/surface-port.ts +3 -3
  197. package/src/core/runtime/ask-questions.ts +1 -1
  198. package/src/core/runtime/bridge-guard.ts +5 -5
  199. package/src/core/runtime/chat-only.ts +1 -1
  200. package/src/core/runtime/conversation-sessions.ts +2 -2
  201. package/src/core/runtime/extensions/agent-prompt.ts +1 -1
  202. package/src/core/runtime/extensions/ask-user-text.ts +5 -1
  203. package/src/core/runtime/extensions/ask-user.ts +4 -1
  204. package/src/core/runtime/extensions/card-ask.ts +1 -1
  205. package/src/core/runtime/extensions/confirmation-fixture.ts +1 -1
  206. package/src/core/runtime/extensions/confirmation-gate-extension.ts +1 -1
  207. package/src/core/runtime/extensions/confirmation-gate.ts +5 -5
  208. package/src/core/runtime/extensions/gate-refusals.ts +5 -2
  209. package/src/core/runtime/extensions/held-calls.ts +2 -2
  210. package/src/core/runtime/extensions/hold-describer.ts +3 -3
  211. package/src/core/runtime/extensions/hold-lookups.ts +4 -4
  212. package/src/core/runtime/extensions/persona-prompt.ts +1 -1
  213. package/src/core/runtime/extensions/prompt-read.ts +1 -1
  214. package/src/core/runtime/extensions/yolo.ts +1 -1
  215. package/src/core/runtime/interim-text.ts +1 -1
  216. package/src/core/runtime/pi-agent-runtime.ts +4 -4
  217. package/src/core/runtime/running-turn.ts +1 -1
  218. package/src/core/runtime/runtime-plugin.ts +13 -8
  219. package/src/core/runtime/runtime-types.ts +14 -10
  220. package/src/core/runtime/session-conversation.ts +3 -3
  221. package/src/core/runtime/session-factory.ts +5 -5
  222. package/src/core/runtime/thinking-level.ts +2 -2
  223. package/src/core/{tool-tiers.ts → runtime/tool-tiers.ts} +5 -5
  224. package/src/core/runtime/turn-answer.ts +1 -1
  225. package/src/core/runtime/turn-budget.ts +1 -1
  226. package/src/core/runtime/turn-limits.ts +1 -1
  227. package/src/core/runtime/turn-tools.ts +2 -2
  228. package/src/core/runtime/worker-task.ts +1 -1
  229. package/src/core/shared/attach-file-tool.ts +1 -1
  230. package/src/core/shared/child-env.ts +3 -5
  231. package/src/core/shared/delegate-tool.ts +1 -1
  232. package/src/core/shared/generate-image-tool.ts +1 -1
  233. package/src/core/{modules/background → shared}/personal-target.ts +2 -2
  234. package/src/core/{reply-files.ts → shared/reply-files.ts} +1 -1
  235. package/src/core/testing/eager-catalog.ts +1 -1
  236. package/src/core/testing/locale.ts +1 -1
  237. package/src/core/testing/map-identity.ts +5 -1
  238. package/src/core/testing/module-sessions.ts +3 -3
  239. package/src/core/testing/modules.ts +17 -13
  240. package/src/core/testing/owner.ts +2 -2
  241. package/src/core/testing/recording-logger.ts +1 -1
  242. package/src/core/testing/run-tool.ts +2 -2
  243. package/src/core/testing/surface-contract-support.ts +1 -1
  244. package/src/core/testing/surface-contract.ts +2 -2
  245. package/src/core/testing/test-host.ts +12 -12
  246. package/src/core/testing/thread-host.ts +1 -1
  247. package/src/core/testing/tool-set.ts +3 -3
  248. package/src/core/threads/dispatch-threads.ts +1 -1
  249. package/src/core/tool-set.snapshot.json +12 -0
  250. package/src/index.ts +76 -72
  251. package/src/kit/domain.ts +9 -9
  252. package/src/kit/holds.ts +4 -1
  253. package/src/kit/jev-judge.ts +1 -1
  254. package/src/kit/jev.ts +1 -1
  255. package/src/kit/presentation.ts +1 -1
  256. package/src/kit/support.ts +3 -3
  257. package/src/testing.ts +21 -20
  258. /package/src/core/{errors.ts → kernel/errors.ts} +0 -0
  259. /package/src/core/{freeze.ts → kernel/freeze.ts} +0 -0
  260. /package/src/core/{log.ts → kernel/log.ts} +0 -0
  261. /package/src/core/{time.ts → kernel/time.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import type { ChannelKey } from "../domain/conversation.ts";
2
2
  import { AgentError } from "../domain/errors.ts";
3
- import type { AgentDirectory } from "../services.ts";
3
+ import type { AgentDirectory } from "../plugin-api/services.ts";
4
4
  import type { Agent } from "./agent-store.ts";
5
5
  import { Routes } from "./routes.ts";
6
6
  import { agentRoomKey, keysOf } from "./team-keys.ts";
@@ -6,7 +6,7 @@ import { ROUTE_WORDS } from "../config/routing.ts";
6
6
  import { parseChannelKey } from "../contract/surface.ts";
7
7
  import type { ChannelKey } from "../domain/conversation.ts";
8
8
  import { AgentError, ConfigError } from "../domain/errors.ts";
9
- import type { AgentDirectory } from "../services.ts";
9
+ import type { AgentDirectory } from "../plugin-api/services.ts";
10
10
  import {
11
11
  agentRoomKey,
12
12
  discordKey,
@@ -1,7 +1,7 @@
1
1
  import type { PendingConfirmation } from "../domain/conversation.ts";
2
+ import { type Speaker, tierAtLeast } from "../identity/speakers.ts";
2
3
  import { mayApproveNamed } from "../runtime/extensions/held-calls.ts";
3
- import { type Speaker, tierAtLeast } from "../speakers.ts";
4
- import type { ToolTiers } from "../tool-tiers.ts";
4
+ import type { ToolTiers } from "../runtime/tool-tiers.ts";
5
5
 
6
6
  /**
7
7
  * Whether the speaker may approve the held actions by a message, call by call: an owner, as the
@@ -9,9 +9,9 @@ import { parseChannelKey } from "../contract/surface.ts";
9
9
  import { AgentError } from "../domain/errors.ts";
10
10
  import type { AgentTurnScope } from "../domain/ports.ts";
11
11
  import { SYSTEM_PRINCIPAL } from "../identity/principal-store.ts";
12
+ import { addressee, type Speaker } from "../identity/speakers.ts";
12
13
  import type { ConversationModes } from "../modes/conversation-modes.ts";
13
- import type { AgentChange } from "../services.ts";
14
- import { addressee, type Speaker } from "../speakers.ts";
14
+ import type { AgentChange } from "../plugin-api/services.ts";
15
15
  import { openingTaskText } from "./agent-prompt.ts";
16
16
  import { characterOf, overBase } from "./agent-rules.ts";
17
17
  import { modelSetting, thinkingSetting } from "./agent-settings.ts";
@@ -2,7 +2,7 @@ import { channelKey, parseChannelKey } from "../contract/surface.ts";
2
2
  import type { ChannelKey } from "../domain/conversation.ts";
3
3
  import { AgentError } from "../domain/errors.ts";
4
4
  import type { AgentTurnScope } from "../domain/ports.ts";
5
- import type { AgentDirectory } from "../services.ts";
5
+ import type { AgentDirectory } from "../plugin-api/services.ts";
6
6
  import type { Agent, AgentGroup } from "./agent-store.ts";
7
7
 
8
8
  /** The surface of the channels the agent server runs on. */
@@ -1,6 +1,6 @@
1
1
  import { AgentError } from "../domain/errors.ts";
2
2
  import { messages } from "../i18n/index.ts";
3
- import type { AgentDirectory } from "../services.ts";
3
+ import type { AgentDirectory } from "../plugin-api/services.ts";
4
4
  import type { CategoryLayout } from "./agent-ports.ts";
5
5
  import type { AgentGroup } from "./agent-store.ts";
6
6
 
@@ -1,10 +1,10 @@
1
1
  import type { ResolvedHelpers } from "../config/helpers.ts";
2
2
  import type { ChannelKey } from "../domain/conversation.ts";
3
- import type { ThinkingSetting } from "../models.ts";
3
+ import type { ThinkingSetting } from "../domain/models.ts";
4
+ import type { ToolSelection } from "../domain/sessions.ts";
4
5
  import type { ConversationModes } from "../modes/conversation-modes.ts";
5
- import type { AgentTools, PromptSection } from "../plugin.ts";
6
- import type { AvatarStudio, SkillRegistry } from "../services.ts";
7
- import type { ToolSelection } from "../sessions.ts";
6
+ import type { AgentTools, PromptSection } from "../plugin-api/plugin.ts";
7
+ import type { AvatarStudio, SkillRegistry } from "../plugin-api/services.ts";
8
8
  import type { AgentChannels, AgentModels } from "./agent-ports.ts";
9
9
  import type { AgentGroup, AgentSeed } from "./agent-store.ts";
10
10
  import type { TeamTurns, TeamTurnsOptions } from "./team-turns.ts";
@@ -1,6 +1,6 @@
1
1
  import type { AgentTurnScope } from "../domain/ports.ts";
2
+ import type { TurnSelection } from "../domain/sessions.ts";
2
3
  import { SHELL_TOOLS } from "../modules/host-shell/shell-policy.ts";
3
- import type { TurnSelection } from "../sessions.ts";
4
4
  import { isHelper } from "./agent-rules.ts";
5
5
  import {
6
6
  AGENT_TOOLS,
@@ -1,4 +1,4 @@
1
- import type { ThinkingSetting } from "../models.ts";
1
+ import type { ThinkingSetting } from "../domain/models.ts";
2
2
  import type { ContextUse } from "./agent-ports.ts";
3
3
  import { discordIdOf, keysOf } from "./team-keys.ts";
4
4
  import type { TeamContext } from "./team-options.ts";
@@ -1,9 +1,9 @@
1
1
  import { CATALOG, type CharacterSpec } from "../../characters/index.ts";
2
2
  import { AgentError } from "../domain/errors.ts";
3
+ import type { ThinkingSetting } from "../domain/models.ts";
3
4
  import { assistantName } from "../i18n/index.ts";
4
- import type { ThinkingSetting } from "../models.ts";
5
- import type { AgentDirectory } from "../services.ts";
6
- import { zonedStamp } from "../time.ts";
5
+ import { zonedStamp } from "../kernel/time.ts";
6
+ import type { AgentDirectory } from "../plugin-api/services.ts";
7
7
  import type { ChannelMessage } from "./agent-ports.ts";
8
8
  import { characterOf, isHelper } from "./agent-rules.ts";
9
9
  import { describeThinking } from "./agent-settings.ts";
@@ -8,14 +8,14 @@ import type {
8
8
  TurnResult,
9
9
  } from "../domain/conversation.ts";
10
10
  import type { AgentTurnScope } from "../domain/ports.ts";
11
+ import type { TurnSelection } from "../domain/sessions.ts";
11
12
  import type { IdentityService } from "../identity/identity-port.ts";
12
- import type { OwnerIdentity } from "../identity.ts";
13
- import type { Logger } from "../log.ts";
14
- import type { EventSink } from "../plugin.ts";
15
- import type { AvatarStudio } from "../services.ts";
16
- import type { TurnSelection } from "../sessions.ts";
17
- import type { Speaker } from "../speakers.ts";
18
- import type { ToolTiers } from "../tool-tiers.ts";
13
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
14
+ import type { Speaker } from "../identity/speakers.ts";
15
+ import type { Logger } from "../kernel/log.ts";
16
+ import type { EventSink } from "../plugin-api/plugin.ts";
17
+ import type { AvatarStudio } from "../plugin-api/services.ts";
18
+ import type { ToolTiers } from "../runtime/tool-tiers.ts";
19
19
  import type { AgentChannels, AgentTurnRunner } from "./agent-ports.ts";
20
20
  import type { Agent, PgAgentStore } from "./agent-store.ts";
21
21
  import type { RelevanceScorer } from "./group-round.ts";
@@ -12,12 +12,12 @@ import { AgentError } from "../domain/errors.ts";
12
12
  import type { InterimPosts } from "../domain/interim.ts";
13
13
  import type { AgentTurnScope } from "../domain/ports.ts";
14
14
  import type { TurnProgress } from "../domain/progress.ts";
15
+ import type { Speaker } from "../identity/speakers.ts";
15
16
  import { isQuiet, replyBody } from "../presentation/reply-body.ts";
16
17
  import { splitReply } from "../presentation/reply-splitter.ts";
17
- import { withReplyFiles } from "../reply-files.ts";
18
18
  import { endOf, settleTurn } from "../routing/settle-turn.ts";
19
- import type { Speaker } from "../speakers.ts";
20
- import { toolTiers } from "../tool-tiers.ts";
19
+ import { toolTiers } from "../runtime/tool-tiers.ts";
20
+ import { withReplyFiles } from "../shared/reply-files.ts";
21
21
  import { AgentMessages } from "./agent-messages.ts";
22
22
  import type { Agent } from "./agent-store.ts";
23
23
  import { GroupTurns } from "./group-turns.ts";
@@ -7,7 +7,7 @@ import type {
7
7
  AttachmentRef,
8
8
  StoredAttachment,
9
9
  } from "../domain/attachment.ts";
10
- import { PluginError } from "../errors.ts";
10
+ import { PluginError } from "../kernel/errors.ts";
11
11
  import { plainText } from "./attachment-name.ts";
12
12
 
13
13
  export const MAX_ATTACHMENT_BYTES = 25 * 1024 * 1024;
@@ -1,6 +1,6 @@
1
1
  import type { AttachmentPort } from "../contract/attachments.ts";
2
- import { PluginError } from "../errors.ts";
3
- import type { Logger } from "../log.ts";
2
+ import { PluginError } from "../kernel/errors.ts";
3
+ import type { Logger } from "../kernel/log.ts";
4
4
  import {
5
5
  AttachmentStore,
6
6
  type AttachmentStoreOptions,
@@ -1,7 +1,7 @@
1
1
  import type { AttachmentPort } from "../contract/attachments.ts";
2
- import { PluginError } from "../errors.ts";
3
- import type { Logger } from "../log.ts";
4
- import type { Service } from "../plugin.ts";
2
+ import { PluginError } from "../kernel/errors.ts";
3
+ import type { Logger } from "../kernel/log.ts";
4
+ import type { Service } from "../plugin-api/plugin.ts";
5
5
 
6
6
  /** How long used files are kept, and how often the host looks for the ones past it. */
7
7
  export interface AttachmentRetention {
@@ -14,8 +14,8 @@ import type {
14
14
  StoredAttachment,
15
15
  TurnAttachments,
16
16
  } from "../domain/attachment.ts";
17
- import type { Logger } from "../log.ts";
18
- import type { ChannelKey } from "../sessions.ts";
17
+ import type { ChannelKey } from "../domain/sessions.ts";
18
+ import type { Logger } from "../kernel/log.ts";
19
19
  import {
20
20
  channelSegment,
21
21
  listDir,
@@ -3,7 +3,7 @@ import type {
3
3
  ModelImage,
4
4
  StoredAttachment,
5
5
  } from "../domain/attachment.ts";
6
- import type { Logger } from "../log.ts";
6
+ import type { Logger } from "../kernel/log.ts";
7
7
  import {
8
8
  isModelImage,
9
9
  MAX_IMAGES_PER_TURN,
@@ -1,7 +1,7 @@
1
1
  import type { AttachmentContent } from "../contract/channels.ts";
2
2
  import type { AttachmentRef, TurnAttachments } from "../domain/attachment.ts";
3
3
  import type { InboundMessage } from "../domain/conversation.ts";
4
- import type { Logger } from "../log.ts";
4
+ import type { Logger } from "../kernel/log.ts";
5
5
  import { fetchAttachments } from "./attachment-fetcher.ts";
6
6
  import { modelImagesOf } from "./model-images.ts";
7
7
 
@@ -18,15 +18,18 @@ import type { ResolvedRouting } from "../config/routing.ts";
18
18
  import type { AgentSessions } from "../contract/runtime.ts";
19
19
  import type { ChannelKey } from "../domain/conversation.ts";
20
20
  import { ConfigError } from "../domain/errors.ts";
21
- import type { OwnerIdentity } from "../identity.ts";
21
+ import {
22
+ AUTO_THINKING,
23
+ formatModelRef,
24
+ type ModelRef,
25
+ } from "../domain/models.ts";
26
+ import type { SessionTool } from "../domain/sessions.ts";
27
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
28
+ import type { Tier } from "../identity/speakers.ts";
22
29
  import { ConfirmationJudge } from "../judging/confirmation-judge.ts";
23
- import type { Logger } from "../log.ts";
24
- import { AUTO_THINKING, formatModelRef, type ModelRef } from "../models.ts";
30
+ import type { Logger } from "../kernel/log.ts";
25
31
  import type { ErrorReporter } from "../ops/error-reporter.ts";
26
- import type { PluginContext, RoundtablePlugin } from "../plugin.ts";
27
- import { splitReply } from "../presentation/reply-splitter.ts";
28
- import { agentPromptExtension } from "../runtime/extensions/agent-prompt.ts";
29
- import type { AgentSessionsSlot } from "../runtime/runtime-plugin.ts";
32
+ import type { PluginContext, RoundtablePlugin } from "../plugin-api/plugin.ts";
30
33
  import {
31
34
  AGENTS,
32
35
  BACKGROUND_TURNS,
@@ -36,9 +39,10 @@ import {
36
39
  RUNTIME,
37
40
  SCHEDULES,
38
41
  SKILLS,
39
- } from "../services.ts";
40
- import type { SessionTool } from "../sessions.ts";
41
- import type { Tier } from "../speakers.ts";
42
+ } from "../plugin-api/services.ts";
43
+ import { splitReply } from "../presentation/reply-splitter.ts";
44
+ import { agentPromptExtension } from "../runtime/extensions/agent-prompt.ts";
45
+ import type { AgentSessionsSlot } from "../runtime/runtime-plugin.ts";
42
46
  import { DISCORD } from "./discord.ts";
43
47
  import { agentOnly } from "./session-tool.ts";
44
48
 
@@ -157,6 +161,9 @@ const AGENT_TIERS: Readonly<Record<string, Tier>> = {
157
161
  // A knight may make temp knights for whoever is talking to it; the limits hold the cost.
158
162
  helper_create: "member",
159
163
  helper_end: "member",
164
+ helper_preset_set: "member",
165
+ helper_preset_list: "member",
166
+ helper_preset_delete: "member",
160
167
  };
161
168
 
162
169
  /** The tables the agent server keeps: its agents and groups. */
@@ -1,5 +1,5 @@
1
- import type { RoundtablePlugin } from "../plugin.ts";
2
- import { CHANNEL_CONTEXT } from "../services.ts";
1
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
2
+ import { CHANNEL_CONTEXT } from "../plugin-api/services.ts";
3
3
 
4
4
  /**
5
5
  * The channel context of every surface that reads it. The plugin provides one `CHANNEL_CONTEXT`
@@ -1,9 +1,9 @@
1
- import type { OwnerIdentity } from "../identity.ts";
1
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
2
2
  import {
3
3
  DISCORD_ADMIN_TOOLS,
4
4
  discordAdminExtension,
5
5
  } from "../modules/discord-admin/discord-admin.ts";
6
- import type { RoundtablePlugin } from "../plugin.ts";
6
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
7
7
  import { DISCORD } from "./discord.ts";
8
8
  import { fixed } from "./session-tool.ts";
9
9
 
@@ -1,5 +1,6 @@
1
1
  import { rmSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import type { PeerBotsConfig } from "../config/peer-bots.ts";
3
4
  import type {
4
5
  ChannelContext,
5
6
  ChannelContextOptions,
@@ -23,9 +24,9 @@ import type { DiscordPoster } from "../discord/poster/poster.ts";
23
24
  import { restOf, restPoster } from "../discord/poster/rest-poster.ts";
24
25
  import { stopButtonModule } from "../discord/stop-button.ts";
25
26
  import type { InboundMessage } from "../domain/conversation.ts";
26
- import type { RoundtablePlugin } from "../plugin.ts";
27
- import { PeerBots, type PeerBotsConfig } from "../routing/peer-bots.ts";
28
- import { IDENTITY, THREADS } from "../services.ts";
27
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
28
+ import { IDENTITY, THREADS } from "../plugin-api/services.ts";
29
+ import { PeerBots } from "../routing/peer-bots.ts";
29
30
  import type { DispatchThreads } from "../threads/dispatch-threads.ts";
30
31
 
31
32
  /** The Discord connection and what stands on it, as plugins use it. Provided by the Discord plugin. */
@@ -1,16 +1,19 @@
1
1
  import { isCheckDatabase } from "../db/check-database.ts";
2
- import type { RoundtablePlugin } from "../plugin.ts";
3
- import { IDENTITY, IDENTITY_LINKS, PROFILES } from "../services.ts";
4
- import type { AccessRules } from "./access-policy.ts";
5
- import { identityLinks } from "./identity-links.ts";
6
- import { type BackfillSummary, identityMigrations } from "./identity-schema.ts";
7
- import { PgIdentityService } from "./identity-service.ts";
8
- import { identityView } from "./identity-view.ts";
9
- import { PersonDirectory } from "./person-profiles.ts";
10
- import { declaredIdentities } from "./plugin-identities.ts";
11
- import { PgPrincipalStore } from "./principal-store.ts";
12
- import type { ProfileRules } from "./profiles.ts";
13
- import { profilesView } from "./profiles-view.ts";
2
+ import type { AccessRules } from "../identity/access-policy.ts";
3
+ import { identityLinks } from "../identity/identity-links.ts";
4
+ import {
5
+ type BackfillSummary,
6
+ identityMigrations,
7
+ } from "../identity/identity-schema.ts";
8
+ import { PgIdentityService } from "../identity/identity-service.ts";
9
+ import { identityView } from "../identity/identity-view.ts";
10
+ import { PersonDirectory } from "../identity/person-profiles.ts";
11
+ import { declaredIdentities } from "../identity/plugin-identities.ts";
12
+ import { PgPrincipalStore } from "../identity/principal-store.ts";
13
+ import type { ProfileRules } from "../identity/profiles.ts";
14
+ import { profilesView } from "../identity/profiles-view.ts";
15
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
16
+ import { IDENTITY, IDENTITY_LINKS, PROFILES } from "../plugin-api/services.ts";
14
17
 
15
18
  /** The name of the identity plugin, as the migration ledger names it. */
16
19
  export const IDENTITY_PLUGIN = "identity";
@@ -10,15 +10,13 @@ import {
10
10
  DelegationError,
11
11
  ScheduleError,
12
12
  } from "../domain/errors.ts";
13
+ import type { ModelRef, ThinkingLevel } from "../domain/models.ts";
14
+ import type { SessionContext } from "../domain/sessions.ts";
13
15
  import { messages } from "../i18n/index.ts";
14
16
  import { legacyPrincipalsOf } from "../identity/identity-view.ts";
15
- import type { OwnerIdentity } from "../identity.ts";
16
- import type { ModelRef, ThinkingLevel } from "../models.ts";
17
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
18
+ import type { Tier } from "../identity/speakers.ts";
17
19
  import { ConversationBackgroundTurns } from "../modules/background/background-turns.ts";
18
- import {
19
- type PerPrincipalLimits,
20
- personalTarget,
21
- } from "../modules/background/personal-target.ts";
22
20
  import { delegateExtension } from "../modules/delegation/delegate.ts";
23
21
  import {
24
22
  DefaultDelegator,
@@ -30,9 +28,7 @@ import { precheckScriptHoldRule } from "../modules/schedules/precheck-tools.ts";
30
28
  import { Scheduler } from "../modules/schedules/scheduler.ts";
31
29
  import { schedulesExtension } from "../modules/schedules/schedules.ts";
32
30
  import type { ErrorReporter } from "../ops/error-reporter.ts";
33
- import type { RoundtablePlugin } from "../plugin.ts";
34
- import { runChannelFor } from "../presence/delivery-router.ts";
35
- import { splitReply } from "../presentation/reply-splitter.ts";
31
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
36
32
  import {
37
33
  AGENTS,
38
34
  BACKGROUND_TURNS,
@@ -41,11 +37,15 @@ import {
41
37
  PRECHECKS,
42
38
  SCHEDULES,
43
39
  THREADS,
44
- } from "../services.ts";
45
- import type { SessionContext } from "../sessions.ts";
40
+ } from "../plugin-api/services.ts";
41
+ import { runChannelFor } from "../presence/delivery-router.ts";
42
+ import { splitReply } from "../presentation/reply-splitter.ts";
46
43
  import { DELEGATE_TOOL } from "../shared/delegate-tool.ts";
44
+ import {
45
+ type PerPrincipalLimits,
46
+ personalTarget,
47
+ } from "../shared/personal-target.ts";
47
48
  import { SCHEDULE_TOOLS } from "../shared/schedule-tools.ts";
48
- import type { Tier } from "../speakers.ts";
49
49
  import { DISCORD } from "./discord.ts";
50
50
  import { fixed } from "./session-tool.ts";
51
51
 
@@ -1,8 +1,8 @@
1
1
  import type { SQL } from "bun";
2
- import type { Logger } from "../log.ts";
2
+ import type { Logger } from "../kernel/log.ts";
3
3
  import { PgPromptDocuments } from "../modules/prompts/prompt-documents.ts";
4
- import type { RoundtablePlugin } from "../plugin.ts";
5
- import { PROMPTS } from "../services.ts";
4
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
5
+ import { PROMPTS } from "../plugin-api/services.ts";
6
6
 
7
7
  export interface PromptsOptions {
8
8
  /** The guild whose overrides the documents keep, or the local team's id. */
@@ -1,5 +1,5 @@
1
1
  import type { AgentSeed } from "../agents/agent-rules.ts";
2
- import type { RoundtablePlugin } from "../plugin.ts";
2
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
3
3
 
4
4
  /** The configured first team, created on the first start; an agent already stored is never overwritten. */
5
5
  export function seedsPlugin(agents: readonly AgentSeed[]): RoundtablePlugin {
@@ -3,7 +3,7 @@ import type {
3
3
  AgentTurnScope,
4
4
  SessionTool,
5
5
  SessionToolSnapshot,
6
- } from "../sessions.ts";
6
+ } from "../domain/sessions.ts";
7
7
 
8
8
  /** A session tool whose extension never changes. */
9
9
  export function fixed(
@@ -1,4 +1,5 @@
1
1
  import type { SQL } from "bun";
2
+ import type { Tier } from "../identity/speakers.ts";
2
3
  import { discoverPackageSkills } from "../modules/skills/package-skills.ts";
3
4
  import { StoredSkillRegistry } from "../modules/skills/skill-registry.ts";
4
5
  import { SkillStore } from "../modules/skills/skill-store.ts";
@@ -8,9 +9,8 @@ import {
8
9
  skillListExtension,
9
10
  skillToolsExtension,
10
11
  } from "../modules/skills/skill-tools.ts";
11
- import type { RoundtablePlugin } from "../plugin.ts";
12
- import { AGENTS, SKILLS } from "../services.ts";
13
- import type { Tier } from "../speakers.ts";
12
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
13
+ import { AGENTS, SKILLS } from "../plugin-api/services.ts";
14
14
  import { agentOnly } from "./session-tool.ts";
15
15
 
16
16
  export interface SkillsOptions {
@@ -1,13 +1,18 @@
1
- import type { OwnerIdentity } from "../identity.ts";
1
+ import type { SessionContext, SessionTool } from "../domain/sessions.ts";
2
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
3
+ import type { Tier } from "../identity/speakers.ts";
2
4
  import { ownerMemoryExtension } from "../modules/memory/owner-memory.ts";
3
5
  import { PgMemoryStore } from "../modules/memory/owner-memory-store.ts";
4
6
  import { memoryPrecheckRegistry } from "../modules/schedules/prechecks.ts";
5
7
  import { PgScheduleStore } from "../modules/schedules/schedule-store.ts";
6
- import type { RoundtablePlugin } from "../plugin.ts";
8
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
9
+ import {
10
+ MEMORY,
11
+ type MemoryStore,
12
+ PRECHECKS,
13
+ SCHEDULES,
14
+ } from "../plugin-api/services.ts";
7
15
  import { memoryReader } from "../runtime/session-conversation.ts";
8
- import { MEMORY, type MemoryStore, PRECHECKS, SCHEDULES } from "../services.ts";
9
- import type { SessionContext, SessionTool } from "../sessions.ts";
10
- import type { Tier } from "../speakers.ts";
11
16
  import { fixed } from "./session-tool.ts";
12
17
 
13
18
  export interface MemoryOptions {
@@ -1,6 +1,6 @@
1
1
  import { join } from "node:path";
2
- import type { RoundtablePlugin } from "../plugin.ts";
3
- import { THREADS } from "../services.ts";
2
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
3
+ import { THREADS } from "../plugin-api/services.ts";
4
4
  import { DispatchThreads } from "../threads/dispatch-threads.ts";
5
5
 
6
6
  export interface ThreadsOptions {
@@ -4,10 +4,10 @@ import {
4
4
  formatModelRef,
5
5
  type ModelRef,
6
6
  type ThinkingLevel,
7
- } from "../models.ts";
7
+ } from "../domain/models.ts";
8
8
  import { workerSessions } from "../modules/delegation/worker-session.ts";
9
- import type { RoundtablePlugin } from "../plugin.ts";
10
- import { WORKER_SESSIONS } from "../services.ts";
9
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
10
+ import { WORKER_SESSIONS } from "../plugin-api/services.ts";
11
11
 
12
12
  export interface WorkerSessionsPluginOptions {
13
13
  /** Shared with the rest of the host, so logins refresh in one place. */
@@ -8,9 +8,9 @@ import {
8
8
  rulesOfSpeakerMap,
9
9
  } from "../identity/access-policy.ts";
10
10
  import { parseIdentity } from "../identity/actor-facts.ts";
11
- import { PRONOUNS } from "../identity.ts";
12
- import type { Logger } from "../log.ts";
13
- import type { TierMembers } from "../speakers.ts";
11
+ import { PRONOUNS } from "../identity/owner-identity.ts";
12
+ import type { TierMembers } from "../identity/speakers.ts";
13
+ import type { Logger } from "../kernel/log.ts";
14
14
  import type { Pronouns, ResolvedConfig, RoundtableConfig } from "./config.ts";
15
15
  import {
16
16
  either,
@@ -1,6 +1,6 @@
1
1
  import type { ChannelContextOptions } from "../contract/channel-context.ts";
2
2
  import { ConfigError } from "../domain/errors.ts";
3
- import { type PeerBotsConfig, peerBotsShape } from "../routing/peer-bots.ts";
3
+ import { type PeerBotsConfig, peerBotsShape } from "./peer-bots.ts";
4
4
  import {
5
5
  bool,
6
6
  guarded,
@@ -1,8 +1,8 @@
1
1
  import type { InterimTextMode } from "../domain/interim.ts";
2
+ import { type EffortPolicy, THINKING_LEVELS } from "../domain/models.ts";
2
3
  import { isLocale, type Locale } from "../i18n/index.ts";
3
- import { type EffortPolicy, THINKING_LEVELS } from "../models.ts";
4
- import type { RoundtablePlugin } from "../plugin.ts";
5
- import type { Tier } from "../speakers.ts";
4
+ import type { Tier } from "../identity/speakers.ts";
5
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
6
6
  import { accessShape } from "./access.ts";
7
7
  import { discordShape } from "./adapters.ts";
8
8
  import { attachmentsShape } from "./attachments.ts";
@@ -60,6 +60,12 @@ const isPlugin = (value: unknown): value is RoundtablePlugin =>
60
60
  typeof (value as { name?: unknown }).name === "string" &&
61
61
  typeof (value as { setup?: unknown }).setup === "function";
62
62
 
63
+ /**
64
+ * How long a shutdown waits for running work before aborting it: long enough for a usual turn to
65
+ * answer, short enough that a hung one never holds a restart for an hour.
66
+ */
67
+ export const DRAIN_LIMIT_MS = 3 * 60_000;
68
+
63
69
  export const configSchema = shape({
64
70
  name: optional(text),
65
71
  owner: optional(
@@ -4,22 +4,21 @@ import { CATALOG, type Hex } from "../../characters/index.ts";
4
4
  import type { AgentSeed } from "../agents/agent-rules.ts";
5
5
  import { ConfigError } from "../domain/errors.ts";
6
6
  import type { InterimTextMode } from "../domain/interim.ts";
7
- import { DRAIN_LIMIT_MS } from "../drain.ts";
8
- import type { Locale } from "../i18n/index.ts";
9
- import type { AccessRules } from "../identity/access-policy.ts";
10
- import type { ProfileRules } from "../identity/profiles.ts";
11
- import type { OwnerIdentity } from "../identity.ts";
12
7
  import {
13
8
  type EffortPolicy,
14
9
  type ModelRef,
15
10
  parseModelRef,
16
11
  type ThinkingLevel,
17
- } from "../models.ts";
18
- import type { PerPrincipalLimits } from "../modules/background/personal-target.ts";
19
- import type { AgentTools, RoundtablePlugin } from "../plugin.ts";
12
+ } from "../domain/models.ts";
13
+ import type { Locale } from "../i18n/index.ts";
14
+ import type { AccessRules } from "../identity/access-policy.ts";
15
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
16
+ import type { ProfileRules } from "../identity/profiles.ts";
17
+ import type { Tier, TierMembers } from "../identity/speakers.ts";
18
+ import type { AgentTools, RoundtablePlugin } from "../plugin-api/plugin.ts";
20
19
  import { PRIMARY_CHARS } from "../runtime/interim-text.ts";
21
20
  import type { ShellEnvConfig } from "../shared/child-env.ts";
22
- import type { Tier, TierMembers } from "../speakers.ts";
21
+ import type { PerPrincipalLimits } from "../shared/personal-target.ts";
23
22
  import { type AccessConfig, accessOf } from "./access.ts";
24
23
  import {
25
24
  type DiscordConfig,
@@ -29,7 +28,7 @@ import {
29
28
  } from "./adapters.ts";
30
29
  import { checkAgentServerOff, checkAgentTeamKeys } from "./agent-team.ts";
31
30
  import type { AttachmentsConfig } from "./attachments.ts";
32
- import { configSchema } from "./config-schema.ts";
31
+ import { configSchema, DRAIN_LIMIT_MS } from "./config-schema.ts";
33
32
  import type { ConversationsConfig } from "./conversations.ts";
34
33
  import {
35
34
  type HelpersConfig,
@@ -1,5 +1,5 @@
1
1
  import { ConfigError } from "../domain/errors.ts";
2
- import type { ChannelKey } from "../sessions.ts";
2
+ import type { ChannelKey } from "../domain/sessions.ts";
3
3
 
4
4
  /** Where the errors go: one agent, or one conversation. */
5
5
  export type ResolvedOps = { agent: string } | { conversation: ChannelKey };