@runcore-sh/runcore 0.5.6 → 0.5.7

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 (174) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/.extensions/ext-byok.json +1 -0
  3. package/dist/.extensions/ext-hosted.json +1 -0
  4. package/dist/.extensions/ext-spawn.json +1 -0
  5. package/dist/agents/autonomous.d.ts.map +1 -1
  6. package/dist/agents/runtime/bus.d.ts +1 -0
  7. package/dist/agents/runtime/bus.d.ts.map +1 -1
  8. package/dist/agents/spawn.d.ts.map +1 -1
  9. package/dist/auth/middleware.d.ts.map +1 -1
  10. package/dist/auth/middleware.js +3 -2
  11. package/dist/auth/middleware.js.map +1 -1
  12. package/dist/calendar/routes.d.ts.map +1 -1
  13. package/dist/calendar/routes.js +8 -7
  14. package/dist/calendar/routes.js.map +1 -1
  15. package/dist/files/registry.d.ts +4 -5
  16. package/dist/files/registry.d.ts.map +1 -1
  17. package/dist/files/registry.js +4 -5
  18. package/dist/files/registry.js.map +1 -1
  19. package/dist/files/store.d.ts +2 -0
  20. package/dist/files/store.d.ts.map +1 -1
  21. package/dist/files/store.js +5 -1
  22. package/dist/files/store.js.map +1 -1
  23. package/dist/instance.d.ts +2 -0
  24. package/dist/instance.d.ts.map +1 -1
  25. package/dist/instance.js +2 -0
  26. package/dist/instance.js.map +1 -1
  27. package/dist/lib/paths.d.ts.map +1 -1
  28. package/dist/lib/paths.js +15 -1
  29. package/dist/lib/paths.js.map +1 -1
  30. package/dist/library/brain-shadow.d.ts.map +1 -1
  31. package/dist/library/brain-shadow.js +5 -4
  32. package/dist/library/brain-shadow.js.map +1 -1
  33. package/dist/library/routes.d.ts.map +1 -1
  34. package/dist/library/routes.js +10 -9
  35. package/dist/library/routes.js.map +1 -1
  36. package/dist/llm/cache.d.ts.map +1 -1
  37. package/dist/llm/cache.js +7 -5
  38. package/dist/llm/cache.js.map +1 -1
  39. package/dist/llm/complete.js +2 -0
  40. package/dist/llm/complete.js.map +1 -1
  41. package/dist/llm/providers/ollama.d.ts.map +1 -1
  42. package/dist/llm/providers/ollama.js +32 -7
  43. package/dist/llm/providers/ollama.js.map +1 -1
  44. package/dist/llm/providers/openrouter.d.ts.map +1 -1
  45. package/dist/llm/providers/openrouter.js +105 -12
  46. package/dist/llm/providers/openrouter.js.map +1 -1
  47. package/dist/llm/providers/types.d.ts +18 -0
  48. package/dist/llm/providers/types.d.ts.map +1 -1
  49. package/dist/llm/retry.d.ts.map +1 -1
  50. package/dist/llm/retry.js +6 -0
  51. package/dist/llm/retry.js.map +1 -1
  52. package/dist/llm/tools/handlers.d.ts +27 -0
  53. package/dist/llm/tools/handlers.d.ts.map +1 -0
  54. package/dist/llm/tools/handlers.js +842 -0
  55. package/dist/llm/tools/handlers.js.map +1 -0
  56. package/dist/llm/tools/index.d.ts +12 -0
  57. package/dist/llm/tools/index.d.ts.map +1 -0
  58. package/dist/llm/tools/index.js +10 -0
  59. package/dist/llm/tools/index.js.map +1 -0
  60. package/dist/llm/tools/loop.d.ts +47 -0
  61. package/dist/llm/tools/loop.d.ts.map +1 -0
  62. package/dist/llm/tools/loop.js +126 -0
  63. package/dist/llm/tools/loop.js.map +1 -0
  64. package/dist/llm/tools/registry.d.ts +27 -0
  65. package/dist/llm/tools/registry.d.ts.map +1 -0
  66. package/dist/llm/tools/registry.js +60 -0
  67. package/dist/llm/tools/registry.js.map +1 -0
  68. package/dist/llm/tools/schemas.d.ts +92 -0
  69. package/dist/llm/tools/schemas.d.ts.map +1 -0
  70. package/dist/llm/tools/schemas.js +154 -0
  71. package/dist/llm/tools/schemas.js.map +1 -0
  72. package/dist/llm/tools/types.d.ts +44 -0
  73. package/dist/llm/tools/types.d.ts.map +1 -0
  74. package/dist/llm/tools/types.js +9 -0
  75. package/dist/llm/tools/types.js.map +1 -0
  76. package/dist/mcp-server.d.ts +1 -1
  77. package/dist/mcp-server.js +249 -5
  78. package/dist/mcp-server.js.map +1 -1
  79. package/dist/memory/visual.d.ts.map +1 -1
  80. package/dist/memory/visual.js +3 -6
  81. package/dist/memory/visual.js.map +1 -1
  82. package/dist/openloop/foldback.js +1 -1
  83. package/dist/openloop/foldback.js.map +1 -1
  84. package/dist/openloop/resolution-scanner.d.ts.map +1 -1
  85. package/dist/openloop/resolution-scanner.js +76 -63
  86. package/dist/openloop/resolution-scanner.js.map +1 -1
  87. package/dist/plugins/github/index.d.ts +49 -0
  88. package/dist/plugins/github/index.d.ts.map +1 -0
  89. package/dist/plugins/github/index.js +153 -0
  90. package/dist/plugins/github/index.js.map +1 -0
  91. package/dist/plugins/index.d.ts +1 -2
  92. package/dist/plugins/index.d.ts.map +1 -1
  93. package/dist/plugins/index.js +79 -2
  94. package/dist/plugins/index.js.map +1 -1
  95. package/dist/plugins/slack/index.d.ts +43 -0
  96. package/dist/plugins/slack/index.d.ts.map +1 -0
  97. package/dist/plugins/slack/index.js +158 -0
  98. package/dist/plugins/slack/index.js.map +1 -0
  99. package/dist/plugins/twilio/index.d.ts +41 -0
  100. package/dist/plugins/twilio/index.d.ts.map +1 -0
  101. package/dist/plugins/twilio/index.js +102 -0
  102. package/dist/plugins/twilio/index.js.map +1 -0
  103. package/dist/pulse/tier.d.ts +1 -1
  104. package/dist/pulse/tier.js +2 -2
  105. package/dist/pulse/tier.js.map +1 -1
  106. package/dist/search/gemini.d.ts +27 -0
  107. package/dist/search/gemini.d.ts.map +1 -0
  108. package/dist/search/gemini.js +103 -0
  109. package/dist/search/gemini.js.map +1 -0
  110. package/dist/server.d.ts.map +1 -1
  111. package/dist/server.js +850 -536
  112. package/dist/server.js.map +1 -1
  113. package/dist/services/routine-patterns.d.ts.map +1 -1
  114. package/dist/services/routine-patterns.js +6 -0
  115. package/dist/services/routine-patterns.js.map +1 -1
  116. package/dist/services/traceInsights.d.ts +5 -0
  117. package/dist/services/traceInsights.d.ts.map +1 -1
  118. package/dist/services/traceInsights.js +18 -1
  119. package/dist/services/traceInsights.js.map +1 -1
  120. package/dist/settings.d.ts +1 -1
  121. package/dist/settings.d.ts.map +1 -1
  122. package/dist/types.d.ts +26 -2
  123. package/dist/types.d.ts.map +1 -1
  124. package/dist/vault/store.d.ts +1 -1
  125. package/dist/vault/store.d.ts.map +1 -1
  126. package/dist/webhooks/mount.d.ts.map +1 -1
  127. package/dist/whiteboard/store.d.ts +40 -0
  128. package/dist/whiteboard/store.d.ts.map +1 -0
  129. package/dist/whiteboard/store.js +280 -0
  130. package/dist/whiteboard/store.js.map +1 -0
  131. package/dist/whiteboard/types.d.ts +55 -0
  132. package/dist/whiteboard/types.d.ts.map +1 -0
  133. package/dist/whiteboard/types.js +9 -0
  134. package/dist/whiteboard/types.js.map +1 -0
  135. package/dist/whiteboard/weight.d.ts +23 -0
  136. package/dist/whiteboard/weight.d.ts.map +1 -0
  137. package/dist/whiteboard/weight.js +126 -0
  138. package/dist/whiteboard/weight.js.map +1 -0
  139. package/package.json +2 -2
  140. package/public/avatar/cache/0cdaf9c41eff4347.mp4 +0 -0
  141. package/public/avatar/cache/3dacc4ea1082ae36.mp4 +0 -0
  142. package/public/avatar/cache/44f5db0bfdde93c6.mp4 +0 -0
  143. package/public/avatar/cache/5628fd10fe55e529.mp4 +0 -0
  144. package/public/avatar/cache/7ee2ab1577690c8a.mp4 +0 -0
  145. package/public/avatar/cache/8c470929e814b6b0.mp4 +0 -0
  146. package/public/avatar/cache/8c908421ce52bf91.mp4 +0 -0
  147. package/public/avatar/cache/9532f8782a42a89c.mp4 +0 -0
  148. package/public/avatar/cache/9ce0dddd0cc4d7a1.mp4 +0 -0
  149. package/public/avatar/cache/a6508e00b6711143.mp4 +0 -0
  150. package/public/avatar/cache/ba61810a8915e0c7.mp4 +0 -0
  151. package/public/avatar/cache/c07bee3a10c917cf.mp4 +0 -0
  152. package/public/avatar/cache/d69175900ea4ea2a.mp4 +0 -0
  153. package/public/avatar/cache/e61039bc8d39cb93.mp4 +0 -0
  154. package/public/avatar/cache/e61c6b7047e2cbdb.mp4 +0 -0
  155. package/public/avatar/cache/efd93c9b18930cf6.mp4 +0 -0
  156. package/public/avatar/cache/f052d74f5c4abab7.mp4 +0 -0
  157. package/public/avatar/cache/f7c0be3429a4ef97.mp4 +0 -0
  158. package/public/avatar/cache/fc8e480f63fe4e35.mp4 +0 -0
  159. package/public/index.html +225 -51
  160. package/public/search-flyout.js +324 -0
  161. package/public/whiteboard.html +915 -0
  162. package/public/avatar/cache/06fa55aececcc478.mp4 +0 -0
  163. package/public/avatar/cache/07a65738ba170827.mp4 +0 -0
  164. package/public/avatar/cache/1185fd491f413406.mp4 +0 -0
  165. package/public/avatar/cache/272c004a41087de5.mp4 +0 -0
  166. package/public/avatar/cache/332384e088ca214b.mp4 +0 -0
  167. package/public/avatar/cache/5d9a960bbf71732c.mp4 +0 -0
  168. package/public/avatar/cache/5e0954401e15af89.mp4 +0 -0
  169. package/public/avatar/cache/b35f7a3d558f22cb.mp4 +0 -0
  170. package/public/avatar/cache/be89f49970672374.mp4 +0 -0
  171. package/public/avatar/cache/c900811e3382ac6d.mp4 +0 -0
  172. package/public/avatar/cache/d42a73667acf5716.mp4 +0 -0
  173. package/public/avatar/cache/e539f247a8908603.mp4 +0 -0
  174. package/public/avatar/cache/ec95af57d33b3f07.mp4 +0 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Slack plugin wrapper.
