@codedrifters/configulator 0.0.266 → 0.0.268
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/lib/index.d.mts +3802 -358
- package/lib/index.d.ts +3803 -359
- package/lib/index.js +20553 -11325
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +24078 -14988
- package/lib/index.mjs.map +1 -1
- package/package.json +7 -4
package/lib/index.d.mts
CHANGED
|
@@ -1461,235 +1461,1716 @@ interface AgentFeaturesConfig {
|
|
|
1461
1461
|
}
|
|
1462
1462
|
/*******************************************************************************
|
|
1463
1463
|
*
|
|
1464
|
-
*
|
|
1464
|
+
* Agent Tier Config
|
|
1465
1465
|
*
|
|
1466
1466
|
******************************************************************************/
|
|
1467
1467
|
/**
|
|
1468
|
-
*
|
|
1468
|
+
* A single consumer-supplied agent-type → funnel-tier mapping.
|
|
1469
|
+
*
|
|
1470
|
+
* The `type` field is the GitHub `type:*` label value **without** the
|
|
1471
|
+
* `type:` prefix (e.g. supply `"company-profile"`, not
|
|
1472
|
+
* `"type:company-profile"`). The `tier` field is a funnel tier in the
|
|
1473
|
+
* range **0–4**:
|
|
1474
|
+
*
|
|
1475
|
+
* - **0 — routing.** Unblocks other work. Picked first on a priority tie.
|
|
1476
|
+
* - **1 — research.** Feeds downstream pipelines.
|
|
1477
|
+
* - **2 — profiles.** Consumes research.
|
|
1478
|
+
* - **3 — synthesis.** Produces deliverables.
|
|
1479
|
+
* - **4 — support.** Important but not pipeline-critical.
|
|
1480
|
+
*
|
|
1481
|
+
* The `orchestrator` bundle validates this value at synth time and
|
|
1482
|
+
* fails the build when the tier is outside 0–4 or when `type` is
|
|
1483
|
+
* empty/whitespace.
|
|
1484
|
+
*
|
|
1485
|
+
* @see AgentTierConfig
|
|
1486
|
+
* @see ./bundles/tiers.ts#renderAgentTierSection
|
|
1469
1487
|
*/
|
|
1470
|
-
interface
|
|
1488
|
+
interface AgentTierEntry {
|
|
1471
1489
|
/**
|
|
1472
|
-
*
|
|
1473
|
-
* @
|
|
1490
|
+
* GitHub `type:*` label value (without the `type:` prefix).
|
|
1491
|
+
* @example 'research', 'company-profile', 'requirement'
|
|
1474
1492
|
*/
|
|
1475
|
-
readonly
|
|
1493
|
+
readonly type: string;
|
|
1476
1494
|
/**
|
|
1477
|
-
*
|
|
1478
|
-
* Custom rules override bundled rules of the same name.
|
|
1495
|
+
* Funnel tier 0–4. Lower tiers dispatch first when priority is tied.
|
|
1479
1496
|
*/
|
|
1480
|
-
readonly
|
|
1497
|
+
readonly tier: 0 | 1 | 2 | 3 | 4;
|
|
1498
|
+
}
|
|
1499
|
+
/**
|
|
1500
|
+
* Funnel-tier configuration consumed by the `orchestrator` bundle.
|
|
1501
|
+
*
|
|
1502
|
+
* The orchestrator sorts eligible issues by
|
|
1503
|
+
* **priority desc → tier asc → issue number asc**. Lower tier numbers
|
|
1504
|
+
* win ties on priority so research work feeds downstream pipelines
|
|
1505
|
+
* before synthesis consumes attention.
|
|
1506
|
+
*
|
|
1507
|
+
* Every field is optional. When the whole config is absent the
|
|
1508
|
+
* orchestrator renders its built-in default tier table (matching the
|
|
1509
|
+
* openhi `DISPATCHER.md` source). Two override knobs are supported:
|
|
1510
|
+
*
|
|
1511
|
+
* - `tiers` — **replace** the default list wholesale. Rare; reserved
|
|
1512
|
+
* for repos that want a bespoke taxonomy end-to-end.
|
|
1513
|
+
* - `customTypes` — **extend** whichever list is in play. Entries
|
|
1514
|
+
* with a `type` that already exists in the default (or replacement)
|
|
1515
|
+
* list win — consumer overrides take precedence.
|
|
1516
|
+
*
|
|
1517
|
+
* @see AgentTierEntry
|
|
1518
|
+
* @see ./bundles/tiers.ts#resolveAgentTiers
|
|
1519
|
+
*/
|
|
1520
|
+
interface AgentTierConfig {
|
|
1481
1521
|
/**
|
|
1482
|
-
*
|
|
1522
|
+
* Replacement tier list. When supplied, the built-in default list
|
|
1523
|
+
* is discarded and this list is used as the base before
|
|
1524
|
+
* `customTypes` are merged in. Supply an empty array is an error —
|
|
1525
|
+
* omit the field to keep the defaults.
|
|
1483
1526
|
*/
|
|
1484
|
-
readonly
|
|
1527
|
+
readonly tiers?: ReadonlyArray<AgentTierEntry>;
|
|
1485
1528
|
/**
|
|
1486
|
-
*
|
|
1529
|
+
* Additional tier mappings merged on top of whatever list is in
|
|
1530
|
+
* play (default or replacement). Later entries override earlier
|
|
1531
|
+
* entries on `type` collision, so consumer-supplied mappings win
|
|
1532
|
+
* over the built-in defaults.
|
|
1487
1533
|
*/
|
|
1488
|
-
readonly
|
|
1534
|
+
readonly customTypes?: ReadonlyArray<AgentTierEntry>;
|
|
1535
|
+
}
|
|
1536
|
+
/*******************************************************************************
|
|
1537
|
+
*
|
|
1538
|
+
* Scope Gate Config
|
|
1539
|
+
*
|
|
1540
|
+
******************************************************************************/
|
|
1541
|
+
/**
|
|
1542
|
+
* Threshold pair describing the inclusive upper bounds of the `small` /
|
|
1543
|
+
* `medium` scope classes. Any issue above `medium` is classified `large`
|
|
1544
|
+
* and rejected by the scope gate.
|
|
1545
|
+
*
|
|
1546
|
+
* Every issue is scored on two signals read from the issue body:
|
|
1547
|
+
*
|
|
1548
|
+
* - **Acceptance criteria** — the count of checkbox lines
|
|
1549
|
+
* (`- [ ]` / `- [x]`) under the issue's `## Acceptance Criteria`
|
|
1550
|
+
* section.
|
|
1551
|
+
* - **Sources** — the count of bullet list items under the issue's
|
|
1552
|
+
* `## Inputs` / `## References` / `## Sources` sections (whichever
|
|
1553
|
+
* exists; they're summed if multiple exist).
|
|
1554
|
+
*
|
|
1555
|
+
* `small` requires **both** counts to be at or below `smallMax`.
|
|
1556
|
+
* `medium` requires **both** counts to be at or below `mediumMax`.
|
|
1557
|
+
* Anything above `mediumMax` on either axis is `large`.
|
|
1558
|
+
*
|
|
1559
|
+
* @see ScopeGateConfig
|
|
1560
|
+
* @see ./bundles/scope-gate.ts#classifyIssueScope
|
|
1561
|
+
*/
|
|
1562
|
+
interface ScopeGateThresholds {
|
|
1489
1563
|
/**
|
|
1490
|
-
*
|
|
1564
|
+
* Inclusive upper bound on the `acceptance-criteria` / `sources`
|
|
1565
|
+
* count for the **small** scope class.
|
|
1491
1566
|
*/
|
|
1492
|
-
readonly
|
|
1567
|
+
readonly smallMax: number;
|
|
1493
1568
|
/**
|
|
1494
|
-
*
|
|
1495
|
-
*
|
|
1569
|
+
* Inclusive upper bound on the `acceptance-criteria` / `sources`
|
|
1570
|
+
* count for the **medium** scope class. Must be strictly greater
|
|
1571
|
+
* than `smallMax`.
|
|
1496
1572
|
*/
|
|
1497
|
-
readonly
|
|
1573
|
+
readonly mediumMax: number;
|
|
1574
|
+
}
|
|
1575
|
+
/**
|
|
1576
|
+
* Scope-gate configuration consumed by the `orchestrator` bundle.
|
|
1577
|
+
*
|
|
1578
|
+
* The scope gate rejects oversized issues at dispatch time and
|
|
1579
|
+
* instructs the orchestrator to decompose them into phased sub-issues
|
|
1580
|
+
* instead of claiming a worker session for a multi-hour task. The
|
|
1581
|
+
* gate reads the **issue body only** — it does not inspect the
|
|
1582
|
+
* repository. Heuristics are deliberately repo-agnostic so any
|
|
1583
|
+
* consuming repo can adopt the contract without customizing code.
|
|
1584
|
+
*
|
|
1585
|
+
* Two threshold dials control the classification:
|
|
1586
|
+
*
|
|
1587
|
+
* - `acceptanceCriteria` — counts of checkbox lines under the issue's
|
|
1588
|
+
* `## Acceptance Criteria` section.
|
|
1589
|
+
* - `sources` — counts of bullet list items under the issue's
|
|
1590
|
+
* `## Inputs` / `## References` / `## Sources` sections.
|
|
1591
|
+
*
|
|
1592
|
+
* An issue is classified **small** when both counts are at or below
|
|
1593
|
+
* the `small` thresholds, **medium** when both are at or below the
|
|
1594
|
+
* `medium` thresholds, and **large** otherwise. Large issues are
|
|
1595
|
+
* rejected — the orchestrator applies `status:needs-attention`,
|
|
1596
|
+
* posts a decomposition proposal comment, and (when `autoFile` is
|
|
1597
|
+
* true) files the proposed phased sub-issues automatically.
|
|
1598
|
+
*
|
|
1599
|
+
* Consumers may override the per-axis thresholds, the decomposition
|
|
1600
|
+
* comment template, and the auto-file toggle. When the whole config
|
|
1601
|
+
* is absent the orchestrator applies openhi's published defaults
|
|
1602
|
+
* (small: ≤3 AC + ≤2 sources; medium: ≤6 AC + ≤5 sources).
|
|
1603
|
+
*
|
|
1604
|
+
* Malformed configs — thresholds that are negative, non-integer, or
|
|
1605
|
+
* inverted (medium ≤ small) — fail the build at synth time via
|
|
1606
|
+
* `validateScopeGateConfig`.
|
|
1607
|
+
*
|
|
1608
|
+
* @see ScopeGateThresholds
|
|
1609
|
+
* @see ./bundles/scope-gate.ts#resolveScopeGate
|
|
1610
|
+
* @see ./bundles/scope-gate.ts#validateScopeGateConfig
|
|
1611
|
+
* @see ./bundles/scope-gate.ts#renderScopeGateSection
|
|
1612
|
+
*/
|
|
1613
|
+
interface ScopeGateConfig {
|
|
1498
1614
|
/**
|
|
1499
|
-
*
|
|
1500
|
-
*
|
|
1501
|
-
*
|
|
1615
|
+
* Master switch for the scope gate. When `false`, the orchestrator
|
|
1616
|
+
* dispatches issues of every size and no decomposition proposal is
|
|
1617
|
+
* posted. Defaults to `true` — scope gating is on by default.
|
|
1502
1618
|
*/
|
|
1503
|
-
readonly
|
|
1619
|
+
readonly enabled?: boolean;
|
|
1504
1620
|
/**
|
|
1505
|
-
*
|
|
1506
|
-
*
|
|
1621
|
+
* Classification thresholds for **acceptance-criteria counts**
|
|
1622
|
+
* (checkbox lines under `## Acceptance Criteria`).
|
|
1623
|
+
* Defaults to `{ smallMax: 3, mediumMax: 6 }` — openhi's published
|
|
1624
|
+
* heuristic.
|
|
1507
1625
|
*/
|
|
1508
|
-
readonly
|
|
1626
|
+
readonly acceptanceCriteria?: ScopeGateThresholds;
|
|
1509
1627
|
/**
|
|
1510
|
-
*
|
|
1511
|
-
*
|
|
1628
|
+
* Classification thresholds for **source counts** (bullet list
|
|
1629
|
+
* items under the issue's `## Inputs` / `## References` /
|
|
1630
|
+
* `## Sources` sections). Defaults to `{ smallMax: 2, mediumMax: 5 }`.
|
|
1512
1631
|
*/
|
|
1513
|
-
readonly
|
|
1632
|
+
readonly sources?: ScopeGateThresholds;
|
|
1514
1633
|
/**
|
|
1515
|
-
*
|
|
1516
|
-
*
|
|
1634
|
+
* When `true`, the orchestrator files the proposed phased
|
|
1635
|
+
* sub-issues automatically after posting the decomposition
|
|
1636
|
+
* proposal comment. When `false` (the default), it posts the
|
|
1637
|
+
* proposal and stops — a human is expected to file the sub-issues.
|
|
1638
|
+
*
|
|
1639
|
+
* Autofile is **opt-in** because sub-issue creation permanently
|
|
1640
|
+
* modifies the project state; repos that adopt the feature should
|
|
1641
|
+
* validate the decomposition template first and graduate to
|
|
1642
|
+
* autofile once they trust the output.
|
|
1643
|
+
* @default false
|
|
1517
1644
|
*/
|
|
1518
|
-
readonly
|
|
1645
|
+
readonly autoFile?: boolean;
|
|
1519
1646
|
/**
|
|
1520
|
-
*
|
|
1647
|
+
* Override for the decomposition-proposal comment body posted on
|
|
1648
|
+
* a rejected `large` issue. When unset, the bundle ships a generic
|
|
1649
|
+
* template that the orchestrator fills in with the classified axis
|
|
1650
|
+
* (`acceptance-criteria` / `sources`), the observed counts, and a
|
|
1651
|
+
* boilerplate `Phase 1 / Phase 2 / Phase 3` skeleton for the agent
|
|
1652
|
+
* to refine.
|
|
1653
|
+
*
|
|
1654
|
+
* The override string may embed the following placeholders — the
|
|
1655
|
+
* orchestrator substitutes them at comment-composition time:
|
|
1656
|
+
*
|
|
1657
|
+
* - `<AC_COUNT>` — observed acceptance-criteria count.
|
|
1658
|
+
* - `<SOURCES_COUNT>` — observed sources count.
|
|
1659
|
+
* - `<AC_LIMIT>` — the `acceptanceCriteria.mediumMax` threshold
|
|
1660
|
+
* the issue tripped.
|
|
1661
|
+
* - `<SOURCES_LIMIT>` — the `sources.mediumMax` threshold the
|
|
1662
|
+
* issue tripped.
|
|
1663
|
+
*
|
|
1664
|
+
* Placeholders use the angle-bracketed uppercase-snake form — not
|
|
1665
|
+
* `{{curly-brace}}` form — because `AgentConfig`'s template
|
|
1666
|
+
* resolver claims the curly-brace namespace at rule generation
|
|
1667
|
+
* time and would rewrite `{{acCount}}` to `<acCount>` before the
|
|
1668
|
+
* agent ever saw it.
|
|
1669
|
+
*
|
|
1670
|
+
* Placeholder substitution is performed by the orchestrator at
|
|
1671
|
+
* runtime — configulator emits the template verbatim.
|
|
1521
1672
|
*/
|
|
1522
|
-
readonly
|
|
1673
|
+
readonly decompositionTemplate?: string;
|
|
1674
|
+
}
|
|
1675
|
+
/*******************************************************************************
|
|
1676
|
+
*
|
|
1677
|
+
* Run Ratio Config
|
|
1678
|
+
*
|
|
1679
|
+
******************************************************************************/
|
|
1680
|
+
/**
|
|
1681
|
+
* Run-ratio configuration consumed by the `orchestrator` bundle.
|
|
1682
|
+
*
|
|
1683
|
+
* The orchestrator keeps a persistent run counter and interleaves
|
|
1684
|
+
* **dispatch runs** (pick the next ready issue, recommend a worker)
|
|
1685
|
+
* with **housekeeping runs** (batch PR review + maintenance scan) on
|
|
1686
|
+
* a configurable dispatch-to-housekeeping ratio. This mirrors
|
|
1687
|
+
* openhi's `DISPATCHER.md` 4:1 cadence — four dispatch runs feed the
|
|
1688
|
+
* worker queue, then one batched housekeeping run flushes the
|
|
1689
|
+
* review backlog and runs maintenance triage so the pipeline never
|
|
1690
|
+
* drifts.
|
|
1691
|
+
*
|
|
1692
|
+
* The counter persists in a small gitignored JSON state file
|
|
1693
|
+
* (default `.claude/state/orchestrator-runs.json`). Every orchestrator
|
|
1694
|
+
* invocation ticks the counter once and classifies the run based on
|
|
1695
|
+
* `runCounter % (ratio + 1) == 0` — the `ratio + 1`th run in every
|
|
1696
|
+
* cycle is a housekeeping run, all others dispatch.
|
|
1697
|
+
*
|
|
1698
|
+
* Every field is optional. When the whole config is absent the
|
|
1699
|
+
* orchestrator ships with openhi's 4:1 defaults baked in (4 dispatch
|
|
1700
|
+
* runs, 1 housekeeping run, state file at the default path,
|
|
1701
|
+
* `opus` / `sonnet` recommended models).
|
|
1702
|
+
*
|
|
1703
|
+
* Malformed configs — non-integer or non-positive `ratio`, empty or
|
|
1704
|
+
* absolute `stateFilePath` — fail the build at synth time via
|
|
1705
|
+
* `validateRunRatioConfig`.
|
|
1706
|
+
*
|
|
1707
|
+
* @see ./bundles/run-ratio.ts#resolveRunRatio
|
|
1708
|
+
* @see ./bundles/run-ratio.ts#validateRunRatioConfig
|
|
1709
|
+
* @see ./bundles/run-ratio.ts#renderRunRatioSection
|
|
1710
|
+
*/
|
|
1711
|
+
interface RunRatioConfig {
|
|
1523
1712
|
/**
|
|
1524
|
-
*
|
|
1525
|
-
*
|
|
1526
|
-
*
|
|
1527
|
-
*
|
|
1528
|
-
*
|
|
1529
|
-
* @example
|
|
1530
|
-
* ```ts
|
|
1531
|
-
* ruleExtensions: {
|
|
1532
|
-
* 'typescript-conventions': '## Additional Conventions\n\n- Use branded types for IDs',
|
|
1533
|
-
* }
|
|
1534
|
-
* ```
|
|
1713
|
+
* Master switch for the run-ratio pipeline. When `false`, every
|
|
1714
|
+
* orchestrator run executes the full dispatch pipeline and no
|
|
1715
|
+
* housekeeping batching is performed; PR review and maintenance
|
|
1716
|
+
* remain manual invocations. Defaults to `true` — ratio-based
|
|
1717
|
+
* batching is on by default.
|
|
1535
1718
|
*/
|
|
1536
|
-
readonly
|
|
1719
|
+
readonly enabled?: boolean;
|
|
1537
1720
|
/**
|
|
1538
|
-
*
|
|
1539
|
-
*
|
|
1721
|
+
* Number of dispatch runs per housekeeping run. With `ratio = 4`,
|
|
1722
|
+
* runs 1–4 dispatch and run 5 housekeeps; the counter then wraps.
|
|
1723
|
+
* The cycle length is therefore `ratio + 1` runs.
|
|
1724
|
+
*
|
|
1725
|
+
* Must be a positive integer (`ratio >= 1`). Defaults to `4` —
|
|
1726
|
+
* the openhi-published cadence.
|
|
1540
1727
|
*/
|
|
1541
|
-
readonly
|
|
1728
|
+
readonly ratio?: number;
|
|
1542
1729
|
/**
|
|
1543
|
-
*
|
|
1544
|
-
*
|
|
1545
|
-
* file
|
|
1730
|
+
* Path to the run-counter state file, relative to the repo root.
|
|
1731
|
+
* The orchestrator reads, increments, and writes back this file on
|
|
1732
|
+
* every invocation. The file is tiny JSON (`{ "run_counter": <n> }`)
|
|
1733
|
+
* and is expected to be gitignored — each operator's orchestrator
|
|
1734
|
+
* session maintains its own counter.
|
|
1735
|
+
*
|
|
1736
|
+
* Must be a non-empty relative path (no leading `/`). Defaults to
|
|
1737
|
+
* `.claude/state/orchestrator-runs.json`.
|
|
1546
1738
|
*/
|
|
1547
|
-
readonly
|
|
1739
|
+
readonly stateFilePath?: string;
|
|
1548
1740
|
/**
|
|
1549
|
-
*
|
|
1550
|
-
*
|
|
1551
|
-
*
|
|
1552
|
-
* `
|
|
1741
|
+
* Human-readable label for the model recommended on dispatch runs.
|
|
1742
|
+
* Rendered verbatim into the orchestrator-conventions rule so the
|
|
1743
|
+
* operator knows which model to run each dispatch session against.
|
|
1744
|
+
* Configulator does **not** set `model:` frontmatter on the
|
|
1745
|
+
* sub-agent — the label is informational.
|
|
1553
1746
|
*
|
|
1554
|
-
*
|
|
1555
|
-
* points from epic #414. Per-project propagation of these values
|
|
1556
|
-
* into bundle rule content lands in a follow-up — setting it today
|
|
1557
|
-
* does not yet alter generated rules.
|
|
1747
|
+
* Defaults to `"opus"`.
|
|
1558
1748
|
*/
|
|
1559
|
-
readonly
|
|
1749
|
+
readonly dispatchModel?: string;
|
|
1560
1750
|
/**
|
|
1561
|
-
*
|
|
1562
|
-
*
|
|
1563
|
-
*
|
|
1751
|
+
* Human-readable label for the model recommended on housekeeping
|
|
1752
|
+
* runs. See `dispatchModel` for the rendering contract.
|
|
1753
|
+
* Housekeeping is mechanical (batch PR review + maintenance scan)
|
|
1754
|
+
* so a cheaper model is the documented recommendation.
|
|
1564
1755
|
*
|
|
1565
|
-
*
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1756
|
+
* Defaults to `"sonnet"`.
|
|
1757
|
+
*/
|
|
1758
|
+
readonly housekeepingModel?: string;
|
|
1759
|
+
}
|
|
1760
|
+
/*******************************************************************************
|
|
1761
|
+
*
|
|
1762
|
+
* Pre-flight PR merge Config
|
|
1763
|
+
*
|
|
1764
|
+
******************************************************************************/
|
|
1765
|
+
/**
|
|
1766
|
+
* Pre-flight PR merge configuration consumed by the `orchestrator`
|
|
1767
|
+
* bundle.
|
|
1768
|
+
*
|
|
1769
|
+
* The pre-flight step (vortex `CLAUDE.md` step 0b) runs **before** the
|
|
1770
|
+
* orchestrator's triage walk so eligible PRs land before the unblock
|
|
1771
|
+
* and queue-scan phases read dependency state. Without it, an issue
|
|
1772
|
+
* whose only remaining blocker is an approved-but-not-yet-merged PR
|
|
1773
|
+
* shows up as blocked on every dispatch cycle — the pipeline thrashes
|
|
1774
|
+
* on stale dependency state.
|
|
1775
|
+
*
|
|
1776
|
+
* The sweep is idempotent: `gh pr merge` on an already-merged PR is a
|
|
1777
|
+
* no-op, so re-running pre-flight on every orchestrator invocation
|
|
1778
|
+
* (dispatch **and** housekeeping) is safe and cheap. Eligibility is
|
|
1779
|
+
* read by the `check-blocked.sh preflight` subcommand and returned as
|
|
1780
|
+
* one line per candidate PR for the orchestrator to act on.
|
|
1781
|
+
*
|
|
1782
|
+
* Every field is optional. When the whole config is absent the
|
|
1783
|
+
* orchestrator ships with vortex's published defaults baked in
|
|
1784
|
+
* (pre-flight enabled, delegated to the `pr-reviewer` sub-agent so the
|
|
1785
|
+
* merge workflow runs on a cheaper model, squash merges, linked-issue
|
|
1786
|
+
* keyword required).
|
|
1787
|
+
*
|
|
1788
|
+
* Malformed configs — unknown `mergeMethod`, empty / whitespace-only
|
|
1789
|
+
* `eligibleLabels` entries — fail the build at synth time via
|
|
1790
|
+
* `validatePreflightPrConfig`.
|
|
1791
|
+
*
|
|
1792
|
+
* @see ./bundles/preflight-pr.ts#resolvePreflightPr
|
|
1793
|
+
* @see ./bundles/preflight-pr.ts#validatePreflightPrConfig
|
|
1794
|
+
* @see ./bundles/preflight-pr.ts#renderPreflightPrSection
|
|
1795
|
+
*/
|
|
1796
|
+
interface PreflightPrConfig {
|
|
1797
|
+
/**
|
|
1798
|
+
* Master switch for the pre-flight sweep. When `false`, the
|
|
1799
|
+
* orchestrator skips pre-flight entirely; PR merges land via the
|
|
1800
|
+
* existing batch PR review step on housekeeping runs or via a
|
|
1801
|
+
* human operator.
|
|
1569
1802
|
*
|
|
1570
|
-
*
|
|
1571
|
-
*
|
|
1803
|
+
* Defaults to `true` — pre-flight is on by default. Repos that
|
|
1804
|
+
* want to keep merges manual should set this to `false` explicitly.
|
|
1572
1805
|
*/
|
|
1573
|
-
readonly
|
|
1806
|
+
readonly enabled?: boolean;
|
|
1574
1807
|
/**
|
|
1575
|
-
*
|
|
1576
|
-
*
|
|
1577
|
-
*
|
|
1578
|
-
*
|
|
1808
|
+
* Whether the orchestrator delegates the pre-flight sweep to the
|
|
1809
|
+
* `pr-reviewer` sub-agent. Mirrors vortex's step 0b contract:
|
|
1810
|
+
* invoking the reviewer as a sub-agent lets the merge workflow run
|
|
1811
|
+
* on its own (cheaper) model rather than on the orchestrator's
|
|
1812
|
+
* more expensive model budget.
|
|
1579
1813
|
*
|
|
1580
|
-
*
|
|
1581
|
-
*
|
|
1582
|
-
*
|
|
1583
|
-
* interacts with the `priority:*` taxonomy, and (c) the
|
|
1584
|
-
* agent-driven expansion contract. The actual `focus.json` file
|
|
1585
|
-
* is authored and curated in the consuming repo — configulator
|
|
1586
|
-
* ships the schema and agent instructions only.
|
|
1814
|
+
* Set to `false` to have the orchestrator merge eligible PRs inline
|
|
1815
|
+
* without delegation (useful in pipelines that have not wired a
|
|
1816
|
+
* `pr-reviewer` sub-agent).
|
|
1587
1817
|
*
|
|
1588
|
-
*
|
|
1589
|
-
* @see FocusArea
|
|
1590
|
-
* @see AgentExpansionRules
|
|
1591
|
-
* @see ./bundles/focus.ts#renderFocusSection
|
|
1818
|
+
* Defaults to `true`.
|
|
1592
1819
|
*/
|
|
1593
|
-
readonly
|
|
1820
|
+
readonly delegateToPrReviewer?: boolean;
|
|
1594
1821
|
/**
|
|
1595
|
-
*
|
|
1596
|
-
* `
|
|
1597
|
-
*
|
|
1598
|
-
*
|
|
1599
|
-
* by the (future) `agenda` bundle.
|
|
1600
|
-
*
|
|
1601
|
-
* When `meetingTypes` is non-empty, the `meeting-analysis` bundle
|
|
1602
|
-
* appends a "Recognized meeting types" subsection to the
|
|
1603
|
-
* `meeting-processing-workflow` rule. When `meetingAreas` is
|
|
1604
|
-
* non-empty, it appends an "Area → doc-root mapping" subsection.
|
|
1605
|
-
* When both are empty or unset, the generated rule content is
|
|
1606
|
-
* unchanged from the no-config baseline.
|
|
1822
|
+
* Merge method used when the orchestrator merges a PR inline
|
|
1823
|
+
* (`delegateToPrReviewer = false`). Maps to the `gh pr merge`
|
|
1824
|
+
* flags: `squash` → `--squash`, `merge` → `--merge`, `rebase`
|
|
1825
|
+
* → `--rebase`.
|
|
1607
1826
|
*
|
|
1608
|
-
*
|
|
1609
|
-
*
|
|
1610
|
-
*
|
|
1611
|
-
* @see ./bundles/meeting-types.ts#renderMeetingTypesSection
|
|
1827
|
+
* Defaults to `"squash"` — squash-and-merge matches every existing
|
|
1828
|
+
* configulator consumer and keeps `main` free of
|
|
1829
|
+
* branch-construction noise.
|
|
1612
1830
|
*/
|
|
1613
|
-
readonly
|
|
1831
|
+
readonly mergeMethod?: "squash" | "merge" | "rebase";
|
|
1614
1832
|
/**
|
|
1615
|
-
*
|
|
1616
|
-
*
|
|
1833
|
+
* Whether pre-flight skips PRs that lack a
|
|
1834
|
+
* `Closes/Fixes/Resolves #<n>` keyword in the body. Most pipelines
|
|
1835
|
+
* require a linked issue so the dependency graph stays intact, so
|
|
1836
|
+
* the safe default is `true` — pre-flight only merges PRs that
|
|
1837
|
+
* cleanly complete a known issue.
|
|
1617
1838
|
*
|
|
1618
|
-
*
|
|
1619
|
-
*
|
|
1620
|
-
*
|
|
1621
|
-
* - `customDocSections` — consumer-supplied section templates that
|
|
1622
|
-
* render verbatim after an existing section heading in a target
|
|
1623
|
-
* bundle's rule content.
|
|
1839
|
+
* Set to `false` in repos that accept human-authored PRs with no
|
|
1840
|
+
* linked issue (docs-only changes, dependency bumps, etc.) and
|
|
1841
|
+
* still want pre-flight to land them.
|
|
1624
1842
|
*
|
|
1625
|
-
*
|
|
1626
|
-
|
|
1627
|
-
|
|
1843
|
+
* Defaults to `true`.
|
|
1844
|
+
*/
|
|
1845
|
+
readonly requireLinkedIssue?: boolean;
|
|
1846
|
+
/**
|
|
1847
|
+
* Optional allowlist of labels that, when present on a PR, gate
|
|
1848
|
+
* eligibility. When the list is empty (the default) every open PR
|
|
1849
|
+
* that otherwise satisfies the eligibility checks qualifies;
|
|
1850
|
+
* supplying a non-empty list restricts pre-flight to PRs carrying
|
|
1851
|
+
* at least one of the listed labels.
|
|
1628
1852
|
*
|
|
1629
|
-
*
|
|
1630
|
-
*
|
|
1631
|
-
*
|
|
1632
|
-
*
|
|
1853
|
+
* Use this to opt specific pipelines in — for example,
|
|
1854
|
+
* `['origin:issue-worker']` restricts pre-flight to bot-authored
|
|
1855
|
+
* PRs, leaving human-authored PRs for the normal review path.
|
|
1856
|
+
*
|
|
1857
|
+
* Every entry must be a non-empty string; empty / whitespace-only
|
|
1858
|
+
* entries fail the build via `validatePreflightPrConfig`.
|
|
1633
1859
|
*/
|
|
1634
|
-
readonly
|
|
1860
|
+
readonly eligibleLabels?: ReadonlyArray<string>;
|
|
1635
1861
|
}
|
|
1636
|
-
|
|
1862
|
+
/*******************************************************************************
|
|
1863
|
+
*
|
|
1864
|
+
* Unblock Dependents Config
|
|
1865
|
+
*
|
|
1866
|
+
******************************************************************************/
|
|
1637
1867
|
/**
|
|
1638
|
-
*
|
|
1868
|
+
* Agent-driven unblocking configuration consumed by the `orchestrator`
|
|
1869
|
+
* bundle.
|
|
1639
1870
|
*
|
|
1640
|
-
*
|
|
1641
|
-
*
|
|
1642
|
-
*
|
|
1871
|
+
* After any agent applies `status:done` to an issue, it runs a
|
|
1872
|
+
* targeted sweep against that issue's dependents — open issues whose
|
|
1873
|
+
* body contains `Depends on: #<just-closed>`. Dependents whose full
|
|
1874
|
+
* dependency list is now closed flip from `status:blocked` to
|
|
1875
|
+
* `status:ready` immediately, without waiting for the next
|
|
1876
|
+
* orchestrator dispatch cycle. The sweep is implemented by the
|
|
1877
|
+
* shipped `.claude/procedures/unblock-dependents.sh` script.
|
|
1643
1878
|
*
|
|
1644
|
-
*
|
|
1645
|
-
*
|
|
1879
|
+
* Every field is optional. When the whole config is absent the
|
|
1880
|
+
* orchestrator ships with the sweep **enabled** and a generic
|
|
1881
|
+
* "Dependencies resolved by #<n> — unblocking." citation comment.
|
|
1646
1882
|
*
|
|
1647
|
-
*
|
|
1648
|
-
*
|
|
1649
|
-
*
|
|
1650
|
-
*
|
|
1651
|
-
*
|
|
1652
|
-
*
|
|
1653
|
-
*
|
|
1654
|
-
* content: '# My Rule\n\nFollow these conventions...',
|
|
1655
|
-
* }],
|
|
1656
|
-
* });
|
|
1657
|
-
* ```
|
|
1883
|
+
* Malformed configs — empty / whitespace-only `commentTemplate` or
|
|
1884
|
+
* `partialUnblockCommentTemplate` — fail the build at synth time via
|
|
1885
|
+
* `validateUnblockDependentsConfig`.
|
|
1886
|
+
*
|
|
1887
|
+
* @see ./bundles/unblock-dependents.ts#resolveUnblockDependents
|
|
1888
|
+
* @see ./bundles/unblock-dependents.ts#validateUnblockDependentsConfig
|
|
1889
|
+
* @see ./bundles/unblock-dependents.ts#renderUnblockDependentsSection
|
|
1658
1890
|
*/
|
|
1659
|
-
|
|
1891
|
+
interface UnblockDependentsConfig {
|
|
1660
1892
|
/**
|
|
1661
|
-
*
|
|
1893
|
+
* Master switch for the agent-driven unblock sweep. When `false`,
|
|
1894
|
+
* agents skip the targeted sweep after applying `status:done`;
|
|
1895
|
+
* dependents wait for the next orchestrator dispatch (Phase C) to
|
|
1896
|
+
* pick up the resolved dependency.
|
|
1897
|
+
*
|
|
1898
|
+
* Defaults to `true` — the sweep is on by default. Repos that
|
|
1899
|
+
* want to keep label transitions manual should set this to `false`
|
|
1900
|
+
* explicitly.
|
|
1662
1901
|
*/
|
|
1663
|
-
|
|
1902
|
+
readonly enabled?: boolean;
|
|
1664
1903
|
/**
|
|
1665
|
-
*
|
|
1666
|
-
*
|
|
1667
|
-
*
|
|
1668
|
-
*
|
|
1669
|
-
*
|
|
1904
|
+
* Override for the citation comment posted on each fully-unblocked
|
|
1905
|
+
* dependent. The string is interpolated at runtime by the shipped
|
|
1906
|
+
* shell script: `<CLOSED_ISSUE>` is replaced with the resolving
|
|
1907
|
+
* issue's `#<n>` reference.
|
|
1908
|
+
*
|
|
1909
|
+
* The placeholder syntax deliberately avoids `{{curly-brace}}` —
|
|
1910
|
+
* `AgentConfig`'s template resolver claims that namespace at rule
|
|
1911
|
+
* generation time.
|
|
1912
|
+
*
|
|
1913
|
+
* Defaults to `"Dependencies resolved by <CLOSED_ISSUE> — unblocking."`.
|
|
1670
1914
|
*/
|
|
1671
|
-
|
|
1915
|
+
readonly commentTemplate?: string;
|
|
1672
1916
|
/**
|
|
1673
|
-
*
|
|
1917
|
+
* Whether to post a partial-unblock comment on a dependent whose
|
|
1918
|
+
* full dependency list is **not** yet fully closed. When `true`,
|
|
1919
|
+
* each intermediate dependency resolution leaves a trail of
|
|
1920
|
+
* "still waiting on X" comments on the dependent — useful for
|
|
1921
|
+
* operator visibility on long dependency chains. When `false`,
|
|
1922
|
+
* partial resolutions are logged to the script's stdout only and
|
|
1923
|
+
* the dependent issue stays silent until the final dep closes.
|
|
1674
1924
|
*
|
|
1675
|
-
*
|
|
1676
|
-
* `defaultMode` defaults to `"dontAsk"` unless overridden.
|
|
1925
|
+
* Defaults to `false` — keeps issue threads clean by default.
|
|
1677
1926
|
*/
|
|
1678
|
-
|
|
1679
|
-
private readonly options;
|
|
1680
|
-
constructor(project: Project$1, options?: AgentConfigOptions);
|
|
1927
|
+
readonly flagPartialUnblockWithAttention?: boolean;
|
|
1681
1928
|
/**
|
|
1682
|
-
*
|
|
1683
|
-
*
|
|
1684
|
-
*
|
|
1929
|
+
* Override for the partial-unblock comment posted when
|
|
1930
|
+
* `flagPartialUnblockWithAttention` is `true`. The string is
|
|
1931
|
+
* interpolated at runtime: `<CLOSED_ISSUE>` is replaced with the
|
|
1932
|
+
* just-resolved issue's `#<n>` reference, and `<OPEN_DEPS>` with
|
|
1933
|
+
* the space-separated list of remaining open dependencies
|
|
1934
|
+
* (e.g. `#45 #47`).
|
|
1685
1935
|
*
|
|
1686
|
-
*
|
|
1687
|
-
* consume bundle-contributed configuration.
|
|
1936
|
+
* Defaults to `"Dependency <CLOSED_ISSUE> resolved, but still waiting on: <OPEN_DEPS>."`.
|
|
1688
1937
|
*/
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1938
|
+
readonly partialUnblockCommentTemplate?: string;
|
|
1939
|
+
}
|
|
1940
|
+
/*******************************************************************************
|
|
1941
|
+
*
|
|
1942
|
+
* Progress Files Config
|
|
1943
|
+
*
|
|
1944
|
+
******************************************************************************/
|
|
1945
|
+
/**
|
|
1946
|
+
* Progress-file convention consumed by the `base` bundle and every
|
|
1947
|
+
* phased-agent bundle (bcm-writer, research-pipeline, etc.).
|
|
1948
|
+
*
|
|
1949
|
+
* Every phased agent session writes a small progress file to disk as
|
|
1950
|
+
* its first action after claiming an issue, updates it after each
|
|
1951
|
+
* non-trivial step, and deletes it in the final commit that closes
|
|
1952
|
+
* the issue. If the session crashes, the next session reads the
|
|
1953
|
+
* progress file, confirms on-disk state matches reality, and resumes
|
|
1954
|
+
* from the next uncompleted step rather than starting from scratch.
|
|
1955
|
+
*
|
|
1956
|
+
* The convention complements the stale-branch decision tree — clone
|
|
1957
|
+
* recovery returns the checkout to the default branch; the progress
|
|
1958
|
+
* file restores the *deliverable* to a partially-complete state so
|
|
1959
|
+
* resumed work can build on it.
|
|
1960
|
+
*
|
|
1961
|
+
* Every field is optional. When the whole config is absent the
|
|
1962
|
+
* convention ships **enabled** with JSON-formatted files stored under
|
|
1963
|
+
* `.claude/state/<issue-number>-progress.json`.
|
|
1964
|
+
*
|
|
1965
|
+
* Malformed configs — empty / whitespace-only or absolute `stateDir`,
|
|
1966
|
+
* empty / whitespace-only `filenamePattern`, `filenamePattern` missing
|
|
1967
|
+
* the `<ISSUE_NUMBER>` placeholder, unknown `format`, non-positive
|
|
1968
|
+
* `staleAfterHours` — fail the build at synth time via
|
|
1969
|
+
* `validateProgressFilesConfig`.
|
|
1970
|
+
*
|
|
1971
|
+
* @see ./bundles/progress-files.ts#resolveProgressFiles
|
|
1972
|
+
* @see ./bundles/progress-files.ts#validateProgressFilesConfig
|
|
1973
|
+
* @see ./bundles/progress-files.ts#renderProgressFilesRuleContent
|
|
1974
|
+
*/
|
|
1975
|
+
interface ProgressFilesConfig {
|
|
1976
|
+
/**
|
|
1977
|
+
* Master switch for the progress-file convention. When `false`,
|
|
1978
|
+
* the base bundle renders a short stub stating the project does not
|
|
1979
|
+
* enforce progress files; phased-agent bundles skip the
|
|
1980
|
+
* per-workflow "Progress File" injection. Partial-resume guidance
|
|
1981
|
+
* still renders because it applies even without a progress file.
|
|
1982
|
+
*
|
|
1983
|
+
* Defaults to `true` — the convention is on by default.
|
|
1984
|
+
*/
|
|
1985
|
+
readonly enabled?: boolean;
|
|
1986
|
+
/**
|
|
1987
|
+
* Root directory (relative to the repo root) where progress files
|
|
1988
|
+
* are written. Must be a non-empty relative path (no leading `/`).
|
|
1989
|
+
* The directory is added to the project's `.gitignore` at synth
|
|
1990
|
+
* time so progress files never land on the default branch.
|
|
1991
|
+
*
|
|
1992
|
+
* Defaults to `.claude/state`.
|
|
1993
|
+
*/
|
|
1994
|
+
readonly stateDir?: string;
|
|
1995
|
+
/**
|
|
1996
|
+
* Filename pattern for an individual progress file. The
|
|
1997
|
+
* `<ISSUE_NUMBER>` placeholder is substituted at runtime with the
|
|
1998
|
+
* numeric id of the issue the agent is working on (e.g.
|
|
1999
|
+
* `479-progress.json`).
|
|
2000
|
+
*
|
|
2001
|
+
* Must contain the `<ISSUE_NUMBER>` placeholder and must not
|
|
2002
|
+
* contain a `/` (use `stateDir` for the directory).
|
|
2003
|
+
*
|
|
2004
|
+
* The placeholder uses the angle-bracketed uppercase-snake form —
|
|
2005
|
+
* not `{{curly-brace}}` form — because `AgentConfig`'s template
|
|
2006
|
+
* resolver claims the curly-brace namespace at rule generation
|
|
2007
|
+
* time.
|
|
2008
|
+
*
|
|
2009
|
+
* Defaults to `"<ISSUE_NUMBER>-progress.json"`.
|
|
2010
|
+
*/
|
|
2011
|
+
readonly filenamePattern?: string;
|
|
2012
|
+
/**
|
|
2013
|
+
* Serialization format for the progress-file body.
|
|
2014
|
+
*
|
|
2015
|
+
* - `"json"` (default) — machine-parseable JSON with a typed
|
|
2016
|
+
* schema. Preferred when scripted resume logic reads the file.
|
|
2017
|
+
* - `"markdown"` — human-readable markdown with a YAML frontmatter
|
|
2018
|
+
* block. Preferred for projects that treat the progress file as
|
|
2019
|
+
* an operator-visible log.
|
|
2020
|
+
*/
|
|
2021
|
+
readonly format?: "json" | "markdown";
|
|
2022
|
+
/**
|
|
2023
|
+
* Whether the final commit that closes the issue must delete the
|
|
2024
|
+
* progress file. When `true` (the default), progress files are a
|
|
2025
|
+
* working-branch artefact and never land on the default branch.
|
|
2026
|
+
* When `false`, progress files are retained as an audit trail.
|
|
2027
|
+
*
|
|
2028
|
+
* Defaults to `true`.
|
|
2029
|
+
*/
|
|
2030
|
+
readonly cleanupOnComplete?: boolean;
|
|
2031
|
+
/**
|
|
2032
|
+
* Stale-threshold in hours for the stale-branch decision tree. A
|
|
2033
|
+
* branch whose progress file's `last_updated` is older than this
|
|
2034
|
+
* many hours **and** that has no matching open PR is considered
|
|
2035
|
+
* abandoned. Rendered verbatim into the stale-branch documentation
|
|
2036
|
+
* so operators have a single authoritative number.
|
|
2037
|
+
*
|
|
2038
|
+
* Must be a positive integer. Defaults to `72` — matches the
|
|
2039
|
+
* orchestrator bundle's in-progress staleness threshold.
|
|
2040
|
+
*/
|
|
2041
|
+
readonly staleAfterHours?: number;
|
|
2042
|
+
}
|
|
2043
|
+
/*******************************************************************************
|
|
2044
|
+
*
|
|
2045
|
+
* Shared Editing Config
|
|
2046
|
+
*
|
|
2047
|
+
******************************************************************************/
|
|
2048
|
+
/**
|
|
2049
|
+
* Shared-editing safety convention consumed by the `base` bundle and
|
|
2050
|
+
* every phased-agent bundle that writes rows to a shared registry or
|
|
2051
|
+
* feature-matrix file.
|
|
2052
|
+
*
|
|
2053
|
+
* Multiple concurrent agent sessions frequently need to edit the same
|
|
2054
|
+
* index file — registry `README.md` / `index.md` row tables, category
|
|
2055
|
+
* landing pages, feature matrices. Without a shared contract, parallel
|
|
2056
|
+
* sessions conflict on the index even when their content contributions
|
|
2057
|
+
* are independent, and the resolver may accidentally drop a row.
|
|
2058
|
+
*
|
|
2059
|
+
* The convention covers: pre-edit read-latest, single-entry
|
|
2060
|
+
* deterministic-sort inserts, commit-path verification (read-back the
|
|
2061
|
+
* committed file, assert the new row is present exactly once), and a
|
|
2062
|
+
* scripted merge-conflict resolution recipe.
|
|
2063
|
+
*
|
|
2064
|
+
* Every field is optional. When the whole config is absent the
|
|
2065
|
+
* convention ships **enabled** with the documented default set of
|
|
2066
|
+
* shared index path patterns and the rebase-based conflict strategy.
|
|
2067
|
+
*
|
|
2068
|
+
* Malformed configs — empty `sharedIndexPaths`, empty /
|
|
2069
|
+
* whitespace-only path entry, unknown `conflictStrategy` — fail the
|
|
2070
|
+
* build at synth time via `validateSharedEditingConfig`.
|
|
2071
|
+
*
|
|
2072
|
+
* @see ./bundles/shared-editing.ts#resolveSharedEditing
|
|
2073
|
+
* @see ./bundles/shared-editing.ts#validateSharedEditingConfig
|
|
2074
|
+
* @see ./bundles/shared-editing.ts#renderSharedEditingRuleContent
|
|
2075
|
+
*/
|
|
2076
|
+
interface SharedEditingConfig {
|
|
2077
|
+
/**
|
|
2078
|
+
* Master switch for the shared-editing convention. When `false`,
|
|
2079
|
+
* the base bundle renders a short stub stating the project does not
|
|
2080
|
+
* enforce the convention; phased-agent bundles skip the
|
|
2081
|
+
* per-workflow "Shared Index Editing" injection.
|
|
2082
|
+
*
|
|
2083
|
+
* Defaults to `true` — the convention is on by default.
|
|
2084
|
+
*/
|
|
2085
|
+
readonly enabled?: boolean;
|
|
2086
|
+
/**
|
|
2087
|
+
* Path patterns (plain glob strings) that identify shared index
|
|
2088
|
+
* files. Rendered verbatim into the rule body as a bullet list;
|
|
2089
|
+
* agents match the file they are about to edit against the patterns
|
|
2090
|
+
* to decide whether the contract applies.
|
|
2091
|
+
*
|
|
2092
|
+
* Must be a non-empty array of non-empty strings.
|
|
2093
|
+
*
|
|
2094
|
+
* Defaults to the configulator-wide set covering docs-site
|
|
2095
|
+
* `index.md` / `README.md` registry tables and feature-matrix
|
|
2096
|
+
* files.
|
|
2097
|
+
*/
|
|
2098
|
+
readonly sharedIndexPaths?: ReadonlyArray<string>;
|
|
2099
|
+
/**
|
|
2100
|
+
* Whether the rendered convention includes the commit-path
|
|
2101
|
+
* verification protocol (read-back the committed file, assert the
|
|
2102
|
+
* new row is present exactly once). The verification step catches
|
|
2103
|
+
* staging / path bugs that would otherwise silently drop a row.
|
|
2104
|
+
*
|
|
2105
|
+
* Defaults to `true` — verification is on by default.
|
|
2106
|
+
*/
|
|
2107
|
+
readonly verifyCommit?: boolean;
|
|
2108
|
+
/**
|
|
2109
|
+
* Strategy the convention's merge-conflict recipe prescribes when
|
|
2110
|
+
* two agents both add a row to the same shared index:
|
|
2111
|
+
*
|
|
2112
|
+
* - `"rebase"` (default) — `git pull --rebase` the branch, re-insert
|
|
2113
|
+
* the new row in sort order, resolve, `git rebase --continue`.
|
|
2114
|
+
* - `"merge"` — `git pull` (fast-forward or merge commit), re-insert
|
|
2115
|
+
* the row, `git commit`. Use for projects that keep a merge-commit
|
|
2116
|
+
* history on feature branches.
|
|
2117
|
+
*/
|
|
2118
|
+
readonly conflictStrategy?: "rebase" | "merge";
|
|
2119
|
+
/**
|
|
2120
|
+
* Whether the convention emits the
|
|
2121
|
+
* `.claude/procedures/verify-index-row.sh` helper to disk. The
|
|
2122
|
+
* helper implements the commit-path verification step in a single
|
|
2123
|
+
* shell invocation; consumers that prefer the inline
|
|
2124
|
+
* `git show HEAD:<path>` recipe can leave it disabled.
|
|
2125
|
+
*
|
|
2126
|
+
* Defaults to `false` — the helper is opt-in.
|
|
2127
|
+
*/
|
|
2128
|
+
readonly emitHelper?: boolean;
|
|
2129
|
+
}
|
|
2130
|
+
/*******************************************************************************
|
|
2131
|
+
*
|
|
2132
|
+
* Skill Evals Config
|
|
2133
|
+
*
|
|
2134
|
+
******************************************************************************/
|
|
2135
|
+
/**
|
|
2136
|
+
* Skill eval harness convention consumed by the `base` bundle and
|
|
2137
|
+
* every skill-owning bundle (requirements-writer, bcm-writer, etc.).
|
|
2138
|
+
*
|
|
2139
|
+
* Each skill under `<skillsRoot>/<skill-name>/` may ship a regression
|
|
2140
|
+
* suite at `<skillsRoot>/<skill-name>/evals/evals.json`. Suites are
|
|
2141
|
+
* declarative prompt / expected-output fixtures parameterised by a
|
|
2142
|
+
* shared **product-context** fixture (by default
|
|
2143
|
+
* `docs/src/content/docs/project-context.md`) so the same eval shape
|
|
2144
|
+
* works across every project that depends on configulator — each
|
|
2145
|
+
* consuming repo supplies its own `project-context.md`, not its own
|
|
2146
|
+
* forked eval files.
|
|
2147
|
+
*
|
|
2148
|
+
* The convention is declarative: the optional runner script shipped
|
|
2149
|
+
* by `emitRunner: true` walks the skills root, validates every
|
|
2150
|
+
* `evals.json` against the schema, resolves the product-context
|
|
2151
|
+
* fixture, and emits a JSON execution plan to stdout. It never
|
|
2152
|
+
* invokes an LLM itself — the plan is consumed by whatever human or
|
|
2153
|
+
* model actually replays the prompts against the skill.
|
|
2154
|
+
*
|
|
2155
|
+
* Every field is optional. When the whole config is absent the
|
|
2156
|
+
* convention ships **enabled** with the documented default paths,
|
|
2157
|
+
* product-context required, and the runner script opt-in.
|
|
2158
|
+
*
|
|
2159
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
2160
|
+
* `skillsRoot`, empty / whitespace-only or absolute
|
|
2161
|
+
* `productContextPath` — fail the build at synth time via
|
|
2162
|
+
* `validateSkillEvalsConfig`.
|
|
2163
|
+
*
|
|
2164
|
+
* @see ./bundles/skill-evals.ts#resolveSkillEvals
|
|
2165
|
+
* @see ./bundles/skill-evals.ts#validateSkillEvalsConfig
|
|
2166
|
+
* @see ./bundles/skill-evals.ts#renderSkillEvalsRuleContent
|
|
2167
|
+
*/
|
|
2168
|
+
interface SkillEvalsConfig {
|
|
2169
|
+
/**
|
|
2170
|
+
* Master switch for the skill-eval harness convention. When `false`,
|
|
2171
|
+
* the base bundle renders a short stub stating the project does not
|
|
2172
|
+
* ship skill evals; skill-owning bundles skip their per-bundle
|
|
2173
|
+
* "Skill Evals" injection and the optional runner script is not
|
|
2174
|
+
* emitted even if `emitRunner: true`.
|
|
2175
|
+
*
|
|
2176
|
+
* Defaults to `true` — the convention is on by default.
|
|
2177
|
+
*/
|
|
2178
|
+
readonly enabled?: boolean;
|
|
2179
|
+
/**
|
|
2180
|
+
* Root directory (relative to the repo root) under which skill
|
|
2181
|
+
* SKILL.md files live. The runner walks this directory to discover
|
|
2182
|
+
* eval suites at `<skillsRoot>/<skill-name>/evals/evals.json`.
|
|
2183
|
+
*
|
|
2184
|
+
* Must be a non-empty relative path (no leading `/`).
|
|
2185
|
+
*
|
|
2186
|
+
* Defaults to `.claude/skills`, which matches the path every
|
|
2187
|
+
* configulator-managed project ships skills to on disk.
|
|
2188
|
+
*/
|
|
2189
|
+
readonly skillsRoot?: string;
|
|
2190
|
+
/**
|
|
2191
|
+
* Path (relative to the repo root) to the product-context fixture
|
|
2192
|
+
* every eval suite references by default. A per-suite
|
|
2193
|
+
* `product_context` field in an `evals.json` overrides this value
|
|
2194
|
+
* for that suite only.
|
|
2195
|
+
*
|
|
2196
|
+
* Must be a non-empty relative path (no leading `/`).
|
|
2197
|
+
*
|
|
2198
|
+
* Defaults to `docs/src/content/docs/project-context.md`, which is
|
|
2199
|
+
* the file every configulator-managed agent already loads at
|
|
2200
|
+
* session start.
|
|
2201
|
+
*/
|
|
2202
|
+
readonly productContextPath?: string;
|
|
2203
|
+
/**
|
|
2204
|
+
* Whether the runner fails fast when the product-context fixture is
|
|
2205
|
+
* missing. The default (`true`) is deliberately strict — an eval
|
|
2206
|
+
* that silently runs without its fixture produces a false-positive
|
|
2207
|
+
* pass. Projects bootstrapping a new consuming repo that has not
|
|
2208
|
+
* yet authored its `project-context.md` can set this to `false`,
|
|
2209
|
+
* at which point a missing fixture becomes a stderr warning rather
|
|
2210
|
+
* than a hard failure.
|
|
2211
|
+
*
|
|
2212
|
+
* Defaults to `true`.
|
|
2213
|
+
*/
|
|
2214
|
+
readonly requireProductContext?: boolean;
|
|
2215
|
+
/**
|
|
2216
|
+
* Whether the convention emits the
|
|
2217
|
+
* `.claude/procedures/run-skill-evals.sh` helper to disk. The
|
|
2218
|
+
* helper implements the full runner contract (discover, validate,
|
|
2219
|
+
* resolve product-context, emit JSON plan) in a single shell
|
|
2220
|
+
* invocation. Consumers that prefer to roll their own runner can
|
|
2221
|
+
* leave it disabled and follow the inline recipe documented in the
|
|
2222
|
+
* rule body.
|
|
2223
|
+
*
|
|
2224
|
+
* Defaults to `false` — the helper is opt-in.
|
|
2225
|
+
*/
|
|
2226
|
+
readonly emitRunner?: boolean;
|
|
2227
|
+
}
|
|
2228
|
+
/*******************************************************************************
|
|
2229
|
+
*
|
|
2230
|
+
* Workflow Diagrams Config
|
|
2231
|
+
*
|
|
2232
|
+
******************************************************************************/
|
|
2233
|
+
/**
|
|
2234
|
+
* Workflow-diagrams convention consumed by the `base` bundle and
|
|
2235
|
+
* every phased-agent bundle. Documents the single hand-authored
|
|
2236
|
+
* Mermaid-based diagrams page that visualises every agent's phase
|
|
2237
|
+
* graph and every cross-agent handoff, and enforces the
|
|
2238
|
+
* **diagram-touched-when-bundle-touched** rule: a change set that
|
|
2239
|
+
* modifies a bundle's phase graph must also update the matching
|
|
2240
|
+
* section in the diagrams page.
|
|
2241
|
+
*
|
|
2242
|
+
* The convention is deliberately content-free — configulator cannot
|
|
2243
|
+
* ship meaningful diagrams because each consuming repo enables a
|
|
2244
|
+
* different subset of bundles and customises agent labels, paths,
|
|
2245
|
+
* and taxonomies via the Group A injection points. Instead the
|
|
2246
|
+
* bundle renders the rule (what to author, when to update it) and
|
|
2247
|
+
* optionally emits a starter page + a checker script.
|
|
2248
|
+
*
|
|
2249
|
+
* Every field is optional. When the whole config is absent the
|
|
2250
|
+
* convention ships **enabled** with the documented default diagrams
|
|
2251
|
+
* path (`docs/src/content/docs/agents/workflows.md`), the default
|
|
2252
|
+
* bundle-path patterns, the hard-requirement phrasing, the starter
|
|
2253
|
+
* page opt-in, and the checker script opt-in.
|
|
2254
|
+
*
|
|
2255
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
2256
|
+
* `diagramsPath`, empty `bundlePathPatterns`, empty /
|
|
2257
|
+
* whitespace-only pattern entry — fail the build at synth time via
|
|
2258
|
+
* `validateWorkflowDiagramsConfig`.
|
|
2259
|
+
*
|
|
2260
|
+
* @see ./bundles/workflow-diagrams.ts#resolveWorkflowDiagrams
|
|
2261
|
+
* @see ./bundles/workflow-diagrams.ts#validateWorkflowDiagramsConfig
|
|
2262
|
+
* @see ./bundles/workflow-diagrams.ts#renderWorkflowDiagramsRuleContent
|
|
2263
|
+
*/
|
|
2264
|
+
interface WorkflowDiagramsConfig {
|
|
2265
|
+
/**
|
|
2266
|
+
* Master switch for the workflow-diagrams convention. When `false`,
|
|
2267
|
+
* the base bundle renders a short stub stating the project does not
|
|
2268
|
+
* enforce the convention; phased-agent bundles skip the
|
|
2269
|
+
* per-workflow "Workflow Diagram" injection and the optional helper
|
|
2270
|
+
* script / starter page are not emitted even if their `emit*`
|
|
2271
|
+
* flags are true.
|
|
2272
|
+
*
|
|
2273
|
+
* Defaults to `true` — the convention is on by default.
|
|
2274
|
+
*/
|
|
2275
|
+
readonly enabled?: boolean;
|
|
2276
|
+
/**
|
|
2277
|
+
* Repo-relative path to the single workflow-diagrams page. The
|
|
2278
|
+
* rendered rule cites this path as the on-disk home of every
|
|
2279
|
+
* Mermaid diagram; the checker script uses it as the sentinel path
|
|
2280
|
+
* that must appear in a change set when any bundle file is
|
|
2281
|
+
* touched.
|
|
2282
|
+
*
|
|
2283
|
+
* Must be a non-empty relative path (no leading `/`).
|
|
2284
|
+
*
|
|
2285
|
+
* Defaults to `docs/src/content/docs/agents/workflows.md`, which
|
|
2286
|
+
* matches the monorepo-wide singleton `/docs` Starlight site every
|
|
2287
|
+
* configulator-managed repo ships.
|
|
2288
|
+
*/
|
|
2289
|
+
readonly diagramsPath?: string;
|
|
2290
|
+
/**
|
|
2291
|
+
* Path patterns (bash-style globs) that identify "bundle files" —
|
|
2292
|
+
* the source files whose edits require the workflow-diagrams page
|
|
2293
|
+
* to be touched in the same change set. Rendered verbatim into
|
|
2294
|
+
* the rule body as a bullet list and emitted into the checker
|
|
2295
|
+
* script when `emitChecker: true`.
|
|
2296
|
+
*
|
|
2297
|
+
* Must be a non-empty array of non-empty strings.
|
|
2298
|
+
*
|
|
2299
|
+
* Defaults to the configulator-wide set covering in-tree bundle
|
|
2300
|
+
* source files, `.claude/agents/**.md` agent prompts, and
|
|
2301
|
+
* `.claude/skills/**.md` skill prompts.
|
|
2302
|
+
*/
|
|
2303
|
+
readonly bundlePathPatterns?: ReadonlyArray<string>;
|
|
2304
|
+
/**
|
|
2305
|
+
* Whether the convention emits a minimal starter diagrams page to
|
|
2306
|
+
* disk at `<diagramsPath>`. The starter carries the expected
|
|
2307
|
+
* structure (master diagram placeholder, one example agent section,
|
|
2308
|
+
* legend) so consumers adopting the convention on a green-field
|
|
2309
|
+
* repo have a working template to extend.
|
|
2310
|
+
*
|
|
2311
|
+
* Disabled by default because the page is hand-authored — an
|
|
2312
|
+
* emitted stub would conflict with existing content on repos
|
|
2313
|
+
* adopting the convention late.
|
|
2314
|
+
*/
|
|
2315
|
+
readonly emitStarterDiagram?: boolean;
|
|
2316
|
+
/**
|
|
2317
|
+
* Whether the convention emits the
|
|
2318
|
+
* `.claude/procedures/check-workflow-diagrams.sh` helper to disk.
|
|
2319
|
+
* The script walks a newline-separated list of changed files (from
|
|
2320
|
+
* stdin or positional arguments) and fails non-zero when any file
|
|
2321
|
+
* matches a bundle-path pattern but `<diagramsPath>` is not also
|
|
2322
|
+
* in the list.
|
|
2323
|
+
*
|
|
2324
|
+
* Disabled by default — the helper is opt-in for repos that want a
|
|
2325
|
+
* hard CI gate or pre-commit hook. Consumers that prefer to
|
|
2326
|
+
* enforce the rule via review discipline alone can leave it off.
|
|
2327
|
+
*/
|
|
2328
|
+
readonly emitChecker?: boolean;
|
|
2329
|
+
/**
|
|
2330
|
+
* Whether the rendered rule body phrases the diagram update as a
|
|
2331
|
+
* **hard requirement** (`MUST`) or a **strong recommendation**
|
|
2332
|
+
* (`SHOULD`). Defaults to `true` — the hard-requirement phrasing
|
|
2333
|
+
* matches the "enforced via CI" posture the convention is
|
|
2334
|
+
* designed for. Consumers that treat diagrams as aspirational can
|
|
2335
|
+
* soften the phrasing by setting this to `false`.
|
|
2336
|
+
*/
|
|
2337
|
+
readonly requireDiagramUpdate?: boolean;
|
|
2338
|
+
}
|
|
2339
|
+
/*******************************************************************************
|
|
2340
|
+
*
|
|
2341
|
+
* Issue Templates Config
|
|
2342
|
+
*
|
|
2343
|
+
******************************************************************************/
|
|
2344
|
+
/**
|
|
2345
|
+
* Issue-templates convention consumed by the `base` bundle and every
|
|
2346
|
+
* phased-agent bundle that files downstream issues. Documents the
|
|
2347
|
+
* single hand-authored reference page that carries one canonical
|
|
2348
|
+
* `gh issue create` recipe per downstream phase label, and enforces
|
|
2349
|
+
* the **reference-don't-inline** rule: bundle rules and agent prompts
|
|
2350
|
+
* cite the matching section of that page instead of duplicating a
|
|
2351
|
+
* full `gh issue create --title ... --label ... --body ...`
|
|
2352
|
+
* invocation.
|
|
2353
|
+
*
|
|
2354
|
+
* The convention is deliberately content-free — configulator cannot
|
|
2355
|
+
* ship meaningful templates because each consuming repo enables a
|
|
2356
|
+
* different subset of bundles and customises phase labels, tier
|
|
2357
|
+
* taxonomies, and body conventions via the Group A injection points.
|
|
2358
|
+
* Instead the bundle renders the rule (what to author, when to cite
|
|
2359
|
+
* it) and optionally emits a starter page + a lint script.
|
|
2360
|
+
*
|
|
2361
|
+
* Every field is optional. When the whole config is absent the
|
|
2362
|
+
* convention ships **enabled** with the documented default templates
|
|
2363
|
+
* path (`docs/src/content/docs/agents/issue-templates.md`), the
|
|
2364
|
+
* default bundle-path patterns, the hard-requirement phrasing, and
|
|
2365
|
+
* both the starter page and the lint script opt-in.
|
|
2366
|
+
*
|
|
2367
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
2368
|
+
* `templatesPath`, empty `bundlePathPatterns`, empty /
|
|
2369
|
+
* whitespace-only pattern entry — fail the build at synth time via
|
|
2370
|
+
* `validateIssueTemplatesConfig`.
|
|
2371
|
+
*
|
|
2372
|
+
* @see ./bundles/issue-templates.ts#resolveIssueTemplates
|
|
2373
|
+
* @see ./bundles/issue-templates.ts#validateIssueTemplatesConfig
|
|
2374
|
+
* @see ./bundles/issue-templates.ts#renderIssueTemplatesRuleContent
|
|
2375
|
+
*/
|
|
2376
|
+
interface IssueTemplatesConfig {
|
|
2377
|
+
/**
|
|
2378
|
+
* Master switch for the issue-templates convention. When `false`,
|
|
2379
|
+
* the base bundle renders a short stub stating the project does not
|
|
2380
|
+
* enforce the convention; phased-agent bundles skip the per-workflow
|
|
2381
|
+
* "Issue Templates" injection and the optional helper script /
|
|
2382
|
+
* starter page are not emitted even if their `emit*` flags are
|
|
2383
|
+
* true.
|
|
2384
|
+
*
|
|
2385
|
+
* Defaults to `true` — the convention is on by default.
|
|
2386
|
+
*/
|
|
2387
|
+
readonly enabled?: boolean;
|
|
2388
|
+
/**
|
|
2389
|
+
* Repo-relative path to the single issue-templates reference page.
|
|
2390
|
+
* The rendered rule cites this path as the on-disk home of every
|
|
2391
|
+
* `gh issue create` recipe; the lint script uses it as the
|
|
2392
|
+
* allow-listed sentinel path that is permitted to contain full
|
|
2393
|
+
* recipes.
|
|
2394
|
+
*
|
|
2395
|
+
* Must be a non-empty relative path (no leading `/`).
|
|
2396
|
+
*
|
|
2397
|
+
* Defaults to `docs/src/content/docs/agents/issue-templates.md`,
|
|
2398
|
+
* which matches the monorepo-wide singleton `/docs` Starlight site
|
|
2399
|
+
* every configulator-managed repo ships.
|
|
2400
|
+
*/
|
|
2401
|
+
readonly templatesPath?: string;
|
|
2402
|
+
/**
|
|
2403
|
+
* Path patterns (bash-style globs) that identify "bundle files" —
|
|
2404
|
+
* the source files composing agent prompts and skill instructions.
|
|
2405
|
+
* Rendered verbatim into the rule body as a bullet list and emitted
|
|
2406
|
+
* into the lint script when `emitChecker: true`.
|
|
2407
|
+
*
|
|
2408
|
+
* Must be a non-empty array of non-empty strings.
|
|
2409
|
+
*
|
|
2410
|
+
* Defaults to the configulator-wide set covering in-tree bundle
|
|
2411
|
+
* source files, `.claude/agents/**.md` agent prompts, and
|
|
2412
|
+
* `.claude/skills/**.md` skill prompts.
|
|
2413
|
+
*/
|
|
2414
|
+
readonly bundlePathPatterns?: ReadonlyArray<string>;
|
|
2415
|
+
/**
|
|
2416
|
+
* Whether the convention emits the
|
|
2417
|
+
* `.claude/procedures/check-issue-templates.sh` lint to disk. The
|
|
2418
|
+
* script walks a newline-separated list of changed files (from
|
|
2419
|
+
* stdin or positional arguments) and fails non-zero when any file
|
|
2420
|
+
* matches a bundle-path pattern and contains a multi-line
|
|
2421
|
+
* `gh issue create ... --title` invocation.
|
|
2422
|
+
*
|
|
2423
|
+
* Disabled by default — the lint is opt-in for repos that want a
|
|
2424
|
+
* hard CI gate or pre-commit hook. Consumers that prefer to
|
|
2425
|
+
* enforce the rule via review discipline alone can leave it off.
|
|
2426
|
+
*/
|
|
2427
|
+
readonly emitChecker?: boolean;
|
|
2428
|
+
/**
|
|
2429
|
+
* Whether the convention emits a minimal starter templates page to
|
|
2430
|
+
* disk at `<templatesPath>`. The starter carries the expected
|
|
2431
|
+
* structure (how-to-use preamble + one example
|
|
2432
|
+
* `## Template: <phase-label>` section) so consumers adopting the
|
|
2433
|
+
* convention on a green-field repo have a working template to
|
|
2434
|
+
* extend.
|
|
2435
|
+
*
|
|
2436
|
+
* Disabled by default because the page is hand-authored — an
|
|
2437
|
+
* emitted stub would conflict with existing content on repos
|
|
2438
|
+
* adopting the convention late.
|
|
2439
|
+
*/
|
|
2440
|
+
readonly emitStarterDoc?: boolean;
|
|
2441
|
+
/**
|
|
2442
|
+
* Whether the rendered rule body phrases the reference-don't-inline
|
|
2443
|
+
* rule as a **hard requirement** (`MUST`) or a **strong
|
|
2444
|
+
* recommendation** (`SHOULD`). Defaults to `true` — the
|
|
2445
|
+
* hard-requirement phrasing matches the consolidation goal the
|
|
2446
|
+
* convention is designed for. Consumers that treat consolidation
|
|
2447
|
+
* as aspirational can soften the phrasing by setting this to
|
|
2448
|
+
* `false`.
|
|
2449
|
+
*/
|
|
2450
|
+
readonly requireReference?: boolean;
|
|
2451
|
+
}
|
|
2452
|
+
/*******************************************************************************
|
|
2453
|
+
*
|
|
2454
|
+
* Scheduled Tasks Config
|
|
2455
|
+
*
|
|
2456
|
+
******************************************************************************/
|
|
2457
|
+
/**
|
|
2458
|
+
* Partial override for a single default scheduled-task entry keyed by
|
|
2459
|
+
* `taskId`. Every field is optional — only supplied fields replace the
|
|
2460
|
+
* default. Use `enabled: true` to opt a task in without otherwise
|
|
2461
|
+
* changing its shape.
|
|
2462
|
+
*
|
|
2463
|
+
* @see ScheduledTasksConfig
|
|
2464
|
+
* @see ./bundles/scheduled-tasks.ts#DEFAULT_SCHEDULED_TASK_ENTRIES
|
|
2465
|
+
*/
|
|
2466
|
+
interface ScheduledTaskOverride {
|
|
2467
|
+
/** Whether the task is emitted to disk. Defaults to the registry entry's value (normally `false`). */
|
|
2468
|
+
readonly enabled?: boolean;
|
|
2469
|
+
/**
|
|
2470
|
+
* Cron expression. Set to `null` to mean manual-only. Default is
|
|
2471
|
+
* manual-only; every configulator default entry ships without a cron.
|
|
2472
|
+
*/
|
|
2473
|
+
readonly cron?: string | null;
|
|
2474
|
+
/** Recommended model label surfaced on frontmatter and the rendered table. */
|
|
2475
|
+
readonly recommendedModel?: "opus" | "sonnet" | "haiku";
|
|
2476
|
+
/** One-line description for the rendered table and SKILL.md frontmatter. */
|
|
2477
|
+
readonly description?: string;
|
|
2478
|
+
/**
|
|
2479
|
+
* Exact `type:*` label values (without the `type:` prefix) the
|
|
2480
|
+
* worker should pick up. When set, replaces the default entry's
|
|
2481
|
+
* single `typeLabel` with a multi-type filter (useful for the
|
|
2482
|
+
* routing-bucket `worker-issue` which covers
|
|
2483
|
+
* `feat/fix/chore/refactor/docs/release/hotfix`). Empty array not
|
|
2484
|
+
* allowed; use `undefined` to keep the default.
|
|
2485
|
+
*/
|
|
2486
|
+
readonly typeLabels?: ReadonlyArray<string>;
|
|
2487
|
+
/**
|
|
2488
|
+
* Exact phase-label values the worker filters on. When set, takes
|
|
2489
|
+
* precedence over `phasePrefix` (prefix-match is dropped). Empty
|
|
2490
|
+
* array not allowed; use `undefined` to keep the default.
|
|
2491
|
+
*/
|
|
2492
|
+
readonly phaseLabels?: ReadonlyArray<string>;
|
|
2493
|
+
}
|
|
2494
|
+
/**
|
|
2495
|
+
* Fully consumer-authored scheduled-task entry. Entries whose `taskId`
|
|
2496
|
+
* collides with a built-in default **replace** the default outright;
|
|
2497
|
+
* entries with a new `taskId` are appended to the registry.
|
|
2498
|
+
*
|
|
2499
|
+
* @see ScheduledTasksConfig
|
|
2500
|
+
*/
|
|
2501
|
+
interface ScheduledTaskEntry {
|
|
2502
|
+
/**
|
|
2503
|
+
* Unique task directory name. Emitted under
|
|
2504
|
+
* `<root>/<taskId>/SKILL.md`. Every `taskId` must be unique within
|
|
2505
|
+
* the resolved registry.
|
|
2506
|
+
*/
|
|
2507
|
+
readonly taskId: string;
|
|
2508
|
+
/** Target sub-agent name (filename stem under `.claude/agents/`). */
|
|
2509
|
+
readonly agent: string;
|
|
2510
|
+
/** Human-readable agent label for rendered tables / frontmatter. Defaults to `agent`. */
|
|
2511
|
+
readonly agentLabel?: string;
|
|
2512
|
+
/** GitHub `type:*` label value (without the `type:` prefix) that gates which issues this worker picks up. Ignored when `typeLabels` is set. */
|
|
2513
|
+
readonly typeLabel: string;
|
|
2514
|
+
/**
|
|
2515
|
+
* Exact `type:*` label values (without the `type:` prefix) the
|
|
2516
|
+
* worker picks up. When set, replaces the single `typeLabel` with
|
|
2517
|
+
* a multi-type filter (e.g. the routing-bucket `worker-issue`
|
|
2518
|
+
* covers `feat/fix/chore/refactor/docs/release/hotfix`). Empty
|
|
2519
|
+
* array not allowed.
|
|
2520
|
+
*/
|
|
2521
|
+
readonly typeLabels?: ReadonlyArray<string>;
|
|
2522
|
+
/** Optional phase-label prefix (e.g. `research:`). When set, the worker filters on both `type:<typeLabel>` and any `<phasePrefix>*` label. Ignored when `phaseLabels` is set. */
|
|
2523
|
+
readonly phasePrefix?: string;
|
|
2524
|
+
/**
|
|
2525
|
+
* Exact phase-label values the worker filters on (e.g.
|
|
2526
|
+
* `["req:write"]` for a writer that only picks up issues whose
|
|
2527
|
+
* phase label is exactly `req:write`). When set, takes precedence
|
|
2528
|
+
* over `phasePrefix`. Empty array not allowed.
|
|
2529
|
+
*/
|
|
2530
|
+
readonly phaseLabels?: ReadonlyArray<string>;
|
|
2531
|
+
/** Recommended model label surfaced on frontmatter and the rendered table. */
|
|
2532
|
+
readonly recommendedModel: "opus" | "sonnet" | "haiku";
|
|
2533
|
+
/** Whether the task is emitted to disk. Defaults to `false` — opt-in. */
|
|
2534
|
+
readonly enabled?: boolean;
|
|
2535
|
+
/** Cron expression. Defaults to `null` (manual-only). */
|
|
2536
|
+
readonly cron?: string | null;
|
|
2537
|
+
/** One-line description for the rendered table and SKILL.md frontmatter. */
|
|
2538
|
+
readonly description?: string;
|
|
2539
|
+
}
|
|
2540
|
+
/**
|
|
2541
|
+
* Per-agent scheduled-task configuration consumed by the `orchestrator`
|
|
2542
|
+
* bundle. Drives the per-agent worker layout at
|
|
2543
|
+
* `<root>/<taskId>/SKILL.md` — one task per agent type with its own
|
|
2544
|
+
* label filter, recommended model, and opt-in enablement.
|
|
2545
|
+
*
|
|
2546
|
+
* The pattern mirrors vortex-management's `.claude/scheduled-tasks/`
|
|
2547
|
+
* layout: splitting workers by type lets expensive research agents run
|
|
2548
|
+
* on a different cadence than cheap synthesis agents, and disabling a
|
|
2549
|
+
* whole category is a one-line toggle instead of label surgery.
|
|
2550
|
+
*
|
|
2551
|
+
* Every task ships **disabled by default**. Consumers opt in
|
|
2552
|
+
* explicitly; the generated repo contains no scheduled-task files
|
|
2553
|
+
* unless at least one task is enabled.
|
|
2554
|
+
*
|
|
2555
|
+
* Every field is optional. When the whole config is absent the
|
|
2556
|
+
* scheduled-tasks subsystem is enabled but no task is emitted (every
|
|
2557
|
+
* default is disabled).
|
|
2558
|
+
*
|
|
2559
|
+
* Malformed configs — unknown model value, empty `taskId` / `agent` /
|
|
2560
|
+
* `typeLabel`, duplicate `taskId` inside `tasks`, override referencing
|
|
2561
|
+
* an unknown default `taskId` — fail the build at synth time via
|
|
2562
|
+
* `validateScheduledTasksConfig`.
|
|
2563
|
+
*
|
|
2564
|
+
* @see ScheduledTaskEntry
|
|
2565
|
+
* @see ScheduledTaskOverride
|
|
2566
|
+
* @see ./bundles/scheduled-tasks.ts#resolveScheduledTasks
|
|
2567
|
+
* @see ./bundles/scheduled-tasks.ts#validateScheduledTasksConfig
|
|
2568
|
+
* @see ./bundles/scheduled-tasks.ts#renderScheduledTasksSection
|
|
2569
|
+
*/
|
|
2570
|
+
interface ScheduledTasksConfig {
|
|
2571
|
+
/**
|
|
2572
|
+
* Master switch for the scheduled-tasks subsystem. When `false`, no
|
|
2573
|
+
* `<root>/<taskId>/SKILL.md` files are emitted regardless of
|
|
2574
|
+
* individual task overrides. Defaults to `true` — the subsystem is
|
|
2575
|
+
* on, but every default task is still disabled.
|
|
2576
|
+
*/
|
|
2577
|
+
readonly enabled?: boolean;
|
|
2578
|
+
/**
|
|
2579
|
+
* Root directory (relative to the repo root) for emitted
|
|
2580
|
+
* scheduled-task files. Each task renders to
|
|
2581
|
+
* `<root>/<taskId>/SKILL.md`.
|
|
2582
|
+
*
|
|
2583
|
+
* Must be a non-empty relative path (no leading `/`). Defaults to
|
|
2584
|
+
* `.claude/scheduled-tasks`.
|
|
2585
|
+
*/
|
|
2586
|
+
readonly root?: string;
|
|
2587
|
+
/**
|
|
2588
|
+
* Per-task overrides keyed by the built-in `taskId`. Use this to
|
|
2589
|
+
* flip the `enabled` toggle on one or more default tasks, override
|
|
2590
|
+
* the cron expression, or change the recommended model without
|
|
2591
|
+
* re-declaring the rest of the entry.
|
|
2592
|
+
*
|
|
2593
|
+
* Every key must match a built-in default `taskId`; unknown keys
|
|
2594
|
+
* fail the build. Use `tasks` to append new entries.
|
|
2595
|
+
*/
|
|
2596
|
+
readonly overrides?: Readonly<Record<string, ScheduledTaskOverride>>;
|
|
2597
|
+
/**
|
|
2598
|
+
* Fully consumer-authored task entries. Entries whose `taskId`
|
|
2599
|
+
* matches a built-in default **replace** the default wholesale;
|
|
2600
|
+
* entries with a new `taskId` are appended.
|
|
2601
|
+
*
|
|
2602
|
+
* Every `taskId` must be unique within this list (duplicate
|
|
2603
|
+
* `taskId`s inside `tasks` fail the build). Use `overrides` to
|
|
2604
|
+
* tweak a single field without re-declaring the rest of the entry.
|
|
2605
|
+
*/
|
|
2606
|
+
readonly tasks?: ReadonlyArray<ScheduledTaskEntry>;
|
|
2607
|
+
}
|
|
2608
|
+
/*******************************************************************************
|
|
2609
|
+
*
|
|
2610
|
+
* AgentConfig Options
|
|
2611
|
+
*
|
|
2612
|
+
******************************************************************************/
|
|
2613
|
+
/**
|
|
2614
|
+
* Options for the AgentConfig component.
|
|
2615
|
+
*/
|
|
2616
|
+
interface AgentConfigOptions {
|
|
2617
|
+
/**
|
|
2618
|
+
* Target platforms to generate configuration for.
|
|
2619
|
+
* @default [AGENT_PLATFORM.CURSOR, AGENT_PLATFORM.CLAUDE]
|
|
2620
|
+
*/
|
|
2621
|
+
readonly platforms?: ReadonlyArray<AgentPlatform>;
|
|
2622
|
+
/**
|
|
2623
|
+
* Additional agent rules to generate alongside auto-detected and bundled rules.
|
|
2624
|
+
* Custom rules override bundled rules of the same name.
|
|
2625
|
+
*/
|
|
2626
|
+
readonly rules?: ReadonlyArray<AgentRule>;
|
|
2627
|
+
/**
|
|
2628
|
+
* Additional skills to generate.
|
|
2629
|
+
*/
|
|
2630
|
+
readonly skills?: ReadonlyArray<AgentSkill>;
|
|
2631
|
+
/**
|
|
2632
|
+
* Custom sub-agent definitions.
|
|
2633
|
+
*/
|
|
2634
|
+
readonly subAgents?: ReadonlyArray<AgentSubAgent>;
|
|
2635
|
+
/**
|
|
2636
|
+
* Custom procedure definitions (executable shell scripts).
|
|
2637
|
+
*/
|
|
2638
|
+
readonly procedures?: ReadonlyArray<AgentProcedure>;
|
|
2639
|
+
/**
|
|
2640
|
+
* MCP server configurations. Cross-platform — rendered to the appropriate
|
|
2641
|
+
* config file for each platform.
|
|
2642
|
+
*/
|
|
2643
|
+
readonly mcpServers?: Readonly<Record<string, McpServerConfig>>;
|
|
2644
|
+
/**
|
|
2645
|
+
* Whether to automatically detect and include context-aware rule bundles
|
|
2646
|
+
* based on project introspection.
|
|
2647
|
+
* @default true
|
|
2648
|
+
*/
|
|
2649
|
+
readonly autoDetectBundles?: boolean;
|
|
2650
|
+
/**
|
|
2651
|
+
* Explicit list of bundle names to include, regardless of auto-detection.
|
|
2652
|
+
* @example ['vitest', 'aws-cdk']
|
|
2653
|
+
*/
|
|
2654
|
+
readonly includeBundles?: ReadonlyArray<string>;
|
|
2655
|
+
/**
|
|
2656
|
+
* Bundle names to exclude even if auto-detection would include them.
|
|
2657
|
+
* @example ['jest']
|
|
2658
|
+
*/
|
|
2659
|
+
readonly excludeBundles?: ReadonlyArray<string>;
|
|
2660
|
+
/**
|
|
2661
|
+
* Whether to include the base rule set (project-overview, general conventions).
|
|
2662
|
+
* @default true
|
|
2663
|
+
*/
|
|
2664
|
+
readonly includeBaseRules?: boolean;
|
|
2665
|
+
/**
|
|
2666
|
+
* Names of individual rules to exclude from any source.
|
|
2667
|
+
*/
|
|
2668
|
+
readonly excludeRules?: ReadonlyArray<string>;
|
|
2669
|
+
/**
|
|
2670
|
+
* Additional content to append to existing rules (from bundles or custom rules).
|
|
2671
|
+
* Keys are rule names, values are markdown content appended after a horizontal rule.
|
|
2672
|
+
* Use this to supplement bundle rules with project-specific additions without
|
|
2673
|
+
* replacing the entire rule.
|
|
2674
|
+
*
|
|
2675
|
+
* @example
|
|
2676
|
+
* ```ts
|
|
2677
|
+
* ruleExtensions: {
|
|
2678
|
+
* 'typescript-conventions': '## Additional Conventions\n\n- Use branded types for IDs',
|
|
2679
|
+
* }
|
|
2680
|
+
* ```
|
|
2681
|
+
*/
|
|
2682
|
+
readonly ruleExtensions?: Readonly<Record<string, string>>;
|
|
2683
|
+
/**
|
|
2684
|
+
* Claude Code settings.json configuration.
|
|
2685
|
+
* Generated to .claude/settings.json (committed, team-shared).
|
|
2686
|
+
*/
|
|
2687
|
+
readonly claudeSettings?: ClaudeSettingsConfig;
|
|
2688
|
+
/**
|
|
2689
|
+
* Cursor-specific configuration. Generates .cursor/hooks.json for
|
|
2690
|
+
* lifecycle hooks and .cursorignore / .cursorindexingignore for
|
|
2691
|
+
* file visibility control.
|
|
2692
|
+
*/
|
|
2693
|
+
readonly cursorSettings?: CursorSettingsConfig;
|
|
2694
|
+
/**
|
|
2695
|
+
* Overrides for the output-path roots used by agent bundles
|
|
2696
|
+
* (requirements, BCM, profiles, meetings, research). Unset fields
|
|
2697
|
+
* fall back to the defaults captured in
|
|
2698
|
+
* `bundles/paths.ts#DEFAULT_AGENT_PATHS`.
|
|
2699
|
+
*
|
|
2700
|
+
* This option is the first of the Group A framework injection
|
|
2701
|
+
* points from epic #414. Per-project propagation of these values
|
|
2702
|
+
* into bundle rule content lands in a follow-up — setting it today
|
|
2703
|
+
* does not yet alter generated rules.
|
|
2704
|
+
*/
|
|
2705
|
+
readonly paths?: AgentPathsConfig;
|
|
2706
|
+
/**
|
|
2707
|
+
* Project-specific priority-detection rules. Each rule declares a
|
|
2708
|
+
* match predicate (labels, title regex, body regex, or explicit
|
|
2709
|
+
* issue numbers) and a target `priority:*` tier.
|
|
2710
|
+
*
|
|
2711
|
+
* When non-empty, the `base` bundle renders a "Project-specific
|
|
2712
|
+
* priority rules" subsection into the `issue-label-conventions`
|
|
2713
|
+
* rule. Precedence is **first match wins**; the bundle's default
|
|
2714
|
+
* inference heuristics act as the fallback when no rule matches.
|
|
2715
|
+
*
|
|
2716
|
+
* @see PriorityRule
|
|
2717
|
+
* @see ./bundles/priority-rules.ts#renderPriorityRulesSection
|
|
2718
|
+
*/
|
|
2719
|
+
readonly priorityRules?: ReadonlyArray<PriorityRule>;
|
|
2720
|
+
/**
|
|
2721
|
+
* Focus-scoring configuration. Declares the path to the consuming
|
|
2722
|
+
* repo's `focus.json` file, score thresholds, and the
|
|
2723
|
+
* agent-expansion rules that govern what agents may append to the
|
|
2724
|
+
* file.
|
|
2725
|
+
*
|
|
2726
|
+
* When set, the `base` bundle appends a "Focus scoring"
|
|
2727
|
+
* subsection to the `issue-label-conventions` rule that teaches
|
|
2728
|
+
* agents (a) how to read `focus.json`, (b) how focus weight
|
|
2729
|
+
* interacts with the `priority:*` taxonomy, and (c) the
|
|
2730
|
+
* agent-driven expansion contract. The actual `focus.json` file
|
|
2731
|
+
* is authored and curated in the consuming repo — configulator
|
|
2732
|
+
* ships the schema and agent instructions only.
|
|
2733
|
+
*
|
|
2734
|
+
* @see FocusConfig
|
|
2735
|
+
* @see FocusArea
|
|
2736
|
+
* @see AgentExpansionRules
|
|
2737
|
+
* @see ./bundles/focus.ts#renderFocusSection
|
|
2738
|
+
*/
|
|
2739
|
+
readonly focus?: FocusConfig;
|
|
2740
|
+
/**
|
|
2741
|
+
* Meeting-analysis injection points — typed configs the
|
|
2742
|
+
* `meeting-analysis` bundle consults when classifying, routing, and
|
|
2743
|
+
* templating meetings. Supplies the meeting-type taxonomy, the
|
|
2744
|
+
* area → doc-root routing map, and the agenda-template root used
|
|
2745
|
+
* by the (future) `agenda` bundle.
|
|
2746
|
+
*
|
|
2747
|
+
* When `meetingTypes` is non-empty, the `meeting-analysis` bundle
|
|
2748
|
+
* appends a "Recognized meeting types" subsection to the
|
|
2749
|
+
* `meeting-processing-workflow` rule. When `meetingAreas` is
|
|
2750
|
+
* non-empty, it appends an "Area → doc-root mapping" subsection.
|
|
2751
|
+
* When both are empty or unset, the generated rule content is
|
|
2752
|
+
* unchanged from the no-config baseline.
|
|
2753
|
+
*
|
|
2754
|
+
* @see MeetingsConfig
|
|
2755
|
+
* @see MeetingType
|
|
2756
|
+
* @see MeetingArea
|
|
2757
|
+
* @see ./bundles/meeting-types.ts#renderMeetingTypesSection
|
|
2758
|
+
*/
|
|
2759
|
+
readonly meetings?: MeetingsConfig;
|
|
2760
|
+
/**
|
|
2761
|
+
* Framework injection points for source-tier customization and
|
|
2762
|
+
* custom doc sections.
|
|
2763
|
+
*
|
|
2764
|
+
* - `sourceTierExamples` — domain-specific examples injected under
|
|
2765
|
+
* T1 / T2 / T3 / T4 in the base bundle's "Source Quality &
|
|
2766
|
+
* Verification" rule.
|
|
2767
|
+
* - `customDocSections` — consumer-supplied section templates that
|
|
2768
|
+
* render verbatim after an existing section heading in a target
|
|
2769
|
+
* bundle's rule content.
|
|
2770
|
+
*
|
|
2771
|
+
* Named feature toggles (`consortium-model`, `stealth-mode`, etc.)
|
|
2772
|
+
* are intentionally out of scope here — build those on top of
|
|
2773
|
+
* `customDocSections` inside the consuming repo's projen config.
|
|
2774
|
+
*
|
|
2775
|
+
* @see AgentFeaturesConfig
|
|
2776
|
+
* @see SourceTierExamples
|
|
2777
|
+
* @see CustomDocSection
|
|
2778
|
+
* @see ./bundles/features.ts
|
|
2779
|
+
*/
|
|
2780
|
+
readonly features?: AgentFeaturesConfig;
|
|
2781
|
+
/**
|
|
2782
|
+
* Funnel-tier configuration consumed by the `orchestrator` bundle.
|
|
2783
|
+
* Drives the multi-key dispatch sort (priority desc → tier asc →
|
|
2784
|
+
* issue number asc) that keeps research feeders from starving.
|
|
2785
|
+
*
|
|
2786
|
+
* When the whole config is omitted the orchestrator ships its
|
|
2787
|
+
* built-in default tier table. Supply `customTypes` to register
|
|
2788
|
+
* additional agent types or override the tier of an existing entry;
|
|
2789
|
+
* supply `tiers` to replace the default list wholesale.
|
|
2790
|
+
*
|
|
2791
|
+
* Malformed configs — tier outside 0–4, empty `type`, duplicate
|
|
2792
|
+
* entries inside a single list — fail the build at synth time via
|
|
2793
|
+
* the orchestrator bundle's tier validator.
|
|
2794
|
+
*
|
|
2795
|
+
* @see AgentTierConfig
|
|
2796
|
+
* @see AgentTierEntry
|
|
2797
|
+
* @see ./bundles/tiers.ts#resolveAgentTiers
|
|
2798
|
+
* @see ./bundles/tiers.ts#validateAgentTierConfig
|
|
2799
|
+
*/
|
|
2800
|
+
readonly tiers?: AgentTierConfig;
|
|
2801
|
+
/**
|
|
2802
|
+
* Scope-gate configuration consumed by the `orchestrator` bundle.
|
|
2803
|
+
* Rejects oversized issues at dispatch and instructs the orchestrator
|
|
2804
|
+
* to decompose them into phased sub-issues instead of claiming a
|
|
2805
|
+
* worker session for a multi-hour task.
|
|
2806
|
+
*
|
|
2807
|
+
* When the whole config is omitted, the orchestrator ships with
|
|
2808
|
+
* openhi's published defaults baked in (small: ≤3 AC + ≤2 sources;
|
|
2809
|
+
* medium: ≤6 AC + ≤5 sources; auto-file off).
|
|
2810
|
+
*
|
|
2811
|
+
* Supply `acceptanceCriteria` / `sources` to override the
|
|
2812
|
+
* per-axis thresholds, `decompositionTemplate` to customize the
|
|
2813
|
+
* proposal comment body, or `autoFile: true` to have the
|
|
2814
|
+
* orchestrator file the proposed sub-issues automatically.
|
|
2815
|
+
*
|
|
2816
|
+
* Malformed configs — negative or non-integer thresholds, or
|
|
2817
|
+
* `mediumMax <= smallMax` — fail the build at synth time via
|
|
2818
|
+
* `validateScopeGateConfig`.
|
|
2819
|
+
*
|
|
2820
|
+
* @see ScopeGateConfig
|
|
2821
|
+
* @see ScopeGateThresholds
|
|
2822
|
+
* @see ./bundles/scope-gate.ts#resolveScopeGate
|
|
2823
|
+
* @see ./bundles/scope-gate.ts#validateScopeGateConfig
|
|
2824
|
+
*/
|
|
2825
|
+
readonly scopeGate?: ScopeGateConfig;
|
|
2826
|
+
/**
|
|
2827
|
+
* Run-ratio configuration consumed by the `orchestrator` bundle.
|
|
2828
|
+
* Drives the dispatch-to-housekeeping cadence — every `(ratio + 1)`th
|
|
2829
|
+
* run batches PR review + maintenance scan instead of dispatching
|
|
2830
|
+
* fresh issue work, preventing review and maintenance backlog drift
|
|
2831
|
+
* on always-on agent pipelines.
|
|
2832
|
+
*
|
|
2833
|
+
* When the whole config is omitted, the orchestrator ships with
|
|
2834
|
+
* openhi's published 4:1 defaults (four dispatch runs, one
|
|
2835
|
+
* housekeeping run, state file at
|
|
2836
|
+
* `.claude/state/orchestrator-runs.json`, `opus` / `sonnet`
|
|
2837
|
+
* recommended models).
|
|
2838
|
+
*
|
|
2839
|
+
* Supply `ratio` to change the cadence, `stateFilePath` to move
|
|
2840
|
+
* the counter file, `dispatchModel` / `housekeepingModel` to
|
|
2841
|
+
* override the recommended-model labels rendered into the
|
|
2842
|
+
* orchestrator-conventions rule, or `enabled: false` to disable
|
|
2843
|
+
* run-ratio batching entirely.
|
|
2844
|
+
*
|
|
2845
|
+
* Malformed configs — non-integer or non-positive `ratio`, empty
|
|
2846
|
+
* or absolute `stateFilePath` — fail the build at synth time via
|
|
2847
|
+
* `validateRunRatioConfig`.
|
|
2848
|
+
*
|
|
2849
|
+
* @see RunRatioConfig
|
|
2850
|
+
* @see ./bundles/run-ratio.ts#resolveRunRatio
|
|
2851
|
+
* @see ./bundles/run-ratio.ts#validateRunRatioConfig
|
|
2852
|
+
*/
|
|
2853
|
+
readonly runRatio?: RunRatioConfig;
|
|
2854
|
+
/**
|
|
2855
|
+
* Pre-flight PR merge configuration consumed by the `orchestrator`
|
|
2856
|
+
* bundle. Drives the pre-flight sweep (vortex step 0b) that merges
|
|
2857
|
+
* eligible PRs before the triage walk reads dependency state,
|
|
2858
|
+
* preventing stale-dependency thrashing on always-on pipelines.
|
|
2859
|
+
*
|
|
2860
|
+
* When the whole config is omitted, the orchestrator ships with
|
|
2861
|
+
* vortex's published defaults (pre-flight enabled, delegated to
|
|
2862
|
+
* the `pr-reviewer` sub-agent, squash merges, linked-issue
|
|
2863
|
+
* keyword required).
|
|
2864
|
+
*
|
|
2865
|
+
* Supply `enabled: false` to disable pre-flight entirely,
|
|
2866
|
+
* `delegateToPrReviewer: false` to merge inline without delegation,
|
|
2867
|
+
* `mergeMethod` to switch to merge-commit or rebase strategies,
|
|
2868
|
+
* `requireLinkedIssue: false` to include PRs without a
|
|
2869
|
+
* `Closes/Fixes/Resolves` keyword, or `eligibleLabels` to gate
|
|
2870
|
+
* pre-flight on consumer-declared opt-in labels.
|
|
2871
|
+
*
|
|
2872
|
+
* Malformed configs — unknown `mergeMethod`, empty /
|
|
2873
|
+
* whitespace-only `eligibleLabels` entries — fail the build at
|
|
2874
|
+
* synth time via `validatePreflightPrConfig`.
|
|
2875
|
+
*
|
|
2876
|
+
* @see PreflightPrConfig
|
|
2877
|
+
* @see ./bundles/preflight-pr.ts#resolvePreflightPr
|
|
2878
|
+
* @see ./bundles/preflight-pr.ts#validatePreflightPrConfig
|
|
2879
|
+
*/
|
|
2880
|
+
readonly preflightPr?: PreflightPrConfig;
|
|
2881
|
+
/**
|
|
2882
|
+
* Scheduled-tasks configuration consumed by the `orchestrator`
|
|
2883
|
+
* bundle. Drives the per-agent worker layout at
|
|
2884
|
+
* `<root>/<taskId>/SKILL.md` — one task per agent type with its own
|
|
2885
|
+
* label filter, recommended model, and opt-in enablement.
|
|
2886
|
+
*
|
|
2887
|
+
* Every default task is **disabled by default**. Consumers opt in
|
|
2888
|
+
* explicitly via `overrides.<taskId>.enabled = true`; the generated
|
|
2889
|
+
* repo contains no scheduled-task files until at least one task is
|
|
2890
|
+
* enabled.
|
|
2891
|
+
*
|
|
2892
|
+
* Supply `overrides` to flip `enabled`, cron, or model on a default
|
|
2893
|
+
* task; supply `tasks` to add new entries or replace defaults
|
|
2894
|
+
* wholesale; supply `root` to change the output directory; supply
|
|
2895
|
+
* `enabled: false` on the whole config to disable the subsystem
|
|
2896
|
+
* regardless of individual overrides.
|
|
2897
|
+
*
|
|
2898
|
+
* Malformed configs — unknown model, empty `taskId` / `agent` /
|
|
2899
|
+
* `typeLabel`, duplicate `taskId` in `tasks`, override referencing
|
|
2900
|
+
* an unknown default `taskId` — fail the build at synth time via
|
|
2901
|
+
* `validateScheduledTasksConfig`.
|
|
2902
|
+
*
|
|
2903
|
+
* @see ScheduledTasksConfig
|
|
2904
|
+
* @see ScheduledTaskEntry
|
|
2905
|
+
* @see ScheduledTaskOverride
|
|
2906
|
+
* @see ./bundles/scheduled-tasks.ts#resolveScheduledTasks
|
|
2907
|
+
* @see ./bundles/scheduled-tasks.ts#validateScheduledTasksConfig
|
|
2908
|
+
*/
|
|
2909
|
+
readonly scheduledTasks?: ScheduledTasksConfig;
|
|
2910
|
+
/**
|
|
2911
|
+
* Agent-driven unblocking configuration consumed by the
|
|
2912
|
+
* `orchestrator` bundle. Controls the targeted sweep agents run
|
|
2913
|
+
* after applying `status:done` — the sweep flips downstream
|
|
2914
|
+
* `Depends on: #<just-closed>` issues from `status:blocked` to
|
|
2915
|
+
* `status:ready` without waiting for the next orchestrator
|
|
2916
|
+
* dispatch cycle.
|
|
2917
|
+
*
|
|
2918
|
+
* When the whole config is omitted, the orchestrator ships with
|
|
2919
|
+
* the sweep **enabled** and a generic citation comment.
|
|
2920
|
+
*
|
|
2921
|
+
* Supply `enabled: false` to disable the sweep entirely,
|
|
2922
|
+
* `commentTemplate` to override the unblock citation, or
|
|
2923
|
+
* `flagPartialUnblockWithAttention: true` to have the sweep post a
|
|
2924
|
+
* progress comment on dependents whose dependency list is not yet
|
|
2925
|
+
* fully resolved.
|
|
2926
|
+
*
|
|
2927
|
+
* Malformed configs — empty / whitespace-only `commentTemplate` or
|
|
2928
|
+
* `partialUnblockCommentTemplate` — fail the build at synth time
|
|
2929
|
+
* via `validateUnblockDependentsConfig`.
|
|
2930
|
+
*
|
|
2931
|
+
* @see UnblockDependentsConfig
|
|
2932
|
+
* @see ./bundles/unblock-dependents.ts#resolveUnblockDependents
|
|
2933
|
+
* @see ./bundles/unblock-dependents.ts#validateUnblockDependentsConfig
|
|
2934
|
+
*/
|
|
2935
|
+
readonly unblockDependents?: UnblockDependentsConfig;
|
|
2936
|
+
/**
|
|
2937
|
+
* Progress-file convention consumed by the `base` bundle and every
|
|
2938
|
+
* phased-agent bundle (bcm-writer, research-pipeline, etc.). Every
|
|
2939
|
+
* phased agent writes a small progress file when it claims an
|
|
2940
|
+
* issue, updates it after each non-trivial step, and deletes it in
|
|
2941
|
+
* the final commit that closes the issue. Crashed sessions are
|
|
2942
|
+
* resumed by reading the file rather than starting over.
|
|
2943
|
+
*
|
|
2944
|
+
* When the whole config is omitted, the convention ships
|
|
2945
|
+
* **enabled** with JSON-formatted files stored under
|
|
2946
|
+
* `.claude/state/<issue-number>-progress.json` and a 72-hour
|
|
2947
|
+
* staleness threshold.
|
|
2948
|
+
*
|
|
2949
|
+
* Supply `enabled: false` to disable the convention entirely,
|
|
2950
|
+
* `format: "markdown"` to use the openhi-style markdown body,
|
|
2951
|
+
* `stateDir` / `filenamePattern` to move or rename the on-disk
|
|
2952
|
+
* artefact, `cleanupOnComplete: false` to retain progress files
|
|
2953
|
+
* after the issue closes, or `staleAfterHours` to override the
|
|
2954
|
+
* stale-branch threshold rendered into the documentation.
|
|
2955
|
+
*
|
|
2956
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
2957
|
+
* `stateDir`, empty / whitespace-only `filenamePattern`,
|
|
2958
|
+
* `filenamePattern` missing the `<ISSUE_NUMBER>` placeholder,
|
|
2959
|
+
* unknown `format`, non-positive `staleAfterHours` — fail the
|
|
2960
|
+
* build at synth time via `validateProgressFilesConfig`.
|
|
2961
|
+
*
|
|
2962
|
+
* @see ProgressFilesConfig
|
|
2963
|
+
* @see ./bundles/progress-files.ts#resolveProgressFiles
|
|
2964
|
+
* @see ./bundles/progress-files.ts#validateProgressFilesConfig
|
|
2965
|
+
* @see ./bundles/progress-files.ts#renderProgressFilesRuleContent
|
|
2966
|
+
*/
|
|
2967
|
+
readonly progressFiles?: ProgressFilesConfig;
|
|
2968
|
+
/**
|
|
2969
|
+
* Shared-editing safety convention consumed by the `base` bundle
|
|
2970
|
+
* and every phased-agent bundle that writes rows to a shared
|
|
2971
|
+
* registry or feature-matrix file. Documents the single-entry /
|
|
2972
|
+
* deterministic-sort / verify-commit / re-sort-on-conflict protocol
|
|
2973
|
+
* agents follow when touching an index file other sessions may also
|
|
2974
|
+
* be editing concurrently.
|
|
2975
|
+
*
|
|
2976
|
+
* When the whole config is omitted, the convention ships
|
|
2977
|
+
* **enabled** with the documented default set of shared-index path
|
|
2978
|
+
* patterns, commit-path verification on, and the `rebase` conflict
|
|
2979
|
+
* strategy.
|
|
2980
|
+
*
|
|
2981
|
+
* Supply `enabled: false` to disable the convention entirely,
|
|
2982
|
+
* `sharedIndexPaths` to replace the default pattern list,
|
|
2983
|
+
* `verifyCommit: false` to drop the commit-path verification
|
|
2984
|
+
* protocol from the rendered rule, `conflictStrategy: "merge"` to
|
|
2985
|
+
* switch the conflict recipe to the merge-commit flow, or
|
|
2986
|
+
* `emitHelper: true` to ship the
|
|
2987
|
+
* `.claude/procedures/verify-index-row.sh` helper script to disk.
|
|
2988
|
+
*
|
|
2989
|
+
* Malformed configs — empty `sharedIndexPaths`, empty /
|
|
2990
|
+
* whitespace-only path entry, unknown `conflictStrategy` — fail
|
|
2991
|
+
* the build at synth time via `validateSharedEditingConfig`.
|
|
2992
|
+
*
|
|
2993
|
+
* @see SharedEditingConfig
|
|
2994
|
+
* @see ./bundles/shared-editing.ts#resolveSharedEditing
|
|
2995
|
+
* @see ./bundles/shared-editing.ts#validateSharedEditingConfig
|
|
2996
|
+
* @see ./bundles/shared-editing.ts#renderSharedEditingRuleContent
|
|
2997
|
+
*/
|
|
2998
|
+
readonly sharedEditing?: SharedEditingConfig;
|
|
2999
|
+
/**
|
|
3000
|
+
* Skill eval harness convention consumed by the `base` bundle and
|
|
3001
|
+
* every skill-owning bundle. Each skill under
|
|
3002
|
+
* `<skillsRoot>/<skill-name>/` may ship a regression suite at
|
|
3003
|
+
* `<skillsRoot>/<skill-name>/evals/evals.json`. Suites are
|
|
3004
|
+
* declarative prompt / expected-output fixtures parameterised by a
|
|
3005
|
+
* shared product-context fixture so the same eval shape works
|
|
3006
|
+
* across every project that depends on configulator.
|
|
3007
|
+
*
|
|
3008
|
+
* When the whole config is omitted, the convention ships
|
|
3009
|
+
* **enabled** with skills-root `.claude/skills`, product-context
|
|
3010
|
+
* fixture `docs/src/content/docs/project-context.md`,
|
|
3011
|
+
* product-context required, and the runner helper opt-in.
|
|
3012
|
+
*
|
|
3013
|
+
* Supply `enabled: false` to disable the convention entirely,
|
|
3014
|
+
* `skillsRoot` or `productContextPath` to override the default
|
|
3015
|
+
* paths, `requireProductContext: false` to downgrade missing
|
|
3016
|
+
* product-context to a warning, or `emitRunner: true` to ship the
|
|
3017
|
+
* `.claude/procedures/run-skill-evals.sh` helper to disk.
|
|
3018
|
+
*
|
|
3019
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
3020
|
+
* `skillsRoot`, empty / whitespace-only or absolute
|
|
3021
|
+
* `productContextPath` — fail the build at synth time via
|
|
3022
|
+
* `validateSkillEvalsConfig`.
|
|
3023
|
+
*
|
|
3024
|
+
* @see SkillEvalsConfig
|
|
3025
|
+
* @see ./bundles/skill-evals.ts#resolveSkillEvals
|
|
3026
|
+
* @see ./bundles/skill-evals.ts#validateSkillEvalsConfig
|
|
3027
|
+
* @see ./bundles/skill-evals.ts#renderSkillEvalsRuleContent
|
|
3028
|
+
*/
|
|
3029
|
+
readonly skillEvals?: SkillEvalsConfig;
|
|
3030
|
+
/**
|
|
3031
|
+
* Workflow-diagrams convention consumed by the `base` bundle and
|
|
3032
|
+
* every phased-agent bundle. Documents the single hand-authored
|
|
3033
|
+
* Mermaid-based diagrams page that visualises every agent's phase
|
|
3034
|
+
* graph and every cross-agent handoff, and enforces the
|
|
3035
|
+
* diagram-touched-when-bundle-touched rule: a change set that
|
|
3036
|
+
* modifies a bundle's phase graph must also update the matching
|
|
3037
|
+
* section in the diagrams page.
|
|
3038
|
+
*
|
|
3039
|
+
* When the whole config is omitted, the convention ships
|
|
3040
|
+
* **enabled** with the default diagrams path
|
|
3041
|
+
* (`docs/src/content/docs/agents/workflows.md`), the default
|
|
3042
|
+
* bundle-path patterns, the hard-requirement phrasing, and both
|
|
3043
|
+
* the starter page and the checker script opt-in.
|
|
3044
|
+
*
|
|
3045
|
+
* Supply `enabled: false` to disable the convention entirely,
|
|
3046
|
+
* `diagramsPath` to move the page, `bundlePathPatterns` to
|
|
3047
|
+
* replace the default pattern list, `emitStarterDiagram: true`
|
|
3048
|
+
* to seed a minimal starter page on disk, `emitChecker: true` to
|
|
3049
|
+
* ship the `.claude/procedures/check-workflow-diagrams.sh`
|
|
3050
|
+
* helper, or `requireDiagramUpdate: false` to soften the rule
|
|
3051
|
+
* phrasing from MUST to SHOULD.
|
|
3052
|
+
*
|
|
3053
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
3054
|
+
* `diagramsPath`, empty `bundlePathPatterns`, empty /
|
|
3055
|
+
* whitespace-only pattern entry — fail the build at synth time
|
|
3056
|
+
* via `validateWorkflowDiagramsConfig`.
|
|
3057
|
+
*
|
|
3058
|
+
* @see WorkflowDiagramsConfig
|
|
3059
|
+
* @see ./bundles/workflow-diagrams.ts#resolveWorkflowDiagrams
|
|
3060
|
+
* @see ./bundles/workflow-diagrams.ts#validateWorkflowDiagramsConfig
|
|
3061
|
+
* @see ./bundles/workflow-diagrams.ts#renderWorkflowDiagramsRuleContent
|
|
3062
|
+
*/
|
|
3063
|
+
readonly workflowDiagrams?: WorkflowDiagramsConfig;
|
|
3064
|
+
/**
|
|
3065
|
+
* Issue-templates convention consumed by the `base` bundle and
|
|
3066
|
+
* every phased-agent bundle that files downstream issues.
|
|
3067
|
+
* Documents the single hand-authored reference page that carries
|
|
3068
|
+
* one canonical `gh issue create` recipe per downstream phase
|
|
3069
|
+
* label, and enforces the reference-don't-inline rule: bundle
|
|
3070
|
+
* rules and agent prompts cite the matching section of that page
|
|
3071
|
+
* instead of duplicating a full `gh issue create` invocation.
|
|
3072
|
+
*
|
|
3073
|
+
* When the whole config is omitted, the convention ships
|
|
3074
|
+
* **enabled** with the default templates path
|
|
3075
|
+
* (`docs/src/content/docs/agents/issue-templates.md`), the default
|
|
3076
|
+
* bundle-path patterns, the hard-requirement phrasing, and both
|
|
3077
|
+
* the starter page and the lint script opt-in.
|
|
3078
|
+
*
|
|
3079
|
+
* Supply `enabled: false` to disable the convention entirely,
|
|
3080
|
+
* `templatesPath` to move the page, `bundlePathPatterns` to
|
|
3081
|
+
* replace the default pattern list, `emitStarterDoc: true` to
|
|
3082
|
+
* seed a minimal starter page on disk, `emitChecker: true` to
|
|
3083
|
+
* ship the `.claude/procedures/check-issue-templates.sh` helper,
|
|
3084
|
+
* or `requireReference: false` to soften the rule phrasing from
|
|
3085
|
+
* MUST to SHOULD.
|
|
3086
|
+
*
|
|
3087
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
3088
|
+
* `templatesPath`, empty `bundlePathPatterns`, empty /
|
|
3089
|
+
* whitespace-only pattern entry — fail the build at synth time
|
|
3090
|
+
* via `validateIssueTemplatesConfig`.
|
|
3091
|
+
*
|
|
3092
|
+
* @see IssueTemplatesConfig
|
|
3093
|
+
* @see ./bundles/issue-templates.ts#resolveIssueTemplates
|
|
3094
|
+
* @see ./bundles/issue-templates.ts#validateIssueTemplatesConfig
|
|
3095
|
+
* @see ./bundles/issue-templates.ts#renderIssueTemplatesRuleContent
|
|
3096
|
+
*/
|
|
3097
|
+
readonly issueTemplates?: IssueTemplatesConfig;
|
|
3098
|
+
}
|
|
3099
|
+
|
|
3100
|
+
/**
|
|
3101
|
+
* Generates AI coding assistant configuration files from a common schema.
|
|
3102
|
+
*
|
|
3103
|
+
* Supports Cursor and Claude Code (initial release), with Codex and Copilot
|
|
3104
|
+
* renderers planned for future issues. Rules, skills, and sub-agents are
|
|
3105
|
+
* defined once and rendered into the correct format for each target platform.
|
|
3106
|
+
*
|
|
3107
|
+
* Follows the configulator component pattern: extends Component, static .of()
|
|
3108
|
+
* factory, options interface with JSDoc.
|
|
3109
|
+
*
|
|
3110
|
+
* @example
|
|
3111
|
+
* ```ts
|
|
3112
|
+
* new AgentConfig(project, {
|
|
3113
|
+
* rules: [{
|
|
3114
|
+
* name: 'my-rule',
|
|
3115
|
+
* description: 'Project conventions',
|
|
3116
|
+
* scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
3117
|
+
* content: '# My Rule\n\nFollow these conventions...',
|
|
3118
|
+
* }],
|
|
3119
|
+
* });
|
|
3120
|
+
* ```
|
|
3121
|
+
*/
|
|
3122
|
+
declare class AgentConfig extends Component {
|
|
3123
|
+
/**
|
|
3124
|
+
* Find the AgentConfig component on a project.
|
|
3125
|
+
*/
|
|
3126
|
+
static of(project: Project$1): AgentConfig | undefined;
|
|
3127
|
+
/**
|
|
3128
|
+
* Returns `true` when at least one tier array on the supplied
|
|
3129
|
+
* `SourceTierExamples` is non-empty, signalling that the consuming
|
|
3130
|
+
* repo has opted into rendering the base bundle's
|
|
3131
|
+
* `source-quality-verification` rule. Returns `false` for
|
|
3132
|
+
* `undefined`, `{}`, or a fully-empty `{ t1: [], t2: [], t3: [], t4: [] }`.
|
|
3133
|
+
*/
|
|
3134
|
+
private static hasActiveTierExamples;
|
|
3135
|
+
/**
|
|
3136
|
+
* Merges default Claude permissions with bundle and user-supplied settings.
|
|
3137
|
+
*
|
|
3138
|
+
* Merge order: defaults → bundle permissions → user-supplied entries.
|
|
3139
|
+
* `defaultMode` defaults to `"dontAsk"` unless overridden.
|
|
3140
|
+
*/
|
|
3141
|
+
private static mergeClaudeDefaults;
|
|
3142
|
+
private readonly options;
|
|
3143
|
+
private cachedBundles?;
|
|
3144
|
+
private cachedPaths?;
|
|
3145
|
+
constructor(project: Project$1, options?: AgentConfigOptions);
|
|
3146
|
+
/**
|
|
3147
|
+
* Resolved agent-path roots for this project. Consumer overrides on
|
|
3148
|
+
* `AgentConfigOptions.paths` cascade into derived roots via
|
|
3149
|
+
* `resolveAgentPaths()`. Memoized so repeated reads during synthesis
|
|
3150
|
+
* do not re-run the resolver.
|
|
3151
|
+
*/
|
|
3152
|
+
private get resolvedPaths();
|
|
3153
|
+
/**
|
|
3154
|
+
* Path-aware built-in bundles assembled with this project's
|
|
3155
|
+
* resolved paths. Path-aware bundle factories (e.g.
|
|
3156
|
+
* `buildResearchPipelineBundle`) receive the resolved struct so
|
|
3157
|
+
* their rendered rule content reflects any consumer override.
|
|
3158
|
+
* Bundles that do not read agent paths are passed through as-is
|
|
3159
|
+
* from their default const exports.
|
|
3160
|
+
*/
|
|
3161
|
+
private get pathAwareBundles();
|
|
3162
|
+
/**
|
|
3163
|
+
* Returns the bundles that are active for this project: auto-detected
|
|
3164
|
+
* bundles (when `autoDetectBundles !== false`) plus force-included
|
|
3165
|
+
* bundles, minus explicitly excluded bundles. Deduplicated by name.
|
|
3166
|
+
*
|
|
3167
|
+
* Exposed so sibling components (e.g. the sync-labels workflow) can
|
|
3168
|
+
* consume bundle-contributed configuration.
|
|
3169
|
+
*/
|
|
3170
|
+
get activeBundles(): ReadonlyArray<AgentRuleBundle>;
|
|
3171
|
+
preSynthesize(): void;
|
|
3172
|
+
private resolvePlatforms;
|
|
3173
|
+
private resolveRules;
|
|
1693
3174
|
/**
|
|
1694
3175
|
* Return a bundle's rules with `filePatterns` narrowed to the projects
|
|
1695
3176
|
* that actually matched the bundle's detection predicate (when the bundle
|
|
@@ -1699,253 +3180,1479 @@ declare class AgentConfig extends Component {
|
|
|
1699
3180
|
* implement the hook are returned with only the custom-section
|
|
1700
3181
|
* transformation (if any) applied.
|
|
1701
3182
|
*/
|
|
1702
|
-
private bundleRulesFor;
|
|
1703
|
-
private resolveSkills;
|
|
1704
|
-
private resolveSubAgents;
|
|
1705
|
-
private resolveProcedures;
|
|
3183
|
+
private bundleRulesFor;
|
|
3184
|
+
private resolveSkills;
|
|
3185
|
+
private resolveSubAgents;
|
|
3186
|
+
private resolveProcedures;
|
|
3187
|
+
/**
|
|
3188
|
+
* Resolves template variables in rule content using project metadata.
|
|
3189
|
+
* Emits synthesis warnings for rules with unresolved variables.
|
|
3190
|
+
*/
|
|
3191
|
+
private resolveTemplates;
|
|
3192
|
+
/**
|
|
3193
|
+
* Resolves template variables in skill instructions using project metadata.
|
|
3194
|
+
*/
|
|
3195
|
+
private resolveSkillTemplates;
|
|
3196
|
+
/**
|
|
3197
|
+
* Resolves template variables in sub-agent prompts using project metadata.
|
|
3198
|
+
*/
|
|
3199
|
+
private resolveSubAgentTemplates;
|
|
3200
|
+
/**
|
|
3201
|
+
* Resolves template variables in procedure content using project metadata.
|
|
3202
|
+
*/
|
|
3203
|
+
private resolveProcedureTemplates;
|
|
3204
|
+
/**
|
|
3205
|
+
* Collects Claude permission entries from all active bundles.
|
|
3206
|
+
*/
|
|
3207
|
+
private resolveBundlePermissions;
|
|
3208
|
+
}
|
|
3209
|
+
|
|
3210
|
+
/**
|
|
3211
|
+
* Fully-resolved agent output-path roots. Every property is required.
|
|
3212
|
+
*
|
|
3213
|
+
* This is the shape that bundle code consumes at module-eval time via
|
|
3214
|
+
* `DEFAULT_AGENT_PATHS`, and the shape that `resolveAgentPaths()`
|
|
3215
|
+
* returns when consumers supply a partial `AgentPathsConfig` override.
|
|
3216
|
+
*/
|
|
3217
|
+
interface ResolvedAgentPaths {
|
|
3218
|
+
readonly docsRoot: string;
|
|
3219
|
+
readonly researchRoot: string;
|
|
3220
|
+
readonly profilesRoot: string;
|
|
3221
|
+
readonly meetingsRoot: string;
|
|
3222
|
+
readonly requirementsRoot: string;
|
|
3223
|
+
readonly researchRequirementsRoot: string;
|
|
3224
|
+
readonly bcmRoot: string;
|
|
3225
|
+
readonly peopleRoot: string;
|
|
3226
|
+
readonly companiesRoot: string;
|
|
3227
|
+
readonly softwareRoot: string;
|
|
3228
|
+
readonly industriesRoot: string;
|
|
3229
|
+
}
|
|
3230
|
+
/**
|
|
3231
|
+
* Canonical default values for every agent path. These mirror the
|
|
3232
|
+
* hardcoded paths that bundles used before `AgentPathsConfig` existed,
|
|
3233
|
+
* so `DEFAULT_AGENT_PATHS.*` can be substituted into bundle rule
|
|
3234
|
+
* content at module-eval time without changing the generated
|
|
3235
|
+
* `.claude/rules/*.md` snapshot.
|
|
3236
|
+
*
|
|
3237
|
+
* Consumers override the defaults by passing an `AgentPathsConfig`
|
|
3238
|
+
* through `AgentConfigOptions.paths` and resolving it with
|
|
3239
|
+
* `resolveAgentPaths()`. Per-project propagation into bundle rule
|
|
3240
|
+
* content is a follow-up — this export is the first step: interface +
|
|
3241
|
+
* resolver land in this PR; the `AgentConfig.resolveRules` wiring lands
|
|
3242
|
+
* next.
|
|
3243
|
+
*/
|
|
3244
|
+
declare const DEFAULT_AGENT_PATHS: ResolvedAgentPaths;
|
|
3245
|
+
/**
|
|
3246
|
+
* Resolve a partial `AgentPathsConfig` into a fully-populated
|
|
3247
|
+
* `ResolvedAgentPaths`. Unset fields cascade from their parent root:
|
|
3248
|
+
*
|
|
3249
|
+
* - `profilesRoot`, `meetingsRoot`, `requirementsRoot`, and `bcmRoot`
|
|
3250
|
+
* derive from `docsRoot` when not explicitly set.
|
|
3251
|
+
* - `researchRequirementsRoot` derives from `researchRoot` when not
|
|
3252
|
+
* explicitly set.
|
|
3253
|
+
* - `peopleRoot`, `companiesRoot`, `softwareRoot`, and `industriesRoot`
|
|
3254
|
+
* derive from the resolved `profilesRoot` when not explicitly set,
|
|
3255
|
+
* so that overriding `docsRoot` alone (or overriding `profilesRoot`
|
|
3256
|
+
* alone) propagates correctly through every dependent root.
|
|
3257
|
+
*/
|
|
3258
|
+
declare function resolveAgentPaths(paths?: AgentPathsConfig): ResolvedAgentPaths;
|
|
3259
|
+
|
|
3260
|
+
/**
|
|
3261
|
+
* Agenda bundle — enabled by default.
|
|
3262
|
+
*
|
|
3263
|
+
* Consuming projects can disable it with
|
|
3264
|
+
* `excludeBundles: ["agenda"]`. `appliesWhen` always returns `true`
|
|
3265
|
+
* (peer-present assumption, same pattern as the other workflow
|
|
3266
|
+
* bundles).
|
|
3267
|
+
*
|
|
3268
|
+
* Provides a 2-phase pre-meeting agenda pipeline
|
|
3269
|
+
* (draft → finalize), complementing the post-meeting pipeline in
|
|
3270
|
+
* the `meeting-analysis` bundle. Ships a sub-agent, two user-
|
|
3271
|
+
* invocable skills (`/draft-agenda`, `/finalize-agenda`), and
|
|
3272
|
+
* `agenda:*` phase labels via the bundle `labels` mechanism so
|
|
3273
|
+
* consuming projects automatically pick up the label taxonomy
|
|
3274
|
+
* through the sync-labels workflow.
|
|
3275
|
+
*
|
|
3276
|
+
* Reuses the meeting-type taxonomy from
|
|
3277
|
+
* `AgentConfigOptions.meetings.meetingTypes` — the same table the
|
|
3278
|
+
* `meeting-analysis` bundle consumes for post-meeting extraction.
|
|
3279
|
+
*/
|
|
3280
|
+
declare const agendaBundle: AgentRuleBundle;
|
|
3281
|
+
|
|
3282
|
+
/**
|
|
3283
|
+
* AWS CDK bundle — auto-detected when `aws-cdk-lib` is in dependencies.
|
|
3284
|
+
*/
|
|
3285
|
+
declare const awsCdkBundle: AgentRuleBundle;
|
|
3286
|
+
|
|
3287
|
+
/**
|
|
3288
|
+
* Base bundle — always included unless `includeBaseRules: false`.
|
|
3289
|
+
* Contains project-overview, interaction-style, and general-conventions rules.
|
|
3290
|
+
*/
|
|
3291
|
+
declare function buildBaseBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3292
|
+
/**
|
|
3293
|
+
* Default-paths instance of the base bundle, preserved for backward
|
|
3294
|
+
* compatibility with consumers that import the const directly. The
|
|
3295
|
+
* factory above is the canonical entry point when a consumer supplies
|
|
3296
|
+
* `AgentConfigOptions.paths`.
|
|
3297
|
+
*/
|
|
3298
|
+
declare const baseBundle: AgentRuleBundle;
|
|
3299
|
+
|
|
3300
|
+
/**
|
|
3301
|
+
* Build the bcm-writer bundle with the supplied resolved paths.
|
|
3302
|
+
*
|
|
3303
|
+
* Every reference to a canonical agent path (bcm root, docs root, etc.)
|
|
3304
|
+
* inside the rule / skill / sub-agent content strings is an interpolation
|
|
3305
|
+
* of the supplied `paths` struct, so a consumer override of
|
|
3306
|
+
* `AgentConfigOptions.paths` propagates to the rendered output.
|
|
3307
|
+
*
|
|
3308
|
+
* Consuming projects can disable it with `excludeBundles: ["bcm-writer"]`.
|
|
3309
|
+
* `appliesWhen` always returns `true` per this batch's directive that
|
|
3310
|
+
* bundles assume peers are present.
|
|
3311
|
+
*
|
|
3312
|
+
* Ships a single consolidated sub-agent (`bcm-writer`) with all 4 phase
|
|
3313
|
+
* handlers in one prompt (outline, scaffold, context, connect), a
|
|
3314
|
+
* user-invocable skill (`/write-bcm`), and `type:bcm-document` plus
|
|
3315
|
+
* `bcm:*` phase labels.
|
|
3316
|
+
*
|
|
3317
|
+
* The bundle assumes the `people-profile`, `company-profile`, and
|
|
3318
|
+
* `research-pipeline` bundles are also enabled so Phase 4 can hand off
|
|
3319
|
+
* surfaced items via `people:research`, `company:research`, and
|
|
3320
|
+
* `research:scope` issues.
|
|
3321
|
+
*/
|
|
3322
|
+
declare function buildBcmWriterBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3323
|
+
/**
|
|
3324
|
+
* Default-paths instance of the bcm-writer bundle, preserved for
|
|
3325
|
+
* backward compatibility with consumers that import the const directly.
|
|
3326
|
+
* The factory above is the canonical entry point when a consumer
|
|
3327
|
+
* supplies `AgentConfigOptions.paths`.
|
|
3328
|
+
*/
|
|
3329
|
+
declare const bcmWriterBundle: AgentRuleBundle;
|
|
3330
|
+
|
|
3331
|
+
/**
|
|
3332
|
+
* Build the business-models bundle with the supplied resolved paths.
|
|
3333
|
+
*
|
|
3334
|
+
* Every reference to a canonical agent path (docs root, research root,
|
|
3335
|
+
* etc.) inside the rule / skill / sub-agent content strings is an
|
|
3336
|
+
* interpolation of the supplied `paths` struct, so a consumer override
|
|
3337
|
+
* of `AgentConfigOptions.paths` propagates to the rendered output.
|
|
3338
|
+
*
|
|
3339
|
+
* The bundle sits between `industry-discovery` (upstream, selects
|
|
3340
|
+
* verticals) and `bcm-writer` (downstream, models capabilities). It
|
|
3341
|
+
* assumes `bcm-writer` is enabled so Phase 3 can hand off surfaced
|
|
3342
|
+
* capabilities via `bcm:outline` issues, and it is read by
|
|
3343
|
+
* `company-profile` via the shared `<BUSINESS_MODELS_ROOT>` default
|
|
3344
|
+
* path (`<docsRoot>/industry-research/`).
|
|
3345
|
+
*/
|
|
3346
|
+
declare function buildBusinessModelsBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3347
|
+
/**
|
|
3348
|
+
* Default-paths instance of the business-models bundle, preserved for
|
|
3349
|
+
* backward compatibility with consumers that import the const
|
|
3350
|
+
* directly. The factory above is the canonical entry point when a
|
|
3351
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
3352
|
+
*/
|
|
3353
|
+
declare const businessModelsBundle: AgentRuleBundle;
|
|
3354
|
+
|
|
3355
|
+
/**
|
|
3356
|
+
* Build the company-profile bundle with the supplied resolved paths.
|
|
3357
|
+
*
|
|
3358
|
+
* Every reference to a canonical agent path (docs root, etc.) inside
|
|
3359
|
+
* the rule / skill / sub-agent content strings is an interpolation of
|
|
3360
|
+
* the supplied `paths` struct, so a consumer override of
|
|
3361
|
+
* `AgentConfigOptions.paths` propagates to the rendered output.
|
|
3362
|
+
*
|
|
3363
|
+
* Ships a sub-agent (`company-profile-analyst`), four user-invocable
|
|
3364
|
+
* skills (`/profile-company`, `/match-company`, `/refresh-company`,
|
|
3365
|
+
* `/analyze-segment`), and `type:company-profile` plus `company:*`
|
|
3366
|
+
* phase labels for the six phases.
|
|
3367
|
+
*/
|
|
3368
|
+
declare function buildCompanyProfileBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3369
|
+
/**
|
|
3370
|
+
* Default-paths instance of the company-profile bundle, preserved for
|
|
3371
|
+
* backward compatibility with consumers that import the const
|
|
3372
|
+
* directly. The factory above is the canonical entry point when a
|
|
3373
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
3374
|
+
*/
|
|
3375
|
+
declare const companyProfileBundle: AgentRuleBundle;
|
|
3376
|
+
|
|
3377
|
+
/**
|
|
3378
|
+
* Customer-profile bundle — enabled by default.
|
|
3379
|
+
*
|
|
3380
|
+
* Consuming projects can disable it with
|
|
3381
|
+
* `excludeBundles: ["customer-profile"]`. `appliesWhen` always
|
|
3382
|
+
* returns `true` per the workflow-bundle peer-present assumption.
|
|
3383
|
+
*
|
|
3384
|
+
* Ships a sub-agent (`customer-profile-analyst`), three
|
|
3385
|
+
* user-invocable skills (`/discover-customers`, `/profile-customer`,
|
|
3386
|
+
* `/analyze-customer-competitors`), a customer-profile-page template
|
|
3387
|
+
* (emitted alongside the profile skill), and `type:customer-profile`
|
|
3388
|
+
* plus `customer:*` phase labels.
|
|
3389
|
+
*
|
|
3390
|
+
* The bundle sits downstream of `meeting-analysis`,
|
|
3391
|
+
* `industry-discovery`, and `research-pipeline` (which surface the
|
|
3392
|
+
* need for customer-archetype research) and hands off unmet needs to
|
|
3393
|
+
* the `requirements-analyst` bundle via `req:scan` issues, and
|
|
3394
|
+
* canonical profiles to `company-profile` and `people-profile` for
|
|
3395
|
+
* representative customer organizations, competitor organizations,
|
|
3396
|
+
* and notable contacts.
|
|
3397
|
+
*
|
|
3398
|
+
* Distinct from `company-profile`: the `company-profile` bundle
|
|
3399
|
+
* targets any company entity (competitor, vendor, partner, customer
|
|
3400
|
+
* organization); this bundle targets **customer archetypes** (the
|
|
3401
|
+
* reusable shape of a buyer/user segment) and closes the loop from
|
|
3402
|
+
* unmet need to `req:scan` seed via the shared software-profile
|
|
3403
|
+
* feature matrix.
|
|
3404
|
+
*/
|
|
3405
|
+
declare function buildCustomerProfileBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3406
|
+
/**
|
|
3407
|
+
* Default-paths instance of the customer-profile bundle, preserved
|
|
3408
|
+
* for backward compatibility with consumers that import the const
|
|
3409
|
+
* directly. The factory above is the canonical entry point when a
|
|
3410
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
3411
|
+
*/
|
|
3412
|
+
declare const customerProfileBundle: AgentRuleBundle;
|
|
3413
|
+
|
|
3414
|
+
/**
|
|
3415
|
+
* Render the shell body of the `.claude/procedures/extract-api.sh`
|
|
3416
|
+
* helper. Exported so the docs-sync bundle can register it as an
|
|
3417
|
+
* `AgentProcedure` and the bundles test suite can assert on the
|
|
3418
|
+
* script's contents.
|
|
3419
|
+
*
|
|
3420
|
+
* The helper runs `@microsoft/api-extractor` end-to-end for a single
|
|
3421
|
+
* package and writes the `.api.md` rollup to the scratch folder
|
|
3422
|
+
* declared by that package's `api-extractor.json`. Rollups are
|
|
3423
|
+
* **regenerate-on-scan** per the docs-sync epic resolved decision #3
|
|
3424
|
+
* — the scan phase consumes the freshly-regenerated rollup in-memory
|
|
3425
|
+
* rather than comparing against a committed baseline.
|
|
3426
|
+
*
|
|
3427
|
+
* Exit codes: `0` success, `1` usage / missing directory, `2` no
|
|
3428
|
+
* `api-extractor.json` at the target path, `3` the extractor exited
|
|
3429
|
+
* non-zero (compile error or extractor failure).
|
|
3430
|
+
*/
|
|
3431
|
+
declare function renderExtractApiProcedure(): string;
|
|
3432
|
+
/**
|
|
3433
|
+
* `AgentProcedure` definition for `.claude/procedures/extract-api.sh`.
|
|
3434
|
+
* Registered on the docs-sync bundle so it ships when the bundle is
|
|
3435
|
+
* force-included — matches the packaging of other bundled procedures
|
|
3436
|
+
* (see `orchestratorBundle.procedures`).
|
|
3437
|
+
*/
|
|
3438
|
+
declare const extractApiProcedure: AgentProcedure;
|
|
3439
|
+
/**
|
|
3440
|
+
* Docs-sync bundle — scaffolding release.
|
|
3441
|
+
*
|
|
3442
|
+
* Opt-in via `includeBundles: ["docs-sync"]`. `appliesWhen` returns
|
|
3443
|
+
* `false` by default so the scaffold ships disabled until a
|
|
3444
|
+
* downstream child issue enables it across the monorepo.
|
|
3445
|
+
*
|
|
3446
|
+
* Provides the skeleton of a 2-phase drift-detection + audit pipeline
|
|
3447
|
+
* (scan → fix) designed for monorepos that keep documentation inside
|
|
3448
|
+
* a Starlight singleton. Ships a sub-agent, two user-invocable skills
|
|
3449
|
+
* (`/docs-sync-pr`, `/docs-sync-audit`), five new labels
|
|
3450
|
+
* (`type:docs-sync`, `docs-sync:scan`, `docs-sync:fix`,
|
|
3451
|
+
* `docs-sync:advisory`, `docs-sync:blocking`), and a
|
|
3452
|
+
* `Documentation Sync Workflow` rule rendered into CLAUDE.md so
|
|
3453
|
+
* humans reading the file see the pipeline exists even while the
|
|
3454
|
+
* behavior is still landing across child issues.
|
|
3455
|
+
*/
|
|
3456
|
+
declare function buildDocsSyncBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3457
|
+
/**
|
|
3458
|
+
* Default-paths instance of the docs-sync bundle, preserved for
|
|
3459
|
+
* parity with other path-aware bundles in this directory. The factory
|
|
3460
|
+
* above is the canonical entry point when a consumer supplies
|
|
3461
|
+
* `AgentConfigOptions.paths`.
|
|
3462
|
+
*/
|
|
3463
|
+
declare const docsSyncBundle: AgentRuleBundle;
|
|
3464
|
+
|
|
3465
|
+
/**
|
|
3466
|
+
* GitHub workflow bundle — auto-detected when the project has a GitHub component.
|
|
3467
|
+
*/
|
|
3468
|
+
declare const githubWorkflowBundle: AgentRuleBundle;
|
|
3469
|
+
|
|
3470
|
+
/**
|
|
3471
|
+
* Build the industry-discovery bundle with the supplied resolved paths.
|
|
3472
|
+
*
|
|
3473
|
+
* Every reference to a canonical agent path (docs root, etc.) inside
|
|
3474
|
+
* the rule / skill / sub-agent content strings is an interpolation of
|
|
3475
|
+
* the supplied `paths` struct, so a consumer override of
|
|
3476
|
+
* `AgentConfigOptions.paths` propagates to the rendered output.
|
|
3477
|
+
*/
|
|
3478
|
+
declare function buildIndustryDiscoveryBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3479
|
+
/**
|
|
3480
|
+
* Default-paths instance of the industry-discovery bundle, preserved
|
|
3481
|
+
* for backward compatibility with consumers that import the const
|
|
3482
|
+
* directly. The factory above is the canonical entry point when a
|
|
3483
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
3484
|
+
*/
|
|
3485
|
+
declare const industryDiscoveryBundle: AgentRuleBundle;
|
|
3486
|
+
|
|
3487
|
+
/**
|
|
3488
|
+
* Jest bundle — auto-detected when Jest is in dependencies.
|
|
3489
|
+
*/
|
|
3490
|
+
declare const jestBundle: AgentRuleBundle;
|
|
3491
|
+
|
|
3492
|
+
/**
|
|
3493
|
+
* Maintenance-audit bundle — enabled by default.
|
|
3494
|
+
*
|
|
3495
|
+
* Consuming projects can disable it with
|
|
3496
|
+
* `excludeBundles: ["maintenance-audit"]`. `appliesWhen` always returns
|
|
3497
|
+
* `true` per this batch's directive that bundles assume peers are
|
|
3498
|
+
* present.
|
|
3499
|
+
*
|
|
3500
|
+
* Provides a 3-phase documentation-maintenance pipeline
|
|
3501
|
+
* (scan → fix → verify) designed for any project with structured doc
|
|
3502
|
+
* registries and cross-references. Ships a sub-agent, two user-
|
|
3503
|
+
* invocable skills (`/audit-docs`, `/verify-audit`), and `maint:*`
|
|
3504
|
+
* phase labels via the bundle `labels` mechanism so consuming projects
|
|
3505
|
+
* automatically pick up the label taxonomy through the sync-labels
|
|
3506
|
+
* workflow.
|
|
3507
|
+
*/
|
|
3508
|
+
declare function buildMaintenanceAuditBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
3509
|
+
/**
|
|
3510
|
+
* Default-paths instance of the maintenance-audit bundle, preserved
|
|
3511
|
+
* for backward compatibility with consumers that import the const
|
|
3512
|
+
* directly. The factory above is the canonical entry point when a
|
|
3513
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
3514
|
+
*/
|
|
3515
|
+
declare const maintenanceAuditBundle: AgentRuleBundle;
|
|
3516
|
+
|
|
3517
|
+
/**
|
|
3518
|
+
* Meeting analysis bundle — included by default.
|
|
3519
|
+
* Provides a 4-phase meeting transcript processing workflow.
|
|
3520
|
+
*/
|
|
3521
|
+
declare const meetingAnalysisBundle: AgentRuleBundle;
|
|
3522
|
+
|
|
3523
|
+
/**
|
|
3524
|
+
* Default for whether the orchestrator delegates the pre-flight merge
|
|
3525
|
+
* sweep to the `pr-reviewer` sub-agent. Mirrors vortex's step 0b
|
|
3526
|
+
* contract: invoking the reviewer as a sub-agent lets the merge
|
|
3527
|
+
* workflow run on its own (cheaper) model rather than on the
|
|
3528
|
+
* orchestrator's model. Set to `false` to have the orchestrator merge
|
|
3529
|
+
* eligible PRs inline.
|
|
3530
|
+
*
|
|
3531
|
+
* @see PreflightPrConfig
|
|
3532
|
+
*/
|
|
3533
|
+
declare const DEFAULT_DELEGATE_TO_PR_REVIEWER = true;
|
|
3534
|
+
/**
|
|
3535
|
+
* Default merge method used when the orchestrator merges a PR inline
|
|
3536
|
+
* (`delegateToPrReviewer = false`). Squash-and-merge matches every
|
|
3537
|
+
* existing configulator consumer and keeps `main` free of
|
|
3538
|
+
* branch-construction noise.
|
|
3539
|
+
*
|
|
3540
|
+
* @see PreflightPrConfig
|
|
3541
|
+
*/
|
|
3542
|
+
declare const DEFAULT_MERGE_METHOD: PreflightMergeMethod;
|
|
3543
|
+
/**
|
|
3544
|
+
* Default for whether pre-flight skips PRs lacking a
|
|
3545
|
+
* `Closes/Fixes/Resolves #<n>` keyword in the body. Most pipelines
|
|
3546
|
+
* require a linked issue, so the safe default is `true` — pre-flight
|
|
3547
|
+
* only merges PRs that cleanly complete a known issue.
|
|
3548
|
+
*
|
|
3549
|
+
* @see PreflightPrConfig
|
|
3550
|
+
*/
|
|
3551
|
+
declare const DEFAULT_REQUIRE_LINKED_ISSUE = true;
|
|
3552
|
+
/**
|
|
3553
|
+
* Merge-method values accepted on `PreflightPrConfig.mergeMethod`.
|
|
3554
|
+
* Matches the `gh pr merge` flags: `--squash`, `--merge`, `--rebase`.
|
|
3555
|
+
*/
|
|
3556
|
+
declare const PREFLIGHT_MERGE_METHOD_VALUES: readonly ["squash", "merge", "rebase"];
|
|
3557
|
+
type PreflightMergeMethod = (typeof PREFLIGHT_MERGE_METHOD_VALUES)[number];
|
|
3558
|
+
/**
|
|
3559
|
+
* Fully-resolved pre-flight PR merge settings. Every field is defaulted
|
|
3560
|
+
* so downstream renderers can reason about a single canonical shape.
|
|
3561
|
+
*/
|
|
3562
|
+
interface ResolvedPreflightPr {
|
|
3563
|
+
readonly enabled: boolean;
|
|
3564
|
+
readonly delegateToPrReviewer: boolean;
|
|
3565
|
+
readonly mergeMethod: PreflightMergeMethod;
|
|
3566
|
+
readonly requireLinkedIssue: boolean;
|
|
3567
|
+
readonly eligibleLabels: ReadonlyArray<string>;
|
|
3568
|
+
}
|
|
3569
|
+
/**
|
|
3570
|
+
* Resolve a (possibly absent) `PreflightPrConfig` into a canonical
|
|
3571
|
+
* `ResolvedPreflightPr` with every field filled in. Unset fields
|
|
3572
|
+
* cascade from their documented defaults.
|
|
3573
|
+
*
|
|
3574
|
+
* Malformed configs (unknown `mergeMethod`, empty or whitespace-only
|
|
3575
|
+
* `eligibleLabels` entry) throw a descriptive `Error` — callers should
|
|
3576
|
+
* not need to guard against it at runtime.
|
|
3577
|
+
*/
|
|
3578
|
+
declare function resolvePreflightPr(config?: PreflightPrConfig): ResolvedPreflightPr;
|
|
3579
|
+
/**
|
|
3580
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
3581
|
+
* supplied `PreflightPrConfig` is malformed. Called by
|
|
3582
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
3583
|
+
* pre-flight sweep fails the build instead of silently shipping a
|
|
3584
|
+
* broken check-blocked.sh subcommand. Returns the resolved config
|
|
3585
|
+
* unchanged so callers can write
|
|
3586
|
+
* `const pf = validatePreflightPrConfig(config)` in one line.
|
|
3587
|
+
*
|
|
3588
|
+
* Malformed cases rejected here:
|
|
3589
|
+
*
|
|
3590
|
+
* - `mergeMethod` not one of `squash` / `merge` / `rebase`.
|
|
3591
|
+
* - Any `eligibleLabels` entry that is empty or whitespace-only.
|
|
3592
|
+
*/
|
|
3593
|
+
declare function validatePreflightPrConfig(config?: PreflightPrConfig): ResolvedPreflightPr;
|
|
3594
|
+
/**
|
|
3595
|
+
* Render the markdown subsection appended to the
|
|
3596
|
+
* `orchestrator-conventions` rule. Always returns a non-empty string so
|
|
3597
|
+
* the orchestrator rule documents the pre-flight contract even when the
|
|
3598
|
+
* consumer relies on the defaults.
|
|
3599
|
+
*/
|
|
3600
|
+
declare function renderPreflightPrSection(pf: ResolvedPreflightPr): string;
|
|
3601
|
+
/**
|
|
3602
|
+
* Render a shell-script snippet embedded in `check-blocked.sh`. The
|
|
3603
|
+
* snippet declares a `cmd_preflight()` function that scans open PRs
|
|
3604
|
+
* and echoes one eligibility line per PR in the canonical
|
|
3605
|
+
* `PREFLIGHT_MERGE PR #<n> issue:#<m> branch:<b> — "<title>"` format
|
|
3606
|
+
* (or `PREFLIGHT_SKIP PR #<n> — <reason> — "<title>"` on skip, or
|
|
3607
|
+
* `NO_PREFLIGHT_PRS` when nothing is eligible).
|
|
3608
|
+
*
|
|
3609
|
+
* Returns the body of a shell function block (including the
|
|
3610
|
+
* `cmd_preflight()` wrapper) so the surrounding script can splice it
|
|
3611
|
+
* inline at the exact indent level it wants.
|
|
3612
|
+
*/
|
|
3613
|
+
declare function renderPreflightPrShellHelpers(pf: ResolvedPreflightPr): string;
|
|
3614
|
+
|
|
3615
|
+
/**
|
|
3616
|
+
* Default dispatch-to-housekeeping ratio — openhi's `DISPATCHER.md`
|
|
3617
|
+
* ships a 4:1 ratio: four consecutive dispatch runs, then one
|
|
3618
|
+
* housekeeping run, then the counter wraps. The ratio value stored
|
|
3619
|
+
* here is the dispatch-run count per housekeeping run; with
|
|
3620
|
+
* `ratio = 4`, runs 1–4 dispatch and run 5 housekeeps. The cycle
|
|
3621
|
+
* length is therefore `ratio + 1`.
|
|
3622
|
+
*
|
|
3623
|
+
* @see RunRatioConfig
|
|
3624
|
+
*/
|
|
3625
|
+
declare const DEFAULT_DISPATCH_TO_HOUSEKEEPING_RATIO = 4;
|
|
3626
|
+
/**
|
|
3627
|
+
* Default on-disk path for the orchestrator run-counter state file,
|
|
3628
|
+
* relative to the repo root. The file is tiny JSON
|
|
3629
|
+
* (`{ "run_counter": <n> }`) and is gitignored in most consumer repos
|
|
3630
|
+
* because it's local-only — each operator's orchestrator session
|
|
3631
|
+
* maintains its own counter.
|
|
3632
|
+
*
|
|
3633
|
+
* @see RunRatioConfig
|
|
3634
|
+
*/
|
|
3635
|
+
declare const DEFAULT_STATE_FILE_PATH = ".claude/state/orchestrator-runs.json";
|
|
3636
|
+
/**
|
|
3637
|
+
* Default recommended model label for dispatch runs. Rendered into
|
|
3638
|
+
* the orchestrator-conventions rule so agents and humans can read the
|
|
3639
|
+
* model pairing at a glance; the string is purely informational and
|
|
3640
|
+
* does not cause configulator to set `AGENT_MODEL` on the sub-agent.
|
|
3641
|
+
*
|
|
3642
|
+
* @see RunRatioConfig
|
|
3643
|
+
*/
|
|
3644
|
+
declare const DEFAULT_DISPATCH_MODEL = "opus";
|
|
3645
|
+
/**
|
|
3646
|
+
* Default recommended model label for housekeeping runs. See
|
|
3647
|
+
* `DEFAULT_DISPATCH_MODEL` for the rendering contract. Housekeeping
|
|
3648
|
+
* runs are mechanical (batch PR review + maintenance scan), so a
|
|
3649
|
+
* cheaper model like Sonnet is the documented recommendation.
|
|
3650
|
+
*
|
|
3651
|
+
* @see RunRatioConfig
|
|
3652
|
+
*/
|
|
3653
|
+
declare const DEFAULT_HOUSEKEEPING_MODEL = "sonnet";
|
|
3654
|
+
/**
|
|
3655
|
+
* Fully-resolved run-ratio settings. Every field is defaulted so
|
|
3656
|
+
* downstream renderers can reason about a single canonical shape.
|
|
3657
|
+
*/
|
|
3658
|
+
interface ResolvedRunRatio {
|
|
3659
|
+
readonly enabled: boolean;
|
|
3660
|
+
readonly ratio: number;
|
|
3661
|
+
readonly stateFilePath: string;
|
|
3662
|
+
readonly dispatchModel: string;
|
|
3663
|
+
readonly housekeepingModel: string;
|
|
3664
|
+
}
|
|
3665
|
+
/**
|
|
3666
|
+
* Resolve a (possibly absent) `RunRatioConfig` into a canonical
|
|
3667
|
+
* `ResolvedRunRatio` with every field filled in. Unset fields
|
|
3668
|
+
* cascade from their documented defaults.
|
|
3669
|
+
*
|
|
3670
|
+
* Malformed configs (non-integer or non-positive ratio, empty or
|
|
3671
|
+
* whitespace-only state file path) throw a descriptive `Error` —
|
|
3672
|
+
* callers should not need to guard against it at runtime.
|
|
3673
|
+
*/
|
|
3674
|
+
declare function resolveRunRatio(config?: RunRatioConfig): ResolvedRunRatio;
|
|
3675
|
+
/**
|
|
3676
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
3677
|
+
* supplied `RunRatioConfig` is malformed. Called by
|
|
3678
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
3679
|
+
* ratio fails the build instead of silently shipping broken
|
|
3680
|
+
* housekeeping cadence. Returns the resolved ratio unchanged so
|
|
3681
|
+
* callers can write `const rr = validateRunRatioConfig(config)` in
|
|
3682
|
+
* one line.
|
|
3683
|
+
*
|
|
3684
|
+
* Malformed cases rejected here:
|
|
3685
|
+
*
|
|
3686
|
+
* - `ratio` non-integer, zero, or negative.
|
|
3687
|
+
* - `stateFilePath` empty / whitespace-only, or an absolute path
|
|
3688
|
+
* (the state file must live inside the repo).
|
|
3689
|
+
*/
|
|
3690
|
+
declare function validateRunRatioConfig(config?: RunRatioConfig): ResolvedRunRatio;
|
|
3691
|
+
/**
|
|
3692
|
+
* Compute the run type (`"dispatch"` or `"housekeeping"`) for a
|
|
3693
|
+
* given run counter value and resolved ratio. Used by the TypeScript
|
|
3694
|
+
* side (tests, downstream consumers that want to reason about the
|
|
3695
|
+
* cadence without shelling out). The shell helper produced by
|
|
3696
|
+
* `renderRunRatioShellHelpers` implements the same logic.
|
|
3697
|
+
*
|
|
3698
|
+
* Every `(ratio + 1)`th run is a housekeeping run; all others
|
|
3699
|
+
* dispatch. For `ratio = 4`, runs 1–4 dispatch and run 5
|
|
3700
|
+
* housekeeps; run 6 is again dispatch; run 10 housekeeps.
|
|
3701
|
+
*/
|
|
3702
|
+
declare function classifyRun(runCounter: number, ratio: ResolvedRunRatio): "dispatch" | "housekeeping";
|
|
3703
|
+
/**
|
|
3704
|
+
* Render the markdown subsection appended to the
|
|
3705
|
+
* `orchestrator-conventions` rule. Always returns a non-empty string
|
|
3706
|
+
* so the orchestrator rule documents the cadence even when the
|
|
3707
|
+
* consumer relies on the defaults.
|
|
3708
|
+
*/
|
|
3709
|
+
declare function renderRunRatioSection(ratio: ResolvedRunRatio): string;
|
|
3710
|
+
/**
|
|
3711
|
+
* Render a shell-script snippet embedded in `check-blocked.sh`. The
|
|
3712
|
+
* snippet declares a `run_counter_tick()` function that:
|
|
3713
|
+
*
|
|
3714
|
+
* 1. Reads the state file (creating it with `run_counter: 1` if
|
|
3715
|
+
* missing or unparseable).
|
|
3716
|
+
* 2. Increments the counter.
|
|
3717
|
+
* 3. Writes the new counter back atomically (temp file + `mv`).
|
|
3718
|
+
* 4. Echoes the post-increment counter and the classified run type
|
|
3719
|
+
* (`dispatch` or `housekeeping`) in the canonical
|
|
3720
|
+
* `run=<n> type=<dispatch|housekeeping>` format.
|
|
3721
|
+
*
|
|
3722
|
+
* Returns the body of a shell function block (including the
|
|
3723
|
+
* `run_counter_tick()` wrapper) so the surrounding script can splice
|
|
3724
|
+
* it inline at the exact indent level it wants.
|
|
3725
|
+
*/
|
|
3726
|
+
declare function renderRunRatioShellHelpers(ratio: ResolvedRunRatio): string;
|
|
3727
|
+
|
|
3728
|
+
/**
|
|
3729
|
+
* Recommended model labels surfaced on the scheduled-task SKILL.md
|
|
3730
|
+
* frontmatter. The labels are **informational** — configulator does not
|
|
3731
|
+
* pin a model per task (the Claude Code scheduled-task runtime does not
|
|
3732
|
+
* support per-task model pinning yet). Operators choose the model at
|
|
3733
|
+
* invocation time; splitting workers by type still gives independent
|
|
3734
|
+
* cadence and clean opt-in/opt-out control.
|
|
3735
|
+
*
|
|
3736
|
+
* @see ScheduledTasksConfig
|
|
3737
|
+
*/
|
|
3738
|
+
declare const SCHEDULED_TASK_MODEL_VALUES: readonly ["opus", "sonnet", "haiku"];
|
|
3739
|
+
type ScheduledTaskModel = (typeof SCHEDULED_TASK_MODEL_VALUES)[number];
|
|
3740
|
+
/**
|
|
3741
|
+
* Default root directory (relative to the repo root) for scheduled-task
|
|
3742
|
+
* files. Mirrors the vortex layout — one directory per task at
|
|
3743
|
+
* `.claude/scheduled-tasks/<taskId>/SKILL.md`.
|
|
3744
|
+
*
|
|
3745
|
+
* @see ScheduledTasksConfig
|
|
3746
|
+
*/
|
|
3747
|
+
declare const DEFAULT_SCHEDULED_TASKS_ROOT = ".claude/scheduled-tasks";
|
|
3748
|
+
/**
|
|
3749
|
+
* Off-peak cron sample surfaced in the rendered documentation. Every
|
|
3750
|
+
* 20 minutes during off-peak hours (before 08:00 and after 14:00
|
|
3751
|
+
* local). Informational only — tasks ship disabled by default with
|
|
3752
|
+
* no cron, so the consumer must opt in and set a cron explicitly.
|
|
3753
|
+
*
|
|
3754
|
+
* @see ScheduledTasksConfig
|
|
3755
|
+
*/
|
|
3756
|
+
declare const DEFAULT_OFF_PEAK_CRON_EXAMPLE = "3,23,43 0-7,14-23 * * *";
|
|
3757
|
+
/**
|
|
3758
|
+
* A single fully-resolved scheduled-task entry. Returned by
|
|
3759
|
+
* `resolveScheduledTasks()`; the rendered documentation section and
|
|
3760
|
+
* the emitted `.claude/scheduled-tasks/<taskId>/SKILL.md` files are
|
|
3761
|
+
* derived from this list.
|
|
3762
|
+
*/
|
|
3763
|
+
interface ResolvedScheduledTask {
|
|
3764
|
+
/**
|
|
3765
|
+
* Unique task directory name. Emitted under
|
|
3766
|
+
* `<root>/<taskId>/SKILL.md`. Derived from the sub-agent name by
|
|
3767
|
+
* default (e.g. `company-profile-analyst` → `worker-company-profile`).
|
|
3768
|
+
*/
|
|
3769
|
+
readonly taskId: string;
|
|
1706
3770
|
/**
|
|
1707
|
-
*
|
|
1708
|
-
*
|
|
3771
|
+
* Target sub-agent name (e.g. `company-profile-analyst`). The task's
|
|
3772
|
+
* rendered prompt points operators at `.claude/agents/<agent>.md`.
|
|
1709
3773
|
*/
|
|
1710
|
-
|
|
3774
|
+
readonly agent: string;
|
|
1711
3775
|
/**
|
|
1712
|
-
*
|
|
3776
|
+
* Human-readable agent label for rendered tables and frontmatter
|
|
3777
|
+
* descriptions (e.g. `"Company Profile"`).
|
|
1713
3778
|
*/
|
|
1714
|
-
|
|
3779
|
+
readonly agentLabel: string;
|
|
1715
3780
|
/**
|
|
1716
|
-
*
|
|
3781
|
+
* Primary GitHub `type:*` label (without the `type:` prefix). When
|
|
3782
|
+
* `typeLabels` is unset, this is the sole type filter; when
|
|
3783
|
+
* `typeLabels` is set, it is the first element.
|
|
1717
3784
|
*/
|
|
1718
|
-
|
|
3785
|
+
readonly typeLabel: string;
|
|
1719
3786
|
/**
|
|
1720
|
-
*
|
|
3787
|
+
* Exact `type:*` label values (without the `type:` prefix) the
|
|
3788
|
+
* worker picks up. When set (length >= 1), represents a
|
|
3789
|
+
* multi-type filter (e.g. routing-bucket `worker-issue`). When
|
|
3790
|
+
* unset, the `typeLabel` single-value filter applies.
|
|
1721
3791
|
*/
|
|
1722
|
-
|
|
3792
|
+
readonly typeLabels?: ReadonlyArray<string>;
|
|
3793
|
+
/**
|
|
3794
|
+
* Optional phase-label prefix (e.g. `company:`). When present and
|
|
3795
|
+
* `phaseLabels` is unset, the task's SKILL.md instructs the worker
|
|
3796
|
+
* to filter on both `type:<typeLabel>` **and** any `<phasePrefix>*`
|
|
3797
|
+
* label. Ignored when `phaseLabels` is set.
|
|
3798
|
+
*/
|
|
3799
|
+
readonly phasePrefix?: string;
|
|
3800
|
+
/**
|
|
3801
|
+
* Exact phase-label values the worker filters on (e.g.
|
|
3802
|
+
* `["req:write"]`). When set (length >= 1), takes precedence over
|
|
3803
|
+
* `phasePrefix`. When unset, the `phasePrefix` prefix-match
|
|
3804
|
+
* applies.
|
|
3805
|
+
*/
|
|
3806
|
+
readonly phaseLabels?: ReadonlyArray<string>;
|
|
3807
|
+
/**
|
|
3808
|
+
* Recommended model tier. Surfaced on the task's SKILL.md
|
|
3809
|
+
* frontmatter and in the rendered documentation table.
|
|
3810
|
+
*/
|
|
3811
|
+
readonly recommendedModel: ScheduledTaskModel;
|
|
3812
|
+
/** Whether the task is emitted to disk. Default: `false`. */
|
|
3813
|
+
readonly enabled: boolean;
|
|
3814
|
+
/**
|
|
3815
|
+
* Optional cron expression. When `null` the task is manual-only
|
|
3816
|
+
* (runs only when an operator invokes it explicitly).
|
|
3817
|
+
*/
|
|
3818
|
+
readonly cron: string | null;
|
|
3819
|
+
/**
|
|
3820
|
+
* Short one-line description for the rendered table and SKILL.md
|
|
3821
|
+
* frontmatter.
|
|
3822
|
+
*/
|
|
3823
|
+
readonly description: string;
|
|
3824
|
+
}
|
|
3825
|
+
/**
|
|
3826
|
+
* Canonical default registry of scheduled-task entries. One entry per
|
|
3827
|
+
* agent bundle that ships with configulator. Every entry is
|
|
3828
|
+
* **disabled by default** — consumers must explicitly opt in via
|
|
3829
|
+
* `ScheduledTasksConfig.overrides[taskId].enabled = true`.
|
|
3830
|
+
*
|
|
3831
|
+
* The registry mirrors the funnel-tier table in `tiers.ts` so the
|
|
3832
|
+
* dispatch ordering, scheduled-task filter, and orchestrator queue
|
|
3833
|
+
* scan all agree on the type-label taxonomy.
|
|
3834
|
+
*/
|
|
3835
|
+
declare const DEFAULT_SCHEDULED_TASK_ENTRIES: ReadonlyArray<ResolvedScheduledTask>;
|
|
3836
|
+
/**
|
|
3837
|
+
* Fully-resolved scheduled-tasks settings. Every field is defaulted so
|
|
3838
|
+
* downstream renderers can reason about a single canonical shape.
|
|
3839
|
+
*/
|
|
3840
|
+
interface ResolvedScheduledTasks {
|
|
3841
|
+
readonly enabled: boolean;
|
|
3842
|
+
readonly root: string;
|
|
3843
|
+
readonly tasks: ReadonlyArray<ResolvedScheduledTask>;
|
|
3844
|
+
}
|
|
3845
|
+
/**
|
|
3846
|
+
* Resolve a (possibly absent) `ScheduledTasksConfig` into a canonical
|
|
3847
|
+
* `ResolvedScheduledTasks` with every field filled in. Unset fields
|
|
3848
|
+
* cascade from their documented defaults.
|
|
3849
|
+
*
|
|
3850
|
+
* The resolver merges three sources in this order:
|
|
3851
|
+
*
|
|
3852
|
+
* 1. `DEFAULT_SCHEDULED_TASK_ENTRIES` — the built-in per-agent registry.
|
|
3853
|
+
* 2. `config.overrides` — per-task consumer overrides keyed by `taskId`.
|
|
3854
|
+
* 3. `config.tasks` — fully consumer-authored entries. Entries whose
|
|
3855
|
+
* `taskId` matches a default entry **replace** it; entries with a new
|
|
3856
|
+
* `taskId` are appended.
|
|
3857
|
+
*
|
|
3858
|
+
* Malformed configs (unknown model, empty taskId/agent/typeLabel,
|
|
3859
|
+
* duplicate taskIds in a single supplied list) throw a descriptive
|
|
3860
|
+
* `Error` — callers should not need to guard against it at runtime.
|
|
3861
|
+
*/
|
|
3862
|
+
declare function resolveScheduledTasks(config?: ScheduledTasksConfig): ResolvedScheduledTasks;
|
|
3863
|
+
/**
|
|
3864
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
3865
|
+
* supplied `ScheduledTasksConfig` is malformed. Called by
|
|
3866
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
3867
|
+
* scheduled-tasks table fails the build instead of silently shipping
|
|
3868
|
+
* broken worker prompts. Returns the resolved config unchanged so
|
|
3869
|
+
* callers can write `const st = validateScheduledTasksConfig(config)` in
|
|
3870
|
+
* one line.
|
|
3871
|
+
*
|
|
3872
|
+
* Malformed cases rejected here:
|
|
3873
|
+
*
|
|
3874
|
+
* - `root` empty, whitespace-only, or absolute.
|
|
3875
|
+
* - `overrides[taskId]` referencing an unknown `taskId`.
|
|
3876
|
+
* - Consumer-supplied `tasks` entry with unknown model, empty
|
|
3877
|
+
* `taskId` / `agent` / `typeLabel`, or cron string that is not a
|
|
3878
|
+
* plain string.
|
|
3879
|
+
* - Duplicate `taskId` values within the supplied `tasks` list.
|
|
3880
|
+
*/
|
|
3881
|
+
declare function validateScheduledTasksConfig(config?: ScheduledTasksConfig): ResolvedScheduledTasks;
|
|
3882
|
+
/**
|
|
3883
|
+
* Render the markdown subsection appended to the
|
|
3884
|
+
* `orchestrator-conventions` rule. Always returns a non-empty string —
|
|
3885
|
+
* the default registry is non-empty so the section documents the
|
|
3886
|
+
* per-agent scheduled-task layout even when every task is disabled
|
|
3887
|
+
* (the default).
|
|
3888
|
+
*/
|
|
3889
|
+
declare function renderScheduledTasksSection(resolved: ResolvedScheduledTasks): string;
|
|
3890
|
+
/**
|
|
3891
|
+
* Render the body of a single scheduled-task `SKILL.md` file. The
|
|
3892
|
+
* frontmatter carries the task name, description, and recommended
|
|
3893
|
+
* model; the body teaches the worker which label filter to apply and
|
|
3894
|
+
* which agent file to route issues to.
|
|
3895
|
+
*
|
|
3896
|
+
* The output is the full file contents — including the leading
|
|
3897
|
+
* frontmatter delimiter — so callers can hand it straight to a
|
|
3898
|
+
* `TextFile`.
|
|
3899
|
+
*/
|
|
3900
|
+
declare function renderScheduledTaskSkillFile(task: ResolvedScheduledTask): string;
|
|
3901
|
+
|
|
3902
|
+
/**
|
|
3903
|
+
* Classified scope size for a single issue. Drives the dispatch
|
|
3904
|
+
* decision in the orchestrator — `small` / `medium` are dispatched,
|
|
3905
|
+
* `large` is rejected and decomposed.
|
|
3906
|
+
*/
|
|
3907
|
+
declare const SCOPE_CLASS_VALUES: readonly ["small", "medium", "large"];
|
|
3908
|
+
type ScopeClass = (typeof SCOPE_CLASS_VALUES)[number];
|
|
3909
|
+
/**
|
|
3910
|
+
* Default acceptance-criteria thresholds — openhi's published
|
|
3911
|
+
* heuristic. An issue with at most 3 acceptance-criteria checkboxes
|
|
3912
|
+
* is `small`; at most 6 is `medium`; more than 6 is `large`.
|
|
3913
|
+
*/
|
|
3914
|
+
declare const DEFAULT_AC_THRESHOLDS: ScopeGateThresholds;
|
|
3915
|
+
/**
|
|
3916
|
+
* Default sources thresholds — openhi's published heuristic. An
|
|
3917
|
+
* issue with at most 2 listed sources is `small`; at most 5 is
|
|
3918
|
+
* `medium`; more than 5 is `large`.
|
|
3919
|
+
*/
|
|
3920
|
+
declare const DEFAULT_SOURCES_THRESHOLDS: ScopeGateThresholds;
|
|
3921
|
+
/**
|
|
3922
|
+
* Default decomposition-proposal comment body. The orchestrator
|
|
3923
|
+
* substitutes the following angle-bracketed uppercase-snake
|
|
3924
|
+
* placeholders at comment-composition time:
|
|
3925
|
+
*
|
|
3926
|
+
* - `<AC_COUNT>` — observed acceptance-criteria count.
|
|
3927
|
+
* - `<SOURCES_COUNT>` — observed sources count.
|
|
3928
|
+
* - `<AC_LIMIT>` — the `acceptanceCriteria.mediumMax` threshold.
|
|
3929
|
+
* - `<SOURCES_LIMIT>` — the `sources.mediumMax` threshold.
|
|
3930
|
+
*
|
|
3931
|
+
* The placeholder syntax deliberately avoids `{{curly-brace}}` form —
|
|
3932
|
+
* `AgentConfig`'s template resolver claims that namespace at rule
|
|
3933
|
+
* generation time, so a `{{acCount}}` placeholder would be rewritten
|
|
3934
|
+
* to `<acCount>` before the agent ever saw it.
|
|
3935
|
+
*
|
|
3936
|
+
* This template is deliberately generic so every consuming repo
|
|
3937
|
+
* can adopt it without customization — project-specific phrasing
|
|
3938
|
+
* belongs in `ScopeGateConfig.decompositionTemplate`.
|
|
3939
|
+
*/
|
|
3940
|
+
declare const DEFAULT_DECOMPOSITION_TEMPLATE: string;
|
|
3941
|
+
/**
|
|
3942
|
+
* Fully-resolved scope-gate settings. Every field is defaulted so
|
|
3943
|
+
* downstream renderers can reason about a single canonical shape.
|
|
3944
|
+
*/
|
|
3945
|
+
interface ResolvedScopeGate {
|
|
3946
|
+
readonly enabled: boolean;
|
|
3947
|
+
readonly acceptanceCriteria: ScopeGateThresholds;
|
|
3948
|
+
readonly sources: ScopeGateThresholds;
|
|
3949
|
+
readonly autoFile: boolean;
|
|
3950
|
+
readonly decompositionTemplate: string;
|
|
3951
|
+
}
|
|
3952
|
+
/**
|
|
3953
|
+
* Resolve a (possibly absent) `ScopeGateConfig` into a canonical
|
|
3954
|
+
* `ResolvedScopeGate` with every field filled in. Unset fields
|
|
3955
|
+
* cascade from their documented defaults.
|
|
3956
|
+
*
|
|
3957
|
+
* Malformed configs (negative or non-integer thresholds, inverted
|
|
3958
|
+
* ranges) throw a descriptive `Error` — callers should not need to
|
|
3959
|
+
* guard against it at runtime.
|
|
3960
|
+
*/
|
|
3961
|
+
declare function resolveScopeGate(config?: ScopeGateConfig): ResolvedScopeGate;
|
|
3962
|
+
/**
|
|
3963
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
3964
|
+
* supplied `ScopeGateConfig` is malformed. Called by
|
|
3965
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
3966
|
+
* gate fails the build instead of silently shipping broken dispatch
|
|
3967
|
+
* thresholds. Returns the resolved gate unchanged so callers can
|
|
3968
|
+
* write `const gate = validateScopeGateConfig(config)` in one line.
|
|
3969
|
+
*
|
|
3970
|
+
* Malformed cases rejected here:
|
|
3971
|
+
*
|
|
3972
|
+
* - Threshold values that are negative or non-integer.
|
|
3973
|
+
* - Threshold ranges where `mediumMax <= smallMax` (the gate would
|
|
3974
|
+
* never classify an issue as `medium`).
|
|
3975
|
+
*/
|
|
3976
|
+
declare function validateScopeGateConfig(config?: ScopeGateConfig): ResolvedScopeGate;
|
|
3977
|
+
/**
|
|
3978
|
+
* Classify a raw issue body against a resolved scope gate. Returns
|
|
3979
|
+
* the scope class and the observed counts so the orchestrator can
|
|
3980
|
+
* embed them in the decomposition-proposal comment.
|
|
3981
|
+
*
|
|
3982
|
+
* The parser is deliberately tolerant:
|
|
3983
|
+
*
|
|
3984
|
+
* - Acceptance-criteria checkboxes — lines matching `- [ ]` or
|
|
3985
|
+
* `- [x]` (case-insensitive) under a `## Acceptance Criteria`
|
|
3986
|
+
* heading (or any heading whose normalized text equals
|
|
3987
|
+
* `acceptance criteria`). Stops at the next heading.
|
|
3988
|
+
* - Sources — bullet list items (`- ` or `* `) under any of
|
|
3989
|
+
* `## Inputs`, `## References`, `## Sources` (case-insensitive).
|
|
3990
|
+
* Counts from every matching section are summed, so an issue
|
|
3991
|
+
* that uses both `## Inputs` and `## References` has its sources
|
|
3992
|
+
* counted across both.
|
|
3993
|
+
*
|
|
3994
|
+
* An issue with **no** `## Acceptance Criteria` section produces an
|
|
3995
|
+
* `acCount` of 0 and is classified `small` on the AC axis. An issue
|
|
3996
|
+
* body that's pure prose with no recognizable sections classifies
|
|
3997
|
+
* `small` — the gate never rejects an issue it can't read.
|
|
3998
|
+
*/
|
|
3999
|
+
declare function classifyIssueScope(body: string, gate: ResolvedScopeGate): {
|
|
4000
|
+
readonly scope: ScopeClass;
|
|
4001
|
+
readonly acCount: number;
|
|
4002
|
+
readonly sourcesCount: number;
|
|
4003
|
+
};
|
|
4004
|
+
/**
|
|
4005
|
+
* Render the markdown subsection appended to the
|
|
4006
|
+
* `orchestrator-conventions` rule. Always returns a non-empty string
|
|
4007
|
+
* so the orchestrator rule documents the scope gate even when the
|
|
4008
|
+
* consumer relies on the defaults.
|
|
4009
|
+
*/
|
|
4010
|
+
declare function renderScopeGateSection(gate: ResolvedScopeGate): string;
|
|
4011
|
+
/**
|
|
4012
|
+
* Render a shell-script snippet embedded in `check-blocked.sh`. The
|
|
4013
|
+
* snippet declares a `scope_of()` function that reads an issue body
|
|
4014
|
+
* (passed as `$1`) and echoes one of `small` / `medium` / `large`.
|
|
4015
|
+
* Orchestrator-side bash hooks call this function before dispatch.
|
|
4016
|
+
*
|
|
4017
|
+
* Returns the body of a shell function block (including the
|
|
4018
|
+
* `scope_of()` wrapper) so the surrounding script can splice it
|
|
4019
|
+
* inline at the exact indent level it wants.
|
|
4020
|
+
*/
|
|
4021
|
+
declare function renderScopeGateShellHelpers(gate: ResolvedScopeGate): string;
|
|
4022
|
+
|
|
4023
|
+
/**
|
|
4024
|
+
* Valid funnel-tier values. Lower numbers dispatch first when priority
|
|
4025
|
+
* is tied. See `DEFAULT_AGENT_TIERS` for the role of each tier.
|
|
4026
|
+
*/
|
|
4027
|
+
declare const AGENT_TIER_VALUES: readonly [0, 1, 2, 3, 4];
|
|
4028
|
+
type AgentTier = (typeof AGENT_TIER_VALUES)[number];
|
|
4029
|
+
/**
|
|
4030
|
+
* Human-readable role name for each funnel tier. Rendered into the
|
|
4031
|
+
* orchestrator-conventions rule and surfaced in generated `PICK` lines
|
|
4032
|
+
* so agents and humans can read the sort key at a glance.
|
|
4033
|
+
*/
|
|
4034
|
+
declare const AGENT_TIER_ROLES: Readonly<Record<AgentTier, string>>;
|
|
4035
|
+
/**
|
|
4036
|
+
* A single resolved agent-type → tier mapping. Returned by
|
|
4037
|
+
* `resolveAgentTiers()`; the rendered table in the orchestrator rule
|
|
4038
|
+
* content and the lookup table embedded in `check-blocked.sh` are
|
|
4039
|
+
* derived from this list.
|
|
4040
|
+
*/
|
|
4041
|
+
interface ResolvedAgentTier {
|
|
1723
4042
|
/**
|
|
1724
|
-
*
|
|
4043
|
+
* GitHub `type:*` label value (e.g. `"feat"`, `"research"`,
|
|
4044
|
+
* `"company-profile"`). The leading `type:` prefix is **not** part
|
|
4045
|
+
* of the stored value — it is added when the resolver stringifies
|
|
4046
|
+
* the lookup table.
|
|
1725
4047
|
*/
|
|
1726
|
-
|
|
4048
|
+
readonly type: string;
|
|
4049
|
+
/** Funnel tier 0–4 (lower dispatches first on a priority tie). */
|
|
4050
|
+
readonly tier: AgentTier;
|
|
4051
|
+
/** Human-readable tier role (routing / research / profiles / synthesis / support). */
|
|
4052
|
+
readonly role: string;
|
|
1727
4053
|
}
|
|
1728
|
-
|
|
1729
4054
|
/**
|
|
1730
|
-
*
|
|
4055
|
+
* Canonical default mapping of GitHub `type:*` label values to funnel
|
|
4056
|
+
* tiers. Mirrors openhi's `DISPATCHER.md` Dispatch Table plus the
|
|
4057
|
+
* taxonomy documented in the Group D epic (#414, issue #473).
|
|
1731
4058
|
*
|
|
1732
|
-
*
|
|
1733
|
-
*
|
|
1734
|
-
*
|
|
1735
|
-
*
|
|
4059
|
+
* - **Tier 0 — routing.** Unblocks other work. Picked first on a
|
|
4060
|
+
* priority tie. Covers the issue-worker's own type labels
|
|
4061
|
+
* (`feat`, `fix`, `chore`, `refactor`, `docs`, `release`,
|
|
4062
|
+
* `hotfix`) plus classification-style labels (`plan`, `review`,
|
|
4063
|
+
* `adr`).
|
|
4064
|
+
* - **Tier 1 — research.** Feeds downstream pipelines.
|
|
4065
|
+
* - **Tier 2 — profiles.** Consumes research.
|
|
4066
|
+
* - **Tier 3 — synthesis.** Produces deliverables.
|
|
4067
|
+
* - **Tier 4 — support.** Important but not pipeline-critical.
|
|
1736
4068
|
*
|
|
1737
|
-
*
|
|
1738
|
-
* (
|
|
1739
|
-
*
|
|
1740
|
-
*
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
4069
|
+
* Consumers extend or override this list via
|
|
4070
|
+
* `AgentConfigOptions.tiers` (see `resolveAgentTiers`). Every
|
|
4071
|
+
* registered agent type must resolve to exactly one tier; unmapped
|
|
4072
|
+
* types fail synth-time validation.
|
|
4073
|
+
*/
|
|
4074
|
+
declare const DEFAULT_AGENT_TIERS: ReadonlyArray<ResolvedAgentTier>;
|
|
4075
|
+
/**
|
|
4076
|
+
* Fallback tier applied to issues whose `type:*` label does not match
|
|
4077
|
+
* any entry in the resolved tier table. Using tier 0 (routing) means
|
|
4078
|
+
* an unclassified or newly-introduced issue is dispatched **before**
|
|
4079
|
+
* lower-tier work on a priority tie, which matches the openhi
|
|
4080
|
+
* dispatcher's "routing unblocks other work" rule. The synth-time
|
|
4081
|
+
* validator still rejects **registered** custom types that omit a
|
|
4082
|
+
* tier assignment — the fallback exists only for unknown labels
|
|
4083
|
+
* encountered at runtime.
|
|
4084
|
+
*/
|
|
4085
|
+
declare const UNKNOWN_TYPE_FALLBACK_TIER: AgentTier;
|
|
4086
|
+
/**
|
|
4087
|
+
* Resolve a (possibly absent) consumer-supplied `AgentTierConfig` into
|
|
4088
|
+
* a deduplicated list of `ResolvedAgentTier` entries.
|
|
1744
4089
|
*
|
|
1745
|
-
*
|
|
1746
|
-
*
|
|
1747
|
-
* `
|
|
4090
|
+
* Precedence:
|
|
4091
|
+
*
|
|
4092
|
+
* 1. `config.tiers` fully **replaces** the default list when supplied.
|
|
4093
|
+
* This is the escape hatch for repos that want a bespoke taxonomy.
|
|
4094
|
+
* 2. `config.customTypes` entries **extend** whatever list is in play
|
|
4095
|
+
* (default or replacement). Later entries override earlier ones on
|
|
4096
|
+
* `type` collision, so consumer overrides win over defaults.
|
|
4097
|
+
*
|
|
4098
|
+
* @throws `Error` when any entry references a tier outside 0–4, when a
|
|
4099
|
+
* `type` is empty/whitespace, or when `config.tiers` is an
|
|
4100
|
+
* empty array (use omission to mean "keep the defaults").
|
|
1748
4101
|
*/
|
|
1749
|
-
declare
|
|
1750
|
-
|
|
4102
|
+
declare function resolveAgentTiers(config?: AgentTierConfig): ReadonlyArray<ResolvedAgentTier>;
|
|
1751
4103
|
/**
|
|
1752
|
-
*
|
|
4104
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
4105
|
+
* resolved tier list is malformed. Called by `AgentConfig` before
|
|
4106
|
+
* rendering so a misconfigured `AgentTierConfig` fails the build
|
|
4107
|
+
* instead of silently shipping broken sort keys.
|
|
4108
|
+
*
|
|
4109
|
+
* Malformed cases rejected here:
|
|
4110
|
+
*
|
|
4111
|
+
* - Duplicate `type` values **within** the same supplied list (the
|
|
4112
|
+
* resolver dedupes between the default list and `customTypes`, so
|
|
4113
|
+
* those collisions are fine; duplicates inside one list are not).
|
|
4114
|
+
* - Tier values outside 0–4.
|
|
4115
|
+
* - Empty or whitespace-only `type` strings.
|
|
4116
|
+
*
|
|
4117
|
+
* Returns the validated list unchanged so callers can write
|
|
4118
|
+
* `const tiers = validateAgentTierConfig(config)` in one line.
|
|
1753
4119
|
*/
|
|
1754
|
-
declare
|
|
1755
|
-
|
|
4120
|
+
declare function validateAgentTierConfig(config?: AgentTierConfig): ReadonlyArray<ResolvedAgentTier>;
|
|
1756
4121
|
/**
|
|
1757
|
-
*
|
|
1758
|
-
*
|
|
4122
|
+
* Render the funnel-tier subsection appended to the
|
|
4123
|
+
* `orchestrator-conventions` rule. Always returns a non-empty string
|
|
4124
|
+
* because the default tier list is non-empty — the orchestrator
|
|
4125
|
+
* always documents its sort order.
|
|
1759
4126
|
*/
|
|
1760
|
-
declare
|
|
4127
|
+
declare function renderAgentTierSection(tiers: ReadonlyArray<ResolvedAgentTier>): string;
|
|
4128
|
+
/**
|
|
4129
|
+
* Render a shell-script snippet that the `check-blocked.sh` procedure
|
|
4130
|
+
* uses to look up a tier for a given `type:*` label. Emitted as a
|
|
4131
|
+
* `case` statement so the generated script stays POSIX-shell
|
|
4132
|
+
* compatible (no associative arrays).
|
|
4133
|
+
*
|
|
4134
|
+
* The function returns the body of a shell function, not the
|
|
4135
|
+
* surrounding function wrapper, so bundle code can splice it inline
|
|
4136
|
+
* at the exact indent level it wants.
|
|
4137
|
+
*/
|
|
4138
|
+
declare function renderAgentTierCaseStatement(tiers: ReadonlyArray<ResolvedAgentTier>): string;
|
|
1761
4139
|
|
|
1762
4140
|
/**
|
|
1763
|
-
*
|
|
1764
|
-
*
|
|
4141
|
+
* Default for whether the unblock-dependents sweep runs at all. When
|
|
4142
|
+
* the consumer omits `UnblockDependentsConfig`, the bundle ships with
|
|
4143
|
+
* the sweep **enabled** so every `status:done` transition
|
|
4144
|
+
* automatically propagates into the dependency graph.
|
|
1765
4145
|
*
|
|
1766
|
-
*
|
|
1767
|
-
|
|
1768
|
-
|
|
4146
|
+
* @see UnblockDependentsConfig
|
|
4147
|
+
*/
|
|
4148
|
+
declare const DEFAULT_UNBLOCK_DEPENDENTS_ENABLED = true;
|
|
4149
|
+
/**
|
|
4150
|
+
* Default comment body posted on a newly-unblocked issue. Variables
|
|
4151
|
+
* are substituted at runtime by the `unblock-dependents.sh` script:
|
|
1769
4152
|
*
|
|
1770
|
-
*
|
|
1771
|
-
*
|
|
1772
|
-
* user-invocable skill (`/write-bcm`), and `type:bcm-document` plus
|
|
1773
|
-
* `bcm:*` phase labels.
|
|
4153
|
+
* - `<CLOSED_ISSUE>` — the `#<n>` reference to the issue whose
|
|
4154
|
+
* closure triggered the sweep (e.g. `#123`).
|
|
1774
4155
|
*
|
|
1775
|
-
* The
|
|
1776
|
-
* `
|
|
1777
|
-
*
|
|
1778
|
-
*
|
|
4156
|
+
* The placeholder syntax deliberately avoids `{{curly-brace}}` form —
|
|
4157
|
+
* `AgentConfig`'s template resolver claims that namespace at rule
|
|
4158
|
+
* generation time, so a `{{closedIssue}}` placeholder would be
|
|
4159
|
+
* rewritten before the agent ever saw it.
|
|
1779
4160
|
*/
|
|
1780
|
-
declare const
|
|
1781
|
-
|
|
4161
|
+
declare const DEFAULT_UNBLOCK_COMMENT_TEMPLATE = "Dependencies resolved by <CLOSED_ISSUE> \u2014 unblocking.";
|
|
1782
4162
|
/**
|
|
1783
|
-
*
|
|
4163
|
+
* Default comment body posted on a dependent whose other dependencies
|
|
4164
|
+
* are still open (partial unblock). Variables substituted at runtime:
|
|
1784
4165
|
*
|
|
1785
|
-
*
|
|
1786
|
-
*
|
|
1787
|
-
*
|
|
4166
|
+
* - `<CLOSED_ISSUE>` — the just-closed issue (`#<n>`).
|
|
4167
|
+
* - `<OPEN_DEPS>` — space-separated list of remaining open
|
|
4168
|
+
* dependencies (e.g. `#45 #47`).
|
|
1788
4169
|
*
|
|
1789
|
-
*
|
|
1790
|
-
*
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
4170
|
+
* Applied when `flagPartialUnblockWithAttention` is `true`; otherwise
|
|
4171
|
+
* no comment is posted and the dependent is left untouched.
|
|
4172
|
+
*/
|
|
4173
|
+
declare const DEFAULT_PARTIAL_UNBLOCK_COMMENT_TEMPLATE = "Dependency <CLOSED_ISSUE> resolved, but still waiting on: <OPEN_DEPS>.";
|
|
4174
|
+
/**
|
|
4175
|
+
* Fully-resolved unblock-dependents settings. Every field is defaulted
|
|
4176
|
+
* so downstream renderers can reason about a single canonical shape.
|
|
4177
|
+
*/
|
|
4178
|
+
interface ResolvedUnblockDependents {
|
|
4179
|
+
readonly enabled: boolean;
|
|
4180
|
+
readonly commentTemplate: string;
|
|
4181
|
+
readonly flagPartialUnblockWithAttention: boolean;
|
|
4182
|
+
readonly partialUnblockCommentTemplate: string;
|
|
4183
|
+
}
|
|
4184
|
+
/**
|
|
4185
|
+
* Resolve a (possibly absent) `UnblockDependentsConfig` into a canonical
|
|
4186
|
+
* `ResolvedUnblockDependents` with every field filled in. Unset fields
|
|
4187
|
+
* cascade from their documented defaults.
|
|
1794
4188
|
*
|
|
1795
|
-
*
|
|
1796
|
-
*
|
|
1797
|
-
*
|
|
1798
|
-
* capabilities via `bcm:outline` issues, and it is read by
|
|
1799
|
-
* `company-profile` via the shared `<BUSINESS_MODELS_ROOT>` default
|
|
1800
|
-
* path (`docs/src/content/docs/industry-research/`).
|
|
4189
|
+
* Malformed configs (empty / whitespace-only `commentTemplate`) throw
|
|
4190
|
+
* a descriptive `Error` — callers should not need to guard against it
|
|
4191
|
+
* at runtime.
|
|
1801
4192
|
*/
|
|
1802
|
-
declare
|
|
4193
|
+
declare function resolveUnblockDependents(config?: UnblockDependentsConfig): ResolvedUnblockDependents;
|
|
4194
|
+
/**
|
|
4195
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
4196
|
+
* supplied `UnblockDependentsConfig` is malformed. Called by
|
|
4197
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
4198
|
+
* sweep fails the build instead of silently shipping a broken
|
|
4199
|
+
* procedure script. Returns the resolved config unchanged so callers
|
|
4200
|
+
* can write `const ud = validateUnblockDependentsConfig(config)` in
|
|
4201
|
+
* one line.
|
|
4202
|
+
*
|
|
4203
|
+
* Malformed cases rejected here:
|
|
4204
|
+
*
|
|
4205
|
+
* - `commentTemplate` empty or whitespace-only.
|
|
4206
|
+
* - `partialUnblockCommentTemplate` empty or whitespace-only.
|
|
4207
|
+
*/
|
|
4208
|
+
declare function validateUnblockDependentsConfig(config?: UnblockDependentsConfig): ResolvedUnblockDependents;
|
|
4209
|
+
/**
|
|
4210
|
+
* Render the markdown subsection appended to the
|
|
4211
|
+
* `orchestrator-conventions` rule. Always returns a non-empty string
|
|
4212
|
+
* so the orchestrator rule documents the contract even when the
|
|
4213
|
+
* consumer relies on the defaults.
|
|
4214
|
+
*/
|
|
4215
|
+
declare function renderUnblockDependentsSection(ud: ResolvedUnblockDependents): string;
|
|
4216
|
+
/**
|
|
4217
|
+
* Render the full `unblock-dependents.sh` script body for a given
|
|
4218
|
+
* resolved unblock-dependents config. The script takes a single
|
|
4219
|
+
* positional argument (the just-closed issue number) and emits one
|
|
4220
|
+
* line per processed dependent in the canonical
|
|
4221
|
+
* `UNBLOCKED` / `STILL_BLOCKED` / `NO_DEPENDENTS` format.
|
|
4222
|
+
*
|
|
4223
|
+
* Exported so `AgentConfig.preSynthesize` can emit the procedure
|
|
4224
|
+
* alongside `check-blocked.sh`.
|
|
4225
|
+
*/
|
|
4226
|
+
declare function renderUnblockDependentsScript(ud: ResolvedUnblockDependents): string;
|
|
4227
|
+
|
|
4228
|
+
/**
|
|
4229
|
+
* Build the check-blocked.sh procedure definition for a given resolved
|
|
4230
|
+
* tier table, scope gate, run-ratio, and pre-flight config.
|
|
4231
|
+
* `AgentConfig.preSynthesize` calls this with the consumer's resolved
|
|
4232
|
+
* configs so the emitted script's `tier_of()` lookup, `scope_of()`
|
|
4233
|
+
* thresholds, `run_counter_tick()` cycle length, and `cmd_preflight()`
|
|
4234
|
+
* eligibility filter match whatever the rendered
|
|
4235
|
+
* orchestrator-conventions rule documents.
|
|
4236
|
+
*
|
|
4237
|
+
* Scope-gate settings default to the bundle's built-in defaults
|
|
4238
|
+
* (small: ≤3 AC + ≤2 sources; medium: ≤6 AC + ≤5 sources;
|
|
4239
|
+
* auto-file off) when the caller omits them. Run-ratio settings
|
|
4240
|
+
* default to the openhi 4:1 cadence with the counter persisted at
|
|
4241
|
+
* `.claude/state/orchestrator-runs.json`. Pre-flight settings default
|
|
4242
|
+
* to vortex's step 0b contract (enabled, delegated to the
|
|
4243
|
+
* `pr-reviewer` sub-agent, squash merges, linked-issue keyword
|
|
4244
|
+
* required).
|
|
4245
|
+
*/
|
|
4246
|
+
declare function buildCheckBlockedProcedure(tiers: ReadonlyArray<ResolvedAgentTier>, scopeGate?: ResolvedScopeGate, runRatio?: ResolvedRunRatio, preflight?: ResolvedPreflightPr): AgentProcedure;
|
|
4247
|
+
/*******************************************************************************
|
|
4248
|
+
*
|
|
4249
|
+
* unblock-dependents.sh — Targeted post-close dependency sweep.
|
|
4250
|
+
*
|
|
4251
|
+
* Called by every agent that applies `status:done` to an issue. The
|
|
4252
|
+
* script searches open issues for `Depends on: #<just-closed>` and
|
|
4253
|
+
* flips fully-resolved dependents from `status:blocked` to
|
|
4254
|
+
* `status:ready`.
|
|
4255
|
+
*
|
|
4256
|
+
* `buildUnblockDependentsProcedure()` is the factory that parameterises
|
|
4257
|
+
* the rendered script with a resolved `ResolvedUnblockDependents`;
|
|
4258
|
+
* `unblockDependentsProcedure` (declared below) is the default
|
|
4259
|
+
* instance that ships when the consumer supplies no override.
|
|
4260
|
+
*
|
|
4261
|
+
******************************************************************************/
|
|
4262
|
+
declare function buildUnblockDependentsProcedure(unblockDependents?: ResolvedUnblockDependents): AgentProcedure;
|
|
4263
|
+
/**
|
|
4264
|
+
* Build the orchestrator-conventions rule content for a given resolved
|
|
4265
|
+
* tier table, scope gate, run-ratio, pre-flight, scheduled-tasks, and
|
|
4266
|
+
* unblock-dependents config. The preamble is constant; each section
|
|
4267
|
+
* below it is rendered from the supplied values so consumer overrides
|
|
4268
|
+
* propagate into the generated rule.
|
|
4269
|
+
*
|
|
4270
|
+
* Every optional parameter defaults to the bundle's built-in default
|
|
4271
|
+
* when the caller omits it.
|
|
4272
|
+
*/
|
|
4273
|
+
declare function buildOrchestratorConventionsContent(tiers: ReadonlyArray<ResolvedAgentTier>, scopeGate?: ResolvedScopeGate, runRatio?: ResolvedRunRatio, preflight?: ResolvedPreflightPr, scheduledTasks?: ResolvedScheduledTasks, unblockDependents?: ResolvedUnblockDependents): string;
|
|
4274
|
+
/**
|
|
4275
|
+
* Resolve the orchestrator-conventions rule content and the
|
|
4276
|
+
* check-blocked.sh procedure content for a given (possibly absent)
|
|
4277
|
+
* consumer-supplied tier config, scope-gate config, run-ratio config,
|
|
4278
|
+
* pre-flight config, and scheduled-tasks config. Called by
|
|
4279
|
+
* `AgentConfig.preSynthesize`.
|
|
4280
|
+
*
|
|
4281
|
+
* Returns the resolved tier table, scope gate, run ratio, pre-flight,
|
|
4282
|
+
* and scheduled-tasks config alongside both rendered artifacts so
|
|
4283
|
+
* callers can splice them into their rule map and procedure map in a
|
|
4284
|
+
* single pass.
|
|
4285
|
+
*/
|
|
4286
|
+
declare function resolveOrchestratorAssets(tierConfig?: AgentTierConfig, scopeGateConfig?: ScopeGateConfig, runRatioConfig?: RunRatioConfig, preflightPrConfig?: PreflightPrConfig, scheduledTasksConfig?: ScheduledTasksConfig, unblockDependentsConfig?: UnblockDependentsConfig): {
|
|
4287
|
+
readonly tiers: ReadonlyArray<ResolvedAgentTier>;
|
|
4288
|
+
readonly scopeGate: ResolvedScopeGate;
|
|
4289
|
+
readonly runRatio: ResolvedRunRatio;
|
|
4290
|
+
readonly preflight: ResolvedPreflightPr;
|
|
4291
|
+
readonly scheduledTasks: ResolvedScheduledTasks;
|
|
4292
|
+
readonly unblockDependents: ResolvedUnblockDependents;
|
|
4293
|
+
readonly conventionsContent: string;
|
|
4294
|
+
readonly procedure: AgentProcedure;
|
|
4295
|
+
readonly unblockDependentsProcedure: AgentProcedure;
|
|
4296
|
+
};
|
|
4297
|
+
/*******************************************************************************
|
|
4298
|
+
*
|
|
4299
|
+
* Bundle definition
|
|
4300
|
+
*
|
|
4301
|
+
******************************************************************************/
|
|
4302
|
+
declare const orchestratorBundle: AgentRuleBundle;
|
|
1803
4303
|
|
|
1804
4304
|
/**
|
|
1805
|
-
*
|
|
4305
|
+
* People-profile bundle — enabled by default.
|
|
1806
4306
|
*
|
|
1807
4307
|
* Consuming projects can disable it with
|
|
1808
|
-
* `excludeBundles: ["
|
|
4308
|
+
* `excludeBundles: ["people-profile"]`. `appliesWhen` always returns
|
|
1809
4309
|
* `true` per the operating-system directive that bundles assume peers
|
|
1810
4310
|
* are present — in Phase 3 this bundle hands work off to
|
|
1811
|
-
* `
|
|
1812
|
-
* `software:research`).
|
|
4311
|
+
* `company-profile` (via `company:research`) and `software-profile`
|
|
4312
|
+
* (via `software:research`).
|
|
1813
4313
|
*
|
|
1814
|
-
* Ships a sub-agent (`
|
|
1815
|
-
* skills (`/profile-
|
|
1816
|
-
*
|
|
1817
|
-
* phase labels for the six phases.
|
|
4314
|
+
* Ships a sub-agent (`people-profile-analyst`), two user-invocable
|
|
4315
|
+
* skills (`/profile-person`, `/refresh-person`), and `type:people-profile`
|
|
4316
|
+
* plus `people:*` phase labels for the four phases.
|
|
1818
4317
|
*/
|
|
1819
|
-
declare
|
|
4318
|
+
declare function buildPeopleProfileBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
4319
|
+
/**
|
|
4320
|
+
* Default-paths instance of the people-profile bundle, preserved for
|
|
4321
|
+
* backward compatibility with consumers that import the const
|
|
4322
|
+
* directly. The factory above is the canonical entry point when a
|
|
4323
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
4324
|
+
*/
|
|
4325
|
+
declare const peopleProfileBundle: AgentRuleBundle;
|
|
1820
4326
|
|
|
1821
4327
|
/**
|
|
1822
|
-
*
|
|
4328
|
+
* PNPM bundle — auto-detected when the PnpmWorkspace component is present.
|
|
1823
4329
|
*/
|
|
1824
|
-
declare const
|
|
4330
|
+
declare const pnpmBundle: AgentRuleBundle;
|
|
1825
4331
|
|
|
1826
4332
|
/**
|
|
1827
|
-
*
|
|
4333
|
+
* Default master switch for the issue-templates convention. When no
|
|
4334
|
+
* config is supplied the convention ships **enabled** so every
|
|
4335
|
+
* configulator-consuming repo carries the canonical `gh issue create`
|
|
4336
|
+
* template reference in its rendered `CLAUDE.md`.
|
|
1828
4337
|
*
|
|
1829
|
-
*
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
4338
|
+
* @see IssueTemplatesConfig
|
|
4339
|
+
*/
|
|
4340
|
+
declare const DEFAULT_ISSUE_TEMPLATES_ENABLED = true;
|
|
4341
|
+
/**
|
|
4342
|
+
* Default repo-relative path for the consolidated issue-templates
|
|
4343
|
+
* documentation page. Matches the singleton `/docs` site layout every
|
|
4344
|
+
* configulator-managed repo ships: a single Starlight docs site at
|
|
4345
|
+
* `/docs` with agent reference pages under
|
|
4346
|
+
* `docs/src/content/docs/agents/`.
|
|
1833
4347
|
*
|
|
1834
|
-
*
|
|
1835
|
-
*
|
|
1836
|
-
*
|
|
4348
|
+
* The file is never generated by configulator unless `emitStarterDoc`
|
|
4349
|
+
* is set — the canonical list of templates is repo-specific and grows
|
|
4350
|
+
* whenever a new phase label is minted, so consumers author and evolve
|
|
4351
|
+
* the page themselves. The starter doc is opt-in.
|
|
1837
4352
|
*
|
|
1838
|
-
*
|
|
1839
|
-
* Phase 3 can hand off cleared verticals via `research:scope` issues.
|
|
4353
|
+
* @see IssueTemplatesConfig
|
|
1840
4354
|
*/
|
|
1841
|
-
declare const
|
|
1842
|
-
|
|
4355
|
+
declare const DEFAULT_ISSUE_TEMPLATES_PATH = "docs/src/content/docs/agents/issue-templates.md";
|
|
1843
4356
|
/**
|
|
1844
|
-
*
|
|
4357
|
+
* Default list of glob patterns that identify "bundle files" — the
|
|
4358
|
+
* source files that compose agent prompts and skill instructions.
|
|
4359
|
+
* These are the locations the optional lint walks when checking that
|
|
4360
|
+
* `gh issue create` snippets are **referenced** rather than inlined.
|
|
4361
|
+
*
|
|
4362
|
+
* The defaults cover the two canonical locations bundle-like content
|
|
4363
|
+
* lives in a configulator-consuming repo:
|
|
4364
|
+
*
|
|
4365
|
+
* - `packages/@codedrifters/configulator/src/agent/bundles/**.ts` —
|
|
4366
|
+
* the bundle authoring sites inside configulator itself.
|
|
4367
|
+
* - `.claude/agents/**.md` / `.claude/skills/**` — agent and skill
|
|
4368
|
+
* prompts in consuming repos that don't re-export configulator
|
|
4369
|
+
* bundles.
|
|
4370
|
+
*
|
|
4371
|
+
* Consumers can replace the list outright via `bundlePathPatterns`
|
|
4372
|
+
* when their agent sources live elsewhere.
|
|
4373
|
+
*
|
|
4374
|
+
* @see IssueTemplatesConfig
|
|
1845
4375
|
*/
|
|
1846
|
-
declare const
|
|
1847
|
-
|
|
4376
|
+
declare const DEFAULT_ISSUE_TEMPLATES_BUNDLE_PATH_PATTERNS: ReadonlyArray<string>;
|
|
1848
4377
|
/**
|
|
1849
|
-
*
|
|
4378
|
+
* Default for whether the convention emits the
|
|
4379
|
+
* `.claude/procedures/check-issue-templates.sh` lint to disk. The
|
|
4380
|
+
* script greps the provided files (stdin or positional args) for
|
|
4381
|
+
* inline `gh issue create` invocations and fails non-zero when any
|
|
4382
|
+
* are found outside a fenced example block that cites the canonical
|
|
4383
|
+
* templates doc.
|
|
1850
4384
|
*
|
|
1851
|
-
*
|
|
1852
|
-
*
|
|
1853
|
-
*
|
|
1854
|
-
*
|
|
4385
|
+
* Disabled by default because many consumers prefer to enforce the
|
|
4386
|
+
* rule via review discipline and the rendered guidance alone; the
|
|
4387
|
+
* script is opt-in for repos that want a hard CI gate or pre-commit
|
|
4388
|
+
* hook.
|
|
1855
4389
|
*
|
|
1856
|
-
*
|
|
1857
|
-
* (scan → fix → verify) designed for any project with structured doc
|
|
1858
|
-
* registries and cross-references. Ships a sub-agent, two user-
|
|
1859
|
-
* invocable skills (`/audit-docs`, `/verify-audit`), and `maint:*`
|
|
1860
|
-
* phase labels via the bundle `labels` mechanism so consuming projects
|
|
1861
|
-
* automatically pick up the label taxonomy through the sync-labels
|
|
1862
|
-
* workflow.
|
|
4390
|
+
* @see IssueTemplatesConfig
|
|
1863
4391
|
*/
|
|
1864
|
-
declare const
|
|
1865
|
-
|
|
4392
|
+
declare const DEFAULT_ISSUE_TEMPLATES_EMIT_CHECKER = false;
|
|
1866
4393
|
/**
|
|
1867
|
-
*
|
|
1868
|
-
*
|
|
4394
|
+
* Default for whether the convention emits a minimal starter
|
|
4395
|
+
* issue-templates page to disk at `<templatesPath>`. The starter
|
|
4396
|
+
* carries the expected structure (one `## Template: <phase-label>`
|
|
4397
|
+
* heading per known phase plus a placeholder body) so consumers
|
|
4398
|
+
* adopting the convention on a green-field repo have a working
|
|
4399
|
+
* template to extend.
|
|
4400
|
+
*
|
|
4401
|
+
* Disabled by default because the page is hand-authored and most
|
|
4402
|
+
* repos adopt the convention after they already maintain their own
|
|
4403
|
+
* ad-hoc notes — an emitted stub would conflict with existing
|
|
4404
|
+
* content.
|
|
4405
|
+
*
|
|
4406
|
+
* @see IssueTemplatesConfig
|
|
1869
4407
|
*/
|
|
1870
|
-
declare const
|
|
1871
|
-
|
|
1872
|
-
|
|
4408
|
+
declare const DEFAULT_ISSUE_TEMPLATES_EMIT_STARTER = false;
|
|
4409
|
+
/**
|
|
4410
|
+
* Default for whether the rendered rule body asserts that every
|
|
4411
|
+
* `gh issue create` recipe in a bundle or agent prompt **MUST** cite
|
|
4412
|
+
* the canonical templates doc rather than inline a full template.
|
|
1873
4413
|
*
|
|
1874
|
-
*
|
|
4414
|
+
* Defaults to `true` — the whole point of consolidation is that
|
|
4415
|
+
* templates live in one place, so the MUST phrasing is the correct
|
|
4416
|
+
* default. Consumers that treat consolidation as aspirational can
|
|
4417
|
+
* soften the phrasing by setting this to `false`.
|
|
1875
4418
|
*
|
|
1876
|
-
|
|
1877
|
-
|
|
4419
|
+
* @see IssueTemplatesConfig
|
|
4420
|
+
*/
|
|
4421
|
+
declare const DEFAULT_ISSUE_TEMPLATES_REQUIRE_REFERENCE = true;
|
|
4422
|
+
/**
|
|
4423
|
+
* Fully-resolved issue-templates settings. Every field is defaulted
|
|
4424
|
+
* so downstream renderers can reason about a single canonical shape.
|
|
4425
|
+
*/
|
|
4426
|
+
interface ResolvedIssueTemplates {
|
|
4427
|
+
readonly enabled: boolean;
|
|
4428
|
+
readonly templatesPath: string;
|
|
4429
|
+
readonly bundlePathPatterns: ReadonlyArray<string>;
|
|
4430
|
+
readonly emitChecker: boolean;
|
|
4431
|
+
readonly emitStarterDoc: boolean;
|
|
4432
|
+
readonly requireReference: boolean;
|
|
4433
|
+
}
|
|
4434
|
+
/**
|
|
4435
|
+
* Resolve a (possibly absent) `IssueTemplatesConfig` into a canonical
|
|
4436
|
+
* `ResolvedIssueTemplates` with every field filled in. Unset fields
|
|
4437
|
+
* cascade from their documented defaults.
|
|
4438
|
+
*
|
|
4439
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
4440
|
+
* `templatesPath`, empty `bundlePathPatterns`, empty /
|
|
4441
|
+
* whitespace-only path entry — throw a descriptive `Error`.
|
|
4442
|
+
*/
|
|
4443
|
+
declare function resolveIssueTemplates(config?: IssueTemplatesConfig): ResolvedIssueTemplates;
|
|
4444
|
+
/**
|
|
4445
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
4446
|
+
* supplied `IssueTemplatesConfig` is malformed. Called by
|
|
4447
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
4448
|
+
* convention fails the build instead of silently shipping broken
|
|
4449
|
+
* guidance. Returns the resolved config unchanged so callers can
|
|
4450
|
+
* write `const it = validateIssueTemplatesConfig(config)` in one line.
|
|
4451
|
+
*
|
|
4452
|
+
* Malformed cases rejected here:
|
|
4453
|
+
*
|
|
4454
|
+
* - `templatesPath` empty, whitespace-only, or absolute.
|
|
4455
|
+
* - `bundlePathPatterns` not an array, empty, or contains an empty /
|
|
4456
|
+
* whitespace-only entry.
|
|
4457
|
+
*/
|
|
4458
|
+
declare function validateIssueTemplatesConfig(config?: IssueTemplatesConfig): ResolvedIssueTemplates;
|
|
4459
|
+
/**
|
|
4460
|
+
* Render the full body for the `issue-templates-convention` rule
|
|
4461
|
+
* shipped by the `base` bundle. The rule documents:
|
|
4462
|
+
*
|
|
4463
|
+
* - Why the convention exists (drift between duplicated
|
|
4464
|
+
* `gh issue create` snippets across bundles).
|
|
4465
|
+
* - The on-disk contract — a single hand-authored page at
|
|
4466
|
+
* `<templatesPath>` with one `## Template: <phase-label>` section
|
|
4467
|
+
* per downstream issue kind.
|
|
4468
|
+
* - The **reference-don't-inline** rule, phrased as a hard
|
|
4469
|
+
* requirement or a strong recommendation per `requireReference`.
|
|
4470
|
+
* - The set of paths the rule applies to.
|
|
4471
|
+
* - The optional lint script (cross-referenced only when emitted).
|
|
4472
|
+
*
|
|
4473
|
+
* When the convention is disabled, the rule renders a short stub.
|
|
4474
|
+
*/
|
|
4475
|
+
declare function renderIssueTemplatesRuleContent(it: ResolvedIssueTemplates): string;
|
|
4476
|
+
/**
|
|
4477
|
+
* Render the short issue-templates hook section injected into a
|
|
4478
|
+
* phased-agent bundle's workflow rule. The section cites the full
|
|
4479
|
+
* contract documented in the base bundle's
|
|
4480
|
+
* `issue-templates-convention` rule so individual bundles stay DRY.
|
|
4481
|
+
*
|
|
4482
|
+
* When the convention is disabled, the function returns an empty
|
|
4483
|
+
* string so callers can no-op their append path.
|
|
4484
|
+
*/
|
|
4485
|
+
declare function renderIssueTemplatesBundleHook(it: ResolvedIssueTemplates, bundleLabel: string): string;
|
|
4486
|
+
/**
|
|
4487
|
+
* Render a minimal starter issue-templates page — a top-level
|
|
4488
|
+
* heading, the "How to use" preamble, and a single example template
|
|
4489
|
+
* section. Exported so `AgentConfig` can emit it to disk when the
|
|
4490
|
+
* consumer opts in via `emitStarterDoc: true`.
|
|
4491
|
+
*
|
|
4492
|
+
* The starter is deliberately sparse: it documents the expected
|
|
4493
|
+
* structure without committing the consumer to a particular phase
|
|
4494
|
+
* label list. Repos that already maintain a hand-authored templates
|
|
4495
|
+
* page should leave `emitStarterDoc` off — the emission would
|
|
4496
|
+
* overwrite their content.
|
|
4497
|
+
*/
|
|
4498
|
+
declare function renderIssueTemplatesStarterPage(_it: ResolvedIssueTemplates): string;
|
|
4499
|
+
/**
|
|
4500
|
+
* Render the `.claude/procedures/check-issue-templates.sh` helper
|
|
4501
|
+
* script. Exported so `AgentConfig` can register it as an
|
|
4502
|
+
* `AgentProcedure` when the consumer opts in via `emitChecker: true`.
|
|
4503
|
+
*
|
|
4504
|
+
* The script accepts the list of changed files as either:
|
|
4505
|
+
*
|
|
4506
|
+
* 1. Positional arguments (one file per arg).
|
|
4507
|
+
* 2. Newline-separated entries on stdin (when no args supplied) —
|
|
4508
|
+
* pipe `git diff --name-only` directly into it.
|
|
4509
|
+
*
|
|
4510
|
+
* It fails non-zero when any changed file matches a bundle-path
|
|
4511
|
+
* pattern and contains a multi-line `gh issue create ... --title`
|
|
4512
|
+
* invocation that isn't in the configured allow list (the templates
|
|
4513
|
+
* page itself and the `create-issue-workflow` rule source).
|
|
4514
|
+
*/
|
|
4515
|
+
declare function renderIssueTemplatesCheckerScript(it: ResolvedIssueTemplates): string;
|
|
1878
4516
|
|
|
1879
4517
|
/**
|
|
1880
|
-
*
|
|
4518
|
+
* Default master switch for the progress-file convention. When no
|
|
4519
|
+
* config is supplied, the convention ships **enabled** so every phased
|
|
4520
|
+
* agent writes a progress file on claim and reads it on resume.
|
|
1881
4521
|
*
|
|
1882
|
-
*
|
|
1883
|
-
* `DEFAULT_AGENT_PATHS`, and the shape that `resolveAgentPaths()`
|
|
1884
|
-
* returns when consumers supply a partial `AgentPathsConfig` override.
|
|
4522
|
+
* @see ProgressFilesConfig
|
|
1885
4523
|
*/
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
4524
|
+
declare const DEFAULT_PROGRESS_FILES_ENABLED = true;
|
|
4525
|
+
/**
|
|
4526
|
+
* Default on-disk root for progress files, relative to the repo root.
|
|
4527
|
+
* Every progress file resolves to
|
|
4528
|
+
* `<stateDir>/<filename>` where `<filename>` is produced from
|
|
4529
|
+
* `filenamePattern` at runtime.
|
|
4530
|
+
*
|
|
4531
|
+
* @see ProgressFilesConfig
|
|
4532
|
+
*/
|
|
4533
|
+
declare const DEFAULT_PROGRESS_FILES_STATE_DIR = ".claude/state";
|
|
4534
|
+
/**
|
|
4535
|
+
* Default filename pattern for a progress file. The `<ISSUE_NUMBER>`
|
|
4536
|
+
* placeholder is substituted at runtime with the numeric id of the
|
|
4537
|
+
* issue the agent is working on (e.g. `479-progress.json`).
|
|
4538
|
+
*
|
|
4539
|
+
* The placeholder uses the angle-bracketed uppercase-snake form — not
|
|
4540
|
+
* `{{curly-brace}}` form — because `AgentConfig`'s template resolver
|
|
4541
|
+
* claims the curly-brace namespace at rule generation time.
|
|
4542
|
+
*
|
|
4543
|
+
* @see ProgressFilesConfig
|
|
4544
|
+
*/
|
|
4545
|
+
declare const DEFAULT_PROGRESS_FILES_FILENAME_PATTERN = "<ISSUE_NUMBER>-progress.json";
|
|
4546
|
+
/**
|
|
4547
|
+
* Default serialization format for a progress file body. JSON is the
|
|
4548
|
+
* default because it is trivially machine-parseable (e.g. for scripted
|
|
4549
|
+
* resume logic) while still remaining human-readable when opened.
|
|
4550
|
+
* Consumers that prefer the openhi-style markdown body can override.
|
|
4551
|
+
*
|
|
4552
|
+
* @see ProgressFilesConfig
|
|
4553
|
+
*/
|
|
4554
|
+
declare const DEFAULT_PROGRESS_FILES_FORMAT: "json" | "markdown";
|
|
4555
|
+
/**
|
|
4556
|
+
* Default stale-threshold (hours) for branches carrying a progress
|
|
4557
|
+
* file. When the orchestrator's stale-branch decision tree finds a
|
|
4558
|
+
* progress file older than this many hours **and** no matching open
|
|
4559
|
+
* PR, it treats the branch as abandoned and resets the issue to
|
|
4560
|
+
* `status:ready`. Mirrors the 72-hour in-progress threshold used by
|
|
4561
|
+
* the orchestrator bundle's triage walk.
|
|
4562
|
+
*
|
|
4563
|
+
* @see ProgressFilesConfig
|
|
4564
|
+
*/
|
|
4565
|
+
declare const DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS = 72;
|
|
4566
|
+
/**
|
|
4567
|
+
* Allowed values for `ProgressFilesConfig.format`. Exported so
|
|
4568
|
+
* consumers can reference the canonical set without hard-coding
|
|
4569
|
+
* literals.
|
|
4570
|
+
*/
|
|
4571
|
+
declare const PROGRESS_FILES_FORMAT_VALUES: readonly ["json", "markdown"];
|
|
4572
|
+
/**
|
|
4573
|
+
* Fully-resolved progress-file settings. Every field is defaulted so
|
|
4574
|
+
* downstream renderers can reason about a single canonical shape.
|
|
4575
|
+
*/
|
|
4576
|
+
interface ResolvedProgressFiles {
|
|
4577
|
+
readonly enabled: boolean;
|
|
4578
|
+
readonly stateDir: string;
|
|
4579
|
+
readonly filenamePattern: string;
|
|
4580
|
+
readonly format: "json" | "markdown";
|
|
4581
|
+
readonly cleanupOnComplete: boolean;
|
|
4582
|
+
readonly staleAfterHours: number;
|
|
1898
4583
|
}
|
|
1899
4584
|
/**
|
|
1900
|
-
*
|
|
1901
|
-
*
|
|
1902
|
-
*
|
|
1903
|
-
* content at module-eval time without changing the generated
|
|
1904
|
-
* `.claude/rules/*.md` snapshot.
|
|
4585
|
+
* Resolve a (possibly absent) `ProgressFilesConfig` into a canonical
|
|
4586
|
+
* `ResolvedProgressFiles` with every field filled in. Unset fields
|
|
4587
|
+
* cascade from their documented defaults.
|
|
1905
4588
|
*
|
|
1906
|
-
*
|
|
1907
|
-
*
|
|
1908
|
-
*
|
|
1909
|
-
*
|
|
1910
|
-
* resolver land in this PR; the `AgentConfig.resolveRules` wiring lands
|
|
1911
|
-
* next.
|
|
4589
|
+
* Malformed configs — empty / whitespace-only `stateDir`, absolute
|
|
4590
|
+
* `stateDir`, empty / whitespace-only `filenamePattern`, `filenamePattern`
|
|
4591
|
+
* missing the `<ISSUE_NUMBER>` placeholder, unknown `format` value,
|
|
4592
|
+
* non-positive `staleAfterHours` — throw a descriptive `Error`.
|
|
1912
4593
|
*/
|
|
1913
|
-
declare
|
|
4594
|
+
declare function resolveProgressFiles(config?: ProgressFilesConfig): ResolvedProgressFiles;
|
|
1914
4595
|
/**
|
|
1915
|
-
*
|
|
1916
|
-
* `
|
|
4596
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
4597
|
+
* supplied `ProgressFilesConfig` is malformed. Called by
|
|
4598
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
4599
|
+
* convention fails the build instead of silently shipping broken
|
|
4600
|
+
* resume semantics. Returns the resolved config unchanged so callers
|
|
4601
|
+
* can write `const pf = validateProgressFilesConfig(config)` in
|
|
4602
|
+
* one line.
|
|
4603
|
+
*
|
|
4604
|
+
* Malformed cases rejected here:
|
|
4605
|
+
*
|
|
4606
|
+
* - `stateDir` empty, whitespace-only, or absolute.
|
|
4607
|
+
* - `filenamePattern` empty, whitespace-only, or missing the
|
|
4608
|
+
* `<ISSUE_NUMBER>` placeholder.
|
|
4609
|
+
* - `format` not one of `"json"` / `"markdown"`.
|
|
4610
|
+
* - `staleAfterHours` non-integer, zero, or negative.
|
|
4611
|
+
*/
|
|
4612
|
+
declare function validateProgressFilesConfig(config?: ProgressFilesConfig): ResolvedProgressFiles;
|
|
4613
|
+
/**
|
|
4614
|
+
* Resolve the runtime filename for a progress file given an issue
|
|
4615
|
+
* number and a resolved config. `<ISSUE_NUMBER>` placeholders in the
|
|
4616
|
+
* pattern are substituted; the returned value is **just** the filename
|
|
4617
|
+
* (no directory prefix).
|
|
1917
4618
|
*
|
|
1918
|
-
* -
|
|
1919
|
-
*
|
|
1920
|
-
* - `researchRequirementsRoot` derives from `researchRoot` when not
|
|
1921
|
-
* explicitly set.
|
|
1922
|
-
* - `peopleRoot`, `companiesRoot`, `softwareRoot`, and `industriesRoot`
|
|
1923
|
-
* derive from the resolved `profilesRoot` when not explicitly set,
|
|
1924
|
-
* so that overriding `docsRoot` alone (or overriding `profilesRoot`
|
|
1925
|
-
* alone) propagates correctly through every dependent root.
|
|
4619
|
+
* Exported so consumer-side scripts (or the `partial-resume-protocol`
|
|
4620
|
+
* rule renderer) can compute the on-disk path deterministically.
|
|
1926
4621
|
*/
|
|
1927
|
-
declare function
|
|
1928
|
-
|
|
4622
|
+
declare function renderProgressFileName(pf: ResolvedProgressFiles, issueNumber: number | string): string;
|
|
1929
4623
|
/**
|
|
1930
|
-
*
|
|
4624
|
+
* Resolve the runtime path (directory + filename) for a progress file
|
|
4625
|
+
* given an issue number and a resolved config.
|
|
4626
|
+
*/
|
|
4627
|
+
declare function renderProgressFilePath(pf: ResolvedProgressFiles, issueNumber: number | string): string;
|
|
4628
|
+
/**
|
|
4629
|
+
* Render the full body for the `progress-file-convention` rule shipped
|
|
4630
|
+
* by the `base` bundle. The rule documents:
|
|
1931
4631
|
*
|
|
1932
|
-
*
|
|
1933
|
-
*
|
|
1934
|
-
*
|
|
1935
|
-
*
|
|
1936
|
-
*
|
|
1937
|
-
*
|
|
4632
|
+
* - The progress-file schema and on-disk path contract.
|
|
4633
|
+
* - The partial-resume protocol (read-before-write + acceptance
|
|
4634
|
+
* criteria replay).
|
|
4635
|
+
* - The stale-branch decision tree (clone-level recovery) that every
|
|
4636
|
+
* worker runs at session start.
|
|
4637
|
+
* - The `[BLOCKED]` structured comment format used when an agent
|
|
4638
|
+
* cannot proceed.
|
|
1938
4639
|
*
|
|
1939
|
-
*
|
|
1940
|
-
*
|
|
1941
|
-
*
|
|
4640
|
+
* When the convention is disabled, the rule renders a short stub that
|
|
4641
|
+
* tells agents the project does not enforce progress files and they
|
|
4642
|
+
* must pick up work from scratch on every session.
|
|
1942
4643
|
*/
|
|
1943
|
-
declare
|
|
1944
|
-
|
|
4644
|
+
declare function renderProgressFilesRuleContent(pf: ResolvedProgressFiles): string;
|
|
1945
4645
|
/**
|
|
1946
|
-
*
|
|
4646
|
+
* Render the short progress-file hook section injected into a
|
|
4647
|
+
* phased-agent bundle's workflow rule (bcm-writer, research-pipeline,
|
|
4648
|
+
* etc.). The section cites the full contract documented in the base
|
|
4649
|
+
* bundle's `progress-file-convention` rule so individual bundles stay
|
|
4650
|
+
* DRY.
|
|
4651
|
+
*
|
|
4652
|
+
* When the convention is disabled, the function returns an empty
|
|
4653
|
+
* string so callers can no-op their append path.
|
|
1947
4654
|
*/
|
|
1948
|
-
declare
|
|
4655
|
+
declare function renderProgressFilesBundleHook(pf: ResolvedProgressFiles, bundleLabel: string): string;
|
|
1949
4656
|
|
|
1950
4657
|
/*******************************************************************************
|
|
1951
4658
|
*
|
|
@@ -1961,6 +4668,36 @@ declare const prReviewBundle: AgentRuleBundle;
|
|
|
1961
4668
|
*/
|
|
1962
4669
|
declare const projenBundle: AgentRuleBundle;
|
|
1963
4670
|
|
|
4671
|
+
/**
|
|
4672
|
+
* Regulatory-research bundle — enabled by default.
|
|
4673
|
+
*
|
|
4674
|
+
* Consuming projects can disable it with
|
|
4675
|
+
* `excludeBundles: ["regulatory-research"]`. `appliesWhen` always
|
|
4676
|
+
* returns `true` per the workflow-bundle peer-present assumption.
|
|
4677
|
+
*
|
|
4678
|
+
* Ships a sub-agent (`regulatory-research-analyst`), three
|
|
4679
|
+
* user-invocable skills (`/scan-regulatory-landscape`,
|
|
4680
|
+
* `/research-regulation`, `/impact-regulation`), a regulation-page
|
|
4681
|
+
* template (emitted alongside the research skill), and
|
|
4682
|
+
* `type:regulatory-research` plus `regulatory:*` phase labels.
|
|
4683
|
+
*
|
|
4684
|
+
* The bundle sits downstream of `research-pipeline`,
|
|
4685
|
+
* `industry-discovery`, and `standards-research` (which surface the
|
|
4686
|
+
* need for regulatory research) and hands off actionable obligations
|
|
4687
|
+
* to the `requirements-analyst` bundle via `req:scan` issues that
|
|
4688
|
+
* become SEC (security & compliance) requirements in the writer
|
|
4689
|
+
* pipeline, and canonical profiles to `company-profile` and
|
|
4690
|
+
* `people-profile` for enforcement bodies and regulatory leaders.
|
|
4691
|
+
*/
|
|
4692
|
+
declare function buildRegulatoryResearchBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
4693
|
+
/**
|
|
4694
|
+
* Default-paths instance of the regulatory-research bundle, preserved
|
|
4695
|
+
* for backward compatibility with consumers that import the const
|
|
4696
|
+
* directly. The factory above is the canonical entry point when a
|
|
4697
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
4698
|
+
*/
|
|
4699
|
+
declare const regulatoryResearchBundle: AgentRuleBundle;
|
|
4700
|
+
|
|
1964
4701
|
/**
|
|
1965
4702
|
* Inject domain-specific source-tier examples into the content of the
|
|
1966
4703
|
* base bundle's "Source Quality & Verification" rule.
|
|
@@ -2060,15 +4797,481 @@ declare function renderMeetingTypesSection(meetings: MeetingsConfig | undefined)
|
|
|
2060
4797
|
declare function renderPriorityRulesSection(rules: ReadonlyArray<PriorityRule>): string;
|
|
2061
4798
|
|
|
2062
4799
|
/**
|
|
2063
|
-
*
|
|
4800
|
+
* Default master switch for the shared-editing convention. When no
|
|
4801
|
+
* config is supplied, the convention ships **enabled** so every agent
|
|
4802
|
+
* that edits an index file follows the single-entry / verify /
|
|
4803
|
+
* re-sort protocol.
|
|
4804
|
+
*
|
|
4805
|
+
* @see SharedEditingConfig
|
|
4806
|
+
*/
|
|
4807
|
+
declare const DEFAULT_SHARED_EDITING_ENABLED = true;
|
|
4808
|
+
/**
|
|
4809
|
+
* Default list of path patterns considered "shared index files". The
|
|
4810
|
+
* patterns are plain glob strings rendered verbatim into the rule body
|
|
4811
|
+
* — agents match against them when deciding whether the shared-editing
|
|
4812
|
+
* contract applies to the file they are about to edit.
|
|
4813
|
+
*
|
|
4814
|
+
* The defaults cover the registry / index files every configulator
|
|
4815
|
+
* consumer ships by convention:
|
|
4816
|
+
*
|
|
4817
|
+
* - A monorepo-wide docs site at `/docs` with one or more `index.md` /
|
|
4818
|
+
* `README.md` registry tables.
|
|
4819
|
+
* - Category landing pages under `docs/src/content/docs/**` that list
|
|
4820
|
+
* every profile, requirement, or capability in their category.
|
|
4821
|
+
* - Feature matrices produced by the `software-profile` bundle.
|
|
4822
|
+
*
|
|
4823
|
+
* Consumers can replace the list outright via `sharedIndexPaths` or
|
|
4824
|
+
* append project-specific registries.
|
|
4825
|
+
*
|
|
4826
|
+
* @see SharedEditingConfig
|
|
4827
|
+
*/
|
|
4828
|
+
declare const DEFAULT_SHARED_INDEX_PATHS: ReadonlyArray<string>;
|
|
4829
|
+
/**
|
|
4830
|
+
* Default conflict-resolution strategy rendered into the rule body.
|
|
4831
|
+
* `rebase` matches the `git pull --rebase` workflow every
|
|
4832
|
+
* configulator-managed repo already uses for feature branches; the
|
|
4833
|
+
* alternative (`merge`) is documented for projects that keep a
|
|
4834
|
+
* merge-commit-only history.
|
|
4835
|
+
*
|
|
4836
|
+
* @see SharedEditingConfig
|
|
4837
|
+
*/
|
|
4838
|
+
declare const DEFAULT_SHARED_EDITING_CONFLICT_STRATEGY: "rebase" | "merge";
|
|
4839
|
+
/**
|
|
4840
|
+
* Default for whether the convention renders the commit-path
|
|
4841
|
+
* verification protocol (read-back + single-row assertion). The
|
|
4842
|
+
* verification step is cheap, catches staging / path bugs that would
|
|
4843
|
+
* otherwise land on the branch, and is the core safety net the openhi
|
|
4844
|
+
* reference promotes — so it ships **on** by default.
|
|
4845
|
+
*
|
|
4846
|
+
* @see SharedEditingConfig
|
|
4847
|
+
*/
|
|
4848
|
+
declare const DEFAULT_SHARED_EDITING_VERIFY_COMMIT = true;
|
|
4849
|
+
/**
|
|
4850
|
+
* Default for whether the convention emits the
|
|
4851
|
+
* `.claude/procedures/verify-index-row.sh` helper to disk. The helper
|
|
4852
|
+
* is opt-in because many consumers prefer to do the verification
|
|
4853
|
+
* inline via the documented `git show HEAD:<path>` recipe rather than
|
|
4854
|
+
* shell out to a dedicated script. Consumers that want the script
|
|
4855
|
+
* available to sub-agents enable the emission explicitly.
|
|
4856
|
+
*
|
|
4857
|
+
* @see SharedEditingConfig
|
|
4858
|
+
*/
|
|
4859
|
+
declare const DEFAULT_SHARED_EDITING_EMIT_HELPER = false;
|
|
4860
|
+
/**
|
|
4861
|
+
* Allowed values for `SharedEditingConfig.conflictStrategy`. Exported
|
|
4862
|
+
* so consumers can reference the canonical set without hard-coding
|
|
4863
|
+
* literals.
|
|
4864
|
+
*/
|
|
4865
|
+
declare const SHARED_EDITING_CONFLICT_STRATEGY_VALUES: readonly ["rebase", "merge"];
|
|
4866
|
+
/**
|
|
4867
|
+
* Fully-resolved shared-editing settings. Every field is defaulted so
|
|
4868
|
+
* downstream renderers can reason about a single canonical shape.
|
|
4869
|
+
*/
|
|
4870
|
+
interface ResolvedSharedEditing {
|
|
4871
|
+
readonly enabled: boolean;
|
|
4872
|
+
readonly sharedIndexPaths: ReadonlyArray<string>;
|
|
4873
|
+
readonly verifyCommit: boolean;
|
|
4874
|
+
readonly conflictStrategy: "rebase" | "merge";
|
|
4875
|
+
readonly emitHelper: boolean;
|
|
4876
|
+
}
|
|
4877
|
+
/**
|
|
4878
|
+
* Resolve a (possibly absent) `SharedEditingConfig` into a canonical
|
|
4879
|
+
* `ResolvedSharedEditing` with every field filled in. Unset fields
|
|
4880
|
+
* cascade from their documented defaults.
|
|
4881
|
+
*
|
|
4882
|
+
* Malformed configs — empty / whitespace-only `sharedIndexPaths`
|
|
4883
|
+
* entry, unknown `conflictStrategy` — throw a descriptive `Error`.
|
|
4884
|
+
*/
|
|
4885
|
+
declare function resolveSharedEditing(config?: SharedEditingConfig): ResolvedSharedEditing;
|
|
4886
|
+
/**
|
|
4887
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
4888
|
+
* supplied `SharedEditingConfig` is malformed. Called by
|
|
4889
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
4890
|
+
* convention fails the build instead of silently shipping broken
|
|
4891
|
+
* shared-editing guidance. Returns the resolved config unchanged so
|
|
4892
|
+
* callers can write `const se = validateSharedEditingConfig(config)`
|
|
4893
|
+
* in one line.
|
|
4894
|
+
*
|
|
4895
|
+
* Malformed cases rejected here:
|
|
4896
|
+
*
|
|
4897
|
+
* - `sharedIndexPaths` contains an empty / whitespace-only entry, or
|
|
4898
|
+
* the array is supplied but empty.
|
|
4899
|
+
* - `conflictStrategy` is not one of `"rebase"` / `"merge"`.
|
|
4900
|
+
*/
|
|
4901
|
+
declare function validateSharedEditingConfig(config?: SharedEditingConfig): ResolvedSharedEditing;
|
|
4902
|
+
/**
|
|
4903
|
+
* Render the full body for the `shared-editing-safety` rule shipped
|
|
4904
|
+
* by the `base` bundle. The rule documents:
|
|
4905
|
+
*
|
|
4906
|
+
* - The catalog of shared index files the contract applies to.
|
|
4907
|
+
* - The pre-edit read-latest protocol (pull + re-read before editing).
|
|
4908
|
+
* - The single-entry, deterministic-sort row-insert rule.
|
|
4909
|
+
* - The commit-path verification step (read-back + count assertion).
|
|
4910
|
+
* - The merge-conflict resolution recipe (rebase, re-sort, re-verify).
|
|
4911
|
+
*
|
|
4912
|
+
* When the convention is disabled, the rule renders a short stub that
|
|
4913
|
+
* tells agents the project does not enforce the convention and that
|
|
4914
|
+
* concurrent edits to shared index files may require manual conflict
|
|
4915
|
+
* resolution.
|
|
4916
|
+
*/
|
|
4917
|
+
declare function renderSharedEditingRuleContent(se: ResolvedSharedEditing): string;
|
|
4918
|
+
/**
|
|
4919
|
+
* Render the short shared-editing hook section injected into a
|
|
4920
|
+
* phased-agent bundle's workflow rule (company-profile,
|
|
4921
|
+
* people-profile, software-profile, etc.). The section cites the
|
|
4922
|
+
* full contract documented in the base bundle's
|
|
4923
|
+
* `shared-editing-safety` rule so individual bundles stay DRY.
|
|
4924
|
+
*
|
|
4925
|
+
* When the convention is disabled, the function returns an empty
|
|
4926
|
+
* string so callers can no-op their append path.
|
|
4927
|
+
*/
|
|
4928
|
+
declare function renderSharedEditingBundleHook(se: ResolvedSharedEditing, bundleLabel: string): string;
|
|
4929
|
+
/**
|
|
4930
|
+
* Render the `.claude/procedures/verify-index-row.sh` helper script.
|
|
4931
|
+
* Exported so `AgentConfig` can register it as an `AgentProcedure`
|
|
4932
|
+
* when the consumer opts in via `emitHelper: true`.
|
|
4933
|
+
*
|
|
4934
|
+
* The script takes two positional arguments:
|
|
4935
|
+
*
|
|
4936
|
+
* 1. `<index-path>` — repo-relative path to the shared index file.
|
|
4937
|
+
* 2. `<row-unique-marker>` — substring unique to the new row.
|
|
4938
|
+
*
|
|
4939
|
+
* It exits non-zero on any of the following:
|
|
4940
|
+
*
|
|
4941
|
+
* - Wrong argument count.
|
|
4942
|
+
* - Index file is not present in `HEAD` (i.e. not staged).
|
|
4943
|
+
* - The unique-marker substring appears zero times (row missing)
|
|
4944
|
+
* or more than once (duplicate row from a mis-merged conflict).
|
|
4945
|
+
*/
|
|
4946
|
+
declare function renderSharedEditingHelperScript(_se: ResolvedSharedEditing): string;
|
|
4947
|
+
|
|
4948
|
+
/**
|
|
4949
|
+
* Default master switch for the skill-eval harness convention. When no
|
|
4950
|
+
* config is supplied, the convention ships **enabled** so every skill
|
|
4951
|
+
* that ships an `evals/evals.json` file has a documented schema,
|
|
4952
|
+
* runner entry-point, and product-context injection contract.
|
|
4953
|
+
*
|
|
4954
|
+
* @see SkillEvalsConfig
|
|
4955
|
+
*/
|
|
4956
|
+
declare const DEFAULT_SKILL_EVALS_ENABLED = true;
|
|
4957
|
+
/**
|
|
4958
|
+
* Default root directory (relative to the repo root) that holds every
|
|
4959
|
+
* skill's SKILL.md. The harness contract says that any skill SKILL.md
|
|
4960
|
+
* under this root may ship an `evals/evals.json` file alongside it —
|
|
4961
|
+
* the runner discovers eval suites by walking
|
|
4962
|
+
* `<skillsRoot>/<skill-name>/evals/evals.json`.
|
|
4963
|
+
*
|
|
4964
|
+
* Defaults to `.claude/skills`, which matches the location every
|
|
4965
|
+
* configulator-managed project ships skills to on disk.
|
|
4966
|
+
*
|
|
4967
|
+
* @see SkillEvalsConfig
|
|
4968
|
+
*/
|
|
4969
|
+
declare const DEFAULT_SKILL_EVALS_SKILLS_ROOT = ".claude/skills";
|
|
4970
|
+
/**
|
|
4971
|
+
* Default path to the product-context fixture consumed by every eval
|
|
4972
|
+
* suite. Configulator ships with a `docs/src/content/docs/project-context.md`
|
|
4973
|
+
* file that every agent already loads at session start; the eval harness
|
|
4974
|
+
* re-uses that file so eval prompts are parameterised by the consuming
|
|
4975
|
+
* project's domain vocabulary, in-scope capabilities, and stakeholders
|
|
4976
|
+
* without the evals needing per-project forks.
|
|
4977
|
+
*
|
|
4978
|
+
* @see SkillEvalsConfig
|
|
4979
|
+
*/
|
|
4980
|
+
declare const DEFAULT_PRODUCT_CONTEXT_PATH = "docs/src/content/docs/project-context.md";
|
|
4981
|
+
/**
|
|
4982
|
+
* Default policy for whether the harness should **require** a
|
|
4983
|
+
* product-context file to be present before running the suite.
|
|
4984
|
+
*
|
|
4985
|
+
* `true` (default) — the runner fails fast when the file is missing,
|
|
4986
|
+
* because an eval that silently runs without its product-context
|
|
4987
|
+
* fixture is a false-positive waiting to happen.
|
|
4988
|
+
*
|
|
4989
|
+
* `false` — the runner emits a warning to stderr but still runs the
|
|
4990
|
+
* suite. Useful for bootstrapping a new consuming repo that has not
|
|
4991
|
+
* yet authored its `project-context.md`.
|
|
4992
|
+
*
|
|
4993
|
+
* @see SkillEvalsConfig
|
|
4994
|
+
*/
|
|
4995
|
+
declare const DEFAULT_REQUIRE_PRODUCT_CONTEXT = true;
|
|
4996
|
+
/**
|
|
4997
|
+
* Default for whether the convention emits the
|
|
4998
|
+
* `.claude/procedures/run-skill-evals.sh` helper to disk. The helper
|
|
4999
|
+
* is opt-in because many consumers run evals from CI or ad-hoc from
|
|
5000
|
+
* their own scripts rather than through the bundled harness; consumers
|
|
5001
|
+
* who want a ready-to-invoke runner flip this to `true`.
|
|
5002
|
+
*
|
|
5003
|
+
* @see SkillEvalsConfig
|
|
5004
|
+
*/
|
|
5005
|
+
declare const DEFAULT_SKILL_EVALS_EMIT_RUNNER = false;
|
|
5006
|
+
/**
|
|
5007
|
+
* Fully-resolved skill-evals settings. Every field is defaulted so
|
|
5008
|
+
* downstream renderers can reason about a single canonical shape.
|
|
5009
|
+
*/
|
|
5010
|
+
interface ResolvedSkillEvals {
|
|
5011
|
+
readonly enabled: boolean;
|
|
5012
|
+
readonly skillsRoot: string;
|
|
5013
|
+
readonly productContextPath: string;
|
|
5014
|
+
readonly requireProductContext: boolean;
|
|
5015
|
+
readonly emitRunner: boolean;
|
|
5016
|
+
}
|
|
5017
|
+
/**
|
|
5018
|
+
* Resolve a (possibly absent) `SkillEvalsConfig` into a canonical
|
|
5019
|
+
* `ResolvedSkillEvals` with every field filled in. Unset fields
|
|
5020
|
+
* cascade from their documented defaults.
|
|
5021
|
+
*
|
|
5022
|
+
* Malformed configs — empty / whitespace-only or absolute `skillsRoot`,
|
|
5023
|
+
* empty / whitespace-only or absolute `productContextPath` — throw a
|
|
5024
|
+
* descriptive `Error`.
|
|
5025
|
+
*/
|
|
5026
|
+
declare function resolveSkillEvals(config?: SkillEvalsConfig): ResolvedSkillEvals;
|
|
5027
|
+
/**
|
|
5028
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
5029
|
+
* supplied `SkillEvalsConfig` is malformed. Called by
|
|
5030
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
5031
|
+
* convention fails the build instead of silently shipping a broken
|
|
5032
|
+
* eval harness. Returns the resolved config unchanged so callers can
|
|
5033
|
+
* write `const se = validateSkillEvalsConfig(config)` in one line.
|
|
5034
|
+
*
|
|
5035
|
+
* Malformed cases rejected here:
|
|
5036
|
+
*
|
|
5037
|
+
* - `skillsRoot` empty, whitespace-only, or absolute.
|
|
5038
|
+
* - `productContextPath` empty, whitespace-only, or absolute.
|
|
5039
|
+
*/
|
|
5040
|
+
declare function validateSkillEvalsConfig(config?: SkillEvalsConfig): ResolvedSkillEvals;
|
|
5041
|
+
/**
|
|
5042
|
+
* Render the full body for the `skill-evals` rule shipped by the
|
|
5043
|
+
* `base` bundle. The rule documents:
|
|
5044
|
+
*
|
|
5045
|
+
* - The on-disk contract (where `evals/evals.json` lives).
|
|
5046
|
+
* - The JSON schema every eval file follows.
|
|
5047
|
+
* - The product-context injection protocol (how evals reference and
|
|
5048
|
+
* interpolate the repo's `project-context.md` without forking).
|
|
5049
|
+
* - The runner entry-point (`run-skill-evals.sh` when opted in, or
|
|
5050
|
+
* the inline `jq`-driven recipe when not).
|
|
5051
|
+
*
|
|
5052
|
+
* When the convention is disabled, the rule renders a short stub that
|
|
5053
|
+
* tells agents the project does not ship skill evals and that skill
|
|
5054
|
+
* changes ride on review alone.
|
|
5055
|
+
*/
|
|
5056
|
+
declare function renderSkillEvalsRuleContent(se: ResolvedSkillEvals): string;
|
|
5057
|
+
/**
|
|
5058
|
+
* Render the short skill-evals hook section injected into a skill's
|
|
5059
|
+
* owning bundle rule (requirements-writer, bcm-writer, etc.). The
|
|
5060
|
+
* section cites the full contract documented in the base bundle's
|
|
5061
|
+
* `skill-evals` rule so individual bundles stay DRY.
|
|
5062
|
+
*
|
|
5063
|
+
* When the convention is disabled, the function returns an empty
|
|
5064
|
+
* string so callers can no-op their append path.
|
|
5065
|
+
*/
|
|
5066
|
+
declare function renderSkillEvalsBundleHook(se: ResolvedSkillEvals, skillLabel: string): string;
|
|
5067
|
+
/**
|
|
5068
|
+
* Render the `.claude/procedures/run-skill-evals.sh` helper script.
|
|
5069
|
+
* Exported so `AgentConfig` can register it as an `AgentProcedure`
|
|
5070
|
+
* when the consumer opts in via `emitRunner: true`.
|
|
5071
|
+
*
|
|
5072
|
+
* The script takes zero or one positional arguments:
|
|
5073
|
+
*
|
|
5074
|
+
* 1. `[<skill-name>]` — optional, restricts the run to one skill.
|
|
5075
|
+
*
|
|
5076
|
+
* It exits non-zero on any of the following:
|
|
5077
|
+
*
|
|
5078
|
+
* - `jq` is not available on `PATH`.
|
|
5079
|
+
* - A discovered `evals.json` is malformed or missing required fields.
|
|
5080
|
+
* - `skill_name` inside the file does not match the parent directory.
|
|
5081
|
+
* - The product-context fixture is missing and `requireProductContext`
|
|
5082
|
+
* is `true` in the resolved config.
|
|
5083
|
+
*/
|
|
5084
|
+
declare function renderSkillEvalsRunnerScript(se: ResolvedSkillEvals): string;
|
|
5085
|
+
|
|
5086
|
+
/**
|
|
5087
|
+
* Default master switch for the workflow-diagrams convention. When no
|
|
5088
|
+
* config is supplied the convention ships **enabled** so every
|
|
5089
|
+
* configulator-consuming repo carries the "diagram-touched-when-bundle-
|
|
5090
|
+
* touched" rule in its rendered `CLAUDE.md`.
|
|
5091
|
+
*
|
|
5092
|
+
* @see WorkflowDiagramsConfig
|
|
5093
|
+
*/
|
|
5094
|
+
declare const DEFAULT_WORKFLOW_DIAGRAMS_ENABLED = true;
|
|
5095
|
+
/**
|
|
5096
|
+
* Default repo-relative path for the workflow-diagrams page. Matches
|
|
5097
|
+
* the singleton `/docs` site layout the monorepo contract assumes: a
|
|
5098
|
+
* single Starlight docs site at `/docs` with sub-project agent pages
|
|
5099
|
+
* under `docs/src/content/docs/agents/`.
|
|
5100
|
+
*
|
|
5101
|
+
* The file is never generated by configulator (the convention is
|
|
5102
|
+
* explicit: diagrams are hand-authored for readability). Consumers
|
|
5103
|
+
* opt into the starter stub via `emitStarterDiagram: true`.
|
|
5104
|
+
*
|
|
5105
|
+
* @see WorkflowDiagramsConfig
|
|
5106
|
+
*/
|
|
5107
|
+
declare const DEFAULT_WORKFLOW_DIAGRAMS_PATH = "docs/src/content/docs/agents/workflows.md";
|
|
5108
|
+
/**
|
|
5109
|
+
* Default list of glob patterns that identify "bundle files" — the
|
|
5110
|
+
* source files whose edits require the workflow-diagrams page to be
|
|
5111
|
+
* touched in the same change set.
|
|
5112
|
+
*
|
|
5113
|
+
* The defaults cover the two canonical locations bundle-like content
|
|
5114
|
+
* lives in a configulator-consuming repo:
|
|
5115
|
+
*
|
|
5116
|
+
* - `packages/@codedrifters/configulator/src/agent/bundles/**.ts` —
|
|
5117
|
+
* the bundle authoring sites inside configulator itself.
|
|
5118
|
+
* - `.claude/agents/**.md` / `.claude/skills/**` — agent and skill
|
|
5119
|
+
* prompts in consuming repos that don't re-export configulator
|
|
5120
|
+
* bundles.
|
|
5121
|
+
*
|
|
5122
|
+
* Consumers can replace the list outright via `bundlePathPatterns`
|
|
5123
|
+
* when their agent sources live elsewhere (e.g. a monorepo that keeps
|
|
5124
|
+
* agents under `tools/agents/`).
|
|
5125
|
+
*
|
|
5126
|
+
* @see WorkflowDiagramsConfig
|
|
5127
|
+
*/
|
|
5128
|
+
declare const DEFAULT_WORKFLOW_DIAGRAMS_BUNDLE_PATH_PATTERNS: ReadonlyArray<string>;
|
|
5129
|
+
/**
|
|
5130
|
+
* Default for whether the convention emits a starter workflow-diagrams
|
|
5131
|
+
* page to disk at `<diagramsPath>`. Disabled by default because the
|
|
5132
|
+
* page is hand-authored — an emitted stub would conflict with
|
|
5133
|
+
* existing content on repos adopting the convention late.
|
|
5134
|
+
*
|
|
5135
|
+
* @see WorkflowDiagramsConfig
|
|
5136
|
+
*/
|
|
5137
|
+
declare const DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER = false;
|
|
5138
|
+
/**
|
|
5139
|
+
* Default for whether the convention emits the
|
|
5140
|
+
* `.claude/procedures/check-workflow-diagrams.sh` checker script. The
|
|
5141
|
+
* script walks the staged / changed-file set and fails when a bundle
|
|
5142
|
+
* file is touched without the diagrams page being touched too.
|
|
5143
|
+
*
|
|
5144
|
+
* Disabled by default because many consumers prefer to enforce the
|
|
5145
|
+
* rule via review discipline and the rendered documentation alone;
|
|
5146
|
+
* the script is opt-in for repos that want a hard CI gate or
|
|
5147
|
+
* pre-commit hook.
|
|
5148
|
+
*
|
|
5149
|
+
* @see WorkflowDiagramsConfig
|
|
5150
|
+
*/
|
|
5151
|
+
declare const DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER = false;
|
|
5152
|
+
/**
|
|
5153
|
+
* Default for whether the rendered rule body asserts the diagram
|
|
5154
|
+
* update as a **hard requirement** vs. a **strong recommendation**.
|
|
5155
|
+
* Defaults to `true` — the whole point of the convention is that
|
|
5156
|
+
* diagrams stay in sync, so the hard-requirement phrasing is the
|
|
5157
|
+
* correct default. Consumers that treat diagrams as aspirational can
|
|
5158
|
+
* soften the phrasing by setting this to `false`.
|
|
5159
|
+
*
|
|
5160
|
+
* @see WorkflowDiagramsConfig
|
|
5161
|
+
*/
|
|
5162
|
+
declare const DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE = true;
|
|
5163
|
+
/**
|
|
5164
|
+
* Fully-resolved workflow-diagrams settings. Every field is defaulted
|
|
5165
|
+
* so downstream renderers can reason about a single canonical shape.
|
|
5166
|
+
*/
|
|
5167
|
+
interface ResolvedWorkflowDiagrams {
|
|
5168
|
+
readonly enabled: boolean;
|
|
5169
|
+
readonly diagramsPath: string;
|
|
5170
|
+
readonly bundlePathPatterns: ReadonlyArray<string>;
|
|
5171
|
+
readonly emitStarterDiagram: boolean;
|
|
5172
|
+
readonly emitChecker: boolean;
|
|
5173
|
+
readonly requireDiagramUpdate: boolean;
|
|
5174
|
+
}
|
|
5175
|
+
/**
|
|
5176
|
+
* Resolve a (possibly absent) `WorkflowDiagramsConfig` into a
|
|
5177
|
+
* canonical `ResolvedWorkflowDiagrams` with every field filled in.
|
|
5178
|
+
* Unset fields cascade from their documented defaults.
|
|
5179
|
+
*
|
|
5180
|
+
* Malformed configs — empty / whitespace-only or absolute
|
|
5181
|
+
* `diagramsPath`, empty `bundlePathPatterns`, empty /
|
|
5182
|
+
* whitespace-only path entry — throw a descriptive `Error`.
|
|
5183
|
+
*/
|
|
5184
|
+
declare function resolveWorkflowDiagrams(config?: WorkflowDiagramsConfig): ResolvedWorkflowDiagrams;
|
|
5185
|
+
/**
|
|
5186
|
+
* Synth-time validation hook. Throws a descriptive `Error` when the
|
|
5187
|
+
* supplied `WorkflowDiagramsConfig` is malformed. Called by
|
|
5188
|
+
* `AgentConfig.preSynthesize` before any rendering so a misconfigured
|
|
5189
|
+
* convention fails the build instead of silently shipping broken
|
|
5190
|
+
* workflow-diagrams guidance. Returns the resolved config unchanged
|
|
5191
|
+
* so callers can write
|
|
5192
|
+
* `const wd = validateWorkflowDiagramsConfig(config)` in one line.
|
|
5193
|
+
*
|
|
5194
|
+
* Malformed cases rejected here:
|
|
5195
|
+
*
|
|
5196
|
+
* - `diagramsPath` empty, whitespace-only, or absolute.
|
|
5197
|
+
* - `bundlePathPatterns` not an array, empty, or contains an empty /
|
|
5198
|
+
* whitespace-only entry.
|
|
5199
|
+
*/
|
|
5200
|
+
declare function validateWorkflowDiagramsConfig(config?: WorkflowDiagramsConfig): ResolvedWorkflowDiagrams;
|
|
5201
|
+
/**
|
|
5202
|
+
* Render the full body for the `workflow-diagrams-convention` rule
|
|
5203
|
+
* shipped by the `base` bundle. The rule documents:
|
|
5204
|
+
*
|
|
5205
|
+
* - Why the convention exists (diagram / prose drift).
|
|
5206
|
+
* - The on-disk contract — a single Mermaid-based page at
|
|
5207
|
+
* `<diagramsPath>` with one diagram per agent + a master
|
|
5208
|
+
* cross-agent diagram.
|
|
5209
|
+
* - The **diagram-touched-when-bundle-touched** rule, phrased as a
|
|
5210
|
+
* hard requirement or a strong recommendation per
|
|
5211
|
+
* `requireDiagramUpdate`.
|
|
5212
|
+
* - The set of paths the rule applies to.
|
|
5213
|
+
* - The optional checker script (cross-referenced only when emitted).
|
|
5214
|
+
*
|
|
5215
|
+
* When the convention is disabled, the rule renders a short stub.
|
|
5216
|
+
*/
|
|
5217
|
+
declare function renderWorkflowDiagramsRuleContent(wd: ResolvedWorkflowDiagrams): string;
|
|
5218
|
+
/**
|
|
5219
|
+
* Render the short workflow-diagrams hook section injected into a
|
|
5220
|
+
* phased-agent bundle's workflow rule. The section cites the full
|
|
5221
|
+
* contract documented in the base bundle's
|
|
5222
|
+
* `workflow-diagrams-convention` rule so individual bundles stay DRY.
|
|
5223
|
+
*
|
|
5224
|
+
* When the convention is disabled, the function returns an empty
|
|
5225
|
+
* string so callers can no-op their append path.
|
|
5226
|
+
*/
|
|
5227
|
+
declare function renderWorkflowDiagramsBundleHook(wd: ResolvedWorkflowDiagrams, bundleLabel: string): string;
|
|
5228
|
+
/**
|
|
5229
|
+
* Render a minimal starter workflow-diagrams page — a top-level
|
|
5230
|
+
* heading, the master-diagram placeholder, and a single example
|
|
5231
|
+
* agent section. Exported so `AgentConfig` can emit it to disk when
|
|
5232
|
+
* the consumer opts in via `emitStarterDiagram: true`.
|
|
5233
|
+
*
|
|
5234
|
+
* The starter is deliberately sparse: it documents the expected
|
|
5235
|
+
* structure without committing the consumer to a particular agent
|
|
5236
|
+
* list. Repos that already maintain a hand-authored diagrams page
|
|
5237
|
+
* should leave `emitStarterDiagram` off — the emission would
|
|
5238
|
+
* overwrite their content.
|
|
5239
|
+
*/
|
|
5240
|
+
declare function renderWorkflowDiagramsStarterPage(_wd: ResolvedWorkflowDiagrams): string;
|
|
5241
|
+
/**
|
|
5242
|
+
* Render the `.claude/procedures/check-workflow-diagrams.sh` helper
|
|
5243
|
+
* script. Exported so `AgentConfig` can register it as an
|
|
5244
|
+
* `AgentProcedure` when the consumer opts in via `emitChecker: true`.
|
|
5245
|
+
*
|
|
5246
|
+
* The script accepts the list of changed files as either:
|
|
5247
|
+
*
|
|
5248
|
+
* 1. Positional arguments (one file per arg).
|
|
5249
|
+
* 2. Newline-separated entries on stdin (when no args supplied) —
|
|
5250
|
+
* pipe `git diff --name-only` directly into it.
|
|
5251
|
+
*
|
|
5252
|
+
* It fails non-zero when any changed file matches a bundle-path
|
|
5253
|
+
* pattern and the configured diagrams path is not also in the list.
|
|
5254
|
+
* It exits `0` when no bundle files were touched or when the
|
|
5255
|
+
* diagrams page was touched alongside them.
|
|
5256
|
+
*/
|
|
5257
|
+
declare function renderWorkflowDiagramsCheckerScript(wd: ResolvedWorkflowDiagrams): string;
|
|
5258
|
+
|
|
5259
|
+
/**
|
|
5260
|
+
* Build the requirements-analyst bundle with the supplied resolved
|
|
5261
|
+
* paths.
|
|
2064
5262
|
*
|
|
2065
|
-
*
|
|
2066
|
-
*
|
|
2067
|
-
*
|
|
2068
|
-
*
|
|
2069
|
-
*
|
|
2070
|
-
|
|
2071
|
-
|
|
5263
|
+
* Every reference to a canonical agent path (docs root, requirements
|
|
5264
|
+
* root, bcm root, etc.) inside the rule / skill / sub-agent content
|
|
5265
|
+
* strings is an interpolation of the supplied `paths` struct, so a
|
|
5266
|
+
* consumer override of `AgentConfigOptions.paths` propagates to the
|
|
5267
|
+
* rendered output.
|
|
5268
|
+
*/
|
|
5269
|
+
declare function buildRequirementsAnalystBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
5270
|
+
/**
|
|
5271
|
+
* Default-paths instance of the requirements-analyst bundle, preserved
|
|
5272
|
+
* for backward compatibility with consumers that import the const
|
|
5273
|
+
* directly. The factory above is the canonical entry point when a
|
|
5274
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
2072
5275
|
*/
|
|
2073
5276
|
declare const requirementsAnalystBundle: AgentRuleBundle;
|
|
2074
5277
|
|
|
@@ -2103,6 +5306,13 @@ declare const requirementsAnalystBundle: AgentRuleBundle;
|
|
|
2103
5306
|
* phase label so they share the same queue and triage flow as the
|
|
2104
5307
|
* rest of the requirements pipeline.
|
|
2105
5308
|
*/
|
|
5309
|
+
declare function buildRequirementsReviewerBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
5310
|
+
/**
|
|
5311
|
+
* Default-paths instance of the requirements-reviewer bundle, preserved
|
|
5312
|
+
* for backward compatibility with consumers that import the const
|
|
5313
|
+
* directly. The factory above is the canonical entry point when a
|
|
5314
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
5315
|
+
*/
|
|
2106
5316
|
declare const requirementsReviewerBundle: AgentRuleBundle;
|
|
2107
5317
|
|
|
2108
5318
|
/**
|
|
@@ -2139,18 +5349,29 @@ declare const REQUIREMENTS_WRITER_PATHS: {
|
|
|
2139
5349
|
* `type:requirement` is intentionally **not** declared here — it is
|
|
2140
5350
|
* already declared by the `requirements-analyst` bundle and reused.
|
|
2141
5351
|
*/
|
|
5352
|
+
declare function buildRequirementsWriterBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
5353
|
+
/**
|
|
5354
|
+
* Default-paths instance of the requirements-writer bundle, preserved
|
|
5355
|
+
* for backward compatibility with consumers that import the const
|
|
5356
|
+
* directly. The factory above is the canonical entry point when a
|
|
5357
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
5358
|
+
*/
|
|
2142
5359
|
declare const requirementsWriterBundle: AgentRuleBundle;
|
|
2143
5360
|
|
|
2144
5361
|
/**
|
|
2145
|
-
*
|
|
2146
|
-
*
|
|
2147
|
-
* Consuming projects can disable it with
|
|
2148
|
-
* `excludeBundles: ["research-pipeline"]`. `appliesWhen` always returns
|
|
2149
|
-
* `true` per this batch's directive that bundles assume peers are
|
|
2150
|
-
* present.
|
|
5362
|
+
* Build the research-pipeline bundle with the supplied resolved paths.
|
|
2151
5363
|
*
|
|
2152
|
-
*
|
|
2153
|
-
*
|
|
5364
|
+
* Every reference to a canonical agent path (research root, docs root,
|
|
5365
|
+
* etc.) inside the rule / skill / sub-agent content strings is an
|
|
5366
|
+
* interpolation of the supplied `paths` struct, so a consumer override
|
|
5367
|
+
* of `AgentConfigOptions.paths` propagates to the rendered output.
|
|
5368
|
+
*/
|
|
5369
|
+
declare function buildResearchPipelineBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
5370
|
+
/**
|
|
5371
|
+
* Default-paths instance of the research-pipeline bundle, preserved
|
|
5372
|
+
* for backward compatibility with consumers that import the const
|
|
5373
|
+
* directly. The factory above is the canonical entry point when a
|
|
5374
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
2154
5375
|
*/
|
|
2155
5376
|
declare const researchPipelineBundle: AgentRuleBundle;
|
|
2156
5377
|
|
|
@@ -2168,6 +5389,13 @@ declare const researchPipelineBundle: AgentRuleBundle;
|
|
|
2168
5389
|
declare const slackBundle: AgentRuleBundle;
|
|
2169
5390
|
|
|
2170
5391
|
/**
|
|
5392
|
+
* Build the software-profile bundle with the supplied resolved paths.
|
|
5393
|
+
*
|
|
5394
|
+
* Every reference to a canonical agent path (docs root, bcm root)
|
|
5395
|
+
* inside the rule / skill / sub-agent content strings is an
|
|
5396
|
+
* interpolation of the supplied `paths` struct, so a consumer override
|
|
5397
|
+
* of `AgentConfigOptions.paths` propagates to the rendered output.
|
|
5398
|
+
*
|
|
2171
5399
|
* Software-profile bundle — enabled by default.
|
|
2172
5400
|
*
|
|
2173
5401
|
* Consuming projects can disable it with
|
|
@@ -2182,8 +5410,49 @@ declare const slackBundle: AgentRuleBundle;
|
|
|
2182
5410
|
* skills (`/profile-software` and `/map-software`), and
|
|
2183
5411
|
* `type:software-profile` plus `software:*` phase labels.
|
|
2184
5412
|
*/
|
|
5413
|
+
declare function buildSoftwareProfileBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
5414
|
+
/**
|
|
5415
|
+
* Default-paths instance of the software-profile bundle, preserved
|
|
5416
|
+
* for backward compatibility with consumers that import the const
|
|
5417
|
+
* directly. The factory above is the canonical entry point when a
|
|
5418
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
5419
|
+
*/
|
|
2185
5420
|
declare const softwareProfileBundle: AgentRuleBundle;
|
|
2186
5421
|
|
|
5422
|
+
/**
|
|
5423
|
+
* Build the standards-research bundle with the supplied resolved paths.
|
|
5424
|
+
*
|
|
5425
|
+
* Every reference to a canonical agent path (docs root, research root,
|
|
5426
|
+
* etc.) inside the rule / skill / sub-agent content strings is an
|
|
5427
|
+
* interpolation of the supplied `paths` struct, so a consumer override
|
|
5428
|
+
* of `AgentConfigOptions.paths` propagates to the rendered output.
|
|
5429
|
+
*
|
|
5430
|
+
* Consuming projects can disable it with
|
|
5431
|
+
* `excludeBundles: ["standards-research"]`. `appliesWhen` always
|
|
5432
|
+
* returns `true` per the workflow-bundle peer-present assumption.
|
|
5433
|
+
*
|
|
5434
|
+
* Ships a sub-agent (`standards-research-analyst`), five user-invocable
|
|
5435
|
+
* skills (`/scope-standards-research`, `/research-standard`,
|
|
5436
|
+
* `/compare-standards`, `/extension-standard`,
|
|
5437
|
+
* `/organizations-standard`), a comparison-grid template (emitted
|
|
5438
|
+
* alongside the compare skill), and `type:standards-research` plus
|
|
5439
|
+
* `standards:*` phase labels.
|
|
5440
|
+
*
|
|
5441
|
+
* The bundle sits downstream of `research-pipeline` and
|
|
5442
|
+
* `industry-discovery` (which surface the need for standards research)
|
|
5443
|
+
* and hands off canonical profiles to `company-profile` and
|
|
5444
|
+
* `people-profile`, extension ADRs to `requirements-writer`, and
|
|
5445
|
+
* domain-entity mappings to `bcm-writer`.
|
|
5446
|
+
*/
|
|
5447
|
+
declare function buildStandardsResearchBundle(paths?: ResolvedAgentPaths): AgentRuleBundle;
|
|
5448
|
+
/**
|
|
5449
|
+
* Default-paths instance of the standards-research bundle, preserved
|
|
5450
|
+
* for backward compatibility with consumers that import the const
|
|
5451
|
+
* directly. The factory above is the canonical entry point when a
|
|
5452
|
+
* consumer supplies `AgentConfigOptions.paths`.
|
|
5453
|
+
*/
|
|
5454
|
+
declare const standardsResearchBundle: AgentRuleBundle;
|
|
5455
|
+
|
|
2187
5456
|
/**
|
|
2188
5457
|
* Turborepo bundle — auto-detected when the TurboRepo component is present.
|
|
2189
5458
|
*/
|
|
@@ -2200,13 +5469,26 @@ declare const typescriptBundle: AgentRuleBundle;
|
|
|
2200
5469
|
declare const vitestBundle: AgentRuleBundle;
|
|
2201
5470
|
|
|
2202
5471
|
/**
|
|
2203
|
-
*
|
|
2204
|
-
*
|
|
5472
|
+
* Build the full list of built-in rule bundles with the supplied
|
|
5473
|
+
* resolved agent paths. Every path-aware bundle accepts a
|
|
5474
|
+
* `ResolvedAgentPaths` and threads it through its rule / skill /
|
|
5475
|
+
* sub-agent content, so a consumer override of
|
|
5476
|
+
* `AgentConfigOptions.paths` propagates into the rendered output.
|
|
2205
5477
|
*
|
|
2206
5478
|
* Order matters: base is first so its rules can be overridden by
|
|
2207
5479
|
* more specific bundles. The base bundle's `appliesWhen` always
|
|
2208
5480
|
* returns true; it is filtered by the `includeBaseRules` option
|
|
2209
5481
|
* in AgentConfig.
|
|
5482
|
+
*
|
|
5483
|
+
* Bundles that do not read any agent path (typescript, jest,
|
|
5484
|
+
* pnpm, etc.) stay as const exports and are referenced unchanged.
|
|
5485
|
+
*/
|
|
5486
|
+
declare function buildBuiltInBundles(paths?: ResolvedAgentPaths): ReadonlyArray<AgentRuleBundle>;
|
|
5487
|
+
/**
|
|
5488
|
+
* Built-in rule bundles assembled with the default agent paths.
|
|
5489
|
+
* Preserved for backward compatibility with tests and consumers
|
|
5490
|
+
* that import the array directly. Prefer `buildBuiltInBundles(paths)`
|
|
5491
|
+
* when consumer overrides are in scope.
|
|
2210
5492
|
*/
|
|
2211
5493
|
declare const BUILT_IN_BUNDLES: ReadonlyArray<AgentRuleBundle>;
|
|
2212
5494
|
|
|
@@ -2471,6 +5753,150 @@ interface TemplateResolveResult {
|
|
|
2471
5753
|
*/
|
|
2472
5754
|
declare function resolveTemplateVariables(template: string, metadata: ResolvedProjectMetadata | undefined): TemplateResolveResult;
|
|
2473
5755
|
|
|
5756
|
+
/**
|
|
5757
|
+
* Options for the `.api.md` rollup slot produced by API Extractor.
|
|
5758
|
+
*/
|
|
5759
|
+
interface ApiExtractorReportOptions {
|
|
5760
|
+
/**
|
|
5761
|
+
* Folder (relative to the package root) where the `.api.md` rollup
|
|
5762
|
+
* is written when the extractor runs. Treated as a scratch/temp
|
|
5763
|
+
* location because rollups are **regenerated on scan** rather than
|
|
5764
|
+
* committed to git (per docs-sync epic #448 resolved decision #3).
|
|
5765
|
+
*
|
|
5766
|
+
* The parent `ApiExtractor` component adds this folder to the
|
|
5767
|
+
* package's `.gitignore` so rollups never land on the default branch.
|
|
5768
|
+
*
|
|
5769
|
+
* @default ".api-extractor/"
|
|
5770
|
+
*/
|
|
5771
|
+
readonly reportFolder?: string;
|
|
5772
|
+
/**
|
|
5773
|
+
* Filename of the generated rollup, relative to `reportFolder`.
|
|
5774
|
+
* Accepts the `<unscopedPackageName>` placeholder API Extractor
|
|
5775
|
+
* expands at runtime.
|
|
5776
|
+
*
|
|
5777
|
+
* @default "<unscopedPackageName>.api.md"
|
|
5778
|
+
*/
|
|
5779
|
+
readonly reportFileName?: string;
|
|
5780
|
+
}
|
|
5781
|
+
/**
|
|
5782
|
+
* Options for the `ApiExtractor` projen component.
|
|
5783
|
+
*/
|
|
5784
|
+
interface ApiExtractorOptions {
|
|
5785
|
+
/**
|
|
5786
|
+
* Path to the TypeScript `.d.ts` rollup produced by the package's
|
|
5787
|
+
* compile step, relative to the package root. Used as the
|
|
5788
|
+
* extractor's `mainEntryPointFilePath`.
|
|
5789
|
+
*
|
|
5790
|
+
* Defaults to `<projectFolder>/lib/index.d.ts` — matches the
|
|
5791
|
+
* `TypeScriptProject` default layout.
|
|
5792
|
+
*
|
|
5793
|
+
* @default "<projectFolder>/lib/index.d.ts"
|
|
5794
|
+
*/
|
|
5795
|
+
readonly mainEntryPointFilePath?: string;
|
|
5796
|
+
/**
|
|
5797
|
+
* Path to the generated `api-extractor.json` config file (relative
|
|
5798
|
+
* to the package root).
|
|
5799
|
+
*
|
|
5800
|
+
* @default "api-extractor.json"
|
|
5801
|
+
*/
|
|
5802
|
+
readonly configFilePath?: string;
|
|
5803
|
+
/**
|
|
5804
|
+
* Rollup report options (where the `.api.md` lands).
|
|
5805
|
+
*/
|
|
5806
|
+
readonly report?: ApiExtractorReportOptions;
|
|
5807
|
+
/**
|
|
5808
|
+
* Override the version of `@microsoft/api-extractor` that is added
|
|
5809
|
+
* to the package's devDeps. Defaults to `VERSION.API_EXTRACTOR_VERSION`.
|
|
5810
|
+
*/
|
|
5811
|
+
readonly apiExtractorVersion?: string;
|
|
5812
|
+
/**
|
|
5813
|
+
* When `true`, the extractor's `.api.md` rollup is treated as the
|
|
5814
|
+
* committed baseline and diff-checked in-place. The docs-sync epic
|
|
5815
|
+
* deliberately sets this to `false` — rollups are regenerate-on-scan
|
|
5816
|
+
* and not committed to git.
|
|
5817
|
+
*
|
|
5818
|
+
* @default false
|
|
5819
|
+
*/
|
|
5820
|
+
readonly commitApiReport?: boolean;
|
|
5821
|
+
}
|
|
5822
|
+
/**
|
|
5823
|
+
* Default folder where `.api.md` rollups are written. Gitignored by
|
|
5824
|
+
* the component so rollups never land in a commit.
|
|
5825
|
+
*/
|
|
5826
|
+
declare const DEFAULT_API_EXTRACTOR_REPORT_FOLDER = ".api-extractor/";
|
|
5827
|
+
/**
|
|
5828
|
+
* Default filename template for rollups. The `<unscopedPackageName>`
|
|
5829
|
+
* placeholder is expanded by `@microsoft/api-extractor` at run time.
|
|
5830
|
+
*/
|
|
5831
|
+
declare const DEFAULT_API_EXTRACTOR_REPORT_FILENAME = "<unscopedPackageName>.api.md";
|
|
5832
|
+
/**
|
|
5833
|
+
* Default path (relative to the package root) to the TypeScript
|
|
5834
|
+
* `.d.ts` rollup the extractor consumes. Matches the
|
|
5835
|
+
* `TypeScriptProject` default output layout.
|
|
5836
|
+
*/
|
|
5837
|
+
declare const DEFAULT_API_EXTRACTOR_ENTRY_POINT = "<projectFolder>/lib/index.d.ts";
|
|
5838
|
+
/**
|
|
5839
|
+
* Default path (relative to the package root) to the generated
|
|
5840
|
+
* `api-extractor.json` config file.
|
|
5841
|
+
*/
|
|
5842
|
+
declare const DEFAULT_API_EXTRACTOR_CONFIG_FILE = "api-extractor.json";
|
|
5843
|
+
/**
|
|
5844
|
+
* Wires `@microsoft/api-extractor` into a TypeScript project so the
|
|
5845
|
+
* docs-sync pipeline can detect public-API drift introduced by a
|
|
5846
|
+
* diff.
|
|
5847
|
+
*
|
|
5848
|
+
* The component adds the extractor devDep, synthesizes an
|
|
5849
|
+
* `api-extractor.json` under the package root, and gitignores the
|
|
5850
|
+
* generated `.api.md` rollup. Rollups are **regenerated on scan**
|
|
5851
|
+
* (never committed to git) per docs-sync epic #448 resolved
|
|
5852
|
+
* decision #3 — the in-repo helper at
|
|
5853
|
+
* `.claude/procedures/extract-api.sh` runs the extractor end-to-end
|
|
5854
|
+
* and writes the rollup to the scratch folder for the scan phase
|
|
5855
|
+
* to consume in-memory.
|
|
5856
|
+
*
|
|
5857
|
+
* Callers normally do not construct this directly — the
|
|
5858
|
+
* `TypeScriptProject` constructor creates one automatically.
|
|
5859
|
+
*/
|
|
5860
|
+
declare class ApiExtractor extends Component {
|
|
5861
|
+
readonly project: NodeProject;
|
|
5862
|
+
/**
|
|
5863
|
+
* Find the ApiExtractor component on a project.
|
|
5864
|
+
*/
|
|
5865
|
+
static of(project: NodeProject): ApiExtractor | undefined;
|
|
5866
|
+
/**
|
|
5867
|
+
* Generated config file path, relative to the package root.
|
|
5868
|
+
*/
|
|
5869
|
+
readonly configFilePath: string;
|
|
5870
|
+
/**
|
|
5871
|
+
* Entry-point path supplied to the extractor.
|
|
5872
|
+
*/
|
|
5873
|
+
readonly mainEntryPointFilePath: string;
|
|
5874
|
+
/**
|
|
5875
|
+
* Folder where `.api.md` rollups are written.
|
|
5876
|
+
*/
|
|
5877
|
+
readonly reportFolder: string;
|
|
5878
|
+
/**
|
|
5879
|
+
* Filename (or filename template) of the rollup.
|
|
5880
|
+
*/
|
|
5881
|
+
readonly reportFileName: string;
|
|
5882
|
+
/**
|
|
5883
|
+
* Pinned version of `@microsoft/api-extractor`.
|
|
5884
|
+
*/
|
|
5885
|
+
readonly apiExtractorVersion: string;
|
|
5886
|
+
/**
|
|
5887
|
+
* Whether the generated report is committed alongside source.
|
|
5888
|
+
* `false` by default — rollups regenerate on scan.
|
|
5889
|
+
*/
|
|
5890
|
+
readonly commitApiReport: boolean;
|
|
5891
|
+
constructor(project: NodeProject, options?: ApiExtractorOptions);
|
|
5892
|
+
/**
|
|
5893
|
+
* Render the JSON body of the generated `api-extractor.json`. Kept
|
|
5894
|
+
* as a public method so tests can assert the shape without going
|
|
5895
|
+
* through `synthSnapshot`.
|
|
5896
|
+
*/
|
|
5897
|
+
renderConfig(): Record<string, unknown>;
|
|
5898
|
+
}
|
|
5899
|
+
|
|
2474
5900
|
/**
|
|
2475
5901
|
* Astro output mode.
|
|
2476
5902
|
*
|
|
@@ -2923,16 +6349,24 @@ interface AwsOrganization {
|
|
|
2923
6349
|
declare function getLatestEligibleVersion(packageName: string, minimumReleaseAgeMinutes: number): Promise<string | null>;
|
|
2924
6350
|
|
|
2925
6351
|
declare const VERSION: {
|
|
6352
|
+
/**
|
|
6353
|
+
* Version of `@microsoft/api-extractor` to pin for the docs-sync
|
|
6354
|
+
* public-API drift detection runner. Used by the `ApiExtractor`
|
|
6355
|
+
* component (wired into every `TypeScriptProject`) and the shared
|
|
6356
|
+
* helper at `.claude/procedures/extract-api.sh`. See docs-sync
|
|
6357
|
+
* epic child issue #513.
|
|
6358
|
+
*/
|
|
6359
|
+
readonly API_EXTRACTOR_VERSION: "7.58.7";
|
|
2926
6360
|
/**
|
|
2927
6361
|
* Version of Astro to pin for AstroProject scaffolding.
|
|
2928
6362
|
*/
|
|
2929
|
-
readonly ASTRO_VERSION: "6.1.
|
|
6363
|
+
readonly ASTRO_VERSION: "6.1.9";
|
|
2930
6364
|
/**
|
|
2931
6365
|
* CDK CLI for workflows and command line operations.
|
|
2932
6366
|
*
|
|
2933
6367
|
* CLI and lib are versioned separately, so this is the CLI version.
|
|
2934
6368
|
*/
|
|
2935
|
-
readonly AWS_CDK_CLI_VERSION: "2.
|
|
6369
|
+
readonly AWS_CDK_CLI_VERSION: "2.1119.0";
|
|
2936
6370
|
/**
|
|
2937
6371
|
* CDK Version to use for construct projects.
|
|
2938
6372
|
*
|
|
@@ -2955,11 +6389,11 @@ declare const VERSION: {
|
|
|
2955
6389
|
/**
|
|
2956
6390
|
* Version of PNPM to use in workflows at github actions.
|
|
2957
6391
|
*/
|
|
2958
|
-
readonly PNPM_VERSION: "10.33.
|
|
6392
|
+
readonly PNPM_VERSION: "10.33.2";
|
|
2959
6393
|
/**
|
|
2960
6394
|
* Version of Projen to use.
|
|
2961
6395
|
*/
|
|
2962
|
-
readonly PROJEN_VERSION: "0.99.
|
|
6396
|
+
readonly PROJEN_VERSION: "0.99.52";
|
|
2963
6397
|
/**
|
|
2964
6398
|
* Version of `actions/setup-node` to use in GitHub workflows.
|
|
2965
6399
|
* Tracks the version projen currently emits (see node_modules/projen/lib/github/workflows.js).
|
|
@@ -2973,7 +6407,7 @@ declare const VERSION: {
|
|
|
2973
6407
|
/**
|
|
2974
6408
|
* Version of @astrojs/starlight to pin for StarlightProject scaffolding.
|
|
2975
6409
|
*/
|
|
2976
|
-
readonly STARLIGHT_VERSION: "0.38.
|
|
6410
|
+
readonly STARLIGHT_VERSION: "0.38.4";
|
|
2977
6411
|
/**
|
|
2978
6412
|
* What version of the turborepo library should we use?
|
|
2979
6413
|
*/
|
|
@@ -3514,6 +6948,16 @@ interface TypeScriptProjectOptions extends Omit<typescript.TypeScriptProjectOpti
|
|
|
3514
6948
|
* @default false
|
|
3515
6949
|
*/
|
|
3516
6950
|
readonly agentConfig?: AgentConfigOptions | boolean;
|
|
6951
|
+
/**
|
|
6952
|
+
* Configure the `@microsoft/api-extractor` runner used by the
|
|
6953
|
+
* docs-sync pipeline for public-API drift detection. When omitted
|
|
6954
|
+
* the extractor is enabled with default options (rollups write to
|
|
6955
|
+
* `.api-extractor/` and are gitignored). Set to `false` to opt a
|
|
6956
|
+
* package out of drift detection entirely.
|
|
6957
|
+
*
|
|
6958
|
+
* @default {}
|
|
6959
|
+
*/
|
|
6960
|
+
readonly apiExtractor?: ApiExtractorOptions | false;
|
|
3517
6961
|
}
|
|
3518
6962
|
declare class TypeScriptProject extends typescript.TypeScriptProject {
|
|
3519
6963
|
constructor(userOptions: TypeScriptProjectOptions);
|
|
@@ -4784,4 +8228,4 @@ declare const COMPLETE_JOB_ID = "complete";
|
|
|
4784
8228
|
*/
|
|
4785
8229
|
declare function addBuildCompleteJob(buildWorkflow: BuildWorkflow): void;
|
|
4786
8230
|
|
|
4787
|
-
export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, type AgentConfigOptions, type AgentExpansionRules, type AgentFeaturesConfig, type AgentModel, type AgentPathsConfig, type AgentPlatform, type AgentPlatformOverrides, type AgentProcedure, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type ApproveMergeUpgradeOptions, AstroConfig, type AstroConfigOptions, type AstroIntegrationSpec, AstroOutput, AstroProject, type AstroProjectOptions, type AwsAccount, AwsCdkProject, type AwsCdkProjectOptions, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, AwsTeardownWorkflow, type AwsTeardownWorkflowOptions, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, type CiDeploymentConfig, type ClassTypeOptions, type ClaudeAutoModeConfig, type ClaudeHookAction, type ClaudeHookEntry, type ClaudeHooksConfig, type ClaudePermissionsConfig, type ClaudeRuleTarget, type ClaudeSandboxConfig, type ClaudeSettingsConfig, type CopilotHandoff, type CursorHookAction, type CursorHooksConfig, type CursorSettingsConfig, type CustomDocSection, DEFAULT_AGENT_PATHS, DEFAULT_PRIORITY_LABELS, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, type DeployWorkflowOptions, type DeploymentMetadata, type FocusArea, type FocusAreaMatch, type FocusConfig, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, type LabelDefinition, type LayoutEnforcement, type LayoutViolation, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, type McpServerConfig, type McpTransport, type MeetingArea, type MeetingScope, type MeetingType, type MeetingTypeKind, type MeetingsConfig, type MergeMethod, type MonorepoLayoutRoot, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PROD_DEPLOY_NAME, PnpmWorkspace, type PnpmWorkspaceOptions, type PriorityRule, ProjectMetadata, type ProjectMetadataOptions, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedAgentPaths, type ResolvedProjectMetadata, STARLIGHT_ROLE, type SlackMetadata, type SourceTierExamples, type StarlightEditLink, type StarlightLogo, StarlightProject, type StarlightProjectOptions, type StarlightRole, type StarlightSidebarItem, type StarlightSingletonViolation, type StarlightSocialLink, type SyncLabelsOptions, type TemplateResolveResult, TestRunner, TurboRepo, type TurboRepoOptions, TurboRepoTask, type TurboRepoTaskOptions, TypeScriptConfig, TypeScriptProject, type TypeScriptProjectOptions, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, type VersionKey, Vitest, type VitestConfigOptions, type VitestOptions, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, agendaBundle, awsCdkBundle, baseBundle, bcmWriterBundle, businessModelsBundle, companyProfileBundle, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, industryDiscoveryBundle, jestBundle, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, peopleProfileBundle, pnpmBundle, prReviewBundle, projenBundle, renderCustomDocSectionBlock, renderCustomDocSections, renderFocusSection, renderMeetingTypesSection, renderPriorityRulesSection, renderSourceTierExamples, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveModelAlias, resolveOutdirFromPackageName, resolveTemplateVariables, resolveTypeScriptProjectOutdir, slackBundle, softwareProfileBundle, turborepoBundle, typescriptBundle, validateMonorepoLayout, validateStarlightSingleton, vitestBundle };
|
|
8231
|
+
export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AGENT_TIER_ROLES, AGENT_TIER_VALUES, AgentConfig, type AgentConfigOptions, type AgentExpansionRules, type AgentFeaturesConfig, type AgentModel, type AgentPathsConfig, type AgentPlatform, type AgentPlatformOverrides, type AgentProcedure, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type AgentTier, type AgentTierConfig, type AgentTierEntry, ApiExtractor, type ApiExtractorOptions, type ApiExtractorReportOptions, type ApproveMergeUpgradeOptions, AstroConfig, type AstroConfigOptions, type AstroIntegrationSpec, AstroOutput, AstroProject, type AstroProjectOptions, type AwsAccount, AwsCdkProject, type AwsCdkProjectOptions, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, AwsTeardownWorkflow, type AwsTeardownWorkflowOptions, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, type CiDeploymentConfig, type ClassTypeOptions, type ClaudeAutoModeConfig, type ClaudeHookAction, type ClaudeHookEntry, type ClaudeHooksConfig, type ClaudePermissionsConfig, type ClaudeRuleTarget, type ClaudeSandboxConfig, type ClaudeSettingsConfig, type CopilotHandoff, type CursorHookAction, type CursorHooksConfig, type CursorSettingsConfig, type CustomDocSection, DEFAULT_AC_THRESHOLDS, DEFAULT_AGENT_PATHS, DEFAULT_AGENT_TIERS, DEFAULT_API_EXTRACTOR_CONFIG_FILE, DEFAULT_API_EXTRACTOR_ENTRY_POINT, DEFAULT_API_EXTRACTOR_REPORT_FILENAME, DEFAULT_API_EXTRACTOR_REPORT_FOLDER, DEFAULT_DECOMPOSITION_TEMPLATE, DEFAULT_DELEGATE_TO_PR_REVIEWER, DEFAULT_DISPATCH_MODEL, DEFAULT_DISPATCH_TO_HOUSEKEEPING_RATIO, DEFAULT_HOUSEKEEPING_MODEL, DEFAULT_ISSUE_TEMPLATES_BUNDLE_PATH_PATTERNS, DEFAULT_ISSUE_TEMPLATES_EMIT_CHECKER, DEFAULT_ISSUE_TEMPLATES_EMIT_STARTER, DEFAULT_ISSUE_TEMPLATES_ENABLED, DEFAULT_ISSUE_TEMPLATES_PATH, DEFAULT_ISSUE_TEMPLATES_REQUIRE_REFERENCE, DEFAULT_MERGE_METHOD, DEFAULT_OFF_PEAK_CRON_EXAMPLE, DEFAULT_PARTIAL_UNBLOCK_COMMENT_TEMPLATE, DEFAULT_PRIORITY_LABELS, DEFAULT_PRODUCT_CONTEXT_PATH, DEFAULT_PROGRESS_FILES_ENABLED, DEFAULT_PROGRESS_FILES_FILENAME_PATTERN, DEFAULT_PROGRESS_FILES_FORMAT, DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS, DEFAULT_PROGRESS_FILES_STATE_DIR, DEFAULT_REQUIRE_LINKED_ISSUE, DEFAULT_REQUIRE_PRODUCT_CONTEXT, DEFAULT_SCHEDULED_TASKS_ROOT, DEFAULT_SCHEDULED_TASK_ENTRIES, DEFAULT_SHARED_EDITING_CONFLICT_STRATEGY, DEFAULT_SHARED_EDITING_EMIT_HELPER, DEFAULT_SHARED_EDITING_ENABLED, DEFAULT_SHARED_EDITING_VERIFY_COMMIT, DEFAULT_SHARED_INDEX_PATHS, DEFAULT_SKILL_EVALS_EMIT_RUNNER, DEFAULT_SKILL_EVALS_ENABLED, DEFAULT_SKILL_EVALS_SKILLS_ROOT, DEFAULT_SOURCES_THRESHOLDS, DEFAULT_STATE_FILE_PATH, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, DEFAULT_UNBLOCK_COMMENT_TEMPLATE, DEFAULT_UNBLOCK_DEPENDENTS_ENABLED, DEFAULT_WORKFLOW_DIAGRAMS_BUNDLE_PATH_PATTERNS, DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER, DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER, DEFAULT_WORKFLOW_DIAGRAMS_ENABLED, DEFAULT_WORKFLOW_DIAGRAMS_PATH, DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE, type DeployWorkflowOptions, type DeploymentMetadata, type FocusArea, type FocusAreaMatch, type FocusConfig, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, type IssueTemplatesConfig, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, type LabelDefinition, type LayoutEnforcement, type LayoutViolation, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, type McpServerConfig, type McpTransport, type MeetingArea, type MeetingScope, type MeetingType, type MeetingTypeKind, type MeetingsConfig, type MergeMethod, type MonorepoLayoutRoot, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PREFLIGHT_MERGE_METHOD_VALUES, PROD_DEPLOY_NAME, PROGRESS_FILES_FORMAT_VALUES, PnpmWorkspace, type PnpmWorkspaceOptions, type PreflightMergeMethod, type PreflightPrConfig, type PriorityRule, type ProgressFilesConfig, ProjectMetadata, type ProjectMetadataOptions, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedAgentPaths, type ResolvedAgentTier, type ResolvedIssueTemplates, type ResolvedPreflightPr, type ResolvedProgressFiles, type ResolvedProjectMetadata, type ResolvedRunRatio, type ResolvedScheduledTask, type ResolvedScheduledTasks, type ResolvedScopeGate, type ResolvedSharedEditing, type ResolvedSkillEvals, type ResolvedUnblockDependents, type ResolvedWorkflowDiagrams, type RunRatioConfig, SCHEDULED_TASK_MODEL_VALUES, SCOPE_CLASS_VALUES, SHARED_EDITING_CONFLICT_STRATEGY_VALUES, STARLIGHT_ROLE, type ScheduledTaskEntry, type ScheduledTaskModel, type ScheduledTaskOverride, type ScheduledTasksConfig, type ScopeClass, type ScopeGateConfig, type ScopeGateThresholds, type SharedEditingConfig, type SkillEvalsConfig, type SlackMetadata, type SourceTierExamples, type StarlightEditLink, type StarlightLogo, StarlightProject, type StarlightProjectOptions, type StarlightRole, type StarlightSidebarItem, type StarlightSingletonViolation, type StarlightSocialLink, type SyncLabelsOptions, type TemplateResolveResult, TestRunner, TurboRepo, type TurboRepoOptions, TurboRepoTask, type TurboRepoTaskOptions, TypeScriptConfig, TypeScriptProject, type TypeScriptProjectOptions, UNKNOWN_TYPE_FALLBACK_TIER, type UnblockDependentsConfig, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, type VersionKey, Vitest, type VitestConfigOptions, type VitestOptions, type WorkflowDiagramsConfig, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, agendaBundle, awsCdkBundle, baseBundle, bcmWriterBundle, buildBaseBundle, buildBcmWriterBundle, buildBuiltInBundles, buildBusinessModelsBundle, buildCheckBlockedProcedure, buildCompanyProfileBundle, buildCustomerProfileBundle, buildDocsSyncBundle, buildIndustryDiscoveryBundle, buildMaintenanceAuditBundle, buildOrchestratorConventionsContent, buildPeopleProfileBundle, buildRegulatoryResearchBundle, buildRequirementsAnalystBundle, buildRequirementsReviewerBundle, buildRequirementsWriterBundle, buildResearchPipelineBundle, buildSoftwareProfileBundle, buildStandardsResearchBundle, buildUnblockDependentsProcedure, businessModelsBundle, classifyIssueScope, classifyRun, companyProfileBundle, customerProfileBundle, docsSyncBundle, extractApiProcedure, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, industryDiscoveryBundle, jestBundle, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, peopleProfileBundle, pnpmBundle, prReviewBundle, projenBundle, regulatoryResearchBundle, renderAgentTierCaseStatement, renderAgentTierSection, renderCustomDocSectionBlock, renderCustomDocSections, renderExtractApiProcedure, renderFocusSection, renderIssueTemplatesBundleHook, renderIssueTemplatesCheckerScript, renderIssueTemplatesRuleContent, renderIssueTemplatesStarterPage, renderMeetingTypesSection, renderPreflightPrSection, renderPreflightPrShellHelpers, renderPriorityRulesSection, renderProgressFileName, renderProgressFilePath, renderProgressFilesBundleHook, renderProgressFilesRuleContent, renderRunRatioSection, renderRunRatioShellHelpers, renderScheduledTaskSkillFile, renderScheduledTasksSection, renderScopeGateSection, renderScopeGateShellHelpers, renderSharedEditingBundleHook, renderSharedEditingHelperScript, renderSharedEditingRuleContent, renderSkillEvalsBundleHook, renderSkillEvalsRuleContent, renderSkillEvalsRunnerScript, renderSourceTierExamples, renderUnblockDependentsScript, renderUnblockDependentsSection, renderWorkflowDiagramsBundleHook, renderWorkflowDiagramsCheckerScript, renderWorkflowDiagramsRuleContent, renderWorkflowDiagramsStarterPage, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAgentTiers, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveIssueTemplates, resolveModelAlias, resolveOrchestratorAssets, resolveOutdirFromPackageName, resolvePreflightPr, resolveProgressFiles, resolveRunRatio, resolveScheduledTasks, resolveScopeGate, resolveSharedEditing, resolveSkillEvals, resolveTemplateVariables, resolveTypeScriptProjectOutdir, resolveUnblockDependents, resolveWorkflowDiagrams, slackBundle, softwareProfileBundle, standardsResearchBundle, turborepoBundle, typescriptBundle, validateAgentTierConfig, validateIssueTemplatesConfig, validateMonorepoLayout, validatePreflightPrConfig, validateProgressFilesConfig, validateRunRatioConfig, validateScheduledTasksConfig, validateScopeGateConfig, validateSharedEditingConfig, validateSkillEvalsConfig, validateStarlightSingleton, validateUnblockDependentsConfig, validateWorkflowDiagramsConfig, vitestBundle };
|