@neta-art/neta-search-cli 0.2.56 → 0.2.61
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 +1 -1
- package/neta-search.mjs +7 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ Suggestions for your own skills: `proposals` lists the skills that have them, `p
|
|
|
40
40
|
|
|
41
41
|
`submit` publishes one of your skills and works inside a Cohub sandbox only, from a chat started by the space owner: it runs the static check first (see `lint`), sends this version, and waits for the result: published (with its digest) or why not. Nothing is shared until you submit: `use` only runs a skill. `submit --withdraw <name>` takes it down again; deleting the directory does not.
|
|
42
42
|
|
|
43
|
-
`listing submit <name>` sends the skill's showcase, kept in `.agents/skills/<name>/.listing/`: `listing.json` with the name and description per language (`en`, `zh`, `ja`, `ko`, `es`, `de`) and a `media` list of up to 6 items in order of preference: `{"video": "demo.mp4", "poster": "cover.jpg"}` (mp4, 5 to 30 seconds, at most 30 MB; the poster is optional), `{"image": "shot.png"}` (jpg, png or webp, at most 10 MB), or `{"work": "https://neta.art/w/<id>"}` (a Work made in Studio and shared publicly). The files sit next to `listing.json`. Once reviewed, the showcase can be shown publicly in Studio, the Neta community, the skill's page and the public skills site. It is not part of the skill: changing it never makes a new version, people who install the skill do not get it, and publishing the skill with `submit` does not send it (the result of `submit` reminds you when it has not been sent or changed since). The server reads the folder from your space; nothing is uploaded by the CLI, and nothing is shown before review. The result says which items are usable and why not. `listing submit --withdraw <name>` takes your consent back. Same rules as `submit`: inside a Cohub sandbox, from a chat started by the space owner. A `listing.json` at the skill's top level is the old place (it is part of every version); `lint` says to move it.
|
|
43
|
+
`listing submit <name>` sends the skill's showcase, kept in `.agents/skills/<name>/.listing/`: `listing.json` with the name and description per language (`en`, `zh`, `ja`, `ko`, `es`, `de`) and a `media` list of up to 6 items in order of preference: `{"video": "demo.mp4", "poster": "cover.jpg"}` (mp4, 5 to 30 seconds, at most 30 MB; the poster is optional), `{"image": "shot.png"}` (jpg, png or webp, at most 10 MB), or `{"work": "https://neta.art/w/<id>"}` (a Work made in Studio and shared publicly). The files sit next to `listing.json`. Once reviewed, the showcase can be shown publicly in Studio, the Neta community, the skill's page and the public skills site. It is not part of the skill: changing it never makes a new version, people who install the skill do not get it, and publishing the skill with `submit` does not send it (the result of `submit` reminds you when it has not been sent or changed since). The server reads the folder from your space; nothing is uploaded by the CLI, and nothing is shown before review. The result says which items are usable and why not. `listing submit --withdraw <name>` takes your consent back: it stops being shown within a minute, including copies the Neta team adopted, but the addresses of copies already adopted cannot be deleted. Same rules as `submit`: inside a Cohub sandbox, from a chat started by the space owner. A `listing.json` at the skill's top level is the old place (it is part of every version); `lint` says to move it.
|
|
44
44
|
|
|
45
45
|
`lint [name-or-dir]` checks a skill folder locally and sends nothing. **Errors** are what the skills site would reject (a missing frontmatter or description, a SKILL.md saved with Windows line endings or a byte-order mark, size limits, a SKILL.md or skill folder that is a symbolic link, anything that looks like a secret, a folder installed from someone else); `submit` stops on them. **Warnings** are suggestions and never block: other symbolic links (skipped when publishing), paths the skill mentions that are not in it, hard-coded `/workspace/...` paths (use paths relative to the skill folder or the current folder), missing or incomplete test declarations (`evals/matrix.json`), common writing problems (no rule that replies follow the user's language, no hand-off card, no `--work-title`, no out-of-scope section, non-English text hard-coded in the deliverable), ready-made non-English words for the agent to say to users, instructions not written in English (recommended, not required), and the optional showcase in `.listing/` (format, missing files, file types, sizes and video length; see `listing submit`). It is a static check, not a review: passing it says nothing about how well the skill works. `--json` for agents.
|
|
46
46
|
|
package/neta-search.mjs
CHANGED
|
@@ -29404,6 +29404,7 @@ function rejectText(reason, name) {
|
|
|
29404
29404
|
}
|
|
29405
29405
|
var say = (s) => console.log(s);
|
|
29406
29406
|
var SHOWN_WHERE = "Studio, the Neta community, the skill's page and the public skills site";
|
|
29407
|
+
var AFTER_WITHDRAW = "Withdrawing stops showing it, including any copies the Neta team adopted, but the addresses of copies already adopted cannot be deleted.";
|
|
29407
29408
|
async function cmdListingSubmit(name, opts) {
|
|
29408
29409
|
const env = detectEnv();
|
|
29409
29410
|
if (env.anonymous || !env.turnId) {
|
|
@@ -29437,7 +29438,7 @@ async function cmdListingSubmit(name, opts) {
|
|
|
29437
29438
|
...local.spec.media.filter((m) => m.kind === "work" && !m.problem).map((m) => m.work)
|
|
29438
29439
|
];
|
|
29439
29440
|
console.error(`Sending the showcase of ${name}. Once reviewed, it can be shown publicly in ${SHOWN_WHERE}: ${shown.join(", ") || "(nothing usable)"}.`);
|
|
29440
|
-
console.error(`Files stay private until then. To take your consent back later: neta-search skills listing submit --withdraw ${name}`);
|
|
29441
|
+
console.error(`Files stay private until then. To take your consent back later: neta-search skills listing submit --withdraw ${name}. ${AFTER_WITHDRAW}`);
|
|
29441
29442
|
}
|
|
29442
29443
|
}
|
|
29443
29444
|
const sent = await api(env, "POST", { name, ...opts.withdraw ? { withdraw: true } : {} });
|
|
@@ -29483,7 +29484,7 @@ function finish(name, opts, body, local) {
|
|
|
29483
29484
|
return 0;
|
|
29484
29485
|
}
|
|
29485
29486
|
if (opts.withdraw) {
|
|
29486
|
-
say(body.unchanged ? `Nothing to withdraw: the showcase of ${name} was never sent, or is already withdrawn.` : `Withdrawn: the showcase of ${name} will no longer be shown
|
|
29487
|
+
say(body.unchanged ? `Nothing to withdraw: the showcase of ${name} was never sent, or is already withdrawn.` : `Withdrawn: the showcase of ${name} will no longer be shown (within a minute). ${AFTER_WITHDRAW} Your .listing/ files here are unchanged; run neta-search skills listing submit ${name} to send them again.`);
|
|
29487
29488
|
return 0;
|
|
29488
29489
|
}
|
|
29489
29490
|
const lines = [];
|
|
@@ -31110,6 +31111,7 @@ async function cmdRemove(names, opts) {
|
|
|
31110
31111
|
const env = detectEnv();
|
|
31111
31112
|
const local = scanLocal(opts.dir);
|
|
31112
31113
|
const results = [];
|
|
31114
|
+
const reports = [];
|
|
31113
31115
|
for (const n of names) {
|
|
31114
31116
|
const found = (await findLocal(env, local, n)).filter((s) => existsSync7(s.path));
|
|
31115
31117
|
if (found.length === 0) results.push({ name: n, result: "not_found" });
|
|
@@ -31121,9 +31123,11 @@ async function cmdRemove(names, opts) {
|
|
|
31121
31123
|
} else {
|
|
31122
31124
|
rmSync2(s.path, { recursive: true, force: true });
|
|
31123
31125
|
results.push({ name: s.name, result: "removed" });
|
|
31126
|
+
if (s.kind === "installed" && s.id) reports.push(reportSkillEvent(env, "uninstall", s.id, s.digest ?? "", s.name));
|
|
31124
31127
|
}
|
|
31125
31128
|
}
|
|
31126
31129
|
}
|
|
31130
|
+
await Promise.allSettled(reports);
|
|
31127
31131
|
const failed = results.filter((r) => r.result !== "removed").length;
|
|
31128
31132
|
if (opts.json) console.log(JSON.stringify({ results }));
|
|
31129
31133
|
else
|
|
@@ -31306,7 +31310,7 @@ skills.command("submit").description("publish the current version of one of your
|
|
|
31306
31310
|
await run(cmdSubmit(name, { json: !!opts.json, withdraw: !!opts.withdraw, adopts: opts.adopts, wait: Number.isFinite(wait) && wait >= 0 ? wait : 60 }));
|
|
31307
31311
|
});
|
|
31308
31312
|
var listing = skills.command("listing").description("a skill's showcase (name, description, video, images, Works) in .agents/skills/<name>/.listing/: not part of the skill, sent separately");
|
|
31309
|
-
listing.command("submit").description("send the showcase in .agents/skills/<name>/.listing/ so that, once reviewed, it can be shown publicly in Studio, the Neta community, the skill's page and the public skills site; only the space owner can. Publishing the skill (skills submit) does not send it. --withdraw takes your consent back").argument("<name>", "skill directory name under .agents/skills/").option("--withdraw", "stop showing the showcase you sent (your files here are kept
|
|
31313
|
+
listing.command("submit").description("send the showcase in .agents/skills/<name>/.listing/ so that, once reviewed, it can be shown publicly in Studio, the Neta community, the skill's page and the public skills site; only the space owner can. Publishing the skill (skills submit) does not send it. --withdraw takes your consent back").argument("<name>", "skill directory name under .agents/skills/").option("--withdraw", "stop showing the showcase you sent, including copies already adopted (their addresses cannot be deleted); your files here are kept").option("--wait <seconds>", "how long to wait for the server's result", "60").option("--json", "compact JSON output (for agents)").action(async (name, opts) => {
|
|
31310
31314
|
const wait = Number(opts.wait);
|
|
31311
31315
|
await run(cmdListingSubmit(name, { json: !!opts.json, withdraw: !!opts.withdraw, wait: Number.isFinite(wait) && wait >= 0 ? wait : 60 }));
|
|
31312
31316
|
});
|