3
+ *
4
+ * Wraps the existing Slack OAuth client and webhook handlers behind the
5
+ * standard Plugin interface for PluginRegistry lifecycle management.
6
+ *
7
+ * Delegates to:
8
+ * - src/slack/client.ts — OAuth, messaging, reactions, DMs
9
+ * - src/slack/webhooks.ts — event processing, slash commands, interactions
10
+ */
11
+ import { BasePlugin } from "../../lib/BasePlugin.js";
12
+ import type { PluginManifest, PluginAuthProvider, PluginClient, PluginClientHealth, PluginWebhookProvider, PluginResult, PluginRoute, AuthResult, PluginContext } from "../../types/plugin.js";
13
+ import type { WebhookProvider } from "../../webhooks/registry.js";
14
+ declare class SlackAuthProvider implements PluginAuthProvider {
15
+ isConfigured(): boolean;
16
+ isAuthenticated(): boolean;
17
+ getAuthUrl(redirectUri: string): PluginResult<string>;
18
+ exchangeCode(code: string, redirectUri: string): Promise<AuthResult>;
19
+ clearCredentials(): void;
20
+ }
21
+ declare class SlackPluginClient implements PluginClient {
22
+ readonly pluginName = "slack";
23
+ private lastError;
24
+ private lastErrorAt;
25
+ isAvailable(): boolean;
26
+ getHealth(): PluginClientHealth;
27
+ recordError(message: string): void;
28
+ }
29
+ declare class SlackWebhookProvider implements PluginWebhookProvider {
30
+ getWebhookProviders(): WebhookProvider[];
31
+ getRoutes(): PluginRoute[];
32
+ }
33
+ export declare class SlackPlugin extends BasePlugin {
34
+ readonly manifest: PluginManifest;
35
+ readonly auth: SlackAuthProvider;
36
+ readonly client: SlackPluginClient;
37
+ readonly webhooks: SlackWebhookProvider;
38
+ protected onAuthenticate(ctx: PluginContext): Promise<AuthResult>;
39
+ }
40
+ /** Create a Slack plugin instance. */
41
+ export declare function createSlackPlugin(): SlackPlugin;
42
+ export {};
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAqBlE,cAAM,iBAAkB,YAAW,kBAAkB;IACnD,YAAY,IAAI,OAAO;IAIvB,eAAe,IAAI,OAAO;IAI1B,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAM/C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiB1E,gBAAgB,IAAI,IAAI;CAGzB;AAID,cAAM,iBAAkB,YAAW,YAAY;IAC7C,QAAQ,CAAC,UAAU,WAAW;IAC9B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuB;IAE1C,WAAW,IAAI,OAAO;IAItB,SAAS,IAAI,kBAAkB;IAiB/B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAInC;AAID,cAAM,oBAAqB,YAAW,qBAAqB;IACzD,mBAAmB,IAAI,eAAe,EAAE;IASxC,SAAS,IAAI,WAAW,EAAE;CAI3B;AAID,qBAAa,WAAY,SAAQ,UAAU;IACzC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAc/B;IAEF,QAAQ,CAAC,IAAI,oBAA2B;IACxC,QAAQ,CAAC,MAAM,oBAA2B;IAC1C,QAAQ,CAAC,QAAQ,uBAA8B;cAEtB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;CAgBjF;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,IAAI,WAAW,CAE/C"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Slack plugin wrapper.
3
+ *
4
+ * Wraps the existing Slack OAuth client and webhook handlers behind the
5
+ * standard Plugin interface for PluginRegistry lifecycle management.
6
+ *
7
+ * Delegates to:
8
+ * - src/slack/client.ts — OAuth, messaging, reactions, DMs
9
+ * - src/slack/webhooks.ts — event processing, slash commands, interactions
10
+ */
11
+ import { BasePlugin } from "../../lib/BasePlugin.js";
12
+ // All slack modules are byok-tier — dynamic imports
13
+ let _clientMod = null;
14
+ async function getClientMod() {
15
+ if (!_clientMod) {
16
+ try {
17
+ _clientMod = await import("../../slack/client.js");
18
+ }
19
+ catch { }
20
+ }
21
+ return _clientMod;
22
+ }
23
+ let _webhooksMod = null;
24
+ async function getWebhooksMod() {
25
+ if (!_webhooksMod) {
26
+ try {
27
+ _webhooksMod = await import("../../slack/webhooks.js");
28
+ }
29
+ catch { }
30
+ }
31
+ return _webhooksMod;
32
+ }
33
+ // Eagerly start loading
34
+ getClientMod();
35
+ getWebhooksMod();
36
+ // ── Auth Provider ────────────────────────────────────────────────────────────
37
+ class SlackAuthProvider {
38
+ isConfigured() {
39
+ return _clientMod?.isSlackConfigured() ?? false;
40
+ }
41
+ isAuthenticated() {
42
+ return _clientMod?.isSlackAuthenticated() ?? false;
43
+ }
44
+ getAuthUrl(redirectUri) {
45
+ if (!_clientMod)
46
+ return { ok: false, message: "Slack client module unavailable" };
47
+ const result = _clientMod.getOAuthUrl(redirectUri);
48
+ return { ok: result.ok, data: result.url, message: result.message };
49
+ }
50
+ async exchangeCode(code, redirectUri) {
51
+ const mod = await getClientMod();
52
+ if (!mod)
53
+ return { ok: false, message: "Slack client module unavailable" };
54
+ const result = await mod.exchangeOAuthCode(code, redirectUri);
55
+ if (!result.ok)
56
+ return { ok: false, message: result.message };
57
+ const credentials = {};
58
+ if (result.botToken)
59
+ credentials.SLACK_BOT_TOKEN = result.botToken;
60
+ if (result.teamId)
61
+ credentials.SLACK_TEAM_ID = result.teamId;
62
+ return {
63
+ ok: true,
64
+ message: `Connected to ${result.teamName ?? "Slack workspace"}`,
65
+ credentials: Object.keys(credentials).length > 0 ? credentials : undefined,
66
+ };
67
+ }
68
+ clearCredentials() {
69
+ // No token cache to clear — Slack uses a static bot token
70
+ }
71
+ }
72
+ // ── Client ───────────────────────────────────────────────────────────────────
73
+ class SlackPluginClient {
74
+ pluginName = "slack";
75
+ lastError = null;
76
+ lastErrorAt = null;
77
+ isAvailable() {
78
+ return _clientMod?.isSlackAuthenticated() ?? false;
79
+ }
80
+ getHealth() {
81
+ const client = _clientMod?.getClient();
82
+ if (client) {
83
+ const h = client.getHealth();
84
+ return {
85
+ available: h.available,
86
+ lastError: h.lastErrorMessage,
87
+ lastErrorAt: this.lastErrorAt,
88
+ };
89
+ }
90
+ return {
91
+ available: false,
92
+ lastError: this.lastError,
93
+ lastErrorAt: this.lastErrorAt,
94
+ };
95
+ }
96
+ recordError(message) {
97
+ this.lastError = message;
98
+ this.lastErrorAt = new Date().toISOString();
99
+ }
100
+ }
101
+ // ── Webhook Provider ─────────────────────────────────────────────────────────
102
+ class SlackWebhookProvider {
103
+ getWebhookProviders() {
104
+ if (!_webhooksMod)
105
+ return [];
106
+ return [
107
+ _webhooksMod.slackEventsProvider,
108
+ _webhooksMod.slackCommandsProvider,
109
+ _webhooksMod.slackInteractionsProvider,
110
+ ];
111
+ }
112
+ getRoutes() {
113
+ // Routes are registered via webhook registry, not plugin routes
114
+ return [];
115
+ }
116
+ }
117
+ // ── Plugin ───────────────────────────────────────────────────────────────────
118
+ export class SlackPlugin extends BasePlugin {
119
+ manifest = {
120
+ name: "slack",
121
+ version: "1.0.0",
122
+ description: "Slack integration — messaging, slash commands, and event handling.",
123
+ authType: "oauth2",
124
+ requiredConfig: ["SLACK_CLIENT_ID", "SLACK_CLIENT_SECRET"],
125
+ optionalConfig: ["SLACK_BOT_TOKEN", "SLACK_SIGNING_SECRET"],
126
+ scopes: [
127
+ "app_mentions:read", "channels:history", "channels:join", "channels:read",
128
+ "chat:write", "commands", "files:read", "files:write", "groups:read",
129
+ "im:history", "im:read", "im:write", "mpim:read", "reactions:read",
130
+ "reactions:write", "users:read", "users:read.email",
131
+ ],
132
+ capabilities: ["read", "write", "notify", "webhook", "oauth"],
133
+ };
134
+ auth = new SlackAuthProvider();
135
+ client = new SlackPluginClient();
136
+ webhooks = new SlackWebhookProvider();
137
+ async onAuthenticate(ctx) {
138
+ if (this.auth.isAuthenticated()) {
139
+ // Validate the token
140
+ const mod = await getClientMod();
141
+ const client = mod?.getClient();
142
+ if (client) {
143
+ const result = await client.validateAuth();
144
+ if (result.valid) {
145
+ return { ok: true, message: `Connected as bot in team ${result.teamId ?? "unknown"}` };
146
+ }
147
+ return { ok: false, message: result.error ?? "Token validation failed" };
148
+ }
149
+ return { ok: true, message: "Bot token present" };
150
+ }
151
+ return { ok: false, message: "SLACK_BOT_TOKEN not set — complete OAuth flow first" };
152
+ }
153
+ }
154
+ /** Create a Slack plugin instance. */
155
+ export function createSlackPlugin() {
156
+ return new SlackPlugin();
157
+ }
158
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Twilio plugin wrapper.
3
+ *
4
+ * Wraps the existing Twilio voice call module behind the standard Plugin
5
+ * interface for PluginRegistry lifecycle management.
6
+ *
7
+ * Delegates to:
8
+ * - src/twilio/call.ts — voice call via REST API
9
+ */
10
+ import { BasePlugin } from "../../lib/BasePlugin.js";
11
+ import type { PluginManifest, PluginAuthProvider, PluginClient, PluginClientHealth, PluginResult, AuthResult, PluginContext } from "../../types/plugin.js";
12
+ declare class TwilioAuthProvider implements PluginAuthProvider {
13
+ isConfigured(): boolean;
14
+ isAuthenticated(): boolean;
15
+ clearCredentials(): void;
16
+ }
17
+ declare class TwilioPluginClient implements PluginClient {
18
+ readonly pluginName = "twilio";
19
+ private lastError;
20
+ private lastErrorAt;
21
+ isAvailable(): boolean;
22
+ getHealth(): PluginClientHealth;
23
+ recordError(message: string): void;
24
+ clearError(): void;
25
+ /** Make a voice call. Convenience method exposing the underlying module. */
26
+ makeCall(opts?: {
27
+ to?: string;
28
+ message?: string;
29
+ voice?: string;
30
+ }): Promise<PluginResult<string>>;
31
+ }
32
+ export declare class TwilioPlugin extends BasePlugin {
33
+ readonly manifest: PluginManifest;
34
+ readonly auth: TwilioAuthProvider;
35
+ readonly client: TwilioPluginClient;
36
+ protected onAuthenticate(_ctx: PluginContext): Promise<AuthResult>;
37
+ }
38
+ /** Create a Twilio plugin instance. */
39
+ export declare function createTwilioPlugin(): TwilioPlugin;
40
+ export {};
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/twilio/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,uBAAuB,CAAC;AAc/B,cAAM,kBAAmB,YAAW,kBAAkB;IACpD,YAAY,IAAI,OAAO;IAMvB,eAAe,IAAI,OAAO;IAK1B,gBAAgB,IAAI,IAAI;CAGzB;AAID,cAAM,kBAAmB,YAAW,YAAY;IAC9C,QAAQ,CAAC,UAAU,YAAY;IAC/B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuB;IAE1C,WAAW,IAAI,OAAO;IAMtB,SAAS,IAAI,kBAAkB;IAQ/B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,UAAU,IAAI,IAAI;IAKlB,4EAA4E;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;CAYxG;AAID,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAQ/B;IAEF,QAAQ,CAAC,IAAI,qBAA4B;IACzC,QAAQ,CAAC,MAAM,qBAA4B;cAElB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;CAMlF;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Twilio plugin wrapper.
3
+ *
4
+ * Wraps the existing Twilio voice call module behind the standard Plugin
5
+ * interface for PluginRegistry lifecycle management.
6
+ *
7
+ * Delegates to:
8
+ * - src/twilio/call.ts — voice call via REST API
9
+ */
10
+ import { BasePlugin } from "../../lib/BasePlugin.js";
11
+ // Twilio is byok-tier — dynamic import
12
+ let _callMod = null;
13
+ async function getCallMod() {
14
+ if (!_callMod) {
15
+ try {
16
+ _callMod = await import("../../twilio/call.js");
17
+ }
18
+ catch { }
19
+ }
20
+ return _callMod;
21
+ }
22
+ // Eagerly start loading
23
+ getCallMod();
24
+ // ── Auth Provider ────────────────────────────────────────────────────────────
25
+ class TwilioAuthProvider {
26
+ isConfigured() {
27
+ return !!process.env.TWILIO_ACCOUNT_SID
28
+ && !!process.env.TWILIO_AUTH_TOKEN
29
+ && !!process.env.TWILIO_PHONE_NUMBER;
30
+ }
31
+ isAuthenticated() {
32
+ // Twilio uses API key auth — if configured, it's authenticated
33
+ return this.isConfigured();
34
+ }
35
+ clearCredentials() {
36
+ // No token cache — credentials come from process.env
37
+ }
38
+ }
39
+ // ── Client ───────────────────────────────────────────────────────────────────
40
+ class TwilioPluginClient {
41
+ pluginName = "twilio";
42
+ lastError = null;
43
+ lastErrorAt = null;
44
+ isAvailable() {
45
+ return !!process.env.TWILIO_ACCOUNT_SID
46
+ && !!process.env.TWILIO_AUTH_TOKEN
47
+ && !!process.env.TWILIO_PHONE_NUMBER;
48
+ }
49
+ getHealth() {
50
+ return {
51
+ available: this.isAvailable(),
52
+ lastError: this.lastError,
53
+ lastErrorAt: this.lastErrorAt,
54
+ };
55
+ }
56
+ recordError(message) {
57
+ this.lastError = message;
58
+ this.lastErrorAt = new Date().toISOString();
59
+ }
60
+ clearError() {
61
+ this.lastError = null;
62
+ this.lastErrorAt = null;
63
+ }
64
+ /** Make a voice call. Convenience method exposing the underlying module. */
65
+ async makeCall(opts) {
66
+ const mod = await getCallMod();
67
+ if (!mod)
68
+ return { ok: false, message: "Twilio call module unavailable" };
69
+ const result = await mod.makeCall(opts);
70
+ if (result.ok) {
71
+ this.clearError();
72
+ return { ok: true, data: result.sid, message: result.message };
73
+ }
74
+ this.recordError(result.message);
75
+ return { ok: false, message: result.message };
76
+ }
77
+ }
78
+ // ── Plugin ───────────────────────────────────────────────────────────────────
79
+ export class TwilioPlugin extends BasePlugin {
80
+ manifest = {
81
+ name: "twilio",
82
+ version: "1.0.0",
83
+ description: "Twilio integration — voice calls via REST API.",
84
+ authType: "api_key",
85
+ requiredConfig: ["TWILIO_ACCOUNT_SID", "TWILIO_AUTH_TOKEN", "TWILIO_PHONE_NUMBER"],
86
+ optionalConfig: ["HUMAN_PHONE_NUMBER"],
87
+ capabilities: ["notify"],
88
+ };
89
+ auth = new TwilioAuthProvider();
90
+ client = new TwilioPluginClient();
91
+ async onAuthenticate(_ctx) {
92
+ if (this.auth.isConfigured()) {
93
+ return { ok: true, message: "Twilio credentials present" };
94
+ }
95
+ return { ok: false, message: "Missing TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, or TWILIO_PHONE_NUMBER" };
96
+ }
97
+ }
98
+ /** Create a Twilio plugin instance. */
99
+ export function createTwilioPlugin() {
100
+ return new TwilioPlugin();
101
+ }
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/twilio/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flywheel Tier System.
3
3
  *
