traits 0.4.0 → 0.5.1

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 (115) hide show
  1. package/Assessment.ts +14 -0
  2. package/LICENSE +203 -0
  3. package/Source.ts +13 -0
  4. package/Trait.ts +51 -0
  5. package/TraitConflict.ts +52 -0
  6. package/TraitDerivation.ts +137 -0
  7. package/TraitEvaluation.ts +69 -0
  8. package/TraitStore.ts +88 -0
  9. package/TraitsConfig.ts +57 -0
  10. package/TraitsContext.ts +11 -0
  11. package/_util/Approval.ts +59 -0
  12. package/_util/Git.ts +25 -0
  13. package/_util/TraitsConfigProvider.ts +22 -0
  14. package/_util/TraitsTelemetry.ts +20 -0
  15. package/_util/words.ts +555 -0
  16. package/bin.ts +65 -0
  17. package/dist/Assessment.d.ts +12 -0
  18. package/dist/Assessment.d.ts.map +1 -0
  19. package/dist/Assessment.js +12 -0
  20. package/dist/Assessment.js.map +1 -0
  21. package/dist/Source.d.ts +21 -0
  22. package/dist/Source.d.ts.map +1 -0
  23. package/dist/Source.js +10 -0
  24. package/dist/Source.js.map +1 -0
  25. package/dist/Trait.d.ts +12 -0
  26. package/dist/Trait.d.ts.map +1 -0
  27. package/dist/Trait.js +44 -0
  28. package/dist/Trait.js.map +1 -0
  29. package/dist/TraitConflict.d.ts +56 -0
  30. package/dist/TraitConflict.d.ts.map +1 -0
  31. package/dist/TraitConflict.js +47 -0
  32. package/dist/TraitConflict.js.map +1 -0
  33. package/dist/TraitDerivation.d.ts +99 -0
  34. package/dist/TraitDerivation.d.ts.map +1 -0
  35. package/dist/TraitDerivation.js +109 -0
  36. package/dist/TraitDerivation.js.map +1 -0
  37. package/dist/TraitEvaluation.d.ts +68 -0
  38. package/dist/TraitEvaluation.d.ts.map +1 -0
  39. package/dist/TraitEvaluation.js +61 -0
  40. package/dist/TraitEvaluation.js.map +1 -0
  41. package/dist/TraitStore.d.ts +17 -0
  42. package/dist/TraitStore.d.ts.map +1 -0
  43. package/dist/TraitStore.js +57 -0
  44. package/dist/TraitStore.js.map +1 -0
  45. package/dist/TraitsConfig.d.ts +14 -0
  46. package/dist/TraitsConfig.d.ts.map +1 -0
  47. package/dist/TraitsConfig.js +40 -0
  48. package/dist/TraitsConfig.js.map +1 -0
  49. package/dist/TraitsContext.d.ts +11 -0
  50. package/dist/TraitsContext.d.ts.map +1 -0
  51. package/dist/TraitsContext.js +4 -0
  52. package/dist/TraitsContext.js.map +1 -0
  53. package/dist/_util/Approval.d.ts +28 -0
  54. package/dist/_util/Approval.d.ts.map +1 -0
  55. package/dist/_util/Approval.js +48 -0
  56. package/dist/_util/Approval.js.map +1 -0
  57. package/dist/_util/Git.d.ts +15 -0
  58. package/dist/_util/Git.d.ts.map +1 -0
  59. package/dist/_util/Git.js +17 -0
  60. package/dist/_util/Git.js.map +1 -0
  61. package/dist/_util/TraitsConfigProvider.d.ts +3 -0
  62. package/dist/_util/TraitsConfigProvider.d.ts.map +1 -0
  63. package/dist/_util/TraitsConfigProvider.js +17 -0
  64. package/dist/_util/TraitsConfigProvider.js.map +1 -0
  65. package/dist/_util/TraitsTelemetry.d.ts +3 -0
  66. package/dist/_util/TraitsTelemetry.d.ts.map +1 -0
  67. package/dist/_util/TraitsTelemetry.js +12 -0
  68. package/dist/_util/TraitsTelemetry.js.map +1 -0
  69. package/dist/_util/words.d.ts +2 -0
  70. package/dist/_util/words.d.ts.map +1 -0
  71. package/dist/_util/words.js +556 -0
  72. package/dist/_util/words.js.map +1 -0
  73. package/dist/bin.d.ts +3 -0
  74. package/dist/bin.d.ts.map +1 -0
  75. package/dist/bin.js +60 -0
  76. package/dist/bin.js.map +1 -0
  77. package/dist/index.d.ts +10 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +10 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/main.d.ts +3 -0
  82. package/dist/main.d.ts.map +1 -0
  83. package/dist/main.js +72 -0
  84. package/dist/main.js.map +1 -0
  85. package/dist/package.json +52 -0
  86. package/dist/test/TraitIgnores.test.d.ts +2 -0
  87. package/dist/test/TraitIgnores.test.d.ts.map +1 -0
  88. package/dist/test/TraitIgnores.test.js +20 -0
  89. package/dist/test/TraitIgnores.test.js.map +1 -0
  90. package/dist/toolkit/CheckTraits.d.ts +79 -0
  91. package/dist/toolkit/CheckTraits.d.ts.map +1 -0
  92. package/dist/toolkit/CheckTraits.js +114 -0
  93. package/dist/toolkit/CheckTraits.js.map +1 -0
  94. package/dist/toolkit/DeriveTrait.d.ts +108 -0
  95. package/dist/toolkit/DeriveTrait.d.ts.map +1 -0
  96. package/dist/toolkit/DeriveTrait.js +54 -0
  97. package/dist/toolkit/DeriveTrait.js.map +1 -0
  98. package/dist/toolkit/toolkit.d.ts +3 -0
  99. package/dist/toolkit/toolkit.d.ts.map +1 -0
  100. package/dist/toolkit/toolkit.js +6 -0
  101. package/dist/toolkit/toolkit.js.map +1 -0
  102. package/dist/traitIgnores.d.ts +3 -0
  103. package/dist/traitIgnores.d.ts.map +1 -0
  104. package/dist/traitIgnores.js +17 -0
  105. package/dist/traitIgnores.js.map +1 -0
  106. package/index.ts +9 -0
  107. package/main.ts +111 -0
  108. package/package.json +45 -0
  109. package/skills/traits/SKILL.md +339 -0
  110. package/toolkit/CheckTraits.ts +154 -0
  111. package/toolkit/DeriveTrait.ts +59 -0
  112. package/toolkit/toolkit.ts +9 -0
  113. package/traitIgnores.ts +14 -0
  114. 1289345811335-0.8567837113514543/lib/traits.js +0 -662
  115. 1289345811335-0.8567837113514543/package.json +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsConfig.d.ts","sourceRoot":"","sources":["../TraitsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAiB,KAAK,EAAc,MAAM,IAAI,CAAC,EAAa,MAAM,QAAQ,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AACnD,eAAO,MAAM,YAAY;;;;;EAoBvB,CAAA;AAEF,eAAO,MAAM,KAAK,8RAyBG,CAAA"}
