codetrellis 0.0.0-stage → 0.3.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 +41 -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/cli-install.js +249 -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/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/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 +275 -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 +209 -0
- package/src/cli/conformity.js +106 -0
- package/src/cli/desktop.js +91 -0
- package/src/cli/main.js +411 -0
- package/src/cli/pipeline.js +109 -0
- package/src/cli/plan-verbs.js +259 -0
- package/src/cli/review-adapters.js +220 -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 +360 -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,120 @@
|
|
|
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 matcher_exports = {};
|
|
19
|
+
__export(matcher_exports, {
|
|
20
|
+
MATCH_KINDS: () => MATCH_KINDS,
|
|
21
|
+
globSource: () => globSource,
|
|
22
|
+
lineMatches: () => lineMatches,
|
|
23
|
+
matcherOf: () => matcherOf,
|
|
24
|
+
regexProblem: () => regexProblem,
|
|
25
|
+
splitTarget: () => splitTarget,
|
|
26
|
+
thresholdProblem: () => thresholdProblem,
|
|
27
|
+
underPattern: () => underPattern,
|
|
28
|
+
wholly: () => wholly
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(matcher_exports);
|
|
31
|
+
var import_fuzzy = require("./fuzzy");
|
|
32
|
+
const MATCH_KINDS = ["glob", "regex", "fuzzy"];
|
|
33
|
+
const MAX_PATTERN = 200;
|
|
34
|
+
const escapeRe = (s) => s.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
35
|
+
function globSource(glob) {
|
|
36
|
+
let out = "";
|
|
37
|
+
for (let i = 0; i < glob.length; ) {
|
|
38
|
+
if (glob.startsWith("**", i)) {
|
|
39
|
+
const wholeFolder = (i === 0 || glob[i - 1] === "/") && glob[i + 2] === "/";
|
|
40
|
+
out += wholeFolder ? "(?:.*/)?" : ".*";
|
|
41
|
+
i += wholeFolder ? 3 : 2;
|
|
42
|
+
} else if (glob[i] === "*") {
|
|
43
|
+
out += "[^/]*";
|
|
44
|
+
i += 1;
|
|
45
|
+
} else {
|
|
46
|
+
out += escapeRe(glob[i]);
|
|
47
|
+
i += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
function regexProblem(source) {
|
|
53
|
+
if (source.length > MAX_PATTERN) return `a regex is at most ${MAX_PATTERN} characters`;
|
|
54
|
+
if (/\((?:[^()\\]|\\.)*[+*}](?:[^()\\]|\\.)*\)\s*[+*{]/.test(source)) return "a regex may not repeat a group that itself repeats, like (a+)+: it can run without end";
|
|
55
|
+
try {
|
|
56
|
+
new RegExp(source);
|
|
57
|
+
} catch (err) {
|
|
58
|
+
return `the regex does not compile: ${err.message}`;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const compiled = /* @__PURE__ */ new Map();
|
|
63
|
+
function wholly(kind, pattern, text) {
|
|
64
|
+
const key = `${kind}\0${pattern}`;
|
|
65
|
+
let re = compiled.get(key);
|
|
66
|
+
if (!re) {
|
|
67
|
+
re = new RegExp(`^(?:${kind === "glob" ? globSource(pattern) : pattern})$`);
|
|
68
|
+
if (compiled.size > 500) compiled.clear();
|
|
69
|
+
compiled.set(key, re);
|
|
70
|
+
}
|
|
71
|
+
return re.test(text);
|
|
72
|
+
}
|
|
73
|
+
function underPattern(kind, pattern, text) {
|
|
74
|
+
if (wholly(kind, pattern, text)) return true;
|
|
75
|
+
for (let i = text.indexOf("/"); i >= 0; i = text.indexOf("/", i + 1)) {
|
|
76
|
+
if (wholly(kind, pattern, text.slice(0, i))) return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
function matcherOf(match, value) {
|
|
81
|
+
if (match === void 0 || match === null || match === "exact") return value.includes("*") ? "glob" : null;
|
|
82
|
+
return MATCH_KINDS.includes(match) ? match : "bad";
|
|
83
|
+
}
|
|
84
|
+
function thresholdProblem(t) {
|
|
85
|
+
return typeof t === "number" && t > 0.5 && t < 1 ? null : "threshold is how alike, above 0.5 and below 1, like 0.85";
|
|
86
|
+
}
|
|
87
|
+
function splitTarget(v) {
|
|
88
|
+
if (v && typeof v === "object" && !Array.isArray(v) && "value" in v) {
|
|
89
|
+
const o = v;
|
|
90
|
+
return { value: o.value, match: o.match, ...o.threshold !== void 0 ? { threshold: o.threshold } : {} };
|
|
91
|
+
}
|
|
92
|
+
return { value: v, match: void 0 };
|
|
93
|
+
}
|
|
94
|
+
const lineCompiled = /* @__PURE__ */ new Map();
|
|
95
|
+
const MAX_LINE = 2e3;
|
|
96
|
+
function lineMatches(kind, pattern, line, ignoreCase = false, threshold = import_fuzzy.DEFAULT_THRESHOLD) {
|
|
97
|
+
const text = line.length > MAX_LINE ? line.slice(0, MAX_LINE) : line;
|
|
98
|
+
if (kind === null) return ignoreCase ? text.toLowerCase().includes(pattern.toLowerCase()) : text.includes(pattern);
|
|
99
|
+
if (kind === "fuzzy") return (0, import_fuzzy.wordsOf)(text).some((w) => w.toLowerCase() !== pattern.toLowerCase() && (0, import_fuzzy.similarity)(w, pattern) >= threshold);
|
|
100
|
+
const key = `${kind}\0${ignoreCase ? "i" : ""}\0${pattern}`;
|
|
101
|
+
let re = lineCompiled.get(key);
|
|
102
|
+
if (!re) {
|
|
103
|
+
re = new RegExp(kind === "glob" ? pattern.split("*").map(escapeRe).join(".*") : pattern, ignoreCase ? "i" : "");
|
|
104
|
+
if (lineCompiled.size > 500) lineCompiled.clear();
|
|
105
|
+
lineCompiled.set(key, re);
|
|
106
|
+
}
|
|
107
|
+
return re.test(text);
|
|
108
|
+
}
|
|
109
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
110
|
+
0 && (module.exports = {
|
|
111
|
+
MATCH_KINDS,
|
|
112
|
+
globSource,
|
|
113
|
+
lineMatches,
|
|
114
|
+
matcherOf,
|
|
115
|
+
regexProblem,
|
|
116
|
+
splitTarget,
|
|
117
|
+
thresholdProblem,
|
|
118
|
+
underPattern,
|
|
119
|
+
wholly
|
|
120
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
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 merge_order_exports = {};
|
|
19
|
+
__export(merge_order_exports, {
|
|
20
|
+
mergeOrder: () => mergeOrder
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(merge_order_exports);
|
|
23
|
+
const list = (xs) => xs.length <= 1 ? xs.join("") : `${xs.slice(0, -1).join(", ")} and ${xs[xs.length - 1]}`;
|
|
24
|
+
function mergeOrder(lines, deps) {
|
|
25
|
+
const byKey = new Map(lines.map((l) => [l.key, l]));
|
|
26
|
+
const real = deps.filter((d) => d.first !== d.then && byKey.has(d.first) && byKey.has(d.then));
|
|
27
|
+
const incoming = new Map(lines.map((l) => [l.key, /* @__PURE__ */ new Set()]));
|
|
28
|
+
for (const d of real) incoming.get(d.then).add(d.first);
|
|
29
|
+
const rank = (a, b) => Number(b.ready) - Number(a.ready) || a.name.localeCompare(b.name);
|
|
30
|
+
const placed = [];
|
|
31
|
+
const done = /* @__PURE__ */ new Set();
|
|
32
|
+
const cycle = [];
|
|
33
|
+
while (done.size < lines.length) {
|
|
34
|
+
const waiting = lines.filter((l) => !done.has(l.key)).sort(rank);
|
|
35
|
+
const free = waiting.filter((l) => [...incoming.get(l.key)].every((k) => done.has(k)));
|
|
36
|
+
const next = free[0] ?? waiting[0];
|
|
37
|
+
if (!free.length) cycle.push(next.key);
|
|
38
|
+
placed.push(next.key);
|
|
39
|
+
done.add(next.key);
|
|
40
|
+
}
|
|
41
|
+
const name = (k) => byKey.get(k).name;
|
|
42
|
+
const reasonFor = (key) => {
|
|
43
|
+
if (cycle.includes(key)) {
|
|
44
|
+
const partners = [...new Set(real.filter((d) => d.then === key && placed.indexOf(d.first) > placed.indexOf(key)).map((d) => name(d.first)))];
|
|
45
|
+
return `${name(key)} and ${list(partners)} each change something the other imports: merge ${name(key)} first, then update ${list(partners)} to it.`;
|
|
46
|
+
}
|
|
47
|
+
const after = real.filter((d) => d.then === key);
|
|
48
|
+
const before = real.filter((d) => d.first === key);
|
|
49
|
+
const parts = [];
|
|
50
|
+
if (after.length) {
|
|
51
|
+
parts.push(`After ${list([...new Set(after.map((d) => name(d.first)))])}: it changes ${list([...new Set(after.map((d) => d.symbol))])}, which this imports, so update to it first.`);
|
|
52
|
+
}
|
|
53
|
+
if (before.length) {
|
|
54
|
+
const who = [...new Set(before.map((d) => name(d.then)))];
|
|
55
|
+
parts.push(`Before ${list(who)}: ${who.length > 1 ? "they import" : "it imports"} ${list([...new Set(before.map((d) => d.symbol))])}, which this changes, and will need updating after.`);
|
|
56
|
+
}
|
|
57
|
+
if (parts.length === 0) return "No other line of work depends on this one.";
|
|
58
|
+
return parts.join(" ");
|
|
59
|
+
};
|
|
60
|
+
return placed.map((key, i) => ({ key, position: i + 1, reason: reasonFor(key) }));
|
|
61
|
+
}
|
|
62
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
63
|
+
0 && (module.exports = {
|
|
64
|
+
mergeOrder
|
|
65
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
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 open_findings_exports = {};
|
|
19
|
+
__export(open_findings_exports, {
|
|
20
|
+
blockingRuns: () => blockingRuns,
|
|
21
|
+
findingHover: () => findingHover,
|
|
22
|
+
latestRun: () => latestRun,
|
|
23
|
+
openFindings: () => openFindings,
|
|
24
|
+
placeFindings: () => placeFindings
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(open_findings_exports);
|
|
27
|
+
var import_import_line = require("./import-line");
|
|
28
|
+
function latestRun(runs) {
|
|
29
|
+
let best = null;
|
|
30
|
+
for (const r of runs) if (!best || r.at > best.at) best = r;
|
|
31
|
+
return best;
|
|
32
|
+
}
|
|
33
|
+
function openFindings(runs, files) {
|
|
34
|
+
const run = latestRun(runs);
|
|
35
|
+
if (!run) return null;
|
|
36
|
+
const here = new Set(files);
|
|
37
|
+
return { run, findings: run.findings.filter((f) => here.has(f.path)) };
|
|
38
|
+
}
|
|
39
|
+
function placeFindings(findings, runId, text, startLine = 1) {
|
|
40
|
+
const out = [];
|
|
41
|
+
for (const f of findings) {
|
|
42
|
+
const at = (0, import_import_line.importLine)(text, f.imports);
|
|
43
|
+
if (at !== null) out.push({ ...f, line: at + startLine - 1, runId });
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
function findingHover(f) {
|
|
48
|
+
return `${f.failing ? "\u2717" : "\u26A0"} ${f.rule} (${f.strength}): ${f.words}${f.fix ? ` \u2192 ${f.fix}` : ""}`;
|
|
49
|
+
}
|
|
50
|
+
function blockingRuns(runs, max = 5) {
|
|
51
|
+
const latest = /* @__PURE__ */ new Map();
|
|
52
|
+
for (const r of runs) {
|
|
53
|
+
const key = `${r.who}
|
|
54
|
+
${r.ranIn}
|
|
55
|
+
${r.scope ?? ""}`;
|
|
56
|
+
const had = latest.get(key);
|
|
57
|
+
if (!had || r.at > had.at) latest.set(key, r);
|
|
58
|
+
}
|
|
59
|
+
return [...latest.values()].filter((r) => !r.outcome.ok).sort((a, b) => b.at - a.at).slice(0, max);
|
|
60
|
+
}
|
|
61
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
62
|
+
0 && (module.exports = {
|
|
63
|
+
blockingRuns,
|
|
64
|
+
findingHover,
|
|
65
|
+
latestRun,
|
|
66
|
+
openFindings,
|
|
67
|
+
placeFindings
|
|
68
|
+
});
|
|
@@ -0,0 +1,108 @@
|
|
|
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 other_work_exports = {};
|
|
19
|
+
__export(other_work_exports, {
|
|
20
|
+
otherWorkInFlight: () => otherWorkInFlight,
|
|
21
|
+
otherWorkMarkdown: () => otherWorkMarkdown
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(other_work_exports);
|
|
24
|
+
var import_signal_words = require("./signal-words");
|
|
25
|
+
const RANK = { open: 0, acknowledged: 1, intended: 2, dismissed: 3, fixed: 4 };
|
|
26
|
+
const SEVERITY = { high: 0, medium: 1, low: 2 };
|
|
27
|
+
const MAX_FIXED = 5;
|
|
28
|
+
function who(by) {
|
|
29
|
+
if (!by) return "someone";
|
|
30
|
+
if (by.actorType === "unverified") return "someone through the local API, not verified as the person";
|
|
31
|
+
return by.channel === "phone" ? "the person, from their phone" : "the person";
|
|
32
|
+
}
|
|
33
|
+
function outcomeOf(s) {
|
|
34
|
+
if (s.state === "resolved") return "fixed";
|
|
35
|
+
return s.state;
|
|
36
|
+
}
|
|
37
|
+
function outcomeWords(s, outcome) {
|
|
38
|
+
switch (outcome) {
|
|
39
|
+
case "fixed":
|
|
40
|
+
return "Fixed: what caused it is gone.";
|
|
41
|
+
case "acknowledged":
|
|
42
|
+
return `Acknowledged by ${who(s.stateBy)}.`;
|
|
43
|
+
case "intended":
|
|
44
|
+
return `Marked intended by ${who(s.stateBy)}: a decision, not an accident.`;
|
|
45
|
+
case "dismissed":
|
|
46
|
+
return `Set aside by ${who(s.stateBy)}.`;
|
|
47
|
+
default:
|
|
48
|
+
return s.reopened ? `Open again: it changed since it was ${s.reopened.from === "intended" ? "marked intended" : "acknowledged"}.` : "Open: nobody has answered it yet.";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function mergeWords(s, target, label, same) {
|
|
52
|
+
if (s.kind !== "contract" || !s.subject.by) return void 0;
|
|
53
|
+
const symbol = s.subject.symbol ?? "an export";
|
|
54
|
+
const others = (0, import_signal_words.sideRootsOf)(s).filter((r) => !same(r, target)).map(label);
|
|
55
|
+
if (same(s.subject.by, target)) {
|
|
56
|
+
const verb = s.subject.change === "removed" ? "removes" : "changes";
|
|
57
|
+
const who2 = others.join(" and ") || "another line of work";
|
|
58
|
+
return `Merging this ${verb} ${symbol}; ${who2} ${others.length > 1 ? "import" : "imports"} it and will need updating.`;
|
|
59
|
+
}
|
|
60
|
+
return `This imports ${symbol}, which ${label(s.subject.by)} ${s.subject.change === "removed" ? "removes" : "changes"}: merge after it and update, or ask it to keep the old form.`;
|
|
61
|
+
}
|
|
62
|
+
function otherWorkInFlight(target, signals, label, same = (a, b) => a === b) {
|
|
63
|
+
const mine = signals.filter((s) => s.workstreams.some((w) => same(w, target.root)));
|
|
64
|
+
const entries = mine.map((s) => {
|
|
65
|
+
const outcome = outcomeOf(s);
|
|
66
|
+
const merge = mergeWords(s, target.root, label, same);
|
|
67
|
+
return {
|
|
68
|
+
signalId: s.id,
|
|
69
|
+
kind: s.kind,
|
|
70
|
+
severity: s.severity,
|
|
71
|
+
heading: (0, import_signal_words.kindWords)(s),
|
|
72
|
+
sides: (0, import_signal_words.sideWords)(s, label).map(({ name, words }) => ({ name, words })),
|
|
73
|
+
outcome,
|
|
74
|
+
outcomeWords: outcomeWords(s, outcome),
|
|
75
|
+
notes: (s.told ?? []).filter((t) => t.note).map((t) => `${t.agentType}: ${t.note}`),
|
|
76
|
+
...merge ? { merge } : {}
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
entries.sort((a, b) => RANK[a.outcome] - RANK[b.outcome] || SEVERITY[a.severity] - SEVERITY[b.severity]);
|
|
80
|
+
const fixed = entries.filter((e) => e.outcome === "fixed");
|
|
81
|
+
const kept = [...entries.filter((e) => e.outcome !== "fixed"), ...fixed.slice(0, MAX_FIXED)];
|
|
82
|
+
return {
|
|
83
|
+
workstream: target,
|
|
84
|
+
entries: kept,
|
|
85
|
+
openHigh: entries.filter((e) => e.outcome === "open" && e.severity === "high").length
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function otherWorkMarkdown(o) {
|
|
89
|
+
const lines = ["### Other work in flight", ""];
|
|
90
|
+
if (o.entries.length === 0) {
|
|
91
|
+
lines.push(`No other line of work overlaps with \`${o.workstream.name}\`.`, "");
|
|
92
|
+
return lines.join("\n");
|
|
93
|
+
}
|
|
94
|
+
lines.push(`How \`${o.workstream.name}\` meets the other lines of work, and what happened to each overlap.`, "");
|
|
95
|
+
for (const e of o.entries) {
|
|
96
|
+
lines.push(`- **${e.severity.toUpperCase()} \xB7 ${e.heading}.** ${e.sides.map((s) => s.words).join(" ")}`);
|
|
97
|
+
if (e.merge) lines.push(` ${e.merge}`);
|
|
98
|
+
lines.push(` ${e.outcomeWords}`);
|
|
99
|
+
for (const n of e.notes) lines.push(` > ${n}`);
|
|
100
|
+
}
|
|
101
|
+
lines.push("");
|
|
102
|
+
return lines.join("\n");
|
|
103
|
+
}
|
|
104
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
105
|
+
0 && (module.exports = {
|
|
106
|
+
otherWorkInFlight,
|
|
107
|
+
otherWorkMarkdown
|
|
108
|
+
});
|
|
@@ -0,0 +1,142 @@
|
|
|
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 package_entry_exports = {};
|
|
19
|
+
__export(package_entry_exports, {
|
|
20
|
+
PACKAGE_ECOSYSTEMS: () => PACKAGE_ECOSYSTEMS,
|
|
21
|
+
ecosystemOfPath: () => ecosystemOfPath,
|
|
22
|
+
isPackageEntry: () => isPackageEntry,
|
|
23
|
+
packageApplies: () => packageApplies,
|
|
24
|
+
packageEntry: () => packageEntry,
|
|
25
|
+
packageMatches: () => packageMatches,
|
|
26
|
+
packageProblem: () => packageProblem
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(package_entry_exports);
|
|
29
|
+
const PACKAGE_ECOSYSTEMS = ["npm", "pypi", "go", "cargo", "maven", "nuget", "gem", "composer", "swift"];
|
|
30
|
+
const ECOSYSTEM_RE = new RegExp(`^(${PACKAGE_ECOSYSTEMS.join("|")}):(.+)$`);
|
|
31
|
+
function isPackageEntry(s) {
|
|
32
|
+
return ECOSYSTEM_RE.test(s);
|
|
33
|
+
}
|
|
34
|
+
function packageProblem(s) {
|
|
35
|
+
if (typeof s !== "string" || !ECOSYSTEM_RE.test(s.trim())) {
|
|
36
|
+
return `package must be an ecosystem and a name, like npm:stripe (one of ${PACKAGE_ECOSYSTEMS.join(", ")})`;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const ecosystemOf = {
|
|
41
|
+
typescript: "npm",
|
|
42
|
+
javascript: "npm",
|
|
43
|
+
tsx: "npm",
|
|
44
|
+
jsx: "npm",
|
|
45
|
+
python: "pypi",
|
|
46
|
+
go: "go",
|
|
47
|
+
rust: "cargo",
|
|
48
|
+
ruby: "gem",
|
|
49
|
+
java: "maven",
|
|
50
|
+
kotlin: "maven",
|
|
51
|
+
csharp: "nuget",
|
|
52
|
+
php: "composer",
|
|
53
|
+
swift: "swift"
|
|
54
|
+
};
|
|
55
|
+
const ecosystemOfExt = {
|
|
56
|
+
ts: "npm",
|
|
57
|
+
tsx: "npm",
|
|
58
|
+
mts: "npm",
|
|
59
|
+
cts: "npm",
|
|
60
|
+
js: "npm",
|
|
61
|
+
jsx: "npm",
|
|
62
|
+
mjs: "npm",
|
|
63
|
+
cjs: "npm",
|
|
64
|
+
py: "pypi",
|
|
65
|
+
go: "go",
|
|
66
|
+
rs: "cargo",
|
|
67
|
+
rb: "gem",
|
|
68
|
+
java: "maven",
|
|
69
|
+
kt: "maven",
|
|
70
|
+
kts: "maven",
|
|
71
|
+
cs: "nuget",
|
|
72
|
+
php: "composer",
|
|
73
|
+
swift: "swift"
|
|
74
|
+
};
|
|
75
|
+
function ecosystemOfPath(file) {
|
|
76
|
+
const dot = file.lastIndexOf(".");
|
|
77
|
+
return dot > file.lastIndexOf("/") ? ecosystemOfExt[file.slice(dot + 1).toLowerCase()] ?? null : null;
|
|
78
|
+
}
|
|
79
|
+
function packageApplies(rulePackage, file) {
|
|
80
|
+
const eco = ecosystemOfPath(file);
|
|
81
|
+
return eco !== null && rulePackage.startsWith(`${eco}:`);
|
|
82
|
+
}
|
|
83
|
+
const RUST_LOCAL = /* @__PURE__ */ new Set(["crate", "self", "super", "std", "core", "alloc"]);
|
|
84
|
+
const GO_MODULE_SEGMENTS = [
|
|
85
|
+
[/^golang\.org\/x\//, 3],
|
|
86
|
+
[/^gopkg\.in\//, 2],
|
|
87
|
+
[/^(github\.com|gitlab\.com|bitbucket\.org)\//, 3]
|
|
88
|
+
];
|
|
89
|
+
function packageEntry(language, source, isRelative = false) {
|
|
90
|
+
const eco = ecosystemOf[language];
|
|
91
|
+
const s = source.trim();
|
|
92
|
+
if (!eco || !s || isRelative) return null;
|
|
93
|
+
switch (eco) {
|
|
94
|
+
case "npm": {
|
|
95
|
+
if (s.startsWith(".") || s.startsWith("/") || s.startsWith("node:") || s.startsWith("#")) return null;
|
|
96
|
+
const parts = s.split("/");
|
|
97
|
+
const name = s.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
|
|
98
|
+
return name ? `npm:${name}` : null;
|
|
99
|
+
}
|
|
100
|
+
case "pypi": {
|
|
101
|
+
if (s.startsWith(".")) return null;
|
|
102
|
+
return `pypi:${s.split(".")[0]}`;
|
|
103
|
+
}
|
|
104
|
+
case "go": {
|
|
105
|
+
const first = s.split("/")[0];
|
|
106
|
+
if (!first.includes(".")) return null;
|
|
107
|
+
const keep = GO_MODULE_SEGMENTS.find(([re]) => re.test(s))?.[1] ?? 3;
|
|
108
|
+
return `go:${s.split("/").slice(0, keep).join("/")}`;
|
|
109
|
+
}
|
|
110
|
+
case "cargo": {
|
|
111
|
+
const head = s.replace(/^::/, "").split("::")[0];
|
|
112
|
+
return RUST_LOCAL.has(head) ? null : `cargo:${head}`;
|
|
113
|
+
}
|
|
114
|
+
case "gem":
|
|
115
|
+
return s.startsWith(".") ? null : `gem:${s.split("/")[0]}`;
|
|
116
|
+
case "maven":
|
|
117
|
+
case "nuget":
|
|
118
|
+
case "swift":
|
|
119
|
+
return `${eco}:${s}`;
|
|
120
|
+
case "composer":
|
|
121
|
+
return `composer:${s.replace(/^\\/, "")}`;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const SEPARATORS = ["/", ".", "\\", "::"];
|
|
126
|
+
function packageMatches(rulePackage, entry) {
|
|
127
|
+
if (rulePackage === entry) return true;
|
|
128
|
+
const r = ECOSYSTEM_RE.exec(rulePackage);
|
|
129
|
+
const e = ECOSYSTEM_RE.exec(entry);
|
|
130
|
+
if (!r || !e || r[1] !== e[1]) return false;
|
|
131
|
+
return SEPARATORS.some((sep) => e[2].startsWith(r[2] + sep));
|
|
132
|
+
}
|
|
133
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
134
|
+
0 && (module.exports = {
|
|
135
|
+
PACKAGE_ECOSYSTEMS,
|
|
136
|
+
ecosystemOfPath,
|
|
137
|
+
isPackageEntry,
|
|
138
|
+
packageApplies,
|
|
139
|
+
packageEntry,
|
|
140
|
+
packageMatches,
|
|
141
|
+
packageProblem
|
|
142
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
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 plan_vocab_exports = {};
|
|
19
|
+
__export(plan_vocab_exports, {
|
|
20
|
+
PLAN_STATUSES: () => PLAN_STATUSES,
|
|
21
|
+
TASK_STATUSES: () => TASK_STATUSES,
|
|
22
|
+
isPlanStatus: () => isPlanStatus,
|
|
23
|
+
isTaskStatus: () => isTaskStatus
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(plan_vocab_exports);
|
|
26
|
+
const PLAN_STATUSES = ["draft", "review", "approved", "in_progress", "completed", "archived"];
|
|
27
|
+
const TASK_STATUSES = ["pending", "assigned", "in_progress", "done", "blocked", "skipped"];
|
|
28
|
+
function isPlanStatus(v) {
|
|
29
|
+
return typeof v === "string" && PLAN_STATUSES.includes(v);
|
|
30
|
+
}
|
|
31
|
+
function isTaskStatus(v) {
|
|
32
|
+
return typeof v === "string" && TASK_STATUSES.includes(v);
|
|
33
|
+
}
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
PLAN_STATUSES,
|
|
37
|
+
TASK_STATUSES,
|
|
38
|
+
isPlanStatus,
|
|
39
|
+
isTaskStatus
|
|
40
|
+
});
|
|
@@ -0,0 +1,86 @@
|
|
|
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 pptx_xml_exports = {};
|
|
19
|
+
__export(pptx_xml_exports, {
|
|
20
|
+
slideOrder: () => slideOrder,
|
|
21
|
+
slideText: () => slideText,
|
|
22
|
+
thumbnailPart: () => thumbnailPart
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(pptx_xml_exports);
|
|
25
|
+
var import_xlsx_xml = require("./xlsx-xml");
|
|
26
|
+
function slideOrder(presentationXml, relsXml, partNames) {
|
|
27
|
+
const present = new Set(partNames);
|
|
28
|
+
const targets = /* @__PURE__ */ new Map();
|
|
29
|
+
for (const m of (relsXml ?? "").matchAll(/<Relationship\b[^>]*>/g)) {
|
|
30
|
+
const id = m[0].match(/\bId="([^"]+)"/)?.[1];
|
|
31
|
+
const target = m[0].match(/\bTarget="([^"]+)"/)?.[1];
|
|
32
|
+
if (id && target) targets.set(id, resolvePart("ppt/", (0, import_xlsx_xml.decodeXml)(target)));
|
|
33
|
+
}
|
|
34
|
+
const ordered = [];
|
|
35
|
+
const list = presentationXml?.match(/<p:sldIdLst\b[^>]*>([\s\S]*?)<\/p:sldIdLst>/)?.[1] ?? "";
|
|
36
|
+
for (const m of list.matchAll(/<p:sldId\b[^>]*\br:id="([^"]+)"/g)) {
|
|
37
|
+
const part = targets.get(m[1]);
|
|
38
|
+
if (part && present.has(part) && !ordered.includes(part)) ordered.push(part);
|
|
39
|
+
}
|
|
40
|
+
if (ordered.length > 0) return ordered;
|
|
41
|
+
return partNames.filter((p) => /^ppt\/slides\/slide\d+\.xml$/.test(p)).sort((a, b) => Number(a.match(/(\d+)\.xml$/)[1]) - Number(b.match(/(\d+)\.xml$/)[1]));
|
|
42
|
+
}
|
|
43
|
+
function resolvePart(base, target) {
|
|
44
|
+
if (target.startsWith("/")) return target.slice(1);
|
|
45
|
+
const parts = base.split("/").filter(Boolean);
|
|
46
|
+
for (const seg of target.split("/")) {
|
|
47
|
+
if (seg === "..") parts.pop();
|
|
48
|
+
else if (seg !== "." && seg !== "") parts.push(seg);
|
|
49
|
+
}
|
|
50
|
+
return parts.join("/");
|
|
51
|
+
}
|
|
52
|
+
function paragraphText(p) {
|
|
53
|
+
const runs = [];
|
|
54
|
+
for (const m of p.matchAll(/<a:t>([^<]*)<\/a:t>|<a:t\s[^>]*>([^<]*)<\/a:t>|<a:br\b[^>]*\/>/g)) {
|
|
55
|
+
runs.push(m[0].startsWith("<a:br") ? " " : (0, import_xlsx_xml.decodeXml)(m[1] ?? m[2] ?? ""));
|
|
56
|
+
}
|
|
57
|
+
return runs.join("").replace(/\s+/g, " ").trim();
|
|
58
|
+
}
|
|
59
|
+
function slideText(n, slideXml) {
|
|
60
|
+
let title = null;
|
|
61
|
+
const paragraphs = [];
|
|
62
|
+
for (const m of slideXml.matchAll(/<p:(sp|graphicFrame)\b[\s\S]*?<\/p:\1>/g)) {
|
|
63
|
+
const shape = m[0];
|
|
64
|
+
const isTitle = /<p:ph\b[^>]*\btype="(title|ctrTitle)"/.test(shape);
|
|
65
|
+
const paragraphsOf = (xml) => Array.from(xml.matchAll(/<a:p\/>|<a:p(?:\s[^>]*[^/])?>[\s\S]*?<\/a:p>/g)).map((p) => paragraphText(p[0])).filter(Boolean);
|
|
66
|
+
const rows = Array.from(shape.matchAll(/<a:tr(?:\s[^>]*)?>[\s\S]*?<\/a:tr>/g));
|
|
67
|
+
const texts = rows.length > 0 ? rows.map((r) => Array.from(r[0].matchAll(/<a:tc(?:\s[^>]*)?\/>|<a:tc(?:\s[^>]*[^/])?>[\s\S]*?<\/a:tc>/g)).map((c) => paragraphsOf(c[0]).join(" ")).join(" \xB7 ")).filter((line) => line.replace(/[\s·]/g, "") !== "") : paragraphsOf(shape);
|
|
68
|
+
if (isTitle && title === null && texts.length > 0) title = texts.join(" ");
|
|
69
|
+
else paragraphs.push(...texts);
|
|
70
|
+
}
|
|
71
|
+
return { n, title, paragraphs };
|
|
72
|
+
}
|
|
73
|
+
function thumbnailPart(packageRelsXml) {
|
|
74
|
+
for (const m of (packageRelsXml ?? "").matchAll(/<Relationship\b[^>]*>/g)) {
|
|
75
|
+
if (!/\bType="[^"]*\/metadata\/thumbnail"/.test(m[0])) continue;
|
|
76
|
+
const target = m[0].match(/\bTarget="([^"]+)"/)?.[1];
|
|
77
|
+
if (target) return resolvePart("", (0, import_xlsx_xml.decodeXml)(target));
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
82
|
+
0 && (module.exports = {
|
|
83
|
+
slideOrder,
|
|
84
|
+
slideText,
|
|
85
|
+
thumbnailPart
|
|
86
|
+
});
|