openryoko 2026.9.3 → 2026.9.5

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 (101) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/connectors/discord/engaged-threads.d.ts +24 -0
  3. package/dist/src/connectors/discord/engaged-threads.d.ts.map +1 -0
  4. package/dist/src/connectors/discord/engaged-threads.js +28 -0
  5. package/dist/src/connectors/discord/engaged-threads.js.map +1 -0
  6. package/dist/src/connectors/discord/index.d.ts +91 -3
  7. package/dist/src/connectors/discord/index.d.ts.map +1 -1
  8. package/dist/src/connectors/discord/index.js +386 -34
  9. package/dist/src/connectors/discord/index.js.map +1 -1
  10. package/dist/src/connectors/discord/remote.d.ts +16 -1
  11. package/dist/src/connectors/discord/remote.d.ts.map +1 -1
  12. package/dist/src/connectors/discord/remote.js +70 -1
  13. package/dist/src/connectors/discord/remote.js.map +1 -1
  14. package/dist/src/connectors/discord/respond-policy.d.ts +96 -0
  15. package/dist/src/connectors/discord/respond-policy.d.ts.map +1 -0
  16. package/dist/src/connectors/discord/respond-policy.js +85 -0
  17. package/dist/src/connectors/discord/respond-policy.js.map +1 -0
  18. package/dist/src/connectors/discord/threads.d.ts +20 -2
  19. package/dist/src/connectors/discord/threads.d.ts.map +1 -1
  20. package/dist/src/connectors/discord/threads.js +28 -1
  21. package/dist/src/connectors/discord/threads.js.map +1 -1
  22. package/dist/src/connectors/slack/agents-canvas.d.ts +1 -0
  23. package/dist/src/connectors/slack/agents-canvas.d.ts.map +1 -1
  24. package/dist/src/connectors/slack/agents-canvas.js +75 -22
  25. package/dist/src/connectors/slack/agents-canvas.js.map +1 -1
  26. package/dist/src/gateway/api.d.ts +4 -0
  27. package/dist/src/gateway/api.d.ts.map +1 -1
  28. package/dist/src/gateway/api.js +25 -2
  29. package/dist/src/gateway/api.js.map +1 -1
  30. package/dist/src/gateway/server.d.ts.map +1 -1
  31. package/dist/src/gateway/server.js +2 -0
  32. package/dist/src/gateway/server.js.map +1 -1
  33. package/dist/src/sessions/context.d.ts +32 -7
  34. package/dist/src/sessions/context.d.ts.map +1 -1
  35. package/dist/src/sessions/context.js +81 -12
  36. package/dist/src/sessions/context.js.map +1 -1
  37. package/dist/src/sessions/manager.d.ts.map +1 -1
  38. package/dist/src/sessions/manager.js +18 -3
  39. package/dist/src/sessions/manager.js.map +1 -1
  40. package/dist/src/shared/types.d.ts +63 -10
  41. package/dist/src/shared/types.d.ts.map +1 -1
  42. package/dist/web/404.html +1 -1
  43. package/dist/web/__next.__PAGE__.txt +1 -1
  44. package/dist/web/__next._full.txt +1 -1
  45. package/dist/web/__next._tree.txt +1 -1
  46. package/dist/web/_next/static/chunks/{0los6agi5yfk-.js → 1ydtstxdw369l.js} +1 -1
  47. package/dist/web/_not-found/__next._full.txt +1 -1
  48. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
  49. package/dist/web/_not-found/__next._tree.txt +1 -1
  50. package/dist/web/_not-found.html +1 -1
  51. package/dist/web/_not-found.txt +1 -1
  52. package/dist/web/chat/__next._full.txt +1 -1
  53. package/dist/web/chat/__next._tree.txt +1 -1
  54. package/dist/web/chat/__next.chat.__PAGE__.txt +1 -1
  55. package/dist/web/chat.html +1 -1
  56. package/dist/web/chat.txt +1 -1
  57. package/dist/web/cron/__next._full.txt +1 -1
  58. package/dist/web/cron/__next._tree.txt +1 -1
  59. package/dist/web/cron/__next.cron.__PAGE__.txt +1 -1
  60. package/dist/web/cron.html +1 -1
  61. package/dist/web/cron.txt +1 -1
  62. package/dist/web/index.html +1 -1
  63. package/dist/web/index.txt +1 -1
  64. package/dist/web/kanban/__next._full.txt +1 -1
  65. package/dist/web/kanban/__next._tree.txt +1 -1
  66. package/dist/web/kanban/__next.kanban.__PAGE__.txt +1 -1
  67. package/dist/web/kanban.html +1 -1
  68. package/dist/web/kanban.txt +1 -1
  69. package/dist/web/logs/__next._full.txt +1 -1
  70. package/dist/web/logs/__next._tree.txt +1 -1
  71. package/dist/web/logs/__next.logs.__PAGE__.txt +1 -1
  72. package/dist/web/logs.html +1 -1
  73. package/dist/web/logs.txt +1 -1
  74. package/dist/web/org/__next._full.txt +1 -1
  75. package/dist/web/org/__next._tree.txt +1 -1
  76. package/dist/web/org/__next.org.__PAGE__.txt +1 -1
  77. package/dist/web/org.html +1 -1
  78. package/dist/web/org.txt +1 -1
  79. package/dist/web/sessions/__next._full.txt +1 -1
  80. package/dist/web/sessions/__next._tree.txt +1 -1
  81. package/dist/web/sessions/__next.sessions.__PAGE__.txt +1 -1
  82. package/dist/web/sessions.html +1 -1
  83. package/dist/web/sessions.txt +1 -1
  84. package/dist/web/settings/__next._full.txt +2 -2
  85. package/dist/web/settings/__next._tree.txt +1 -1
  86. package/dist/web/settings/__next.settings.__PAGE__.txt +2 -2
  87. package/dist/web/settings.html +1 -1
  88. package/dist/web/settings.txt +2 -2
  89. package/dist/web/skills/__next._full.txt +1 -1
  90. package/dist/web/skills/__next._tree.txt +1 -1
  91. package/dist/web/skills/__next.skills.__PAGE__.txt +1 -1
  92. package/dist/web/skills.html +1 -1
  93. package/dist/web/skills.txt +1 -1
  94. package/package.json +1 -1
  95. package/template/AGENTS.md +1 -1
  96. package/template/CLAUDE.md +1 -1
  97. package/template/config.default.yaml +13 -5
  98. package/template/docs/connectors.md +93 -1
  99. /package/dist/web/_next/static/{Kudq_QcLnSoz7UYDmluYu → vW8A0EhHuyi1vRgv7Qkyg}/_buildManifest.js +0 -0
  100. /package/dist/web/_next/static/{Kudq_QcLnSoz7UYDmluYu → vW8A0EhHuyi1vRgv7Qkyg}/_clientMiddlewareManifest.js +0 -0
  101. /package/dist/web/_next/static/{Kudq_QcLnSoz7UYDmluYu → vW8A0EhHuyi1vRgv7Qkyg}/_ssgManifest.js +0 -0
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openryoko",
3
- "version": "2026.9.3",
3
+ "version": "2026.9.5",
4
4
  "description": "OpenRyoko — Slackで空気を読んで働くAIアシスタント・ゲートウェイ(Jinnベース、Claude Code/Codex/Gemini CLI対応)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,24 @@
