email-tool-mcp 5.4.2__tar.gz

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.
Files changed (152) hide show
  1. email_tool_mcp-5.4.2/.claude-plugin/marketplace.json +19 -0
  2. email_tool_mcp-5.4.2/.claude-plugin/plugin.json +22 -0
  3. email_tool_mcp-5.4.2/.codex-mcp.json +13 -0
  4. email_tool_mcp-5.4.2/.codex-plugin/plugin.json +19 -0
  5. email_tool_mcp-5.4.2/.gitattributes +1 -0
  6. email_tool_mcp-5.4.2/.github/ISSUE_TEMPLATE/bug.yml +52 -0
  7. email_tool_mcp-5.4.2/.github/ISSUE_TEMPLATE/config.yml +5 -0
  8. email_tool_mcp-5.4.2/.github/ISSUE_TEMPLATE/feature.yml +28 -0
  9. email_tool_mcp-5.4.2/.github/actions/agent-cli/action.yml +26 -0
  10. email_tool_mcp-5.4.2/.github/dependabot.yml +35 -0
  11. email_tool_mcp-5.4.2/.github/pull_request_template.md +22 -0
  12. email_tool_mcp-5.4.2/.github/tools/claude-code/package-lock.json +140 -0
  13. email_tool_mcp-5.4.2/.github/tools/claude-code/package.json +8 -0
  14. email_tool_mcp-5.4.2/.github/tools/codex/package-lock.json +135 -0
  15. email_tool_mcp-5.4.2/.github/tools/codex/package.json +8 -0
  16. email_tool_mcp-5.4.2/.github/tools/mcpb/osv-scanner.toml +10 -0
  17. email_tool_mcp-5.4.2/.github/tools/mcpb/package-lock.json +637 -0
  18. email_tool_mcp-5.4.2/.github/tools/mcpb/package.json +11 -0
  19. email_tool_mcp-5.4.2/.github/tools/twine/constraints.txt +147 -0
  20. email_tool_mcp-5.4.2/.github/workflows/ci.yml +122 -0
  21. email_tool_mcp-5.4.2/.github/workflows/codeql.yml +26 -0
  22. email_tool_mcp-5.4.2/.github/workflows/docs.yml +49 -0
  23. email_tool_mcp-5.4.2/.github/workflows/fuzz.yml +46 -0
  24. email_tool_mcp-5.4.2/.github/workflows/gates.yml +70 -0
  25. email_tool_mcp-5.4.2/.github/workflows/release.yml +192 -0
  26. email_tool_mcp-5.4.2/.github/workflows/scorecard.yml +43 -0
  27. email_tool_mcp-5.4.2/.gitignore +11 -0
  28. email_tool_mcp-5.4.2/.mcp.json +9 -0
  29. email_tool_mcp-5.4.2/.mcpbignore +23 -0
  30. email_tool_mcp-5.4.2/.pre-commit-config.yaml +39 -0
  31. email_tool_mcp-5.4.2/CHANGELOG.md +171 -0
  32. email_tool_mcp-5.4.2/CONTRIBUTING.md +89 -0
  33. email_tool_mcp-5.4.2/LICENSE +21 -0
  34. email_tool_mcp-5.4.2/PKG-INFO +129 -0
  35. email_tool_mcp-5.4.2/README.md +103 -0
  36. email_tool_mcp-5.4.2/SECURITY.md +12 -0
  37. email_tool_mcp-5.4.2/assets/icon.png +0 -0
  38. email_tool_mcp-5.4.2/assets/icon.svg +7 -0
  39. email_tool_mcp-5.4.2/commands/email-search.md +13 -0
  40. email_tool_mcp-5.4.2/commands/email-send.md +14 -0
  41. email_tool_mcp-5.4.2/commands/inbox.md +13 -0
  42. email_tool_mcp-5.4.2/docs/administrators.md +116 -0
  43. email_tool_mcp-5.4.2/docs/assets/icon.png +0 -0
  44. email_tool_mcp-5.4.2/docs/assets/screens/claude-install.svg +67 -0
  45. email_tool_mcp-5.4.2/docs/assets/screens/claude-marketplace.svg +83 -0
  46. email_tool_mcp-5.4.2/docs/assets/screens/gmail-app-password-name.png +0 -0
  47. email_tool_mcp-5.4.2/docs/assets/screens/gmail-app-password-shown.png +0 -0
  48. email_tool_mcp-5.4.2/docs/assets/screens/google-sign-in.png +0 -0
  49. email_tool_mcp-5.4.2/docs/assets/screens/google-unverified-advanced.png +0 -0
  50. email_tool_mcp-5.4.2/docs/assets/screens/google-unverified.png +0 -0
  51. email_tool_mcp-5.4.2/docs/assets/screens/microsoft-confirm-app.png +0 -0
  52. email_tool_mcp-5.4.2/docs/assets/screens/microsoft-consent.png +0 -0
  53. email_tool_mcp-5.4.2/docs/assets/screens/setup-page.png +0 -0
  54. email_tool_mcp-5.4.2/docs/assets/screens/tool-help.svg +207 -0
  55. email_tool_mcp-5.4.2/docs/assets/screens/tool-install.svg +103 -0
  56. email_tool_mcp-5.4.2/docs/assets/screens/tool-list.svg +67 -0
  57. email_tool_mcp-5.4.2/docs/assets/screens/uv-check.svg +63 -0
  58. email_tool_mcp-5.4.2/docs/assets/screens/uv-install.svg +99 -0
  59. email_tool_mcp-5.4.2/docs/cmmc.md +65 -0
  60. email_tool_mcp-5.4.2/docs/index.md +58 -0
  61. email_tool_mcp-5.4.2/docs/install.md +148 -0
  62. email_tool_mcp-5.4.2/docs/mailboxes.md +242 -0
  63. email_tool_mcp-5.4.2/docs/privacy.md +40 -0
  64. email_tool_mcp-5.4.2/docs/start.md +86 -0
  65. email_tool_mcp-5.4.2/docs/stylesheets/extra.css +12 -0
  66. email_tool_mcp-5.4.2/docs/troubleshooting.md +68 -0
  67. email_tool_mcp-5.4.2/docs/use.md +73 -0
  68. email_tool_mcp-5.4.2/docs/why-cmmc.md +139 -0
  69. email_tool_mcp-5.4.2/fuzz/__init__.py +7 -0
  70. email_tool_mcp-5.4.2/fuzz/_run.py +19 -0
  71. email_tool_mcp-5.4.2/fuzz/fuzz_attachment_text.py +60 -0
  72. email_tool_mcp-5.4.2/fuzz/fuzz_message.py +47 -0
  73. email_tool_mcp-5.4.2/install/Install-email-tool.cmd +19 -0
  74. email_tool_mcp-5.4.2/install/Install-email-tool.command +18 -0
  75. email_tool_mcp-5.4.2/manifest.json +171 -0
  76. email_tool_mcp-5.4.2/mkdocs.yml +58 -0
  77. email_tool_mcp-5.4.2/pyproject.toml +105 -0
  78. email_tool_mcp-5.4.2/server.json +27 -0
  79. email_tool_mcp-5.4.2/skills/email-tool/SKILL.md +74 -0
  80. email_tool_mcp-5.4.2/src/email_tool_mcp/__init__.py +0 -0
  81. email_tool_mcp-5.4.2/src/email_tool_mcp/__main__.py +134 -0
  82. email_tool_mcp-5.4.2/src/email_tool_mcp/approval.py +302 -0
  83. email_tool_mcp-5.4.2/src/email_tool_mcp/attachments.py +323 -0
  84. email_tool_mcp-5.4.2/src/email_tool_mcp/audit.py +285 -0
  85. email_tool_mcp-5.4.2/src/email_tool_mcp/browser.py +55 -0
  86. email_tool_mcp-5.4.2/src/email_tool_mcp/credentials.py +99 -0
  87. email_tool_mcp-5.4.2/src/email_tool_mcp/cui.py +103 -0
  88. email_tool_mcp-5.4.2/src/email_tool_mcp/diagnose.py +68 -0
  89. email_tool_mcp-5.4.2/src/email_tool_mcp/enrol.py +325 -0
  90. email_tool_mcp-5.4.2/src/email_tool_mcp/google.py +295 -0
  91. email_tool_mcp-5.4.2/src/email_tool_mcp/imap_session.py +248 -0
  92. email_tool_mcp-5.4.2/src/email_tool_mcp/mailbox_book.py +231 -0
  93. email_tool_mcp-5.4.2/src/email_tool_mcp/message_compose.py +119 -0
  94. email_tool_mcp-5.4.2/src/email_tool_mcp/message_render.py +178 -0
  95. email_tool_mcp-5.4.2/src/email_tool_mcp/microsoft.py +354 -0
  96. email_tool_mcp-5.4.2/src/email_tool_mcp/passwords.py +69 -0
  97. email_tool_mcp-5.4.2/src/email_tool_mcp/policy.py +255 -0
  98. email_tool_mcp-5.4.2/src/email_tool_mcp/providers.py +40 -0
  99. email_tool_mcp-5.4.2/src/email_tool_mcp/server.py +290 -0
  100. email_tool_mcp-5.4.2/src/email_tool_mcp/settings.py +139 -0
  101. email_tool_mcp-5.4.2/src/email_tool_mcp/setup_page.py +568 -0
  102. email_tool_mcp-5.4.2/src/email_tool_mcp/tls.py +97 -0
  103. email_tool_mcp-5.4.2/src/email_tool_mcp/token_store.py +96 -0
  104. email_tool_mcp-5.4.2/src/email_tool_mcp/tools/__init__.py +0 -0
  105. email_tool_mcp-5.4.2/src/email_tool_mcp/tools/drafts.py +135 -0
  106. email_tool_mcp-5.4.2/src/email_tool_mcp/tools/params.py +48 -0
  107. email_tool_mcp-5.4.2/src/email_tool_mcp/tools/reading.py +206 -0
  108. email_tool_mcp-5.4.2/src/email_tool_mcp/tools/sending.py +65 -0
  109. email_tool_mcp-5.4.2/src/email_tool_mcp/tools/setup.py +24 -0
  110. email_tool_mcp-5.4.2/tests/__init__.py +0 -0
  111. email_tool_mcp-5.4.2/tests/conftest.py +83 -0
  112. email_tool_mcp-5.4.2/tests/fakes.py +152 -0
  113. email_tool_mcp-5.4.2/tests/launch.py +30 -0
  114. email_tool_mcp-5.4.2/tests/live/__init__.py +1 -0
  115. email_tool_mcp-5.4.2/tests/live/conftest.py +21 -0
  116. email_tool_mcp-5.4.2/tests/live/test_live_mail.py +322 -0
  117. email_tool_mcp-5.4.2/tests/test_approval.py +197 -0
  118. email_tool_mcp-5.4.2/tests/test_attachments.py +526 -0
  119. email_tool_mcp-5.4.2/tests/test_audit.py +128 -0
  120. email_tool_mcp-5.4.2/tests/test_bot_pr.py +989 -0
  121. email_tool_mcp-5.4.2/tests/test_bundle.py +33 -0
  122. email_tool_mcp-5.4.2/tests/test_claude_plugin.py +26 -0
  123. email_tool_mcp-5.4.2/tests/test_cli.py +40 -0
  124. email_tool_mcp-5.4.2/tests/test_codex_plugin.py +34 -0
  125. email_tool_mcp-5.4.2/tests/test_commands.py +48 -0
  126. email_tool_mcp-5.4.2/tests/test_credentials.py +195 -0
  127. email_tool_mcp-5.4.2/tests/test_cui.py +150 -0
  128. email_tool_mcp-5.4.2/tests/test_enrol.py +145 -0
  129. email_tool_mcp-5.4.2/tests/test_fuzz.py +138 -0
  130. email_tool_mcp-5.4.2/tests/test_gaps.py +146 -0
  131. email_tool_mcp-5.4.2/tests/test_google.py +282 -0
  132. email_tool_mcp-5.4.2/tests/test_imap_session.py +195 -0
  133. email_tool_mcp-5.4.2/tests/test_mailbox_book.py +87 -0
  134. email_tool_mcp-5.4.2/tests/test_manifests.py +93 -0
  135. email_tool_mcp-5.4.2/tests/test_message_compose.py +117 -0
  136. email_tool_mcp-5.4.2/tests/test_microsoft.py +453 -0
  137. email_tool_mcp-5.4.2/tests/test_policy.py +136 -0
  138. email_tool_mcp-5.4.2/tests/test_server.py +221 -0
  139. email_tool_mcp-5.4.2/tests/test_settings.py +60 -0
  140. email_tool_mcp-5.4.2/tests/test_setup_page.py +388 -0
  141. email_tool_mcp-5.4.2/tests/test_tls.py +264 -0
  142. email_tool_mcp-5.4.2/tools/__init__.py +0 -0
  143. email_tool_mcp-5.4.2/tools/bot_pr/__init__.py +33 -0
  144. email_tool_mcp-5.4.2/tools/bot_pr/__main__.py +32 -0
  145. email_tool_mcp-5.4.2/tools/bot_pr/_git.py +197 -0
  146. email_tool_mcp-5.4.2/tools/bot_pr/_github.py +237 -0
  147. email_tool_mcp-5.4.2/tools/bot_pr/_identity.py +238 -0
  148. email_tool_mcp-5.4.2/tools/clean_install/__init__.py +19 -0
  149. email_tool_mcp-5.4.2/tools/clean_install/__main__.py +13 -0
  150. email_tool_mcp-5.4.2/tools/clean_install/_render.py +26 -0
  151. email_tool_mcp-5.4.2/tools/clean_install/_steps.py +159 -0
  152. email_tool_mcp-5.4.2/uv.lock +2338 -0
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "email-tool",
3
+ "owner": {
4
+ "name": "Sayem Khan",
5
+ "email": "s.khan@alchlight.com"
6
+ },
7
+ "metadata": {
8
+ "description": "Email for any MCP client: IMAP/SMTP mailbox access.",
9
+ "version": "5.4.2"
10
+ },
11
+ "plugins": [
12
+ {
13
+ "name": "email-tool",
14
+ "source": "./",
15
+ "description": "IMAP/SMTP email: read, search, draft and send mail.",
16
+ "license": "MIT"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "email-tool",
3
+ "version": "5.4.2",
4
+ "description": "IMAP/SMTP email: read, search, draft and send mail. One MCP server for all your mailboxes; passwords in the OS keyring.",
5
+ "author": {
6
+ "name": "Sayem Khan",
7
+ "email": "s.khan@alchlight.com",
8
+ "url": "https://github.com/skhan61"
9
+ },
10
+ "keywords": [
11
+ "email",
12
+ "imap",
13
+ "smtp",
14
+ "mcp",
15
+ "mail"
16
+ ],
17
+ "mcpServers": "./.mcp.json",
18
+ "commands": "./commands",
19
+ "skills": "./skills",
20
+ "license": "MIT",
21
+ "icon": "assets/icon.png"
22
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "mcpServers": {
3
+ "email": {
4
+ "command": "uvx",
5
+ "args": [
6
+ "--from",
7
+ "git+https://github.com/skhan61/email-tool@v5.4.2",
8
+ "email-tool-mcp",
9
+ "serve"
10
+ ]
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "email-tool",
3
+ "version": "5.4.2",
4
+ "description": "IMAP/SMTP email: read, search, draft and send mail. One MCP server for all your mailboxes; passwords in the OS keyring.",
5
+ "keywords": ["email", "imap", "smtp", "gmail", "mcp"],
6
+ "skills": "./skills/",
7
+ "mcpServers": "./.codex-mcp.json",
8
+ "interface": {
9
+ "displayName": "Email (IMAP/SMTP)",
10
+ "shortDescription": "Read, search, draft and send email from your own mailboxes",
11
+ "longDescription": "Runs on your machine. Add each mailbox once in a terminal with `email-tool-mcp add <name>`; passwords stay in the OS keyring and never leave your computer except to your mail server.",
12
+ "developerName": "Sayem Khan",
13
+ "category": "Productivity",
14
+ "websiteUrl": "https://github.com/skhan61/email-tool",
15
+ "logo": "./assets/icon.png",
16
+ "composerIcon": "./assets/icon.png"
17
+ },
18
+ "license": "MIT"
19
+ }
@@ -0,0 +1 @@
1
+ install/*.cmd text eol=crlf
@@ -0,0 +1,52 @@
1
+ name: Bug report
2
+ description: Something does not work as documented
3
+ labels: [bug]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: Never paste a password, app password or full mail log here. Replace your address with `you@example.com`.
8
+ - type: textarea
9
+ id: what
10
+ attributes:
11
+ label: What happened
12
+ description: One line.
13
+ validations:
14
+ required: true
15
+ - type: textarea
16
+ id: steps
17
+ attributes:
18
+ label: Steps to reproduce
19
+ placeholder: |
20
+ 1. Ask the agent "list my inbox"
21
+ 2. ...
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: expected
26
+ attributes:
27
+ label: Expected
28
+ description: One line.
29
+ validations:
30
+ required: true
31
+ - type: dropdown
32
+ id: agent
33
+ attributes:
34
+ label: AI agent
35
+ options: [Claude Code, Claude Desktop, Claude Cowork, ChatGPT desktop, Codex CLI, Other]
36
+ validations:
37
+ required: true
38
+ - type: input
39
+ id: environment
40
+ attributes:
41
+ label: OS, Python and email-tool version
42
+ placeholder: macOS 15.6, Python 3.13.2, email-tool 5.2.0 (version from `claude plugin list` or the release page)
43
+ validations:
44
+ required: true
45
+ - type: textarea
46
+ id: logs
47
+ attributes:
48
+ label: Server log
49
+ description: The stderr lines from the MCP server, secrets removed.
50
+ render: text
51
+ validations:
52
+ required: false
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Report a security vulnerability
4
+ url: https://github.com/skhan61/email-tool/security/advisories/new
5
+ about: Report privately. Never post passwords, addresses or logs with secrets in a public issue.
@@ -0,0 +1,28 @@
1
+ name: Feature request
2
+ description: A new tool, agent setup or behaviour
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: what
7
+ attributes:
8
+ label: What
9
+ description: One line.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: why
14
+ attributes:
15
+ label: Why
16
+ description: The task you cannot do today.
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: done-when
21
+ attributes:
22
+ label: Done when
23
+ description: Testable conditions, one per line.
24
+ placeholder: |
25
+ - [ ] `move_email` moves a message between folders
26
+ - [ ] an offline test covers it
27
+ validations:
28
+ required: true
@@ -0,0 +1,26 @@
1
+ ---
2
+ # One agent CLI from its hash-locked package-lock (.github/tools/<tool>), on PATH.
3
+ # Install scripts run only where the CLI needs them (its native binary); the release
4
+ # build passes scripts: "false", so nothing but the locked files runs there.
5
+ name: agent-cli
6
+ description: Install one agent CLI with npm ci from its locked folder
7
+ inputs:
8
+ tool:
9
+ description: Folder under .github/tools (mcpb, codex, claude-code)
10
+ required: true
11
+ scripts:
12
+ description: Run the package's install scripts
13
+ default: "true"
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - shell: bash
18
+ env:
19
+ TOOL: ${{ inputs.tool }}
20
+ SCRIPTS: ${{ inputs.scripts }}
21
+ run: |
22
+ set -euo pipefail
23
+ flags=(--no-audit --no-fund)
24
+ if [ "$SCRIPTS" != "true" ]; then flags+=(--ignore-scripts); fi
25
+ npm ci --prefix "$GITHUB_WORKSPACE/.github/tools/$TOOL" "${flags[@]}"
26
+ echo "$GITHUB_WORKSPACE/.github/tools/$TOOL/node_modules/.bin" >> "$GITHUB_PATH"
@@ -0,0 +1,35 @@
1
+ version: 2
2
+ # Grouped weekly PRs, and nothing younger than 14 days: a fresh release gets two
3
+ # weeks for regressions and yanks to surface first. Runtime and dev bumps stay in
4
+ # separate PRs so a breaking runtime release cannot block tooling updates.
5
+ # The pre-commit-hooks rev is not covered; bump it with `pre-commit autoupdate`.
6
+ updates:
7
+ - package-ecosystem: uv
8
+ directory: /
9
+ schedule:
10
+ interval: weekly
11
+ cooldown:
12
+ default-days: 14
13
+ groups:
14
+ runtime:
15
+ dependency-type: production
16
+ dev:
17
+ dependency-type: development
18
+ - package-ecosystem: npm
19
+ directories: [/.github/tools/mcpb, /.github/tools/codex, /.github/tools/claude-code]
20
+ schedule:
21
+ interval: weekly
22
+ cooldown:
23
+ default-days: 14
24
+ groups:
25
+ agent-clis:
26
+ patterns: ["*"]
27
+ - package-ecosystem: github-actions
28
+ directory: /
29
+ schedule:
30
+ interval: weekly
31
+ cooldown:
32
+ default-days: 14
33
+ groups:
34
+ actions:
35
+ patterns: ["*"]
@@ -0,0 +1,22 @@
1
+ <!-- Short: one line per section, tables over prose. Delete a section that does not apply. -->
2
+
3
+ ## What
4
+ One line. `Fixes #N`
5
+
6
+ ## Root cause
7
+ One line. (Skip for a feature or chore.)
8
+
9
+ ## Done when
10
+ <!-- One row per "Done when" item in the issue, by number. Do not copy the wording: the issue link already shows it. -->
11
+
12
+ | issue item | met | how verified |
13
+ |---|---|---|
14
+ | 1 | ☐ | |
15
+
16
+ ## Not changed
17
+ One line: what a reviewer might fear this touches, and does not.
18
+
19
+ ## Checklist
20
+ - [ ] CI green
21
+ - [ ] No password, address or mail host added to the repository
22
+ - [ ] Docs (docs/) updated if a command or setup step changed
@@ -0,0 +1,140 @@
1
+ {
2
+ "name": "email-tool-ci-claude-code",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "name": "email-tool-ci-claude-code",
8
+ "devDependencies": {
9
+ "@anthropic-ai/claude-code": "2.1.292"
10
+ }
11
+ },
12
+ "node_modules/@anthropic-ai/claude-code": {
13
+ "version": "2.1.292",
14
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-2.1.292.tgz",
15
+ "integrity": "sha512-ptT9UcOsyR2VLNgfHgF87To8B7tCrZktIpYC4dEGt+9MG42NAWsljEGBZ3spdHcJ2akednszESVNti7hWxZrJg==",
16
+ "dev": true,
17
+ "hasInstallScript": true,
18
+ "bin": {
19
+ "claude": "bin/claude.exe"
20
+ },
21
+ "engines": {
22
+ "node": ">=22.0.0"
23
+ },
24
+ "optionalDependencies": {
25
+ "@anthropic-ai/claude-code-darwin-arm64": "2.1.292",
26
+ "@anthropic-ai/claude-code-darwin-x64": "2.1.292",
27
+ "@anthropic-ai/claude-code-linux-arm64": "2.1.292",
28
+ "@anthropic-ai/claude-code-linux-arm64-musl": "2.1.292",
29
+ "@anthropic-ai/claude-code-linux-x64": "2.1.292",
30
+ "@anthropic-ai/claude-code-linux-x64-musl": "2.1.292",
31
+ "@anthropic-ai/claude-code-win32-arm64": "2.1.292",
32
+ "@anthropic-ai/claude-code-win32-x64": "2.1.292"
33
+ }
34
+ },
35
+ "node_modules/@anthropic-ai/claude-code-darwin-arm64": {
36
+ "version": "2.1.292",
37
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-darwin-arm64/-/claude-code-darwin-arm64-2.1.292.tgz",
38
+ "integrity": "sha512-SBkmDQOPbQ9bqkGrzshn92ByyqQy2P7pSs/11NdMLq2VXbcQc93z+yd8Dtx4+jeAX22G7GSvQpKDyKev70Vn8Q==",
39
+ "cpu": [
40
+ "arm64"
41
+ ],
42
+ "dev": true,
43
+ "optional": true,
44
+ "os": [
45
+ "darwin"
46
+ ]
47
+ },
48
+ "node_modules/@anthropic-ai/claude-code-darwin-x64": {
49
+ "version": "2.1.292",
50
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-darwin-x64/-/claude-code-darwin-x64-2.1.292.tgz",
51
+ "integrity": "sha512-1S/JscVIMFrqZsUgcwkyFCKkE2EPgPKX/6z/rgUvZIwfwDRhArzHDCAXbqZYIIBLycLGYH8mUQvud6wBumfsXQ==",
52
+ "cpu": [
53
+ "x64"
54
+ ],
55
+ "dev": true,
56
+ "optional": true,
57
+ "os": [
58
+ "darwin"
59
+ ]
60
+ },
61
+ "node_modules/@anthropic-ai/claude-code-linux-arm64": {
62
+ "version": "2.1.292",
63
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-linux-arm64/-/claude-code-linux-arm64-2.1.292.tgz",
64
+ "integrity": "sha512-tkYfopUsz3AbyprMXvaXlTUewee0Of6fKd+i7Mczb0PFVi3C5SN72WqTwL7ONLD1HyoQ63Tj7TOUUOCPLf/0/w==",
65
+ "cpu": [
66
+ "arm64"
67
+ ],
68
+ "dev": true,
69
+ "optional": true,
70
+ "os": [
71
+ "linux"
72
+ ]
73
+ },
74
+ "node_modules/@anthropic-ai/claude-code-linux-arm64-musl": {
75
+ "version": "2.1.292",
76
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-linux-arm64-musl/-/claude-code-linux-arm64-musl-2.1.292.tgz",
77
+ "integrity": "sha512-NGyuwTVwm+e/Nw2DXne/Y9DVvmF7W6tJPIsDFRFtpjmumqf3IYaO7rOSPa/GCYI+Bk17ZcLGhdz8i1sjJVaufQ==",
78
+ "cpu": [
79
+ "arm64"
80
+ ],
81
+ "dev": true,
82
+ "optional": true,
83
+ "os": [
84
+ "linux"
85
+ ]
86
+ },
87
+ "node_modules/@anthropic-ai/claude-code-linux-x64": {
88
+ "version": "2.1.292",
89
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-linux-x64/-/claude-code-linux-x64-2.1.292.tgz",
90
+ "integrity": "sha512-DNQrJZomQAX23jkJXnfYtIyJdSf5CBnexXwO2hABCs7oiZpa3IbPWIo7K6SPk5tzRIERzbwpfK3tmija1C7+kQ==",
91
+ "cpu": [
92
+ "x64"
93
+ ],
94
+ "dev": true,
95
+ "optional": true,
96
+ "os": [
97
+ "linux"
98
+ ]
99
+ },
100
+ "node_modules/@anthropic-ai/claude-code-linux-x64-musl": {
101
+ "version": "2.1.292",
102
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-linux-x64-musl/-/claude-code-linux-x64-musl-2.1.292.tgz",
103
+ "integrity": "sha512-dDsSurNwuTHMcohG8NfQQAecQ994HnLDjKmsBzlzWvKXp+1/uQY5uhUbDt5R2xXUZTJfzmG1GNClpCu6TMQWaQ==",
104
+ "cpu": [
105
+ "x64"
106
+ ],
107
+ "dev": true,
108
+ "optional": true,
109
+ "os": [
110
+ "linux"
111
+ ]
112
+ },
113
+ "node_modules/@anthropic-ai/claude-code-win32-arm64": {
114
+ "version": "2.1.292",
115
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-win32-arm64/-/claude-code-win32-arm64-2.1.292.tgz",
116
+ "integrity": "sha512-HHFc7Tt1h2ZFT8F/mMv5xlaAMCgK+9XyLjg2izmQ5b9oj4RlbIypXQkDpN6oIpIO/+cxlgB5bATR/EMCsGL11A==",
117
+ "cpu": [
118
+ "arm64"
119
+ ],
120
+ "dev": true,
121
+ "optional": true,
122
+ "os": [
123
+ "win32"
124
+ ]
125
+ },
126
+ "node_modules/@anthropic-ai/claude-code-win32-x64": {
127
+ "version": "2.1.292",
128
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code-win32-x64/-/claude-code-win32-x64-2.1.292.tgz",
129
+ "integrity": "sha512-CXrrjj7Czs9o2YossKkN3z/K+/1GmIjjt3H8muHBDzxw/WM/J9I4kz6jBI4wLwt5miVMkXwwhrwT0hhyNPYAIw==",
130
+ "cpu": [
131
+ "x64"
132
+ ],
133
+ "dev": true,
134
+ "optional": true,
135
+ "os": [
136
+ "win32"
137
+ ]
138
+ }
139
+ }
140
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "email-tool-ci-claude-code",
3
+ "private": true,
4
+ "description": "One agent CLI for CI, locked by hash in package-lock.json and installed with npm ci.",
5
+ "devDependencies": {
6
+ "@anthropic-ai/claude-code": "2.1.292"
7
+ }
8
+ }
@@ -0,0 +1,135 @@
1
+ {
2
+ "name": "email-tool-ci-codex",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "name": "email-tool-ci-codex",
8
+ "devDependencies": {
9
+ "@openai/codex": "0.160.1"
10
+ }
11
+ },
12
+ "node_modules/@openai/codex": {
13
+ "version": "0.160.1",
14
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1.tgz",
15
+ "integrity": "sha512-f1yrJhwgimKQI1kYQlxdPJcFwkNZxZrbz7Hf89EAcnLqkQ7TiESzr2FgSZn13Ga5RuHjlVUfurzwq10wk9zw2g==",
16
+ "dev": true,
17
+ "bin": {
18
+ "codex": "bin/codex.js"
19
+ },
20
+ "engines": {
21
+ "node": ">=16"
22
+ },
23
+ "optionalDependencies": {
24
+ "@openai/codex-darwin-arm64": "npm:@openai/codex@0.160.1-darwin-arm64",
25
+ "@openai/codex-darwin-x64": "npm:@openai/codex@0.160.1-darwin-x64",
26
+ "@openai/codex-linux-arm64": "npm:@openai/codex@0.160.1-linux-arm64",
27
+ "@openai/codex-linux-x64": "npm:@openai/codex@0.160.1-linux-x64",
28
+ "@openai/codex-win32-arm64": "npm:@openai/codex@0.160.1-win32-arm64",
29
+ "@openai/codex-win32-x64": "npm:@openai/codex@0.160.1-win32-x64"
30
+ }
31
+ },
32
+ "node_modules/@openai/codex-darwin-arm64": {
33
+ "name": "@openai/codex",
34
+ "version": "0.160.1-darwin-arm64",
35
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1-darwin-arm64.tgz",
36
+ "integrity": "sha512-6Znu97O7+Ie/cnUpsWLx6NlcPc7DNuj6sAs58xpt0/tKRgx4+xgE9zca1YrwqQUBjUQO1HexudyimmhpZjdWlA==",
37
+ "cpu": [
38
+ "arm64"
39
+ ],
40
+ "dev": true,
41
+ "optional": true,
42
+ "os": [
43
+ "darwin"
44
+ ],
45
+ "engines": {
46
+ "node": ">=16"
47
+ }
48
+ },
49
+ "node_modules/@openai/codex-darwin-x64": {
50
+ "name": "@openai/codex",
51
+ "version": "0.160.1-darwin-x64",
52
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1-darwin-x64.tgz",
53
+ "integrity": "sha512-Q33hmY6BxhoQRgCo4f/xS20yMxORnilQMNdr5w1bXSkXGYAty8/z9odcHbsNYUM6m0fNle12DHLQ5F0Dpfji3A==",
54
+ "cpu": [
55
+ "x64"
56
+ ],
57
+ "dev": true,
58
+ "optional": true,
59
+ "os": [
60
+ "darwin"
61
+ ],
62
+ "engines": {
63
+ "node": ">=16"
64
+ }
65
+ },
66
+ "node_modules/@openai/codex-linux-arm64": {
67
+ "name": "@openai/codex",
68
+ "version": "0.160.1-linux-arm64",
69
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1-linux-arm64.tgz",
70
+ "integrity": "sha512-JLyjBlmjPvwTaicHemw+y5xQSz3Uja2r7F/xkvS8gFufTA2g132Ak+0fo35xnJ/k2uc9fTtjm0LrsEGI78L6Ng==",
71
+ "cpu": [
72
+ "arm64"
73
+ ],
74
+ "dev": true,
75
+ "optional": true,
76
+ "os": [
77
+ "linux"
78
+ ],
79
+ "engines": {
80
+ "node": ">=16"
81
+ }
82
+ },
83
+ "node_modules/@openai/codex-linux-x64": {
84
+ "name": "@openai/codex",
85
+ "version": "0.160.1-linux-x64",
86
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1-linux-x64.tgz",
87
+ "integrity": "sha512-sIDhqV+bsZKKVaVFVY5iB+pAzyOz2XRm3H1KXCsSJwGj5p98qnrT0Fweo1Hfe7WnyTp8mfBNdbVzUeO+mHYugA==",
88
+ "cpu": [
89
+ "x64"
90
+ ],
91
+ "dev": true,
92
+ "optional": true,
93
+ "os": [
94
+ "linux"
95
+ ],
96
+ "engines": {
97
+ "node": ">=16"
98
+ }
99
+ },
100
+ "node_modules/@openai/codex-win32-arm64": {
101
+ "name": "@openai/codex",
102
+ "version": "0.160.1-win32-arm64",
103
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1-win32-arm64.tgz",
104
+ "integrity": "sha512-PCGz2kVUBKKzyKv/cqo/1WqWN8GVUyk9sk0LyWIyXftdU0t+SSsGp45c2I6iOitm88ftGB3LxFHpTMnaiIKU7w==",
105
+ "cpu": [
106
+ "arm64"
107
+ ],
108
+ "dev": true,
109
+ "optional": true,
110
+ "os": [
111
+ "win32"
112
+ ],
113
+ "engines": {
114
+ "node": ">=16"
115
+ }
116
+ },
117
+ "node_modules/@openai/codex-win32-x64": {
118
+ "name": "@openai/codex",
119
+ "version": "0.160.1-win32-x64",
120
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.160.1-win32-x64.tgz",
121
+ "integrity": "sha512-yyqykHtHNhm0ZViofGozz9a4ffUyXDsiyRu9Q2hPNg/cu4uzSsovNr5kDmzBXPFWAilmlZuNkwpw1W7uae2nlg==",
122
+ "cpu": [
123
+ "x64"
124
+ ],
125
+ "dev": true,
126
+ "optional": true,
127
+ "os": [
128
+ "win32"
129
+ ],
130
+ "engines": {
131
+ "node": ">=16"
132
+ }
133
+ }
134
+ }
135
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "email-tool-ci-codex",
3
+ "private": true,
4
+ "description": "One agent CLI for CI, locked by hash in package-lock.json and installed with npm ci.",
5
+ "devDependencies": {
6
+ "@openai/codex": "0.160.1"
7
+ }
8
+ }
@@ -0,0 +1,10 @@
1
+ # Known vulnerabilities in this folder's lockfile that do not apply, each with its reason
2
+ # and an end date. osv-scanner and OpenSSF Scorecard read this file next to the lockfile.
3
+
4
+ [[IgnoredVulns]]
5
+ # node-forge accepts a malformed RSA PKCS#1 v1.5 signature. No fixed release exists.
6
+ # CI and the release workflow run only `mcpb validate` and `mcpb pack`, which never verify
7
+ # a signature, and the bundle is signed by Sigstore in release.yml, not by node-forge.
8
+ id = "GHSA-86w9-cpqp-85rv"
9
+ ignoreUntil = 2027-01-23T00:00:00Z
10
+ reason = "No fixed node-forge release; mcpb validate and pack never verify signatures."