@metaobjectsdev/sdk 0.5.0-rc.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 (118) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +32 -0
  3. package/dist/agent-docs/body.d.ts +2 -0
  4. package/dist/agent-docs/body.d.ts.map +1 -0
  5. package/dist/agent-docs/body.js +563 -0
  6. package/dist/agent-docs/body.js.map +1 -0
  7. package/dist/agent-docs/content-hash.d.ts +8 -0
  8. package/dist/agent-docs/content-hash.d.ts.map +1 -0
  9. package/dist/agent-docs/content-hash.js +23 -0
  10. package/dist/agent-docs/content-hash.js.map +1 -0
  11. package/dist/agent-docs/index.d.ts +3 -0
  12. package/dist/agent-docs/index.d.ts.map +1 -0
  13. package/dist/agent-docs/index.js +4 -0
  14. package/dist/agent-docs/index.js.map +1 -0
  15. package/dist/config.d.ts +113 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +53 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/forge-types.d.ts +47 -0
  20. package/dist/forge-types.d.ts.map +1 -0
  21. package/dist/forge-types.js +133 -0
  22. package/dist/forge-types.js.map +1 -0
  23. package/dist/index.d.ts +20 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +39 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/memory.d.ts +30 -0
  28. package/dist/memory.d.ts.map +1 -0
  29. package/dist/memory.js +105 -0
  30. package/dist/memory.js.map +1 -0
  31. package/dist/package.d.ts +65 -0
  32. package/dist/package.d.ts.map +1 -0
  33. package/dist/package.js +105 -0
  34. package/dist/package.js.map +1 -0
  35. package/dist/paths.d.ts +5 -0
  36. package/dist/paths.d.ts.map +1 -0
  37. package/dist/paths.js +26 -0
  38. package/dist/paths.js.map +1 -0
  39. package/dist/records/any.d.ts +467 -0
  40. package/dist/records/any.d.ts.map +1 -0
  41. package/dist/records/any.js +14 -0
  42. package/dist/records/any.js.map +1 -0
  43. package/dist/records/convention.d.ts +90 -0
  44. package/dist/records/convention.d.ts.map +1 -0
  45. package/dist/records/convention.js +9 -0
  46. package/dist/records/convention.js.map +1 -0
  47. package/dist/records/core.d.ts +84 -0
  48. package/dist/records/core.d.ts.map +1 -0
  49. package/dist/records/core.js +47 -0
  50. package/dist/records/core.js.map +1 -0
  51. package/dist/records/decision.d.ts +90 -0
  52. package/dist/records/decision.d.ts.map +1 -0
  53. package/dist/records/decision.js +9 -0
  54. package/dist/records/decision.js.map +1 -0
  55. package/dist/records/failure.d.ts +93 -0
  56. package/dist/records/failure.d.ts.map +1 -0
  57. package/dist/records/failure.js +10 -0
  58. package/dist/records/failure.js.map +1 -0
  59. package/dist/records/glossary.d.ts +111 -0
  60. package/dist/records/glossary.d.ts.map +1 -0
  61. package/dist/records/glossary.js +14 -0
  62. package/dist/records/glossary.js.map +1 -0
  63. package/dist/records/principle.d.ts +99 -0
  64. package/dist/records/principle.d.ts.map +1 -0
  65. package/dist/records/principle.js +12 -0
  66. package/dist/records/principle.js.map +1 -0
  67. package/dist/storage/errors.d.ts +14 -0
  68. package/dist/storage/errors.d.ts.map +1 -0
  69. package/dist/storage/errors.js +27 -0
  70. package/dist/storage/errors.js.map +1 -0
  71. package/dist/storage/index.d.ts +7 -0
  72. package/dist/storage/index.d.ts.map +1 -0
  73. package/dist/storage/index.js +6 -0
  74. package/dist/storage/index.js.map +1 -0
  75. package/dist/storage/lifecycle.d.ts +5 -0
  76. package/dist/storage/lifecycle.d.ts.map +1 -0
  77. package/dist/storage/lifecycle.js +27 -0
  78. package/dist/storage/lifecycle.js.map +1 -0
  79. package/dist/storage/list.d.ts +8 -0
  80. package/dist/storage/list.d.ts.map +1 -0
  81. package/dist/storage/list.js +42 -0
  82. package/dist/storage/list.js.map +1 -0
  83. package/dist/storage/read.d.ts +9 -0
  84. package/dist/storage/read.d.ts.map +1 -0
  85. package/dist/storage/read.js +43 -0
  86. package/dist/storage/read.js.map +1 -0
  87. package/dist/storage/write.d.ts +8 -0
  88. package/dist/storage/write.d.ts.map +1 -0
  89. package/dist/storage/write.js +20 -0
  90. package/dist/storage/write.js.map +1 -0
  91. package/dist/workspace.d.ts +49 -0
  92. package/dist/workspace.d.ts.map +1 -0
  93. package/dist/workspace.js +280 -0
  94. package/dist/workspace.js.map +1 -0
  95. package/package.json +48 -0
  96. package/src/agent-docs/body.ts +562 -0
  97. package/src/agent-docs/content-hash.ts +25 -0
  98. package/src/agent-docs/index.ts +8 -0
  99. package/src/config.ts +69 -0
  100. package/src/forge-types.ts +167 -0
  101. package/src/index.ts +98 -0
  102. package/src/memory.ts +116 -0
  103. package/src/package.ts +120 -0
  104. package/src/paths.ts +30 -0
  105. package/src/records/any.ts +15 -0
  106. package/src/records/convention.ts +10 -0
  107. package/src/records/core.ts +55 -0
  108. package/src/records/decision.ts +10 -0
  109. package/src/records/failure.ts +11 -0
  110. package/src/records/glossary.ts +15 -0
  111. package/src/records/principle.ts +13 -0
  112. package/src/storage/errors.ts +23 -0
  113. package/src/storage/index.ts +10 -0
  114. package/src/storage/lifecycle.ts +38 -0
  115. package/src/storage/list.ts +53 -0
  116. package/src/storage/read.ts +54 -0
  117. package/src/storage/write.ts +32 -0
  118. package/src/workspace.ts +342 -0
