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,297 @@
|
|
|
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 channel_event_service_exports = {};
|
|
19
|
+
__export(channel_event_service_exports, {
|
|
20
|
+
_recordSeqForTests: () => _recordSeqForTests,
|
|
21
|
+
_resetSeqForTests: () => _resetSeqForTests,
|
|
22
|
+
eventToManifest: () => eventToManifest,
|
|
23
|
+
getChannelEvent: () => getChannelEvent,
|
|
24
|
+
getChannelEventsSinceSeq: () => getChannelEventsSinceSeq,
|
|
25
|
+
getCurrentSeqHead: () => getCurrentSeqHead,
|
|
26
|
+
listChannelEvents: () => listChannelEvents,
|
|
27
|
+
listThread: () => listThread,
|
|
28
|
+
manifestToEventInput: () => manifestToEventInput,
|
|
29
|
+
postChannelEvent: () => postChannelEvent,
|
|
30
|
+
setChannelEventStatus: () => setChannelEventStatus
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(channel_event_service_exports);
|
|
33
|
+
var import_node_crypto = require("node:crypto");
|
|
34
|
+
var import_database = require("./database");
|
|
35
|
+
var import_persistence = require("./persistence");
|
|
36
|
+
var import_types = require("../../shared/types");
|
|
37
|
+
const PER_PLAN_RING_SIZE = 500;
|
|
38
|
+
let nextSeq = 1;
|
|
39
|
+
const seqRings = /* @__PURE__ */ new Map();
|
|
40
|
+
const firstSeqByPlan = /* @__PURE__ */ new Map();
|
|
41
|
+
function recordSeq(event) {
|
|
42
|
+
const seq = nextSeq++;
|
|
43
|
+
let ring = seqRings.get(event.planUid);
|
|
44
|
+
if (!ring) {
|
|
45
|
+
ring = [];
|
|
46
|
+
seqRings.set(event.planUid, ring);
|
|
47
|
+
firstSeqByPlan.set(event.planUid, seq);
|
|
48
|
+
}
|
|
49
|
+
ring.push({ seq, event });
|
|
50
|
+
if (ring.length > PER_PLAN_RING_SIZE) ring.shift();
|
|
51
|
+
return seq;
|
|
52
|
+
}
|
|
53
|
+
function getChannelEventsSinceSeq(planUid, sinceSeq, limit = 200) {
|
|
54
|
+
const ring = seqRings.get(planUid) ?? [];
|
|
55
|
+
const firstSeq = firstSeqByPlan.get(planUid) ?? null;
|
|
56
|
+
const latestSeq = ring.length > 0 ? ring[ring.length - 1].seq : firstSeq === null ? nextSeq - 1 : firstSeq - 1;
|
|
57
|
+
if (ring.length === 0) {
|
|
58
|
+
return { events: [], latestSeq, gap: false };
|
|
59
|
+
}
|
|
60
|
+
const oldestRingSeq = ring[0].seq;
|
|
61
|
+
const evicted = firstSeq !== null && oldestRingSeq > firstSeq;
|
|
62
|
+
if (evicted && sinceSeq < oldestRingSeq - 1) {
|
|
63
|
+
return { events: [], latestSeq, gap: true };
|
|
64
|
+
}
|
|
65
|
+
const newer = ring.filter((r) => r.seq > sinceSeq).slice(0, limit);
|
|
66
|
+
return { events: newer.map((r) => r.event), latestSeq, gap: false };
|
|
67
|
+
}
|
|
68
|
+
function getCurrentSeqHead() {
|
|
69
|
+
return nextSeq - 1;
|
|
70
|
+
}
|
|
71
|
+
function _recordSeqForTests(event) {
|
|
72
|
+
return recordSeq(event);
|
|
73
|
+
}
|
|
74
|
+
function _resetSeqForTests() {
|
|
75
|
+
nextSeq = 1;
|
|
76
|
+
seqRings.clear();
|
|
77
|
+
firstSeqByPlan.clear();
|
|
78
|
+
}
|
|
79
|
+
function postChannelEvent(input) {
|
|
80
|
+
if (!import_types.CHANNEL_EVENT_TYPES.includes(input.eventType)) {
|
|
81
|
+
throw new Error(`Unknown channel event type: ${input.eventType}`);
|
|
82
|
+
}
|
|
83
|
+
if (input.status && !import_types.CHANNEL_EVENT_STATUSES.includes(input.status)) {
|
|
84
|
+
throw new Error(`Unknown channel event status: ${input.status}`);
|
|
85
|
+
}
|
|
86
|
+
if (!input.payload || typeof input.payload.message !== "string" || !input.payload.message.trim()) {
|
|
87
|
+
throw new Error("Channel event payload must include a non-empty `message`.");
|
|
88
|
+
}
|
|
89
|
+
if (input.respondsTo) {
|
|
90
|
+
const parent = getChannelEvent(input.respondsTo);
|
|
91
|
+
if (!parent) {
|
|
92
|
+
throw new Error(`Cannot respond to unknown channel event: ${input.respondsTo}`);
|
|
93
|
+
}
|
|
94
|
+
if (parent.planUid !== input.planUid) {
|
|
95
|
+
throw new Error("Cannot thread across plans (`respondsTo` is on a different plan).");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const db = (0, import_database.getDb)();
|
|
99
|
+
const now = input.createdAt ?? Date.now();
|
|
100
|
+
const uid = input.uid ?? (0, import_node_crypto.randomUUID)();
|
|
101
|
+
const status = input.status ?? "open";
|
|
102
|
+
db.run(
|
|
103
|
+
`INSERT INTO channel_events
|
|
104
|
+
(uid, plan_uid, item_uid, event_type, payload, author, author_type, agent_model, responds_to, status, created_at, updated_at)
|
|
105
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
106
|
+
ON CONFLICT(uid) DO UPDATE SET
|
|
107
|
+
payload = excluded.payload,
|
|
108
|
+
status = excluded.status,
|
|
109
|
+
updated_at = excluded.updated_at`,
|
|
110
|
+
[
|
|
111
|
+
uid,
|
|
112
|
+
input.planUid,
|
|
113
|
+
input.itemUid ?? null,
|
|
114
|
+
input.eventType,
|
|
115
|
+
JSON.stringify(input.payload),
|
|
116
|
+
input.author,
|
|
117
|
+
input.authorType,
|
|
118
|
+
input.agentModel ?? null,
|
|
119
|
+
input.respondsTo ?? null,
|
|
120
|
+
status,
|
|
121
|
+
now,
|
|
122
|
+
input.updatedAt ?? now
|
|
123
|
+
]
|
|
124
|
+
);
|
|
125
|
+
(0, import_persistence.markDirty)();
|
|
126
|
+
const created = getChannelEvent(uid);
|
|
127
|
+
if (!created) throw new Error("Channel event vanished immediately after insert");
|
|
128
|
+
recordSeq(created);
|
|
129
|
+
return created;
|
|
130
|
+
}
|
|
131
|
+
function getChannelEvent(uid) {
|
|
132
|
+
const db = (0, import_database.getDb)();
|
|
133
|
+
const result = db.exec(
|
|
134
|
+
`SELECT uid, plan_uid, item_uid, event_type, payload, author, author_type, agent_model, responds_to, status, created_at, updated_at
|
|
135
|
+
FROM channel_events
|
|
136
|
+
WHERE uid = ?`,
|
|
137
|
+
[uid]
|
|
138
|
+
);
|
|
139
|
+
if (!result[0] || result[0].values.length === 0) return null;
|
|
140
|
+
return rowToEvent(result[0].values[0]);
|
|
141
|
+
}
|
|
142
|
+
function listChannelEvents(planUid, options = {}) {
|
|
143
|
+
const db = (0, import_database.getDb)();
|
|
144
|
+
const params = [planUid];
|
|
145
|
+
let where = `plan_uid = ?`;
|
|
146
|
+
if (options.sinceMs !== void 0) {
|
|
147
|
+
where += ` AND created_at >= ?`;
|
|
148
|
+
params.push(options.sinceMs);
|
|
149
|
+
}
|
|
150
|
+
if (options.itemUid) {
|
|
151
|
+
where += ` AND item_uid = ?`;
|
|
152
|
+
params.push(options.itemUid);
|
|
153
|
+
}
|
|
154
|
+
if (options.eventTypes && options.eventTypes.length > 0) {
|
|
155
|
+
where += ` AND event_type IN (${options.eventTypes.map(() => "?").join(", ")})`;
|
|
156
|
+
for (const t of options.eventTypes) params.push(t);
|
|
157
|
+
}
|
|
158
|
+
if (options.status) {
|
|
159
|
+
const statuses = Array.isArray(options.status) ? options.status : [options.status];
|
|
160
|
+
if (statuses.length > 0) {
|
|
161
|
+
where += ` AND status IN (${statuses.map(() => "?").join(", ")})`;
|
|
162
|
+
for (const s of statuses) params.push(s);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const limit = options.limit ?? 200;
|
|
166
|
+
const offset = options.offset ?? 0;
|
|
167
|
+
params.push(limit, offset);
|
|
168
|
+
const result = db.exec(
|
|
169
|
+
`SELECT uid, plan_uid, item_uid, event_type, payload, author, author_type, agent_model, responds_to, status, created_at, updated_at
|
|
170
|
+
FROM channel_events
|
|
171
|
+
WHERE ${where}
|
|
172
|
+
ORDER BY created_at DESC
|
|
173
|
+
LIMIT ? OFFSET ?`,
|
|
174
|
+
params
|
|
175
|
+
);
|
|
176
|
+
if (!result[0]) return [];
|
|
177
|
+
return result[0].values.map(rowToEvent);
|
|
178
|
+
}
|
|
179
|
+
function listThread(rootUid) {
|
|
180
|
+
const db = (0, import_database.getDb)();
|
|
181
|
+
const collected = [];
|
|
182
|
+
const queue = [rootUid];
|
|
183
|
+
const seen = /* @__PURE__ */ new Set();
|
|
184
|
+
while (queue.length > 0) {
|
|
185
|
+
const uid = queue.shift();
|
|
186
|
+
if (seen.has(uid)) continue;
|
|
187
|
+
seen.add(uid);
|
|
188
|
+
const ev = getChannelEvent(uid);
|
|
189
|
+
if (ev) collected.push(ev);
|
|
190
|
+
const childRes = db.exec(
|
|
191
|
+
`SELECT uid FROM channel_events WHERE responds_to = ? ORDER BY created_at ASC`,
|
|
192
|
+
[uid]
|
|
193
|
+
);
|
|
194
|
+
if (childRes[0]) {
|
|
195
|
+
for (const row of childRes[0].values) {
|
|
196
|
+
queue.push(row[0]);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return collected.sort((a, b) => a.createdAt - b.createdAt);
|
|
201
|
+
}
|
|
202
|
+
function setChannelEventStatus(uid, status) {
|
|
203
|
+
if (!import_types.CHANNEL_EVENT_STATUSES.includes(status)) {
|
|
204
|
+
throw new Error(`Unknown channel event status: ${status}`);
|
|
205
|
+
}
|
|
206
|
+
const db = (0, import_database.getDb)();
|
|
207
|
+
const now = Date.now();
|
|
208
|
+
db.run(
|
|
209
|
+
`UPDATE channel_events SET status = ?, updated_at = ? WHERE uid = ?`,
|
|
210
|
+
[status, now, uid]
|
|
211
|
+
);
|
|
212
|
+
(0, import_persistence.markDirty)();
|
|
213
|
+
const updated = getChannelEvent(uid);
|
|
214
|
+
if (!updated) throw new Error(`Channel event not found: ${uid}`);
|
|
215
|
+
return updated;
|
|
216
|
+
}
|
|
217
|
+
function eventToManifest(event) {
|
|
218
|
+
return {
|
|
219
|
+
uid: event.uid,
|
|
220
|
+
itemUid: event.itemUid,
|
|
221
|
+
eventType: event.eventType,
|
|
222
|
+
payload: event.payload,
|
|
223
|
+
author: event.author,
|
|
224
|
+
authorType: event.authorType,
|
|
225
|
+
agentModel: event.agentModel,
|
|
226
|
+
respondsTo: event.respondsTo,
|
|
227
|
+
status: event.status,
|
|
228
|
+
createdAt: new Date(event.createdAt).toISOString(),
|
|
229
|
+
updatedAt: new Date(event.updatedAt).toISOString()
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function manifestToEventInput(planUid, record) {
|
|
233
|
+
return {
|
|
234
|
+
uid: record.uid,
|
|
235
|
+
planUid,
|
|
236
|
+
itemUid: record.itemUid,
|
|
237
|
+
eventType: record.eventType,
|
|
238
|
+
payload: record.payload,
|
|
239
|
+
author: record.author,
|
|
240
|
+
authorType: record.authorType,
|
|
241
|
+
agentModel: record.agentModel,
|
|
242
|
+
respondsTo: record.respondsTo,
|
|
243
|
+
status: record.status,
|
|
244
|
+
createdAt: Date.parse(record.createdAt) || Date.now(),
|
|
245
|
+
updatedAt: Date.parse(record.updatedAt) || Date.now()
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function rowToEvent(row) {
|
|
249
|
+
const [
|
|
250
|
+
uid,
|
|
251
|
+
planUid,
|
|
252
|
+
itemUid,
|
|
253
|
+
eventType,
|
|
254
|
+
payloadJson,
|
|
255
|
+
author,
|
|
256
|
+
authorType,
|
|
257
|
+
agentModel,
|
|
258
|
+
respondsTo,
|
|
259
|
+
status,
|
|
260
|
+
createdAt,
|
|
261
|
+
updatedAt
|
|
262
|
+
] = row;
|
|
263
|
+
let payload = { message: "" };
|
|
264
|
+
try {
|
|
265
|
+
payload = JSON.parse(payloadJson) ?? { message: "" };
|
|
266
|
+
} catch {
|
|
267
|
+
payload = { message: "[unparseable payload]" };
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
uid: String(uid),
|
|
271
|
+
planUid: String(planUid),
|
|
272
|
+
itemUid: itemUid ? String(itemUid) : null,
|
|
273
|
+
eventType: String(eventType),
|
|
274
|
+
payload,
|
|
275
|
+
author: String(author),
|
|
276
|
+
authorType: String(authorType),
|
|
277
|
+
agentModel: agentModel ? String(agentModel) : null,
|
|
278
|
+
respondsTo: respondsTo ? String(respondsTo) : null,
|
|
279
|
+
status: String(status),
|
|
280
|
+
createdAt: Number(createdAt),
|
|
281
|
+
updatedAt: Number(updatedAt)
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
285
|
+
0 && (module.exports = {
|
|
286
|
+
_recordSeqForTests,
|
|
287
|
+
_resetSeqForTests,
|
|
288
|
+
eventToManifest,
|
|
289
|
+
getChannelEvent,
|
|
290
|
+
getChannelEventsSinceSeq,
|
|
291
|
+
getCurrentSeqHead,
|
|
292
|
+
listChannelEvents,
|
|
293
|
+
listThread,
|
|
294
|
+
manifestToEventInput,
|
|
295
|
+
postChannelEvent,
|
|
296
|
+
setChannelEventStatus
|
|
297
|
+
});
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var check_runs_exports = {};
|
|
29
|
+
__export(check_runs_exports, {
|
|
30
|
+
forgetTeammateCheckRuns: () => forgetTeammateCheckRuns,
|
|
31
|
+
getCheckRun: () => getCheckRun,
|
|
32
|
+
knownCheckRunCounters: () => knownCheckRunCounters,
|
|
33
|
+
listCheckRuns: () => listCheckRuns,
|
|
34
|
+
putTeammateCheckRun: () => putTeammateCheckRun,
|
|
35
|
+
recordCheckRun: () => recordCheckRun,
|
|
36
|
+
runWords: () => runWords,
|
|
37
|
+
setCheckRunListener: () => setCheckRunListener
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(check_runs_exports);
|
|
40
|
+
var import_node_crypto = __toESM(require("node:crypto"));
|
|
41
|
+
var import_database = require("./database");
|
|
42
|
+
var import_persistence = require("./persistence");
|
|
43
|
+
var import_check_run_record = require("./task-records/check-run-record");
|
|
44
|
+
var import_agent_review = require("../../shared/lib/agent-review");
|
|
45
|
+
const KEEP_MINE = 200;
|
|
46
|
+
const parse = (s, fallback) => {
|
|
47
|
+
if (s === null || s === void 0) return fallback;
|
|
48
|
+
try {
|
|
49
|
+
return JSON.parse(String(s)) ?? fallback;
|
|
50
|
+
} catch {
|
|
51
|
+
return fallback;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
let listener = null;
|
|
55
|
+
function setCheckRunListener(fn) {
|
|
56
|
+
listener = fn;
|
|
57
|
+
}
|
|
58
|
+
function recordCheckRun(run, me = { writer: "this-device", name: "you" }) {
|
|
59
|
+
const id = `local-${import_node_crypto.default.randomUUID()}`;
|
|
60
|
+
insert(run.projectRoot, id, true, { ...run, writer: me.writer, name: me.name, counter: 0 }, null);
|
|
61
|
+
(0, import_database.getDb)().run(
|
|
62
|
+
`DELETE FROM rule_check_runs WHERE project_root = ? AND mine = 1 AND id NOT IN (
|
|
63
|
+
SELECT id FROM rule_check_runs WHERE project_root = ? AND mine = 1 ORDER BY at DESC LIMIT ?)`,
|
|
64
|
+
[run.projectRoot, run.projectRoot, KEEP_MINE]
|
|
65
|
+
);
|
|
66
|
+
(0, import_persistence.markDirty)();
|
|
67
|
+
try {
|
|
68
|
+
listener?.(run);
|
|
69
|
+
} catch (err) {
|
|
70
|
+
console.warn("[check-runs] could not share a run:", err);
|
|
71
|
+
}
|
|
72
|
+
return id;
|
|
73
|
+
}
|
|
74
|
+
function insert(projectRoot, id, mine, r, verdict) {
|
|
75
|
+
(0, import_database.getDb)().run(
|
|
76
|
+
`INSERT OR REPLACE INTO rule_check_runs (project_root, id, mine, writer, counter, name, by_author, by_type, ran_in, commit_sha, dirty, base, rulebook, scope, strict, outcome, says, findings, at, verdict, review)
|
|
77
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
78
|
+
[
|
|
79
|
+
projectRoot,
|
|
80
|
+
id,
|
|
81
|
+
mine ? 1 : 0,
|
|
82
|
+
r.writer,
|
|
83
|
+
r.counter,
|
|
84
|
+
r.name,
|
|
85
|
+
r.by.author,
|
|
86
|
+
r.by.authorType,
|
|
87
|
+
r.ranIn,
|
|
88
|
+
r.commit,
|
|
89
|
+
JSON.stringify(r.dirty),
|
|
90
|
+
r.base,
|
|
91
|
+
r.rulebook,
|
|
92
|
+
r.scope,
|
|
93
|
+
r.strict ? 1 : 0,
|
|
94
|
+
JSON.stringify(r.outcome),
|
|
95
|
+
JSON.stringify(r.says),
|
|
96
|
+
JSON.stringify(r.findings),
|
|
97
|
+
r.at,
|
|
98
|
+
verdict ? JSON.stringify(verdict) : null,
|
|
99
|
+
r.review ? JSON.stringify(r.review) : null
|
|
100
|
+
]
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
function putTeammateCheckRun(projectRoot, r, verdict) {
|
|
104
|
+
(0, import_database.getDb)().run("DELETE FROM rule_check_runs WHERE project_root = ? AND mine = 0 AND writer = ? AND counter < ?", [projectRoot, r.writer, r.counter]);
|
|
105
|
+
insert(projectRoot, `${r.writer}-${r.counter}`, false, r, verdict);
|
|
106
|
+
(0, import_persistence.markDirty)();
|
|
107
|
+
}
|
|
108
|
+
function knownCheckRunCounters(projectRoot) {
|
|
109
|
+
const rows = (0, import_database.getDb)().exec("SELECT writer, MAX(counter) FROM rule_check_runs WHERE project_root = ? AND mine = 0 GROUP BY writer", [projectRoot])[0]?.values ?? [];
|
|
110
|
+
return new Map(rows.map((r) => [String(r[0]), Number(r[1])]));
|
|
111
|
+
}
|
|
112
|
+
function forgetTeammateCheckRuns(q) {
|
|
113
|
+
const where = q.projectRoot ? "project_root = ? AND mine = 0" : "writer = ? AND mine = 0";
|
|
114
|
+
const arg = q.projectRoot ?? q.writer ?? "";
|
|
115
|
+
const n = Number((0, import_database.getDb)().exec(`SELECT COUNT(*) FROM rule_check_runs WHERE ${where}`, [arg])[0]?.values[0]?.[0] ?? 0);
|
|
116
|
+
if (n) {
|
|
117
|
+
(0, import_database.getDb)().run(`DELETE FROM rule_check_runs WHERE ${where}`, [arg]);
|
|
118
|
+
(0, import_persistence.markDirty)();
|
|
119
|
+
}
|
|
120
|
+
return n;
|
|
121
|
+
}
|
|
122
|
+
const COLS = "id, mine, writer, counter, name, by_author, by_type, ran_in, commit_sha, dirty, base, rulebook, scope, strict, outcome, says, findings, at, verdict, review";
|
|
123
|
+
function rowToRun(r) {
|
|
124
|
+
const mine = Number(r[1]) === 1;
|
|
125
|
+
const verdict = parse(r[18], {});
|
|
126
|
+
const name = verdict.verified && verdict.who ? verdict.who : String(r[4]);
|
|
127
|
+
const person = r[6] === "human" || r[6] === "unverified" || r[5] === r[4];
|
|
128
|
+
const who = mine ? person ? "you" : `${String(r[5])}` : person ? name : `${String(r[5])} for ${name}`;
|
|
129
|
+
const run = {
|
|
130
|
+
id: String(r[0]),
|
|
131
|
+
mine,
|
|
132
|
+
writer: String(r[2]),
|
|
133
|
+
counter: Number(r[3]),
|
|
134
|
+
who,
|
|
135
|
+
verified: mine || verdict.verified === true,
|
|
136
|
+
why: mine || verdict.verified ? null : verdict.why ?? null,
|
|
137
|
+
ranIn: String(r[7]),
|
|
138
|
+
commit: r[8] ?? null,
|
|
139
|
+
dirty: parse(r[9], []),
|
|
140
|
+
base: r[10] ?? null,
|
|
141
|
+
rulebook: r[11] ?? null,
|
|
142
|
+
scope: r[12] ?? null,
|
|
143
|
+
strict: Number(r[13]) === 1,
|
|
144
|
+
outcome: parse(r[14], { ok: false, files: 0, blocks: 0, warns: 0 }),
|
|
145
|
+
says: parse(r[15], []),
|
|
146
|
+
findings: parse(r[16], []),
|
|
147
|
+
at: Number(r[17]),
|
|
148
|
+
review: (0, import_agent_review.parseAgentReview)(parse(r[19], null))
|
|
149
|
+
};
|
|
150
|
+
return { ...run, words: runWords(run) };
|
|
151
|
+
}
|
|
152
|
+
function runWords(r) {
|
|
153
|
+
const at = r.commit ? ` at ${r.commit.slice(0, 7)}` : "";
|
|
154
|
+
const against = r.base ? `, against ${r.base}` : "";
|
|
155
|
+
const scope = r.scope ? `, ${r.scope}` : "";
|
|
156
|
+
const said = r.review ? `${r.review.agent}'s review${r.review.pass ? ` (${r.review.pass})` : ""}: ${(0, import_agent_review.reviewBlockWords)(r.review, r.outcome.blocks)}` : (0, import_check_run_record.outcomeWords)(r.outcome);
|
|
157
|
+
return `${r.who} in ${r.ranIn}${at}${against}${scope}: ${said}${r.verified ? "" : ` (unverified: ${r.why ?? "not signed"})`}`;
|
|
158
|
+
}
|
|
159
|
+
function listCheckRuns(projectRoot, limit = 50) {
|
|
160
|
+
const rows = (0, import_database.getDb)().exec(`SELECT ${COLS} FROM rule_check_runs WHERE project_root = ? ORDER BY at DESC LIMIT ?`, [projectRoot, Math.max(1, Math.min(limit, 500))])[0]?.values ?? [];
|
|
161
|
+
return rows.map(rowToRun);
|
|
162
|
+
}
|
|
163
|
+
function getCheckRun(projectRoot, id) {
|
|
164
|
+
const r = (0, import_database.getDb)().exec(`SELECT ${COLS} FROM rule_check_runs WHERE project_root = ? AND id = ?`, [projectRoot, id])[0]?.values[0];
|
|
165
|
+
return r ? rowToRun(r) : null;
|
|
166
|
+
}
|
|
167
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
168
|
+
0 && (module.exports = {
|
|
169
|
+
forgetTeammateCheckRuns,
|
|
170
|
+
getCheckRun,
|
|
171
|
+
knownCheckRunCounters,
|
|
172
|
+
listCheckRuns,
|
|
173
|
+
putTeammateCheckRun,
|
|
174
|
+
recordCheckRun,
|
|
175
|
+
runWords,
|
|
176
|
+
setCheckRunListener
|
|
177
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var checkout_identity_exports = {};
|
|
29
|
+
__export(checkout_identity_exports, {
|
|
30
|
+
heldByAnotherCheckout: () => heldByAnotherCheckout,
|
|
31
|
+
sameRepository: () => sameRepository
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(checkout_identity_exports);
|
|
34
|
+
var import_node_child_process = require("node:child_process");
|
|
35
|
+
var import_node_fs = __toESM(require("node:fs"));
|
|
36
|
+
var import_node_path = __toESM(require("node:path"));
|
|
37
|
+
var import_git_identity = require("./git-identity");
|
|
38
|
+
const canonical = (p) => {
|
|
39
|
+
try {
|
|
40
|
+
return import_node_fs.default.realpathSync.native(p);
|
|
41
|
+
} catch {
|
|
42
|
+
return import_node_path.default.resolve(p);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
function commonDir(folder) {
|
|
46
|
+
if (!import_node_fs.default.existsSync(import_node_path.default.join(folder, ".git"))) return null;
|
|
47
|
+
try {
|
|
48
|
+
const out = (0, import_node_child_process.execFileSync)("git", ["rev-parse", "--git-common-dir"], {
|
|
49
|
+
cwd: folder,
|
|
50
|
+
encoding: "utf-8",
|
|
51
|
+
stdio: ["ignore", "pipe", "ignore"]
|
|
52
|
+
}).trim();
|
|
53
|
+
return out ? canonical(import_node_path.default.resolve(folder, out)) : null;
|
|
54
|
+
} catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function sameRepository(a, b) {
|
|
59
|
+
const common = commonDir(a);
|
|
60
|
+
if (common && common === commonDir(b)) return true;
|
|
61
|
+
const origin = (0, import_git_identity.getNormalisedOriginUrl)(a);
|
|
62
|
+
return !!origin && origin === (0, import_git_identity.getNormalisedOriginUrl)(b);
|
|
63
|
+
}
|
|
64
|
+
function heldByAnotherCheckout(holder, importing) {
|
|
65
|
+
if (!holder || !import_node_path.default.isAbsolute(holder) || !import_node_fs.default.existsSync(holder)) return false;
|
|
66
|
+
if (canonical(holder) === canonical(importing)) return false;
|
|
67
|
+
return sameRepository(holder, importing);
|
|
68
|
+
}
|
|
69
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
70
|
+
0 && (module.exports = {
|
|
71
|
+
heldByAnotherCheckout,
|
|
72
|
+
sameRepository
|
|
73
|
+
});
|