4 Commits

Author SHA1 Message Date
Omar Mihilmy eb0c1ea962 Add read-only add-in data export; harden cache-clear scripts (#302)
plugin-validate / validate (push) Has been cancelled
secret-scan / gitleaks (push) Has been cancelled
* Add read-only add-in data export; harden cache-clear scripts

Chat history, skills, MCP registrations and memory live only in browser
storage on the user's machine. Add export-addin-data.{sh,ps1} to copy them
before a rebuild, and fix the cache-clear scripts that sit next to them.

clear-addin-cache.sh matched the add-in ID case-sensitively, but Office names
the wef file with whatever casing the manifest <Id> carried. A lowercase GUID
reported "already clear" and exited 0, sending admins to the folder-wide wipe
that destroys chat history on Windows. Match case-insensitively, and make a
miss print NOT cleared and exit non-zero on both platforms.

clear-addin-cache.ps1 never parsed on Windows PowerShell 5.1: em dashes in a
BOM-less .ps1 are decoded as ANSI into mojibake containing a quote, which
terminates a string mid-file. All .ps1 files are now pure ASCII, and check.py
rejects non-ASCII bytes in a .ps1 without a UTF-8 BOM.

Also:
- export: parse the port out of WebKit's binary origin file. Dropping it made
  two origins on the same host collide in one export folder, silently
  overwriting the first.
- export: include localStorage, which holds settings, the inference config,
  and the onboarding/terms flags.
- export: exporting nothing while --out was given now exits non-zero, so
  "export then wipe" cannot treat an empty backup as success.
- export: a failed database copy no longer aborts the run; paths containing
  an apostrophe work.
- export.ps1: clear the destination before Copy-Item -Recurse, which nested
  instead of refreshing on a re-run; add -IncludeAll for stores whose names
  compaction has hidden; scan uncompressed LevelDB files first.
- clear.ps1: require a GUID for -Id, since Remove-Item -Path expands wildcards;
  escape value names for Remove-ItemProperty.
- clear.sh: scan Outlook too, and guard flags that take a value.
- Document why replacing or reinstalling a manifest never moves the data.

Verified on macOS against live add-in data, and on a Windows host against
Windows PowerShell 5.1.

* Export Windows localStorage as the whole per-profile store

localStorage holds the settings, the inference/customer config, and the
onboarding + terms-accepted flags -- none of it in IndexedDB -- so an export
without it left a rebuilt machine re-doing onboarding.

Chromium keeps one LevelDB per profile shared by every origin, so it cannot be
filtered down to one add-in. Copy it whole rather than drop it, once per Office
account, beside that account's origin folders. It therefore also contains other
origins' settings: the size is printed on every run including the argument-less
preview, the help text says so plainly, and the folder can simply be deleted
from the export if a data policy forbids it.

- Copy to a scratch name and swap only on success. Deleting the destination
  first meant a locked LOCK file (Office still running) left the export with
  neither the new copy nor the previous good one. A failure is now counted and
  reported as INCOMPLETE with a non-zero exit, matching the macOS script.
- Drive the copy off the unique profile list instead of the per-store loop, so
  a profile whose only store fails the origin-name parse keeps its settings.
- Report in list mode too, matching macOS -- the argument-less run is
  advertised as printing what it found.
- .SYNOPSIS/.DESCRIPTION no longer claim only Claude's data is copied.
- Correct the export-data doc: the export tree is relabelled for readability,
  not a path mirror, so it cannot be copied back verbatim.

Verified on a Windows host against Windows PowerShell 5.1: copied once per
profile, flat on re-run, real LevelDB contents present, disclosed in list mode
without writing anything.
2026-07-22 12:12:21 -04:00
dlaw-ant 96bc9615bc Stamp metadata.anthropic_cookbook on managed-agent deploys (#245) 2026-05-20 22:32:05 -04:00
Omar Mihilmy 379e414f98 feat(repo): plugin version-bump hook + CI backstop; claude-in-office Wef sideload debug (#208)
* feat(repo): plugin version-bump hook + CI backstop, fix install docs/remote

* docs(claude-in-office): add Wef registry + wef-folder sideload (Windows + macOS) for local debugging

* ci: use actions/checkout@v4 instead of pinned SHA

* docs(claude-in-office): scope sideload cleanup to the specific manifest, not the wef folder

* docs(claude-in-office): scope cache-clear to wef contents with guards, not rm -rf of caches/wef dirs

* docs(claude-in-office): target cache-clear by add-in Id, leave other add-ins in wef untouched

* feat(claude-in-office): add clear-addin-cache scripts (mac/win), ID-targeted, dry-run by default

* fix(claude-in-office): Windows sideload cleanup is registry-based, ID-first; direct edits (no office-addin-dev-settings); document deployed-cache caveat

* docs(claude-in-office): clarify surgical per-ID deletion of local/sideloaded manifests is safe; MS warning applies only to the deployed cache

* feat(claude-in-office): add sideload-addin scripts (mac/win), ID-derived, dry-run by default; debug.md points to script pair

* feat(claude-in-office): sideload installs directly (drop dry-run); dry-run stays only on destructive clear-addin-cache

* docs(claude-in-office): make the post-clear app restart an explicit step, not a buried line
2026-05-15 17:57:20 -04:00
cxyback bb4a2b3e53 Restructure repo and add named agents (#81)
- Move verticals from repo root into plugins/vertical-plugins/ and partner
  plugins into plugins/partner-built/
- Add 10 named, self-contained agent plugins under plugins/agent-plugins/
  (Pitch Agent, Market Researcher, Earnings Reviewer, Model Builder,
  Meeting Prep, GL Reconciler, Month-End Closer, Statement Auditor,
  Valuation Reviewer, KYC Screener) — each bundles its own skills so it
  installs standalone
- Add managed-agent-cookbooks/ (one per agent) with subagent isolation
  and steering examples for /v1/agents deployment
- Add fund-admin and operations verticals so the finance-ops/onboarding
  agents ship real domain skills
- Add scripts/ (check.py manifest lint, sync-agent-skills.py,
  deploy-managed-agent.sh, orchestrate.py reference loop,
  test-cookbooks.sh)
- Add .github/workflows/secret-scan.yml (gitleaks + internal-ref grep)
- Tighten agent tool grants to declared MCPs only — no Bash, WebFetch,
  or undeclared mcp__* references in any agent
- Add not-investment-advice disclaimer to README
- Rename claude-in-office to claude-for-msft-365-install (content
  unchanged)
2026-05-05 10:58:18 -04:00