vskill 1.0.15 → 1.0.18
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 +84 -9
- package/agents.json +3 -1
- package/dist/agents/agents-registry.d.ts +69 -3
- package/dist/agents/agents-registry.js +203 -0
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/api/client.d.ts +85 -0
- package/dist/api/client.js +193 -24
- package/dist/api/client.js.map +1 -1
- package/dist/commands/add-lockfile.d.ts +6 -0
- package/dist/commands/add-lockfile.js +10 -0
- package/dist/commands/add-lockfile.js.map +1 -1
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.js +110 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/auth.d.ts +23 -0
- package/dist/commands/auth.js +105 -11
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/eval/serve.d.ts +2 -0
- package/dist/commands/eval/serve.js +126 -4
- package/dist/commands/eval/serve.js.map +1 -1
- package/dist/commands/orgs.d.ts +21 -0
- package/dist/commands/orgs.js +164 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/skill.js +14 -1
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/whoami.d.ts +29 -0
- package/dist/commands/whoami.js +119 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/discovery/github-tree.d.ts +23 -3
- package/dist/discovery/github-tree.js +172 -24
- package/dist/discovery/github-tree.js.map +1 -1
- package/dist/eval/anthropic-catalog.js +32 -2
- package/dist/eval/anthropic-catalog.js.map +1 -1
- package/dist/eval/batch-judge.js +1 -0
- package/dist/eval/batch-judge.js.map +1 -1
- package/dist/eval/llm.d.ts +1 -1
- package/dist/eval/llm.js +104 -2
- package/dist/eval/llm.js.map +1 -1
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.d.ts +2 -0
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.js +20 -0
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.js.map +1 -0
- package/dist/eval-server/active-tenant-routes.d.ts +15 -0
- package/dist/eval-server/active-tenant-routes.js +101 -0
- package/dist/eval-server/active-tenant-routes.js.map +1 -0
- package/dist/eval-server/api-routes.js +206 -6
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-server/desktop-open-routes.d.ts +8 -0
- package/dist/eval-server/desktop-open-routes.js +64 -0
- package/dist/eval-server/desktop-open-routes.js.map +1 -0
- package/dist/eval-server/eval-server.js +90 -6
- package/dist/eval-server/eval-server.js.map +1 -1
- package/dist/eval-server/export-skill-routes.d.ts +9 -0
- package/dist/eval-server/export-skill-routes.js +81 -0
- package/dist/eval-server/export-skill-routes.js.map +1 -0
- package/dist/eval-server/git-routes.d.ts +1 -0
- package/dist/eval-server/git-routes.js +101 -4
- package/dist/eval-server/git-routes.js.map +1 -1
- package/dist/eval-server/install-engine-routes.d.ts +3 -16
- package/dist/eval-server/install-engine-routes.js +9 -124
- package/dist/eval-server/install-engine-routes.js.map +1 -1
- package/dist/eval-server/install-jobs.d.ts +41 -0
- package/dist/eval-server/install-jobs.js +161 -0
- package/dist/eval-server/install-jobs.js.map +1 -0
- package/dist/eval-server/install-skill-routes.d.ts +74 -11
- package/dist/eval-server/install-skill-routes.js +506 -79
- package/dist/eval-server/install-skill-routes.js.map +1 -1
- package/dist/eval-server/install-state-routes.d.ts +25 -0
- package/dist/eval-server/install-state-routes.js +125 -0
- package/dist/eval-server/install-state-routes.js.map +1 -0
- package/dist/eval-server/oauth-github-routes.d.ts +2 -0
- package/dist/eval-server/oauth-github-routes.js +505 -0
- package/dist/eval-server/oauth-github-routes.js.map +1 -0
- package/dist/eval-server/platform-proxy.d.ts +17 -1
- package/dist/eval-server/platform-proxy.js +125 -13
- package/dist/eval-server/platform-proxy.js.map +1 -1
- package/dist/eval-server/plugin-cli-routes.js +9 -9
- package/dist/eval-server/plugin-cli-routes.js.map +1 -1
- package/dist/eval-server/remove-skill-routes.d.ts +18 -0
- package/dist/eval-server/remove-skill-routes.js +145 -0
- package/dist/eval-server/remove-skill-routes.js.map +1 -0
- package/dist/eval-server/router.d.ts +17 -3
- package/dist/eval-server/router.js +166 -9
- package/dist/eval-server/router.js.map +1 -1
- package/dist/eval-server/settings-store.js +1 -1
- package/dist/eval-server/settings-store.js.map +1 -1
- package/dist/eval-server/supported-agents-routes.d.ts +6 -0
- package/dist/eval-server/supported-agents-routes.js +41 -0
- package/dist/eval-server/supported-agents-routes.js.map +1 -0
- package/dist/eval-server/utils/spawn-env.d.ts +1 -0
- package/dist/eval-server/utils/spawn-env.js +47 -0
- package/dist/eval-server/utils/spawn-env.js.map +1 -0
- package/dist/eval-ui/assets/AdvancedTab-D8zbE5fH.js +1 -0
- package/dist/eval-ui/assets/{CreateSkillPage-BmbvQEzE.js → CreateSkillPage-DOBhKdgr.js} +5 -5
- package/dist/eval-ui/assets/FindSkillsPalette-CyMmNPr-.js +2 -0
- package/dist/eval-ui/assets/GeneralTab-DYR9NWC4.js +1 -0
- package/dist/eval-ui/assets/PrivacyTab-CXIqQokl.js +1 -0
- package/dist/eval-ui/assets/SearchPaletteCore-Dn5gQJS_.js +14 -0
- package/dist/eval-ui/assets/SkillDetailPanel-DTrRnyyJ.js +1 -0
- package/dist/eval-ui/assets/UpdateDropdown-Cvr2fe0z.js +1 -0
- package/dist/eval-ui/assets/UpdatesTab-DwJIUDPX.js +1 -0
- package/dist/eval-ui/assets/core-DZAvsxlC.js +1 -0
- package/dist/eval-ui/assets/event-CDYWU2X3.js +1 -0
- package/dist/eval-ui/assets/globals-BRZwPAPF.js +49 -0
- package/dist/eval-ui/assets/globals-C3oEdsJh.css +1 -0
- package/dist/eval-ui/assets/index-D7M0Jdss.js +1 -0
- package/dist/eval-ui/assets/lifecycle-DSleOV-l.js +1 -0
- package/dist/eval-ui/assets/lifecycle-d1Sm9Hts.css +1 -0
- package/dist/eval-ui/assets/main-D2shn1dH.js +87 -0
- package/dist/eval-ui/assets/preferences-BHZXB5dL.css +1 -0
- package/dist/eval-ui/assets/preferences-BKv6X7fK.js +2 -0
- package/dist/eval-ui/assets/useDesktopBridge-DxVWbYqK.js +2 -0
- package/dist/eval-ui/index.html +4 -2
- package/dist/eval-ui/lifecycle.html +33 -0
- package/dist/eval-ui/preferences.html +34 -0
- package/dist/index.js +47 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/bundle-files.d.ts +4 -0
- package/dist/installer/bundle-files.js +97 -0
- package/dist/installer/bundle-files.js.map +1 -0
- package/dist/installer/canonical.d.ts +31 -6
- package/dist/installer/canonical.js +50 -23
- package/dist/installer/canonical.js.map +1 -1
- package/dist/installer/clipboard-export.d.ts +19 -0
- package/dist/installer/clipboard-export.js +88 -0
- package/dist/installer/clipboard-export.js.map +1 -0
- package/dist/installer/frontmatter.js +1 -1
- package/dist/installer/frontmatter.js.map +1 -1
- package/dist/installer/multi-install.d.ts +43 -0
- package/dist/installer/multi-install.js +237 -0
- package/dist/installer/multi-install.js.map +1 -0
- package/dist/installer/transformers/aider.d.ts +2 -0
- package/dist/installer/transformers/aider.js +32 -0
- package/dist/installer/transformers/aider.js.map +1 -0
- package/dist/installer/transformers/continue-dev.d.ts +2 -0
- package/dist/installer/transformers/continue-dev.js +6 -0
- package/dist/installer/transformers/continue-dev.js.map +1 -0
- package/dist/installer/transformers/cursor.d.ts +2 -0
- package/dist/installer/transformers/cursor.js +24 -0
- package/dist/installer/transformers/cursor.js.map +1 -0
- package/dist/installer/transformers/github-copilot.d.ts +2 -0
- package/dist/installer/transformers/github-copilot.js +17 -0
- package/dist/installer/transformers/github-copilot.js.map +1 -0
- package/dist/installer/transformers/index.d.ts +78 -0
- package/dist/installer/transformers/index.js +13 -0
- package/dist/installer/transformers/index.js.map +1 -0
- package/dist/installer/transformers/junie.d.ts +2 -0
- package/dist/installer/transformers/junie.js +6 -0
- package/dist/installer/transformers/junie.js.map +1 -0
- package/dist/installer/transformers/kiro.d.ts +2 -0
- package/dist/installer/transformers/kiro.js +6 -0
- package/dist/installer/transformers/kiro.js.map +1 -0
- package/dist/installer/transformers/trae.d.ts +2 -0
- package/dist/installer/transformers/trae.js +6 -0
- package/dist/installer/transformers/trae.js.map +1 -0
- package/dist/installer/transformers/windsurf.d.ts +2 -0
- package/dist/installer/transformers/windsurf.js +12 -0
- package/dist/installer/transformers/windsurf.js.map +1 -0
- package/dist/installer/yaml-safe-mutate.d.ts +19 -0
- package/dist/installer/yaml-safe-mutate.js +184 -0
- package/dist/installer/yaml-safe-mutate.js.map +1 -0
- package/dist/lib/active-tenant.d.ts +36 -0
- package/dist/lib/active-tenant.js +120 -0
- package/dist/lib/active-tenant.js.map +1 -0
- package/dist/lib/github-fetch.d.ts +1 -0
- package/dist/lib/github-fetch.js +11 -1
- package/dist/lib/github-fetch.js.map +1 -1
- package/dist/lib/keychain.d.ts +15 -2
- package/dist/lib/keychain.js +156 -8
- package/dist/lib/keychain.js.map +1 -1
- package/dist/lib/migration/keychain-migration.d.ts +35 -0
- package/dist/lib/migration/keychain-migration.js +189 -0
- package/dist/lib/migration/keychain-migration.js.map +1 -0
- package/dist/lib/tenant-resolver.d.ts +38 -0
- package/dist/lib/tenant-resolver.js +79 -0
- package/dist/lib/tenant-resolver.js.map +1 -0
- package/dist/lockfile/types.d.ts +8 -0
- package/dist/sidecar/eval-ui-manifest.json +1 -0
- package/dist/sidecar/sea-config.json +57 -0
- package/dist/sidecar/sea-prep.blob +0 -0
- package/dist/sidecar/server.cjs +141627 -0
- package/dist/sidecar/vskill-version.txt +1 -0
- package/dist/studio/lib/ops-log.js +140 -57
- package/dist/studio/lib/ops-log.js.map +1 -1
- package/dist/studio/lib/provenance.js +3 -2
- package/dist/studio/lib/provenance.js.map +1 -1
- package/dist/studio/lib/query.d.ts +1 -0
- package/dist/studio/lib/query.js +7 -0
- package/dist/studio/lib/query.js.map +1 -0
- package/dist/studio/lib/scope-transfer.d.ts +16 -0
- package/dist/studio/lib/scope-transfer.js +52 -25
- package/dist/studio/lib/scope-transfer.js.map +1 -1
- package/dist/studio/routes/index.js +13 -1
- package/dist/studio/routes/index.js.map +1 -1
- package/dist/studio/routes/ops.js +31 -9
- package/dist/studio/routes/ops.js.map +1 -1
- package/dist/studio/routes/promote.js +16 -11
- package/dist/studio/routes/promote.js.map +1 -1
- package/dist/studio/routes/revert.js +14 -18
- package/dist/studio/routes/revert.js.map +1 -1
- package/dist/studio/routes/test-install.js +14 -11
- package/dist/studio/routes/test-install.js.map +1 -1
- package/dist/studio-runtime/lockfile.d.ts +51 -0
- package/dist/studio-runtime/lockfile.js +216 -0
- package/dist/studio-runtime/lockfile.js.map +1 -0
- package/dist/updater/source-fetcher.js +2 -2
- package/dist/updater/source-fetcher.js.map +1 -1
- package/dist/utils/skill-builder-detection.d.ts +14 -1
- package/dist/utils/skill-builder-detection.js +20 -8
- package/dist/utils/skill-builder-detection.js.map +1 -1
- package/dist/utils/skill-creator-detection.d.ts +10 -2
- package/dist/utils/skill-creator-detection.js +12 -43
- package/dist/utils/skill-creator-detection.js.map +1 -1
- package/package.json +17 -1
- package/dist/eval-ui/assets/FindSkillsPalette-D0Zjhm31.js +0 -2
- package/dist/eval-ui/assets/SearchPaletteCore-EhcN1xEa.js +0 -14
- package/dist/eval-ui/assets/SkillDetailPanel-B5J60ffv.js +0 -1
- package/dist/eval-ui/assets/UpdateDropdown-Celf0_Cr.js +0 -1
- package/dist/eval-ui/assets/index-BV7k6fdk.js +0 -124
- package/dist/eval-ui/assets/index-CKLqBL52.css +0 -1
- package/dist/eval-ui/assets/skill-studio-logo-CRyKgIrg.png +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-install.js","sourceRoot":"","sources":["../../src/installer/multi-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// 0845 T-010 — Aider transformer (Tier 2).
|
|
2
|
+
//
|
|
3
|
+
// Aider expects "conventions" files referenced from `~/.aider.conf.yml`'s
|
|
4
|
+
// `read:` list. The transformer is pure — it emits two TransformedFiles:
|
|
5
|
+
//
|
|
6
|
+
// 1. conventions/<name>.md op:"write" body verbatim
|
|
7
|
+
// 2. ../../.aider.conf.yml op:"append-yaml-list" key=read value=~/.aider/conventions/<name>.md
|
|
8
|
+
//
|
|
9
|
+
// The dispatcher in multi-install.ts handles the conf.yml side effect
|
|
10
|
+
// through safeAppendYamlList() per ADR-0845-03 — backup-write, idempotent
|
|
11
|
+
// append, malformed-input rejection.
|
|
12
|
+
//
|
|
13
|
+
// The conf.yml relativePath ascends ONE level: the Aider install root is
|
|
14
|
+
// `~/.aider` (the parent of `~/.aider/skills`), so `../` from there lands
|
|
15
|
+
// at `$HOME` where `.aider.conf.yml` lives.
|
|
16
|
+
export const aiderTransformer = (skill) => {
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
relativePath: `conventions/${skill.name}.md`,
|
|
20
|
+
content: skill.body,
|
|
21
|
+
op: "write",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
relativePath: "../.aider.conf.yml",
|
|
25
|
+
content: "",
|
|
26
|
+
op: "append-yaml-list",
|
|
27
|
+
yamlListKey: "read",
|
|
28
|
+
yamlListValue: `~/.aider/conventions/${skill.name}.md`,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=aider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aider.js","sourceRoot":"","sources":["../../../src/installer/transformers/aider.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,4DAA4D;AAC5D,sGAAsG;AACtG,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,qCAAqC;AACrC,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,4CAA4C;AAI5C,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,KAAK,EAAqB,EAAE;IAC9E,OAAO;QACL;YACE,YAAY,EAAE,eAAe,KAAK,CAAC,IAAI,KAAK;YAC5C,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,EAAE,EAAE,OAAO;SACZ;QACD;YACE,YAAY,EAAE,oBAAoB;YAClC,OAAO,EAAE,EAAE;YACX,EAAE,EAAE,kBAAkB;YACtB,WAAW,EAAE,MAAM;YACnB,aAAa,EAAE,wBAAwB,KAAK,CAAC,IAAI,KAAK;SACvD;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-dev.js","sourceRoot":"","sources":["../../../src/installer/transformers/continue-dev.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,aAAa;AAIb,MAAM,CAAC,MAAM,sBAAsB,GAAsB,CAAC,KAAK,EAAqB,EAAE,CAAC;IACrF,EAAE,YAAY,EAAE,SAAS,KAAK,CAAC,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;CAChE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// 0845 T-006 — Cursor transformer (Tier 2).
|
|
2
|
+
//
|
|
3
|
+
// Cursor consumes "rules" files at `.cursor/rules/<name>.mdc`. The frontmatter
|
|
4
|
+
// shape — `description`, `globs: ""`, `alwaysApply: false` — places the rule
|
|
5
|
+
// in Cursor's "agent-requested" mode: Cursor loads it only when its description
|
|
6
|
+
// matches the conversation. This mirrors Claude Code's auto-trigger semantics
|
|
7
|
+
// best, though Cursor's selection logic is opaque to us (plan.md §8 R2).
|
|
8
|
+
//
|
|
9
|
+
// AC-US4-03: relativePath = "rules/<name>.mdc"; frontmatter starts with
|
|
10
|
+
// `---\ndescription: <desc>\nglobs: ""\nalwaysApply: false\n---`; body follows
|
|
11
|
+
// verbatim. Idempotent (same input → byte-equal output).
|
|
12
|
+
import { quoteYAMLValue } from "../frontmatter.js";
|
|
13
|
+
export const cursorTransformer = (skill) => {
|
|
14
|
+
const description = quoteYAMLValue(skill.description);
|
|
15
|
+
const frontmatter = `---\ndescription: ${description}\nglobs: ""\nalwaysApply: false\n---\n`;
|
|
16
|
+
const content = frontmatter + skill.body;
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
relativePath: `rules/${skill.name}.mdc`,
|
|
20
|
+
content,
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/installer/transformers/cursor.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAChF,8EAA8E;AAC9E,yEAAyE;AACzE,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,yDAAyD;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,KAAK,EAAqB,EAAE;IAC/E,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,WAAW,GACf,qBAAqB,WAAW,wCAAwC,CAAC;IAC3E,MAAM,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IACzC,OAAO;QACL;YACE,YAAY,EAAE,SAAS,KAAK,CAAC,IAAI,MAAM;YACvC,OAAO;SACR;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// 0845 T-008 — GitHub Copilot (VS Code extension) transformer (Tier 2).
|
|
2
|
+
//
|
|
3
|
+
// Copilot's "custom instructions" mechanism reads from
|
|
4
|
+
// `.github/instructions/<name>.instructions.md` (the agent's install root
|
|
5
|
+
// is the workspace root; the transformer paths are relative to it).
|
|
6
|
+
// `applyTo: "**"` makes the instructions apply repo-wide (AC-US4-05).
|
|
7
|
+
// A future enhancement could let the user pin specific glob patterns.
|
|
8
|
+
export const githubCopilotTransformer = (skill) => {
|
|
9
|
+
const frontmatter = `---\napplyTo: "**"\n---\n`;
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
relativePath: `instructions/${skill.name}.instructions.md`,
|
|
13
|
+
content: frontmatter + skill.body,
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=github-copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-copilot.js","sourceRoot":"","sources":["../../../src/installer/transformers/github-copilot.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,uDAAuD;AACvD,0EAA0E;AAC1E,oEAAoE;AACpE,sEAAsE;AACtE,sEAAsE;AAItE,MAAM,CAAC,MAAM,wBAAwB,GAAsB,CAAC,KAAK,EAAqB,EAAE;IACtF,MAAM,WAAW,GAAG,2BAA2B,CAAC;IAChD,OAAO;QACL;YACE,YAAY,EAAE,gBAAgB,KAAK,CAAC,IAAI,kBAAkB;YAC1D,OAAO,EAAE,WAAW,GAAG,KAAK,CAAC,IAAI;SAClC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsed SKILL.md ready for transformation. Produced by the installer
|
|
3
|
+
* (`parseFrontmatter` + body extraction) and consumed by per-tool
|
|
4
|
+
* transformer functions. The shape intentionally exposes the raw
|
|
5
|
+
* frontmatter block so transformers that preserve fields (e.g.
|
|
6
|
+
* `version`, `author`) can re-emit them without re-parsing.
|
|
7
|
+
*/
|
|
8
|
+
export interface ParsedSkill {
|
|
9
|
+
/** Skill name without publisher prefix (e.g. "obsidian-brain"). */
|
|
10
|
+
name: string;
|
|
11
|
+
/**
|
|
12
|
+
* First non-empty body line, truncated to 200 chars. Transformers that
|
|
13
|
+
* emit frontmatter (Cursor, GitHub Copilot, etc.) put this in their
|
|
14
|
+
* `description` field.
|
|
15
|
+
*/
|
|
16
|
+
description: string;
|
|
17
|
+
/**
|
|
18
|
+
* Body after the closing `---` of the SKILL.md frontmatter,
|
|
19
|
+
* CRLF-normalized to LF. Verbatim — transformers MUST preserve.
|
|
20
|
+
*/
|
|
21
|
+
body: string;
|
|
22
|
+
/**
|
|
23
|
+
* Raw YAML frontmatter block (between the `---` fences), so
|
|
24
|
+
* transformers can preserve fields like `version` or `author` when
|
|
25
|
+
* needed. Empty string when the source had no frontmatter.
|
|
26
|
+
*/
|
|
27
|
+
originalFrontmatter: string;
|
|
28
|
+
/** Convenience: parsed-out `version` field if present. */
|
|
29
|
+
version?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Optional bundled skill resources keyed by path relative to the skill root.
|
|
32
|
+
* Standard paths are `agents/`, `scripts/`, `references/`, `assets/`,
|
|
33
|
+
* `tests/`, and `.env.example`; callers validate path safety before write.
|
|
34
|
+
*/
|
|
35
|
+
files?: Record<string, string>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A single file emitted by a transformer. The dispatcher in
|
|
39
|
+
* `multi-install.ts` joins `relativePath` onto the agent's install
|
|
40
|
+
* root and writes `content` via `fs.writeFile`.
|
|
41
|
+
*
|
|
42
|
+
* `op === "append-yaml-list"` is the Aider escape hatch — instead of
|
|
43
|
+
* a plain write, the dispatcher invokes the safe YAML mutation
|
|
44
|
+
* routine (ADR-0845-03) to append `yamlListValue` to `yamlListKey`.
|
|
45
|
+
*/
|
|
46
|
+
export interface TransformedFile {
|
|
47
|
+
/**
|
|
48
|
+
* Path relative to the agent's install root (the parent of
|
|
49
|
+
* `localSkillsDir` / `globalSkillsDir`). E.g. `"rules/obsidian-brain.mdc"`
|
|
50
|
+
* for Cursor → resolves to `~/.cursor/rules/obsidian-brain.mdc`.
|
|
51
|
+
*
|
|
52
|
+
* POSIX forward-slash separators required; joined with `path.join()`
|
|
53
|
+
* at write time so Win32 backslashes are handled by Node.
|
|
54
|
+
*/
|
|
55
|
+
relativePath: string;
|
|
56
|
+
/** Final file contents, byte-equal across re-runs (idempotent). */
|
|
57
|
+
content: string;
|
|
58
|
+
/** Optional file mode (defaults to 0o644). */
|
|
59
|
+
mode?: number;
|
|
60
|
+
/**
|
|
61
|
+
* Default `"write"`. When `"append-yaml-list"`, the dispatcher
|
|
62
|
+
* invokes `safeAppendYamlList()` instead of `fs.writeFile`. Used
|
|
63
|
+
* by the Aider transformer for the `~/.aider.conf.yml` entry.
|
|
64
|
+
*/
|
|
65
|
+
op?: "write" | "append-yaml-list";
|
|
66
|
+
/** When `op === "append-yaml-list"`: the YAML key to mutate. */
|
|
67
|
+
yamlListKey?: string;
|
|
68
|
+
/** When `op === "append-yaml-list"`: the value to append to the list. */
|
|
69
|
+
yamlListValue?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Per-tool format transformer. Pure function — no I/O. Given a
|
|
73
|
+
* `ParsedSkill`, returns the list of files to write under the
|
|
74
|
+
* agent's install root. Re-running with the same input MUST
|
|
75
|
+
* produce byte-equal output (idempotency contract enforced by
|
|
76
|
+
* each transformer's unit tests).
|
|
77
|
+
*/
|
|
78
|
+
export type FormatTransformer = (skill: ParsedSkill) => TransformedFile[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// 0845 T-001 — Shared types for per-tool format transformers.
|
|
2
|
+
//
|
|
3
|
+
// These interfaces are imported by Phase-2 transformer modules
|
|
4
|
+
// (cursor.ts, windsurf.ts, github-copilot.ts, etc.) and by the
|
|
5
|
+
// `AgentDefinition.formatTransformer` field in agents-registry.ts.
|
|
6
|
+
//
|
|
7
|
+
// Types live in this barrel so Phase-2 work can land transformer
|
|
8
|
+
// files without touching the registry (no circular dep) and so
|
|
9
|
+
// the registry itself only needs to import a stable type module.
|
|
10
|
+
//
|
|
11
|
+
// ADR cross-ref: 0845-02-per-tool-format-transformer.md.
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/installer/transformers/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,+DAA+D;AAC/D,+DAA+D;AAC/D,mEAAmE;AACnE,EAAE;AACF,iEAAiE;AACjE,+DAA+D;AAC/D,iEAAiE;AACjE,EAAE;AACF,yDAAyD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"junie.js","sourceRoot":"","sources":["../../../src/installer/transformers/junie.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,aAAa;AAIb,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,KAAK,EAAqB,EAAE,CAAC;IAC/E,EAAE,YAAY,EAAE,SAAS,KAAK,CAAC,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;CAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/installer/transformers/kiro.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,aAAa;AAIb,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,KAAK,EAAqB,EAAE,CAAC;IAC9E,EAAE,YAAY,EAAE,YAAY,KAAK,CAAC,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;CACnE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// 0845 T-009 — Trae transformer (Tier 2). Plain markdown at top-level <name>.md
|
|
2
|
+
// (Trae's install root holds rules directly — no subdir). AC-US4-06.
|
|
3
|
+
export const traeTransformer = (skill) => [
|
|
4
|
+
{ relativePath: `${skill.name}.md`, content: skill.body },
|
|
5
|
+
];
|
|
6
|
+
//# sourceMappingURL=trae.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trae.js","sourceRoot":"","sources":["../../../src/installer/transformers/trae.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qEAAqE;AAIrE,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,KAAK,EAAqB,EAAE,CAAC;IAC9E,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;CAC1D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// 0845 T-007 — Windsurf transformer (Tier 2).
|
|
2
|
+
// Windsurf consumes plain markdown rule files under `.windsurf/rules/<name>.md`.
|
|
3
|
+
// AC-US4-04: frontmatter stripped, body verbatim.
|
|
4
|
+
export const windsurfTransformer = (skill) => {
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
relativePath: `rules/${skill.name}.md`,
|
|
8
|
+
content: skill.body,
|
|
9
|
+
},
|
|
10
|
+
];
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../src/installer/transformers/windsurf.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,iFAAiF;AACjF,kDAAkD;AAIlD,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,KAAK,EAAqB,EAAE;IACjF,OAAO;QACL;YACE,YAAY,EAAE,SAAS,KAAK,CAAC,IAAI,KAAK;YACtC,OAAO,EAAE,KAAK,CAAC,IAAI;SACpB;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare class MalformedConfigError extends Error {
|
|
2
|
+
constructor(msg: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class IncompatibleConfigError extends Error {
|
|
5
|
+
constructor(msg: string);
|
|
6
|
+
}
|
|
7
|
+
export type SafeAppendStatus = "created" | "appended" | "already-present";
|
|
8
|
+
export interface SafeAppendResult {
|
|
9
|
+
status: SafeAppendStatus;
|
|
10
|
+
/** Path of the backup written before mutation. Undefined for status="created"
|
|
11
|
+
* and status="already-present" (no mutation occurred). */
|
|
12
|
+
backupPath?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Append `value` to the YAML block-sequence under top-level `key` in `filePath`.
|
|
16
|
+
* Idempotent; backs up the original before any mutation; throws on malformed
|
|
17
|
+
* input or incompatible shape (file is never touched on error).
|
|
18
|
+
*/
|
|
19
|
+
export declare function safeAppendYamlList(filePath: string, key: string, value: string): SafeAppendResult;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// 0845 T-010 — safeAppendYamlList: idempotent, backup-protected list mutation.
|
|
2
|
+
//
|
|
3
|
+
// Why hand-rolled instead of js-yaml:
|
|
4
|
+
// - vskill has no js-yaml dependency today; the surface here is tiny
|
|
5
|
+
// (append one string to ONE top-level block-sequence key) so the cost
|
|
6
|
+
// of pulling in a YAML library is not justified.
|
|
7
|
+
// - Line-based mutation preserves user comments, formatting, ordering,
|
|
8
|
+
// and indent style — js-yaml's round-trip drops all of those.
|
|
9
|
+
// - The four "what does the user's YAML look like?" cases below are the
|
|
10
|
+
// only shapes the Aider conf.yml mutation needs to handle.
|
|
11
|
+
//
|
|
12
|
+
// Algorithm (ADR-0845-03):
|
|
13
|
+
// 1. File missing → write `<key>:\n - <value>\n`, status="created"
|
|
14
|
+
// 2. Key missing in file → append `<key>:\n - <value>\n`, status="appended"
|
|
15
|
+
// 3. Key present, empty value → replace with full list, status="appended"
|
|
16
|
+
// 4. Key present, block list:
|
|
17
|
+
// - value already present → no-op, status="already-present"
|
|
18
|
+
// - value absent → insert `<indent>- <value>` at end of block, status="appended"
|
|
19
|
+
// 5. Key present, inline list / scalar → throw IncompatibleConfigError
|
|
20
|
+
// 6. Malformed YAML (tab indent, unclosed quoted string, etc.) → throw MalformedConfigError
|
|
21
|
+
//
|
|
22
|
+
// Mutations always go through a backup-write: write `<file>.bak` (or
|
|
23
|
+
// `.bak.1`, `.bak.2`, … if `.bak` is already taken) BEFORE rewriting the
|
|
24
|
+
// original. Backup is skipped on the "created" path (no prior content
|
|
25
|
+
// to preserve).
|
|
26
|
+
import { readFileSync, writeFileSync, existsSync, copyFileSync, } from "node:fs";
|
|
27
|
+
export class MalformedConfigError extends Error {
|
|
28
|
+
constructor(msg) {
|
|
29
|
+
super(`Malformed YAML config: ${msg}`);
|
|
30
|
+
this.name = "MalformedConfigError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class IncompatibleConfigError extends Error {
|
|
34
|
+
constructor(msg) {
|
|
35
|
+
super(`Incompatible YAML shape: ${msg}`);
|
|
36
|
+
this.name = "IncompatibleConfigError";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const DEFAULT_INDENT = " "; // 2-space when we have nothing else to copy.
|
|
40
|
+
/**
|
|
41
|
+
* Append `value` to the YAML block-sequence under top-level `key` in `filePath`.
|
|
42
|
+
* Idempotent; backs up the original before any mutation; throws on malformed
|
|
43
|
+
* input or incompatible shape (file is never touched on error).
|
|
44
|
+
*/
|
|
45
|
+
export function safeAppendYamlList(filePath, key, value) {
|
|
46
|
+
if (!existsSync(filePath)) {
|
|
47
|
+
writeFileSync(filePath, `${key}:\n${DEFAULT_INDENT}- ${value}\n`);
|
|
48
|
+
return { status: "created" };
|
|
49
|
+
}
|
|
50
|
+
const original = readFileSync(filePath, "utf8");
|
|
51
|
+
validateNoMalformedYaml(original);
|
|
52
|
+
const keyLineIdx = findTopLevelKeyLine(original, key);
|
|
53
|
+
if (keyLineIdx === -1) {
|
|
54
|
+
const updated = appendKeyAtEnd(original, key, value);
|
|
55
|
+
return mutateWithBackup(filePath, original, updated);
|
|
56
|
+
}
|
|
57
|
+
const lines = original.split("\n");
|
|
58
|
+
const block = readListBlock(lines, keyLineIdx);
|
|
59
|
+
if (block.shape === "inline-list" || block.shape === "scalar") {
|
|
60
|
+
throw new IncompatibleConfigError(`key "${key}" is not a block-sequence (found ${block.shape})`);
|
|
61
|
+
}
|
|
62
|
+
if (block.shape === "empty-value") {
|
|
63
|
+
const replacement = `${key}:\n${DEFAULT_INDENT}- ${value}`;
|
|
64
|
+
const next = [...lines.slice(0, keyLineIdx), replacement, ...lines.slice(keyLineIdx + 1)];
|
|
65
|
+
return mutateWithBackup(filePath, original, next.join("\n"));
|
|
66
|
+
}
|
|
67
|
+
// block.shape === "block-list" — explicit guard keeps TS narrowing happy
|
|
68
|
+
// after the prior `===` checks against the discriminant.
|
|
69
|
+
if (block.shape !== "block-list") {
|
|
70
|
+
// Should be unreachable; treated as a defensive cast.
|
|
71
|
+
throw new Error(`internal: unexpected block shape "${block.shape}"`);
|
|
72
|
+
}
|
|
73
|
+
if (block.items.includes(value)) {
|
|
74
|
+
return { status: "already-present" };
|
|
75
|
+
}
|
|
76
|
+
const indent = block.indent;
|
|
77
|
+
const insertAt = block.endLineIdx + 1; // line after the last list item
|
|
78
|
+
const newLine = `${indent}- ${value}`;
|
|
79
|
+
const next = [...lines.slice(0, insertAt), newLine, ...lines.slice(insertAt)];
|
|
80
|
+
return mutateWithBackup(filePath, original, next.join("\n"));
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Internals
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
function validateNoMalformedYaml(text) {
|
|
86
|
+
// Tab indentation is illegal in YAML; flag any line that begins with a tab
|
|
87
|
+
// before its first non-whitespace char.
|
|
88
|
+
const lines = text.split("\n");
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
if (/^\t/.test(line)) {
|
|
91
|
+
throw new MalformedConfigError("tab indentation detected (YAML requires spaces)");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Unclosed double-quoted string: count unescaped `"` chars in the body.
|
|
95
|
+
// Odd count → unclosed. Backslash-escaped quotes are ignored.
|
|
96
|
+
const stripped = text.replace(/\\"/g, "");
|
|
97
|
+
const dq = (stripped.match(/"/g) ?? []).length;
|
|
98
|
+
if (dq % 2 === 1) {
|
|
99
|
+
throw new MalformedConfigError("unclosed double-quoted string");
|
|
100
|
+
}
|
|
101
|
+
const stripped2 = text.replace(/\\'/g, "");
|
|
102
|
+
const sq = (stripped2.match(/'/g) ?? []).length;
|
|
103
|
+
if (sq % 2 === 1) {
|
|
104
|
+
throw new MalformedConfigError("unclosed single-quoted string");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function findTopLevelKeyLine(text, key) {
|
|
108
|
+
const lines = text.split("\n");
|
|
109
|
+
// Top-level == zero indent. Tolerate optional trailing whitespace.
|
|
110
|
+
const re = new RegExp(`^${escapeRegex(key)}\\s*:`);
|
|
111
|
+
for (let i = 0; i < lines.length; i++) {
|
|
112
|
+
if (re.test(lines[i]))
|
|
113
|
+
return i;
|
|
114
|
+
}
|
|
115
|
+
return -1;
|
|
116
|
+
}
|
|
117
|
+
function readListBlock(lines, keyLineIdx) {
|
|
118
|
+
const keyLine = lines[keyLineIdx];
|
|
119
|
+
const afterColon = keyLine.split(":").slice(1).join(":").trim();
|
|
120
|
+
if (afterColon === "") {
|
|
121
|
+
// `key:` with nothing after → may be block-list OR empty.
|
|
122
|
+
// Look ahead for `<indent>- ` lines.
|
|
123
|
+
for (let i = keyLineIdx + 1; i < lines.length; i++) {
|
|
124
|
+
const ln = lines[i];
|
|
125
|
+
if (ln.trim() === "")
|
|
126
|
+
continue;
|
|
127
|
+
const m = ln.match(/^(\s+)- (.*)$/);
|
|
128
|
+
if (m) {
|
|
129
|
+
// Found first item — parse the entire block.
|
|
130
|
+
const indent = m[1];
|
|
131
|
+
const items = [];
|
|
132
|
+
let end = i;
|
|
133
|
+
for (let j = i; j < lines.length; j++) {
|
|
134
|
+
const item = lines[j].match(new RegExp(`^${indent}- (.*)$`));
|
|
135
|
+
if (!item) {
|
|
136
|
+
// Stop at first non-list line. Blank lines inside a block are
|
|
137
|
+
// unusual but tolerated — they don't advance `end`.
|
|
138
|
+
if (lines[j].trim() === "")
|
|
139
|
+
continue;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
items.push(item[1].trim());
|
|
143
|
+
end = j;
|
|
144
|
+
}
|
|
145
|
+
return { shape: "block-list", items, indent, endLineIdx: end };
|
|
146
|
+
}
|
|
147
|
+
// First non-blank line after `key:` is not a list item → empty value.
|
|
148
|
+
return { shape: "empty-value" };
|
|
149
|
+
}
|
|
150
|
+
return { shape: "empty-value" };
|
|
151
|
+
}
|
|
152
|
+
if (afterColon.startsWith("[")) {
|
|
153
|
+
return { shape: "inline-list" };
|
|
154
|
+
}
|
|
155
|
+
return { shape: "scalar" };
|
|
156
|
+
}
|
|
157
|
+
function appendKeyAtEnd(original, key, value) {
|
|
158
|
+
const needsLeadingNewline = original.length > 0 && !original.endsWith("\n");
|
|
159
|
+
const prefix = needsLeadingNewline ? `${original}\n` : original;
|
|
160
|
+
return `${prefix}${key}:\n${DEFAULT_INDENT}- ${value}\n`;
|
|
161
|
+
}
|
|
162
|
+
function mutateWithBackup(filePath, _original, next) {
|
|
163
|
+
const backupPath = pickBackupPath(filePath);
|
|
164
|
+
copyFileSync(filePath, backupPath);
|
|
165
|
+
// Normalize: ensure exactly one trailing newline.
|
|
166
|
+
const normalized = next.endsWith("\n") ? next : `${next}\n`;
|
|
167
|
+
writeFileSync(filePath, normalized);
|
|
168
|
+
return { status: "appended", backupPath };
|
|
169
|
+
}
|
|
170
|
+
function pickBackupPath(filePath) {
|
|
171
|
+
const base = `${filePath}.bak`;
|
|
172
|
+
if (!existsSync(base))
|
|
173
|
+
return base;
|
|
174
|
+
for (let n = 1; n < 1000; n++) {
|
|
175
|
+
const candidate = `${filePath}.bak.${n}`;
|
|
176
|
+
if (!existsSync(candidate))
|
|
177
|
+
return candidate;
|
|
178
|
+
}
|
|
179
|
+
throw new Error(`Could not allocate a free backup path for ${filePath}`);
|
|
180
|
+
}
|
|
181
|
+
function escapeRegex(s) {
|
|
182
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=yaml-safe-mutate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-safe-mutate.js","sourceRoot":"","sources":["../../src/installer/yaml-safe-mutate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface ActiveTenantOptions {
|
|
2
|
+
/** Override config dir (tests). Defaults to `~/.vskill`. */
|
|
3
|
+
configDir?: string;
|
|
4
|
+
/** Filesystem adapter for tests. */
|
|
5
|
+
fs?: ActiveTenantFs;
|
|
6
|
+
}
|
|
7
|
+
export interface ActiveTenantFs {
|
|
8
|
+
existsSync(path: string): boolean;
|
|
9
|
+
readFileSync(path: string): string;
|
|
10
|
+
writeFileSync(path: string, content: string, mode: number): void;
|
|
11
|
+
renameSync(oldPath: string, newPath: string): void;
|
|
12
|
+
mkdirSync(path: string): void;
|
|
13
|
+
unlinkSync(path: string): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Read the active tenant slug. Returns null when the config file is
|
|
17
|
+
* missing, unreadable, or has no `currentTenant` field.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getActiveTenant(opts?: ActiveTenantOptions): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Write the active tenant slug. Preserves unknown keys (read-modify-write
|
|
22
|
+
* merge, AC-US3-06) and uses an atomic .tmp + rename so a concurrent CLI
|
|
23
|
+
* + Studio write never observes a partial file.
|
|
24
|
+
*
|
|
25
|
+
* Pass `null` to clear `currentTenant` while preserving the rest of the
|
|
26
|
+
* config (e.g. `vskill orgs use --clear` later).
|
|
27
|
+
*/
|
|
28
|
+
export declare function setActiveTenant(slug: string | null, opts?: ActiveTenantOptions): void;
|
|
29
|
+
/**
|
|
30
|
+
* Read the entire config object (forward-compat — surfaces all keys, not
|
|
31
|
+
* just `currentTenant`). Returns an empty object when the file is missing
|
|
32
|
+
* or corrupt.
|
|
33
|
+
*/
|
|
34
|
+
export declare function readConfig(opts?: ActiveTenantOptions): Record<string, unknown>;
|
|
35
|
+
/** Resolve the path the helpers will read/write. Useful for diagnostics. */
|
|
36
|
+
export declare function getConfigPath(opts?: ActiveTenantOptions): string;
|