@skillsmith/core 0.11.5 → 0.11.6

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.
Files changed (94) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +2 -2
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/api/client.d.ts.map +1 -1
  5. package/dist/src/api/client.js +5 -0
  6. package/dist/src/api/client.js.map +1 -1
  7. package/dist/src/api/client.test.js +39 -0
  8. package/dist/src/api/client.test.js.map +1 -1
  9. package/dist/src/compatibility/slugs.d.ts +7 -3
  10. package/dist/src/compatibility/slugs.d.ts.map +1 -1
  11. package/dist/src/compatibility/slugs.js +11 -4
  12. package/dist/src/compatibility/slugs.js.map +1 -1
  13. package/dist/src/db/drivers/sqljsDriver.d.ts +8 -0
  14. package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
  15. package/dist/src/db/drivers/sqljsDriver.js +24 -2
  16. package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
  17. package/dist/src/db/migration-runner.d.ts.map +1 -1
  18. package/dist/src/db/migration-runner.js +23 -2
  19. package/dist/src/db/migration-runner.js.map +1 -1
  20. package/dist/src/db/schema.d.ts.map +1 -1
  21. package/dist/src/db/schema.js +29 -3
  22. package/dist/src/db/schema.js.map +1 -1
  23. package/dist/src/exports/services.d.ts +1 -0
  24. package/dist/src/exports/services.d.ts.map +1 -1
  25. package/dist/src/exports/services.js +5 -0
  26. package/dist/src/exports/services.js.map +1 -1
  27. package/dist/src/index.d.ts +1 -1
  28. package/dist/src/index.js +1 -1
  29. package/dist/src/install/index.d.ts +2 -2
  30. package/dist/src/install/index.d.ts.map +1 -1
  31. package/dist/src/install/index.js +1 -1
  32. package/dist/src/install/index.js.map +1 -1
  33. package/dist/src/install/paths.d.ts +155 -1
  34. package/dist/src/install/paths.d.ts.map +1 -1
  35. package/dist/src/install/paths.js +235 -1
  36. package/dist/src/install/paths.js.map +1 -1
  37. package/dist/src/install/paths.test.js +174 -2
  38. package/dist/src/install/paths.test.js.map +1 -1
  39. package/dist/src/services/context-words.d.ts +40 -0
  40. package/dist/src/services/context-words.d.ts.map +1 -0
  41. package/dist/src/services/context-words.js +178 -0
  42. package/dist/src/services/context-words.js.map +1 -0
  43. package/dist/src/services/context-words.test.d.ts +2 -0
  44. package/dist/src/services/context-words.test.d.ts.map +1 -0
  45. package/dist/src/services/context-words.test.js +94 -0
  46. package/dist/src/services/context-words.test.js.map +1 -0
  47. package/dist/src/services/skill-installation.content.d.ts +8 -0
  48. package/dist/src/services/skill-installation.content.d.ts.map +1 -1
  49. package/dist/src/services/skill-installation.content.js +2 -2
  50. package/dist/src/services/skill-installation.content.js.map +1 -1
  51. package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
  52. package/dist/src/services/skill-installation.helpers.js +24 -2
  53. package/dist/src/services/skill-installation.helpers.js.map +1 -1
  54. package/dist/src/services/skill-installation.helpers.test.js +76 -2
  55. package/dist/src/services/skill-installation.helpers.test.js.map +1 -1
  56. package/dist/src/services/skill-installation.io.d.ts +22 -1
  57. package/dist/src/services/skill-installation.io.d.ts.map +1 -1
  58. package/dist/src/services/skill-installation.io.js +36 -5
  59. package/dist/src/services/skill-installation.io.js.map +1 -1
  60. package/dist/src/services/skill-installation.service.d.ts +2 -0
  61. package/dist/src/services/skill-installation.service.d.ts.map +1 -1
  62. package/dist/src/services/skill-installation.service.js +4 -1
  63. package/dist/src/services/skill-installation.service.js.map +1 -1
  64. package/dist/src/services/skill-manifest.d.ts +21 -0
  65. package/dist/src/services/skill-manifest.d.ts.map +1 -1
  66. package/dist/src/services/skill-manifest.js +51 -6
  67. package/dist/src/services/skill-manifest.js.map +1 -1
  68. package/dist/src/services/skill-manifest.test.d.ts +2 -0
  69. package/dist/src/services/skill-manifest.test.d.ts.map +1 -0
  70. package/dist/src/services/skill-manifest.test.js +202 -0
  71. package/dist/src/services/skill-manifest.test.js.map +1 -0
  72. package/dist/src/types/skill.d.ts +10 -0
  73. package/dist/src/types/skill.d.ts.map +1 -1
  74. package/dist/src/types.d.ts +9 -5
  75. package/dist/src/types.d.ts.map +1 -1
  76. package/dist/tests/db/migration-runner-race.test.d.ts +2 -0
  77. package/dist/tests/db/migration-runner-race.test.d.ts.map +1 -0
  78. package/dist/tests/db/migration-runner-race.test.js +75 -0
  79. package/dist/tests/db/migration-runner-race.test.js.map +1 -0
  80. package/dist/tests/db/schema-async.test.js +37 -1
  81. package/dist/tests/db/schema-async.test.js.map +1 -1
  82. package/dist/tests/db/sqljsDriver.test.js +63 -1
  83. package/dist/tests/db/sqljsDriver.test.js.map +1 -1
  84. package/dist/tests/schema.test.js +43 -1
  85. package/dist/tests/schema.test.js.map +1 -1
  86. package/dist/tests/unit/services/skill-installation.io.client-agent-path.test.d.ts +34 -0
  87. package/dist/tests/unit/services/skill-installation.io.client-agent-path.test.d.ts.map +1 -0
  88. package/dist/tests/unit/services/skill-installation.io.client-agent-path.test.js +246 -0
  89. package/dist/tests/unit/services/skill-installation.io.client-agent-path.test.js.map +1 -0
  90. package/dist/tests/unit/services/skill-installation.service.companion-basedir.test.d.ts +17 -0
  91. package/dist/tests/unit/services/skill-installation.service.companion-basedir.test.d.ts.map +1 -0
  92. package/dist/tests/unit/services/skill-installation.service.companion-basedir.test.js +112 -0
  93. package/dist/tests/unit/services/skill-installation.service.companion-basedir.test.js.map +1 -0
  94. package/package.json +1 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * SMI-5982 code-review fix #1 (BLOCKING, cwd-dependent resolution):
