@mossbear/projections 0.1.0-alpha.26

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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/agents-dir.d.ts +13 -0
  4. package/dist/agents-dir.d.ts.map +1 -0
  5. package/dist/agents-dir.js +36 -0
  6. package/dist/agents-dir.js.map +1 -0
  7. package/dist/agents-dir.test.d.ts +2 -0
  8. package/dist/agents-dir.test.d.ts.map +1 -0
  9. package/dist/agents-dir.test.js +30 -0
  10. package/dist/agents-dir.test.js.map +1 -0
  11. package/dist/agents-md.d.ts +12 -0
  12. package/dist/agents-md.d.ts.map +1 -0
  13. package/dist/agents-md.js +47 -0
  14. package/dist/agents-md.js.map +1 -0
  15. package/dist/agents-md.test.d.ts +2 -0
  16. package/dist/agents-md.test.d.ts.map +1 -0
  17. package/dist/agents-md.test.js +44 -0
  18. package/dist/agents-md.test.js.map +1 -0
  19. package/dist/claude-md.d.ts +17 -0
  20. package/dist/claude-md.d.ts.map +1 -0
  21. package/dist/claude-md.js +43 -0
  22. package/dist/claude-md.js.map +1 -0
  23. package/dist/claude-md.test.d.ts +2 -0
  24. package/dist/claude-md.test.d.ts.map +1 -0
  25. package/dist/claude-md.test.js +61 -0
  26. package/dist/claude-md.test.js.map +1 -0
  27. package/dist/claude-rules.d.ts +17 -0
  28. package/dist/claude-rules.d.ts.map +1 -0
  29. package/dist/claude-rules.js +43 -0
  30. package/dist/claude-rules.js.map +1 -0
  31. package/dist/claude-rules.test.d.ts +2 -0
  32. package/dist/claude-rules.test.d.ts.map +1 -0
  33. package/dist/claude-rules.test.js +34 -0
  34. package/dist/claude-rules.test.js.map +1 -0
  35. package/dist/compatibility-attribution.d.ts +7 -0
  36. package/dist/compatibility-attribution.d.ts.map +1 -0
  37. package/dist/compatibility-attribution.js +11 -0
  38. package/dist/compatibility-attribution.js.map +1 -0
  39. package/dist/cursor-rules.d.ts +17 -0
  40. package/dist/cursor-rules.d.ts.map +1 -0
  41. package/dist/cursor-rules.js +36 -0
  42. package/dist/cursor-rules.js.map +1 -0
  43. package/dist/cursor-rules.test.d.ts +2 -0
  44. package/dist/cursor-rules.test.d.ts.map +1 -0
  45. package/dist/cursor-rules.test.js +58 -0
  46. package/dist/cursor-rules.test.js.map +1 -0
  47. package/dist/detect-format.d.ts +15 -0
  48. package/dist/detect-format.d.ts.map +1 -0
  49. package/dist/detect-format.js +88 -0
  50. package/dist/detect-format.js.map +1 -0
  51. package/dist/detect-format.test.d.ts +2 -0
  52. package/dist/detect-format.test.d.ts.map +1 -0
  53. package/dist/detect-format.test.js +104 -0
  54. package/dist/detect-format.test.js.map +1 -0
  55. package/dist/eval-path.d.ts +91 -0
  56. package/dist/eval-path.d.ts.map +1 -0
  57. package/dist/eval-path.js +110 -0
  58. package/dist/eval-path.js.map +1 -0
  59. package/dist/index.d.ts +17 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +17 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/path-rules.d.ts +45 -0
  64. package/dist/path-rules.d.ts.map +1 -0
  65. package/dist/path-rules.js +65 -0
  66. package/dist/path-rules.js.map +1 -0
  67. package/dist/skill-member-path.d.ts +51 -0
  68. package/dist/skill-member-path.d.ts.map +1 -0
  69. package/dist/skill-member-path.js +76 -0
  70. package/dist/skill-member-path.js.map +1 -0
  71. package/dist/skill-member-path.test.d.ts +2 -0
  72. package/dist/skill-member-path.test.d.ts.map +1 -0
  73. package/dist/skill-member-path.test.js +0 -0
  74. package/dist/skill-member-path.test.js.map +1 -0
  75. package/package.json +47 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The scope-relative path predicates that both attached-file derivations share.
