Skip to content

Releases: masonhuemmer/m365

v0.9.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 28 Oct 15:34
77a3aa8

Changelog

  • 269ddd8 Expose original Teams message sender identity for approval gates
  • 4b160ac Merge pull request #49 from masonhuemmer/docs-release-0.8.0
  • 77a3aa8 Merge pull request #52 from masonhuemmer/fix/teams-message-sender-id
  • 629b46e Use patched Go 1.26.10 toolchain
  • 728e282 docs: update release version to 0.8.0

v0.8.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 16 Oct 15:19
95e71e5

Changelog

  • bbb73e0 Merge pull request #47 from masonhuemmer/docs-release-0.7.0
  • 95e71e5 Merge pull request #48 from masonhuemmer/feat-teams-group-chats
  • 6deb2df docs: update release version to 0.7.0
  • 01ee5b3 feat: create and rename named group chats
  • 0f46056 feat: teams hide and unhide

v0.7.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 13 Oct 16:44
9e24ea2

Changelog

  • 7d8e5ec Merge pull request #45 from masonhuemmer/docs-release-0.6.0
  • 9e24ea2 Merge pull request #46 from masonhuemmer/feat-mail-bcc
  • 76cb6ec docs: update release version to 0.6.0
  • 12f81e3 feat: --bcc on mail reply, --to optional with --bcc, fuller dry-run
  • c5c4cf5 feat: add --bcc to mail send

v0.6.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 12 Oct 23:25
1614230

Changelog

  • 1614230 Merge pull request #44 from masonhuemmer/feat-device-code
  • 9debfd8 feat: add device code sign-in

v0.5.1

Choose a tag to compare

@masonhuemmer masonhuemmer released this 12 Oct 23:17
fc05004

Changelog

  • 780b95a Merge pull request #42 from masonhuemmer/docs-readme-chocolatey
  • fc05004 Merge pull request #43 from masonhuemmer/fix-windows-browser-open
  • 11b8116 build: pin gosec to a commit that supports Go 1.27
  • 16a3de0 docs: add Chocolatey to the install options
  • ef9f8f3 fix: open the login browser on Windows and Linux

v0.5.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 09 Oct 16:18
c1b2dc8

Changelog

  • 7ee4f07 Merge bump-go-security (toolchain pin) into teams-mentions
  • a3e4d64 Merge main into teams-mentions
  • 0e8b09c Merge pull request #37 from jacobhuemmer/docs-windows-paths
  • 88e7a7a Merge pull request #38 from masonhuemmer/chore/github-username-rename
  • 300506c Merge pull request #39 from masonhuemmer/teams-mentions
  • 4f0b74b Merge pull request #40 from masonhuemmer/bump-go-security
  • c1b2dc8 Merge pull request #41 from masonhuemmer/docs-release-0.5.0
  • f8c9607 build: pin Go toolchain 1.26.9 to clear net/http advisories
  • ea67f9c chore: update GitHub references after username rename
  • 061dd4c docs: add Windows paths to the README
  • 0b634df docs: update release version to 0.5.0
  • 781de87 feat(teams): turn a typed @name into a real mention
  • 2b8d013 fix(teams): always re-resolve a mention against the whole visible line
  • 19dc233 fix(teams): bound text-token decoding, dedupe unresolved with a set, alias vs possessive
  • 959360f fix(teams): bound the mention lookahead; prefer an exact alias ending in _ or -
  • b044474 fix(teams): bound the whole mention window; never trust a truncated lookahead
  • 093516c fix(teams): collapse whitespace in full-name matches; give fake members user ids
  • 1f7955a fix(teams): do not guess a mention when inline formatting splits the name
  • 8a3fd0d fix(teams): exact punctuated aliases only; a cut-off window must outsize the longest name
  • b330ac1 fix(teams): match possessive suffixes case-insensitively
  • f827112 fix(teams): mention names with apostrophes and marks; refuse split aliases
  • cc51fa3 fix(teams): re-resolve a name that reaches the end of its text against the whole token
  • 3a769cf fix(teams): resolve mentions against the whole visible line in one pass
  • 1f075f9 fix(teams): resolve names across a space before an inline tag; possessives after full names
  • 6d9d6aa fix(teams): support plus-addressed aliases; suggest an email name for duplicate names
  • d0a10e9 fix(teams): tokenize HTML for mentions and fix boundary cases from review
  • 31f9ced fix(teams): treat a trailing + as part of an exact alias
  • a4a8fc8 test(teams): keep mention timing tests out of the race build

