@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.
- package/README.md +11 -12
- package/dist/create/claude.d.ts.map +1 -1
- package/dist/create/claude.js +6 -2
- package/dist/create/claude.js.map +1 -1
- package/dist/create/cursor.d.ts.map +1 -1
- package/dist/create/cursor.js +6 -2
- package/dist/create/cursor.js.map +1 -1
- package/dist/create/enact.js +1 -1
- package/dist/create/enact.js.map +1 -1
- package/dist/create/index.d.ts +4 -3
- package/dist/create/index.d.ts.map +1 -1
- package/dist/create/index.js +9 -2
- package/dist/create/index.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +5 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +91 -11
- package/dist/install.js.map +1 -1
- package/dist/internal/agents.d.ts +25 -1
- package/dist/internal/agents.d.ts.map +1 -1
- package/dist/internal/agents.js +81 -4
- package/dist/internal/agents.js.map +1 -1
- package/dist/internal/claude.d.ts +49 -0
- package/dist/internal/claude.d.ts.map +1 -1
- package/dist/internal/claude.js +166 -1
- package/dist/internal/claude.js.map +1 -1
- package/dist/internal/platform.d.ts +11 -1
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +58 -1
- package/dist/internal/platform.js.map +1 -1
- package/dist/internal/types.d.ts +2 -1
- package/dist/internal/types.d.ts.map +1 -1
- package/dist/principles.d.ts +28 -0
- package/dist/principles.d.ts.map +1 -0
- package/dist/principles.js +159 -0
- package/dist/principles.js.map +1 -0
- package/extensions/dev-state/.agents/plugin.json +2 -1
- package/extensions/enact-context/.agents/plugin.json +2 -1
- package/extensions/enact-context/hooks/hooks.json +0 -10
- package/extensions/enact-context/skills/enact-context/SKILL.md +14 -12
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +7 -7
- package/extensions/enact-core/.agents/plugin.json +2 -1
- package/extensions/enact-core/OPERATING-PRINCIPLES.md +7 -0
- package/extensions/enact-core/hooks/hooks.json +12 -0
- package/extensions/enact-evolve/.agents/plugin.json +47 -0
- package/extensions/enact-evolve/agents/evolve-session-analyst.toml +37 -0
- package/extensions/enact-evolve/skills/session-analysis/SKILL.md +98 -0
- package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +343 -0
- package/extensions/enact-factory/.agents/plugin.json +2 -1
- package/extensions/enact-factory/agents/architect.toml +9 -5
- package/extensions/enact-factory/agents/code-reviewer.toml +9 -5
- package/extensions/enact-factory/agents/critic.toml +9 -5
- package/extensions/enact-factory/agents/executor.toml +4 -1
- package/extensions/enact-factory/agents/explore.toml +4 -1
- package/extensions/enact-factory/agents/planner.toml +4 -1
- package/extensions/enact-factory/agents/verifier.toml +9 -5
- package/extensions/enact-factory/skills/advisor/SKILL.md +82 -0
- package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +6 -1
- package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +347 -0
- package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +62 -15
- package/extensions/enact-factory/skills/committee/SKILL.md +80 -0
- package/extensions/enact-factory/skills/deep-interview/SKILL.md +9 -13
- package/extensions/enact-factory/skills/drive-loop/SKILL.md +161 -31
- package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +26 -6
- package/extensions/enact-factory/skills/handoff/SKILL.md +72 -0
- package/extensions/enact-factory/skills/hyperplan/SKILL.md +11 -3
- package/extensions/enact-factory/skills/looplan/SKILL.md +34 -17
- package/extensions/enact-factory/skills/plan/SKILL.md +40 -8
- package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +6 -1
- package/extensions/enact-factory/skills/research/SKILL.md +14 -4
- package/extensions/enact-factory/skills/review/SKILL.md +21 -2
- package/extensions/enact-factory/skills/security-research/SKILL.md +5 -2
- package/extensions/enact-factory/skills/tdd/SKILL.md +7 -1
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +5 -0
- package/extensions/enact-factory/skills/trace/SKILL.md +5 -0
- package/extensions/enact-factory/skills/ultraqa/SKILL.md +21 -15
- package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +5 -0
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +5 -0
- package/extensions/enact-loop/.agents/plugin.json +5 -4
- package/extensions/enact-loop/scripts/validate.mjs +123 -0
- package/extensions/enact-loop/skills/enact-loop/SKILL.md +189 -30
- package/extensions/enact-wiki/.agents/plugin.json +2 -1
- package/extensions/net-revenue-management/.agents/plugin.json +2 -1
- package/extensions/plugin-dev/.agents/plugin.json +2 -1
- package/extensions/plugin-dev/skills/start/SKILL.md +3 -3
- package/package.json +1 -1
- package/scripts/check-hooks.mjs +5 -5
- package/scripts/check-principles.mjs +19 -4
- package/scripts/enact-extensions.mjs +237 -90
- package/scripts/lib/hooks.mjs +61 -217
- package/scripts/lib/migrate-artifacts.mjs +144 -0
- package/scripts/lib/principles.mjs +109 -0
- package/scripts/lib/provision-mcp.mjs +1 -1
- package/scripts/lib/run-install.mjs +72 -2
- package/scripts/lib/run-prune.mjs +23 -2
- package/scripts/lib/run-sync.mjs +4 -1
- package/scripts/postinstall.mjs +6 -6
- package/scripts/setup-enact-context.sh +20 -15
- package/spec/codex.json +5 -0
- package/spec/enact.json +3 -3
- package/spec/enact.md +1 -4
- package/spec/index.json +1 -1
- package/extensions/enact-operator/.agents/plugin.json +0 -56
- package/extensions/enact-operator/.app.json +0 -3
- package/extensions/enact-operator/.mcp.json +0 -10
- package/extensions/enact-operator/_taxonomy.md +0 -86
- package/extensions/enact-operator/agents/README.md +0 -5
- package/extensions/enact-operator/agents/architect.toml +0 -25
- package/extensions/enact-operator/agents/code-reviewer.toml +0 -24
- package/extensions/enact-operator/agents/critic.toml +0 -30
- package/extensions/enact-operator/agents/executor.toml +0 -24
- package/extensions/enact-operator/agents/explore.toml +0 -23
- package/extensions/enact-operator/agents/planner.toml +0 -24
- package/extensions/enact-operator/agents/verifier.toml +0 -24
- package/extensions/enact-operator/docs/skill-variants.md +0 -44
- package/extensions/enact-operator/hooks/hooks.json +0 -91
- package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +0 -50
- package/extensions/enact-operator/skills/analyze/SKILL.md +0 -91
- package/extensions/enact-operator/skills/ask/SKILL.md +0 -47
- package/extensions/enact-operator/skills/autopilot/SKILL.md +0 -170
- package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +0 -79
- package/extensions/enact-operator/skills/cancel/SKILL.md +0 -99
- package/extensions/enact-operator/skills/configure-notifications/SKILL.md +0 -77
- package/extensions/enact-operator/skills/deep-interview/SKILL.md +0 -80
- package/extensions/enact-operator/skills/doctor/SKILL.md +0 -48
- package/extensions/enact-operator/skills/hud/SKILL.md +0 -49
- package/extensions/enact-operator/skills/hyperplan/SKILL.md +0 -47
- package/extensions/enact-operator/skills/plan/SKILL.md +0 -78
- package/extensions/enact-operator/skills/ralph/SKILL.md +0 -201
- package/extensions/enact-operator/skills/ralph/gemini.md +0 -18
- package/extensions/enact-operator/skills/ralplan/SKILL.md +0 -151
- package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +0 -45
- package/extensions/enact-operator/skills/research/SKILL.md +0 -74
- package/extensions/enact-operator/skills/review/SKILL.md +0 -58
- package/extensions/enact-operator/skills/security-research/SKILL.md +0 -54
- package/extensions/enact-operator/skills/setup/SKILL.md +0 -91
- package/extensions/enact-operator/skills/setup/scripts/install.sh +0 -50
- package/extensions/enact-operator/skills/skill/SKILL.md +0 -82
- package/extensions/enact-operator/skills/tdd/SKILL.md +0 -59
- package/extensions/enact-operator/skills/team/SKILL.md +0 -199
- package/extensions/enact-operator/skills/trace/SKILL.md +0 -41
- package/extensions/enact-operator/skills/ultragoal/SKILL.md +0 -99
- package/extensions/enact-operator/skills/ultraqa/SKILL.md +0 -113
- package/extensions/enact-operator/skills/ultrawork/SKILL.md +0 -145
- package/extensions/enact-operator/skills/ultrawork/planner.md +0 -28
- package/extensions/enact-operator/skills/wiki/SKILL.md +0 -41
- package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +0 -51
- /package/extensions/{enact-operator → enact-evolve}/assets/icon.png +0 -0
- /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":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B,MAAM,CAAC,MAAM,oBAAoB,GAG7B;IACF,KAAK,EAAE;QACL,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,YAAY;KACzB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,aAAa;KAC1B;IACD,KAAK,EAAE;QACL,SAAS,EAAE,eAAe;QAC1B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,YAAY;KACzB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,aAAa;KAC1B;CACF,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAwC;IAClE,KAAK,EAAE;QACL,MAAM;QACN,SAAS;QACT,aAAa;QACb,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,SAAS;QACT,UAAU;QACV,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,OAAO;QACP,YAAY;QACZ,MAAM;QACN,KAAK;QACL,UAAU;QACV,UAAU;QACV,KAAK;QACL,WAAW;QACX,SAAS;QACT,UAAU;KACX;IACD,MAAM,EAAE;QACN,MAAM;QACN,SAAS;QACT,aAAa;QACb,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,SAAS;QACT,UAAU;QACV,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,OAAO;QACP,YAAY;QACZ,KAAK;QACL,UAAU;QACV,UAAU;QACV,KAAK;KACN;IACD,KAAK,EAAE;QACL,MAAM;QACN,SAAS;QACT,aAAa;QACb,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,SAAS;QACT,UAAU;QACV,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,OAAO;QACP,WAAW;KACZ;IACD,MAAM,EAAE;QACN,MAAM;QACN,SAAS;QACT,aAAa;QACb,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,SAAS;QACT,UAAU;QACV,MAAM;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,OAAO;KACR;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAwC;IAC9E,KAAK,EAAE;QACL,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,OAAO;QACP,YAAY;QACZ,MAAM;QACN,KAAK;QACL,UAAU;QACV,UAAU;QACV,KAAK;KACN;IACD,MAAM,EAAE;QACN,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,OAAO;QACP,YAAY;QACZ,KAAK;QACL,UAAU;QACV,UAAU;QACV,KAAK;KACN;IACD,KAAK,EAAE;QACL,QAAQ;QACR,OAAO;QACP,YAAY;QACZ,MAAM;KACP;IACD,MAAM,EAAE;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,OAAO;QACP,YAAY;KACb;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/internal/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type Platform = "enact" | "claude" | "codex" | "cursor";
|
|
2
|
-
export type
|
|
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,
|
|
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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"}
|
|
@@ -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
|
-
|
|
24
|
+
Host integration is managed by the plugin system. For Codex registration, use:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
enact-context
|
|
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
|
|
77
|
-
enact-context
|
|
78
|
-
enact-context
|
|
79
|
-
enact-context
|
|
80
|
-
enact-context
|
|
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
|
-
|
|
47
|
-
echo "
|
|
48
|
-
|
|
49
|
-
enact-context
|
|
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
|
-
|
|
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
|
-
|
|
66
|
-
echo "enact-context installed and configured."
|
|
66
|
+
print_registration_note
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
main "$@"
|
|
@@ -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
|
+
"""
|