3
+ *
4
+ * A guide's attached files land in two different places depending on the guide's
5
+ * shape — a plain guide's criteria go to the eval shadow tree (`eval-path.ts`), a
6
+ * skill's members go inside its own directory (`skill-member-path.ts`) — but both
7
+ * derivations answer the same safety questions first, and a second copy of those
8
+ * answers is a second thing to get wrong. They live here so the two derivations
9
+ * cannot drift on what counts as a safe path or as a skill.
10
+ */
11
+ import { SafeRelativePosixPathSchema } from '@mossbear/protocol';
12
+ import * as v from 'valibot';
13
+ import { detectFormat } from './detect-format.js';
14
+ /**
15
+ * The `.mossbear/` directory as a whole is Mossbear's own state — the sidecar, the
16
+ * repo config, pulled context, and the eval shadow tree. None of it is guidance,
17
+ * so a *guide* path that claims to live there is a caller error rather than a
18
+ * file to derive anything from.
19
+ */
20
+ const MOSSBEAR_DIR_SEGMENT = '.mossbear';
21
+ export function toPosix(path) {
22
+ return path.replaceAll('\\', '/');
23
+ }
24
+ export function isSafeRelativePath(path) {
25
+ return v.safeParse(SafeRelativePosixPathSchema, path).success;
26
+ }
27
+ /**
28
+ * Split a scope-relative path into its lower-cased segments.
29
+ *
30
+ * Lower-cased because recognition and derivation pull in opposite directions:
31
+ * a shadow path is *written* as exactly `.mossbear/evals/…`, but on a
32
+ * case-insensitive filesystem `.Mossbear/Evals/AGENTS.md` names the same file, and
33
+ * the two ways of being wrong about it are not symmetric — classifying eval
34
+ * criteria as guidance hands a rubric to an agent as instructions, while
35
+ * classifying a stray capitalised path as eval content merely declines to treat
36
+ * it as a guide. Recognition therefore leans the safe way.
37
+ */
38
+ export function segmentsOf(path) {
39
+ return toPosix(path).toLowerCase().split('/');
40
+ }
41
+ /** True when `path` is inside `.mossbear/`, whatever it holds. */
42
+ export function isUnderMossbearDir(path) {
43
+ return segmentsOf(path)[0] === MOSSBEAR_DIR_SEGMENT;
44
+ }
45
+ /**
46
+ * True when a path is a skill's own `SKILL.md`.
47
+ *
48
+ * The rule is *the attached file lives with its guide*, and a skill's guide is a
49
+ * directory — so its criteria are the positional `EVAL.md` inside it and its
50
+ * members are the rest of that directory
51
+ * (`skillMemberContentType`, `apps/dashboard/src/server/rules/skillMembers.ts:60-66`).
52
+ * Shadowing a skill as well would put one skill's rubric in two places, split it
53
+ * out of the directory that makes a skill portable, and hand the next reconciler
54
+ * two rows to disagree over — the "two shapes of one fact" CLAUDE.md → Simplicity
55
+ * refuses. `detectFormat` is the same test discovery uses, so what counts as a
56
+ * skill here cannot drift from what counts as one there.
57
+ *
58
+ * This one predicate partitions the two derivations: `evalShadowPath` returns
59
+ * null exactly where this is true, and `skillMemberPath` returns null exactly
60
+ * where it is false.
61
+ */
62
+ export function isSkillGuidePath(path) {
63
+ return detectFormat(path) === 'skill-md';
64
+ }
65
+ //# sourceMappingURL=path-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-rules.js","sourceRoot":"","sources":["../src/path-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAExC,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,CAAC,CAAC,SAAS,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC,OAAO,CAAA;AAC/D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAA;AACrD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,UAAU,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Where a **skill's member files** live on disk: inside the skill's own
3
+ * directory, beside the `SKILL.md` that names it.
4
+ *
5
+ * This is the other half of the rule `eval-path.ts` states — *the attached file
6
+ * lives with its guide* — for the guide shape that is a directory rather than a
7
+ * bare file. A skill is `<dir>/SKILL.md` plus whatever `scripts/`,
8
+ * `references/` and `assets/` it carries, and those members are what make it
9
+ * runnable: a `SKILL.md` delivered without them is a skill that cannot do its
10
+ * job. `isSkillGuidePath` partitions the two derivations exactly —
11
+ * `evalShadowPath` returns null where it is true, this returns null where it is
12
+ * false — so no guide can ever get both, and none can get neither.
13
+ *
14
+ * **Why the server derives it rather than each client.** Identical to
15
+ * `evalShadowPath`'s reason, and it is the failure `skill-member-delivery` was
16
+ * filed for: members are `guide_files` rows attached to their guide by
17
+ * `guide_id` with no bundle membership of their own
18
+ * (`apps/dashboard/src/server/rules/skillMembers.ts:200-205`), so the only thing
19
+ * that knows where a member belongs is the guide's own path. Letting each
20
+ * subscribed clone re-derive that from a member name would be the per-clone
21
+ * divergence `unified-item-sync` exists to remove — and letting none of them
22
+ * derive it is what shipped, which is a skill delivered in pieces with the sync
23
+ * reporting success.
24
+ */
25
+ /**
26
+ * The scope-relative path a skill member lands at, or `null` when it has no
27
+ * representable home.
28
+ *
29
+ * `guidePath` is the skill's own `SKILL.md`, scope-relative; `memberPath` is the
30
+ * member's path *relative to the skill directory* — the form the importer stores
31
+ * in member metadata (`SkillMemberMetadata.path`). The result is relative to the
32
+ * same scope root the guide path is, so a `global` skill's members land under the
33
+ * home directory by the same rule that puts a `project` skill's under the
34
+ * checkout, with no second scope decision to keep in sync.
35
+ *
36
+ * Null, never a repaired path, in every rejecting case — the caller reports the
37
+ * member as unplaceable rather than writing it somewhere approximate:
38
+ *
39
+ * - the guide is not a skill (a plain guide has no directory to hold members),
40
+ * or its path is unsafe or inside `.mossbear/`;
41
+ * - the member path is absolute, traverses, carries control characters, or is
42
+ * over-long — `memberPath` is remote-supplied and is parsed, not trusted;
43
+ * - the joined result is unsafe or would land in `.mossbear/`, which is Mossbear's own
44
+ * state and is rewritten by sync.
45
+ *
46
+ * The result is re-checked rather than assumed safe from its two halves: length
47
+ * is the case that only exists after joining, where a legal guide path and a
48
+ * legal member path together exceed the bound the wire format enforces.
49
+ */
50
+ export declare function skillMemberPath(guidePath: string, memberPath: string): string | null;
51
+ //# sourceMappingURL=skill-member-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-member-path.d.ts","sourceRoot":"","sources":["../src/skill-member-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBpF"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Where a **skill's member files** live on disk: inside the skill's own
3
+ * directory, beside the `SKILL.md` that names it.
4
+ *
5
+ * This is the other half of the rule `eval-path.ts` states — *the attached file
6
+ * lives with its guide* — for the guide shape that is a directory rather than a
7
+ * bare file. A skill is `<dir>/SKILL.md` plus whatever `scripts/`,
8
+ * `references/` and `assets/` it carries, and those members are what make it
9
+ * runnable: a `SKILL.md` delivered without them is a skill that cannot do its
10
+ * job. `isSkillGuidePath` partitions the two derivations exactly —
11
+ * `evalShadowPath` returns null where it is true, this returns null where it is
12
+ * false — so no guide can ever get both, and none can get neither.
13
+ *
14
+ * **Why the server derives it rather than each client.** Identical to
15
+ * `evalShadowPath`'s reason, and it is the failure `skill-member-delivery` was
16
+ * filed for: members are `guide_files` rows attached to their guide by
17
+ * `guide_id` with no bundle membership of their own
18
+ * (`apps/dashboard/src/server/rules/skillMembers.ts:200-205`), so the only thing
19
+ * that knows where a member belongs is the guide's own path. Letting each
20
+ * subscribed clone re-derive that from a member name would be the per-clone
21
+ * divergence `unified-item-sync` exists to remove — and letting none of them
22
+ * derive it is what shipped, which is a skill delivered in pieces with the sync
23
+ * reporting success.
24
+ */
25
+ import { isSafeRelativePath, isSkillGuidePath, isUnderMossbearDir, toPosix, } from './path-rules.js';
26
+ /**
27
+ * The scope-relative path a skill member lands at, or `null` when it has no
28
+ * representable home.
29
+ *
30
+ * `guidePath` is the skill's own `SKILL.md`, scope-relative; `memberPath` is the
31
+ * member's path *relative to the skill directory* — the form the importer stores
32
+ * in member metadata (`SkillMemberMetadata.path`). The result is relative to the
33
+ * same scope root the guide path is, so a `global` skill's members land under the
34
+ * home directory by the same rule that puts a `project` skill's under the
35
+ * checkout, with no second scope decision to keep in sync.
36
+ *
37
+ * Null, never a repaired path, in every rejecting case — the caller reports the
38
+ * member as unplaceable rather than writing it somewhere approximate:
39
+ *
40
+ * - the guide is not a skill (a plain guide has no directory to hold members),
41
+ * or its path is unsafe or inside `.mossbear/`;
42
+ * - the member path is absolute, traverses, carries control characters, or is
43
+ * over-long — `memberPath` is remote-supplied and is parsed, not trusted;
44
+ * - the joined result is unsafe or would land in `.mossbear/`, which is Mossbear's own
45
+ * state and is rewritten by sync.
46
+ *
47
+ * The result is re-checked rather than assumed safe from its two halves: length
48
+ * is the case that only exists after joining, where a legal guide path and a
49
+ * legal member path together exceed the bound the wire format enforces.
50
+ */
51
+ export function skillMemberPath(guidePath, memberPath) {
52
+ const guide = toPosix(guidePath);
53
+ if (!isSafeRelativePath(guide))
54
+ return null;
55
+ if (isUnderMossbearDir(guide))
56
+ return null;
57
+ if (!isSkillGuidePath(guide))
58
+ return null;
59
+ const member = toPosix(memberPath);
60
+ if (!isSafeRelativePath(member))
61
+ return null;
62
+ // A `skill-md` path always sits under a `skills/` directory and ends in
63
+ // `/skill.md` (`detect-format.ts`), so it always has a parent — there is no
64
+ // root-level skill and therefore no empty-directory case to handle.
65
+ const separatorIndex = guide.lastIndexOf('/');
66
+ if (separatorIndex === -1)
67
+ return null;
68
+ const skillDir = guide.slice(0, separatorIndex);
69
+ const joined = `${skillDir}/${member}`;
70
+ if (!isSafeRelativePath(joined))
71
+ return null;
72
+ if (isUnderMossbearDir(joined))
73
+ return null;
74
+ return joined;
75
+ }
76
+ //# sourceMappingURL=skill-member-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-member-path.js","sourceRoot":"","sources":["../src/skill-member-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,GACR,MAAM,iBAAiB,CAAA;AAExB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,UAAkB;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3C,IAAI,kBAAkB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAClC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAE5C,wEAAwE;IACxE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,cAAc,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;IAE/C,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAA;IACtC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5C,IAAI,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3C,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill-member-path.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-member-path.test.d.ts","sourceRoot":"","sources":["../src/skill-member-path.test.ts"],"names":[],"mappings":""}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-member-path.test.js","sourceRoot":"","sources":["../src/skill-member-path.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@mossbear/projections",
3
+ "version": "0.1.0-alpha.26",
4
+ "private": false,
5
+ "description": "Guide file format detection and compatibility renderers for Mossbear — AGENTS.md, .agents/, CLAUDE.md, .claude/rules/, .cursorrules.",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "!dist/.tsbuildinfo",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/auden-to/auden.git",
25
+ "directory": "packages/projections"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public",
29
+ "provenance": false
30
+ },
31
+ "scripts": {
32
+ "build": "tsc --project tsconfig.json",
33
+ "dev": "tsc --project tsconfig.json --watch",
34
+ "typecheck": "tsc --project tsconfig.json --noEmit",
35
+ "lint": "oxlint",
36
+ "lint:fix": "oxfmt && oxlint --fix",
37
+ "format": "oxfmt",
38
+ "format:check": "oxfmt --check",
39
+ "test": "vitest run"
40
+ },
41
+ "dependencies": {
42
+ "@mossbear/protocol": "0.1.0-alpha.26"
43
+ },
44
+ "devDependencies": {
45
+ "typescript": "*"
46
+ }
47
+ }