v0.4.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 30 Sep 15:33
f53462a

Changelog

  • a851d54 Merge pull request #30 from jacobhuemmer/chocolatey-publish
  • 8e0714a Merge pull request #31 from jacobhuemmer/chocolatey-smoke-test
  • 663a297 Merge pull request #32 from jacobhuemmer/teams-attach-reject
  • 1c4e2ad Merge pull request #33 from jacobhuemmer/teams-file-sharing
  • 0e9ca97 Merge pull request #34 from jacobhuemmer/docs-release-0.4.0
  • a3940b3 Merge pull request #35 from jacobhuemmer/fix-share-chat-members
  • f53462a Merge pull request #36 from jacobhuemmer/fix-gitattributes-mixed-eol
  • 4ace133 ci(chocolatey): install the packed package and run m365 --version before pushing
  • 52715a4 ci: publish releases to Chocolatey
  • 0531f68 docs: tell agents how to attach files (mail) and that Teams cannot yet
  • b08c979 docs: update release version to 0.4.0
  • fbcac51 feat(teams): share --attach files through OneDrive and post a file card
  • c464650 fix(teams): expand chat members so attached files are shared with them
  • 0c38312 fix(teams): reject live send with --attach instead of dropping the files
  • 75f6c62 fix: stop .gitattributes making the mixed-EOL whitespace fixture look dirty

v0.3.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 30 Sep 02:33
10df628

Changelog

  • f835134 Merge main into SES-3-mcp-agent-guards; allow exact user-ID match for addressless members
  • 641944a Merge pull request #13 from jacobhuemmer/SES-3-mcp-agent-guards
  • 7eb637d Merge pull request #26 from jacobhuemmer/ci-windows-job
  • b0f69c4 Merge pull request #27 from jacobhuemmer/windows-session-acl
  • 837ae43 Merge pull request #28 from jacobhuemmer/ci-windows-gate
  • 10df628 Merge pull request #29 from jacobhuemmer/docs-release-0.3.0
  • 27891b3 SES-14: Verify MCP flag values preserve write gate
  • 0491a19 SES-3: Guard MCP writes and recipient resolution
  • 686506a SES-3: Reject injected MCP arguments and tighten guards
  • dab9644 SES-9: Preserve MCP flag values and fail closed on self IDs
  • f84bada SES-9: Reject boolean MCP values for non-boolean flags
  • 23254dc ci: add non-blocking windows-latest build and test job
  • 358147c ci: make the windows job a blocking gate
  • 153d7d5 docs: update release version to 0.3.0
  • 3869100 feat(keychain): owner-only ACL and LOCALAPPDATA for the Windows session fallback
  • 645ed4e fix(SES-19): gate mail CC and reply-all recipients
  • 2161e98 fix(cli): reject unparsable flags on calendar and files delete
  • ba5d7d1 fix(teams): require identifiable self for exact-recipient email matches
  • c9d56f6 refactor: satisfy file-size and CRAP gates
  • 6c31035 test(SES-19): red - gate mail CC and reply recipients
  • c3cac05 test(keychain): accept split inheritable ACL entries on Windows
  • 89d9244 test: make goldens and file-mode checks Windows-safe

v0.2.1

Choose a tag to compare

@masonhuemmer masonhuemmer released this 28 Sep 22:10
281c23e

Changelog

  • 281c23e Merge pull request #25 from jacobhuemmer/SDO-564-attachment-delivery
  • 6e4297d docs(mail): record reply attachment validation and reviews
  • a683015 docs(mail): record successful live reply attachment tests
  • 9252a31 docs(writing-style): greeting on its own line; always close with Thanks
  • 8ec2b53 docs: update release version to 0.2.1
  • 5022b63 fix(mail): deliver attachments with reply and reply-all
  • 3e9f580 test(mail): lock reply attachment delivery regressions in RED

