traits 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/Source.ts +1 -1
  2. package/Trait.ts +109 -4
  3. package/TraitConflict.ts +43 -4
  4. package/TraitDerivation.ts +104 -32
  5. package/TraitEvaluation.ts +104 -49
  6. package/TraitStore.ts +123 -44
  7. package/TraitsConfig.ts +16 -9
  8. package/TraitsContext.ts +3 -1
  9. package/_util/Frontmatter.ts +78 -0
  10. package/_util/Git.ts +6 -5
  11. package/bin.ts +3 -1
  12. package/dist/Source.js +1 -1
  13. package/dist/Source.js.map +1 -1
  14. package/dist/Trait.d.ts +39 -5
  15. package/dist/Trait.d.ts.map +1 -1
  16. package/dist/Trait.js +66 -3
  17. package/dist/Trait.js.map +1 -1
  18. package/dist/TraitConflict.d.ts +47 -15
  19. package/dist/TraitConflict.d.ts.map +1 -1
  20. package/dist/TraitConflict.js +38 -4
  21. package/dist/TraitConflict.js.map +1 -1
  22. package/dist/TraitDerivation.d.ts +85 -28
  23. package/dist/TraitDerivation.d.ts.map +1 -1
  24. package/dist/TraitDerivation.js +85 -23
  25. package/dist/TraitDerivation.js.map +1 -1
  26. package/dist/TraitEvaluation.d.ts +38 -8
  27. package/dist/TraitEvaluation.d.ts.map +1 -1
  28. package/dist/TraitEvaluation.js +84 -47
  29. package/dist/TraitEvaluation.js.map +1 -1
  30. package/dist/TraitStore.d.ts +54 -10
  31. package/dist/TraitStore.d.ts.map +1 -1
  32. package/dist/TraitStore.js +61 -37
  33. package/dist/TraitStore.js.map +1 -1
  34. package/dist/TraitsConfig.d.ts +4 -3
  35. package/dist/TraitsConfig.d.ts.map +1 -1
  36. package/dist/TraitsConfig.js +12 -5
  37. package/dist/TraitsConfig.js.map +1 -1
  38. package/dist/TraitsContext.d.ts +2 -1
  39. package/dist/TraitsContext.d.ts.map +1 -1
  40. package/dist/TraitsContext.js.map +1 -1
  41. package/dist/_util/Frontmatter.d.ts +37 -0
  42. package/dist/_util/Frontmatter.d.ts.map +1 -0
  43. package/dist/_util/Frontmatter.js +52 -0
  44. package/dist/_util/Frontmatter.js.map +1 -0
  45. package/dist/_util/Git.d.ts +2 -3
  46. package/dist/_util/Git.d.ts.map +1 -1
  47. package/dist/_util/Git.js +4 -1
  48. package/dist/_util/Git.js.map +1 -1
  49. package/dist/bin.js +3 -1
  50. package/dist/bin.js.map +1 -1
  51. package/dist/getIncludedFiles.d.ts +13 -0
  52. package/dist/getIncludedFiles.d.ts.map +1 -0
  53. package/dist/getIncludedFiles.js +26 -0
  54. package/dist/getIncludedFiles.js.map +1 -0
  55. package/dist/main.js +16 -12
  56. package/dist/main.js.map +1 -1
  57. package/dist/package.json +7 -2
  58. package/dist/test/Frontmatter.test.d.ts +2 -0
  59. package/dist/test/Frontmatter.test.d.ts.map +1 -0
  60. package/dist/test/Frontmatter.test.js +29 -0
  61. package/dist/test/Frontmatter.test.js.map +1 -0
  62. package/dist/test/Trait.test.d.ts +2 -0
  63. package/dist/test/Trait.test.d.ts.map +1 -0
  64. package/dist/test/Trait.test.js +144 -0
  65. package/dist/test/Trait.test.js.map +1 -0
  66. package/dist/test/TraitDerivation.test.d.ts +2 -0
  67. package/dist/test/TraitDerivation.test.d.ts.map +1 -0
  68. package/dist/test/TraitDerivation.test.js +173 -0
  69. package/dist/test/TraitDerivation.test.js.map +1 -0
  70. package/dist/test/TraitEvaluation.test.d.ts +2 -0
  71. package/dist/test/TraitEvaluation.test.d.ts.map +1 -0
  72. package/dist/test/TraitEvaluation.test.js +116 -0
  73. package/dist/test/TraitEvaluation.test.js.map +1 -0
  74. package/dist/test/TraitIgnores.test.js +29 -5
  75. package/dist/test/TraitIgnores.test.js.map +1 -1
  76. package/dist/test/TraitStore.test.d.ts +2 -0
  77. package/dist/test/TraitStore.test.d.ts.map +1 -0
  78. package/dist/test/TraitStore.test.js +120 -0
  79. package/dist/test/TraitStore.test.js.map +1 -0
  80. package/dist/test/TraitsInitialization.test.d.ts +2 -0
  81. package/dist/test/TraitsInitialization.test.d.ts.map +1 -0
  82. package/dist/test/TraitsInitialization.test.js +130 -0
  83. package/dist/test/TraitsInitialization.test.js.map +1 -0
  84. package/dist/toolkit/CheckTraits.d.ts +97 -13
  85. package/dist/toolkit/CheckTraits.d.ts.map +1 -1
  86. package/dist/toolkit/CheckTraits.js +28 -40
  87. package/dist/toolkit/CheckTraits.js.map +1 -1
  88. package/dist/toolkit/ConfigurationError.d.ts +3 -0
  89. package/dist/toolkit/ConfigurationError.d.ts.map +1 -0
  90. package/dist/toolkit/ConfigurationError.js +15 -0
  91. package/dist/toolkit/ConfigurationError.js.map +1 -0
  92. package/dist/toolkit/DeriveTrait.d.ts +137 -45
  93. package/dist/toolkit/DeriveTrait.d.ts.map +1 -1
  94. package/dist/toolkit/DeriveTrait.js +26 -14
  95. package/dist/toolkit/DeriveTrait.js.map +1 -1
  96. package/dist/traitIgnores.d.ts +18 -0
  97. package/dist/traitIgnores.d.ts.map +1 -1
  98. package/dist/traitIgnores.js +10 -7
  99. package/dist/traitIgnores.js.map +1 -1
  100. package/getIncludedFiles.ts +42 -0
  101. package/main.ts +17 -12
  102. package/package.json +7 -2
  103. package/skills/traits/SKILL.md +107 -51
  104. package/toolkit/CheckTraits.ts +34 -55
  105. package/toolkit/ConfigurationError.ts +27 -0
  106. package/toolkit/DeriveTrait.ts +27 -14
  107. package/traitIgnores.ts +14 -6
  108. package/_util/words.ts +0 -555
  109. package/dist/_util/words.d.ts +0 -2
  110. package/dist/_util/words.d.ts.map +0 -1
  111. package/dist/_util/words.js +0 -556
  112. package/dist/_util/words.js.map +0 -1
