kushi-agents 4.8.1 → 4.8.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kushi-agents",
3
- "version": "4.8.1",
3
+ "version": "4.8.2",
4
4
  "description": "Install Kushi — multi-source project evidence agent with snapshot+stream capture across Email, Teams, OneNote, Loop, SharePoint, Meetings, CRM, ADO. WorkIQ-only for M365 sources (Graph / m365_* FORBIDDEN as fallbacks; user-paste is first-class). Host-agnostic.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -44,7 +44,7 @@ For each source whose sweep runs:
44
44
 
45
45
  1. **Append discovered IDs / URLs / paths to `<engagement-root>/<project>/integrations.yml#boundaries.<source>.<key>`** as plain strings (existing pull-* skills consume strings — do NOT change the array element type). Idempotent: deduplicate by exact-string equality.
46
46
 
47
- 2. **Write a sidecar discovery record to `<engagement-root>/<project>/Evidence/_discovery/<YYYY-MM-DD>_<source>_discovery.yml`** with the per-row metadata (`discovered_by`, `discovered_at`, `needs_review`, `query`, `request_id`, `confidence`). Schema:
47
+ 2. **Write a sidecar discovery record to `<engagement-root>/<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_<source>_discovery.yml`** with the per-row metadata (`discovered_by`, `discovered_at`, `needs_review`, `query`, `request_id`, `confidence`). The sidecar lives **inside the contributor's alias folder** because discovery results are inherently per-identity (each contributor sees a different mailbox / chat / meeting set). Schema:
48
48
 
49
49
  ```yaml
50
50
  source: email | teams | meetings | sharepoint
@@ -93,11 +93,12 @@ For each source whose sweep runs:
93
93
 
94
94
  ## Multi-contributor safety
95
95
 
96
- When the boundary already has rows from another alias (or the sidecar `Evidence/_discovery/` already has entries):
96
+ When the boundary already has rows from another alias (or sibling `Evidence/<other-alias>/_discovery/` folders already have entries):
97
97
 
98
98
  1. **Append-only** — the new alias's sweep adds rows that are not already present (dedupe by exact-string equality on the boundary value). Never remove or rewrite another alias's row.
99
- 2. **Sidecar file is per-source-per-date** — multiple contributors on the same day produce separate sidecar files (`2026-05-26_email_discovery-ushak.yml`, `2026-05-26_email_discovery-stand.yml`). Bootstrap-status's Discovery Sweep Results table shows one row per source × alias.
99
+ 2. **Sidecar files are per-contributor-folder-per-source-per-date** — each contributor writes only into their own `Evidence/<alias>/_discovery/` folder. Filenames are NOT suffixed with `-<alias>` (folder already namespaces the owner). On the same day, contributors `ushak` and `stand` produce `Evidence/ushak/_discovery/2026-05-26_email_discovery.yml` and `Evidence/stand/_discovery/2026-05-26_email_discovery.yml` respectively — no collision possible. Bootstrap-status's Discovery Sweep Results table shows one row per source × alias.
100
100
  3. **`Discovered by` column in bootstrap-status's per-source Context Artifact Status row** cites the most recent discovering alias. Preserve other aliases' rows in `## Contributors who have bootstrapped this project` per `multi-user-shared-files.instructions.md`.
101
+ 4. **NEVER write to another contributor's `Evidence/<other-alias>/_discovery/` folder.** Reading other aliases' discovery sidecars (e.g. to merge already-confirmed candidates into the shared boundary) is allowed and expected; writing into them is forbidden.
101
102
 
102
103
  ## Rerun behavior
103
104
 
@@ -55,7 +55,7 @@ WorkIQ returns a markdown table. Parse rows where `folder path` is non-empty and
55
55
 
56
56
  ## Sidecar file shape
57
57
 
58
- Written to `<engagement-root>/<project>/Evidence/_discovery/<YYYY-MM-DD>_email_discovery-<alias>.yml`:
58
+ Written to `<engagement-root>/<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_email_discovery.yml` (per-contributor folder; no `-<alias>` filename suffix since the folder already namespaces the owner):
59
59
 