v0.2.0

Choose a tag to compare

@masonhuemmer masonhuemmer released this 28 Sep 00:09
de82920

Highlights

m365 now shows exactly what a message will look like before it's sent, and refuses to send one that would arrive broken.

New

  • --preview on mail send, mail reply and teams send draws the message as a text box in the terminal: the headers, then the body as the recipient will see it. It never sends. It can't be combined with --json and isn't available through MCP.
  • Dry-run shows the real body. --dry-run JSON now includes rendered (the exact HTML that is sent) and format_problems.
  • --format md for mail (mail send, mail reply). It uses the same markdown subset as Teams, now with inline code, and < and & are escaped in prose.

Changed: may affect scripts and agents

  • Badly formatted messages are refused. A send whose body has broken HTML, a tag outside the allow-list, leftover markdown such as **bold**, a literal \n, runs of blank lines, or a non-http(s)/mailto link fails with a usage error (exit 3), and nothing is sent. Through MCP it is an IsError result. Run the same command with --preview or --dry-run to see the problems. There is no override.
  • Mail subjects are checked too: leftover markdown, literal escapes, and newlines.
  • Plain-text mail is now sent as HTML, like replies and Teams, so paragraphs and line breaks survive.
  • --html together with --format md is an error (previously Teams silently used --html). --format accepts only md.
  • Teams messages keep paragraph gaps: paragraphs are joined in one <p> with a blank line between them.

Fixed

  • MCP secret redaction keeps output valid JSON, and now also covers secrets under JSON keys (including numbers and nested JSON), inside HTML, split across lines, and in unterminated quotes.
  • Errors, --human output and teams watch show <, > and & as-is instead of < escapes.

Known limits

Microsoft doesn't publish which HTML each client supports, so the allow-list comes from testing Outlook and Teams on web, Mac and iOS. Teams for iOS flattens code blocks and shows <hr> as a gap. Teams web shows a leading space after a line break.

Maintainers: the build gates were reworked too (toolchain pinning, a go.mod guard, a CRAP ratchet, a file-length gate, and stricter acceptance tests). See #14–#24.