@@ -0,0 +1,130 @@
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
+ const effectUrl = new URL("../../node_modules/effect/dist/index.js", import.meta.url).href;
6
+ const server = new URL("../main.ts", import.meta.url).pathname;
7
+ for (const fixture of [
8
+ { name: "unreadable environment", source: "export default {}", diagnostic: ".env" },
9
+ {
10
+ name: "throwing module",
11
+ source: 'throw new Error("example module failure")',
12
+ diagnostic: "example module failure"
13
+ },
14
+ { name: "invalid config", source: "export default {}", diagnostic: "layerDecisionModel" },
15
+ {
16
+ name: "missing credentials",
17
+ source: `import { Config, Layer } from ${JSON.stringify(effectUrl)};
18
+ export default { layerDecisionModel: Layer.effectDiscard(Config.Redacted("TRAITS_TEST_MISSING_KEY")), layerLanguageModel: Layer.empty }`,
19
+ diagnostic: "TRAITS_TEST_MISSING_KEY"
20
+ },
21
+ {
22
+ name: "provider defect",
23
+ source: `import { Effect, Layer } from ${JSON.stringify(effectUrl)};
24
+ export default { layerDecisionModel: Layer.effectDiscard(Effect.die("example provider defect")), layerLanguageModel: Layer.empty }`,
25
+ diagnostic: "example provider defect"
26
+ },
27
+ {
28
+ name: "arbitrary provider failure",
29
+ source: `import { Effect, Layer } from ${JSON.stringify(effectUrl)};
30
+ export default { layerDecisionModel: Layer.effectDiscard(Effect.fail({ _tag: "CustomFailure", message: "example custom failure" })), layerLanguageModel: Layer.empty }`,
31
+ diagnostic: "example custom failure"
32
+ },
33
+ {
34
+ name: "outdated stored trait",
35
+ source: `import { Layer } from ${JSON.stringify(effectUrl)};
36
+ export default { layerDecisionModel: Layer.empty, layerLanguageModel: Layer.empty }`,
37
+ trait: "---\nname: legacy_name\n---\nKeep this rule.\n",
38
+ diagnostic: "Update all stored traits to the format/schema of the currently installed traits package"
39
+ }
40
+ ]) {
41
+ it.effect(`keeps MCP connected with ${fixture.name}`, Effect.fn("test.TraitsInitialization")(function* () {
42
+ const fs = yield* FileSystem.FileSystem;
43
+ const path = yield* Path.Path;
44
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
45
+ const directory = yield* fs.exists("/tmp/opencode");
46
+ const cwd = yield* fs.makeTempDirectoryScoped({
47
+ directory: directory ? "/tmp/opencode" : undefined,
48
+ prefix: "traits-mcp-"
49
+ });
50
+ yield* spawner.exitCode(ChildProcess.make("git", ["init", "--quiet"], { cwd }));
51
+ yield* fs.writeFileString(path.join(cwd, "traits.ts"), fixture.source);
52
+ const traitPath = path.join(cwd, ".agents/traits/outdated-trait.md");
53
+ if ("trait" in fixture) {
54
+ yield* fs.makeDirectory(path.dirname(traitPath), { recursive: true });
55
+ yield* fs.writeFileString(traitPath, fixture.trait);
56
+ }
57
+ if (fixture.name === "unreadable environment")
58
+ yield* fs.makeDirectory(path.join(cwd, ".env"));
59
+ const requests = yield* Queue.unbounded();
60
+ const responses = yield* Queue.unbounded();
61
+ const child = yield* spawner.spawn(ChildProcess.make(process.execPath, [server], {
62
+ cwd,
63
+ stdin: Stream.fromQueue(requests).pipe(Stream.encodeText),
64
+ stderr: "inherit"
65
+ }));
66
+ yield* child.stdout.pipe(Stream.decodeText(), Stream.splitLines, Stream.runForEach((line) => Queue.offer(responses, line)), Effect.forkScoped);
67
+ const request = Effect.fn("test.McpRequest")(function* (id, method, params = {}) {
68
+ yield* Queue.offer(requests, `${JSON.stringify({ jsonrpc: "2.0", id, method, params })}\n`);
69
+ while (true) {
70
+ const line = yield* Queue.take(responses);
71
+ const response = yield* pipe(line, S.decodeEffect(S.fromJsonString(S.Struct({
72
+ id: S.Int.pipe(S.optional),
73
+ result: S.Unknown.pipe(S.optional)
74
+ }))));
75
+ if (response.id === id)
76
+ return response.result;
77
+ }
78
+ });
79
+ const initialized = yield* request(1, "initialize", {
80
+ protocolVersion: "2025-11-25",
81
+ capabilities: {},
82
+ clientInfo: { name: "test", version: "1" }
83
+ });
84
+ expect(initialized).toMatchObject({ serverInfo: { name: "traits" } });
85
+ yield* Queue.offer(requests, `${JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized" })}\n`);
86
+ const listed = yield* request(2, "tools/list");
87
+ expect(listed).toMatchObject({
88
+ tools: "trait" in fixture
89
+ ? expect.arrayContaining([
90
+ expect.objectContaining({ name: "check_traits" }),
91
+ expect.objectContaining({ name: "derive_trait" })
92
+ ])
93
+ : [
94
+ expect.objectContaining({
95
+ name: "traits_configuration_error",
96
+ description: expect.stringContaining("restart")
97
+ })
98
+ ]
99
+ });
100
+ for (const index of [3, 4]) {
101
+ const tool = "trait" in fixture
102
+ ? index === 3
103
+ ? { name: "check_traits", arguments: { include: [] } }
104
+ : { name: "derive_trait", arguments: { name: "example", proposedTrait: "Example rule" } }
105
+ : { name: "traits_configuration_error", arguments: {} };
106
+ const result = yield* request(index, "tools/call", tool);
107
+ expect(result).toMatchObject({
108
+ isError: true,
109
+ content: [{ type: "text", text: expect.stringContaining(fixture.diagnostic) }]
110
+ });
111
+ if ("trait" in fixture) {
112
+ expect(JSON.stringify(result)).toContain(traitPath);
113
+ expect(JSON.stringify(result)).toContain("TraitParseError");
114
+ }
115
+ else {
116
+ expect(JSON.stringify(result)).toContain("restart the Traits MCP server");
117
+ }
118
+ }
119
+ if ("trait" in fixture) {
120
+ const unchanged = yield* fs.readFileString(traitPath);
121
+ expect(unchanged).toBe(fixture.trait);
122
+ yield* fs.writeFileString(traitPath, "---\nname: outdated-trait\n---\nKeep this rule.\n");
123
+ const recovered = yield* request(6, "tools/call", { name: "check_traits", arguments: { include: [] } });
124
+ expect(recovered).toMatchObject({ isError: false });
125
+ }
126
+ const ping = yield* request(5, "ping");
127
+ expect(ping).toEqual({});
128
+ }, Effect.provide(NodeServices.layer)), { timeout: 20000 });
129
+ }
130
+ //# 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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"}
@@ -1,18 +1,22 @@
1
1
  import { FileSystem, Path, Schema as S } from "effect";
