rhachet-roles-ehmpathy 1.0.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.
- package/LICENSE +21 -0
- package/dist/.test/genContextLogTrail.d.ts +2 -0
- package/dist/.test/genContextLogTrail.js +12 -0
- package/dist/.test/genContextLogTrail.js.map +1 -0
- package/dist/.test/genContextStitchTrail.d.ts +2 -0
- package/dist/.test/genContextStitchTrail.js +8 -0
- package/dist/.test/genContextStitchTrail.js.map +1 -0
- package/dist/.test/getContextOpenAI.d.ts +2 -0
- package/dist/.test/getContextOpenAI.js +18 -0
- package/dist/.test/getContextOpenAI.js.map +1 -0
- package/dist/contract/cases/mechanicGoalStubout.integration.test.d.ts +0 -0
- package/dist/contract/cases/mechanicGoalStubout.integration.test.js +2 -0
- package/dist/contract/cases/mechanicGoalStubout.integration.test.js.map +1 -0
- package/dist/contract/cases/mechanicStubFillout.integration.test.d.ts +0 -0
- package/dist/contract/cases/mechanicStubFillout.integration.test.js +2 -0
- package/dist/contract/cases/mechanicStubFillout.integration.test.js.map +1 -0
- package/dist/contract/commands/codegenBriefOptions.d.ts +1 -0
- package/dist/contract/commands/codegenBriefOptions.js +57 -0
- package/dist/contract/commands/codegenBriefOptions.js.map +1 -0
- package/dist/data/sdk/sdkOpenAi.d.ts +16 -0
- package/dist/data/sdk/sdkOpenAi.js +38 -0
- package/dist/data/sdk/sdkOpenAi.js.map +1 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/logic/artifact/genStepArtSet.d.ts +13 -0
- package/dist/logic/artifact/genStepArtSet.integration.test.d.ts +1 -0
- package/dist/logic/artifact/genStepArtSet.integration.test.js +142 -0
- package/dist/logic/artifact/genStepArtSet.integration.test.js.map +1 -0
- package/dist/logic/artifact/genStepArtSet.js +29 -0
- package/dist/logic/artifact/genStepArtSet.js.map +1 -0
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.d.ts +19 -0
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.d.ts +1 -0
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.js +97 -0
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.js.map +1 -0
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.js +84 -0
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.js.map +1 -0
- package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.d.ts +10 -0
- package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.js +14 -0
- package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.js.map +1 -0
- package/dist/logic/roles/designer/getDesignerBrief.d.ts +13 -0
- package/dist/logic/roles/designer/getDesignerBrief.js +21 -0
- package/dist/logic/roles/designer/getDesignerBrief.js.map +1 -0
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.d.ts +26 -0
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.d.ts +1 -0
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.js +77 -0
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.js.map +1 -0
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.js +53 -0
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.js.map +1 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.d.ts +22 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.d.ts +1 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.js +142 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.js.map +1 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.js +55 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.js.map +1 -0
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.d.ts +26 -0
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.d.ts +1 -0
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.js +71 -0
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.js.map +1 -0
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.js +53 -0
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.js.map +1 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.d.ts +22 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.d.ts +1 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.js +130 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.js.map +1 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.js +48 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.d.ts +17 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.integration.test.d.ts +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.integration.test.js +107 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.integration.test.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.js +76 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.imagine.ResourcesAndMechanisms.d.ts +17 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.imagine.ResourcesAndMechanisms.js +73 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.imagine.ResourcesAndMechanisms.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.d.ts +18 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.integration.test.d.ts +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.integration.test.js +73 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.integration.test.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.js +62 -0
- package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.d.ts +16 -0
- package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.integration.test.d.ts +1 -0
- package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.integration.test.js +120 -0
- package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.integration.test.js.map +1 -0
- package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.js +69 -0
- package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.js.map +1 -0
- package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.d.ts +10 -0
- package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.js +39 -0
- package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.js.map +1 -0
- package/dist/logic/roles/ecologist/getEcologistBrief.d.ts +13 -0
- package/dist/logic/roles/ecologist/getEcologistBrief.js +21 -0
- package/dist/logic/roles/ecologist/getEcologistBrief.js.map +1 -0
- package/dist/logic/roles/getRoleRegistry.d.ts +8 -0
- package/dist/logic/roles/getRoleRegistry.js +19 -0
- package/dist/logic/roles/getRoleRegistry.js.map +1 -0
- package/dist/logic/roles/getRoleRegistry.readme.d.ts +5 -0
- package/dist/logic/roles/getRoleRegistry.readme.js +75 -0
- package/dist/logic/roles/getRoleRegistry.readme.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.d.ts +5 -0
- package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.js +22 -0
- package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.d.ts +34 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.js +246 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.js +56 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.d.ts +34 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.js +144 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.js +33 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.d.ts +34 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.js +138 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.js +49 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.d.ts +28 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.js +35 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.d.ts +28 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.js +294 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.js +44 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.d.ts +38 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.js +162 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.js +32 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.d.ts +56 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.js +169 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.js +30 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.d.ts +53 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.js +203 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.js +72 -0
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.js.map +1 -0
- package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.d.ts +10 -0
- package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.js +35 -0
- package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.js.map +1 -0
- package/dist/logic/roles/mechanic/getMechanicBrief.d.ts +13 -0
- package/dist/logic/roles/mechanic/getMechanicBrief.js +21 -0
- package/dist/logic/roles/mechanic/getMechanicBrief.js.map +1 -0
- package/dist/logic/roles/mechanic/getMechanicRole.d.ts +2 -0
- package/dist/logic/roles/mechanic/getMechanicRole.js +157 -0
- package/dist/logic/roles/mechanic/getMechanicRole.js.map +1 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.d.ts +19 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.d.ts +1 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.js +98 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.js.map +1 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.js +30 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.js.map +1 -0
- package/package.json +95 -0
- package/readme.md +110 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
# stub
|
|
4
|
+
we have 4 roles
|
|
5
|
+
|
|
6
|
+
1. ecologist - operates at a fundamental, real world domain scale; independent of software, cares only about fundamental systems
|
|
7
|
+
|
|
8
|
+
2. architect - operates at an organizational, cross-repo scale. cares about bounded contexts, separation of concerns, and low trust contracts. maximizes ubiqlang and evolvability
|
|
9
|
+
|
|
10
|
+
3. designer - operates at feature, cross-repo scale. cares about behavioral and techical pit-of-success design. maximizes evolvability, maintainability, and reliability
|
|
11
|
+
|
|
12
|
+
4. mechanic - operates at the feature, single-repo scale. cares about writing the most maintainable and observable code possible. thinks about the engineer who's going to be woken-up at 3am with a pagerduty alarm and going to have to read the code
|
|
13
|
+
|
|
14
|
+
all roles maximize empathy for developers and customers.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.EHMPATHY_REGISTRY_README = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* .what = the readme for the ehpathy role registry
|
|
20
|
+
* todo: how to keep in sync with @gitroot/readme?
|
|
21
|
+
*/
|
|
22
|
+
exports.EHMPATHY_REGISTRY_README = `
|
|
23
|
+
# 🤝 ehmpathy role registry
|
|
24
|
+
|
|
25
|
+
This registry defines the four core roles used to craft empathetic, evolvable, and maintainable software.
|
|
26
|
+
|
|
27
|
+
Each role represents a lens — a way of thinking about the system — grounded in empathy for both the **people using the product** and the **engineers maintaining the system**.
|
|
28
|
+
|
|
29
|
+
All roles maximize:
|
|
30
|
+
|
|
31
|
+
- clarity over cleverness
|
|
32
|
+
- maintainability over magic
|
|
33
|
+
- empathy over ego
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 🌱 Ecologist
|
|
38
|
+
|
|
39
|
+
- **scale**: domain fundamentals, real-world systems
|
|
40
|
+
- **focus**: what changes, what flows, what matters — ignoring software
|
|
41
|
+
- **maximizes**: fidelity to the real world
|
|
42
|
+
|
|
43
|
+
Used to understand the physics, incentives, and causal flows beneath the system.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🏛 Architect
|
|
48
|
+
|
|
49
|
+
- **scale**: cross-repo, organizational boundaries
|
|
50
|
+
- **focus**: bounded contexts, trust layers, language design
|
|
51
|
+
- **maximizes**: ubiqlang, evolvability, decoupling
|
|
52
|
+
|
|
53
|
+
Used to shape contracts and interfaces that survive change.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 🎨 Designer
|
|
58
|
+
|
|
59
|
+
- **scale**: feature-level, user-experience layer
|
|
60
|
+
- **focus**: nudges, guardrails, pit-of-success defaults
|
|
61
|
+
- **maximizes**: usability, ergonomics, reliability
|
|
62
|
+
|
|
63
|
+
Used to sculpt workflows and interfaces that feel obvious and safe.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 🔧 Mechanic
|
|
68
|
+
|
|
69
|
+
- **scale**: repo-level, implementation detail
|
|
70
|
+
- **focus**: maintainability, observability, readability
|
|
71
|
+
- **maximizes**: empathy for the 3am on-call engineer
|
|
72
|
+
|
|
73
|
+
Used to write and revise the actual logic that runs the system.
|
|
74
|
+
`.trim();
|
|
75
|
+
//# sourceMappingURL=getRoleRegistry.readme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRoleRegistry.readme.js","sourceRoot":"","sources":["../../../src/logic/roles/getRoleRegistry.readme.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;EAaE;;;AAEF;;;GAGG;AACU,QAAA,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDrC,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRefOrgPatterns = void 0;
|
|
4
|
+
const type_fns_1 = require("type-fns");
|
|
5
|
+
const getMechanicBrief_1 = require("../getMechanicBrief");
|
|
6
|
+
const getRefOrgPatterns = (input) => [
|
|
7
|
+
// genArtifactGitFile({
|
|
8
|
+
// uri: __dirname + '/.refs/pattern.mech.args.input-context.md',
|
|
9
|
+
// }),
|
|
10
|
+
// genArtifactGitFile({
|
|
11
|
+
// uri: __dirname + '/.refs/pattern.mech.arrowonly.md',
|
|
12
|
+
// }),
|
|
13
|
+
// genArtifactGitFile({
|
|
14
|
+
// uri: __dirname + '/.refs/pattern.mech.what-why.md',
|
|
15
|
+
// }),
|
|
16
|
+
(0, getMechanicBrief_1.getMechanicBrief)('codestyle/_mech.compressed.md'),
|
|
17
|
+
input.purpose === 'prepare'
|
|
18
|
+
? (0, getMechanicBrief_1.getMechanicBrief)('codestyle/mech.tests.given-when-then.md')
|
|
19
|
+
: undefined,
|
|
20
|
+
].filter(type_fns_1.isPresent);
|
|
21
|
+
exports.getRefOrgPatterns = getRefOrgPatterns;
|
|
22
|
+
//# sourceMappingURL=getRefOrgPatterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRefOrgPatterns.js","sourceRoot":"","sources":["../../../../../src/logic/roles/mechanic/codediff/getRefOrgPatterns.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AAErC,0DAAuD;AAEhD,MAAM,iBAAiB,GAAG,CAAC,KAEjC,EAA8B,EAAE,CAC/B;IACE,uBAAuB;IACvB,kEAAkE;IAClE,MAAM;IACN,uBAAuB;IACvB,yDAAyD;IACzD,MAAM;IACN,uBAAuB;IACvB,wDAAwD;IACxD,MAAM;IACN,IAAA,mCAAgB,EAAC,+BAA+B,CAAC;IACjD,KAAK,CAAC,OAAO,KAAK,SAAS;QACzB,CAAC,CAAC,IAAA,mCAAgB,EAAC,yCAAyC,CAAC;QAC7D,CAAC,CAAC,SAAS;CACd,CAAC,MAAM,CAAC,oBAAS,CAAC,CAAC;AAjBT,QAAA,iBAAiB,qBAiBR"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { GStitcher, Threads, RoleContext } from 'rhachet';
|
|
2
|
+
import { Artifact } from 'rhachet-artifact';
|
|
3
|
+
import { GitFile } from 'rhachet-artifact-git';
|
|
4
|
+
import { ContextOpenAI } from '../../../../data/sdk/sdkOpenAi';
|
|
5
|
+
interface ThreadsDesired extends Threads<{
|
|
6
|
+
artist: RoleContext<'artist', {
|
|
7
|
+
ask: string;
|
|
8
|
+
art: {
|
|
9
|
+
inflight: Artifact<typeof GitFile>;
|
|
10
|
+
};
|
|
11
|
+
org: {
|
|
12
|
+
patterns: Artifact<typeof GitFile>[];
|
|
13
|
+
};
|
|
14
|
+
scene: {
|
|
15
|
+
coderefs: Artifact<typeof GitFile>[];
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
student: RoleContext<'student', {
|
|
19
|
+
art: {
|
|
20
|
+
claims: Artifact<typeof GitFile>;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
critic: RoleContext<'critic', {
|
|
24
|
+
art: {
|
|
25
|
+
feedback: Artifact<typeof GitFile> | null;
|
|
26
|
+
};
|
|
27
|
+
}>;
|
|
28
|
+
}> {
|
|
29
|
+
}
|
|
30
|
+
type StitcherDesired = GStitcher<ThreadsDesired, ContextOpenAI & GStitcher['context'], {
|
|
31
|
+
content: string;
|
|
32
|
+
}>;
|
|
33
|
+
export declare const routeArtistCodeDiff: import("rhachet").Stitcher<StitcherDesired>;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
4
|
+
const rhachet_1 = require("rhachet");
|
|
5
|
+
const rhachet_artifact_git_1 = require("rhachet-artifact-git");
|
|
6
|
+
const test_fns_1 = require("test-fns");
|
|
7
|
+
const genContextLogTrail_1 = require("../../../../.test/genContextLogTrail");
|
|
8
|
+
const genContextStitchTrail_1 = require("../../../../.test/genContextStitchTrail");
|
|
9
|
+
const getContextOpenAI_1 = require("../../../../.test/getContextOpenAI");
|
|
10
|
+
const getMechanicBrief_1 = require("../getMechanicBrief");
|
|
11
|
+
const getRefOrgPatterns_1 = require("./getRefOrgPatterns");
|
|
12
|
+
const routeArtistCodeDiff_1 = require("./routeArtistCodeDiff");
|
|
13
|
+
describe('routeArtistCodeDiff', () => {
|
|
14
|
+
const context = {
|
|
15
|
+
...(0, genContextLogTrail_1.genContextLogTrail)(),
|
|
16
|
+
...(0, genContextStitchTrail_1.genContextStitchTrail)(),
|
|
17
|
+
...(0, getContextOpenAI_1.getContextOpenAI)(),
|
|
18
|
+
};
|
|
19
|
+
const route = routeArtistCodeDiff_1.routeArtistCodeDiff;
|
|
20
|
+
const claimsArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
21
|
+
uri: __dirname + '/.test/multiply.claims.md',
|
|
22
|
+
}, { access: 'readonly' });
|
|
23
|
+
(0, test_fns_1.given)('we want to multiply', () => {
|
|
24
|
+
const coderefArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
25
|
+
uri: __dirname + '/.temp/add.ts',
|
|
26
|
+
});
|
|
27
|
+
(0, test_fns_1.given)('inflightArt is empty, writes net new', () => {
|
|
28
|
+
const askText = 'add a multiply function to the codebase';
|
|
29
|
+
const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
30
|
+
uri: __dirname + '/.temp/multiply.make.ts',
|
|
31
|
+
});
|
|
32
|
+
beforeEach(async () => {
|
|
33
|
+
await inflightArt.del();
|
|
34
|
+
await coderefArt.set({
|
|
35
|
+
content: 'export const add = (a: number, b: number) => a + b;',
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
(0, test_fns_1.when)('executing the route', () => {
|
|
39
|
+
const threads = (0, test_fns_1.usePrep)(async () => {
|
|
40
|
+
return {
|
|
41
|
+
artist: await (0, rhachet_1.enrollThread)({
|
|
42
|
+
role: 'artist',
|
|
43
|
+
stash: {
|
|
44
|
+
ask: askText,
|
|
45
|
+
art: { inflight: inflightArt },
|
|
46
|
+
scene: { coderefs: [coderefArt] },
|
|
47
|
+
org: {
|
|
48
|
+
patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
inherit: {
|
|
52
|
+
traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
student: await (0, rhachet_1.enrollThread)({
|
|
56
|
+
role: 'student',
|
|
57
|
+
stash: {
|
|
58
|
+
art: { claims: claimsArt },
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
critic: await (0, rhachet_1.enrollThread)({
|
|
62
|
+
role: 'critic',
|
|
63
|
+
stash: {
|
|
64
|
+
art: { feedback: null }, // no feedback yet
|
|
65
|
+
},
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
(0, test_fns_1.then)('writes updated diff content to the target artifact', async () => {
|
|
70
|
+
const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
|
|
71
|
+
const file = await inflightArt.get();
|
|
72
|
+
const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
|
|
73
|
+
expect(content).toMatch(/multiply/);
|
|
74
|
+
expect(content.length).toBeGreaterThan(10);
|
|
75
|
+
expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
(0, test_fns_1.given)('inflightArt has prior content, asks for readability diff', () => {
|
|
80
|
+
const askText = 'improve the readability of the multiply function';
|
|
81
|
+
const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
82
|
+
uri: __dirname + '/.temp/multiply.readable.ts',
|
|
83
|
+
});
|
|
84
|
+
beforeEach(async () => {
|
|
85
|
+
await inflightArt.set({
|
|
86
|
+
content: 'export const multiply=(a,b)=>a*b;',
|
|
87
|
+
});
|
|
88
|
+
await coderefArt.set({
|
|
89
|
+
content: `
|
|
90
|
+
/**
|
|
91
|
+
* .what = adds two numbers together
|
|
92
|
+
* .why = used to compute a total or combine numeric values
|
|
93
|
+
*/
|
|
94
|
+
export const add = (input: [number, number]) => input[0] + input[1];
|
|
95
|
+
`.trim(),
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
(0, test_fns_1.when)('executing the route', () => {
|
|
99
|
+
const threads = (0, test_fns_1.usePrep)(async () => ({
|
|
100
|
+
artist: await (0, rhachet_1.enrollThread)({
|
|
101
|
+
role: 'artist',
|
|
102
|
+
stash: {
|
|
103
|
+
ask: askText,
|
|
104
|
+
art: { inflight: inflightArt },
|
|
105
|
+
scene: { coderefs: [coderefArt] },
|
|
106
|
+
org: {
|
|
107
|
+
patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
inherit: {
|
|
111
|
+
traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
|
|
112
|
+
},
|
|
113
|
+
}),
|
|
114
|
+
student: await (0, rhachet_1.enrollThread)({
|
|
115
|
+
role: 'student',
|
|
116
|
+
stash: {
|
|
117
|
+
art: { claims: claimsArt },
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
critic: await (0, rhachet_1.enrollThread)({
|
|
121
|
+
role: 'critic',
|
|
122
|
+
stash: {
|
|
123
|
+
art: { feedback: null }, // no feedback yet
|
|
124
|
+
},
|
|
125
|
+
}),
|
|
126
|
+
}));
|
|
127
|
+
(0, test_fns_1.then)('rewrites inflight with a more readable version', async () => {
|
|
128
|
+
const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
|
|
129
|
+
const file = await inflightArt.get();
|
|
130
|
+
const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
|
|
131
|
+
expect(content).toMatch(/multiply/);
|
|
132
|
+
expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
(0, test_fns_1.given)('inflightArt has prior content, responds to critic feedback, has blockers', () => {
|
|
137
|
+
const askText = 'improve the readability of the multiply function';
|
|
138
|
+
const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
139
|
+
uri: __dirname + '/.test/multiply.feedback.hasblockers.md',
|
|
140
|
+
}, { access: 'readonly' });
|
|
141
|
+
const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
142
|
+
uri: __dirname + '/.temp/multiply.feedbacked.hadblockers.ts',
|
|
143
|
+
});
|
|
144
|
+
beforeEach(async () => {
|
|
145
|
+
await inflightArt.set({
|
|
146
|
+
content: 'export const multiply=(a,b)=>a*b;',
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
(0, test_fns_1.when)('executing the route', () => {
|
|
150
|
+
const threads = (0, test_fns_1.usePrep)(async () => ({
|
|
151
|
+
artist: await (0, rhachet_1.enrollThread)({
|
|
152
|
+
role: 'artist',
|
|
153
|
+
stash: {
|
|
154
|
+
ask: askText,
|
|
155
|
+
art: { inflight: inflightArt },
|
|
156
|
+
scene: { coderefs: [] },
|
|
157
|
+
org: {
|
|
158
|
+
patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
inherit: {
|
|
162
|
+
traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
|
|
163
|
+
},
|
|
164
|
+
}),
|
|
165
|
+
student: await (0, rhachet_1.enrollThread)({
|
|
166
|
+
role: 'student',
|
|
167
|
+
stash: {
|
|
168
|
+
art: { claims: claimsArt },
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
critic: await (0, rhachet_1.enrollThread)({
|
|
172
|
+
role: 'critic',
|
|
173
|
+
stash: {
|
|
174
|
+
art: { feedback: feedbackArt },
|
|
175
|
+
},
|
|
176
|
+
}),
|
|
177
|
+
}));
|
|
178
|
+
(0, test_fns_1.then)('responds to feedback', async () => {
|
|
179
|
+
const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
|
|
180
|
+
const file = await inflightArt.get();
|
|
181
|
+
const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
|
|
182
|
+
expect(content).toMatch(/multiply/);
|
|
183
|
+
expect(content).toMatch(/\}\)/); // should have context input
|
|
184
|
+
expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
(0, test_fns_1.given)('inflightArt has prior content, responds to critic feedback, nonblockers', () => {
|
|
189
|
+
const askText = 'improve the readability of the multiply function';
|
|
190
|
+
const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
191
|
+
uri: __dirname + '/.test/multiply.feedback.nonblockers.md',
|
|
192
|
+
}, { access: 'readonly' });
|
|
193
|
+
const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
194
|
+
uri: __dirname + '/.temp/multiply.feedbacked.nonblockers.ts',
|
|
195
|
+
});
|
|
196
|
+
beforeEach(async () => {
|
|
197
|
+
await inflightArt.set({
|
|
198
|
+
content: `
|
|
199
|
+
export const multiply = ({ a, b }: { a: number, b: number }): number => {
|
|
200
|
+
return a * b;
|
|
201
|
+
};
|
|
202
|
+
`,
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
(0, test_fns_1.when)('executing the route', () => {
|
|
206
|
+
const threads = (0, test_fns_1.usePrep)(async () => ({
|
|
207
|
+
artist: await (0, rhachet_1.enrollThread)({
|
|
208
|
+
role: 'artist',
|
|
209
|
+
stash: {
|
|
210
|
+
ask: askText,
|
|
211
|
+
art: { inflight: inflightArt },
|
|
212
|
+
scene: { coderefs: [] },
|
|
213
|
+
org: {
|
|
214
|
+
patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
inherit: {
|
|
218
|
+
traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
|
|
219
|
+
},
|
|
220
|
+
}),
|
|
221
|
+
student: await (0, rhachet_1.enrollThread)({
|
|
222
|
+
role: 'student',
|
|
223
|
+
stash: {
|
|
224
|
+
art: { claims: claimsArt },
|
|
225
|
+
},
|
|
226
|
+
}),
|
|
227
|
+
critic: await (0, rhachet_1.enrollThread)({
|
|
228
|
+
role: 'critic',
|
|
229
|
+
stash: {
|
|
230
|
+
art: { feedback: feedbackArt },
|
|
231
|
+
},
|
|
232
|
+
}),
|
|
233
|
+
}));
|
|
234
|
+
(0, test_fns_1.then)('responds to feedback', async () => {
|
|
235
|
+
const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
|
|
236
|
+
const file = await inflightArt.get();
|
|
237
|
+
const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
|
|
238
|
+
expect(content).toMatch(/multiply/);
|
|
239
|
+
expect(content).toMatch(/\}\)/); // should have context input
|
|
240
|
+
expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=routeArtistCodeDiff.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeArtistCodeDiff.integration.test.js","sourceRoot":"","sources":["../../../../../src/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.routeArtistCodeDiff = void 0;
|
|
4
|
+
const rhachet_1 = require("rhachet");
|
|
5
|
+
const sdkOpenAi_1 = require("../../../../data/sdk/sdkOpenAi");
|
|
6
|
+
const genStepArtSet_1 = require("../../../artifact/genStepArtSet");
|
|
7
|
+
const getMechanicBrief_1 = require("../getMechanicBrief");
|
|
8
|
+
const template = (0, rhachet_1.genTemplate)({
|
|
9
|
+
ref: { uri: __dirname + '/routeArtistCodeDiff.template.md' },
|
|
10
|
+
getVariables: async ({ threads }) => ({
|
|
11
|
+
ask: threads.artist.context.stash.ask,
|
|
12
|
+
claims: (await threads.student.context.stash.art.claims.get())?.content ?? '',
|
|
13
|
+
inflight: (await threads.artist.context.stash.art.inflight.get())?.content ?? '',
|
|
14
|
+
feedback: (await threads.critic.context.stash.art.feedback?.get())?.content ??
|
|
15
|
+
'not reviewed yet', // no feedback yet is possible
|
|
16
|
+
...(await (0, rhachet_1.getTemplateVarsFromRoleInherit)({ thread: threads.artist })),
|
|
17
|
+
scene: await (0, rhachet_1.getTemplateValFromArtifacts)({
|
|
18
|
+
artifacts: threads.artist.context.stash.scene.coderefs,
|
|
19
|
+
}),
|
|
20
|
+
patterns: await (0, rhachet_1.getTemplateValFromArtifacts)({
|
|
21
|
+
artifacts: threads.artist.context.stash.org.patterns,
|
|
22
|
+
}),
|
|
23
|
+
codestyle: await (0, rhachet_1.getTemplateValFromArtifacts)({
|
|
24
|
+
// todo: compress?
|
|
25
|
+
// todo: enforce insync w/ codestyle reviewer?
|
|
26
|
+
artifacts: (0, getMechanicBrief_1.getMechanicBriefs)([
|
|
27
|
+
'codestyle/mech.what-why.v2.md',
|
|
28
|
+
'codestyle/flow.single-responsibility.md',
|
|
29
|
+
'codestyle/mech.args.input-context.md',
|
|
30
|
+
'codestyle/mech.arrowonly.md',
|
|
31
|
+
'codestyle/mech.clear-contracts.md',
|
|
32
|
+
'codestyle/flow.failfast.md',
|
|
33
|
+
'codestyle/flow.idempotency.md',
|
|
34
|
+
'codestyle/flow.immutability.md',
|
|
35
|
+
'codestyle/flow.narratives.md',
|
|
36
|
+
]),
|
|
37
|
+
}),
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
const stepImagineCodeDiff = (0, rhachet_1.genStepImagineViaTemplate)({
|
|
41
|
+
slug: '[artist]<produce><imagine>',
|
|
42
|
+
stitchee: 'artist',
|
|
43
|
+
readme: 'intent(imagines a code diff based on artist.ask)',
|
|
44
|
+
template,
|
|
45
|
+
imagine: sdkOpenAi_1.sdkOpenAi.imagine,
|
|
46
|
+
});
|
|
47
|
+
const stepArtSet = (0, genStepArtSet_1.genStepArtSet)({
|
|
48
|
+
stitchee: 'artist',
|
|
49
|
+
artee: 'inflight',
|
|
50
|
+
});
|
|
51
|
+
exports.routeArtistCodeDiff = (0, rhachet_1.asStitcherFlat)((0, rhachet_1.genStitchRoute)({
|
|
52
|
+
slug: '[artist]<produce>',
|
|
53
|
+
readme: '@[artist]<produce><imagine> -> [proposal]',
|
|
54
|
+
sequence: [stepImagineCodeDiff, stepArtSet],
|
|
55
|
+
}));
|
|
56
|
+
//# sourceMappingURL=routeArtistCodeDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeArtistCodeDiff.js","sourceRoot":"","sources":["../../../../../src/logic/roles/mechanic/codediff/routeArtistCodeDiff.ts"],"names":[],"mappings":";;;AAAA,qCAUiB;AAIjB,8DAA0E;AAC1E,mEAAgE;AAChE,0DAAwD;AAiCxD,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAiB;IAC3C,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,GAAG,kCAAkC,EAAE;IAC5D,YAAY,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;QACrC,MAAM,EACJ,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE;QACvE,QAAQ,EACN,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE;QACxE,QAAQ,EACN,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO;YACjE,kBAAkB,EAAE,8BAA8B;QACpD,GAAG,CAAC,MAAM,IAAA,wCAA8B,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,KAAK,EAAE,MAAM,IAAA,qCAA2B,EAAC;YACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;SACvD,CAAC;QACF,QAAQ,EAAE,MAAM,IAAA,qCAA2B,EAAC;YAC1C,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ;SACrD,CAAC;QACF,SAAS,EAAE,MAAM,IAAA,qCAA2B,EAAC;YAC3C,kBAAkB;YAClB,8CAA8C;YAC9C,SAAS,EAAE,IAAA,oCAAiB,EAAC;gBAC3B,+BAA+B;gBAC/B,yCAAyC;gBACzC,sCAAsC;gBACtC,6BAA6B;gBAC7B,mCAAmC;gBACnC,4BAA4B;gBAC5B,+BAA+B;gBAC/B,gCAAgC;gBAChC,8BAA8B;aAC/B,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAA,mCAAyB,EAAkB;IACrE,IAAI,EAAE,4BAA4B;IAClC,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,kDAAkD;IAC1D,QAAQ;IACR,OAAO,EAAE,qBAAS,CAAC,OAAO;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAA,6BAAa,EAAC;IAC/B,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,UAAU;CAClB,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,wBAAc,EAC/C,IAAA,wBAAc,EAAC;IACb,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,2CAA2C;IACnD,QAAQ,EAAE,CAAC,mBAAmB,EAAE,UAAU,CAAC;CAC5C,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { GStitcher, Threads, RoleContext } from 'rhachet';
|
|
2
|
+
import { Artifact } from 'rhachet-artifact';
|
|
3
|
+
import { GitFile } from 'rhachet-artifact-git';
|
|
4
|
+
import { ContextOpenAI } from '../../../../data/sdk/sdkOpenAi';
|
|
5
|
+
interface ThreadsDesired extends Threads<{
|
|
6
|
+
critic: RoleContext<'critic', {
|
|
7
|
+
art: {
|
|
8
|
+
feedback: Artifact<typeof GitFile>;
|
|
9
|
+
feedbackCodestyle: Artifact<typeof GitFile>;
|
|
10
|
+
};
|
|
11
|
+
org: {
|
|
12
|
+
patterns: Artifact<typeof GitFile>[];
|
|
13
|
+
};
|
|
14
|
+
}>;
|
|
15
|
+
artist: RoleContext<'artist', {
|
|
16
|
+
art: {
|
|
17
|
+
inflight: Artifact<typeof GitFile>;
|
|
18
|
+
};
|
|
19
|
+
scene: {
|
|
20
|
+
coderefs: Artifact<typeof GitFile>[];
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
student: RoleContext<'student', {
|
|
24
|
+
art: {
|
|
25
|
+
claims: Artifact<typeof GitFile>;
|
|
26
|
+
};
|
|
27
|
+
}>;
|
|
28
|
+
}> {
|
|
29
|
+
}
|
|
30
|
+
type StitcherDesired = GStitcher<ThreadsDesired, ContextOpenAI & GStitcher['context'], {
|
|
31
|
+
content: string;
|
|
32
|
+
}>;
|
|
33
|
+
export declare const routeCriticCodeReview: import("rhachet").Stitcher<StitcherDesired>;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
4
|
+
const rhachet_1 = require("rhachet");
|
|
5
|
+
const rhachet_artifact_git_1 = require("rhachet-artifact-git");
|
|
6
|
+
const test_fns_1 = require("test-fns");
|
|
7
|
+
const genContextLogTrail_1 = require("../../../../.test/genContextLogTrail");
|
|
8
|
+
const genContextStitchTrail_1 = require("../../../../.test/genContextStitchTrail");
|
|
9
|
+
const getContextOpenAI_1 = require("../../../../.test/getContextOpenAI");
|
|
10
|
+
const getMechanicBrief_1 = require("../getMechanicBrief");
|
|
11
|
+
const getRefOrgPatterns_1 = require("./getRefOrgPatterns");
|
|
12
|
+
const routeCriticCodeReview_1 = require("./routeCriticCodeReview");
|
|
13
|
+
describe('routeCriticCodeReview', () => {
|
|
14
|
+
const context = {
|
|
15
|
+
...(0, genContextLogTrail_1.genContextLogTrail)(),
|
|
16
|
+
...(0, genContextStitchTrail_1.genContextStitchTrail)(),
|
|
17
|
+
...(0, getContextOpenAI_1.getContextOpenAI)(),
|
|
18
|
+
};
|
|
19
|
+
const route = routeCriticCodeReview_1.routeCriticCodeReview;
|
|
20
|
+
const claimsArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
21
|
+
uri: __dirname + '/.test/multiply.claims.md',
|
|
22
|
+
}, { access: 'readonly' });
|
|
23
|
+
(0, test_fns_1.given)('inflight has code to be reviewed, expected to have blockers', () => {
|
|
24
|
+
const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
25
|
+
uri: __dirname + '/.temp/review/all/multiply.hasblockers.toreview.ts',
|
|
26
|
+
});
|
|
27
|
+
const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
28
|
+
uri: __dirname + '/.temp/review/all/multiply.hasblockers.feedback.md',
|
|
29
|
+
});
|
|
30
|
+
const feedbackCodestyleArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
31
|
+
uri: __dirname +
|
|
32
|
+
'/.temp/review/all/multiply.noblockers.feedback.codestyle.md',
|
|
33
|
+
});
|
|
34
|
+
beforeEach(async () => {
|
|
35
|
+
await inflightArt.set({
|
|
36
|
+
content: 'export const multiply=(a,b)=>a*b;',
|
|
37
|
+
});
|
|
38
|
+
await feedbackArt.del();
|
|
39
|
+
});
|
|
40
|
+
(0, test_fns_1.when)('executing the review route', () => {
|
|
41
|
+
const threads = (0, test_fns_1.usePrep)(async () => ({
|
|
42
|
+
critic: await (0, rhachet_1.enrollThread)({
|
|
43
|
+
role: 'critic',
|
|
44
|
+
stash: {
|
|
45
|
+
art: {
|
|
46
|
+
feedback: feedbackArt,
|
|
47
|
+
feedbackCodestyle: feedbackCodestyleArt,
|
|
48
|
+
},
|
|
49
|
+
org: {
|
|
50
|
+
patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
inherit: {
|
|
54
|
+
traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
|
|
55
|
+
},
|
|
56
|
+
}),
|
|
57
|
+
artist: await (0, rhachet_1.enrollThread)({
|
|
58
|
+
role: 'artist',
|
|
59
|
+
stash: {
|
|
60
|
+
art: { inflight: inflightArt },
|
|
61
|
+
scene: { coderefs: [inflightArt] },
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
student: await (0, rhachet_1.enrollThread)({
|
|
65
|
+
role: 'student',
|
|
66
|
+
stash: {
|
|
67
|
+
art: { claims: claimsArt },
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
}));
|
|
71
|
+
(0, test_fns_1.then)('writes feedback about the inflight diff', async () => {
|
|
72
|
+
const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
|
|
73
|
+
const file = await feedbackArt.get();
|
|
74
|
+
const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
|
|
75
|
+
expect(content).toMatch(/blocker/i);
|
|
76
|
+
expect(content.length).toBeGreaterThan(10);
|
|
77
|
+
expect(result.threads.critic.stitches.length).toBeGreaterThan(0);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
(0, test_fns_1.given)('inflight has code to be reviewed, expected no blockers', () => {
|
|
82
|
+
const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
83
|
+
uri: __dirname + '/.temp/review/all/multiply.noblockers.toreview.ts',
|
|
84
|
+
});
|
|
85
|
+
const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
86
|
+
uri: __dirname + '/.temp/review/all/multiply.noblockers.feedback.md',
|
|
87
|
+
});
|
|
88
|
+
const feedbackCodestyleArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
|
|
89
|
+
uri: __dirname +
|
|
90
|
+
'/.temp/review/all/multiply.noblockers.feedback.codestyle.md',
|
|
91
|
+
});
|
|
92
|
+
beforeEach(async () => {
|
|
93
|
+
await inflightArt.set({
|
|
94
|
+
content: `
|
|
95
|
+
export const multiply = ({ a, b }: { a: number, b: number }): number => {
|
|
96
|
+
return a * b;
|
|
97
|
+
};
|
|
98
|
+
`,
|
|
99
|
+
});
|
|
100
|
+
await feedbackArt.del();
|
|
101
|
+
});
|
|
102
|
+
(0, test_fns_1.when)('executing the review route', () => {
|
|
103
|
+
const threads = (0, test_fns_1.usePrep)(async () => ({
|
|
104
|
+
critic: await (0, rhachet_1.enrollThread)({
|
|
105
|
+
role: 'critic',
|
|
106
|
+
stash: {
|
|
107
|
+
art: {
|
|
108
|
+
feedback: feedbackArt,
|
|
109
|
+
feedbackCodestyle: feedbackCodestyleArt,
|
|
110
|
+
},
|
|
111
|
+
org: {
|
|
112
|
+
patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
inherit: {
|
|
116
|
+
traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
|
|
117
|
+
},
|
|
118
|
+
}),
|
|
119
|
+
artist: await (0, rhachet_1.enrollThread)({
|
|
120
|
+
role: 'artist',
|
|
121
|
+
stash: {
|
|
122
|
+
art: { inflight: inflightArt },
|
|
123
|
+
scene: { coderefs: [inflightArt] },
|
|
124
|
+
},
|
|
125
|
+
}),
|
|
126
|
+
student: await (0, rhachet_1.enrollThread)({
|
|
127
|
+
role: 'student',
|
|
128
|
+
stash: {
|
|
129
|
+
art: { claims: claimsArt },
|
|
130
|
+
},
|
|
131
|
+
}),
|
|
132
|
+
}));
|
|
133
|
+
(0, test_fns_1.then)('writes feedback about the inflight diff', async () => {
|
|
134
|
+
const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
|
|
135
|
+
const file = await feedbackArt.get();
|
|
136
|
+
const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
|
|
137
|
+
expect(content).not.toMatch(/blocker/i);
|
|
138
|
+
expect(content.length).toBeGreaterThan(1);
|
|
139
|
+
expect(result.threads.critic.stitches.length).toBeGreaterThan(0);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=routeCriticCodeReview.integration.test.js.map
|