@chibitek/chibi 0.1.170 → 0.1.171
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/{abnfDiagram-O67JEVCF-Dwjw0xC0.js → abnfDiagram-O67JEVCF-DrPBKmVh.js} +1 -1
- package/dist/assets/{arc-B__BIHzb.js → arc-BEIChVSB.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-DQy7n3Ga.js → architectureDiagram-NJMV4G6O-Da60nTzs.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-moFo2nSA.js → blockDiagram-BEXU5L5S-_NelwIQj.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-C-dF8UVl.js → c4Diagram-YGBWAQC7-DUdkQ3dy.js} +1 -1
- package/dist/assets/channel-DEJSSlVQ.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-DnF0mxAV.js → chunk-2Q5K7J3B-BQgYAptM.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-Dp8Dsifv.js → chunk-3FUC2YCW-XXOXwcoW.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-D8fmZ4d8.js → chunk-5VM5RSS4-CUyMXCSt.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-DNH2HZNQ.js → chunk-GTNCS2PH-BwctbINm.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-BvL6j7pQ.js → chunk-GWA4HPMP-DQ0bZK59.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-Co0gUA5M.js → chunk-JWPE2WC7-BADCk9AK.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-Deu9tpCF.js → chunk-NETBCI7D-CoJxabSR.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-DKy8jAU5.js → chunk-WEXAMYUT-fupByVJn.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-DQhvP8zg.js → chunk-XXDRQBXY-BavbGHGi.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-mhv3hMMV.js → classDiagram-v2-NBCMYWYE-B5wfUNKJ.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-CR1nOQOe.js → cose-bilkent-JH36ORCC-DlYFmKDe.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-Ddgkhxgt.js → cynefin-OW5HDTMX-Y0U-21MH.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-4KbkrNhB.js → cynefinDiagram-VND7K2PF-D1Fh1sU0.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-DNxtjbvT.js → dagre-6A5THRUB-BNU-Trog.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-BRpvnOWX.js → diagram-22UHCM2B-Bjie4nDQ.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-DsQVnKUb.js → diagram-3UASUU5V-Qnbrq1T5.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-BRZ5455_.js → diagram-ATOU4E4O-CNJasPCN.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-CidrDKp0.js → diagram-CDSNMT55-BAzGZBKX.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-1hkZ8SsK.js → diagram-MLGK6HIB-I8ACRaw-.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-D1dWGFqn.js → diagram-MPIPVDR6-nLlrAEPz.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-DGjfEPY5.js → ebnfDiagram-ZINNZB2B-DF9BG3pH.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-C5nvtTy7.js → elk-276RUBZZ-C1AJYKMV.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-CC0QBE1A.js → erDiagram-OPXOYQCR-MNNcRrPy.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-BthbP_HO.js → flowDiagram-KWPJA3E3-C7mfBfgt.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-BQ2wLSEI.js → ganttDiagram-FUAMR5RP-a9zNyDbb.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-lTR8tNlq.js → gitGraphDiagram-X574FWY7-OL8NhUsO.js} +1 -1
- package/dist/assets/{index-VagspC1z.js → index-DojGBgbN.js} +76 -73
- package/dist/assets/{index-AWsWxgoq.js → index-xypOVpVT.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-BgI9ZuT_.js → infoDiagram-VRGFBTTK-CF-3pzUZ.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-qPe6Rhk2.js → ishikawaDiagram-OU5B5YK6-B2HqD-sv.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-CpbadZuP.js → journeyDiagram-ZHPQQLJL-84gzOTb9.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-D9kCb3-t.js → kanban-definition-PNTS6WVX-D7Ee23QC.js} +1 -1
- package/dist/assets/{linear-CdW4LT3g.js → linear-CdAXsmfc.js} +1 -1
- package/dist/assets/{mermaid.core-BbPWTT56.js → mermaid.core-CE_M1v1e.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-BtOaXxvb.js → mindmap-definition-NLK3R4M7-KSTIET9y.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-BtcTITAK.js → pegDiagram-GJSIUBJH-C7ogvddb.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-Ch_--zjt.js → pieDiagram-5QR66LMP-Bp1CgCrM.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-Di8ygRal.js → quadrantDiagram-O4NWA36T-Bw7aN9Lh.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-DxgesAmb.js → railroadDiagram-XR7U4H2S-Dij4U4NY.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-DjH-jdCr.js → requirementDiagram-PLB6GJNP-DOxTQvCl.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-ClNLceSc.js → sankeyDiagram-IPEJSGJF-DPCUmNbV.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-Cip_EmtV.js → sequenceDiagram-PO4LG4MO-DPjC8zGe.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-BzW2hkq8.js → sizeCapture-INFHLROL-WlmsNlh-.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-CwHu7P19.js → stateDiagram-v2-GCMORJYK-BwMPiapI.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-DO9E9HUK.js → swimlanes-2SLR337P-Cyja7ZPb.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-Dh25zxzq.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-D2_E-i9h.js → timeline-definition-EJHVYXUP-BehkSauz.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-oKBQ1FAG.js → usecaseDiagram-POWQR4AR-koUjcmpW.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-HEdQsC7L.js → vennDiagram-UO4OBE2U-Ch8TXIpy.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-mNpRO8rd.js → wardleyDiagram-VNRHLVJA-Dm5kC4c2.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-uURjTK1X.js → xychartDiagram-PMCCYNJV-YA-1zyQz.js} +1 -1
- package/dist/handbook/atomic-handbook.html +1 -1
- package/dist/index.html +1 -1
- package/dist-server/companion/src/routes.js +28 -1
- package/dist-server/index.js +37500 -37213
- package/dist-server/openmausbot.js +5 -5
- package/dist-server/pair-cli.js +5 -5
- package/dist-server/server/index.js +19 -118
- package/dist-server/server/message-file.js +28 -11
- package/dist-server/server/remote-desktop.js +142 -0
- package/dist-server/server/routes/message-file.js +115 -0
- package/dist-server/server/shared-deliverables.js +109 -0
- package/dist-server/server/skill-learn.js +4 -0
- package/dist-server/server/subscription-bots.js +3 -2
- package/dist-server/shared/provider-accounts.js +5 -5
- package/dist-server/shared/skill-command.js +16 -0
- package/package.json +1 -1
- package/dist/assets/channel-BQM13l0i.js +0 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-UC0GNJzN.js +0 -8
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Shared file-link settings. This widens message downloads only, never bot tools.
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { realpath, stat } from "node:fs/promises";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { writeFileAtomic } from "./atomic.js";
|
|
8
|
+
import { isRestricted } from "./bot-visibility.js";
|
|
9
|
+
import { PASS } from "./routes/table.js";
|
|
10
|
+
const rootsSchema = z.array(z.string().trim().min(1).max(4096).refine(path => !/[\0\r\n]/.test(path))).max(32);
|
|
11
|
+
const inside = (root, path) => {
|
|
12
|
+
const suffix = relative(root, path);
|
|
13
|
+
return suffix === "" || (suffix !== ".." && !suffix.startsWith(`..${sep}`) && !isAbsolute(suffix));
|
|
14
|
+
};
|
|
15
|
+
export function sharedDeliverableAccess(settings, options) {
|
|
16
|
+
const { dataDir, pawRoot, store, senderId, canSeeBot, canSeeGroup } = options;
|
|
17
|
+
const botRoots = (id, cwd) => [
|
|
18
|
+
join(dataDir, "workspaces", id), join(dataDir, "task-workspaces", id), join(dataDir, "bots", id),
|
|
19
|
+
...(cwd ? [cwd] : []), ...store.tasks(id).flatMap(task => task.cwd ? [task.cwd] : []),
|
|
20
|
+
];
|
|
21
|
+
const personal = [join(pawRoot, "me", "personal"),
|
|
22
|
+
join(settings.home, "workspace", "PAW", "me", "personal")];
|
|
23
|
+
const protectedBots = store.bots.filter(bot => bot.personal === true || isRestricted(bot.visibility) || !canSeeBot(bot.id));
|
|
24
|
+
const protectedBotIds = new Set(protectedBots.map(bot => bot.id));
|
|
25
|
+
const protectedRooms = store.groups.filter(group => isRestricted(group.audienceFloor) ||
|
|
26
|
+
!canSeeGroup(group.id) || group.memberIds.some(id => protectedBotIds.has(id)));
|
|
27
|
+
const roomRoots = protectedRooms.flatMap(group => [group.cwd, group.pinnedCwd,
|
|
28
|
+
...store.groupTasks(group.id).map(task => task.pinnedCwd),
|
|
29
|
+
].filter((path) => typeof path === "string" && path.length > 0));
|
|
30
|
+
return {
|
|
31
|
+
sharedRoots: settings.current(),
|
|
32
|
+
sharedRootBoundaries: [join(settings.home, "workspace")],
|
|
33
|
+
sharedBlockedRoots: [dataDir, ...personal, ...protectedBots.flatMap(bot => botRoots(bot.id, bot.cwd)), ...roomRoots],
|
|
34
|
+
blockedRoots: [
|
|
35
|
+
...(store.bot(senderId ?? "")?.personal === true ? [] : personal),
|
|
36
|
+
...protectedBots.filter(bot => bot.id !== senderId).flatMap(bot => botRoots(bot.id, bot.cwd)),
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** Email workspace members, assistants and service loopback are not the machine owner. */
|
|
41
|
+
export function sharedDeliverablesOwner(auth) {
|
|
42
|
+
return auth.scopes.includes("admin") && (auth.kind === "loopback" ? auth.trust !== "service"
|
|
43
|
+
: auth.kind === "session" && !auth.session.email && !auth.session.userId);
|
|
44
|
+
}
|
|
45
|
+
export class SharedDeliverables {
|
|
46
|
+
file;
|
|
47
|
+
roots;
|
|
48
|
+
home;
|
|
49
|
+
constructor(dataDir, home = homedir()) {
|
|
50
|
+
this.home = home;
|
|
51
|
+
this.file = join(dataDir, "shared-deliverables.json");
|
|
52
|
+
try {
|
|
53
|
+
this.roots = rootsSchema.parse(JSON.parse(readFileSync(this.file, "utf8")));
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
this.roots = error.code === "ENOENT"
|
|
57
|
+
? [join(home, "workspace", "Reports"), join(home, "workspace", "Atomic")] : [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
current() { return [...this.roots]; }
|
|
61
|
+
async save(input, blockedRoots) {
|
|
62
|
+
const roots = rootsSchema.parse(input);
|
|
63
|
+
const canonicalBlocked = await Promise.all(blockedRoots.map(async (path) => {
|
|
64
|
+
try {
|
|
65
|
+
return await realpath(path);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return resolve(path);
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
const workspace = await realpath(join(this.home, "workspace")).catch(() => resolve(this.home, "workspace"));
|
|
72
|
+
const next = [];
|
|
73
|
+
for (const raw of roots) {
|
|
74
|
+
const path = raw.startsWith("~/") ? join(this.home, raw.slice(2)) : raw;
|
|
75
|
+
if (!isAbsolute(path))
|
|
76
|
+
throw new Error("Use an absolute folder path.");
|
|
77
|
+
const canonical = await realpath(path);
|
|
78
|
+
if (!(await stat(canonical)).isDirectory())
|
|
79
|
+
throw new Error("Choose a folder.");
|
|
80
|
+
if (inside(canonical, workspace) || canonicalBlocked.some(root => inside(root, canonical))) {
|
|
81
|
+
throw new Error("Choose a deliverable folder, not the workspace or a private folder.");
|
|
82
|
+
}
|
|
83
|
+
next.push(canonical);
|
|
84
|
+
}
|
|
85
|
+
const unique = [...new Set(next)];
|
|
86
|
+
writeFileAtomic(this.file, JSON.stringify(unique, null, 2) + "\n", { mode: 0o600 });
|
|
87
|
+
this.roots = unique;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function createSharedDeliverablesRoutes(settings, blockedRoots) {
|
|
91
|
+
return async ({ path, method, auth, req, res, json, readBody }) => {
|
|
92
|
+
if (path !== "/api/shared-deliverables")
|
|
93
|
+
return PASS;
|
|
94
|
+
if (!sharedDeliverablesOwner(auth))
|
|
95
|
+
return json(res, 403, { error: "Only the computer owner can manage shared deliverable folders." });
|
|
96
|
+
if (method === "GET")
|
|
97
|
+
return json(res, 200, { roots: settings.current() });
|
|
98
|
+
if (method !== "PUT")
|
|
99
|
+
return json(res, 405, { error: "Use GET or PUT." });
|
|
100
|
+
try {
|
|
101
|
+
const body = await readBody(req);
|
|
102
|
+
await settings.save(body.roots, blockedRoots());
|
|
103
|
+
return json(res, 200, { roots: settings.current() });
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return json(res, 400, { error: "Choose existing deliverable folders. The whole workspace and private folders cannot be shared." });
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
// There is no separate distillation engine. This module only builds the
|
|
6
6
|
// prompt and recognises the slash command, so it works on every engine
|
|
7
7
|
// that mounts the agents tools.
|
|
8
|
+
import { expandSkillCommand } from "../shared/skill-command.js";
|
|
9
|
+
export function expandSkillTurnText(text, authoring) {
|
|
10
|
+
return expandSkillCommand(authoring ? expandLearnTurnText(text) : text);
|
|
11
|
+
}
|
|
8
12
|
import { SAVE_RUN_AS_SKILL_LINE } from "../shared/learn-request.js";
|
|
9
13
|
export const LEARN_COMMAND = "/learn";
|
|
10
14
|
export const LEARN_SOURCE_PREFIX = "learn:";
|
|
@@ -127,9 +127,10 @@ export function hostDefaultModel(provider, candidate) {
|
|
|
127
127
|
* the first in `ranked` (the graded models, best value first within each
|
|
128
128
|
* class) of that class, else the class below, and so on, else the class
|
|
129
129
|
* above; with nothing graded, the account's own default when it is the
|
|
130
|
-
* provider's, else its first. Undefined when it offers none. */
|
|
130
|
+
* provider's, else its first. Undefined when it offers none it can use. */
|
|
131
131
|
export function bestProviderModel(input) {
|
|
132
|
-
const
|
|
132
|
+
const usable = input.usable ?? (() => true);
|
|
133
|
+
const models = providerModels(input.provider, input.candidate).filter(usable);
|
|
133
134
|
if (!models.length)
|
|
134
135
|
return undefined;
|
|
135
136
|
const order = new Map((input.ranked ?? []).map((id, index) => [id.toLowerCase(), index]));
|
|
@@ -8,10 +8,10 @@ export const ACCOUNT_PROVIDERS = [
|
|
|
8
8
|
// Kimi Code reads its whole data root (login included) from KIMI_CODE_HOME.
|
|
9
9
|
{ id: "kimi", kind: "signIn", label: "Kimi Code", billing: "subscription", driver: "kimiAgent", homeEnv: "KIMI_CODE_HOME", loginArgs: ["login"], signupUrl: "https://www.kimi.com/code" },
|
|
10
10
|
// Droid resolves <FACTORY_HOME_OVERRIDE>/.factory, so the folder is a home, not the data root.
|
|
11
|
-
{ id: "droid", kind: "signIn", label: "Factory Droid", billing: "subscription", driver: "droidAgent", homeEnv: "FACTORY_HOME_OVERRIDE", loginArgs: [], signupUrl: "https://factory.
|
|
11
|
+
{ id: "droid", kind: "signIn", label: "Factory Droid", billing: "subscription", driver: "droidAgent", homeEnv: "FACTORY_HOME_OVERRIDE", loginArgs: [], signupUrl: "https://factory.com/pricing" },
|
|
12
12
|
{
|
|
13
13
|
id: "anthropic", kind: "apiKey", label: "Anthropic API", billing: "payPerUse", driver: "claudeAgent", envVar: "ANTHROPIC_API_KEY", icon: "anthropic",
|
|
14
|
-
config: {}, keyTest: { provider: "anthropic" }, keyUrl: "https://
|
|
14
|
+
config: {}, keyTest: { provider: "anthropic" }, keyUrl: "https://platform.claude.com/settings/keys",
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
id: "openai", kind: "apiKey", label: "OpenAI API", billing: "payPerUse", driver: "openai-compat", envVar: "OPENAI_API_KEY", icon: "openai",
|
|
@@ -28,14 +28,14 @@ export const ACCOUNT_PROVIDERS = [
|
|
|
28
28
|
// spending a request: there is no key test.
|
|
29
29
|
id: "perplexity", kind: "apiKey", label: "Perplexity API", billing: "payPerUse", driver: "openai-compat", envVar: "PERPLEXITY_API_KEY", icon: "perplexity",
|
|
30
30
|
config: { url: "https://api.perplexity.ai", apiKeyEnv: "PERPLEXITY_API_KEY", model: "sonar-pro", provider: "" },
|
|
31
|
-
keyUrl: "https://
|
|
31
|
+
keyUrl: "https://console.perplexity.ai/project/keys",
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
// Alibaba's flat-price Qwen Coding Plan: one plan key serves Qwen, GLM, Kimi and MiniMax models.
|
|
35
35
|
id: "qwenCodingPlan", kind: "apiKey", label: "Qwen Coding Plan", billing: "subscription", driver: "openai-compat", envVar: "QWEN_CODING_PLAN_API_KEY", icon: "qwen",
|
|
36
36
|
config: { url: "https://coding-intl.dashscope.aliyuncs.com/v1", apiKeyEnv: "QWEN_CODING_PLAN_API_KEY", model: "qwen3.7-plus", provider: "" },
|
|
37
37
|
keyTest: { provider: "openaiCompat", url: "https://coding-intl.dashscope.aliyuncs.com/v1" },
|
|
38
|
-
keyUrl: "https://modelstudio.console.alibabacloud.com/", signupUrl: "https://www.alibabacloud.com/help/en/model-studio/coding-plan",
|
|
38
|
+
keyUrl: "https://modelstudio.console.alibabacloud.com/ap-southeast-1/subscription/coding-plan", signupUrl: "https://www.alibabacloud.com/help/en/model-studio/coding-plan",
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
// MiniMax's flat-price M Plan (formerly the Coding Plan): an `sk-cp-` plan
|
|
@@ -61,7 +61,7 @@ export const ACCOUNT_PROVIDERS = [
|
|
|
61
61
|
{
|
|
62
62
|
// OpenCode Go is a flat monthly plan used through an OpenCode key.
|
|
63
63
|
id: "opencodeGo", kind: "apiKey", label: "OpenCode Go", billing: "subscription", driver: "opencodeGo", envVar: "OPENCODE_API_KEY",
|
|
64
|
-
config: {}, keyUrl: "https://opencode.ai/
|
|
64
|
+
config: {}, keyUrl: "https://opencode.ai/go", signupUrl: "https://opencode.ai/go",
|
|
65
65
|
},
|
|
66
66
|
];
|
|
67
67
|
export function accountProvider(id) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Skill commands remain ordinary user turns: they grant no extra permissions. */
|
|
2
|
+
export function expandSkillCommand(text) {
|
|
3
|
+
const match = /^\/(skills|skill)(?:\s+([\s\S]*))?$/i.exec(text.trim());
|
|
4
|
+
if (!match)
|
|
5
|
+
return text;
|
|
6
|
+
const request = match[2]?.trim() ?? "";
|
|
7
|
+
if (match[1].toLowerCase() === "skills" || !request) {
|
|
8
|
+
return "List the skills actually available to you in this conversation, with their exact names and a short description. " +
|
|
9
|
+
"Use the available skill catalog or discovery tools; do not invent skills or execute one. " +
|
|
10
|
+
(request ? `Filter the list for this request: ${request}\n` : "") +
|
|
11
|
+
"Explain that /skill <name> <task> invokes a skill and /learn saves a reusable procedure.";
|
|
12
|
+
}
|
|
13
|
+
return "Use the named available skill for the following request. Read its instructions before acting. " +
|
|
14
|
+
"If the skill is missing or the name is ambiguous, explain that and offer available matches; do not invent it. " +
|
|
15
|
+
"Existing permissions and approval requirements still apply. If no task is supplied, use the current task when clear, otherwise ask what to apply it to.\n\n" + request;
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,C as n}from"./mermaid.core-BbPWTT56.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{c as r,s as e}from"./flowDiagram-KWPJA3E3-BthbP_HO.js";import{_ as a}from"./mermaid.core-BbPWTT56.js";import"./chunk-5VM5RSS4-D8fmZ4d8.js";import"./chunk-XXDRQBXY-DQhvP8zg.js";import"./chunk-WEXAMYUT-DKy8jAU5.js";import"./chunk-GWA4HPMP-BvL6j7pQ.js";import"./channel-BQM13l0i.js";import"./index-VagspC1z.js";var o=a(t=>`${e(t)}
|
|
2
|
-
.swimlane.cluster:not([data-color-id]) rect {
|
|
3
|
-
stroke: ${t.clusterBorder} !important;
|
|
4
|
-
}
|
|
5
|
-
[data-look="neo"].cluster rect {
|
|
6
|
-
filter: none;
|
|
7
|
-
}
|
|
8
|
-
`,"getStyles"),s=o,u=r({styles:s});export{u as diagram};
|