traits 0.5.2 → 0.5.4
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/TraitStore.ts +17 -22
- package/dist/TraitDerivation.d.ts +1 -1
- package/dist/TraitDerivation.d.ts.map +1 -1
- package/dist/TraitStore.d.ts +16 -22
- package/dist/TraitStore.d.ts.map +1 -1
- package/dist/TraitStore.js +12 -8
- package/dist/TraitStore.js.map +1 -1
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/test/TraitStore.test.js +26 -0
- package/dist/test/TraitStore.test.js.map +1 -1
- package/dist/test/TraitsInitialization.test.d.ts +2 -0
- package/dist/test/TraitsInitialization.test.d.ts.map +1 -0
- package/dist/test/TraitsInitialization.test.js +127 -0
- package/dist/test/TraitsInitialization.test.js.map +1 -0
- package/dist/toolkit/CheckTraits.d.ts +2 -26
- package/dist/toolkit/CheckTraits.d.ts.map +1 -1
- package/dist/toolkit/ConfigurationError.d.ts +3 -0
- package/dist/toolkit/ConfigurationError.d.ts.map +1 -0
- package/dist/toolkit/ConfigurationError.js +24 -0
- package/dist/toolkit/ConfigurationError.js.map +1 -0
- package/dist/toolkit/DeriveTrait.d.ts +2 -26
- package/dist/toolkit/DeriveTrait.d.ts.map +1 -1
- package/main.ts +3 -1
- package/package.json +1 -1
- package/skills/traits/SKILL.md +10 -5
- package/toolkit/ConfigurationError.ts +40 -0
package/TraitStore.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Array,
|
|
3
|
+
Cause,
|
|
3
4
|
Context,
|
|
4
5
|
Effect,
|
|
5
6
|
FileSystem,
|
|
@@ -13,9 +14,17 @@ import {
|
|
|
13
14
|
String
|
|
14
15
|
} from "effect"
|
|
15
16
|
|
|
16
|
-
import * as Frontmatter from "./_util/Frontmatter.ts"
|
|
17
17
|
import * as Trait from "./Trait.ts"
|
|
18
18
|
|
|
19
|
+
export class TraitParseError extends S.TaggedError<TraitParseError>()("TraitParseError", {
|
|
20
|
+
path: S.String,
|
|
21
|
+
cause: S.Defect()
|
|
22
|
+
}) {
|
|
23
|
+
override get message() {
|
|
24
|
+
return `Unable to parse trait ${this.path}.\n${Cause.pretty(Cause.fail(this.cause))}\n\nUpdate all stored traits to the format/schema of the currently installed traits package. Inspect its Trait schema and serialize format, preserve each trait's intent and metadata, then retry the tool. Do not treat this failed operation as a successful check.`
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
export class TraitNotFoundError extends S.TaggedError<TraitNotFoundError>()("TraitNotFoundError", {
|
|
20
29
|
name: Trait.TraitName
|
|
21
30
|
}) {
|
|
@@ -45,11 +54,8 @@ export const TraitStoreError = S.Union([
|
|
|
45
54
|
S.Struct({ ...TraitNotFoundError.fields, message: S.String }),
|
|
46
55
|
S.Struct({ ...TraitAlreadyExistsError.fields, message: S.String }),
|
|
47
56
|
S.Struct({ ...TraitFilenameMismatchError.fields, message: S.String }),
|
|
48
|
-
S.Struct({ ...
|
|
49
|
-
S.
|
|
50
|
-
S.Struct({ ...Frontmatter.InvalidYamlError.fields, message: S.String }),
|
|
51
|
-
S.TaggedStruct("PlatformError", { message: S.String }),
|
|
52
|
-
S.TaggedStruct("SchemaError", { message: S.String })
|
|
57
|
+
S.Struct({ ...TraitParseError.fields, message: S.String }),
|
|
58
|
+
S.TaggedStruct("PlatformError", { message: S.String })
|
|
53
59
|
])
|
|
54
60
|
|
|
55
61
|
export class TraitStore extends Context.Service<
|
|
@@ -62,35 +68,23 @@ export class TraitStore extends Context.Service<
|
|
|
62
68
|
trait: Trait.Trait
|
|
63
69
|
) => Effect.Effect<
|
|
64
70
|
void,
|
|
65
|
-
|
|
66
|
-
| S.SchemaError
|
|
67
|
-
| Frontmatter.ParseError
|
|
68
|
-
| TraitNotFoundError
|
|
69
|
-
| TraitFilenameMismatchError
|
|
71
|
+
PlatformError.PlatformError | TraitParseError | TraitNotFoundError | TraitFilenameMismatchError
|
|
70
72
|
>
|
|
71
73
|
readonly get: (
|
|
72
74
|
name: Trait.TraitName
|
|
73
75
|
) => Effect.Effect<
|
|
74
76
|
Trait.Trait,
|
|
75
|
-
|
|
76
|
-
| S.SchemaError
|
|
77
|
-
| Frontmatter.ParseError
|
|
78
|
-
| TraitNotFoundError
|
|
79
|
-
| TraitFilenameMismatchError
|
|
77
|
+
PlatformError.PlatformError | TraitParseError | TraitNotFoundError | TraitFilenameMismatchError
|
|
80
78
|
>
|
|
81
79
|
readonly ls: Effect.Effect<
|
|
82
80
|
ReadonlyArray<Trait.Trait>,
|
|
83
|
-
PlatformError.PlatformError |
|
|
81
|
+
PlatformError.PlatformError | TraitParseError | TraitFilenameMismatchError
|
|
84
82
|
>
|
|
85
83
|
readonly rm: (
|
|
86
84
|
names: ReadonlyArray<Trait.TraitName>
|
|
87
85
|
) => Effect.Effect<
|
|
88
86
|
void,
|
|
89
|
-
|
|
90
|
-
| S.SchemaError
|
|
91
|
-
| Frontmatter.ParseError
|
|
92
|
-
| TraitNotFoundError
|
|
93
|
-
| TraitFilenameMismatchError
|
|
87
|
+
PlatformError.PlatformError | TraitParseError | TraitNotFoundError | TraitFilenameMismatchError
|
|
94
88
|
>
|
|
95
89
|
}
|
|
96
90
|
>()("traits/TraitStore") {}
|
|
@@ -108,6 +102,7 @@ export const layerFileSystem = (dir: string) =>
|
|
|
108
102
|
const readFile = Effect.fn("TraitStore.readFile")(function* (file: string) {
|
|
109
103
|
const text = yield* fs.readFileString(file)
|
|
110
104
|
return yield* Trait.parse(text, file).pipe(
|
|
105
|
+
Effect.mapError((cause) => TraitParseError.make({ path: file, cause })),
|
|
111
106
|
Effect.filterOrFail(
|
|
112
107
|
(trait) => traitPath(trait.name) === file,
|
|
113
108
|
(trait) => TraitFilenameMismatchError.make({ path: file, expectedFilename: `${trait.name}.md` })
|
|
@@ -152,5 +152,5 @@ export declare const derive: (params: {
|
|
|
152
152
|
readonly skip?: string | undefined;
|
|
153
153
|
readonly when?: string | undefined;
|
|
154
154
|
};
|
|
155
|
-
}, import("effect/ai/AiError").AiError | import("effect/ai/McpSchema").ElicitationDeclined | import("
|
|
155
|
+
}, import("effect/ai/AiError").AiError | import("effect/ai/McpSchema").ElicitationDeclined | import("effect/PlatformError").PlatformError | TraitAlreadyExistsError | import("./TraitStore.ts").TraitFilenameMismatchError | import("./TraitStore.ts").TraitNotFoundError | import("./TraitStore.ts").TraitParseError, import("effect/ai/DecisionModel").DecisionModel | LanguageModel.LanguageModel | TraitStore | import("./TraitsContext.ts").TraitsContext>;
|
|
156
156
|
//# sourceMappingURL=TraitDerivation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TraitDerivation.d.ts","sourceRoot":"","sources":["../TraitDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAA2B,MAAM,IAAI,CAAC,EAAkB,MAAM,QAAQ,CAAA;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AACzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAUI,CAAA;AAEhC,eAAO,MAAM,MAAM;mBACF,KAAK,CAAC,SAAS;4BACN,MAAM;oBACd,KAAK,CAAC,SAAS,GAAG,SAAS;wBACvB,OAAO,GAAG,SAAS
|
|
1
|
+
{"version":3,"file":"TraitDerivation.d.ts","sourceRoot":"","sources":["../TraitDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAA2B,MAAM,IAAI,CAAC,EAAkB,MAAM,QAAQ,CAAA;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AACzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAUI,CAAA;AAEhC,eAAO,MAAM,MAAM;mBACF,KAAK,CAAC,SAAS;4BACN,MAAM;oBACd,KAAK,CAAC,SAAS,GAAG,SAAS;wBACvB,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+bAoEvC,CAAA"}
|
package/dist/TraitStore.d.ts
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import { Context, Effect, FileSystem, Layer, Path, PlatformError, Schema as S } from "effect";
|
|
2
|
-
import * as Frontmatter from "./_util/Frontmatter.ts";
|
|
1
|
+
import { Cause, Context, Effect, FileSystem, Layer, Path, PlatformError, Schema as S } from "effect";
|
|
3
2
|
import * as Trait from "./Trait.ts";
|
|
3
|
+
declare const TraitParseError_base: S.Class<TraitParseError, S.TaggedStruct<"TraitParseError", {
|
|
4
|
+
readonly path: S.String;
|
|
5
|
+
readonly cause: S.Defect;
|
|
6
|
+
}>, Cause.YieldableError>;
|
|
7
|
+
export declare class TraitParseError extends TraitParseError_base {
|
|
8
|
+
get message(): string;
|
|
9
|
+
}
|
|
4
10
|
declare const TraitNotFoundError_base: S.Class<TraitNotFoundError, S.TaggedStruct<"TraitNotFoundError", {
|
|
5
11
|
readonly name: S.brand<S.String, "traits/TraitName">;
|
|
6
|
-
}>,
|
|
12
|
+
}>, Cause.YieldableError>;
|
|
7
13
|
export declare class TraitNotFoundError extends TraitNotFoundError_base {
|
|
8
14
|
get message(): string;
|
|
9
15
|
}
|
|
10
16
|
declare const TraitAlreadyExistsError_base: S.Class<TraitAlreadyExistsError, S.TaggedStruct<"TraitAlreadyExistsError", {
|
|
11
17
|
readonly name: S.brand<S.String, "traits/TraitName">;
|
|
12
|
-
}>,
|
|
18
|
+
}>, Cause.YieldableError>;
|
|
13
19
|
export declare class TraitAlreadyExistsError extends TraitAlreadyExistsError_base {
|
|
14
20
|
get message(): string;
|
|
15
21
|
}
|
|
16
22
|
declare const TraitFilenameMismatchError_base: S.Class<TraitFilenameMismatchError, S.TaggedStruct<"TraitFilenameMismatchError", {
|
|
17
23
|
readonly path: S.String;
|
|
18
24
|
readonly expectedFilename: S.String;
|
|
19
|
-
}>,
|
|
25
|
+
}>, Cause.YieldableError>;
|
|
20
26
|
export declare class TraitFilenameMismatchError extends TraitFilenameMismatchError_base {
|
|
21
27
|
get message(): string;
|
|
22
28
|
}
|
|
@@ -34,31 +40,19 @@ export declare const TraitStoreError: S.Union<readonly [S.Struct<{
|
|
|
34
40
|
readonly expectedFilename: S.String;
|
|
35
41
|
readonly message: S.String;
|
|
36
42
|
}>, S.Struct<{
|
|
37
|
-
readonly _tag: S.tag<"
|
|
43
|
+
readonly _tag: S.tag<"TraitParseError">;
|
|
38
44
|
readonly path: S.String;
|
|
39
|
-
readonly message: S.String;
|
|
40
|
-
}>, S.Struct<{
|
|
41
|
-
readonly _tag: S.tag<"UnterminatedFrontmatterError">;
|
|
42
|
-
readonly path: S.String;
|
|
43
|
-
readonly message: S.String;
|
|
44
|
-
}>, S.Struct<{
|
|
45
|
-
readonly _tag: S.tag<"InvalidYamlError">;
|
|
46
|
-
readonly path: S.String;
|
|
47
|
-
readonly line: S.optional<S.Int>;
|
|
48
|
-
readonly column: S.optional<S.Int>;
|
|
49
45
|
readonly cause: S.Defect;
|
|
50
46
|
readonly message: S.String;
|
|
51
47
|
}>, S.TaggedStruct<"PlatformError", {
|
|
52
48
|
readonly message: S.String;
|
|
53
|
-
}>, S.TaggedStruct<"SchemaError", {
|
|
54
|
-
readonly message: S.String;
|
|
55
49
|
}>]>;
|
|
56
50
|
declare const TraitStore_base: Context.ServiceClass<TraitStore, "traits/TraitStore", {
|
|
57
51
|
readonly add: (trait: Trait.Trait) => Effect.Effect<Trait.Trait, PlatformError.PlatformError | TraitAlreadyExistsError>;
|
|
58
|
-
readonly update: (trait: Trait.Trait) => Effect.Effect<void, PlatformError.PlatformError |
|
|
59
|
-
readonly get: (name: Trait.TraitName) => Effect.Effect<Trait.Trait, PlatformError.PlatformError |
|
|
60
|
-
readonly ls: Effect.Effect<ReadonlyArray<Trait.Trait>, PlatformError.PlatformError |
|
|
61
|
-
readonly rm: (names: ReadonlyArray<Trait.TraitName>) => Effect.Effect<void, PlatformError.PlatformError |
|
|
52
|
+
readonly update: (trait: Trait.Trait) => Effect.Effect<void, PlatformError.PlatformError | TraitParseError | TraitNotFoundError | TraitFilenameMismatchError>;
|
|
53
|
+
readonly get: (name: Trait.TraitName) => Effect.Effect<Trait.Trait, PlatformError.PlatformError | TraitParseError | TraitNotFoundError | TraitFilenameMismatchError>;
|
|
54
|
+
readonly ls: Effect.Effect<ReadonlyArray<Trait.Trait>, PlatformError.PlatformError | TraitParseError | TraitFilenameMismatchError>;
|
|
55
|
+
readonly rm: (names: ReadonlyArray<Trait.TraitName>) => Effect.Effect<void, PlatformError.PlatformError | TraitParseError | TraitNotFoundError | TraitFilenameMismatchError>;
|
|
62
56
|
}>;
|
|
63
57
|
export declare class TraitStore extends TraitStore_base {
|
|
64
58
|
}
|
package/dist/TraitStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TraitStore.d.ts","sourceRoot":"","sources":["../TraitStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EACP,MAAM,EACN,UAAU,EAEV,KAAK,EACL,IAAI,EAEJ,aAAa,EAEb,MAAM,IAAI,CAAC,EAEZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TraitStore.d.ts","sourceRoot":"","sources":["../TraitStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,EAEV,KAAK,EACL,IAAI,EAEJ,aAAa,EAEb,MAAM,IAAI,CAAC,EAEZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;;;;;AAEnC,qBAAa,eAAgB,SAAQ,oBAGnC;IACA,IAAa,OAAO,WAEnB;CACF;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAEtC;IACA,IAAa,OAAO,WAEnB;CACF;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAE3C;IACA,IAAa,OAAO,WAEnB;CACF;;;;;AAED,qBAAa,0BAA2B,SAAQ,+BAG/C;IACC,IAAa,OAAO,WAEnB;CACF;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;IAM1B,CAAA;;kBAKgB,CACZ,KAAK,EAAE,KAAK,CAAC,KAAK,KACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,GAAG,uBAAuB,CAAC;qBACrE,CACf,KAAK,EAAE,KAAK,CAAC,KAAK,KACf,MAAM,CAAC,MAAM,CAChB,IAAI,EACJ,aAAa,CAAC,aAAa,GAAG,eAAe,GAAG,kBAAkB,GAAG,0BAA0B,CAChG;kBACa,CACZ,IAAI,EAAE,KAAK,CAAC,SAAS,KAClB,MAAM,CAAC,MAAM,CAChB,KAAK,CAAC,KAAK,EACX,aAAa,CAAC,aAAa,GAAG,eAAe,GAAG,kBAAkB,GAAG,0BAA0B,CAChG;iBACY,MAAM,CAAC,MAAM,CACxB,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1B,aAAa,CAAC,aAAa,GAAG,eAAe,GAAG,0BAA0B,CAC3E;iBACY,CACX,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,IAAI,EACJ,aAAa,CAAC,aAAa,GAAG,eAAe,GAAG,kBAAkB,GAAG,0BAA0B,CAChG;;AA3BL,qBAAa,UAAW,SAAQ,eA6BR;CAAG;AAE3B,eAAO,MAAM,eAAe,QAAS,MAAM,4FA2ExC,CAAA"}
|
package/dist/TraitStore.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import { Array, Context, Effect, FileSystem, flow, Layer, Path, pipe, PlatformError, Predicate, Schema as S, String } from "effect";
|
|
2
|
-
import * as Frontmatter from "./_util/Frontmatter.js";
|
|
1
|
+
import { Array, Cause, Context, Effect, FileSystem, flow, Layer, Path, pipe, PlatformError, Predicate, Schema as S, String } from "effect";
|
|
3
2
|
import * as Trait from "./Trait.js";
|
|
3
|
+
export class TraitParseError extends S.TaggedError()("TraitParseError", {
|
|
4
|
+
path: S.String,
|
|
5
|
+
cause: S.Defect()
|
|
6
|
+
}) {
|
|
7
|
+
get message() {
|
|
8
|
+
return `Unable to parse trait ${this.path}.\n${Cause.pretty(Cause.fail(this.cause))}\n\nUpdate all stored traits to the format/schema of the currently installed traits package. Inspect its Trait schema and serialize format, preserve each trait's intent and metadata, then retry the tool. Do not treat this failed operation as a successful check.`;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
4
11
|
export class TraitNotFoundError extends S.TaggedError()("TraitNotFoundError", {
|
|
5
12
|
name: Trait.TraitName
|
|
6
13
|
}) {
|
|
@@ -24,11 +31,8 @@ export const TraitStoreError = S.Union([
|
|
|
24
31
|
S.Struct({ ...TraitNotFoundError.fields, message: S.String }),
|
|
25
32
|
S.Struct({ ...TraitAlreadyExistsError.fields, message: S.String }),
|
|
26
33
|
S.Struct({ ...TraitFilenameMismatchError.fields, message: S.String }),
|
|
27
|
-
S.Struct({ ...
|
|
28
|
-
S.
|
|
29
|
-
S.Struct({ ...Frontmatter.InvalidYamlError.fields, message: S.String }),
|
|
30
|
-
S.TaggedStruct("PlatformError", { message: S.String }),
|
|
31
|
-
S.TaggedStruct("SchemaError", { message: S.String })
|
|
34
|
+
S.Struct({ ...TraitParseError.fields, message: S.String }),
|
|
35
|
+
S.TaggedStruct("PlatformError", { message: S.String })
|
|
32
36
|
]);
|
|
33
37
|
export class TraitStore extends Context.Service()("traits/TraitStore") {
|
|
34
38
|
}
|
|
@@ -40,7 +44,7 @@ export const layerFileSystem = (dir) => Layer.effect(TraitStore, Effect.gen(func
|
|
|
40
44
|
const traitPath = (name) => path.join(root, `${name}.md`);
|
|
41
45
|
const readFile = Effect.fn("TraitStore.readFile")(function* (file) {
|
|
42
46
|
const text = yield* fs.readFileString(file);
|
|
43
|
-
return yield* Trait.parse(text, file).pipe(Effect.filterOrFail((trait) => traitPath(trait.name) === file, (trait) => TraitFilenameMismatchError.make({ path: file, expectedFilename: `${trait.name}.md` })));
|
|
47
|
+
return yield* Trait.parse(text, file).pipe(Effect.mapError((cause) => TraitParseError.make({ path: file, cause })), Effect.filterOrFail((trait) => traitPath(trait.name) === file, (trait) => TraitFilenameMismatchError.make({ path: file, expectedFilename: `${trait.name}.md` })));
|
|
44
48
|
});
|
|
45
49
|
const get = Effect.fn("TraitStore.get")((name) => readFile(traitPath(name)).pipe(Effect.catchTags({
|
|
46
50
|
PlatformError: (error) => error.reason._tag === "NotFound" ? TraitNotFoundError.make({ name }) : Effect.fail(error)
|
package/dist/TraitStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TraitStore.js","sourceRoot":"","sources":["../TraitStore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,SAAS,EACT,MAAM,IAAI,CAAC,EACX,MAAM,EACP,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TraitStore.js","sourceRoot":"","sources":["../TraitStore.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -7,6 +7,7 @@ import { FetchHttpClient } from "effect/http";
|
|
|
7
7
|
import * as TraitsConfigProvider from "./_util/TraitsConfigProvider.js";
|
|
8
8
|
import * as TraitsTelemetry from "./_util/TraitsTelemetry.js";
|
|
9
9
|
import PackageJson from "./package.json" with { type: "json" };
|
|
10
|
+
import * as ConfigurationError from "./toolkit/ConfigurationError.js";
|
|
10
11
|
import { toolkit } from "./toolkit/toolkit.js";
|
|
11
12
|
import * as TraitsConfig from "./TraitsConfig.js";
|
|
12
13
|
import * as TraitStore from "./TraitStore.js";
|
|
@@ -71,5 +72,5 @@ Command.make("traits", {
|
|
|
71
72
|
| An empty result only means no failures for the selected files and traits; empty selections or an empty store perform no assessments.
|
|
72
73
|
| On mutation errors, inspect the store before retrying: writes and removals are not transactional, and retries may duplicate saved traits.
|
|
73
74
|
`)
|
|
74
|
-
}).pipe(Layer.provide(toolkit.pipe(Layer.provide(TraitStore.layerFileSystem(".agents/traits")), Layer.provide(TraitsConfig.layer), Layer.provideMerge(McpServer.McpServer.layer))), Layer.launch, Effect.withSpan("traits.server"), Effect.provide(TraitsTelemetry.layer(Option.getOrUndefined(params.otlpEndpoint)).pipe(Layer.provideMerge(
|
|
75
|
+
}).pipe(Layer.provide(toolkit.pipe(Layer.provide(TraitStore.layerFileSystem(".agents/traits")), Layer.provide(TraitsConfig.layer), Layer.provide(TraitsConfigProvider.layer), Layer.catchCause(ConfigurationError.layer), Layer.provideMerge(McpServer.McpServer.layer))), Layer.launch, Effect.withSpan("traits.server"), Effect.provide(TraitsTelemetry.layer(Option.getOrUndefined(params.otlpEndpoint)).pipe(Layer.provideMerge(FetchHttpClient.layer))))), Command.run({ version: PackageJson.version }), Effect.provide(NodeServices.layer), Effect.tapCause(Effect.logError), Effect.provideService(Logger.LogToStderr, true), NodeRuntime.runMain({ disableErrorReporting: true }));
|
|
75
76
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,oBAAoB,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,eAAe,MAAM,4BAA4B,CAAA;AAC7D,OAAO,WAAW,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;IACrB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAC7C,IAAI,CAAC,UAAU,CACb,CAAC,CAAC,aAAa,CAAC,KAAK,CACnB,CAAC,CAAC,UAAU,CACV,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,oCAAoC,CACvG,CACF,CACF,EACD,IAAI,CAAC,eAAe,CAClB,kIAAkI,CACnI,EACD,IAAI,CAAC,QAAQ,CACd;CACF,CAAC,CAAC,IAAI,CACL,OAAO,CAAC,eAAe,CAAC,sCAAsC,CAAC,EAC/D,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7B,SAAS,CAAC,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,SAAS,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsDhC,CAAC;CACH,CAAC,CAAC,IAAI,CACL,KAAK,CAAC,OAAO,CACX,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,EAC3D,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EACjC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAC9C,CACF,EACD,KAAK,CAAC,MAAM,EACZ,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAChC,MAAM,CAAC,OAAO,CACZ,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CACpE,KAAK,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../main.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -3,6 +3,32 @@ import { expect, it } from "@effect/vitest";
|
|
|
3
3
|
import { Effect, FileSystem, Path, Result } from "effect";
|
|
4
4
|
import * as Trait from "../Trait.js";
|
|
5
5
|
import * as TraitStore from "../TraitStore.js";
|
|
6
|
+
it.effect("reports migration guidance without changing an unparseable stored trait", Effect.fn("test.TraitStore.parseError")(function* () {
|
|
7
|
+
const fs = yield* FileSystem.FileSystem;
|
|
8
|
+
const path = yield* Path.Path;
|
|
9
|
+
const dir = yield* fs.makeTempDirectoryScoped({ prefix: "traits-parse-" });
|
|
10
|
+
const trait = Trait.Trait.make({ name: Trait.TraitName.make("old-format"), body: "Preserve this rule." });
|
|
11
|
+
const file = path.join(dir, "old-format.md");
|
|
12
|
+
const original = "---\nname: [\n---\nPreserve this rule.";
|
|
13
|
+
yield* fs.writeFileString(file, original);
|
|
14
|
+
yield* Effect.gen(function* () {
|
|
15
|
+
const store = yield* TraitStore.TraitStore;
|
|
16
|
+
for (const operation of [store.get(trait.name), store.update(trait), store.rm([trait.name])]) {
|
|
17
|
+
const result = yield* operation.pipe(Effect.result);
|
|
18
|
+
expect(Result.isFailure(result)).toBe(true);
|
|
19
|
+
if (Result.isFailure(result)) {
|
|
20
|
+
expect(result.failure).toMatchObject({
|
|
21
|
+
_tag: "TraitParseError",
|
|
22
|
+
path: file,
|
|
23
|
+
cause: { _tag: "InvalidYamlError" },
|
|
24
|
+
message: expect.stringContaining("Update all stored traits")
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const text = yield* fs.readFileString(file);
|
|
29
|
+
expect(text).toBe(original);
|
|
30
|
+
}).pipe(Effect.provide(TraitStore.layerFileSystem(dir)));
|
|
31
|
+
}, Effect.provide(NodeServices.layer)));
|
|
6
32
|
it.effect("stores complete traits by unique name without overwriting duplicates", Effect.fn("test.TraitStore")(function* () {
|
|
7
33
|
const fs = yield* FileSystem.FileSystem;
|
|
8
34
|
const path = yield* Path.Path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TraitStore.test.js","sourceRoot":"","sources":["../../test/TraitStore.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TraitStore.test.js","sourceRoot":"","sources":["../../test/TraitStore.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraitsInitialization.test.d.ts","sourceRoot":"","sources":["../../test/TraitsInitialization.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { NodeServices } from "@effect/platform-node";
|
|
2
|
+
import { expect, it } from "@effect/vitest";
|
|
3
|
+
import { Effect, FileSystem, Path, pipe, Queue, Schema as S, Stream } from "effect";
|
|
4
|
+
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
5
|
+
import { CheckTraits } from "../toolkit/CheckTraits.js";
|
|
6
|
+
import { DeriveTrait } from "../toolkit/DeriveTrait.js";
|
|
7
|
+
const effectUrl = new URL("../../node_modules/effect/dist/index.js", import.meta.url).href;
|
|
8
|
+
const server = new URL("../main.ts", import.meta.url).pathname;
|
|
9
|
+
for (const fixture of [
|
|
10
|
+
{ name: "unreadable environment", source: "export default {}", diagnostic: ".env" },
|
|
11
|
+
{
|
|
12
|
+
name: "throwing module",
|
|
13
|
+
source: 'throw new Error("example module failure")',
|
|
14
|
+
diagnostic: "example module failure"
|
|
15
|
+
},
|
|
16
|
+
{ name: "invalid config", source: "export default {}", diagnostic: "layerDecisionModel" },
|
|
17
|
+
{
|
|
18
|
+
name: "missing credentials",
|
|
19
|
+
source: `import { Config, Layer } from ${JSON.stringify(effectUrl)};
|
|
20
|
+
export default { layerDecisionModel: Layer.effectDiscard(Config.Redacted("TRAITS_TEST_MISSING_KEY")), layerLanguageModel: Layer.empty }`,
|
|
21
|
+
diagnostic: "TRAITS_TEST_MISSING_KEY"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "provider defect",
|
|
25
|
+
source: `import { Effect, Layer } from ${JSON.stringify(effectUrl)};
|
|
26
|
+
export default { layerDecisionModel: Layer.effectDiscard(Effect.die("example provider defect")), layerLanguageModel: Layer.empty }`,
|
|
27
|
+
diagnostic: "example provider defect"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "arbitrary provider failure",
|
|
31
|
+
source: `import { Effect, Layer } from ${JSON.stringify(effectUrl)};
|
|
32
|
+
export default { layerDecisionModel: Layer.effectDiscard(Effect.fail({ _tag: "CustomFailure", message: "example custom failure" })), layerLanguageModel: Layer.empty }`,
|
|
33
|
+
diagnostic: "example custom failure"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "outdated stored trait",
|
|
37
|
+
source: `import { Layer } from ${JSON.stringify(effectUrl)};
|
|
38
|
+
export default { layerDecisionModel: Layer.empty, layerLanguageModel: Layer.empty }`,
|
|
39
|
+
trait: "---\nname: legacy_name\n---\nKeep this rule.\n",
|
|
40
|
+
diagnostic: "Update all stored traits to the format/schema of the currently installed traits package"
|
|
41
|
+
}
|
|
42
|
+
]) {
|
|
43
|
+
it.effect(`keeps MCP connected with ${fixture.name}`, Effect.fn("test.TraitsInitialization")(function* () {
|
|
44
|
+
const fs = yield* FileSystem.FileSystem;
|
|
45
|
+
const path = yield* Path.Path;
|
|
46
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
47
|
+
const directory = yield* fs.exists("/tmp/opencode");
|
|
48
|
+
const cwd = yield* fs.makeTempDirectoryScoped({
|
|
49
|
+
directory: directory ? "/tmp/opencode" : undefined,
|
|
50
|
+
prefix: "traits-mcp-"
|
|
51
|
+
});
|
|
52
|
+
yield* spawner.exitCode(ChildProcess.make("git", ["init", "--quiet"], { cwd }));
|
|
53
|
+
yield* fs.writeFileString(path.join(cwd, "traits.ts"), fixture.source);
|
|
54
|
+
const traitPath = path.join(cwd, ".agents/traits/outdated-trait.md");
|
|
55
|
+
if ("trait" in fixture) {
|
|
56
|
+
yield* fs.makeDirectory(path.dirname(traitPath), { recursive: true });
|
|
57
|
+
yield* fs.writeFileString(traitPath, fixture.trait);
|
|
58
|
+
}
|
|
59
|
+
if (fixture.name === "unreadable environment")
|
|
60
|
+
yield* fs.makeDirectory(path.join(cwd, ".env"));
|
|
61
|
+
const requests = yield* Queue.unbounded();
|
|
62
|
+
const responses = yield* Queue.unbounded();
|
|
63
|
+
const child = yield* spawner.spawn(ChildProcess.make(process.execPath, [server], {
|
|
64
|
+
cwd,
|
|
65
|
+
stdin: Stream.fromQueue(requests).pipe(Stream.encodeText),
|
|
66
|
+
stderr: "inherit"
|
|
67
|
+
}));
|
|
68
|
+
yield* child.stdout.pipe(Stream.decodeText(), Stream.splitLines, Stream.runForEach((line) => Queue.offer(responses, line)), Effect.forkScoped);
|
|
69
|
+
const request = Effect.fn("test.McpRequest")(function* (id, method, params = {}) {
|
|
70
|
+
yield* Queue.offer(requests, `${JSON.stringify({ jsonrpc: "2.0", id, method, params })}\n`);
|
|
71
|
+
while (true) {
|
|
72
|
+
const line = yield* Queue.take(responses);
|
|
73
|
+
const response = yield* pipe(line, S.decodeEffect(S.fromJsonString(S.Struct({
|
|
74
|
+
id: S.Int.pipe(S.optional),
|
|
75
|
+
result: S.Unknown.pipe(S.optional)
|
|
76
|
+
}))));
|
|
77
|
+
if (response.id === id)
|
|
78
|
+
return response.result;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const initialized = yield* request(1, "initialize", {
|
|
82
|
+
protocolVersion: "2025-11-25",
|
|
83
|
+
capabilities: {},
|
|
84
|
+
clientInfo: { name: "test", version: "1" }
|
|
85
|
+
});
|
|
86
|
+
expect(initialized).toMatchObject({ serverInfo: { name: "traits" } });
|
|
87
|
+
yield* Queue.offer(requests, `${JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized" })}\n`);
|
|
88
|
+
const listed = yield* request(2, "tools/list");
|
|
89
|
+
expect(listed).toMatchObject({
|
|
90
|
+
tools: expect.arrayContaining([
|
|
91
|
+
expect.objectContaining({ name: "check_traits", description: CheckTraits.description }),
|
|
92
|
+
expect.objectContaining({ name: "derive_trait", description: DeriveTrait.description })
|
|
93
|
+
])
|
|
94
|
+
});
|
|
95
|
+
for (const index of [3, 4]) {
|
|
96
|
+
const tool = index === 3
|
|
97
|
+
? { name: "check_traits", arguments: { include: [] } }
|
|
98
|
+
: { name: "derive_trait", arguments: { name: "example", proposedTrait: "Example rule" } };
|
|
99
|
+
const result = yield* request(index, "tools/call", tool);
|
|
100
|
+
expect(result).toMatchObject({
|
|
101
|
+
isError: true,
|
|
102
|
+
content: [{ type: "text", text: expect.stringContaining(fixture.diagnostic) }]
|
|
103
|
+
});
|
|
104
|
+
if ("trait" in fixture) {
|
|
105
|
+
expect(JSON.stringify(result)).toContain(traitPath);
|
|
106
|
+
expect(JSON.stringify(result)).toContain("TraitParseError");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
expect(JSON.stringify(result)).toContain("restart the Traits MCP server");
|
|
110
|
+
if (tool.name === "derive_trait") {
|
|
111
|
+
expect(JSON.stringify(result)).toContain("retry the same trait derivation with the identical arguments");
|
|
112
|
+
expect(JSON.stringify(result)).toContain("No trait was saved");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if ("trait" in fixture) {
|
|
117
|
+
const unchanged = yield* fs.readFileString(traitPath);
|
|
118
|
+
expect(unchanged).toBe(fixture.trait);
|
|
119
|
+
yield* fs.writeFileString(traitPath, "---\nname: outdated-trait\n---\nKeep this rule.\n");
|
|
120
|
+
const recovered = yield* request(6, "tools/call", { name: "check_traits", arguments: { include: [] } });
|
|
121
|
+
expect(recovered).toMatchObject({ isError: false });
|
|
122
|
+
}
|
|
123
|
+
const ping = yield* request(5, "ping");
|
|
124
|
+
expect(ping).toEqual({});
|
|
125
|
+
}, Effect.provide(NodeServices.layer)), { timeout: 20000 });
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=TraitsInitialization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraitsInitialization.test.js","sourceRoot":"","sources":["../../test/TraitsInitialization.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,yCAAyC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAC1F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;AAE9D,KAAK,MAAM,OAAO,IAAI;IACpB,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE;IACnF;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,2CAA2C;QACnD,UAAU,EAAE,wBAAwB;KACrC;IACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,oBAAoB,EAAE;IACzF;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,iCAAiC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;8IACwE;QAC1I,UAAU,EAAE,yBAAyB;KACtC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,iCAAiC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;yIACmE;QACrI,UAAU,EAAE,yBAAyB;KACtC;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,iCAAiC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;6KACuG;QACzK,UAAU,EAAE,wBAAwB;KACrC;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;0FAC4B;QACtF,KAAK,EAAE,gDAAgD;QACvD,UAAU,EAAE,yFAAyF;KACtG;CACF,EAAE,CAAC;IACF,EAAE,CAAC,MAAM,CACP,4BAA4B,OAAO,CAAC,IAAI,EAAE,EAC1C,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC;QAC9C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAA;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC;YAC5C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YAClD,MAAM,EAAE,aAAa;SACtB,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC/E,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAA;QACpE,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACrE,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACrD,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,wBAAwB;YAAE,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAU,CAAA;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAU,CAAA;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;YAC5C,GAAG;YACH,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACzD,MAAM,EAAE,SAAS;SAClB,CAAC,CACH,CAAA;QACD,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CACtB,MAAM,CAAC,UAAU,EAAE,EACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EACzD,MAAM,CAAC,UAAU,CAClB,CAAA;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAU,EAAE,MAAc,EAAE,MAAM,GAAY,EAAE;YACtG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;YAC3F,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,IAAI,CAC1B,IAAI,EACJ,CAAC,CAAC,YAAY,CACZ,CAAC,CAAC,cAAc,CACd,CAAC,CAAC,MAAM,CAAC;oBACP,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC1B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACnC,CAAC,CACH,CACF,CACF,CAAA;gBACD,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE;oBAAE,OAAO,QAAQ,CAAC,MAAM,CAAA;YAChD,CAAC;QACH,CAAC,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE;YAClD,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;SAC3C,CAAC,CAAA;QACF,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QACrE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5G,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YAC3B,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC;gBAC5B,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;gBACvF,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;aACxF,CAAC;SACH,CAAC,CAAA;QACF,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GACR,KAAK,KAAK,CAAC;gBACT,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;gBACtD,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,CAAA;YAC7F,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;gBAC3B,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;aAC/E,CAAC,CAAA;YACF,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;gBACnD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;YAC7D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAA;gBACzE,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,8DAA8D,CAAC,CAAA;oBACxG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YACrD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACrC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAA;YACzF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YACvG,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EACtC,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAA;AACH,CAAC"}
|
|
@@ -53,24 +53,12 @@ export declare const CheckTraits: Tool.Tool<"check_traits", {
|
|
|
53
53
|
readonly expectedFilename: S.String;
|
|
54
54
|
readonly message: S.String;
|
|
55
55
|
}>, S.Struct<{
|
|
56
|
-
readonly _tag: S.tag<"
|
|
56
|
+
readonly _tag: S.tag<"TraitParseError">;
|
|
57
57
|
readonly path: S.String;
|
|
58
|
-
readonly message: S.String;
|
|
59
|
-
}>, S.Struct<{
|
|
60
|
-
readonly _tag: S.tag<"UnterminatedFrontmatterError">;
|
|
61
|
-
readonly path: S.String;
|
|
62
|
-
readonly message: S.String;
|
|
63
|
-
}>, S.Struct<{
|
|
64
|
-
readonly _tag: S.tag<"InvalidYamlError">;
|
|
65
|
-
readonly path: S.String;
|
|
66
|
-
readonly line: S.optional<S.Int>;
|
|
67
|
-
readonly column: S.optional<S.Int>;
|
|
68
58
|
readonly cause: S.Defect;
|
|
69
59
|
readonly message: S.String;
|
|
70
60
|
}>, S.TaggedStruct<"PlatformError", {
|
|
71
61
|
readonly message: S.String;
|
|
72
|
-
}>, S.TaggedStruct<"SchemaError", {
|
|
73
|
-
readonly message: S.String;
|
|
74
62
|
}>]>, S.Struct<{
|
|
75
63
|
readonly _tag: S.tag<"TraitAssessmentTooLargeError">;
|
|
76
64
|
readonly traitName: S.brand<S.String, "traits/TraitName">;
|
|
@@ -143,24 +131,12 @@ export declare const toolkit: Toolkit.Toolkit<{
|
|
|
143
131
|
readonly expectedFilename: S.String;
|
|
144
132
|
readonly message: S.String;
|
|
145
133
|
}>, S.Struct<{
|
|
146
|
-
readonly _tag: S.tag<"
|
|
134
|
+
readonly _tag: S.tag<"TraitParseError">;
|
|
147
135
|
readonly path: S.String;
|
|
148
|
-
readonly message: S.String;
|
|
149
|
-
}>, S.Struct<{
|
|
150
|
-
readonly _tag: S.tag<"UnterminatedFrontmatterError">;
|
|
151
|
-
readonly path: S.String;
|
|
152
|
-
readonly message: S.String;
|
|
153
|
-
}>, S.Struct<{
|
|
154
|
-
readonly _tag: S.tag<"InvalidYamlError">;
|
|
155
|
-
readonly path: S.String;
|
|
156
|
-
readonly line: S.optional<S.Int>;
|
|
157
|
-
readonly column: S.optional<S.Int>;
|
|
158
136
|
readonly cause: S.Defect;
|
|
159
137
|
readonly message: S.String;
|
|
160
138
|
}>, S.TaggedStruct<"PlatformError", {
|
|
161
139
|
readonly message: S.String;
|
|
162
|
-
}>, S.TaggedStruct<"SchemaError", {
|
|
163
|
-
readonly message: S.String;
|
|
164
140
|
}>]>, S.Struct<{
|
|
165
141
|
readonly _tag: S.tag<"TraitAssessmentTooLargeError">;
|
|
166
142
|
readonly traitName: S.brand<S.String, "traits/TraitName">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckTraits.d.ts","sourceRoot":"","sources":["../../toolkit/CheckTraits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAQ,IAAI,EAAQ,MAAM,IAAI,CAAC,EAAU,MAAM,QAAQ,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"CheckTraits.d.ts","sourceRoot":"","sources":["../../toolkit/CheckTraits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAQ,IAAI,EAAQ,MAAM,IAAI,CAAC,EAAU,MAAM,QAAQ,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0IA2DY,CAAA;AAEpC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA4B,CAAA;AAEhD,eAAO,MAAM,KAAK,0EAyDhB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigurationError.d.ts","sourceRoot":"","sources":["../../toolkit/ConfigurationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,KAAK,EAAe,MAAM,QAAQ,CAAA;AAuB1D,eAAO,MAAM,KAAK,UAAW,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,qCAgB1C,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Cause, Effect, Layer, Schema as S } from "effect";
|
|
2
|
+
import { McpServer, Tool, Toolkit } from "effect/ai";
|
|
3
|
+
import { CheckTraits } from "./CheckTraits.js";
|
|
4
|
+
import { DeriveTrait } from "./DeriveTrait.js";
|
|
5
|
+
const toolkit = Toolkit.make(Tool.make("derive_trait", {
|
|
6
|
+
description: DeriveTrait.description,
|
|
7
|
+
parameters: DeriveTrait.parametersSchema,
|
|
8
|
+
success: S.Never,
|
|
9
|
+
failure: S.String,
|
|
10
|
+
failureMode: "return"
|
|
11
|
+
}).annotate(Tool.Readonly, true), Tool.make("check_traits", {
|
|
12
|
+
description: CheckTraits.description,
|
|
13
|
+
parameters: CheckTraits.parametersSchema,
|
|
14
|
+
success: S.Never,
|
|
15
|
+
failure: S.String,
|
|
16
|
+
failureMode: "return"
|
|
17
|
+
}).annotate(Tool.Readonly, true));
|
|
18
|
+
export const layer = (cause) => Cause.hasInterruptsOnly(cause)
|
|
19
|
+
? Layer.effectDiscard(Effect.interrupt)
|
|
20
|
+
: McpServer.toolkit(toolkit).pipe(Layer.provide(toolkit.toLayer({
|
|
21
|
+
derive_trait: () => Effect.fail(`${Cause.pretty(cause)}\n\nSurface this configuration failure to the user. Fix the reported error, then restart the Traits MCP server and retry the same trait derivation with the identical arguments. No trait was saved; keep the proposal pending until the error is resolved. Do not paste credentials into chat.`),
|
|
22
|
+
check_traits: () => Effect.fail(`${Cause.pretty(cause)}\n\nSurface this configuration failure to the user. Fix the reported error, then restart the Traits MCP server and retry the same check. No trait review was performed. Do not paste credentials into chat.`)
|
|
23
|
+
})));
|
|
24
|
+
//# sourceMappingURL=ConfigurationError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigurationError.js","sourceRoot":"","sources":["../../toolkit/ConfigurationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;IACxB,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,UAAU,EAAE,WAAW,CAAC,gBAAgB;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,WAAW,EAAE,QAAQ;CACtB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAChC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;IACxB,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,UAAU,EAAE,WAAW,CAAC,gBAAgB;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,WAAW,EAAE,QAAQ;CACtB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CACjC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAA2B,EAAE,EAAE,CACnD,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC5B,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;IACvC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7B,KAAK,CAAC,OAAO,CACX,OAAO,CAAC,OAAO,CAAC;QACd,YAAY,EAAE,GAAG,EAAE,CACjB,MAAM,CAAC,IAAI,CACT,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,iSAAiS,CACxT;QACH,YAAY,EAAE,GAAG,EAAE,CACjB,MAAM,CAAC,IAAI,CACT,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6MAA6M,CACpO;KACJ,CAAC,CACH,CACF,CAAA"}
|
|
@@ -89,24 +89,12 @@ export declare const DeriveTrait: Tool.Tool<"derive_trait", {
|
|
|
89
89
|
readonly expectedFilename: S.String;
|
|
90
90
|
readonly message: S.String;
|
|
91
91
|
}>, S.Struct<{
|
|
92
|
-
readonly _tag: S.tag<"
|
|
92
|
+
readonly _tag: S.tag<"TraitParseError">;
|
|
93
93
|
readonly path: S.String;
|
|
94
|
-
readonly message: S.String;
|
|
95
|
-
}>, S.Struct<{
|
|
96
|
-
readonly _tag: S.tag<"UnterminatedFrontmatterError">;
|
|
97
|
-
readonly path: S.String;
|
|
98
|
-
readonly message: S.String;
|
|
99
|
-
}>, S.Struct<{
|
|
100
|
-
readonly _tag: S.tag<"InvalidYamlError">;
|
|
101
|
-
readonly path: S.String;
|
|
102
|
-
readonly line: S.optional<S.Int>;
|
|
103
|
-
readonly column: S.optional<S.Int>;
|
|
104
94
|
readonly cause: S.Defect;
|
|
105
95
|
readonly message: S.String;
|
|
106
96
|
}>, S.TaggedStruct<"PlatformError", {
|
|
107
97
|
readonly message: S.String;
|
|
108
|
-
}>, S.TaggedStruct<"SchemaError", {
|
|
109
|
-
readonly message: S.String;
|
|
110
98
|
}>]>, typeof McpSchema.ElicitationDeclined]>;
|
|
111
99
|
readonly failureMode: "return";
|
|
112
100
|
}, DecisionModel.DecisionModel | LanguageModel.LanguageModel | TraitStore | TraitsContext>;
|
|
@@ -198,24 +186,12 @@ export declare const toolkit: Toolkit.Toolkit<{
|
|
|
198
186
|
readonly expectedFilename: S.String;
|
|
199
187
|
readonly message: S.String;
|
|
200
188
|
}>, S.Struct<{
|
|
201
|
-
readonly _tag: S.tag<"
|
|
189
|
+
readonly _tag: S.tag<"TraitParseError">;
|
|
202
190
|
readonly path: S.String;
|
|
203
|
-
readonly message: S.String;
|
|
204
|
-
}>, S.Struct<{
|
|
205
|
-
readonly _tag: S.tag<"UnterminatedFrontmatterError">;
|
|
206
|
-
readonly path: S.String;
|
|
207
|
-
readonly message: S.String;
|
|
208
|
-
}>, S.Struct<{
|
|
209
|
-
readonly _tag: S.tag<"InvalidYamlError">;
|
|
210
|
-
readonly path: S.String;
|
|
211
|
-
readonly line: S.optional<S.Int>;
|
|
212
|
-
readonly column: S.optional<S.Int>;
|
|
213
191
|
readonly cause: S.Defect;
|
|
214
192
|
readonly message: S.String;
|
|
215
193
|
}>, S.TaggedStruct<"PlatformError", {
|
|
216
194
|
readonly message: S.String;
|
|
217
|
-
}>, S.TaggedStruct<"SchemaError", {
|
|
218
|
-
readonly message: S.String;
|
|
219
195
|
}>]>, typeof McpSchema.ElicitationDeclined]>;
|
|
220
196
|
readonly failureMode: "return";
|
|
221
197
|
}, DecisionModel.DecisionModel | LanguageModel.LanguageModel | TraitStore | TraitsContext>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeriveTrait.d.ts","sourceRoot":"","sources":["../../toolkit/DeriveTrait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAU,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIlF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"DeriveTrait.d.ts","sourceRoot":"","sources":["../../toolkit/DeriveTrait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAU,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIlF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0FAyDW,CAAA;AAEnC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA4B,CAAA;AAEhD,eAAO,MAAM,KAAK,0EAEhB,CAAA"}
|
package/main.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { FetchHttpClient } from "effect/http"
|
|
|
8
8
|
import * as TraitsConfigProvider from "./_util/TraitsConfigProvider.ts"
|
|
9
9
|
import * as TraitsTelemetry from "./_util/TraitsTelemetry.ts"
|
|
10
10
|
import PackageJson from "./package.json" with { type: "json" }
|
|
11
|
+
import * as ConfigurationError from "./toolkit/ConfigurationError.ts"
|
|
11
12
|
import { toolkit } from "./toolkit/toolkit.ts"
|
|
12
13
|
import * as TraitsConfig from "./TraitsConfig.ts"
|
|
13
14
|
import * as TraitStore from "./TraitStore.ts"
|
|
@@ -93,6 +94,8 @@ Command.make("traits", {
|
|
|
93
94
|
toolkit.pipe(
|
|
94
95
|
Layer.provide(TraitStore.layerFileSystem(".agents/traits")),
|
|
95
96
|
Layer.provide(TraitsConfig.layer),
|
|
97
|
+
Layer.provide(TraitsConfigProvider.layer),
|
|
98
|
+
Layer.catchCause(ConfigurationError.layer),
|
|
96
99
|
Layer.provideMerge(McpServer.McpServer.layer)
|
|
97
100
|
)
|
|
98
101
|
),
|
|
@@ -100,7 +103,6 @@ Command.make("traits", {
|
|
|
100
103
|
Effect.withSpan("traits.server"),
|
|
101
104
|
Effect.provide(
|
|
102
105
|
TraitsTelemetry.layer(Option.getOrUndefined(params.otlpEndpoint)).pipe(
|
|
103
|
-
Layer.provideMerge(TraitsConfigProvider.layer),
|
|
104
106
|
Layer.provideMerge(FetchHttpClient.layer)
|
|
105
107
|
)
|
|
106
108
|
)
|
package/package.json
CHANGED
package/skills/traits/SKILL.md
CHANGED
|
@@ -334,11 +334,16 @@ simultaneous installations in the same worktree. During development, use
|
|
|
334
334
|
`node traits/bin.ts` with a Node version supporting native TypeScript execution;
|
|
335
335
|
pass server flags after the filename.
|
|
336
336
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
337
|
+
Surface tool failures; never treat a failed operation as a successful save or
|
|
338
|
+
review. Error diagnostics may contain sensitive information. Never ask for
|
|
339
|
+
credentials in chat.
|
|
340
|
+
|
|
341
|
+
Stored trait parsing failures return `TraitParseError` with the file path,
|
|
342
|
+
original diagnostic, and migration guidance. Update all stored traits to the
|
|
343
|
+
currently installed package's `Trait` schema and `serialize` format, preserving
|
|
344
|
+
their intent and metadata, then retry. Do not treat the failed operation as a
|
|
345
|
+
successful check. The server stays connected; a restart is not needed for file
|
|
346
|
+
repairs, and no automatic migration is performed.
|
|
342
347
|
|
|
343
348
|
Git-ignored files are excluded by default, with ignore rules refreshed on every
|
|
344
349
|
check. Untracked files do not need to be added to Git to be evaluated. Tracked
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Cause, Effect, Layer, Schema as S } from "effect"
|
|
2
|
+
import { McpServer, Tool, Toolkit } from "effect/ai"
|
|
3
|
+
|
|
4
|
+
import { CheckTraits } from "./CheckTraits.ts"
|
|
5
|
+
import { DeriveTrait } from "./DeriveTrait.ts"
|
|
6
|
+
|
|
7
|
+
const toolkit = Toolkit.make(
|
|
8
|
+
Tool.make("derive_trait", {
|
|
9
|
+
description: DeriveTrait.description,
|
|
10
|
+
parameters: DeriveTrait.parametersSchema,
|
|
11
|
+
success: S.Never,
|
|
12
|
+
failure: S.String,
|
|
13
|
+
failureMode: "return"
|
|
14
|
+
}).annotate(Tool.Readonly, true),
|
|
15
|
+
Tool.make("check_traits", {
|
|
16
|
+
description: CheckTraits.description,
|
|
17
|
+
parameters: CheckTraits.parametersSchema,
|
|
18
|
+
success: S.Never,
|
|
19
|
+
failure: S.String,
|
|
20
|
+
failureMode: "return"
|
|
21
|
+
}).annotate(Tool.Readonly, true)
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
export const layer = (cause: Cause.Cause<unknown>) =>
|
|
25
|
+
Cause.hasInterruptsOnly(cause)
|
|
26
|
+
? Layer.effectDiscard(Effect.interrupt)
|
|
27
|
+
: McpServer.toolkit(toolkit).pipe(
|
|
28
|
+
Layer.provide(
|
|
29
|
+
toolkit.toLayer({
|
|
30
|
+
derive_trait: () =>
|
|
31
|
+
Effect.fail(
|
|
32
|
+
`${Cause.pretty(cause)}\n\nSurface this configuration failure to the user. Fix the reported error, then restart the Traits MCP server and retry the same trait derivation with the identical arguments. No trait was saved; keep the proposal pending until the error is resolved. Do not paste credentials into chat.`
|
|
33
|
+
),
|
|
34
|
+
check_traits: () =>
|
|
35
|
+
Effect.fail(
|
|
36
|
+
`${Cause.pretty(cause)}\n\nSurface this configuration failure to the user. Fix the reported error, then restart the Traits MCP server and retry the same check. No trait review was performed. Do not paste credentials into chat.`
|
|
37
|
+
)
|
|
38
|
+
})
|
|
39
|
+
)
|
|
40
|
+
)
|