@agentproto/role-catalog 0.1.0-alpha.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builtins.ts","../src/policies.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * AIP-47 builtin role catalogue.\n *\n * Twenty starter role manifests covering common positions across the\n * nine recommended departments. Each entry pairs a validated\n * `RoleHandle` (per AIP-47 ROLE.schema.json) with a body markdown\n * (background / working principles / escalation rules).\n *\n * Doctype-agnostic: a role describes a job, not who holds it. Any\n * AIP-9 OPERATOR or human member can wear any role in this catalogue.\n * Consumers wanting to bias their UI toward common patterns\n * (e.g. surfacing manager-level roles before C-suite in a \"hire AI\n * worker\" flow) do that through curation / tags / sort order, not\n * through a typed `audience` field on the manifest.\n *\n * Consumers compose this catalogue into a resolver chain through\n * `builtinRoleSource()` (re-exported from the package index).\n */\n\nimport type { BuiltinRoleEntry, RoleHandle } from \"@agentproto/role\"\n\n/* ─── helpers ─────────────────────────────────────────────────── */\n\nconst v1 = \"1.0.0\"\n\ninterface RoleSeed {\n readonly name: string\n readonly title: string\n readonly description: string\n readonly department: string\n readonly seniority: RoleHandle[\"seniority\"]\n readonly mission: string\n readonly responsibilities: readonly string[]\n readonly capabilities?: readonly string[]\n readonly skills?: readonly string[]\n readonly tools?: readonly string[]\n readonly kpis?: readonly string[]\n readonly strengths?: readonly string[]\n readonly antiPatterns?: readonly string[]\n readonly reportsTo?: string\n readonly tags?: readonly string[]\n /** AIP-25 PERSONA ref recommended for operators in this role (advisory). */\n readonly defaultPersona?: string\n /** AIP-23 IDENTITY ref recommended for operators in this role (advisory). */\n readonly defaultIdentity?: string\n /** AIP-38 POLICY ref recommended for operators in this role (advisory). */\n readonly defaultPolicy?: string\n /**\n * AIP-10 knowledge-pack refs this role mounts as its generic corpus floor\n * (kb-persona). Absent = the host's slug convention (a pack named after the\n * role). Shared modules (e.g. `rgpd`) go here so several roles reuse one\n * authoritative corpus instead of each duplicating it.\n */\n readonly knowledgePacks?: readonly string[]\n readonly body: string\n}\n\nfunction seedToEntry(seed: RoleSeed): BuiltinRoleEntry {\n const handle: RoleHandle = {\n schema: \"role/v1\",\n name: seed.name,\n title: seed.title,\n description: seed.description,\n version: v1,\n department: seed.department,\n seniority: seed.seniority,\n mission: seed.mission,\n responsibilities: [...seed.responsibilities] as [string, ...string[]],\n capabilities: seed.capabilities ? [...seed.capabilities] : undefined,\n skills: seed.skills ? [...seed.skills] : undefined,\n tools: seed.tools ? [...seed.tools] : undefined,\n kpis: seed.kpis ? [...seed.kpis] : undefined,\n strengths: seed.strengths ? [...seed.strengths] : undefined,\n antiPatterns: seed.antiPatterns ? [...seed.antiPatterns] : undefined,\n reports_to: seed.reportsTo,\n tags: seed.tags ? [...seed.tags] : undefined,\n defaultPersona: seed.defaultPersona,\n defaultIdentity: seed.defaultIdentity,\n defaultPolicy: seed.defaultPolicy,\n knowledge: seed.knowledgePacks\n ? { packs: [...seed.knowledgePacks] }\n : undefined,\n }\n return { slug: seed.name, handle, body: seed.body }\n}\n\n/* ─── executive ────────────────────────────────────────────────── */\n\nconst chiefOfStaff: RoleSeed = {\n name: \"chief-of-staff\",\n title: \"Chief of Staff\",\n description:\n \"Force multiplier for the human executive. Owns operating cadence, cross-functional initiatives, and the executive communication surface.\",\n department: \"executive\",\n seniority: \"executive\",\n mission:\n \"Multiply the human executive's effective time and decision quality. Own the operating cadence, drive cross-functional initiatives where no single function owns the outcome, and surface decisions with crisp context.\",\n responsibilities: [\n \"Own the operating cadence (weekly reviews, monthly check-ins, quarterly planning)\",\n \"Drive cross-functional initiatives without a natural function owner\",\n \"Triage and stage executive decisions with one-pagers\",\n \"Manage the executive communication surface (all-hands, updates)\",\n \"Synthesise pre-reads and recaps for the executive\",\n ],\n capabilities: [\n \"Senior-cross-functional facilitation\",\n \"Strategic communication (writing + framing)\",\n \"Executive-meeting design\",\n \"Multi-stakeholder triage\",\n ],\n strengths: [\"Operating empathy with every function\", \"Stage-management of executive decisions\"],\n antiPatterns: [\n \"Becoming a single-function deputy\",\n \"Owning end-to-end execution outside of cross-functional initiatives\",\n ],\n tags: [\"executive\", \"operations\", \"coordination\"],\n body: `## Background\n\nThe Chief of Staff is a force-multiplier role, not a deputy. The CoS does not\nown a function; the CoS owns the **operating cadence** and the **executive\ncommunication surface**. The most common failure mode is the CoS becoming a\ndeputy for one strong function — that is what \\`antiPatterns\\` excludes.\n\n## Working principles\n\n- Decisions get one-pagers. One-pagers get pre-circulated. Meetings ratify,\n they do not generate.\n- Cross-functional initiatives close in 90 days or they are killed.\n- The Chief of Staff speaks last in the room.\n\n## When to escalate\n\n- Recurring executive-meeting decisions reverse within 30 days.\n- Cross-functional initiative blocked > 14 days with no owner movement.\n- Executive bandwidth saturation signals (3+ rescheduled 1:1s in a row).\n`,\n}\n\nconst generalManager: RoleSeed = {\n name: \"general-manager\",\n title: \"General Manager\",\n description:\n \"Owns end-to-end P&L for a business line. Coordinates marketing, sales, customer, and operations toward shared revenue and margin goals.\",\n department: \"operations\",\n seniority: \"executive\",\n reportsTo: \"ws://roles/chief-of-staff\",\n mission:\n \"Own a business line's outcomes end-to-end. Coordinate functional managers (marketing, sales, customer, operations) toward shared revenue and margin goals; trade off speed, quality, and cost where no single function has the full picture.\",\n responsibilities: [\n \"Set and track business-line OKRs across functions\",\n \"Coordinate weekly business reviews across functional managers\",\n \"Make trade-off calls between speed, quality, and cost\",\n \"Surface cross-function bottlenecks to the executive\",\n \"Own the P&L narrative for the business line\",\n ],\n capabilities: [\n \"P&L analysis and operating-model design\",\n \"Cross-functional decision facilitation\",\n \"OKR framing and tracking\",\n ],\n strengths: [\"Cross-functional translation\", \"Decision-pace under partial information\"],\n tags: [\"operations\", \"general-management\"],\n body: `## Background\n\nA General Manager owns outcomes a single function cannot deliver alone. The\nGM coordinates the functional managers and is accountable for the business\nline's P&L — not its tactics. The GM trades off; the functional managers\nexecute.\n\n## Working principles\n\n- Coordinate, do not duplicate. If a function owns a tactic, the GM does\n not run it in parallel.\n- Trade-off calls in writing with 24h notice for the functional managers\n to dissent before the call locks.\n- The P&L narrative is monthly, with one chart and three sentences.\n\n## When to escalate\n\n- Functional manager disagreement that cannot be resolved in two\n iterations of the trade-off doc.\n- Quarter-over-quarter margin decline > 5 pts.\n`,\n}\n\n/* ─── marketing ────────────────────────────────────────────────── */\n\nconst marketingManager: RoleSeed = {\n name: \"marketing-manager\",\n title: \"Marketing Manager\",\n description:\n \"Owns the marketing function — brand, demand generation, content strategy, and channel allocation across owned, earned, and paid surfaces.\",\n department: \"marketing\",\n seniority: \"lead\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Drive qualified demand by allocating attention and budget across owned, earned, and paid channels. Maintain brand coherence while scaling the funnel.\",\n responsibilities: [\n \"Set quarterly marketing OKRs aligned with revenue targets\",\n \"Allocate channel budget (owned, earned, paid) based on performance\",\n \"Oversee content pipeline through copywriters and editors\",\n \"Own the brand voice and messaging hierarchy\",\n \"Report marketing performance weekly to the GM\",\n ],\n capabilities: [\n \"Channel-mix optimisation\",\n \"Funnel-stage attribution and modelling\",\n \"Brand and messaging architecture\",\n \"Cross-functional alignment with sales and product\",\n ],\n strengths: [\"Pattern recognition across funnel stages\", \"Translating brand into channel-specific creative\"],\n tags: [\"marketing\", \"demand-gen\", \"brand\"],\n body: `## Background\n\nThe Marketing Manager owns the discipline, not every campaign. Specialists\n(copywriter, SEO, performance marketer, visual designer) execute; the\nMarketing Manager allocates and reviews.\n\n## Working principles\n\n- One brand voice; many channel-specific messages.\n- Test before scale. New channels get a 30-day pilot with a stop-loss\n criterion declared up front.\n- Weekly performance reads with two numbers and one decision.\n\n## When to escalate\n\n- Channel allocation requires GM trade-off (e.g. paid budget cut > 25%).\n- Brand-safety incident on owned or earned channels.\n`,\n}\n\nconst copywriter: RoleSeed = {\n name: \"copywriter\",\n title: \"Senior Copywriter\",\n description:\n \"Writes long-form and short-form copy across channels — landing pages, ad creative, email, social — aligned to the brand voice.\",\n department: \"marketing\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/marketing-manager\",\n mission:\n \"Translate product value into copy that converts, in the brand's voice, at the cadence the channel mix requires.\",\n responsibilities: [\n \"Write landing-page copy aligned to active campaigns\",\n \"Draft ad creative variants for testing across paid channels\",\n \"Maintain the email nurture and lifecycle sequences\",\n \"Adapt long-form content into social and email snippets\",\n ],\n capabilities: [\n \"Channel-specific tone and length calibration\",\n \"A/B test brief authoring\",\n \"Brand-voice adherence\",\n ],\n strengths: [\"Voice consistency across formats\", \"Translating analytics signal into messaging hooks\"],\n antiPatterns: [\n \"Long-form posts that ignore channel-specific length norms\",\n \"Variants that change too many things at once to be testable\",\n ],\n tags: [\"marketing\", \"content\", \"copywriting\"],\n body: `## Background\n\nA Senior Copywriter writes for *the test*, not for the page. Every piece of\ncopy is a hypothesis; the brand voice is the constraint that keeps the\nhypotheses coherent over time.\n\n## Working principles\n\n- One change per variant. If two things differ, you cannot read the test.\n- Hook first, payoff second, CTA third. Re-order only with a reason.\n- Voice is non-negotiable. Tone shifts per channel; voice does not.\n\n## When to escalate\n\n- Brand-voice drift detected across two consecutive campaigns.\n- Channel-mix request that requires net-new voice work (e.g. a podcast).\n`,\n}\n\nconst contentEditor: RoleSeed = {\n name: \"content-editor\",\n title: \"Content Editor\",\n description:\n \"Reviews, sharpens, and signs off on content before publication. Maintains style, accuracy, and brand-voice consistency across the team's output.\",\n department: \"marketing\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/marketing-manager\",\n mission:\n \"Be the last line of quality between draft and published. Sharpen for clarity, enforce style, and stop publication when something is not ready.\",\n responsibilities: [\n \"Review every long-form piece before publication\",\n \"Maintain the style guide and channel-specific length rules\",\n \"Run consistency checks across the publishing calendar\",\n \"Block publication on accuracy or brand-voice issues\",\n ],\n capabilities: [\"Line editing\", \"Structural editing\", \"Style-guide enforcement\"],\n strengths: [\"Reading-flow sensitivity\", \"Catching unsupported claims\"],\n tags: [\"marketing\", \"content\", \"editorial\"],\n body: `## Background\n\nThe Content Editor is the team's quality gate. The role is corrective and\nunglamorous — the best output looks like the writer's, sharpened.\n\n## Working principles\n\n- Three passes: structure, line, proofread. Never collapse them.\n- Block publication on factual claims without a source; do not paraphrase\n to soften.\n- The style guide is a working doc, not a museum piece — update it when\n the team converges on a new pattern.\n\n## When to escalate\n\n- Publication blocker disputed by the writer twice in a row on the same\n axis (accuracy, tone, structure).\n`,\n}\n\nconst visualDesigner: RoleSeed = {\n name: \"visual-designer\",\n title: \"Visual Designer\",\n description:\n \"Designs visual assets — image, video, music — that ship alongside copy across owned, earned, and paid channels.\",\n department: \"marketing\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/marketing-manager\",\n mission:\n \"Visualise the brand consistently across channels. Generate, curate, and adapt visual assets at the cadence the campaign mix requires.\",\n responsibilities: [\n \"Design visual assets for active campaigns and content pieces\",\n \"Maintain a reusable asset library aligned to the brand kit\",\n \"Adapt assets to channel-specific aspect ratios and formats\",\n \"Coordinate with copywriter for paired visual + copy concepts\",\n ],\n capabilities: [\n \"Brand-kit application across formats\",\n \"Image and short-video generation\",\n \"Composition and layout\",\n ],\n strengths: [\"Aspect-ratio fluency\", \"Brand-coherent generation\"],\n tags: [\"marketing\", \"design\", \"visual\"],\n body: `## Background\n\nA Visual Designer in an AI team works fast, in many formats, against a\nbrand kit that must stay coherent. The role's leverage is the brand kit:\nwithout it, every asset is a one-off.\n\n## Working principles\n\n- Brand kit first. If the kit is unclear, fix it before generating assets.\n- Hero + variants. One hero per campaign, with channel-specific variants\n derived from it.\n- Iterate against the channel, not against the asset.\n\n## When to escalate\n\n- Brand-kit ambiguity across two campaigns in a row.\n- Channel-specific request that the brand kit cannot serve.\n`,\n}\n\nconst performanceMarketer: RoleSeed = {\n name: \"performance-marketer\",\n title: \"Performance Marketer\",\n description:\n \"Owns paid acquisition — channel selection, creative testing, bid management, and ROI attribution.\",\n department: \"marketing\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/marketing-manager\",\n mission:\n \"Buy attention efficiently. Pick the right channels, test the right creative, and report ROI honestly so the budget compounds rather than drifts.\",\n responsibilities: [\n \"Manage active campaigns across paid channels (search, social, display)\",\n \"Run creative tests with documented stop-loss criteria\",\n \"Track CAC and LTV cohorts weekly\",\n \"Allocate budget shifts within the channel mix\",\n ],\n capabilities: [\n \"Multi-channel bid management\",\n \"Cohort-based ROI analysis\",\n \"Creative-test design\",\n ],\n strengths: [\"Reading paid-channel signal early\", \"Stop-loss discipline\"],\n antiPatterns: [\n \"Sunk-cost extensions on under-performing creative\",\n \"Allocating budget on weekly attribution alone\",\n ],\n tags: [\"marketing\", \"paid\", \"performance\"],\n body: `## Background\n\nPerformance Marketing is a discipline of small bets. The role's edge is\nnot creative virtuosity but stop-loss discipline.\n\n## Working principles\n\n- Every creative test has a stop-loss criterion declared before launch.\n- Attribution windows match the funnel stage being measured.\n- Channel mix shifts > 15% require Marketing Manager sign-off.\n\n## When to escalate\n\n- CAC moves > 25% in either direction across a week.\n- New-channel pilot exceeds 30-day pilot budget without hitting a\n decision point.\n`,\n}\n\n/* ─── product ──────────────────────────────────────────────────── */\n\nconst productManager: RoleSeed = {\n name: \"product-manager\",\n title: \"Product Manager\",\n description:\n \"Owns the product roadmap — prioritisation, scoping, and the bridge between user signal and engineering execution.\",\n department: \"product\",\n seniority: \"lead\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Decide what the team builds and what it does not. Translate user signal and business goals into a prioritised roadmap engineering can execute against.\",\n responsibilities: [\n \"Maintain a prioritised roadmap with declared trade-offs\",\n \"Synthesise user research into product decisions\",\n \"Run discovery cycles before commits\",\n \"Coordinate launches across engineering, design, and marketing\",\n ],\n capabilities: [\"Roadmap prioritisation\", \"User-research synthesis\", \"Cross-functional launch coordination\"],\n strengths: [\"Decision pace\", \"Cutting scope without losing the spine\"],\n tags: [\"product\", \"roadmap\"],\n body: `## Background\n\nA Product Manager's leverage is what they say no to. The role lives between\nuser signal, business goals, and engineering capacity — keeping the\nroadmap honest about all three.\n\n## Working principles\n\n- One spine per quarter. Three to five initiatives that compound; the\n rest is reactive work.\n- Discovery before commit. No engineering work without a one-pager.\n- Launches are decisions, not events.\n\n## When to escalate\n\n- Roadmap drift > 30% from the last quarter's spine.\n- Engineering capacity dispute that cannot be resolved in two\n iterations of the trade-off doc.\n`,\n}\n\nconst uxDesigner: RoleSeed = {\n name: \"ux-designer\",\n title: \"UX Designer\",\n description:\n \"Designs user flows, wireframes, and interaction patterns. Translates product decisions into shippable design specs.\",\n department: \"product\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/product-manager\",\n mission:\n \"Make decisions visible. Translate product decisions into flows engineering can build and users can navigate.\",\n responsibilities: [\n \"Wireframe new flows before engineering scopes them\",\n \"Maintain the design system and pattern library\",\n \"Run usability reviews on shipped features\",\n \"Pair with engineering during build to resolve ambiguities\",\n ],\n capabilities: [\"Flow design\", \"Pattern-library maintenance\", \"Usability review\"],\n strengths: [\"Reducing flows to their fewest screens\", \"Pattern reuse\"],\n tags: [\"product\", \"design\", \"ux\"],\n body: `## Background\n\nUX Design in an AI team trades polish for clarity. The role's output is\nflows engineering can implement without ambiguity — not portfolio-grade\nartwork.\n\n## Working principles\n\n- Pattern reuse first. If a pattern exists, use it; if not, add it to the\n library with a one-line rationale.\n- Wireframes ship before engineering scopes. Engineering can refine; it\n cannot start without one.\n- Usability is reviewed post-ship, every release.\n\n## When to escalate\n\n- Pattern-library divergence (two patterns for the same problem).\n- Usability red flag on a recently shipped feature.\n`,\n}\n\nconst dataAnalyst: RoleSeed = {\n name: \"data-analyst\",\n title: \"Data Analyst\",\n description:\n \"Turns product and business data into decisions — running analyses, building dashboards, and interpreting experiments.\",\n department: \"product\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/product-manager\",\n mission:\n \"Make the team's decisions data-informed without making them data-paralysed. Surface the signal that changes a call.\",\n responsibilities: [\n \"Run ad-hoc analyses against product and business data\",\n \"Maintain the team's top-level dashboards\",\n \"Design and interpret experiments\",\n \"Flag data-quality issues before they corrupt decisions\",\n ],\n capabilities: [\"SQL and data-modelling\", \"Experimental design\", \"Statistical interpretation\"],\n strengths: [\"Knowing when to stop digging\", \"Honest null-result reporting\"],\n antiPatterns: [\"Vanity dashboards\", \"Conclusions from underpowered tests\"],\n tags: [\"product\", \"analytics\", \"data\"],\n body: `## Background\n\nA Data Analyst's edge is judgement, not query speed. The role's failure\nmode is producing decks no decision references.\n\n## Working principles\n\n- One number per decision. If you cannot say which decision a number\n changes, do not put it on a dashboard.\n- Null results are results. Report them with the same weight.\n- Power before launch. Underpowered tests waste cycles.\n\n## When to escalate\n\n- Data-quality issue that affects > 1 week of reporting.\n- Experiment reaches stop-loss with no clear winner.\n`,\n}\n\nconst researchAnalyst: RoleSeed = {\n name: \"research-analyst\",\n title: \"Research Analyst\",\n description:\n \"Investigates markets, competitors, and trends to inform product and go-to-market decisions.\",\n department: \"product\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/product-manager\",\n mission:\n \"Reduce uncertainty on the team's biggest open questions. Bring back synthesised research the team can act on.\",\n responsibilities: [\n \"Run competitive teardowns on declared questions\",\n \"Synthesise user-interview pools into pattern reports\",\n \"Track market trends relevant to the roadmap\",\n \"Maintain a research library other roles can search\",\n ],\n capabilities: [\"Competitive teardown\", \"Interview synthesis\", \"Market-trend tracking\"],\n strengths: [\"Separating signal from anecdote\", \"Synthesising into one-pagers\"],\n tags: [\"product\", \"research\"],\n body: `## Background\n\nA Research Analyst's leverage is synthesis. Raw notes do not change\ndecisions; one-pagers do.\n\n## Working principles\n\n- Question-first. No research starts without a declared decision it\n feeds.\n- Synthesise into a one-pager, source the rest.\n- Distinguish anecdote from pattern; flag sample size.\n\n## When to escalate\n\n- Sample size too small for the declared decision.\n- Research-question scope drift > 50%.\n`,\n}\n\n/* ─── engineering ──────────────────────────────────────────────── */\n\nconst technicalManager: RoleSeed = {\n name: \"technical-manager\",\n title: \"Technical Manager\",\n description:\n \"Leads the engineering function — architecture review, technical roadmap, and engineering coordination.\",\n department: \"engineering\",\n seniority: \"lead\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Make engineering decisions that compound. Maintain technical coherence, coordinate engineers, and translate product priorities into shippable scope.\",\n responsibilities: [\n \"Review architecture decisions before they land\",\n \"Maintain the technical roadmap aligned to product priorities\",\n \"Coordinate engineering capacity across initiatives\",\n \"Own technical-debt management policy\",\n ],\n capabilities: [\n \"Architecture review\",\n \"Technical-debt prioritisation\",\n \"Engineering capacity planning\",\n ],\n strengths: [\"Cross-stack visibility\", \"Trade-off framing under capacity constraints\"],\n tags: [\"engineering\", \"leadership\"],\n body: `## Background\n\nThe Technical Manager's job is to keep the engineering organisation\ncoherent over time. The role does not write the most code; it ensures\nthe code the team writes compounds.\n\n## Working principles\n\n- Architecture decisions are documented before they land.\n- Tech-debt has a budget per quarter, not a wishlist.\n- Capacity planning is monthly with a 50% reactive buffer.\n\n## When to escalate\n\n- Architecture decision disagreement after two iterations of the\n decision doc.\n- Initiative scope > capacity by > 30% with the deadline holding.\n`,\n}\n\nconst softwareEngineer: RoleSeed = {\n name: \"software-engineer\",\n title: \"Software Engineer\",\n description:\n \"Implements features, reviews code, and maintains systems. Owns end-to-end shipping of scoped engineering work.\",\n department: \"engineering\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/technical-manager\",\n mission:\n \"Ship scoped engineering work end-to-end. Maintain the systems the team relies on; review peer code with care.\",\n responsibilities: [\n \"Implement features from one-pager to production\",\n \"Review peer pull requests within one business day\",\n \"Maintain ownership of assigned subsystems\",\n \"Document non-obvious decisions in the codebase\",\n ],\n capabilities: [\"Backend and frontend implementation\", \"Code review\", \"Subsystem ownership\"],\n strengths: [\"End-to-end ownership\", \"Spotting hidden coupling\"],\n tags: [\"engineering\", \"software\"],\n body: `## Background\n\nA Software Engineer's leverage is reviewed code that compounds. The role's\nfailure mode is shipping without review or owning without documenting.\n\n## Working principles\n\n- Review PRs same day. Sleep on commits, not on reviews.\n- Document the non-obvious. The obvious is in the code.\n- Own end-to-end. If a feature has a downstream effect, the engineer\n who shipped it owns the effect.\n\n## When to escalate\n\n- Code-review disagreement on architecture (not style) twice in a row.\n- Subsystem outage > 4 hours.\n`,\n}\n\n/* ─── sales / customer ─────────────────────────────────────────── */\n\nconst salesRep: RoleSeed = {\n name: \"sales-rep\",\n title: \"Sales Representative\",\n description:\n \"Owns prospect outreach, qualification, and pipeline through close. Translates marketing-qualified leads into revenue.\",\n department: \"sales\",\n seniority: \"mid\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Turn qualified attention into revenue. Run outreach, qualify rigorously, and close with the customer's interest in mind.\",\n responsibilities: [\n \"Run outbound outreach against the ICP\",\n \"Qualify inbound leads against the qualification framework\",\n \"Manage the pipeline through close\",\n \"Report pipeline health weekly\",\n ],\n capabilities: [\"Outbound outreach\", \"Qualification frameworks\", \"Pipeline management\"],\n strengths: [\"Disqualifying early\", \"Honest close-date forecasting\"],\n antiPatterns: [\"Pipeline padding\", \"Discounting before qualification\"],\n tags: [\"sales\", \"pipeline\"],\n body: `## Background\n\nA Sales Representative's leverage is qualification discipline. The role's\nfailure mode is keeping unqualified deals in the pipeline.\n\n## Working principles\n\n- Disqualify before you discount.\n- Forecast close dates honestly; pipeline padding costs trust.\n- Lost-reason notes are mandatory. They feed product and marketing.\n\n## When to escalate\n\n- Repeat lost-reason on the same axis across three deals.\n- Qualified deal stalled > 2x median sales cycle.\n`,\n}\n\nconst supportAgent: RoleSeed = {\n name: \"customer-support\",\n title: \"Customer Support\",\n description:\n \"Resolves customer issues, manages the support inbox, and feeds product with patterns from the field.\",\n department: \"customer\",\n seniority: \"mid\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Resolve customer issues quickly and feed the product with what you learn. Be the first to spot the pattern.\",\n responsibilities: [\n \"Triage and resolve inbound support tickets\",\n \"Maintain the help-centre articles for top-volume topics\",\n \"Escalate engineering bugs with reproduction steps\",\n \"Surface recurring issues to product weekly\",\n ],\n capabilities: [\n \"Ticket triage and resolution\",\n \"Help-centre authoring\",\n \"Bug reproduction\",\n ],\n strengths: [\"Pattern recognition across tickets\", \"Empathetic but accurate communication\"],\n tags: [\"customer\", \"support\"],\n body: `## Background\n\nCustomer Support is the team's earliest signal source on product issues.\nThe role's leverage is recurring-pattern reports, not ticket throughput.\n\n## Working principles\n\n- Resolve fast; teach faster. Every recurring issue gets a help-centre\n article.\n- Escalate with reproduction steps, not narratives.\n- Weekly pattern reports to product, with volume + severity.\n\n## When to escalate\n\n- Recurring issue on the same root cause for two consecutive weeks.\n- Severity-1 bug confirmed in production.\n`,\n}\n\n/* ─── people ───────────────────────────────────────────────────── */\n\nconst talentAcquisitionSpecialist: RoleSeed = {\n name: \"talent-acquisition-specialist\",\n title: \"Talent Acquisition Specialist\",\n description:\n \"Runs the end-to-end hiring funnel on behalf of a hiring manager — from role intake through onboarding — producing the artifacts a manager needs to decide. The hire decision itself stays with the hiring manager.\",\n department: \"people\",\n seniority: \"senior\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Move open roles to confident hires. Frame the need, fill the funnel with qualified candidates, and hand the hiring manager structured, bias-aware evidence to decide on — never deciding for them.\",\n responsibilities: [\n \"Frame the hiring need with the hiring manager and draft the job spec and offer copy\",\n \"Source and approach candidates across channels using Boolean / X-ray queries\",\n \"Screen CVs and run structured phone pre-screens against agreed criteria\",\n \"Build interview scorecards and synthesise candidate evaluations and debriefs\",\n \"Prepare reference checks, offer packages, and candidate-closing plans\",\n \"Plan onboarding and run candidate-pipeline communications end to end\",\n \"Track recruitment KPIs (time-to-hire, cost-per-hire, funnel conversion)\",\n ],\n capabilities: [\n \"Hiring-need framing and inclusive job-spec writing\",\n \"Boolean / X-ray sourcing across LinkedIn and job boards\",\n \"Structured screening and STAR-based interview design\",\n \"Candidate evaluation and comparative scorecards\",\n \"Offer construction and salary-negotiation support\",\n \"Recruitment-funnel analytics\",\n ],\n tools: [\n \"web-search\",\n \"linkedin\",\n \"job-boards\",\n \"ats\",\n \"email\",\n \"calendar\",\n \"document-generation\",\n ],\n kpis: [\n \"time-to-hire\",\n \"cost-per-hire\",\n \"offer-acceptance-rate\",\n \"funnel-conversion-rate\",\n \"quality-of-hire\",\n ],\n strengths: [\n \"Reads a job description like a recruiter — separates must-have from nice-to-have\",\n \"Writes outreach passive candidates actually reply to\",\n \"Holds a structured, bias-aware evaluation bar across a shortlist\",\n ],\n antiPatterns: [\n \"Making the final hire decision — that stays with the hiring manager\",\n \"Collecting sensitive personal data or applying discriminatory criteria\",\n \"Accessing payroll or finance beyond the open role's salary range\",\n ],\n tags: [\"people\", \"recruiting\", \"talent-acquisition\", \"sourcing\", \"hiring\"],\n defaultPolicy: \"@builtin/talent-acquisition-baseline\",\n body: `## Background\n\nA Talent Acquisition Specialist is an assistant to the hiring manager, not\na decision-maker. The role's leverage is funnel throughput and evaluation\nquality — turning a vague need into a crisp spec, a spec into a qualified\nshortlist, and a shortlist into evidence a manager can decide on fast.\n\n## Working principles\n\n- The hiring manager decides. The role produces fiches de poste, scorecards,\n debriefs, and comparisons — it never extends or rejects an offer on its own.\n- Every job ad gets an inclusive-language pass before it goes out.\n- Screen and interview against written criteria agreed up front, not vibes.\n- Use the STAR method for behavioural questions; capture answers structurally.\n- Source the claim before stating it — a ranking, a salary band, a candidate\n fit score is backed by data, not asserted.\n\n## When to escalate\n\n- Any request to capture sensitive personal data or use criteria that touch a\n protected characteristic — stop and escalate (GDPR / anti-bias).\n- Compensation or finance questions beyond the open role's published range.\n- A hiring-manager instruction that conflicts with these working principles.\n\n## Anti-patterns\n\n- Acting as the decision-maker on a hire, an offer, or a rejection.\n- Storing CVs or notes containing sensitive data outside the agreed pipeline.\n`,\n}\n\n/* ─── finance ──────────────────────────────────────────────────── */\n\nconst financialManager: RoleSeed = {\n name: \"financial-manager\",\n title: \"Financial Manager\",\n description:\n \"Owns the financial function — budgeting, reporting, cashflow management, and supporting executive decisions with financial analysis.\",\n department: \"finance\",\n seniority: \"lead\",\n reportsTo: \"ws://roles/general-manager\",\n mission:\n \"Keep the financial picture honest and the cash position safe. Build the analyses that turn executive trade-offs into informed calls.\",\n responsibilities: [\n \"Maintain the operating budget and monthly variance reports\",\n \"Run cashflow forecasts on a rolling 13-week basis\",\n \"Build financial models for major decisions\",\n \"Coordinate accounting close and external reporting\",\n ],\n capabilities: [\"Budget and variance analysis\", \"Cashflow forecasting\", \"Financial modelling\"],\n strengths: [\"Conservative cash assumptions\", \"Reading P&L for second-order effects\"],\n tags: [\"finance\", \"operations\"],\n body: `## Background\n\nThe Financial Manager's leverage is honest forecasts. The role's failure\nmode is models that please rather than inform.\n\n## Working principles\n\n- Cash forecast weekly; budget variance monthly.\n- Model with three scenarios (base, downside, upside) and label assumptions.\n- Decisions get a one-page financial appendix, not a deck.\n\n## When to escalate\n\n- Cash runway < 6 months in the base scenario.\n- Budget variance > 15% in a single line for two consecutive months.\n`,\n}\n\n/* ─── executive C-suite ───────────────────────────────────────────\n * The four CEO/CMO/CTO/CFO roles. Doctype-agnostic per AIP-47 — any\n * operator OR human member can wear them. The recommended pattern is\n * a human executive employing AI managers (see chief-of-staff,\n * marketing-manager, …), but the manifests describe the JOB and don't\n * gate who fills it. Curation / sort order in consumer UIs handles\n * the \"AI CEO is rare in 2026\" positioning, not the schema.\n */\n\nconst chiefExecutiveOfficer: RoleSeed = {\n name: \"chief-executive-officer\",\n title: \"Chief Executive Officer\",\n description:\n \"Founder / CEO position. Owns strategy, capital, hiring of the executive team, and the company's stance with customers, employees, and investors.\",\n department: \"executive\",\n seniority: \"executive\",\n mission:\n \"Set strategy, raise and allocate capital, build the executive team, and own the company's external posture. Make the calls only the CEO can make — and delegate the rest.\",\n responsibilities: [\n \"Set and revise company strategy quarterly\",\n \"Allocate capital across business lines\",\n \"Hire and manage the executive team\",\n \"Own the external posture (customers, investors, press)\",\n \"Make the decisions that only the CEO can make\",\n ],\n capabilities: [\n \"Capital allocation\",\n \"Executive-team building\",\n \"Strategic communication\",\n \"Risk and pace calibration\",\n ],\n strengths: [\"Cross-domain judgement\", \"Pace under uncertainty\"],\n tags: [\"executive\", \"leadership\"],\n body: `## Background\n\nThe CEO is the only position with end-to-end responsibility for the\ncompany. In an AI-augmented org, the CEO is the **human** who owns\nstrategy and posture, employing an AI team led by AI managers\n(marketing-manager, technical-manager, …) and coordinated by the\nChief of Staff.\n\n## Working principles\n\n- Strategy gets revised quarterly; tactics get revised whenever the\n data changes.\n- Capital allocation in writing; tactical spend through the relevant\n manager.\n- The CEO speaks last in strategic decisions, first in posture ones.\n\n## When to escalate\n\n- Board / investor decisions outside delegated capital authority.\n- Material risk affecting more than one business line.\n`,\n}\n\nconst chiefMarketingOfficer: RoleSeed = {\n name: \"chief-marketing-officer\",\n title: \"Chief Marketing Officer\",\n description:\n \"Human CMO position. Owns marketing strategy across the company; manages the Marketing Manager and adjacent functions.\",\n department: \"marketing\",\n seniority: \"executive\",\n reportsTo: \"ws://roles/chief-executive-officer\",\n mission:\n \"Own marketing strategy at the company level. Set the brand stance, allocate marketing investment, and manage the marketing function.\",\n responsibilities: [\n \"Set marketing strategy aligned to company goals\",\n \"Manage the Marketing Manager and team\",\n \"Own the brand stance and major creative decisions\",\n \"Report marketing performance to the CEO and board\",\n ],\n capabilities: [\"Brand strategy\", \"Marketing-investment allocation\", \"Executive communication\"],\n tags: [\"executive\", \"marketing\"],\n body: `## Background\n\nThe CMO is the human executive responsible for marketing at the\ncompany level. In an AI-augmented org, the CMO directs the AI\nMarketing Manager rather than running campaigns directly.\n\n## Working principles\n\n- Strategy in writing; tactics through the Marketing Manager.\n- One brand voice; many channels.\n\n## When to escalate\n\n- Brand-stance decision that conflicts with CEO posture.\n- Cross-function trade-off involving sales or product.\n`,\n}\n\nconst chiefTechnologyOfficer: RoleSeed = {\n name: \"chief-technology-officer\",\n title: \"Chief Technology Officer\",\n description:\n \"Human CTO position. Owns engineering strategy and the technical stance at the company level; manages the Technical Manager.\",\n department: \"engineering\",\n seniority: \"executive\",\n reportsTo: \"ws://roles/chief-executive-officer\",\n mission:\n \"Own engineering strategy at the company level. Set the technical stance, allocate engineering capacity, and manage the engineering function.\",\n responsibilities: [\n \"Set engineering strategy and the technical roadmap at company level\",\n \"Manage the Technical Manager and engineering team\",\n \"Own technology-stack decisions\",\n \"Report engineering performance and risks to the CEO and board\",\n ],\n capabilities: [\"Technical strategy\", \"Capacity planning\", \"Architecture review at scale\"],\n tags: [\"executive\", \"engineering\"],\n body: `## Background\n\nThe CTO is the human executive responsible for engineering at the\ncompany level. In an AI-augmented org, the CTO directs the AI\nTechnical Manager rather than reviewing every PR.\n\n## Working principles\n\n- Strategy in writing; review delegated to the Technical Manager.\n- Architecture decisions documented; tech-debt managed by quarter.\n\n## When to escalate\n\n- Technical risk affecting reliability of multiple business lines.\n- Vendor decision exceeding delegated capital authority.\n`,\n}\n\nconst chiefFinancialOfficer: RoleSeed = {\n name: \"chief-financial-officer\",\n title: \"Chief Financial Officer\",\n description:\n \"Human CFO position. Owns the financial stance at the company level; manages the Financial Manager and external reporting.\",\n department: \"finance\",\n seniority: \"executive\",\n reportsTo: \"ws://roles/chief-executive-officer\",\n mission:\n \"Own the financial stance at the company level. Maintain the financial picture, manage the Financial Manager, and own external reporting to investors, auditors, and authorities.\",\n responsibilities: [\n \"Own external financial reporting\",\n \"Manage the Financial Manager and finance function\",\n \"Maintain the financial-risk register\",\n \"Coordinate with auditors, banks, and regulators\",\n ],\n capabilities: [\"External reporting\", \"Risk-register management\", \"Auditor coordination\"],\n tags: [\"executive\", \"finance\"],\n body: `## Background\n\nThe CFO is the human executive responsible for finance at the company\nlevel. The CFO does NOT close the books — the Financial Manager\n(human or AI, per the org's design) does. The CFO owns the financial\nposture, the risk register, and the relationship with finance\ncounterparties.\n\n## Working principles\n\n- External reporting is non-delegable.\n- Risk register reviewed quarterly with the CEO.\n\n## When to escalate\n\n- Material discrepancy in books or reporting.\n- Regulatory or audit concern.\n`,\n}\n\n/* ─── catalogue export ─────────────────────────────────────────── */\n\nconst SEEDS: readonly RoleSeed[] = [\n // executive\n chiefExecutiveOfficer,\n chiefOfStaff,\n generalManager,\n // marketing\n chiefMarketingOfficer,\n marketingManager,\n copywriter,\n contentEditor,\n visualDesigner,\n performanceMarketer,\n // product\n productManager,\n uxDesigner,\n dataAnalyst,\n researchAnalyst,\n // engineering\n chiefTechnologyOfficer,\n technicalManager,\n softwareEngineer,\n // sales / customer\n salesRep,\n supportAgent,\n // people\n talentAcquisitionSpecialist,\n // finance\n chiefFinancialOfficer,\n financialManager,\n]\n\nexport const BUILTIN_ROLE_ENTRIES: readonly BuiltinRoleEntry[] = SEEDS.map(\n seedToEntry,\n)\n\n/** Slugs of every builtin shipped in this catalogue, in display order. */\nexport const BUILTIN_ROLE_SLUGS: readonly string[] = SEEDS.map((s) => s.name)\n\n/**\n * Mapping from Guilde's legacy `OperatorRole` enum to a builtin slug\n * in this catalogue. Used by migration scripts to backfill\n * `operators.role_slug` from the existing `operators.role` text.\n *\n * Renames per Prakash 2026-05-11 — no CXO branding for AI workers\n * (those titles are reserved for the human executive).\n */\nexport const LEGACY_GUILDE_ROLE_MAP: Readonly<Record<string, string>> = {\n ceo: \"chief-of-staff\",\n cmo: \"marketing-manager\",\n cto: \"technical-manager\",\n cfo: \"financial-manager\",\n copywriter: \"copywriter\",\n visual: \"visual-designer\",\n analytics: \"data-analyst\",\n research: \"research-analyst\",\n editor: \"content-editor\",\n performance: \"performance-marketer\",\n // ROLE_CATALOG-only ids (no operator.role enum value but rendered in UI)\n developer: \"software-engineer\",\n designer: \"ux-designer\",\n support: \"customer-support\",\n sales: \"sales-rep\",\n \"product-manager\": \"product-manager\",\n}\n","/**\n * Companion baseline policies for builtin roles (AIP-38).\n *\n * A role's `defaultPolicy` is ADVISORY per AIP-47 — the runtime MUST NOT\n * auto-apply it without the operator's own `policy:` field or a\n * governance signature attesting the binding. These manifests are the\n * portable declaration of intent that travels with the role; binding\n * them to an operator (and compiling grants into a host's enforcement\n * surface) is a governed, host-side step.\n *\n * Authored as validated TS `definePolicy` objects — same shipping shape\n * as the role seeds — so every field-level constraint runs at module\n * load and the policy is bundleable alongside the catalogue.\n */\n\nimport {\n policyFrontmatterSchema,\n type PolicyDefinition,\n type PolicyHandle,\n} from \"@agentproto/policy\"\n\n/**\n * Validate a standalone baseline policy against AIP-38's frontmatter\n * schema (the same source of truth the `.md` manifest path uses).\n *\n * We deliberately do NOT route through `definePolicy`: its\n * `createDoctype` identity gate mandates an `id` and validates it with\n * a bare-slug regex, while the frontmatter schema requires `@owner/slug`\n * — the two are mutually exclusive, so no standalone policy currently\n * passes `definePolicy`. Validating the frontmatter directly (with `id`\n * omitted, which the schema permits) is correct and bug-free.\n */\nfunction defineBaselinePolicy(def: PolicyDefinition): PolicyHandle {\n policyFrontmatterSchema.parse(def)\n return Object.freeze({ ...def })\n}\n\n/**\n * Baseline policy for `talent-acquisition-specialist`.\n *\n * `default: deny` — the operator may only perform the recruiting actions\n * explicitly granted (sourcing, screening, candidate messaging, document\n * generation, scheduling, KPI computation). The hire DECISION actions\n * (`hiring:extend-offer`, `hiring:reject-candidate`) are gated behind a\n * human approval requirement rather than granted — the hiring manager\n * decides. Finance / payroll and sensitive-data actions are never granted,\n * so `default: deny` denies them.\n */\n// `id` is intentionally omitted (the role references this policy by its\n// catalogue ref via `defaultPolicy`, not a self-declared id) — see the\n// note on `defineBaselinePolicy` for why `definePolicy`'s id gate is\n// avoided here.\nexport const talentAcquisitionBaselinePolicy: PolicyHandle = defineBaselinePolicy({\n schema: \"policy/v1\",\n version: \"1.0.0\",\n default: \"deny\",\n grants: [\n {\n principal: \"role://talent-acquisition-specialist\",\n actions: [\n { action: \"sourcing:*\" },\n { action: \"screening:*\" },\n { action: \"messaging:send-candidate\" },\n { action: \"document:generate\" },\n { action: \"scheduling:*\" },\n { action: \"kpi:compute\" },\n ],\n },\n ],\n requirements: [\n {\n kind: \"approval-from\",\n applies_to: [\"hiring:extend-offer\", \"hiring:reject-candidate\"],\n role: \"hiring-manager\",\n },\n ],\n metadata: {\n aip47: { derivedFrom: \"talent-acquisition-specialist\" },\n },\n})\n\n/** Baseline policies shipped alongside the builtin role catalogue. */\nexport const BUILTIN_POLICY_HANDLES: readonly PolicyHandle[] = [\n talentAcquisitionBaselinePolicy,\n]\n","/**\n * @agentproto/role-catalog — AIP-47 reference catalogue of builtin roles.\n *\n * Ships twenty starter ROLE.md manifests spanning the nine recommended\n * departments. Each entry is a validated `RoleHandle` (per\n * `@agentproto/role`'s `ROLE.schema.json`) paired with body markdown\n * covering background, working principles, and escalation.\n *\n * Roles are **doctype-agnostic**: any AIP-9 OPERATOR or human member\n * can wear any of these manifests. Curation / sort order / soft tags\n * in consumer UIs handle positioning concerns (e.g. \"manager-level\n * roles are more typical for AI workers than C-suite ones in 2026\"),\n * not a typed `audience` field on the manifest.\n *\n * Process-wide singleton — `builtinRoleSource()` returns the SAME\n * `BuiltinRoleSource` on every call (backed by an AIP-43 registry).\n * Downstream apps may extend the catalogue via `registerBuiltinRoles`\n * without forking the OSS package:\n *\n * import { registerBuiltinRoles } from \"@agentproto/role-catalog\"\n * registerBuiltinRoles([\n * { slug: \"guild-admin\", handle: {...}, body: \"...\" },\n * ])\n *\n * Composing the catalogue into a resolver chain:\n *\n * import { resolveRole } from \"@agentproto/role\"\n * import { builtinRoleSource } from \"@agentproto/role-catalog\"\n *\n * const result = await resolveRole(\"marketing-manager\", {\n * sources: [builtinRoleSource()],\n * })\n *\n * Spec: https://agentproto.sh/docs/aip-47\n */\n\nimport { BuiltinRoleSource, type BuiltinRoleEntry } from \"@agentproto/role\"\nimport { BUILTIN_ROLE_ENTRIES } from \"./builtins.js\"\n\nexport {\n BUILTIN_ROLE_ENTRIES,\n BUILTIN_ROLE_SLUGS,\n LEGACY_GUILDE_ROLE_MAP,\n} from \"./builtins.js\"\n\nexport {\n BUILTIN_POLICY_HANDLES,\n talentAcquisitionBaselinePolicy,\n} from \"./policies.js\"\n\n/**\n * Process-wide singleton — the canonical builtin registry for this\n * runtime. Bootstrapped lazily on first access with\n * `BUILTIN_ROLE_ENTRIES` (the 20 OSS starters); subsequent\n * `registerBuiltinRoles(...)` calls extend it in place.\n *\n * `builtinRoleSource()` returns this singleton — multiple calls\n * share the same registry, so any registration anywhere in the\n * process is visible to every consumer.\n */\nlet singletonSource: BuiltinRoleSource | null = null\n\nfunction getSingletonSource(): BuiltinRoleSource {\n if (singletonSource) return singletonSource\n singletonSource = new BuiltinRoleSource(BUILTIN_ROLE_ENTRIES)\n return singletonSource\n}\n\n/**\n * Return the process-wide singleton `BuiltinRoleSource`. Wraps the\n * OSS catalogue (20 starters) plus any entries registered through\n * `registerBuiltinRoles`. Safe to call from any module at any time —\n * the registry is lazily bootstrapped on first access.\n */\nexport function builtinRoleSource(): BuiltinRoleSource {\n return getSingletonSource()\n}\n\n/**\n * Register additional builtin roles into the process-wide registry.\n * Use this when a downstream package (a vendor runtime, a host app)\n * ships its own builtin roles ALONGSIDE the OSS catalogue without\n * forking `@agentproto/role-catalog`.\n *\n * Throws `RegistryDuplicateError` from `@agentproto/registry` if a\n * slug already exists — the catalogue is intended to be additive,\n * not overwriting. Call `replaceBuiltinRole(entry)` if a slug rev\n * needs to swap atomically.\n *\n * Boot-time call site is the right pattern — every consumer of\n * `builtinRoleSource()` after `registerBuiltinRoles` sees the\n * additions.\n */\nexport function registerBuiltinRoles(\n entries: Iterable<BuiltinRoleEntry>,\n): void {\n const source = getSingletonSource()\n for (const entry of entries) {\n source.register(entry)\n }\n}\n\n/**\n * Replace an existing builtin role with a new version of the same\n * slug. Throws `RegistryNotFoundError` if no entry exists at the\n * slug — use `registerBuiltinRoles` for new slugs.\n */\nexport function replaceBuiltinRole(entry: BuiltinRoleEntry): void {\n getSingletonSource().replace(entry)\n}\n\n/**\n * Remove a builtin role from the registry. Returns true if the slug\n * was present. Use sparingly — the registry is intended to be\n * boot-time-stable; mid-flight unregister of an OSS starter risks\n * resolver fall-through to file/db sources mid-conversation.\n */\nexport function unregisterBuiltinRole(slug: string): boolean {\n return getSingletonSource().unregister(slug)\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@agentproto/role-catalog",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "Reference catalogue of AIP-47 ROLE.md builtins — 15 starter roles (executive, specialist, coordinator) covering common AI-company positions. Composed via @agentproto/role; consumed via BuiltinRoleSource.",
5
+ "keywords": [
6
+ "agentproto",
7
+ "aip-47",
8
+ "role",
9
+ "role-catalog",
10
+ "open-standard",
11
+ "agentic"
12
+ ],
13
+ "homepage": "https://agentproto.sh/docs/aip-47",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/agentproto/ts",
17
+ "directory": "packages/role-catalog"
18
+ },
19
+ "bugs": {
20
+ "url": "https://github.com/agentproto/ts/issues"
21
+ },
22
+ "license": "MIT",
23
+ "type": "module",
24
+ "main": "dist/index.mjs",
25
+ "module": "dist/index.mjs",
26
+ "types": "dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.mjs",
31
+ "default": "./dist/index.mjs"
32
+ },
33
+ "./package.json": "./package.json"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "README.md",
38
+ "LICENSE"
39
+ ],
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "dependencies": {
44
+ "@agentproto/policy": "0.1.0-alpha.0",
45
+ "@agentproto/role": "0.1.0-alpha.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^25.6.2",
49
+ "tsup": "^8.5.1",
50
+ "typescript": "^5.9.3",
51
+ "vitest": "^3.2.4",
52
+ "@agentproto/tooling": "0.1.0-alpha.0"
53
+ },
54
+ "scripts": {
55
+ "dev": "tsup --watch",
56
+ "build": "tsup",
57
+ "clean": "rm -rf dist",
58
+ "check-types": "tsc --noEmit",
59
+ "test": "vitest run --passWithNoTests",
60
+ "test:watch": "vitest"
61
+ }
62
+ }