crewly 1.20.131 → 1.20.133
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/config/constants.ts +49 -0
- package/config/index.ts +2 -0
- package/config/skills/agent/core/find-skill/SKILL.md +58 -0
- package/config/skills/agent/core/find-skill/execute.sh +67 -0
- package/config/skills/agent/core/find-skill/execute.test.sh +69 -0
- package/config/skills/agent/core/generate-pdf/SKILL.md +24 -29
- package/config/skills/agent/core/generate-pdf/execute.sh +22 -78
- package/config/skills/agent/core/generate-pdf/execute.test.sh +45 -0
- package/config/skills/agent/core/install-skill/SKILL.md +67 -0
- package/config/skills/agent/core/install-skill/execute.sh +80 -0
- package/config/skills/agent/core/install-skill/execute.test.sh +74 -0
- package/config/skills/agent/pdf-tools/SKILL.md +103 -0
- package/config/skills/agent/pdf-tools/execute.sh +301 -0
- package/config/skills/agent/pdf-tools/execute.test.sh +218 -0
- package/config/skills/agent/pdf-tools/instructions.md +14 -0
- package/config/skills/agent/pdf-tools/pdf_tools.py +268 -0
- package/config/skills/agent/pdf-tools/skill.json +103 -0
- package/config/skills/agent/pdf-tools/style.css +143 -0
- package/config/skills/agent/transcribe-audio/SKILL.md +42 -5
- package/config/skills/agent/transcribe-audio/execute.sh +44 -11
- package/config/skills/agent/transcribe-audio/execute.test.sh +90 -0
- package/config/skills/agent/transcribe-audio/install-whisper-cpp.sh +126 -0
- package/config/skills/agent/transcribe-audio/install-whisper-cpp.test.sh +69 -0
- package/config/skills/agent/transcribe-audio/skill.json +67 -6
- package/config/skills/marketplace-registry.ts +8 -1
- package/config/skills/registry.json +337 -3
- package/dist/backend/backend/src/constants.d.ts +71 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +96 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts +56 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js +114 -0
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +25 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +73 -55
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +3 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +9 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.d.ts +49 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.js +185 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.d.ts +21 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.js +29 -0
- package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.js.map +1 -0
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +5 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +14 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +33 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.client.d.ts +132 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.client.js +228 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.client.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.service.d.ts +115 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.service.js +160 -0
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +8 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +11 -3
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.d.ts +281 -0
- package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.js +559 -0
- package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.d.ts +243 -0
- package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.js +439 -0
- package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.d.ts +138 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.js +281 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.js.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.d.ts +338 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.js +761 -0
- package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +6 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/types/marketplace.types.d.ts +16 -1
- package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/inbound-file-hint.utils.d.ts +55 -0
- package/dist/backend/backend/src/utils/inbound-file-hint.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/inbound-file-hint.utils.js +78 -0
- package/dist/backend/backend/src/utils/inbound-file-hint.utils.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +48 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +48 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +2 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +71 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +96 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +14 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +33 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-device-pairing.client.d.ts +132 -0
- package/dist/cli/backend/src/services/cloud/cloud-device-pairing.client.d.ts.map +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-device-pairing.client.js +228 -0
- package/dist/cli/backend/src/services/cloud/cloud-device-pairing.client.js.map +1 -0
- package/dist/cli/backend/src/services/marketplace/marketplace.service.d.ts +101 -0
- package/dist/cli/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/marketplace/marketplace.service.js +392 -0
- package/dist/cli/backend/src/services/marketplace/marketplace.service.js.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.d.ts +281 -0
- package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.js +559 -0
- package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.js.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.d.ts +138 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.d.ts.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.js +281 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.js.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.d.ts +338 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.js +761 -0
- package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +6 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/types/marketplace.types.d.ts +219 -0
- package/dist/cli/backend/src/types/marketplace.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/marketplace.types.js +6 -0
- package/dist/cli/backend/src/types/marketplace.types.js.map +1 -0
- package/dist/cli/backend/src/utils/inbound-file-hint.utils.d.ts +55 -0
- package/dist/cli/backend/src/utils/inbound-file-hint.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/inbound-file-hint.utils.js +78 -0
- package/dist/cli/backend/src/utils/inbound-file-hint.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/package-root.d.ts +15 -0
- package/dist/cli/backend/src/utils/package-root.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/package-root.js +38 -0
- package/dist/cli/backend/src/utils/package-root.js.map +1 -0
- package/dist/cli/cli/src/commands/cloud.d.ts +45 -25
- package/dist/cli/cli/src/commands/cloud.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/cloud.js +153 -47
- package/dist/cli/cli/src/commands/cloud.js.map +1 -1
- package/dist/cli/cli/src/commands/install.d.ts +13 -1
- package/dist/cli/cli/src/commands/install.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/install.js +40 -3
- package/dist/cli/cli/src/commands/install.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard-checklist.js +3 -3
- package/dist/cli/cli/src/commands/onboard-checklist.js.map +1 -1
- package/dist/cli/cli/src/commands/skills.d.ts +58 -0
- package/dist/cli/cli/src/commands/skills.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/skills.js +132 -0
- package/dist/cli/cli/src/commands/skills.js.map +1 -0
- package/dist/cli/cli/src/index.js +18 -7
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/utils/archive-creator.d.ts +14 -0
- package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/archive-creator.js +24 -3
- package/dist/cli/cli/src/utils/archive-creator.js.map +1 -1
- package/dist/cli/cli/src/utils/cloud-submit.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/cloud-submit.js +14 -5
- package/dist/cli/cli/src/utils/cloud-submit.js.map +1 -1
- package/dist/cli/cli/src/utils/package-validator.d.ts +2 -0
- package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/package-validator.js +16 -0
- package/dist/cli/cli/src/utils/package-validator.js.map +1 -1
- package/dist/cli/config/constants.d.ts +48 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +48 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +2 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/{index-5b98bf77.js → index-e6c403b6.js} +265 -265
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-install-job.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/skill-setup/skill-install-job.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill setup manifest — the optional `setup` block of a skill's `skill.json`.
|
|
3
|
+
*
|
|
4
|
+
* It declares what a skill needs on the machine before it can run, so a
|
|
5
|
+
* runner can install it without a human reading the README:
|
|
6
|
+
*
|
|
7
|
+
* - `command` — a program on PATH (or at a known path), installed per OS with
|
|
8
|
+
* Homebrew, apt-get, or a script shipped next to the skill.
|
|
9
|
+
* - `file` — a large file such as a model: URL + sha256 + size + where it goes.
|
|
10
|
+
* - `python` — packages installed into a Crewly-managed venv
|
|
11
|
+
* (`$CREWLY_HOME/venv/<name>`), probed by importing modules.
|
|
12
|
+
*
|
|
13
|
+
* The format is declarative on purpose: package names, paths and URLs are
|
|
14
|
+
* validated here, so a registry entry cannot smuggle shell into a field that
|
|
15
|
+
* is only meant to hold a package name. The two places that do run shell —
|
|
16
|
+
* `check.shell` and `install.<os>.script` — are code shipped by the skill
|
|
17
|
+
* itself, which is no more trusted than its `execute.sh` and goes through the
|
|
18
|
+
* same trust rule (see skill-install-job.service).
|
|
19
|
+
*
|
|
20
|
+
* Spec: specs/skill-auto-install.md
|
|
21
|
+
*
|
|
22
|
+
* @module services/skill-setup/skill-setup-manifest
|
|
23
|
+
*/
|
|
24
|
+
/** Operating-system families a `command` step can carry install recipes for. */
|
|
25
|
+
export type OsFamily = 'darwin' | 'debian' | 'linux';
|
|
26
|
+
/** Every OS family, in manifest order. */
|
|
27
|
+
export declare const OS_FAMILIES: readonly OsFamily[];
|
|
28
|
+
/** How to install a command on one OS family. Exactly the listed methods run, in this order. */
|
|
29
|
+
export interface OsInstallRecipe {
|
|
30
|
+
/** Homebrew formulae (`brew install …`) */
|
|
31
|
+
brew?: string[];
|
|
32
|
+
/** Homebrew casks (`brew install --cask …`) */
|
|
33
|
+
brewCask?: string[];
|
|
34
|
+
/** Debian/Ubuntu packages (`apt-get install -y …`, needs root or passwordless sudo) */
|
|
35
|
+
apt?: string[];
|
|
36
|
+
/** A bash script in the skill directory (file name only), run with `bash <skillDir>/<script>` */
|
|
37
|
+
script?: string;
|
|
38
|
+
}
|
|
39
|
+
/** How to tell whether a command-type dependency is present. Any one match satisfies it. */
|
|
40
|
+
export interface CommandCheck {
|
|
41
|
+
/** Bare command names looked up on PATH (plus Homebrew and `$CREWLY_HOME/bin`) */
|
|
42
|
+
commands?: string[];
|
|
43
|
+
/** Paths that satisfy the check when they exist and are executable (`~/` and `$CREWLY_HOME/` expand) */
|
|
44
|
+
paths?: string[];
|
|
45
|
+
/** A bash snippet; exit code 0 means satisfied */
|
|
46
|
+
shell?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Fields shared by every step. */
|
|
49
|
+
interface BaseStep {
|
|
50
|
+
/** Unique id within the manifest (kebab-case), used in logs and progress */
|
|
51
|
+
id: string;
|
|
52
|
+
/** One line a person can read ("ffmpeg — decodes the audio") */
|
|
53
|
+
description?: string;
|
|
54
|
+
/** An optional step that fails does not fail the setup */
|
|
55
|
+
optional?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** A program the skill runs. */
|
|
58
|
+
export interface CommandStep extends BaseStep {
|
|
59
|
+
type: 'command';
|
|
60
|
+
check: CommandCheck;
|
|
61
|
+
install?: Partial<Record<OsFamily, OsInstallRecipe>>;
|
|
62
|
+
/** Shown when there is no automatic install for this OS */
|
|
63
|
+
manualHint?: string;
|
|
64
|
+
}
|
|
65
|
+
/** A file (typically a model) downloaded once and verified. */
|
|
66
|
+
export interface FileStep extends BaseStep {
|
|
67
|
+
type: 'file';
|
|
68
|
+
/** https URL */
|
|
69
|
+
url: string;
|
|
70
|
+
/** Lower-case hex sha256 of the file */
|
|
71
|
+
sha256: string;
|
|
72
|
+
/** Exact size in bytes */
|
|
73
|
+
sizeBytes: number;
|
|
74
|
+
/** Destination (`~/…` or `$CREWLY_HOME/…`) */
|
|
75
|
+
dest: string;
|
|
76
|
+
/** Other places where an existing copy also satisfies the step */
|
|
77
|
+
alternatives?: string[];
|
|
78
|
+
}
|
|
79
|
+
/** Python packages in a Crewly-managed virtualenv. */
|
|
80
|
+
export interface PythonStep extends BaseStep {
|
|
81
|
+
type: 'python';
|
|
82
|
+
/** venv name under `$CREWLY_HOME/venv/` (defaults to the skill id) */
|
|
83
|
+
venv?: string;
|
|
84
|
+
/** pip requirement specifiers (`pypdf>=4`) */
|
|
85
|
+
packages: string[];
|
|
86
|
+
/** Module names whose import proves the packages are there */
|
|
87
|
+
imports: string[];
|
|
88
|
+
}
|
|
89
|
+
/** One setup step. */
|
|
90
|
+
export type SkillSetupStep = CommandStep | FileStep | PythonStep;
|
|
91
|
+
/** The `setup` block of `skill.json`. */
|
|
92
|
+
export interface SkillSetupManifest {
|
|
93
|
+
/** Rough minutes a first-time setup takes (quoted to the user) */
|
|
94
|
+
estimatedMinutes?: number;
|
|
95
|
+
/** Steps, performed in order */
|
|
96
|
+
steps: SkillSetupStep[];
|
|
97
|
+
}
|
|
98
|
+
/** Outcome of {@link validateSetupManifest}. */
|
|
99
|
+
export interface SetupManifestValidation {
|
|
100
|
+
valid: boolean;
|
|
101
|
+
errors: string[];
|
|
102
|
+
/** The manifest, typed, when valid */
|
|
103
|
+
manifest?: SkillSetupManifest;
|
|
104
|
+
}
|
|
105
|
+
/** Prefixes a file destination may start with. */
|
|
106
|
+
export declare const DEST_PREFIXES: readonly ["~/", "$CREWLY_HOME/"];
|
|
107
|
+
/**
|
|
108
|
+
* Validate a `setup` block.
|
|
109
|
+
*
|
|
110
|
+
* @param value - The parsed `setup` value from skill.json (or a registry entry)
|
|
111
|
+
* @returns `{ valid, errors, manifest }`; `manifest` is set only when valid
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```ts
|
|
115
|
+
* const { valid, errors } = validateSetupManifest(skillJson.setup);
|
|
116
|
+
* if (!valid) throw new Error(errors.join('; '));
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export declare function validateSetupManifest(value: unknown): SetupManifestValidation;
|
|
120
|
+
/**
|
|
121
|
+
* The install recipes that apply to an OS family, most specific first.
|
|
122
|
+
*
|
|
123
|
+
* A Debian machine uses a `debian` recipe when there is one, else `linux`.
|
|
124
|
+
*
|
|
125
|
+
* @param family - Detected OS family
|
|
126
|
+
* @returns Families to look up, in order
|
|
127
|
+
*/
|
|
128
|
+
export declare function recipeLookupOrder(family: OsFamily): OsFamily[];
|
|
129
|
+
/**
|
|
130
|
+
* The recipe a command step uses on an OS family.
|
|
131
|
+
*
|
|
132
|
+
* @param step - Command step
|
|
133
|
+
* @param family - Detected OS family
|
|
134
|
+
* @returns The recipe, or undefined when the step has none for this OS
|
|
135
|
+
*/
|
|
136
|
+
export declare function recipeFor(step: CommandStep, family: OsFamily): OsInstallRecipe | undefined;
|
|
137
|
+
export {};
|
|
138
|
+
//# sourceMappingURL=skill-setup-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-setup-manifest.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/skill-setup/skill-setup-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,gFAAgF;AAChF,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,0CAA0C;AAC1C,eAAO,MAAM,WAAW,EAAE,SAAS,QAAQ,EAAkC,CAAC;AAE9E,gGAAgG;AAChG,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,wGAAwG;IACxG,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mCAAmC;AACnC,UAAU,QAAQ;IACjB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,gCAAgC;AAChC,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IACrD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,sDAAsD;AACtD,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,sBAAsB;AACtB,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IAClC,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,KAAK,EAAE,cAAc,EAAE,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAkBD,kDAAkD;AAClD,eAAO,MAAM,aAAa,kCAAmC,CAAC;AAqK9D;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAqB7E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAG,eAAe,GAAG,SAAS,CAM1F"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill setup manifest — the optional `setup` block of a skill's `skill.json`.
|
|
3
|
+
*
|
|
4
|
+
* It declares what a skill needs on the machine before it can run, so a
|
|
5
|
+
* runner can install it without a human reading the README:
|
|
6
|
+
*
|
|
7
|
+
* - `command` — a program on PATH (or at a known path), installed per OS with
|
|
8
|
+
* Homebrew, apt-get, or a script shipped next to the skill.
|
|
9
|
+
* - `file` — a large file such as a model: URL + sha256 + size + where it goes.
|
|
10
|
+
* - `python` — packages installed into a Crewly-managed venv
|
|
11
|
+
* (`$CREWLY_HOME/venv/<name>`), probed by importing modules.
|
|
12
|
+
*
|
|
13
|
+
* The format is declarative on purpose: package names, paths and URLs are
|
|
14
|
+
* validated here, so a registry entry cannot smuggle shell into a field that
|
|
15
|
+
* is only meant to hold a package name. The two places that do run shell —
|
|
16
|
+
* `check.shell` and `install.<os>.script` — are code shipped by the skill
|
|
17
|
+
* itself, which is no more trusted than its `execute.sh` and goes through the
|
|
18
|
+
* same trust rule (see skill-install-job.service).
|
|
19
|
+
*
|
|
20
|
+
* Spec: specs/skill-auto-install.md
|
|
21
|
+
*
|
|
22
|
+
* @module services/skill-setup/skill-setup-manifest
|
|
23
|
+
*/
|
|
24
|
+
/** Every OS family, in manifest order. */
|
|
25
|
+
export const OS_FAMILIES = ['darwin', 'debian', 'linux'];
|
|
26
|
+
/** Step ids and venv names. */
|
|
27
|
+
const KEBAB_ID = /^[a-z0-9][a-z0-9-]*$/;
|
|
28
|
+
/** Homebrew formula / cask names (`whisper-cpp`, `python@3.12`, `homebrew/cask/foo`). */
|
|
29
|
+
const BREW_NAME = /^[a-z0-9][a-z0-9+._@/-]*$/;
|
|
30
|
+
/** Debian package names. */
|
|
31
|
+
const APT_NAME = /^[a-z0-9][a-z0-9+.-]*$/;
|
|
32
|
+
/** A script file directly inside the skill directory. */
|
|
33
|
+
const SCRIPT_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*\.sh$/;
|
|
34
|
+
/** Bare command names. */
|
|
35
|
+
const COMMAND_NAME = /^[A-Za-z0-9][A-Za-z0-9._+-]*$/;
|
|
36
|
+
/** pip requirement: name, optional extras, optional version constraints. */
|
|
37
|
+
const PIP_SPEC = /^[A-Za-z0-9][A-Za-z0-9._-]*(\[[A-Za-z0-9,._-]+\])?((==|>=|<=|~=|!=|<|>)[A-Za-z0-9.*+!-]+(,(==|>=|<=|~=|!=|<|>)[A-Za-z0-9.*+!-]+)*)?$/;
|
|
38
|
+
/** Python module path. */
|
|
39
|
+
const PY_MODULE = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/;
|
|
40
|
+
/** Lower-case hex sha256. */
|
|
41
|
+
const SHA256_HEX = /^[a-f0-9]{64}$/;
|
|
42
|
+
/** Prefixes a file destination may start with. */
|
|
43
|
+
export const DEST_PREFIXES = ['~/', '$CREWLY_HOME/'];
|
|
44
|
+
/** Upper bound on estimatedMinutes (anything larger is a typo). */
|
|
45
|
+
const MAX_ESTIMATED_MINUTES = 240;
|
|
46
|
+
/**
|
|
47
|
+
* Whether a value is a plain object.
|
|
48
|
+
*
|
|
49
|
+
* @param v - Anything
|
|
50
|
+
* @returns True for non-null, non-array objects
|
|
51
|
+
*/
|
|
52
|
+
function isObject(v) {
|
|
53
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Validate a list of strings against a pattern.
|
|
57
|
+
*
|
|
58
|
+
* @param value - Candidate list
|
|
59
|
+
* @param pattern - Each entry must match
|
|
60
|
+
* @param where - Field path, for messages
|
|
61
|
+
* @param errors - Collected errors (mutated)
|
|
62
|
+
* @param required - Whether an empty/missing list is an error
|
|
63
|
+
*/
|
|
64
|
+
function checkStringList(value, pattern, where, errors, required = false) {
|
|
65
|
+
if (value === undefined) {
|
|
66
|
+
if (required)
|
|
67
|
+
errors.push(`${where} is required`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (!Array.isArray(value) || (required && value.length === 0)) {
|
|
71
|
+
errors.push(`${where} must be a ${required ? 'non-empty ' : ''}array of strings`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
for (const entry of value) {
|
|
75
|
+
if (typeof entry !== 'string' || !pattern.test(entry)) {
|
|
76
|
+
errors.push(`${where}: invalid entry ${JSON.stringify(entry)}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Validate a destination-style path (`~/…` or `$CREWLY_HOME/…`, no `..`).
|
|
82
|
+
*
|
|
83
|
+
* @param value - Candidate path
|
|
84
|
+
* @param where - Field path
|
|
85
|
+
* @param errors - Collected errors (mutated)
|
|
86
|
+
*/
|
|
87
|
+
function checkHomePath(value, where, errors) {
|
|
88
|
+
if (typeof value !== 'string' || !DEST_PREFIXES.some((p) => value.startsWith(p)) || value.split('/').includes('..')) {
|
|
89
|
+
errors.push(`${where} must start with ${DEST_PREFIXES.join(' or ')} and must not contain ".." (got ${JSON.stringify(value)})`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Validate a check path: absolute, `~/…` or `$CREWLY_HOME/…`, no `..`.
|
|
94
|
+
*
|
|
95
|
+
* @param value - Candidate path
|
|
96
|
+
* @param where - Field path
|
|
97
|
+
* @param errors - Collected errors (mutated)
|
|
98
|
+
*/
|
|
99
|
+
function checkProbePath(value, where, errors) {
|
|
100
|
+
const ok = typeof value === 'string' &&
|
|
101
|
+
(value.startsWith('/') || DEST_PREFIXES.some((p) => value.startsWith(p))) &&
|
|
102
|
+
!value.split('/').includes('..');
|
|
103
|
+
if (!ok)
|
|
104
|
+
errors.push(`${where} must be absolute, ~/… or $CREWLY_HOME/… without ".." (got ${JSON.stringify(value)})`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate one OS install recipe.
|
|
108
|
+
*
|
|
109
|
+
* @param recipe - Candidate recipe
|
|
110
|
+
* @param where - Field path
|
|
111
|
+
* @param errors - Collected errors (mutated)
|
|
112
|
+
*/
|
|
113
|
+
function checkRecipe(recipe, where, errors) {
|
|
114
|
+
if (!isObject(recipe)) {
|
|
115
|
+
errors.push(`${where} must be an object`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const allowed = ['brew', 'brewCask', 'apt', 'script'];
|
|
119
|
+
for (const key of Object.keys(recipe)) {
|
|
120
|
+
if (!allowed.includes(key))
|
|
121
|
+
errors.push(`${where}.${key} is not a known install method (${allowed.join(', ')})`);
|
|
122
|
+
}
|
|
123
|
+
checkStringList(recipe.brew, BREW_NAME, `${where}.brew`, errors);
|
|
124
|
+
checkStringList(recipe.brewCask, BREW_NAME, `${where}.brewCask`, errors);
|
|
125
|
+
checkStringList(recipe.apt, APT_NAME, `${where}.apt`, errors);
|
|
126
|
+
if (recipe.script !== undefined && (typeof recipe.script !== 'string' || !SCRIPT_NAME.test(recipe.script))) {
|
|
127
|
+
errors.push(`${where}.script must be a .sh file name in the skill directory (got ${JSON.stringify(recipe.script)})`);
|
|
128
|
+
}
|
|
129
|
+
if (recipe.brew === undefined && recipe.brewCask === undefined && recipe.apt === undefined && recipe.script === undefined) {
|
|
130
|
+
errors.push(`${where} lists no install method`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Validate one step.
|
|
135
|
+
*
|
|
136
|
+
* @param step - Candidate step
|
|
137
|
+
* @param index - Position, for messages
|
|
138
|
+
* @param errors - Collected errors (mutated)
|
|
139
|
+
*/
|
|
140
|
+
function checkStep(step, index, errors) {
|
|
141
|
+
const where = `setup.steps[${index}]`;
|
|
142
|
+
if (!isObject(step)) {
|
|
143
|
+
errors.push(`${where} must be an object`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (typeof step.id !== 'string' || !KEBAB_ID.test(step.id))
|
|
147
|
+
errors.push(`${where}.id must be kebab-case`);
|
|
148
|
+
if (step.description !== undefined && typeof step.description !== 'string')
|
|
149
|
+
errors.push(`${where}.description must be a string`);
|
|
150
|
+
if (step.optional !== undefined && typeof step.optional !== 'boolean')
|
|
151
|
+
errors.push(`${where}.optional must be a boolean`);
|
|
152
|
+
switch (step.type) {
|
|
153
|
+
case 'command': {
|
|
154
|
+
if (!isObject(step.check)) {
|
|
155
|
+
errors.push(`${where}.check is required`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
checkStringList(step.check.commands, COMMAND_NAME, `${where}.check.commands`, errors);
|
|
159
|
+
if (step.check.paths !== undefined) {
|
|
160
|
+
if (!Array.isArray(step.check.paths))
|
|
161
|
+
errors.push(`${where}.check.paths must be an array`);
|
|
162
|
+
else
|
|
163
|
+
step.check.paths.forEach((p, i) => checkProbePath(p, `${where}.check.paths[${i}]`, errors));
|
|
164
|
+
}
|
|
165
|
+
if (step.check.shell !== undefined && (typeof step.check.shell !== 'string' || step.check.shell.trim() === '')) {
|
|
166
|
+
errors.push(`${where}.check.shell must be a non-empty string`);
|
|
167
|
+
}
|
|
168
|
+
if (step.check.commands === undefined && step.check.paths === undefined && step.check.shell === undefined) {
|
|
169
|
+
errors.push(`${where}.check needs commands, paths or shell`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (step.install !== undefined) {
|
|
173
|
+
if (!isObject(step.install)) {
|
|
174
|
+
errors.push(`${where}.install must be an object keyed by OS (${OS_FAMILIES.join(', ')})`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
for (const [os, recipe] of Object.entries(step.install)) {
|
|
178
|
+
if (!OS_FAMILIES.includes(os))
|
|
179
|
+
errors.push(`${where}.install.${os} is not a known OS (${OS_FAMILIES.join(', ')})`);
|
|
180
|
+
else
|
|
181
|
+
checkRecipe(recipe, `${where}.install.${os}`, errors);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (step.manualHint !== undefined && typeof step.manualHint !== 'string')
|
|
186
|
+
errors.push(`${where}.manualHint must be a string`);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'file': {
|
|
190
|
+
if (typeof step.url !== 'string' || !/^https:\/\/[^\s]+$/.test(step.url))
|
|
191
|
+
errors.push(`${where}.url must be an https URL`);
|
|
192
|
+
if (typeof step.sha256 !== 'string' || !SHA256_HEX.test(step.sha256))
|
|
193
|
+
errors.push(`${where}.sha256 must be 64 lower-case hex characters`);
|
|
194
|
+
if (typeof step.sizeBytes !== 'number' || !Number.isInteger(step.sizeBytes) || step.sizeBytes <= 0) {
|
|
195
|
+
errors.push(`${where}.sizeBytes must be a positive integer`);
|
|
196
|
+
}
|
|
197
|
+
checkHomePath(step.dest, `${where}.dest`, errors);
|
|
198
|
+
if (step.alternatives !== undefined) {
|
|
199
|
+
if (!Array.isArray(step.alternatives))
|
|
200
|
+
errors.push(`${where}.alternatives must be an array`);
|
|
201
|
+
else
|
|
202
|
+
step.alternatives.forEach((p, i) => checkHomePath(p, `${where}.alternatives[${i}]`, errors));
|
|
203
|
+
}
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
case 'python': {
|
|
207
|
+
if (step.venv !== undefined && (typeof step.venv !== 'string' || !KEBAB_ID.test(step.venv)))
|
|
208
|
+
errors.push(`${where}.venv must be kebab-case`);
|
|
209
|
+
checkStringList(step.packages, PIP_SPEC, `${where}.packages`, errors, true);
|
|
210
|
+
checkStringList(step.imports, PY_MODULE, `${where}.imports`, errors, true);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
default:
|
|
214
|
+
errors.push(`${where}.type must be one of command, file, python (got ${JSON.stringify(step.type)})`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Validate a `setup` block.
|
|
219
|
+
*
|
|
220
|
+
* @param value - The parsed `setup` value from skill.json (or a registry entry)
|
|
221
|
+
* @returns `{ valid, errors, manifest }`; `manifest` is set only when valid
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```ts
|
|
225
|
+
* const { valid, errors } = validateSetupManifest(skillJson.setup);
|
|
226
|
+
* if (!valid) throw new Error(errors.join('; '));
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
export function validateSetupManifest(value) {
|
|
230
|
+
const errors = [];
|
|
231
|
+
if (!isObject(value))
|
|
232
|
+
return { valid: false, errors: ['setup must be an object'] };
|
|
233
|
+
for (const key of Object.keys(value)) {
|
|
234
|
+
if (key !== 'steps' && key !== 'estimatedMinutes')
|
|
235
|
+
errors.push(`setup.${key} is not a known field`);
|
|
236
|
+
}
|
|
237
|
+
if (value.estimatedMinutes !== undefined) {
|
|
238
|
+
const m = value.estimatedMinutes;
|
|
239
|
+
if (typeof m !== 'number' || !Number.isFinite(m) || m <= 0 || m > MAX_ESTIMATED_MINUTES) {
|
|
240
|
+
errors.push(`setup.estimatedMinutes must be a number between 0 and ${MAX_ESTIMATED_MINUTES}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (!Array.isArray(value.steps) || value.steps.length === 0) {
|
|
244
|
+
errors.push('setup.steps must be a non-empty array');
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
value.steps.forEach((step, i) => checkStep(step, i, errors));
|
|
248
|
+
const ids = value.steps.map((s) => (isObject(s) ? s.id : undefined)).filter((id) => typeof id === 'string');
|
|
249
|
+
const dupes = ids.filter((id, i) => ids.indexOf(id) !== i);
|
|
250
|
+
if (dupes.length > 0)
|
|
251
|
+
errors.push(`setup.steps ids must be unique (duplicated: ${[...new Set(dupes)].join(', ')})`);
|
|
252
|
+
}
|
|
253
|
+
return errors.length === 0 ? { valid: true, errors, manifest: value } : { valid: false, errors };
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* The install recipes that apply to an OS family, most specific first.
|
|
257
|
+
*
|
|
258
|
+
* A Debian machine uses a `debian` recipe when there is one, else `linux`.
|
|
259
|
+
*
|
|
260
|
+
* @param family - Detected OS family
|
|
261
|
+
* @returns Families to look up, in order
|
|
262
|
+
*/
|
|
263
|
+
export function recipeLookupOrder(family) {
|
|
264
|
+
return family === 'debian' ? ['debian', 'linux'] : [family];
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The recipe a command step uses on an OS family.
|
|
268
|
+
*
|
|
269
|
+
* @param step - Command step
|
|
270
|
+
* @param family - Detected OS family
|
|
271
|
+
* @returns The recipe, or undefined when the step has none for this OS
|
|
272
|
+
*/
|
|
273
|
+
export function recipeFor(step, family) {
|
|
274
|
+
for (const f of recipeLookupOrder(family)) {
|
|
275
|
+
const recipe = step.install?.[f];
|
|
276
|
+
if (recipe)
|
|
277
|
+
return recipe;
|
|
278
|
+
}
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=skill-setup-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-setup-manifest.js","sourceRoot":"","sources":["../../../../../../backend/src/services/skill-setup/skill-setup-manifest.ts"],"names":[],"mappings":"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"}
|