@amsterdamdatalabs/enact-extensions 0.1.10 → 0.1.24

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 (152) hide show
  1. package/README.md +11 -12
  2. package/dist/create/claude.d.ts.map +1 -1
  3. package/dist/create/claude.js +6 -2
  4. package/dist/create/claude.js.map +1 -1
  5. package/dist/create/cursor.d.ts.map +1 -1
  6. package/dist/create/cursor.js +6 -2
  7. package/dist/create/cursor.js.map +1 -1
  8. package/dist/create/enact.js +1 -1
  9. package/dist/create/enact.js.map +1 -1
  10. package/dist/create/index.d.ts +4 -3
  11. package/dist/create/index.d.ts.map +1 -1
  12. package/dist/create/index.js +9 -2
  13. package/dist/create/index.js.map +1 -1
  14. package/dist/index.d.ts +9 -6
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +5 -4
  17. package/dist/index.js.map +1 -1
  18. package/dist/install.d.ts +5 -0
  19. package/dist/install.d.ts.map +1 -1
  20. package/dist/install.js +91 -11
  21. package/dist/install.js.map +1 -1
  22. package/dist/internal/agents.d.ts +25 -1
  23. package/dist/internal/agents.d.ts.map +1 -1
  24. package/dist/internal/agents.js +81 -4
  25. package/dist/internal/agents.js.map +1 -1
  26. package/dist/internal/claude.d.ts +49 -0
  27. package/dist/internal/claude.d.ts.map +1 -1
  28. package/dist/internal/claude.js +166 -1
  29. package/dist/internal/claude.js.map +1 -1
  30. package/dist/internal/platform.d.ts +11 -1
  31. package/dist/internal/platform.d.ts.map +1 -1
  32. package/dist/internal/platform.js +58 -1
  33. package/dist/internal/platform.js.map +1 -1
  34. package/dist/internal/types.d.ts +2 -1
  35. package/dist/internal/types.d.ts.map +1 -1
  36. package/dist/principles.d.ts +28 -0
  37. package/dist/principles.d.ts.map +1 -0
  38. package/dist/principles.js +159 -0
  39. package/dist/principles.js.map +1 -0
  40. package/extensions/dev-state/.agents/plugin.json +2 -1
  41. package/extensions/enact-context/.agents/plugin.json +2 -1
  42. package/extensions/enact-context/hooks/hooks.json +0 -10
  43. package/extensions/enact-context/skills/enact-context/SKILL.md +14 -12
  44. package/extensions/enact-context/skills/enact-context/scripts/install.sh +7 -7
  45. package/extensions/enact-core/.agents/plugin.json +2 -1
  46. package/extensions/enact-core/OPERATING-PRINCIPLES.md +7 -0
  47. package/extensions/enact-core/hooks/hooks.json +12 -0
  48. package/extensions/enact-evolve/.agents/plugin.json +47 -0
  49. package/extensions/enact-evolve/agents/evolve-session-analyst.toml +37 -0
  50. package/extensions/enact-evolve/skills/session-analysis/SKILL.md +98 -0
  51. package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +343 -0
  52. package/extensions/enact-factory/.agents/plugin.json +2 -1
  53. package/extensions/enact-factory/agents/architect.toml +9 -5
  54. package/extensions/enact-factory/agents/code-reviewer.toml +9 -5
  55. package/extensions/enact-factory/agents/critic.toml +9 -5
  56. package/extensions/enact-factory/agents/executor.toml +4 -1
  57. package/extensions/enact-factory/agents/explore.toml +4 -1
  58. package/extensions/enact-factory/agents/planner.toml +4 -1
  59. package/extensions/enact-factory/agents/verifier.toml +9 -5
  60. package/extensions/enact-factory/skills/advisor/SKILL.md +82 -0
  61. package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +6 -1
  62. package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +347 -0
  63. package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +62 -15
  64. package/extensions/enact-factory/skills/committee/SKILL.md +80 -0
  65. package/extensions/enact-factory/skills/deep-interview/SKILL.md +9 -13
  66. package/extensions/enact-factory/skills/drive-loop/SKILL.md +161 -31
  67. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +26 -6
  68. package/extensions/enact-factory/skills/handoff/SKILL.md +72 -0
  69. package/extensions/enact-factory/skills/hyperplan/SKILL.md +11 -3
  70. package/extensions/enact-factory/skills/looplan/SKILL.md +34 -17
  71. package/extensions/enact-factory/skills/plan/SKILL.md +40 -8
  72. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +6 -1
  73. package/extensions/enact-factory/skills/research/SKILL.md +14 -4
  74. package/extensions/enact-factory/skills/review/SKILL.md +21 -2
  75. package/extensions/enact-factory/skills/security-research/SKILL.md +5 -2
  76. package/extensions/enact-factory/skills/tdd/SKILL.md +7 -1
  77. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +5 -0
  78. package/extensions/enact-factory/skills/trace/SKILL.md +5 -0
  79. package/extensions/enact-factory/skills/ultraqa/SKILL.md +21 -15
  80. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +5 -0
  81. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +5 -0
  82. package/extensions/enact-loop/.agents/plugin.json +5 -4
  83. package/extensions/enact-loop/scripts/validate.mjs +123 -0
  84. package/extensions/enact-loop/skills/enact-loop/SKILL.md +189 -30
  85. package/extensions/enact-wiki/.agents/plugin.json +2 -1
  86. package/extensions/net-revenue-management/.agents/plugin.json +2 -1
  87. package/extensions/plugin-dev/.agents/plugin.json +2 -1
  88. package/extensions/plugin-dev/skills/start/SKILL.md +3 -3
  89. package/package.json +1 -1
  90. package/scripts/check-hooks.mjs +5 -5
  91. package/scripts/check-principles.mjs +19 -4
  92. package/scripts/enact-extensions.mjs +237 -90
  93. package/scripts/lib/hooks.mjs +61 -217
  94. package/scripts/lib/migrate-artifacts.mjs +144 -0
  95. package/scripts/lib/principles.mjs +109 -0
  96. package/scripts/lib/provision-mcp.mjs +1 -1
  97. package/scripts/lib/run-install.mjs +72 -2
  98. package/scripts/lib/run-prune.mjs +23 -2
  99. package/scripts/lib/run-sync.mjs +4 -1
  100. package/scripts/postinstall.mjs +6 -6
  101. package/scripts/setup-enact-context.sh +20 -15
  102. package/spec/codex.json +5 -0
  103. package/spec/enact.json +3 -3
  104. package/spec/enact.md +1 -4
  105. package/spec/index.json +1 -1
  106. package/extensions/enact-operator/.agents/plugin.json +0 -56
  107. package/extensions/enact-operator/.app.json +0 -3
  108. package/extensions/enact-operator/.mcp.json +0 -10
  109. package/extensions/enact-operator/_taxonomy.md +0 -86
  110. package/extensions/enact-operator/agents/README.md +0 -5
  111. package/extensions/enact-operator/agents/architect.toml +0 -25
  112. package/extensions/enact-operator/agents/code-reviewer.toml +0 -24
  113. package/extensions/enact-operator/agents/critic.toml +0 -30
  114. package/extensions/enact-operator/agents/executor.toml +0 -24
  115. package/extensions/enact-operator/agents/explore.toml +0 -23
  116. package/extensions/enact-operator/agents/planner.toml +0 -24
  117. package/extensions/enact-operator/agents/verifier.toml +0 -24
  118. package/extensions/enact-operator/docs/skill-variants.md +0 -44
  119. package/extensions/enact-operator/hooks/hooks.json +0 -91
  120. package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +0 -50
  121. package/extensions/enact-operator/skills/analyze/SKILL.md +0 -91
  122. package/extensions/enact-operator/skills/ask/SKILL.md +0 -47
  123. package/extensions/enact-operator/skills/autopilot/SKILL.md +0 -170
  124. package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +0 -79
  125. package/extensions/enact-operator/skills/cancel/SKILL.md +0 -99
  126. package/extensions/enact-operator/skills/configure-notifications/SKILL.md +0 -77
  127. package/extensions/enact-operator/skills/deep-interview/SKILL.md +0 -80
  128. package/extensions/enact-operator/skills/doctor/SKILL.md +0 -48
  129. package/extensions/enact-operator/skills/hud/SKILL.md +0 -49
  130. package/extensions/enact-operator/skills/hyperplan/SKILL.md +0 -47
  131. package/extensions/enact-operator/skills/plan/SKILL.md +0 -78
  132. package/extensions/enact-operator/skills/ralph/SKILL.md +0 -201
  133. package/extensions/enact-operator/skills/ralph/gemini.md +0 -18
  134. package/extensions/enact-operator/skills/ralplan/SKILL.md +0 -151
  135. package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +0 -45
  136. package/extensions/enact-operator/skills/research/SKILL.md +0 -74
  137. package/extensions/enact-operator/skills/review/SKILL.md +0 -58
  138. package/extensions/enact-operator/skills/security-research/SKILL.md +0 -54
  139. package/extensions/enact-operator/skills/setup/SKILL.md +0 -91
  140. package/extensions/enact-operator/skills/setup/scripts/install.sh +0 -50
  141. package/extensions/enact-operator/skills/skill/SKILL.md +0 -82
  142. package/extensions/enact-operator/skills/tdd/SKILL.md +0 -59
  143. package/extensions/enact-operator/skills/team/SKILL.md +0 -199
  144. package/extensions/enact-operator/skills/trace/SKILL.md +0 -41
  145. package/extensions/enact-operator/skills/ultragoal/SKILL.md +0 -99
  146. package/extensions/enact-operator/skills/ultraqa/SKILL.md +0 -113
  147. package/extensions/enact-operator/skills/ultrawork/SKILL.md +0 -145
  148. package/extensions/enact-operator/skills/ultrawork/planner.md +0 -28
  149. package/extensions/enact-operator/skills/wiki/SKILL.md +0 -41
  150. package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +0 -51
  151. /package/extensions/{enact-operator → enact-evolve}/assets/icon.png +0 -0
  152. /package/extensions/{enact-operator → enact-evolve}/assets/logo.png +0 -0
