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 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({ ...Frontmatter.MissingFrontmatterError.fields, message: S.String }),
49
- S.Struct({ ...Frontmatter.UnterminatedFrontmatterError.fields, message: S.String }),
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
- | PlatformError.PlatformError
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
- | PlatformError.PlatformError
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 | S.SchemaError | Frontmatter.ParseError | TraitFilenameMismatchError
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
- | PlatformError.PlatformError
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("./_util/Frontmatter.ts").InvalidYamlError | import("./_util/Frontmatter.ts").MissingFrontmatterError | import("effect/PlatformError").PlatformError | S.SchemaError | TraitAlreadyExistsError | import("./TraitStore.ts").TraitFilenameMismatchError | import("./TraitStore.ts").TraitNotFoundError | import("./_util/Frontmatter.ts").UnterminatedFrontmatterError, import("effect/ai/DecisionModel").DecisionModel | LanguageModel.LanguageModel | TraitStore | import("./TraitsContext.ts").TraitsContext>;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;klBAoEvC,CAAA"}
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"}
@@ -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
- }>, import("effect/Cause").YieldableError>;
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
- }>, import("effect/Cause").YieldableError>;
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
- }>, import("effect/Cause").YieldableError>;
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<"MissingFrontmatterError">;
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 | S.SchemaError | Frontmatter.ParseError | TraitNotFoundError | TraitFilenameMismatchError>;
59
- readonly get: (name: Trait.TraitName) => Effect.Effect<Trait.Trait, PlatformError.PlatformError | S.SchemaError | Frontmatter.ParseError | TraitNotFoundError | TraitFilenameMismatchError>;
60
- readonly ls: Effect.Effect<ReadonlyArray<Trait.Trait>, PlatformError.PlatformError | S.SchemaError | Frontmatter.ParseError | TraitFilenameMismatchError>;
61
- readonly rm: (names: ReadonlyArray<Trait.TraitName>) => Effect.Effect<void, PlatformError.PlatformError | S.SchemaError | Frontmatter.ParseError | TraitNotFoundError | TraitFilenameMismatchError>;
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
  }
@@ -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,WAAW,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;;;;AAEnC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAS1B,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,EACF,aAAa,CAAC,aAAa,GAC3B,CAAC,CAAC,WAAW,GACb,WAAW,CAAC,UAAU,GACtB,kBAAkB,GAClB,0BAA0B,CAC7B;kBACa,CACZ,IAAI,EAAE,KAAK,CAAC,SAAS,KAClB,MAAM,CAAC,MAAM,CAChB,KAAK,CAAC,KAAK,EACT,aAAa,CAAC,aAAa,GAC3B,CAAC,CAAC,WAAW,GACb,WAAW,CAAC,UAAU,GACtB,kBAAkB,GAClB,0BAA0B,CAC7B;iBACY,MAAM,CAAC,MAAM,CACxB,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1B,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,UAAU,GAAG,0BAA0B,CAClG;iBACY,CACX,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,IAAI,EACF,aAAa,CAAC,aAAa,GAC3B,CAAC,CAAC,WAAW,GACb,WAAW,CAAC,UAAU,GACtB,kBAAkB,GAClB,0BAA0B,CAC7B;;AAvCL,qBAAa,UAAW,SAAQ,eAyCR;CAAG;AAE3B,eAAO,MAAM,eAAe,QAAS,MAAM,4FA0ExC,CAAA"}
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"}
@@ -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({ ...Frontmatter.MissingFrontmatterError.fields, message: S.String }),
28
- S.Struct({ ...Frontmatter.UnterminatedFrontmatterError.fields, message: S.String }),
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)
@@ -1 +1 @@
1
- {"version":3,"file":"TraitStore.js","sourceRoot":"","sources":["../TraitStore.ts"],"names":[],"mappings":"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"}
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(TraitsConfigProvider.layer), 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
+ }).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":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../main.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "traits",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TraitsInitialization.test.d.ts.map
@@ -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":"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"}
@@ -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<"MissingFrontmatterError">;
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<"MissingFrontmatterError">;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0IA2DY,CAAA;AAEpC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA4B,CAAA;AAEhD,eAAO,MAAM,KAAK,0EAyDhB,CAAA"}
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,3 @@
1
+ import { Cause, Layer } from "effect";
2
+ export declare const layer: (cause: Cause.Cause<unknown>) => Layer.Layer<never, never, never>;
3
+ //# sourceMappingURL=ConfigurationError.d.ts.map
@@ -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<"MissingFrontmatterError">;
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<"MissingFrontmatterError">;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0FAyDW,CAAA;AAEnC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA4B,CAAA;AAEhD,eAAO,MAAM,KAAK,0EAEhB,CAAA"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "traits",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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
- Configuration and providers currently initialize at server startup. Startup
338
- failures go to stderr and require fixing setup and reconnecting; whether the
339
- agent can see these diagnostics depends on its MCP client. Expected tool
340
- failures use MCP error results; unexpected defects receive a generic internal
341
- error rather than implementation details.
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
+ )