4
- * The flywheel is a three-body system: Sense (Core), Work (GMR), Joy (BragBin).
4
+ * The flywheel is a three-body system: Sense (Core), Work (GMR), Joy.
5
5
  * All three dots must reach the same level for the flywheel to advance a tier.
6
6
  * The weakest dot determines the overall tier — no dot can be left behind.
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flywheel Tier System.
3
3
  *
4
- * The flywheel is a three-body system: Sense (Core), Work (GMR), Joy (BragBin).
4
+ * The flywheel is a three-body system: Sense (Core), Work (GMR), Joy.
5
5
  * All three dots must reach the same level for the flywheel to advance a tier.
6
6
  * The weakest dot determines the overall tier — no dot can be left behind.
7
7
  *
@@ -18,7 +18,7 @@
18
18
  export const DOT_PRODUCT_MAP = {
19
19
  sense: "Core",
20
20
  work: "GMReports",
21
- joy: "BragBin",
21
+ joy: "Joy",
22
22
  };
23
23
  /** Color palette that deepens with tier. No sharp transitions. */
24
24
  export const TIER_COLORS = {
@@ -1 +1 @@
1
- {"version":3,"file":"tier.js","sourceRoot":"","sources":["../../src/pulse/tier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tier.js","sourceRoot":"","sources":["../../src/pulse/tier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Gemini Search — Google AI with Search grounding.
3
+ *
4
+ * Uses the Gemini API with the google_search tool to get grounded,
5
+ * web-sourced answers. Fast, concise, cite-backed.
6
+ *
7
+ * Requires: GEMINI_API_KEY in vault/env.
8
+ */
9
+ export interface GeminiSearchResult {
10
+ ok: boolean;
11
+ answer: string;
12
+ sources: Array<{
13
+ title: string;
14
+ url: string;
15
+ }>;
16
+ message: string;
17
+ }
18
+ /**
19
+ * Check if Gemini search is available (API key set).
20
+ */
21
+ export declare function isGeminiAvailable(): boolean;
22
+ /**
23
+ * Search using Gemini with Google Search grounding.
24
+ * Returns a grounded answer with source citations.
25
+ */
26
+ export declare function geminiSearch(query: string): Promise<GeminiSearchResult>;
27
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/search/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuF7E"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Gemini Search — Google AI with Search grounding.
3
+ *
4
+ * Uses the Gemini API with the google_search tool to get grounded,
5
+ * web-sourced answers. Fast, concise, cite-backed.
6
+ *
7
+ * Requires: GEMINI_API_KEY in vault/env.
8
+ */
9
+ import { createLogger } from "../utils/logger.js";
10
+ const log = createLogger("search.gemini");
11
+ const API_BASE = "https://generativelanguage.googleapis.com/v1beta/models";
12
+ const DEFAULT_MODEL = "gemini-2.0-flash";
13
+ /**
14
+ * Check if Gemini search is available (API key set).
15
+ */
16
+ export function isGeminiAvailable() {
17
+ return !!process.env.GEMINI_API_KEY;
18
+ }
19
+ /**
20
+ * Search using Gemini with Google Search grounding.
21
+ * Returns a grounded answer with source citations.
22
+ */
23
+ export async function geminiSearch(query) {
24
+ const apiKey = process.env.GEMINI_API_KEY;
25
+ if (!apiKey) {
26
+ return { ok: false, answer: "", sources: [], message: "GEMINI_API_KEY not set" };
27
+ }
28
+ const model = process.env.GEMINI_MODEL ?? DEFAULT_MODEL;
29
+ const url = `${API_BASE}/${model}:generateContent?key=${apiKey}`;
30
+ log.debug("Gemini search", { query, model });
31
+ try {
32
+ const res = await fetch(url, {
33
+ method: "POST",
34
+ headers: { "Content-Type": "application/json" },
35
+ body: JSON.stringify({
36
+ contents: [
37
+ {
38
+ role: "user",
39
+ parts: [{ text: query }],
40
+ },
41
+ ],
42
+ tools: [{ google_search: {} }],
43
+ generationConfig: {
44
+ temperature: 0.1,
45
+ maxOutputTokens: 1024,
46
+ },
47
+ }),
48
+ signal: AbortSignal.timeout(15_000),
49
+ });
50
+ if (!res.ok) {
51
+ const body = await res.text().catch(() => "");
52
+ log.error("Gemini API error", { status: res.status, body: body.slice(0, 200) });
53
+ return { ok: false, answer: "", sources: [], message: `Gemini error (${res.status})` };
54
+ }
55
+ const data = await res.json();
56
+ // Extract answer text
57
+ const candidate = data.candidates?.[0];
58
+ if (!candidate?.content?.parts) {
59
+ return { ok: false, answer: "", sources: [], message: "No response from Gemini" };
60
+ }
61
+ const answer = candidate.content.parts
62
+ .filter((p) => p.text)
63
+ .map((p) => p.text)
64
+ .join("\n");
65
+ // Extract grounding sources
66
+ const sources = [];
67
+ const metadata = candidate.groundingMetadata;
68
+ if (metadata?.groundingChunks) {
69
+ for (const chunk of metadata.groundingChunks) {
70
+ if (chunk.web?.uri) {
71
+ sources.push({
72
+ title: chunk.web.title ?? chunk.web.uri,
73
+ url: chunk.web.uri,
74
+ });
75
+ }
76
+ }
77
+ }
78
+ // Deduplicate sources by URL
79
+ const seen = new Set();
80
+ const uniqueSources = sources.filter((s) => {
81
+ if (seen.has(s.url))
82
+ return false;
83
+ seen.add(s.url);
84
+ return true;
85
+ });
86
+ log.info("Gemini search complete", { query, answerLength: answer.length, sourceCount: uniqueSources.length });
87
+ return {
88
+ ok: true,
89
+ answer,
90
+ sources: uniqueSources,
91
+ message: "Search complete",
92
+ };
93
+ }
94
+ catch (err) {
95
+ if (err.name === "TimeoutError") {
96
+ log.warn("Gemini search timeout", { query });
97
+ return { ok: false, answer: "", sources: [], message: "Search timed out" };
98
+ }
99
+ log.error("Gemini search failed", { query, error: err.message });
100
+ return { ok: false, answer: "", sources: [], message: `Search failed: ${err.message}` };
101
+ }
102
+ }
103
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/search/gemini.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkXH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAirMD,iBAAe,KAAK,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAQ,CAAA;CAAE,iBA6tBxE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqXH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AA2/MD,iBAAe,KAAK,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAQ,CAAA;CAAE,iBA6tBxE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}