60
60
  ```yaml
61
61
  source: email
@@ -60,7 +60,7 @@ This phrasing — **natural-language by subject + organizer + join URL request**
60
60
 
61
61
  ## Sidecar file shape
62
62
 
63
- Written to `<engagement-root>/<project>/Evidence/_discovery/<YYYY-MM-DD>_meetings_discovery-<alias>.yml`. Schema per `email-bootstrap-discovery.instructions.md` § Sidecar file shape, with `source: meetings`.
63
+ Written to `<engagement-root>/<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_meetings_discovery.yml` (per-contributor folder; no `-<alias>` filename suffix). Schema per `email-bootstrap-discovery.instructions.md` § Sidecar file shape, with `source: meetings`.
64
64
 
65
65
  Additional field for meetings sidecar:
66
66
 
@@ -67,7 +67,7 @@ WorkIQ commonly punts on this query (see Empirical finding above). Apply this cl
67
67
 
68
68
  ## Sidecar file shape
69
69
 
70
- Written to `<engagement-root>/<project>/Evidence/_discovery/<YYYY-MM-DD>_sharepoint_discovery-<alias>.yml`. Schema per `email-bootstrap-discovery.instructions.md` § Sidecar file shape, with `source: sharepoint`.
70
+ Written to `<engagement-root>/<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_sharepoint_discovery.yml` (per-contributor folder; no `-<alias>` filename suffix). Schema per `email-bootstrap-discovery.instructions.md` § Sidecar file shape, with `source: sharepoint`.
71
71
 
72
72
  ```yaml
73
73
  results:
@@ -87,7 +87,7 @@ WorkIQ returns the `chat ID` column populated as `N/A` (empirical, v4.8.1). The
87
87
 
88
88
  ## Sidecar file shape
89
89
 
90
- Two sidecar files (one per query). Written to `<engagement-root>/<project>/Evidence/_discovery/<YYYY-MM-DD>_teams-chats_discovery-<alias>.yml` and `<YYYY-MM-DD>_teams-channels_discovery-<alias>.yml`.
90
+ Two sidecar files (one per query). Written to `<engagement-root>/<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_teams-chats_discovery.yml` and `<engagement-root>/<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_teams-channels_discovery.yml` (per-contributor folder; no `-<alias>` filename suffix since the folder already namespaces the owner).
91
91
 
92
92
  Schema is the same as `email-bootstrap-discovery.instructions.md` § Sidecar file shape, with `source: teams-chats` or `source: teams-channels`.
93
93
 
@@ -138,7 +138,7 @@ For each sweep:
138
138
  3. Parse the response per the doctrine's parsing rules.
139
139
  4. Cap at 10 candidates by recency (or per-doctrine ordering).
140
140
  5. Append discovered values to `<project>/integrations.yml#boundaries.<source>.<key>` as plain strings (deduplicate by exact-string equality).
141
- 6. Write sidecar `<project>/Evidence/_discovery/<YYYY-MM-DD>_<source>_discovery-<alias>.yml` with per-row metadata (`discovered_by`, `discovered_at`, `needs_review: true`, `confidence`, `query`, `workiq_request_id`).
141
+ 6. Write sidecar `<project>/Evidence/<alias>/_discovery/<YYYY-MM-DD>_<source>_discovery.yml` with per-row metadata (`discovered_by`, `discovered_at`, `needs_review: true`, `confidence`, `query`, `workiq_request_id`). The sidecar lives INSIDE the contributor's alias folder (discovery results are per-identity); filename is NOT suffixed with `-<alias>` since the folder already namespaces the owner.
142
142
  7. If `> 10` candidates: append the remainder to `<project>/OPEN-QUESTIONS-DRAFT.md` under `## Discovery sweep — candidates over cap`.
143
143
  8. If `0` candidates: write `last_status: unresolved` (NOT `blocked-config`) and append a one-line widen-hint suggestion to Open Questions.
144
144
  9. If WorkIQ errors: write a `deferred-retry` marker per `deferred-retry-on-workiq-fail.instructions.md` and set `last_status: deferred`. Do NOT skip ahead to `blocked-config`.