@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,296 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// MAAD CLI — Command dispatch
|
|
4
|
+
// ============================================================================
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { cmdScan, cmdSummary, cmdDescribe } from './commands/discover.js';
|
|
8
|
+
import { cmdGet, cmdQuery, cmdSearch, cmdRelated, cmdSchema } from './commands/read.js';
|
|
9
|
+
import { cmdCreate, cmdUpdate } from './commands/write.js';
|
|
10
|
+
import { cmdInit, cmdValidate, cmdReindex, cmdParse } from './commands/maintain.js';
|
|
11
|
+
import { cmdHistory, cmdAudit } from './commands/audit.js';
|
|
12
|
+
import { cmdAuth } from './commands/auth.js';
|
|
13
|
+
import { startServer } from '../mcp/server.js';
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = path.dirname(__filename);
|
|
16
|
+
// Parse --project / --instance flags (env vars MAAD_PROJECT / MAAD_INSTANCE as fallbacks).
|
|
17
|
+
// --project and --instance are mutually exclusive. If neither is supplied, `serve` errors out;
|
|
18
|
+
// other commands still default --project to cwd for backward compatibility.
|
|
19
|
+
const rawArgs = process.argv.slice(2);
|
|
20
|
+
let projectRoot = process.env['MAAD_PROJECT'];
|
|
21
|
+
let instancePath = process.env['MAAD_INSTANCE'];
|
|
22
|
+
const args = [];
|
|
23
|
+
for (let i = 0; i < rawArgs.length; i++) {
|
|
24
|
+
if (rawArgs[i] === '--project' && rawArgs[i + 1]) {
|
|
25
|
+
projectRoot = rawArgs[i + 1];
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
else if (rawArgs[i] === '--instance' && rawArgs[i + 1]) {
|
|
29
|
+
instancePath = rawArgs[i + 1];
|
|
30
|
+
i++;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
args.push(rawArgs[i]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (projectRoot && instancePath) {
|
|
37
|
+
console.error('Error: --project and --instance are mutually exclusive.');
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// Non-serve commands still need a default project when neither flag is set.
|
|
41
|
+
if (!projectRoot && !instancePath)
|
|
42
|
+
projectRoot = '.';
|
|
43
|
+
const ctx = { args, projectRoot: projectRoot ?? '.', __dirname };
|
|
44
|
+
const command = args[0];
|
|
45
|
+
async function main() {
|
|
46
|
+
switch (command) {
|
|
47
|
+
// Discover
|
|
48
|
+
case 'scan':
|
|
49
|
+
await cmdScan(ctx);
|
|
50
|
+
break;
|
|
51
|
+
case 'summary':
|
|
52
|
+
await cmdSummary(ctx);
|
|
53
|
+
break;
|
|
54
|
+
case 'describe':
|
|
55
|
+
await cmdDescribe(ctx);
|
|
56
|
+
break;
|
|
57
|
+
// Read
|
|
58
|
+
case 'get':
|
|
59
|
+
await cmdGet(ctx);
|
|
60
|
+
break;
|
|
61
|
+
case 'query':
|
|
62
|
+
await cmdQuery(ctx);
|
|
63
|
+
break;
|
|
64
|
+
case 'search':
|
|
65
|
+
await cmdSearch(ctx);
|
|
66
|
+
break;
|
|
67
|
+
case 'related':
|
|
68
|
+
await cmdRelated(ctx);
|
|
69
|
+
break;
|
|
70
|
+
case 'schema':
|
|
71
|
+
await cmdSchema(ctx);
|
|
72
|
+
break;
|
|
73
|
+
// Write
|
|
74
|
+
case 'create':
|
|
75
|
+
await cmdCreate(ctx);
|
|
76
|
+
break;
|
|
77
|
+
case 'update':
|
|
78
|
+
await cmdUpdate(ctx);
|
|
79
|
+
break;
|
|
80
|
+
// Maintain
|
|
81
|
+
case 'init':
|
|
82
|
+
await cmdInit(ctx);
|
|
83
|
+
break;
|
|
84
|
+
case 'validate':
|
|
85
|
+
await cmdValidate(ctx);
|
|
86
|
+
break;
|
|
87
|
+
case 'reindex':
|
|
88
|
+
await cmdReindex(ctx);
|
|
89
|
+
break;
|
|
90
|
+
case 'parse':
|
|
91
|
+
await cmdParse(ctx);
|
|
92
|
+
break;
|
|
93
|
+
// Audit
|
|
94
|
+
case 'history':
|
|
95
|
+
await cmdHistory(ctx);
|
|
96
|
+
break;
|
|
97
|
+
case 'audit':
|
|
98
|
+
await cmdAudit(ctx);
|
|
99
|
+
break;
|
|
100
|
+
// Auth (0.7.0)
|
|
101
|
+
case 'auth':
|
|
102
|
+
await cmdAuth({ instancePath, args });
|
|
103
|
+
break;
|
|
104
|
+
// MCP
|
|
105
|
+
case 'serve':
|
|
106
|
+
await cmdServe();
|
|
107
|
+
break;
|
|
108
|
+
case 'help':
|
|
109
|
+
case '--help':
|
|
110
|
+
case '-h':
|
|
111
|
+
case undefined:
|
|
112
|
+
printHelp();
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
console.error(`Unknown command: ${command}`);
|
|
116
|
+
printHelp();
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function parseIntEnv(val, fallback) {
|
|
121
|
+
if (val === undefined || val === '')
|
|
122
|
+
return fallback;
|
|
123
|
+
const n = Number.parseInt(val, 10);
|
|
124
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
125
|
+
}
|
|
126
|
+
async function cmdServe() {
|
|
127
|
+
let role = process.env['MAAD_ROLE'];
|
|
128
|
+
let dryRun = false;
|
|
129
|
+
let provenance = process.env['MAAD_PROV'];
|
|
130
|
+
let transport = process.env['MAAD_TRANSPORT'] ?? 'stdio';
|
|
131
|
+
let httpHost = process.env['MAAD_HTTP_HOST'] ?? '127.0.0.1';
|
|
132
|
+
let httpPort = parseIntEnv(process.env['MAAD_HTTP_PORT'], 7733);
|
|
133
|
+
let httpMaxBody = parseIntEnv(process.env['MAAD_HTTP_MAX_BODY'], 1_048_576);
|
|
134
|
+
let headersTimeoutMs = parseIntEnv(process.env['MAAD_HTTP_HEADERS_TIMEOUT_MS'], 10_000);
|
|
135
|
+
let requestTimeoutMs = parseIntEnv(process.env['MAAD_HTTP_REQUEST_TIMEOUT_MS'], 60_000);
|
|
136
|
+
let keepAliveTimeoutMs = parseIntEnv(process.env['MAAD_HTTP_KEEPALIVE_TIMEOUT_MS'], 5_000);
|
|
137
|
+
let idleMs = parseIntEnv(process.env['MAAD_SESSION_IDLE_MS'], 1_800_000);
|
|
138
|
+
let trustProxy = process.env['MAAD_TRUST_PROXY'] === '1' || process.env['MAAD_TRUST_PROXY'] === 'true';
|
|
139
|
+
let authToken = process.env['MAAD_AUTH_TOKEN'];
|
|
140
|
+
// 0.7.5 (fup-2026-148) — Unix-socket transport
|
|
141
|
+
let socketPath = process.env['MAAD_UNIX_SOCKET'];
|
|
142
|
+
let socketMode = (() => {
|
|
143
|
+
const raw = process.env['MAAD_UNIX_SOCKET_MODE'];
|
|
144
|
+
if (!raw)
|
|
145
|
+
return undefined;
|
|
146
|
+
const n = Number.parseInt(raw, 8);
|
|
147
|
+
return Number.isFinite(n) && n > 0 ? n : undefined;
|
|
148
|
+
})();
|
|
149
|
+
for (let i = 0; i < args.length; i++) {
|
|
150
|
+
const a = args[i];
|
|
151
|
+
const next = args[i + 1];
|
|
152
|
+
if (a === '--role' && next)
|
|
153
|
+
role = next;
|
|
154
|
+
else if (a === '--dry-run')
|
|
155
|
+
dryRun = true;
|
|
156
|
+
else if (a === '--prov' && next)
|
|
157
|
+
provenance = next;
|
|
158
|
+
else if (a === '--transport' && next)
|
|
159
|
+
transport = next;
|
|
160
|
+
else if (a === '--http-host' && next)
|
|
161
|
+
httpHost = next;
|
|
162
|
+
else if (a === '--http-port' && next)
|
|
163
|
+
httpPort = parseIntEnv(next, httpPort);
|
|
164
|
+
else if (a === '--http-max-body' && next)
|
|
165
|
+
httpMaxBody = parseIntEnv(next, httpMaxBody);
|
|
166
|
+
else if (a === '--http-headers-timeout' && next)
|
|
167
|
+
headersTimeoutMs = parseIntEnv(next, headersTimeoutMs);
|
|
168
|
+
else if (a === '--http-request-timeout' && next)
|
|
169
|
+
requestTimeoutMs = parseIntEnv(next, requestTimeoutMs);
|
|
170
|
+
else if (a === '--http-keepalive-timeout' && next)
|
|
171
|
+
keepAliveTimeoutMs = parseIntEnv(next, keepAliveTimeoutMs);
|
|
172
|
+
else if (a === '--session-idle-ms' && next)
|
|
173
|
+
idleMs = parseIntEnv(next, idleMs);
|
|
174
|
+
else if (a === '--trust-proxy')
|
|
175
|
+
trustProxy = true;
|
|
176
|
+
else if (a === '--auth-token' && next)
|
|
177
|
+
authToken = next;
|
|
178
|
+
else if (a === '--unix-socket' && next)
|
|
179
|
+
socketPath = next;
|
|
180
|
+
else if (a === '--unix-socket-mode' && next) {
|
|
181
|
+
const n = Number.parseInt(next, 8);
|
|
182
|
+
if (Number.isFinite(n) && n > 0)
|
|
183
|
+
socketMode = n;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (transport !== 'stdio' && transport !== 'http' && transport !== 'unix') {
|
|
187
|
+
console.error(`Error: --transport must be 'stdio', 'http', or 'unix' (got '${transport}')`);
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
if (transport === 'unix' && (!socketPath || socketPath.length === 0)) {
|
|
191
|
+
console.error("Error: --transport unix requires --unix-socket=<path> or MAAD_UNIX_SOCKET env");
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
// 0.7.0 — HTTP boot-mode enforcement moved to server.ts (needs TokenStore).
|
|
195
|
+
// CLI just passes authToken through; server validates via checkHttpAuthAtBoot.
|
|
196
|
+
const base = {
|
|
197
|
+
role,
|
|
198
|
+
dryRun,
|
|
199
|
+
provenance,
|
|
200
|
+
transport,
|
|
201
|
+
...(transport === 'http' || transport === 'unix' ? {
|
|
202
|
+
http: {
|
|
203
|
+
host: httpHost,
|
|
204
|
+
port: httpPort,
|
|
205
|
+
maxBodyBytes: httpMaxBody,
|
|
206
|
+
headersTimeoutMs,
|
|
207
|
+
requestTimeoutMs,
|
|
208
|
+
keepAliveTimeoutMs,
|
|
209
|
+
trustProxy,
|
|
210
|
+
idleMs,
|
|
211
|
+
authToken,
|
|
212
|
+
...(transport === 'unix' ? { socketPath, socketMode } : {}),
|
|
213
|
+
},
|
|
214
|
+
} : {}),
|
|
215
|
+
};
|
|
216
|
+
if (instancePath) {
|
|
217
|
+
await startServer({ ...base, instancePath: path.resolve(instancePath) });
|
|
218
|
+
}
|
|
219
|
+
else if (projectRoot) {
|
|
220
|
+
await startServer({ ...base, projectRoot: path.resolve(projectRoot) });
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
console.error('Error: `serve` requires --project <dir> or --instance <path>.');
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function printHelp() {
|
|
228
|
+
console.log(`
|
|
229
|
+
MAAD — Markdown As A Database
|
|
230
|
+
|
|
231
|
+
Usage: maad <command> [options]
|
|
232
|
+
|
|
233
|
+
Commands:
|
|
234
|
+
init [dir] Initialize a new MAAD project
|
|
235
|
+
scan <file.md|dir> Analyze raw markdown (no registry needed)
|
|
236
|
+
summary Project snapshot (types, counts, sample IDs, object inventory)
|
|
237
|
+
describe Show project overview
|
|
238
|
+
get <doc_id> [depth] [block] Read a document (hot/warm/cold/full)
|
|
239
|
+
query <type> [--filter k=v] Find documents by type and filters
|
|
240
|
+
search <primitive> [opts] Search extracted objects (--subtype, --value, --contains, --doc)
|
|
241
|
+
related <doc_id> [direction] Show related documents
|
|
242
|
+
schema <type> Show field definitions for a type (for writes)
|
|
243
|
+
create <type> --field k=v [...] Create a new document
|
|
244
|
+
update <doc_id> --field k=v [...] Update a document's fields or body
|
|
245
|
+
validate [doc_id] Validate one or all documents
|
|
246
|
+
reindex [--force] Rebuild the index from markdown
|
|
247
|
+
parse <file.md> Parse a file and print the result
|
|
248
|
+
history <doc_id> Show git history for a document
|
|
249
|
+
audit [--since date] Show project-wide activity
|
|
250
|
+
serve [--transport stdio|http] [--role ...] [--prov ...] Start MCP server
|
|
251
|
+
|
|
252
|
+
Options:
|
|
253
|
+
--project <dir> Single-project mode (default for CLI cmds: cwd)
|
|
254
|
+
--instance <path> Multi-project mode: path to instance.yaml (serve only)
|
|
255
|
+
--role <role> MCP server role in single-project mode (default: reader)
|
|
256
|
+
--force Force full reindex (skip hash check)
|
|
257
|
+
--help Show this help
|
|
258
|
+
|
|
259
|
+
serve HTTP options (when --transport http or --transport unix):
|
|
260
|
+
--transport <stdio|http|unix> Transport selection (default: stdio)
|
|
261
|
+
--http-host <host> Bind address for http (default: 127.0.0.1)
|
|
262
|
+
--http-port <port> Bind port for http (default: 7733)
|
|
263
|
+
--unix-socket <path> Unix socket path (required for unix transport)
|
|
264
|
+
--unix-socket-mode <octal> Socket file mode (default: 660)
|
|
265
|
+
--auth-token <token> Bearer token (required for http/unix; prefer MAAD_AUTH_TOKEN env)
|
|
266
|
+
--http-max-body <bytes> Max request body bytes (default: 1048576)
|
|
267
|
+
--http-headers-timeout <ms> node:http headersTimeout (default: 10000)
|
|
268
|
+
--http-request-timeout <ms> node:http requestTimeout (default: 60000)
|
|
269
|
+
--http-keepalive-timeout <ms> node:http keepAliveTimeout (default: 5000)
|
|
270
|
+
--session-idle-ms <ms> Per-session idle eviction threshold (default: 1800000 = 30 min)
|
|
271
|
+
--trust-proxy Use X-Forwarded-For first hop for remote IP in logs (http only)
|
|
272
|
+
|
|
273
|
+
Environment Variables:
|
|
274
|
+
MAAD_PROJECT Project root (fallback for --project)
|
|
275
|
+
MAAD_INSTANCE Path to instance.yaml (fallback for --instance)
|
|
276
|
+
MAAD_ROLE Server role (fallback for --role)
|
|
277
|
+
MAAD_PROV Provenance mode (fallback for --prov)
|
|
278
|
+
MAAD_TRANSPORT stdio | http | unix (default: stdio)
|
|
279
|
+
MAAD_HTTP_HOST HTTP bind host (default: 127.0.0.1)
|
|
280
|
+
MAAD_HTTP_PORT HTTP bind port (default: 7733)
|
|
281
|
+
MAAD_UNIX_SOCKET Unix socket path (required when MAAD_TRANSPORT=unix)
|
|
282
|
+
MAAD_UNIX_SOCKET_MODE Socket file mode in octal (default: 660)
|
|
283
|
+
MAAD_AUTH_TOKEN Bearer token for HTTP/UDS transport (required)
|
|
284
|
+
MAAD_SESSION_IDLE_MS Per-session idle eviction threshold (default: 1800000)
|
|
285
|
+
MAAD_HTTP_MAX_BODY HTTP max body bytes (default: 1048576)
|
|
286
|
+
MAAD_HTTP_HEADERS_TIMEOUT_MS headersTimeout ms (default: 10000)
|
|
287
|
+
MAAD_HTTP_REQUEST_TIMEOUT_MS requestTimeout ms (default: 60000)
|
|
288
|
+
MAAD_HTTP_KEEPALIVE_TIMEOUT_MS keepAliveTimeout ms (default: 5000)
|
|
289
|
+
MAAD_TRUST_PROXY 1|true to trust X-Forwarded-For (default: false)
|
|
290
|
+
`);
|
|
291
|
+
}
|
|
292
|
+
main().catch(e => {
|
|
293
|
+
console.error(e);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
});
|
|
296
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,OAAO,gBAAgB,CAAC"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Re-export from cli/ directory.
|
|
4
|
+
// All code lives in src/cli/*.ts — this file is the entry point passthrough.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import './cli/index.js';
|
|
7
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,+EAA+E;AAC/E,iCAAiC;AACjC,6EAA6E;AAC7E,+EAA+E;AAE/E,OAAO,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Result } from '../errors.js';
|
|
2
|
+
import { type DocId, type DocType, type ParsedCommit, type AuditEntry, type DiffResult, type SnapshotResult } from '../types.js';
|
|
3
|
+
import type { EngineContext } from './context.js';
|
|
4
|
+
export declare function history(ctx: EngineContext, id: DocId, opts?: {
|
|
5
|
+
limit?: number;
|
|
6
|
+
since?: string;
|
|
7
|
+
}): Promise<Result<ParsedCommit[]>>;
|
|
8
|
+
export declare function diff(ctx: EngineContext, id: DocId, from: string, to?: string): Promise<Result<DiffResult>>;
|
|
9
|
+
export declare function snapshot(ctx: EngineContext, id: DocId, at: string): Promise<Result<SnapshotResult>>;
|
|
10
|
+
export declare function audit(ctx: EngineContext, opts?: {
|
|
11
|
+
since?: string;
|
|
12
|
+
until?: string;
|
|
13
|
+
docType?: DocType;
|
|
14
|
+
}): Promise<Result<AuditEntry[]>>;
|
|
15
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/engine/audit.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,wBAAsB,OAAO,CAC3B,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,KAAK,EACT,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAQjC;AAED,wBAAsB,IAAI,CACxB,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,MAAM,EACZ,EAAE,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAS7B;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CASjC;AAED,wBAAsB,KAAK,CACzB,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAK/B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Audit — history, diff, snapshot, audit (git-backed)
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { ok, singleErr } from '../errors.js';
|
|
5
|
+
export async function history(ctx, id, opts) {
|
|
6
|
+
if (!ctx.gitLayer)
|
|
7
|
+
return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
|
|
8
|
+
const doc = ctx.backend.getDocument(id);
|
|
9
|
+
if (!doc)
|
|
10
|
+
return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
|
|
11
|
+
const commits = await ctx.gitLayer.history(doc.filePath, opts);
|
|
12
|
+
return ok(commits);
|
|
13
|
+
}
|
|
14
|
+
export async function diff(ctx, id, from, to) {
|
|
15
|
+
if (!ctx.gitLayer)
|
|
16
|
+
return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
|
|
17
|
+
const doc = ctx.backend.getDocument(id);
|
|
18
|
+
if (!doc)
|
|
19
|
+
return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
|
|
20
|
+
const result = await ctx.gitLayer.diff(doc.filePath, id, from, to);
|
|
21
|
+
if (!result)
|
|
22
|
+
return singleErr('GIT_ERROR', 'Failed to compute diff');
|
|
23
|
+
return ok(result);
|
|
24
|
+
}
|
|
25
|
+
export async function snapshot(ctx, id, at) {
|
|
26
|
+
if (!ctx.gitLayer)
|
|
27
|
+
return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
|
|
28
|
+
const doc = ctx.backend.getDocument(id);
|
|
29
|
+
if (!doc)
|
|
30
|
+
return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
|
|
31
|
+
const result = await ctx.gitLayer.snapshot(doc.filePath, id, at);
|
|
32
|
+
if (!result)
|
|
33
|
+
return singleErr('GIT_ERROR', 'Failed to retrieve snapshot');
|
|
34
|
+
return ok(result);
|
|
35
|
+
}
|
|
36
|
+
export async function audit(ctx, opts) {
|
|
37
|
+
if (!ctx.gitLayer)
|
|
38
|
+
return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
|
|
39
|
+
const entries = await ctx.gitLayer.audit(opts);
|
|
40
|
+
return ok(entries);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/engine/audit.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAI/E,OAAO,EAAE,EAAE,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAY1D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAkB,EAClB,EAAS,EACT,IAAyC;IAEzC,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAY,aAAa,CAAC,CAAC;IAErF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAkB,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,GAAkB,EAClB,EAAS,EACT,IAAY,EACZ,EAAW;IAEX,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAY,aAAa,CAAC,CAAC;IAErF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IACrE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAkB,EAClB,EAAS,EACT,EAAU;IAEV,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAY,aAAa,CAAC,CAAC;IAErF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAkB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,GAAkB,EAClB,IAA4D;IAE5D,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Result } from '../errors.js';
|
|
2
|
+
import type { EngineContext } from './context.js';
|
|
3
|
+
import type { BackupTag, CreateBackupOptions, ListBackupsOptions } from './types.js';
|
|
4
|
+
export declare function createBackup(ctx: EngineContext, opts?: CreateBackupOptions): Promise<Result<BackupTag>>;
|
|
5
|
+
export declare function listBackups(ctx: EngineContext, opts?: ListBackupsOptions): Promise<Result<BackupTag[]>>;
|
|
6
|
+
export declare function deleteBackup(ctx: EngineContext, tag: string): Promise<Result<{
|
|
7
|
+
removed: string;
|
|
8
|
+
}>>;
|
|
9
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/engine/backup.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA+BrF,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAwC5B;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAiB9B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkBtC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// 0.7.10 — maad_backup: named recovery anchors via annotated git tags.
|
|
3
|
+
//
|
|
4
|
+
// Three operations:
|
|
5
|
+
// createBackup — annotated tag on HEAD with structured name
|
|
6
|
+
// listBackups — every maad-snapshot-* tag with sha + message + createdAt
|
|
7
|
+
// deleteBackup — drop a maad-snapshot-* tag (refuses other tags)
|
|
8
|
+
//
|
|
9
|
+
// Pure git operations on the project repo. No SQLite reads, no schema lookups,
|
|
10
|
+
// no engine_meta writes (that stamp comes with Step 9 / maad_health).
|
|
11
|
+
// ============================================================================
|
|
12
|
+
import { ok, singleErr } from '../errors.js';
|
|
13
|
+
const MAAD_SNAPSHOT_PREFIX = 'maad-snapshot-';
|
|
14
|
+
const LABEL_MAX_LEN = 32;
|
|
15
|
+
/**
|
|
16
|
+
* Sanitize an operator-supplied label: trim, lowercase, replace runs of
|
|
17
|
+
* non-[a-z0-9-] chars with a single -, strip leading/trailing hyphens,
|
|
18
|
+
* cap at LABEL_MAX_LEN. Returns null when the result is empty.
|
|
19
|
+
*/
|
|
20
|
+
function sanitizeLabel(raw) {
|
|
21
|
+
const sanitized = raw
|
|
22
|
+
.trim()
|
|
23
|
+
.toLowerCase()
|
|
24
|
+
.replace(/[^a-z0-9-]+/g, '-')
|
|
25
|
+
.replace(/^-+|-+$/g, '')
|
|
26
|
+
.slice(0, LABEL_MAX_LEN)
|
|
27
|
+
.replace(/^-+|-+$/g, '');
|
|
28
|
+
return sanitized.length > 0 ? sanitized : null;
|
|
29
|
+
}
|
|
30
|
+
function formatTagName(now, label) {
|
|
31
|
+
const yyyy = now.getUTCFullYear();
|
|
32
|
+
const mm = String(now.getUTCMonth() + 1).padStart(2, '0');
|
|
33
|
+
const dd = String(now.getUTCDate()).padStart(2, '0');
|
|
34
|
+
const hh = String(now.getUTCHours()).padStart(2, '0');
|
|
35
|
+
const mn = String(now.getUTCMinutes()).padStart(2, '0');
|
|
36
|
+
const base = `${MAAD_SNAPSHOT_PREFIX}${yyyy}-${mm}-${dd}-${hh}${mn}`;
|
|
37
|
+
return label ? `${base}-${label}` : base;
|
|
38
|
+
}
|
|
39
|
+
export async function createBackup(ctx, opts = {}) {
|
|
40
|
+
if (!ctx.gitLayer) {
|
|
41
|
+
return singleErr('GIT_NOT_INITIALIZED', 'Project has no git repository');
|
|
42
|
+
}
|
|
43
|
+
const head = await ctx.gitLayer.headSha();
|
|
44
|
+
if (!head) {
|
|
45
|
+
return singleErr('NO_HEAD_COMMIT', 'Repository has no commits yet — nothing to snapshot');
|
|
46
|
+
}
|
|
47
|
+
let label = null;
|
|
48
|
+
if (opts.label !== undefined && opts.label !== '') {
|
|
49
|
+
label = sanitizeLabel(opts.label);
|
|
50
|
+
if (label === null) {
|
|
51
|
+
return singleErr('INVALID_FIELDS', `Label "${opts.label}" sanitizes to an empty string — use [a-z0-9-] chars`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const tagName = formatTagName(new Date(), label);
|
|
55
|
+
// Collision check — refuse to overwrite an existing tag of the same name.
|
|
56
|
+
const existing = await ctx.gitLayer.listTagsByPrefix(tagName);
|
|
57
|
+
if (existing.some(t => t.tag === tagName)) {
|
|
58
|
+
return singleErr('TAG_EXISTS', `Snapshot "${tagName}" already exists`);
|
|
59
|
+
}
|
|
60
|
+
const branch = await ctx.gitLayer.currentBranch();
|
|
61
|
+
const message = opts.message ?? `MAADB snapshot at ${head} ('${branch}')`;
|
|
62
|
+
await ctx.gitLayer.addAnnotatedTag(tagName, message);
|
|
63
|
+
return ok({
|
|
64
|
+
tag: tagName,
|
|
65
|
+
sha: head,
|
|
66
|
+
message,
|
|
67
|
+
createdAt: new Date().toISOString(),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
export async function listBackups(ctx, opts = {}) {
|
|
71
|
+
if (!ctx.gitLayer)
|
|
72
|
+
return ok([]);
|
|
73
|
+
const all = await ctx.gitLayer.listTagsByPrefix(MAAD_SNAPSHOT_PREFIX);
|
|
74
|
+
if (opts.since !== undefined) {
|
|
75
|
+
const sinceMs = Date.parse(opts.since);
|
|
76
|
+
if (Number.isNaN(sinceMs)) {
|
|
77
|
+
return singleErr('INVALID_FIELDS', `since is not a valid ISO8601 date: "${opts.since}"`);
|
|
78
|
+
}
|
|
79
|
+
return ok(all.filter(t => {
|
|
80
|
+
const tagMs = Date.parse(t.createdAt);
|
|
81
|
+
return !Number.isNaN(tagMs) && tagMs >= sinceMs;
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
return ok(all);
|
|
85
|
+
}
|
|
86
|
+
export async function deleteBackup(ctx, tag) {
|
|
87
|
+
if (!ctx.gitLayer) {
|
|
88
|
+
return singleErr('GIT_NOT_INITIALIZED', 'Project has no git repository');
|
|
89
|
+
}
|
|
90
|
+
if (!tag.startsWith(MAAD_SNAPSHOT_PREFIX)) {
|
|
91
|
+
return singleErr('INVALID_FIELDS', `maad_backup delete only removes ${MAAD_SNAPSHOT_PREFIX}* tags — got "${tag}"`);
|
|
92
|
+
}
|
|
93
|
+
const existing = await ctx.gitLayer.listTagsByPrefix(tag);
|
|
94
|
+
if (!existing.some(t => t.tag === tag)) {
|
|
95
|
+
return singleErr('TAG_NOT_FOUND', `Tag "${tag}" does not exist`);
|
|
96
|
+
}
|
|
97
|
+
await ctx.gitLayer.deleteTag(tag);
|
|
98
|
+
return ok({ removed: tag });
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/engine/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Result } from '../errors.js';
|
|
2
|
+
import { type DocId } from '../types.js';
|
|
3
|
+
import type { EngineContext } from './context.js';
|
|
4
|
+
import type { GetFullResult } from './types.js';
|
|
5
|
+
export declare function getDocumentFull(ctx: EngineContext, id: DocId): Promise<Result<GetFullResult>>;
|
|
6
|
+
//# sourceMappingURL=composites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composites.d.ts","sourceRoot":"","sources":["../../src/engine/composites.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAEL,KAAK,KAAK,EACX,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAsB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CA+FnG"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Composites — Tier 2 deterministic bundled reads (provisional)
|
|
3
|
+
// Evaluate after MCP: keep only if they measurably reduce tool chatter.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
import { ok, singleErr } from '../errors.js';
|
|
6
|
+
import { docId as toDocId, } from '../types.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import { readFrontmatter } from './helpers.js';
|
|
9
|
+
export async function getDocumentFull(ctx, id) {
|
|
10
|
+
const doc = ctx.backend.getDocument(id);
|
|
11
|
+
if (!doc)
|
|
12
|
+
return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
|
|
13
|
+
const frontmatter = await readFrontmatter(ctx.projectRoot, doc);
|
|
14
|
+
// Resolve ref fields to names
|
|
15
|
+
const schema = ctx.schemaStore.getSchemaForType(doc.docType);
|
|
16
|
+
const resolvedRefs = {};
|
|
17
|
+
if (schema) {
|
|
18
|
+
for (const [fieldName, fieldDef] of schema.fields) {
|
|
19
|
+
if (fieldDef.type === 'ref' && frontmatter[fieldName]) {
|
|
20
|
+
const targetId = String(frontmatter[fieldName]);
|
|
21
|
+
const targetDoc = ctx.backend.getDocument(toDocId(targetId));
|
|
22
|
+
if (targetDoc) {
|
|
23
|
+
const targetFm = await readFrontmatter(ctx.projectRoot, targetDoc);
|
|
24
|
+
resolvedRefs[fieldName] = {
|
|
25
|
+
docId: targetId,
|
|
26
|
+
name: String(targetFm['name'] ?? targetFm['title'] ?? targetId),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const objects = ctx.backend.findObjects({ docId: id, limit: 50 });
|
|
33
|
+
const rels = ctx.backend.getRelationships(id, 'both');
|
|
34
|
+
// Batch lookup all related doc IDs
|
|
35
|
+
const relatedIds = new Set();
|
|
36
|
+
for (const rel of rels) {
|
|
37
|
+
if (rel.sourceDocId === id)
|
|
38
|
+
relatedIds.add(rel.targetDocId);
|
|
39
|
+
else
|
|
40
|
+
relatedIds.add(rel.sourceDocId);
|
|
41
|
+
}
|
|
42
|
+
const docsMap = ctx.backend.getDocumentsByIds([...relatedIds]);
|
|
43
|
+
const outgoing = [];
|
|
44
|
+
const incoming = [];
|
|
45
|
+
for (const rel of rels) {
|
|
46
|
+
if (rel.sourceDocId === id) {
|
|
47
|
+
const target = docsMap.get(rel.targetDocId);
|
|
48
|
+
outgoing.push({
|
|
49
|
+
docId: rel.targetDocId,
|
|
50
|
+
docType: (target?.docType ?? 'unknown'),
|
|
51
|
+
field: rel.field,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const source = docsMap.get(rel.sourceDocId);
|
|
56
|
+
incoming.push({
|
|
57
|
+
docId: rel.sourceDocId,
|
|
58
|
+
docType: (source?.docType ?? 'unknown'),
|
|
59
|
+
field: rel.field,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Latest incoming note
|
|
64
|
+
let latestNote = null;
|
|
65
|
+
if (ctx.gitLayer) {
|
|
66
|
+
for (const inc of incoming) {
|
|
67
|
+
const incDoc = docsMap.get(toDocId(inc.docId));
|
|
68
|
+
if (!incDoc)
|
|
69
|
+
continue;
|
|
70
|
+
if (!(inc.docType.includes('note')))
|
|
71
|
+
continue;
|
|
72
|
+
try {
|
|
73
|
+
const history = await ctx.gitLayer.history(incDoc.filePath, { limit: 1 });
|
|
74
|
+
if (history.length > 0) {
|
|
75
|
+
const entry = history[0];
|
|
76
|
+
if (!latestNote || entry.timestamp > latestNote.timestamp) {
|
|
77
|
+
latestNote = {
|
|
78
|
+
docId: inc.docId,
|
|
79
|
+
summary: entry.summary,
|
|
80
|
+
timestamp: entry.timestamp,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
logger.bestEffort('composites', 'getDocumentFull.latestNote', `Git history lookup failed for ${inc.docId}`, { error: e instanceof Error ? e.message : String(e) });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return ok({
|
|
91
|
+
docId: doc.docId,
|
|
92
|
+
docType: doc.docType,
|
|
93
|
+
version: doc.version,
|
|
94
|
+
updatedAt: doc.updatedAt,
|
|
95
|
+
frontmatter,
|
|
96
|
+
resolvedRefs,
|
|
97
|
+
objects,
|
|
98
|
+
related: { outgoing, incoming },
|
|
99
|
+
latestNote,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=composites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composites.js","sourceRoot":"","sources":["../../src/engine/composites.ts"],"names":[],"mappings":"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"}
|