@@ -0,0 +1,40 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { Array, Effect, Layer, Path, pipe, Schema as S, Semaphore } from "effect";
10
+ import { DecisionModel, LanguageModel } from "effect/ai";
11
+ import { HttpClient } from "effect/http";
12
+ import { getWorktreeRoot } from "./_util/Git.js";
13
+ import { TraitsContext } from "./TraitsContext.js";
14
+ export const TraitsConfig = S.Struct({
15
+ excludeGitignored: S.Boolean.pipe(S.optional).annotate({
16
+ description: "Exclude Git-ignored files from checks by default. Set false to disable the Git file-set filter."
17
+ }),
18
+ excludes: S.Array(S.NonEmptyString).pipe(S.optional).annotate({
19
+ description: "Filenames or native filesystem glob patterns excluded from trait checks, relative to traits.ts or absolute. Use directory/** to exclude a subtree. Bare directories are not expanded; escape glob characters in literal filenames using native glob syntax."
20
+ }),
21
+ layerDecisionModel: S.declare((value) => Layer.isLayer(value)),
22
+ layerLanguageModel: S.declare((value) => Layer.isLayer(value))
23
+ });
24
+ export const layer = Effect.gen(function* () {
25
+ const path = yield* Path.Path;
26
+ const configRoot = yield* getWorktreeRoot;
27
+ const url = yield* path.toFileUrl(path.join(configRoot, "traits.ts"));
28
+ const module = yield* Effect.promise(() => import(__rewriteRelativeImportExtension(url.href)));
29
+ const config = yield* pipe(module.default, S.decodeUnknownEffect(TraitsConfig));
30
+ return Layer.mergeAll(
31
+ // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context
32
+ config.layerDecisionModel.pipe(Layer.orDie),
33
+ // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context
34
+ config.layerLanguageModel.pipe(Layer.orDie), Layer.effect(TraitsContext, Effect.gen(function* () {
35
+ const excludes = Array.appendAll(Array.flatMap([".git", ".worktrees"], (directory) => [`**/${directory}`, `**/${directory}/**`]), Array.map(config.excludes ?? [], (pattern) => path.isAbsolute(pattern) ? path.relative(configRoot, pattern) : pattern));
36
+ const semaphore = yield* Semaphore.make(4);
37
+ return { configRoot, excludeGitignored: config.excludeGitignored ?? true, excludes, semaphore };
38
+ })));
39
+ }).pipe(Layer.unwrap);
40
+ //# sourceMappingURL=TraitsConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsConfig.js","sourceRoot":"","sources":["../TraitsConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Context, Semaphore } from "effect";
2
+ declare const TraitsContext_base: Context.ServiceClass<TraitsContext, "traits/TraitsContext", {
3
+ readonly configRoot: string;
4
+ readonly excludeGitignored: boolean;
5
+ readonly excludes: ReadonlyArray<string>;
6
+ readonly semaphore: Semaphore.Semaphore;
7
+ }>;
8
+ export declare class TraitsContext extends TraitsContext_base {
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=TraitsContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsContext.d.ts","sourceRoot":"","sources":["../TraitsContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;;yBAKlB,MAAM;gCACC,OAAO;uBAChB,aAAa,CAAC,MAAM,CAAC;wBACpB,SAAS,CAAC,SAAS;;AAN3C,qBAAa,aAAc,SAAQ,kBAQR;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { Context, Semaphore } from "effect";
2
+ export class TraitsContext extends Context.Service()("traits/TraitsContext") {
3
+ }
4
+ //# sourceMappingURL=TraitsContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsContext.js","sourceRoot":"","sources":["../TraitsContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAE3C,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAQ/C,CAAC,sBAAsB,CAAC;CAAG"}
@@ -0,0 +1,28 @@
1
+ import { Effect, Schema as S } from "effect";
2
+ import { McpSchema } from "effect/ai";
3
+ export type Approval = typeof Approval.Type;
4
+ export declare const Approval: S.TaggedUnion<{
5
+ readonly ApprovalRequired: S.TaggedStruct<"ApprovalRequired", {
6
+ readonly message: S.String;
7
+ }>;
8
+ readonly Approved: S.TaggedStruct<"Approved", {}>;
9
+ readonly Declined: S.TaggedStruct<"Declined", {}>;
10
+ readonly RevisionRequired: S.TaggedStruct<"RevisionRequired", {
11
+ readonly feedback: S.String;
12
+ }>;
13
+ }>;
14
+ export declare const request: (options: {
15
+ readonly message: string;
16
+ readonly approved?: boolean | undefined;
17
+ }) => Effect.Effect<{
18
+ readonly _tag: "ApprovalRequired";
19
+ readonly message: string;
20
+ } | {
21
+ readonly _tag: "Approved";
22
+ } | {
23
+ readonly _tag: "Declined";
24
+ } | {
25
+ readonly _tag: "RevisionRequired";
26
+ readonly feedback: string;
27
+ }, McpSchema.ElicitationDeclined, never>;
28
+ //# sourceMappingURL=Approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Approval.d.ts","sourceRoot":"","sources":["../../_util/Approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,IAAI,CAAC,EAAU,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAa,MAAM,WAAW,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAC3C,eAAO,MAAM,QAAQ;;;;;;;;;EAKnB,CAAA;AAEF,eAAO,MAAM,OAAO;sBACA,MAAM;wBACJ,OAAO,GAAG,SAAS;;;;;;;;;;;wCA6CvC,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { Effect, Option, Schema as S, String } from "effect";
2
+ import { McpSchema, McpServer } from "effect/ai";
3
+ export const Approval = S.TaggedUnion({
4
+ Approved: {},
5
+ ApprovalRequired: { message: S.String },
6
+ RevisionRequired: { feedback: S.String },
7
+ Declined: {}
8
+ });
9
+ export const request = Effect.fn("Approval.request")(function* (options) {
10
+ const client = yield* Effect.serviceOption(McpSchema.McpServerClient).pipe(Effect.map(Option.getOrUndefined));
11
+ const supportsForm = client !== undefined &&
12
+ client.clientCapabilities.elicitation !== undefined &&
13
+ (client.clientCapabilities.elicitation.form !== undefined ||
14
+ client.clientCapabilities.elicitation.url === undefined);
15
+ const globalForms = client !== undefined &&
16
+ (String.toLowerCase(client.clientInfo.name) === "opencode" ||
17
+ typeof client.requestMetadata?.["ai.opencode/sessionID"] === "string");
18
+ if (client === undefined || !supportsForm || globalForms) {
19
+ return options.approved === true
20
+ ? Approval.cases.Approved.make({})
21
+ : Approval.cases.ApprovalRequired.make({ message: options.message });
22
+ }
23
+ const response = yield* McpServer.elicit({
24
+ message: options.message,
25
+ schema: S.Struct({
26
+ decision: S.Literals(["approve", "revise", "skip"]).annotate({
27
+ description: "Approve this exact proposal, request a revision, or skip it."
28
+ }),
29
+ feedback: S.String.pipe(S.optionalKey).annotate({ description: "Optional revision or alternative wording." })
30
+ })
31
+ }).pipe(Effect.provideService(McpSchema.McpServerClient, client), Effect.catchTags({
32
+ ElicitationDeclined: (error) => (error.cause === undefined ? Effect.undefined : error)
33
+ }));
34
+ if (response === undefined || response.decision === "skip")
35
+ return Approval.cases.Declined.make({});
36
+ if (response.decision === "revise" || (response.feedback !== undefined && String.trim(response.feedback) !== "")) {
37
+ const feedback = response.feedback === undefined ? "" : String.trim(response.feedback);
38
+ const guidance = String.stripMargin(`
39
+ | Ask the user for revision details using an interactive question with free-text input.
40
+ | Keep this proposal pending; do not infer approval or cancel it because of a related follow-up task.
41
+ `);
42
+ return Approval.cases.RevisionRequired.make({
43
+ feedback: feedback !== "" ? feedback : guidance
44
+ });
45
+ }
46
+ return Approval.cases.Approved.make({});
47
+ });
48
+ //# sourceMappingURL=Approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Approval.js","sourceRoot":"","sources":["../../_util/Approval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Effect, Path } from "effect";
2
+ import { ChildProcessSpawner } from "effect/process";
3
+ declare const GitRootError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
4
+ readonly _tag: "GitRootError";
5
+ } & Readonly<A>;
6
+ export declare class GitRootError extends GitRootError_base<{
7
+ readonly message: string;
8
+ }> {
9
+ }
10
+ /** The current checkout root, including when running in a linked worktree. */
11
+ export declare const getWorktreeRoot: Effect.Effect<string, GitRootError | import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner>;
12
+ /** The main checkout root, shared by its linked worktrees. */
13
+ export declare const getGitRoot: Effect.Effect<string, GitRootError | import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner | Path.Path>;
14
+ export {};
15
+ //# sourceMappingURL=Git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.d.ts","sourceRoot":"","sources":["../../_util/Git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAA;AACnD,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;;;;AAElE,qBAAa,YAAa,SAAQ,kBAAiC;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;CAAG;AAanG,8EAA8E;AAC9E,eAAO,MAAM,eAAe,6HAAgE,CAAA;AAE5F,8DAA8D;AAC9D,eAAO,MAAM,UAAU,yIAIrB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Data, Effect, Path, String } from "effect";
2
+ import { ChildProcess, ChildProcessSpawner } from "effect/process";
3
+ export class GitRootError extends Data.TaggedError("GitRootError") {
4
+ }
5
+ const resolveRoot = Effect.fn("Git.resolveRoot")(function* (command) {
6
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
7
+ return yield* spawner.string(command).pipe(Effect.map(String.trim), Effect.filterOrFail(String.isNonEmpty, () => new GitRootError({ message: "Run from inside a Git repository or worktree" })));
8
+ });
9
+ /** The current checkout root, including when running in a linked worktree. */
10
+ export const getWorktreeRoot = resolveRoot(ChildProcess.make `git rev-parse --show-toplevel`);
11
+ /** The main checkout root, shared by its linked worktrees. */
12
+ export const getGitRoot = Effect.gen(function* () {
13
+ const path = yield* Path.Path;
14
+ const gitDir = yield* resolveRoot(ChildProcess.make `git rev-parse --path-format=absolute --git-common-dir`);
15
+ return path.dirname(gitDir);
16
+ });
17
+ //# sourceMappingURL=Git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.js","sourceRoot":"","sources":["../../_util/Git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,OAAO,YAAa,SAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAA+B;CAAG;AAEnG,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAA6B;IACvF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAA;IAC9D,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EACvB,MAAM,CAAC,YAAY,CACjB,MAAM,CAAC,UAAU,EACjB,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CACpF,CACF,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAA,+BAA+B,CAAC,CAAA;AAE5F,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAA,uDAAuD,CAAC,CAAA;IAC3G,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { FileSystem, Path } from "effect";
2
+ export declare const layer: import("effect/Layer").Layer<never, import("./Git.ts").GitRootError | import("effect/PlatformError").PlatformError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem | Path.Path>;
3
+ //# sourceMappingURL=TraitsConfigProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsConfigProvider.d.ts","sourceRoot":"","sources":["../../_util/TraitsConfigProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAIxE,eAAO,MAAM,KAAK,2NAiBjB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Array, ConfigProvider, Effect, FileSystem, Path } from "effect";
2
+ import { getGitRoot, getWorktreeRoot } from "./Git.js";
3
+ export const layer = ConfigProvider.layerAdd(Effect.gen(function* () {
4
+ const fs = yield* FileSystem.FileSystem;
5
+ const path = yield* Path.Path;
6
+ const worktreeRoot = yield* getWorktreeRoot;
7
+ const gitRoot = yield* getGitRoot;
8
+ const files = Array.dedupe([path.join(worktreeRoot, ".env"), path.join(gitRoot, ".env")]);
9
+ let provider = ConfigProvider.fromUnknown({});
10
+ for (const file of files) {
11
+ if (yield* fs.exists(file)) {
12
+ provider = yield* ConfigProvider.fromDotEnv({ path: file }).pipe(Effect.map((value) => ConfigProvider.orElse(provider, value)));
13
+ }
14
+ }
15
+ return provider;
16
+ }).pipe(Effect.withSpan("TraitsConfigProvider.load")));
17
+ //# sourceMappingURL=TraitsConfigProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsConfigProvider.js","sourceRoot":"","sources":["../../_util/TraitsConfigProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAExE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAC1C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACzF,IAAI,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAC9D,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CACtD,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Layer } from "effect";
2
+ export declare const layer: (endpoint: URL | undefined) => Layer.Layer<never, never, never> | Layer.Layer<import("effect/observability/OtlpExporter").Flusher, never, import("effect/http/HttpClient").HttpClient>;
3
+ //# sourceMappingURL=TraitsTelemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsTelemetry.d.ts","sourceRoot":"","sources":["../../_util/TraitsTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,QAAQ,CAAA;AAM5C,eAAO,MAAM,KAAK,aAAc,GAAG,GAAG,SAAS,4JAa9C,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { Layer, pipe, String } from "effect";
2
+ import { Url } from "effect/http";
3
+ import { OtlpLogger, OtlpSerialization, OtlpTracer } from "effect/observability";
4
+ import PackageJson from "../package.json" with { type: "json" };
5
+ export const layer = (endpoint) => {
6
+ if (endpoint === undefined)
7
+ return Layer.empty;
8
+ const url = (signal) => pipe(endpoint, Url.setPathname(`${pipe(endpoint.pathname, String.replace(/\/$/, ""))}/v1/${signal}`), Url.setHash("")).href;
9
+ const resource = { serviceName: "traits", serviceVersion: PackageJson.version };
10
+ return Layer.mergeAll(OtlpTracer.layer({ url: url("traces"), resource }), OtlpLogger.layer({ url: url("logs"), resource })).pipe(Layer.provide(OtlpSerialization.layerJson));
11
+ };
12
+ //# sourceMappingURL=TraitsTelemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraitsTelemetry.js","sourceRoot":"","sources":["../../_util/TraitsTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEhF,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAE/D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,QAAyB,EAAE,EAAE;IACjD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IAC9C,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,EAAE,CAC7B,IAAI,CACF,QAAQ,EACR,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,EACrF,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAChB,CAAC,IAAI,CAAA;IACR,MAAM,QAAQ,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,OAAO,EAAE,CAAA;IAC/E,OAAO,KAAK,CAAC,QAAQ,CACnB,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAClD,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CACjD,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const words: readonly ["acacia", "adventure", "agate", "alabaster", "albatross", "alchemy", "alder", "allure", "alpine", "amaranth", "amber", "ambrosia", "amethyst", "amulet", "anemone", "angel", "anthem", "antler", "apricot", "aquamarine", "aquarium", "arbor", "arcadia", "archway", "aria", "arpeggio", "arrowroot", "aspen", "aster", "astral", "atlas", "aurora", "autumn", "avalon", "aviary", "azalea", "azure", "badger", "ballad", "ballet", "bamboo", "banyan", "basil", "bayberry", "beacon", "bead", "beech", "bell", "bellflower", "berry", "birch", "birdsong", "bliss", "bloom", "blossom", "bluebell", "bluebird", "blueberry", "boreal", "bower", "bramble", "brass", "breeze", "brook", "bubble", "buttercup", "butterfly", "cabin", "cadence", "cairn", "calico", "camellia", "canary", "candle", "canopy", "canvas", "canyon", "caravan", "cardinal", "carnation", "carousel", "cascade", "castle", "cedar", "celadon", "celestial", "cello", "chalet", "chalice", "chamomile", "charm", "cherry", "chickadee", "chime", "chinchilla", "cinnamon", "citadel", "citrine", "citrus", "clarinet", "clematis", "cloud", "clover", "cobalt", "cocoa", "comet", "compass", "concerto", "constellation", "copper", "coral", "cosmic", "cosmos", "cottage", "cove", "crane", "crescent", "cricket", "crocus", "crown", "crystal", "cupcake", "cypress", "daffodil", "dahlia", "daisy", "dandelion", "dapple", "dawn", "daybreak", "daydream", "deer", "delight", "dew", "dewdrop", "diamond", "dolphin", "dove", "dragon", "dragonfly", "dream", "dreamer", "dreamscape", "drift", "driftwood", "droplet", "dune", "dusk", "eagle", "echo", "edelweiss", "elderberry", "elm", "elysian", "ember", "emerald", "enchantment", "enclave", "enigma", "epiphany", "equinox", "ethereal", "evergreen", "fable", "fairy", "falcon", "fantasia", "faraway", "fawn", "feather", "fern", "festival", "fig", "filigree", "finch", "firefly", "fir", "fjord", "flamingo", "fleur", "flora", "flourish", "flower", "flute", "foal", "forest", "fountain", "fox", "freesia", "frog", "frost", "galaxy", "garden", "gardenia", "garland", "garnet", "gazebo", "gazelle", "gem", "ginger", "ginkgo", "glacier", "glade", "gleam", "glimmer", "glitter", "glow", "gold", "golden", "goldfinch", "gossamer", "grace", "granite", "grape", "greenhouse", "griffin", "grotto", "grove", "halo", "harbor", "hare", "harmony", "harp", "harvest", "haven", "hawthorn", "heather", "hedgehog", "heliotrope", "heron", "hibiscus", "hickory", "highland", "hilltop", "holly", "honey", "honeybee", "honeysuckle", "hope", "horizon", "hummingbird", "hyacinth", "hydrangea", "ibis", "icicle", "idyll", "illumine", "imagine", "indigo", "iris", "island", "ivory", "ivy", "jade", "jasmine", "jazz", "jewel", "journey", "joy", "jubilee", "juniper", "kaleidoscope", "karate", "kestrel", "kingfisher", "kite", "kiwi", "koala", "koi", "lagoon", "lake", "lantern", "lapis", "larch", "lark", "laurel", "lavender", "leaf", "legend", "lemon", "lemur", "lighthouse", "lilac", "lily", "linden", "lotus", "lullaby", "lumen", "luminous", "lunar", "lupine", "lyra", "lyric", "macaw", "magic", "magnolia", "mandarin", "mandolin", "mango", "maple", "marble", "marigold", "marimba", "mariposa", "marvel", "meadow", "melody", "meridian", "mermaid", "meteor", "midnight", "milkweed", "mimosa", "mint", "mirage", "mist", "moon", "moonbeam", "moonflower", "moonlight", "moonrise", "moonstone", "morning", "mosaic", "moss", "mountain", "mulberry", "muse", "music", "myriad", "myrtle", "mystic", "myth", "narwhal", "nebula", "nectar", "nightingale", "nimbus", "nocturne", "nova", "oak", "oasis", "ocean", "octave", "odyssey", "olive", "opal", "opera", "orchard", "orchestra", "orchid", "origami", "oriole", "otter", "owl", "pagoda", "palace", "palm", "panda", "papaya", "papyrus", "paradise", "parakeet", "parchment", "pastel", "pathway", "pavilion", "peach", "peacock", "pear", "pearl", "pebble", "pegasus", "pelican", "penguin", "peony", "peridot", "periwinkle", "petal", "phoenix", "piano", "piccolo", "pilgrim", "pine", "pinnacle", "pixie", "planet", "plum", "plume", "poem", "poetry", "polaris", "pomegranate", "pond", "poplar", "poppy", "porcelain", "portal", "prairie", "primrose", "prism", "promise", "puffin", "quail", "quartz", "quest", "quill", "quince", "rabbit", "radiance", "rainbow", "raindrop", "rainfall", "raven", "realm", "redwood", "reed", "reef", "reflection", "reverie", "rhapsody", "ribbon", "ripple", "river", "robin", "rose", "rosemary", "rosewood", "rowan", "ruby", "rune", "saffron", "sage", "sail", "sandalwood", "sapphire", "satin", "savanna", "seabird", "seaglass", "seahorse", "seal", "seashell", "sequoia", "serenade", "serendipity", "serenity", "shamrock", "shell", "shimmer", "silhouette", "silk", "silver", "skylark", "snow", "snowdrop", "snowfall", "snowflake", "solace", "solar", "solstice", "sonata", "songbird", "sorrel", "spark", "sparkle", "sparrow", "spell", "spire", "spring", "sprite", "spruce", "star", "stardust", "starfish", "starlight", "starling", "stone", "storybook", "strawberry", "stream", "summer", "sun", "sunbeam", "sunflower", "sunlight", "sunrise", "sunset", "swallow", "swan", "sweetpea", "sycamore", "symphony", "talisman", "tamarind", "tangerine", "tapestry", "teal", "telescope", "terrace", "thistle", "thrush", "thyme", "tide", "tiger", "topaz", "toucan", "tower", "treasure", "treetop", "trill", "tulip", "turquoise", "turtle", "twilight", "twinkle", "unicorn", "valley", "vanilla", "velvet", "verbena", "verdant", "vesper", "violet", "violin", "vista", "voyage", "waltz", "wand", "wander", "waterfall", "wave", "whale", "whimsy", "whisper", "wildflower", "willow", "windchime", "windmill", "wing", "winter", "wish", "wisteria", "wizard", "wolf", "wonder", "woodland", "wren", "yarrow", "yonder", "zenith", "zephyr", "zinnia"];
2
+ //# sourceMappingURL=words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../_util/words.ts"],"names":[],"mappings":"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"}