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 { ChannelClaim, InboundMessage } from "../contract/channels.ts";
2
- import type { Logger } from "../log.ts";
3
- import type { ChannelKey } from "../sessions.ts";
2
+ import type { ChannelKey } from "../domain/sessions.ts";
3
+ import type { Logger } from "../kernel/log.ts";
4
4
 
5
5
  /** Tells the claim a message in its channel was deleted; a claim without the hook, or none, is skipped. Never rejects. */
6
6
  export async function tellDeleted(
@@ -9,14 +9,18 @@ import type { ClientPort } from "../domain/client.ts";
9
9
  import type { TurnResult } from "../domain/conversation.ts";
10
10
  import type { TurnConversation } from "../domain/ports.ts";
11
11
  import type { TurnProgress } from "../domain/progress.ts";
12
- import { HostStoppingError, PluginError } from "../errors.ts";
12
+ import type {
13
+ ChannelKey,
14
+ ToolSelection,
15
+ TurnSelection,
16
+ } from "../domain/sessions.ts";
13
17
  import { SYSTEM_PRINCIPAL } from "../identity/principal-store.ts";
14
- import type { Logger } from "../log.ts";
15
- import type { EventSink } from "../plugin.ts";
18
+ import type { Speaker } from "../identity/speakers.ts";
19
+ import { HostStoppingError, PluginError } from "../kernel/errors.ts";
20
+ import type { Logger } from "../kernel/log.ts";
21
+ import type { EventSink } from "../plugin-api/plugin.ts";
16
22
  import { isQuiet, replyBody } from "../presentation/reply-body.ts";
17
- import { withReplyFiles } from "../reply-files.ts";
18
- import type { ChannelKey, ToolSelection, TurnSelection } from "../sessions.ts";
19
- import type { Speaker } from "../speakers.ts";
23
+ import { withReplyFiles } from "../shared/reply-files.ts";
20
24
  import { endOf, settleTurn } from "./settle-turn.ts";
21
25
 
22
26
  /** One turn of a conversation, as a claim asks for it. */
@@ -1,5 +1,5 @@
1
1
  import type { InboundMessage } from "../contract/channels.ts";
2
- import type { ChannelKey } from "../sessions.ts";
2
+ import type { ChannelKey } from "../domain/sessions.ts";
3
3
 
4
4
  /** Discord sends a forward's added text as a second message right after the forward. */
5
5
  export const FORWARD_JOIN_MS = 2_000;
@@ -4,7 +4,7 @@ import type {
4
4
  ObserveFilter,
5
5
  } from "../contract/channels.ts";
6
6
  import { parseChannelKey } from "../contract/surface.ts";
7
- import type { Logger } from "../log.ts";
7
+ import type { Logger } from "../kernel/log.ts";
8
8
 
9
9
  interface Registered {
10
10
  filter: Readonly<ObserveFilter>;
@@ -1,6 +1,6 @@
1
1
  import { parseChannelKey } from "../contract/surface.ts";
2
2
  import type { ChannelKey, InboundMessage } from "../domain/conversation.ts";
3
- import type { OwnerIdentity } from "../identity.ts";
3
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
4
4
 
5
5
  /** How the model is told where a forward came from: a Discord channel as its mention, another surface's as its key. */
6
6
  function sourceLabel(source: ChannelKey): string {
@@ -1,80 +1,12 @@
1
1
  import {
2
- bool,
3
- either,
4
- type Field,
5
- integer,
6
- list,
7
- optional,
8
- shape,
9
- text,
10
- } from "../config/schema.ts";
2
+ DEFAULT_PEER_ROUNDS,
3
+ type PeerBotEntry,
4
+ type PeerBotsConfig,
5
+ peerBotsShape,
6
+ } from "../config/peer-bots.ts";
11
7
  import type { InboundMessage } from "../contract/channels.ts";
12
8
  import { parseChannelKey } from "../contract/surface.ts";
13
- import { ConfigError } from "../domain/errors.ts";
14
- import type { ChannelKey } from "../sessions.ts";
15
-
16
- /** One peer bot the host answers, and where. */
17
- export interface PeerBotEntry {
18
- /** The bot's user id on the surface, a Discord snowflake. */
19
- id: string;
20
- /** Answer it only in these servers; left out, in every server of the host. */
21
- guilds?: readonly string[];
22
- /** Answer it only in these channels; left out, in every channel. */
23
- channels?: readonly string[];
24
- /**
25
- * Leave to this bot a person's message that addresses both: when a person mentions or replies to
26
- * the host and in the same message mentions this bot or replies to it, the host starts no turn
27
- * (observers still hear the message), so only this bot answers and it can hand over by mentioning
28
- * the host. Where `guilds` and `channels` do not list the bot, the host does not yield to it.
29
- * Set it on one side only: two hosts that yield to each other both stay silent.
30
- */
31
- yields?: boolean;
32
- }
33
-
34
- /**
35
- * The other bots whose messages the host answers like a guest's. Explicit ids only: there is no
36
- * wildcard and no "all bots", and a host that leaves this out answers no bot.
37
- */
38
- export interface PeerBotsConfig {
39
- /** The peer bots, each by its user id or as an entry that limits it to servers or channels. */
40
- allow: readonly (string | PeerBotEntry)[];
41
- /**
42
- * The most messages from peer bots in a row, in one channel, that start a turn before the next
43
- * one is ignored; a person's message in the channel starts the count over. Default 3.
44
- */
45
- maxRounds?: number;
46
- }
47
-
48
- /** The rounds in a row a channel answers peer bots when the host does not say. */
49
- export const DEFAULT_PEER_ROUNDS = 3;
50
-
51
- const SNOWFLAKE = /^[0-9]{17,20}$/;
52
-
53
- /** A Discord id: 17 to 20 digits. */
54
- const snowflake: Field<string> = {
55
- describe: "a Discord id (17 to 20 digits)",
56
- check: (value, path) => {
57
- const id = text.check(value, path);
58
- if (!SNOWFLAKE.test(id))
59
- throw new ConfigError(
60
- `config ${path}: expected a Discord id (17 to 20 digits), got ${JSON.stringify(id)}. Copy the id with Developer Mode on; a name or a wildcard is not accepted. Fix the value in roundtable.config.ts.`,
61
- );
62
- return id;
63
- },
64
- };
65
-
66
- const entryShape = shape({
67
- id: snowflake,
68
- guilds: optional(list(snowflake)),
69
- channels: optional(list(snowflake)),
70
- yields: optional(bool),
71
- });
72
-
73
- /** `discord.peerBots`, or the `peerBots` of the host's options. */
74
- export const peerBotsShape = shape({
75
- allow: list(either(snowflake, entryShape)),
76
- maxRounds: optional(integer(1, 100)),
77
- });
9
+ import type { ChannelKey } from "../domain/sessions.ts";
78
10
 
79
11
  /**
80
12
  * The peer bots a host answers, and how many of their messages in a row a channel answers.
@@ -7,8 +7,8 @@ import {
7
7
  type QueuedChange,
8
8
  type QueuedMessage,
9
9
  } from "../contract/channels.ts";
10
- import type { Logger } from "../log.ts";
11
- import type { ChannelKey } from "../sessions.ts";
10
+ import type { ChannelKey } from "../domain/sessions.ts";
11
+ import type { Logger } from "../kernel/log.ts";
12
12
 
13
13
  type TurnAdmission = Extract<Admission, { kind: "turn" }>;
14
14
 
@@ -1,7 +1,7 @@
1
1
  import type { ScheduledOutcome } from "../contract/channels.ts";
2
2
  import type { TurnResult } from "../domain/conversation.ts";
3
3
  import { AgentRunError } from "../domain/errors.ts";
4
- import type { TurnEndEvent } from "../plugin.ts";
4
+ import type { TurnEndEvent } from "../plugin-api/plugin.ts";
5
5
 
6
6
  /** Runs a turn; a thrown error becomes its failed result, labelled `<what> crashed`. */
7
7
  export async function settleTurn<R>(
@@ -1,13 +1,13 @@
1
1
  import type { ChatSurface, SurfacePort } from "../contract/surface.ts";
2
2
  import { parseChannelKey } from "../contract/surface.ts";
3
- import { PluginError } from "../errors.ts";
3
+ import type { ChannelKey } from "../domain/sessions.ts";
4
+ import type { Speaker } from "../identity/speakers.ts";
4
5
  import {
5
6
  isPromptScope,
6
7
  type PromptScope,
7
8
  promptScope,
8
9
  } from "../interactions/prompts.ts";
9
- import type { ChannelKey } from "../sessions.ts";
10
- import type { Speaker } from "../speakers.ts";
10
+ import { PluginError } from "../kernel/errors.ts";
11
11
 
12
12
  export interface SurfacePortOptions {
13
13
  /** Told when a caller uses a form that goes away, such as `prompts(channel, speaker)`. */
@@ -1,5 +1,5 @@
1
1
  import { messages } from "../i18n/index.ts";
2
- import type { OwnerIdentity } from "../identity.ts";
2
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
3
3
  import type { OwnerAnswer, Prompts } from "../interactions/prompts.ts";
4
4
  import {
5
5
  type Questionnaire,
@@ -6,16 +6,16 @@ import type {
6
6
  } from "@earendil-works/pi-coding-agent";
7
7
  import type { AgentSessions } from "../contract/runtime.ts";
8
8
  import { AgentRunError, ConfigError } from "../domain/errors.ts";
9
- import type { AccessRules, AccessTier } from "../identity/access-policy.ts";
10
- import type { IdentityService } from "../identity/identity-service.ts";
11
- import { SYSTEM_PRINCIPAL } from "../identity/principal-store.ts";
12
9
  import {
13
10
  formatModelRef,
14
11
  type ModelRef,
15
12
  parseModelRef,
16
13
  type ThinkingSetting,
17
- } from "../models.ts";
18
- import type { RoundtablePlugin } from "../plugin.ts";
14
+ } from "../domain/models.ts";
15
+ import type { AccessRules, AccessTier } from "../identity/access-policy.ts";
16
+ import type { IdentityService } from "../identity/identity-service.ts";
17
+ import { SYSTEM_PRINCIPAL } from "../identity/principal-store.ts";
18
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
19
19
  import { guardHidesPrivateExchange } from "./extensions/private-memory.ts";
20
20
  import { bridgeHistoryHidesMemoryFor } from "./reader-history.ts";
21
21
 
@@ -1,6 +1,6 @@
1
1
  import { ConfigError } from "../domain/errors.ts";
2
2
  import { SHELL_TOOLS } from "../modules/host-shell/shell-policy.ts";
3
- import type { RoundtablePlugin } from "../plugin.ts";
3
+ import type { RoundtablePlugin } from "../plugin-api/plugin.ts";
4
4
 
5
5
  const CHAT_ONLY = 'agentServer: { tools: "chat-only" }';
6
6
 
@@ -5,9 +5,8 @@ import type {
5
5
  ChannelKey,
6
6
  PendingConfirmation,
7
7
  } from "../domain/conversation.ts";
8
+ import type { ThinkingLevel } from "../domain/models.ts";
8
9
  import type { TurnConversation, TurnRequest } from "../domain/ports.ts";
9
- import type { ThinkingLevel } from "../models.ts";
10
- import type { ToolTiers } from "../tool-tiers.ts";
11
10
  import { ConfirmationGate, unexpired } from "./extensions/confirmation-gate.ts";
12
11
  import { PromptSlot } from "./prompt-slot.ts";
13
12
  import type { ChannelSession, PiAgentRuntimeOptions } from "./runtime-types.ts";
@@ -23,6 +22,7 @@ import {
23
22
  historyScope,
24
23
  scopedHistory,
25
24
  } from "./session-scope.ts";
25
+ import type { ToolTiers } from "./tool-tiers.ts";
26
26
 
27
27
  type AgentMessage = AgentSession["messages"][number];
28
28
 
@@ -1,5 +1,5 @@
1
1
  import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
2
- import type { Logger } from "../../log.ts";
2
+ import type { Logger } from "../../kernel/log.ts";
3
3
  import { readPromptOrStop } from "./prompt-read.ts";
4
4
 
5
5
  /**
@@ -1,4 +1,8 @@
1
- import { type OwnerIdentity, ownerWords, PRONOUNS } from "../../identity.ts";
1
+ import {
2
+ type OwnerIdentity,
3
+ ownerWords,
4
+ PRONOUNS,
5
+ } from "../../identity/owner-identity.ts";
2
6
  import type {
3
7
  OwnerAnswer,
4
8
  OwnerQuestion,
@@ -1,6 +1,9 @@
1
1
  import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
2
2
  import { type Static, Type } from "typebox";
3
- import { type OwnerIdentity, ownerWords } from "../../identity.ts";
3
+ import {
4
+ type OwnerIdentity,
5
+ ownerWords,
6
+ } from "../../identity/owner-identity.ts";
4
7
  import type { OwnerQuestion } from "../../interactions/prompts.ts";
5
8
  import { QUESTIONNAIRE_LIMITS as L } from "../../interactions/questionnaire.ts";
6
9
  import { DEFAULT_YOLO_QUESTION_GRACE_MS } from "../../modes/autonomy.ts";
@@ -1,3 +1,4 @@
1
+ import type { Tier } from "../../identity/speakers.ts";
1
2
  import type {
2
3
  Approval,
3
4
  ApprovalDetails,
@@ -6,7 +7,6 @@ import type {
6
7
  Prompts,
7
8
  PromptWait,
8
9
  } from "../../interactions/prompts.ts";
9
- import type { Tier } from "../../speakers.ts";
10
10
  import type { Watch } from "./withdrawals.ts";
11
11
 
12
12
  /** What a held call's card is opened with. */
@@ -1,4 +1,4 @@
1
- import type { HoldRule } from "../../holds.ts";
1
+ import type { HoldRule } from "../../plugin-api/holds.ts";
2
2
 
3
3
  /** A tool that waits for the owner's confirmation in the gate's tests. */
4
4
  export const MAIL = "send-mail";
@@ -1,5 +1,5 @@
1
1
  import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
2
- import type { ToolTurn } from "../../define.ts";
2
+ import type { ToolTurn } from "../../plugin-api/define.ts";
3
3
  import type { PromptSlot } from "../prompt-slot.ts";
4
4
  import type { ConfirmationGate, HoldTurn } from "./confirmation-gate.ts";
5
5
 
@@ -2,17 +2,17 @@ import type {
2
2
  HeldCall,
3
3
  PendingConfirmation,
4
4
  } from "../../domain/conversation.ts";
5
+ import { messages } from "../../i18n/index.ts";
6
+ import type { OwnerIdentity } from "../../identity/owner-identity.ts";
7
+ import type { ApprovedBy, Prompts } from "../../interactions/prompts.ts";
5
8
  import {
6
9
  HOLD_DESCRIBE_TIMEOUT_MS,
7
10
  type HoldCheck,
8
11
  type HoldContext,
9
12
  higherTier,
10
13
  isPromise,
11
- } from "../../holds.ts";
12
- import { messages } from "../../i18n/index.ts";
13
- import type { OwnerIdentity } from "../../identity.ts";
14
- import type { ApprovedBy, Prompts } from "../../interactions/prompts.ts";
15
- import type { ToolTiers } from "../../tool-tiers.ts";
14
+ } from "../../plugin-api/holds.ts";
15
+ import type { ToolTiers } from "../tool-tiers.ts";
16
16
  import { approvalCard, approvalDetails } from "./approval-card.ts";
17
17
  import { askOnCard } from "./card-ask.ts";
18
18
  import {
@@ -3,12 +3,15 @@ import type {
3
3
  PendingConfirmation,
4
4
  } from "../../domain/conversation.ts";
5
5
  import type { HoldRefusal } from "../../domain/progress.ts";
6
- import { type OwnerIdentity, ownerWords } from "../../identity.ts";
6
+ import {
7
+ type OwnerIdentity,
8
+ ownerWords,
9
+ } from "../../identity/owner-identity.ts";
10
+ import type { Speaker } from "../../identity/speakers.ts";
7
11
  import type {
8
12
  ApprovalDetails,
9
13
  ApprovedBy,
10
14
  } from "../../interactions/prompts.ts";
11
- import type { Speaker } from "../../speakers.ts";
12
15
  import { mayApproveNamed } from "./held-calls.ts";
13
16
 
14
17
  /**
@@ -2,9 +2,9 @@ import type {
2
2
  HeldCall,
3
3
  PendingConfirmation,
4
4
  } from "../../domain/conversation.ts";
5
- import type { OwnerIdentity } from "../../identity.ts";
5
+ import type { OwnerIdentity } from "../../identity/owner-identity.ts";
6
+ import type { Speaker } from "../../identity/speakers.ts";
6
7
  import type { ApprovedBy } from "../../interactions/prompts.ts";
7
- import type { Speaker } from "../../speakers.ts";
8
8
 
9
9
  /** Held actions older than this cannot be approved any more. */
10
10
  export const CONFIRMATION_TTL_MS = 24 * 3_600_000;
@@ -1,12 +1,12 @@
1
- import type { ToolTurn } from "../../define.ts";
1
+ import { messages } from "../../i18n/index.ts";
2
+ import type { ToolTurn } from "../../plugin-api/define.ts";
2
3
  import {
3
4
  type ClassedHold,
4
5
  type HoldCheck,
5
6
  type HoldContext,
6
7
  type HoldDescription,
7
8
  isPromise,
8
- } from "../../holds.ts";
9
- import { messages } from "../../i18n/index.ts";
9
+ } from "../../plugin-api/holds.ts";
10
10
  import {
11
11
  awaited,
12
12
  type Described,
@@ -1,13 +1,13 @@
1
- import type { ToolTurn } from "../../define.ts";
2
1
  import type { HeldCall } from "../../domain/conversation.ts";
2
+ import { messages } from "../../i18n/index.ts";
3
+ import type { ApprovalDetails } from "../../interactions/prompts.ts";
4
+ import type { ToolTurn } from "../../plugin-api/define.ts";
3
5
  import {
4
6
  type HoldCheck,
5
7
  type HoldContext,
6
8
  type HoldDescription,
7
9
  isPromise,
8
- } from "../../holds.ts";
9
- import { messages } from "../../i18n/index.ts";
10
- import type { ApprovalDetails } from "../../interactions/prompts.ts";
10
+ } from "../../plugin-api/holds.ts";
11
11
  import { canonicalJson } from "./held-calls.ts";
12
12
 
13
13
  /** The turn a hold that looks things up sees; see `HoldRule.describeInTurn`. */
@@ -1,5 +1,5 @@
1
1
  import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
2
- import type { Logger } from "../../log.ts";
2
+ import type { Logger } from "../../kernel/log.ts";
3
3
  import { readPromptOrStop } from "./prompt-read.ts";
4
4
 
5
5
  /**
@@ -1,4 +1,4 @@
1
- import type { Logger } from "../../log.ts";
1
+ import type { Logger } from "../../kernel/log.ts";
2
2
 
3
3
  /**
4
4
  * Reads a prompt for the run that is starting. Pi swallows what a `before_agent_start` handler
@@ -1,11 +1,11 @@
1
1
  import type { HeldCall } from "../../domain/conversation.ts";
2
2
  import type { TurnRequest } from "../../domain/ports.ts";
3
+ import type { ChannelKey } from "../../domain/sessions.ts";
3
4
  import { SYSTEM_PRINCIPAL } from "../../identity/principal-store.ts";
4
5
  import type { ApprovedBy } from "../../interactions/prompts.ts";
5
6
  import { type Autonomy, DEFAULT_AUTONOMY } from "../../modes/autonomy.ts";
6
7
  import type { ConversationModes } from "../../modes/conversation-modes.ts";
7
8
  import { YOLO_CARDED_SHELL_CLASSES } from "../../modules/host-shell/shell-policy.ts";
8
- import type { ChannelKey } from "../../sessions.ts";
9
9
  import type { PiAgentRuntimeOptions } from "../runtime-types.ts";
10
10
  import type { AutoApprover } from "./confirmation-gate.ts";
11
11
  import type { SpeakerRef } from "./gate-refusals.ts";
@@ -1,6 +1,6 @@
1
1
  import type { InterimMessage, InterimPosts } from "../domain/interim.ts";
2
2
  import type { TurnRequest } from "../domain/ports.ts";
3
- import type { Logger } from "../log.ts";
3
+ import type { Logger } from "../kernel/log.ts";
4
4
  import {
5
5
  DISCORD_MESSAGE_LIMIT,
6
6
  splitReply,
@@ -18,12 +18,11 @@ import type {
18
18
  } from "../domain/conversation.ts";
19
19
  import { AgentRunError } from "../domain/errors.ts";
20
20
  import type { TurnRequest } from "../domain/ports.ts";
21
- import { HostStoppingError } from "../errors.ts";
21
+ import type { TransientTask } from "../domain/sessions.ts";
22
22
  import { assistantName } from "../i18n/index.ts";
23
23
  import { promptScopeOf } from "../interactions/prompts.ts";
24
- import { withoutReplyFiles } from "../reply-files.ts";
25
- import type { TransientTask } from "../sessions.ts";
26
- import { type ToolTiers, toolTiers } from "../tool-tiers.ts";
24
+ import { HostStoppingError } from "../kernel/errors.ts";
25
+ import { withoutReplyFiles } from "../shared/reply-files.ts";
27
26
  import { AbortGuard } from "./abort-guard.ts";
28
27
  import { bridgeTurnRefusal, chosenAgentModel } from "./bridge-guard.ts";
29
28
  import { ConversationSessions } from "./conversation-sessions.ts";
@@ -47,6 +46,7 @@ import { SessionFactory } from "./session-factory.ts";
47
46
  import { promptImages, SteerableRun } from "./steerable-run.ts";
48
47
  import { thinkingLevel } from "./thinking-level.ts";
49
48
  import { runningCalls } from "./tool-call-scope.ts";
49
+ import { type ToolTiers, toolTiers } from "./tool-tiers.ts";
50
50
  import { transcriptOf, turnAnswer, unspokenTurn } from "./turn-answer.ts";
51
51
  import type { TurnBudget } from "./turn-budget.ts";
52
52
  import { promptFailed, turnLimits } from "./turn-limits.ts";
@@ -1,6 +1,6 @@
1
1
  import type { ClientPort } from "../domain/client.ts";
2
2
  import type { TurnRequest } from "../domain/ports.ts";
3
- import type { Speaker, Tier } from "../speakers.ts";
3
+ import type { Speaker, Tier } from "../identity/speakers.ts";
4
4
 
5
5
  /** What the runtime keeps about a conversation's running turn, for its tools to read. */
6
6
  export interface RunningTurn {
@@ -7,20 +7,25 @@ import type {
7
7
  } from "../contract/runtime.ts";
8
8
  import type { ChannelKey } from "../domain/conversation.ts";
9
9
  import type { InterimTextMode } from "../domain/interim.ts";
10
- import type { IdentityService } from "../identity/identity-service.ts";
11
- import type { OwnerIdentity } from "../identity.ts";
12
- import type { PromptScope } from "../interactions/prompts.ts";
13
- import { AGENT_BRIEF, EffortJudge } from "../judging/effort-judge.ts";
14
10
  import {
15
11
  type EffortPolicy,
16
12
  formatModelRef,
17
13
  type ModelRef,
18
14
  type ThinkingLevel,
19
- } from "../models.ts";
15
+ } from "../domain/models.ts";
16
+ import type { IdentityService } from "../identity/identity-service.ts";
17
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
18
+ import type { Speaker } from "../identity/speakers.ts";
19
+ import type { PromptScope } from "../interactions/prompts.ts";
20
+ import { AGENT_BRIEF, EffortJudge } from "../judging/effort-judge.ts";
20
21
  import type { Autonomy } from "../modes/autonomy.ts";
21
- import type { PluginContext, RoundtablePlugin } from "../plugin.ts";
22
- import { CONVERSATIONS, IDENTITY, MODES, RUNTIME } from "../services.ts";
23
- import type { Speaker } from "../speakers.ts";
22
+ import type { PluginContext, RoundtablePlugin } from "../plugin-api/plugin.ts";
23
+ import {
24
+ CONVERSATIONS,
25
+ IDENTITY,
26
+ MODES,
27
+ RUNTIME,
28
+ } from "../plugin-api/services.ts";
24
29
  import {
25
30
  BRIDGE_MEMORY_FIX,
26
31
  bridgeMemoryProblem,
@@ -8,28 +8,32 @@ import type { ImageDrawer } from "../contract/providers.ts";
8
8
  import type { AgentSessions, LoadedSkill } from "../contract/runtime.ts";
9
9
  import type { ChannelKey } from "../domain/conversation.ts";
10
10
  import type { InterimTextMode } from "../domain/interim.ts";
11
+ import type {
12
+ EffortPolicy,
13
+ ThinkingLevel,
14
+ ThinkingPicker,
15
+ } from "../domain/models.ts";
11
16
  import type { TurnConversation } from "../domain/ports.ts";
12
- import type { Principal } from "../identity/principal-store.ts";
13
- import type { OwnerIdentity } from "../identity.ts";
14
- import type { PromptScope, Prompts } from "../interactions/prompts.ts";
15
- import type { Logger } from "../log.ts";
16
- import type { EffortPolicy, ThinkingLevel, ThinkingPicker } from "../models.ts";
17
- import type { Autonomy } from "../modes/autonomy.ts";
18
- import type { ConversationModes } from "../modes/conversation-modes.ts";
19
- import type { AgentTools, LinkedSessions } from "../plugin.ts";
20
17
  import {
21
18
  planOrder,
22
19
  type SessionContext,
23
20
  type SessionConversation,
24
21
  type SessionPlan,
25
22
  type SessionTool,
26
- } from "../sessions.ts";
23
+ } from "../domain/sessions.ts";
24
+ import type { OwnerIdentity } from "../identity/owner-identity.ts";
25
+ import type { Principal } from "../identity/principal-store.ts";
26
+ import type { PromptScope, Prompts } from "../interactions/prompts.ts";
27
+ import type { Logger } from "../kernel/log.ts";
28
+ import type { Autonomy } from "../modes/autonomy.ts";
29
+ import type { ConversationModes } from "../modes/conversation-modes.ts";
30
+ import type { AgentTools, LinkedSessions } from "../plugin-api/plugin.ts";
27
31
  import type { ShellEnv } from "../shared/child-env.ts";
28
32
  import { secretMaskExtension } from "../shared/secret-mask.ts";
29
- import type { ToolTiers } from "../tool-tiers.ts";
30
33
  import type { MemoryDraws } from "./extensions/private-memory.ts";
31
34
  import type { PendingConfirmationStore } from "./pending-confirmation-store.ts";
32
35
  import { scopedCalls } from "./tool-call-scope.ts";
36
+ import type { ToolTiers } from "./tool-tiers.ts";
33
37
 
34
38
  export type TurnMessage = Extract<
35
39
  AgentSessionEvent,
@@ -1,12 +1,12 @@
1
1
  import type { ChannelKey } from "../domain/conversation.ts";
2
2
  import type { TurnConversation, TurnRequest } from "../domain/ports.ts";
3
+ import type { SessionConversation } from "../domain/sessions.ts";
4
+ import { addresseeOf, type OwnerIdentity } from "../identity/owner-identity.ts";
3
5
  import {
4
6
  type Principal,
5
7
  SYSTEM_PRINCIPAL,
6
8
  } from "../identity/principal-store.ts";
7
- import { addresseeOf, type OwnerIdentity } from "../identity.ts";
8
- import type { SessionConversation } from "../sessions.ts";
9
- import { addressee, type Speaker, THE_SPEAKER } from "../speakers.ts";
9
+ import { addressee, type Speaker, THE_SPEAKER } from "../identity/speakers.ts";
10
10
  import type { PiAgentRuntimeOptions } from "./runtime-types.ts";
11
11
 
12
12
  /**
@@ -12,7 +12,6 @@ import type { ClientPort } from "../domain/client.ts";
12
12
  import type { ChannelKey } from "../domain/conversation.ts";
13
13
  import { ConfigError } from "../domain/errors.ts";
14
14
  import type { AgentTurnScope } from "../domain/ports.ts";
15
- import type { LinkedSessions } from "../plugin.ts";
16
15
  import {
17
16
  planOrder,
18
17
  type SessionContext,
@@ -20,7 +19,10 @@ import {
20
19
  type SessionPlan,
21
20
  type ToolSelection,
22
21
  type TransientTask,
23
- } from "../sessions.ts";
22
+ } from "../domain/sessions.ts";
23
+ import { type Speaker, THE_SPEAKER } from "../identity/speakers.ts";
24
+ import type { LinkedSessions } from "../plugin-api/plugin.ts";
25
+ import { toolTurn } from "../plugin-api/tool-turn.ts";
24
26
  import { activeToolsExtension } from "../shared/active-tools.ts";
25
27
  import {
26
28
  ATTACH_FILE_TOOL,
@@ -29,9 +31,6 @@ import {
29
31
  import { GENERATE_IMAGE_TOOL } from "../shared/generate-image-tool.ts";
30
32
  import { packageDir } from "../shared/package-dir.ts";
31
33
  import { readAttachmentExtension } from "../shared/read-attachment-tool.ts";
32
- import { type Speaker, THE_SPEAKER } from "../speakers.ts";
33
- import { currentToolNames } from "../tool-tiers.ts";
34
- import { toolTurn } from "../tool-turn.ts";
35
34
  import { refuseShellTools } from "./chat-only.ts";
36
35
  import {
37
36
  CompactionTiers,
@@ -72,6 +71,7 @@ import {
72
71
  turnAddressee,
73
72
  } from "./session-conversation.ts";
74
73
  import { imageTools, scratchBash } from "./session-helpers.ts";
74
+ import { currentToolNames } from "./tool-tiers.ts";
75
75
 
76
76
  export { imageTools, scratchBash };
77
77
 
@@ -3,12 +3,12 @@ import type {
3
3
  ModelRuntime,
4
4
  } from "@earendil-works/pi-coding-agent";
5
5
  import type { ChannelKey } from "../domain/conversation.ts";
6
- import type { TurnRequest } from "../domain/ports.ts";
7
6
  import {
8
7
  AUTO_THINKING,
9
8
  type EffortPolicy,
10
9
  type ThinkingLevel,
11
- } from "../models.ts";
10
+ } from "../domain/models.ts";
11
+ import type { TurnRequest } from "../domain/ports.ts";
12
12
  import {
13
13
  type AgentModelSettings,
14
14
  useChosenAgentModel,