mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-15 10:30:37 +09:00
Address remaining Greptile portability feedback
This commit is contained in:
parent
581a654748
commit
79652da520
5 changed files with 131 additions and 9 deletions
|
|
@ -623,6 +623,63 @@ describe("company portability", () => {
|
|||
]);
|
||||
});
|
||||
|
||||
it("treats no-separator auth and api key env names as secrets during export", async () => {
|
||||
const portability = companyPortabilityService({} as any);
|
||||
|
||||
agentSvc.list.mockResolvedValue([
|
||||
{
|
||||
id: "agent-1",
|
||||
name: "ClaudeCoder",
|
||||
status: "idle",
|
||||
role: "engineer",
|
||||
title: "Software Engineer",
|
||||
icon: "code",
|
||||
reportsTo: null,
|
||||
capabilities: "Writes code",
|
||||
adapterType: "claude_local",
|
||||
adapterConfig: {
|
||||
promptTemplate: "You are ClaudeCoder.",
|
||||
env: {
|
||||
APIKEY: {
|
||||
type: "plain",
|
||||
value: "sk-plain-api",
|
||||
},
|
||||
GITHUBAUTH: {
|
||||
type: "plain",
|
||||
value: "gh-auth-token",
|
||||
},
|
||||
PRIVATEKEY: {
|
||||
type: "plain",
|
||||
value: "private-key-value",
|
||||
},
|
||||
},
|
||||
},
|
||||
runtimeConfig: {},
|
||||
budgetMonthlyCents: 0,
|
||||
permissions: {},
|
||||
metadata: null,
|
||||
},
|
||||
]);
|
||||
|
||||
const exported = await portability.exportBundle("company-1", {
|
||||
include: {
|
||||
company: true,
|
||||
agents: true,
|
||||
projects: false,
|
||||
issues: false,
|
||||
},
|
||||
});
|
||||
|
||||
const extension = asTextFile(exported.files[".paperclip.yaml"]);
|
||||
expect(extension).toContain("APIKEY:");
|
||||
expect(extension).toContain("GITHUBAUTH:");
|
||||
expect(extension).toContain("PRIVATEKEY:");
|
||||
expect(extension).not.toContain("sk-plain-api");
|
||||
expect(extension).not.toContain("gh-auth-token");
|
||||
expect(extension).not.toContain("private-key-value");
|
||||
expect(extension).toContain('kind: "secret"');
|
||||
});
|
||||
|
||||
it("imports packaged skills and restores desired skill refs on agents", async () => {
|
||||
const portability = companyPortabilityService({} as any);
|
||||
|
||||
|
|
|
|||
|
|
@ -138,6 +138,45 @@ describe("project workspace skill discovery", () => {
|
|||
expect(imported.fileInventory.map((entry) => entry.kind)).toContain("script");
|
||||
expect(imported.metadata?.sourceKind).toBe("project_scan");
|
||||
});
|
||||
|
||||
it("parses inline object array items in skill frontmatter metadata", async () => {
|
||||
const workspace = await makeTempDir("paperclip-inline-skill-yaml-");
|
||||
await fs.mkdir(workspace, { recursive: true });
|
||||
await fs.writeFile(
|
||||
path.join(workspace, "SKILL.md"),
|
||||
[
|
||||
"---",
|
||||
"name: Inline Metadata Skill",
|
||||
"metadata:",
|
||||
" sources:",
|
||||
" - kind: github-dir",
|
||||
" repo: paperclipai/paperclip",
|
||||
" path: skills/paperclip",
|
||||
"---",
|
||||
"",
|
||||
"# Inline Metadata Skill",
|
||||
"",
|
||||
].join("\n"),
|
||||
"utf8",
|
||||
);
|
||||
|
||||
const imported = await readLocalSkillImportFromDirectory(
|
||||
"33333333-3333-4333-8333-333333333333",
|
||||
workspace,
|
||||
{ inventoryMode: "full" },
|
||||
);
|
||||
|
||||
expect(imported.metadata).toMatchObject({
|
||||
sourceKind: "local_path",
|
||||
sources: [
|
||||
{
|
||||
kind: "github-dir",
|
||||
repo: "paperclipai/paperclip",
|
||||
path: "skills/paperclip",
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("missing local skill reconciliation", () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue