@nebulacomponents/citable 1.13.1 → 1.15.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/CHANGELOG.md +312 -0
- package/README.md +44 -6
- package/dist/universal/.agents/skills/citable/SKILL.md +22 -8
- package/dist/universal/.agents/skills/citable/VERSION +1 -1
- package/dist/universal/.agents/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.agents/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.agents/skills/citable/commands/README.md +4 -1
- package/dist/universal/.agents/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.agents/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.agents/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.agents/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.agents/skills/citable/manifest.json +29 -16
- package/dist/universal/.agents/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.agents/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.agents/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.agents/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.agents/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.agents/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.agents/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.agents/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.agents/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.agents/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.agents/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.agents/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.claude/agents/citable/citable-auditor.md +64 -0
- package/dist/universal/.claude/agents/citable/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.claude/agents/citable/manifest.json +12 -0
- package/dist/universal/.claude/skills/citable/SKILL.md +22 -8
- package/dist/universal/.claude/skills/citable/VERSION +1 -1
- package/dist/universal/.claude/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.claude/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.claude/skills/citable/commands/README.md +4 -1
- package/dist/universal/.claude/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.claude/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.claude/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.claude/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.claude/skills/citable/manifest.json +34 -16
- package/dist/universal/.claude/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.claude/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.claude/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.claude/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.claude/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.claude/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.claude/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.claude/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.claude/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.claude/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.claude/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.claude/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.cursor/skills/citable/SKILL.md +22 -8
- package/dist/universal/.cursor/skills/citable/VERSION +1 -1
- package/dist/universal/.cursor/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.cursor/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.cursor/skills/citable/commands/README.md +4 -1
- package/dist/universal/.cursor/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.cursor/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.cursor/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.cursor/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.cursor/skills/citable/manifest.json +29 -16
- package/dist/universal/.cursor/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.cursor/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.cursor/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.cursor/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.cursor/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.cursor/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.cursor/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.cursor/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.cursor/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.cursor/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.cursor/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.cursor/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.gemini/skills/citable/SKILL.md +22 -8
- package/dist/universal/.gemini/skills/citable/VERSION +1 -1
- package/dist/universal/.gemini/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.gemini/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.gemini/skills/citable/commands/README.md +4 -1
- package/dist/universal/.gemini/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.gemini/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.gemini/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.gemini/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.gemini/skills/citable/manifest.json +29 -16
- package/dist/universal/.gemini/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.gemini/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.gemini/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.gemini/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.gemini/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.gemini/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.gemini/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.gemini/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.gemini/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.gemini/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.gemini/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.gemini/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.github/skills/citable/SKILL.md +22 -8
- package/dist/universal/.github/skills/citable/VERSION +1 -1
- package/dist/universal/.github/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.github/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.github/skills/citable/commands/README.md +4 -1
- package/dist/universal/.github/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.github/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.github/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.github/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.github/skills/citable/manifest.json +29 -16
- package/dist/universal/.github/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.github/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.github/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.github/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.github/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.github/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.github/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.github/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.github/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.github/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.github/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.github/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.kiro/skills/citable/SKILL.md +22 -8
- package/dist/universal/.kiro/skills/citable/VERSION +1 -1
- package/dist/universal/.kiro/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.kiro/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.kiro/skills/citable/commands/README.md +4 -1
- package/dist/universal/.kiro/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.kiro/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.kiro/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.kiro/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.kiro/skills/citable/manifest.json +29 -16
- package/dist/universal/.kiro/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.kiro/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.kiro/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.kiro/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.kiro/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.kiro/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.kiro/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.kiro/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.kiro/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.kiro/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.kiro/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.kiro/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.opencode/skills/citable/SKILL.md +22 -8
- package/dist/universal/.opencode/skills/citable/VERSION +1 -1
- package/dist/universal/.opencode/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.opencode/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.opencode/skills/citable/commands/README.md +4 -1
- package/dist/universal/.opencode/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.opencode/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.opencode/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.opencode/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.opencode/skills/citable/manifest.json +29 -16
- package/dist/universal/.opencode/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.opencode/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.opencode/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.opencode/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.opencode/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.opencode/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.opencode/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.opencode/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.opencode/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.opencode/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.opencode/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.opencode/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.pi/agent/skills/citable/SKILL.md +22 -8
- package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
- package/dist/universal/.pi/agent/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.pi/agent/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.pi/agent/skills/citable/commands/README.md +4 -1
- package/dist/universal/.pi/agent/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.pi/agent/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.pi/agent/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.pi/agent/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.pi/agent/skills/citable/manifest.json +29 -16
- package/dist/universal/.pi/agent/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.pi/agent/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.pi/agent/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.pi/agent/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.pi/agent/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.qoder/skills/citable/SKILL.md +22 -8
- package/dist/universal/.qoder/skills/citable/VERSION +1 -1
- package/dist/universal/.qoder/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.qoder/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.qoder/skills/citable/commands/README.md +4 -1
- package/dist/universal/.qoder/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.qoder/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.qoder/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.qoder/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.qoder/skills/citable/manifest.json +29 -16
- package/dist/universal/.qoder/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.qoder/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.qoder/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.qoder/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.qoder/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.qoder/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.qoder/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.qoder/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.qoder/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.qoder/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.qoder/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.qoder/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.rovodev/skills/citable/SKILL.md +22 -8
- package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
- package/dist/universal/.rovodev/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.rovodev/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.rovodev/skills/citable/commands/README.md +4 -1
- package/dist/universal/.rovodev/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.rovodev/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.rovodev/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.rovodev/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.rovodev/skills/citable/manifest.json +29 -16
- package/dist/universal/.rovodev/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.rovodev/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.rovodev/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.rovodev/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.rovodev/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.rovodev/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.rovodev/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.rovodev/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.rovodev/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.rovodev/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.rovodev/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.rovodev/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.trae/skills/citable/SKILL.md +22 -8
- package/dist/universal/.trae/skills/citable/VERSION +1 -1
- package/dist/universal/.trae/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.trae/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.trae/skills/citable/commands/README.md +4 -1
- package/dist/universal/.trae/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.trae/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.trae/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.trae/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.trae/skills/citable/manifest.json +29 -16
- package/dist/universal/.trae/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.trae/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.trae/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.trae/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.trae/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.trae/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.trae/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.trae/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.trae/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.trae/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.trae/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.trae/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.trae-cn/skills/citable/SKILL.md +22 -8
- package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
- package/dist/universal/.trae-cn/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.trae-cn/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.trae-cn/skills/citable/commands/README.md +4 -1
- package/dist/universal/.trae-cn/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.trae-cn/skills/citable/commands/observe-and-act.md +62 -8
- package/dist/universal/.trae-cn/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.trae-cn/skills/citable/commands/reporting.md +57 -0
- package/dist/universal/.trae-cn/skills/citable/manifest.json +29 -16
- package/dist/universal/.trae-cn/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.trae-cn/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.trae-cn/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/schedule.schema.json +1 -1
- package/dist/universal/.trae-cn/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.trae-cn/skills/citable/scripts/README.md +3 -1
- package/dist/universal/manifest.json +306 -195
- package/package.json +1 -1
- package/schemas/action-plan.schema.json +13 -0
- package/schemas/browser-evidence-plan.schema.json +14 -0
- package/schemas/canonical-index-import.schema.json +30 -0
- package/schemas/common.defs.json +12 -1
- package/schemas/corroboration-import.schema.json +48 -0
- package/schemas/entity-graph.schema.json +75 -0
- package/schemas/entity.schema.json +13 -0
- package/schemas/observation.schema.json +1 -1
- package/schemas/page.schema.json +3 -0
- package/schemas/regional-network-import.schema.json +55 -0
- package/schemas/schedule.schema.json +1 -1
- package/schemas/source-identity-chain.schema.json +83 -0
- package/scripts/build-dist.js +36 -3
- package/skill/SKILL.md +22 -8
- package/skill/agents/citable-auditor.md +64 -0
- package/skill/agents/citable-semantic-reviewer.md +66 -0
- package/skill/commands/README.md +4 -1
- package/skill/commands/action-findings.md +9 -1
- package/skill/commands/observe-and-act.md +62 -8
- package/skill/commands/plan-audit.md +35 -0
- package/skill/commands/reporting.md +57 -0
- package/src/cli/index.js +115 -15
- package/src/commands/actionPlan.js +12 -1
- package/src/commands/audit.js +4 -0
- package/src/commands/connect.js +29 -0
- package/src/commands/context.js +15 -0
- package/src/commands/delivery.js +86 -2
- package/src/commands/demo.js +36 -0
- package/src/commands/fixtures/demo/.citable/claims.yaml +27 -0
- package/src/commands/fixtures/demo/.citable/competitors.yaml +3 -0
- package/src/commands/fixtures/demo/.citable/config.yaml +18 -0
- package/src/commands/fixtures/demo/.citable/crawlers.yaml +30 -0
- package/src/commands/fixtures/demo/.citable/entities.yaml +28 -0
- package/src/commands/fixtures/demo/.citable/evidence.yaml +19 -0
- package/src/commands/fixtures/demo/.citable/experiments.yaml +3 -0
- package/src/commands/fixtures/demo/.citable/pages.yaml +54 -0
- package/src/commands/fixtures/demo/.citable/prompts.yaml +11 -0
- package/src/commands/fixtures/demo/.citable/queries.yaml +10 -0
- package/src/commands/fixtures/demo/site/index.html +12 -0
- package/src/commands/fixtures/demo/site/learn/execution-governance/index.html +14 -0
- package/src/commands/fixtures/demo/site/pricing/index.html +10 -0
- package/src/commands/fixtures/demo/site/products/gatekeeper/index.html +15 -0
- package/src/commands/fixtures/demo/site/robots.txt +7 -0
- package/src/commands/fixtures/demo/site/sitemap.xml +7 -0
- package/src/commands/init.js +5 -2
- package/src/commands/monitor.js +35 -0
- package/src/commands/observe.js +315 -15
- package/src/commands/planAudit.js +151 -0
- package/src/commands/reportDashboard.js +21 -0
- package/src/commands/reportShareOfVoice.js +60 -0
- package/src/commands/schemaCmd.js +5 -1
- package/src/commands/substantiate.js +22 -10
- package/src/connectors/http.js +6 -3
- package/src/connectors/index.js +3 -1
- package/src/connectors/webflow.js +224 -0
- package/src/connectors/wordpress.js +226 -0
- package/src/crawler/fetch.js +34 -6
- package/src/detectors/geoReco.js +101 -0
- package/src/extractor/page.js +17 -0
- package/src/installer/index.js +282 -28
- package/src/installer/providers.js +11 -0
- package/src/monitoring/alertDelivery.js +98 -0
- package/src/observations/browserJourney.js +15 -7
- package/src/observations/claimDiff.js +83 -0
- package/src/observations/common.js +25 -0
- package/src/observations/entityGraph.js +89 -0
- package/src/observations/renderParity.js +49 -0
- package/src/observations/sourceIdentity.js +62 -0
- package/src/observations/stance.js +261 -0
- package/src/registries/seed.js +95 -0
- package/src/registries/seeds/saas-pricing/claims.yaml +18 -0
- package/src/registries/seeds/saas-pricing/entities.yaml +20 -0
- package/src/registries/seeds/saas-pricing/seed.json +6 -0
- package/src/reporting/dashboard.js +254 -0
- package/src/reporting/shareOfVoice.js +362 -0
- package/src/shared/checklist.js +19 -0
|
@@ -2,6 +2,7 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { readJson, writeJson, sha256, nowIso } from '../shared/io.js';
|
|
4
4
|
import { validateAgainst } from '../shared/schemaValidator.js';
|
|
5
|
+
import { checklistItem, toStringArray } from '../shared/checklist.js';
|
|
5
6
|
|
|
6
7
|
const SEVERITY = { critical: 0, high: 1, medium: 2, low: 3, informational: 3, experimental: 3 };
|
|
7
8
|
const PHASE = { unblock: 0, governance: 1, content: 2, optimization: 3 };
|
|
@@ -57,8 +58,13 @@ function renderPlan(plan) {
|
|
|
57
58
|
lines.push(`### ${action.priority.toUpperCase()} · ${action.action_id} · ${action.status}`);
|
|
58
59
|
lines.push('', `- Subject: \`${action.subject}\``, `- Action: ${action.action}`);
|
|
59
60
|
lines.push(`- Owner: ${action.owner ?? 'unassigned'}`);
|
|
61
|
+
lines.push(`- Decision owner: ${action.decision_owner ?? 'unassigned'}`);
|
|
62
|
+
lines.push(`- Dependencies: ${action.depends_on_action_ids.length ? action.depends_on_action_ids.join(', ') : 'none established'}`);
|
|
60
63
|
if (action.required_input.length) lines.push(`- Required input: ${action.required_input.join(', ')}`);
|
|
61
64
|
if (action.semantic_gates.length) lines.push(`- Semantic gates: ${action.semantic_gates.join(', ')}`);
|
|
65
|
+
lines.push(`- Failure condition: ${action.failure_condition}`);
|
|
66
|
+
lines.push(`- Leading indicators: ${action.leading_indicators.length ? action.leading_indicators.join(', ') : 'none established'}`);
|
|
67
|
+
lines.push(`- Monitoring window: ${action.monitoring_window ?? 'not established'}`);
|
|
62
68
|
lines.push(`- Verify: \`${action.verification.command}\``, '');
|
|
63
69
|
}
|
|
64
70
|
}
|
|
@@ -83,15 +89,20 @@ export function actionPlan(root, { runId } = {}) {
|
|
|
83
89
|
return {
|
|
84
90
|
action_id: `ACT-${finding.finding_id.replace(/^F-/, '')}`,
|
|
85
91
|
finding_ids: [finding.finding_id],
|
|
92
|
+
depends_on_action_ids: [],
|
|
86
93
|
phase: phaseFor(finding),
|
|
87
94
|
priority: ['informational', 'experimental'].includes(finding.classification.severity) ? 'low' : finding.classification.severity,
|
|
88
95
|
subject: finding.subject.identifier,
|
|
89
96
|
action: finding.remediation.preferred,
|
|
90
97
|
owner,
|
|
98
|
+
decision_owner: owner,
|
|
91
99
|
status: blocked ? 'blocked' : 'ready',
|
|
92
|
-
required_input: blocked ? ['accountable owner'] : [],
|
|
100
|
+
required_input: blocked ? toStringArray([checklistItem('owner', 'accountable owner')]) : [],
|
|
93
101
|
semantic_gates: semanticGates(finding),
|
|
94
102
|
unsafe_shortcuts: finding.remediation.unsafe_shortcuts || [],
|
|
103
|
+
failure_condition: `${finding.verification.detector_to_rerun} still reports the exact subject, or verification cannot complete with sufficient evidence`,
|
|
104
|
+
leading_indicators: [],
|
|
105
|
+
monitoring_window: null,
|
|
95
106
|
verification: {
|
|
96
107
|
method: finding.verification.method,
|
|
97
108
|
detector: finding.verification.detector_to_rerun,
|
package/src/commands/audit.js
CHANGED
|
@@ -8,6 +8,8 @@ import { summarize, renderMarkdownReport } from '../reporting/report.js';
|
|
|
8
8
|
import { validateAgainst } from '../shared/schemaValidator.js';
|
|
9
9
|
import { writeJson, sha256 } from '../shared/io.js';
|
|
10
10
|
import { extractModified } from '../detectors/lifeMeas.js';
|
|
11
|
+
import { buildEntityGraph } from '../observations/entityGraph.js';
|
|
12
|
+
import { buildSourceIdentityChain } from '../observations/sourceIdentity.js';
|
|
11
13
|
|
|
12
14
|
/** `citable audit [scope]` — run detectors and produce an evidence package. */
|
|
13
15
|
export async function audit(root, { target, scope, baseUrl, refDate } = {}) {
|
|
@@ -93,6 +95,8 @@ export async function audit(root, { target, scope, baseUrl, refDate } = {}) {
|
|
|
93
95
|
const schemaBlocks = [];
|
|
94
96
|
for (const p of ctx.site.pages) for (const j of p.jsonLd) schemaBlocks.push({ url: p.url, parseError: j.parseError, blocks: j.blocks });
|
|
95
97
|
run.writeArtifact('schema/jsonld.json', schemaBlocks);
|
|
98
|
+
run.writeArtifact('schema/entity-graph.json', buildEntityGraph(ctx.site.pages));
|
|
99
|
+
run.writeArtifact('identity/source-chain.json', buildSourceIdentityChain(ctx.registries));
|
|
96
100
|
for (const p of ctx.site.pages) {
|
|
97
101
|
run.writeArtifact(`headers/${encodeURIComponent(p.url)}.json`, { status: p.status, headers: p.headers });
|
|
98
102
|
}
|
package/src/commands/connect.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
1
2
|
import { loadRegistries, saveRegistry } from '../registries/index.js';
|
|
2
3
|
import { envelope, observationRun } from '../observations/common.js';
|
|
3
4
|
import { getConnector, listConnectors } from '../connectors/index.js';
|
|
4
5
|
import { validateAgainst } from '../shared/schemaValidator.js';
|
|
6
|
+
import { readJson } from '../shared/io.js';
|
|
5
7
|
|
|
6
8
|
function findConnection(root, connectionId) {
|
|
7
9
|
const loaded = loadRegistries(root);
|
|
@@ -88,3 +90,30 @@ export async function syncConnection(root, { connectionId, startDate, endDate, a
|
|
|
88
90
|
saveRegistry(root, 'connections', updated);
|
|
89
91
|
return { ...run, connection_id: connectionId, provider: connector.provider };
|
|
90
92
|
}
|
|
93
|
+
|
|
94
|
+
export async function readCmsContent(root, { connectionId, targetId, accessToken, env, fetchImpl } = {}) {
|
|
95
|
+
if (!connectionId || !targetId) throw new Error('connect read requires --connection-id <id> and --target-id <id>');
|
|
96
|
+
const loaded = findConnection(root, connectionId);
|
|
97
|
+
const connector = getConnector(loaded.connection.provider);
|
|
98
|
+
if (!connector.readContent) {
|
|
99
|
+
throw new Error(`connector ${connector.provider} does not support CMS content reading`);
|
|
100
|
+
}
|
|
101
|
+
const context = contextFor(loaded.connection, connector, { accessToken, env, fetchImpl });
|
|
102
|
+
const content = await connector.readContent(loaded.connection, targetId, context);
|
|
103
|
+
return { connection_id: connectionId, provider: connector.provider, target_id: targetId, content };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export async function applyCmsRemediation(root, { connectionId, input, write = false, reviewer, accessToken, env, fetchImpl } = {}) {
|
|
107
|
+
if (!connectionId || !input) throw new Error('connect apply requires --connection-id <id> and --input <spec.json>');
|
|
108
|
+
const loaded = findConnection(root, connectionId);
|
|
109
|
+
const connector = getConnector(loaded.connection.provider);
|
|
110
|
+
if (!connector.applyRemediation) {
|
|
111
|
+
throw new Error(`connector ${connector.provider} does not support CMS remediation updates`);
|
|
112
|
+
}
|
|
113
|
+
const spec = typeof input === 'string' && fs.existsSync(input) ? readJson(input) : typeof input === 'object' ? input : JSON.parse(input);
|
|
114
|
+
const context = { ...contextFor(loaded.connection, connector, { accessToken, env, fetchImpl }), write: Boolean(write) };
|
|
115
|
+
if (reviewer && !spec.reviewer) spec.reviewer = reviewer;
|
|
116
|
+
const result = await connector.applyRemediation(loaded.connection, spec, context);
|
|
117
|
+
return { connection_id: connectionId, provider: connector.provider, ...result };
|
|
118
|
+
}
|
|
119
|
+
|
package/src/commands/context.js
CHANGED
|
@@ -41,6 +41,20 @@ export async function buildContext(root, { target, baseUrl, refDate } = {}) {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
// Observations recorded under .citable/runs/*/observations/
|
|
45
|
+
const observations = [];
|
|
46
|
+
if (fs.existsSync(runsDir)) {
|
|
47
|
+
for (const run of fs.readdirSync(runsDir)) {
|
|
48
|
+
const obsDir = path.join(runsDir, run, 'observations');
|
|
49
|
+
if (!fs.existsSync(obsDir)) continue;
|
|
50
|
+
for (const f of fs.readdirSync(obsDir)) {
|
|
51
|
+
if (f.endsWith('.json')) {
|
|
52
|
+
try { observations.push(readJson(path.join(obsDir, f))); } catch { warnings.push(`unreadable observation: ${run}/${f}`); }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
44
58
|
// Latest page snapshot (for regression/freshness comparison)
|
|
45
59
|
let snapshots = null;
|
|
46
60
|
const snapFile = path.join(root, '.citable', 'snapshots', 'pages-latest.json');
|
|
@@ -54,6 +68,7 @@ export async function buildContext(root, { target, baseUrl, refDate } = {}) {
|
|
|
54
68
|
registries,
|
|
55
69
|
site,
|
|
56
70
|
promptResults: promptResults.length ? promptResults : null,
|
|
71
|
+
observations: observations.length ? observations : null,
|
|
57
72
|
snapshots,
|
|
58
73
|
refDate: parseRefDate(refDate),
|
|
59
74
|
hashPage: (p) => sha256(p.text),
|
package/src/commands/delivery.js
CHANGED
|
@@ -2,12 +2,23 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { audit } from './audit.js';
|
|
5
|
+
import { compareSnapshots } from './compareSnapshots.js';
|
|
6
|
+
import { buildAlertPayload, dispatchAlertWebhook, filterAlerts } from '../monitoring/alertDelivery.js';
|
|
5
7
|
import { loadRegistries } from '../registries/index.js';
|
|
6
8
|
import { readJson, sha256, writeJson, nowIso } from '../shared/io.js';
|
|
7
9
|
|
|
8
10
|
const PKG = readJson(path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../package.json'));
|
|
9
11
|
|
|
10
|
-
export async function runSchedule(root, {
|
|
12
|
+
export async function runSchedule(root, {
|
|
13
|
+
scheduleId,
|
|
14
|
+
refDate,
|
|
15
|
+
webhook,
|
|
16
|
+
monitor: flagMonitor,
|
|
17
|
+
minSeverity,
|
|
18
|
+
fetchImpl,
|
|
19
|
+
lookup,
|
|
20
|
+
allowPrivateForTest = false,
|
|
21
|
+
} = {}) {
|
|
11
22
|
const { registries, problems } = loadRegistries(root);
|
|
12
23
|
if (problems.length) throw new Error(`registry validation failed: ${problems.join('; ')}`);
|
|
13
24
|
const schedule = registries.schedules.entries.find((item) => item.schedule_id === scheduleId);
|
|
@@ -15,7 +26,80 @@ export async function runSchedule(root, { scheduleId, refDate } = {}) {
|
|
|
15
26
|
if (schedule.status !== 'active') throw new Error(`schedule ${scheduleId} is ${schedule.status}`);
|
|
16
27
|
if (schedule.expected_tool_version !== PKG.version) throw new Error(`schedule ${scheduleId} expects Citable ${schedule.expected_tool_version}, current version is ${PKG.version}`);
|
|
17
28
|
const result = await audit(root, { target: schedule.audit.target, scope: schedule.audit.scope, baseUrl: schedule.audit.base_url, refDate });
|
|
18
|
-
|
|
29
|
+
|
|
30
|
+
const shouldMonitor = flagMonitor || Boolean(schedule.monitor?.enabled);
|
|
31
|
+
let monitorResult = null;
|
|
32
|
+
let alertDelivery = null;
|
|
33
|
+
|
|
34
|
+
if (shouldMonitor) {
|
|
35
|
+
const runsDir = path.join(root, '.citable', 'runs');
|
|
36
|
+
const runs = fs.existsSync(runsDir)
|
|
37
|
+
? fs.readdirSync(runsDir).filter((r) => r !== result.runId && fs.existsSync(path.join(runsDir, r, 'findings.json'))).sort()
|
|
38
|
+
: [];
|
|
39
|
+
const prevRunId = runs.at(-1);
|
|
40
|
+
|
|
41
|
+
if (prevRunId) {
|
|
42
|
+
const comparison = compareSnapshots(root, { runA: prevRunId, runB: result.runId });
|
|
43
|
+
monitorResult = {
|
|
44
|
+
baseline_run: prevRunId,
|
|
45
|
+
comparable: comparison.comparability.comparable,
|
|
46
|
+
summary: comparison.summary,
|
|
47
|
+
regressions_count: comparison.regressions.length,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const targetWebhook = webhook || schedule.monitor?.webhook_url;
|
|
51
|
+
const targetMinSev = minSeverity || schedule.monitor?.min_severity || 'medium';
|
|
52
|
+
|
|
53
|
+
if (targetWebhook) {
|
|
54
|
+
const alerts = comparison.regressions.map((f) => ({
|
|
55
|
+
severity: f.classification?.severity || 'medium',
|
|
56
|
+
type: 'finding_regression',
|
|
57
|
+
detector_id: f.detector_id,
|
|
58
|
+
key: `${f.detector_id}|${f.subject?.identifier || f.subject?.source_file || 'unknown'}`,
|
|
59
|
+
message: f.observation?.summary || '',
|
|
60
|
+
}));
|
|
61
|
+
|
|
62
|
+
const qualifyingAlerts = filterAlerts(alerts, targetMinSev);
|
|
63
|
+
if (qualifyingAlerts.length > 0) {
|
|
64
|
+
const payload = buildAlertPayload({
|
|
65
|
+
runA: prevRunId,
|
|
66
|
+
runB: result.runId,
|
|
67
|
+
source: 'schedule',
|
|
68
|
+
summary: {
|
|
69
|
+
schedule_id: scheduleId,
|
|
70
|
+
...comparison.summary,
|
|
71
|
+
},
|
|
72
|
+
alerts: qualifyingAlerts,
|
|
73
|
+
});
|
|
74
|
+
alertDelivery = await dispatchAlertWebhook(root, payload, {
|
|
75
|
+
webhookUrl: targetWebhook,
|
|
76
|
+
fetchImpl,
|
|
77
|
+
lookup,
|
|
78
|
+
allowPrivateForTest,
|
|
79
|
+
});
|
|
80
|
+
} else {
|
|
81
|
+
alertDelivery = { skipped: true, reason: `no regressions meet min_severity: ${targetMinSev}` };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
monitorResult = {
|
|
86
|
+
status: 'insufficient_history',
|
|
87
|
+
message: 'No prior audit run available for regression comparison',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const execution = {
|
|
93
|
+
schedule_id: scheduleId,
|
|
94
|
+
cron: schedule.cron,
|
|
95
|
+
owner: schedule.owner,
|
|
96
|
+
executed_at: nowIso(),
|
|
97
|
+
run_id: result.runId,
|
|
98
|
+
manifest_hash: sha256(fs.readFileSync(path.join(result.dir, 'manifest.json'))),
|
|
99
|
+
limitations: schedule.limitations,
|
|
100
|
+
...(monitorResult ? { monitor: monitorResult } : {}),
|
|
101
|
+
...(alertDelivery ? { alert_delivery: alertDelivery } : {}),
|
|
102
|
+
};
|
|
19
103
|
const executionFile = path.join(root, '.citable', 'schedule-executions', `${result.runId}.json`);
|
|
20
104
|
writeJson(executionFile, execution);
|
|
21
105
|
return { ...result, schedule_execution: execution, execution_file: executionFile };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { audit } from './audit.js';
|
|
6
|
+
|
|
7
|
+
const FIXTURE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), 'fixtures', 'demo');
|
|
8
|
+
// Pinned so output never drifts as real-world "today" passes the fixture's validity windows.
|
|
9
|
+
const DEMO_REF_DATE = '2026-07-18';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* `citable demo` — run the full detector engine against a bundled, frozen,
|
|
13
|
+
* offline example site. Never fetches the network. Never scores the caller's
|
|
14
|
+
* own project or a real named company — the fixture is synthetic
|
|
15
|
+
* (`https://example.test`, RFC 2606 reserved, non-resolvable).
|
|
16
|
+
*/
|
|
17
|
+
export async function demo() {
|
|
18
|
+
const workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'citable-demo-'));
|
|
19
|
+
try {
|
|
20
|
+
fs.cpSync(FIXTURE_ROOT, workDir, { recursive: true });
|
|
21
|
+
const r = await audit(workDir, {
|
|
22
|
+
target: path.join(workDir, 'site'),
|
|
23
|
+
baseUrl: 'https://example.test',
|
|
24
|
+
refDate: DEMO_REF_DATE,
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
runId: r.runId,
|
|
28
|
+
summary: r.summary,
|
|
29
|
+
manifest: r.manifest,
|
|
30
|
+
report: r.report,
|
|
31
|
+
fixture: 'bundled synthetic example site — offline, not fetched, not a real company',
|
|
32
|
+
};
|
|
33
|
+
} finally {
|
|
34
|
+
fs.rmSync(workDir, { recursive: true, force: true });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
kind: claims
|
|
3
|
+
entries:
|
|
4
|
+
- claim_id: CLAIM-ENFORCE
|
|
5
|
+
claim: >
|
|
6
|
+
Gatekeeper validates whether an AI-initiated action remains admissible
|
|
7
|
+
before execution in configured enforcement deployments.
|
|
8
|
+
claim_type: capability
|
|
9
|
+
entity: ENT-GATEKEEPER
|
|
10
|
+
scope:
|
|
11
|
+
- configured deployments using enforcement mode
|
|
12
|
+
exclusions:
|
|
13
|
+
- advisory-only deployments
|
|
14
|
+
evidence: [EVD-ARCH-SPEC]
|
|
15
|
+
legal_status: approved
|
|
16
|
+
publication_surfaces: ["/products/gatekeeper/"]
|
|
17
|
+
owner: Claim Owner
|
|
18
|
+
status: verified
|
|
19
|
+
valid_from: "2026-05-10"
|
|
20
|
+
expires: "2027-05-10"
|
|
21
|
+
last_verified: "2026-06-01"
|
|
22
|
+
support_assessment:
|
|
23
|
+
status: directly_supported
|
|
24
|
+
assessor: SME Reviewer
|
|
25
|
+
assessment_method: architecture specification review against claim wording
|
|
26
|
+
assessment_date: "2026-06-01"
|
|
27
|
+
confidence: high
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
site:
|
|
3
|
+
base_url: null
|
|
4
|
+
built_output_dir: null
|
|
5
|
+
source_dirs: []
|
|
6
|
+
default_locale: en
|
|
7
|
+
default_jurisdiction: null
|
|
8
|
+
framework:
|
|
9
|
+
name: null
|
|
10
|
+
rendering_model: null
|
|
11
|
+
package_manager: null
|
|
12
|
+
build_command: null
|
|
13
|
+
test_command: null
|
|
14
|
+
audit:
|
|
15
|
+
index_target_default: true
|
|
16
|
+
max_crawl_depth: 4
|
|
17
|
+
thin_content_words: 120
|
|
18
|
+
fetch_external: false
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
kind: crawlers
|
|
3
|
+
entries:
|
|
4
|
+
- crawler_id: CRAWLER-GOOGLEBOT
|
|
5
|
+
user_agent: Googlebot
|
|
6
|
+
vendor: Google
|
|
7
|
+
purpose: search_indexing
|
|
8
|
+
decision: allow
|
|
9
|
+
decision_owner: SEO Owner
|
|
10
|
+
business_rationale: search visibility
|
|
11
|
+
next_review_date: "2027-01-01"
|
|
12
|
+
status: active
|
|
13
|
+
- crawler_id: CRAWLER-GPTBOT
|
|
14
|
+
user_agent: GPTBot
|
|
15
|
+
vendor: OpenAI
|
|
16
|
+
purpose: model_training
|
|
17
|
+
decision: block
|
|
18
|
+
decision_owner: Legal Owner
|
|
19
|
+
legal_rationale: no training license granted
|
|
20
|
+
next_review_date: "2027-01-01"
|
|
21
|
+
status: active
|
|
22
|
+
- crawler_id: CRAWLER-OAI-SEARCHBOT
|
|
23
|
+
user_agent: OAI-SearchBot
|
|
24
|
+
vendor: OpenAI
|
|
25
|
+
purpose: ai_search_discovery
|
|
26
|
+
decision: allow
|
|
27
|
+
decision_owner: SEO Owner
|
|
28
|
+
business_rationale: ChatGPT search inclusion
|
|
29
|
+
next_review_date: "2027-01-01"
|
|
30
|
+
status: active
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
kind: entities
|
|
3
|
+
entries:
|
|
4
|
+
- entity_id: ENT-ORG
|
|
5
|
+
canonical_name: Example Governance
|
|
6
|
+
entity_type: organization
|
|
7
|
+
canonical_url: https://example.test/
|
|
8
|
+
aliases: []
|
|
9
|
+
authoritative_profiles:
|
|
10
|
+
- https://www.linkedin.com/company/example-governance
|
|
11
|
+
category: AI execution governance
|
|
12
|
+
definition: >
|
|
13
|
+
Example Governance is an AI execution governance platform vendor.
|
|
14
|
+
status: verified
|
|
15
|
+
last_verified: "2026-06-01"
|
|
16
|
+
owner: Entity Owner
|
|
17
|
+
- entity_id: ENT-GATEKEEPER
|
|
18
|
+
canonical_name: Gatekeeper
|
|
19
|
+
entity_type: product
|
|
20
|
+
owner_entity: ENT-ORG
|
|
21
|
+
canonical_url: https://example.test/products/gatekeeper/
|
|
22
|
+
category: AI execution governance
|
|
23
|
+
definition: >
|
|
24
|
+
A runtime enforcement component that validates whether an AI-initiated
|
|
25
|
+
action remains admissible before execution.
|
|
26
|
+
status: verified
|
|
27
|
+
last_verified: "2026-06-01"
|
|
28
|
+
owner: Entity Owner
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
kind: evidence
|
|
3
|
+
entries:
|
|
4
|
+
- evidence_id: EVD-ARCH-SPEC
|
|
5
|
+
title: Gatekeeper architecture specification v2
|
|
6
|
+
evidence_type: architecture_specification
|
|
7
|
+
source: internal://specs/gatekeeper-v2.md
|
|
8
|
+
primary_or_secondary: primary
|
|
9
|
+
supports_claims: [CLAIM-ENFORCE]
|
|
10
|
+
methodology: design review
|
|
11
|
+
measurement_period: "2026-05"
|
|
12
|
+
publication_date: "2026-05-10"
|
|
13
|
+
retrieved_date: "2026-06-01"
|
|
14
|
+
valid_until: "2027-05-10"
|
|
15
|
+
integrity_hash: sha256:f685b01d139f89eacd9b8957b55f4986ad8dff1ba6848a61419dd505075d9dc
|
|
16
|
+
access_status: internal
|
|
17
|
+
reuse_status: licensed
|
|
18
|
+
reviewer: SME Reviewer
|
|
19
|
+
verification_status: verified
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
kind: pages
|
|
3
|
+
entries:
|
|
4
|
+
- page_id: PAGE-HOME
|
|
5
|
+
url: /
|
|
6
|
+
page_type: home
|
|
7
|
+
primary_intent: brand navigation
|
|
8
|
+
primary_entities: [ENT-ORG]
|
|
9
|
+
content_owner: Content Owner
|
|
10
|
+
lifecycle_class: evergreen
|
|
11
|
+
review_cadence: quarterly
|
|
12
|
+
next_review_date: "2026-10-01"
|
|
13
|
+
indexing_intent: index
|
|
14
|
+
conversion_action: request demo
|
|
15
|
+
status: active
|
|
16
|
+
- page_id: PAGE-GATEKEEPER
|
|
17
|
+
url: /products/gatekeeper/
|
|
18
|
+
page_type: product
|
|
19
|
+
primary_intent: vendor evaluation of runtime authorization
|
|
20
|
+
primary_entities: [ENT-GATEKEEPER]
|
|
21
|
+
published_claims: [CLAIM-ENFORCE]
|
|
22
|
+
content_owner: Content Owner
|
|
23
|
+
factual_reviewer: SME Reviewer
|
|
24
|
+
lifecycle_class: product_capability
|
|
25
|
+
review_cadence: release-driven
|
|
26
|
+
next_review_date: "2026-12-01"
|
|
27
|
+
indexing_intent: index
|
|
28
|
+
conversion_action: request demo
|
|
29
|
+
status: active
|
|
30
|
+
- page_id: PAGE-DEFN
|
|
31
|
+
url: /learn/execution-governance/
|
|
32
|
+
page_type: definition
|
|
33
|
+
primary_intent: define AI execution governance
|
|
34
|
+
primary_entities: [ENT-ORG]
|
|
35
|
+
content_owner: Content Owner
|
|
36
|
+
factual_reviewer: SME Reviewer
|
|
37
|
+
lifecycle_class: foundational
|
|
38
|
+
review_cadence: semiannual
|
|
39
|
+
next_review_date: "2026-12-15"
|
|
40
|
+
indexing_intent: index
|
|
41
|
+
conversion_action: read product page
|
|
42
|
+
status: active
|
|
43
|
+
- page_id: PAGE-PRICING
|
|
44
|
+
url: /pricing/
|
|
45
|
+
page_type: pricing
|
|
46
|
+
primary_intent: pricing evaluation
|
|
47
|
+
primary_entities: [ENT-GATEKEEPER]
|
|
48
|
+
content_owner: Content Owner
|
|
49
|
+
lifecycle_class: pricing
|
|
50
|
+
review_cadence: on-change
|
|
51
|
+
next_review_date: "2026-08-01"
|
|
52
|
+
indexing_intent: index
|
|
53
|
+
conversion_action: contact sales
|
|
54
|
+
status: active
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
kind: prompts
|
|
3
|
+
entries:
|
|
4
|
+
- prompt_id: P-RECO
|
|
5
|
+
canonical_prompt: What platforms provide runtime authorization for AI agents?
|
|
6
|
+
prompt_class: category
|
|
7
|
+
desired_outcome: mention
|
|
8
|
+
target_entities: [ENT-GATEKEEPER]
|
|
9
|
+
accuracy_status: not_observed
|
|
10
|
+
owner: GEO Owner
|
|
11
|
+
status: active
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head>
|
|
2
|
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<title>Example Governance — AI execution governance platform</title>
|
|
4
|
+
<meta name="description" content="Example Governance provides runtime authorization controls for AI agents, with documented scope, evidence, and limitations.">
|
|
5
|
+
<link rel="canonical" href="https://example.test/">
|
|
6
|
+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://example.test/#organization","name":"Example Governance","url":"https://example.test/"}</script>
|
|
7
|
+
</head><body>
|
|
8
|
+
<h1>AI execution governance for autonomous agents</h1>
|
|
9
|
+
<p>Example Governance is an AI execution governance platform that validates whether an AI-initiated action remains admissible before execution. It does not replace observability tooling; it operates in the execution path.</p>
|
|
10
|
+
<p>The platform is designed for engineering and risk teams at organizations that deploy tool-using AI agents. It is not intended for teams that only need model evaluation dashboards.</p>
|
|
11
|
+
<nav><a href="/products/gatekeeper/">Gatekeeper runtime authorization</a> <a href="/learn/execution-governance/">What is AI execution governance</a> <a href="/pricing/">Pricing and deployment options</a></nav>
|
|
12
|
+
</body></html>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head>
|
|
2
|
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<title>What is AI execution governance? Definition and scope</title>
|
|
4
|
+
<meta name="description" content="A precise definition of AI execution governance, what it excludes, and how it differs from observability and approval workflows.">
|
|
5
|
+
<link rel="canonical" href="https://example.test/learn/execution-governance/">
|
|
6
|
+
</head><body>
|
|
7
|
+
<h1>What is AI execution governance?</h1>
|
|
8
|
+
<p>AI execution governance is the set of enforceable controls that determines whether a specific AI-initiated action is authorized at the moment of execution. It does not include model training governance or after-the-fact observability.</p>
|
|
9
|
+
<h2>How it differs from observability</h2>
|
|
10
|
+
<p>Execution governance differs from observability in one decisive dimension: observability records actions after they occur, whereas execution governance can prevent an inadmissible action. The comparison basis here is enforcement capability, not data collection depth.</p>
|
|
11
|
+
<h2>Limitations of this definition</h2>
|
|
12
|
+
<p>This definition does not apply to fully air-gapped batch systems where no runtime decision point exists. That constraint is a boundary condition, not an implementation detail.</p>
|
|
13
|
+
<p>See <a href="/products/gatekeeper/">Gatekeeper runtime authorization</a> for an implementation, or return to the <a href="/">Example Governance home page</a>.</p>
|
|
14
|
+
</body></html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head>
|
|
2
|
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<title>Pricing — Gatekeeper plans and deployment options</title>
|
|
4
|
+
<meta name="description" content="Published pricing for Gatekeeper: per-seat SaaS plans and self-hosted licensing, with what each plan does not include.">
|
|
5
|
+
<link rel="canonical" href="https://example.test/pricing/">
|
|
6
|
+
</head><body>
|
|
7
|
+
<h1>Gatekeeper pricing</h1>
|
|
8
|
+
<p>Gatekeeper SaaS starts at 40 USD per seat per month. Self-hosted licensing is quoted per deployment. The starter plan does not include enterprise audit exports; that limitation applies until the Team plan.</p>
|
|
9
|
+
<p><a href="/products/gatekeeper/">Gatekeeper product details</a> · <a href="/">Example Governance home</a></p>
|
|
10
|
+
</body></html>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head>
|
|
2
|
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<title>Gatekeeper — runtime authorization for AI agents</title>
|
|
4
|
+
<meta name="description" content="Gatekeeper validates AI agent actions against current policy before execution. SaaS or self-hosted, available globally.">
|
|
5
|
+
<link rel="canonical" href="https://example.test/products/gatekeeper/">
|
|
6
|
+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"SoftwareApplication","@id":"https://example.test/products/gatekeeper/#product","name":"Gatekeeper","url":"https://example.test/products/gatekeeper/","publisher":{"@id":"https://example.test/#organization"}}</script>
|
|
7
|
+
</head><body>
|
|
8
|
+
<h1>Gatekeeper</h1>
|
|
9
|
+
<p>Gatekeeper is a runtime enforcement component that validates whether an AI-initiated action remains admissible before execution. It is designed for platform engineering teams operating autonomous agents in production. It is not for teams seeking a model training framework.</p>
|
|
10
|
+
<h2>Deployment and pricing</h2>
|
|
11
|
+
<p>Gatekeeper is available as SaaS or self-hosted. Pricing is published per seat per month; contact sales for enterprise quotes. Gatekeeper is available in North America and Europe.</p>
|
|
12
|
+
<h2>Limitations</h2>
|
|
13
|
+
<p>Gatekeeper does not support advisory-only deployments for enforcement guarantees, and it does not cover workflows that bypass its integration points. Known limitation: latency budgets under 5 ms are out of scope.</p>
|
|
14
|
+
<p><a href="/learn/execution-governance/">Read the execution governance definition</a> or <a href="/pricing/">compare pricing and deployment options</a>. <a href="/">Example Governance home</a></p>
|
|
15
|
+
</body></html>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url><loc>https://example.test/</loc><lastmod>2026-07-01</lastmod></url>
|
|
4
|
+
<url><loc>https://example.test/products/gatekeeper/</loc><lastmod>2026-07-01</lastmod></url>
|
|
5
|
+
<url><loc>https://example.test/learn/execution-governance/</loc><lastmod>2026-07-01</lastmod></url>
|
|
6
|
+
<url><loc>https://example.test/pricing/</loc><lastmod>2026-07-01</lastmod></url>
|
|
7
|
+
</urlset>
|
package/src/commands/init.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { writeYaml, readJson, nowIso, listFiles } from '../shared/io.js';
|
|
4
4
|
import { REGISTRY_SPECS, emptyRegistry, contextDir } from '../registries/index.js';
|
|
5
5
|
import { validateAgainst } from '../shared/schemaValidator.js';
|
|
6
|
+
import { applySeed } from '../registries/seed.js';
|
|
6
7
|
|
|
7
8
|
const DEFAULT_CRAWLERS = [
|
|
8
9
|
['CRAWLER-GOOGLEBOT', 'Googlebot', 'Google', 'search_indexing'],
|
|
@@ -68,7 +69,7 @@ function detectFramework(root) {
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
/** `citable init` — inspect the repo and create .citable/ without overwriting anything user-maintained. */
|
|
71
|
-
export function init(root, { force = false } = {}) {
|
|
72
|
+
export function init(root, { force = false, seed = null } = {}) {
|
|
72
73
|
const dir = contextDir(root);
|
|
73
74
|
const created = [];
|
|
74
75
|
const skipped = [];
|
|
@@ -120,5 +121,7 @@ export function init(root, { force = false } = {}) {
|
|
|
120
121
|
writeYaml(file, reg);
|
|
121
122
|
created.push(spec.file);
|
|
122
123
|
}
|
|
123
|
-
|
|
124
|
+
|
|
125
|
+
const seedResult = seed ? applySeed(root, seed, { force }) : null;
|
|
126
|
+
return { created, skipped, detected, unresolved, seed: seedResult };
|
|
124
127
|
}
|
package/src/commands/monitor.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { readJson, writeJson, nowIso } from '../shared/io.js';
|
|
4
|
+
import { buildAlertPayload, dispatchAlertWebhook, filterAlerts } from '../monitoring/alertDelivery.js';
|
|
4
5
|
|
|
5
6
|
function observations(dir) {
|
|
6
7
|
const folder = path.join(dir, 'observations');
|
|
@@ -47,3 +48,37 @@ export function monitor(root, { runA, runB } = {}) {
|
|
|
47
48
|
writeJson(path.join(dir, 'latest.json'), result);
|
|
48
49
|
return { ...result, dir };
|
|
49
50
|
}
|
|
51
|
+
|
|
52
|
+
export async function monitorAndAlert(root, {
|
|
53
|
+
runA,
|
|
54
|
+
runB,
|
|
55
|
+
webhookUrl,
|
|
56
|
+
minSeverity = 'medium',
|
|
57
|
+
fetchImpl,
|
|
58
|
+
lookup,
|
|
59
|
+
allowPrivateForTest = false,
|
|
60
|
+
} = {}) {
|
|
61
|
+
const result = monitor(root, { runA, runB });
|
|
62
|
+
if (webhookUrl) {
|
|
63
|
+
const qualifying = filterAlerts(result.alerts, minSeverity);
|
|
64
|
+
if (qualifying.length > 0) {
|
|
65
|
+
const payload = buildAlertPayload({
|
|
66
|
+
runA: result.run_a,
|
|
67
|
+
runB: result.run_b,
|
|
68
|
+
source: 'monitor',
|
|
69
|
+
summary: result.summary,
|
|
70
|
+
alerts: qualifying,
|
|
71
|
+
});
|
|
72
|
+
const delivery = await dispatchAlertWebhook(root, payload, {
|
|
73
|
+
webhookUrl,
|
|
74
|
+
fetchImpl,
|
|
75
|
+
lookup,
|
|
76
|
+
allowPrivateForTest,
|
|
77
|
+
});
|
|
78
|
+
return { ...result, delivery };
|
|
79
|
+
}
|
|
80
|
+
return { ...result, delivery: { skipped: true, reason: `no alerts meet min_severity: ${minSeverity}` } };
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
|