@troykelly/openclaw-projects 0.0.1

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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/api-client.d.ts +81 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +216 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cli.d.ts +112 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +233 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +324 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +287 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/context.d.ts +87 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +144 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/gateway/rpc-methods.d.ts +93 -0
  20. package/dist/gateway/rpc-methods.d.ts.map +1 -0
  21. package/dist/gateway/rpc-methods.js +145 -0
  22. package/dist/gateway/rpc-methods.js.map +1 -0
  23. package/dist/hooks.d.ts +86 -0
  24. package/dist/hooks.d.ts.map +1 -0
  25. package/dist/hooks.js +314 -0
  26. package/dist/hooks.js.map +1 -0
  27. package/dist/index.d.ts +106 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +221 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/logger.d.ts +22 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +78 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/register-openclaw.d.ts +43 -0
  36. package/dist/register-openclaw.d.ts.map +1 -0
  37. package/dist/register-openclaw.js +1838 -0
  38. package/dist/register-openclaw.js.map +1 -0
  39. package/dist/secrets.d.ts +56 -0
  40. package/dist/secrets.d.ts.map +1 -0
  41. package/dist/secrets.js +161 -0
  42. package/dist/secrets.js.map +1 -0
  43. package/dist/services/notification-service.d.ts +60 -0
  44. package/dist/services/notification-service.d.ts.map +1 -0
  45. package/dist/services/notification-service.js +145 -0
  46. package/dist/services/notification-service.js.map +1 -0
  47. package/dist/tools/contacts.d.ts +139 -0
  48. package/dist/tools/contacts.d.ts.map +1 -0
  49. package/dist/tools/contacts.js +333 -0
  50. package/dist/tools/contacts.js.map +1 -0
  51. package/dist/tools/email-send.d.ts +71 -0
  52. package/dist/tools/email-send.d.ts.map +1 -0
  53. package/dist/tools/email-send.js +132 -0
  54. package/dist/tools/email-send.js.map +1 -0
  55. package/dist/tools/file-share.d.ts +64 -0
  56. package/dist/tools/file-share.d.ts.map +1 -0
  57. package/dist/tools/file-share.js +133 -0
  58. package/dist/tools/file-share.js.map +1 -0
  59. package/dist/tools/index.d.ts +22 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +33 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/memory-forget.d.ts +69 -0
  64. package/dist/tools/memory-forget.d.ts.map +1 -0
  65. package/dist/tools/memory-forget.js +224 -0
  66. package/dist/tools/memory-forget.js.map +1 -0
  67. package/dist/tools/memory-recall.d.ts +82 -0
  68. package/dist/tools/memory-recall.d.ts.map +1 -0
  69. package/dist/tools/memory-recall.js +161 -0
  70. package/dist/tools/memory-recall.js.map +1 -0
  71. package/dist/tools/memory-store.d.ts +80 -0
  72. package/dist/tools/memory-store.d.ts.map +1 -0
  73. package/dist/tools/memory-store.js +172 -0
  74. package/dist/tools/memory-store.js.map +1 -0
  75. package/dist/tools/message-search.d.ts +85 -0
  76. package/dist/tools/message-search.d.ts.map +1 -0
  77. package/dist/tools/message-search.js +137 -0
  78. package/dist/tools/message-search.js.map +1 -0
  79. package/dist/tools/notebooks.d.ts +155 -0
  80. package/dist/tools/notebooks.d.ts.map +1 -0
  81. package/dist/tools/notebooks.js +287 -0
  82. package/dist/tools/notebooks.js.map +1 -0
  83. package/dist/tools/notes.d.ts +272 -0
  84. package/dist/tools/notes.d.ts.map +1 -0
  85. package/dist/tools/notes.js +530 -0
  86. package/dist/tools/notes.js.map +1 -0
  87. package/dist/tools/projects.d.ts +139 -0
  88. package/dist/tools/projects.d.ts.map +1 -0
  89. package/dist/tools/projects.js +280 -0
  90. package/dist/tools/projects.js.map +1 -0
  91. package/dist/tools/relationships.d.ts +133 -0
  92. package/dist/tools/relationships.d.ts.map +1 -0
  93. package/dist/tools/relationships.js +281 -0
  94. package/dist/tools/relationships.js.map +1 -0
  95. package/dist/tools/sms-send.d.ts +62 -0
  96. package/dist/tools/sms-send.d.ts.map +1 -0
  97. package/dist/tools/sms-send.js +121 -0
  98. package/dist/tools/sms-send.js.map +1 -0
  99. package/dist/tools/threads.d.ts +127 -0
  100. package/dist/tools/threads.d.ts.map +1 -0
  101. package/dist/tools/threads.js +202 -0
  102. package/dist/tools/threads.js.map +1 -0
  103. package/dist/tools/todos.d.ts +142 -0
  104. package/dist/tools/todos.d.ts.map +1 -0
  105. package/dist/tools/todos.js +308 -0
  106. package/dist/tools/todos.js.map +1 -0
  107. package/dist/types/openclaw-api.d.ts +215 -0
  108. package/dist/types/openclaw-api.d.ts.map +1 -0
  109. package/dist/types/openclaw-api.js +10 -0
  110. package/dist/types/openclaw-api.js.map +1 -0
  111. package/dist/utils/zod-to-json-schema.d.ts +19 -0
  112. package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
  113. package/dist/utils/zod-to-json-schema.js +132 -0
  114. package/dist/utils/zod-to-json-schema.js.map +1 -0
  115. package/openclaw.plugin.json +229 -0
  116. package/package.json +69 -0
  117. package/skills/contact-lookup/SKILL.md +30 -0
  118. package/skills/daily-summary/SKILL.md +23 -0
  119. package/skills/project-status/SKILL.md +33 -0
  120. package/skills/send-reminder/SKILL.md +42 -0
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Context extraction utilities for OpenClaw plugin.
3
+ * Extracts user, agent, and session context from the OpenClaw runtime.
4
+ */
5
+ /** User identity information */
6
+ export interface UserContext {
7
+ /** Unique user identifier */
8
+ userId: string;
9
+ /** User display name (if available) */
10
+ displayName?: string;
11
+ /** User email (if available) */
12
+ email?: string;
13
+ }
14
+ /** Agent information */
15
+ export interface AgentContext {
16
+ /** Agent identifier */
17
+ agentId: string;
18
+ /** Agent name */
19
+ name: string;
20
+ /** Agent version */
21
+ version?: string;
22
+ }
23
+ /** Session information */
24
+ export interface SessionContext {
25
+ /** Session identifier */
26
+ sessionId: string;
27
+ /** Session start timestamp */
28
+ startedAt: Date;
29
+ /** Conversation thread ID (if part of a thread) */
30
+ threadId?: string;
31
+ }
32
+ /** Combined context from all sources */
33
+ export interface PluginContext {
34
+ user?: UserContext;
35
+ agent: AgentContext;
36
+ session: SessionContext;
37
+ }
38
+ /**
39
+ * Extracts user context from OpenClaw runtime context.
40
+ * Returns undefined if user information is not available.
41
+ */
42
+ export declare function extractUserContext(runtimeContext: unknown): UserContext | undefined;
43
+ /**
44
+ * Extracts agent context from OpenClaw runtime context.
45
+ */
46
+ export declare function extractAgentContext(runtimeContext: unknown): AgentContext;
47
+ /**
48
+ * Extracts session context from OpenClaw runtime context.
49
+ */
50
+ export declare function extractSessionContext(runtimeContext: unknown): SessionContext;
51
+ /**
52
+ * Extracts complete plugin context from OpenClaw runtime.
53
+ */
54
+ export declare function extractContext(runtimeContext: unknown): PluginContext;
55
+ /**
56
+ * Validates a session key format.
57
+ * - Max length: 500 characters
58
+ * - Allowed characters: alphanumeric, colon, hyphen, underscore
59
+ */
60
+ export declare function validateSessionKey(sessionKey: string | null | undefined): boolean;
61
+ /**
62
+ * Parse agentId from session key.
63
+ * Session key format: agent:<agentId>:<channel>:...
64
+ * Returns "unknown" for invalid or missing keys.
65
+ */
66
+ export declare function parseAgentIdFromSessionKey(sessionKey: string | null | undefined): string;
67
+ /** Context for user scoping */
68
+ export interface ScopingContext {
69
+ /** Agent ID for agent-level scoping */
70
+ agentId: string;
71
+ /** Full session key for session-level isolation */
72
+ sessionKey?: string;
73
+ /** External sender ID */
74
+ senderId?: string;
75
+ /** Communication channel */
76
+ channel?: string;
77
+ /** Canonical identity key for cross-agent queries */
78
+ identityKey?: string;
79
+ }
80
+ /**
81
+ * Get the user scope key based on configured scoping mode.
82
+ * @param context - User scoping context
83
+ * @param scopeMode - "agent" | "identity" | "session"
84
+ * @returns Scope key to pass to backend API
85
+ */
86
+ export declare function getUserScopeKey(context: ScopingContext, scopeMode: 'agent' | 'identity' | 'session'): string;
87
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,SAAS,EAAE,IAAI,CAAA;IACf,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,cAAc,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAiBnF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,OAAO,GAAG,YAAY,CAsBzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,OAAO,GAAG,cAAc,CA2B7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,cAAc,EAAE,OAAO,GAAG,aAAa,CAMrE;AAQD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAQjF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAsBxF;AAED,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAC1C,MAAM,CAgBR"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Context extraction utilities for OpenClaw plugin.
3
+ * Extracts user, agent, and session context from the OpenClaw runtime.
4
+ */
5
+ /**
6
+ * Extracts user context from OpenClaw runtime context.
7
+ * Returns undefined if user information is not available.
8
+ */
9
+ export function extractUserContext(runtimeContext) {
10
+ if (!runtimeContext || typeof runtimeContext !== 'object') {
11
+ return undefined;
12
+ }
13
+ const ctx = runtimeContext;
14
+ const user = ctx.user;
15
+ if (!user || typeof user.id !== 'string') {
16
+ return undefined;
17
+ }
18
+ return {
19
+ userId: user.id,
20
+ displayName: typeof user.displayName === 'string' ? user.displayName : undefined,
21
+ email: typeof user.email === 'string' ? user.email : undefined,
22
+ };
23
+ }
24
+ /**
25
+ * Extracts agent context from OpenClaw runtime context.
26
+ */
27
+ export function extractAgentContext(runtimeContext) {
28
+ const defaultAgent = {
29
+ agentId: 'unknown',
30
+ name: 'Unknown Agent',
31
+ };
32
+ if (!runtimeContext || typeof runtimeContext !== 'object') {
33
+ return defaultAgent;
34
+ }
35
+ const ctx = runtimeContext;
36
+ const agent = ctx.agent;
37
+ if (!agent) {
38
+ return defaultAgent;
39
+ }
40
+ return {
41
+ agentId: typeof agent.id === 'string' ? agent.id : 'unknown',
42
+ name: typeof agent.name === 'string' ? agent.name : 'Unknown Agent',
43
+ version: typeof agent.version === 'string' ? agent.version : undefined,
44
+ };
45
+ }
46
+ /**
47
+ * Extracts session context from OpenClaw runtime context.
48
+ */
49
+ export function extractSessionContext(runtimeContext) {
50
+ const defaultSession = {
51
+ sessionId: crypto.randomUUID(),
52
+ startedAt: new Date(),
53
+ };
54
+ if (!runtimeContext || typeof runtimeContext !== 'object') {
55
+ return defaultSession;
56
+ }
57
+ const ctx = runtimeContext;
58
+ const session = ctx.session;
59
+ if (!session) {
60
+ return defaultSession;
61
+ }
62
+ return {
63
+ sessionId: typeof session.id === 'string' ? session.id : crypto.randomUUID(),
64
+ startedAt: session.startedAt instanceof Date
65
+ ? session.startedAt
66
+ : typeof session.startedAt === 'string'
67
+ ? new Date(session.startedAt)
68
+ : new Date(),
69
+ threadId: typeof session.threadId === 'string' ? session.threadId : undefined,
70
+ };
71
+ }
72
+ /**
73
+ * Extracts complete plugin context from OpenClaw runtime.
74
+ */
75
+ export function extractContext(runtimeContext) {
76
+ return {
77
+ user: extractUserContext(runtimeContext),
78
+ agent: extractAgentContext(runtimeContext),
79
+ session: extractSessionContext(runtimeContext),
80
+ };
81
+ }
82
+ /** Allowed characters in session keys: alphanumeric, colon, hyphen, underscore */
83
+ const SESSION_KEY_REGEX = /^[a-zA-Z0-9:_-]+$/;
84
+ /** Maximum length for session keys */
85
+ const MAX_SESSION_KEY_LENGTH = 500;
86
+ /**
87
+ * Validates a session key format.
88
+ * - Max length: 500 characters
89
+ * - Allowed characters: alphanumeric, colon, hyphen, underscore
90
+ */
91
+ export function validateSessionKey(sessionKey) {
92
+ if (!sessionKey || sessionKey.length === 0) {
93
+ return false;
94
+ }
95
+ if (sessionKey.length > MAX_SESSION_KEY_LENGTH) {
96
+ return false;
97
+ }
98
+ return SESSION_KEY_REGEX.test(sessionKey);
99
+ }
100
+ /**
101
+ * Parse agentId from session key.
102
+ * Session key format: agent:<agentId>:<channel>:...
103
+ * Returns "unknown" for invalid or missing keys.
104
+ */
105
+ export function parseAgentIdFromSessionKey(sessionKey) {
106
+ if (!sessionKey || sessionKey.length === 0) {
107
+ return 'unknown';
108
+ }
109
+ // Validate session key format first
110
+ if (!validateSessionKey(sessionKey)) {
111
+ return 'unknown';
112
+ }
113
+ // Parse format: agent:<agentId>:<channel>:...
114
+ const parts = sessionKey.split(':');
115
+ if (parts.length < 3 || parts[0] !== 'agent') {
116
+ return 'unknown';
117
+ }
118
+ const agentId = parts[1];
119
+ if (!agentId || agentId.length === 0) {
120
+ return 'unknown';
121
+ }
122
+ return agentId;
123
+ }
124
+ /**
125
+ * Get the user scope key based on configured scoping mode.
126
+ * @param context - User scoping context
127
+ * @param scopeMode - "agent" | "identity" | "session"
128
+ * @returns Scope key to pass to backend API
129
+ */
130
+ export function getUserScopeKey(context, scopeMode) {
131
+ switch (scopeMode) {
132
+ case 'agent':
133
+ return context.agentId || 'unknown';
134
+ case 'identity':
135
+ // Prefer identity key if available, fall back to agent
136
+ return context.identityKey || context.agentId || 'unknown';
137
+ case 'session':
138
+ // Prefer full session key if available, fall back to agent
139
+ return context.sessionKey || context.agentId || 'unknown';
140
+ default:
141
+ return context.agentId || 'unknown';
142
+ }
143
+ }
144
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Gateway RPC methods for real-time updates.
3
+ * Part of Epic #310, Issue #324.
4
+ *
5
+ * Provides bidirectional communication between OpenClaw agents and
6
+ * the openclaw-projects backend via the Gateway protocol.
7
+ *
8
+ * @see https://docs.openclaw.ai/gateway/protocol.md
9
+ */
10
+ import type { ApiClient } from '../api-client.js';
11
+ import type { Logger } from '../logger.js';
12
+ /** Valid notification event types */
13
+ export type NotificationEvent = 'message.new' | 'message.delivered' | 'task.due' | 'task.overdue' | 'memory.created';
14
+ /** Subscribe method parameters */
15
+ export interface SubscribeParams {
16
+ /** Event types to subscribe to */
17
+ events: string[];
18
+ }
19
+ /** Subscribe method result */
20
+ export interface SubscribeResult {
21
+ /** Events successfully subscribed to */
22
+ subscribed: NotificationEvent[];
23
+ }
24
+ /** Unsubscribe method parameters */
25
+ export interface UnsubscribeParams {
26
+ }
27
+ /** Unsubscribe method result */
28
+ export interface UnsubscribeResult {
29
+ /** Whether unsubscribe was successful */
30
+ unsubscribed: boolean;
31
+ }
32
+ /** Get notifications parameters */
33
+ export interface GetNotificationsParams {
34
+ /** ISO timestamp to get notifications since */
35
+ since?: string;
36
+ /** Maximum notifications to return (default: 20) */
37
+ limit?: number;
38
+ }
39
+ /** Notification object */
40
+ export interface Notification {
41
+ /** Unique notification ID */
42
+ id: string;
43
+ /** Event type */
44
+ event: NotificationEvent;
45
+ /** Event-specific payload */
46
+ payload: Record<string, unknown>;
47
+ /** When the notification was created */
48
+ createdAt: string;
49
+ }
50
+ /** Get notifications result */
51
+ export interface GetNotificationsResult {
52
+ /** Notifications matching the query */
53
+ notifications: Notification[];
54
+ /** Whether there are more notifications available */
55
+ hasMore: boolean;
56
+ }
57
+ /** Options for creating gateway methods */
58
+ export interface GatewayMethodsOptions {
59
+ /** Logger instance */
60
+ logger: Logger;
61
+ /** API client for backend calls */
62
+ apiClient: ApiClient;
63
+ /** User ID for scoping */
64
+ userId: string;
65
+ }
66
+ /** Gateway methods interface */
67
+ export interface GatewayMethods {
68
+ /** Subscribe to event notifications */
69
+ subscribe: (params: SubscribeParams) => Promise<SubscribeResult>;
70
+ /** Unsubscribe from all event notifications */
71
+ unsubscribe: (params: UnsubscribeParams) => Promise<UnsubscribeResult>;
72
+ /** Get pending notifications */
73
+ getNotifications: (params: GetNotificationsParams) => Promise<GetNotificationsResult>;
74
+ /** Get currently subscribed events (for internal use) */
75
+ getSubscribedEvents: () => NotificationEvent[];
76
+ }
77
+ /**
78
+ * Create Gateway RPC method handlers.
79
+ *
80
+ * @param options - Configuration options
81
+ * @returns Gateway method handlers
82
+ */
83
+ export declare function createGatewayMethods(options: GatewayMethodsOptions): GatewayMethods;
84
+ /**
85
+ * Register Gateway RPC methods with the OpenClaw API.
86
+ *
87
+ * @param api - OpenClaw Plugin API
88
+ * @param methods - Gateway method handlers
89
+ */
90
+ export declare function registerGatewayRpcMethods(api: {
91
+ registerGatewayMethod: <T, R>(name: string, handler: (params: T) => Promise<R>) => void;
92
+ }, methods: GatewayMethods): void;
93
+ //# sourceMappingURL=rpc-methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-methods.d.ts","sourceRoot":"","sources":["../../src/gateway/rpc-methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,mBAAmB,GACnB,UAAU,GACV,cAAc,GACd,gBAAgB,CAAA;AAWpB,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,UAAU,EAAE,iBAAiB,EAAE,CAAA;CAChC;AAED,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;CAEjC;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,iBAAiB;IACjB,KAAK,EAAE,iBAAiB,CAAA;IACxB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,+BAA+B;AAC/B,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,SAAS,EAAE,SAAS,CAAA;IACpB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IAChE,+CAA+C;IAC/C,WAAW,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACtE,gCAAgC;IAChC,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACrF,yDAAyD;IACzD,mBAAmB,EAAE,MAAM,iBAAiB,EAAE,CAAA;CAC/C;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA4HnF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE;IACH,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;CACxF,EACD,OAAO,EAAE,cAAc,GACtB,IAAI,CAeN"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Gateway RPC methods for real-time updates.
3
+ * Part of Epic #310, Issue #324.
4
+ *
5
+ * Provides bidirectional communication between OpenClaw agents and
6
+ * the openclaw-projects backend via the Gateway protocol.
7
+ *
8
+ * @see https://docs.openclaw.ai/gateway/protocol.md
9
+ */
10
+ /** All valid event types for validation */
11
+ const VALID_EVENTS = [
12
+ 'message.new',
13
+ 'message.delivered',
14
+ 'task.due',
15
+ 'task.overdue',
16
+ 'memory.created',
17
+ ];
18
+ /**
19
+ * Validate event types and filter to only valid ones.
20
+ *
21
+ * @param events - Array of event type strings
22
+ * @returns Array of valid NotificationEvent types
23
+ */
24
+ function filterValidEvents(events) {
25
+ return events.filter((e) => VALID_EVENTS.includes(e));
26
+ }
27
+ /**
28
+ * Create Gateway RPC method handlers.
29
+ *
30
+ * @param options - Configuration options
31
+ * @returns Gateway method handlers
32
+ */
33
+ export function createGatewayMethods(options) {
34
+ const { logger, apiClient, userId } = options;
35
+ // Local subscription state
36
+ let subscribedEvents = [];
37
+ return {
38
+ /**
39
+ * Subscribe to event notifications.
40
+ *
41
+ * Registers the user to receive notifications for specified event types.
42
+ * Invalid event types are filtered out.
43
+ */
44
+ async subscribe(params) {
45
+ const validEvents = filterValidEvents(params.events);
46
+ // Update local subscription state
47
+ subscribedEvents = validEvents;
48
+ logger.info('Gateway subscribe', {
49
+ userId,
50
+ requestedEvents: params.events,
51
+ subscribedEvents: validEvents,
52
+ });
53
+ return {
54
+ subscribed: validEvents,
55
+ };
56
+ },
57
+ /**
58
+ * Unsubscribe from all event notifications.
59
+ */
60
+ async unsubscribe(_params) {
61
+ const previousEvents = subscribedEvents;
62
+ // Clear local subscription state
63
+ subscribedEvents = [];
64
+ logger.info('Gateway unsubscribe', {
65
+ userId,
66
+ previousEvents,
67
+ });
68
+ return {
69
+ unsubscribed: true,
70
+ };
71
+ },
72
+ /**
73
+ * Get pending notifications for the user.
74
+ *
75
+ * Fetches notifications from the backend, optionally filtered by timestamp.
76
+ */
77
+ async getNotifications(params) {
78
+ const { since, limit = 20 } = params;
79
+ logger.debug('Gateway getNotifications', {
80
+ userId,
81
+ since,
82
+ limit,
83
+ });
84
+ try {
85
+ // Build query parameters
86
+ const queryParams = new URLSearchParams();
87
+ queryParams.set('limit', String(limit));
88
+ if (since) {
89
+ queryParams.set('since', since);
90
+ }
91
+ const response = await apiClient.get(`/api/notifications?${queryParams}`, { userId });
92
+ if (!response.success) {
93
+ logger.error('Gateway getNotifications API error', {
94
+ userId,
95
+ error: response.error.message,
96
+ });
97
+ return {
98
+ notifications: [],
99
+ hasMore: false,
100
+ };
101
+ }
102
+ const { notifications, total } = response.data;
103
+ logger.debug('Gateway getNotifications success', {
104
+ userId,
105
+ count: notifications.length,
106
+ total,
107
+ });
108
+ return {
109
+ notifications,
110
+ hasMore: notifications.length >= limit && total > notifications.length,
111
+ };
112
+ }
113
+ catch (error) {
114
+ logger.error('Gateway getNotifications failed', {
115
+ userId,
116
+ error: error instanceof Error ? error.message : String(error),
117
+ });
118
+ return {
119
+ notifications: [],
120
+ hasMore: false,
121
+ };
122
+ }
123
+ },
124
+ /**
125
+ * Get currently subscribed events.
126
+ *
127
+ * Internal method for checking subscription state.
128
+ */
129
+ getSubscribedEvents() {
130
+ return [...subscribedEvents];
131
+ },
132
+ };
133
+ }
134
+ /**
135
+ * Register Gateway RPC methods with the OpenClaw API.
136
+ *
137
+ * @param api - OpenClaw Plugin API
138
+ * @param methods - Gateway method handlers
139
+ */
140
+ export function registerGatewayRpcMethods(api, methods) {
141
+ api.registerGatewayMethod('openclaw-projects.subscribe', methods.subscribe);
142
+ api.registerGatewayMethod('openclaw-projects.unsubscribe', methods.unsubscribe);
143
+ api.registerGatewayMethod('openclaw-projects.getNotifications', methods.getNotifications);
144
+ }
145
+ //# sourceMappingURL=rpc-methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-methods.js","sourceRoot":"","sources":["../../src/gateway/rpc-methods.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Plugin lifecycle hooks implementation.
3
+ * Provides auto-recall and auto-capture functionality.
4
+ */
5
+ import type { ApiClient } from './api-client.js';
6
+ import type { Logger } from './logger.js';
7
+ import type { PluginConfig } from './config.js';
8
+ /** Event data for auto-recall hook */
9
+ export interface AutoRecallEvent {
10
+ prompt: string;
11
+ }
12
+ /** Result from auto-recall hook */
13
+ export interface AutoRecallResult {
14
+ prependContext: string;
15
+ }
16
+ /** Event data for auto-capture hook */
17
+ export interface AutoCaptureEvent {
18
+ messages: Array<{
19
+ role: string;
20
+ content: string;
21
+ }>;
22
+ }
23
+ /** Options for creating auto-recall hook */
24
+ export interface AutoRecallHookOptions {
25
+ client: ApiClient;
26
+ logger: Logger;
27
+ config: PluginConfig;
28
+ userId: string;
29
+ timeoutMs?: number;
30
+ }
31
+ /** Options for creating auto-capture hook */
32
+ export interface AutoCaptureHookOptions {
33
+ client: ApiClient;
34
+ logger: Logger;
35
+ config: PluginConfig;
36
+ userId: string;
37
+ timeoutMs?: number;
38
+ }
39
+ /** Options for creating health check */
40
+ export interface HealthCheckOptions {
41
+ client: ApiClient;
42
+ logger: Logger;
43
+ }
44
+ /** Health check result */
45
+ export interface HealthCheckResult {
46
+ healthy: boolean;
47
+ error?: string;
48
+ }
49
+ /**
50
+ * Creates the auto-recall hook (before_agent_start).
51
+ *
52
+ * This hook fetches relevant context from the backend based on the user's prompt
53
+ * and returns it to be prepended to the conversation.
54
+ */
55
+ export declare function createAutoRecallHook(options: AutoRecallHookOptions): (event: AutoRecallEvent) => Promise<AutoRecallResult | null>;
56
+ /**
57
+ * Creates the auto-capture hook (agent_end).
58
+ *
59
+ * This hook analyzes the completed conversation and stores important
60
+ * information as memories.
61
+ */
62
+ export declare function createAutoCaptureHook(options: AutoCaptureHookOptions): (event: AutoCaptureEvent) => Promise<void>;
63
+ /** Options for graph-aware auto-recall hook */
64
+ export interface GraphAwareRecallHookOptions {
65
+ client: ApiClient;
66
+ logger: Logger;
67
+ config: PluginConfig;
68
+ userId: string;
69
+ timeoutMs?: number;
70
+ }
71
+ /**
72
+ * Creates a graph-aware auto-recall hook (before_agent_start).
73
+ *
74
+ * This hook uses the graph-aware context retrieval API to fetch memories
75
+ * across the user's relationship graph (personal, contact, group, relationship
76
+ * scopes). Falls back to basic memory search if the graph-aware endpoint
77
+ * is unavailable.
78
+ *
79
+ * Part of Epic #486, Issue #497.
80
+ */
81
+ export declare function createGraphAwareRecallHook(options: GraphAwareRecallHookOptions): (event: AutoRecallEvent) => Promise<AutoRecallResult | null>;
82
+ /**
83
+ * Creates the health check function.
84
+ */
85
+ export declare function createHealthCheck(options: HealthCheckOptions): () => Promise<HealthCheckResult>;
86
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAkB/C,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;CACH;AAED,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA6BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmD9D;AA4DD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CA8C5C;AAgDD,+CAA+C;AAC/C,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmD9D;AAqDD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,MAAM,OAAO,CAAC,iBAAiB,CAAC,CA2BlC"}