2
- import { AiError, DecisionModel, Tool, Toolkit } from "effect/ai";
2
+ import { DecisionModel, Tool, Toolkit } from "effect/ai";
3
3
  import { ChildProcessSpawner } from "effect/process";
4
4
  import { TraitsContext } from "../TraitsContext.ts";
5
5
  import { TraitStore } from "../TraitStore.ts";
6
6
  export declare const CheckTraits: Tool.Tool<"check_traits", {
7
7
  readonly parameters: S.Struct<{
8
8
  readonly include: S.$Array<S.String>;
9
- readonly traitIds: S.optional<S.$Array<S.brand<S.String, "traits/Trait">>>;
9
+ readonly traitNames: S.optional<S.$Array<S.brand<S.String, "traits/TraitName">>>;
10
10
  }>;
11
11
  readonly success: S.$Array<S.Struct<{
12
- readonly trait: S.Struct<{
13
- readonly id: S.brand<S.String, "traits/Trait">;
12
+ readonly trait: S.StructWithRest<S.Struct<{
14
13
  readonly body: S.String;
15
- }>;
14
+ readonly diff: S.optional<S.String>;
15
+ readonly mime: S.optional<S.Union<readonly [S.String, S.$Array<S.String>]>>;
16
+ readonly name: S.brand<S.String, "traits/TraitName">;
17
+ readonly skip: S.optional<S.String>;
18
+ readonly when: S.optional<S.String>;
19
+ }>, readonly [S.$Record<S.String, S.Codec<S.Json, S.Json, never, never>>]>;
16
20
  readonly source: S.Struct<{
17
21
  readonly text: S.String;
18
22
  readonly location: S.optional<S.TaggedUnion<{
@@ -33,22 +37,64 @@ export declare const CheckTraits: Tool.Tool<"check_traits", {
33
37
  }>;
34
38
  }>;
35
39
  }>>;
36
- readonly failure: S.Union<readonly [typeof AiError.AiError, S.TaggedStruct<"PlatformError", {
40
+ readonly failure: S.Union<readonly [S.TaggedStruct<"AiError", {
41
+ readonly message: S.String;
42
+ }>, S.Union<readonly [S.Struct<{
43
+ readonly _tag: S.tag<"TraitNotFoundError">;
44
+ readonly name: S.brand<S.String, "traits/TraitName">;
45
+ readonly message: S.String;
46
+ }>, S.Struct<{
47
+ readonly _tag: S.tag<"TraitAlreadyExistsError">;
48
+ readonly name: S.brand<S.String, "traits/TraitName">;
49
+ readonly message: S.String;
50
+ }>, S.Struct<{
51
+ readonly _tag: S.tag<"TraitFilenameMismatchError">;
52
+ readonly path: S.String;
53
+ readonly expectedFilename: S.String;
54
+ readonly message: S.String;
55
+ }>, S.Struct<{
56
+ readonly _tag: S.tag<"TraitParseError">;
57
+ readonly path: S.String;
58
+ readonly cause: S.Defect;
59
+ readonly message: S.String;
60
+ }>, S.TaggedStruct<"PlatformError", {
61
+ readonly message: S.String;
62
+ }>]>, S.Struct<{
63
+ readonly _tag: S.tag<"TraitAssessmentTooLargeError">;
64
+ readonly traitName: S.brand<S.String, "traits/TraitName">;
65
+ readonly bytes: S.Int;
66
+ readonly maxBytes: S.Int;
67
+ readonly location: S.optional<S.TaggedUnion<{
68
+ readonly File: S.TaggedStruct<"File", {
69
+ readonly path: S.String;
70
+ readonly startLine: S.Int;
71
+ }>;
72
+ readonly Generated: S.TaggedStruct<"Generated", {}>;
73
+ }>>;
74
+ readonly message: S.String;
75
+ }>, S.Struct<{
76
+ readonly _tag: S.tag<"GitFileListingError">;
77
+ readonly directory: S.String;
78
+ readonly exitCode: S.Int;
37
79
  readonly message: S.String;
38
80
  }>]>;
39
- readonly failureMode: "error";
81
+ readonly failureMode: "return";
40
82
  }, ChildProcessSpawner.ChildProcessSpawner | DecisionModel.DecisionModel | FileSystem.FileSystem | Path.Path | TraitStore | TraitsContext>;
41
83
  export declare const toolkit: Toolkit.Toolkit<{
42
84
  readonly check_traits: Tool.Tool<"check_traits", {
43
85
  readonly parameters: S.Struct<{
44
86
  readonly include: S.$Array<S.String>;
45
- readonly traitIds: S.optional<S.$Array<S.brand<S.String, "traits/Trait">>>;
87
+ readonly traitNames: S.optional<S.$Array<S.brand<S.String, "traits/TraitName">>>;
46
88
  }>;
47
89
  readonly success: S.$Array<S.Struct<{
48
- readonly trait: S.Struct<{
49
- readonly id: S.brand<S.String, "traits/Trait">;
90
+ readonly trait: S.StructWithRest<S.Struct<{
50
91
  readonly body: S.String;
51
- }>;
92
+ readonly diff: S.optional<S.String>;
93
+ readonly mime: S.optional<S.Union<readonly [S.String, S.$Array<S.String>]>>;
94
+ readonly name: S.brand<S.String, "traits/TraitName">;
95
+ readonly skip: S.optional<S.String>;
96
+ readonly when: S.optional<S.String>;
97
+ }>, readonly [S.$Record<S.String, S.Codec<S.Json, S.Json, never, never>>]>;
52
98
  readonly source: S.Struct<{
53
99
  readonly text: S.String;
54
100
  readonly location: S.optional<S.TaggedUnion<{
@@ -69,10 +115,48 @@ export declare const toolkit: Toolkit.Toolkit<{
69
115
  }>;
70
116
  }>;
71
117
  }>>;
72
- readonly failure: S.Union<readonly [typeof AiError.AiError, S.TaggedStruct<"PlatformError", {
118
+ readonly failure: S.Union<readonly [S.TaggedStruct<"AiError", {
119
+ readonly message: S.String;
120
+ }>, S.Union<readonly [S.Struct<{
121
+ readonly _tag: S.tag<"TraitNotFoundError">;
122
+ readonly name: S.brand<S.String, "traits/TraitName">;
123
+ readonly message: S.String;
124
+ }>, S.Struct<{
125
+ readonly _tag: S.tag<"TraitAlreadyExistsError">;
126
+ readonly name: S.brand<S.String, "traits/TraitName">;
127
+ readonly message: S.String;
128
+ }>, S.Struct<{
129
+ readonly _tag: S.tag<"TraitFilenameMismatchError">;
130
+ readonly path: S.String;
131
+ readonly expectedFilename: S.String;
132
+ readonly message: S.String;
133
+ }>, S.Struct<{
134
+ readonly _tag: S.tag<"TraitParseError">;
135
+ readonly path: S.String;
136
+ readonly cause: S.Defect;
137
+ readonly message: S.String;
138
+ }>, S.TaggedStruct<"PlatformError", {
139
+ readonly message: S.String;
140
+ }>]>, S.Struct<{
141
+ readonly _tag: S.tag<"TraitAssessmentTooLargeError">;
142
+ readonly traitName: S.brand<S.String, "traits/TraitName">;
143
+ readonly bytes: S.Int;
144
+ readonly maxBytes: S.Int;
145
+ readonly location: S.optional<S.TaggedUnion<{
146
+ readonly File: S.TaggedStruct<"File", {
147
+ readonly path: S.String;
148
+ readonly startLine: S.Int;
149
+ }>;
150
+ readonly Generated: S.TaggedStruct<"Generated", {}>;
151
+ }>>;
152
+ readonly message: S.String;
153
+ }>, S.Struct<{
154
+ readonly _tag: S.tag<"GitFileListingError">;
155
+ readonly directory: S.String;
156
+ readonly exitCode: S.Int;
73
157
  readonly message: S.String;
74
158
  }>]>;
75
- readonly failureMode: "error";
159
+ readonly failureMode: "return";
76
160
  }, ChildProcessSpawner.ChildProcessSpawner | DecisionModel.DecisionModel | FileSystem.FileSystem | Path.Path | TraitStore | TraitsContext>;
77
161
  }>;
78
162
  export declare const layer: import("effect/Layer").Layer<Tool.Handler<"check_traits">, never, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"CheckTraits.d.ts","sourceRoot":"","sources":["../../toolkit/CheckTraits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAE,IAAI,EAAuB,MAAM,IAAI,CAAC,EAAkB,MAAM,QAAQ,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAMlE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0IAoDY,CAAA;AAEpC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA4B,CAAA;AAEhD,eAAO,MAAM,KAAK,0EAsFhB,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"}
@@ -1,10 +1,11 @@
1
- import { Array, Effect, FileSystem, Path, pipe, PlatformError, Schema as S, Stream, String } from "effect";
2
- import { AiError, DecisionModel, Tool, Toolkit } from "effect/ai";
3
- import { ChildProcess, ChildProcessSpawner } from "effect/process";
1
+ import { Array, Effect, FileSystem, flow, Path, pipe, Schema as S, String } from "effect";
2
+ import { DecisionModel, Tool, Toolkit } from "effect/ai";
3
+ import { ChildProcessSpawner } from "effect/process";
4
+ import { getIncludedFiles, GitFileListingError } from "../getIncludedFiles.js";
4
5
  import { Source, SourceLocation } from "../Source.js";
5
- import { TraitId } from "../Trait.js";
6
- import { evaluate, requiresReview, TraitEvaluation } from "../TraitEvaluation.js";
7
- import { traitIgnores } from "../traitIgnores.js";
6
+ import * as Trait from "../Trait.js";
7
+ import * as Evaluation from "../TraitEvaluation.js";
8
+ import { excludeIgnored } from "../traitIgnores.js";
8
9
  import { TraitsContext } from "../TraitsContext.js";
9
10
  import { TraitStore, TraitStoreError } from "../TraitStore.js";
10
11
  export const CheckTraits = Tool.make("check_traits", {
@@ -20,8 +21,8 @@ export const CheckTraits = Tool.make("check_traits", {
20
21
  | Git-ignored files are excluded by default, with ignore rules refreshed on every call. Untracked files do not need to be added to Git to be evaluated. Tracked files remain eligible even if ignore rules match them. Set excludeGitignored: false in traits.ts to disable this filter; explicit excludes still apply. Git failures fail the check.
21
22
  | All entries follow native glob syntax, including escaping filenames with glob characters. No custom directory expansion or literal-path classification is applied.
22
23
  | Reads current full file contents, including unstaged edits, and checks each 200-line chunk against the selected traits in parallel.
23
- | Omit traitIds to check all stored traits; supply trait ids for a focused check of one or more traits. Unknown IDs fail the call.
24
- | A leading // traits-ignore-file <trait-id>: <reason> comment skips only that trait for the entire file, including focused checks. Directives require a reason and must precede code.
24
+ | Omit traitNames to check all stored traits; supply unique trait names for a focused check. Unknown names fail the call.
25
+ | A leading // traits-ignore-file <trait-name>: <reason> comment skips that trait for the entire file, including focused checks. Names are case-sensitive and must be updated after renaming. Directives require a reason and must precede code.
25
26
  | Returns findings with the trait, source text, absolute path, 1-based chunk startLine, and assessment classification and probabilities.
26
27
  | Classification distinguishes violation from inconclusive; probabilities are not calibrated guarantees. No exact offending lines are provided.
27
28
  | Diagnose uncertainty using the full distribution, not the selected label alone; inspect source and trait before changing code.
@@ -35,18 +36,24 @@ export const CheckTraits = Tool.make("check_traits", {
35
36
  | Ask for clarification when a fix changes behavior or exceeds authorized scope.
36
37
  | The tool diagnoses only; the calling agent is responsible for edits, verification, and reporting unresolved blockers.
37
38
  | Unmatched patterns select no files. An empty result means no failures for this selection, not a repository-wide guarantee.
38
- | Empty include/traitIds lists, no matched files, or an empty store check no pairs.
39
+ | Empty include/traitNames lists, no matched files, or an empty store check no pairs.
39
40
  `),
40
41
  parameters: S.Struct({
41
42
  include: S.Array(S.String).annotate({
42
43
  description: "Project-owned source, configuration, or documentation paths/globs, absolute or relative to the MCP working directory. Exclude third-party/generated files, secrets, and binaries. Overlapping matches are deduplicated; unmatched patterns select no files."
43
44
  }),
44
- traitIds: S.Array(TraitId).pipe(S.optional).annotate({
45
- description: "Optional trait ids for a focused review. Omit for all stored traits; an empty array selects none."
45
+ traitNames: S.Array(Trait.TraitName).pipe(S.optional).annotate({
46
+ description: "Optional unique trait names for a focused review. Omit for all stored traits; an empty array selects none."
46
47
  })
47
48
  }),
48
- success: S.Array(TraitEvaluation),
49
- failure: S.Union([AiError.AiError, TraitStoreError]),
49
+ success: S.Array(Evaluation.TraitEvaluation),
50
+ failure: S.Union([
51
+ S.TaggedStruct("AiError", { message: S.String }),
52
+ TraitStoreError,
53
+ S.Struct({ ...Evaluation.TraitAssessmentTooLargeError.fields, message: S.String }),
54
+ S.Struct({ ...GitFileListingError.fields, message: S.String })
55
+ ]),
56
+ failureMode: "return",
50
57
  dependencies: [
51
58
  DecisionModel.DecisionModel,
52
59
  TraitStore,
@@ -67,26 +74,10 @@ export const layer = toolkit.toLayer({
67
74
  const fs = yield* FileSystem.FileSystem;
68
75
  const path = yield* Path.Path;
69
76
  const cwd = path.resolve();
70
- const includedFiles = context.excludeGitignored
71
- ? yield* Effect.scoped(Effect.gen(function* () {
72
- const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
73
- const process = yield* spawner.spawn(ChildProcess.make `git ls-files --cached --others --exclude-standard --full-name -z`.pipe(ChildProcess.setCwd(context.configRoot)));
74
- const output = yield* process.stdout.pipe(Stream.decodeText(), Stream.mkString);
75
- const exitCode = yield* process.exitCode;
76
- if (exitCode !== 0) {
77
- return yield* PlatformError.systemError({
78
- _tag: "Unknown",
79
- module: "ChildProcess",
80
- method: "git ls-files",
81
- description: `Process exited with code ${exitCode}`
82
- });
83
- }
84
- return new Set(pipe(output, String.split("\0"), Array.filter(String.isNonEmpty), Array.map((file) => path.resolve(context.configRoot, file))));
85
- }))
86
- : undefined;
87
- const traits = yield* params.traitIds === undefined
77
+ const includedFiles = yield* getIncludedFiles;
78
+ const traits = yield* params.traitNames === undefined
88
79
  ? store.ls
89
- : Effect.forEach(Array.dedupe(params.traitIds), store.get, { concurrency: "unbounded" });
80
+ : Effect.forEach(Array.dedupe(params.traitNames), store.get, { concurrency: "unbounded" });
90
81
  const matches = yield* Effect.forEach(params.include, (pattern) => {
91
82
  const absolute = path.isAbsolute(pattern) ? pattern : `${cwd}${path.sep}${pattern}`;
92
83
  return fs.glob(absolute, {
@@ -95,20 +86,17 @@ export const layer = toolkit.toLayer({
95
86
  });
96
87
  }, { concurrency: "unbounded" });
97
88
  const resolved = pipe(matches, Array.flatten, Array.map((file) => path.resolve(context.configRoot, file)), Array.dedupe);
98
- const paths = yield* Effect.filter(includedFiles === undefined ? resolved : Array.filter(resolved, (file) => includedFiles.has(file)), (file) => fs.stat(file).pipe(Effect.map((info) => info.type === "File")), { concurrency: "unbounded" });
99
- const results = yield* Effect.forEach(paths, Effect.fn("CheckTraits.file")(function* (file) {
89
+ const paths = yield* Effect.filter(includedFiles === undefined ? resolved : Array.filter(resolved, (file) => includedFiles.has(file)), flow(fs.stat, Effect.map((info) => info.type === "File")), { concurrency: "unbounded" });
90
+ return yield* Effect.forEach(paths, Effect.fn("CheckTraits.file")(function* (file) {
100
91
  const text = yield* fs.readFileString(file);
101
- const ignored = traitIgnores(text);
102
- const activeTraits = Array.filter(traits, (trait) => !ignored.has(trait.id));
92
+ const activeTraits = pipe(traits, excludeIgnored(text));
103
93
  const chunks = Array.chunksOf(String.split(text, "\n"), 200);
104
94
  const sources = Array.map(chunks, (lines, index) => Source.make({
105
95
  text: Array.join(lines, "\n"),
106
96
  location: SourceLocation.cases.File.make({ path: file, startLine: index * 200 + 1 })
107
97
  }));
108
- const results = yield* Effect.forEach(sources, (source) => Effect.forEach(activeTraits, (trait) => evaluate(trait, source), { concurrency: "unbounded" }), { concurrency: "unbounded" });
109
- return pipe(results, Array.flatten, Array.filter(requiresReview));
110
- }), { concurrency: "unbounded" });
111
- return Array.flatten(results);
98
+ return yield* pipe(sources, Effect.forEach((source) => Evaluation.evaluateAll(activeTraits, source), { concurrency: "unbounded" }), Effect.map(flow(Array.flatten, Array.filter(Evaluation.requiresReview))));
99
+ }), { concurrency: "unbounded" }).pipe(Effect.map(Array.flatten));
112
100
  })
113
101
  });
114
102
  //# sourceMappingURL=CheckTraits.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CheckTraits.js","sourceRoot":"","sources":["../../toolkit/CheckTraits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CheckTraits.js","sourceRoot":"","sources":["../../toolkit/CheckTraits.ts"],"names":[],"mappings":"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"}
@@ -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;AAc1D,eAAO,MAAM,KAAK,UAAW,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,qCAY1C,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { Cause, Effect, Layer, Schema as S } from "effect";
2
+ import { McpServer, Tool, Toolkit } from "effect/ai";
3
+ const toolkit = Toolkit.make(Tool.make("traits_configuration_error", {
4
+ description: "Traits failed to initialize. Call this tool to learn where configuration failed. Help the user fix setup, then restart the Traits MCP server before using Traits. Never ask the user to paste credentials into chat.",
5
+ parameters: Tool.EmptyParams,
6
+ success: S.Never,
7
+ failure: S.String,
8
+ failureMode: "return"
9
+ }).annotate(Tool.Readonly, true));
10
+ export const layer = (cause) => Cause.hasInterruptsOnly(cause)
11
+ ? Layer.effectDiscard(Effect.interrupt)
12
+ : McpServer.toolkit(toolkit).pipe(Layer.provide(toolkit.toLayer({
13
+ traits_configuration_error: () => Effect.fail(`${Cause.pretty(cause)}\n\nFix the reported error, then restart the Traits MCP server and retry. Do not paste credentials into chat.`)
14
+ })));
15
+ //# 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,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;IACtC,WAAW,EACT,sNAAsN;IACxN,UAAU,EAAE,IAAI,CAAC,WAAW;IAC5B,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,0BAA0B,EAAE,GAAG,EAAE,CAC/B,MAAM,CAAC,IAAI,CACT,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,+GAA+G,CACtI;KACJ,CAAC,CACH,CACF,CAAA"}