productfoo 0.0.0-stage → 1.0.1
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 +338 -2
- package/bin/foo +3 -0
- package/bin/foo.mjs +42 -0
- package/commands/bug.md +31 -0
- package/commands/discovery.md +28 -0
- package/commands/ideate.md +27 -0
- package/commands/init.md +28 -0
- package/commands/pitch.md +27 -0
- package/commands/preview.md +25 -0
- package/commands/research.md +31 -0
- package/commands/roast.md +27 -0
- package/commands/spec.md +30 -0
- package/config/pricing.yaml +198 -0
- package/config/routing-policy.yaml +171 -0
- package/dist-public/src/activeModel.d.ts +83 -0
- package/dist-public/src/activeModel.js +331 -0
- package/dist-public/src/agentAdapters.d.ts +122 -0
- package/dist-public/src/agentAdapters.js +178 -0
- package/dist-public/src/agentState.d.ts +43 -0
- package/dist-public/src/agentState.js +177 -0
- package/dist-public/src/bugCapsule.d.ts +94 -0
- package/dist-public/src/bugCapsule.js +227 -0
- package/dist-public/src/bugCapture.d.ts +26 -0
- package/dist-public/src/bugCapture.js +251 -0
- package/dist-public/src/bugOwnerLog.d.ts +93 -0
- package/dist-public/src/bugOwnerLog.js +304 -0
- package/dist-public/src/bugReportStore.d.ts +48 -0
- package/dist-public/src/bugReportStore.js +860 -0
- package/dist-public/src/bugSpecContext.d.ts +7 -0
- package/dist-public/src/bugSpecContext.js +129 -0
- package/dist-public/src/channelFreshness.d.ts +25 -0
- package/dist-public/src/channelFreshness.js +194 -0
- package/dist-public/src/cli.d.ts +30 -0
- package/dist-public/src/cli.js +1667 -0
- package/dist-public/src/cliArgs.d.ts +7 -0
- package/dist-public/src/cliArgs.js +44 -0
- package/dist-public/src/codeCatalog.d.ts +41 -0
- package/dist-public/src/codeCatalog.js +197 -0
- package/dist-public/src/commandContract.d.ts +84 -0
- package/dist-public/src/commandContract.js +390 -0
- package/dist-public/src/commandUsage.d.ts +3 -0
- package/dist-public/src/commandUsage.js +30 -0
- package/dist-public/src/commands/agent.d.ts +60 -0
- package/dist-public/src/commands/agent.js +1353 -0
- package/dist-public/src/commands/asp.d.ts +8 -0
- package/dist-public/src/commands/asp.js +669 -0
- package/dist-public/src/commands/evalCmd.d.ts +4 -0
- package/dist-public/src/commands/evalCmd.js +405 -0
- package/dist-public/src/commands/login.d.ts +25 -0
- package/dist-public/src/commands/login.js +94 -0
- package/dist-public/src/commands/loop.d.ts +16 -0
- package/dist-public/src/commands/loop.js +619 -0
- package/dist-public/src/commands/reconcile.d.ts +41 -0
- package/dist-public/src/commands/reconcile.js +292 -0
- package/dist-public/src/commands/runtime.d.ts +1 -0
- package/dist-public/src/commands/runtime.js +36 -0
- package/dist-public/src/commands/scanRedact.d.ts +8 -0
- package/dist-public/src/commands/scanRedact.js +266 -0
- package/dist-public/src/commands/setup.d.ts +28 -0
- package/dist-public/src/commands/setup.js +398 -0
- package/dist-public/src/commands/shared.d.ts +17 -0
- package/dist-public/src/commands/shared.js +147 -0
- package/dist-public/src/commands/source.d.ts +1 -0
- package/dist-public/src/commands/source.js +134 -0
- package/dist-public/src/commands/specCmd.d.ts +24 -0
- package/dist-public/src/commands/specCmd.js +794 -0
- package/dist-public/src/commands/update.d.ts +61 -0
- package/dist-public/src/commands/update.js +244 -0
- package/dist-public/src/comprehensionSignal.d.ts +20 -0
- package/dist-public/src/comprehensionSignal.js +166 -0
- package/dist-public/src/conductor/diversity.d.ts +48 -0
- package/dist-public/src/conductor/diversity.js +423 -0
- package/dist-public/src/conductor/engine.d.ts +7 -0
- package/dist-public/src/conductor/engine.js +295 -0
- package/dist-public/src/conductor/families/ideate.d.ts +2 -0
- package/dist-public/src/conductor/families/ideate.js +255 -0
- package/dist-public/src/conductor/families/interview.d.ts +2 -0
- package/dist-public/src/conductor/families/interview.js +39 -0
- package/dist-public/src/conductor/families/specSwarm.d.ts +2 -0
- package/dist-public/src/conductor/families/specSwarm.js +146 -0
- package/dist-public/src/conductor/familyDelivery.d.ts +6 -0
- package/dist-public/src/conductor/familyDelivery.js +37 -0
- package/dist-public/src/conductor/familyPackArtifact.d.ts +4 -0
- package/dist-public/src/conductor/familyPackArtifact.js +260 -0
- package/dist-public/src/conductor/ideateDecision.d.ts +6 -0
- package/dist-public/src/conductor/ideateDecision.js +237 -0
- package/dist-public/src/conductor/pack.d.ts +26 -0
- package/dist-public/src/conductor/pack.js +75 -0
- package/dist-public/src/conductor/types.d.ts +111 -0
- package/dist-public/src/conductor/types.js +7 -0
- package/dist-public/src/configPath.d.ts +2 -0
- package/dist-public/src/configPath.js +7 -0
- package/dist-public/src/discoveryArtifacts.d.ts +54 -0
- package/dist-public/src/discoveryArtifacts.js +467 -0
- package/dist-public/src/discoveryCommand.d.ts +127 -0
- package/dist-public/src/discoveryCommand.js +2148 -0
- package/dist-public/src/discoveryConnections.d.ts +339 -0
- package/dist-public/src/discoveryConnections.js +613 -0
- package/dist-public/src/discoveryDocs.d.ts +129 -0
- package/dist-public/src/discoveryDocs.js +577 -0
- package/dist-public/src/discoveryEvidence.d.ts +59 -0
- package/dist-public/src/discoveryEvidence.js +198 -0
- package/dist-public/src/discoveryFireflies.d.ts +25 -0
- package/dist-public/src/discoveryFireflies.js +551 -0
- package/dist-public/src/discoveryGmail.d.ts +12 -0
- package/dist-public/src/discoveryGmail.js +466 -0
- package/dist-public/src/discoveryGong.d.ts +12 -0
- package/dist-public/src/discoveryGong.js +491 -0
- package/dist-public/src/discoveryLearningRouting.d.ts +90 -0
- package/dist-public/src/discoveryLearningRouting.js +405 -0
- package/dist-public/src/discoveryMatching.d.ts +26 -0
- package/dist-public/src/discoveryMatching.js +73 -0
- package/dist-public/src/discoveryOutlook.d.ts +12 -0
- package/dist-public/src/discoveryOutlook.js +492 -0
- package/dist-public/src/discoveryProcess.d.ts +221 -0
- package/dist-public/src/discoveryProcess.js +703 -0
- package/dist-public/src/discoveryProof.d.ts +143 -0
- package/dist-public/src/discoveryProof.js +529 -0
- package/dist-public/src/discoveryProviders.d.ts +152 -0
- package/dist-public/src/discoveryProviders.js +756 -0
- package/dist-public/src/discoveryReadiness.d.ts +219 -0
- package/dist-public/src/discoveryReadiness.js +672 -0
- package/dist-public/src/discoveryReconcile.d.ts +57 -0
- package/dist-public/src/discoveryReconcile.js +424 -0
- package/dist-public/src/discoverySlack.d.ts +12 -0
- package/dist-public/src/discoverySlack.js +452 -0
- package/dist-public/src/discoverySources.d.ts +56 -0
- package/dist-public/src/discoverySources.js +322 -0
- package/dist-public/src/discoverySync.d.ts +52 -0
- package/dist-public/src/discoverySync.js +151 -0
- package/dist-public/src/discoverySynthesis.d.ts +57 -0
- package/dist-public/src/discoverySynthesis.js +215 -0
- package/dist-public/src/discoveryTeams.d.ts +12 -0
- package/dist-public/src/discoveryTeams.js +516 -0
- package/dist-public/src/discoveryZoom.d.ts +12 -0
- package/dist-public/src/discoveryZoom.js +523 -0
- package/dist-public/src/elicitationSurface.d.ts +13 -0
- package/dist-public/src/elicitationSurface.js +77 -0
- package/dist-public/src/errorReport.d.ts +99 -0
- package/dist-public/src/errorReport.js +443 -0
- package/dist-public/src/errorTaxonomy.d.ts +84 -0
- package/dist-public/src/errorTaxonomy.js +189 -0
- package/dist-public/src/evalCalibration.d.ts +82 -0
- package/dist-public/src/evalCalibration.js +169 -0
- package/dist-public/src/evalChecks.d.ts +21 -0
- package/dist-public/src/evalChecks.js +295 -0
- package/dist-public/src/evalCompile.d.ts +56 -0
- package/dist-public/src/evalCompile.js +58 -0
- package/dist-public/src/evalImprove.d.ts +60 -0
- package/dist-public/src/evalImprove.js +175 -0
- package/dist-public/src/evalJudge.d.ts +47 -0
- package/dist-public/src/evalJudge.js +143 -0
- package/dist-public/src/evalLabels.d.ts +100 -0
- package/dist-public/src/evalLabels.js +287 -0
- package/dist-public/src/evalRecord.d.ts +68 -0
- package/dist-public/src/evalRecord.js +165 -0
- package/dist-public/src/evalRoast.d.ts +88 -0
- package/dist-public/src/evalRoast.js +249 -0
- package/dist-public/src/evidenceIntake.d.ts +66 -0
- package/dist-public/src/evidenceIntake.js +356 -0
- package/dist-public/src/feedback.d.ts +78 -0
- package/dist-public/src/feedback.js +294 -0
- package/dist-public/src/firefliesClient.d.ts +106 -0
- package/dist-public/src/firefliesClient.js +258 -0
- package/dist-public/src/firstMoveTensions.d.ts +10 -0
- package/dist-public/src/firstMoveTensions.js +93 -0
- package/dist-public/src/gitRun.d.ts +21 -0
- package/dist-public/src/gitRun.js +50 -0
- package/dist-public/src/githubReconcile.d.ts +94 -0
- package/dist-public/src/githubReconcile.js +205 -0
- package/dist-public/src/gmailNango.d.ts +131 -0
- package/dist-public/src/gmailNango.js +329 -0
- package/dist-public/src/gongNango.d.ts +118 -0
- package/dist-public/src/gongNango.js +308 -0
- package/dist-public/src/grammarGate.d.ts +13 -0
- package/dist-public/src/grammarGate.js +72 -0
- package/dist-public/src/harnessGates.d.ts +65 -0
- package/dist-public/src/harnessGates.js +168 -0
- package/dist-public/src/humanSurfaceEval.d.ts +19 -0
- package/dist-public/src/humanSurfaceEval.js +156 -0
- package/dist-public/src/ideate.d.ts +43 -0
- package/dist-public/src/ideate.js +255 -0
- package/dist-public/src/ideateContext.d.ts +11 -0
- package/dist-public/src/ideateContext.js +83 -0
- package/dist-public/src/index.d.ts +2 -0
- package/dist-public/src/index.js +4 -0
- package/dist-public/src/initCommand.d.ts +25 -0
- package/dist-public/src/initCommand.js +558 -0
- package/dist-public/src/interviewGate.d.ts +25 -0
- package/dist-public/src/interviewGate.js +126 -0
- package/dist-public/src/jsonFile.d.ts +2 -0
- package/dist-public/src/jsonFile.js +22 -0
- package/dist-public/src/loopBudget.d.ts +182 -0
- package/dist-public/src/loopBudget.js +494 -0
- package/dist-public/src/loopContracts.d.ts +35 -0
- package/dist-public/src/loopContracts.js +364 -0
- package/dist-public/src/machineState.d.ts +1 -0
- package/dist-public/src/machineState.js +9 -0
- package/dist-public/src/notionNango.d.ts +93 -0
- package/dist-public/src/notionNango.js +279 -0
- package/dist-public/src/orchestrationResult.d.ts +11 -0
- package/dist-public/src/orchestrationResult.js +73 -0
- package/dist-public/src/outlookNango.d.ts +124 -0
- package/dist-public/src/outlookNango.js +327 -0
- package/dist-public/src/packetCorrections.d.ts +40 -0
- package/dist-public/src/packetCorrections.js +172 -0
- package/dist-public/src/packetGlossary.d.ts +6 -0
- package/dist-public/src/packetGlossary.js +42 -0
- package/dist-public/src/packetIndex.d.ts +54 -0
- package/dist-public/src/packetIndex.js +744 -0
- package/dist-public/src/packetIndexEntry.d.ts +3 -0
- package/dist-public/src/packetIndexEntry.js +128 -0
- package/dist-public/src/packetIndexServe.d.ts +13 -0
- package/dist-public/src/packetIndexServe.js +113 -0
- package/dist-public/src/packetIndexWorker.d.ts +7 -0
- package/dist-public/src/packetIndexWorker.js +45 -0
- package/dist-public/src/packetLifecycle.d.ts +30 -0
- package/dist-public/src/packetLifecycle.js +127 -0
- package/dist-public/src/packetReconcile.d.ts +73 -0
- package/dist-public/src/packetReconcile.js +386 -0
- package/dist-public/src/packetStatus.d.ts +125 -0
- package/dist-public/src/packetStatus.js +770 -0
- package/dist-public/src/packetValidation.d.ts +17 -0
- package/dist-public/src/packetValidation.js +333 -0
- package/dist-public/src/packetVerify.d.ts +73 -0
- package/dist-public/src/packetVerify.js +303 -0
- package/dist-public/src/packetWrite.d.ts +52 -0
- package/dist-public/src/packetWrite.js +448 -0
- package/dist-public/src/pitch.d.ts +38 -0
- package/dist-public/src/pitch.js +154 -0
- package/dist-public/src/processMemo.d.ts +8 -0
- package/dist-public/src/processMemo.js +23 -0
- package/dist-public/src/productDetect.d.ts +30 -0
- package/dist-public/src/productDetect.js +376 -0
- package/dist-public/src/profile.d.ts +62 -0
- package/dist-public/src/profile.js +334 -0
- package/dist-public/src/questionModel.d.ts +46 -0
- package/dist-public/src/questionModel.js +74 -0
- package/dist-public/src/questionText.d.ts +7 -0
- package/dist-public/src/questionText.js +38 -0
- package/dist-public/src/redactConfig.d.ts +2 -0
- package/dist-public/src/redactConfig.js +11 -0
- package/dist-public/src/redactEngine.d.ts +59 -0
- package/dist-public/src/redactEngine.js +509 -0
- package/dist-public/src/redactGate.d.ts +63 -0
- package/dist-public/src/redactGate.js +209 -0
- package/dist-public/src/repoRead.d.ts +29 -0
- package/dist-public/src/repoRead.js +160 -0
- package/dist-public/src/research.d.ts +242 -0
- package/dist-public/src/research.js +1314 -0
- package/dist-public/src/researchCompletion.d.ts +34 -0
- package/dist-public/src/researchCompletion.js +123 -0
- package/dist-public/src/researchExecution.d.ts +47 -0
- package/dist-public/src/researchExecution.js +309 -0
- package/dist-public/src/researchFormat.d.ts +21 -0
- package/dist-public/src/researchFormat.js +77 -0
- package/dist-public/src/researchGate.d.ts +86 -0
- package/dist-public/src/researchGate.js +1036 -0
- package/dist-public/src/researchReceipt.d.ts +76 -0
- package/dist-public/src/researchReceipt.js +148 -0
- package/dist-public/src/researchRender.d.ts +2 -0
- package/dist-public/src/researchRender.js +267 -0
- package/dist-public/src/researchSigningKey.d.ts +19 -0
- package/dist-public/src/researchSigningKey.js +95 -0
- package/dist-public/src/riskClassify.d.ts +42 -0
- package/dist-public/src/riskClassify.js +149 -0
- package/dist-public/src/routines.d.ts +42 -0
- package/dist-public/src/routines.js +269 -0
- package/dist-public/src/routingPolicy.d.ts +172 -0
- package/dist-public/src/routingPolicy.js +646 -0
- package/dist-public/src/secretInput.d.ts +8 -0
- package/dist-public/src/secretInput.js +89 -0
- package/dist-public/src/selfCheck.d.ts +7 -0
- package/dist-public/src/selfCheck.js +473 -0
- package/dist-public/src/selfCheckCache.d.ts +29 -0
- package/dist-public/src/selfCheckCache.js +147 -0
- package/dist-public/src/severityClass.d.ts +15 -0
- package/dist-public/src/severityClass.js +22 -0
- package/dist-public/src/skillClientPolicy.d.ts +8 -0
- package/dist-public/src/skillClientPolicy.js +16 -0
- package/dist-public/src/skillLocal.d.ts +98 -0
- package/dist-public/src/skillLocal.js +463 -0
- package/dist-public/src/skillTreeDigest.d.ts +9 -0
- package/dist-public/src/skillTreeDigest.js +64 -0
- package/dist-public/src/slackNango.d.ts +62 -0
- package/dist-public/src/slackNango.js +208 -0
- package/dist-public/src/social/arxiv.d.ts +19 -0
- package/dist-public/src/social/arxiv.js +96 -0
- package/dist-public/src/social/github.d.ts +2 -0
- package/dist-public/src/social/github.js +78 -0
- package/dist-public/src/social/hackernews.d.ts +2 -0
- package/dist-public/src/social/hackernews.js +67 -0
- package/dist-public/src/social/index.d.ts +10 -0
- package/dist-public/src/social/index.js +79 -0
- package/dist-public/src/social/reddit.d.ts +2 -0
- package/dist-public/src/social/reddit.js +125 -0
- package/dist-public/src/social/types.d.ts +73 -0
- package/dist-public/src/social/types.js +61 -0
- package/dist-public/src/social/xml.d.ts +10 -0
- package/dist-public/src/social/xml.js +49 -0
- package/dist-public/src/social/youtube.d.ts +7 -0
- package/dist-public/src/social/youtube.js +217 -0
- package/dist-public/src/sourceIngress.d.ts +488 -0
- package/dist-public/src/sourceIngress.js +1651 -0
- package/dist-public/src/specAfter.d.ts +187 -0
- package/dist-public/src/specAfter.js +814 -0
- package/dist-public/src/specBudget.d.ts +124 -0
- package/dist-public/src/specBudget.js +424 -0
- package/dist-public/src/specDecisionSignals.d.ts +38 -0
- package/dist-public/src/specDecisionSignals.js +121 -0
- package/dist-public/src/specLinkedCommits.d.ts +7 -0
- package/dist-public/src/specLinkedCommits.js +107 -0
- package/dist-public/src/specSections.d.ts +105 -0
- package/dist-public/src/specSections.js +718 -0
- package/dist-public/src/statusGlyphs.d.ts +18 -0
- package/dist-public/src/statusGlyphs.js +75 -0
- package/dist-public/src/swarmCommand.d.ts +10 -0
- package/dist-public/src/swarmCommand.js +96 -0
- package/dist-public/src/teamsNango.d.ts +114 -0
- package/dist-public/src/teamsNango.js +301 -0
- package/dist-public/src/tokenStore.d.ts +10 -0
- package/dist-public/src/tokenStore.js +77 -0
- package/dist-public/src/trustEnvelope.d.ts +78 -0
- package/dist-public/src/trustEnvelope.js +392 -0
- package/dist-public/src/untrustedText.d.ts +6 -0
- package/dist-public/src/untrustedText.js +20 -0
- package/dist-public/src/updateNotice.d.ts +41 -0
- package/dist-public/src/updateNotice.js +290 -0
- package/dist-public/src/vendorYaml.d.ts +1 -0
- package/dist-public/src/vendorYaml.js +7374 -0
- package/dist-public/src/workflowRunActuals.d.ts +67 -0
- package/dist-public/src/workflowRunActuals.js +184 -0
- package/dist-public/src/zendeskDiscovery.d.ts +12 -0
- package/dist-public/src/zendeskDiscovery.js +513 -0
- package/dist-public/src/zendeskNango.d.ts +131 -0
- package/dist-public/src/zendeskNango.js +344 -0
- package/dist-public/src/zoomNango.d.ts +106 -0
- package/dist-public/src/zoomNango.js +351 -0
- package/docs/CHANGELOG.md +32 -0
- package/docs/THIRD_PARTY_NOTICES.md +36 -0
- package/package.json +71 -4
- package/schemas/bug-capsule-receipt.schema.json +54 -0
- package/schemas/bug-capsule.schema.json +189 -0
- package/schemas/discovery-evidence-envelope.schema.json +79 -0
- package/schemas/discovery-processing-receipt.schema.json +71 -0
- package/schemas/discovery-service-contract.schema.json +189 -0
- package/skills/AGENTS.md +32 -0
- package/skills/README.md +287 -0
- package/skills/bug/SKILL.md +49 -0
- package/skills/build-preview-spec/SKILL.md +103 -0
- package/skills/capture-external-artifact/SKILL.md +23 -0
- package/skills/capture-external-artifact/agents/openai.yaml +4 -0
- package/skills/capture-external-artifact/references/extractor-libraries.md +27 -0
- package/skills/check-spec-health/SKILL.md +45 -0
- package/skills/check-spec-health/agents/openai.yaml +4 -0
- package/skills/competitive-positioning/SKILL.md +86 -0
- package/skills/competitive-positioning/agents/openai.yaml +4 -0
- package/skills/cpo-lens/SKILL.md +398 -0
- package/skills/cpo-lens/agents/openai.yaml +4 -0
- package/skills/create-prd/SKILL.md +26 -0
- package/skills/create-prd/agents/openai.yaml +4 -0
- package/skills/customer-discovery/SKILL.md +192 -0
- package/skills/design-system/SKILL.md +49 -0
- package/skills/design-system/agents/openai.yaml +4 -0
- package/skills/discussion-guide/SKILL.md +75 -0
- package/skills/discussion-guide/agents/openai.yaml +4 -0
- package/skills/firecrawl-research-papers/SKILL.md +96 -0
- package/skills/firecrawl-research-papers/agents/openai.yaml +4 -0
- package/skills/foo-roast/SKILL.md +325 -0
- package/skills/generate-gtm-brief/SKILL.md +41 -0
- package/skills/generate-gtm-brief/agents/openai.yaml +4 -0
- package/skills/generate-gtm-brief/references/gtm-brief-template.md +56 -0
- package/skills/gong-quotes/SKILL.md +43 -0
- package/skills/gong-quotes/agents/openai.yaml +4 -0
- package/skills/grill-me/SKILL.md +27 -0
- package/skills/grill-me/agents/openai.yaml +4 -0
- package/skills/ideate/SKILL.md +180 -0
- package/skills/ideate/references/family-packs.md +5 -0
- package/skills/initiative-tracker/SKILL.md +23 -0
- package/skills/initiative-tracker/agents/openai.yaml +4 -0
- package/skills/interop-review/SKILL.md +25 -0
- package/skills/interop-review/agents/openai.yaml +4 -0
- package/skills/interview-me/SKILL.md +404 -0
- package/skills/interview-me/agents/openai.yaml +4 -0
- package/skills/loop-library-audit/SKILL.md +123 -0
- package/skills/pitch/SKILL.md +110 -0
- package/skills/pitch/references/opportunity-assessment.md +136 -0
- package/skills/pitch/references/prfaq-template.md +54 -0
- package/skills/pmm-release-briefing/SKILL.md +27 -0
- package/skills/pmm-release-briefing/agents/openai.yaml +4 -0
- package/skills/pmm-release-briefing/references/variant-generalized.md +16 -0
- package/skills/positioning-messaging/SKILL.md +70 -0
- package/skills/positioning-messaging/agents/openai.yaml +4 -0
- package/skills/positioning-messaging/references/guest-insights.md +1400 -0
- package/skills/preview-swarm/SKILL.md +418 -0
- package/skills/preview-swarm/agents/openai.yaml +4 -0
- package/skills/preview-swarm/references/html-effectiveness-build-previews.md +168 -0
- package/skills/product-copywriting/SKILL.md +127 -0
- package/skills/product-copywriting/agents/openai.yaml +4 -0
- package/skills/product-copywriting/references/foo-voice.md +26 -0
- package/skills/product-shape-interview/SKILL.md +219 -0
- package/skills/product-shape-interview/agents/openai.yaml +4 -0
- package/skills/ready-for-release/SKILL.md +39 -0
- package/skills/ready-for-release/agents/openai.yaml +4 -0
- package/skills/redact-transcripts/SKILL.md +23 -0
- package/skills/redact-transcripts/agents/openai.yaml +4 -0
- package/skills/research-brief/SKILL.md +48 -0
- package/skills/research-brief/agents/openai.yaml +4 -0
- package/skills/research-refresh/SKILL.md +63 -0
- package/skills/research-refresh/references/worked-cases.md +44 -0
- package/skills/review-loop/SKILL.md +200 -0
- package/skills/review-spec/SKILL.md +32 -0
- package/skills/review-spec/agents/openai.yaml +4 -0
- package/skills/rfc-from-research/SKILL.md +42 -0
- package/skills/rfc-from-research/agents/openai.yaml +4 -0
- package/skills/rfc-from-research/references/rfc-pattern.md +69 -0
- package/skills/skill-registry.yaml +810 -0
- package/skills/spec-cleanup/SKILL.md +103 -0
- package/skills/spec-cleanup/agents/openai.yaml +4 -0
- package/skills/spec-swarm/SKILL.md +87 -0
- package/skills/spec-swarm/agents/openai.yaml +4 -0
- package/skills/spec-swarm/template/SKILL.template.md +94 -0
- package/skills/spec-swarm/template/personas/accessibility-inclusion.md +40 -0
- package/skills/spec-swarm/template/personas/ai-technical-pm.md +69 -0
- package/skills/spec-swarm/template/personas/analytics-engineering.md +39 -0
- package/skills/spec-swarm/template/personas/applied-ai-eval.md +64 -0
- package/skills/spec-swarm/template/personas/business-gm-pm.md +67 -0
- package/skills/spec-swarm/template/personas/consumer-craft-pm.md +68 -0
- package/skills/spec-swarm/template/personas/content-design.md +40 -0
- package/skills/spec-swarm/template/personas/cpo.md +42 -0
- package/skills/spec-swarm/template/personas/data-science.md +42 -0
- package/skills/spec-swarm/template/personas/developer-experience.md +65 -0
- package/skills/spec-swarm/template/personas/dx-product.md +70 -0
- package/skills/spec-swarm/template/personas/field.md +43 -0
- package/skills/spec-swarm/template/personas/finance-cfo.md +40 -0
- package/skills/spec-swarm/template/personas/growth-pm.md +67 -0
- package/skills/spec-swarm/template/personas/platform-pm.md +67 -0
- package/skills/spec-swarm/template/personas/pmm.md +43 -0
- package/skills/spec-swarm/template/personas/principal-product-designer.md +42 -0
- package/skills/spec-swarm/template/personas/product-ops-program.md +41 -0
- package/skills/spec-swarm/template/personas/qa-release.md +41 -0
- package/skills/spec-swarm/template/personas/responsible-ai-safety.md +64 -0
- package/skills/spec-swarm/template/personas/security-privacy-legal.md +40 -0
- package/skills/spec-swarm/template/personas/strategy-competitive.md +41 -0
- package/skills/spec-swarm/template/personas/technical-architect.md +42 -0
- package/skills/spec-swarm/template/personas/technical-lead.md +43 -0
- package/skills/spec-swarm/template/personas/user-research.md +41 -0
- package/skills/spec-swarm-accessibility-inclusion/SKILL.md +95 -0
- package/skills/spec-swarm-accessibility-inclusion/agents/openai.yaml +4 -0
- package/skills/spec-swarm-ai-technical-pm/SKILL.md +124 -0
- package/skills/spec-swarm-analytics-engineering/SKILL.md +94 -0
- package/skills/spec-swarm-analytics-engineering/agents/openai.yaml +4 -0
- package/skills/spec-swarm-applied-ai-eval/SKILL.md +120 -0
- package/skills/spec-swarm-business-gm-pm/SKILL.md +122 -0
- package/skills/spec-swarm-consumer-craft-pm/SKILL.md +122 -0
- package/skills/spec-swarm-content-design/SKILL.md +95 -0
- package/skills/spec-swarm-content-design/agents/openai.yaml +4 -0
- package/skills/spec-swarm-cpo/SKILL.md +94 -0
- package/skills/spec-swarm-cpo/agents/openai.yaml +4 -0
- package/skills/spec-swarm-data-science/SKILL.md +95 -0
- package/skills/spec-swarm-data-science/agents/openai.yaml +4 -0
- package/skills/spec-swarm-developer-experience/SKILL.md +121 -0
- package/skills/spec-swarm-dx-product/SKILL.md +126 -0
- package/skills/spec-swarm-field/SKILL.md +96 -0
- package/skills/spec-swarm-field/agents/openai.yaml +4 -0
- package/skills/spec-swarm-finance-cfo/SKILL.md +95 -0
- package/skills/spec-swarm-finance-cfo/agents/openai.yaml +4 -0
- package/skills/spec-swarm-growth-pm/SKILL.md +122 -0
- package/skills/spec-swarm-platform-pm/SKILL.md +122 -0
- package/skills/spec-swarm-pmm/SKILL.md +96 -0
- package/skills/spec-swarm-pmm/agents/openai.yaml +4 -0
- package/skills/spec-swarm-principal-product-designer/SKILL.md +95 -0
- package/skills/spec-swarm-principal-product-designer/agents/openai.yaml +4 -0
- package/skills/spec-swarm-product-ops-program/SKILL.md +96 -0
- package/skills/spec-swarm-product-ops-program/agents/openai.yaml +4 -0
- package/skills/spec-swarm-qa-release/SKILL.md +96 -0
- package/skills/spec-swarm-qa-release/agents/openai.yaml +4 -0
- package/skills/spec-swarm-responsible-ai-safety/SKILL.md +120 -0
- package/skills/spec-swarm-security-privacy-legal/SKILL.md +95 -0
- package/skills/spec-swarm-security-privacy-legal/agents/openai.yaml +4 -0
- package/skills/spec-swarm-strategy-competitive/SKILL.md +96 -0
- package/skills/spec-swarm-strategy-competitive/agents/openai.yaml +4 -0
- package/skills/spec-swarm-technical-architect/SKILL.md +95 -0
- package/skills/spec-swarm-technical-architect/agents/openai.yaml +4 -0
- package/skills/spec-swarm-technical-lead/SKILL.md +96 -0
- package/skills/spec-swarm-technical-lead/agents/openai.yaml +4 -0
- package/skills/spec-swarm-user-research/SKILL.md +95 -0
- package/skills/spec-swarm-user-research/agents/openai.yaml +4 -0
- package/skills/strategy-check/SKILL.md +170 -0
- package/skills/strategy-check/agents/openai.yaml +4 -0
- package/skills/study-digest/SKILL.md +41 -0
- package/skills/synthetic-customer/SKILL.md +68 -0
- package/skills/update-cli-spec/SKILL.md +69 -0
- package/skills/update-cli-spec/agents/openai.yaml +4 -0
- package/skills/voc-researcher/SKILL.md +45 -0
- package/skills/voc-researcher/agents/openai.yaml +4 -0
- package/skills-lock.json +35 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { scanText } from "./redactEngine.js";
|
|
2
|
+
import { sanitizeDiscoveryStableUrl } from "./discoverySources.js";
|
|
3
|
+
const TOP_KEYS = new Set(["schema_version", "kind", "study_id", "lane", "source", "findings", "contact_candidates", "coverage", "privacy_attestation", "raw_content_present"]);
|
|
4
|
+
const CONTACT_CANDIDATE_KEYS = new Set(["name", "company", "title"]);
|
|
5
|
+
const SOURCE_KEYS = new Set(["provider", "stable_url", "source_fingerprint", "completed_at", "locator_capability"]);
|
|
6
|
+
const FINDING_KEYS = new Set(["finding_id", "headline", "paraphrase", "evidence_type", "locator", "confidence", "dissent", "hypothesis_id", "explicit_refs", "relationship_hint"]);
|
|
7
|
+
const COVERAGE_KEYS = new Set(["transcript_complete", "caveats"]);
|
|
8
|
+
const PRIVACY_KEYS = new Set(["pii_redacted", "direct_quotes"]);
|
|
9
|
+
const FORBIDDEN_KEY = /(?:^|_)(?:raw(?:_content|_transcript)?|transcript|content|turns?|speaker(?:_utterance)?|utterances?|meeting_id|runtime_handle|session_handle)(?:$|_)/i;
|
|
10
|
+
// The versioned source-fingerprint grammar (nango-discovery-connector-v0
|
|
11
|
+
// T-005, R-004): exactly two accepted shapes — the local worker's
|
|
12
|
+
// sha256-over-session-identity form and the hosted service's
|
|
13
|
+
// `hmac-sha256:v1:` form. Both are explicit; anything else is invalid, so the
|
|
14
|
+
// grammar is versioned, never loosened.
|
|
15
|
+
export const LOCAL_SOURCE_FINGERPRINT = /^sha256:[a-f0-9]{64}$/;
|
|
16
|
+
export const HOSTED_SOURCE_FINGERPRINT = /^hmac-sha256:v1:[a-f0-9]{64}$/;
|
|
17
|
+
export function isValidDiscoverySourceFingerprint(value) {
|
|
18
|
+
return LOCAL_SOURCE_FINGERPRINT.test(value) || HOSTED_SOURCE_FINGERPRINT.test(value);
|
|
19
|
+
}
|
|
20
|
+
// Explicit repository references (D-011): a bare local record id is honest
|
|
21
|
+
// but ambiguous — reconciliation treats it as review-only and never exact-maps
|
|
22
|
+
// it. Exact mapping requires the packet-qualified form `specs/<packet>:<id>`,
|
|
23
|
+
// which names the packet directory the record lives in.
|
|
24
|
+
export const BARE_DISCOVERY_REF = /^(?:R|D|T|F|P|C|H)-\d{3}$/;
|
|
25
|
+
export const PACKET_QUALIFIED_REF = /^specs\/([a-z0-9][a-z0-9._-]*):((?:R|D|T|F|P|C|H)-\d{3})$/;
|
|
26
|
+
export function parseDiscoveryQualifiedRef(value) {
|
|
27
|
+
const match = PACKET_QUALIFIED_REF.exec(value);
|
|
28
|
+
return match ? { packet_slug: match[1], record_id: match[2] } : undefined;
|
|
29
|
+
}
|
|
30
|
+
const INJECTION = /\b(?:ignore|disregard|override)\b.{0,50}\b(?:previous|prior|system|developer)\b.{0,50}\binstructions?\b|\b(?:call|invoke|use)\b.{0,30}\b(?:private source|connector|tool)\b/i;
|
|
31
|
+
const EMAIL = /[\w.+-]+@[\w-]+\.[\w.-]+/;
|
|
32
|
+
const PHONE = /\+?\d[\d\s().-]{7,}\d/;
|
|
33
|
+
function record(value, label) {
|
|
34
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
35
|
+
throw new Error(`${label} must be an object`);
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
function assertClosed(value, allowed, label) {
|
|
39
|
+
for (const key of Object.keys(value)) {
|
|
40
|
+
const allowedAttestation = (label === "evidence envelope" && key === "raw_content_present")
|
|
41
|
+
|| (label === "coverage" && key === "transcript_complete");
|
|
42
|
+
if (FORBIDDEN_KEY.test(key) && !allowedAttestation)
|
|
43
|
+
throw new Error(`${label}: forbidden raw/private field ${key}`);
|
|
44
|
+
if (!allowed.has(key))
|
|
45
|
+
throw new Error(`${label}: unknown field ${key}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function walkForbidden(value, at = "evidence envelope") {
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
value.forEach((entry, index) => walkForbidden(entry, `${at}[${index}]`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!value || typeof value !== "object")
|
|
54
|
+
return;
|
|
55
|
+
for (const [key, child] of Object.entries(value)) {
|
|
56
|
+
const allowedAttestation = (at === "evidence envelope" && key === "raw_content_present")
|
|
57
|
+
|| (at === "evidence envelope.coverage" && key === "transcript_complete");
|
|
58
|
+
if (FORBIDDEN_KEY.test(key) && !allowedAttestation)
|
|
59
|
+
throw new Error(`${at}: forbidden raw/private field ${key}`);
|
|
60
|
+
walkForbidden(child, `${at}.${key}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function assertSafeDerivedText(text, label) {
|
|
64
|
+
if (!text.trim())
|
|
65
|
+
throw new Error(`${label} must not be empty`);
|
|
66
|
+
const scan = scanText(text);
|
|
67
|
+
if (scan.counts.high > 0 || scan.counts.medium > 0)
|
|
68
|
+
throw new Error(`${label} contains a secret-shaped value`);
|
|
69
|
+
if (EMAIL.test(text) || PHONE.test(text))
|
|
70
|
+
throw new Error(`${label} contains PII`);
|
|
71
|
+
if (INJECTION.test(text))
|
|
72
|
+
throw new Error(`${label} contains an untrusted instruction`);
|
|
73
|
+
}
|
|
74
|
+
function stringArray(value, label) {
|
|
75
|
+
if (!Array.isArray(value) || !value.every((entry) => typeof entry === "string"))
|
|
76
|
+
throw new Error(`${label} must be a string array`);
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
function validateEvidenceEnvelope(value, context) {
|
|
80
|
+
walkForbidden(value);
|
|
81
|
+
const top = record(value, "evidence envelope");
|
|
82
|
+
assertClosed(top, TOP_KEYS, "evidence envelope");
|
|
83
|
+
if (top.schema_version !== "0.1" || top.kind !== "discovery_evidence")
|
|
84
|
+
throw new Error("invalid discovery evidence schema or kind");
|
|
85
|
+
if (top.study_id !== context.expected_study_id)
|
|
86
|
+
throw new Error("evidence study_id does not match the target");
|
|
87
|
+
if (top.lane !== context.expected_lane)
|
|
88
|
+
throw new Error("evidence lane does not match the target");
|
|
89
|
+
if (top.raw_content_present !== false)
|
|
90
|
+
throw new Error("raw_content_present must be false");
|
|
91
|
+
const source = record(top.source, "source");
|
|
92
|
+
assertClosed(source, SOURCE_KEYS, "source");
|
|
93
|
+
if (typeof source.provider !== "string" || !source.provider.trim())
|
|
94
|
+
throw new Error("source.provider is required");
|
|
95
|
+
// One versioned grammar for both paths (T-005): local sha256 and hosted
|
|
96
|
+
// hmac-sha256:v1 fingerprints are the two explicit shapes; everything else
|
|
97
|
+
// is refused. Callers that require one family (the local proof path, the
|
|
98
|
+
// hosted bundle gate) check the family on top — the validator never does.
|
|
99
|
+
if (typeof source.source_fingerprint !== "string" || !isValidDiscoverySourceFingerprint(source.source_fingerprint))
|
|
100
|
+
throw new Error("source_fingerprint is invalid");
|
|
101
|
+
if (typeof source.completed_at !== "string" || !Number.isFinite(Date.parse(source.completed_at)))
|
|
102
|
+
throw new Error("source.completed_at is invalid");
|
|
103
|
+
if (source.locator_capability !== "timestamp" && source.locator_capability !== "section" && source.locator_capability !== "none")
|
|
104
|
+
throw new Error("locator_capability is invalid");
|
|
105
|
+
if (source.stable_url !== undefined) {
|
|
106
|
+
if (typeof source.stable_url !== "string")
|
|
107
|
+
throw new Error("stable_url must be a string");
|
|
108
|
+
sanitizeDiscoveryStableUrl(source.provider, source.stable_url);
|
|
109
|
+
}
|
|
110
|
+
if (!Array.isArray(top.findings) || top.findings.length === 0)
|
|
111
|
+
throw new Error("findings must contain at least one finding");
|
|
112
|
+
for (const [index, candidate] of top.findings.entries()) {
|
|
113
|
+
const finding = record(candidate, `finding ${index + 1}`);
|
|
114
|
+
assertClosed(finding, FINDING_KEYS, `finding ${index + 1}`);
|
|
115
|
+
if (typeof finding.finding_id !== "string" || !/^F-\d{3}$/.test(finding.finding_id))
|
|
116
|
+
throw new Error(`finding ${index + 1}: invalid finding_id`);
|
|
117
|
+
if (typeof finding.headline !== "string")
|
|
118
|
+
throw new Error(`finding ${index + 1}: headline is required`);
|
|
119
|
+
assertSafeDerivedText(finding.headline, `finding ${index + 1} headline`);
|
|
120
|
+
if (finding.headline.trim().split(/\s+/).length > 10)
|
|
121
|
+
throw new Error(`finding ${index + 1}: headline must be 10 words or fewer`);
|
|
122
|
+
if (typeof finding.paraphrase !== "string")
|
|
123
|
+
throw new Error(`finding ${index + 1}: paraphrase is required`);
|
|
124
|
+
assertSafeDerivedText(finding.paraphrase, `finding ${index + 1} paraphrase`);
|
|
125
|
+
if (finding.evidence_type !== "stated" && finding.evidence_type !== "observed" && finding.evidence_type !== "inferred")
|
|
126
|
+
throw new Error(`finding ${index + 1}: invalid evidence_type`);
|
|
127
|
+
if (finding.confidence !== "low" && finding.confidence !== "medium" && finding.confidence !== "high")
|
|
128
|
+
throw new Error(`finding ${index + 1}: invalid confidence`);
|
|
129
|
+
if (typeof finding.dissent !== "string")
|
|
130
|
+
throw new Error(`finding ${index + 1}: dissent is required (use an honest none recorded statement)`);
|
|
131
|
+
assertSafeDerivedText(finding.dissent, `finding ${index + 1} dissent`);
|
|
132
|
+
if (context.expected_lane === "unassigned_call_evidence" && finding.hypothesis_id !== undefined)
|
|
133
|
+
throw new Error("unassigned evidence cannot receive a retrospective hypothesis");
|
|
134
|
+
if (context.expected_lane === "study_linked" && typeof finding.hypothesis_id !== "string")
|
|
135
|
+
throw new Error("study-linked evidence requires a pre-existing hypothesis_id");
|
|
136
|
+
if (source.locator_capability !== "none" && typeof finding.locator !== "string")
|
|
137
|
+
throw new Error(`finding ${index + 1}: locator is required for the declared capability`);
|
|
138
|
+
if (finding.locator !== undefined && typeof finding.locator !== "string")
|
|
139
|
+
throw new Error(`finding ${index + 1}: locator must be a string`);
|
|
140
|
+
if (finding.explicit_refs !== undefined) {
|
|
141
|
+
for (const ref of stringArray(finding.explicit_refs, `finding ${index + 1} explicit_refs`)) {
|
|
142
|
+
if (BARE_DISCOVERY_REF.test(ref))
|
|
143
|
+
continue; // review-only: reconciliation never exact-maps a bare id (D-011)
|
|
144
|
+
if (parseDiscoveryQualifiedRef(ref))
|
|
145
|
+
continue;
|
|
146
|
+
if (ref.startsWith("https://"))
|
|
147
|
+
continue;
|
|
148
|
+
throw new Error(`finding ${index + 1}: invalid explicit reference ${ref} (use specs/<packet>:<record-id> to make it exact-mappable, or omit it for semantic review)`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (finding.relationship_hint !== undefined && finding.relationship_hint !== "supports" && finding.relationship_hint !== "contradicts" && finding.relationship_hint !== "new")
|
|
152
|
+
throw new Error(`finding ${index + 1}: invalid relationship_hint`);
|
|
153
|
+
}
|
|
154
|
+
if (top.contact_candidates !== undefined) {
|
|
155
|
+
if (!Array.isArray(top.contact_candidates) || top.contact_candidates.length === 0)
|
|
156
|
+
throw new Error("contact_candidates, when present, must contain at least one candidate");
|
|
157
|
+
for (const [index, entry] of top.contact_candidates.entries()) {
|
|
158
|
+
const candidate = record(entry, `contact candidate ${index + 1}`);
|
|
159
|
+
assertClosed(candidate, CONTACT_CANDIDATE_KEYS, `contact candidate ${index + 1}`);
|
|
160
|
+
const keys = Object.keys(candidate);
|
|
161
|
+
if (keys.length === 0)
|
|
162
|
+
throw new Error(`contact candidate ${index + 1}: at least one of name, company, title is required`);
|
|
163
|
+
for (const key of keys) {
|
|
164
|
+
if (typeof candidate[key] !== "string")
|
|
165
|
+
throw new Error(`contact candidate ${index + 1}: ${key} must be a string`);
|
|
166
|
+
assertSafeDerivedText(candidate[key], `contact candidate ${index + 1} ${key}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const coverage = record(top.coverage, "coverage");
|
|
171
|
+
assertClosed(coverage, COVERAGE_KEYS, "coverage");
|
|
172
|
+
if (typeof coverage.transcript_complete !== "boolean")
|
|
173
|
+
throw new Error("coverage.transcript_complete must be boolean");
|
|
174
|
+
const caveats = stringArray(coverage.caveats, "coverage.caveats");
|
|
175
|
+
for (const caveat of caveats)
|
|
176
|
+
assertSafeDerivedText(caveat, "coverage caveat");
|
|
177
|
+
if ((!source.stable_url || source.locator_capability === "none") && caveats.length === 0)
|
|
178
|
+
throw new Error("missing source capabilities require an explicit coverage caveat");
|
|
179
|
+
const privacy = record(top.privacy_attestation, "privacy_attestation");
|
|
180
|
+
assertClosed(privacy, PRIVACY_KEYS, "privacy_attestation");
|
|
181
|
+
if (privacy.pii_redacted !== true || privacy.direct_quotes !== false)
|
|
182
|
+
throw new Error("privacy_attestation must assert pii_redacted true and direct_quotes false");
|
|
183
|
+
return value;
|
|
184
|
+
}
|
|
185
|
+
export function validateDiscoveryEvidence(value, context) {
|
|
186
|
+
return validateEvidenceEnvelope(value, context);
|
|
187
|
+
}
|
|
188
|
+
// --- Hosted-path screening (nango-discovery-connector-v0 T-004) ----------------
|
|
189
|
+
// The deterministic screen the hosted processing operation runs on a
|
|
190
|
+
// synthesized envelope. Since T-005 it is the SAME closed contract as
|
|
191
|
+
// validateDiscoveryEvidence — one validator, one versioned fingerprint
|
|
192
|
+
// grammar (local sha256 and hosted hmac-sha256:v1, both explicit), closed key
|
|
193
|
+
// sets, the forbidden-key walk, PII/secret/injection screens on every derived
|
|
194
|
+
// string, locator and caveat honesty, lane hypothesis binding, privacy
|
|
195
|
+
// attestation — never a second validator (R-001).
|
|
196
|
+
export function screenDiscoveryServiceEnvelope(value, context) {
|
|
197
|
+
return validateEvidenceEnvelope(value, context);
|
|
198
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type DiscoveryCommandOutcome, type InboxScope } from "./discoveryCommand.js";
|
|
2
|
+
import { type SynthesisTransport } from "./discoverySynthesis.js";
|
|
3
|
+
import { type FetchLike } from "./firefliesClient.js";
|
|
4
|
+
export type FirefliesDiscoveryDeps = {
|
|
5
|
+
fetchImpl?: FetchLike;
|
|
6
|
+
env?: NodeJS.ProcessEnv;
|
|
7
|
+
now?: () => string;
|
|
8
|
+
sleep?: (ms: number) => Promise<void>;
|
|
9
|
+
transport?: SynthesisTransport;
|
|
10
|
+
};
|
|
11
|
+
export declare function runFirefliesDiscovery(root: string, args: string[], deps?: FirefliesDiscoveryDeps): Promise<DiscoveryCommandOutcome>;
|
|
12
|
+
export declare const FIREFLIES_SUPPORT_STATE = "contract_only";
|
|
13
|
+
export declare const FIREFLIES_MODE = "local_worker";
|
|
14
|
+
export type FirefliesScopeSelectors = {
|
|
15
|
+
window: {
|
|
16
|
+
start?: string;
|
|
17
|
+
end?: string;
|
|
18
|
+
};
|
|
19
|
+
external_names?: string[];
|
|
20
|
+
external_domains?: string[];
|
|
21
|
+
title_tokens?: string[];
|
|
22
|
+
include_internal_only?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export declare function firefliesScopeValidationError(scope: FirefliesScopeSelectors): string | null;
|
|
25
|
+
export declare function firefliesSelectorsFromInboxScope(scope: InboxScope): FirefliesScopeSelectors;
|