@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.
- package/README.md +42 -27
- 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 +108 -9
- 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 +6 -1
- package/dist/ai/orchestrator.d.ts.map +1 -1
- package/dist/ai/orchestrator.js +499 -212
- 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 +69 -11
- 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 +91 -2
- 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 +1224 -29
- 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 +3 -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 +9 -4
- 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,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":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gCAAgC,EAAE;IAC1E,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,kCAAkC,EAAE;IAC5E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC7E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,+BAA+B,EAAE;IAC3E,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,8CAA8C,EAAE;IACrG,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;IACxD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE;CACpD,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAC9C,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,sBAAsB,EAAE;IACjD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,0BAA0B,EAAE;IACpD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,uCAAuC,EAAE;CACzD,CAAC;AAWX,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3B,KAAK,OAAO;YACV,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1B,KAAK,UAAU;YACb,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACzC,KAAK,SAAS;YACZ,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,SAAiB;IAC9E,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,WAAW;QACtB,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpE,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,sBAAsB,iBAAiB,CAAC,KAAK,CAAC,kDAAkD,CAAC;IACrG,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,QAAQ,GAA4B;QACxC,MAAM,EAAE;YACN,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;YACxB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;SACzD;KACF,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;SACpD,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,WAAW,GAAG;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;eACjB,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;;EAE1D,aAAa;;;CAGd,CAAC;IAEA,MAAM,IAAI,GAAG,KAAK,IAAI;;EAEtB,WAAW;;;;EAIX,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,2DAA2D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,mEAAmE;;;;8BAIpJ,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,SAAS;CAChG,CAAC;IAEA,OAAO;QACL,IAAI;QACJ,WAAW;QACX,IAAI;QACJ,WAAW;QACX,IAAI;QACJ,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,IAAe;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IACnC,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,KAAgC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC;IACD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC/B,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEtB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-install.d.ts","sourceRoot":"","sources":["../../src/agent/skill-install.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-install.d.ts","sourceRoot":"","sources":["../../src/agent/skill-install.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAWF,wBAAsB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAWtF;AAED,wBAAgB,sBAAsB,IAAI,aAAa,EAAE,CAQxD;AA4DD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC7D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B5E;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoBpD;AAyDD,wBAAsB,eAAe,IAAI,OAAO,CAC9C;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CACjE,CAaA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAqBtE"}
|
|
@@ -5,21 +5,28 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
6
|
const projectRoot = join(__dirname, '..', '..');
|
|
7
7
|
const registryPath = join(projectRoot, 'registry', 'skills-registry.json');
|
|
8
|
+
const DEFAULT_HUB_BASE = 'http://localhost:3002';
|
|
9
|
+
function getRegistryUrl(overrideUrl) {
|
|
10
|
+
const explicit = overrideUrl?.trim() || process.env.SKILLS_REGISTRY_URL?.trim();
|
|
11
|
+
if (explicit)
|
|
12
|
+
return explicit;
|
|
13
|
+
const hubBase = process.env.SULALAHUB_BASE_URL?.trim() || DEFAULT_HUB_BASE;
|
|
14
|
+
return `${hubBase.replace(/\/$/, '')}/api/sulalahub/registry`;
|
|
15
|
+
}
|
|
8
16
|
export async function getRegistrySkills(overrideUrl) {
|
|
9
|
-
const url = overrideUrl
|
|
10
|
-
if (url)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const url = getRegistryUrl(overrideUrl);
|
|
18
|
+
if (!url)
|
|
19
|
+
return getRegistrySkillsLocal();
|
|
20
|
+
try {
|
|
21
|
+
const res = await fetch(url);
|
|
22
|
+
if (!res.ok)
|
|
23
|
+
throw new Error(`HTTP ${res.status}`);
|
|
24
|
+
const data = (await res.json());
|
|
25
|
+
return data.skills || [];
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return getRegistrySkillsLocal();
|
|
21
29
|
}
|
|
22
|
-
return getRegistrySkillsLocal();
|
|
23
30
|
}
|
|
24
31
|
export function getRegistrySkillsLocal() {
|
|
25
32
|
if (!existsSync(registryPath))
|
|
@@ -72,6 +79,11 @@ function compareVersions(a, b) {
|
|
|
72
79
|
function getManagedDir() {
|
|
73
80
|
return process.env.SULALA_SKILLS_DIR || join(homedir(), '.sulala', 'skills');
|
|
74
81
|
}
|
|
82
|
+
/** Workspace skills dir: ~/.sulala/workspace/skills/<skill-name>/SKILL.md. Used for installs (safe from project updates). */
|
|
83
|
+
function getWorkspaceSkillsDir() {
|
|
84
|
+
return (process.env.SULALA_WORKSPACE_SKILLS_DIR ||
|
|
85
|
+
join(homedir(), '.sulala', 'workspace', 'skills'));
|
|
86
|
+
}
|
|
75
87
|
function getWorkspaceDir() {
|
|
76
88
|
const cwd = process.cwd();
|
|
77
89
|
const path = process.env.AGENT_CONTEXT_PATH || 'context';
|
|
@@ -106,9 +118,11 @@ export async function installSkill(slug, target, opts) {
|
|
|
106
118
|
}
|
|
107
119
|
content = readFileSync(localPath, 'utf8');
|
|
108
120
|
}
|
|
109
|
-
const dir = target === 'managed' ?
|
|
110
|
-
|
|
111
|
-
|
|
121
|
+
const dir = target === 'managed' ? getWorkspaceSkillsDir() : getWorkspaceDir();
|
|
122
|
+
const destPath = target === 'managed'
|
|
123
|
+
? join(dir, slug, 'SKILL.md')
|
|
124
|
+
: join(dir, `${slug}.md`);
|
|
125
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
112
126
|
writeFileSync(destPath, content, 'utf8');
|
|
113
127
|
if (entry.version) {
|
|
114
128
|
const versions = loadInstalledVersions();
|
|
@@ -139,9 +153,11 @@ export async function installSkillFromUrl(skillContentUrl, target) {
|
|
|
139
153
|
if (!res.ok)
|
|
140
154
|
throw new Error(`HTTP ${res.status}`);
|
|
141
155
|
const content = await res.text();
|
|
142
|
-
const dir = target === 'managed' ?
|
|
143
|
-
|
|
144
|
-
|
|
156
|
+
const dir = target === 'managed' ? getWorkspaceSkillsDir() : getWorkspaceDir();
|
|
157
|
+
const destPath = target === 'managed'
|
|
158
|
+
? join(dir, slug, 'SKILL.md')
|
|
159
|
+
: join(dir, `${slug}.md`);
|
|
160
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
145
161
|
writeFileSync(destPath, content, 'utf8');
|
|
146
162
|
return { success: true, path: destPath, slug };
|
|
147
163
|
}
|
|
@@ -154,8 +170,8 @@ export async function installSkillFromUrl(skillContentUrl, target) {
|
|
|
154
170
|
}
|
|
155
171
|
}
|
|
156
172
|
export function uninstallSkill(slug, target) {
|
|
157
|
-
const dir = target === 'managed' ?
|
|
158
|
-
const filePath = join(dir, `${slug}.md`);
|
|
173
|
+
const dir = target === 'managed' ? getWorkspaceSkillsDir() : getWorkspaceDir();
|
|
174
|
+
const filePath = target === 'managed' ? join(dir, slug, 'SKILL.md') : join(dir, `${slug}.md`);
|
|
159
175
|
if (!existsSync(filePath)) {
|
|
160
176
|
return { success: false, path: '', error: `Skill not installed: ${slug}` };
|
|
161
177
|
}
|
|
@@ -178,24 +194,57 @@ export function uninstallSkill(slug, target) {
|
|
|
178
194
|
function getInstalledSkills() {
|
|
179
195
|
const seen = new Set();
|
|
180
196
|
const out = [];
|
|
181
|
-
const
|
|
197
|
+
const workspaceSkills = getWorkspaceSkillsDir();
|
|
198
|
+
const managedLegacy = getManagedDir();
|
|
182
199
|
const workspace = getWorkspaceDir();
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
200
|
+
// Managed (workspace dir): ~/.sulala/workspace/skills/<slug>/SKILL.md
|
|
201
|
+
if (existsSync(workspaceSkills)) {
|
|
202
|
+
try {
|
|
203
|
+
for (const n of readdirSync(workspaceSkills, { withFileTypes: true })) {
|
|
204
|
+
if (!n.isDirectory() || n.name.startsWith('.'))
|
|
205
|
+
continue;
|
|
206
|
+
const skillPath = join(workspaceSkills, n.name, 'SKILL.md');
|
|
207
|
+
if (!existsSync(skillPath))
|
|
208
|
+
continue;
|
|
209
|
+
const slug = n.name;
|
|
210
|
+
if (!seen.has(slug)) {
|
|
211
|
+
seen.add(slug);
|
|
212
|
+
out.push({ slug, target: 'managed' });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// skip
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Legacy managed: ~/.sulala/skills/<slug>.md
|
|
221
|
+
if (existsSync(managedLegacy)) {
|
|
222
|
+
try {
|
|
223
|
+
for (const n of readdirSync(managedLegacy)) {
|
|
224
|
+
if (!n.endsWith('.md'))
|
|
225
|
+
continue;
|
|
226
|
+
const slug = n.replace(/\.md$/, '');
|
|
227
|
+
if (seen.has(slug))
|
|
228
|
+
continue;
|
|
229
|
+
seen.add(slug);
|
|
230
|
+
out.push({ slug, target: 'managed' });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// skip
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Workspace (project): AGENT_CONTEXT_PATH/<slug>.md
|
|
238
|
+
if (existsSync(workspace)) {
|
|
190
239
|
try {
|
|
191
|
-
for (const n of readdirSync(
|
|
240
|
+
for (const n of readdirSync(workspace)) {
|
|
192
241
|
if (!n.endsWith('.md'))
|
|
193
242
|
continue;
|
|
194
243
|
const slug = n.replace(/\.md$/, '');
|
|
195
244
|
if (seen.has(slug))
|
|
196
245
|
continue;
|
|
197
246
|
seen.add(slug);
|
|
198
|
-
out.push({ slug, target });
|
|
247
|
+
out.push({ slug, target: 'workspace' });
|
|
199
248
|
}
|
|
200
249
|
}
|
|
201
250
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-install.js","sourceRoot":"","sources":["../../src/agent/skill-install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill-install.js","sourceRoot":"","sources":["../../src/agent/skill-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template manifests: which registry skills are "templates" and which fields to show in the quick-setup form.
|
|
3
|
+
* A template is the same as a skill; we only define the minimal required inputs for one-click install.
|
|
4
|
+
*/
|
|
5
|
+
import type { RegistrySkill } from './skill-install.js';
|
|
6
|
+
export type TemplateManifest = {
|
|
7
|
+
slug: string;
|
|
8
|
+
requiredFields: string[];
|
|
9
|
+
};
|
|
10
|
+
export type SkillTemplate = RegistrySkill & {
|
|
11
|
+
requiredFields: string[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Return registry skills that have a template manifest, with requiredFields attached.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getTemplates(registrySkills: RegistrySkill[]): SkillTemplate[];
|
|
17
|
+
//# sourceMappingURL=skill-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-templates.d.ts","sourceRoot":"","sources":["../../src/agent/skill-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAYF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAAE,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzE;;GAEG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAW7E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Slugs that are offered as templates, and the only config fields we ask for in the "Use template" form. */
|
|
2
|
+
const TEMPLATE_MANIFESTS = {
|
|
3
|
+
weather: { requiredFields: [] },
|
|
4
|
+
bluesky: { requiredFields: ['handle', 'apiKey'] },
|
|
5
|
+
news: { requiredFields: ['apiKey'] },
|
|
6
|
+
files: { requiredFields: [] },
|
|
7
|
+
git: { requiredFields: [] },
|
|
8
|
+
'apple-notes': { requiredFields: [] },
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Return registry skills that have a template manifest, with requiredFields attached.
|
|
12
|
+
*/
|
|
13
|
+
export function getTemplates(registrySkills) {
|
|
14
|
+
const out = [];
|
|
15
|
+
for (const s of registrySkills) {
|
|
16
|
+
const manifest = TEMPLATE_MANIFESTS[s.slug];
|
|
17
|
+
if (!manifest)
|
|
18
|
+
continue;
|
|
19
|
+
out.push({
|
|
20
|
+
...s,
|
|
21
|
+
requiredFields: manifest.requiredFields,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=skill-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-templates.js","sourceRoot":"","sources":["../../src/agent/skill-templates.ts"],"names":[],"mappings":"AAWA,6GAA6G;AAC7G,MAAM,kBAAkB,GAAiD;IACvE,OAAO,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/B,OAAO,EAAE,EAAE,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACjD,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE;IACpC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC7B,GAAG,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;CACtC,CAAC;AAIF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,cAA+B;IAC1D,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,GAAG,CAAC,IAAI,CAAC;YACP,GAAG,CAAC;YACJ,cAAc,EAAE,QAAQ,CAAC,cAAc;SACxC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -2,6 +2,10 @@ export type SkillEntry = {
|
|
|
2
2
|
enabled?: boolean;
|
|
3
3
|
handle?: string;
|
|
4
4
|
apiKey?: string;
|
|
5
|
+
/** Per-skill tool allowlist; when set, only these tools are allowed for this skill (used when skillSlug is passed to listTools/executeTool). */
|
|
6
|
+
allowedTools?: string[];
|
|
7
|
+
/** When true, only read-only tools are allowed for this skill (e.g. read_file, not write_file or run_command). */
|
|
8
|
+
readOnly?: boolean;
|
|
5
9
|
[key: string]: unknown;
|
|
6
10
|
};
|
|
7
11
|
export type SkillsConfig = {
|
|
@@ -9,6 +13,8 @@ export type SkillsConfig = {
|
|
|
9
13
|
};
|
|
10
14
|
export type SulalaConfig = {
|
|
11
15
|
skills?: SkillsConfig;
|
|
16
|
+
/** Binaries allowed for run_command; merged with ALLOWED_BINARIES env. */
|
|
17
|
+
allowedBinaries?: string[];
|
|
12
18
|
[key: string]: unknown;
|
|
13
19
|
};
|
|
14
20
|
/** Config path: SULALA_CONFIG_PATH > .sulala/config.json in cwd (if exists) > ~/.sulala/config.json */
|
|
@@ -17,8 +23,24 @@ export declare function loadFullConfig(): SulalaConfig;
|
|
|
17
23
|
export declare function saveFullConfig(data: SulalaConfig): void;
|
|
18
24
|
export declare function loadSkillsConfig(): SkillsConfig;
|
|
19
25
|
export declare function saveSkillsConfig(cfg: SkillsConfig): void;
|
|
20
|
-
|
|
21
|
-
export declare function
|
|
26
|
+
/** Config keys are slugs (filename without .md). */
|
|
27
|
+
export declare function isSkillEnabled(slug: string): boolean;
|
|
28
|
+
export declare function setSkillEnabled(slug: string, enabled: boolean): void;
|
|
29
|
+
/** Remove a skill's config entry entirely (clears override; skill reverts to default enabled). */
|
|
30
|
+
export declare function removeSkillEntry(slug: string): void;
|
|
31
|
+
/** Migrate config entries from name keys to slug keys (one-time for existing installs). */
|
|
32
|
+
export declare function migrateConfigNameKeysToSlug(nameToSlug: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
slug: string;
|
|
35
|
+
}>): void;
|
|
36
|
+
/** Onboarding: persisted in config for first-launch detection. Existing users with env keys are treated as complete. */
|
|
37
|
+
export declare function getOnboardingComplete(): boolean;
|
|
38
|
+
export declare function setOnboardingComplete(complete: boolean): void;
|
|
39
|
+
/** Per-skill tool policy for listTools/executeTool when skillSlug is provided. */
|
|
40
|
+
export declare function getSkillToolPolicy(slug: string): {
|
|
41
|
+
allowlist: string[] | null;
|
|
42
|
+
readOnly: boolean;
|
|
43
|
+
};
|
|
22
44
|
/** Build env vars from all skill entries (key = env name, value = string). Used by run_command so curl etc. see PERIGON_API_KEY etc. */
|
|
23
45
|
export declare function getSkillConfigEnv(): Record<string, string>;
|
|
24
46
|
//# sourceMappingURL=skills-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-config.d.ts","sourceRoot":"","sources":["../../src/agent/skills-config.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,UAAU,GAAG;
|
|
1
|
+
{"version":3,"file":"skills-config.d.ts","sourceRoot":"","sources":["../../src/agent/skills-config.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gJAAgJ;IAChJ,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kHAAkH;IAClH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAcF,uGAAuG;AACvG,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAWD,wBAAgB,cAAc,IAAI,YAAY,CAY7C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAKvD;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAgB/C;AAkBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAaxD;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKpD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAMpE;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CASnD;AAED,2FAA2F;AAC3F,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,IAAI,CAkBN;AAED,wHAAwH;AACxH,wBAAgB,qBAAqB,IAAI,OAAO,CAsB/C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAI7D;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAUlG;AAED,wIAAwI;AACxI,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW1D"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Path: SULALA_CONFIG_PATH > .sulala/config.json in cwd (if exists) > ~/.sulala/config.json.
|
|
4
4
|
* Read: loadFullConfig/loadSkillsConfig from that path; cache invalidated on file mtime change.
|
|
5
5
|
* Write: saveFullConfig/saveSkillsConfig to the same path.
|
|
6
|
-
* See docs/
|
|
6
|
+
* See docs/config.md for full resolution and read/write flow.
|
|
7
7
|
*/
|
|
8
8
|
import { readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from 'fs';
|
|
9
9
|
import { join, dirname } from 'path';
|
|
@@ -79,34 +79,133 @@ export function loadSkillsConfig() {
|
|
|
79
79
|
return {};
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
+
/** When client sends "set" for a secret key it means "keep existing"; "unset" means clear. */
|
|
83
|
+
function mergeSkillEntry(existing, incoming) {
|
|
84
|
+
const out = { ...existing };
|
|
85
|
+
for (const [key, value] of Object.entries(incoming)) {
|
|
86
|
+
if (value === 'set') {
|
|
87
|
+
if (existing[key] !== undefined && existing[key] !== '')
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (value === 'unset') {
|
|
91
|
+
delete out[key];
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
out[key] = value;
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
82
98
|
export function saveSkillsConfig(cfg) {
|
|
83
99
|
const full = loadFullConfig();
|
|
84
100
|
const existingEntries = full.skills?.entries ?? {};
|
|
85
101
|
const incomingEntries = cfg.entries ?? {};
|
|
86
102
|
const mergedEntries = { ...existingEntries };
|
|
87
103
|
for (const [name, entry] of Object.entries(incomingEntries)) {
|
|
88
|
-
|
|
104
|
+
const existing = existingEntries[name] ?? {};
|
|
105
|
+
const incoming = entry && typeof entry === 'object' ? entry : {};
|
|
106
|
+
mergedEntries[name] = mergeSkillEntry(existing, incoming);
|
|
89
107
|
}
|
|
90
108
|
full.skills = { ...full.skills, entries: mergedEntries };
|
|
91
109
|
saveFullConfig(full);
|
|
92
110
|
cached = full.skills;
|
|
93
111
|
}
|
|
94
|
-
|
|
112
|
+
/** Config keys are slugs (filename without .md). */
|
|
113
|
+
export function isSkillEnabled(slug) {
|
|
95
114
|
const cfg = loadSkillsConfig();
|
|
96
|
-
const entry = cfg.entries?.[
|
|
115
|
+
const entry = cfg.entries?.[slug];
|
|
97
116
|
if (!entry)
|
|
98
117
|
return true;
|
|
99
118
|
return entry.enabled !== false;
|
|
100
119
|
}
|
|
101
|
-
export function setSkillEnabled(
|
|
120
|
+
export function setSkillEnabled(slug, enabled) {
|
|
102
121
|
const cfg = loadSkillsConfig();
|
|
103
122
|
if (!cfg.entries)
|
|
104
123
|
cfg.entries = {};
|
|
105
|
-
if (!cfg.entries[
|
|
106
|
-
cfg.entries[
|
|
107
|
-
cfg.entries[
|
|
124
|
+
if (!cfg.entries[slug])
|
|
125
|
+
cfg.entries[slug] = {};
|
|
126
|
+
cfg.entries[slug].enabled = enabled;
|
|
108
127
|
saveSkillsConfig(cfg);
|
|
109
128
|
}
|
|
129
|
+
/** Remove a skill's config entry entirely (clears override; skill reverts to default enabled). */
|
|
130
|
+
export function removeSkillEntry(slug) {
|
|
131
|
+
const full = loadFullConfig();
|
|
132
|
+
const entries = full.skills?.entries;
|
|
133
|
+
if (!entries || !(slug in entries))
|
|
134
|
+
return;
|
|
135
|
+
const next = { ...entries };
|
|
136
|
+
delete next[slug];
|
|
137
|
+
full.skills = { ...full.skills, entries: next };
|
|
138
|
+
saveFullConfig(full);
|
|
139
|
+
cached = full.skills;
|
|
140
|
+
}
|
|
141
|
+
/** Migrate config entries from name keys to slug keys (one-time for existing installs). */
|
|
142
|
+
export function migrateConfigNameKeysToSlug(nameToSlug) {
|
|
143
|
+
const full = loadFullConfig();
|
|
144
|
+
const entries = full.skills?.entries;
|
|
145
|
+
if (!entries)
|
|
146
|
+
return;
|
|
147
|
+
let changed = false;
|
|
148
|
+
const next = { ...entries };
|
|
149
|
+
for (const { name, slug } of nameToSlug) {
|
|
150
|
+
if (name !== slug && name in next && !(slug in next)) {
|
|
151
|
+
next[slug] = next[name];
|
|
152
|
+
delete next[name];
|
|
153
|
+
changed = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (changed) {
|
|
157
|
+
full.skills = { ...full.skills, entries: next };
|
|
158
|
+
saveFullConfig(full);
|
|
159
|
+
cached = full.skills;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** Onboarding: persisted in config for first-launch detection. Existing users with env keys are treated as complete. */
|
|
163
|
+
export function getOnboardingComplete() {
|
|
164
|
+
const full = loadFullConfig();
|
|
165
|
+
if (full.onboardingComplete === true)
|
|
166
|
+
return true;
|
|
167
|
+
// Explicit reset: set to false in config to see onboarding again
|
|
168
|
+
if (full.onboardingComplete === false)
|
|
169
|
+
return false;
|
|
170
|
+
// Migration: existing users with API keys are considered onboarded (do not write)
|
|
171
|
+
const envPath = join(homedir(), '.sulala', '.env');
|
|
172
|
+
if (existsSync(envPath)) {
|
|
173
|
+
try {
|
|
174
|
+
const content = readFileSync(envPath, 'utf8');
|
|
175
|
+
const hasKey = content.split('\n').some((line) => {
|
|
176
|
+
const t = line.trim();
|
|
177
|
+
if (!t || t.startsWith('#'))
|
|
178
|
+
return false;
|
|
179
|
+
const eq = t.indexOf('=');
|
|
180
|
+
return eq > 0 && t.slice(eq + 1).trim().length > 0;
|
|
181
|
+
});
|
|
182
|
+
if (hasKey)
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
/* ignore */
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
export function setOnboardingComplete(complete) {
|
|
192
|
+
const full = loadFullConfig();
|
|
193
|
+
full.onboardingComplete = complete;
|
|
194
|
+
saveFullConfig(full);
|
|
195
|
+
}
|
|
196
|
+
/** Per-skill tool policy for listTools/executeTool when skillSlug is provided. */
|
|
197
|
+
export function getSkillToolPolicy(slug) {
|
|
198
|
+
const cfg = loadSkillsConfig();
|
|
199
|
+
const entry = cfg.entries?.[slug];
|
|
200
|
+
if (!entry || typeof entry !== 'object')
|
|
201
|
+
return { allowlist: null, readOnly: false };
|
|
202
|
+
const allowedTools = entry.allowedTools;
|
|
203
|
+
const allowlist = Array.isArray(allowedTools) && allowedTools.length > 0
|
|
204
|
+
? allowedTools.map((s) => String(s).trim()).filter(Boolean)
|
|
205
|
+
: null;
|
|
206
|
+
const readOnly = entry.readOnly === true;
|
|
207
|
+
return { allowlist, readOnly };
|
|
208
|
+
}
|
|
110
209
|
/** Build env vars from all skill entries (key = env name, value = string). Used by run_command so curl etc. see PERIGON_API_KEY etc. */
|
|
111
210
|
export function getSkillConfigEnv() {
|
|
112
211
|
const cfg = loadSkillsConfig();
|
|
@@ -115,7 +214,7 @@ export function getSkillConfigEnv() {
|
|
|
115
214
|
if (!entry || typeof entry !== 'object')
|
|
116
215
|
continue;
|
|
117
216
|
for (const [key, value] of Object.entries(entry)) {
|
|
118
|
-
if (key === 'enabled')
|
|
217
|
+
if (key === 'enabled' || key === 'allowedTools' || key === 'readOnly')
|
|
119
218
|
continue;
|
|
120
219
|
if (typeof value === 'string' && value.trim())
|
|
121
220
|
out[key] = value;
|