@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
package/dist/git/log.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Git Log Parser
|
|
3
|
+
// Queries git history and parses structured MAAD commit messages.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
import { parseCommitMessage } from './commit.js';
|
|
6
|
+
import { logger } from '../engine/logger.js';
|
|
7
|
+
import { docId as toDocId, docType as toDocType, commitSha as toCommitSha, } from '../types.js';
|
|
8
|
+
// Git --since="2026-04-08" excludes commits from that day.
|
|
9
|
+
// Appending T00:00:00 makes it inclusive of the specified date.
|
|
10
|
+
function normalizeDateArg(value) {
|
|
11
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
12
|
+
return `${value}T00:00:00`;
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
export async function getHistory(git, filePath, opts) {
|
|
16
|
+
const args = ['--follow', '--format=%H|%an|%aI|%s'];
|
|
17
|
+
if (opts?.limit)
|
|
18
|
+
args.push(`-n`, String(opts.limit));
|
|
19
|
+
if (opts?.since)
|
|
20
|
+
args.push(`--since=${normalizeDateArg(opts.since)}`);
|
|
21
|
+
args.push('--', filePath);
|
|
22
|
+
let logOutput;
|
|
23
|
+
try {
|
|
24
|
+
logOutput = await git.raw(['log', ...args]);
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
logger.bestEffort('git', 'history', `Git log failed for ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
if (!logOutput.trim())
|
|
31
|
+
return [];
|
|
32
|
+
const commits = [];
|
|
33
|
+
for (const line of logOutput.trim().split('\n')) {
|
|
34
|
+
const parts = line.split('|');
|
|
35
|
+
if (parts.length < 4)
|
|
36
|
+
continue;
|
|
37
|
+
const sha = parts[0];
|
|
38
|
+
const author = parts[1];
|
|
39
|
+
const timestamp = parts[2];
|
|
40
|
+
const subject = parts.slice(3).join('|'); // subject may contain |
|
|
41
|
+
const parsed = parseCommitMessage(subject);
|
|
42
|
+
if (!parsed)
|
|
43
|
+
continue; // skip non-MAAD commits
|
|
44
|
+
commits.push({
|
|
45
|
+
action: parsed.action,
|
|
46
|
+
docId: toDocId(parsed.docId),
|
|
47
|
+
docType: toDocType(parsed.docType),
|
|
48
|
+
detail: parsed.detail,
|
|
49
|
+
summary: parsed.summary,
|
|
50
|
+
sha: toCommitSha(sha),
|
|
51
|
+
author,
|
|
52
|
+
timestamp,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return commits;
|
|
56
|
+
}
|
|
57
|
+
export async function getAudit(git, opts) {
|
|
58
|
+
const args = ['--format=%H|%an|%aI|%s'];
|
|
59
|
+
if (opts?.since)
|
|
60
|
+
args.push(`--since=${normalizeDateArg(opts.since)}`);
|
|
61
|
+
if (opts?.until)
|
|
62
|
+
args.push(`--until=${normalizeDateArg(opts.until)}`);
|
|
63
|
+
let logOutput;
|
|
64
|
+
try {
|
|
65
|
+
logOutput = await git.raw(['log', ...args]);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
logger.bestEffort('git', 'audit', `Git log failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
if (!logOutput.trim())
|
|
72
|
+
return [];
|
|
73
|
+
// Aggregate by docId
|
|
74
|
+
const byDoc = new Map();
|
|
75
|
+
for (const line of logOutput.trim().split('\n')) {
|
|
76
|
+
const parts = line.split('|');
|
|
77
|
+
if (parts.length < 4)
|
|
78
|
+
continue;
|
|
79
|
+
const author = parts[1];
|
|
80
|
+
const timestamp = parts[2];
|
|
81
|
+
const subject = parts.slice(3).join('|');
|
|
82
|
+
const parsed = parseCommitMessage(subject);
|
|
83
|
+
if (!parsed)
|
|
84
|
+
continue;
|
|
85
|
+
// Apply filters
|
|
86
|
+
if (opts?.docType && parsed.docType !== opts.docType)
|
|
87
|
+
continue;
|
|
88
|
+
if (opts?.action && parsed.action !== opts.action)
|
|
89
|
+
continue;
|
|
90
|
+
const existing = byDoc.get(parsed.docId);
|
|
91
|
+
if (existing) {
|
|
92
|
+
existing.actions++;
|
|
93
|
+
// Keep the most recent (first in git log, which is newest)
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
byDoc.set(parsed.docId, {
|
|
97
|
+
docType: parsed.docType,
|
|
98
|
+
actions: 1,
|
|
99
|
+
lastAction: parsed.action,
|
|
100
|
+
lastSummary: parsed.summary,
|
|
101
|
+
lastAuthor: author,
|
|
102
|
+
lastTimestamp: timestamp,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return [...byDoc.entries()].map(([id, data]) => ({
|
|
107
|
+
docId: toDocId(id),
|
|
108
|
+
docType: toDocType(data.docType),
|
|
109
|
+
actions: data.actions,
|
|
110
|
+
lastAction: data.lastAction,
|
|
111
|
+
lastSummary: data.lastSummary,
|
|
112
|
+
lastAuthor: data.lastAuthor,
|
|
113
|
+
lastTimestamp: data.lastTimestamp,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/git/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SimpleGit } from 'simple-git';
|
|
2
|
+
import { type DocId, type SnapshotResult } from '../types.js';
|
|
3
|
+
export declare function getSnapshot(git: SimpleGit, filePath: string, docId: DocId, at: string): Promise<SnapshotResult | null>;
|
|
4
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/git/snapshot.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAEL,KAAK,KAAK,EAEV,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB,wBAAsB,WAAW,CAC/B,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAuDhC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Git Snapshot Reader
|
|
3
|
+
// Reads a document as it existed at a specific commit or date.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
import { parseMatter } from '../parser/matter.js';
|
|
6
|
+
import { commitSha as toCommitSha, } from '../types.js';
|
|
7
|
+
export async function getSnapshot(git, filePath, docId, at) {
|
|
8
|
+
// Resolve 'at' to a commit SHA
|
|
9
|
+
let sha;
|
|
10
|
+
let timestamp;
|
|
11
|
+
if (/^[0-9a-f]{6,40}$/i.test(at)) {
|
|
12
|
+
// Already a SHA
|
|
13
|
+
sha = at;
|
|
14
|
+
try {
|
|
15
|
+
const info = await git.raw(['log', '-1', '--format=%aI', sha]);
|
|
16
|
+
timestamp = info.trim();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Treat as a date — find the last commit before that date
|
|
24
|
+
try {
|
|
25
|
+
const result = await git.raw([
|
|
26
|
+
'log', '-1', `--before=${at}`, '--format=%H|%aI', '--', filePath,
|
|
27
|
+
]);
|
|
28
|
+
if (!result.trim())
|
|
29
|
+
return null;
|
|
30
|
+
const parts = result.trim().split('|');
|
|
31
|
+
sha = parts[0];
|
|
32
|
+
timestamp = parts[1];
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Read file content at that commit
|
|
39
|
+
let content;
|
|
40
|
+
try {
|
|
41
|
+
content = await git.show(`${sha}:${filePath}`);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
// Parse frontmatter and body
|
|
47
|
+
let frontmatter = {};
|
|
48
|
+
let body = content;
|
|
49
|
+
try {
|
|
50
|
+
const parsed = parseMatter(content);
|
|
51
|
+
frontmatter = parsed.data;
|
|
52
|
+
body = parsed.content.trim();
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// If parsing fails, return raw content as body
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
docId,
|
|
59
|
+
commit: toCommitSha(sha),
|
|
60
|
+
timestamp,
|
|
61
|
+
frontmatter,
|
|
62
|
+
body,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/git/snapshot.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sBAAsB;AACtB,+DAA+D;AAC/D,+EAA+E;AAG/E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,SAAS,IAAI,WAAW,GAIzB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAc,EACd,QAAgB,EAChB,KAAY,EACZ,EAAU;IAEV,+BAA+B;IAC/B,IAAI,GAAW,CAAC;IAChB,IAAI,SAAiB,CAAC;IAEtB,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,gBAAgB;QAChB,GAAG,GAAG,EAAE,CAAC;QACT,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/D,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,CAAC;QACN,0DAA0D;QAC1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC;gBAC3B,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ;aACjE,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAAE,OAAO,IAAI,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAChB,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,IAAI,WAAW,GAA4B,EAAE,CAAC;IAC9C,IAAI,IAAI,GAAG,OAAO,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,WAAW,GAAG,MAAM,CAAC,IAA+B,CAAC;QACrD,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,OAAO;QACL,KAAK;QACL,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC;QACxB,SAAS;QACT,WAAW;QACX,IAAI;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Result } from '../errors.js';
|
|
2
|
+
import { type Role } from '../mcp/roles.js';
|
|
3
|
+
export interface ProjectConfig {
|
|
4
|
+
name: string;
|
|
5
|
+
path: string;
|
|
6
|
+
role: Role;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface InstanceConfig {
|
|
10
|
+
name: string;
|
|
11
|
+
projects: ProjectConfig[];
|
|
12
|
+
source: 'file' | 'synthetic';
|
|
13
|
+
configPath?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function loadInstance(configPath: string): Promise<Result<InstanceConfig>>;
|
|
16
|
+
export declare function validateInstance(data: Record<string, unknown>, configPath?: string): Result<InstanceConfig>;
|
|
17
|
+
export declare function synthesizeLegacyInstance(projectPath: string, role: Role): InstanceConfig;
|
|
18
|
+
export declare function getProject(instance: InstanceConfig, name: string): ProjectConfig | undefined;
|
|
19
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/instance/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CA4BtF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,CAuD3G;AAKD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,cAAc,CAQxF;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE5F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Instance Config — loads and validates instance.yaml
|
|
3
|
+
//
|
|
4
|
+
// An Instance declares a set of projects that one MCP server serves.
|
|
5
|
+
// Real instance.yaml is loaded from disk. A "synthetic" instance wraps a
|
|
6
|
+
// single --project path so the legacy CLI path flows through the same code.
|
|
7
|
+
// ============================================================================
|
|
8
|
+
import { readFile } from 'node:fs/promises';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import { parseMatter } from '../parser/matter.js';
|
|
12
|
+
import { ok, err, singleErr, maadError } from '../errors.js';
|
|
13
|
+
import { parseRole } from '../mcp/roles.js';
|
|
14
|
+
const VALID_PROJECT_NAME = /^[a-z][a-z0-9_-]*$/;
|
|
15
|
+
export async function loadInstance(configPath) {
|
|
16
|
+
const resolved = path.resolve(configPath);
|
|
17
|
+
if (!existsSync(resolved)) {
|
|
18
|
+
return singleErr('INSTANCE_CONFIG_NOT_FOUND', `Instance config not found: ${resolved}`);
|
|
19
|
+
}
|
|
20
|
+
let raw;
|
|
21
|
+
try {
|
|
22
|
+
raw = await readFile(resolved, 'utf-8');
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
const message = e instanceof Error ? e.message : 'Unknown read error';
|
|
26
|
+
return singleErr('FILE_READ_ERROR', `Failed to read instance config: ${message}`);
|
|
27
|
+
}
|
|
28
|
+
let data;
|
|
29
|
+
try {
|
|
30
|
+
if (raw.trimStart().startsWith('---')) {
|
|
31
|
+
data = parseMatter(raw).data;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
data = parseMatter(`---\n${raw}\n---`).data;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
const message = e instanceof Error ? e.message : 'Unknown parse error';
|
|
39
|
+
return singleErr('PARSE_ERROR', `Failed to parse instance YAML: ${message}`);
|
|
40
|
+
}
|
|
41
|
+
return validateInstance(data, resolved);
|
|
42
|
+
}
|
|
43
|
+
export function validateInstance(data, configPath) {
|
|
44
|
+
const errors = [];
|
|
45
|
+
const configDir = configPath ? path.dirname(configPath) : process.cwd();
|
|
46
|
+
if (typeof data.name !== 'string' || data.name.length === 0) {
|
|
47
|
+
errors.push(maadError('INSTANCE_CONFIG_INVALID', 'instance.name is required and must be a non-empty string'));
|
|
48
|
+
}
|
|
49
|
+
const name = typeof data.name === 'string' ? data.name : '';
|
|
50
|
+
if (!Array.isArray(data.projects) || data.projects.length === 0) {
|
|
51
|
+
errors.push(maadError('INSTANCE_CONFIG_INVALID', 'instance.projects must be a non-empty array'));
|
|
52
|
+
return err(errors);
|
|
53
|
+
}
|
|
54
|
+
const projects = [];
|
|
55
|
+
const seenNames = new Set();
|
|
56
|
+
for (let i = 0; i < data.projects.length; i++) {
|
|
57
|
+
const raw = data.projects[i];
|
|
58
|
+
const where = `projects[${i}]`;
|
|
59
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
60
|
+
errors.push(maadError('INSTANCE_CONFIG_INVALID', `${where} must be an object`));
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const pname = raw.name;
|
|
64
|
+
if (typeof pname !== 'string' || !VALID_PROJECT_NAME.test(pname)) {
|
|
65
|
+
errors.push(maadError('INSTANCE_CONFIG_INVALID', `${where}.name must match /^[a-z][a-z0-9_-]*$/ (got ${JSON.stringify(pname)})`));
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (seenNames.has(pname)) {
|
|
69
|
+
errors.push(maadError('INSTANCE_CONFIG_INVALID', `${where}.name "${pname}" is duplicated`));
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
seenNames.add(pname);
|
|
73
|
+
const ppath = raw.path;
|
|
74
|
+
if (typeof ppath !== 'string' || ppath.length === 0) {
|
|
75
|
+
errors.push(maadError('INSTANCE_CONFIG_INVALID', `${where}.path is required`));
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const absPath = path.isAbsolute(ppath) ? ppath : path.resolve(configDir, ppath);
|
|
79
|
+
const role = parseRole(typeof raw.role === 'string' ? raw.role : undefined);
|
|
80
|
+
const project = { name: pname, path: absPath, role };
|
|
81
|
+
if (typeof raw.description === 'string')
|
|
82
|
+
project.description = raw.description;
|
|
83
|
+
projects.push(project);
|
|
84
|
+
}
|
|
85
|
+
if (errors.length > 0)
|
|
86
|
+
return err(errors);
|
|
87
|
+
const result = { name, projects, source: 'file' };
|
|
88
|
+
if (configPath)
|
|
89
|
+
result.configPath = configPath;
|
|
90
|
+
return ok(result);
|
|
91
|
+
}
|
|
92
|
+
// Synthetic single-project instance for legacy --project path.
|
|
93
|
+
// Wraps a raw project path + role into the same InstanceConfig shape so
|
|
94
|
+
// downstream code (pool, session) does not need two paths.
|
|
95
|
+
export function synthesizeLegacyInstance(projectPath, role) {
|
|
96
|
+
const absPath = path.resolve(projectPath);
|
|
97
|
+
const basename = path.basename(absPath).toLowerCase().replace(/[^a-z0-9_-]/g, '-') || 'default';
|
|
98
|
+
return {
|
|
99
|
+
name: `${basename}-legacy`,
|
|
100
|
+
projects: [{ name: 'default', path: absPath, role }],
|
|
101
|
+
source: 'synthetic',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function getProject(instance, name) {
|
|
105
|
+
return instance.projects.find((p) => p.name === name);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/instance/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { MaadEngine } from '../engine/index.js';
|
|
2
|
+
import { type Result } from '../errors.js';
|
|
3
|
+
import type { InstanceConfig, ProjectConfig } from './config.js';
|
|
4
|
+
export interface InstanceDiff {
|
|
5
|
+
added: string[];
|
|
6
|
+
removed: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface InstanceReloadStats {
|
|
9
|
+
lastReloadAt: Date | null;
|
|
10
|
+
reloadsAttempted: number;
|
|
11
|
+
reloadsSucceeded: number;
|
|
12
|
+
reloadsFailed: number;
|
|
13
|
+
projectsAdded: number;
|
|
14
|
+
projectsRemoved: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 0.7.3 (fup-2026-150) — Idle-timeout eviction Stage 1.
|
|
18
|
+
*
|
|
19
|
+
* Tracks last-touched-at + in-flight refcount per loaded engine. A background
|
|
20
|
+
* sweeper closes engines that have been idle longer than the configured
|
|
21
|
+
* timeout AND have zero in-flight ops. Caps memory growth in multi-tenant
|
|
22
|
+
* deployments where projects are touched once and never again.
|
|
23
|
+
*
|
|
24
|
+
* Stage 2 (LRU + hard cap) is fup-2026-151 — gated on Stage 1 evidence.
|
|
25
|
+
*/
|
|
26
|
+
export interface EvictionStats {
|
|
27
|
+
evictionsTotal: number;
|
|
28
|
+
lastEvictionAt: Date | null;
|
|
29
|
+
lastEvictionProjects: string[];
|
|
30
|
+
sweepsRun: number;
|
|
31
|
+
lastSweepAt: Date | null;
|
|
32
|
+
}
|
|
33
|
+
export interface IdleSweepConfig {
|
|
34
|
+
/** Idle timeout threshold in ms. 0 disables eviction (just tracks touch times). */
|
|
35
|
+
idleTimeoutMs: number;
|
|
36
|
+
/** Sweep interval in ms. */
|
|
37
|
+
sweepIntervalMs: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class EnginePool {
|
|
40
|
+
private instance;
|
|
41
|
+
private engines;
|
|
42
|
+
private initPromises;
|
|
43
|
+
private reloadInFlight;
|
|
44
|
+
private stats;
|
|
45
|
+
private lastTouchedAt;
|
|
46
|
+
private refcount;
|
|
47
|
+
private sweepHandle;
|
|
48
|
+
private sweepConfig;
|
|
49
|
+
private evictionStats;
|
|
50
|
+
private nowFn;
|
|
51
|
+
constructor(instance: InstanceConfig);
|
|
52
|
+
/** Test seam — override the time source so sweeper logic is testable. */
|
|
53
|
+
setNowFn(fn: () => number): void;
|
|
54
|
+
getInstance(): InstanceConfig;
|
|
55
|
+
listProjects(): ProjectConfig[];
|
|
56
|
+
has(name: string): boolean;
|
|
57
|
+
reloadStats(): InstanceReloadStats;
|
|
58
|
+
get(name: string): Promise<Result<MaadEngine>>;
|
|
59
|
+
/**
|
|
60
|
+
* 0.7.3 — In-flight refcount. Caller increments before invoking the
|
|
61
|
+
* handler, decrements in finally. The idle sweeper refuses to evict any
|
|
62
|
+
* project with refcount > 0.
|
|
63
|
+
*/
|
|
64
|
+
acquire(name: string): void;
|
|
65
|
+
release(name: string): void;
|
|
66
|
+
refcountFor(name: string): number;
|
|
67
|
+
lastTouchedFor(name: string): number | null;
|
|
68
|
+
private initEngine;
|
|
69
|
+
evict(name: string): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* 0.7.3 — Idle eviction sweep. Returns the names of projects evicted in
|
|
72
|
+
* this sweep. Skips projects with refcount > 0 (in-flight ops) and any
|
|
73
|
+
* project whose lastTouchedAt is missing (defensive — would mean it's not
|
|
74
|
+
* actually loaded). idleTimeoutMs=0 is a no-op (eviction disabled).
|
|
75
|
+
*/
|
|
76
|
+
evictIdle(idleTimeoutMs: number): Promise<string[]>;
|
|
77
|
+
/**
|
|
78
|
+
* 0.7.3 — Start the background idle sweeper. Idempotent — calling twice
|
|
79
|
+
* replaces the existing schedule. Use stopIdleSweeper() during shutdown.
|
|
80
|
+
* Sweep timer is unref()'d so it never blocks process exit.
|
|
81
|
+
*/
|
|
82
|
+
startIdleSweeper(config: IdleSweepConfig): void;
|
|
83
|
+
stopIdleSweeper(): void;
|
|
84
|
+
evictionStatsSnapshot(): EvictionStats;
|
|
85
|
+
idleSweepConfig(): IdleSweepConfig | null;
|
|
86
|
+
static readIdleSweepEnv(env?: NodeJS.ProcessEnv): IdleSweepConfig;
|
|
87
|
+
closeAll(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Sum of `writeQueueDepth()` across every initialized engine. Used by the
|
|
90
|
+
* shutdown drain loop to know when it's safe to exit. Uninitialized engines
|
|
91
|
+
* contribute 0 and are not lazy-initialized.
|
|
92
|
+
*/
|
|
93
|
+
totalWriteQueueDepth(): number;
|
|
94
|
+
/**
|
|
95
|
+
* Atomic reload slot — acquired before any I/O (config parse), released
|
|
96
|
+
* after diff + stats are recorded. The orchestrator in
|
|
97
|
+
* `src/mcp/instance-reload.ts` holds this for the lifetime of the reload
|
|
98
|
+
* so concurrent callers fail fast with INSTANCE_RELOAD_IN_PROGRESS instead
|
|
99
|
+
* of racing to swap the instance ref.
|
|
100
|
+
*
|
|
101
|
+
* Returns false if a reload is already in progress or the instance is
|
|
102
|
+
* synthetic (tested separately so the error code can be distinguished).
|
|
103
|
+
*/
|
|
104
|
+
tryBeginReload(): {
|
|
105
|
+
ok: true;
|
|
106
|
+
} | {
|
|
107
|
+
ok: false;
|
|
108
|
+
code: 'INSTANCE_RELOAD_SYNTHETIC' | 'INSTANCE_RELOAD_IN_PROGRESS';
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Release the reload slot. Called by the orchestrator in a `finally` so
|
|
112
|
+
* success + failure paths both land here. Updates the success/failure
|
|
113
|
+
* counters + project-diff stats.
|
|
114
|
+
*/
|
|
115
|
+
endReload(outcome: {
|
|
116
|
+
ok: true;
|
|
117
|
+
diff: InstanceDiff;
|
|
118
|
+
} | {
|
|
119
|
+
ok: false;
|
|
120
|
+
}): void;
|
|
121
|
+
/**
|
|
122
|
+
* Apply a parsed instance config: detect mutations (fail-fast, no partial),
|
|
123
|
+
* evict engines for removed projects, swap the internal instance ref.
|
|
124
|
+
* Must be called between `tryBeginReload` and `endReload` — does not manage
|
|
125
|
+
* the reload slot itself.
|
|
126
|
+
*
|
|
127
|
+
* Mutations (same name, different path or role) fail the whole reload with
|
|
128
|
+
* INSTANCE_MUTATION_UNSUPPORTED — no partial apply. The 0.9.0 eviction
|
|
129
|
+
* policy unlocks safe in-place project mutations.
|
|
130
|
+
*/
|
|
131
|
+
applyDiff(newInstance: InstanceConfig): Promise<Result<InstanceDiff>>;
|
|
132
|
+
/**
|
|
133
|
+
* Swap the instance config without diff/eviction. Used by the reload
|
|
134
|
+
* orchestrator if it needs to keep downstream refs in sync, or by tests.
|
|
135
|
+
*/
|
|
136
|
+
setInstance(newInstance: InstanceConfig): void;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/instance/pool.ts"],"names":[],"mappings":"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"}
|