agenticros 0.2.3 → 0.3.0
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 +4 -0
- package/dist/__tests__/skill-scaffold.test.d.ts +2 -0
- package/dist/__tests__/skill-scaffold.test.d.ts.map +1 -0
- package/dist/__tests__/skill-scaffold.test.js +80 -0
- package/dist/__tests__/skill-scaffold.test.js.map +1 -0
- package/dist/commands/create-skill.d.ts +9 -0
- package/dist/commands/create-skill.d.ts.map +1 -0
- package/dist/commands/create-skill.js +41 -0
- package/dist/commands/create-skill.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-skill.d.ts +10 -0
- package/dist/commands/publish-skill.d.ts.map +1 -0
- package/dist/commands/publish-skill.js +222 -0
- package/dist/commands/publish-skill.js.map +1 -0
- package/dist/commands/skills-dev.d.ts +11 -0
- package/dist/commands/skills-dev.d.ts.map +1 -0
- package/dist/commands/skills-dev.js +154 -0
- package/dist/commands/skills-dev.js.map +1 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +21 -11
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/up.js +1 -1
- package/dist/commands/up.js.map +1 -1
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/dist/menu.d.ts.map +1 -1
- package/dist/menu.js +28 -2
- package/dist/menu.js.map +1 -1
- package/dist/runners/real-robot.d.ts +2 -3
- package/dist/runners/real-robot.d.ts.map +1 -1
- package/dist/runners/real-robot.js +2 -3
- package/dist/runners/real-robot.js.map +1 -1
- package/dist/util/marketplace.d.ts +26 -2
- package/dist/util/marketplace.d.ts.map +1 -1
- package/dist/util/marketplace.js +56 -4
- package/dist/util/marketplace.js.map +1 -1
- package/dist/util/skill-manifest.d.ts +58 -0
- package/dist/util/skill-manifest.d.ts.map +1 -0
- package/dist/util/skill-manifest.js +81 -0
- package/dist/util/skill-manifest.js.map +1 -0
- package/dist/util/skill-scaffold.d.ts +26 -0
- package/dist/util/skill-scaffold.d.ts.map +1 -0
- package/dist/util/skill-scaffold.js +153 -0
- package/dist/util/skill-scaffold.js.map +1 -0
- package/dist/util/workspace.d.ts +9 -0
- package/dist/util/workspace.d.ts.map +1 -1
- package/dist/util/workspace.js +36 -15
- package/dist/util/workspace.js.map +1 -1
- package/package.json +2 -1
- package/runtime/BUNDLE.json +1 -1
- package/runtime/README.md +2 -0
- package/runtime/docs/cli.md +13 -1
- package/runtime/packages/core/package.json +1 -1
- package/runtime/packages/core/src/transport/factory.ts +12 -2
- package/runtime/packages/core/src/transport/webrtc/node-datachannel-loader.ts +31 -0
- package/runtime/packages/core/src/transport/webrtc/transport.ts +12 -7
- package/runtime/pnpm-lock.yaml +48 -18
- package/runtime/scripts/start_demo.sh +80 -30
- package/templates/skills/camera/README.md +16 -0
- package/templates/skills/camera/demo.md +5 -0
- package/templates/skills/camera/package.json +38 -0
- package/templates/skills/camera/src/index.ts +68 -0
- package/templates/skills/camera/tsconfig.json +15 -0
- package/templates/skills/depth/README.md +16 -0
- package/templates/skills/depth/demo.md +5 -0
- package/templates/skills/depth/package.json +38 -0
- package/templates/skills/depth/src/index.ts +69 -0
- package/templates/skills/depth/tsconfig.json +15 -0
- package/templates/skills/hello/README.md +32 -0
- package/templates/skills/hello/demo.md +5 -0
- package/templates/skills/hello/package.json +37 -0
- package/templates/skills/hello/src/index.ts +37 -0
- package/templates/skills/hello/tsconfig.json +15 -0
- package/templates/skills/robot/README.md +18 -0
- package/templates/skills/robot/demo.md +5 -0
- package/templates/skills/robot/package.json +40 -0
- package/templates/skills/robot/src/index.ts +69 -0
- package/templates/skills/robot/tsconfig.json +15 -0
|
@@ -2,6 +2,9 @@ export declare const DEFAULT_API_BASE = "https://skills.agenticros.com/api";
|
|
|
2
2
|
export declare function apiBase(): string;
|
|
3
3
|
export interface MarketplaceSkill {
|
|
4
4
|
slug: string;
|
|
5
|
+
marketplaceRef?: string;
|
|
6
|
+
ownerLogin?: string;
|
|
7
|
+
skillSlug?: string;
|
|
5
8
|
name: string;
|
|
6
9
|
displayName: string;
|
|
7
10
|
description: string;
|
|
@@ -14,15 +17,19 @@ export interface MarketplaceSkill {
|
|
|
14
17
|
maintainerLogin: string;
|
|
15
18
|
starCount: number;
|
|
16
19
|
viewCount: number;
|
|
20
|
+
visibility?: string;
|
|
17
21
|
}
|
|
18
22
|
export interface InstallDescriptor {
|
|
19
23
|
slug: string;
|
|
24
|
+
marketplaceRef?: string;
|
|
20
25
|
skillId: string;
|
|
21
26
|
packageName: string;
|
|
22
27
|
githubUrl: string;
|
|
23
28
|
ref: string;
|
|
24
29
|
buildCmd: string;
|
|
25
30
|
}
|
|
31
|
+
export declare function skillApiPath(ref: string): string;
|
|
32
|
+
export declare function displayRef(skill: MarketplaceSkill | InstallDescriptor): string;
|
|
26
33
|
export declare class MarketplaceError extends Error {
|
|
27
34
|
}
|
|
28
35
|
export declare function searchSkills(q: string, opts?: {
|
|
@@ -30,8 +37,25 @@ export declare function searchSkills(q: string, opts?: {
|
|
|
30
37
|
category?: string;
|
|
31
38
|
sort?: "recent" | "popular";
|
|
32
39
|
}): Promise<MarketplaceSkill[]>;
|
|
33
|
-
export declare function getSkill(
|
|
34
|
-
export declare function getInstallDescriptor(
|
|
40
|
+
export declare function getSkill(ref: string): Promise<MarketplaceSkill>;
|
|
41
|
+
export declare function getInstallDescriptor(ref: string): Promise<InstallDescriptor>;
|
|
42
|
+
export interface ValidateResult {
|
|
43
|
+
ok: boolean;
|
|
44
|
+
errors: string[];
|
|
45
|
+
warnings: string[];
|
|
46
|
+
}
|
|
47
|
+
export declare function validateSkillOnMarketplace(manifest: unknown): Promise<ValidateResult>;
|
|
48
|
+
export interface SubmitResult {
|
|
49
|
+
marketplaceRef: string;
|
|
50
|
+
ownerLogin: string;
|
|
51
|
+
skillSlug: string;
|
|
52
|
+
visibility: string;
|
|
53
|
+
warnings?: string[];
|
|
54
|
+
}
|
|
55
|
+
export declare function submitSkillToMarketplace(opts: {
|
|
56
|
+
githubUrl: string;
|
|
57
|
+
githubAccessToken: string;
|
|
58
|
+
}): Promise<SubmitResult>;
|
|
35
59
|
/**
|
|
36
60
|
* Pick a sensible parent directory for `git clone` — the parent of the
|
|
37
61
|
* agenticros repo if we can find it, otherwise `~/Projects`, otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,gBAAgB,sCAAsC,CAAC;AAEpE,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"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"}
|
package/dist/util/marketplace.js
CHANGED
|
@@ -16,6 +16,18 @@ export const DEFAULT_API_BASE = "https://skills.agenticros.com/api";
|
|
|
16
16
|
export function apiBase() {
|
|
17
17
|
return (process.env.AGENTICROS_SKILLS_API || DEFAULT_API_BASE).replace(/\/+$/, "");
|
|
18
18
|
}
|
|
19
|
+
export function skillApiPath(ref) {
|
|
20
|
+
const trimmed = ref.trim();
|
|
21
|
+
if (trimmed.includes("/")) {
|
|
22
|
+
const [owner, ...rest] = trimmed.split("/");
|
|
23
|
+
const skill = rest.join("/");
|
|
24
|
+
return `${apiBase()}/skills/${encodeURIComponent(owner)}/${encodeURIComponent(skill)}`;
|
|
25
|
+
}
|
|
26
|
+
return `${apiBase()}/skills/${encodeURIComponent(trimmed)}`;
|
|
27
|
+
}
|
|
28
|
+
export function displayRef(skill) {
|
|
29
|
+
return skill.marketplaceRef ?? skill.slug;
|
|
30
|
+
}
|
|
19
31
|
async function getJson(url) {
|
|
20
32
|
const res = await fetch(url, { headers: { Accept: "application/json" } });
|
|
21
33
|
if (!res.ok) {
|
|
@@ -45,11 +57,51 @@ export async function searchSkills(q, opts = {}) {
|
|
|
45
57
|
const body = await getJson(u.toString());
|
|
46
58
|
return body.skills;
|
|
47
59
|
}
|
|
48
|
-
export async function getSkill(
|
|
49
|
-
|
|
60
|
+
export async function getSkill(ref) {
|
|
61
|
+
const skill = await getJson(skillApiPath(ref));
|
|
62
|
+
if (!skill.marketplaceRef && ref.includes("/")) {
|
|
63
|
+
skill.marketplaceRef = ref;
|
|
64
|
+
}
|
|
65
|
+
return skill;
|
|
50
66
|
}
|
|
51
|
-
export async function getInstallDescriptor(
|
|
52
|
-
|
|
67
|
+
export async function getInstallDescriptor(ref) {
|
|
68
|
+
const desc = await getJson(`${skillApiPath(ref)}/install`);
|
|
69
|
+
if (!desc.marketplaceRef && ref.includes("/")) {
|
|
70
|
+
desc.marketplaceRef = ref;
|
|
71
|
+
}
|
|
72
|
+
return desc;
|
|
73
|
+
}
|
|
74
|
+
export async function validateSkillOnMarketplace(manifest) {
|
|
75
|
+
const res = await fetch(`${apiBase()}/skills/validate`, {
|
|
76
|
+
method: "POST",
|
|
77
|
+
headers: { "Content-Type": "application/json", Accept: "application/json" },
|
|
78
|
+
body: JSON.stringify({ manifest }),
|
|
79
|
+
});
|
|
80
|
+
const body = (await res.json());
|
|
81
|
+
if (!res.ok) {
|
|
82
|
+
return {
|
|
83
|
+
ok: false,
|
|
84
|
+
errors: body.errors ?? [body.error ?? `Validation failed (${res.status})`],
|
|
85
|
+
warnings: body.warnings ?? [],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return body;
|
|
89
|
+
}
|
|
90
|
+
export async function submitSkillToMarketplace(opts) {
|
|
91
|
+
const res = await fetch(`${apiBase()}/skills/submit`, {
|
|
92
|
+
method: "POST",
|
|
93
|
+
headers: {
|
|
94
|
+
"Content-Type": "application/json",
|
|
95
|
+
Accept: "application/json",
|
|
96
|
+
Authorization: `Bearer ${opts.githubAccessToken}`,
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify({ githubUrl: opts.githubUrl }),
|
|
99
|
+
});
|
|
100
|
+
const body = (await res.json());
|
|
101
|
+
if (!res.ok) {
|
|
102
|
+
throw new MarketplaceError(body.error ?? `Submit failed (${res.status})`);
|
|
103
|
+
}
|
|
104
|
+
return body;
|
|
53
105
|
}
|
|
54
106
|
// ---------------------------------------------------------------------------
|
|
55
107
|
// Local clone + build
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAEpE,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC;
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local validation of skill package.json manifests.
|
|
3
|
+
* Keep in sync with agenticros-skills/functions/src/util/manifest.ts
|
|
4
|
+
*/
|
|
5
|
+
export interface AgenticROSBlock {
|
|
6
|
+
id: string;
|
|
7
|
+
displayName?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
tutorial?: boolean;
|
|
10
|
+
categories?: string[];
|
|
11
|
+
screenshots?: string[];
|
|
12
|
+
demoVideoUrl?: string;
|
|
13
|
+
capabilities?: Capability[];
|
|
14
|
+
}
|
|
15
|
+
export interface Capability {
|
|
16
|
+
id: string;
|
|
17
|
+
verb: string;
|
|
18
|
+
description: string;
|
|
19
|
+
inputs?: Record<string, string>;
|
|
20
|
+
outputs?: Record<string, string>;
|
|
21
|
+
interruptible?: boolean;
|
|
22
|
+
blocks_base?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface SkillManifest {
|
|
25
|
+
name: string;
|
|
26
|
+
version: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
main?: string;
|
|
29
|
+
homepage?: string;
|
|
30
|
+
bugs?: string | {
|
|
31
|
+
url?: string;
|
|
32
|
+
};
|
|
33
|
+
keywords?: string[];
|
|
34
|
+
repository?: string | {
|
|
35
|
+
url?: string;
|
|
36
|
+
};
|
|
37
|
+
dependencies?: Record<string, string>;
|
|
38
|
+
agenticros?: AgenticROSBlock;
|
|
39
|
+
agenticrosSkill?: unknown;
|
|
40
|
+
}
|
|
41
|
+
export interface ValidatedManifest {
|
|
42
|
+
manifest: SkillManifest;
|
|
43
|
+
block: AgenticROSBlock;
|
|
44
|
+
warnings: string[];
|
|
45
|
+
}
|
|
46
|
+
export declare class ManifestError extends Error {
|
|
47
|
+
constructor(message: string);
|
|
48
|
+
}
|
|
49
|
+
export declare function isValidSlug(slug: string): boolean;
|
|
50
|
+
export declare function validateManifest(raw: unknown): ValidatedManifest;
|
|
51
|
+
export declare function manifestRepoUrl(m: SkillManifest): string | null;
|
|
52
|
+
export declare function firestoreDocId(ownerLogin: string, skillSlug: string): string;
|
|
53
|
+
export declare function marketplaceRef(ownerLogin: string, skillSlug: string): string;
|
|
54
|
+
export declare function parseMarketplaceRef(ref: string): {
|
|
55
|
+
owner: string;
|
|
56
|
+
skill: string;
|
|
57
|
+
} | null;
|
|
58
|
+
//# sourceMappingURL=skill-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../src/util/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAwDhE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASzC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local validation of skill package.json manifests.
|
|
3
|
+
* Keep in sync with agenticros-skills/functions/src/util/manifest.ts
|
|
4
|
+
*/
|
|
5
|
+
export class ManifestError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "ManifestError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const SLUG_RE = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
|
|
12
|
+
export function isValidSlug(slug) {
|
|
13
|
+
return SLUG_RE.test(slug);
|
|
14
|
+
}
|
|
15
|
+
export function validateManifest(raw) {
|
|
16
|
+
if (!raw || typeof raw !== "object") {
|
|
17
|
+
throw new ManifestError("package.json is missing or empty");
|
|
18
|
+
}
|
|
19
|
+
const m = raw;
|
|
20
|
+
if (!m.name || typeof m.name !== "string") {
|
|
21
|
+
throw new ManifestError("package.json must declare a `name`");
|
|
22
|
+
}
|
|
23
|
+
if (!m.version || typeof m.version !== "string") {
|
|
24
|
+
throw new ManifestError("package.json must declare a `version`");
|
|
25
|
+
}
|
|
26
|
+
if (!m.main || typeof m.main !== "string") {
|
|
27
|
+
throw new ManifestError("package.json must declare a `main` entry (e.g. `dist/index.js`).");
|
|
28
|
+
}
|
|
29
|
+
if (!m.agenticros || typeof m.agenticros !== "object") {
|
|
30
|
+
throw new ManifestError("package.json must declare an `agenticros` block. See https://skills.agenticros.com");
|
|
31
|
+
}
|
|
32
|
+
const block = m.agenticros;
|
|
33
|
+
if (!block.id || typeof block.id !== "string" || !isValidSlug(block.id)) {
|
|
34
|
+
throw new ManifestError("`agenticros.id` is required and must be a kebab-case slug (2-64 chars, [a-z0-9-]).");
|
|
35
|
+
}
|
|
36
|
+
const warnings = [];
|
|
37
|
+
if (m.agenticrosSkill !== undefined) {
|
|
38
|
+
warnings.push("The legacy `agenticrosSkill` field is deprecated. Move metadata into the `agenticros` block.");
|
|
39
|
+
}
|
|
40
|
+
const coreDep = m.dependencies?.["@agenticros/core"];
|
|
41
|
+
if (coreDep?.startsWith("file:")) {
|
|
42
|
+
warnings.push("`@agenticros/core` is declared as a `file:` path. Publish a version from npm (e.g. `^0.5.0`) before others can install your skill.");
|
|
43
|
+
}
|
|
44
|
+
if (!block.description && !m.description) {
|
|
45
|
+
warnings.push("Add a one-sentence `description` (top-level or in `agenticros`).");
|
|
46
|
+
}
|
|
47
|
+
if (!block.capabilities || block.capabilities.length === 0) {
|
|
48
|
+
warnings.push("Declare at least one capability in `agenticros.capabilities` so the agent planner can reason about your skill.");
|
|
49
|
+
}
|
|
50
|
+
if (!block.screenshots || block.screenshots.length === 0) {
|
|
51
|
+
warnings.push("Add at least one entry to `agenticros.screenshots` so the marketplace card has a preview image.");
|
|
52
|
+
}
|
|
53
|
+
return { manifest: m, block, warnings };
|
|
54
|
+
}
|
|
55
|
+
export function manifestRepoUrl(m) {
|
|
56
|
+
if (!m.repository)
|
|
57
|
+
return null;
|
|
58
|
+
if (typeof m.repository === "string")
|
|
59
|
+
return m.repository;
|
|
60
|
+
return m.repository.url ?? null;
|
|
61
|
+
}
|
|
62
|
+
export function firestoreDocId(ownerLogin, skillSlug) {
|
|
63
|
+
return `${ownerLogin.toLowerCase()}__${skillSlug}`;
|
|
64
|
+
}
|
|
65
|
+
export function marketplaceRef(ownerLogin, skillSlug) {
|
|
66
|
+
return `${ownerLogin.toLowerCase()}/${skillSlug}`;
|
|
67
|
+
}
|
|
68
|
+
export function parseMarketplaceRef(ref) {
|
|
69
|
+
const trimmed = ref.trim();
|
|
70
|
+
const slash = trimmed.indexOf("/");
|
|
71
|
+
if (slash <= 0 || slash === trimmed.length - 1)
|
|
72
|
+
return null;
|
|
73
|
+
const owner = trimmed.slice(0, slash).toLowerCase();
|
|
74
|
+
const skill = trimmed.slice(slash + 1);
|
|
75
|
+
if (!/^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$/.test(owner))
|
|
76
|
+
return null;
|
|
77
|
+
if (!isValidSlug(skill))
|
|
78
|
+
return null;
|
|
79
|
+
return { owner, skill };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=skill-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-manifest.js","sourceRoot":"","sources":["../../src/util/skill-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill scaffolding — copy embedded templates into cwd/agenticros-skill-<slug>/.
|
|
3
|
+
*/
|
|
4
|
+
export type SkillTemplate = "hello" | "robot" | "camera" | "depth";
|
|
5
|
+
export declare function normalizeTemplate(input: string | undefined): SkillTemplate;
|
|
6
|
+
export declare function normalizeSkillSlug(input: string): string;
|
|
7
|
+
export declare function slugToToolName(slug: string): string;
|
|
8
|
+
export declare function slugToDisplayName(slug: string): string;
|
|
9
|
+
export interface ScaffoldOptions {
|
|
10
|
+
slug: string;
|
|
11
|
+
template?: string;
|
|
12
|
+
cwd?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ScaffoldResult {
|
|
15
|
+
dir: string;
|
|
16
|
+
slug: string;
|
|
17
|
+
template: SkillTemplate;
|
|
18
|
+
toolName: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function scaffoldSkill(opts: ScaffoldOptions): ScaffoldResult;
|
|
21
|
+
/** SHA-256 of normalized template source (for tutorial graduation checks). */
|
|
22
|
+
export declare function hashSkillSource(source: string): string;
|
|
23
|
+
export declare function getTemplateFingerprints(): Record<SkillTemplate, string>;
|
|
24
|
+
export declare function isUnmodifiedTemplate(source: string, template: SkillTemplate): boolean;
|
|
25
|
+
export declare function readSkillIndexSource(skillDir: string): string | null;
|
|
26
|
+
//# sourceMappingURL=skill-scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-scaffold.d.ts","sourceRoot":"","sources":["../../src/util/skill-scaffold.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AA2CnE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAS1E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcxD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AAkCD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAiCnE;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAUvE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,GACtB,OAAO,CAKT;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIpE"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill scaffolding — copy embedded templates into cwd/agenticros-skill-<slug>/.
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from "node:fs";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
import { createHash } from "node:crypto";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
const SLUG_RE = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
|
|
9
|
+
const TEMPLATE_ALIASES = {
|
|
10
|
+
hello: "hello",
|
|
11
|
+
h: "hello",
|
|
12
|
+
robot: "robot",
|
|
13
|
+
r: "robot",
|
|
14
|
+
camera: "camera",
|
|
15
|
+
c: "camera",
|
|
16
|
+
depth: "depth",
|
|
17
|
+
d: "depth",
|
|
18
|
+
};
|
|
19
|
+
const TEMPLATE_DEFAULTS = {
|
|
20
|
+
hello: {
|
|
21
|
+
displayName: "Hello World",
|
|
22
|
+
description: "My first AgenticROS skill — returns a friendly greeting.",
|
|
23
|
+
},
|
|
24
|
+
robot: {
|
|
25
|
+
displayName: "Wave Hand",
|
|
26
|
+
description: "Wave the robot base with a brief cmd_vel gesture.",
|
|
27
|
+
},
|
|
28
|
+
camera: {
|
|
29
|
+
displayName: "Describe Scene",
|
|
30
|
+
description: "Capture one frame from the robot camera.",
|
|
31
|
+
},
|
|
32
|
+
depth: {
|
|
33
|
+
displayName: "Measure Distance",
|
|
34
|
+
description: "Sample depth at the center of the depth image.",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
/** Minimal 1×1 PNG (valid placeholder for docs/icon.png). */
|
|
38
|
+
const PLACEHOLDER_PNG = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==", "base64");
|
|
39
|
+
export function normalizeTemplate(input) {
|
|
40
|
+
const key = (input ?? "hello").toLowerCase().trim();
|
|
41
|
+
const t = TEMPLATE_ALIASES[key];
|
|
42
|
+
if (!t) {
|
|
43
|
+
throw new Error(`Unknown template "${input}". Use: hello, robot, camera, or depth.`);
|
|
44
|
+
}
|
|
45
|
+
return t;
|
|
46
|
+
}
|
|
47
|
+
export function normalizeSkillSlug(input) {
|
|
48
|
+
const slug = input
|
|
49
|
+
.trim()
|
|
50
|
+
.toLowerCase()
|
|
51
|
+
.replace(/^@[^/]+\//, "")
|
|
52
|
+
.replace(/[^a-z0-9-]+/g, "-")
|
|
53
|
+
.replace(/-+/g, "-")
|
|
54
|
+
.replace(/^-|-$/g, "");
|
|
55
|
+
if (!slug || !SLUG_RE.test(slug)) {
|
|
56
|
+
throw new Error("Skill slug must be kebab-case (2–64 chars, [a-z0-9-]), e.g. hello-world or follow-me.");
|
|
57
|
+
}
|
|
58
|
+
return slug;
|
|
59
|
+
}
|
|
60
|
+
export function slugToToolName(slug) {
|
|
61
|
+
return slug.replace(/-/g, "_");
|
|
62
|
+
}
|
|
63
|
+
export function slugToDisplayName(slug) {
|
|
64
|
+
return slug
|
|
65
|
+
.split("-")
|
|
66
|
+
.filter(Boolean)
|
|
67
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
68
|
+
.join(" ");
|
|
69
|
+
}
|
|
70
|
+
function templatesRoot() {
|
|
71
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
72
|
+
return join(here, "..", "..", "templates", "skills");
|
|
73
|
+
}
|
|
74
|
+
function substituteVars(content, vars) {
|
|
75
|
+
let out = content;
|
|
76
|
+
for (const [key, value] of Object.entries(vars)) {
|
|
77
|
+
out = out.replaceAll(`{{${key}}}`, value);
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
function copyTemplateTree(srcDir, destDir, vars) {
|
|
82
|
+
for (const name of readdirSync(srcDir)) {
|
|
83
|
+
const src = join(srcDir, name);
|
|
84
|
+
const dest = join(destDir, name);
|
|
85
|
+
const st = statSync(src);
|
|
86
|
+
if (st.isDirectory()) {
|
|
87
|
+
mkdirSync(dest, { recursive: true });
|
|
88
|
+
copyTemplateTree(src, dest, vars);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const raw = readFileSync(src, "utf8");
|
|
92
|
+
writeFileSync(dest, substituteVars(raw, vars), "utf8");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function scaffoldSkill(opts) {
|
|
97
|
+
const slug = normalizeSkillSlug(opts.slug);
|
|
98
|
+
const template = normalizeTemplate(opts.template);
|
|
99
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
100
|
+
const dir = resolve(cwd, `agenticros-skill-${slug}`);
|
|
101
|
+
if (existsSync(dir)) {
|
|
102
|
+
throw new Error(`Directory already exists: ${dir}`);
|
|
103
|
+
}
|
|
104
|
+
const defaults = TEMPLATE_DEFAULTS[template];
|
|
105
|
+
const displayName = slugToDisplayName(slug);
|
|
106
|
+
const toolName = slugToToolName(slug);
|
|
107
|
+
const vars = {
|
|
108
|
+
slug,
|
|
109
|
+
displayName,
|
|
110
|
+
toolName,
|
|
111
|
+
description: defaults.description,
|
|
112
|
+
};
|
|
113
|
+
const srcTemplate = join(templatesRoot(), template);
|
|
114
|
+
if (!existsSync(srcTemplate)) {
|
|
115
|
+
throw new Error(`Template not found on disk: ${srcTemplate}`);
|
|
116
|
+
}
|
|
117
|
+
mkdirSync(dir, { recursive: true });
|
|
118
|
+
copyTemplateTree(srcTemplate, dir, vars);
|
|
119
|
+
const docsDir = join(dir, "docs");
|
|
120
|
+
mkdirSync(docsDir, { recursive: true });
|
|
121
|
+
writeFileSync(join(docsDir, "icon.png"), PLACEHOLDER_PNG);
|
|
122
|
+
return { dir, slug, template, toolName };
|
|
123
|
+
}
|
|
124
|
+
/** SHA-256 of normalized template source (for tutorial graduation checks). */
|
|
125
|
+
export function hashSkillSource(source) {
|
|
126
|
+
const normalized = source.replace(/\s+/g, " ").trim();
|
|
127
|
+
return createHash("sha256").update(normalized).digest("hex");
|
|
128
|
+
}
|
|
129
|
+
export function getTemplateFingerprints() {
|
|
130
|
+
const root = templatesRoot();
|
|
131
|
+
const out = {};
|
|
132
|
+
for (const t of ["hello", "robot", "camera", "depth"]) {
|
|
133
|
+
const indexPath = join(root, t, "src", "index.ts");
|
|
134
|
+
if (existsSync(indexPath)) {
|
|
135
|
+
out[t] = hashSkillSource(readFileSync(indexPath, "utf8"));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
export function isUnmodifiedTemplate(source, template) {
|
|
141
|
+
const fps = getTemplateFingerprints();
|
|
142
|
+
const fp = fps[template];
|
|
143
|
+
if (!fp)
|
|
144
|
+
return false;
|
|
145
|
+
return hashSkillSource(source) === fp;
|
|
146
|
+
}
|
|
147
|
+
export function readSkillIndexSource(skillDir) {
|
|
148
|
+
const path = join(skillDir, "src", "index.ts");
|
|
149
|
+
if (!existsSync(path))
|
|
150
|
+
return null;
|
|
151
|
+
return readFileSync(path, "utf8");
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=skill-scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-scaffold.js","sourceRoot":"","sources":["../../src/util/skill-scaffold.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAEpD,MAAM,gBAAgB,GAAkC;IACtD,KAAK,EAAE,OAAO;IACd,CAAC,EAAE,OAAO;IACV,KAAK,EAAE,OAAO;IACd,CAAC,EAAE,OAAO;IACV,MAAM,EAAE,QAAQ;IAChB,CAAC,EAAE,QAAQ;IACX,KAAK,EAAE,OAAO;IACd,CAAC,EAAE,OAAO;CACX,CAAC;AAEF,MAAM,iBAAiB,GAGnB;IACF,KAAK,EAAE;QACL,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,0DAA0D;KACxE;IACD,KAAK,EAAE;QACL,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,mDAAmD;KACjE;IACD,MAAM,EAAE;QACN,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,0CAA0C;KACxD;IACD,KAAK,EAAE;QACL,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,gDAAgD;KAC9D;CACF,CAAC;AAEF,6DAA6D;AAC7D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CACjC,kGAAkG,EAClG,QAAQ,CACT,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,yCAAyC,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,IAAI,GAAG,KAAK;SACf,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,IAA4B;IACnE,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAc,EACd,OAAe,EACf,IAA4B;IAE5B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrC,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACtC,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAeD,MAAM,UAAU,aAAa,CAAC,IAAqB;IACjD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,WAAW;QACX,QAAQ;QACR,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC;IAE1D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,EAAmC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAoB,EAAE,CAAC;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,QAAuB;IAEvB,MAAM,GAAG,GAAG,uBAAuB,EAAE,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/util/workspace.d.ts
CHANGED
|
@@ -26,6 +26,15 @@ export declare function isWorkspaceInstalled(repoRoot: string): boolean;
|
|
|
26
26
|
* we don't check that one.
|
|
27
27
|
*/
|
|
28
28
|
export declare function isWorkspaceBuilt(repoRoot: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Run `pnpm install` with the same flags init.ts uses.
|
|
31
|
+
*
|
|
32
|
+
* Native robotics packages (`node-datachannel`, `rclnodejs`) are optional
|
|
33
|
+
* deps of @agenticros/core. If their install scripts fail (common in
|
|
34
|
+
* NemoClaw / minimal containers), retry with `--no-optional` so zenoh and
|
|
35
|
+
* rosbridge transports still work.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runPnpmInstall(repoRoot: string): Promise<void>;
|
|
29
38
|
/**
|
|
30
39
|
* Idempotently make sure the workspace is install + build ready. Anything
|
|
31
40
|
* already in place is left untouched.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/util/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkB9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/util/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkB9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAwCD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpE;AAOD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
package/dist/util/workspace.js
CHANGED
|
@@ -47,35 +47,56 @@ export function isWorkspaceInstalled(repoRoot) {
|
|
|
47
47
|
export function isWorkspaceBuilt(repoRoot) {
|
|
48
48
|
return existsSync(join(repoRoot, "packages", "core", "dist", "index.js"));
|
|
49
49
|
}
|
|
50
|
+
const PNPM_INSTALL_BASE_ARGS = [
|
|
51
|
+
"install",
|
|
52
|
+
"--no-strict-peer-dependencies",
|
|
53
|
+
"--config.auto-install-peers=true",
|
|
54
|
+
];
|
|
55
|
+
function pnpmInstallEnv() {
|
|
56
|
+
return {
|
|
57
|
+
...process.env,
|
|
58
|
+
npm_config_strict_peer_dependencies: "false",
|
|
59
|
+
npm_config_auto_install_peers: "true",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
50
62
|
/** Write the same .npmrc init.ts writes inline (so pnpm install doesn't bail). */
|
|
51
63
|
function writeInstallNpmrc(repoRoot) {
|
|
52
64
|
writeFileSync(join(repoRoot, ".npmrc"), [
|
|
53
65
|
"# Auto-written by AgenticROS CLI - keeps pnpm install from failing on",
|
|
54
|
-
"# upstream peer-dep mismatches
|
|
66
|
+
"# upstream peer-dep mismatches and optional native robotics deps",
|
|
67
|
+
"# (node-datachannel, rclnodejs) that may not build in sandboxes.",
|
|
55
68
|
"shamefully-hoist=false",
|
|
56
69
|
"strict-peer-dependencies=false",
|
|
57
70
|
"auto-install-peers=true",
|
|
58
71
|
"",
|
|
59
72
|
].join("\n"));
|
|
60
73
|
}
|
|
74
|
+
async function execPnpmInstall(repoRoot, extraArgs = []) {
|
|
75
|
+
await execa("pnpm", [...PNPM_INSTALL_BASE_ARGS, ...extraArgs], {
|
|
76
|
+
cwd: repoRoot,
|
|
77
|
+
stdio: "inherit",
|
|
78
|
+
env: pnpmInstallEnv(),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
61
81
|
/**
|
|
62
82
|
* Run `pnpm install` with the same flags init.ts uses.
|
|
83
|
+
*
|
|
84
|
+
* Native robotics packages (`node-datachannel`, `rclnodejs`) are optional
|
|
85
|
+
* deps of @agenticros/core. If their install scripts fail (common in
|
|
86
|
+
* NemoClaw / minimal containers), retry with `--no-optional` so zenoh and
|
|
87
|
+
* rosbridge transports still work.
|
|
63
88
|
*/
|
|
64
|
-
async function runPnpmInstall(repoRoot) {
|
|
89
|
+
export async function runPnpmInstall(repoRoot) {
|
|
65
90
|
writeInstallNpmrc(repoRoot);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
npm_config_strict_peer_dependencies: "false",
|
|
76
|
-
npm_config_auto_install_peers: "true",
|
|
77
|
-
},
|
|
78
|
-
});
|
|
91
|
+
try {
|
|
92
|
+
await execPnpmInstall(repoRoot);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
warn("pnpm install failed — often optional native robotics deps " +
|
|
96
|
+
"(node-datachannel, rclnodejs). Retrying with --no-optional so " +
|
|
97
|
+
"zenoh/rosbridge transports still work.");
|
|
98
|
+
await execPnpmInstall(repoRoot, ["--no-optional"]);
|
|
99
|
+
}
|
|
79
100
|
}
|
|
80
101
|
/** Run `pnpm -r build` in repoRoot. */
|
|
81
102
|
async function runPnpmBuild(repoRoot) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/util/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,sEAAsE;IACtE,uEAAuE;IACvE,iEAAiE;IACjE,MAAM,GAAG,GAAG,IAAI,CACd,QAAQ,EACR,UAAU,EACV,wBAAwB,EACxB,cAAc,EACd,MAAM,EACN,KAAK,CACN,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,kFAAkF;AAClF,SAAS,iBAAiB,CAAC,QAAgB;IACzC,aAAa,CACX,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACxB;QACE,uEAAuE;QACvE,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/util/workspace.ts"],"names":[],"mappings":"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"}
|