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,147 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { machineStateDir } from "./machineState.js";
|
|
5
|
+
// The self-check scan cache (cli_performance_v0 R-003, D-003): per-file scan
|
|
6
|
+
// results keyed on git HEAD + per-file (mtime, size) + detector-set version, so
|
|
7
|
+
// a warm `foo self check` rescans only changed, new, or unknown files instead of
|
|
8
|
+
// regex-scanning the whole tracked corpus on every run.
|
|
9
|
+
//
|
|
10
|
+
// Correctness is the bar (B1): a secret added to any tracked file MUST still be
|
|
11
|
+
// reported on the next run. The cache never weakens that — a changed file has a
|
|
12
|
+
// different (mtime, size); a changed HEAD or allowlist or detector set
|
|
13
|
+
// invalidates everything; anything unreadable is treated as cold.
|
|
14
|
+
//
|
|
15
|
+
// The cache holds scan METADATA only — detector names, line numbers, mtime, and
|
|
16
|
+
// size. Never file contents, never matched values (the redaction engine itself
|
|
17
|
+
// carries no secret material either). It lives under the machine state dir
|
|
18
|
+
// (~/.foo), which is untracked by construction.
|
|
19
|
+
// Bump when anything that can change a scan result changes: redactEngine
|
|
20
|
+
// detectors, scan options (minEntropyLen), the PII feedback rule, or this
|
|
21
|
+
// cache's own entry shape. Bumping forces every cache to a full rescan.
|
|
22
|
+
export const SCAN_DETECTOR_VERSION = "self-check-scan-cache-v1";
|
|
23
|
+
// Bounds (RISK-004): one file per repo root under <state>/self-check/, each
|
|
24
|
+
// trimmed to these caps on save, and the directory pruned to the most recently
|
|
25
|
+
// used MAX_CACHE_FILES repos. Entries beyond a cap are simply dropped — those
|
|
26
|
+
// files get rescanned next run (cold), never reported clean from stale data.
|
|
27
|
+
export const MAX_CACHE_ENTRIES = 50_000;
|
|
28
|
+
export const MAX_CACHE_BYTES = 8 * 1024 * 1024;
|
|
29
|
+
export const MAX_CACHE_FILES = 128;
|
|
30
|
+
// One file per repo root, so concurrent checkouts of different repos never
|
|
31
|
+
// race and per-repo caps stay per-repo. Resolve the root so the same repo
|
|
32
|
+
// reached as "." and as an absolute path shares one cache; reached via a
|
|
33
|
+
// different cwd-relative path it correctly reads as a different key.
|
|
34
|
+
export function scanCachePath(root) {
|
|
35
|
+
const repoKey = path.resolve(root);
|
|
36
|
+
const hash = createHash("sha1").update(repoKey).digest("hex");
|
|
37
|
+
return path.join(machineStateDir(), "self-check", `${hash}.json`);
|
|
38
|
+
}
|
|
39
|
+
// sha1 of the allowlist file's raw bytes. The allowlist decides what counts as
|
|
40
|
+
// a finding, so any change to it must invalidate the cache even when HEAD has
|
|
41
|
+
// not moved yet (an uncommitted allowlist edit).
|
|
42
|
+
export function allowlistDigest(root, allowFile) {
|
|
43
|
+
const file = path.join(root, allowFile);
|
|
44
|
+
if (!existsSync(file))
|
|
45
|
+
return null;
|
|
46
|
+
try {
|
|
47
|
+
return createHash("sha1").update(readFileSync(file)).digest("hex");
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Returns the cache only when everything it was keyed on still matches; any
|
|
54
|
+
// mismatch, corruption, or unreadable file reads as cold (a full scan).
|
|
55
|
+
export function loadScanCache(root, head, detectorVersion, allowlistDigestValue) {
|
|
56
|
+
if (head === null)
|
|
57
|
+
return null; // no HEAD: cannot key safely, never cache
|
|
58
|
+
const file = scanCachePath(root);
|
|
59
|
+
if (!existsSync(file))
|
|
60
|
+
return null;
|
|
61
|
+
try {
|
|
62
|
+
const cache = JSON.parse(readFileSync(file, "utf8"));
|
|
63
|
+
if (cache?.schema_version !== 1 ||
|
|
64
|
+
cache.repo !== path.resolve(root) ||
|
|
65
|
+
cache.head !== head ||
|
|
66
|
+
cache.detector_version !== detectorVersion ||
|
|
67
|
+
cache.allowlist_digest !== allowlistDigestValue ||
|
|
68
|
+
typeof cache.entries !== "object" ||
|
|
69
|
+
cache.entries === null) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return cache;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Keeps the lexicographically first maxEntries keys — deterministic, and with
|
|
79
|
+
// the entries map rebuilt from the tracked list each run, order carries no
|
|
80
|
+
// staleness risk: a dropped entry just means a cold rescan for that file.
|
|
81
|
+
export function capScanCacheEntries(entries, maxEntries) {
|
|
82
|
+
const keys = Object.keys(entries).sort();
|
|
83
|
+
if (keys.length <= maxEntries)
|
|
84
|
+
return entries;
|
|
85
|
+
const kept = {};
|
|
86
|
+
for (const key of keys.slice(0, maxEntries))
|
|
87
|
+
kept[key] = entries[key];
|
|
88
|
+
return kept;
|
|
89
|
+
}
|
|
90
|
+
// Halve the entry set until the serialized cache fits the byte cap. Also
|
|
91
|
+
// deterministic; again only costs a cold rescan for dropped files. A single
|
|
92
|
+
// entry too large to halve further (a pathological file can carry ~250k
|
|
93
|
+
// findings) is dropped entirely — under-reporting is never an option, so an
|
|
94
|
+
// entry the cap cannot hold is simply rescanned next run.
|
|
95
|
+
function capSerializedSize(cache) {
|
|
96
|
+
let capped = cache;
|
|
97
|
+
while (JSON.stringify(capped).length > MAX_CACHE_BYTES && Object.keys(capped.entries).length > 1) {
|
|
98
|
+
capped = {
|
|
99
|
+
...capped,
|
|
100
|
+
entries: capScanCacheEntries(capped.entries, Math.max(1, Math.floor(Object.keys(capped.entries).length / 2))),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (JSON.stringify(capped).length > MAX_CACHE_BYTES && Object.keys(capped.entries).length > 0) {
|
|
104
|
+
return { ...capped, entries: {} };
|
|
105
|
+
}
|
|
106
|
+
return capped;
|
|
107
|
+
}
|
|
108
|
+
// Keeps the MAX_CACHE_FILES most recently written repo caches so ephemeral
|
|
109
|
+
// repos (test temp dirs get a fresh root every run) cannot accumulate forever
|
|
110
|
+
// in the state dir.
|
|
111
|
+
export function pruneScanCacheDir(dir, maxFiles) {
|
|
112
|
+
let files;
|
|
113
|
+
try {
|
|
114
|
+
files = readdirSync(dir)
|
|
115
|
+
.filter((name) => name.endsWith(".json"))
|
|
116
|
+
.map((name) => ({ name, mtimeMs: statSync(path.join(dir, name)).mtimeMs }));
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return; // the dir does not exist, or cannot be read — nothing to prune
|
|
120
|
+
}
|
|
121
|
+
if (files.length <= maxFiles)
|
|
122
|
+
return;
|
|
123
|
+
files.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
124
|
+
for (const stale of files.slice(maxFiles)) {
|
|
125
|
+
try {
|
|
126
|
+
unlinkSync(path.join(dir, stale.name));
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// another process already pruned it — fine
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Best-effort. A failed cache write must never turn self check red or silent
|
|
134
|
+
// about a finding — it only costs the next run its warm path. The run's findings
|
|
135
|
+
// are already in memory by the time this is called.
|
|
136
|
+
export function saveScanCache(cache) {
|
|
137
|
+
const file = scanCachePath(cache.repo);
|
|
138
|
+
try {
|
|
139
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
140
|
+
writeFileSync(file, JSON.stringify(capSerializedSize({ ...cache, entries: capScanCacheEntries(cache.entries, MAX_CACHE_ENTRIES) })));
|
|
141
|
+
pruneScanCacheDir(path.dirname(file), MAX_CACHE_FILES);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type SeverityClass = "bad" | "sad";
|
|
2
|
+
export interface SeverityClassSpec {
|
|
3
|
+
/** The word that carries the meaning. */
|
|
4
|
+
label: SeverityClass;
|
|
5
|
+
/** One-line gloss for a legend or help surface. */
|
|
6
|
+
gloss: string;
|
|
7
|
+
/** Maps to the web design tokens (web/tokens.css), like the glyph vocabulary. */
|
|
8
|
+
tone: "warn" | "neutral";
|
|
9
|
+
}
|
|
10
|
+
export declare const SEVERITY_CLASS: Record<SeverityClass, SeverityClassSpec>;
|
|
11
|
+
export interface SeverityClassCounts {
|
|
12
|
+
bad: number;
|
|
13
|
+
sad: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function countByClass(classes: Iterable<SeverityClass>): SeverityClassCounts;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Recoverability class for foo findings — Fiona Fung's "bad vs. sad" frame
|
|
2
|
+
// (bad-vs-sad-severity-v0). Orthogonal to `severity` (how much a finding
|
|
3
|
+
// matters): `class` answers "can this be recovered from?"
|
|
4
|
+
//
|
|
5
|
+
// - bad: unrecoverable / boundary-breaking. A false "done", a structurally
|
|
6
|
+
// unprovable requirement — you cannot trust the result until it is fixed.
|
|
7
|
+
// - sad: recoverable. Missing proof, an unfinished-but-referenced requirement
|
|
8
|
+
// — real, but cleaned up by finishing the obvious next step.
|
|
9
|
+
//
|
|
10
|
+
// This is a shared signal primitive: `verify` adopts it first, and other signal
|
|
11
|
+
// surfaces (reconcile, self check) can stamp the same axis later so a triager
|
|
12
|
+
// sees one consistent "fix-now vs. clean-up" split everywhere.
|
|
13
|
+
export const SEVERITY_CLASS = {
|
|
14
|
+
bad: { label: "bad", gloss: "unrecoverable — cannot trust the result until fixed", tone: "warn" },
|
|
15
|
+
sad: { label: "sad", gloss: "recoverable — real, but cleaned up by finishing the next step", tone: "neutral" },
|
|
16
|
+
};
|
|
17
|
+
export function countByClass(classes) {
|
|
18
|
+
const counts = { bad: 0, sad: 0 };
|
|
19
|
+
for (const c of classes)
|
|
20
|
+
counts[c] += 1;
|
|
21
|
+
return counts;
|
|
22
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const BUNDLED_SKILL_TREE_DOMAIN = "foo.bundled-skill-tree.v1";
|
|
2
|
+
export interface BundledSkillTreeAnchor {
|
|
3
|
+
/** Top-level canonical skill folders the package ships. */
|
|
4
|
+
skill_count: number;
|
|
5
|
+
/** foo.bundled-skill-tree.v1 digest over the shipped tree. */
|
|
6
|
+
tree_sha256: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const BUNDLED_SKILL_TREE: BundledSkillTreeAnchor;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// The bundled canonical skills tree this client ships, and the anchor that
|
|
2
|
+
// makes an installed package's own skills trusted with no hosted call and no
|
|
3
|
+
// per-machine approval (foo-open-source-transition-v0 T-003, R-001): the npm
|
|
4
|
+
// tarball carries skills/ and its registry integrity binds the install, and
|
|
5
|
+
// this anchor — the digest of that tree, regenerated by
|
|
6
|
+
// `node scripts/skill-tree-anchor.mjs` after any review that changes skills/ —
|
|
7
|
+
// binds the bytes at every read. A tree edited after packaging mismatches the
|
|
8
|
+
// anchor and is refused, never executed; the drift test
|
|
9
|
+
// (test/skillTreeAnchor.test.ts) fails a build that ships a stale anchor.
|
|
10
|
+
export const BUNDLED_SKILL_TREE_DOMAIN = "foo.bundled-skill-tree.v1";
|
|
11
|
+
export const BUNDLED_SKILL_TREE = Object.freeze({
|
|
12
|
+
// ==== skill-tree-anchor:generated (scripts/skill-tree-anchor.mjs) ====
|
|
13
|
+
skill_count: 65,
|
|
14
|
+
tree_sha256: "aa4cc26b6363c639ff3d08d4b7c7bf1305159aa88d4743d0444c42af62255e95",
|
|
15
|
+
// ==== end skill-tree-anchor:generated ====
|
|
16
|
+
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { type BundledSkillTreeAnchor } from "./skillClientPolicy.js";
|
|
2
|
+
export declare function markSkillFailure(kind: SkillFailureKind, message: string): void;
|
|
3
|
+
export type SkillFailureKind = "not-found" | "unapproved-source";
|
|
4
|
+
declare const PACKAGE_ROOT: string;
|
|
5
|
+
export declare class SkillDeliveryError extends Error {
|
|
6
|
+
readonly kind: SkillFailureKind;
|
|
7
|
+
constructor(kind: SkillFailureKind, message: string, options?: {
|
|
8
|
+
cause?: unknown;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* productfoo executes only skill text it can tie to an approval made on this machine:
|
|
13
|
+
* the bundled release digest, or a development tree the operator approved by
|
|
14
|
+
* exact digest. That refusal is the control that stops a caller repository
|
|
15
|
+
* shadowing a canonical skill with its own instructions.
|
|
16
|
+
*
|
|
17
|
+
* It is a refusal, not an outage. The old wording called it a trust boundary
|
|
18
|
+
* being "rebuilt" and told the reader to "use package-root skills" — which is
|
|
19
|
+
* what they were already doing, so the one command that clears it never
|
|
20
|
+
* appeared. Each condition now names itself and the command that fixes it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function refuseUnapprovedSkillSource(reason: "missing" | "refused"): never;
|
|
23
|
+
/** A missing bundled resource is a local installation error. */
|
|
24
|
+
export declare function skillNotBundledMessage(name: string): string;
|
|
25
|
+
export declare function skillRelPath(name: string): string | null;
|
|
26
|
+
declare const SHA256_HEX: RegExp;
|
|
27
|
+
export interface DevelopmentSkillTrustRecord {
|
|
28
|
+
schema_version: "1";
|
|
29
|
+
record_kind: "foo.development-skill-source";
|
|
30
|
+
root: string;
|
|
31
|
+
skills_sha256: string;
|
|
32
|
+
issued_at: string;
|
|
33
|
+
expires_at: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DevelopmentSkillTrustProposal extends DevelopmentSkillTrustRecord {
|
|
36
|
+
record_path: string;
|
|
37
|
+
}
|
|
38
|
+
export interface DevelopmentSkillTrustProposalOptions {
|
|
39
|
+
record_path?: string;
|
|
40
|
+
issued_at?: string;
|
|
41
|
+
days?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare function exactKeys(value: Record<string, unknown>, expected: readonly string[]): boolean;
|
|
44
|
+
export declare function shellWord(value: string): string;
|
|
45
|
+
export declare function createDevelopmentSkillTrustRecord(rootValue: string, validity: {
|
|
46
|
+
issued_at: string;
|
|
47
|
+
expires_at: string;
|
|
48
|
+
}): DevelopmentSkillTrustRecord;
|
|
49
|
+
export declare function developmentSkillTrustProposal(rootValue: string, options?: DevelopmentSkillTrustProposalOptions): DevelopmentSkillTrustProposal;
|
|
50
|
+
export declare function approveDevelopmentSkillTrust(rootValue: string, expectedSkillsSha256: string, options?: DevelopmentSkillTrustProposalOptions): DevelopmentSkillTrustProposal;
|
|
51
|
+
export type DevelopmentSkillTrustStatus = {
|
|
52
|
+
status: "missing";
|
|
53
|
+
} | {
|
|
54
|
+
status: "refused";
|
|
55
|
+
} | {
|
|
56
|
+
status: "ready";
|
|
57
|
+
root: string;
|
|
58
|
+
skills_sha256: string;
|
|
59
|
+
issued_at: string;
|
|
60
|
+
expires_at: string;
|
|
61
|
+
record_path: string;
|
|
62
|
+
};
|
|
63
|
+
type DevelopmentSkillTrustRead = DevelopmentSkillTrustStatus & {
|
|
64
|
+
target_bytes?: Buffer | null;
|
|
65
|
+
};
|
|
66
|
+
export declare function readDevelopmentSkillTrust(rootValue: string, recordPath: string, targetRelative?: string, nowValue?: string): DevelopmentSkillTrustRead;
|
|
67
|
+
export declare function inspectDevelopmentSkillTrust(rootValue: string, recordPath?: string, nowValue?: string): DevelopmentSkillTrustStatus;
|
|
68
|
+
export interface CanonicalSkillTrustOptions {
|
|
69
|
+
development_trust_record?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Test-only anchor override: pins which tree a resolve must match, so the
|
|
72
|
+
* mismatch-refusal path stays reachable without mutating the package on
|
|
73
|
+
* disk. Production callers omit it and get the committed release anchor.
|
|
74
|
+
*/
|
|
75
|
+
bundled_skill_tree?: BundledSkillTreeAnchor;
|
|
76
|
+
now?: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* #897: doctor's view of the install-anchored path. True when this package's
|
|
80
|
+
* skills tree is exactly the release-anchored tree, so every bundled skill
|
|
81
|
+
* loads with no approval (readBundledCanonicalSkill). False when the tree is
|
|
82
|
+
* absent, unreadable, or edited; then `foo skill trust` is genuinely needed.
|
|
83
|
+
*/
|
|
84
|
+
export declare function bundledSkillTreeVerified(root?: string, anchor?: BundledSkillTreeAnchor): boolean;
|
|
85
|
+
declare function readTrustedCanonicalSkill(name: string, trust: CanonicalSkillTrustOptions): string;
|
|
86
|
+
export declare function resolveLocalSkill(name: string, trust?: CanonicalSkillTrustOptions): {
|
|
87
|
+
text: string;
|
|
88
|
+
source: "local";
|
|
89
|
+
} | null;
|
|
90
|
+
export { PACKAGE_ROOT, readTrustedCanonicalSkill, SHA256_HEX };
|
|
91
|
+
export declare function resolveSkill(root: string, name: string, env?: NodeJS.ProcessEnv, trust?: CanonicalSkillTrustOptions): Promise<{
|
|
92
|
+
text: string;
|
|
93
|
+
source: "local";
|
|
94
|
+
}>;
|
|
95
|
+
export declare function runSkillCommand(root: string, args: string[], env?: NodeJS.ProcessEnv, trust?: CanonicalSkillTrustOptions): Promise<{
|
|
96
|
+
output: string;
|
|
97
|
+
exitCode: number;
|
|
98
|
+
}>;
|