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,118 @@
|
|
|
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 mobile_tools_exports = {};
|
|
19
|
+
__export(mobile_tools_exports, {
|
|
20
|
+
register: () => register
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(mobile_tools_exports);
|
|
23
|
+
var import_zod = require("zod");
|
|
24
|
+
var import_helpers = require("../helpers");
|
|
25
|
+
var import_mobile_rpc_service = require("../../services/mobile-rpc-service");
|
|
26
|
+
const VIEW_ROUTES = {
|
|
27
|
+
home: "/(tabs)",
|
|
28
|
+
plans: "/(tabs)/plans",
|
|
29
|
+
graph: "/(tabs)/graph",
|
|
30
|
+
terminals: "/(tabs)/terminals",
|
|
31
|
+
activity: "/(tabs)/activity"
|
|
32
|
+
};
|
|
33
|
+
function register(server, deps) {
|
|
34
|
+
server.registerTool(
|
|
35
|
+
"mobile_navigate",
|
|
36
|
+
{
|
|
37
|
+
description: "Drive a connected phone (CodeTrellis mobile companion) to a view. Use to walk a teammate through something on their device. Provide a `view` (home/plans/graph/terminals/activity), or a `plan_uid` to open a plan, or an `item_uid` (+ plan_uid) to open a plan item. `route` overrides everything with a raw Expo Router path. Requires a paired phone to be connected.",
|
|
38
|
+
inputSchema: {
|
|
39
|
+
view: import_zod.z.enum(["home", "plans", "graph", "terminals", "activity"]).optional().describe("A top-level mobile view to switch to."),
|
|
40
|
+
plan_uid: import_zod.z.string().optional().describe("Open this plan on the phone."),
|
|
41
|
+
item_uid: import_zod.z.string().optional().describe("Open this plan item on the phone (pair with plan_uid)."),
|
|
42
|
+
route: import_zod.z.string().optional().describe('Raw Expo Router path, e.g. "/graph" or "/plan-detail?uid=\u2026".')
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async ({ view, plan_uid, item_uid, route }) => {
|
|
46
|
+
if (!(0, import_mobile_rpc_service.mobileConnected)()) {
|
|
47
|
+
return { content: [{ type: "text", text: "No mobile device is connected. Pair + connect a phone first." }], isError: true };
|
|
48
|
+
}
|
|
49
|
+
if (!route && item_uid) {
|
|
50
|
+
const item = deps.planItemService.getItem(item_uid);
|
|
51
|
+
if (!item) return { content: [{ type: "text", text: `Item not found: ${item_uid}` }], isError: true };
|
|
52
|
+
if (!plan_uid) plan_uid = item.planUid;
|
|
53
|
+
}
|
|
54
|
+
if (!route && plan_uid && !deps.planService.getPlan(plan_uid)) {
|
|
55
|
+
return { content: [{ type: "text", text: `Plan not found: ${plan_uid}` }], isError: true };
|
|
56
|
+
}
|
|
57
|
+
let target = route;
|
|
58
|
+
if (!target && item_uid) {
|
|
59
|
+
target = `/item-detail?uid=${encodeURIComponent(item_uid)}${plan_uid ? `&planUid=${encodeURIComponent(plan_uid)}` : ""}`;
|
|
60
|
+
}
|
|
61
|
+
if (!target && plan_uid) target = `/plan-detail?uid=${encodeURIComponent(plan_uid)}`;
|
|
62
|
+
if (!target && view) target = VIEW_ROUTES[view];
|
|
63
|
+
if (!target) {
|
|
64
|
+
return { content: [{ type: "text", text: "Provide a view, plan_uid, item_uid, or route." }], isError: true };
|
|
65
|
+
}
|
|
66
|
+
const reached = (0, import_mobile_rpc_service.navigateMobile)(target);
|
|
67
|
+
return { content: [{ type: "text", text: `Navigated ${reached} phone(s) to ${target}` }] };
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
server.registerTool(
|
|
71
|
+
"mobile_screenshot",
|
|
72
|
+
{
|
|
73
|
+
description: "Capture a screenshot of a connected phone (CodeTrellis mobile companion) and return it as a PNG. Use to see what the user sees on their device \u2014 e.g. after mobile_navigate, to confirm a walkthrough step. Requires a connected phone.",
|
|
74
|
+
inputSchema: {}
|
|
75
|
+
},
|
|
76
|
+
async () => {
|
|
77
|
+
if (!(0, import_mobile_rpc_service.mobileConnected)()) {
|
|
78
|
+
return { content: [{ type: "text", text: "No mobile device is connected." }], isError: true };
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const img = await (0, import_mobile_rpc_service.requestMobileScreenshot)();
|
|
82
|
+
if (!img.data) {
|
|
83
|
+
return { content: [{ type: "text", text: "The phone returned an empty image (screenshot support may not be built into this dev client yet)." }], isError: true };
|
|
84
|
+
}
|
|
85
|
+
return { content: [{ type: "image", data: img.data, mimeType: img.mime || "image/png" }] };
|
|
86
|
+
} catch (err) {
|
|
87
|
+
return { content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }], isError: true };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
server.registerTool(
|
|
92
|
+
"mobile_present",
|
|
93
|
+
{
|
|
94
|
+
description: "Show a narration card on a connected phone (and the desktop). Use to guide a teammate through a mobile walkthrough. Supports basic markdown.",
|
|
95
|
+
inputSchema: {
|
|
96
|
+
text: import_zod.z.string().describe("Card body \u2014 supports **bold**, `code`, links."),
|
|
97
|
+
tone: import_zod.z.enum(["neutral", "success", "warning", "question"]).optional().default("neutral")
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
async ({ text, tone }, extra) => {
|
|
101
|
+
const { author } = (0, import_helpers.authorFromExtra)(deps, extra);
|
|
102
|
+
const card = deps.presenceService.postCard({
|
|
103
|
+
text,
|
|
104
|
+
speak: false,
|
|
105
|
+
requireAck: false,
|
|
106
|
+
tone,
|
|
107
|
+
linkTo: null,
|
|
108
|
+
agentId: author
|
|
109
|
+
});
|
|
110
|
+
const n = deps.broadcast("presence-card", { card });
|
|
111
|
+
return (0, import_helpers.resultWithMeta)({ card_id: card.id, mobile: (0, import_mobile_rpc_service.mobileConnected)() }, n);
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
116
|
+
0 && (module.exports = {
|
|
117
|
+
register
|
|
118
|
+
});
|
|
@@ -0,0 +1,330 @@
|
|
|
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 peer_tools_exports = {};
|
|
29
|
+
__export(peer_tools_exports, {
|
|
30
|
+
registerPeerTools: () => registerPeerTools
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(peer_tools_exports);
|
|
33
|
+
var _lazy_______services_peer_connection_service = __toESM(require("../../services/peer-connection-service"));
|
|
34
|
+
var import_zod = require("zod");
|
|
35
|
+
var import_helpers = require("../helpers");
|
|
36
|
+
function registerPeerTools(server, deps) {
|
|
37
|
+
server.tool(
|
|
38
|
+
"get_peer_status",
|
|
39
|
+
"Get the status of the peer connection manager: discovery state, paired device count, connected peer count, whether pairing is active.",
|
|
40
|
+
{},
|
|
41
|
+
async () => {
|
|
42
|
+
try {
|
|
43
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
44
|
+
const status = peerService.getPeerManagerStatus();
|
|
45
|
+
return {
|
|
46
|
+
content: [{ type: "text", text: JSON.stringify(status) }]
|
|
47
|
+
};
|
|
48
|
+
} catch (err) {
|
|
49
|
+
return {
|
|
50
|
+
content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }],
|
|
51
|
+
isError: true
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
server.tool(
|
|
57
|
+
"list_discovered_peers",
|
|
58
|
+
"List CodeTrellis instances discovered on the local network via mDNS. These are nearby devices that could be paired.",
|
|
59
|
+
{},
|
|
60
|
+
async () => {
|
|
61
|
+
try {
|
|
62
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
63
|
+
const peers = peerService.getDiscoveredDevices();
|
|
64
|
+
return {
|
|
65
|
+
content: [{
|
|
66
|
+
type: "text",
|
|
67
|
+
text: JSON.stringify({
|
|
68
|
+
count: peers.length,
|
|
69
|
+
peers
|
|
70
|
+
})
|
|
71
|
+
}]
|
|
72
|
+
};
|
|
73
|
+
} catch (err) {
|
|
74
|
+
return {
|
|
75
|
+
content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }],
|
|
76
|
+
isError: true
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
server.tool(
|
|
82
|
+
"list_paired_devices",
|
|
83
|
+
"List all devices that have completed the QR-code pairing handshake. Paired devices can auto-reconnect.",
|
|
84
|
+
{},
|
|
85
|
+
async () => {
|
|
86
|
+
try {
|
|
87
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
88
|
+
const devices = peerService.getDevices();
|
|
89
|
+
return {
|
|
90
|
+
content: [{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: JSON.stringify({
|
|
93
|
+
count: devices.length,
|
|
94
|
+
devices: devices.map((d) => ({
|
|
95
|
+
fingerprint: d.fingerprint,
|
|
96
|
+
alias: d.alias,
|
|
97
|
+
deviceType: d.deviceType,
|
|
98
|
+
pairedAt: d.pairedAt,
|
|
99
|
+
lastConnected: d.lastConnected
|
|
100
|
+
}))
|
|
101
|
+
})
|
|
102
|
+
}]
|
|
103
|
+
};
|
|
104
|
+
} catch (err) {
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }],
|
|
107
|
+
isError: true
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
server.tool(
|
|
113
|
+
"list_peer_connections",
|
|
114
|
+
"List active WebRTC connections to paired devices. Shows connection state, latency, and open data channels.",
|
|
115
|
+
{},
|
|
116
|
+
async () => {
|
|
117
|
+
try {
|
|
118
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
119
|
+
const connections = peerService.getConnections();
|
|
120
|
+
return {
|
|
121
|
+
content: [{
|
|
122
|
+
type: "text",
|
|
123
|
+
text: JSON.stringify({
|
|
124
|
+
count: connections.length,
|
|
125
|
+
connections
|
|
126
|
+
})
|
|
127
|
+
}]
|
|
128
|
+
};
|
|
129
|
+
} catch (err) {
|
|
130
|
+
return {
|
|
131
|
+
content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }],
|
|
132
|
+
isError: true
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
server.tool(
|
|
138
|
+
"unpair_device",
|
|
139
|
+
"Remove a paired device. Disconnects the WebRTC connection and deletes the stored pairing. The device will need to re-pair via QR code to connect again.",
|
|
140
|
+
{
|
|
141
|
+
fingerprint: import_zod.z.string().describe("DTLS fingerprint of the device to unpair")
|
|
142
|
+
},
|
|
143
|
+
async ({ fingerprint }) => {
|
|
144
|
+
try {
|
|
145
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
146
|
+
const removed = await peerService.unpairDevice(fingerprint);
|
|
147
|
+
return {
|
|
148
|
+
...removed ? {} : { isError: true },
|
|
149
|
+
content: [{
|
|
150
|
+
type: "text",
|
|
151
|
+
text: JSON.stringify({
|
|
152
|
+
removed,
|
|
153
|
+
message: removed ? `Device ${fingerprint.slice(0, 12)}\u2026 unpaired` : `No device found with fingerprint ${fingerprint.slice(0, 12)}\u2026`
|
|
154
|
+
})
|
|
155
|
+
}]
|
|
156
|
+
};
|
|
157
|
+
} catch (err) {
|
|
158
|
+
return {
|
|
159
|
+
content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }],
|
|
160
|
+
isError: true
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
server.tool(
|
|
166
|
+
"get_remote_state",
|
|
167
|
+
"Get the workspace state snapshot from a connected peer. Shows their plans, agent sessions, channel events, and audio status. If no fingerprint is given, returns state from all connected peers.",
|
|
168
|
+
{
|
|
169
|
+
fingerprint: import_zod.z.string().optional().describe("DTLS fingerprint of a specific peer. Omit for all peers.")
|
|
170
|
+
},
|
|
171
|
+
async ({ fingerprint }) => {
|
|
172
|
+
try {
|
|
173
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
174
|
+
if (fingerprint) {
|
|
175
|
+
const state = peerService.getRemoteState(fingerprint);
|
|
176
|
+
if (!state) {
|
|
177
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: "No state from this peer \u2014 not connected or no snapshot received yet." }) }], isError: true };
|
|
178
|
+
}
|
|
179
|
+
return { content: [{ type: "text", text: JSON.stringify(state) }] };
|
|
180
|
+
}
|
|
181
|
+
const allStates = peerService.getAllRemoteStates();
|
|
182
|
+
const result = {};
|
|
183
|
+
for (const [fp, state] of allStates) {
|
|
184
|
+
result[fp] = state;
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
content: [{
|
|
188
|
+
type: "text",
|
|
189
|
+
text: JSON.stringify({ peerCount: allStates.size, states: result })
|
|
190
|
+
}]
|
|
191
|
+
};
|
|
192
|
+
} catch (err) {
|
|
193
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
server.tool(
|
|
198
|
+
"list_remote_terminals",
|
|
199
|
+
"List terminals running on connected peers. Remote terminals can be viewed and controlled from this machine. Each terminal shows the peer it belongs to, the agent preset, title, and whether it is alive.",
|
|
200
|
+
{
|
|
201
|
+
fingerprint: import_zod.z.string().optional().describe("Filter to a specific peer. Omit for all peers.")
|
|
202
|
+
},
|
|
203
|
+
async ({ fingerprint }) => {
|
|
204
|
+
try {
|
|
205
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
206
|
+
const terminals = fingerprint ? peerService.getRemoteTerminalsForPeer(fingerprint) : peerService.getRemoteTerminals();
|
|
207
|
+
return {
|
|
208
|
+
content: [{
|
|
209
|
+
type: "text",
|
|
210
|
+
text: JSON.stringify({
|
|
211
|
+
count: terminals.length,
|
|
212
|
+
terminals: terminals.map((t) => ({
|
|
213
|
+
id: t.id,
|
|
214
|
+
preset: t.preset,
|
|
215
|
+
title: t.title,
|
|
216
|
+
cwd: t.cwd,
|
|
217
|
+
alive: t.alive,
|
|
218
|
+
peerFingerprint: t.peerFingerprint
|
|
219
|
+
}))
|
|
220
|
+
})
|
|
221
|
+
}]
|
|
222
|
+
};
|
|
223
|
+
} catch (err) {
|
|
224
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
server.tool(
|
|
229
|
+
"write_remote_terminal",
|
|
230
|
+
"Send input to a terminal running on a connected peer. Use this to type commands into remote terminals. Append \\n to execute the command.",
|
|
231
|
+
{
|
|
232
|
+
fingerprint: import_zod.z.string().describe("DTLS fingerprint of the peer that owns the terminal."),
|
|
233
|
+
terminal_id: import_zod.z.string().describe("ID of the remote terminal."),
|
|
234
|
+
data: import_zod.z.string().describe("The text to send to the terminal. Include \\n to press Enter.")
|
|
235
|
+
},
|
|
236
|
+
async ({ fingerprint, terminal_id, data }) => {
|
|
237
|
+
try {
|
|
238
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
239
|
+
const sent = peerService.writeRemoteTerminal(fingerprint, terminal_id, data);
|
|
240
|
+
return {
|
|
241
|
+
...sent ? {} : { isError: true },
|
|
242
|
+
content: [{
|
|
243
|
+
type: "text",
|
|
244
|
+
text: JSON.stringify({
|
|
245
|
+
sent,
|
|
246
|
+
message: sent ? `Sent ${data.length} chars to remote terminal ${terminal_id}` : "Failed \u2014 terminal not found or peer not connected"
|
|
247
|
+
})
|
|
248
|
+
}]
|
|
249
|
+
};
|
|
250
|
+
} catch (err) {
|
|
251
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
server.tool(
|
|
256
|
+
"get_remote_audio",
|
|
257
|
+
"Get audio capture status from connected peers. Shows which peers are capturing audio and how much is buffered. When a peer is capturing with shareAudio enabled, their audio is automatically fed into this instance's audio buffer.",
|
|
258
|
+
{},
|
|
259
|
+
async () => {
|
|
260
|
+
try {
|
|
261
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
262
|
+
const statuses = peerService.getRemoteAudioStatuses();
|
|
263
|
+
return {
|
|
264
|
+
content: [{
|
|
265
|
+
type: "text",
|
|
266
|
+
text: JSON.stringify({
|
|
267
|
+
count: statuses.length,
|
|
268
|
+
peers: statuses
|
|
269
|
+
})
|
|
270
|
+
}]
|
|
271
|
+
};
|
|
272
|
+
} catch (err) {
|
|
273
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
);
|
|
277
|
+
server.tool(
|
|
278
|
+
"list_remote_input_requests",
|
|
279
|
+
"List pending user-input requests from agents running on connected peers. These are prompts that remote agents have sent via await_user_input \u2014 you can respond from this machine to unblock them.",
|
|
280
|
+
{},
|
|
281
|
+
async () => {
|
|
282
|
+
try {
|
|
283
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
284
|
+
const requests = peerService.getPendingInputRequests();
|
|
285
|
+
return {
|
|
286
|
+
content: [{
|
|
287
|
+
type: "text",
|
|
288
|
+
text: JSON.stringify({
|
|
289
|
+
count: requests.length,
|
|
290
|
+
requests
|
|
291
|
+
})
|
|
292
|
+
}]
|
|
293
|
+
};
|
|
294
|
+
} catch (err) {
|
|
295
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
);
|
|
299
|
+
server.tool(
|
|
300
|
+
"respond_remote_input",
|
|
301
|
+
"Respond to a pending user-input request from a remote agent. The response is sent to the peer where the agent is running, unblocking the agent. First response wins \u2014 if the local user already answered, this is a no-op. The question was put to a person: your answer reaches the asker marked as yours (your agent type), not as theirs.",
|
|
302
|
+
{
|
|
303
|
+
request_id: import_zod.z.string().describe("ID of the input request to respond to."),
|
|
304
|
+
response: import_zod.z.string().describe("The response text to send back to the remote agent.")
|
|
305
|
+
},
|
|
306
|
+
async ({ request_id, response }, extra) => {
|
|
307
|
+
try {
|
|
308
|
+
const peerService = _lazy_______services_peer_connection_service;
|
|
309
|
+
const { author, authorType } = (0, import_helpers.authorFromExtra)(deps, extra);
|
|
310
|
+
const sent = peerService.respondToInputRequest(request_id, response, { actor: author, actorType: authorType, channel: "mcp" });
|
|
311
|
+
return {
|
|
312
|
+
...sent ? {} : { isError: true },
|
|
313
|
+
content: [{
|
|
314
|
+
type: "text",
|
|
315
|
+
text: JSON.stringify({
|
|
316
|
+
sent,
|
|
317
|
+
message: sent ? "Response sent to remote agent" : "Request not found or already answered"
|
|
318
|
+
})
|
|
319
|
+
}]
|
|
320
|
+
};
|
|
321
|
+
} catch (err) {
|
|
322
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
328
|
+
0 && (module.exports = {
|
|
329
|
+
registerPeerTools
|
|
330
|
+
});
|