@redplanethq/corebrain 2.8.30 → 2.8.32
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/dist/assets/assets/AppIcon.icns +0 -0
- package/dist/commands/gateway/register.js +1 -1
- package/dist/commands/gateway/register.js.map +1 -1
- package/dist/server/api/server.d.ts.map +1 -1
- package/dist/server/api/server.js +5 -0
- package/dist/server/api/server.js.map +1 -1
- package/dist/server/api/skills/index.d.ts +9 -0
- package/dist/server/api/skills/index.d.ts.map +1 -0
- package/dist/server/api/skills/index.js +12 -0
- package/dist/server/api/skills/index.js.map +1 -0
- package/dist/server/skills/install.d.ts +35 -0
- package/dist/server/skills/install.d.ts.map +1 -0
- package/dist/server/skills/install.js +182 -0
- package/dist/server/skills/install.js.map +1 -0
- package/dist/server/skills/skill-store.d.ts +12 -0
- package/dist/server/skills/skill-store.d.ts.map +1 -0
- package/dist/server/skills/skill-store.js +76 -0
- package/dist/server/skills/skill-store.js.map +1 -0
- package/dist/server/tools/skills-tools.d.ts +14 -0
- package/dist/server/tools/skills-tools.d.ts.map +1 -0
- package/dist/server/tools/skills-tools.js +100 -0
- package/dist/server/tools/skills-tools.js.map +1 -0
- package/dist/tui/chat.d.ts.map +1 -1
- package/dist/tui/chat.js +464 -73
- package/dist/tui/chat.js.map +1 -1
- package/dist/tui/components/approval-bar.d.ts +1 -1
- package/dist/tui/components/approval-bar.d.ts.map +1 -1
- package/dist/tui/components/approval-bar.js +1 -1
- package/dist/tui/components/approval-bar.js.map +1 -1
- package/dist/tui/components/approval-panel.d.ts +1 -1
- package/dist/tui/components/approval-panel.d.ts.map +1 -1
- package/dist/tui/components/approval-panel.js +1 -1
- package/dist/tui/components/approval-panel.js.map +1 -1
- package/dist/tui/components/context-bar.d.ts +26 -0
- package/dist/tui/components/context-bar.d.ts.map +1 -0
- package/dist/tui/components/context-bar.js +45 -0
- package/dist/tui/components/context-bar.js.map +1 -0
- package/dist/tui/components/conversation-selector.d.ts +24 -6
- package/dist/tui/components/conversation-selector.d.ts.map +1 -1
- package/dist/tui/components/conversation-selector.js +187 -117
- package/dist/tui/components/conversation-selector.js.map +1 -1
- package/dist/tui/components/integrations-view.d.ts +1 -1
- package/dist/tui/components/integrations-view.d.ts.map +1 -1
- package/dist/tui/components/integrations-view.js +1 -1
- package/dist/tui/components/integrations-view.js.map +1 -1
- package/dist/tui/components/scratchpad-panel.d.ts +28 -0
- package/dist/tui/components/scratchpad-panel.d.ts.map +1 -0
- package/dist/tui/components/scratchpad-panel.js +117 -0
- package/dist/tui/components/scratchpad-panel.js.map +1 -0
- package/dist/tui/components/split-pane.d.ts +23 -0
- package/dist/tui/components/split-pane.d.ts.map +1 -0
- package/dist/tui/components/split-pane.js +59 -0
- package/dist/tui/components/split-pane.js.map +1 -0
- package/dist/tui/components/status-line.d.ts +35 -6
- package/dist/tui/components/status-line.d.ts.map +1 -1
- package/dist/tui/components/status-line.js +149 -19
- package/dist/tui/components/status-line.js.map +1 -1
- package/dist/tui/components/task-detail.d.ts +1 -1
- package/dist/tui/components/task-detail.d.ts.map +1 -1
- package/dist/tui/components/task-detail.js +1 -1
- package/dist/tui/components/task-detail.js.map +1 -1
- package/dist/tui/components/task-list.d.ts +1 -1
- package/dist/tui/components/task-list.d.ts.map +1 -1
- package/dist/tui/components/task-list.js +5 -6
- package/dist/tui/components/task-list.js.map +1 -1
- package/dist/tui/components/task-runs.d.ts +32 -0
- package/dist/tui/components/task-runs.d.ts.map +1 -0
- package/dist/tui/components/task-runs.js +146 -0
- package/dist/tui/components/task-runs.js.map +1 -0
- package/dist/tui/components/tool-call-item.d.ts +1 -1
- package/dist/tui/components/tool-call-item.d.ts.map +1 -1
- package/dist/tui/components/tool-call-item.js +44 -13
- package/dist/tui/components/tool-call-item.js.map +1 -1
- package/dist/tui/components/widgets-view.d.ts +1 -1
- package/dist/tui/components/widgets-view.d.ts.map +1 -1
- package/dist/tui/components/widgets-view.js +1 -1
- package/dist/tui/components/widgets-view.js.map +1 -1
- package/dist/tui/hooks/use-conversation.d.ts.map +1 -1
- package/dist/tui/hooks/use-conversation.js +44 -8
- package/dist/tui/hooks/use-conversation.js.map +1 -1
- package/dist/tui/utils/avatar.d.ts +1 -1
- package/dist/tui/utils/avatar.d.ts.map +1 -1
- package/dist/tui/utils/avatar.js +1 -1
- package/dist/tui/utils/avatar.js.map +1 -1
- package/dist/tui/utils/bundle-loader.d.ts.map +1 -1
- package/dist/tui/utils/bundle-loader.js +8 -1
- package/dist/tui/utils/bundle-loader.js.map +1 -1
- package/dist/tui/utils/integration-loader.d.ts +1 -1
- package/dist/tui/utils/integration-loader.d.ts.map +1 -1
- package/dist/tui/utils/stream.d.ts +75 -13
- package/dist/tui/utils/stream.d.ts.map +1 -1
- package/dist/tui/utils/stream.js +148 -13
- package/dist/tui/utils/stream.js.map +1 -1
- package/dist/utils/env-bootstrap.js +1 -1
- package/dist/utils/env-bootstrap.js.map +1 -1
- package/dist/utils/setup/docker.js +1 -1
- package/dist/utils/setup/docker.js.map +1 -1
- package/dist/utils/setup/railway.js +1 -1
- package/dist/utils/setup/railway.js.map +1 -1
- package/package.json +5 -4
- package/dist/tui/components/dashboard-view.d.ts +0 -20
- package/dist/tui/components/dashboard-view.d.ts.map +0 -1
- package/dist/tui/components/dashboard-view.js +0 -147
- package/dist/tui/components/dashboard-view.js.map +0 -1
- package/dist/tui/components/reminder-list.d.ts +0 -28
- package/dist/tui/components/reminder-list.d.ts.map +0 -1
- package/dist/tui/components/reminder-list.js +0 -261
- package/dist/tui/components/reminder-list.js.map +0 -1
|
Binary file
|
|
@@ -103,7 +103,7 @@ export async function runRegister(opts) {
|
|
|
103
103
|
`${chalk.bold('baseUrl:')} ${baseUrl}`,
|
|
104
104
|
`${chalk.bold('securityKey:')} ${chalk.yellow(securityKey)}`,
|
|
105
105
|
'',
|
|
106
|
-
chalk.dim('Paste baseUrl + securityKey into CORE →
|
|
106
|
+
chalk.dim('Paste baseUrl + securityKey into CORE → Sidebar → Gateways → New gateway.'),
|
|
107
107
|
chalk.dim('This is the ONLY time the raw key is shown — it is not stored locally.'),
|
|
108
108
|
].join('\n'), 'Gateway registered');
|
|
109
109
|
return { ok: true, name, baseUrl, securityKey };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/commands/gateway/register.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/commands/gateway/register.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/api/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAC,KAAK,eAAe,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/api/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAC,KAAK,eAAe,EAAC,MAAM,SAAS,CAAC;AAetD,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyDlF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAKlF"}
|
|
@@ -9,6 +9,7 @@ import { filesRoutes } from './files/index.js';
|
|
|
9
9
|
import { utilsRoutes } from './utils/index.js';
|
|
10
10
|
import { folderRoutes } from './folders/index.js';
|
|
11
11
|
import { shellRoutes } from './shell/index.js';
|
|
12
|
+
import { skillsRoutes } from './skills/index.js';
|
|
12
13
|
import { isSlotEnabled } from './manifest-builder.js';
|
|
13
14
|
import { getPreferences } from '../../config/preferences.js';
|
|
14
15
|
export async function buildServer(opts) {
|
|
@@ -40,6 +41,10 @@ export async function buildServer(opts) {
|
|
|
40
41
|
}
|
|
41
42
|
// utils has no slot — it's always enabled (e.g. `sleep`).
|
|
42
43
|
await app.register(utilsRoutes, { prefix: '/api/utils' });
|
|
44
|
+
// Skills management is always on — it only mutates `~/.corebrain/skills/`,
|
|
45
|
+
// which is implicitly within scope, and doesn't run user code beyond
|
|
46
|
+
// `git clone` of the URL the caller specifies.
|
|
47
|
+
await app.register(skillsRoutes, { prefix: '/api/skills' });
|
|
43
48
|
// Folder management — used by the webapp's per-gateway settings page to
|
|
44
49
|
// add/remove local paths or clone GitHub URLs into the workspace.
|
|
45
50
|
await app.register(folderRoutes, { prefix: '/api/folders' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/api/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/api/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from 'fastify';
|
|
2
|
+
/**
|
|
3
|
+
* Mounted at `/api/skills`. Registers one POST route per skill management
|
|
4
|
+
* tool (`skill_install`, `skill_remove`). Auth is the standard gateway
|
|
5
|
+
* security key; the install itself doesn't run user code — it only writes
|
|
6
|
+
* the cloned repo subtree into `~/.corebrain/skills/<name>/`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const skillsRoutes: FastifyPluginAsync;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/api/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAIhD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,kBAE1B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { skillsTools, executeSkillsTool } from '../../../server/tools/skills-tools.js';
|
|
2
|
+
import { makeToolGroupRoutes } from '../tool-group.js';
|
|
3
|
+
/**
|
|
4
|
+
* Mounted at `/api/skills`. Registers one POST route per skill management
|
|
5
|
+
* tool (`skill_install`, `skill_remove`). Auth is the standard gateway
|
|
6
|
+
* security key; the install itself doesn't run user code — it only writes
|
|
7
|
+
* the cloned repo subtree into `~/.corebrain/skills/<name>/`.
|
|
8
|
+
*/
|
|
9
|
+
export const skillsRoutes = async (app) => {
|
|
10
|
+
await app.register(makeToolGroupRoutes(skillsTools, executeSkillsTool));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/api/skills/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAuB,KAAK,EAAC,GAAG,EAAC,EAAE;IAC3D,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { GatewaySkill } from '@redplanethq/gateway-protocol';
|
|
2
|
+
/**
|
|
3
|
+
* Source description for `installSkill`. Currently only `url` is supported —
|
|
4
|
+
* the gateway clones (optionally sparse-checkout'd) the repo and copies the
|
|
5
|
+
* skill's directory into `~/.corebrain/skills/<name>/`.
|
|
6
|
+
*/
|
|
7
|
+
export interface InstallFromUrl {
|
|
8
|
+
source: 'url';
|
|
9
|
+
/** `https://...` or `git@host:org/repo` clone URL. */
|
|
10
|
+
url: string;
|
|
11
|
+
/**
|
|
12
|
+
* Optional path inside the cloned repo to the skill folder. When set, the
|
|
13
|
+
* gateway uses `git sparse-checkout` so only this subtree is fetched —
|
|
14
|
+
* cheap for skills inside a large monorepo like `RedPlanetHQ/core`.
|
|
15
|
+
* If omitted, `installFromUrl` looks for SKILL.md at the repo root (or
|
|
16
|
+
* one level down if `name` is provided).
|
|
17
|
+
*/
|
|
18
|
+
subdir?: string;
|
|
19
|
+
/** Required when using `subdir`; otherwise inferred from frontmatter. */
|
|
20
|
+
name?: string;
|
|
21
|
+
/** If true, overwrite an existing skill with the same name. */
|
|
22
|
+
force?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type InstallSource = InstallFromUrl;
|
|
25
|
+
export interface InstallOptions {
|
|
26
|
+
/** Skills root directory. Defaults to `~/.corebrain/skills/`. */
|
|
27
|
+
dir?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Install a skill from a git URL. Always stages in a temp dir and uses
|
|
31
|
+
* `fs.rename` for the final move so partial installs never appear on disk.
|
|
32
|
+
*/
|
|
33
|
+
export declare function installSkill(input: InstallSource, opts?: InstallOptions): Promise<GatewaySkill>;
|
|
34
|
+
export declare function removeSkill(name: string, opts?: InstallOptions): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/server/skills/install.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAQhE;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC9B,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAsB,YAAY,CACjC,KAAK,EAAE,aAAa,EACpB,IAAI,GAAE,cAAmB,GACvB,OAAO,CAAC,YAAY,CAAC,CAIvB;AAyFD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CASxF"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, renameSync, existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir, readFile } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join, isAbsolute } from 'node:path';
|
|
5
|
+
import { execFile } from 'node:child_process';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
import matter from 'gray-matter';
|
|
8
|
+
import { DEFAULT_SKILLS_DIR } from './skill-store.js';
|
|
9
|
+
import { gatewayLog } from '../../server/gateway-log.js';
|
|
10
|
+
const execFileP = promisify(execFile);
|
|
11
|
+
const NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
|
|
12
|
+
/**
|
|
13
|
+
* Install a skill from a git URL. Always stages in a temp dir and uses
|
|
14
|
+
* `fs.rename` for the final move so partial installs never appear on disk.
|
|
15
|
+
*/
|
|
16
|
+
export async function installSkill(input, opts = {}) {
|
|
17
|
+
const skillsDir = opts.dir ?? DEFAULT_SKILLS_DIR;
|
|
18
|
+
await mkdir(skillsDir, { recursive: true });
|
|
19
|
+
return installFromUrl(input, skillsDir);
|
|
20
|
+
}
|
|
21
|
+
async function installFromUrl(input, skillsDir) {
|
|
22
|
+
if (!/^https:\/\//.test(input.url) && !/^git@[\w.-]+:/.test(input.url)) {
|
|
23
|
+
throw new Error(`install: URL must start with "https://" or "git@host:" — got "${input.url}"`);
|
|
24
|
+
}
|
|
25
|
+
if (input.subdir) {
|
|
26
|
+
assertSafeSubdir(input.subdir);
|
|
27
|
+
if (!input.name) {
|
|
28
|
+
throw new Error('install: `name` is required when `subdir` is set');
|
|
29
|
+
}
|
|
30
|
+
assertValidName(input.name);
|
|
31
|
+
}
|
|
32
|
+
const cloneDir = mkdtempSync(join(tmpdir(), 'corebrain-skill-clone-'));
|
|
33
|
+
try {
|
|
34
|
+
await gitClone(input.url, cloneDir, input.subdir);
|
|
35
|
+
let sourceDir;
|
|
36
|
+
let name;
|
|
37
|
+
if (input.subdir) {
|
|
38
|
+
sourceDir = join(cloneDir, input.subdir);
|
|
39
|
+
if (!existsSync(join(sourceDir, 'SKILL.md'))) {
|
|
40
|
+
throw new Error(`install: subdir "${input.subdir}" has no SKILL.md (looked at ${sourceDir})`);
|
|
41
|
+
}
|
|
42
|
+
name = input.name;
|
|
43
|
+
// Validate frontmatter name matches the requested install name so a
|
|
44
|
+
// renamed skill folder can't masquerade as something else.
|
|
45
|
+
const fm = matter(await readFile(join(sourceDir, 'SKILL.md'), 'utf8')).data;
|
|
46
|
+
const fmName = typeof fm.name === 'string' ? fm.name : null;
|
|
47
|
+
if (fmName && fmName !== name) {
|
|
48
|
+
throw new Error(`install: SKILL.md frontmatter name "${fmName}" does not match install name "${name}"`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (input.name) {
|
|
52
|
+
assertValidName(input.name);
|
|
53
|
+
sourceDir = join(cloneDir, input.name);
|
|
54
|
+
if (!existsSync(join(sourceDir, 'SKILL.md'))) {
|
|
55
|
+
throw new Error(`install: "${input.name}" not found in repo root (looked at ${sourceDir})`);
|
|
56
|
+
}
|
|
57
|
+
name = input.name;
|
|
58
|
+
}
|
|
59
|
+
else if (existsSync(join(cloneDir, 'SKILL.md'))) {
|
|
60
|
+
sourceDir = cloneDir;
|
|
61
|
+
const fm = matter(await readFile(join(sourceDir, 'SKILL.md'), 'utf8')).data;
|
|
62
|
+
if (typeof fm.name !== 'string') {
|
|
63
|
+
throw new Error('install: repo root has SKILL.md but frontmatter is missing `name`');
|
|
64
|
+
}
|
|
65
|
+
name = fm.name;
|
|
66
|
+
assertValidName(name);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new Error('install: no SKILL.md found at repo root — pass `name` or `subdir` to locate the skill');
|
|
70
|
+
}
|
|
71
|
+
const skillMd = await readFile(join(sourceDir, 'SKILL.md'), 'utf8');
|
|
72
|
+
const meta = parseSkillMd(skillMd, name);
|
|
73
|
+
const target = join(skillsDir, name);
|
|
74
|
+
await ensureNoCollision(target, name, Boolean(input.force), skillsDir);
|
|
75
|
+
renameSync(sourceDir, target);
|
|
76
|
+
gatewayLog(`skill installed (url): ${name} from ${input.url}${input.subdir ? `#${input.subdir}` : ''}`);
|
|
77
|
+
return {
|
|
78
|
+
name,
|
|
79
|
+
description: meta.description,
|
|
80
|
+
...(meta.allowedTools ? { allowedTools: meta.allowedTools } : {}),
|
|
81
|
+
path: target,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
rmSync(cloneDir, { recursive: true, force: true });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export async function removeSkill(name, opts = {}) {
|
|
89
|
+
assertValidName(name);
|
|
90
|
+
const skillsDir = opts.dir ?? DEFAULT_SKILLS_DIR;
|
|
91
|
+
const target = join(skillsDir, name);
|
|
92
|
+
if (!existsSync(target)) {
|
|
93
|
+
throw new Error(`Skill '${name}' not found`);
|
|
94
|
+
}
|
|
95
|
+
rmSync(target, { recursive: true, force: true });
|
|
96
|
+
gatewayLog(`skill removed: ${name}`);
|
|
97
|
+
}
|
|
98
|
+
// --- helpers ----------------------------------------------------------------
|
|
99
|
+
function assertValidName(name) {
|
|
100
|
+
if (!NAME_RE.test(name)) {
|
|
101
|
+
throw new Error(`invalid skill name "${name}" — must match ${NAME_RE} (lowercase, kebab-case)`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Reject subdir inputs that try to escape the clone with `..` or absolute
|
|
106
|
+
* paths. Empty segments are also rejected so a stray `//` doesn't slip past.
|
|
107
|
+
*/
|
|
108
|
+
function assertSafeSubdir(subdir) {
|
|
109
|
+
if (isAbsolute(subdir) || subdir.startsWith('/')) {
|
|
110
|
+
throw new Error(`subdir must be relative: "${subdir}"`);
|
|
111
|
+
}
|
|
112
|
+
const segments = subdir.split('/');
|
|
113
|
+
for (const seg of segments) {
|
|
114
|
+
if (seg === '' || seg === '.' || seg === '..') {
|
|
115
|
+
throw new Error(`subdir contains invalid segment "${seg}": "${subdir}"`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function parseSkillMd(content, expectedName) {
|
|
120
|
+
const parsed = matter(content);
|
|
121
|
+
const fm = parsed.data;
|
|
122
|
+
const fmName = typeof fm.name === 'string' ? fm.name : null;
|
|
123
|
+
const fmDesc = typeof fm.description === 'string' ? fm.description : null;
|
|
124
|
+
if (!fmName)
|
|
125
|
+
throw new Error('SKILL.md frontmatter is missing `name`');
|
|
126
|
+
if (!fmDesc)
|
|
127
|
+
throw new Error('SKILL.md frontmatter is missing `description`');
|
|
128
|
+
if (fmName !== expectedName) {
|
|
129
|
+
throw new Error(`SKILL.md frontmatter name "${fmName}" does not match install name "${expectedName}"`);
|
|
130
|
+
}
|
|
131
|
+
const at = fm['allowed-tools'];
|
|
132
|
+
const allowedTools = Array.isArray(at) && at.every(s => typeof s === 'string') ? at : undefined;
|
|
133
|
+
return allowedTools ? { description: fmDesc, allowedTools } : { description: fmDesc };
|
|
134
|
+
}
|
|
135
|
+
async function ensureNoCollision(target, name, force, baseDir) {
|
|
136
|
+
if (!existsSync(target))
|
|
137
|
+
return;
|
|
138
|
+
if (!force) {
|
|
139
|
+
throw new Error(`Skill '${name}' already installed. Use force=true to overwrite, or remove it first.`);
|
|
140
|
+
}
|
|
141
|
+
await removeSkill(name, { dir: baseDir });
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Clone the repo into `cloneDir`. If `subdir` is set, do a sparse,
|
|
145
|
+
* blob-filtered clone and only check out that subtree — this is what lets
|
|
146
|
+
* the gateway install a skill out of a large monorepo without pulling
|
|
147
|
+
* gigabytes of unrelated code.
|
|
148
|
+
*
|
|
149
|
+
* Sparse-checkout falls back to a regular shallow clone if any of the
|
|
150
|
+
* sparse steps fail (older `git` versions, sparse not supported). The
|
|
151
|
+
* sourceDir resolution downstream still works in that case — it just
|
|
152
|
+
* means we pulled more than we needed.
|
|
153
|
+
*/
|
|
154
|
+
async function gitClone(url, cloneDir, subdir) {
|
|
155
|
+
const timeoutMs = 5 * 60_000;
|
|
156
|
+
const exec = (args) => execFileP('git', args, { timeout: timeoutMs });
|
|
157
|
+
if (!subdir) {
|
|
158
|
+
await exec(['clone', '--depth=1', url, cloneDir]);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
await exec(['clone', '--depth=1', '--filter=blob:none', '--sparse', url, cloneDir]);
|
|
163
|
+
await execFileP('git', ['-C', cloneDir, 'sparse-checkout', 'set', subdir], {
|
|
164
|
+
timeout: timeoutMs,
|
|
165
|
+
});
|
|
166
|
+
// Make sure the subdir actually exists post-checkout. Sparse-checkout is
|
|
167
|
+
// quiet if the pattern matches nothing, so guard explicitly.
|
|
168
|
+
if (!existsSync(join(cloneDir, subdir))) {
|
|
169
|
+
throw new Error(`sparse-checkout produced no files for "${subdir}"`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
// Best-effort fallback to a full shallow clone so callers don't get
|
|
174
|
+
// blocked by old gits or unusual repos. The sourceDir lookup downstream
|
|
175
|
+
// still works — we'll just have a bigger temp tree to delete.
|
|
176
|
+
gatewayLog(`sparse-checkout failed for ${url}#${subdir}, falling back to full clone: ${err instanceof Error ? err.message : String(err)}`);
|
|
177
|
+
rmSync(cloneDir, { recursive: true, force: true });
|
|
178
|
+
await mkdir(cloneDir, { recursive: true });
|
|
179
|
+
await exec(['clone', '--depth=1', url, cloneDir]);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/server/skills/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GatewaySkill } from '@redplanethq/gateway-protocol';
|
|
2
|
+
export declare const DEFAULT_SKILLS_DIR: string;
|
|
3
|
+
/**
|
|
4
|
+
* Walk `<dir>/<name>/SKILL.md`, parse YAML frontmatter, return validated
|
|
5
|
+
* skills. Skips entries that:
|
|
6
|
+
* - aren't directories or have no SKILL.md
|
|
7
|
+
* - have no `name` or `description` in frontmatter
|
|
8
|
+
* - have a `name` that doesn't match the containing directory
|
|
9
|
+
* Each rejection is logged via `gatewayLog` so bad fixtures surface.
|
|
10
|
+
*/
|
|
11
|
+
export declare function listSkills(dir?: string): Promise<GatewaySkill[]>;
|
|
12
|
+
//# sourceMappingURL=skill-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-store.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAGhE,eAAO,MAAM,kBAAkB,QAA6C,CAAC;AAE7E;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAA2B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8D1F"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import matter from 'gray-matter';
|
|
6
|
+
import { gatewayLog } from '../../server/gateway-log.js';
|
|
7
|
+
export const DEFAULT_SKILLS_DIR = resolve(homedir(), '.corebrain', 'skills');
|
|
8
|
+
/**
|
|
9
|
+
* Walk `<dir>/<name>/SKILL.md`, parse YAML frontmatter, return validated
|
|
10
|
+
* skills. Skips entries that:
|
|
11
|
+
* - aren't directories or have no SKILL.md
|
|
12
|
+
* - have no `name` or `description` in frontmatter
|
|
13
|
+
* - have a `name` that doesn't match the containing directory
|
|
14
|
+
* Each rejection is logged via `gatewayLog` so bad fixtures surface.
|
|
15
|
+
*/
|
|
16
|
+
export async function listSkills(dir = DEFAULT_SKILLS_DIR) {
|
|
17
|
+
if (!existsSync(dir))
|
|
18
|
+
return [];
|
|
19
|
+
let entries;
|
|
20
|
+
try {
|
|
21
|
+
entries = await readdir(dir);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const skills = [];
|
|
27
|
+
for (const name of entries) {
|
|
28
|
+
const skillDir = join(dir, name);
|
|
29
|
+
let isDir = false;
|
|
30
|
+
try {
|
|
31
|
+
isDir = (await stat(skillDir)).isDirectory();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (!isDir)
|
|
37
|
+
continue;
|
|
38
|
+
const skillMd = join(skillDir, 'SKILL.md');
|
|
39
|
+
try {
|
|
40
|
+
await stat(skillMd);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
let parsed;
|
|
46
|
+
try {
|
|
47
|
+
parsed = matter(await readFile(skillMd, 'utf8'));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
gatewayLog(`skill ${name}: failed to parse SKILL.md (${err})`);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const fm = parsed.data;
|
|
54
|
+
const fmName = typeof fm.name === 'string' ? fm.name : null;
|
|
55
|
+
const fmDesc = typeof fm.description === 'string' ? fm.description : null;
|
|
56
|
+
if (!fmName || !fmDesc) {
|
|
57
|
+
gatewayLog(`skill ${name}: missing required frontmatter (name/description)`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (fmName !== name) {
|
|
61
|
+
gatewayLog(`skill ${name}: frontmatter name "${fmName}" doesn't match directory`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const at = fm['allowed-tools'];
|
|
65
|
+
const allowedTools = Array.isArray(at) && at.every(s => typeof s === 'string') ? at : undefined;
|
|
66
|
+
skills.push({
|
|
67
|
+
name: fmName,
|
|
68
|
+
description: fmDesc,
|
|
69
|
+
...(allowedTools ? { allowedTools } : {}),
|
|
70
|
+
path: skillDir,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
74
|
+
return skills;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=skill-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-store.js","sourceRoot":"","sources":["../../../src/server/skills/skill-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface GatewayTool {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
inputSchema?: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
interface ToolResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
result?: unknown;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const skillsTools: GatewayTool[];
|
|
12
|
+
export declare function executeSkillsTool(toolName: string, params: Record<string, unknown>): Promise<ToolResult>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=skills-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/skills-tools.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,UAAU,UAAU;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAoDD,eAAO,MAAM,WAAW,EAAE,WAAW,EAapC,CAAC;AA0BF,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,CAgBrB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
import { installSkill, removeSkill } from '../../server/skills/install.js';
|
|
3
|
+
const InstallSchema = zod.object({
|
|
4
|
+
url: zod.string().min(1),
|
|
5
|
+
name: zod.string().min(1),
|
|
6
|
+
subdir: zod.string().optional(),
|
|
7
|
+
force: zod.boolean().optional(),
|
|
8
|
+
});
|
|
9
|
+
const RemoveSchema = zod.object({
|
|
10
|
+
name: zod.string().min(1),
|
|
11
|
+
});
|
|
12
|
+
const jsonSchemas = {
|
|
13
|
+
skill_install: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
url: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Git URL of the source repository. Must start with "https://" or "git@host:". For library skills this points at the CORE monorepo.',
|
|
19
|
+
},
|
|
20
|
+
name: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Kebab-case skill slug. Becomes both the SKILL.md frontmatter `name` and the directory under ~/.corebrain/skills/.',
|
|
23
|
+
},
|
|
24
|
+
subdir: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Optional path inside the cloned repo to the skill folder (e.g. "docs/skills/my-skill"). Triggers sparse-checkout so only this subtree is fetched. Omit for repos whose root is the skill.',
|
|
27
|
+
},
|
|
28
|
+
force: {
|
|
29
|
+
type: 'boolean',
|
|
30
|
+
description: 'If true, overwrite an existing skill with the same name. Without this an existing install fails.',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
required: ['url', 'name'],
|
|
34
|
+
},
|
|
35
|
+
skill_remove: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
name: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
description: 'Skill name to remove. Deletes ~/.corebrain/skills/<name>/ recursively.',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
required: ['name'],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
export const skillsTools = [
|
|
47
|
+
{
|
|
48
|
+
name: 'skill_install',
|
|
49
|
+
description: 'Install a skill from a git URL into ~/.corebrain/skills/<name>/. Uses sparse-checkout when `subdir` is set, so library skills nested inside a monorepo can be pulled cheaply. Atomic: stages in a temp dir, then renames into place.',
|
|
50
|
+
inputSchema: jsonSchemas.skill_install,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'skill_remove',
|
|
54
|
+
description: 'Remove an installed skill. Deletes ~/.corebrain/skills/<name>/ recursively. Fails if the skill does not exist.',
|
|
55
|
+
inputSchema: jsonSchemas.skill_remove,
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
async function handleInstall(params) {
|
|
59
|
+
try {
|
|
60
|
+
const skill = await installSkill({
|
|
61
|
+
source: 'url',
|
|
62
|
+
url: params.url,
|
|
63
|
+
name: params.name,
|
|
64
|
+
...(params.subdir ? { subdir: params.subdir } : {}),
|
|
65
|
+
...(params.force ? { force: true } : {}),
|
|
66
|
+
});
|
|
67
|
+
return { success: true, result: skill };
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function handleRemove(params) {
|
|
74
|
+
try {
|
|
75
|
+
await removeSkill(params.name);
|
|
76
|
+
return { success: true, result: { name: params.name, removed: true } };
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function executeSkillsTool(toolName, params) {
|
|
83
|
+
try {
|
|
84
|
+
switch (toolName) {
|
|
85
|
+
case 'skill_install':
|
|
86
|
+
return await handleInstall(InstallSchema.parse(params));
|
|
87
|
+
case 'skill_remove':
|
|
88
|
+
return await handleRemove(RemoveSchema.parse(params));
|
|
89
|
+
default:
|
|
90
|
+
return { success: false, error: `Unknown tool: ${toolName}` };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err instanceof zod.ZodError) {
|
|
95
|
+
return { success: false, error: `Invalid parameters: ${err.message}` };
|
|
96
|
+
}
|
|
97
|
+
return { success: false, error: err instanceof Error ? err.message : 'Unknown error' };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=skills-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-tools.js","sourceRoot":"","sources":["../../../src/server/tools/skills-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/tui/chat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/tui/chat.ts"],"names":[],"mappings":"AAqCA,wBAAgB,WAAW,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb,IAAI,CAu2CN"}
|