@sulala/agent 0.1.6 → 0.1.8

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 (173) hide show
  1. package/README.md +42 -27
  2. package/context/airtable.md +35 -0
  3. package/context/asana.md +37 -0
  4. package/context/bluesky.md +26 -91
  5. package/context/calendar.md +63 -0
  6. package/context/country-info.md +13 -0
  7. package/context/create-skill.md +128 -0
  8. package/context/discord.md +30 -0
  9. package/context/docs.md +29 -0
  10. package/context/drive.md +49 -0
  11. package/context/dropbox.md +39 -0
  12. package/context/facebook.md +47 -0
  13. package/context/fetch-form-api.md +16 -0
  14. package/context/figma.md +30 -0
  15. package/context/github.md +58 -0
  16. package/context/gmail.md +52 -0
  17. package/context/google.md +28 -0
  18. package/context/hellohub.md +29 -0
  19. package/context/jira.md +46 -0
  20. package/context/linear.md +40 -0
  21. package/context/notion.md +45 -0
  22. package/context/portal-integrations.md +42 -0
  23. package/context/post-to-x.md +50 -0
  24. package/context/sheets.md +47 -0
  25. package/context/slack.md +48 -0
  26. package/context/slides.md +35 -0
  27. package/context/stripe.md +38 -0
  28. package/context/tes.md +7 -0
  29. package/context/test.md +7 -0
  30. package/context/zoom.md +28 -0
  31. package/dist/agent/google/calendar.d.ts +2 -0
  32. package/dist/agent/google/calendar.d.ts.map +1 -0
  33. package/dist/agent/google/calendar.js +119 -0
  34. package/dist/agent/google/calendar.js.map +1 -0
  35. package/dist/agent/google/drive.d.ts +2 -0
  36. package/dist/agent/google/drive.d.ts.map +1 -0
  37. package/dist/agent/google/drive.js +51 -0
  38. package/dist/agent/google/drive.js.map +1 -0
  39. package/dist/agent/google/get-token.d.ts +7 -0
  40. package/dist/agent/google/get-token.d.ts.map +1 -0
  41. package/dist/agent/google/get-token.js +37 -0
  42. package/dist/agent/google/get-token.js.map +1 -0
  43. package/dist/agent/google/gmail.d.ts +2 -0
  44. package/dist/agent/google/gmail.d.ts.map +1 -0
  45. package/dist/agent/google/gmail.js +138 -0
  46. package/dist/agent/google/gmail.js.map +1 -0
  47. package/dist/agent/google/index.d.ts +2 -0
  48. package/dist/agent/google/index.d.ts.map +1 -0
  49. package/dist/agent/google/index.js +13 -0
  50. package/dist/agent/google/index.js.map +1 -0
  51. package/dist/agent/loop.d.ts +8 -0
  52. package/dist/agent/loop.d.ts.map +1 -1
  53. package/dist/agent/loop.js +226 -40
  54. package/dist/agent/loop.js.map +1 -1
  55. package/dist/agent/memory.d.ts +21 -0
  56. package/dist/agent/memory.d.ts.map +1 -0
  57. package/dist/agent/memory.js +33 -0
  58. package/dist/agent/memory.js.map +1 -0
  59. package/dist/agent/pending-actions.d.ts +21 -0
  60. package/dist/agent/pending-actions.d.ts.map +1 -0
  61. package/dist/agent/pending-actions.js +65 -0
  62. package/dist/agent/pending-actions.js.map +1 -0
  63. package/dist/agent/pi-runner.d.ts +27 -0
  64. package/dist/agent/pi-runner.d.ts.map +1 -0
  65. package/dist/agent/pi-runner.js +300 -0
  66. package/dist/agent/pi-runner.js.map +1 -0
  67. package/dist/agent/skill-generate.d.ts +63 -0
  68. package/dist/agent/skill-generate.d.ts.map +1 -0
  69. package/dist/agent/skill-generate.js +128 -0
  70. package/dist/agent/skill-generate.js.map +1 -0
  71. package/dist/agent/skill-install.d.ts.map +1 -1
  72. package/dist/agent/skill-install.js +80 -31
  73. package/dist/agent/skill-install.js.map +1 -1
  74. package/dist/agent/skill-templates.d.ts +17 -0
  75. package/dist/agent/skill-templates.d.ts.map +1 -0
  76. package/dist/agent/skill-templates.js +26 -0
  77. package/dist/agent/skill-templates.js.map +1 -0
  78. package/dist/agent/skills-config.d.ts +24 -2
  79. package/dist/agent/skills-config.d.ts.map +1 -1
  80. package/dist/agent/skills-config.js +108 -9
  81. package/dist/agent/skills-config.js.map +1 -1
  82. package/dist/agent/skills-watcher.js +1 -1
  83. package/dist/agent/skills.d.ts +9 -3
  84. package/dist/agent/skills.d.ts.map +1 -1
  85. package/dist/agent/skills.js +104 -9
  86. package/dist/agent/skills.js.map +1 -1
  87. package/dist/agent/tools.d.ts +25 -3
  88. package/dist/agent/tools.d.ts.map +1 -1
  89. package/dist/agent/tools.integrations.test.d.ts +2 -0
  90. package/dist/agent/tools.integrations.test.d.ts.map +1 -0
  91. package/dist/agent/tools.integrations.test.js +269 -0
  92. package/dist/agent/tools.integrations.test.js.map +1 -0
  93. package/dist/agent/tools.js +692 -39
  94. package/dist/agent/tools.js.map +1 -1
  95. package/dist/ai/orchestrator.d.ts +6 -1
  96. package/dist/ai/orchestrator.d.ts.map +1 -1
  97. package/dist/ai/orchestrator.js +499 -212
  98. package/dist/ai/orchestrator.js.map +1 -1
  99. package/dist/ai/pricing.d.ts +6 -0
  100. package/dist/ai/pricing.d.ts.map +1 -0
  101. package/dist/ai/pricing.js +39 -0
  102. package/dist/ai/pricing.js.map +1 -0
  103. package/dist/channels/discord.d.ts +15 -0
  104. package/dist/channels/discord.d.ts.map +1 -0
  105. package/dist/channels/discord.js +55 -0
  106. package/dist/channels/discord.js.map +1 -0
  107. package/dist/channels/stripe.d.ts +15 -0
  108. package/dist/channels/stripe.d.ts.map +1 -0
  109. package/dist/channels/stripe.js +58 -0
  110. package/dist/channels/stripe.js.map +1 -0
  111. package/dist/channels/telegram.d.ts +60 -0
  112. package/dist/channels/telegram.d.ts.map +1 -0
  113. package/dist/channels/telegram.js +562 -0
  114. package/dist/channels/telegram.js.map +1 -0
  115. package/dist/cli.js +69 -11
  116. package/dist/cli.js.map +1 -1
  117. package/dist/config.d.ts +14 -0
  118. package/dist/config.d.ts.map +1 -1
  119. package/dist/config.js +91 -2
  120. package/dist/config.js.map +1 -1
  121. package/dist/db/index.d.ts +83 -0
  122. package/dist/db/index.d.ts.map +1 -1
  123. package/dist/db/index.js +174 -2
  124. package/dist/db/index.js.map +1 -1
  125. package/dist/db/schema.sql +35 -0
  126. package/dist/gateway/server.d.ts.map +1 -1
  127. package/dist/gateway/server.js +1224 -29
  128. package/dist/gateway/server.js.map +1 -1
  129. package/dist/index.js +149 -6
  130. package/dist/index.js.map +1 -1
  131. package/dist/ollama-setup.d.ts +27 -0
  132. package/dist/ollama-setup.d.ts.map +1 -0
  133. package/dist/ollama-setup.js +191 -0
  134. package/dist/ollama-setup.js.map +1 -0
  135. package/dist/onboard-env.d.ts +1 -1
  136. package/dist/onboard-env.d.ts.map +1 -1
  137. package/dist/onboard-env.js +3 -0
  138. package/dist/onboard-env.js.map +1 -1
  139. package/dist/onboard.d.ts +3 -1
  140. package/dist/onboard.d.ts.map +1 -1
  141. package/dist/onboard.js +9 -4
  142. package/dist/onboard.js.map +1 -1
  143. package/dist/plugins/index.d.ts +10 -0
  144. package/dist/plugins/index.d.ts.map +1 -1
  145. package/dist/plugins/index.js +32 -0
  146. package/dist/plugins/index.js.map +1 -1
  147. package/dist/redact.d.ts +15 -0
  148. package/dist/redact.d.ts.map +1 -0
  149. package/dist/redact.js +56 -0
  150. package/dist/redact.js.map +1 -0
  151. package/dist/scheduler/cron.d.ts +21 -0
  152. package/dist/scheduler/cron.d.ts.map +1 -1
  153. package/dist/scheduler/cron.js +60 -0
  154. package/dist/scheduler/cron.js.map +1 -1
  155. package/dist/system-capabilities.d.ts +11 -0
  156. package/dist/system-capabilities.d.ts.map +1 -0
  157. package/dist/system-capabilities.js +109 -0
  158. package/dist/system-capabilities.js.map +1 -0
  159. package/dist/types.d.ts +62 -3
  160. package/dist/types.d.ts.map +1 -1
  161. package/dist/watcher/index.d.ts +2 -0
  162. package/dist/watcher/index.d.ts.map +1 -1
  163. package/dist/watcher/index.js +31 -1
  164. package/dist/watcher/index.js.map +1 -1
  165. package/dist/workspace-automations.d.ts +16 -0
  166. package/dist/workspace-automations.d.ts.map +1 -0
  167. package/dist/workspace-automations.js +133 -0
  168. package/dist/workspace-automations.js.map +1 -0
  169. package/package.json +19 -3
  170. package/registry/bluesky.md +12 -89
  171. package/registry/skills-registry.json +6 -0
  172. package/src/db/schema.sql +35 -0
  173. package/src/index.ts +159 -6
