@maadb/core 0.0.1 → 0.7.10-rc.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.
- package/LICENSE +21 -0
- package/README.md +371 -3
- package/dist/architect.d.ts +2 -0
- package/dist/architect.d.ts.map +1 -0
- package/dist/architect.js +273 -0
- package/dist/architect.js.map +1 -0
- package/dist/auth/resolve.d.ts +36 -0
- package/dist/auth/resolve.d.ts.map +1 -0
- package/dist/auth/resolve.js +77 -0
- package/dist/auth/resolve.js.map +1 -0
- package/dist/auth/token-store.d.ts +82 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +464 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/types.d.ts +75 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +15 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/backend/adapter.d.ts +57 -0
- package/dist/backend/adapter.d.ts.map +1 -0
- package/dist/backend/adapter.js +6 -0
- package/dist/backend/adapter.js.map +1 -0
- package/dist/backend/index.d.ts +3 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +2 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/sqlite/index.d.ts +63 -0
- package/dist/backend/sqlite/index.d.ts.map +1 -0
- package/dist/backend/sqlite/index.js +521 -0
- package/dist/backend/sqlite/index.js.map +1 -0
- package/dist/backend/sqlite/schema.d.ts +2 -0
- package/dist/backend/sqlite/schema.d.ts.map +1 -0
- package/dist/backend/sqlite/schema.js +88 -0
- package/dist/backend/sqlite/schema.js.map +1 -0
- package/dist/claude-md.d.ts +2 -0
- package/dist/claude-md.d.ts.map +1 -0
- package/dist/claude-md.js +97 -0
- package/dist/claude-md.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +4 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +39 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +8 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +242 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/discover.d.ts +5 -0
- package/dist/cli/commands/discover.d.ts.map +1 -0
- package/dist/cli/commands/discover.js +48 -0
- package/dist/cli/commands/discover.js.map +1 -0
- package/dist/cli/commands/maintain.d.ts +6 -0
- package/dist/cli/commands/maintain.d.ts.map +1 -0
- package/dist/cli/commands/maintain.js +168 -0
- package/dist/cli/commands/maintain.js.map +1 -0
- package/dist/cli/commands/read.d.ts +7 -0
- package/dist/cli/commands/read.d.ts.map +1 -0
- package/dist/cli/commands/read.js +139 -0
- package/dist/cli/commands/read.js.map +1 -0
- package/dist/cli/commands/write.d.ts +4 -0
- package/dist/cli/commands/write.d.ts.map +1 -0
- package/dist/cli/commands/write.js +99 -0
- package/dist/cli/commands/write.js.map +1 -0
- package/dist/cli/helpers.d.ts +8 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +17 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +296 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -0
- package/dist/engine/audit.d.ts +15 -0
- package/dist/engine/audit.d.ts.map +1 -0
- package/dist/engine/audit.js +42 -0
- package/dist/engine/audit.js.map +1 -0
- package/dist/engine/backup.d.ts +9 -0
- package/dist/engine/backup.d.ts.map +1 -0
- package/dist/engine/backup.js +100 -0
- package/dist/engine/backup.js.map +1 -0
- package/dist/engine/composites.d.ts +6 -0
- package/dist/engine/composites.d.ts.map +1 -0
- package/dist/engine/composites.js +102 -0
- package/dist/engine/composites.js.map +1 -0
- package/dist/engine/context.d.ts +47 -0
- package/dist/engine/context.d.ts.map +1 -0
- package/dist/engine/context.js +55 -0
- package/dist/engine/context.js.map +1 -0
- package/dist/engine/docid-safe.d.ts +8 -0
- package/dist/engine/docid-safe.d.ts.map +1 -0
- package/dist/engine/docid-safe.js +0 -0
- package/dist/engine/docid-safe.js.map +1 -0
- package/dist/engine/helpers.d.ts +8 -0
- package/dist/engine/helpers.d.ts.map +1 -0
- package/dist/engine/helpers.js +102 -0
- package/dist/engine/helpers.js.map +1 -0
- package/dist/engine/index.d.ts +215 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +494 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/indexing.d.ts +14 -0
- package/dist/engine/indexing.d.ts.map +1 -0
- package/dist/engine/indexing.js +225 -0
- package/dist/engine/indexing.js.map +1 -0
- package/dist/engine/journal.d.ts +32 -0
- package/dist/engine/journal.d.ts.map +1 -0
- package/dist/engine/journal.js +111 -0
- package/dist/engine/journal.js.map +1 -0
- package/dist/engine/logger.d.ts +19 -0
- package/dist/engine/logger.d.ts.map +1 -0
- package/dist/engine/logger.js +40 -0
- package/dist/engine/logger.js.map +1 -0
- package/dist/engine/maintenance.d.ts +15 -0
- package/dist/engine/maintenance.d.ts.map +1 -0
- package/dist/engine/maintenance.js +87 -0
- package/dist/engine/maintenance.js.map +1 -0
- package/dist/engine/mutex.d.ts +24 -0
- package/dist/engine/mutex.d.ts.map +1 -0
- package/dist/engine/mutex.js +50 -0
- package/dist/engine/mutex.js.map +1 -0
- package/dist/engine/pathguard.d.ts +16 -0
- package/dist/engine/pathguard.d.ts.map +1 -0
- package/dist/engine/pathguard.js +41 -0
- package/dist/engine/pathguard.js.map +1 -0
- package/dist/engine/reads.d.ts +25 -0
- package/dist/engine/reads.d.ts.map +1 -0
- package/dist/engine/reads.js +904 -0
- package/dist/engine/reads.js.map +1 -0
- package/dist/engine/types.d.ts +396 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +5 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/engine/writes.d.ts +10 -0
- package/dist/engine/writes.d.ts.map +1 -0
- package/dist/engine/writes.js +606 -0
- package/dist/engine/writes.js.map +1 -0
- package/dist/engine.d.ts +3 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +6 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -0
- package/dist/extractor/fields.d.ts +3 -0
- package/dist/extractor/fields.d.ts.map +1 -0
- package/dist/extractor/fields.js +58 -0
- package/dist/extractor/fields.js.map +1 -0
- package/dist/extractor/index.d.ts +7 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +22 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/normalizers.d.ts +22 -0
- package/dist/extractor/normalizers.d.ts.map +1 -0
- package/dist/extractor/normalizers.js +250 -0
- package/dist/extractor/normalizers.js.map +1 -0
- package/dist/extractor/objects.d.ts +3 -0
- package/dist/extractor/objects.d.ts.map +1 -0
- package/dist/extractor/objects.js +33 -0
- package/dist/extractor/objects.js.map +1 -0
- package/dist/extractor/relationships.d.ts +3 -0
- package/dist/extractor/relationships.d.ts.map +1 -0
- package/dist/extractor/relationships.js +58 -0
- package/dist/extractor/relationships.js.map +1 -0
- package/dist/git/commit.d.ts +63 -0
- package/dist/git/commit.d.ts.map +1 -0
- package/dist/git/commit.js +161 -0
- package/dist/git/commit.js.map +1 -0
- package/dist/git/diff.d.ts +4 -0
- package/dist/git/diff.d.ts.map +1 -0
- package/dist/git/diff.js +56 -0
- package/dist/git/diff.js.map +1 -0
- package/dist/git/index.d.ts +63 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +151 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/log.d.ts +13 -0
- package/dist/git/log.d.ts.map +1 -0
- package/dist/git/log.js +116 -0
- package/dist/git/log.js.map +1 -0
- package/dist/git/snapshot.d.ts +4 -0
- package/dist/git/snapshot.d.ts.map +1 -0
- package/dist/git/snapshot.js +65 -0
- package/dist/git/snapshot.js.map +1 -0
- package/dist/instance/config.d.ts +19 -0
- package/dist/instance/config.d.ts.map +1 -0
- package/dist/instance/config.js +107 -0
- package/dist/instance/config.js.map +1 -0
- package/dist/instance/pool.d.ts +138 -0
- package/dist/instance/pool.d.ts.map +1 -0
- package/dist/instance/pool.js +335 -0
- package/dist/instance/pool.js.map +1 -0
- package/dist/instance/session.d.ts +140 -0
- package/dist/instance/session.d.ts.map +1 -0
- package/dist/instance/session.js +267 -0
- package/dist/instance/session.js.map +1 -0
- package/dist/logging.d.ts +108 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +120 -0
- package/dist/logging.js.map +1 -0
- package/dist/maad-md.d.ts +11 -0
- package/dist/maad-md.d.ts.map +1 -0
- package/dist/maad-md.js +252 -0
- package/dist/maad-md.js.map +1 -0
- package/dist/mcp/bulk-cap.d.ts +10 -0
- package/dist/mcp/bulk-cap.d.ts.map +1 -0
- package/dist/mcp/bulk-cap.js +37 -0
- package/dist/mcp/bulk-cap.js.map +1 -0
- package/dist/mcp/config.d.ts +18 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +20 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/ctx.d.ts +17 -0
- package/dist/mcp/ctx.d.ts.map +1 -0
- package/dist/mcp/ctx.js +7 -0
- package/dist/mcp/ctx.js.map +1 -0
- package/dist/mcp/guardrails.d.ts +42 -0
- package/dist/mcp/guardrails.d.ts.map +1 -0
- package/dist/mcp/guardrails.js +58 -0
- package/dist/mcp/guardrails.js.map +1 -0
- package/dist/mcp/idempotency.d.ts +69 -0
- package/dist/mcp/idempotency.d.ts.map +1 -0
- package/dist/mcp/idempotency.js +168 -0
- package/dist/mcp/idempotency.js.map +1 -0
- package/dist/mcp/instance-reload.d.ts +23 -0
- package/dist/mcp/instance-reload.d.ts.map +1 -0
- package/dist/mcp/instance-reload.js +126 -0
- package/dist/mcp/instance-reload.js.map +1 -0
- package/dist/mcp/kinds.d.ts +22 -0
- package/dist/mcp/kinds.d.ts.map +1 -0
- package/dist/mcp/kinds.js +112 -0
- package/dist/mcp/kinds.js.map +1 -0
- package/dist/mcp/lifecycle.d.ts +8 -0
- package/dist/mcp/lifecycle.d.ts.map +1 -0
- package/dist/mcp/lifecycle.js +65 -0
- package/dist/mcp/lifecycle.js.map +1 -0
- package/dist/mcp/memory-pressure.d.ts +37 -0
- package/dist/mcp/memory-pressure.d.ts.map +1 -0
- package/dist/mcp/memory-pressure.js +179 -0
- package/dist/mcp/memory-pressure.js.map +1 -0
- package/dist/mcp/notifications.d.ts +87 -0
- package/dist/mcp/notifications.d.ts.map +1 -0
- package/dist/mcp/notifications.js +154 -0
- package/dist/mcp/notifications.js.map +1 -0
- package/dist/mcp/query-depth.d.ts +28 -0
- package/dist/mcp/query-depth.d.ts.map +1 -0
- package/dist/mcp/query-depth.js +43 -0
- package/dist/mcp/query-depth.js.map +1 -0
- package/dist/mcp/rate-limit.d.ts +60 -0
- package/dist/mcp/rate-limit.d.ts.map +1 -0
- package/dist/mcp/rate-limit.js +203 -0
- package/dist/mcp/rate-limit.js.map +1 -0
- package/dist/mcp/reload-signal.d.ts +13 -0
- package/dist/mcp/reload-signal.d.ts.map +1 -0
- package/dist/mcp/reload-signal.js +68 -0
- package/dist/mcp/reload-signal.js.map +1 -0
- package/dist/mcp/response.d.ts +109 -0
- package/dist/mcp/response.d.ts.map +1 -0
- package/dist/mcp/response.js +132 -0
- package/dist/mcp/response.js.map +1 -0
- package/dist/mcp/roles.d.ts +7 -0
- package/dist/mcp/roles.d.ts.map +1 -0
- package/dist/mcp/roles.js +57 -0
- package/dist/mcp/roles.js.map +1 -0
- package/dist/mcp/server.d.ts +33 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +252 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/shutdown.d.ts +32 -0
- package/dist/mcp/shutdown.d.ts.map +1 -0
- package/dist/mcp/shutdown.js +130 -0
- package/dist/mcp/shutdown.js.map +1 -0
- package/dist/mcp/tools/audit.d.ts +4 -0
- package/dist/mcp/tools/audit.d.ts.map +1 -0
- package/dist/mcp/tools/audit.js +45 -0
- package/dist/mcp/tools/audit.js.map +1 -0
- package/dist/mcp/tools/auth.d.ts +4 -0
- package/dist/mcp/tools/auth.d.ts.map +1 -0
- package/dist/mcp/tools/auth.js +181 -0
- package/dist/mcp/tools/auth.js.map +1 -0
- package/dist/mcp/tools/backup.d.ts +4 -0
- package/dist/mcp/tools/backup.d.ts.map +1 -0
- package/dist/mcp/tools/backup.js +52 -0
- package/dist/mcp/tools/backup.js.map +1 -0
- package/dist/mcp/tools/discover.d.ts +4 -0
- package/dist/mcp/tools/discover.d.ts.map +1 -0
- package/dist/mcp/tools/discover.js +83 -0
- package/dist/mcp/tools/discover.js.map +1 -0
- package/dist/mcp/tools/instance.d.ts +15 -0
- package/dist/mcp/tools/instance.d.ts.map +1 -0
- package/dist/mcp/tools/instance.js +207 -0
- package/dist/mcp/tools/instance.js.map +1 -0
- package/dist/mcp/tools/maintain.d.ts +4 -0
- package/dist/mcp/tools/maintain.d.ts.map +1 -0
- package/dist/mcp/tools/maintain.js +123 -0
- package/dist/mcp/tools/maintain.js.map +1 -0
- package/dist/mcp/tools/read.d.ts +4 -0
- package/dist/mcp/tools/read.d.ts.map +1 -0
- package/dist/mcp/tools/read.js +304 -0
- package/dist/mcp/tools/read.js.map +1 -0
- package/dist/mcp/tools/write.d.ts +4 -0
- package/dist/mcp/tools/write.d.ts.map +1 -0
- package/dist/mcp/tools/write.js +342 -0
- package/dist/mcp/tools/write.js.map +1 -0
- package/dist/mcp/transport/auth.d.ts +41 -0
- package/dist/mcp/transport/auth.d.ts.map +1 -0
- package/dist/mcp/transport/auth.js +115 -0
- package/dist/mcp/transport/auth.js.map +1 -0
- package/dist/mcp/transport/http.d.ts +62 -0
- package/dist/mcp/transport/http.d.ts.map +1 -0
- package/dist/mcp/transport/http.js +357 -0
- package/dist/mcp/transport/http.js.map +1 -0
- package/dist/mcp/transport/pin.d.ts +15 -0
- package/dist/mcp/transport/pin.d.ts.map +1 -0
- package/dist/mcp/transport/pin.js +71 -0
- package/dist/mcp/transport/pin.js.map +1 -0
- package/dist/mcp/transport/telemetry.d.ts +79 -0
- package/dist/mcp/transport/telemetry.d.ts.map +1 -0
- package/dist/mcp/transport/telemetry.js +97 -0
- package/dist/mcp/transport/telemetry.js.map +1 -0
- package/dist/mcp/with-session.d.ts +26 -0
- package/dist/mcp/with-session.d.ts.map +1 -0
- package/dist/mcp/with-session.js +275 -0
- package/dist/mcp/with-session.js.map +1 -0
- package/dist/parser/annotations.d.ts +3 -0
- package/dist/parser/annotations.d.ts.map +1 -0
- package/dist/parser/annotations.js +41 -0
- package/dist/parser/annotations.js.map +1 -0
- package/dist/parser/blocks.d.ts +3 -0
- package/dist/parser/blocks.d.ts.map +1 -0
- package/dist/parser/blocks.js +101 -0
- package/dist/parser/blocks.js.map +1 -0
- package/dist/parser/frontmatter.d.ts +9 -0
- package/dist/parser/frontmatter.d.ts.map +1 -0
- package/dist/parser/frontmatter.js +33 -0
- package/dist/parser/frontmatter.js.map +1 -0
- package/dist/parser/index.d.ts +11 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +54 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/matter.d.ts +3 -0
- package/dist/parser/matter.d.ts.map +1 -0
- package/dist/parser/matter.js +32 -0
- package/dist/parser/matter.js.map +1 -0
- package/dist/parser/tags.d.ts +3 -0
- package/dist/parser/tags.d.ts.map +1 -0
- package/dist/parser/tags.js +32 -0
- package/dist/parser/tags.js.map +1 -0
- package/dist/parser/verbatim.d.ts +4 -0
- package/dist/parser/verbatim.d.ts.map +1 -0
- package/dist/parser/verbatim.js +121 -0
- package/dist/parser/verbatim.js.map +1 -0
- package/dist/parser/yaml-profile.d.ts +4 -0
- package/dist/parser/yaml-profile.d.ts.map +1 -0
- package/dist/parser/yaml-profile.js +73 -0
- package/dist/parser/yaml-profile.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/loader.d.ts +4 -0
- package/dist/registry/loader.d.ts.map +1 -0
- package/dist/registry/loader.js +147 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/types.d.ts +2 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +5 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/scanner.d.ts +57 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +223 -0
- package/dist/scanner.js.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +3 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/loader.d.ts +4 -0
- package/dist/schema/loader.d.ts.map +1 -0
- package/dist/schema/loader.js +303 -0
- package/dist/schema/loader.js.map +1 -0
- package/dist/schema/precision.d.ts +6 -0
- package/dist/schema/precision.d.ts.map +1 -0
- package/dist/schema/precision.js +59 -0
- package/dist/schema/precision.js.map +1 -0
- package/dist/schema/validator.d.ts +21 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +200 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-md.d.ts +8 -0
- package/dist/schema-md.d.ts.map +1 -0
- package/dist/schema-md.js +98 -0
- package/dist/schema-md.js.map +1 -0
- package/dist/skill-files.d.ts +3 -0
- package/dist/skill-files.d.ts.map +1 -0
- package/dist/skill-files.js +362 -0
- package/dist/skill-files.js.map +1 -0
- package/dist/skills-scaffold.d.ts +10 -0
- package/dist/skills-scaffold.d.ts.map +1 -0
- package/dist/skills-scaffold.js +52 -0
- package/dist/skills-scaffold.js.map +1 -0
- package/dist/types.d.ts +309 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +111 -0
- package/dist/types.js.map +1 -0
- package/dist/writer/index.d.ts +7 -0
- package/dist/writer/index.d.ts.map +1 -0
- package/dist/writer/index.js +32 -0
- package/dist/writer/index.js.map +1 -0
- package/dist/writer/serializer.d.ts +4 -0
- package/dist/writer/serializer.d.ts.map +1 -0
- package/dist/writer/serializer.js +103 -0
- package/dist/writer/serializer.js.map +1 -0
- package/dist/writer/template.d.ts +3 -0
- package/dist/writer/template.d.ts.map +1 -0
- package/dist/writer/template.js +27 -0
- package/dist/writer/template.js.map +1 -0
- package/package.json +59 -7
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Skill Files — detailed workflow guides generated on init
|
|
3
|
+
// Loaded by the LLM when performing specific tasks.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function generateSchemaGuide() {
|
|
6
|
+
return `# Schema Guide
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Every MAAD record type needs two things:
|
|
11
|
+
1. A type entry in \`_registry/object_types.yaml\`
|
|
12
|
+
2. A schema file in \`_schema/<type>.v<version>.yaml\`
|
|
13
|
+
|
|
14
|
+
## Master vs Transaction Records
|
|
15
|
+
|
|
16
|
+
Before designing schemas, classify each type:
|
|
17
|
+
|
|
18
|
+
| Pattern | Description | File strategy | Examples |
|
|
19
|
+
|---------|-------------|---------------|----------|
|
|
20
|
+
| **Master** | Created once, updated occasionally. Low volume. Standalone identity. | One file per record | Clients, contacts, cases, products, accounts |
|
|
21
|
+
| **Transaction** | Created constantly, rarely updated. High volume. Belongs to a parent. | Append blocks to parent file | Notes, logs, events, audit entries, messages |
|
|
22
|
+
|
|
23
|
+
**Why this matters:** 100 sales agents x 10 notes/day x 365 days = 365,000 files if each note is a file. That kills the file system, git, and reindex. Instead, group transaction records into one file per parent — notes for client X go in one file, appended as headed blocks.
|
|
24
|
+
|
|
25
|
+
### Master record example (one file per record)
|
|
26
|
+
\`\`\`
|
|
27
|
+
clients/
|
|
28
|
+
cli-001.md ← Apex Industrial Supply Co.
|
|
29
|
+
cli-002.md ← BlueLine Logistics LLC
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
### Transaction record example (append to parent file)
|
|
33
|
+
\`\`\`
|
|
34
|
+
case-notes/
|
|
35
|
+
notes-cli-001.md ← all notes for client 001 (appended over time)
|
|
36
|
+
notes-cli-002.md ← all notes for client 002
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
Each note is a headed block inside the file:
|
|
40
|
+
\`\`\`markdown
|
|
41
|
+
## 2024-03-05 — Mediation Session {#note-010}
|
|
42
|
+
|
|
43
|
+
Day-long mediation with Judge Vasquez. No resolution. Opposing at $950K.
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
The engine indexes each block with line pointers. Individual notes are addressable via \`get warm <doc_id> <block_id>\`.
|
|
47
|
+
|
|
48
|
+
### Decision rule
|
|
49
|
+
|
|
50
|
+
Ask: **Will this type generate more than 1,000 records per year?**
|
|
51
|
+
- No → Master pattern (one file per record, use \`maad_create\`)
|
|
52
|
+
- Yes → Transaction pattern (append to parent file, use \`maad_update --append\`)
|
|
53
|
+
|
|
54
|
+
## Registry entry
|
|
55
|
+
|
|
56
|
+
\`\`\`yaml
|
|
57
|
+
types:
|
|
58
|
+
client:
|
|
59
|
+
path: clients/ # directory for this type's records
|
|
60
|
+
id_prefix: cli # MUST be 2-5 lowercase alphanumeric (e.g. cli, usr, cas, note, te)
|
|
61
|
+
schema: client.v1 # schema file reference
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
**id_prefix rules:** 2-5 lowercase letters/numbers only. No uppercase, no single characters, no symbols. Examples: \`cli\`, \`usr\`, \`cas\`, \`note\`, \`te\`. The engine rejects anything else.
|
|
65
|
+
|
|
66
|
+
## Schema file
|
|
67
|
+
|
|
68
|
+
\`\`\`yaml
|
|
69
|
+
# _schema/client.v1.yaml
|
|
70
|
+
type: client
|
|
71
|
+
required:
|
|
72
|
+
- doc_id
|
|
73
|
+
- name
|
|
74
|
+
- status
|
|
75
|
+
fields:
|
|
76
|
+
name:
|
|
77
|
+
type: string
|
|
78
|
+
index: true
|
|
79
|
+
status:
|
|
80
|
+
type: enum
|
|
81
|
+
index: true
|
|
82
|
+
values: [active, inactive, prospect]
|
|
83
|
+
industry:
|
|
84
|
+
type: string
|
|
85
|
+
index: true
|
|
86
|
+
primary_contact:
|
|
87
|
+
type: ref
|
|
88
|
+
index: true
|
|
89
|
+
target: contact
|
|
90
|
+
email:
|
|
91
|
+
type: string
|
|
92
|
+
index: true
|
|
93
|
+
phone:
|
|
94
|
+
type: string
|
|
95
|
+
index: false
|
|
96
|
+
since:
|
|
97
|
+
type: date
|
|
98
|
+
index: true
|
|
99
|
+
tags:
|
|
100
|
+
type: list
|
|
101
|
+
index: false
|
|
102
|
+
itemType: string
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
## Field types
|
|
106
|
+
|
|
107
|
+
| Type | Description | Index behavior |
|
|
108
|
+
|------|-------------|---------------|
|
|
109
|
+
| \`string\` | Plain text | Exact match, contains |
|
|
110
|
+
| \`number\` | Numeric value | Range queries (gt, lt, gte, lte) |
|
|
111
|
+
| \`date\` | ISO date or datetime (YYYY-MM-DD, or full ISO 8601) | Lexicographic range |
|
|
112
|
+
| \`enum\` | Constrained values | Exact match. Requires \`values\` list. |
|
|
113
|
+
| \`ref\` | Reference to another record | Exact match. Requires \`target\` type. Creates relationship edges. |
|
|
114
|
+
| \`boolean\` | true/false | Exact match |
|
|
115
|
+
| \`list\` | Array of values | Requires \`itemType\`. Use \`target\` for list-of-ref. |
|
|
116
|
+
| \`amount\` | Currency value (e.g. "1250000 USD") | Numeric range on extracted value |
|
|
117
|
+
|
|
118
|
+
## Date precision (0.6.7+)
|
|
119
|
+
|
|
120
|
+
Date fields accept three optional hints that let the schema declare the
|
|
121
|
+
precision contract instead of relying on convention:
|
|
122
|
+
|
|
123
|
+
| Key | Values | Default | Effect |
|
|
124
|
+
|-----|--------|---------|--------|
|
|
125
|
+
| \`store_precision\` | \`year\` / \`month\` / \`day\` / \`hour\` / \`minute\` / \`second\` / \`millisecond\` | unset (lenient) | Minimum precision the engine accepts on write |
|
|
126
|
+
| \`on_coarser\` | \`warn\` / \`error\` | \`warn\` when \`store_precision\` declared | Behavior when a written value is coarser than declared. \`warn\` emits a response \`_meta.warnings[]\` entry; \`error\` rejects the write. |
|
|
127
|
+
| \`display_precision\` | same enum | unset | Consumer-side rendering hint. Engine never enforces. Must be coarser-or-equal to \`store_precision\`. |
|
|
128
|
+
|
|
129
|
+
### Example — event timestamp (rich storage, minute-level UI)
|
|
130
|
+
|
|
131
|
+
\`\`\`yaml
|
|
132
|
+
started_at:
|
|
133
|
+
type: date
|
|
134
|
+
store_precision: second # engine enforces — writes coarser than second warn
|
|
135
|
+
on_coarser: warn
|
|
136
|
+
display_precision: minute # consumer renders HH:MM, drops seconds
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
### Example — birthday (identity date, no time component)
|
|
140
|
+
|
|
141
|
+
\`\`\`yaml
|
|
142
|
+
birthday:
|
|
143
|
+
type: date
|
|
144
|
+
store_precision: day # day is the richest meaningful precision
|
|
145
|
+
on_coarser: error # reject year-only or month-only writes
|
|
146
|
+
display_precision: day
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
### Rules
|
|
150
|
+
|
|
151
|
+
- **Storage wins.** \`store_precision\` is a *minimum*, not an exact match — writing finer than declared always passes. Rule: always capture the richest precision available.
|
|
152
|
+
- **Write-time only.** Precision enforcement fires only on \`maad_create\`, \`maad_update\`, and \`maad_bulk_*\`. Reads, reindex, and \`maad_validate\` (without \`includePrecision\`) never judge historical data.
|
|
153
|
+
- **Update-neighbor safe.** Updating a field that isn't the declared-precision date never fires a warning on the unchanged historical date — schemas can tighten precision without breaking records that predate the contract.
|
|
154
|
+
- **Audit with \`maad_validate includePrecision: true\`** to plan migrations. Returns \`precisionDrift[]\` — informational, never counted as invalid.
|
|
155
|
+
- Absent keys = pre-0.6.7 lenient behavior. Fully backward compatible.
|
|
156
|
+
|
|
157
|
+
## Required fields
|
|
158
|
+
|
|
159
|
+
Every schema must require \`doc_id\`. Add other required fields that every record of this type must have.
|
|
160
|
+
|
|
161
|
+
## Index flag
|
|
162
|
+
|
|
163
|
+
\`index: true\` means the field is stored in the field_index table for fast queries. Only index fields you need to filter or search on.
|
|
164
|
+
|
|
165
|
+
## Ref fields
|
|
166
|
+
|
|
167
|
+
\`type: ref\` creates a relationship edge between documents. The \`target\` must be a registered type. Example:
|
|
168
|
+
|
|
169
|
+
\`\`\`yaml
|
|
170
|
+
client:
|
|
171
|
+
type: ref
|
|
172
|
+
index: true
|
|
173
|
+
target: client # points to records of type "client"
|
|
174
|
+
\`\`\`
|
|
175
|
+
|
|
176
|
+
## Template headings (optional)
|
|
177
|
+
|
|
178
|
+
Add heading structure that \`maad_create\` will generate for new records:
|
|
179
|
+
|
|
180
|
+
\`\`\`yaml
|
|
181
|
+
template:
|
|
182
|
+
- level: 1
|
|
183
|
+
text: "{{title}}"
|
|
184
|
+
- level: 2
|
|
185
|
+
text: Background
|
|
186
|
+
- level: 2
|
|
187
|
+
text: Notes
|
|
188
|
+
\`\`\`
|
|
189
|
+
|
|
190
|
+
## Schema versioning
|
|
191
|
+
|
|
192
|
+
Schema refs use \`<type>.v<number>\` format. When changing a schema, create a new version file and update the registry reference.
|
|
193
|
+
|
|
194
|
+
## After creating schemas
|
|
195
|
+
|
|
196
|
+
1. Call \`maad_reload\` to pick up new registry and schemas
|
|
197
|
+
2. Call \`maad_summary\` or \`maad_schema <type>\` to verify
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
export function generateImportGuide() {
|
|
201
|
+
return `# Import Guide
|
|
202
|
+
|
|
203
|
+
## Overview
|
|
204
|
+
|
|
205
|
+
Importing raw data into MAAD:
|
|
206
|
+
1. Analyze the source data
|
|
207
|
+
2. Classify each type as master or transaction
|
|
208
|
+
3. Design the type registry and schemas
|
|
209
|
+
4. Create records
|
|
210
|
+
5. Reindex to build the search index
|
|
211
|
+
|
|
212
|
+
## Step 1 — Analyze source data
|
|
213
|
+
|
|
214
|
+
Read the raw files. Identify:
|
|
215
|
+
- What types of records exist (clients, cases, contacts, notes, etc.)
|
|
216
|
+
- What fields each type has
|
|
217
|
+
- What relationships exist between types (client → contact, case → client)
|
|
218
|
+
- What field types to use (string, date, enum, ref, amount)
|
|
219
|
+
|
|
220
|
+
Use \`maad_scan\` on the source directory for structural patterns if helpful.
|
|
221
|
+
|
|
222
|
+
## Step 2 — Classify master vs transaction
|
|
223
|
+
|
|
224
|
+
For each type, ask: **Will it generate more than 1,000 records per year?**
|
|
225
|
+
|
|
226
|
+
| Type | Volume | Pattern | File strategy |
|
|
227
|
+
|------|--------|---------|---------------|
|
|
228
|
+
| Clients | Low (tens to hundreds) | Master | One file per client |
|
|
229
|
+
| Cases | Low to medium (hundreds) | Master | One file per case |
|
|
230
|
+
| Contacts | Low (hundreds) | Master | One file per contact |
|
|
231
|
+
| Case notes | **High (thousands+)** | **Transaction** | One file per case, notes appended as blocks |
|
|
232
|
+
| Activity logs | **High (tens of thousands)** | **Transaction** | One file per entity, entries appended |
|
|
233
|
+
| Invoices | Medium to high | Master if <1K/yr, Transaction if more | Depends on volume |
|
|
234
|
+
|
|
235
|
+
## Step 3 — Design registry and schemas
|
|
236
|
+
|
|
237
|
+
Create \`_registry/object_types.yaml\`:
|
|
238
|
+
|
|
239
|
+
\`\`\`yaml
|
|
240
|
+
types:
|
|
241
|
+
client:
|
|
242
|
+
path: clients/
|
|
243
|
+
id_prefix: cli
|
|
244
|
+
schema: client.v1
|
|
245
|
+
case:
|
|
246
|
+
path: cases/
|
|
247
|
+
id_prefix: cas
|
|
248
|
+
schema: case.v1
|
|
249
|
+
case_note:
|
|
250
|
+
path: case-notes/
|
|
251
|
+
id_prefix: note
|
|
252
|
+
schema: case_note.v1
|
|
253
|
+
\`\`\`
|
|
254
|
+
|
|
255
|
+
Create schema files in \`_schema/\` for each type. See schema-guide.md for field type reference.
|
|
256
|
+
|
|
257
|
+
After writing registry and schemas, call \`maad_reload\` to pick them up.
|
|
258
|
+
|
|
259
|
+
## Step 4 — Create records
|
|
260
|
+
|
|
261
|
+
### Master records (one file per record)
|
|
262
|
+
|
|
263
|
+
For each record, use \`maad_create\`:
|
|
264
|
+
|
|
265
|
+
\`\`\`
|
|
266
|
+
maad_create({
|
|
267
|
+
docType: "client",
|
|
268
|
+
fields: {
|
|
269
|
+
name: "Apex Industrial Supply Co.",
|
|
270
|
+
status: "active",
|
|
271
|
+
industry: "Manufacturing",
|
|
272
|
+
primary_contact: "con-ron-stafford",
|
|
273
|
+
email: "r.stafford@apexind.com"
|
|
274
|
+
}
|
|
275
|
+
})
|
|
276
|
+
\`\`\`
|
|
277
|
+
|
|
278
|
+
For bulk imports (10+ records), use \`maad_bulk_create\` instead — accepts an array, returns per-record results, single git commit:
|
|
279
|
+
|
|
280
|
+
\`\`\`
|
|
281
|
+
maad_bulk_create({
|
|
282
|
+
records: [
|
|
283
|
+
{ docType: "client", fields: { name: "Acme Corp", status: "active" } },
|
|
284
|
+
{ docType: "client", fields: { name: "Beta Inc", status: "prospect" } },
|
|
285
|
+
...
|
|
286
|
+
]
|
|
287
|
+
})
|
|
288
|
+
\`\`\`
|
|
289
|
+
|
|
290
|
+
**Important:** Execute individual creates sequentially, not in parallel. Use bulk_create for batch operations.
|
|
291
|
+
|
|
292
|
+
### Transaction records (append to parent file)
|
|
293
|
+
|
|
294
|
+
First create the parent file, then append entries:
|
|
295
|
+
|
|
296
|
+
\`\`\`
|
|
297
|
+
maad_create({
|
|
298
|
+
docType: "case_note",
|
|
299
|
+
docId: "notes-cas-001",
|
|
300
|
+
fields: { case: "cas-001", doc_type: "case_note" },
|
|
301
|
+
body: "## 2024-03-05 — Mediation Session {#note-010}\\n\\nDay-long mediation. No resolution."
|
|
302
|
+
})
|
|
303
|
+
\`\`\`
|
|
304
|
+
|
|
305
|
+
For subsequent notes, append to the same file:
|
|
306
|
+
|
|
307
|
+
\`\`\`
|
|
308
|
+
maad_update({
|
|
309
|
+
docId: "notes-cas-001",
|
|
310
|
+
appendBody: "## 2024-04-15 — Settlement Call {#note-011}\\n\\nClient agreed to $1.8M floor."
|
|
311
|
+
})
|
|
312
|
+
\`\`\`
|
|
313
|
+
|
|
314
|
+
Each headed block becomes an indexed block with a block_id. Retrieve individual notes with \`maad_get\` at warm depth.
|
|
315
|
+
|
|
316
|
+
## ID mapping (critical)
|
|
317
|
+
|
|
318
|
+
Source data will have its own IDs (C001, U005, INV-2024-001, etc.). These are NOT MAAD IDs.
|
|
319
|
+
|
|
320
|
+
- MAAD generates IDs using the registry \`id_prefix\`: \`cli-001\`, \`usr-005\`, \`cas-012\`
|
|
321
|
+
- \`id_prefix\` must be 2-5 lowercase alphanumeric characters
|
|
322
|
+
- **Do not change the registry to match source IDs.** Map source IDs to MAAD format during import.
|
|
323
|
+
- Establish the mapping before creating any records: \`C001 → cli-001\`, \`U005 → usr-005\`
|
|
324
|
+
- Create parent types first (clients, users), then dependent types (cases, notes) so refs resolve
|
|
325
|
+
- Store the original source ID in a \`source_id\` field if you need to cross-reference back
|
|
326
|
+
- Ref fields must use MAAD IDs, not source IDs (e.g. \`client: cli-001\`, not \`client: C001\`)
|
|
327
|
+
|
|
328
|
+
## Handling tabular data
|
|
329
|
+
|
|
330
|
+
If source data is in markdown tables (rows = records):
|
|
331
|
+
- Classify: is each row a master record or a transaction entry?
|
|
332
|
+
- Master rows: each row becomes one \`maad_create\` call (or \`maad_bulk_create\` for 10+)
|
|
333
|
+
- Transaction rows: group by parent, create one file per parent, append rows as headed blocks
|
|
334
|
+
- Column headers map to frontmatter field names
|
|
335
|
+
|
|
336
|
+
## Handling narrative documents
|
|
337
|
+
|
|
338
|
+
If source data is unstructured text (articles, reports, filings):
|
|
339
|
+
- Create one record per document
|
|
340
|
+
- Put key facts in frontmatter fields (who, what, when, where)
|
|
341
|
+
- The body stays as-is — the original text is preserved unchanged
|
|
342
|
+
- Frontmatter IS the annotation layer — the LLM's understanding of the document
|
|
343
|
+
|
|
344
|
+
## Step 5 — Reindex and verify
|
|
345
|
+
|
|
346
|
+
After creating all records:
|
|
347
|
+
|
|
348
|
+
1. \`maad_reindex({ force: true })\` — rebuild the full index
|
|
349
|
+
2. \`maad_summary\` — verify counts and types
|
|
350
|
+
3. \`maad_query\` — spot-check a few records
|
|
351
|
+
4. \`maad_search\` — verify extracted objects
|
|
352
|
+
|
|
353
|
+
## Tips
|
|
354
|
+
|
|
355
|
+
- Call \`maad_schema <type>\` before creating records to verify field names
|
|
356
|
+
- Use \`maad_reload\` after any registry or schema changes
|
|
357
|
+
- Execute write operations sequentially — do not parallelize
|
|
358
|
+
- If a create fails validation, check the error message — it tells you which field is wrong
|
|
359
|
+
- For bulk imports, work through one type at a time: all clients, then all cases, then notes
|
|
360
|
+
`;
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=skill-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-files.js","sourceRoot":"","sources":["../src/skill-files.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2DAA2D;AAC3D,oDAAoD;AACpD,+EAA+E;AAE/E,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgMR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+JR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface SkillsScaffoldResult {
|
|
2
|
+
created: string[];
|
|
3
|
+
skipped: string[];
|
|
4
|
+
errors: Array<{
|
|
5
|
+
file: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
export declare function ensureProjectSkills(projectRoot: string): SkillsScaffoldResult;
|
|
10
|
+
//# sourceMappingURL=skills-scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-scaffold.d.ts","sourceRoot":"","sources":["../src/skills-scaffold.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAaD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CA6B7E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Skills Scaffold — ensures _skills/ guide files exist in a project
|
|
3
|
+
//
|
|
4
|
+
// Called by:
|
|
5
|
+
// - MCP lifecycle after engine.init() succeeds (per-session bootstrap)
|
|
6
|
+
// - `maad init` CLI (full project scaffold)
|
|
7
|
+
// - Future EnginePool (0.4.0) on first per-project bind
|
|
8
|
+
//
|
|
9
|
+
// Never overwrites existing files — protects user customizations. Failure is
|
|
10
|
+
// non-fatal to the caller; log and continue so an unwritable _skills/ never
|
|
11
|
+
// blocks the engine from starting.
|
|
12
|
+
// ============================================================================
|
|
13
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { generateSchemaGuide, generateImportGuide } from './skill-files.js';
|
|
16
|
+
import { generateArchitectSkill } from './architect.js';
|
|
17
|
+
const SKILL_FILES = [
|
|
18
|
+
{ name: 'architect-core.md', generator: generateArchitectSkill },
|
|
19
|
+
{ name: 'schema-guide.md', generator: generateSchemaGuide },
|
|
20
|
+
{ name: 'import-guide.md', generator: generateImportGuide },
|
|
21
|
+
];
|
|
22
|
+
export function ensureProjectSkills(projectRoot) {
|
|
23
|
+
const result = { created: [], skipped: [], errors: [] };
|
|
24
|
+
const skillDir = path.join(projectRoot, '_skills');
|
|
25
|
+
try {
|
|
26
|
+
if (!existsSync(skillDir))
|
|
27
|
+
mkdirSync(skillDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
31
|
+
result.errors.push({ file: '_skills/', message });
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
for (const skill of SKILL_FILES) {
|
|
35
|
+
const filePath = path.join(skillDir, skill.name);
|
|
36
|
+
const relPath = path.join('_skills', skill.name);
|
|
37
|
+
if (existsSync(filePath)) {
|
|
38
|
+
result.skipped.push(relPath);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
writeFileSync(filePath, skill.generator(), 'utf-8');
|
|
43
|
+
result.created.push(relPath);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
47
|
+
result.errors.push({ file: relPath, message });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=skills-scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-scaffold.js","sourceRoot":"","sources":["../src/skills-scaffold.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oEAAoE;AACpE,EAAE;AACF,aAAa;AACb,yEAAyE;AACzE,8CAA8C;AAC9C,0DAA0D;AAC1D,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,mCAAmC;AACnC,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAaxD,MAAM,WAAW,GAAgB;IAC/B,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,sBAAsB,EAAE;IAChE,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAC3D,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE;CAC5D,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,MAAM,GAAyB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|