@lsctech/polaris 0.1.0
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/README.md +87 -0
- package/dist/__mocks__/tool-server-linear.js +34 -0
- package/dist/cli/adopt-approve.js +60 -0
- package/dist/cli/adopt-cognition.js +199 -0
- package/dist/cli/adopt-instructions.js +143 -0
- package/dist/cli/adopt-rules.js +169 -0
- package/dist/cli/adopt-scan.js +25 -0
- package/dist/cli/adopt-smartdocs.js +192 -0
- package/dist/cli/adoption-inventory.js +350 -0
- package/dist/cli/adoption-plan.js +222 -0
- package/dist/cli/args.js +28 -0
- package/dist/cli/args.test.js +30 -0
- package/dist/cli/branding.js +41 -0
- package/dist/cli/graph.js +358 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/index.test.js +162 -0
- package/dist/cli/init-detect.js +61 -0
- package/dist/cli/init.js +492 -0
- package/dist/cli/init.test.js +259 -0
- package/dist/cli/librarian.js +32 -0
- package/dist/cli/medic.js +96 -0
- package/dist/cli/startup.test.js +23 -0
- package/dist/cli/tracker.js +130 -0
- package/dist/cli/tracker.test.js +126 -0
- package/dist/cli/version.js +10 -0
- package/dist/cli/version.test.js +11 -0
- package/dist/cli/worker.js +287 -0
- package/dist/cluster-state/fixtures/test-clusters.json +19 -0
- package/dist/cluster-state/store.js +302 -0
- package/dist/cluster-state/store.test.js +145 -0
- package/dist/cluster-state/types.js +2 -0
- package/dist/cognition/archive.js +158 -0
- package/dist/cognition/closeout-librarian-types.js +161 -0
- package/dist/cognition/cognition.test.js +623 -0
- package/dist/cognition/index.js +41 -0
- package/dist/cognition/librarian-dispatch.js +391 -0
- package/dist/cognition/librarian-dispatch.test.js +247 -0
- package/dist/cognition/librarian-packet.js +313 -0
- package/dist/cognition/librarian-types.js +57 -0
- package/dist/cognition/route-cognition-delta.js +350 -0
- package/dist/cognition/summary-delta.js +279 -0
- package/dist/cognition/validate.js +162 -0
- package/dist/config/defaults.js +98 -0
- package/dist/config/doctor.js +273 -0
- package/dist/config/index.js +14 -0
- package/dist/config/loader.js +58 -0
- package/dist/config/provider-detect.js +60 -0
- package/dist/config/provider-detect.test.js +119 -0
- package/dist/config/schema.js +2 -0
- package/dist/config/show.js +44 -0
- package/dist/config/show.test.js +42 -0
- package/dist/config/validator.js +675 -0
- package/dist/config/validator.test.js +77 -0
- package/dist/docs/canon-check.js +334 -0
- package/dist/docs/canon-check.test.js +207 -0
- package/dist/docs/doctrine.js +133 -0
- package/dist/docs/doctrine.test.js +139 -0
- package/dist/docs/index.js +168 -0
- package/dist/docs/index.test.js +83 -0
- package/dist/docs/ingest.js +295 -0
- package/dist/docs/ingest.test.js +71 -0
- package/dist/docs/migrate.js +165 -0
- package/dist/docs/migrate.test.js +136 -0
- package/dist/docs/seed-instructions.js +147 -0
- package/dist/docs/seed-instructions.test.js +137 -0
- package/dist/docs/validate-instructions.js +267 -0
- package/dist/docs/validate-instructions.test.js +238 -0
- package/dist/finalize/artifact-policy.js +214 -0
- package/dist/finalize/artifact-policy.test.js +84 -0
- package/dist/finalize/delivery-integrity.js +141 -0
- package/dist/finalize/finalize.test.js +210 -0
- package/dist/finalize/github.js +41 -0
- package/dist/finalize/index.js +474 -0
- package/dist/finalize/linear.js +213 -0
- package/dist/finalize/run-report.js +47 -0
- package/dist/finalize/steps/01-map-update.js +11 -0
- package/dist/finalize/steps/02-map-validate.js +11 -0
- package/dist/finalize/steps/03-schema-validate.js +11 -0
- package/dist/finalize/steps/04-run-checks.js +118 -0
- package/dist/finalize/steps/05-generate-report.js +14 -0
- package/dist/finalize/steps/06-commit.js +39 -0
- package/dist/finalize/steps/07-push.js +10 -0
- package/dist/finalize/steps/08-create-pr.js +9 -0
- package/dist/finalize/steps/09-update-state.js +9 -0
- package/dist/finalize/steps/10-append-jsonl.js +23 -0
- package/dist/finalize/steps/11-update-linear.js +22 -0
- package/dist/finalize/steps/12-archive.js +21 -0
- package/dist/graph/adapter/c/adapter.js +45 -0
- package/dist/graph/adapter/c/extract.js +135 -0
- package/dist/graph/adapter/c/index.js +10 -0
- package/dist/graph/adapter/c/runtime.js +67 -0
- package/dist/graph/adapter/cpp/adapter.js +45 -0
- package/dist/graph/adapter/cpp/extract.js +159 -0
- package/dist/graph/adapter/cpp/index.js +10 -0
- package/dist/graph/adapter/cpp/runtime.js +61 -0
- package/dist/graph/adapter/csharp/adapter.js +45 -0
- package/dist/graph/adapter/csharp/extract.js +127 -0
- package/dist/graph/adapter/csharp/index.js +10 -0
- package/dist/graph/adapter/csharp/runtime.js +61 -0
- package/dist/graph/adapter/dart/adapter.js +56 -0
- package/dist/graph/adapter/dart/extract.js +130 -0
- package/dist/graph/adapter/dart/index.js +10 -0
- package/dist/graph/adapter/dart/runtime.js +61 -0
- package/dist/graph/adapter/go/adapter.js +45 -0
- package/dist/graph/adapter/go/extract.js +112 -0
- package/dist/graph/adapter/go/index.js +10 -0
- package/dist/graph/adapter/go/runtime.js +58 -0
- package/dist/graph/adapter/kotlin-java/extract-common.js +83 -0
- package/dist/graph/adapter/kotlin-java/index.js +15 -0
- package/dist/graph/adapter/kotlin-java/java-adapter.js +45 -0
- package/dist/graph/adapter/kotlin-java/java-extract.js +42 -0
- package/dist/graph/adapter/kotlin-java/kotlin-adapter.js +48 -0
- package/dist/graph/adapter/kotlin-java/kotlin-extract.js +58 -0
- package/dist/graph/adapter/kotlin-java/runtime.js +75 -0
- package/dist/graph/adapter/python/adapter.js +45 -0
- package/dist/graph/adapter/python/extract.js +121 -0
- package/dist/graph/adapter/python/index.js +10 -0
- package/dist/graph/adapter/python/runtime.js +70 -0
- package/dist/graph/adapter/registry.js +82 -0
- package/dist/graph/adapter/rust/adapter.js +45 -0
- package/dist/graph/adapter/rust/extract.js +110 -0
- package/dist/graph/adapter/rust/index.js +10 -0
- package/dist/graph/adapter/rust/runtime.js +74 -0
- package/dist/graph/adapter/shell/adapter.js +34 -0
- package/dist/graph/adapter/shell/extract.js +98 -0
- package/dist/graph/adapter/shell/index.js +8 -0
- package/dist/graph/adapter/svelte/adapter.js +91 -0
- package/dist/graph/adapter/svelte/extract.js +41 -0
- package/dist/graph/adapter/svelte/index.js +8 -0
- package/dist/graph/adapter/swift/adapter.js +45 -0
- package/dist/graph/adapter/swift/extract.js +120 -0
- package/dist/graph/adapter/swift/index.js +10 -0
- package/dist/graph/adapter/swift/runtime.js +70 -0
- package/dist/graph/adapter/types.js +2 -0
- package/dist/graph/adapter/typescript-javascript/adapter.js +72 -0
- package/dist/graph/adapter/typescript-javascript/extract.js +115 -0
- package/dist/graph/adapter/typescript-javascript/index.js +10 -0
- package/dist/graph/adapter/typescript-javascript/runtime.js +97 -0
- package/dist/graph/capability/index.js +105 -0
- package/dist/graph/governance.js +104 -0
- package/dist/graph/parser/extract.js +5 -0
- package/dist/graph/parser/loader.js +2 -0
- package/dist/graph/parser/pipeline.js +194 -0
- package/dist/graph/query/index.js +277 -0
- package/dist/graph/query/types.js +5 -0
- package/dist/graph/resolver/build-edges.js +211 -0
- package/dist/graph/resolver/index.js +23 -0
- package/dist/graph/resolver/resolve-imports.js +168 -0
- package/dist/graph/store/adapter.js +132 -0
- package/dist/graph/store/queries.js +124 -0
- package/dist/graph/store/types.js +4 -0
- package/dist/ignore/defaults.js +41 -0
- package/dist/ignore/parser.js +39 -0
- package/dist/lint/map-reference-validator.js +72 -0
- package/dist/loop/abort.js +188 -0
- package/dist/loop/abort.test.js +151 -0
- package/dist/loop/adapters/__tests__/terminal-cli.test.js +92 -0
- package/dist/loop/adapters/agent-subtask.js +137 -0
- package/dist/loop/adapters/agent-subtask.test.js +151 -0
- package/dist/loop/adapters/cli-subtask-bridge.js +108 -0
- package/dist/loop/adapters/index.js +9 -0
- package/dist/loop/adapters/registry.js +17 -0
- package/dist/loop/adapters/terminal-cli.js +403 -0
- package/dist/loop/adapters/types.js +2 -0
- package/dist/loop/adapters/worker-instructions.js +85 -0
- package/dist/loop/body-parser.js +226 -0
- package/dist/loop/bootstrap-packet.js +97 -0
- package/dist/loop/bootstrap-packet.test.js +171 -0
- package/dist/loop/branch-governance.js +54 -0
- package/dist/loop/budget.js +63 -0
- package/dist/loop/budget.test.js +163 -0
- package/dist/loop/checkpoint.js +325 -0
- package/dist/loop/compact-return.js +59 -0
- package/dist/loop/continue.js +645 -0
- package/dist/loop/continue.test.js +337 -0
- package/dist/loop/dispatch-boundary.js +335 -0
- package/dist/loop/dispatch-state.js +223 -0
- package/dist/loop/dispatch-state.test.js +186 -0
- package/dist/loop/dispatch.js +1236 -0
- package/dist/loop/dispatch.test.js +499 -0
- package/dist/loop/ephemeral-smoke.test.js +160 -0
- package/dist/loop/evidence-backfill.js +216 -0
- package/dist/loop/execution-adapter.js +141 -0
- package/dist/loop/execution-adapter.test.js +66 -0
- package/dist/loop/finalize-evidence.js +169 -0
- package/dist/loop/git-custody.js +250 -0
- package/dist/loop/impl-packet-input.js +38 -0
- package/dist/loop/index.js +270 -0
- package/dist/loop/ledger.js +49 -0
- package/dist/loop/ledger.test.js +127 -0
- package/dist/loop/lifecycle-dispatch.js +348 -0
- package/dist/loop/lifecycle-dispatch.test.js +318 -0
- package/dist/loop/lifecycle.js +93 -0
- package/dist/loop/lifecycle.test.js +150 -0
- package/dist/loop/orphan-recovery.js +276 -0
- package/dist/loop/orphan-recovery.test.js +236 -0
- package/dist/loop/parent.js +1566 -0
- package/dist/loop/parent.test.js +738 -0
- package/dist/loop/provider-sealed-packet.test.js +164 -0
- package/dist/loop/resume.js +295 -0
- package/dist/loop/resume.test.js +172 -0
- package/dist/loop/run-bootstrap.js +234 -0
- package/dist/loop/run-preflight.js +203 -0
- package/dist/loop/status.js +665 -0
- package/dist/loop/status.test.js +235 -0
- package/dist/loop/wait.js +86 -0
- package/dist/loop/worker-packet.js +406 -0
- package/dist/loop/worker-packet.test.js +243 -0
- package/dist/loop/worker-prompt.js +260 -0
- package/dist/loop/worker-prompt.test.js +247 -0
- package/dist/loop/worker.js +498 -0
- package/dist/loop/worker.test.js +372 -0
- package/dist/map/atlas.js +77 -0
- package/dist/map/backfill.js +171 -0
- package/dist/map/backfill.test.js +120 -0
- package/dist/map/index.js +255 -0
- package/dist/map/inference.js +73 -0
- package/dist/map/inference.test.js +35 -0
- package/dist/map/query.js +157 -0
- package/dist/map/query.test.js +174 -0
- package/dist/map/update.js +355 -0
- package/dist/map/update.test.js +67 -0
- package/dist/map/validate.js +153 -0
- package/dist/map/validate.test.js +90 -0
- package/dist/map/welfare.js +86 -0
- package/dist/mcp/lib/invoke.js +35 -0
- package/dist/mcp/lib/redact.js +24 -0
- package/dist/mcp/lib/redact.test.js +112 -0
- package/dist/mcp/lib/root.js +41 -0
- package/dist/mcp/lib/root.test.js +114 -0
- package/dist/mcp/server.js +15 -0
- package/dist/mcp/tools/claim-child.js +119 -0
- package/dist/mcp/tools/claim-child.test.js +69 -0
- package/dist/mcp/tools/current-state.js +73 -0
- package/dist/mcp/tools/current-state.test.js +114 -0
- package/dist/mcp/tools/dispatch-result.js +186 -0
- package/dist/mcp/tools/dispatch-result.test.js +109 -0
- package/dist/mcp/tools/index.js +222 -0
- package/dist/mcp/tools/index.test.js +172 -0
- package/dist/mcp/tools/linear.js +74 -0
- package/dist/mcp/tools/loop-continue.js +159 -0
- package/dist/mcp/tools/loop-continue.test.js +186 -0
- package/dist/mcp/tools/loop-dry-run.js +15 -0
- package/dist/mcp/tools/status.js +65 -0
- package/dist/medic/chart-id.js +75 -0
- package/dist/medic/chart-schema.js +139 -0
- package/dist/runs/index.js +119 -0
- package/dist/runs/index.test.js +184 -0
- package/dist/runs/ledger-tail.js +15 -0
- package/dist/runs/list.js +29 -0
- package/dist/runs/reconcile.js +74 -0
- package/dist/runs/show.js +10 -0
- package/dist/runtime/audit/logger.js +15 -0
- package/dist/runtime/audit/reader.js +42 -0
- package/dist/runtime/checkpoint.js +89 -0
- package/dist/runtime/continuation/confirmed.js +225 -0
- package/dist/runtime/continuation/confirmed.test.js +421 -0
- package/dist/runtime/continuation/dry-run.js +74 -0
- package/dist/runtime/execution-window.js +106 -0
- package/dist/runtime/scheduling/child-selector.js +16 -0
- package/dist/runtime/state.js +43 -0
- package/dist/runtime/status.js +46 -0
- package/dist/runtime/verification/envelope.js +80 -0
- package/dist/runtime/verification/fingerprint.js +26 -0
- package/dist/skill-packet/cli.test.js +105 -0
- package/dist/skill-packet/generator.js +225 -0
- package/dist/skill-packet/generator.test.js +159 -0
- package/dist/skill-packet/index.js +49 -0
- package/dist/skill-packet/types.js +2 -0
- package/dist/smartdocs-engine/audit.js +194 -0
- package/dist/smartdocs-engine/audit.test.js +122 -0
- package/dist/smartdocs-engine/canon-check.js +340 -0
- package/dist/smartdocs-engine/canon-check.test.js +234 -0
- package/dist/smartdocs-engine/doctrine.js +633 -0
- package/dist/smartdocs-engine/doctrine.test.js +374 -0
- package/dist/smartdocs-engine/index.js +456 -0
- package/dist/smartdocs-engine/index.test.js +82 -0
- package/dist/smartdocs-engine/ingest.js +495 -0
- package/dist/smartdocs-engine/ingest.test.js +163 -0
- package/dist/smartdocs-engine/migrate.js +217 -0
- package/dist/smartdocs-engine/migrate.test.js +200 -0
- package/dist/smartdocs-engine/seed-instructions.js +335 -0
- package/dist/smartdocs-engine/seed-instructions.test.js +275 -0
- package/dist/smartdocs-engine/smartdoc-ignore.js +258 -0
- package/dist/smartdocs-engine/smartdoc-ignore.test.js +146 -0
- package/dist/smartdocs-engine/validate-instructions.js +366 -0
- package/dist/smartdocs-engine/validate-instructions.test.js +283 -0
- package/dist/tracker/adapters/github/index.js +305 -0
- package/dist/tracker/adapters/jira/index.js +293 -0
- package/dist/tracker/adapters/linear/http-errors.test.js +51 -0
- package/dist/tracker/adapters/linear/index.js +621 -0
- package/dist/tracker/adapters/linear/index.test.js +238 -0
- package/dist/tracker/adapters/linear.js +50 -0
- package/dist/tracker/adapters/local/index.js +10 -0
- package/dist/tracker/adapters/local-file/index.js +159 -0
- package/dist/tracker/adapters/mcp-bridge.js +158 -0
- package/dist/tracker/adapters/mcp-bridge.test.js +12 -0
- package/dist/tracker/adapters/spec/index.js +146 -0
- package/dist/tracker/capabilities.js +2 -0
- package/dist/tracker/index.js +49 -0
- package/dist/tracker/lifecycle-policy.js +139 -0
- package/dist/tracker/lifecycle-transition.js +164 -0
- package/dist/tracker/local-graph.js +98 -0
- package/dist/tracker/migration.js +56 -0
- package/dist/tracker/schema.js +86 -0
- package/dist/tracker/sync/index.js +404 -0
- package/dist/tracker/sync/queue-store.js +95 -0
- package/dist/tracker/sync/queue-store.test.js +104 -0
- package/dist/tracker/types.js +11 -0
- package/dist/types/linear.js +3 -0
- package/dist/types/result-packet.js +12 -0
- package/dist/types/runtime-state.js +2 -0
- package/dist/types/work-contract.js +2 -0
- package/dist/utils/monotonic-timestamp.js +13 -0
- package/dist/utils/monotonic-timestamp.test.js +19 -0
- package/package.json +64 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.POLARIS_RUNTIME_COGNITION_DIRS = exports.HIDDEN_SYSTEM_FOLDERS = exports.AGENT_COGNITION_FOLDERS = exports.RUNTIME_EXCLUDED_DIR_PATTERNS = exports.parseSmarDocIgnore = exports.DEFAULT_SMARTDOCIGNORE_PATTERNS = void 0;
|
|
7
|
+
exports.parseSmartDocIgnore = parseSmartDocIgnore;
|
|
8
|
+
exports.isIngestIneligible = isIngestIneligible;
|
|
9
|
+
exports.isDirectoryEligible = isDirectoryEligible;
|
|
10
|
+
const node_fs_1 = require("node:fs");
|
|
11
|
+
const node_path_1 = require("node:path");
|
|
12
|
+
const ignore_1 = __importDefault(require("ignore"));
|
|
13
|
+
exports.DEFAULT_SMARTDOCIGNORE_PATTERNS = [
|
|
14
|
+
".taskchain_artifacts/**",
|
|
15
|
+
".polaris/**",
|
|
16
|
+
".polaris/graph/**",
|
|
17
|
+
".codex/**",
|
|
18
|
+
".claude/**",
|
|
19
|
+
".github/**",
|
|
20
|
+
".windsurf/**",
|
|
21
|
+
".agents/**",
|
|
22
|
+
"smartdocs/doctrine/**",
|
|
23
|
+
"smartdocs/specs/active/**",
|
|
24
|
+
"smartdocs/specs/implemented/**",
|
|
25
|
+
"smartdocs/specs/superseded/**",
|
|
26
|
+
"smartdocs/architecture/**",
|
|
27
|
+
"smartdocs/decisions/**",
|
|
28
|
+
"smartdocs/audits/**",
|
|
29
|
+
"smartdocs/runtime/**",
|
|
30
|
+
"smartdocs/integrations/**",
|
|
31
|
+
"smartdocs/.obsidian/**",
|
|
32
|
+
"generated/**",
|
|
33
|
+
"**/generated/**",
|
|
34
|
+
"summaries/**",
|
|
35
|
+
"**/summaries/**",
|
|
36
|
+
"README.md",
|
|
37
|
+
"**/README.md",
|
|
38
|
+
"AGENTS.md",
|
|
39
|
+
"**/AGENTS.md",
|
|
40
|
+
"CLAUDE.md",
|
|
41
|
+
"**/CLAUDE.md",
|
|
42
|
+
"GEMINI.md",
|
|
43
|
+
"**/GEMINI.md",
|
|
44
|
+
"POLARIS.md",
|
|
45
|
+
"**/POLARIS.md",
|
|
46
|
+
"SUMMARY.md",
|
|
47
|
+
"**/SUMMARY.md",
|
|
48
|
+
"*.sqlite",
|
|
49
|
+
"*.db",
|
|
50
|
+
];
|
|
51
|
+
function toRepoRelativePath(filePath, repoRoot) {
|
|
52
|
+
const resolvedRoot = (0, node_path_1.resolve)(repoRoot);
|
|
53
|
+
const resolvedPath = (0, node_path_1.resolve)(resolvedRoot, filePath);
|
|
54
|
+
return (0, node_path_1.relative)(resolvedRoot, resolvedPath).replace(/\\/g, "/");
|
|
55
|
+
}
|
|
56
|
+
function parseSmartDocIgnore(repoRoot) {
|
|
57
|
+
const ig = (0, ignore_1.default)();
|
|
58
|
+
const ignorePath = (0, node_path_1.resolve)(repoRoot, ".smartdocignore");
|
|
59
|
+
if ((0, node_fs_1.existsSync)(ignorePath)) {
|
|
60
|
+
ig.add((0, node_fs_1.readFileSync)(ignorePath, "utf-8"));
|
|
61
|
+
}
|
|
62
|
+
ig.add(exports.DEFAULT_SMARTDOCIGNORE_PATTERNS);
|
|
63
|
+
return ig;
|
|
64
|
+
}
|
|
65
|
+
exports.parseSmarDocIgnore = parseSmartDocIgnore;
|
|
66
|
+
function isIngestIneligible(filePath, repoRoot) {
|
|
67
|
+
const relPath = toRepoRelativePath(filePath, repoRoot);
|
|
68
|
+
if (parseSmartDocIgnore(repoRoot).ignores(relPath)) {
|
|
69
|
+
return {
|
|
70
|
+
ineligible: true,
|
|
71
|
+
reason: `ignored by .smartdocignore/defaults: ${relPath}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return { ineligible: false };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Runtime/build artifact directories that are permanently excluded from Smart Docs.
|
|
78
|
+
* These are generated files, dependencies, or ephemeral runtime data.
|
|
79
|
+
*/
|
|
80
|
+
exports.RUNTIME_EXCLUDED_DIR_PATTERNS = [
|
|
81
|
+
"node_modules",
|
|
82
|
+
"dist",
|
|
83
|
+
"build",
|
|
84
|
+
"coverage",
|
|
85
|
+
".git",
|
|
86
|
+
".antigravitycli",
|
|
87
|
+
".taskchain_artifacts",
|
|
88
|
+
"generated",
|
|
89
|
+
"summaries",
|
|
90
|
+
"test-output",
|
|
91
|
+
"test_output",
|
|
92
|
+
"test-results",
|
|
93
|
+
"test_results",
|
|
94
|
+
"fixtures",
|
|
95
|
+
"fixture",
|
|
96
|
+
"__snapshots__",
|
|
97
|
+
"__fixtures__",
|
|
98
|
+
".turbo",
|
|
99
|
+
".next",
|
|
100
|
+
".nuxt",
|
|
101
|
+
".svelte-kit",
|
|
102
|
+
".vercel",
|
|
103
|
+
".netlify",
|
|
104
|
+
".cache",
|
|
105
|
+
".parcel-cache",
|
|
106
|
+
".webpack",
|
|
107
|
+
".rollup",
|
|
108
|
+
".vite",
|
|
109
|
+
".idea",
|
|
110
|
+
".vscode",
|
|
111
|
+
".nova",
|
|
112
|
+
];
|
|
113
|
+
/**
|
|
114
|
+
* Agent/runtime cognition folders that are temporarily excluded by default.
|
|
115
|
+
* These are not "junk" - they contain valid agent context, but are skipped
|
|
116
|
+
* to avoid noise in default seeding. Can be included via --include-agent-folders.
|
|
117
|
+
*/
|
|
118
|
+
exports.AGENT_COGNITION_FOLDERS = [
|
|
119
|
+
".codex",
|
|
120
|
+
".claude",
|
|
121
|
+
".agents",
|
|
122
|
+
];
|
|
123
|
+
/**
|
|
124
|
+
* Other hidden/system folders that are excluded by default.
|
|
125
|
+
* These are typically IDE/system folders, not agent cognition.
|
|
126
|
+
*/
|
|
127
|
+
exports.HIDDEN_SYSTEM_FOLDERS = [
|
|
128
|
+
".github",
|
|
129
|
+
".windsurf",
|
|
130
|
+
];
|
|
131
|
+
exports.POLARIS_RUNTIME_COGNITION_DIRS = [
|
|
132
|
+
".polaris",
|
|
133
|
+
".polaris/bootstrap",
|
|
134
|
+
".polaris/clusters",
|
|
135
|
+
".polaris/map",
|
|
136
|
+
".polaris/runs",
|
|
137
|
+
];
|
|
138
|
+
const POLARIS_RUNTIME_GENERATED_DIR_PREFIXES = [
|
|
139
|
+
".polaris/bootstrap/",
|
|
140
|
+
".polaris/clusters/",
|
|
141
|
+
".polaris/map/",
|
|
142
|
+
".polaris/runs/",
|
|
143
|
+
];
|
|
144
|
+
function getPolarisDirectoryEligibility(relPath, opts) {
|
|
145
|
+
if (exports.POLARIS_RUNTIME_COGNITION_DIRS.includes(relPath)) {
|
|
146
|
+
return { eligible: true, category: "eligible" };
|
|
147
|
+
}
|
|
148
|
+
for (const prefix of POLARIS_RUNTIME_GENERATED_DIR_PREFIXES) {
|
|
149
|
+
if (relPath.startsWith(prefix)) {
|
|
150
|
+
return {
|
|
151
|
+
eligible: false,
|
|
152
|
+
reason: `generated Polaris runtime directory excluded: ${relPath}`,
|
|
153
|
+
category: "runtime",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (relPath.startsWith(".polaris/")) {
|
|
158
|
+
if (opts.includeHidden) {
|
|
159
|
+
return { eligible: true, category: "eligible" };
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
eligible: false,
|
|
163
|
+
reason: `hidden Polaris directory (use --include-hidden to include): ${relPath}`,
|
|
164
|
+
category: "hidden",
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if a directory is eligible for Smart Docs coverage.
|
|
171
|
+
* Returns eligible: false for build artifacts, dependency folders, and ignored directories.
|
|
172
|
+
*/
|
|
173
|
+
function isDirectoryEligible(dirPath, repoRoot, opts = {}) {
|
|
174
|
+
const relPath = toRepoRelativePath(dirPath, repoRoot);
|
|
175
|
+
const dirName = relPath.split("/").pop() || relPath;
|
|
176
|
+
// Special handling for root directory
|
|
177
|
+
if (opts.isRoot) {
|
|
178
|
+
if (opts.skipRoot !== false) {
|
|
179
|
+
return {
|
|
180
|
+
eligible: false,
|
|
181
|
+
reason: "root skipped by default (use AGENTS.md/CLAUDE.md for root behavior; use --include-root to override)",
|
|
182
|
+
category: "root",
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return { eligible: true, category: "eligible" };
|
|
186
|
+
}
|
|
187
|
+
const polarisEligibility = getPolarisDirectoryEligibility(relPath, opts);
|
|
188
|
+
if (polarisEligibility) {
|
|
189
|
+
return polarisEligibility;
|
|
190
|
+
}
|
|
191
|
+
// Check against runtime/build artifact patterns (permanently excluded)
|
|
192
|
+
for (const pattern of exports.RUNTIME_EXCLUDED_DIR_PATTERNS) {
|
|
193
|
+
// Check if directory name matches exactly
|
|
194
|
+
if (dirName === pattern) {
|
|
195
|
+
return {
|
|
196
|
+
eligible: false,
|
|
197
|
+
reason: `runtime artifact excluded: ${pattern}`,
|
|
198
|
+
category: "runtime",
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
// Check if any path segment matches
|
|
202
|
+
if (relPath.includes(`/${pattern}/`) || relPath.startsWith(`${pattern}/`)) {
|
|
203
|
+
return {
|
|
204
|
+
eligible: false,
|
|
205
|
+
reason: `runtime artifact excluded: ${pattern}`,
|
|
206
|
+
category: "runtime",
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Check for agent cognition folders (temporarily excluded, can be opted-in)
|
|
211
|
+
for (const pattern of exports.AGENT_COGNITION_FOLDERS) {
|
|
212
|
+
if (dirName === pattern || relPath.includes(`/${pattern}/`) || relPath.startsWith(`${pattern}/`)) {
|
|
213
|
+
if (opts.includeAgentFolders) {
|
|
214
|
+
return { eligible: true, category: "eligible" };
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
eligible: false,
|
|
218
|
+
reason: `agent cognition folder temporarily skipped (use --include-agent-folders to include): ${pattern}`,
|
|
219
|
+
category: "agent-cognition",
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Check for hidden system folders (excluded unless --include-hidden)
|
|
224
|
+
for (const pattern of exports.HIDDEN_SYSTEM_FOLDERS) {
|
|
225
|
+
if (dirName === pattern || relPath.includes(`/${pattern}/`) || relPath.startsWith(`${pattern}/`)) {
|
|
226
|
+
if (opts.includeHidden) {
|
|
227
|
+
return { eligible: true, category: "eligible" };
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
eligible: false,
|
|
231
|
+
reason: `hidden system folder (use --include-hidden to include): ${pattern}`,
|
|
232
|
+
category: "hidden",
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Check if path is ignored by .smartdocignore
|
|
237
|
+
// Note: ignore library requires trailing slash to match directories
|
|
238
|
+
const ig = parseSmartDocIgnore(repoRoot);
|
|
239
|
+
if (ig.ignores(relPath) || ig.ignores(`${relPath}/`)) {
|
|
240
|
+
return {
|
|
241
|
+
eligible: false,
|
|
242
|
+
reason: `ignored by .smartdocignore: ${relPath}`,
|
|
243
|
+
category: "ignored",
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
// Other hidden directories (starting with .) are excluded
|
|
247
|
+
if (dirName.startsWith(".")) {
|
|
248
|
+
if (opts.includeHidden) {
|
|
249
|
+
return { eligible: true, category: "eligible" };
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
eligible: false,
|
|
253
|
+
reason: "hidden directory (use --include-hidden to include)",
|
|
254
|
+
category: "hidden",
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
return { eligible: true, category: "eligible" };
|
|
258
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const node_fs_1 = require("node:fs");
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const smartdoc_ignore_js_1 = require("./smartdoc-ignore.js");
|
|
8
|
+
function makeRepo() {
|
|
9
|
+
return (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "polaris-smartdoc-ignore-"));
|
|
10
|
+
}
|
|
11
|
+
(0, vitest_1.describe)("parseSmartDocIgnore", () => {
|
|
12
|
+
(0, vitest_1.it)("enforces default endpoint artifact patterns when .smartdocignore is absent", () => {
|
|
13
|
+
const repoRoot = makeRepo();
|
|
14
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.DEFAULT_SMARTDOCIGNORE_PATTERNS).toContain(".taskchain_artifacts/**");
|
|
15
|
+
(0, vitest_1.expect)((0, smartdoc_ignore_js_1.isIngestIneligible)(".taskchain_artifacts/polaris-run/current-state.json", repoRoot)).toEqual({
|
|
16
|
+
ineligible: true,
|
|
17
|
+
reason: "ignored by .smartdocignore/defaults: .taskchain_artifacts/polaris-run/current-state.json",
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.it)("enforces all default endpoint artifact families", () => {
|
|
21
|
+
const repoRoot = makeRepo();
|
|
22
|
+
for (const path of [
|
|
23
|
+
"README.md",
|
|
24
|
+
"AGENTS.md",
|
|
25
|
+
"CLAUDE.md",
|
|
26
|
+
"GEMINI.md",
|
|
27
|
+
"POLARIS.md",
|
|
28
|
+
".claude/settings.json",
|
|
29
|
+
".codex/AGENTS.md",
|
|
30
|
+
".windsurf/rules.md",
|
|
31
|
+
".github/workflows/ci.yml",
|
|
32
|
+
"generated/report.md",
|
|
33
|
+
"docs/generated/report.md",
|
|
34
|
+
"summaries/run.md",
|
|
35
|
+
"docs/summaries/run.md",
|
|
36
|
+
"smartdocs/docs/specs/active/example.md",
|
|
37
|
+
]) {
|
|
38
|
+
(0, vitest_1.expect)((0, smartdoc_ignore_js_1.isIngestIneligible)(path, repoRoot).ineligible, path).toBe(true);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)("parses custom gitignore-style patterns from .smartdocignore", () => {
|
|
42
|
+
const repoRoot = makeRepo();
|
|
43
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(repoRoot, ".smartdocignore"), "scratch/**/*.md\n!important.md\n", "utf-8");
|
|
44
|
+
(0, vitest_1.expect)((0, smartdoc_ignore_js_1.isIngestIneligible)("scratch/plans/test.md", repoRoot).ineligible).toBe(true);
|
|
45
|
+
(0, vitest_1.expect)((0, smartdoc_ignore_js_1.isIngestIneligible)("important.md", repoRoot).ineligible).toBe(false);
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)("allows non-ignored paths", () => {
|
|
48
|
+
const repoRoot = makeRepo();
|
|
49
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(repoRoot, "smartdocs", "docs", "raw"), { recursive: true });
|
|
50
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(repoRoot, ".smartdocignore"), "tmp/\n", "utf-8");
|
|
51
|
+
(0, vitest_1.expect)((0, smartdoc_ignore_js_1.isIngestIneligible)("smartdocs/docs/raw/spec.md", repoRoot)).toEqual({ ineligible: false });
|
|
52
|
+
(0, vitest_1.expect)((0, smartdoc_ignore_js_1.parseSmartDocIgnore)(repoRoot).ignores("smartdocs/docs/raw/spec.md")).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.describe)("isDirectoryEligible", () => {
|
|
56
|
+
(0, vitest_1.it)("marks build artifact directories as ineligible", () => {
|
|
57
|
+
const repoRoot = makeRepo();
|
|
58
|
+
for (const dir of ["node_modules", "dist", "build", "coverage"]) {
|
|
59
|
+
const fullPath = (0, node_path_1.join)(repoRoot, dir);
|
|
60
|
+
(0, node_fs_1.mkdirSync)(fullPath, { recursive: true });
|
|
61
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(fullPath, repoRoot);
|
|
62
|
+
(0, vitest_1.expect)(result.eligible, dir).toBe(false);
|
|
63
|
+
(0, vitest_1.expect)(result.reason, dir).toContain("runtime artifact excluded");
|
|
64
|
+
(0, vitest_1.expect)(result.category, dir).toBe("runtime");
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)("marks runtime and system hidden directories as ineligible", () => {
|
|
68
|
+
const repoRoot = makeRepo();
|
|
69
|
+
for (const dir of [".git", ".polaris", ".github", ".windsurf"]) {
|
|
70
|
+
const fullPath = (0, node_path_1.join)(repoRoot, dir);
|
|
71
|
+
(0, node_fs_1.mkdirSync)(fullPath, { recursive: true });
|
|
72
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(fullPath, repoRoot);
|
|
73
|
+
(0, vitest_1.expect)(result.eligible, dir).toBe(false);
|
|
74
|
+
(0, vitest_1.expect)(result.category, dir).toMatch(/runtime|hidden/);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)("marks nested ineligible directories as ineligible", () => {
|
|
78
|
+
const repoRoot = makeRepo();
|
|
79
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(repoRoot, "src", "node_modules"), { recursive: true });
|
|
80
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)((0, node_path_1.join)(repoRoot, "src", "node_modules"), repoRoot);
|
|
81
|
+
(0, vitest_1.expect)(result.eligible).toBe(false);
|
|
82
|
+
(0, vitest_1.expect)(result.reason).toContain("runtime artifact excluded: node_modules");
|
|
83
|
+
(0, vitest_1.expect)(result.category).toBe("runtime");
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.it)("marks directories ignored by .smartdocignore as ineligible", () => {
|
|
86
|
+
const repoRoot = makeRepo();
|
|
87
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(repoRoot, "custom-ignore"), { recursive: true });
|
|
88
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(repoRoot, ".smartdocignore"), "custom-ignore/\n", "utf-8");
|
|
89
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)((0, node_path_1.join)(repoRoot, "custom-ignore"), repoRoot);
|
|
90
|
+
(0, vitest_1.expect)(result.eligible).toBe(false);
|
|
91
|
+
(0, vitest_1.expect)(result.reason).toContain("ignored by .smartdocignore");
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.it)("marks eligible source directories as eligible", () => {
|
|
94
|
+
const repoRoot = makeRepo();
|
|
95
|
+
for (const dir of ["src", "docs", "lib", "packages", "core"]) {
|
|
96
|
+
const fullPath = (0, node_path_1.join)(repoRoot, dir);
|
|
97
|
+
(0, node_fs_1.mkdirSync)(fullPath, { recursive: true });
|
|
98
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(fullPath, repoRoot);
|
|
99
|
+
(0, vitest_1.expect)(result.eligible, dir).toBe(true);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
(0, vitest_1.it)("includes all expected runtime excluded patterns", () => {
|
|
103
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain("node_modules");
|
|
104
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain("dist");
|
|
105
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain("build");
|
|
106
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain("coverage");
|
|
107
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain(".git");
|
|
108
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain(".polaris");
|
|
109
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).toContain("generated");
|
|
110
|
+
(0, vitest_1.expect)(smartdoc_ignore_js_1.RUNTIME_EXCLUDED_DIR_PATTERNS).not.toContain("smartdocs"); // smartdocs/ protected via targeted DEFAULT_SMARTDOCIGNORE_PATTERNS
|
|
111
|
+
});
|
|
112
|
+
(0, vitest_1.it)("marks agent cognition folders as temporarily skipped with agent-cognition category", () => {
|
|
113
|
+
const repoRoot = makeRepo();
|
|
114
|
+
for (const dir of smartdoc_ignore_js_1.AGENT_COGNITION_FOLDERS) {
|
|
115
|
+
const fullPath = (0, node_path_1.join)(repoRoot, dir);
|
|
116
|
+
(0, node_fs_1.mkdirSync)(fullPath, { recursive: true });
|
|
117
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(fullPath, repoRoot);
|
|
118
|
+
(0, vitest_1.expect)(result.eligible, dir).toBe(false);
|
|
119
|
+
(0, vitest_1.expect)(result.category, dir).toBe("agent-cognition");
|
|
120
|
+
(0, vitest_1.expect)(result.reason, dir).toContain("agent cognition folder temporarily skipped");
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
(0, vitest_1.it)("allows agent cognition folders with includeAgentFolders option", () => {
|
|
124
|
+
const repoRoot = makeRepo();
|
|
125
|
+
for (const dir of smartdoc_ignore_js_1.AGENT_COGNITION_FOLDERS) {
|
|
126
|
+
const fullPath = (0, node_path_1.join)(repoRoot, dir);
|
|
127
|
+
(0, node_fs_1.mkdirSync)(fullPath, { recursive: true });
|
|
128
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(fullPath, repoRoot, { includeAgentFolders: true });
|
|
129
|
+
(0, vitest_1.expect)(result.eligible, dir).toBe(true);
|
|
130
|
+
(0, vitest_1.expect)(result.category, dir).toBe("eligible");
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.it)("marks root as skipped by default with root category", () => {
|
|
134
|
+
const repoRoot = makeRepo();
|
|
135
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(repoRoot, repoRoot, { isRoot: true });
|
|
136
|
+
(0, vitest_1.expect)(result.eligible).toBe(false);
|
|
137
|
+
(0, vitest_1.expect)(result.category).toBe("root");
|
|
138
|
+
(0, vitest_1.expect)(result.reason).toContain("root skipped by default");
|
|
139
|
+
});
|
|
140
|
+
(0, vitest_1.it)("allows root with skipRoot: false option", () => {
|
|
141
|
+
const repoRoot = makeRepo();
|
|
142
|
+
const result = (0, smartdoc_ignore_js_1.isDirectoryEligible)(repoRoot, repoRoot, { isRoot: true, skipRoot: false });
|
|
143
|
+
(0, vitest_1.expect)(result.eligible).toBe(true);
|
|
144
|
+
(0, vitest_1.expect)(result.category).toBe("eligible");
|
|
145
|
+
});
|
|
146
|
+
});
|