@sulala/agent 0.1.6 → 0.1.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.
- package/README.md +3 -2
- package/context/airtable.md +35 -0
- package/context/asana.md +37 -0
- package/context/bluesky.md +26 -91
- package/context/calendar.md +63 -0
- package/context/country-info.md +13 -0
- package/context/create-skill.md +128 -0
- package/context/discord.md +30 -0
- package/context/docs.md +29 -0
- package/context/drive.md +49 -0
- package/context/dropbox.md +39 -0
- package/context/facebook.md +47 -0
- package/context/fetch-form-api.md +16 -0
- package/context/figma.md +30 -0
- package/context/github.md +58 -0
- package/context/gmail.md +52 -0
- package/context/google.md +28 -0
- package/context/hellohub.md +29 -0
- package/context/jira.md +46 -0
- package/context/linear.md +40 -0
- package/context/notion.md +45 -0
- package/context/portal-integrations.md +42 -0
- package/context/post-to-x.md +50 -0
- package/context/sheets.md +47 -0
- package/context/slack.md +48 -0
- package/context/slides.md +35 -0
- package/context/stripe.md +38 -0
- package/context/tes.md +7 -0
- package/context/test.md +7 -0
- package/context/zoom.md +28 -0
- package/dist/agent/google/calendar.d.ts +2 -0
- package/dist/agent/google/calendar.d.ts.map +1 -0
- package/dist/agent/google/calendar.js +119 -0
- package/dist/agent/google/calendar.js.map +1 -0
- package/dist/agent/google/drive.d.ts +2 -0
- package/dist/agent/google/drive.d.ts.map +1 -0
- package/dist/agent/google/drive.js +51 -0
- package/dist/agent/google/drive.js.map +1 -0
- package/dist/agent/google/get-token.d.ts +7 -0
- package/dist/agent/google/get-token.d.ts.map +1 -0
- package/dist/agent/google/get-token.js +37 -0
- package/dist/agent/google/get-token.js.map +1 -0
- package/dist/agent/google/gmail.d.ts +2 -0
- package/dist/agent/google/gmail.d.ts.map +1 -0
- package/dist/agent/google/gmail.js +138 -0
- package/dist/agent/google/gmail.js.map +1 -0
- package/dist/agent/google/index.d.ts +2 -0
- package/dist/agent/google/index.d.ts.map +1 -0
- package/dist/agent/google/index.js +13 -0
- package/dist/agent/google/index.js.map +1 -0
- package/dist/agent/loop.d.ts +8 -0
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +226 -40
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory.d.ts +21 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +33 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/pending-actions.d.ts +21 -0
- package/dist/agent/pending-actions.d.ts.map +1 -0
- package/dist/agent/pending-actions.js +65 -0
- package/dist/agent/pending-actions.js.map +1 -0
- package/dist/agent/pi-runner.d.ts +27 -0
- package/dist/agent/pi-runner.d.ts.map +1 -0
- package/dist/agent/pi-runner.js +300 -0
- package/dist/agent/pi-runner.js.map +1 -0
- package/dist/agent/skill-generate.d.ts +63 -0
- package/dist/agent/skill-generate.d.ts.map +1 -0
- package/dist/agent/skill-generate.js +128 -0
- package/dist/agent/skill-generate.js.map +1 -0
- package/dist/agent/skill-install.d.ts.map +1 -1
- package/dist/agent/skill-install.js +80 -31
- package/dist/agent/skill-install.js.map +1 -1
- package/dist/agent/skill-templates.d.ts +17 -0
- package/dist/agent/skill-templates.d.ts.map +1 -0
- package/dist/agent/skill-templates.js +26 -0
- package/dist/agent/skill-templates.js.map +1 -0
- package/dist/agent/skills-config.d.ts +24 -2
- package/dist/agent/skills-config.d.ts.map +1 -1
- package/dist/agent/skills-config.js +107 -8
- package/dist/agent/skills-config.js.map +1 -1
- package/dist/agent/skills-watcher.js +1 -1
- package/dist/agent/skills.d.ts +9 -3
- package/dist/agent/skills.d.ts.map +1 -1
- package/dist/agent/skills.js +104 -9
- package/dist/agent/skills.js.map +1 -1
- package/dist/agent/tools.d.ts +25 -3
- package/dist/agent/tools.d.ts.map +1 -1
- package/dist/agent/tools.integrations.test.d.ts +2 -0
- package/dist/agent/tools.integrations.test.d.ts.map +1 -0
- package/dist/agent/tools.integrations.test.js +269 -0
- package/dist/agent/tools.integrations.test.js.map +1 -0
- package/dist/agent/tools.js +692 -39
- package/dist/agent/tools.js.map +1 -1
- package/dist/ai/orchestrator.d.ts +4 -1
- package/dist/ai/orchestrator.d.ts.map +1 -1
- package/dist/ai/orchestrator.js +246 -14
- package/dist/ai/orchestrator.js.map +1 -1
- package/dist/ai/pricing.d.ts +6 -0
- package/dist/ai/pricing.d.ts.map +1 -0
- package/dist/ai/pricing.js +39 -0
- package/dist/ai/pricing.js.map +1 -0
- package/dist/channels/discord.d.ts +15 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +55 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/stripe.d.ts +15 -0
- package/dist/channels/stripe.d.ts.map +1 -0
- package/dist/channels/stripe.js +58 -0
- package/dist/channels/stripe.js.map +1 -0
- package/dist/channels/telegram.d.ts +60 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +562 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/cli.js +66 -8
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +85 -1
- package/dist/config.js.map +1 -1
- package/dist/db/index.d.ts +83 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +174 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema.sql +35 -0
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +1219 -27
- package/dist/gateway/server.js.map +1 -1
- package/dist/index.js +149 -6
- package/dist/index.js.map +1 -1
- package/dist/ollama-setup.d.ts +27 -0
- package/dist/ollama-setup.d.ts.map +1 -0
- package/dist/ollama-setup.js +191 -0
- package/dist/ollama-setup.js.map +1 -0
- package/dist/onboard-env.d.ts +1 -1
- package/dist/onboard-env.d.ts.map +1 -1
- package/dist/onboard-env.js +2 -0
- package/dist/onboard-env.js.map +1 -1
- package/dist/onboard.d.ts +3 -1
- package/dist/onboard.d.ts.map +1 -1
- package/dist/onboard.js +7 -2
- package/dist/onboard.js.map +1 -1
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +32 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/redact.d.ts +15 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +56 -0
- package/dist/redact.js.map +1 -0
- package/dist/scheduler/cron.d.ts +21 -0
- package/dist/scheduler/cron.d.ts.map +1 -1
- package/dist/scheduler/cron.js +60 -0
- package/dist/scheduler/cron.js.map +1 -1
- package/dist/system-capabilities.d.ts +11 -0
- package/dist/system-capabilities.d.ts.map +1 -0
- package/dist/system-capabilities.js +109 -0
- package/dist/system-capabilities.js.map +1 -0
- package/dist/types.d.ts +62 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/watcher/index.d.ts +2 -0
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +31 -1
- package/dist/watcher/index.js.map +1 -1
- package/dist/workspace-automations.d.ts +16 -0
- package/dist/workspace-automations.d.ts.map +1 -0
- package/dist/workspace-automations.js +133 -0
- package/dist/workspace-automations.js.map +1 -0
- package/package.json +19 -3
- package/registry/bluesky.md +12 -89
- package/registry/skills-registry.json +6 -0
- package/src/db/schema.sql +35 -0
- package/src/index.ts +159 -6
|
@@ -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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Wizard: generate a skill spec from goal + app + trigger (no LLM).
|
|
3
|
+
* Used by POST /api/agent/skills/generate. Credential-agnostic: requiredEnv
|
|
4
|
+
* can be satisfied by API key now or connectionId later.
|
|
5
|
+
*/
|
|
6
|
+
import { writeFileSync, mkdirSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { loadSkillsConfig, saveSkillsConfig } from './skills-config.js';
|
|
9
|
+
export const WIZARD_APPS = [
|
|
10
|
+
{ id: 'gmail', label: 'Gmail', envHint: 'GMAIL_API_KEY or connect later' },
|
|
11
|
+
{ id: 'slack', label: 'Slack', envHint: 'SLACK_BOT_TOKEN or connect later' },
|
|
12
|
+
{ id: 'notion', label: 'Notion', envHint: 'NOTION_API_KEY or connect later' },
|
|
13
|
+
{ id: 'github', label: 'GitHub', envHint: 'GITHUB_TOKEN or connect later' },
|
|
14
|
+
{ id: 'calendar', label: 'Google Calendar', envHint: 'GOOGLE_CALENDAR_CREDENTIALS or connect later' },
|
|
15
|
+
{ id: 'webhook', label: 'Webhook', envHint: 'Optional' },
|
|
16
|
+
{ id: 'other', label: 'Other', envHint: 'Depends on skill' },
|
|
17
|
+
];
|
|
18
|
+
export const WIZARD_TRIGGERS = [
|
|
19
|
+
{ id: 'manual', label: 'When I ask (manual)' },
|
|
20
|
+
{ id: 'schedule', label: 'On a schedule (cron)' },
|
|
21
|
+
{ id: 'webhook', label: 'When a webhook is called' },
|
|
22
|
+
{ id: 'message', label: 'When I send a message (e.g. Telegram)' },
|
|
23
|
+
];
|
|
24
|
+
function slugify(name) {
|
|
25
|
+
return name
|
|
26
|
+
.toLowerCase()
|
|
27
|
+
.replace(/\s+/g, '-')
|
|
28
|
+
.replace(/[^a-z0-9-]/g, '')
|
|
29
|
+
.replace(/-+/g, '-')
|
|
30
|
+
.replace(/^-|-$/g, '') || 'skill';
|
|
31
|
+
}
|
|
32
|
+
function envForApp(appId) {
|
|
33
|
+
switch (appId) {
|
|
34
|
+
case 'gmail':
|
|
35
|
+
return ['GMAIL_API_KEY'];
|
|
36
|
+
case 'slack':
|
|
37
|
+
return ['SLACK_BOT_TOKEN'];
|
|
38
|
+
case 'notion':
|
|
39
|
+
return ['NOTION_API_KEY'];
|
|
40
|
+
case 'github':
|
|
41
|
+
return ['GITHUB_TOKEN'];
|
|
42
|
+
case 'calendar':
|
|
43
|
+
return ['GOOGLE_CALENDAR_CREDENTIALS'];
|
|
44
|
+
case 'webhook':
|
|
45
|
+
return [];
|
|
46
|
+
default:
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function defaultNameForApp(appId) {
|
|
51
|
+
const t = WIZARD_APPS.find((a) => a.id === appId);
|
|
52
|
+
return t ? t.label : 'Custom';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate a skill spec from wizard answers. No LLM; deterministic.
|
|
56
|
+
*/
|
|
57
|
+
export function generateSkillSpec(goal, appId, triggerId) {
|
|
58
|
+
const trimmedGoal = (goal || '').trim();
|
|
59
|
+
const name = trimmedGoal
|
|
60
|
+
? `${trimmedGoal.slice(0, 50)}${trimmedGoal.length > 50 ? '…' : ''}`
|
|
61
|
+
: defaultNameForApp(appId);
|
|
62
|
+
const slug = slugify(name || appId || 'skill');
|
|
63
|
+
const description = trimmedGoal
|
|
64
|
+
? trimmedGoal
|
|
65
|
+
: `Skill connected to ${defaultNameForApp(appId)}. Configure trigger and credentials in Settings.`;
|
|
66
|
+
const requiredEnv = envForApp(appId);
|
|
67
|
+
const metadata = {
|
|
68
|
+
sulala: {
|
|
69
|
+
category: 'integration',
|
|
70
|
+
version: '1.0.0',
|
|
71
|
+
tags: [appId, triggerId],
|
|
72
|
+
requires: requiredEnv.length ? { env: requiredEnv } : {},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const metadataBlock = JSON.stringify(metadata, null, 2)
|
|
76
|
+
.split('\n')
|
|
77
|
+
.map((line) => ' ' + line)
|
|
78
|
+
.join('\n');
|
|
79
|
+
const frontmatter = `---
|
|
80
|
+
name: ${name.replace(/\n/g, ' ')}
|
|
81
|
+
description: ${description.replace(/\n/g, ' ').slice(0, 200)}
|
|
82
|
+
metadata:
|
|
83
|
+
${metadataBlock}
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
`;
|
|
87
|
+
const body = `# ${name}
|
|
88
|
+
|
|
89
|
+
${description}
|
|
90
|
+
|
|
91
|
+
## Setup
|
|
92
|
+
|
|
93
|
+
${requiredEnv.length ? `Add these to the skill config (Skills → this skill):\n- ${requiredEnv.join('\n- ')}` : 'No required env. Configure webhook or schedule in Jobs if needed.'}
|
|
94
|
+
|
|
95
|
+
## Trigger
|
|
96
|
+
|
|
97
|
+
This skill is set to run: **${WIZARD_TRIGGERS.find((t) => t.id === triggerId)?.label ?? triggerId}**.
|
|
98
|
+
`;
|
|
99
|
+
return {
|
|
100
|
+
name,
|
|
101
|
+
description,
|
|
102
|
+
slug,
|
|
103
|
+
frontmatter,
|
|
104
|
+
body,
|
|
105
|
+
requiredEnv,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Write SKILL.md to workspace and add config entry. Uses config.skillsWorkspaceDir.
|
|
110
|
+
*/
|
|
111
|
+
export function writeGeneratedSkill(config, spec) {
|
|
112
|
+
const dir = join(config.skillsWorkspaceDir, spec.slug);
|
|
113
|
+
mkdirSync(dir, { recursive: true });
|
|
114
|
+
const filePath = join(dir, 'SKILL.md');
|
|
115
|
+
const content = spec.frontmatter + spec.body;
|
|
116
|
+
writeFileSync(filePath, content, 'utf8');
|
|
117
|
+
const cfg = loadSkillsConfig();
|
|
118
|
+
if (!cfg.entries)
|
|
119
|
+
cfg.entries = {};
|
|
120
|
+
const entry = { enabled: true };
|
|
121
|
+
for (const key of spec.requiredEnv) {
|
|
122
|
+
entry[key] = '';
|
|
123
|
+
}
|
|
124
|
+
cfg.entries[spec.slug] = entry;
|
|
125
|
+
saveSkillsConfig(cfg);
|
|
126
|
+
return { path: filePath, slug: spec.slug };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=skill-generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-generate.js","sourceRoot":"","sources":["../../src/agent/skill-generate.ts"],"names":[],"mappings":"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"}
|