Changelog

  • ef9ca92 Merge main into 006-rendered-message-preview
  • 378698e Merge pull request #12 from jacobhuemmer/docs/config-json-sign-in
  • 645b624 Merge pull request #14 from jacobhuemmer/fix/mcp-redact-json
  • 2e6f800 Merge pull request #15 from jacobhuemmer/fix/tool-toolchain-pin
  • f7911b1 Merge pull request #16 from jacobhuemmer/fix/gomod-guard
  • a074e00 Merge pull request #17 from jacobhuemmer/fix/acceptance-generator
  • 4edff11 Merge pull request #18 from jacobhuemmer/fix/json-no-html-escape
  • 4a05234 Merge pull request #19 from jacobhuemmer/fix/sdo-566-unmatched-steps
  • 6237446 Merge pull request #20 from jacobhuemmer/006-rendered-message-preview
  • 8c130a4 Merge pull request #21 from jacobhuemmer/fix/dry-check-gate
  • 1ebdc51 Merge pull request #22 from jacobhuemmer/fix/crap-gate
  • 7041f08 Merge pull request #23 from jacobhuemmer/refactor/mail-cli-split
  • de82920 Merge pull request #24 from jacobhuemmer/chore/speckit-claude-integration
  • 8046c0b build(acceptance): fail on dry-check crashes, show findings
  • 2f4e4d8 build(acceptance): fail when a dry-check report has no findings count
  • 682150c build: a real CRAP gate with a ratchet baseline
  • 4c2f92f build: clear GOFLAGS in the gomod guard
  • 6f81690 build: file-length gate covers test files; reasons must have words
  • de2b02c build: file-length gate for constitution II
  • 5cdb58b build: gates fail when go list fails; file-size notes need a reason
  • d9d759d build: gomod guard parses the go version and names tidy failures
  • a0eb256 build: guard go.mod's go line and tidiness in make verify
  • d6de8c6 build: pass the pinned toolchain to the parse-time go list
  • 3a7eccb build: run gates with go.mod's toolchain; gosec v2.29.0
  • 825d1f9 build: treat an empty GOTOOLCHAIN as unset in the Makefile
  • f3dafb8 chore(msgbody): scaffold Lint and LintSubject
  • a06b744 chore(msgbody): scaffold Render and Problems signatures
  • 9935806 chore(msgbody): scaffold StringWidth
  • 5d95267 chore: add Spec Kit's Claude integration; upgrade Spec Kit to 1.0.12
  • 35e6bad chore: scaffold Rendered inputs, mail MD flag, and step matcher
  • 6703a39 chore: scaffold Text, drawPreview and termWidth
  • 84d949a chore: scaffold acceptance generate(root, outDir)
  • a6fac4f chore: scaffold checkFeature in the acceptance runtime (SDO-566)
  • b952fe6 chore: scaffold cmd/crap-gate
  • d19f580 chore: scaffold crap-gate run()
  • 883ad51 chore: scaffold listFeatures for the acceptance generator
  • e406b7c chore: scaffold unmatchedSteps in the acceptance runtime (SDO-566)
  • 4ade7b9 docs(plan): list gomod and filesize in the verify targets
  • be618e7 docs(spec): add 006 rendered message preview spec, plan and tasks
  • e97a3a1 docs(spec): record 006 measurements, gate results and deviations
  • f20df0c docs(spec): record PR #20 review fixes and the x/text dependency
  • 918ae64 docs(spec): update 006 docs for main's #14-#19
  • f3c7b0e docs: document rendered dry-run, format problems, --preview and --format md
  • 2e8e29b docs: use config.json for sign-in setup
  • 187fbce feat(crap-gate): CRAP score, cover/gocyclo/baseline parsers, ratchet check
  • f6f168b feat(msgbody): render bodies per target with markdown escaping
  • 44ce390 feat: --format md for mail; reject other --format values
  • e510861 feat: --preview draws the message as a text box
  • 14f3bb5 feat: block sends with format problems; dry-run lists them
  • 9d79a95 feat: render bodies before dry-run and send them unchanged
  • f544fc4 fix(acceptance): fail on steps with no handler (SDO-566)
  • 9e3e86d fix(acceptance): name generated tests by feature path; clear stale; fail on clash
  • d834e91 fix(acceptance): no silent skips in the feature parser; word-bounded prefixes
  • 52c0b4f fix(acceptance): one feature list, case-insensitive clashes, staged output
  • 403b109 fix(acceptance): reject doc strings and data tables in features
  • f127279 fix(acceptance): stage generated tests inside the output folder
  • d0b5246 fix(cli): close redaction leaks found in Codex review
  • 3f8e892 fix(cli): keep the closing quote around a redacted plain value
  • 553e5a8 fix(cli): redact JSON nested in a string value as JSON
  • 8ca5f56 fix(cli): redact adjacent plain lines together in mixed output
  • 79985ed fix(cli): redact an unterminated quoted value to the end of the line
  • a957fae fix(cli): redact any value type under a secret-named key
  • bf0365d fix(cli): redact inside JSON string values so output stays valid
  • e35d9d6 fix(cli): stop HTML-escaping error JSON and --human output
  • e6a58cc fix(cli): teams watch JSON lines keep <, > and & literal
  • a5cd297 fix(crap-gate): address Codex review of PR #22
  • 7028f11 fix(crap-gate): baseline entries may have paths with spaces
  • 4f9c176 fix(crap-gate): number same-name functions by position; allow spaces in paths
  • 918d305 fix(msgbody): only visible text makes a paragraph non-empty
  • ca5ae2b fix(msgbody): subject problems in document order; split lint ordering
  • 49b61f3 fix: address Codex review of PR #20
  • 67bf642 fix: address second Codex review of PR #20
  • 2753609 fix: address third Codex review of PR #20
  • bcc07ef refactor(acceptance): drop 006's step guard and feature name prefixes
  • fd19361 refactor(cli): split mail.go by verb behind a dispatch table
  • d4c18...
Read more