@@ -0,0 +1,113 @@
1
+ import { z } from "zod";
2
+ export declare const ConfigSchema: z.ZodObject<{
3
+ schema_version: z.ZodLiteral<1>;
4
+ pending_in_git: z.ZodDefault<z.ZodBoolean>;
5
+ confidence_thresholds: z.ZodDefault<z.ZodObject<{
6
+ pending_promote: z.ZodDefault<z.ZodNumber>;
7
+ drift_warn: z.ZodDefault<z.ZodNumber>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ pending_promote: number;
10
+ drift_warn: number;
11
+ }, {
12
+ pending_promote?: number | undefined;
13
+ drift_warn?: number | undefined;
14
+ }>>;
15
+ sources: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodObject<{
16
+ kind: z.ZodLiteral<"path">;
17
+ path: z.ZodString;
18
+ }, "strip", z.ZodTypeAny, {
19
+ path: string;
20
+ kind: "path";
21
+ }, {
22
+ path: string;
23
+ kind: "path";
24
+ }>, z.ZodObject<{
25
+ kind: z.ZodLiteral<"package">;
26
+ package: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ kind: "package";
29
+ package: string;
30
+ }, {
31
+ kind: "package";
32
+ package: string;
33
+ }>]>, "many">>;
34
+ extract: z.ZodDefault<z.ZodObject<{
35
+ metaignore: z.ZodOptional<z.ZodString>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ metaignore?: string | undefined;
38
+ }, {
39
+ metaignore?: string | undefined;
40
+ }>>;
41
+ migrate: z.ZodOptional<z.ZodObject<{
42
+ outDir: z.ZodOptional<z.ZodString>;
43
+ databaseUrl: z.ZodOptional<z.ZodString>;
44
+ dialect: z.ZodOptional<z.ZodEnum<["sqlite", "postgres"]>>;
45
+ onAmbiguous: z.ZodOptional<z.ZodEnum<["abort", "rename", "drop-add"]>>;
46
+ allow: z.ZodOptional<z.ZodArray<z.ZodEnum<["drop-column", "drop-table", "type-change", "drop-index", "drop-fk", "nullable-to-not-null"]>, "many">>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ outDir?: string | undefined;
49
+ databaseUrl?: string | undefined;
50
+ dialect?: "sqlite" | "postgres" | undefined;
51
+ onAmbiguous?: "abort" | "rename" | "drop-add" | undefined;
52
+ allow?: ("drop-column" | "drop-table" | "type-change" | "drop-index" | "drop-fk" | "nullable-to-not-null")[] | undefined;
53
+ }, {
54
+ outDir?: string | undefined;
55
+ databaseUrl?: string | undefined;
56
+ dialect?: "sqlite" | "postgres" | undefined;
57
+ onAmbiguous?: "abort" | "rename" | "drop-add" | undefined;
58
+ allow?: ("drop-column" | "drop-table" | "type-change" | "drop-index" | "drop-fk" | "nullable-to-not-null")[] | undefined;
59
+ }>>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ schema_version: 1;
62
+ pending_in_git: boolean;
63
+ confidence_thresholds: {
64
+ pending_promote: number;
65
+ drift_warn: number;
66
+ };
67
+ sources: ({
68
+ path: string;
69
+ kind: "path";
70
+ } | {
71
+ kind: "package";
72
+ package: string;
73
+ })[];
74
+ extract: {
75
+ metaignore?: string | undefined;
76
+ };
77
+ migrate?: {
78
+ outDir?: string | undefined;
79
+ databaseUrl?: string | undefined;
80
+ dialect?: "sqlite" | "postgres" | undefined;
81
+ onAmbiguous?: "abort" | "rename" | "drop-add" | undefined;
82
+ allow?: ("drop-column" | "drop-table" | "type-change" | "drop-index" | "drop-fk" | "nullable-to-not-null")[] | undefined;
83
+ } | undefined;
84
+ }, {
85
+ schema_version: 1;
86
+ pending_in_git?: boolean | undefined;
87
+ confidence_thresholds?: {
88
+ pending_promote?: number | undefined;
89
+ drift_warn?: number | undefined;
90
+ } | undefined;
91
+ sources?: ({
92
+ path: string;
93
+ kind: "path";
94
+ } | {
95
+ kind: "package";
96
+ package: string;
97
+ })[] | undefined;
98
+ extract?: {
99
+ metaignore?: string | undefined;
100
+ } | undefined;
101
+ migrate?: {
102
+ outDir?: string | undefined;
103
+ databaseUrl?: string | undefined;
104
+ dialect?: "sqlite" | "postgres" | undefined;
105
+ onAmbiguous?: "abort" | "rename" | "drop-add" | undefined;
106
+ allow?: ("drop-column" | "drop-table" | "type-change" | "drop-index" | "drop-fk" | "nullable-to-not-null")[] | undefined;
107
+ } | undefined;
108
+ }>;
109
+ export type Config = z.infer<typeof ConfigSchema>;
110
+ export declare const DEFAULT_CONFIG: Config;
111
+ export declare function loadConfig(metaRoot: string): Promise<Config>;
112
+ export declare function saveConfig(metaRoot: string, config: Config): Promise<void>;
113
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,cAAc,EAAE,MAAkD,CAAC;AAIhF,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF"}
package/dist/config.js ADDED
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { readFile, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ const DialectEnum = z.enum(["sqlite", "postgres"]);
5
+ const OnAmbiguousEnum = z.enum(["abort", "rename", "drop-add"]);
6
+ const AllowTokenEnum = z.enum([
7
+ "drop-column",
8
+ "drop-table",
9
+ "type-change",
10
+ "drop-index",
11
+ "drop-fk",
12
+ "nullable-to-not-null",
13
+ ]);
14
+ const MigrateBlock = z.object({
15
+ outDir: z.string(),
16
+ databaseUrl: z.string(),
17
+ dialect: DialectEnum,
18
+ onAmbiguous: OnAmbiguousEnum,
19
+ allow: z.array(AllowTokenEnum),
20
+ }).partial();
21
+ export const ConfigSchema = z.object({
22
+ schema_version: z.literal(1),
23
+ pending_in_git: z.boolean().default(true),
24
+ confidence_thresholds: z
25
+ .object({
26
+ pending_promote: z.number().min(0).max(1).default(0.8),
27
+ drift_warn: z.number().min(0).max(1).default(0.7),
28
+ })
29
+ .default({}),
30
+ sources: z
31
+ .array(z.union([
32
+ z.object({ kind: z.literal("path"), path: z.string() }),
33
+ z.object({ kind: z.literal("package"), package: z.string() }),
34
+ ]))
35
+ .default([]),
36
+ extract: z
37
+ .object({
38
+ metaignore: z.string().optional(),
39
+ })
40
+ .default({}),
41
+ migrate: MigrateBlock.optional(),
42
+ });
43
+ export const DEFAULT_CONFIG = ConfigSchema.parse({ schema_version: 1 });
44
+ const CONFIG_FILE = "config.json";
45
+ export async function loadConfig(metaRoot) {
46
+ const raw = await readFile(join(metaRoot, CONFIG_FILE), "utf8");
47
+ return ConfigSchema.parse(JSON.parse(raw));
48
+ }
49
+ export async function saveConfig(metaRoot, config) {
50
+ ConfigSchema.parse(config); // validate before writing
51
+ await writeFile(join(metaRoot, CONFIG_FILE), JSON.stringify(config, null, 2) + "\n", "utf8");
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAEnD,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAEhE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5B,aAAa;IACb,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,SAAS;IACT,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,eAAe;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;CAC/B,CAAC,CAAC,OAAO,EAAE,CAAC;AAEb,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,qBAAqB,EAAE,CAAC;SACrB,MAAM,CAAC;QACN,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;KAClD,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,CAAC;SACP,KAAK,CACJ,CAAC,CAAC,KAAK,CAAC;QACN,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACvD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;KAC9D,CAAC,CACH;SACA,OAAO,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAW,YAAY,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;AAEhF,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,MAAc;IAC/D,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B;IACtD,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC3B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACtC,MAAM,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ export declare const FORGE_TYPE_DECISION = "decision";
2
+ export declare const FORGE_TYPE_PRINCIPLE = "principle";
3
+ export declare const FORGE_TYPE_CONVENTION = "convention";
4
+ export declare const FORGE_TYPE_GLOSSARY = "glossary";
5
+ export declare const FORGE_TYPE_FAILURE = "failure";
6
+ export declare const FORGE_TYPES: readonly ["decision", "principle", "convention", "glossary", "failure"];
7
+ export type ForgeType = (typeof FORGE_TYPES)[number];
8
+ export declare const FORGE_DECISION_SUBTYPES: readonly ["base", "global", "scoped"];
9
+ export declare const FORGE_PRINCIPLE_SUBTYPES: readonly ["base", "advisory", "enforced"];
10
+ export declare const FORGE_CONVENTION_SUBTYPES: readonly ["base"];
11
+ export declare const FORGE_GLOSSARY_SUBTYPES: readonly ["base"];
12
+ export declare const FORGE_FAILURE_SUBTYPES: readonly ["base"];
13
+ export declare const FORGE_ATTR_CONFIDENCE = "forgeConfidence";
14
+ export declare const FORGE_ATTR_SOURCE = "forgeSource";
15
+ export declare const FORGE_ATTR_CAPTURED_AT = "forgeCapturedAt";
16
+ export declare const FORGE_ATTR_LAST_VALIDATED_COMMIT = "forgeLastValidatedCommit";
17
+ export declare const FORGE_ATTR_PRIMARY_LOCATION = "forgePrimaryLocation";
18
+ export declare const FORGE_ATTR_OCCURRENCES = "forgeOccurrences";
19
+ export declare const FORGE_ATTR_RATIONALE = "forgeRationale";
20
+ export declare const FORGE_ATTR_ALTERNATIVES = "forgeAlternatives";
21
+ export declare const FORGE_ATTR_SCOPE = "forgeScope";
22
+ export declare const FORGE_ATTR_STATEMENT = "forgeStatement";
23
+ export declare const FORGE_ATTR_ENFORCEMENT = "forgeEnforcement";
24
+ export declare const FORGE_ATTR_PATTERN_DESCRIPTION = "forgePatternDescription";
25
+ export declare const FORGE_ATTR_EXAMPLES = "forgeExamples";
26
+ export declare const FORGE_ATTR_COUNTER_EXAMPLES = "forgeCounterExamples";
27
+ export declare const FORGE_ATTR_APPLIES_TO = "forgeAppliesTo";
28
+ export declare const FORGE_ATTR_TERM = "forgeTerm";
29
+ export declare const FORGE_ATTR_SYNONYMS = "forgeSynonyms";
30
+ export declare const FORGE_ATTR_DEFINITION = "forgeDefinition";
31
+ export declare const FORGE_ATTR_CODE_ANCHORS = "forgeCodeAnchors";
32
+ export declare const FORGE_ATTR_SEE_ALSO = "forgeSeeAlso";
33
+ export declare const FORGE_ATTR_WHAT_WAS_TRIED = "forgeWhatWasTried";
34
+ export declare const FORGE_ATTR_WHY_IT_FAILED = "forgeWhyItFailed";
35
+ export declare const FORGE_ATTRS: readonly ["forgeConfidence", "forgeSource", "forgeCapturedAt", "forgeLastValidatedCommit", "forgePrimaryLocation", "forgeOccurrences", "forgeRationale", "forgeAlternatives", "forgeScope", "forgeStatement", "forgeEnforcement", "forgePatternDescription", "forgeExamples", "forgeCounterExamples", "forgeAppliesTo", "forgeTerm", "forgeSynonyms", "forgeDefinition", "forgeCodeAnchors", "forgeSeeAlso", "forgeWhatWasTried", "forgeWhyItFailed"];
36
+ export type ForgeAttr = (typeof FORGE_ATTRS)[number];
37
+ import { TypeRegistry } from "@metaobjectsdev/metadata";
38
+ /**
39
+ * Register Meta Forge's five descriptive top-level types into the given
40
+ * registry. Must be called AFTER `registerCoreTypes()`.
41
+ *
42
+ * Each type accepts `attr` children for expanded-form @forge* attributes.
43
+ * Loader's default permissive mode tolerates these new types as children
44
+ * of the metadata wrapper (unknowns are warned, not errored).
45
+ */
46
+ export declare function registerForgeTypes(registry: TypeRegistry): void;
47
+ //# sourceMappingURL=forge-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-types.d.ts","sourceRoot":"","sources":["../src/forge-types.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAChD,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,eAAO,MAAM,WAAW,yEAMd,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAMrD,eAAO,MAAM,uBAAuB,uCAAwC,CAAC;AAC7E,eAAO,MAAM,wBAAwB,2CAA4C,CAAC;AAClF,eAAO,MAAM,yBAAyB,mBAAoB,CAAC;AAC3D,eAAO,MAAM,uBAAuB,mBAAoB,CAAC;AACzD,eAAO,MAAM,sBAAsB,mBAAoB,CAAC;AAOxD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,oBAAoB,CAAC;AACxD,eAAO,MAAM,gCAAgC,6BAA6B,CAAC;AAG3E,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAGzD,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAG7C,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAGzD,eAAO,MAAM,8BAA8B,4BAA4B,CAAC;AACxE,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAGtD,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAGlD,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAC7D,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,eAAO,MAAM,WAAW,ubAuBd,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAMrD,OAAO,EAIL,YAAY,EAIb,MAAM,0BAA0B,CAAC;AA4BlC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAkB/D"}
@@ -0,0 +1,133 @@
1
+ // Meta Forge type + attribute name constants. Centralized for typo-safety
2
+ // per CLAUDE.md ("Named constants for metamodel strings — always") and so
3
+ // downstream readers (codegen prompts, MCP exposers) have one source of
4
+ // truth. See SP5 §4 for the design rationale.
5
+ // ---------------------------------------------------------------------------
6
+ // New top-level types registered by registerForgeTypes()
7
+ // ---------------------------------------------------------------------------
8
+ export const FORGE_TYPE_DECISION = "decision";
9
+ export const FORGE_TYPE_PRINCIPLE = "principle";
10
+ export const FORGE_TYPE_CONVENTION = "convention";
11
+ export const FORGE_TYPE_GLOSSARY = "glossary";
12
+ export const FORGE_TYPE_FAILURE = "failure";
13
+ export const FORGE_TYPES = [
14
+ FORGE_TYPE_DECISION,
15
+ FORGE_TYPE_PRINCIPLE,
16
+ FORGE_TYPE_CONVENTION,
17
+ FORGE_TYPE_GLOSSARY,
18
+ FORGE_TYPE_FAILURE,
19
+ ];
20
+ // ---------------------------------------------------------------------------
21
+ // Subtypes per type (open lists; "base" is always valid)
22
+ // ---------------------------------------------------------------------------
23
+ export const FORGE_DECISION_SUBTYPES = ["base", "global", "scoped"];
24
+ export const FORGE_PRINCIPLE_SUBTYPES = ["base", "advisory", "enforced"];
25
+ export const FORGE_CONVENTION_SUBTYPES = ["base"];
26
+ export const FORGE_GLOSSARY_SUBTYPES = ["base"];
27
+ export const FORGE_FAILURE_SUBTYPES = ["base"];
28
+ // ---------------------------------------------------------------------------
29
+ // @forge* attribute names (camelCase, no separator)
30
+ // ---------------------------------------------------------------------------
31
+ // Universal (any forge-related node)
32
+ export const FORGE_ATTR_CONFIDENCE = "forgeConfidence";
33
+ export const FORGE_ATTR_SOURCE = "forgeSource";
34
+ export const FORGE_ATTR_CAPTURED_AT = "forgeCapturedAt";
35
+ export const FORGE_ATTR_LAST_VALIDATED_COMMIT = "forgeLastValidatedCommit";
36
+ // Object/entity
37
+ export const FORGE_ATTR_PRIMARY_LOCATION = "forgePrimaryLocation";
38
+ export const FORGE_ATTR_OCCURRENCES = "forgeOccurrences";
39
+ // Decision
40
+ export const FORGE_ATTR_RATIONALE = "forgeRationale";
41
+ export const FORGE_ATTR_ALTERNATIVES = "forgeAlternatives";
42
+ export const FORGE_ATTR_SCOPE = "forgeScope";
43
+ // Principle
44
+ export const FORGE_ATTR_STATEMENT = "forgeStatement";
45
+ export const FORGE_ATTR_ENFORCEMENT = "forgeEnforcement";
46
+ // Convention
47
+ export const FORGE_ATTR_PATTERN_DESCRIPTION = "forgePatternDescription";
48
+ export const FORGE_ATTR_EXAMPLES = "forgeExamples";
49
+ export const FORGE_ATTR_COUNTER_EXAMPLES = "forgeCounterExamples";
50
+ export const FORGE_ATTR_APPLIES_TO = "forgeAppliesTo";
51
+ // Glossary
52
+ export const FORGE_ATTR_TERM = "forgeTerm";
53
+ export const FORGE_ATTR_SYNONYMS = "forgeSynonyms";
54
+ export const FORGE_ATTR_DEFINITION = "forgeDefinition";
55
+ export const FORGE_ATTR_CODE_ANCHORS = "forgeCodeAnchors";
56
+ export const FORGE_ATTR_SEE_ALSO = "forgeSeeAlso";
57
+ // Failure
58
+ export const FORGE_ATTR_WHAT_WAS_TRIED = "forgeWhatWasTried";
59
+ export const FORGE_ATTR_WHY_IT_FAILED = "forgeWhyItFailed";
60
+ export const FORGE_ATTRS = [
61
+ FORGE_ATTR_CONFIDENCE,
62
+ FORGE_ATTR_SOURCE,
63
+ FORGE_ATTR_CAPTURED_AT,
64
+ FORGE_ATTR_LAST_VALIDATED_COMMIT,
65
+ FORGE_ATTR_PRIMARY_LOCATION,
66
+ FORGE_ATTR_OCCURRENCES,
67
+ FORGE_ATTR_RATIONALE,
68
+ FORGE_ATTR_ALTERNATIVES,
69
+ FORGE_ATTR_SCOPE,
70
+ FORGE_ATTR_STATEMENT,
71
+ FORGE_ATTR_ENFORCEMENT,
72
+ FORGE_ATTR_PATTERN_DESCRIPTION,
73
+ FORGE_ATTR_EXAMPLES,
74
+ FORGE_ATTR_COUNTER_EXAMPLES,
75
+ FORGE_ATTR_APPLIES_TO,
76
+ FORGE_ATTR_TERM,
77
+ FORGE_ATTR_SYNONYMS,
78
+ FORGE_ATTR_DEFINITION,
79
+ FORGE_ATTR_CODE_ANCHORS,
80
+ FORGE_ATTR_SEE_ALSO,
81
+ FORGE_ATTR_WHAT_WAS_TRIED,
82
+ FORGE_ATTR_WHY_IT_FAILED,
83
+ ];
84
+ // ---------------------------------------------------------------------------
85
+ // registerForgeTypes
86
+ // ---------------------------------------------------------------------------
87
+ import { TypeId, TypeRegistry, MetaData, TYPE_ATTR, CHILD_RULE_WILDCARD, } from "@metaobjectsdev/metadata";
88
+ /** Minimal concrete MetaData subclass used for all forge descriptive nodes. */
89
+ class MetaForgeNode extends MetaData {
90
+ }
91
+ function wildcardOf(childType) {
92
+ return {
93
+ childType,
94
+ childSubType: CHILD_RULE_WILDCARD,
95
+ childName: CHILD_RULE_WILDCARD,
96
+ };
97
+ }
98
+ function def(type, subType, description, childRules) {
99
+ return {
100
+ typeId: new TypeId(type, subType),
101
+ description,
102
+ factory: (typeId, name) => new MetaForgeNode(typeId, name),
103
+ childRules,
104
+ attributes: [],
105
+ };
106
+ }
107
+ /**
108
+ * Register Meta Forge's five descriptive top-level types into the given
109
+ * registry. Must be called AFTER `registerCoreTypes()`.
110
+ *
111
+ * Each type accepts `attr` children for expanded-form @forge* attributes.
112
+ * Loader's default permissive mode tolerates these new types as children
113
+ * of the metadata wrapper (unknowns are warned, not errored).
114
+ */
115
+ export function registerForgeTypes(registry) {
116
+ const forgeChildRules = [wildcardOf(TYPE_ATTR)];
117
+ for (const subType of FORGE_DECISION_SUBTYPES) {
118
+ registry.register(def(FORGE_TYPE_DECISION, subType, `Forge decision (${subType})`, forgeChildRules));
119
+ }
120
+ for (const subType of FORGE_PRINCIPLE_SUBTYPES) {
121
+ registry.register(def(FORGE_TYPE_PRINCIPLE, subType, `Forge principle (${subType})`, forgeChildRules));
122
+ }
123
+ for (const subType of FORGE_CONVENTION_SUBTYPES) {
124
+ registry.register(def(FORGE_TYPE_CONVENTION, subType, `Forge convention (${subType})`, forgeChildRules));
125
+ }
126
+ for (const subType of FORGE_GLOSSARY_SUBTYPES) {
127
+ registry.register(def(FORGE_TYPE_GLOSSARY, subType, `Forge glossary entry (${subType})`, forgeChildRules));
128
+ }
129
+ for (const subType of FORGE_FAILURE_SUBTYPES) {
130
+ registry.register(def(FORGE_TYPE_FAILURE, subType, `Forge failure record (${subType})`, forgeChildRules));
131
+ }
132
+ }
133
+ //# sourceMappingURL=forge-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-types.js","sourceRoot":"","sources":["../src/forge-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export { RecordCore, RecordType, RecordSource } from "./records/core.js";
2
+ export { ConventionRecord } from "./records/convention.js";
3
+ export { DecisionRecord } from "./records/decision.js";
4
+ export { PrincipleRecord } from "./records/principle.js";
5
+ export { GlossaryRecord } from "./records/glossary.js";
6
+ export { FailureRecord } from "./records/failure.js";
7
+ export { AnyRecord } from "./records/any.js";
8
+ export { readRecord, recordExists, writeRecord, removeRecord, listRecords, promoteRecord, supersede, MetaForgeRecordNotFoundError, MetaForgeAlreadyPromotedError, MetaForgeRecordParseError, } from "./storage/index.js";
9
+ export type { ListOptions } from "./storage/index.js";
10
+ export { recordPath, resolveMetaRoot } from "./paths.js";
11
+ export { ConfigSchema, DEFAULT_CONFIG, loadConfig, saveConfig } from "./config.js";
12
+ export type { Config } from "./config.js";
13
+ export { FORGE_TYPE_DECISION, FORGE_TYPE_PRINCIPLE, FORGE_TYPE_CONVENTION, FORGE_TYPE_GLOSSARY, FORGE_TYPE_FAILURE, FORGE_TYPES, FORGE_DECISION_SUBTYPES, FORGE_PRINCIPLE_SUBTYPES, FORGE_CONVENTION_SUBTYPES, FORGE_GLOSSARY_SUBTYPES, FORGE_FAILURE_SUBTYPES, FORGE_ATTR_CONFIDENCE, FORGE_ATTR_SOURCE, FORGE_ATTR_CAPTURED_AT, FORGE_ATTR_LAST_VALIDATED_COMMIT, FORGE_ATTR_PRIMARY_LOCATION, FORGE_ATTR_OCCURRENCES, FORGE_ATTR_RATIONALE, FORGE_ATTR_ALTERNATIVES, FORGE_ATTR_SCOPE, FORGE_ATTR_STATEMENT, FORGE_ATTR_ENFORCEMENT, FORGE_ATTR_PATTERN_DESCRIPTION, FORGE_ATTR_EXAMPLES, FORGE_ATTR_COUNTER_EXAMPLES, FORGE_ATTR_APPLIES_TO, FORGE_ATTR_TERM, FORGE_ATTR_SYNONYMS, FORGE_ATTR_DEFINITION, FORGE_ATTR_CODE_ANCHORS, FORGE_ATTR_SEE_ALSO, FORGE_ATTR_WHAT_WAS_TRIED, FORGE_ATTR_WHY_IT_FAILED, FORGE_ATTRS, registerForgeTypes, } from "./forge-types.js";
14
+ export type { ForgeType, ForgeAttr } from "./forge-types.js";
15
+ export { loadMemory, DEFAULT_METADATA_DIR, DEFAULT_METAOBJECTS_DIR } from "./memory.js";
16
+ export { discoverWorkspace, resolveExtendsOrder, packageLabel } from "./workspace.js";
17
+ export type { Workspace, WorkspacePackage } from "./workspace.js";
18
+ export { PackageManifestSchema, readPackageManifest, resolveMetaobjectsPackage, PACKAGE_MANIFEST_FILE, } from "./package.js";
19
+ export type { PackageManifest } from "./package.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,SAAS,EACT,4BAA4B,EAC5B,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnF,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C,OAAO,EAEL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EAEX,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EAEtB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,EAChC,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,WAAW,EAEX,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGxF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtF,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOlE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ // Records
2
+ export { RecordCore, RecordType, RecordSource } from "./records/core.js";
3
+ export { ConventionRecord } from "./records/convention.js";
4
+ export { DecisionRecord } from "./records/decision.js";
5
+ export { PrincipleRecord } from "./records/principle.js";
6
+ export { GlossaryRecord } from "./records/glossary.js";
7
+ export { FailureRecord } from "./records/failure.js";
8
+ export { AnyRecord } from "./records/any.js";
9
+ // Storage
10
+ export { readRecord, recordExists, writeRecord, removeRecord, listRecords, promoteRecord, supersede, MetaForgeRecordNotFoundError, MetaForgeAlreadyPromotedError, MetaForgeRecordParseError, } from "./storage/index.js";
11
+ // Paths
12
+ export { recordPath, resolveMetaRoot } from "./paths.js";
13
+ // Config
14
+ export { ConfigSchema, DEFAULT_CONFIG, loadConfig, saveConfig } from "./config.js";
15
+ // Meta Forge metadata types + attribute name constants (registered into a
16
+ // TypeRegistry to let Loader parse decision/principle/etc. children + the
17
+ // @forge* attribute namespace).
18
+ export {
19
+ // Type names
20
+ FORGE_TYPE_DECISION, FORGE_TYPE_PRINCIPLE, FORGE_TYPE_CONVENTION, FORGE_TYPE_GLOSSARY, FORGE_TYPE_FAILURE, FORGE_TYPES,
21
+ // Subtypes
22
+ FORGE_DECISION_SUBTYPES, FORGE_PRINCIPLE_SUBTYPES, FORGE_CONVENTION_SUBTYPES, FORGE_GLOSSARY_SUBTYPES, FORGE_FAILURE_SUBTYPES,
23
+ // Attribute names
24
+ FORGE_ATTR_CONFIDENCE, FORGE_ATTR_SOURCE, FORGE_ATTR_CAPTURED_AT, FORGE_ATTR_LAST_VALIDATED_COMMIT, FORGE_ATTR_PRIMARY_LOCATION, FORGE_ATTR_OCCURRENCES, FORGE_ATTR_RATIONALE, FORGE_ATTR_ALTERNATIVES, FORGE_ATTR_SCOPE, FORGE_ATTR_STATEMENT, FORGE_ATTR_ENFORCEMENT, FORGE_ATTR_PATTERN_DESCRIPTION, FORGE_ATTR_EXAMPLES, FORGE_ATTR_COUNTER_EXAMPLES, FORGE_ATTR_APPLIES_TO, FORGE_ATTR_TERM, FORGE_ATTR_SYNONYMS, FORGE_ATTR_DEFINITION, FORGE_ATTR_CODE_ANCHORS, FORGE_ATTR_SEE_ALSO, FORGE_ATTR_WHAT_WAS_TRIED, FORGE_ATTR_WHY_IT_FAILED, FORGE_ATTRS,
25
+ // Registration helper
26
+ registerForgeTypes, } from "./forge-types.js";
27
+ // Memory loader — read metaobjects/ into a MetaData tree
28
+ // (workspace-aware: walks extends: deps via pnpm-workspace.yaml or
29
+ // package.json workspaces field if present)
30
+ export { loadMemory, DEFAULT_METADATA_DIR, DEFAULT_METAOBJECTS_DIR } from "./memory.js";
31
+ // Workspace discovery — finds peer metadata packages in a monorepo
32
+ export { discoverWorkspace, resolveExtendsOrder, packageLabel } from "./workspace.js";
33
+ // Package manifest — the v0.3 package.meta.json model. Three-field manifest
34
+ // (name, version, extends) that defines a metadata package's identity and
35
+ // upstream dependencies. The package's metadata tree IS its public API;
36
+ // there is no exports field. See docs/strategy/2026-05-12-v0.3-ai-first-
37
+ // metadata-loading.md.
38
+ export { PackageManifestSchema, readPackageManifest, resolveMetaobjectsPackage, PACKAGE_MANIFEST_FILE, } from "./package.js";
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,UAAU;AACV,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,SAAS,EACT,4BAA4B,EAC5B,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzD,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGnF,0EAA0E;AAC1E,0EAA0E;AAC1E,gCAAgC;AAChC,OAAO;AACL,aAAa;AACb,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW;AACX,WAAW;AACX,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB;AACtB,kBAAkB;AAClB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,EAChC,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,WAAW;AACX,sBAAsB;AACtB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,yDAAyD;AACzD,mEAAmE;AACnE,6CAA6C;AAC7C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAExF,mEAAmE;AACnE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGtF,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,uBAAuB;AACvB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type MetaRoot } from "@metaobjectsdev/metadata";
2
+ /**
3
+ * Default directory name (relative to project root) where metadata JSON files
4
+ * are scanned. Scaffold via `meta init`; the directory is committed to git.
5
+ */
6
+ export declare const DEFAULT_METADATA_DIR = "metaobjects";
7
+ /**
8
+ * Default directory name (relative to project root) for MetaObjects' own
9
+ * runtime state: config.json, .gen-state/, package.meta.json, agent docs.
10
+ * Scaffold via `meta init`; most contents are committed to git.
11
+ */
12
+ export declare const DEFAULT_METAOBJECTS_DIR = ".metaobjects";
13
+ /**
14
+ * Load all metadata files from `<repoRoot>/metaobjects/` into a single
15
+ * MetaData. If `<repoRoot>/.meta/package.meta.json` declares `extends:` deps
16
+ * and a workspace can be discovered (pnpm-workspace.yaml or package.json
17
+ * workspaces), peer packages are loaded too in topological dep-first order.
18
+ *
19
+ * Excludes `_pending/`. Registers metaobjects core types plus Meta Forge's
20
+ * descriptive top-level types (decision, principle, etc.) so mixed content
21
+ * parses without warnings.
22
+ *
23
+ * Throws if `metaobjects/` doesn't exist (callers should run `meta init`).
24
+ *
25
+ * @param repoRoot The project's working-directory root (e.g. process.cwd()).
26
+ * `loadMemory` resolves `metaobjects/` and (if workspace-aware) the
27
+ * transitive `extends:` graph automatically.
28
+ */
29
+ export declare function loadMemory(repoRoot: string): Promise<MetaRoot>;
30
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAIlC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmBpE"}
package/dist/memory.js ADDED
@@ -0,0 +1,105 @@
1
+ import { join } from "node:path";
2
+ import { readdir, stat } from "node:fs/promises";
3
+ import { FileMetaDataLoader } from "@metaobjectsdev/metadata/core";
4
+ import { TypeRegistry, registerCoreTypes, } from "@metaobjectsdev/metadata";
5
+ import { registerForgeTypes } from "./forge-types.js";
6
+ import { discoverWorkspace, resolveExtendsOrder } from "./workspace.js";
7
+ /**
8
+ * Default directory name (relative to project root) where metadata JSON files
9
+ * are scanned. Scaffold via `meta init`; the directory is committed to git.
10
+ */
11
+ export const DEFAULT_METADATA_DIR = "metaobjects";
12
+ /**
13
+ * Default directory name (relative to project root) for MetaObjects' own
14
+ * runtime state: config.json, .gen-state/, package.meta.json, agent docs.
15
+ * Scaffold via `meta init`; most contents are committed to git.
16
+ */
17
+ export const DEFAULT_METAOBJECTS_DIR = ".metaobjects";
18
+ /**
19
+ * Load all metadata files from `<repoRoot>/metaobjects/` into a single
20
+ * MetaData. If `<repoRoot>/.meta/package.meta.json` declares `extends:` deps
21
+ * and a workspace can be discovered (pnpm-workspace.yaml or package.json
22
+ * workspaces), peer packages are loaded too in topological dep-first order.
23
+ *
24
+ * Excludes `_pending/`. Registers metaobjects core types plus Meta Forge's
25
+ * descriptive top-level types (decision, principle, etc.) so mixed content
26
+ * parses without warnings.
27
+ *
28
+ * Throws if `metaobjects/` doesn't exist (callers should run `meta init`).
29
+ *
30
+ * @param repoRoot The project's working-directory root (e.g. process.cwd()).
31
+ * `loadMemory` resolves `metaobjects/` and (if workspace-aware) the
32
+ * transitive `extends:` graph automatically.
33
+ */
34
+ export async function loadMemory(repoRoot) {
35
+ const registry = new TypeRegistry();
36
+ registerCoreTypes(registry);
37
+ registerForgeTypes(registry);
38
+ // Collect all metadata file paths to load. Order matters for the parser's
39
+ // deferred-resolution pass (it parses in array order, then resolves supers
40
+ // against the merged tree afterwards) — dep packages first, current last.
41
+ const paths = await collectMetadataPaths(repoRoot);
42
+ const loader = new FileMetaDataLoader({ registry });
43
+ const result = await loader.loadFiles(paths);
44
+ if (result.errors.length > 0) {
45
+ const first = result.errors[0];
46
+ throw first;
47
+ }
48
+ return result.root;
49
+ }
50
+ // Dep packages' metaobjects/ files first (topological order), then current.
51
+ async function collectMetadataPaths(repoRoot) {
52
+ const currentMetaDir = join(repoRoot, ".meta");
53
+ const ws = await discoverWorkspace(repoRoot);
54
+ // Workspace path: walk extends, load dep metaobjects/ dirs first
55
+ if (ws !== undefined) {
56
+ const currentPkg = ws.packages.find((p) => p.metaDir === currentMetaDir);
57
+ if (currentPkg !== undefined && currentPkg.manifest.extends.length > 0) {
58
+ const ordered = resolveExtendsOrder(ws, currentMetaDir);
59
+ const paths = [];
60
+ for (const pkg of ordered) {
61
+ // Each workspace package's metadata lives alongside its .meta/ dir
62
+ const pkgRoot = join(pkg.metaDir, "..");
63
+ paths.push(...(await listJsonFiles(join(pkgRoot, DEFAULT_METADATA_DIR))));
64
+ }
65
+ return paths;
66
+ }
67
+ }
68
+ // Single-package path: scan metaobjects/ at the project root
69
+ return listJsonFiles(join(repoRoot, DEFAULT_METADATA_DIR));
70
+ }
71
+ /**
72
+ * Recursively list *.json files under a directory, excluding _pending/ at
73
+ * any level. Subdirectories (e.g. projections/) are walked depth-first.
74
+ * Files within a directory are sorted alphabetically for deterministic load
75
+ * order; subdirectories are visited after files at the same level.
76
+ */
77
+ async function listJsonFiles(dir) {
78
+ let entries;
79
+ try {
80
+ entries = await readdir(dir);
81
+ }
82
+ catch (err) {
83
+ throw new Error(`loadMemory: cannot read ${dir}: ${err.message}`);
84
+ }
85
+ const paths = [];
86
+ const subdirs = [];
87
+ for (const entry of entries) {
88
+ if (entry === "_pending")
89
+ continue;
90
+ const full = join(dir, entry);
91
+ const s = await stat(full);
92
+ if (s.isDirectory()) {
93
+ subdirs.push(full);
94
+ }
95
+ else if (s.isFile() && entry.endsWith(".json")) {
96
+ paths.push(full);
97
+ }
98
+ }
99
+ // Recurse into subdirectories after collecting files at this level
100
+ for (const sub of subdirs.sort()) {
101
+ paths.push(...(await listJsonFiles(sub)));
102
+ }
103
+ return paths;
104
+ }
105
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}