3
+ * `SkillInstallationService`'s `companionBaseDir` constructor param must
4
+ * thread all the way through `install()` -> `writeInstallFiles()` ->
5
+ * `resolveCompanionAgentPath()` so the Antigravity companion-agent file
6
+ * lands under an explicitly-passed root, not whatever `process.cwd()`
7
+ * happens to be at the moment the write actually runs — the exact hazard
8
+ * for a long-running MCP server whose cwd is fixed at launch and does not
9
+ * track the calling editor/agent's real project.
10
+ *
11
+ * `applyOptimization` (skill-installation.helpers.ts) is mocked to force a
12
+ * deterministic `subagentContent` without depending on the real
13
+ * TransformationService's content-shape heuristics — this test is about
14
+ * PATH WIRING, not optimization behavior, which is covered elsewhere.
15
+ */
16
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
17
+ import * as fs from 'fs/promises';
18
+ import * as path from 'path';
19
+ import * as os from 'node:os';
20
+ vi.mock('../../../src/services/skill-installation.helpers.js', async (importOriginal) => {
21
+ const actual = await importOriginal();
22
+ return {
23
+ ...actual,
24
+ applyOptimization: vi.fn(async (_db, _skillId, skillName, skillMdContent) => ({
25
+ finalSkillContent: skillMdContent,
26
+ subSkillFiles: [],
27
+ subagentContent: `---\nname: ${skillName}-specialist\n---\nCompanion subagent body`,
28
+ claudeMdSnippet: undefined,
29
+ optimizationInfo: {
30
+ optimized: true,
31
+ subSkills: [],
32
+ subagentGenerated: true,
33
+ },
34
+ })),
35
+ };
36
+ });
37
+ import { SkillInstallationService } from '../../../src/services/skill-installation.service.js';
38
+ import { SkillRepository } from '../../../src/repositories/SkillRepository.js';
39
+ import { SkillDependencyRepository } from '../../../src/repositories/SkillDependencyRepository.js';
40
+ import { createTestDatabase } from '../../helpers/database.js';
41
+ const VALID_SKILL_MD = '---\nname: my-skill\ndescription: test skill for SMI-5982 companionBaseDir wiring\n---\n\n' +
42
+ '# My Skill\n\nEnough content here to clear the 100-character minimum validation threshold ' +
43
+ 'the installer enforces before proceeding with the rest of the install pipeline.';
44
+ describe('SkillInstallationService companionBaseDir wiring (SMI-5982 code-review fix #1)', () => {
45
+ let db;
46
+ let originalCwd;
47
+ let projectDir;
48
+ let skillsDir;
49
+ let manifestPath;
50
+ beforeEach(async () => {
51
+ db = await createTestDatabase();
52
+ originalCwd = process.cwd();
53
+ projectDir = await fs.mkdtemp(path.join(os.tmpdir(), 'skillsmith-service-companion-basedir-'));
54
+ process.chdir(projectDir);
55
+ skillsDir = path.join(projectDir, 'skills');
56
+ manifestPath = path.join(projectDir, 'manifest.json');
57
+ await fs.mkdir(skillsDir, { recursive: true });
58
+ vi.stubGlobal('fetch', vi.fn());
59
+ vi.mocked(fetch).mockImplementation(async (url) => {
60
+ const urlStr = typeof url === 'string' ? url : url.toString();
61
+ if (urlStr.includes('SKILL.md')) {
62
+ return new Response(VALID_SKILL_MD, { status: 200 });
63
+ }
64
+ return new Response('Not found', { status: 404 });
65
+ });
66
+ });
67
+ afterEach(async () => {
68
+ process.chdir(originalCwd);
69
+ db.close();
70
+ vi.restoreAllMocks();
71
+ await fs.rm(projectDir, { recursive: true, force: true }).catch(() => { });
72
+ });
73
+ function buildService(overrides = {}) {
74
+ return new SkillInstallationService({
75
+ db,
76
+ skillRepo: new SkillRepository(db),
77
+ skillDependencyRepo: new SkillDependencyRepository(db),
78
+ skillsDir,
79
+ manifestPath,
80
+ client: 'antigravity',
81
+ ...overrides,
82
+ });
83
+ }
84
+ it('lands the antigravity companion file under an explicit companionBaseDir, not process.cwd()', async () => {
85
+ const explicitBaseDir = await fs.mkdtemp(path.join(os.tmpdir(), 'skillsmith-service-explicit-basedir-'));
86
+ try {
87
+ const service = buildService({ companionBaseDir: explicitBaseDir });
88
+ const result = await service.install('https://github.com/owner/my-skill');
89
+ expect(result.success).toBe(true);
90
+ const expectedPath = path.join(explicitBaseDir, '.agents', 'agents', 'my-skill', 'agent.md');
91
+ expect(result.optimization?.subagentPath).toBe(expectedPath);
92
+ await expect(fs.access(expectedPath)).resolves.toBeUndefined();
93
+ // Must NOT have landed under process.cwd() (this describe block's projectDir) —
94
+ // the whole point of the fix.
95
+ expect(result.optimization?.subagentPath?.startsWith(projectDir)).toBe(false);
96
+ }
97
+ finally {
98
+ await fs.rm(explicitBaseDir, { recursive: true, force: true }).catch(() => { });
99
+ }
100
+ });
101
+ it('PR-review follow-up: omitting companionBaseDir now fails the install closed instead of silently defaulting to process.cwd()', async () => {
102
+ const service = buildService(); // companionBaseDir omitted
103
+ const result = await service.install('https://github.com/owner/my-skill');
104
+ expect(result.success).toBe(false);
105
+ expect(result.error).toMatch(/directory-package mode.*explicit baseDir is required/s);
106
+ // Nothing must have been written anywhere under projectDir (this describe
107
+ // block's process.cwd()) — the whole point of the fix is that a missing
108
+ // companionBaseDir can no longer resolve here at all, not even by accident.
109
+ await expect(fs.access(path.join(projectDir, '.agents'))).rejects.toThrow();
110
+ });
111
+ });
112
+ //# sourceMappingURL=skill-installation.service.companion-basedir.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-installation.service.companion-basedir.test.js","sourceRoot":"","sources":["../../../../tests/unit/services/skill-installation.service.companion-basedir.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillsmith/core",
3
- "version": "0.11.5",
3
+ "version": "0.11.6",
4
4
  "description": "Publish versioned agent skills to a team-scoped registry, catch drift across installs, and deprecate what's gone stale.",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",