@kuznai/inception-engine 0.18.0 → 0.20.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.
Files changed (109) hide show
  1. package/README.md +72 -43
  2. package/dist/{config → src/config}/agents.js +174 -24
  3. package/dist/src/core/adapters/agent-definitions.d.ts +8 -0
  4. package/dist/src/core/adapters/agent-definitions.js +162 -0
  5. package/dist/{core → src/core}/adapters/frontmatter.d.ts +10 -0
  6. package/dist/{core → src/core}/adapters/frontmatter.js +23 -6
  7. package/dist/{core → src/core}/adapters/index.d.ts +1 -1
  8. package/dist/{core → src/core}/adapters/index.js +4 -4
  9. package/dist/{core → src/core}/adapters/mcp.d.ts +2 -2
  10. package/dist/{core → src/core}/adapters/mcp.js +21 -24
  11. package/dist/{core → src/core}/adapters/permissions.js +16 -20
  12. package/dist/{core → src/core}/adapters/rules.d.ts +2 -2
  13. package/dist/src/core/adapters/rules.js +126 -0
  14. package/dist/src/core/capabilities.d.ts +47 -0
  15. package/dist/src/core/capabilities.js +280 -0
  16. package/dist/{core → src/core}/deploy.d.ts +1 -1
  17. package/dist/{core → src/core}/deploy.js +273 -92
  18. package/dist/{core → src/core}/init.js +126 -52
  19. package/dist/src/core/merge-patch.d.ts +4 -0
  20. package/dist/src/core/merge-patch.js +46 -0
  21. package/dist/{core → src/core}/ownership.d.ts +2 -2
  22. package/dist/{core → src/core}/ownership.js +13 -0
  23. package/dist/{core → src/core}/preflight.d.ts +1 -1
  24. package/dist/src/core/preflight.js +280 -0
  25. package/dist/{core → src/core}/resolve.d.ts +1 -1
  26. package/dist/{core → src/core}/resolve.js +7 -4
  27. package/dist/{core → src/core}/revert.js +95 -33
  28. package/dist/{core → src/core}/runtime-paths.d.ts +2 -1
  29. package/dist/{core → src/core}/runtime-paths.js +30 -23
  30. package/dist/{core → src/core}/validation.d.ts +10 -1
  31. package/dist/{core → src/core}/validation.js +75 -0
  32. package/dist/src/formatters.d.ts +5 -0
  33. package/dist/src/formatters.js +58 -0
  34. package/dist/{index.js → src/index.js} +8 -24
  35. package/dist/src/logger.js +62 -0
  36. package/dist/{schemas → src/schemas}/manifest.d.ts +22 -0
  37. package/dist/{schemas → src/schemas}/manifest.js +19 -5
  38. package/dist/{schemas → src/schemas}/registry.d.ts +74 -0
  39. package/dist/{schemas → src/schemas}/registry.js +18 -3
  40. package/dist/{types.d.ts → src/types.d.ts} +60 -0
  41. package/dist/test/helpers/fs.d.ts +2 -0
  42. package/dist/test/helpers/fs.js +17 -0
  43. package/dist/test/helpers/path.d.ts +10 -0
  44. package/dist/test/helpers/path.js +15 -0
  45. package/dist/test/helpers/skill-dir-scenarios.d.ts +7 -0
  46. package/dist/test/helpers/skill-dir-scenarios.js +206 -0
  47. package/dist/test/helpers/skill-dir.d.ts +7 -0
  48. package/dist/test/helpers/skill-dir.js +46 -0
  49. package/dist/test/os/cross-platform/cross-platform.test.d.ts +1 -0
  50. package/dist/test/os/cross-platform/cross-platform.test.js +328 -0
  51. package/dist/test/os/posix/skill-dir.test.d.ts +1 -0
  52. package/dist/test/os/posix/skill-dir.test.js +19 -0
  53. package/dist/test/os/windows/revert-integration.test.d.ts +1 -0
  54. package/dist/test/os/windows/revert-integration.test.js +72 -0
  55. package/dist/test/os/windows/skill-dir.test.d.ts +1 -0
  56. package/dist/test/os/windows/skill-dir.test.js +19 -0
  57. package/dist/test/unit/adapters.test.d.ts +1 -0
  58. package/dist/test/unit/adapters.test.js +947 -0
  59. package/dist/test/unit/capabilities.test.d.ts +1 -0
  60. package/dist/test/unit/capabilities.test.js +71 -0
  61. package/dist/test/unit/cli.test.d.ts +1 -0
  62. package/dist/test/unit/cli.test.js +834 -0
  63. package/dist/test/unit/deploy.test.d.ts +1 -0
  64. package/dist/test/unit/deploy.test.js +2481 -0
  65. package/dist/test/unit/detect.test.d.ts +1 -0
  66. package/dist/test/unit/detect.test.js +192 -0
  67. package/dist/test/unit/enterprise.test.d.ts +1 -0
  68. package/dist/test/unit/enterprise.test.js +106 -0
  69. package/dist/test/unit/frontmatter.test.d.ts +1 -0
  70. package/dist/test/unit/frontmatter.test.js +102 -0
  71. package/dist/test/unit/gemini-north-star.test.d.ts +1 -0
  72. package/dist/test/unit/gemini-north-star.test.js +243 -0
  73. package/dist/test/unit/manifest.test.d.ts +1 -0
  74. package/dist/test/unit/manifest.test.js +737 -0
  75. package/dist/test/unit/migration-golden.test.d.ts +1 -0
  76. package/dist/test/unit/migration-golden.test.js +197 -0
  77. package/dist/test/unit/ownership.test.d.ts +1 -0
  78. package/dist/test/unit/ownership.test.js +587 -0
  79. package/dist/test/unit/preflight.test.d.ts +1 -0
  80. package/dist/test/unit/preflight.test.js +501 -0
  81. package/dist/test/unit/resolve.test.d.ts +1 -0
  82. package/dist/test/unit/resolve.test.js +119 -0
  83. package/dist/test/unit/revert.test.d.ts +1 -0
  84. package/dist/test/unit/revert.test.js +1004 -0
  85. package/dist/test/unit/toml.test.d.ts +1 -0
  86. package/dist/test/unit/toml.test.js +55 -0
  87. package/package.json +1 -1
  88. package/dist/core/adapters/agent-definitions.d.ts +0 -20
  89. package/dist/core/adapters/agent-definitions.js +0 -90
  90. package/dist/core/adapters/rules.js +0 -103
  91. package/dist/core/preflight.js +0 -98
  92. package/dist/logger.js +0 -61
  93. /package/dist/{config → src/config}/agents.d.ts +0 -0
  94. /package/dist/{config → src/config}/manifest.d.ts +0 -0
  95. /package/dist/{config → src/config}/manifest.js +0 -0
  96. /package/dist/{core → src/core}/adapters/permissions.d.ts +0 -0
  97. /package/dist/{core → src/core}/adapters/toml.d.ts +0 -0
  98. /package/dist/{core → src/core}/adapters/toml.js +0 -0
  99. /package/dist/{core → src/core}/detect.d.ts +0 -0
  100. /package/dist/{core → src/core}/detect.js +0 -0
  101. /package/dist/{core → src/core}/init.d.ts +0 -0
  102. /package/dist/{core → src/core}/revert.d.ts +0 -0
  103. /package/dist/{errors.d.ts → src/errors.d.ts} +0 -0
  104. /package/dist/{errors.js → src/errors.js} +0 -0
  105. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  106. /package/dist/{logger.d.ts → src/logger.d.ts} +0 -0
  107. /package/dist/{schemas → src/schemas}/errors.d.ts +0 -0
  108. /package/dist/{schemas → src/schemas}/errors.js +0 -0
  109. /package/dist/{types.js → src/types.js} +0 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,197 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { describe, it } from "node:test";
