@codedrifters/configulator 0.0.259 → 0.0.260
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 +3 -3
- package/lib/index.d.ts +3 -3
- package/lib/index.js +247 -29
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +247 -29
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.d.mts
CHANGED
|
@@ -1848,9 +1848,9 @@ declare function resolveAgentPaths(paths?: AgentPathsConfig): ResolvedAgentPaths
|
|
|
1848
1848
|
* `company-profile` (via `company:research`) and `software-profile`
|
|
1849
1849
|
* (via `software:research`).
|
|
1850
1850
|
*
|
|
1851
|
-
* Ships a sub-agent (`people-profile-analyst`),
|
|
1852
|
-
* (`/profile-person`), and `type:people-profile`
|
|
1853
|
-
* labels.
|
|
1851
|
+
* Ships a sub-agent (`people-profile-analyst`), two user-invocable
|
|
1852
|
+
* skills (`/profile-person`, `/refresh-person`), and `type:people-profile`
|
|
1853
|
+
* plus `people:*` phase labels for the four phases.
|
|
1854
1854
|
*/
|
|
1855
1855
|
declare const peopleProfileBundle: AgentRuleBundle;
|
|
1856
1856
|
|
package/lib/index.d.ts
CHANGED
|
@@ -1897,9 +1897,9 @@ declare function resolveAgentPaths(paths?: AgentPathsConfig): ResolvedAgentPaths
|
|
|
1897
1897
|
* `company-profile` (via `company:research`) and `software-profile`
|
|
1898
1898
|
* (via `software:research`).
|
|
1899
1899
|
*
|
|
1900
|
-
* Ships a sub-agent (`people-profile-analyst`),
|
|
1901
|
-
* (`/profile-person`), and `type:people-profile`
|
|
1902
|
-
* labels.
|
|
1900
|
+
* Ships a sub-agent (`people-profile-analyst`), two user-invocable
|
|
1901
|
+
* skills (`/profile-person`, `/refresh-person`), and `type:people-profile`
|
|
1902
|
+
* plus `people:*` phase labels for the four phases.
|
|
1903
1903
|
*/
|
|
1904
1904
|
declare const peopleProfileBundle: AgentRuleBundle;
|
|
1905
1905
|
|
package/lib/index.js
CHANGED
|
@@ -6271,7 +6271,7 @@ var orchestratorBundle = {
|
|
|
6271
6271
|
// src/agent/bundles/people-profile.ts
|
|
6272
6272
|
var peopleProfileAnalystSubAgent = {
|
|
6273
6273
|
name: "people-profile-analyst",
|
|
6274
|
-
description: "Researches an individual person (colleague, customer contact, vendor contact, partner contact, industry expert, or connector) from public sources and produces a structured markdown profile cross-linked to companies, software, and meeting notes, then enqueues downstream `company:research` and `software:research` issues for unprofiled companies and software products surfaced during profiling. One person per session, tracked by people:* GitHub issue labels.",
|
|
6274
|
+
description: "Researches an individual person (colleague, customer contact, vendor contact, partner contact, industry expert, or connector) from public sources and produces a structured markdown profile cross-linked to companies, software, and meeting notes, then enqueues downstream `company:research` and `software:research` issues for unprofiled companies and software products surfaced during profiling. Also handles maintenance refreshes on a configurable staleness cadence (`people:refresh`). One person per session, tracked by people:* GitHub issue labels.",
|
|
6275
6275
|
model: AGENT_MODEL.POWERFUL,
|
|
6276
6276
|
maxTurns: 80,
|
|
6277
6277
|
platforms: { cursor: { exclude: true } },
|
|
@@ -6331,6 +6331,12 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6331
6331
|
" the `software-profile` bundle via `software:research` issues.",
|
|
6332
6332
|
" Meeting notes remain link-only \u2014 this agent never creates",
|
|
6333
6333
|
" meeting-research issues.",
|
|
6334
|
+
"9. **Refresh is targeted re-verification, not re-research.**",
|
|
6335
|
+
" `people:refresh` runs a small number of targeted searches focused",
|
|
6336
|
+
" on the narrow set of facts that drift (role, employer, primary",
|
|
6337
|
+
" public channel) and updates the profile in place. It never",
|
|
6338
|
+
" re-runs the full research-phase sweep and never forks the profile",
|
|
6339
|
+
" under a new slug.",
|
|
6334
6340
|
"",
|
|
6335
6341
|
"---",
|
|
6336
6342
|
"",
|
|
@@ -6365,6 +6371,15 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6365
6371
|
"\u2502 bounded notes \u2502 \u2502 the configured path \u2502 \u2502 company/software \u2502",
|
|
6366
6372
|
"\u2502 file \u2502 \u2502 \u2502 \u2502 research issues \u2502",
|
|
6367
6373
|
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
6374
|
+
"",
|
|
6375
|
+
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
6376
|
+
"\u2502 4. REFRESH \u2502 (cadence-driven, or on-demand)",
|
|
6377
|
+
"\u2502 Re-verify an \u2502",
|
|
6378
|
+
"\u2502 existing profile \u2502",
|
|
6379
|
+
"\u2502 with targeted web \u2502",
|
|
6380
|
+
"\u2502 searches. Update \u2502",
|
|
6381
|
+
"\u2502 in place. \u2502",
|
|
6382
|
+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
6368
6383
|
"```",
|
|
6369
6384
|
"",
|
|
6370
6385
|
"**Issue labels encode the phase:**",
|
|
@@ -6374,13 +6389,13 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6374
6389
|
"| `people:research` | 1. Research | Gather public sources. Write a bounded research-notes file. Create the draft issue. |",
|
|
6375
6390
|
"| `people:draft` | 2. Draft | Read the research notes. Write the structured profile to `<PROFILES_DIR>`. Create the followup issue if warranted. |",
|
|
6376
6391
|
"| `people:followup` | 3. Followup | Read the profile. Update cross-references to existing companies, software, and meeting notes. Enqueue `company:research` and `software:research` issues for unprofiled, genuinely-relevant entities surfaced in the profile. |",
|
|
6392
|
+
"| `people:refresh` | 4. Refresh | Read an existing profile. Run 3\u20135 targeted web searches for role, employer, and primary public channel changes. Update the profile in place and add a revision-history entry. |",
|
|
6377
6393
|
"",
|
|
6378
6394
|
"All issues also carry `type:people-profile` and a `status:*` label.",
|
|
6379
6395
|
"",
|
|
6380
6396
|
"**Issue count per person cycle:** 1 research + 1 draft + 0\u20131 followup =",
|
|
6381
|
-
"**2\u20133 sessions
|
|
6382
|
-
"
|
|
6383
|
-
"software products warrant downstream research.",
|
|
6397
|
+
"**2\u20133 sessions** on the initial cycle. `people:refresh` is an",
|
|
6398
|
+
"independent downstream cycle that runs on its own cadence.",
|
|
6384
6399
|
"",
|
|
6385
6400
|
"**Shortened paths:**",
|
|
6386
6401
|
"- Research phase determines the person is out of scope (not",
|
|
@@ -6388,14 +6403,17 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6388
6403
|
" with a justification and no downstream issues are created \u2192 **1 session**.",
|
|
6389
6404
|
"- Short profile with no cross-references and no downstream",
|
|
6390
6405
|
" candidates \u2192 **2 sessions**.",
|
|
6406
|
+
"- Refresh that finds no material change \u2192 **1 session** (revision-",
|
|
6407
|
+
" history entry only, profile body unchanged).",
|
|
6391
6408
|
"",
|
|
6392
6409
|
"---",
|
|
6393
6410
|
"",
|
|
6394
6411
|
"## Configurable Paths",
|
|
6395
6412
|
"",
|
|
6396
6413
|
"The pipeline uses these placeholders. Consuming projects override the",
|
|
6397
|
-
"defaults by passing paths in the `/profile-person`
|
|
6398
|
-
"or by extending this rule in their own
|
|
6414
|
+
"defaults by passing paths in the `/profile-person` or `/refresh-person`",
|
|
6415
|
+
"skill invocations, or by extending this rule in their own",
|
|
6416
|
+
"`agentConfig.rules`.",
|
|
6399
6417
|
"",
|
|
6400
6418
|
"| Placeholder | Meaning | Default |",
|
|
6401
6419
|
"|-------------|---------|---------|",
|
|
@@ -6417,26 +6435,37 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6417
6435
|
"## Refresh Cadence",
|
|
6418
6436
|
"",
|
|
6419
6437
|
"Profiles go stale. A person changes jobs, publishes new work, or",
|
|
6420
|
-
"shifts focus. The pipeline supports a configurable refresh cadence
|
|
6438
|
+
"shifts focus. The pipeline supports a configurable refresh cadence",
|
|
6439
|
+
"so `people:refresh` issues can be filed on a schedule without",
|
|
6440
|
+
"hardcoding the interval:",
|
|
6421
6441
|
"",
|
|
6422
|
-
"- **Default
|
|
6423
|
-
"
|
|
6424
|
-
"
|
|
6425
|
-
" `
|
|
6442
|
+
"- **Default staleness threshold:** 180 days from the profile's",
|
|
6443
|
+
" `date` frontmatter.",
|
|
6444
|
+
"- **Override precedence** (first match wins):",
|
|
6445
|
+
" 1. `refresh_days` in the issue body (per-run override)",
|
|
6446
|
+
" 2. `refresh_days` frontmatter on the profile itself",
|
|
6447
|
+
" 3. Project-wide default declared under a `## Refresh Cadence`",
|
|
6448
|
+
" section in `docs/src/content/docs/project-context.md`",
|
|
6449
|
+
" 4. Built-in default: **180 days**",
|
|
6426
6450
|
"",
|
|
6427
|
-
"When the `/
|
|
6428
|
-
"has a profile:",
|
|
6451
|
+
"When the `/refresh-person` skill is invoked for an existing profile:",
|
|
6429
6452
|
"",
|
|
6430
|
-
"- If the profile is **younger** than the
|
|
6431
|
-
" exits with a message pointing to the existing profile. Pass",
|
|
6453
|
+
"- If the profile is **younger** than the staleness threshold, the",
|
|
6454
|
+
" skill exits with a message pointing to the existing profile. Pass",
|
|
6432
6455
|
" `force: true` in the issue body to refresh anyway.",
|
|
6433
|
-
"- If the profile is **older** than the
|
|
6434
|
-
"
|
|
6435
|
-
"
|
|
6456
|
+
"- If the profile is **older** than the staleness threshold, the",
|
|
6457
|
+
" pipeline files a `people:refresh` issue and Phase 4 updates the",
|
|
6458
|
+
" existing file in place, preserving its slug and bumping the",
|
|
6459
|
+
" `date` frontmatter.",
|
|
6460
|
+
"",
|
|
6461
|
+
"The same precedence and `force: true` semantics apply when",
|
|
6462
|
+
"`/profile-person` is invoked for a slug that already has a profile:",
|
|
6463
|
+
"a fresh profile short-circuits; a stale profile is updated in place",
|
|
6464
|
+
"by Phase 2 rather than forked under a new slug.",
|
|
6436
6465
|
"",
|
|
6437
6466
|
"Refresh mode never changes the profile's role without an explicit",
|
|
6438
|
-
"override in the refresh request \u2014 role changes
|
|
6439
|
-
"warrant a human review step.",
|
|
6467
|
+
"override in the refresh request (`retype: <role>`) \u2014 role changes",
|
|
6468
|
+
"are material and warrant a human review step.",
|
|
6440
6469
|
"",
|
|
6441
6470
|
"---",
|
|
6442
6471
|
"",
|
|
@@ -6445,7 +6474,8 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6445
6474
|
"Run this loop exactly once per session. Never start a second issue.",
|
|
6446
6475
|
"",
|
|
6447
6476
|
"1. Claim one open `type:people-profile` issue using phase priority:",
|
|
6448
|
-
" `people:research` > `people:draft` > `people:followup
|
|
6477
|
+
" `people:research` > `people:draft` > `people:followup` >",
|
|
6478
|
+
" `people:refresh`.",
|
|
6449
6479
|
"2. Transition `status:ready` \u2192 `status:in-progress` and create the",
|
|
6450
6480
|
" branch per your project's branch-naming convention.",
|
|
6451
6481
|
"3. Execute the phase handler that matches the issue's `people:*`",
|
|
@@ -6613,6 +6643,11 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6613
6643
|
" <what the profile could not answer; flag anything the followup",
|
|
6614
6644
|
" phase should cross-reference>",
|
|
6615
6645
|
"",
|
|
6646
|
+
" ## Revision History",
|
|
6647
|
+
" | Date | Changes |",
|
|
6648
|
+
" |------|---------|",
|
|
6649
|
+
" | YYYY-MM-DD | Initial profile |",
|
|
6650
|
+
"",
|
|
6616
6651
|
" ## Sources",
|
|
6617
6652
|
" - <source URL> \u2014 <date accessed>",
|
|
6618
6653
|
" ```",
|
|
@@ -6758,12 +6793,87 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6758
6793
|
"",
|
|
6759
6794
|
"---",
|
|
6760
6795
|
"",
|
|
6796
|
+
"## Phase 4: Refresh (`people:refresh`)",
|
|
6797
|
+
"",
|
|
6798
|
+
"**Goal:** Re-verify an existing profile against a narrow set of facts",
|
|
6799
|
+
"that tend to drift \u2014 current role, current employer, primary public",
|
|
6800
|
+
"channel (email, handle, personal site) \u2014 with a small number of",
|
|
6801
|
+
"targeted web searches, then update the profile in place.",
|
|
6802
|
+
"",
|
|
6803
|
+
"**Budget:** 3\u20135 targeted web searches focused on the narrow delta",
|
|
6804
|
+
"set. Do not redo the full research-phase sweep, do not re-gather the",
|
|
6805
|
+
"full background, and do not rewrite the profile body for facts that",
|
|
6806
|
+
"have not changed.",
|
|
6807
|
+
"",
|
|
6808
|
+
"### Steps",
|
|
6809
|
+
"",
|
|
6810
|
+
"1. **Read the existing profile** at the path referenced in the issue",
|
|
6811
|
+
" body. If the profile file is missing, close the issue with",
|
|
6812
|
+
" `status:needs-attention` and stop.",
|
|
6813
|
+
"",
|
|
6814
|
+
"2. **Confirm the staleness threshold.** Compare the profile's `date`",
|
|
6815
|
+
" frontmatter against today's date and the `refresh_days`",
|
|
6816
|
+
" frontmatter (or the project default from the Refresh Cadence",
|
|
6817
|
+
" section above). If the profile is younger than the threshold and",
|
|
6818
|
+
" the issue body does not set `force: true`, close the issue with",
|
|
6819
|
+
" a short comment and stop \u2014 do not burn the search budget.",
|
|
6820
|
+
"",
|
|
6821
|
+
"3. **Run 3\u20135 targeted searches.** Focus on the narrow delta set:",
|
|
6822
|
+
" - Current role / title at the current employer",
|
|
6823
|
+
" - Current employer (has the person changed jobs?)",
|
|
6824
|
+
" - Primary public channel (personal site URL, primary social",
|
|
6825
|
+
" handle, speaker inquiry form, public email if listed)",
|
|
6826
|
+
" - Optional: one search for notable recent public work (a new",
|
|
6827
|
+
" talk, post, or project) if the profile's Expertise Signals",
|
|
6828
|
+
" section has no entry from the last 12 months",
|
|
6829
|
+
"",
|
|
6830
|
+
"4. **Update the profile in place.** Edit only the affected sections",
|
|
6831
|
+
" (typically `## Current Position`, `## Contact Preferences`, and",
|
|
6832
|
+
" occasionally `## Expertise Signals`). Cite every new claim.",
|
|
6833
|
+
" Preserve the slug and the original `parent_issue` field. Bump the",
|
|
6834
|
+
" `date` frontmatter to today's date. Leave untouched sections",
|
|
6835
|
+
" untouched \u2014 refresh is a narrow delta, not a rewrite.",
|
|
6836
|
+
"",
|
|
6837
|
+
"5. **Do not silently re-type the person.** If the refresh surfaces",
|
|
6838
|
+
" evidence that the person's primary role has changed (e.g., a",
|
|
6839
|
+
" customer-contact who now works at your own organization and",
|
|
6840
|
+
" should become a colleague), flag it in `## Risks / Open Questions`",
|
|
6841
|
+
" and stop \u2014 do **not** rewrite the `role` frontmatter without an",
|
|
6842
|
+
" explicit override in the refresh issue body (`retype: <role>`).",
|
|
6843
|
+
"",
|
|
6844
|
+
"6. **Append a revision-history row.** Summarize the delta in one",
|
|
6845
|
+
" line:",
|
|
6846
|
+
"",
|
|
6847
|
+
" ```markdown",
|
|
6848
|
+
" | YYYY-MM-DD | Refreshed: <one-line summary of what changed> |",
|
|
6849
|
+
" ```",
|
|
6850
|
+
"",
|
|
6851
|
+
" When the search budget finds no material change, the row still",
|
|
6852
|
+
" appears so the next scheduled refresh knows this profile was",
|
|
6853
|
+
" reviewed:",
|
|
6854
|
+
"",
|
|
6855
|
+
" ```markdown",
|
|
6856
|
+
" | YYYY-MM-DD | Refreshed: no material change |",
|
|
6857
|
+
" ```",
|
|
6858
|
+
"",
|
|
6859
|
+
"7. **Respect privacy.** The narrow delta set is bounded to public",
|
|
6860
|
+
" professional facts. Never expand the refresh into private contact",
|
|
6861
|
+
" details, family information, or other non-professional data \u2014",
|
|
6862
|
+
" even if a search surfaces them. Privacy guardrails from Phase 1",
|
|
6863
|
+
" apply to every refresh.",
|
|
6864
|
+
"",
|
|
6865
|
+
"8. **Commit and push.** Close the refresh issue with a short comment",
|
|
6866
|
+
" summarizing the delta (or `no material change`).",
|
|
6867
|
+
"",
|
|
6868
|
+
"---",
|
|
6869
|
+
"",
|
|
6761
6870
|
"## Output Boundaries",
|
|
6762
6871
|
"",
|
|
6763
6872
|
"This agent writes **only** to:",
|
|
6764
6873
|
"",
|
|
6765
6874
|
"- `<NOTES_DIR>/` \u2014 research-notes files (Phase 1)",
|
|
6766
|
-
"- `<PROFILES_DIR>/` \u2014 person profiles (Phase 2, updated in
|
|
6875
|
+
"- `<PROFILES_DIR>/` \u2014 person profiles (Phase 2, updated in Phases",
|
|
6876
|
+
" 3 and 4)",
|
|
6767
6877
|
"",
|
|
6768
6878
|
"In Phase 3, this agent also **creates `company:research` and",
|
|
6769
6879
|
"`software:research` issues** for companies and software products",
|
|
@@ -6774,6 +6884,13 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6774
6884
|
"which pick up the issues this pipeline creates. Meeting notes",
|
|
6775
6885
|
"remain link-only across all phases.",
|
|
6776
6886
|
"",
|
|
6887
|
+
"In Phase 4, this agent only updates an existing profile in place \u2014",
|
|
6888
|
+
"it never forks a new profile under a different slug and never",
|
|
6889
|
+
"enqueues downstream `company:research` or `software:research`",
|
|
6890
|
+
"issues. Cross-references surfaced during a refresh are flagged in",
|
|
6891
|
+
"`## Risks / Open Questions` for a follow-up `people:followup` pass",
|
|
6892
|
+
"to handle.",
|
|
6893
|
+
"",
|
|
6777
6894
|
"The pipeline produces **person profiles and notes only**. Deeper",
|
|
6778
6895
|
"research on companies and software products is delegated to",
|
|
6779
6896
|
"downstream research pipelines via `company:research` and",
|
|
@@ -6818,6 +6935,15 @@ var peopleProfileAnalystSubAgent = {
|
|
|
6818
6935
|
" not open `type:requirement` or formal evaluation issues from this",
|
|
6819
6936
|
" pipeline. Follow-up research is scoped through `company:research`",
|
|
6820
6937
|
" and `software:research` only.",
|
|
6938
|
+
"- **Refresh respects the cadence.** Phase 4 exits early when the",
|
|
6939
|
+
" profile is younger than the staleness threshold and `force: true`",
|
|
6940
|
+
" is not set. It always appends a revision-history row so the next",
|
|
6941
|
+
" scheduled run knows the profile was reviewed.",
|
|
6942
|
+
"- **Refresh is narrow, not a rewrite.** Phase 4 re-verifies role,",
|
|
6943
|
+
" employer, and primary public channel with 3\u20135 targeted searches",
|
|
6944
|
+
" and updates only the affected sections. It never re-runs the full",
|
|
6945
|
+
" research-phase sweep and never rewrites sections whose underlying",
|
|
6946
|
+
" facts have not changed.",
|
|
6821
6947
|
"- **Refresh, don't fork.** When a profile exists and is past its",
|
|
6822
6948
|
" cadence, update in place rather than creating a new slug."
|
|
6823
6949
|
].join("\n")
|
|
@@ -6896,23 +7022,110 @@ var profilePersonSkill = {
|
|
|
6896
7022
|
" other downstream artifacts itself."
|
|
6897
7023
|
].join("\n")
|
|
6898
7024
|
};
|
|
7025
|
+
var refreshPersonSkill = {
|
|
7026
|
+
name: "refresh-person",
|
|
7027
|
+
description: "Kick off a people-profile refresh cycle. Creates a people:refresh issue for an existing profile and dispatches Phase 4 (Refresh) in the people-profile-analyst agent. Refresh re-verifies the profile's narrow delta set (role, employer, primary public channel) with 3\u20135 targeted web searches and updates it in place. Respects a configurable staleness threshold so profiles younger than the threshold exit early.",
|
|
7028
|
+
disableModelInvocation: true,
|
|
7029
|
+
userInvocable: true,
|
|
7030
|
+
context: "fork",
|
|
7031
|
+
agent: "people-profile-analyst",
|
|
7032
|
+
platforms: { cursor: { exclude: true } },
|
|
7033
|
+
instructions: [
|
|
7034
|
+
"# Refresh Person",
|
|
7035
|
+
"",
|
|
7036
|
+
"Re-verify an existing person profile with a small number of",
|
|
7037
|
+
"targeted web searches and update the profile in place. Creates a",
|
|
7038
|
+
"`people:refresh` issue for the target profile and dispatches",
|
|
7039
|
+
"Phase 4 (Refresh) in the people-profile-analyst agent.",
|
|
7040
|
+
"",
|
|
7041
|
+
"Refresh respects a configurable **staleness threshold** so scheduled",
|
|
7042
|
+
"refreshes do not burn search budget on profiles that are still",
|
|
7043
|
+
"fresh.",
|
|
7044
|
+
"",
|
|
7045
|
+
"## Usage",
|
|
7046
|
+
"",
|
|
7047
|
+
"/refresh-person <path-to-profile>",
|
|
7048
|
+
"",
|
|
7049
|
+
"Optional extensions in the issue body:",
|
|
7050
|
+
"- `refresh_days: <N>` \u2014 override the default 180-day staleness",
|
|
7051
|
+
" threshold for this run",
|
|
7052
|
+
"- `force: true` \u2014 refresh even if the profile is younger than the",
|
|
7053
|
+
" threshold",
|
|
7054
|
+
"- `retype: <colleague | customer-contact | vendor-contact |",
|
|
7055
|
+
" partner-contact | industry-expert | connector>` \u2014 explicitly",
|
|
7056
|
+
" allow Phase 4 to change the profile's `role` when the refresh",
|
|
7057
|
+
" finds material evidence of a role-type change",
|
|
7058
|
+
"",
|
|
7059
|
+
"## Staleness Threshold",
|
|
7060
|
+
"",
|
|
7061
|
+
"Order of precedence (first match wins):",
|
|
7062
|
+
"",
|
|
7063
|
+
"1. `refresh_days` in the issue body (per-run override)",
|
|
7064
|
+
"2. `refresh_days` frontmatter on the profile itself",
|
|
7065
|
+
"3. Project-wide default declared under a `## Refresh Cadence`",
|
|
7066
|
+
" section in `docs/src/content/docs/project-context.md`",
|
|
7067
|
+
"4. Built-in default: **180 days**",
|
|
7068
|
+
"",
|
|
7069
|
+
"If the profile's `date` frontmatter plus the resolved threshold is",
|
|
7070
|
+
"in the future (i.e. the profile is still fresh) and `force: true`",
|
|
7071
|
+
"is not set, Phase 4 closes the refresh issue with a short comment",
|
|
7072
|
+
"and stops without running any searches.",
|
|
7073
|
+
"",
|
|
7074
|
+
"## Budget",
|
|
7075
|
+
"",
|
|
7076
|
+
"- **3\u20135 targeted web searches** focused on the narrow delta set:",
|
|
7077
|
+
" current role / title, current employer, primary public channel",
|
|
7078
|
+
" (personal site, handle, speaker inquiry form, public email).",
|
|
7079
|
+
"- Optional: one search for notable recent public work if the",
|
|
7080
|
+
" profile has no Expertise Signals entry from the last 12 months.",
|
|
7081
|
+
"",
|
|
7082
|
+
"## Privacy",
|
|
7083
|
+
"",
|
|
7084
|
+
"Privacy guardrails from Phase 1 apply to every refresh. Never",
|
|
7085
|
+
"record private contact details, family information, or other",
|
|
7086
|
+
"non-professional personal data \u2014 even if a search surfaces them.",
|
|
7087
|
+
"",
|
|
7088
|
+
"## Steps",
|
|
7089
|
+
"",
|
|
7090
|
+
"1. Create a `people:refresh` issue with `type:people-profile`,",
|
|
7091
|
+
" `priority:medium`, and `status:ready`. Body must include the",
|
|
7092
|
+
" profile path and any overrides.",
|
|
7093
|
+
"2. Execute Phase 4 (Refresh) of the people-profile-analyst agent.",
|
|
7094
|
+
"",
|
|
7095
|
+
"## Output",
|
|
7096
|
+
"",
|
|
7097
|
+
"- The profile is updated in place (affected sections edited,",
|
|
7098
|
+
" `date` bumped, slug preserved)",
|
|
7099
|
+
"- A revision-history row summarizing the delta \u2014 or",
|
|
7100
|
+
" `Refreshed: no material change` when the search budget found",
|
|
7101
|
+
" nothing material"
|
|
7102
|
+
].join("\n")
|
|
7103
|
+
};
|
|
6899
7104
|
var peopleProfileBundle = {
|
|
6900
7105
|
name: "people-profile",
|
|
6901
|
-
description: "People research and profiling pipeline: research, draft profile, followup. Enabled by default; domain-neutral; filesystem-durable between phases. Cross-references existing companies, software, and meeting notes, and Phase 3 (Followup) hands unprofiled, genuinely-relevant companies and software products off to the `company-profile` and `software-profile` bundles via `company:research` and `software:research` issues.",
|
|
7106
|
+
description: "People research and profiling pipeline: research, draft profile, followup, refresh. Enabled by default; domain-neutral; filesystem-durable between phases. Cross-references existing companies, software, and meeting notes, and Phase 3 (Followup) hands unprofiled, genuinely-relevant companies and software products off to the `company-profile` and `software-profile` bundles via `company:research` and `software:research` issues. Phase 4 (Refresh) re-verifies profiles on a configurable staleness cadence.",
|
|
6902
7107
|
appliesWhen: () => true,
|
|
6903
7108
|
rules: [
|
|
6904
7109
|
{
|
|
6905
7110
|
name: "people-profile-workflow",
|
|
6906
|
-
description: "Describes the
|
|
7111
|
+
description: "Describes the 4-phase people-profile pipeline, the people:* label taxonomy, the cross-reference model, the refresh cadence rules, and the boundary against downstream research agents.",
|
|
6907
7112
|
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
6908
7113
|
content: [
|
|
6909
7114
|
"# People Profile Workflow",
|
|
6910
7115
|
"",
|
|
6911
7116
|
"Use `/profile-person <person-name>` to kick off a person",
|
|
6912
|
-
"research and profiling pipeline. The pipeline runs in up to
|
|
6913
|
-
"phases \u2014 research, draft, followup \u2014 each tracked by
|
|
6914
|
-
"GitHub issue labeled `people:research`, `people:draft`,
|
|
6915
|
-
"`people:followup`. All issues carry
|
|
7117
|
+
"research and profiling pipeline. The pipeline runs in up to 4",
|
|
7118
|
+
"phases \u2014 research, draft, followup, refresh \u2014 each tracked by",
|
|
7119
|
+
"its own GitHub issue labeled `people:research`, `people:draft`,",
|
|
7120
|
+
"`people:followup`, or `people:refresh`. All issues carry",
|
|
7121
|
+
"`type:people-profile`.",
|
|
7122
|
+
"",
|
|
7123
|
+
"One additional user-invocable skill drives the maintenance",
|
|
7124
|
+
"phase independently:",
|
|
7125
|
+
"",
|
|
7126
|
+
"- `/refresh-person <path-to-profile>` \u2014 re-verify an existing",
|
|
7127
|
+
" profile with 3\u20135 targeted web searches and update it in",
|
|
7128
|
+
" place (Phase 4, respects a configurable staleness threshold).",
|
|
6916
7129
|
"",
|
|
6917
7130
|
"The pipeline produces **person profiles only**. Deeper research",
|
|
6918
7131
|
"on companies and software products surfaced while profiling is",
|
|
@@ -6931,7 +7144,7 @@ var peopleProfileBundle = {
|
|
|
6931
7144
|
tags: ["workflow"]
|
|
6932
7145
|
}
|
|
6933
7146
|
],
|
|
6934
|
-
skills: [profilePersonSkill],
|
|
7147
|
+
skills: [profilePersonSkill, refreshPersonSkill],
|
|
6935
7148
|
subAgents: [peopleProfileAnalystSubAgent],
|
|
6936
7149
|
labels: [
|
|
6937
7150
|
{
|
|
@@ -6953,6 +7166,11 @@ var peopleProfileBundle = {
|
|
|
6953
7166
|
name: "people:followup",
|
|
6954
7167
|
color: "D4C5F9",
|
|
6955
7168
|
description: "Phase 3: cross-link the profile to existing companies, software, and meeting notes, and enqueue follow-up research issues for unprofiled companies and software products"
|
|
7169
|
+
},
|
|
7170
|
+
{
|
|
7171
|
+
name: "people:refresh",
|
|
7172
|
+
color: "F9D0C4",
|
|
7173
|
+
description: "Phase 4: re-verify an existing person profile with targeted web searches and update it in place"
|
|
6956
7174
|
}
|
|
6957
7175
|
]
|
|
6958
7176
|
};
|