@@ -0,0 +1,21 @@
1
+ export type MemoryScope = 'session' | 'shared';
2
+ /** Resolve the scope_key for shared memory: config override or session's session_key. */
3
+ export declare function getSharedScopeKeyForSession(sessionId: string): string | null;
4
+ /** Get memory content for prompt injection (bullets, newest within limit/maxChars). */
5
+ export declare function getMemoryForContext(scope: MemoryScope, scopeKey: string, options?: {
6
+ limit?: number;
7
+ maxChars?: number;
8
+ }): string;
9
+ /** Append one memory entry (used by write_memory tool). */
10
+ export declare function appendMemory(scope: MemoryScope, scopeKey: string, content: string): {
11
+ id: number;
12
+ scope: string;
13
+ scope_key: string;
14
+ };
15
+ /** List recent memory entries (used by read_memory tool). */
16
+ export declare function listMemories(scope: MemoryScope, scopeKey: string, limit?: number): Array<{
17
+ id: number;
18
+ content: string;
19
+ created_at: number;
20
+ }>;
21
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/agent/memory.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/C,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5E;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,MAAM,CAER;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAGlD;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,GACT,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAM5D"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Agent memory: session-scoped and optional shared (cross-session) durable notes.
3
+ * Used for prompt injection and by write_memory / read_memory tools.
4
+ */
5
+ import { getAgentMemoryForContext, appendAgentMemory, listAgentMemories, getAgentSessionById, } from '../db/index.js';
6
+ import { config } from '../config.js';
7
+ /** Resolve the scope_key for shared memory: config override or session's session_key. */
8
+ export function getSharedScopeKeyForSession(sessionId) {
9
+ const session = getAgentSessionById(sessionId);
10
+ if (!session)
11
+ return null;
12
+ if (config.agentSharedMemoryKey)
13
+ return config.agentSharedMemoryKey;
14
+ return session.session_key;
15
+ }
16
+ /** Get memory content for prompt injection (bullets, newest within limit/maxChars). */
17
+ export function getMemoryForContext(scope, scopeKey, options = {}) {
18
+ return getAgentMemoryForContext(scope, scopeKey, options);
19
+ }
20
+ /** Append one memory entry (used by write_memory tool). */
21
+ export function appendMemory(scope, scopeKey, content) {
22
+ const row = appendAgentMemory(scope, scopeKey, content);
23
+ return { id: row.id, scope: row.scope, scope_key: row.scope_key };
24
+ }
25
+ /** List recent memory entries (used by read_memory tool). */
26
+ export function listMemories(scope, scopeKey, limit = 50) {
27
+ return listAgentMemories(scope, scopeKey, limit).map((r) => ({
28
+ id: r.id,
29
+ content: r.content,
30
+ created_at: r.created_at,
31
+ }));
32
+ }
33
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/agent/memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,yFAAyF;AACzF,MAAM,UAAU,2BAA2B,CAAC,SAAiB;IAC3D,MAAM,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,MAAM,CAAC,oBAAoB;QAAE,OAAO,MAAM,CAAC,oBAAoB,CAAC;IACpE,OAAO,OAAO,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CACjC,KAAkB,EAClB,QAAgB,EAChB,UAAiD,EAAE;IAEnD,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAC1B,KAAkB,EAClB,QAAgB,EAChB,OAAe;IAEf,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AACpE,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,YAAY,CAC1B,KAAkB,EAClB,QAAgB,EAChB,KAAK,GAAG,EAAE;IAEV,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type PendingActionStatus = 'pending' | 'approved' | 'rejected';
2
+ export type PendingAction = {
3
+ id: string;
4
+ sessionId: string;
5
+ toolCallId: string;
6
+ toolName: string;
7
+ args: Record<string, unknown>;
8
+ status: PendingActionStatus;
9
+ createdAt: number;
10
+ result?: unknown;
11
+ };
12
+ /** Redact secret-like keys from args for API display only. */
13
+ export declare function sanitizeArgsForDisplay(args: Record<string, unknown>): Record<string, unknown>;
14
+ export declare function createPendingAction(sessionId: string, toolCallId: string, toolName: string, args: Record<string, unknown>): string;
15
+ export declare function getPendingAction(id: string): PendingAction | undefined;
16
+ export declare function listPendingActions(sessionId?: string): PendingAction[];
17
+ export declare function setPendingActionApproved(id: string, result: unknown): void;
18
+ export declare function setPendingActionRejected(id: string): void;
19
+ /** Get pending action for replay (execute tool on approve). Returns original args. */
20
+ export declare function getPendingActionForReplay(id: string): PendingAction | null;
21
+ //# sourceMappingURL=pending-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-actions.d.ts","sourceRoot":"","sources":["../../src/agent/pending-actions.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtE,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAQF,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW7F;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAYR;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAItE;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAM1E;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGzD;AAED,sFAAsF;AACtF,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAI1E"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Execution preview: store pending tool actions that require user approval.
3
+ * In-memory store; pending actions are lost on process restart.
4
+ */
5
+ import { randomBytes } from 'crypto';
6
+ const store = new Map();
7
+ function generateId() {
8
+ return randomBytes(8).toString('hex');
9
+ }
10
+ /** Redact secret-like keys from args for API display only. */
11
+ export function sanitizeArgsForDisplay(args) {
12
+ const out = {};
13
+ const secretPattern = /password|secret|key|token|auth/i;
14
+ for (const [k, v] of Object.entries(args)) {
15
+ if (secretPattern.test(k)) {
16
+ out[k] = typeof v === 'string' && v.length > 0 ? '[REDACTED]' : v;
17
+ }
18
+ else {
19
+ out[k] = v;
20
+ }
21
+ }
22
+ return out;
23
+ }
24
+ export function createPendingAction(sessionId, toolCallId, toolName, args) {
25
+ const id = generateId();
26
+ store.set(id, {
27
+ id,
28
+ sessionId,
29
+ toolCallId,
30
+ toolName,
31
+ args: { ...args },
32
+ status: 'pending',
33
+ createdAt: Date.now(),
34
+ });
35
+ return id;
36
+ }
37
+ export function getPendingAction(id) {
38
+ return store.get(id);
39
+ }
40
+ export function listPendingActions(sessionId) {
41
+ const list = [...store.values()].filter((a) => a.status === 'pending');
42
+ if (sessionId)
43
+ return list.filter((a) => a.sessionId === sessionId);
44
+ return list.sort((a, b) => a.createdAt - b.createdAt);
45
+ }
46
+ export function setPendingActionApproved(id, result) {
47
+ const a = store.get(id);
48
+ if (a) {
49
+ a.status = 'approved';
50
+ a.result = result;
51
+ }
52
+ }
53
+ export function setPendingActionRejected(id) {
54
+ const a = store.get(id);
55
+ if (a)
56
+ a.status = 'rejected';
57
+ }
58
+ /** Get pending action for replay (execute tool on approve). Returns original args. */
59
+ export function getPendingActionForReplay(id) {
60
+ const a = store.get(id);
61
+ if (!a || a.status !== 'pending')
62
+ return null;
63
+ return a;
64
+ }
65
+ //# sourceMappingURL=pending-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-actions.js","sourceRoot":"","sources":["../../src/agent/pending-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Optional Pi (coding-agent) path. When AGENT_USE_PI=1 or request use_pi=true,
3
+ * the agent runs via Pi SDK. Requires optionalDependencies:
4
+ * @mariozechner/pi-agent-core, pi-ai, pi-coding-agent.
5
+ */
6
+ import type { AgentTurnMessage } from '../types.js';
7
+ /** True if Pi optional deps are installed and Pi path can be used. */
8
+ export declare function isPiAvailable(): boolean;
9
+ export interface RunTurnOptions {
10
+ sessionId: string;
11
+ userMessage?: string | null;
12
+ systemPrompt?: string | null;
13
+ provider?: string;
14
+ model?: string;
15
+ max_tokens?: number;
16
+ timeoutMs?: number;
17
+ signal?: AbortSignal;
18
+ }
19
+ export interface RunTurnResult {
20
+ sessionId: string;
21
+ messages: AgentTurnMessage[];
22
+ finalContent: string;
23
+ turnCount: number;
24
+ }
25
+ /** Run one agent turn using the Pi coding-agent runtime. Throws if Pi is not available. */
26
+ export declare function runAgentTurnWithPi(options: RunTurnOptions): Promise<RunTurnResult>;
27
+ //# sourceMappingURL=pi-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-runner.d.ts","sourceRoot":"","sources":["../../src/agent/pi-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAW,gBAAgB,EAAgB,MAAM,aAAa,CAAC;AAM3E,sEAAsE;AACtE,wBAAgB,aAAa,IAAI,OAAO,CAWvC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2FAA2F;AAC3F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAmNxF"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Optional Pi (coding-agent) path. When AGENT_USE_PI=1 or request use_pi=true,
3
+ * the agent runs via Pi SDK. Requires optionalDependencies:
4
+ * @mariozechner/pi-agent-core, pi-ai, pi-coding-agent.
5
+ */
6
+ /// <reference path="./pi-runner.d.ts" />
7
+ import { createRequire } from 'module';
8
+ import { config } from '../config.js';
9
+ import { getAgentMessages, appendAgentMessage } from '../db/index.js';
10
+ import { getMemoryForContext, getSharedScopeKeyForSession } from './memory.js';
11
+ import { listTools } from './tools.js';
12
+ const require = createRequire(import.meta.url);
13
+ let piAvailable = null;
14
+ /** True if Pi optional deps are installed and Pi path can be used. */
15
+ export function isPiAvailable() {
16
+ if (piAvailable !== null)
17
+ return piAvailable;
18
+ try {
19
+ require.resolve('@mariozechner/pi-agent-core');
20
+ require.resolve('@mariozechner/pi-ai');
21
+ require.resolve('@mariozechner/pi-coding-agent');
22
+ piAvailable = true;
23
+ }
24
+ catch {
25
+ piAvailable = false;
26
+ }
27
+ return piAvailable;
28
+ }
29
+ /** Run one agent turn using the Pi coding-agent runtime. Throws if Pi is not available. */
30
+ export async function runAgentTurnWithPi(options) {
31
+ const { sessionId, userMessage = null, systemPrompt: optionPrompt = null, provider, model, max_tokens = 1024, timeoutMs, signal, } = options;
32
+ if (!isPiAvailable()) {
33
+ throw new Error('Pi runner not available. Install optional dependencies: npm install @mariozechner/pi-agent-core @mariozechner/pi-ai @mariozechner/pi-coding-agent');
34
+ }
35
+ const pi = await import('@mariozechner/pi-coding-agent');
36
+ const cwd = config.agentWorkspaceRoot ?? process.cwd();
37
+ const agentDir = `${process.env.HOME || process.env.USERPROFILE || '.'}/.sulala/pi`;
38
+ const sessionManager = pi.SessionManager.inMemory();
39
+ const settingsManager = pi.SettingsManager.create(cwd, agentDir);
40
+ const providerId = (provider ?? process.env.AI_DEFAULT_PROVIDER ?? 'ollama').toLowerCase();
41
+ const modelId = model ?? (providerId === 'ollama' ? process.env.AI_OLLAMA_DEFAULT_MODEL ?? 'llama3.2' : '');
42
+ const api = providerId === 'ollama' || providerId === 'llama' ? 'ollama' : 'openai';
43
+ const piModel = {
44
+ provider: providerId,
45
+ id: modelId,
46
+ api,
47
+ baseUrl: providerId === 'ollama' ? process.env.OLLAMA_BASE_URL ?? 'http://localhost:11434' : undefined,
48
+ };
49
+ const sulalaTools = listTools();
50
+ const customTools = sulalaToPiToolDefinitions(sulalaTools, sessionId);
51
+ const authStorage = {
52
+ getApiKey: async (_path) => undefined,
53
+ setApiKey: async (_path, _key) => { },
54
+ getApiKeyForProvider: async (p) => {
55
+ const key = p.toLowerCase();
56
+ if (key === 'openai')
57
+ return process.env.OPENAI_API_KEY ?? undefined;
58
+ if (key === 'anthropic')
59
+ return process.env.ANTHROPIC_API_KEY ?? undefined;
60
+ if (key === 'ollama' || key === 'llama')
61
+ return 'ollama';
62
+ return process.env[`${p.toUpperCase().replace(/-/g, '_')}_API_KEY`] ?? undefined;
63
+ },
64
+ };
65
+ const modelRegistry = {
66
+ find: (_provider, id) => ({ ...piModel, id }),
67
+ getApiKey: async (m) => authStorage.getApiKeyForProvider(m?.provider ?? providerId),
68
+ getApiKeyForProvider: authStorage.getApiKeyForProvider,
69
+ };
70
+ let resourceLoader = undefined;
71
+ try {
72
+ const loader = new pi.DefaultResourceLoader({ cwd, agentDir, settingsManager });
73
+ await loader.reload();
74
+ resourceLoader = loader;
75
+ }
76
+ catch {
77
+ resourceLoader = undefined;
78
+ }
79
+ const { session } = await pi.createAgentSession({
80
+ cwd,
81
+ agentDir,
82
+ sessionManager,
83
+ settingsManager,
84
+ model: piModel,
85
+ modelRegistry: modelRegistry,
86
+ authStorage: authStorage,
87
+ tools: [],
88
+ customTools: customTools,
89
+ resourceLoader,
90
+ thinkingLevel: 'off',
91
+ });
92
+ const runSignal = signal ?? (timeoutMs && timeoutMs > 0 ? AbortSignal.timeout(timeoutMs) : undefined);
93
+ const sulalaStreamFn = createSulalaStreamFn({
94
+ provider: providerId,
95
+ model: modelId,
96
+ max_tokens,
97
+ signal: runSignal,
98
+ });
99
+ session.agent.streamFn = (m, c, o) => sulalaStreamFn(m, c, o);
100
+ let systemText = optionPrompt ?? config.agentSystemPrompt ?? 'You are a helpful assistant with access to tools.';
101
+ const sessionMemory = getMemoryForContext('session', sessionId, { limit: 20, maxChars: 2000 });
102
+ const sharedKey = getSharedScopeKeyForSession(sessionId);
103
+ const sharedMemory = sharedKey != null ? getMemoryForContext('shared', sharedKey, { limit: 30, maxChars: 3000 }) : '';
104
+ const memoryParts = [];
105
+ if (sessionMemory)
106
+ memoryParts.push('**This conversation:**\n' + sessionMemory);
107
+ if (sharedMemory)
108
+ memoryParts.push('**Across sessions:**\n' + sharedMemory);
109
+ if (memoryParts.length > 0) {
110
+ systemText += '\n\n## Memory\n\n' + memoryParts.join('\n\n');
111
+ }
112
+ const historyLimit = config.agentMaxHistoryMessages > 0 ? config.agentMaxHistoryMessages + 50 : 200;
113
+ const history = getAgentMessages(sessionId, historyLimit);
114
+ const piMessages = sulalaMessagesToPi(history, systemText);
115
+ const numHistoryInPi = piMessages.length;
116
+ if (piMessages.length > 0)
117
+ session.agent.replaceMessages(piMessages);
118
+ if (userMessage) {
119
+ appendAgentMessage({ session_id: sessionId, role: 'user', content: userMessage });
120
+ }
121
+ const promptText = userMessage?.trim() ?? '';
122
+ if (!promptText) {
123
+ return {
124
+ sessionId,
125
+ messages: history.map((r) => ({ role: r.role, content: r.content ?? null })),
126
+ finalContent: '',
127
+ turnCount: 0,
128
+ };
129
+ }
130
+ const controller = new AbortController();
131
+ if (signal)
132
+ signal.addEventListener('abort', () => controller.abort(), { once: true });
133
+ if (timeoutMs && timeoutMs > 0)
134
+ setTimeout(() => controller.abort(), timeoutMs);
135
+ try {
136
+ await session.prompt(promptText);
137
+ }
138
+ catch (err) {
139
+ if (controller.signal.aborted)
140
+ throw err;
141
+ throw err;
142
+ }
143
+ finally {
144
+ if (typeof session.dispose === 'function')
145
+ session.dispose();
146
+ }
147
+ const finalMessages = (session.agent.messages ?? []);
148
+ const lastAssistant = [...finalMessages].reverse().find((m) => m.role === 'assistant');
149
+ const finalContent = typeof lastAssistant?.content === 'string'
150
+ ? lastAssistant.content
151
+ : Array.isArray(lastAssistant?.content)
152
+ ? lastAssistant.content.filter((c) => c?.type === 'text' && c.text).map((c) => c.text ?? '').join('')
153
+ : '';
154
+ const newMessages = finalMessages.slice(numHistoryInPi);
155
+ for (const msg of newMessages) {
156
+ if (msg.role === 'system')
157
+ continue;
158
+ const role = msg.role === 'toolResult' ? 'tool' : msg.role;
159
+ const content = typeof msg.content === 'string'
160
+ ? msg.content
161
+ : Array.isArray(msg.content)
162
+ ? msg.content.map((c) => c?.text ?? '').join('')
163
+ : '';
164
+ appendAgentMessage({
165
+ session_id: sessionId,
166
+ role,
167
+ content: content || null,
168
+ tool_calls: msg.tool_calls ? JSON.stringify(msg.tool_calls) : null,
169
+ tool_call_id: msg.tool_call_id ?? null,
170
+ name: msg.name ?? null,
171
+ });
172
+ }
173
+ const turnCount = newMessages.filter((m) => m.role === 'assistant').length;
174
+ const updatedHistory = getAgentMessages(sessionId);
175
+ const messages = updatedHistory.map((r) => {
176
+ let tool_calls;
177
+ if (r.tool_calls) {
178
+ try {
179
+ const parsed = JSON.parse(r.tool_calls);
180
+ tool_calls = Array.isArray(parsed) ? parsed : undefined;
181
+ }
182
+ catch {
183
+ tool_calls = undefined;
184
+ }
185
+ }
186
+ return {
187
+ role: r.role,
188
+ ...(r.content != null && { content: r.content }),
189
+ ...(tool_calls !== undefined && { tool_calls }),
190
+ ...(r.tool_call_id && { tool_call_id: r.tool_call_id }),
191
+ ...(r.name && { name: r.name }),
192
+ };
193
+ });
194
+ return {
195
+ sessionId,
196
+ messages: messages,
197
+ finalContent,
198
+ turnCount,
199
+ };
200
+ }
201
+ function sulalaToPiToolDefinitions(tools, sessionId) {
202
+ return tools.map((tool) => ({
203
+ name: tool.name,
204
+ label: tool.name,
205
+ description: tool.description ?? '',
206
+ parameters: tool.parameters ?? {},
207
+ execute: async (toolCallId, params, sig, _onUpdate) => {
208
+ const { executeTool } = await import('./tools.js');
209
+ const result = await executeTool(tool.name, params, { toolCallId, signal: sig, sessionId });
210
+ const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
211
+ return {
212
+ content: [{ type: 'text', text }],
213
+ details: result,
214
+ };
215
+ },
216
+ }));
217
+ }
218
+ function sulalaMessagesToPi(rows, systemPrompt) {
219
+ const out = [];
220
+ if (systemPrompt) {
221
+ out.push({ role: 'system', content: systemPrompt });
222
+ }
223
+ for (const r of rows) {
224
+ if (r.role === 'system')
225
+ continue;
226
+ if (r.role === 'user') {
227
+ out.push({ role: 'user', content: r.content ?? '' });
228
+ continue;
229
+ }
230
+ if (r.role === 'assistant') {
231
+ const msg = {
232
+ role: 'assistant',
233
+ content: r.content ?? '',
234
+ };
235
+ if (r.tool_calls) {
236
+ try {
237
+ msg.tool_calls = JSON.parse(r.tool_calls);
238
+ }
239
+ catch {
240
+ // ignore
241
+ }
242
+ }
243
+ out.push(msg);
244
+ continue;
245
+ }
246
+ if (r.role === 'tool') {
247
+ out.push({
248
+ role: 'toolResult',
249
+ content: [{ type: 'text', text: r.content ?? '' }],
250
+ toolCallId: r.tool_call_id ?? undefined,
251
+ toolName: r.name ?? undefined,
252
+ });
253
+ }
254
+ }
255
+ return out;
256
+ }
257
+ function createSulalaStreamFn(opts) {
258
+ return async (model, context, options) => {
259
+ const { complete } = await import('../ai/orchestrator.js');
260
+ const provider = model?.provider ?? opts.provider;
261
+ const modelId = model?.id ?? opts.model;
262
+ const messages = context?.messages ?? [];
263
+ const sulalaMessages = piMessagesToSulala(messages);
264
+ const tools = listTools().map((t) => ({
265
+ name: t.name,
266
+ description: t.description,
267
+ parameters: t.parameters,
268
+ }));
269
+ const result = await complete({
270
+ provider,
271
+ model: modelId,
272
+ messages: sulalaMessages,
273
+ max_tokens: opts.max_tokens,
274
+ tools: tools.length ? tools : undefined,
275
+ signal: options?.signal ?? opts.signal,
276
+ });
277
+ return (async function* () {
278
+ if (result.content)
279
+ yield { type: 'content', content: result.content };
280
+ if (result.tool_calls?.length)
281
+ yield { type: 'tool_calls', tool_calls: result.tool_calls };
282
+ })();
283
+ };
284
+ }
285
+ function piMessagesToSulala(piMessages) {
286
+ return piMessages.map((m) => {
287
+ const msg = m;
288
+ const role = msg.role;
289
+ const content = typeof msg.content === 'string'
290
+ ? msg.content
291
+ : Array.isArray(msg.content)
292
+ ? msg.content.map((c) => (typeof c === 'object' && c && 'text' in c ? c.text ?? '' : '')).join('')
293
+ : '';
294
+ const out = { role, content: content || null };
295
+ if (msg.tool_calls)
296
+ out.tool_calls = msg.tool_calls;
297
+ return out;
298
+ });
299
+ }
300
+ //# sourceMappingURL=pi-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-runner.js","sourceRoot":"","sources":["../../src/agent/pi-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { Config } from '../types.js';
2
+ export declare const WIZARD_APPS: readonly [{
3
+ readonly id: "gmail";
4
+ readonly label: "Gmail";
5
+ readonly envHint: "GMAIL_API_KEY or connect later";
6
+ }, {
7
+ readonly id: "slack";
8
+ readonly label: "Slack";
9
+ readonly envHint: "SLACK_BOT_TOKEN or connect later";
10
+ }, {
11
+ readonly id: "notion";
12
+ readonly label: "Notion";
13
+ readonly envHint: "NOTION_API_KEY or connect later";
14
+ }, {
15
+ readonly id: "github";
16
+ readonly label: "GitHub";
17
+ readonly envHint: "GITHUB_TOKEN or connect later";
18
+ }, {
19
+ readonly id: "calendar";
20
+ readonly label: "Google Calendar";
21
+ readonly envHint: "GOOGLE_CALENDAR_CREDENTIALS or connect later";
22
+ }, {
23
+ readonly id: "webhook";
24
+ readonly label: "Webhook";
25
+ readonly envHint: "Optional";
26
+ }, {
27
+ readonly id: "other";
28
+ readonly label: "Other";
29
+ readonly envHint: "Depends on skill";
30
+ }];
31
+ export declare const WIZARD_TRIGGERS: readonly [{
32
+ readonly id: "manual";
33
+ readonly label: "When I ask (manual)";
34
+ }, {
35
+ readonly id: "schedule";
36
+ readonly label: "On a schedule (cron)";
37
+ }, {
38
+ readonly id: "webhook";
39
+ readonly label: "When a webhook is called";
40
+ }, {
41
+ readonly id: "message";
42
+ readonly label: "When I send a message (e.g. Telegram)";
43
+ }];
44
+ export type SkillSpec = {
45
+ name: string;
46
+ description: string;
47
+ slug: string;
48
+ frontmatter: string;
49
+ body: string;
50
+ requiredEnv: string[];
51
+ };
52
+ /**
53
+ * Generate a skill spec from wizard answers. No LLM; deterministic.
54
+ */
55
+ export declare function generateSkillSpec(goal: string, appId: string, triggerId: string): SkillSpec;
56
+ /**
57
+ * Write SKILL.md to workspace and add config entry. Uses config.skillsWorkspaceDir.
58
+ */
59
+ export declare function writeGeneratedSkill(config: Config, spec: SkillSpec): {
60
+ path: string;
61
+ slug: string;
62
+ };
63
+ //# sourceMappingURL=skill-generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-generate.d.ts","sourceRoot":"","sources":["../../src/agent/skill-generate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQd,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;;;;;;;;EAKlB,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAmCF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAqD3F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBnG"}