@maadb/core 0.0.1 → 0.7.9
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/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 +209 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +489 -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 +24 -0
- package/dist/engine/reads.d.ts.map +1 -0
- package/dist/engine/reads.js +701 -0
- package/dist/engine/reads.js.map +1 -0
- package/dist/engine/types.d.ts +350 -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 +41 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +86 -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 +21 -0
- package/dist/mcp/guardrails.d.ts.map +1 -0
- package/dist/mcp/guardrails.js +39 -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 +110 -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/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 +56 -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 +242 -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/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 +118 -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 +260 -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 +99 -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,2 @@
|
|
|
1
|
+
export declare const SCHEMA_SQL = "\n-- Documents table: one row per markdown file\nCREATE TABLE IF NOT EXISTS documents (\n doc_id TEXT PRIMARY KEY,\n doc_type TEXT NOT NULL,\n schema_ref TEXT NOT NULL,\n file_path TEXT NOT NULL UNIQUE,\n file_hash TEXT NOT NULL,\n version INTEGER NOT NULL DEFAULT 1,\n deleted INTEGER NOT NULL DEFAULT 0,\n indexed_at TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT ''\n);\nCREATE INDEX IF NOT EXISTS idx_documents_type ON documents(doc_type);\nCREATE INDEX IF NOT EXISTS idx_documents_path ON documents(file_path);\nCREATE INDEX IF NOT EXISTS idx_documents_deleted ON documents(deleted);\n\n-- Extracted objects table: inline annotations and indexed fields\nCREATE TABLE IF NOT EXISTS objects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n primitive TEXT NOT NULL,\n subtype TEXT NOT NULL,\n value TEXT NOT NULL,\n normalized_value TEXT,\n label TEXT NOT NULL,\n role TEXT,\n doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n source_line INTEGER NOT NULL,\n block_id TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_objects_primitive ON objects(primitive);\nCREATE INDEX IF NOT EXISTS idx_objects_subtype ON objects(subtype);\nCREATE INDEX IF NOT EXISTS idx_objects_value ON objects(value);\nCREATE INDEX IF NOT EXISTS idx_objects_doc_id ON objects(doc_id);\nCREATE INDEX IF NOT EXISTS idx_objects_normalized ON objects(normalized_value);\n\n-- Relationships table: edges between documents\nCREATE TABLE IF NOT EXISTS relationships (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n source_doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n target_doc_id TEXT NOT NULL,\n field TEXT NOT NULL,\n relation_type TEXT NOT NULL CHECK(relation_type IN ('ref', 'mention'))\n);\nCREATE INDEX IF NOT EXISTS idx_rel_source ON relationships(source_doc_id);\nCREATE INDEX IF NOT EXISTS idx_rel_target ON relationships(target_doc_id);\nCREATE INDEX IF NOT EXISTS idx_rel_type ON relationships(relation_type);\n\n-- Blocks table: heading-delimited sections\nCREATE TABLE IF NOT EXISTS blocks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n block_id TEXT,\n heading TEXT NOT NULL,\n level INTEGER NOT NULL,\n start_line INTEGER NOT NULL,\n end_line INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_blocks_doc_id ON blocks(doc_id);\nCREATE INDEX IF NOT EXISTS idx_blocks_block_id ON blocks(block_id);\n\n-- Field index: denormalized frontmatter fields for fast filtering\nCREATE TABLE IF NOT EXISTS field_index (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,\n field_name TEXT NOT NULL,\n field_value TEXT,\n numeric_value REAL,\n field_type TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_field_doc ON field_index(doc_id);\nCREATE INDEX IF NOT EXISTS idx_field_name_value ON field_index(field_name, field_value);\nCREATE INDEX IF NOT EXISTS idx_field_name_numeric ON field_index(field_name, numeric_value);\n\n-- Engine meta key/value store (0.7.4, fup-2026-093). Holds per-type schema\n-- index fingerprints so indexAll can detect \"indexed-field set changed since\n-- last run\" and force-rebuild affected types regardless of file-hash skip.\n-- Keys are namespaced (e.g. schema_index_fp:<doc_type>).\nCREATE TABLE IF NOT EXISTS engine_meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n";
|
|
2
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/backend/sqlite/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,ohHAkFtB,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// SQLite Schema
|
|
3
|
+
// CREATE TABLE statements and migrations for the MAAD backend.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export const SCHEMA_SQL = `
|
|
6
|
+
-- Documents table: one row per markdown file
|
|
7
|
+
CREATE TABLE IF NOT EXISTS documents (
|
|
8
|
+
doc_id TEXT PRIMARY KEY,
|
|
9
|
+
doc_type TEXT NOT NULL,
|
|
10
|
+
schema_ref TEXT NOT NULL,
|
|
11
|
+
file_path TEXT NOT NULL UNIQUE,
|
|
12
|
+
file_hash TEXT NOT NULL,
|
|
13
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
14
|
+
deleted INTEGER NOT NULL DEFAULT 0,
|
|
15
|
+
indexed_at TEXT NOT NULL,
|
|
16
|
+
updated_at TEXT NOT NULL DEFAULT ''
|
|
17
|
+
);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_documents_type ON documents(doc_type);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_documents_path ON documents(file_path);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS idx_documents_deleted ON documents(deleted);
|
|
21
|
+
|
|
22
|
+
-- Extracted objects table: inline annotations and indexed fields
|
|
23
|
+
CREATE TABLE IF NOT EXISTS objects (
|
|
24
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
25
|
+
primitive TEXT NOT NULL,
|
|
26
|
+
subtype TEXT NOT NULL,
|
|
27
|
+
value TEXT NOT NULL,
|
|
28
|
+
normalized_value TEXT,
|
|
29
|
+
label TEXT NOT NULL,
|
|
30
|
+
role TEXT,
|
|
31
|
+
doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
|
|
32
|
+
source_line INTEGER NOT NULL,
|
|
33
|
+
block_id TEXT
|
|
34
|
+
);
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_objects_primitive ON objects(primitive);
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_objects_subtype ON objects(subtype);
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_objects_value ON objects(value);
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_objects_doc_id ON objects(doc_id);
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_objects_normalized ON objects(normalized_value);
|
|
40
|
+
|
|
41
|
+
-- Relationships table: edges between documents
|
|
42
|
+
CREATE TABLE IF NOT EXISTS relationships (
|
|
43
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
44
|
+
source_doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
|
|
45
|
+
target_doc_id TEXT NOT NULL,
|
|
46
|
+
field TEXT NOT NULL,
|
|
47
|
+
relation_type TEXT NOT NULL CHECK(relation_type IN ('ref', 'mention'))
|
|
48
|
+
);
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_rel_source ON relationships(source_doc_id);
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_rel_target ON relationships(target_doc_id);
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_rel_type ON relationships(relation_type);
|
|
52
|
+
|
|
53
|
+
-- Blocks table: heading-delimited sections
|
|
54
|
+
CREATE TABLE IF NOT EXISTS blocks (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
|
|
57
|
+
block_id TEXT,
|
|
58
|
+
heading TEXT NOT NULL,
|
|
59
|
+
level INTEGER NOT NULL,
|
|
60
|
+
start_line INTEGER NOT NULL,
|
|
61
|
+
end_line INTEGER NOT NULL
|
|
62
|
+
);
|
|
63
|
+
CREATE INDEX IF NOT EXISTS idx_blocks_doc_id ON blocks(doc_id);
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_blocks_block_id ON blocks(block_id);
|
|
65
|
+
|
|
66
|
+
-- Field index: denormalized frontmatter fields for fast filtering
|
|
67
|
+
CREATE TABLE IF NOT EXISTS field_index (
|
|
68
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
69
|
+
doc_id TEXT NOT NULL REFERENCES documents(doc_id) ON DELETE CASCADE,
|
|
70
|
+
field_name TEXT NOT NULL,
|
|
71
|
+
field_value TEXT,
|
|
72
|
+
numeric_value REAL,
|
|
73
|
+
field_type TEXT NOT NULL
|
|
74
|
+
);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_field_doc ON field_index(doc_id);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_field_name_value ON field_index(field_name, field_value);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_field_name_numeric ON field_index(field_name, numeric_value);
|
|
78
|
+
|
|
79
|
+
-- Engine meta key/value store (0.7.4, fup-2026-093). Holds per-type schema
|
|
80
|
+
-- index fingerprints so indexAll can detect "indexed-field set changed since
|
|
81
|
+
-- last run" and force-rebuild affected types regardless of file-hash skip.
|
|
82
|
+
-- Keys are namespaced (e.g. schema_index_fp:<doc_type>).
|
|
83
|
+
CREATE TABLE IF NOT EXISTS engine_meta (
|
|
84
|
+
key TEXT PRIMARY KEY,
|
|
85
|
+
value TEXT NOT NULL
|
|
86
|
+
);
|
|
87
|
+
`;
|
|
88
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/backend/sqlite/schema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gBAAgB;AAChB,+DAA+D;AAC/D,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../src/claude-md.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,IAAI,MAAM,CA2FzC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// CLAUDE.md Generator — Agent instructions for MCP-first MAAD workflow
|
|
3
|
+
// Generated on init. Tells the LLM how to work with this project.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
export function generateClaudeMd() {
|
|
6
|
+
return `# MAAD Project — Agent Instructions
|
|
7
|
+
|
|
8
|
+
## How to work with this project
|
|
9
|
+
|
|
10
|
+
This is a MAAD project. You have MCP tools for all data operations.
|
|
11
|
+
|
|
12
|
+
**Use MAAD MCP tools for everything.** Do not use bash, shell commands, or direct file reads for data access. If a tool fails, report the error — do not fall back to shell.
|
|
13
|
+
|
|
14
|
+
## Boot sequence
|
|
15
|
+
|
|
16
|
+
1. Run \`maad_summary\` to see what's in this project
|
|
17
|
+
2. If summary shows **zero types and zero documents** → this is an empty project. Read \`_skills/architect-core.md\` and enter Architect mode to design and deploy the database.
|
|
18
|
+
3. If summary shows existing types and documents → this is a live project. Proceed with normal operations below.
|
|
19
|
+
4. Use \`maad_schema <type>\` to understand record structure before writing
|
|
20
|
+
5. Use \`maad_health\` if something seems wrong
|
|
21
|
+
|
|
22
|
+
## Empty project → Architect mode
|
|
23
|
+
|
|
24
|
+
When this project has no types defined:
|
|
25
|
+
1. Read \`_skills/architect-core.md\` for the full Architect role specification
|
|
26
|
+
2. Read \`_skills/schema-guide.md\` for field type reference
|
|
27
|
+
3. Read \`_skills/import-guide.md\` if importing existing data
|
|
28
|
+
4. Follow the Architect workflow: discover requirements → design schema → present plan → build
|
|
29
|
+
|
|
30
|
+
The Architect role handles: schema design, registry creation, data import, troubleshooting, and handoff to normal operations.
|
|
31
|
+
|
|
32
|
+
## Live project → User mode
|
|
33
|
+
|
|
34
|
+
### Reading data
|
|
35
|
+
|
|
36
|
+
- \`maad_summary\` — project snapshot (start here)
|
|
37
|
+
- \`maad_get\` — read a record (hot/warm/cold/full)
|
|
38
|
+
- \`maad_query\` — find records by type, filters, and field projection
|
|
39
|
+
- \`maad_search\` — find extracted objects across all records
|
|
40
|
+
- \`maad_related\` — traverse relationships between records
|
|
41
|
+
- \`maad_aggregate\` — count/sum/avg/min/max grouped by a field. Supports multi-hop ref chains (\`a->b->c\`) for cross-doctype aggregates. **Use instead of iterating records to compute totals.**
|
|
42
|
+
- \`maad_join\` — query + follow refs + project fields from both sides in one call. **Use instead of \`query\` → \`get\` → \`get\` chains.**
|
|
43
|
+
|
|
44
|
+
### Writing data
|
|
45
|
+
|
|
46
|
+
- **Always** call \`maad_schema <type>\` before creating or updating records
|
|
47
|
+
- \`maad_create\` — new record (engine validates against schema)
|
|
48
|
+
- \`maad_update\` — modify fields or body (use expectedVersion for safe writes)
|
|
49
|
+
- \`maad_bulk_create\` — create multiple records in one call (much faster for imports)
|
|
50
|
+
- \`maad_bulk_update\` — update multiple records in one call
|
|
51
|
+
- **Execute individual writes sequentially** — do not parallelize single create/update calls
|
|
52
|
+
|
|
53
|
+
### Importing raw data
|
|
54
|
+
|
|
55
|
+
When onboarding new data into this project:
|
|
56
|
+
|
|
57
|
+
1. Read the raw files to understand the data
|
|
58
|
+
2. Read \`_skills/architect-core.md\` for schema design guidance
|
|
59
|
+
3. Design the registry and schemas
|
|
60
|
+
4. Call \`maad_reload\` to pick up the new registry and schemas
|
|
61
|
+
5. Create records using \`maad_create\` (master) or \`maad_update --append\` (transaction)
|
|
62
|
+
6. Call \`maad_reindex\` after bulk creation
|
|
63
|
+
7. Call \`maad_summary\` to confirm
|
|
64
|
+
|
|
65
|
+
### Frontmatter format
|
|
66
|
+
|
|
67
|
+
Every markdown record must have a YAML frontmatter header:
|
|
68
|
+
|
|
69
|
+
\`\`\`yaml
|
|
70
|
+
---
|
|
71
|
+
doc_id: <unique-id>
|
|
72
|
+
doc_type: <registered-type>
|
|
73
|
+
schema: <type.version>
|
|
74
|
+
field1: value1
|
|
75
|
+
field2: value2
|
|
76
|
+
---
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
### Server management
|
|
80
|
+
|
|
81
|
+
- \`maad_reload\` — reload registry and schemas after config changes (no restart needed)
|
|
82
|
+
- \`maad_health\` — check engine status
|
|
83
|
+
- \`maad_reindex\` — rebuild index after bulk file changes
|
|
84
|
+
|
|
85
|
+
## Rules
|
|
86
|
+
|
|
87
|
+
1. MCP tools only — no bash for data operations
|
|
88
|
+
2. Schema first — call \`maad_schema\` before writes
|
|
89
|
+
3. Reload after config changes — call \`maad_reload\` after editing registry or schemas
|
|
90
|
+
4. Sequential writes — never parallelize create/update/delete operations
|
|
91
|
+
5. Report errors — if a tool returns \`ok: false\`, report what happened
|
|
92
|
+
6. Empty project = Architect mode — read the skill files and design the database
|
|
93
|
+
7. Use \`maad_aggregate\` for group-by totals — don't page through records to compute counts, sums, or averages. Ref chains like \`client->industry\` enable cross-doctype groupings in one call.
|
|
94
|
+
8. Use \`maad_join\` to follow refs and collect fields in one call — don't chain query/get loops.
|
|
95
|
+
`;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=claude-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../src/claude-md.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uEAAuE;AACvE,kEAAkE;AAClE,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/D;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Audit commands — history, audit
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { docId } from '../../types.js';
|
|
5
|
+
import { initEngine } from '../helpers.js';
|
|
6
|
+
export async function cmdHistory(ctx) {
|
|
7
|
+
const id = ctx.args[1];
|
|
8
|
+
if (!id) {
|
|
9
|
+
console.error('Usage: maad history <doc_id>');
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const engine = await initEngine(ctx);
|
|
13
|
+
const result = await engine.history(docId(id));
|
|
14
|
+
if (!result.ok) {
|
|
15
|
+
console.error('History failed:');
|
|
16
|
+
for (const e of result.errors)
|
|
17
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
18
|
+
engine.close();
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
console.log(JSON.stringify(result.value, null, 2));
|
|
22
|
+
engine.close();
|
|
23
|
+
}
|
|
24
|
+
export async function cmdAudit(ctx) {
|
|
25
|
+
const sinceIdx = ctx.args.indexOf('--since');
|
|
26
|
+
const since = sinceIdx >= 0 ? ctx.args[sinceIdx + 1] : undefined;
|
|
27
|
+
const engine = await initEngine(ctx);
|
|
28
|
+
const result = await engine.audit(since ? { since } : {});
|
|
29
|
+
if (!result.ok) {
|
|
30
|
+
console.error('Audit failed:');
|
|
31
|
+
for (const e of result.errors)
|
|
32
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
33
|
+
engine.close();
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
console.log(JSON.stringify(result.value, null, 2));
|
|
37
|
+
engine.close();
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAe;IAC9C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAe;IAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface AuthCliOptions {
|
|
2
|
+
instancePath: string | undefined;
|
|
3
|
+
args: string[];
|
|
4
|
+
}
|
|
5
|
+
/** Shared dispatcher — called from the top-level CLI router. */
|
|
6
|
+
export declare function cmdAuth(opts: AuthCliOptions): Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAuBA,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,gEAAgE;AAChE,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjE"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// CLI auth subcommands — 0.7.0 Scoped Auth & Identity (P3)
|
|
3
|
+
//
|
|
4
|
+
// maad auth issue-token --role=... --projects=... [--name] [--agent]
|
|
5
|
+
// [--user] [--expires]
|
|
6
|
+
// maad auth revoke-token --id=tok-...
|
|
7
|
+
// maad auth rotate-token --id=tok-...
|
|
8
|
+
// maad auth list-tokens [--include-revoked]
|
|
9
|
+
// maad auth show-token --id=tok-...
|
|
10
|
+
//
|
|
11
|
+
// All commands operate on `<instance-root>/_auth/tokens.yaml`. Requires
|
|
12
|
+
// --instance (or MAAD_INSTANCE env) — synthetic single-project mode has no
|
|
13
|
+
// token registry. Plaintext is printed ONCE to stdout at issue/rotate time
|
|
14
|
+
// and never again recoverable from the registry.
|
|
15
|
+
// ============================================================================
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import { loadInstance } from '../../instance/config.js';
|
|
18
|
+
import { TokenStore } from '../../auth/token-store.js';
|
|
19
|
+
import { tokenId } from '../../auth/types.js';
|
|
20
|
+
/** Shared dispatcher — called from the top-level CLI router. */
|
|
21
|
+
export async function cmdAuth(opts) {
|
|
22
|
+
const sub = opts.args[1];
|
|
23
|
+
if (!sub) {
|
|
24
|
+
printAuthHelp();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const store = await openStore(opts.instancePath);
|
|
28
|
+
switch (sub) {
|
|
29
|
+
case 'issue-token':
|
|
30
|
+
await cmdIssue(store, opts.args.slice(2));
|
|
31
|
+
break;
|
|
32
|
+
case 'revoke-token':
|
|
33
|
+
await cmdRevoke(store, opts.args.slice(2));
|
|
34
|
+
break;
|
|
35
|
+
case 'rotate-token':
|
|
36
|
+
await cmdRotate(store, opts.args.slice(2));
|
|
37
|
+
break;
|
|
38
|
+
case 'list-tokens':
|
|
39
|
+
cmdList(store, opts.args.slice(2));
|
|
40
|
+
break;
|
|
41
|
+
case 'show-token':
|
|
42
|
+
cmdShow(store, opts.args.slice(2));
|
|
43
|
+
break;
|
|
44
|
+
case 'help':
|
|
45
|
+
case '--help':
|
|
46
|
+
case '-h':
|
|
47
|
+
printAuthHelp();
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
console.error(`Unknown auth subcommand: ${sub}`);
|
|
51
|
+
printAuthHelp();
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// --- Individual handlers ---------------------------------------------------
|
|
56
|
+
async function cmdIssue(store, args) {
|
|
57
|
+
const flags = parseFlags(args);
|
|
58
|
+
const role = flags['role'];
|
|
59
|
+
const projectsRaw = flags['projects'];
|
|
60
|
+
if (!role || !projectsRaw) {
|
|
61
|
+
console.error('Usage: maad auth issue-token --role=<reader|writer|admin> --projects=<csv-or-*> [--name=<label>] [--agent=<id>] [--user=<id>] [--expires=<iso>]');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
if (role !== 'reader' && role !== 'writer' && role !== 'admin') {
|
|
65
|
+
console.error(`--role must be reader|writer|admin (got "${role}")`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const projects = parseProjects(projectsRaw);
|
|
69
|
+
const spec = { role: role, projects };
|
|
70
|
+
if (flags['name'])
|
|
71
|
+
spec.name = flags['name'];
|
|
72
|
+
if (flags['agent'])
|
|
73
|
+
spec.agentId = flags['agent'];
|
|
74
|
+
if (flags['user'])
|
|
75
|
+
spec.userId = flags['user'];
|
|
76
|
+
if (flags['expires'])
|
|
77
|
+
spec.expiresAt = flags['expires'];
|
|
78
|
+
const result = await store.issue(spec);
|
|
79
|
+
if (!result.ok) {
|
|
80
|
+
console.error('issue-token failed:');
|
|
81
|
+
for (const e of result.errors)
|
|
82
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
// Plaintext on stdout ONCE; record metadata as structured stderr note so
|
|
86
|
+
// scripts can `maad auth issue-token ... | tee -a client.token`.
|
|
87
|
+
console.log(result.value.plaintext);
|
|
88
|
+
console.error('\n⚠️ Store this token now — it will not be shown again.');
|
|
89
|
+
console.error('Record:');
|
|
90
|
+
console.error(JSON.stringify(result.value.record, null, 2));
|
|
91
|
+
}
|
|
92
|
+
async function cmdRevoke(store, args) {
|
|
93
|
+
const flags = parseFlags(args);
|
|
94
|
+
const id = flags['id'];
|
|
95
|
+
if (!id) {
|
|
96
|
+
console.error('Usage: maad auth revoke-token --id=<tok-xxx>');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
const result = await store.revoke(tokenId(id));
|
|
100
|
+
if (!result.ok) {
|
|
101
|
+
console.error('revoke-token failed:');
|
|
102
|
+
for (const e of result.errors)
|
|
103
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
console.log(JSON.stringify(result.value, null, 2));
|
|
107
|
+
}
|
|
108
|
+
async function cmdRotate(store, args) {
|
|
109
|
+
const flags = parseFlags(args);
|
|
110
|
+
const id = flags['id'];
|
|
111
|
+
if (!id) {
|
|
112
|
+
console.error('Usage: maad auth rotate-token --id=<tok-xxx>');
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const result = await store.rotate(tokenId(id));
|
|
116
|
+
if (!result.ok) {
|
|
117
|
+
console.error('rotate-token failed:');
|
|
118
|
+
for (const e of result.errors)
|
|
119
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
console.log(result.value.plaintext);
|
|
123
|
+
console.error('\n⚠️ Store this new token — old token is revoked and will not be shown again.');
|
|
124
|
+
console.error('New record:');
|
|
125
|
+
console.error(JSON.stringify(result.value.record, null, 2));
|
|
126
|
+
}
|
|
127
|
+
function cmdList(store, args) {
|
|
128
|
+
const flags = parseFlags(args);
|
|
129
|
+
const includeRevoked = flags['include-revoked'] !== undefined;
|
|
130
|
+
const list = store.list().filter(r => includeRevoked || r.revokedAt === undefined);
|
|
131
|
+
// Strip the hash from listing output — consumers never need to see it.
|
|
132
|
+
const sanitized = list.map(r => { const { hash, ...rest } = r; void hash; return rest; });
|
|
133
|
+
console.log(JSON.stringify(sanitized, null, 2));
|
|
134
|
+
}
|
|
135
|
+
function cmdShow(store, args) {
|
|
136
|
+
const flags = parseFlags(args);
|
|
137
|
+
const id = flags['id'];
|
|
138
|
+
if (!id) {
|
|
139
|
+
console.error('Usage: maad auth show-token --id=<tok-xxx>');
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
const record = store.lookupById(tokenId(id));
|
|
143
|
+
if (!record) {
|
|
144
|
+
console.error(`show-token: TOKEN_NOT_FOUND: No token with id ${id}`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
const { hash, ...rest } = record;
|
|
148
|
+
void hash;
|
|
149
|
+
console.log(JSON.stringify(rest, null, 2));
|
|
150
|
+
}
|
|
151
|
+
// --- Helpers ---------------------------------------------------------------
|
|
152
|
+
async function openStore(instancePath) {
|
|
153
|
+
if (!instancePath) {
|
|
154
|
+
console.error('auth commands require --instance <path> (or MAAD_INSTANCE env)');
|
|
155
|
+
console.error('Legacy --project single-project mode has no token registry.');
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
// Validate the instance file exists + is parseable; we don't need the instance
|
|
159
|
+
// itself but want a clean error if the operator pointed at a wrong path.
|
|
160
|
+
const instance = await loadInstance(instancePath);
|
|
161
|
+
if (!instance.ok) {
|
|
162
|
+
console.error('Failed to load instance:');
|
|
163
|
+
for (const e of instance.errors)
|
|
164
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
const instanceRoot = path.dirname(path.resolve(instancePath));
|
|
168
|
+
const loaded = await TokenStore.load(instanceRoot);
|
|
169
|
+
if (!loaded.ok) {
|
|
170
|
+
console.error('Failed to load token registry:');
|
|
171
|
+
for (const e of loaded.errors)
|
|
172
|
+
console.error(` ${e.code}: ${e.message}`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
return loaded.value;
|
|
176
|
+
}
|
|
177
|
+
function parseFlags(args) {
|
|
178
|
+
const out = {};
|
|
179
|
+
for (let i = 0; i < args.length; i++) {
|
|
180
|
+
const a = args[i];
|
|
181
|
+
if (a.startsWith('--')) {
|
|
182
|
+
const eq = a.indexOf('=');
|
|
183
|
+
if (eq > 0) {
|
|
184
|
+
const key = a.slice(2, eq);
|
|
185
|
+
const val = a.slice(eq + 1);
|
|
186
|
+
out[key] = val;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const key = a.slice(2);
|
|
190
|
+
const next = args[i + 1];
|
|
191
|
+
if (next !== undefined && !next.startsWith('--')) {
|
|
192
|
+
out[key] = next;
|
|
193
|
+
i++;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
out[key] = '';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return out;
|
|
202
|
+
}
|
|
203
|
+
function parseProjects(raw) {
|
|
204
|
+
return raw.split(',').map(s => s.trim()).filter(Boolean).map(entry => {
|
|
205
|
+
// Support per-project role syntax: `proj-a:reader`
|
|
206
|
+
const colon = entry.indexOf(':');
|
|
207
|
+
if (colon > 0) {
|
|
208
|
+
const name = entry.slice(0, colon);
|
|
209
|
+
const role = entry.slice(colon + 1);
|
|
210
|
+
if (role !== 'reader' && role !== 'writer' && role !== 'admin') {
|
|
211
|
+
console.error(`Invalid per-project role "${role}" in --projects; expected reader|writer|admin`);
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
return { name, role: role };
|
|
215
|
+
}
|
|
216
|
+
return { name: entry };
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
function printAuthHelp() {
|
|
220
|
+
console.error(`maad auth — token registry operations
|
|
221
|
+
|
|
222
|
+
Subcommands:
|
|
223
|
+
issue-token --role=... --projects=... [--name] [--agent] [--user] [--expires]
|
|
224
|
+
revoke-token --id=tok-...
|
|
225
|
+
rotate-token --id=tok-...
|
|
226
|
+
list-tokens [--include-revoked]
|
|
227
|
+
show-token --id=tok-...
|
|
228
|
+
|
|
229
|
+
All commands require --instance <path> (or MAAD_INSTANCE env) pointing at the
|
|
230
|
+
instance config. Registry lives at <instance-root>/_auth/tokens.yaml.
|
|
231
|
+
|
|
232
|
+
Examples:
|
|
233
|
+
maad --instance /etc/maad/instance.yaml auth issue-token \\
|
|
234
|
+
--role=admin --name='brain-app-gateway' --projects='*' --agent=agt-brain-app
|
|
235
|
+
|
|
236
|
+
maad --instance /etc/maad/instance.yaml auth issue-token \\
|
|
237
|
+
--role=writer --projects='proj-a,proj-b:reader' --agent=agt-scoped
|
|
238
|
+
|
|
239
|
+
maad --instance /etc/maad/instance.yaml auth rotate-token --id=tok-abc123
|
|
240
|
+
`);
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CliContext } from '../helpers.js';
|
|
2
|
+
export declare function cmdScan(ctx: CliContext): Promise<void>;
|
|
3
|
+
export declare function cmdSummary(ctx: CliContext): Promise<void>;
|
|
4
|
+
export declare function cmdDescribe(ctx: CliContext): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5D;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Discover commands — scan, summary, describe
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { scanFile, scanDirectory } from '../../scanner.js';
|
|
6
|
+
import { initEngine } from '../helpers.js';
|
|
7
|
+
export async function cmdScan(ctx) {
|
|
8
|
+
const target = ctx.args[1];
|
|
9
|
+
if (!target) {
|
|
10
|
+
console.error('Usage: maad scan <file.md|directory>');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const absTarget = path.resolve(target);
|
|
14
|
+
const { statSync } = await import('node:fs');
|
|
15
|
+
let stat;
|
|
16
|
+
try {
|
|
17
|
+
stat = statSync(absTarget);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
console.error(`Not found: ${absTarget}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
if (stat.isFile()) {
|
|
24
|
+
const result = await scanFile(absTarget);
|
|
25
|
+
console.log(JSON.stringify(result, null, 2));
|
|
26
|
+
}
|
|
27
|
+
else if (stat.isDirectory()) {
|
|
28
|
+
const result = await scanDirectory(absTarget);
|
|
29
|
+
console.log(JSON.stringify(result, null, 2));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.error('Target must be a file or directory');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function cmdSummary(ctx) {
|
|
37
|
+
const engine = await initEngine(ctx);
|
|
38
|
+
const result = engine.summary();
|
|
39
|
+
console.log(JSON.stringify(result, null, 2));
|
|
40
|
+
engine.close();
|
|
41
|
+
}
|
|
42
|
+
export async function cmdDescribe(ctx) {
|
|
43
|
+
const engine = await initEngine(ctx);
|
|
44
|
+
const desc = engine.describe();
|
|
45
|
+
console.log(JSON.stringify(desc, null, 2));
|
|
46
|
+
engine.close();
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAE/E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAe;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAe;IAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAe;IAC/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CliContext } from '../helpers.js';
|
|
2
|
+
export declare function cmdInit(ctx: CliContext): Promise<void>;
|
|
3
|
+
export declare function cmdValidate(ctx: CliContext): Promise<void>;
|
|
4
|
+
export declare function cmdReindex(ctx: CliContext): Promise<void>;
|
|
5
|
+
export declare function cmdParse(ctx: CliContext): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=maintain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/maintain.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD5D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD/D;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC7D"}
|