@@ -76,6 +76,7 @@ export const MANIFEST_FIELDS = {
76
76
  "license",
77
77
  "keywords",
78
78
  "skills",
79
+ "agents",
79
80
  "mcpServers",
80
81
  "apps",
81
82
  "hooks",
@@ -132,6 +133,7 @@ export const PROJECTION_COMPONENT_FIELDS = {
132
133
  ],
133
134
  codex: [
134
135
  "skills",
136
+ "agents",
135
137
  "hooks",
136
138
  "mcpServers",
137
139
  "apps",
@@ -145,7 +147,8 @@ export const PROJECTION_COMPONENT_FIELDS = {
145
147
  "mcpServers",
146
148
  ],
147
149
  };
148
- export const DEFAULT_TARGETS = ["claude", "codex", "cursor"];
150
+ export const DEFAULT_TARGETS = ["claude", "codex", "cursor", "enact"];
151
+ export const DEFAULT_PROJECTION_TARGETS = ["claude", "codex", "cursor"];
149
152
  export const DEFAULT_PATHS = {
150
153
  skills: "./skills/",
151
154
  agents: "./agents/",
@@ -154,11 +157,65 @@ export const DEFAULT_PATHS = {
154
157
  mcpServers: "./.mcp.json",
155
158
  apps: "./.app.json",
156
159
  };
160
+ /**
161
+ * Per-platform default component-path values. When a manifest field equals its
162
+ * platform default, the host AUTO-DISCOVERS the component from the conventional
163
+ * location and listing the path explicitly is at best redundant and at worst
164
+ * fatal:
165
+ * - Claude: explicit `"hooks":"./hooks/hooks.json"` → "Duplicate hooks";
166
+ * `"agents":"./agents/"` → "agents: Invalid input".
167
+ * - Cursor: the manifest must omit these and emit the MCP file as `mcp.json`.
168
+ * The canonical Enact manifest keeps the fields (E2 requires components on disk
169
+ * to be declared); we strip them only from the DERIVED per-surface manifest.
170
+ *
171
+ * `mcpServers` for Cursor defaults to the (no-dot) `./mcp.json` to match the
172
+ * Cursor convention; see DEFAULT_MCP_FILENAME.
173
+ */
174
+ const PLATFORM_DEFAULT_PATHS = {
175
+ claude: {
176
+ skills: ["./skills/", "skills/", "./skills", "skills"],
177
+ agents: ["./agents/", "agents/", "./agents", "agents"],
178
+ hooks: ["./hooks/hooks.json", "hooks/hooks.json"],
179
+ mcpServers: ["./.mcp.json", ".mcp.json"],
180
+ },
181
+ cursor: {
182
+ skills: ["./skills/", "skills/", "./skills", "skills"],
183
+ agents: ["./agents/", "agents/", "./agents", "agents"],
184
+ hooks: ["./hooks/hooks.json", "hooks/hooks.json", "./hooks/", "hooks/"],
185
+ mcpServers: ["./.mcp.json", ".mcp.json", "./mcp.json", "mcp.json"],
186
+ },
187
+ };
188
+ /** Default MCP config filename per platform (relative to plugin root). */
189
+ export const DEFAULT_MCP_FILENAME = {
190
+ claude: ".mcp.json",
191
+ cursor: "mcp.json",
192
+ };
193
+ /**
194
+ * Drop component path fields from a DERIVED per-surface manifest when they point
195
+ * at that platform's default (auto-discovered) location. Returns a shallow copy;
196
+ * the input is not mutated. Non-default overrides are preserved.
197
+ */
198
+ export function stripDefaultPathFields(platform, manifest) {
199
+ const defaults = PLATFORM_DEFAULT_PATHS[platform];
200
+ if (!defaults)
201
+ return { ...manifest };
202
+ const out = { ...manifest };
203
+ for (const [field, values] of Object.entries(defaults)) {
204
+ const value = out[field];
205
+ if (typeof value === "string" && values.includes(value)) {
206
+ delete out[field];
207
+ }
208
+ }
209
+ return out;
210
+ }
157
211
  export function manifestRelPath(platform) {
158
212
  const { directory, filename } = MANIFEST_BY_PLATFORM[platform];
159
213
  return `${directory}/${filename}`;
160
214
  }
161
215
  export function isTargetPlatform(value) {
216
+ return value === "claude" || value === "codex" || value === "cursor" || value === "enact";
217
+ }
218
+ export function isProjectionPlatform(value) {
162
219
  return value === "claude" || value === "codex" || value === "cursor";
163
220
  }
164
221
  //# sourceMappingURL=platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/internal/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/internal/platform.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export type Platform = "enact" | "claude" | "codex" | "cursor";
2
- export type TargetPlatform = Exclude<Platform, "enact">;
2
+ export type ProjectionPlatform = Exclude<Platform, "enact">;
3
+ export type TargetPlatform = Platform;
3
4
  export type PluginManifest = Record<string, unknown>;
4
5
  export type ValidationResult = {
5
6
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;KAClD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEtC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;KAClD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const PRINCIPLES_START_MARKER = "<!-- enact-core:operating-principles START -->";
2
+ export declare const PRINCIPLES_END_MARKER = "<!-- enact-core:operating-principles END -->";
3
+ export declare const SUPPORTED_PRINCIPLES_SURFACES: readonly ["claude", "codex", "cursor", "enact"];
4
+ export type PrinciplesSurface = (typeof SUPPORTED_PRINCIPLES_SURFACES)[number];
5
+ export type BlockStatus = "present" | "missing" | "stale";
6
+ export type ApplyAction = "created" | "updated" | "noop";
7
+ export interface ResolveHostFileOptions {
8
+ claudeHome?: string;
9
+ codexHome?: string;
10
+ cursorHome?: string;
11
+ enactHome?: string;
12
+ local?: boolean;
13
+ cwd?: string;
14
+ }
15
+ export interface ApplyBlockResult {
16
+ changed: boolean;
17
+ action: ApplyAction;
18
+ }
19
+ export interface RemoveBlockResult {
20
+ removed: boolean;
21
+ }
22
+ export declare function resolveHostFile(surface: PrinciplesSurface, opts?: ResolveHostFileOptions): string;
23
+ export declare function defaultDoctrinePath(): string;
24
+ export declare function renderBlock(doctrinePath?: string): string;
25
+ export declare function applyBlock(hostFile: string, block: string): ApplyBlockResult;
26
+ export declare function removeBlock(hostFile: string): RemoveBlockResult;
27
+ export declare function checkBlock(hostFile: string, expectedBlock: string): BlockStatus;
28
+ //# sourceMappingURL=principles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principles.d.ts","sourceRoot":"","sources":["../src/principles.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,uBAAuB,mDACc,CAAC;AACnD,eAAO,MAAM,qBAAqB,iDACc,CAAC;AAEjD,eAAO,MAAM,6BAA6B,iDAKhC,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAgED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAER;AA8CD,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,WAAW,CAAC,YAAY,SAAwB,GAAG,MAAM,CAYxE;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAyBlB;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAU/D;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,WAAW,CAUb"}
@@ -0,0 +1,159 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ export const PRINCIPLES_START_MARKER = "<!-- enact-core:operating-principles START -->";
6
+ export const PRINCIPLES_END_MARKER = "<!-- enact-core:operating-principles END -->";
7
+ export const SUPPORTED_PRINCIPLES_SURFACES = [
8
+ "claude",
9
+ "codex",
10
+ "cursor",
11
+ "enact",
12
+ ];
13
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
14
+ const DEFAULT_DOCTRINE_PATH = join(packageRoot, "extensions", "enact-core", "OPERATING-PRINCIPLES.md");
15
+ function defaultHome(surface) {
16
+ const home = homedir();
17
+ switch (surface) {
18
+ case "claude":
19
+ return join(home, ".claude");
20
+ case "codex":
21
+ return join(home, ".codex");
22
+ case "enact":
23
+ return join(home, ".enact", "agent");
24
+ case "cursor":
25
+ return join(home, ".cursor");
26
+ default:
27
+ throw new Error(`Unknown surface: ${surface}`);
28
+ }
29
+ }
30
+ function hostFileName(surface) {
31
+ return surface === "claude" ? "CLAUDE.md" : "AGENTS.md";
32
+ }
33
+ function resolveHome(surface, opts = {}) {
34
+ const cwd = opts.cwd ?? process.cwd();
35
+ if (opts.local) {
36
+ switch (surface) {
37
+ case "claude":
38
+ return opts.claudeHome ?? join(cwd, ".claude");
39
+ case "codex":
40
+ return opts.codexHome ?? join(cwd, ".codex");
41
+ case "cursor":
42
+ return opts.cursorHome ?? join(cwd, ".cursor");
43
+ case "enact":
44
+ return opts.enactHome ?? join(cwd, ".enact", "agent");
45
+ default:
46
+ throw new Error(`Unknown surface: ${surface}`);
47
+ }
48
+ }
49
+ switch (surface) {
50
+ case "claude":
51
+ return opts.claudeHome ?? defaultHome("claude");
52
+ case "codex":
53
+ return opts.codexHome ?? defaultHome("codex");
54
+ case "cursor":
55
+ return opts.cursorHome ?? defaultHome("cursor");
56
+ case "enact":
57
+ return opts.enactHome ?? defaultHome("enact");
58
+ default:
59
+ throw new Error(`Unknown surface: ${surface}`);
60
+ }
61
+ }
62
+ export function resolveHostFile(surface, opts = {}) {
63
+ return join(resolveHome(surface, opts), hostFileName(surface));
64
+ }
65
+ function normalizeInner(content) {
66
+ return content.replace(/\r\n/g, "\n").trim();
67
+ }
68
+ function readHostFile(hostFile) {
69
+ if (!existsSync(hostFile))
70
+ return "";
71
+ return readFileSync(hostFile, "utf8");
72
+ }
73
+ function writeHostFile(hostFile, content) {
74
+ try {
75
+ mkdirSync(dirname(hostFile), { recursive: true });
76
+ writeFileSync(hostFile, content, "utf8");
77
+ }
78
+ catch (err) {
79
+ const message = err instanceof Error ? err.message : String(err);
80
+ throw new Error(`Failed to write host file ${hostFile}: ${message}`);
81
+ }
82
+ }
83
+ function extractManagedBlock(content) {
84
+ const start = content.indexOf(PRINCIPLES_START_MARKER);
85
+ if (start === -1)
86
+ return null;
87
+ const end = content.indexOf(PRINCIPLES_END_MARKER, start);
88
+ if (end === -1)
89
+ return null;
90
+ const innerStart = start + PRINCIPLES_START_MARKER.length;
91
+ return {
92
+ start,
93
+ end: end + PRINCIPLES_END_MARKER.length,
94
+ inner: content.slice(innerStart, end),
95
+ };
96
+ }
97
+ function extractInnerFromBlock(block) {
98
+ const managed = extractManagedBlock(block);
99
+ if (!managed) {
100
+ throw new Error("Principles block is missing managed markers");
101
+ }
102
+ return managed.inner;
103
+ }
104
+ export function defaultDoctrinePath() {
105
+ return DEFAULT_DOCTRINE_PATH;
106
+ }
107
+ export function renderBlock(doctrinePath = DEFAULT_DOCTRINE_PATH) {
108
+ if (!existsSync(doctrinePath)) {
109
+ throw new Error(`Doctrine file not found: ${doctrinePath}`);
110
+ }
111
+ const raw = readFileSync(doctrinePath, "utf8").replace(/\r\n/g, "\n").trim();
112
+ const managed = extractManagedBlock(raw);
113
+ if (!managed) {
114
+ throw new Error(`Doctrine file missing managed markers: ${doctrinePath}`);
115
+ }
116
+ return `${PRINCIPLES_START_MARKER}${managed.inner}${PRINCIPLES_END_MARKER}`;
117
+ }
118
+ export function applyBlock(hostFile, block) {
119
+ const expectedInner = normalizeInner(extractInnerFromBlock(block));
120
+ const existing = readHostFile(hostFile);
121
+ const managed = extractManagedBlock(existing);
122
+ if (!managed) {
123
+ const prefix = existing.length > 0 && !existing.endsWith("\n") ? "\n\n" : existing.length > 0 ? "\n" : "";
124
+ const next = `${existing}${prefix}${block}\n`;
125
+ writeHostFile(hostFile, next);
126
+ return { changed: true, action: "created" };
127
+ }
128
+ const currentInner = normalizeInner(managed.inner);
129
+ if (currentInner === expectedInner) {
130
+ return { changed: false, action: "noop" };
131
+ }
132
+ const replacement = `${PRINCIPLES_START_MARKER}${extractInnerFromBlock(block)}${PRINCIPLES_END_MARKER}`;
133
+ const next = existing.slice(0, managed.start) +
134
+ replacement +
135
+ existing.slice(managed.end);
136
+ writeHostFile(hostFile, next);
137
+ return { changed: true, action: "updated" };
138
+ }
139
+ export function removeBlock(hostFile) {
140
+ const existing = readHostFile(hostFile);
141
+ const managed = extractManagedBlock(existing);
142
+ if (!managed) {
143
+ return { removed: false };
144
+ }
145
+ let next = existing.slice(0, managed.start) + existing.slice(managed.end);
146
+ writeHostFile(hostFile, next);
147
+ return { removed: true };
148
+ }
149
+ export function checkBlock(hostFile, expectedBlock) {
150
+ const existing = readHostFile(hostFile);
151
+ const managed = extractManagedBlock(existing);
152
+ if (!managed) {
153
+ return "missing";
154
+ }
155
+ const expectedInner = normalizeInner(extractInnerFromBlock(expectedBlock));
156
+ const currentInner = normalizeInner(managed.inner);
157
+ return currentInner === expectedInner ? "present" : "stale";
158
+ }
159
+ //# sourceMappingURL=principles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principles.js","sourceRoot":"","sources":["../src/principles.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,8 @@
15
15
  "targets": [
16
16
  "claude",
17
17
  "codex",
18
- "cursor"
18
+ "cursor",
19
+ "enact"
19
20
  ],
20
21
  "skills": "./skills/",
21
22
  "interface": {
@@ -12,7 +12,8 @@
12
12
  "targets": [
13
13
  "claude",
14
14
  "codex",
15
- "cursor"
15
+ "cursor",
16
+ "enact"
16
17
  ],
17
18
  "skills": "./skills/",
18
19
  "mcpServers": "./.mcp.json",
@@ -34,16 +34,6 @@
34
34
  }
35
35
  ]
36
36
  },
37
- {
38
- "matcher": "Bash",
39
- "hooks": [
40
- {
41
- "type": "command",
42
- "command": "enact-context hook rewrite",
43
- "statusMessage": "enact-context: compress shell output"
44
- }
45
- ]
46
- },
47
37
  {
48
38
  "matcher": "Read|read|ReadFile|read_file|View|view|Grep|grep|Search|search|ListFiles|list_files|ListDirectory|list_directory",
49
39
  "hooks": [
@@ -21,13 +21,16 @@ If the install script is not available locally, install manually:
21
21
  curl -fsSL https://amsterdamdatalabs.com/install.sh | sh
22
22
  ```
23
23
 
24
- After installation, configure the MCP server:
24
+ Host integration is managed by the plugin system. For Codex registration, use:
25
25
 
26
26
  ```bash
27
- enact-context init --global
28
- enact-context doctor --fix
27
+ enact-extensions install enact-context --platform codex
29
28
  ```
30
29
 
30
+ Do not use `enact-context setup`, `enact-context doctor --fix`, or
31
+ `enact-context init --agent codex` for Codex registration; those commands write
32
+ direct global artifacts outside the plugin system.
33
+
31
34
  ## When to use enact-context
32
35
 
33
36
  Always prefer `enact-context -c <command>` over running commands directly when:
@@ -73,17 +76,16 @@ Use `full` mode only when you will edit the file.
73
76
  ## AI Tool Integration
74
77
 
75
78
  ```bash
76
- enact-context init --global # Install shell aliases
77
- enact-context init --agent claude # Claude Code PreToolUse hook
78
- enact-context init --agent cursor # Cursor hooks.json
79
- enact-context init --agent gemini # Gemini CLI BeforeTool hook
80
- enact-context init --agent codex # Codex AGENTS.md
81
- enact-context init --agent windsurf # .windsurfrules
82
- enact-context init --agent cline # .clinerules
83
- enact-context init --agent crush # Crush MCP config
84
- enact-context init --agent copilot # VS Code / Copilot .vscode/mcp.json
79
+ enact-extensions install enact-context --platform codex
80
+ enact-extensions install enact-context --platform claude
81
+ enact-extensions install enact-context --platform cursor
82
+ enact-extensions install enact-context --platform enact
83
+ enact-extensions install enact-context --platform all
85
84
  ```
86
85
 
86
+ Use the runtime's `init` commands only for non-plugin-managed personal shell
87
+ setup. Plugin-managed hosts should be registered through `enact-extensions`.
88
+
87
89
  ## Multi-Agent & Knowledge
88
90
 
89
91
  MCP tools:
@@ -43,10 +43,11 @@ ensure_path() {
43
43
  esac
44
44
  }
45
45
 
46
- setup_mcp() {
47
- echo "Configuring enact-context MCP server..."
48
- enact-context init --global 2>/dev/null || true
49
- enact-context doctor --fix 2>/dev/null || true
46
+ print_registration_note() {
47
+ echo "Runtime install complete."
48
+ echo "Register hosts through the plugin system, for example:"
49
+ echo " enact-extensions install enact-context --platform codex"
50
+ echo "Do not use 'enact-context setup' or 'doctor --fix' for Codex registration."
50
51
  }
51
52
 
52
53
  main() {
@@ -54,7 +55,7 @@ main() {
54
55
  local current
55
56
  current="$(enact-context --version 2>/dev/null | head -1 || echo 'unknown')"
56
57
  echo "enact-context already installed: ${current}"
57
- echo "Run 'enact-context doctor' to verify configuration."
58
+ print_registration_note
58
59
  exit 0
59
60
  fi
60
61
 
@@ -62,8 +63,7 @@ main() {
62
63
  platform="$(detect_platform)"
63
64
  install_binary "$platform"
64
65
  ensure_path
65
- setup_mcp
66
- echo "enact-context installed and configured."
66
+ print_registration_note
67
67
  }
68
68
 
69
69
  main "$@"
@@ -18,7 +18,8 @@
18
18
  "targets": [
19
19
  "claude",
20
20
  "codex",
21
- "cursor"
21
+ "cursor",
22
+ "enact"
22
23
  ],
23
24
  "hooks": "./hooks/hooks.json",
24
25
  "interface": {
@@ -0,0 +1,7 @@
1
+ <!-- enact-core:operating-principles START -->
2
+ 1. No fallback / no silent degrade — if the real path fails, fail loud and stop.
3
+ 2. No silent drops — no `|| true`, no swallowed errors, no skipped gates.
4
+ 3. No fakes — no stubs, placeholders, or TODOs passed off as done.
5
+ 4. Truthful or stop — report status honestly; a stopped task beats a fake-green one.
6
+ 5. Out-of-scope work → a new WorkItem, never silent scope-creep.
7
+ <!-- enact-core:operating-principles END -->
@@ -1,5 +1,17 @@
1
1
  {
2
2
  "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "startup|resume",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "enact-extensions hook session-start",
10
+ "statusMessage": "Checking plugin freshness"
11
+ }
12
+ ]
13
+ }
14
+ ],
3
15
  "UserPromptSubmit": [
4
16
  {
5
17
  "hooks": [
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "enact-evolve",
3
+ "version": "0.1.0",
4
+ "description": "Session evidence analysis plugin for enact-evolve ingestion, evaluation, and synthesis workflows.",
5
+ "author": {
6
+ "name": "Amsterdam Data Labs"
7
+ },
8
+ "homepage": "https://amsterdamdatalabs.com",
9
+ "repository": "https://dev.azure.com/amsterdamdatalabs/Enact/_git/enact-extensions",
10
+ "license": "UNLICENSED",
11
+ "keywords": [
12
+ "enact-evolve",
13
+ "session-analysis",
14
+ "transcripts",
15
+ "evidence",
16
+ "evaluation",
17
+ "synthesis"
18
+ ],
19
+ "targets": [
20
+ "claude",
21
+ "codex",
22
+ "cursor",
23
+ "enact"
24
+ ],
25
+ "skills": "./skills/",
26
+ "agents": "./agents/",
27
+ "interface": {
28
+ "displayName": "Enact Evolve",
29
+ "shortDescription": "CLI-backed session evidence ingestion, evaluation, and synthesis workflows.",
30
+ "longDescription": "Install this plugin to make enact-evolve the default path for Codex, Claude, and Factory session forensics: ingest transcripts, evaluate normalized evidence, and synthesize human-readable findings without running promotion.",
31
+ "developerName": "Amsterdam Data Labs",
32
+ "category": "Developer Tools",
33
+ "composerIcon": "./assets/icon.png",
34
+ "logo": "./assets/logo.png",
35
+ "capabilities": [
36
+ "session transcript ingestion",
37
+ "evidence evaluation",
38
+ "forensics synthesis",
39
+ "candidate improvement review",
40
+ "context usage analysis"
41
+ ]
42
+ },
43
+ "factory": {
44
+ "firstParty": true,
45
+ "operatorScope": "global"
46
+ }
47
+ }
@@ -0,0 +1,37 @@
1
+ name = "evolve-session-analyst"
2
+ desc = "Session forensics agent that must run enact-evolve ingest/evaluate before synthesis"
3
+ model = "gpt-5.5"
4
+ claude_model = "opus"
5
+ cursor_model = "default"
6
+ model_reasoning_effort = "medium"
7
+ sandbox_mode = "danger-full-access"
8
+ developer_instructions = """
9
+ Agent definition: enact-evolve session forensics analyst.
10
+
11
+ Use this agent when a user asks to analyze a Codex, Claude, or Factory session transcript, rollout JSONL, hook/tool behavior, context injection, token/context burn, or why an agent did not use the expected evolve workflow.
12
+
13
+ Core rules:
14
+ - Use enact-evolve artifacts as primary truth.
15
+ - Start with the session-analysis skill workflow and run the bundled run-evolve-analysis.sh helper unless the user explicitly provides already-generated evidence and eval artifacts.
16
+ - Run enact-evolve ingest and enact-evolve evaluate before synthesizing findings.
17
+ - Never run enact-evolve promote.
18
+ - Do not create downstream Dream, wiki, extension, package patch, or promotion handoff artifacts.
19
+ - Treat the current working directory as the project/workspace storage anchor, matching Enact plugin and MCP `mcp .` conventions.
20
+ - Use raw transcript JSONL only as a clearly labeled cross-check for details not yet normalized by enact-evolve, such as exact MCP server/tool pairs or hook execution gaps.
21
+ - If normalized evidence has an empty hook_summary or hook_timeline, report that as an evidence limitation instead of claiming hooks did not fire.
22
+ - Prefer absolute artifact paths in the final report.
23
+
24
+ Analysis process:
25
+ 1. Identify surface and session source.
26
+ 2. Produce or locate session-specific evidence output.
27
+ 3. Read session-evidence.jsonl, eval/metrics.jsonl, eval/candidate-improvements.jsonl, eval/trace-events.jsonl, and the transcript markdown.
28
+ 4. Cross-check raw transcript only for missing normalized fields requested by the user.
29
+ 5. Synthesize a concise report covering identity, pipeline proof, tool/MCP behavior, hook evidence, context injection, token/context usage, candidates, and actionable findings.
30
+
31
+ Output contract:
32
+ - evidence_artifacts
33
+ - normalized_findings
34
+ - raw_cross_checks
35
+ - synthesis
36
+ - follow_up_recommendations
37
+ """