codetrellis 0.0.0-stage → 0.2.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/LICENSE +201 -0
- package/README.md +27 -2
- package/bin/codetrellis.mjs +4 -0
- package/package.json +43 -4
- package/reader/material-reader.mjs +130346 -0
- package/resources/tree-sitter/README.md +150 -0
- package/resources/tree-sitter/tree-sitter-c-sharp.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-go.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-java.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-javascript.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-kotlin.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-php.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-python.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-ruby.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-rust.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-swift.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-tsx.wasm +0 -0
- package/resources/tree-sitter/tree-sitter-typescript.wasm +0 -0
- package/resources/tree-sitter/tree-sitter.wasm +0 -0
- package/src/backend/agent/claude-code-watcher.js +270 -0
- package/src/backend/index.js +8 -0
- package/src/backend/lib/sha256-file.js +39 -0
- package/src/backend/lib/zip-entries.js +98 -0
- package/src/backend/lifecycle.js +102 -0
- package/src/backend/mcp/binding-headers.js +54 -0
- package/src/backend/mcp/client-identity.js +44 -0
- package/src/backend/mcp/connector/command.js +110 -0
- package/src/backend/mcp/connector/core.js +278 -0
- package/src/backend/mcp/connector/files.js +121 -0
- package/src/backend/mcp/connector/hook.js +284 -0
- package/src/backend/mcp/connector/main.js +126 -0
- package/src/backend/mcp/connector/sse-upstream.js +152 -0
- package/src/backend/mcp/helpers.js +43 -0
- package/src/backend/mcp/prompt-builders.js +104 -0
- package/src/backend/mcp/resources.js +197 -0
- package/src/backend/mcp/server.js +813 -0
- package/src/backend/mcp/skill-guide.js +1528 -0
- package/src/backend/mcp/tools/architecture-tools.js +273 -0
- package/src/backend/mcp/tools/audio-tools.js +117 -0
- package/src/backend/mcp/tools/awareness-tools.js +623 -0
- package/src/backend/mcp/tools/budget-tools.js +185 -0
- package/src/backend/mcp/tools/channel-tools.js +205 -0
- package/src/backend/mcp/tools/contribution-tools.js +181 -0
- package/src/backend/mcp/tools/drift-tools.js +252 -0
- package/src/backend/mcp/tools/git-tools.js +316 -0
- package/src/backend/mcp/tools/governance-tools.js +175 -0
- package/src/backend/mcp/tools/graph-tools.js +181 -0
- package/src/backend/mcp/tools/intake-tools.js +244 -0
- package/src/backend/mcp/tools/mobile-tools.js +118 -0
- package/src/backend/mcp/tools/peer-tools.js +330 -0
- package/src/backend/mcp/tools/plan-item-tools.js +1601 -0
- package/src/backend/mcp/tools/plan-tools.js +680 -0
- package/src/backend/mcp/tools/presence-tools.js +185 -0
- package/src/backend/mcp/tools/project-config-tools.js +150 -0
- package/src/backend/mcp/tools/review-tools.js +172 -0
- package/src/backend/mcp/tools/session-tools.js +554 -0
- package/src/backend/mcp/tools/system-docs-tools.js +168 -0
- package/src/backend/mcp/tools/terminal-tools.js +186 -0
- package/src/backend/mcp/tools/test-tools.js +117 -0
- package/src/backend/mcp/tools/ui-tools.js +356 -0
- package/src/backend/mcp/types.js +15 -0
- package/src/backend/middleware/local-auth.js +116 -0
- package/src/backend/server.js +5951 -0
- package/src/backend/services/agent-event-log.js +350 -0
- package/src/backend/services/architecture-rule.js +584 -0
- package/src/backend/services/architecture-rules.js +275 -0
- package/src/backend/services/artefact-content-service.js +181 -0
- package/src/backend/services/artefact-service.js +305 -0
- package/src/backend/services/artefact-watcher.js +167 -0
- package/src/backend/services/ast-parser.js +327 -0
- package/src/backend/services/audio-buffer-service.js +152 -0
- package/src/backend/services/awareness-notices.js +139 -0
- package/src/backend/services/awareness-replies.js +194 -0
- package/src/backend/services/awareness-service.js +344 -0
- package/src/backend/services/awareness-signals.js +267 -0
- package/src/backend/services/baseline-store.js +83 -0
- package/src/backend/services/branch-workstreams.js +341 -0
- package/src/backend/services/breakpoint-service.js +584 -0
- package/src/backend/services/brief-service.js +299 -0
- package/src/backend/services/budget-service.js +528 -0
- package/src/backend/services/callsites/base.js +15 -0
- package/src/backend/services/callsites/csharp.js +148 -0
- package/src/backend/services/callsites/go.js +163 -0
- package/src/backend/services/callsites/index.js +53 -0
- package/src/backend/services/callsites/kotlin.js +123 -0
- package/src/backend/services/callsites/process-env.js +125 -0
- package/src/backend/services/callsites/python.js +91 -0
- package/src/backend/services/callsites/ruby.js +164 -0
- package/src/backend/services/callsites/shared.js +198 -0
- package/src/backend/services/callsites/swift.js +115 -0
- package/src/backend/services/callsites/typescript.js +87 -0
- package/src/backend/services/capability-token.js +108 -0
- package/src/backend/services/change-check.js +156 -0
- package/src/backend/services/channel-dispatcher-service.js +235 -0
- package/src/backend/services/channel-event-file-service.js +125 -0
- package/src/backend/services/channel-event-service.js +297 -0
- package/src/backend/services/check-runs.js +177 -0
- package/src/backend/services/checkout-identity.js +73 -0
- package/src/backend/services/claude-code-parallel.js +221 -0
- package/src/backend/services/claude-desktop-config.js +186 -0
- package/src/backend/services/clock.js +57 -0
- package/src/backend/services/cloud-files.js +191 -0
- package/src/backend/services/coalesce.js +50 -0
- package/src/backend/services/code-breakpoints.js +291 -0
- package/src/backend/services/comment-service.js +168 -0
- package/src/backend/services/commit-attribution.js +134 -0
- package/src/backend/services/commit-edges.js +99 -0
- package/src/backend/services/confined-fs.js +241 -0
- package/src/backend/services/conformity-gate.js +132 -0
- package/src/backend/services/contribution-service.js +409 -0
- package/src/backend/services/coverage-service.js +173 -0
- package/src/backend/services/criteria-service.js +721 -0
- package/src/backend/services/criterion-checks.js +387 -0
- package/src/backend/services/criterion-loop-service.js +411 -0
- package/src/backend/services/cross-system-service.js +231 -0
- package/src/backend/services/database.js +916 -0
- package/src/backend/services/db-schema.js +1358 -0
- package/src/backend/services/deviation-service.js +344 -0
- package/src/backend/services/diff-engine.js +168 -0
- package/src/backend/services/evidence.js +363 -0
- package/src/backend/services/external-intake-service.js +269 -0
- package/src/backend/services/external-pointer-service.js +195 -0
- package/src/backend/services/external-refs-service.js +214 -0
- package/src/backend/services/file-history.js +158 -0
- package/src/backend/services/file-watcher.js +193 -0
- package/src/backend/services/folder-requests.js +118 -0
- package/src/backend/services/freeze-service.js +189 -0
- package/src/backend/services/gemini-cli-hook.js +172 -0
- package/src/backend/services/git-activity-service.js +325 -0
- package/src/backend/services/git-blobs.js +70 -0
- package/src/backend/services/git-branches.js +357 -0
- package/src/backend/services/git-checkout.js +153 -0
- package/src/backend/services/git-commit-service.js +91 -0
- package/src/backend/services/git-env.js +121 -0
- package/src/backend/services/git-identity.js +84 -0
- package/src/backend/services/git-refs.js +386 -0
- package/src/backend/services/git-safety.js +58 -0
- package/src/backend/services/grant-guard.js +67 -0
- package/src/backend/services/html-view-policy.js +135 -0
- package/src/backend/services/human-decision.js +55 -0
- package/src/backend/services/importers.js +159 -0
- package/src/backend/services/intent-service.js +105 -0
- package/src/backend/services/ipc-dispatcher.js +164 -0
- package/src/backend/services/item-git-state.js +208 -0
- package/src/backend/services/line-changes.js +232 -0
- package/src/backend/services/line-history.js +174 -0
- package/src/backend/services/local-api-changes.js +40 -0
- package/src/backend/services/logger.js +217 -0
- package/src/backend/services/material-footprints.js +203 -0
- package/src/backend/services/material-place.js +82 -0
- package/src/backend/services/material-reader/child.js +4 -0
- package/src/backend/services/material-reader/docx-markdown.js +198 -0
- package/src/backend/services/material-reader/fixtures.test-helper.js +169 -0
- package/src/backend/services/material-reader/quote.js +44 -0
- package/src/backend/services/material-reader/read.js +430 -0
- package/src/backend/services/material-reader/reader-host.js +202 -0
- package/src/backend/services/material-signals.js +141 -0
- package/src/backend/services/mcp-capabilities.js +390 -0
- package/src/backend/services/mdns-service.js +304 -0
- package/src/backend/services/mobile-api-server.js +281 -0
- package/src/backend/services/mobile-approvals.js +306 -0
- package/src/backend/services/mobile-awareness.js +180 -0
- package/src/backend/services/mobile-breakpoints.js +115 -0
- package/src/backend/services/mobile-budget.js +98 -0
- package/src/backend/services/mobile-freeze.js +106 -0
- package/src/backend/services/mobile-proposals.js +100 -0
- package/src/backend/services/mobile-rpc-service.js +1289 -0
- package/src/backend/services/mobile-workstreams.js +160 -0
- package/src/backend/services/monorepo-detector.js +131 -0
- package/src/backend/services/other-work.js +45 -0
- package/src/backend/services/pack-seal.js +129 -0
- package/src/backend/services/paired-device-service.js +192 -0
- package/src/backend/services/pairing-server.js +323 -0
- package/src/backend/services/pairing-service.js +200 -0
- package/src/backend/services/pantry-resolution-service.js +166 -0
- package/src/backend/services/parsers/base.js +124 -0
- package/src/backend/services/parsers/csharp.js +224 -0
- package/src/backend/services/parsers/go.js +180 -0
- package/src/backend/services/parsers/index.js +101 -0
- package/src/backend/services/parsers/java.js +103 -0
- package/src/backend/services/parsers/kotlin.js +252 -0
- package/src/backend/services/parsers/php.js +113 -0
- package/src/backend/services/parsers/python.js +189 -0
- package/src/backend/services/parsers/ruby.js +212 -0
- package/src/backend/services/parsers/rust.js +97 -0
- package/src/backend/services/parsers/swift.js +221 -0
- package/src/backend/services/parsers/typescript.js +235 -0
- package/src/backend/services/pattern-scan.js +65 -0
- package/src/backend/services/patterns.js +281 -0
- package/src/backend/services/peer-audit-service.js +123 -0
- package/src/backend/services/peer-auth.js +153 -0
- package/src/backend/services/peer-capabilities.js +209 -0
- package/src/backend/services/peer-connection-service.js +450 -0
- package/src/backend/services/peer-grants.js +33 -0
- package/src/backend/services/persistence.js +116 -0
- package/src/backend/services/personal-sync-service.js +232 -0
- package/src/backend/services/pipeline-approvals.js +72 -0
- package/src/backend/services/pipeline.js +232 -0
- package/src/backend/services/plan-arrivals.js +68 -0
- package/src/backend/services/plan-changes-service.js +273 -0
- package/src/backend/services/plan-conflict-service.js +288 -0
- package/src/backend/services/plan-dependencies.js +91 -0
- package/src/backend/services/plan-doc-guard.js +90 -0
- package/src/backend/services/plan-documents-service.js +275 -0
- package/src/backend/services/plan-event-service.js +154 -0
- package/src/backend/services/plan-file-refs.js +106 -0
- package/src/backend/services/plan-file-service.js +1564 -0
- package/src/backend/services/plan-history-service.js +156 -0
- package/src/backend/services/plan-import-service.js +261 -0
- package/src/backend/services/plan-item-service.js +1223 -0
- package/src/backend/services/plan-migrate-service.js +395 -0
- package/src/backend/services/plan-overlay-service.js +173 -0
- package/src/backend/services/plan-phases-service.js +182 -0
- package/src/backend/services/plan-progress-service.js +134 -0
- package/src/backend/services/plan-review-service.js +262 -0
- package/src/backend/services/plan-service.js +682 -0
- package/src/backend/services/plan-status.js +113 -0
- package/src/backend/services/plan-template-publish-service.js +217 -0
- package/src/backend/services/plan-templates-service.js +242 -0
- package/src/backend/services/plan-templates.js +1164 -0
- package/src/backend/services/planned-overlap-actions.js +200 -0
- package/src/backend/services/plans-home.js +224 -0
- package/src/backend/services/play-forward.js +256 -0
- package/src/backend/services/playback-service.js +117 -0
- package/src/backend/services/power-service.js +167 -0
- package/src/backend/services/power-signals.js +81 -0
- package/src/backend/services/pr-draft-service.js +142 -0
- package/src/backend/services/presence-service.js +122 -0
- package/src/backend/services/pricing.js +60 -0
- package/src/backend/services/project-config-service.js +474 -0
- package/src/backend/services/project-scanner.js +184 -0
- package/src/backend/services/projection-service.js +69 -0
- package/src/backend/services/push-notification-service.js +288 -0
- package/src/backend/services/recent-projects-service.js +204 -0
- package/src/backend/services/record-chain.js +162 -0
- package/src/backend/services/recurrence-rule.js +63 -0
- package/src/backend/services/recurring-agent.js +89 -0
- package/src/backend/services/recurring-scheduler.js +77 -0
- package/src/backend/services/recurring-service.js +276 -0
- package/src/backend/services/reference-service.js +169 -0
- package/src/backend/services/release-public-key.js +30 -0
- package/src/backend/services/release-signature.js +64 -0
- package/src/backend/services/remote-audio-service.js +224 -0
- package/src/backend/services/remote-interaction-service.js +275 -0
- package/src/backend/services/remote-terminal-service.js +324 -0
- package/src/backend/services/rendition/child/main.js +76 -0
- package/src/backend/services/rendition/engine-host.js +249 -0
- package/src/backend/services/rendition/engine-lock.js +39 -0
- package/src/backend/services/rendition/engine-lock.json +14 -0
- package/src/backend/services/rendition/engine-manifest.js +97 -0
- package/src/backend/services/rendition/network-proof.js +73 -0
- package/src/backend/services/rendition/rendition-service.js +175 -0
- package/src/backend/services/replay-frames.js +387 -0
- package/src/backend/services/replay-state.js +201 -0
- package/src/backend/services/resolvers/base.js +108 -0
- package/src/backend/services/resolvers/csharp.js +109 -0
- package/src/backend/services/resolvers/go.js +105 -0
- package/src/backend/services/resolvers/index.js +60 -0
- package/src/backend/services/resolvers/java.js +63 -0
- package/src/backend/services/resolvers/kotlin.js +109 -0
- package/src/backend/services/resolvers/php.js +89 -0
- package/src/backend/services/resolvers/python.js +154 -0
- package/src/backend/services/resolvers/ruby.js +103 -0
- package/src/backend/services/resolvers/rust.js +77 -0
- package/src/backend/services/resolvers/swift.js +98 -0
- package/src/backend/services/resolvers/typescript.js +71 -0
- package/src/backend/services/retention.js +54 -0
- package/src/backend/services/review-architecture.js +236 -0
- package/src/backend/services/review-attest.js +68 -0
- package/src/backend/services/review-bundle.js +226 -0
- package/src/backend/services/review-graduation.js +93 -0
- package/src/backend/services/review-host/bitbucket.js +79 -0
- package/src/backend/services/review-host/detect.js +80 -0
- package/src/backend/services/review-host/github.js +97 -0
- package/src/backend/services/review-host/gitlab.js +77 -0
- package/src/backend/services/review-host/host-state.js +103 -0
- package/src/backend/services/review-host/http.js +58 -0
- package/src/backend/services/review-host/switch.js +120 -0
- package/src/backend/services/review-marks.js +72 -0
- package/src/backend/services/review-notes.js +169 -0
- package/src/backend/services/review-other-work.js +90 -0
- package/src/backend/services/review-queue-service.js +147 -0
- package/src/backend/services/review-risk.js +127 -0
- package/src/backend/services/review-task.js +121 -0
- package/src/backend/services/rule-approvals.js +268 -0
- package/src/backend/services/rule-baseline.js +134 -0
- package/src/backend/services/rule-changes.js +162 -0
- package/src/backend/services/rule-preview.js +47 -0
- package/src/backend/services/rule-proposals.js +104 -0
- package/src/backend/services/rule-scope.js +76 -0
- package/src/backend/services/rulebook.js +286 -0
- package/src/backend/services/rules-at.js +56 -0
- package/src/backend/services/rules-overview.js +88 -0
- package/src/backend/services/schema-reconciler.js +250 -0
- package/src/backend/services/secret-store.js +119 -0
- package/src/backend/services/section-workstreams.js +95 -0
- package/src/backend/services/self-write-tracker.js +75 -0
- package/src/backend/services/sensor-bridge-service.js +285 -0
- package/src/backend/services/session-service.js +192 -0
- package/src/backend/services/settings-service.js +324 -0
- package/src/backend/services/signal-breakpoints.js +172 -0
- package/src/backend/services/signed-approval-record.js +86 -0
- package/src/backend/services/signed-approvals.js +244 -0
- package/src/backend/services/signoff-pack.js +328 -0
- package/src/backend/services/signoff-rows.js +114 -0
- package/src/backend/services/skill-arrival-service.js +138 -0
- package/src/backend/services/skill-model.js +193 -0
- package/src/backend/services/skill-use-service.js +140 -0
- package/src/backend/services/skills-service.js +150 -0
- package/src/backend/services/snapshot-compare-service.js +397 -0
- package/src/backend/services/source-control.js +189 -0
- package/src/backend/services/spec-links-service.js +123 -0
- package/src/backend/services/spec-proposal-withdraw.js +50 -0
- package/src/backend/services/spec-proposals-service.js +470 -0
- package/src/backend/services/sql/embedded.js +95 -0
- package/src/backend/services/sql/index.js +63 -0
- package/src/backend/services/sql/refs.js +357 -0
- package/src/backend/services/sql/schema.js +312 -0
- package/src/backend/services/sql/tokenizer.js +195 -0
- package/src/backend/services/stack-overlaps.js +117 -0
- package/src/backend/services/stack-service.js +225 -0
- package/src/backend/services/state-sync-service.js +384 -0
- package/src/backend/services/stuck-sensor-service.js +200 -0
- package/src/backend/services/system-discovery.js +481 -0
- package/src/backend/services/system-docs-service.js +701 -0
- package/src/backend/services/task-attachments-service.js +340 -0
- package/src/backend/services/task-grounding.js +60 -0
- package/src/backend/services/task-records/check-run-record.js +146 -0
- package/src/backend/services/task-records/check-runs.js +115 -0
- package/src/backend/services/task-records/heads.js +88 -0
- package/src/backend/services/task-records/material-reads.js +225 -0
- package/src/backend/services/task-records/read-record.js +100 -0
- package/src/backend/services/task-records/record.js +173 -0
- package/src/backend/services/task-records/run-record.js +136 -0
- package/src/backend/services/task-records/shared-state.js +548 -0
- package/src/backend/services/task-records/signing.js +140 -0
- package/src/backend/services/task-records/split-signals.js +52 -0
- package/src/backend/services/task-records/test-runs.js +164 -0
- package/src/backend/services/task-records/trust.js +243 -0
- package/src/backend/services/task-rules.js +81 -0
- package/src/backend/services/task-workstreams.js +90 -0
- package/src/backend/services/terminal-history-service.js +266 -0
- package/src/backend/services/terminal-service.js +267 -0
- package/src/backend/services/test-clock.js +53 -0
- package/src/backend/services/tests/grounding.js +266 -0
- package/src/backend/services/tests/junit.js +104 -0
- package/src/backend/services/tests/teammate-runs.js +134 -0
- package/src/backend/services/tests/test-results.js +234 -0
- package/src/backend/services/tree-watcher.js +204 -0
- package/src/backend/services/trellis-service.js +204 -0
- package/src/backend/services/trusted-roots.js +186 -0
- package/src/backend/services/update-download-service.js +342 -0
- package/src/backend/services/update-service.js +266 -0
- package/src/backend/services/watch-ignore.js +76 -0
- package/src/backend/services/webhook-egress.js +206 -0
- package/src/backend/services/webrtc-service.js +413 -0
- package/src/backend/services/work-changes.js +59 -0
- package/src/backend/services/workstream-binding.js +82 -0
- package/src/backend/services/workstream-commits.js +116 -0
- package/src/backend/services/workstream-imports.js +177 -0
- package/src/backend/services/workstream-service.js +335 -0
- package/src/backend/services/workstream-symbols.js +223 -0
- package/src/backend/services/workstream-watch-service.js +391 -0
- package/src/backend/services/worktree-service.js +235 -0
- package/src/cli/agent.js +100 -0
- package/src/cli/args.js +201 -0
- package/src/cli/conformity.js +106 -0
- package/src/cli/desktop.js +91 -0
- package/src/cli/main.js +409 -0
- package/src/cli/pipeline.js +109 -0
- package/src/cli/plan-verbs.js +259 -0
- package/src/cli/review-adapters.js +218 -0
- package/src/cli/review-output.js +93 -0
- package/src/cli/review-post.js +89 -0
- package/src/cli/review-sink.js +183 -0
- package/src/cli/review-skill.js +44 -0
- package/src/cli/review-verify.js +104 -0
- package/src/cli/review.js +386 -0
- package/src/cli/sarif.js +148 -0
- package/src/cli/verbs.js +359 -0
- package/src/shared/build-info.js +39 -0
- package/src/shared/lib/agent-review.js +199 -0
- package/src/shared/lib/agent-turns.js +140 -0
- package/src/shared/lib/awareness-digest.js +120 -0
- package/src/shared/lib/branch-name.js +45 -0
- package/src/shared/lib/breakpoint-words.js +118 -0
- package/src/shared/lib/budget-words.js +56 -0
- package/src/shared/lib/burst.js +69 -0
- package/src/shared/lib/call-entry.js +105 -0
- package/src/shared/lib/check-compare.js +42 -0
- package/src/shared/lib/check-words.js +216 -0
- package/src/shared/lib/csv.js +62 -0
- package/src/shared/lib/folder-entry.js +87 -0
- package/src/shared/lib/freeze-words.js +60 -0
- package/src/shared/lib/fuzzy.js +84 -0
- package/src/shared/lib/git-state-words.js +80 -0
- package/src/shared/lib/grep-entry.js +86 -0
- package/src/shared/lib/grounding-line.js +61 -0
- package/src/shared/lib/import-line.js +71 -0
- package/src/shared/lib/item-status.js +249 -0
- package/src/shared/lib/line-changes.js +53 -0
- package/src/shared/lib/locator.js +71 -0
- package/src/shared/lib/matcher.js +120 -0
- package/src/shared/lib/merge-order.js +65 -0
- package/src/shared/lib/open-findings.js +68 -0
- package/src/shared/lib/other-work.js +108 -0
- package/src/shared/lib/package-entry.js +142 -0
- package/src/shared/lib/plan-vocab.js +40 -0
- package/src/shared/lib/pptx-xml.js +86 -0
- package/src/shared/lib/proposal-words.js +61 -0
- package/src/shared/lib/recurrence.js +183 -0
- package/src/shared/lib/references.js +72 -0
- package/src/shared/lib/rule-pattern.js +56 -0
- package/src/shared/lib/sdp-fingerprint.js +115 -0
- package/src/shared/lib/sdp-minimal.js +123 -0
- package/src/shared/lib/secret-paths.js +34 -0
- package/src/shared/lib/signal-words.js +172 -0
- package/src/shared/lib/signoff.js +56 -0
- package/src/shared/lib/skills-note.js +60 -0
- package/src/shared/lib/spec-sections.js +78 -0
- package/src/shared/lib/symbol-entry.js +60 -0
- package/src/shared/lib/tool-phrasing.js +338 -0
- package/src/shared/lib/turn-gap.js +27 -0
- package/src/shared/lib/workstream-words.js +38 -0
- package/src/shared/lib/xlsx-xml.js +144 -0
- package/src/shared/lib/zip-reader.js +99 -0
- package/src/shared/types/agent.js +27 -0
- package/src/shared/types/architecture-rules.js +30 -0
- package/src/shared/types/ast.js +15 -0
- package/src/shared/types/breakpoint.js +33 -0
- package/src/shared/types/channel.js +41 -0
- package/src/shared/types/criteria.js +15 -0
- package/src/shared/types/graph.js +15 -0
- package/src/shared/types/index.js +53 -0
- package/src/shared/types/peer.js +36 -0
- package/src/shared/types/pipeline.js +15 -0
- package/src/shared/types/plan.js +15 -0
- package/src/shared/types/play-forward.js +15 -0
- package/src/shared/types/power.js +15 -0
- package/src/shared/types/presence.js +15 -0
- package/src/shared/types/project-config.js +35 -0
- package/src/shared/types/project.js +15 -0
- package/src/shared/types/record.js +15 -0
- package/src/shared/types/recurring.js +15 -0
- package/src/shared/types/review.js +15 -0
- package/src/shared/types/settings.js +114 -0
- package/src/shared/types/stack.js +15 -0
- package/src/shared/types/system-doc.js +15 -0
- package/src/shared/types/system.js +15 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var proposal_words_exports = {};
|
|
19
|
+
__export(proposal_words_exports, {
|
|
20
|
+
evidenceWords: () => evidenceWords,
|
|
21
|
+
impactLabel: () => impactLabel,
|
|
22
|
+
impactWho: () => impactWho,
|
|
23
|
+
proposalHeadline: () => proposalHeadline,
|
|
24
|
+
proposalWhere: () => proposalWhere,
|
|
25
|
+
repliesLine: () => repliesLine
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(proposal_words_exports);
|
|
28
|
+
var import_breakpoint_words = require("./breakpoint-words");
|
|
29
|
+
function proposalWhere(p) {
|
|
30
|
+
return `${p.section ? `\xA7 ${p.sectionTitle ?? p.section} of ` : ""}\u201C${p.pageTitle}\u201D`;
|
|
31
|
+
}
|
|
32
|
+
function proposalHeadline(p) {
|
|
33
|
+
return `\u270E ${(0, import_breakpoint_words.agentName)(p.author)} proposes a change to ${proposalWhere(p)}`;
|
|
34
|
+
}
|
|
35
|
+
function evidenceWords(e) {
|
|
36
|
+
return [
|
|
37
|
+
e.tests?.length ? `tests ${e.tests.join(", ")}` : null,
|
|
38
|
+
e.files?.length ? `files ${e.files.join(", ")}` : null,
|
|
39
|
+
e.commits?.length ? `commits ${e.commits.join(", ")}` : null,
|
|
40
|
+
e.note ?? null
|
|
41
|
+
].filter(Boolean).join("; ");
|
|
42
|
+
}
|
|
43
|
+
function repliesLine(p) {
|
|
44
|
+
return p.affected.length ? `${p.affectedWords}. ${p.impacts.length} of ${p.affected.length} replied.` : "Nothing relies on this page yet.";
|
|
45
|
+
}
|
|
46
|
+
function impactLabel(i) {
|
|
47
|
+
if (i.impact !== "changes") return "No impact";
|
|
48
|
+
return `Changes${i.tasks !== null ? ` ${i.tasks} ${i.tasks === 1 ? "task" : "tasks"}` : ""}`;
|
|
49
|
+
}
|
|
50
|
+
function impactWho(i) {
|
|
51
|
+
return i.itemTitle ? `${i.itemTitle}${i.planTitle ? ` (${i.planTitle})` : ""}` : i.author;
|
|
52
|
+
}
|
|
53
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
54
|
+
0 && (module.exports = {
|
|
55
|
+
evidenceWords,
|
|
56
|
+
impactLabel,
|
|
57
|
+
impactWho,
|
|
58
|
+
proposalHeadline,
|
|
59
|
+
proposalWhere,
|
|
60
|
+
repliesLine
|
|
61
|
+
});
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var recurrence_exports = {};
|
|
19
|
+
__export(recurrence_exports, {
|
|
20
|
+
currentPeriod: () => currentPeriod,
|
|
21
|
+
dueAt: () => dueAt,
|
|
22
|
+
isTimeZone: () => isTimeZone,
|
|
23
|
+
isoWeek: () => isoWeek,
|
|
24
|
+
momentWords: () => momentWords,
|
|
25
|
+
nextPeriod: () => nextPeriod,
|
|
26
|
+
periodId: () => periodId,
|
|
27
|
+
periodLabel: () => periodLabel,
|
|
28
|
+
periodOf: () => periodOf,
|
|
29
|
+
previousPeriod: () => previousPeriod,
|
|
30
|
+
scheduleWords: () => scheduleWords,
|
|
31
|
+
seriesWords: () => seriesWords,
|
|
32
|
+
sinceWords: () => sinceWords,
|
|
33
|
+
wallClock: () => wallClock,
|
|
34
|
+
zonedMoment: () => zonedMoment
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(recurrence_exports);
|
|
37
|
+
const DAY = 864e5;
|
|
38
|
+
const WEEKDAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
|
|
39
|
+
const WEEKDAY_NAMES = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
|
|
40
|
+
const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
41
|
+
const fmtCache = /* @__PURE__ */ new Map();
|
|
42
|
+
function fmt(timeZone) {
|
|
43
|
+
let f = fmtCache.get(timeZone);
|
|
44
|
+
if (!f) {
|
|
45
|
+
f = new Intl.DateTimeFormat("en-US", {
|
|
46
|
+
timeZone,
|
|
47
|
+
hourCycle: "h23",
|
|
48
|
+
year: "numeric",
|
|
49
|
+
month: "2-digit",
|
|
50
|
+
day: "2-digit",
|
|
51
|
+
hour: "2-digit",
|
|
52
|
+
minute: "2-digit"
|
|
53
|
+
});
|
|
54
|
+
fmtCache.set(timeZone, f);
|
|
55
|
+
}
|
|
56
|
+
return f;
|
|
57
|
+
}
|
|
58
|
+
function isTimeZone(tz) {
|
|
59
|
+
try {
|
|
60
|
+
fmt(tz);
|
|
61
|
+
return true;
|
|
62
|
+
} catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function wallClock(timeZone, ms) {
|
|
67
|
+
const parts = {};
|
|
68
|
+
for (const p of fmt(timeZone).formatToParts(new Date(ms))) if (p.type !== "literal") parts[p.type] = Number(p.value);
|
|
69
|
+
return { y: parts.year, m: parts.month, d: parts.day, H: parts.hour === 24 ? 0 : parts.hour, M: parts.minute };
|
|
70
|
+
}
|
|
71
|
+
function zonedMoment(timeZone, date, H, M) {
|
|
72
|
+
const want = Date.UTC(date.y, date.m - 1, date.d, H, M);
|
|
73
|
+
let guess = want;
|
|
74
|
+
for (let i = 0; i < 3; i++) {
|
|
75
|
+
const w = wallClock(timeZone, guess);
|
|
76
|
+
const diff = want - Date.UTC(w.y, w.m - 1, w.d, w.H, w.M);
|
|
77
|
+
if (diff === 0) break;
|
|
78
|
+
guess += diff;
|
|
79
|
+
}
|
|
80
|
+
return guess;
|
|
81
|
+
}
|
|
82
|
+
function utcOf(d) {
|
|
83
|
+
return Date.UTC(d.y, d.m - 1, d.d);
|
|
84
|
+
}
|
|
85
|
+
function dateOf(ms) {
|
|
86
|
+
const t = new Date(ms);
|
|
87
|
+
return { y: t.getUTCFullYear(), m: t.getUTCMonth() + 1, d: t.getUTCDate() };
|
|
88
|
+
}
|
|
89
|
+
function addDays(d, n) {
|
|
90
|
+
return dateOf(utcOf(d) + n * DAY);
|
|
91
|
+
}
|
|
92
|
+
function isoWeekday(d) {
|
|
93
|
+
return (new Date(utcOf(d)).getUTCDay() + 6) % 7 + 1;
|
|
94
|
+
}
|
|
95
|
+
function isoWeek(d) {
|
|
96
|
+
const thursday = addDays(d, 4 - isoWeekday(d));
|
|
97
|
+
const jan1 = utcOf({ y: thursday.y, m: 1, d: 1 });
|
|
98
|
+
return { year: thursday.y, week: Math.floor((utcOf(thursday) - jan1) / DAY / 7) + 1 };
|
|
99
|
+
}
|
|
100
|
+
function periodOf(every, d) {
|
|
101
|
+
if (every === "day") return { every, anchor: d };
|
|
102
|
+
if (every === "week") return { every, anchor: addDays(d, 1 - isoWeekday(d)) };
|
|
103
|
+
return { every, anchor: { y: d.y, m: d.m, d: 1 } };
|
|
104
|
+
}
|
|
105
|
+
function nextPeriod(p) {
|
|
106
|
+
if (p.every === "day") return { every: "day", anchor: addDays(p.anchor, 1) };
|
|
107
|
+
if (p.every === "week") return { every: "week", anchor: addDays(p.anchor, 7) };
|
|
108
|
+
return { every: "month", anchor: p.anchor.m === 12 ? { y: p.anchor.y + 1, m: 1, d: 1 } : { y: p.anchor.y, m: p.anchor.m + 1, d: 1 } };
|
|
109
|
+
}
|
|
110
|
+
function previousPeriod(p) {
|
|
111
|
+
if (p.every === "day") return { every: "day", anchor: addDays(p.anchor, -1) };
|
|
112
|
+
if (p.every === "week") return { every: "week", anchor: addDays(p.anchor, -7) };
|
|
113
|
+
return { every: "month", anchor: p.anchor.m === 1 ? { y: p.anchor.y - 1, m: 12, d: 1 } : { y: p.anchor.y, m: p.anchor.m - 1, d: 1 } };
|
|
114
|
+
}
|
|
115
|
+
const pad = (n, w = 2) => String(n).padStart(w, "0");
|
|
116
|
+
function periodId(p) {
|
|
117
|
+
if (p.every === "day") return `${p.anchor.y}-${pad(p.anchor.m)}-${pad(p.anchor.d)}`;
|
|
118
|
+
if (p.every === "week") {
|
|
119
|
+
const w = isoWeek(p.anchor);
|
|
120
|
+
return `${w.year}-W${pad(w.week)}`;
|
|
121
|
+
}
|
|
122
|
+
return `${p.anchor.y}-${pad(p.anchor.m)}`;
|
|
123
|
+
}
|
|
124
|
+
function periodLabel(p) {
|
|
125
|
+
if (p.every === "day") return `${p.anchor.d} ${MONTHS[p.anchor.m - 1]}`;
|
|
126
|
+
if (p.every === "week") return `W${pad(isoWeek(p.anchor).week)}`;
|
|
127
|
+
return `${MONTHS[p.anchor.m - 1]} ${p.anchor.y}`;
|
|
128
|
+
}
|
|
129
|
+
function hhmm(at) {
|
|
130
|
+
const m = /^(\d{2}):(\d{2})$/.exec(at);
|
|
131
|
+
return m ? { H: Number(m[1]), M: Number(m[2]) } : { H: 9, M: 0 };
|
|
132
|
+
}
|
|
133
|
+
function dueAt(rule, p) {
|
|
134
|
+
const { H, M } = hhmm(rule.at);
|
|
135
|
+
const day = p.every === "day" ? p.anchor : p.every === "week" ? addDays(p.anchor, Math.min(7, Math.max(1, rule.on)) - 1) : { ...p.anchor, d: Math.min(28, Math.max(1, rule.on)) };
|
|
136
|
+
return zonedMoment(rule.timeZone, day, H, M);
|
|
137
|
+
}
|
|
138
|
+
function currentPeriod(rule, now) {
|
|
139
|
+
const w = wallClock(rule.timeZone, now);
|
|
140
|
+
let p = periodOf(rule.every, { y: w.y, m: w.m, d: w.d });
|
|
141
|
+
if (dueAt(rule, p) > now) p = previousPeriod(p);
|
|
142
|
+
return p;
|
|
143
|
+
}
|
|
144
|
+
function scheduleWords(rule) {
|
|
145
|
+
if (rule.every === "day") return `every day ${rule.at}`;
|
|
146
|
+
if (rule.every === "week") return `every ${WEEKDAYS[Math.min(7, Math.max(1, rule.on)) - 1]} ${rule.at}`;
|
|
147
|
+
const n = rule.on;
|
|
148
|
+
const suffix = n % 10 === 1 && n !== 11 ? "st" : n % 10 === 2 && n !== 12 ? "nd" : n % 10 === 3 && n !== 13 ? "rd" : "th";
|
|
149
|
+
return `every month on the ${n}${suffix}, ${rule.at}`;
|
|
150
|
+
}
|
|
151
|
+
function seriesWords(rule) {
|
|
152
|
+
const skills = rule.skills.map((s) => s.name);
|
|
153
|
+
return [scheduleWords(rule), skills.length ? `${skills.length === 1 ? "skill" : "skills"}: ${skills.join(", ")}` : null].filter(Boolean).join(" \xB7 ");
|
|
154
|
+
}
|
|
155
|
+
function sinceWords(rule, due) {
|
|
156
|
+
const w = wallClock(rule.timeZone, due);
|
|
157
|
+
const time = `${pad(w.H)}:${pad(w.M)}`;
|
|
158
|
+
if (rule.every === "day") return `since ${time}`;
|
|
159
|
+
if (rule.every === "week") return `since ${WEEKDAY_NAMES[isoWeekday(w) - 1]} ${time}`;
|
|
160
|
+
return `since ${w.d} ${MONTHS[w.m - 1]} ${time}`;
|
|
161
|
+
}
|
|
162
|
+
function momentWords(timeZone, ms) {
|
|
163
|
+
const w = wallClock(timeZone, ms);
|
|
164
|
+
return `${WEEKDAYS[isoWeekday(w) - 1]} ${w.d} ${MONTHS[w.m - 1]} ${pad(w.H)}:${pad(w.M)}`;
|
|
165
|
+
}
|
|
166
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
167
|
+
0 && (module.exports = {
|
|
168
|
+
currentPeriod,
|
|
169
|
+
dueAt,
|
|
170
|
+
isTimeZone,
|
|
171
|
+
isoWeek,
|
|
172
|
+
momentWords,
|
|
173
|
+
nextPeriod,
|
|
174
|
+
periodId,
|
|
175
|
+
periodLabel,
|
|
176
|
+
periodOf,
|
|
177
|
+
previousPeriod,
|
|
178
|
+
scheduleWords,
|
|
179
|
+
seriesWords,
|
|
180
|
+
sinceWords,
|
|
181
|
+
wallClock,
|
|
182
|
+
zonedMoment
|
|
183
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var references_exports = {};
|
|
19
|
+
__export(references_exports, {
|
|
20
|
+
REFERENCE_KINDS: () => REFERENCE_KINDS,
|
|
21
|
+
SHORT_ID_LENGTH: () => SHORT_ID_LENGTH,
|
|
22
|
+
formatReference: () => formatReference,
|
|
23
|
+
formatReferenceLine: () => formatReferenceLine,
|
|
24
|
+
parseReference: () => parseReference,
|
|
25
|
+
shortId: () => shortId
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(references_exports);
|
|
28
|
+
const REFERENCE_KINDS = ["plan", "task", "page", "comment", "attachment"];
|
|
29
|
+
const SHORT_ID_LENGTH = 8;
|
|
30
|
+
const FULL_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
31
|
+
function shortId(uid) {
|
|
32
|
+
return uid.replace(/-/g, "").slice(0, SHORT_ID_LENGTH).toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
function formatReference(kind, uid) {
|
|
35
|
+
return `${kind} ${shortId(uid)}`;
|
|
36
|
+
}
|
|
37
|
+
function formatReferenceLine(input) {
|
|
38
|
+
const quote = (t) => `"${t.replace(/\s+/g, " ").trim().slice(0, 80)}"`;
|
|
39
|
+
let line = formatReference(input.kind, input.uid);
|
|
40
|
+
if (input.title && input.title.trim()) line += ` ${quote(input.title)}`;
|
|
41
|
+
if (input.within) {
|
|
42
|
+
const w = input.within;
|
|
43
|
+
if (input.kind === "comment" || input.kind === "attachment") {
|
|
44
|
+
line += ` on ${formatReference(w.kind, w.uid)}`;
|
|
45
|
+
if (w.title && w.title.trim()) line += ` ${quote(w.title)}`;
|
|
46
|
+
} else if (w.title && w.title.trim()) {
|
|
47
|
+
line += ` (${w.kind} ${quote(w.title)})`;
|
|
48
|
+
} else {
|
|
49
|
+
line += ` (${formatReference(w.kind, w.uid)})`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return line;
|
|
53
|
+
}
|
|
54
|
+
function parseReference(raw) {
|
|
55
|
+
if (typeof raw !== "string") return null;
|
|
56
|
+
const text = raw.trim();
|
|
57
|
+
if (FULL_UUID.test(text)) return null;
|
|
58
|
+
const m = /^(?:(plan|task|page|comment|attachment)\s*[:\s]\s*|#)?([0-9a-f-]+)$/i.exec(text);
|
|
59
|
+
if (!m) return null;
|
|
60
|
+
const prefix = m[2].replace(/-/g, "").toLowerCase();
|
|
61
|
+
if (prefix.length < SHORT_ID_LENGTH || prefix.length >= 32) return null;
|
|
62
|
+
return { kind: m[1]?.toLowerCase() ?? null, prefix };
|
|
63
|
+
}
|
|
64
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
65
|
+
0 && (module.exports = {
|
|
66
|
+
REFERENCE_KINDS,
|
|
67
|
+
SHORT_ID_LENGTH,
|
|
68
|
+
formatReference,
|
|
69
|
+
formatReferenceLine,
|
|
70
|
+
parseReference,
|
|
71
|
+
shortId
|
|
72
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var rule_pattern_exports = {};
|
|
19
|
+
__export(rule_pattern_exports, {
|
|
20
|
+
inRulePattern: () => inRulePattern,
|
|
21
|
+
ruleCovers: () => ruleCovers
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(rule_pattern_exports);
|
|
24
|
+
var import_matcher = require("./matcher");
|
|
25
|
+
var import_package_entry = require("./package-entry");
|
|
26
|
+
var import_symbol_entry = require("./symbol-entry");
|
|
27
|
+
function inRulePattern(pattern, relPath) {
|
|
28
|
+
const p = relPath.replace(/^\.\//, "");
|
|
29
|
+
if (pattern.includes("*")) {
|
|
30
|
+
const re = new RegExp(`^${(0, import_matcher.globSource)(pattern)}$`);
|
|
31
|
+
return re.test(p);
|
|
32
|
+
}
|
|
33
|
+
if (pattern.endsWith("/")) return p.startsWith(pattern);
|
|
34
|
+
return p === pattern || p.startsWith(pattern + "/");
|
|
35
|
+
}
|
|
36
|
+
function ruleCovers(rule, file) {
|
|
37
|
+
if (rule.kind === "grep" || rule.kind === "agent") return (rule.in ?? []).some((p) => inRulePattern(p, file)) && !(rule.except ?? []).some((e) => inRulePattern(e, file));
|
|
38
|
+
if (rule.kind === "package") return inRulePattern(rule.from, file) && (0, import_package_entry.packageApplies)(rule.mayNotImport, file) || (rule.only ?? []).some((o) => inRulePattern(o, file));
|
|
39
|
+
if (rule.kind === "folder") return inRulePattern(rule.from, file);
|
|
40
|
+
if (rule.kind === "calls") {
|
|
41
|
+
return (rule.only ?? []).some((o) => inRulePattern(o, file)) || inRulePattern(rule.from, file) && (0, import_package_entry.ecosystemOfPath)(file) !== null;
|
|
42
|
+
}
|
|
43
|
+
if (rule.kind === "symbol") {
|
|
44
|
+
const sym = (0, import_symbol_entry.splitSymbol)(rule.mayNotImport);
|
|
45
|
+
if (!sym) return false;
|
|
46
|
+
if (file === sym.file || (rule.only ?? []).some((o) => inRulePattern(o, file))) return true;
|
|
47
|
+
const eco = (0, import_package_entry.ecosystemOfPath)(file);
|
|
48
|
+
return inRulePattern(rule.from, file) && eco !== null && eco === (0, import_package_entry.ecosystemOfPath)(sym.file);
|
|
49
|
+
}
|
|
50
|
+
return inRulePattern(rule.from, file) || inRulePattern(rule.mayNotImport, file);
|
|
51
|
+
}
|
|
52
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
53
|
+
0 && (module.exports = {
|
|
54
|
+
inRulePattern,
|
|
55
|
+
ruleCovers
|
|
56
|
+
});
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var sdp_fingerprint_exports = {};
|
|
19
|
+
__export(sdp_fingerprint_exports, {
|
|
20
|
+
SdpFingerprintError: () => SdpFingerprintError,
|
|
21
|
+
collectFingerprints: () => collectFingerprints,
|
|
22
|
+
extractSingleFingerprint: () => extractSingleFingerprint,
|
|
23
|
+
fingerprintsEqual: () => fingerprintsEqual,
|
|
24
|
+
normaliseFingerprint: () => normaliseFingerprint
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(sdp_fingerprint_exports);
|
|
27
|
+
class SdpFingerprintError extends Error {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = "SdpFingerprintError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const SHA256_FINGERPRINT = /^(?:[0-9A-F]{2}:){31}[0-9A-F]{2}$/;
|
|
34
|
+
function collectFingerprints(sdp) {
|
|
35
|
+
if (typeof sdp !== "string" || sdp.length === 0) {
|
|
36
|
+
throw new SdpFingerprintError("SDP is empty");
|
|
37
|
+
}
|
|
38
|
+
const out = [];
|
|
39
|
+
let section = "session";
|
|
40
|
+
let mediaIndex = -1;
|
|
41
|
+
for (const rawLine of sdp.split(/\r\n|\r|\n/)) {
|
|
42
|
+
const line = rawLine.trim();
|
|
43
|
+
if (line.length === 0) continue;
|
|
44
|
+
if (line.startsWith("m=")) {
|
|
45
|
+
mediaIndex += 1;
|
|
46
|
+
section = mediaIndex;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (!line.startsWith("a=fingerprint:")) continue;
|
|
50
|
+
const rest = line.slice("a=fingerprint:".length).trim();
|
|
51
|
+
const sp = rest.search(/\s/);
|
|
52
|
+
if (sp <= 0) {
|
|
53
|
+
throw new SdpFingerprintError(`Malformed fingerprint attribute: "${line.slice(0, 80)}"`);
|
|
54
|
+
}
|
|
55
|
+
const algorithm = rest.slice(0, sp).toLowerCase();
|
|
56
|
+
const value = rest.slice(sp + 1).trim().toUpperCase();
|
|
57
|
+
out.push({ section, algorithm, value });
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
function extractSingleFingerprint(sdp) {
|
|
62
|
+
const all = collectFingerprints(sdp);
|
|
63
|
+
if (all.length === 0) {
|
|
64
|
+
throw new SdpFingerprintError("SDP contains no DTLS fingerprint");
|
|
65
|
+
}
|
|
66
|
+
const nonSha256 = all.filter((f) => f.algorithm !== "sha-256");
|
|
67
|
+
if (nonSha256.length > 0) {
|
|
68
|
+
throw new SdpFingerprintError(
|
|
69
|
+
`SDP offers a non-sha-256 fingerprint (${nonSha256.map((f) => f.algorithm).join(", ")}); refusing`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
for (const f of all) {
|
|
73
|
+
if (!SHA256_FINGERPRINT.test(f.value)) {
|
|
74
|
+
throw new SdpFingerprintError(
|
|
75
|
+
`Malformed sha-256 fingerprint "${f.value.slice(0, 40)}"`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const distinct = new Set(all.map((f) => f.value));
|
|
80
|
+
if (distinct.size > 1) {
|
|
81
|
+
throw new SdpFingerprintError(
|
|
82
|
+
`SDP contains ${distinct.size} conflicting DTLS fingerprints; refusing to guess which is authoritative`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
const sessionCount = all.filter((f) => f.section === "session").length;
|
|
86
|
+
if (sessionCount > 1) {
|
|
87
|
+
throw new SdpFingerprintError(
|
|
88
|
+
`SDP repeats the session-level fingerprint attribute ${sessionCount} times`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return all[0].value;
|
|
92
|
+
}
|
|
93
|
+
function normaliseFingerprint(fp) {
|
|
94
|
+
if (typeof fp !== "string") return "";
|
|
95
|
+
const hex = fp.replace(/[^0-9A-Fa-f]/g, "").toUpperCase();
|
|
96
|
+
if (hex.length !== 64) return fp.trim().toUpperCase();
|
|
97
|
+
return (hex.match(/.{2}/g) ?? []).join(":");
|
|
98
|
+
}
|
|
99
|
+
function fingerprintsEqual(a, b) {
|
|
100
|
+
const na = normaliseFingerprint(a);
|
|
101
|
+
const nb = normaliseFingerprint(b);
|
|
102
|
+
if (na.length === 0 || nb.length === 0) return false;
|
|
103
|
+
if (na.length !== nb.length) return false;
|
|
104
|
+
let diff = 0;
|
|
105
|
+
for (let i = 0; i < na.length; i++) diff |= na.charCodeAt(i) ^ nb.charCodeAt(i);
|
|
106
|
+
return diff === 0;
|
|
107
|
+
}
|
|
108
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
109
|
+
0 && (module.exports = {
|
|
110
|
+
SdpFingerprintError,
|
|
111
|
+
collectFingerprints,
|
|
112
|
+
extractSingleFingerprint,
|
|
113
|
+
fingerprintsEqual,
|
|
114
|
+
normaliseFingerprint
|
|
115
|
+
});
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var sdp_minimal_exports = {};
|
|
19
|
+
__export(sdp_minimal_exports, {
|
|
20
|
+
ensureColonFingerprint: () => ensureColonFingerprint,
|
|
21
|
+
extractSdpParams: () => extractSdpParams,
|
|
22
|
+
reconstructAnswerSdp: () => reconstructAnswerSdp,
|
|
23
|
+
reconstructOfferSdp: () => reconstructOfferSdp,
|
|
24
|
+
stripColonFingerprint: () => stripColonFingerprint
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(sdp_minimal_exports);
|
|
27
|
+
var import_sdp_fingerprint = require("./sdp-fingerprint");
|
|
28
|
+
function candidateLine(raw) {
|
|
29
|
+
if (typeof raw === "string") {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(raw);
|
|
32
|
+
return parsed?.candidate ?? raw;
|
|
33
|
+
} catch {
|
|
34
|
+
return raw;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return raw?.candidate ?? String(raw);
|
|
38
|
+
}
|
|
39
|
+
const CANDIDATE_RE = /candidate:\S+\s+\d+\s+udp\s+\d+\s+([\d.]+)\s+(\d+)\s+typ\s+(host|srflx)/i;
|
|
40
|
+
function extractSdpParams(sdp, iceCandidates = []) {
|
|
41
|
+
const iu = sdp.match(/a=ice-ufrag:(\S+)/)?.[1];
|
|
42
|
+
const ip = sdp.match(/a=ice-pwd:(\S+)/)?.[1];
|
|
43
|
+
const fp = (0, import_sdp_fingerprint.extractSingleFingerprint)(sdp);
|
|
44
|
+
if (!iu) throw new Error("SDP missing ice-ufrag");
|
|
45
|
+
if (!ip) throw new Error("SDP missing ice-pwd");
|
|
46
|
+
const hosts = /* @__PURE__ */ new Map();
|
|
47
|
+
const reflexive = /* @__PURE__ */ new Map();
|
|
48
|
+
const consider = (line) => {
|
|
49
|
+
const m = CANDIDATE_RE.exec(line);
|
|
50
|
+
if (!m) return;
|
|
51
|
+
const [, addr, port, typ] = m;
|
|
52
|
+
(typ.toLowerCase() === "host" ? hosts : reflexive).set(addr, Number(port));
|
|
53
|
+
};
|
|
54
|
+
for (const raw of iceCandidates) consider(candidateLine(raw));
|
|
55
|
+
for (const m of sdp.matchAll(/^a=candidate:.*$/gm)) consider(m[0]);
|
|
56
|
+
const chosen = hosts.size > 0 ? hosts : reflexive;
|
|
57
|
+
if (chosen.size === 0) throw new Error("No usable ICE candidate found");
|
|
58
|
+
const ports = new Set(chosen.values());
|
|
59
|
+
if (ports.size > 1) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
`ICE candidates span ${ports.size} ports (${[...ports].join(", ")}); the compact payload assumes one`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
const maxMessageSize = Number(sdp.match(/a=max-message-size:(\d+)/)?.[1] ?? 65536);
|
|
65
|
+
return {
|
|
66
|
+
iu,
|
|
67
|
+
ip,
|
|
68
|
+
fp,
|
|
69
|
+
candidateAddrs: [...chosen.keys()],
|
|
70
|
+
candidatePort: [...ports][0],
|
|
71
|
+
maxMessageSize
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function buildSdp(params, setup) {
|
|
75
|
+
const fp = ensureColonFingerprint(params.fp);
|
|
76
|
+
return [
|
|
77
|
+
"v=0",
|
|
78
|
+
"o=- 0 0 IN IP4 0.0.0.0",
|
|
79
|
+
"s=-",
|
|
80
|
+
"t=0 0",
|
|
81
|
+
"a=group:BUNDLE 0",
|
|
82
|
+
"m=application 9 UDP/DTLS/SCTP webrtc-datachannel",
|
|
83
|
+
"c=IN IP4 0.0.0.0",
|
|
84
|
+
`a=ice-ufrag:${params.iu}`,
|
|
85
|
+
`a=ice-pwd:${params.ip}`,
|
|
86
|
+
"a=ice-options:trickle",
|
|
87
|
+
`a=fingerprint:sha-256 ${fp}`,
|
|
88
|
+
`a=setup:${setup}`,
|
|
89
|
+
"a=mid:0",
|
|
90
|
+
"a=sctp-port:5000",
|
|
91
|
+
`a=max-message-size:${params.maxMessageSize}`,
|
|
92
|
+
// One line per interface, so a pairing made at a desk still connects over
|
|
93
|
+
// a VPN. Priority descends with index purely so the order is stable.
|
|
94
|
+
...params.candidateAddrs.map(
|
|
95
|
+
(addr, i) => `a=candidate:${i + 1} 1 udp ${2113937151 - i} ${addr} ${params.candidatePort} typ host generation 0`
|
|
96
|
+
),
|
|
97
|
+
// Without this the peer waits for candidates that will never arrive and
|
|
98
|
+
// pays a gathering timeout before it gives up.
|
|
99
|
+
"a=end-of-candidates",
|
|
100
|
+
""
|
|
101
|
+
].join("\r\n");
|
|
102
|
+
}
|
|
103
|
+
function reconstructOfferSdp(params) {
|
|
104
|
+
return buildSdp(params, "actpass");
|
|
105
|
+
}
|
|
106
|
+
function reconstructAnswerSdp(params) {
|
|
107
|
+
return buildSdp(params, "active");
|
|
108
|
+
}
|
|
109
|
+
function stripColonFingerprint(fp) {
|
|
110
|
+
return fp.replace(/:/g, "");
|
|
111
|
+
}
|
|
112
|
+
function ensureColonFingerprint(fp) {
|
|
113
|
+
if (fp.includes(":")) return fp;
|
|
114
|
+
return fp.match(/.{1,2}/g)?.join(":") ?? fp;
|
|
115
|
+
}
|
|
116
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
117
|
+
0 && (module.exports = {
|
|
118
|
+
ensureColonFingerprint,
|
|
119
|
+
extractSdpParams,
|
|
120
|
+
reconstructAnswerSdp,
|
|
121
|
+
reconstructOfferSdp,
|
|
122
|
+
stripColonFingerprint
|
|
123
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var secret_paths_exports = {};
|
|
19
|
+
__export(secret_paths_exports, {
|
|
20
|
+
looksSecret: () => looksSecret
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(secret_paths_exports);
|
|
23
|
+
const TEMPLATE = /\.(example|sample|template|dist)$/i;
|
|
24
|
+
const NAMES = /^(\.env(\..+)?|\.npmrc|\.pypirc|\.netrc|\.pgpass|\.htpasswd|credentials(\.json)?|secrets?\.(json|ya?ml|toml)|service-account.*\.json|id_(rsa|dsa|ecdsa|ed25519))$/i;
|
|
25
|
+
const EXTENSIONS = /\.(pem|key|p12|pfx|jks|keystore|ppk|tfvars|kdbx)$/i;
|
|
26
|
+
function looksSecret(p) {
|
|
27
|
+
const name = p.split(/[\\/]/).pop() ?? p;
|
|
28
|
+
if (TEMPLATE.test(name)) return false;
|
|
29
|
+
return NAMES.test(name) || EXTENSIONS.test(name);
|
|
30
|
+
}
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
looksSecret
|
|
34
|
+
});
|