1
+ /**
2
+ * In-memory record of conversation anchors the bot has engaged: threads it
3
+ * replied or reacted in, plus the IDs of eligible messages it sent or
4
+ * reacted to — a Discord public thread created from a message reuses that
5
+ * message's ID, so recording message IDs makes future threads rooted on the
6
+ * bot's own messages count as engaged from their first reply.
7
+ *
8
+ * Backs the `respondTo.engagedThreads` continuation. No eviction, matching
9
+ * the Slack ConversationTracker: engagement is a promise ("mention once,
10
+ * then converse"), and silently evicting it would re-arm the mention
11
+ * requirement mid-conversation. Memory stays bounded by what the connector
12
+ * feeds in (see `DiscordConnector.recordEngagement`): nothing at all unless
13
+ * a consumer exists, and only anchor-eligible IDs — DM and in-thread message
14
+ * IDs can never root a thread and are never recorded. At the ~60-70 bytes a
15
+ * Set entry really costs, even hundreds of thousands of anchors stay in the
16
+ * tens of megabytes. Entries live until the connector is recreated (gateway
17
+ * restart, config save, connector reload).
18
+ */
19
+ export declare class EngagedThreadTracker {
20
+ private readonly ids;
21
+ record(id: string): void;
22
+ has(id: string): boolean;
23
+ }
24
+ //# sourceMappingURL=engaged-threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engaged-threads.d.ts","sourceRoot":"","sources":["../../../../src/connectors/discord/engaged-threads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IAEzC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAGzB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * In-memory record of conversation anchors the bot has engaged: threads it
3
+ * replied or reacted in, plus the IDs of eligible messages it sent or
4
+ * reacted to — a Discord public thread created from a message reuses that
5
+ * message's ID, so recording message IDs makes future threads rooted on the
6
+ * bot's own messages count as engaged from their first reply.
7
+ *
8
+ * Backs the `respondTo.engagedThreads` continuation. No eviction, matching
9
+ * the Slack ConversationTracker: engagement is a promise ("mention once,
10
+ * then converse"), and silently evicting it would re-arm the mention
11
+ * requirement mid-conversation. Memory stays bounded by what the connector
12
+ * feeds in (see `DiscordConnector.recordEngagement`): nothing at all unless
13
+ * a consumer exists, and only anchor-eligible IDs — DM and in-thread message
14
+ * IDs can never root a thread and are never recorded. At the ~60-70 bytes a
15
+ * Set entry really costs, even hundreds of thousands of anchors stay in the
16
+ * tens of megabytes. Entries live until the connector is recreated (gateway
17
+ * restart, config save, connector reload).
18
+ */
19
+ export class EngagedThreadTracker {
20
+ ids = new Set();
21
+ record(id) {
22
+ this.ids.add(id);
23
+ }
24
+ has(id) {
25
+ return this.ids.has(id);
26
+ }
27
+ }
28
+ //# sourceMappingURL=engaged-threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engaged-threads.js","sourceRoot":"","sources":["../../../../src/connectors/discord/engaged-threads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,oBAAoB;IACd,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { Connector, ConnectorCapabilities, ConnectorHealth, IncomingMessage, Target } from "../../shared/types.js";
1
+ import type { Connector, ConnectorCapabilities, ConnectorHealth, DiscordReplyStyle, DiscordRespondToConfig, IncomingMessage, Target } from "../../shared/types.js";
2
2
  export interface DiscordConnectorConfig {
3
3
  /** Unique instance identifier (e.g. "discord-vox") */
4
4
  id?: string;
@@ -10,10 +10,19 @@ export interface DiscordConnectorConfig {
10
10
  guildId?: string;
11
11
  /** Only respond to messages in this channel (right-click channel → Copy Channel ID) */
12
12
  channelId?: string;
13
- /** Route messages from specific channels to remote Jinn instances */
14
- channelRouting?: Record<string, string>;
13
+ /** Route messages from specific channels to remote Jinn instances. A plain
14
+ * string value is the remote's URL; the object form adds the bearer token
15
+ * the receiving gateway requires on /api/* when its auth is enabled. */
16
+ channelRouting?: Record<string, string | {
17
+ url: string;
18
+ token?: string;
19
+ }>;
15
20
  /** If set, this instance proxies all Discord operations through the primary instance at this URL */
16
21
  proxyVia?: string;
22
+ /** Deterministic per-scope response gate (DM / channel). See DiscordRespondToConfig. */
23
+ respondTo?: DiscordRespondToConfig;
24
+ /** Where responses land in flat guild channels. Default: "channel". */
25
+ replyStyle?: DiscordReplyStyle;
17
26
  }
18
27
  export declare class DiscordConnector implements Connector {
19
28
  name: string;
@@ -26,6 +35,19 @@ export declare class DiscordConnector implements Connector {
26
35
  private status;
27
36
  private lastError;
28
37
  private typingIntervals;
38
+ private engagedThreads;
39
+ private readonly replyStyle;
40
+ /** channelRouting normalized to { url, token } with string keys (YAML may
41
+ * parse snowflake keys as numbers and values may be plain URL strings). */
42
+ private readonly routing;
43
+ /**
44
+ * Channels where thread creation failed for a channel-level reason
45
+ * (missing permission / access). Both the session keying and the reply
46
+ * destination consult this, so after one failed turn the channel settles
47
+ * into consistent reply-style behavior instead of splitting every turn
48
+ * into a fresh thread-keyed session. In-memory; resets with the connector.
49
+ */
50
+ private readonly threadStyleFailed;
29
51
  constructor(config: DiscordConnectorConfig);
30
52
  onMessage(handler: (msg: IncomingMessage) => void): void;
31
53
  getEmployee(): string | undefined;
@@ -36,11 +58,77 @@ export declare class DiscordConnector implements Connector {
36
58
  reconstructTarget(replyContext: Record<string, unknown> | null | undefined): Target;
37
59
  sendMessage(target: Target, text: string): Promise<string | undefined>;
38
60
  replyMessage(target: Target, text: string): Promise<string | undefined>;
61
+ /**
62
+ * Send a response in Discord-sized chunks. Only the first chunk carries
63
+ * the reply reference — one visual attachment per response, the rest
64
+ * reads as its continuation. Engagement is recorded per delivered chunk,
65
+ * so a partial send still counts. Failures are returned, not thrown, so
66
+ * the caller can see how far the send got.
67
+ */
68
+ private sendChunks;
69
+ /**
70
+ * Where a response physically lands. Threads and DMs are already precise
71
+ * destinations and ignore replyStyle. In flat guild channels: "reply"
72
+ * attaches the response to the triggering message, "thread" opens (or
73
+ * reuses) the thread rooted on it, and "channel" keeps the legacy plain
74
+ * send. The thread path falls back to "reply" when the channel can't host
75
+ * message threads (voice/stage text chat) or when Discord refuses — a
76
+ * channel-level refusal (missing permission/access) is remembered so the
77
+ * session keying in handleMessage stops splitting turns into thread keys.
78
+ */
79
+ private resolveReplyDestination;
39
80
  editMessage(target: Target, text: string): Promise<void>;
40
81
  addReaction(target: Target, emoji: string): Promise<void>;
41
82
  removeReaction(target: Target, emoji: string): Promise<void>;
42
83
  setTypingStatus(channelId: string, _threadTs: string | undefined, status: string): Promise<void>;
43
84
  private handleMessage;
85
+ /**
86
+ * True when this flat-channel message's session should be keyed to the
87
+ * thread the reply will open (replyStyle=thread). Mirrors exactly the
88
+ * conditions under which resolveReplyDestination will actually attempt a
89
+ * thread, so the session key and the reply destination never diverge:
90
+ * channels that can't host message threads, channels where the bot lacks
91
+ * the thread permissions right now (checked per turn against the live
92
+ * permission cache), and channels where creation already failed at the
93
+ * channel level all stay channel-keyed from the first turn.
94
+ */
95
+ private threadSessionEligible;
96
+ /**
97
+ * Pre-flight permission check for thread style, evaluated against the
98
+ * cached guild permissions so it costs no request. Optimistic when the
99
+ * answer is unknowable (no permissionsFor on the channel shape, member
100
+ * not cached) — the failure path in replyMessage self-heals those.
101
+ */
102
+ private canOpenThreads;
103
+ /**
104
+ * Track engagement for the `respondTo.engagedThreads` continuation. Only
105
+ * anchor-eligible IDs whose engagement can actually be consumed are kept:
106
+ * the thread itself, or — in flat guild channels — the acted-on message,
107
+ * since a public thread created from a message reuses its ID. DM and
108
+ * in-thread message IDs can never root a thread and are never recorded,
109
+ * which keeps the unbounded tracker's real footprint small.
110
+ */
111
+ private recordEngagement;
112
+ /**
113
+ * True when engagement recorded under this id can ever be read back. The
114
+ * local gate consults the tracker only when the channel scope is
115
+ * mention-gated with engagedThreads on (DMs have no threads, so dm=mention
116
+ * alone consumes nothing). The routed path consults it for messages whose
117
+ * channel id — or, for threads, parent channel id — is a channelRouting
118
+ * key; for a flat-channel anchor the future thread's parent is the channel
119
+ * itself, so its route counts too.
120
+ */
121
+ private consumesEngagement;
122
+ /**
123
+ * Resolve who the message addresses. Reply attribution applies only to
124
+ * actual replies (`MessageType.Reply`) — a crosspost or forward also
125
+ * carries a `reference` but addresses nobody. `mentions.repliedUser` comes
126
+ * from the gateway's resolved reference and works whether or not the reply
127
+ * pinged; when Discord omitted the resolution and `allowFetch` is set,
128
+ * fall back to one fetch of the referenced message. A deleted reference
129
+ * stays undefined — no addressee.
130
+ */
131
+ private resolveAddressing;
44
132
  /** Forward a message to a remote Jinn instance via HTTP */
45
133
  private proxyToRemote;
46
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connectors/discord/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAiB,YAAW,SAAS;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,MAAM,CAA4D;IAC1E,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAAqD;gBAEhE,MAAM,EAAE,sBAAsB;IA+B1C,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAIxD,WAAW,IAAI,MAAM,GAAG,SAAS;IAI3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,eAAe,IAAI,qBAAqB;IASxC,SAAS,IAAI,eAAe;IAQ5B,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM;IAS7E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAgBtE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAgBvE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAwBxF,aAAa;IA2E3B,2DAA2D;YAC7C,aAAa;CAwC5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connectors/discord/index.ts"],"names":[],"mappings":"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"}