5
+ import { lookupDeployment, registerDeployment, registryPath, } from "../../src/core/ownership.js";
6
+ import { executeRevert } from "../../src/core/revert.js";
7
+ import { makeTmpDir } from "../helpers/fs.js";
8
+ function sanitizeRegistry(raw) {
9
+ const parsed = JSON.parse(raw);
10
+ for (const entry of Object.values(parsed.deployments)) {
11
+ if (typeof entry.deployed === "string") {
12
+ entry.deployed = "<timestamp>";
13
+ }
14
+ }
15
+ return parsed;
16
+ }
17
+ describe("migration golden", () => {
18
+ it("preserves a golden registry shape when ownership migrates targets", async () => {
19
+ const home = await makeTmpDir();
20
+ try {
21
+ const oldTarget = "/repo/.agents/rules/legacy-tool.md";
22
+ const newTarget = "/repo/.agents/rules/current-tool.md";
23
+ await registerDeployment(home, oldTarget, {
24
+ kind: "frontmatter-emit",
25
+ patch: { "mcp-servers": { tool: { command: "legacy" } } },
26
+ undoPatch: { "mcp-servers": null },
27
+ created: true,
28
+ hadFrontmatter: false,
29
+ skill: "tool",
30
+ agent: "antigravity",
31
+ });
32
+ await registerDeployment(home, newTarget, {
33
+ kind: "frontmatter-emit",
34
+ patch: { "mcp-servers": { tool: { command: "current" } } },
35
+ undoPatch: { "mcp-servers": null },
36
+ created: true,
37
+ hadFrontmatter: false,
38
+ skill: "tool",
39
+ agent: "antigravity",
40
+ migratedFrom: [oldTarget],
41
+ });
42
+ const registry = sanitizeRegistry(await readFile(registryPath(home), "utf-8"));
43
+ assert.deepEqual(registry, {
44
+ version: 1,
45
+ deployments: {
46
+ [newTarget]: {
47
+ kind: "frontmatter-emit",
48
+ patch: { "mcp-servers": { tool: { command: "current" } } },
49
+ undoPatch: { "mcp-servers": null },
50
+ created: true,
51
+ hadFrontmatter: false,
52
+ skill: "tool",
53
+ agent: "antigravity",
54
+ surfaceId: "frontmatter-emit:antigravity:tool",
55
+ migratedFrom: [oldTarget],
56
+ deployed: "<timestamp>",
57
+ },
58
+ },
59
+ });
60
+ }
61
+ finally {
62
+ await rm(home, { recursive: true, force: true });
63
+ }
64
+ });
65
+ it("reverts the migrated target and leaves the old target unmanaged", async () => {
66
+ const home = await makeTmpDir();
67
+ try {
68
+ const oldTarget = path.join(home, ".agents", "rules", "legacy-tool.md");
69
+ const newTarget = path.join(home, ".agents", "rules", "current-tool.md");
70
+ await mkdir(path.dirname(oldTarget), { recursive: true });
71
+ await writeFile(oldTarget, "# legacy\n");
72
+ await writeFile(newTarget, "---\nname: Shared\nmcp-servers:\n tool:\n command: current\n---\n\n# body\n");
73
+ await registerDeployment(home, oldTarget, {
74
+ kind: "frontmatter-emit",
75
+ patch: { "mcp-servers": { tool: { command: "legacy" } } },
76
+ undoPatch: { "mcp-servers": null },
77
+ created: true,
78
+ hadFrontmatter: false,
79
+ skill: "tool",
80
+ agent: "antigravity",
81
+ });
82
+ await registerDeployment(home, newTarget, {
83
+ kind: "frontmatter-emit",
84
+ patch: { "mcp-servers": { tool: { command: "current" } } },
85
+ undoPatch: { "mcp-servers": null },
86
+ created: false,
87
+ hadFrontmatter: true,
88
+ skill: "tool",
89
+ agent: "antigravity",
90
+ migratedFrom: [oldTarget],
91
+ });
92
+ const action = {
93
+ kind: "frontmatter-emit",
94
+ skill: "tool",
95
+ agent: "antigravity",
96
+ target: newTarget,
97
+ };
98
+ const result = await executeRevert([action], false, false, home);
99
+ assert.equal(result.succeeded, 1);
100
+ assert.equal(await lookupDeployment(home, oldTarget), null);
101
+ assert.equal(await lookupDeployment(home, newTarget), null);
102
+ assert.equal(await readFile(oldTarget, "utf-8"), "# legacy\n");
103
+ const reverted = await readFile(newTarget, "utf-8");
104
+ assert.match(reverted, /^---\nname: Shared\n---\n+/);
105
+ assert.match(reverted, /# body\n$/);
106
+ assert.doesNotMatch(reverted, /mcp-servers:/);
107
+ }
108
+ finally {
109
+ await rm(home, { recursive: true, force: true });
110
+ }
111
+ });
112
+ it("preserves a golden dry-run revert plan for migrated frontmatter targets", async () => {
113
+ const home = await makeTmpDir();
114
+ try {
115
+ const oldTarget = path.join(home, ".agents", "rules", "legacy-tool.md");
116
+ const newTarget = path.join(home, ".agents", "rules", "current-tool.md");
117
+ await mkdir(path.dirname(oldTarget), { recursive: true });
118
+ await writeFile(oldTarget, "# legacy\n");
119
+ await writeFile(newTarget, "---\nname: Shared\nmcp-servers:\n tool:\n command: current\n---\n\n# body\n");
120
+ await registerDeployment(home, oldTarget, {
121
+ kind: "frontmatter-emit",
122
+ patch: { "mcp-servers": { tool: { command: "legacy" } } },
123
+ undoPatch: { "mcp-servers": null },
124
+ created: true,
125
+ hadFrontmatter: false,
126
+ skill: "tool",
127
+ agent: "antigravity",
128
+ });
129
+ await registerDeployment(home, newTarget, {
130
+ kind: "frontmatter-emit",
131
+ patch: { "mcp-servers": { tool: { command: "current" } } },
132
+ undoPatch: { "mcp-servers": null },
133
+ created: false,
134
+ hadFrontmatter: true,
135
+ skill: "tool",
136
+ agent: "antigravity",
137
+ migratedFrom: [oldTarget],
138
+ });
139
+ const action = {
140
+ kind: "frontmatter-emit",
141
+ skill: "tool",
142
+ agent: "antigravity",
143
+ target: newTarget,
144
+ };
145
+ const result = await executeRevert([action], true, false, home);
146
+ assert.deepEqual(result.planned, [
147
+ {
148
+ verb: "unapply-patch",
149
+ kind: "frontmatter-emit",
150
+ skill: "tool",
151
+ agent: "antigravity",
152
+ target: newTarget,
153
+ patch: { "mcp-servers": null },
154
+ },
155
+ ]);
156
+ assert.equal(await lookupDeployment(home, oldTarget), null);
157
+ assert.ok(await readFile(newTarget, "utf-8"));
158
+ }
159
+ finally {
160
+ await rm(home, { recursive: true, force: true });
161
+ }
162
+ });
163
+ it("falls back to legacy whole-file revert for frontmatter entries without undoPatch", async () => {
164
+ const home = await makeTmpDir();
165
+ try {
166
+ const target = path.join(home, ".agents", "rules", "legacy-tool.md");
167
+ await mkdir(path.dirname(target), { recursive: true });
168
+ await writeFile(target, "---\nmcp-servers:\n tool:\n command: legacy\n---\n\n# old body\n");
169
+ const rawRegistry = {
170
+ version: 1,
171
+ deployments: {
172
+ [target]: {
173
+ kind: "frontmatter-emit",
174
+ skill: "tool",
175
+ agent: "antigravity",
176
+ deployed: "2026-01-01T00:00:00.000Z",
177
+ },
178
+ },
179
+ };
180
+ await mkdir(path.dirname(registryPath(home)), { recursive: true });
181
+ await writeFile(registryPath(home), `${JSON.stringify(rawRegistry, null, 2)}\n`);
182
+ const action = {
183
+ kind: "frontmatter-emit",
184
+ skill: "tool",
185
+ agent: "antigravity",
186
+ target,
187
+ };
188
+ const result = await executeRevert([action], false, false, home);
189
+ assert.equal(result.succeeded, 1);
190
+ await assert.rejects(() => readFile(target, "utf-8"));
191
+ assert.equal(await lookupDeployment(home, target), null);
192
+ }
193
+ finally {
194
+ await rm(home, { recursive: true, force: true });
195
+ }
196
+ });
197
+ });
@@ -0,0 +1 @@
1
+ export {};