agenteng 0.0.1__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 (86) hide show
  1. agenteng-0.0.1/.dockerignore +52 -0
  2. agenteng-0.0.1/.editorconfig +15 -0
  3. agenteng-0.0.1/.env.example +21 -0
  4. agenteng-0.0.1/.gcloudignore +5 -0
  5. agenteng-0.0.1/.gitattributes +9 -0
  6. agenteng-0.0.1/.github/ISSUE_TEMPLATE/bug.yml +36 -0
  7. agenteng-0.0.1/.github/ISSUE_TEMPLATE/config.yml +5 -0
  8. agenteng-0.0.1/.github/ISSUE_TEMPLATE/event_idea.yml +56 -0
  9. agenteng-0.0.1/.github/ISSUE_TEMPLATE/feature.yml +34 -0
  10. agenteng-0.0.1/.github/ISSUE_TEMPLATE/tool.yml +35 -0
  11. agenteng-0.0.1/.github/pull_request_template.md +14 -0
  12. agenteng-0.0.1/.github/workflows/ci.yml +53 -0
  13. agenteng-0.0.1/.github/workflows/docs.yml +60 -0
  14. agenteng-0.0.1/.github/workflows/publish.yml +128 -0
  15. agenteng-0.0.1/.gitignore +92 -0
  16. agenteng-0.0.1/CHANGELOG.md +33 -0
  17. agenteng-0.0.1/CODE_OF_CONDUCT.md +11 -0
  18. agenteng-0.0.1/CONTRIBUTING.md +46 -0
  19. agenteng-0.0.1/Dockerfile +17 -0
  20. agenteng-0.0.1/LICENSE +199 -0
  21. agenteng-0.0.1/NOTICE +18 -0
  22. agenteng-0.0.1/PKG-INFO +209 -0
  23. agenteng-0.0.1/README.md +173 -0
  24. agenteng-0.0.1/SECURITY.md +13 -0
  25. agenteng-0.0.1/cloudbuild.yaml +54 -0
  26. agenteng-0.0.1/deploy/README.md +213 -0
  27. agenteng-0.0.1/deploy/deploy-cloud-run.sh +58 -0
  28. agenteng-0.0.1/deploy/mcp-http.json +1 -0
  29. agenteng-0.0.1/deploy/mcp-stdio.json +1 -0
  30. agenteng-0.0.1/docs/ARCHITECTURE.md +37 -0
  31. agenteng-0.0.1/docs/COMMUNITY.md +25 -0
  32. agenteng-0.0.1/docs/DATA.md +15 -0
  33. agenteng-0.0.1/docs/INTEGRATIONS.md +132 -0
  34. agenteng-0.0.1/docs/PARTICIPATION.md +86 -0
  35. agenteng-0.0.1/docs/RELEASING.md +114 -0
  36. agenteng-0.0.1/docs/TOOLS.md +68 -0
  37. agenteng-0.0.1/docs/assets/favicon.png +0 -0
  38. agenteng-0.0.1/docs/assets/logo.png +0 -0
  39. agenteng-0.0.1/docs/index.md +198 -0
  40. agenteng-0.0.1/docs/stylesheets/extra.css +344 -0
  41. agenteng-0.0.1/experiments/rlm_monty_spike.py +232 -0
  42. agenteng-0.0.1/mkdocs.yml +90 -0
  43. agenteng-0.0.1/pyproject.toml +67 -0
  44. agenteng-0.0.1/requirements-docs.txt +3 -0
  45. agenteng-0.0.1/scripts/check-hosted.py +70 -0
  46. agenteng-0.0.1/scripts/check-public-release.py +172 -0
  47. agenteng-0.0.1/scripts/check-release-metadata.py +65 -0
  48. agenteng-0.0.1/scripts/export-website.mjs +151 -0
  49. agenteng-0.0.1/scripts/import-tools.py +46 -0
  50. agenteng-0.0.1/scripts/stage-release.py +42 -0
  51. agenteng-0.0.1/scripts/verify-release.py +128 -0
  52. agenteng-0.0.1/src/agenteng/__init__.py +3 -0
  53. agenteng-0.0.1/src/agenteng/__main__.py +3 -0
  54. agenteng-0.0.1/src/agenteng/a2a.py +191 -0
  55. agenteng-0.0.1/src/agenteng/auth.py +7 -0
  56. agenteng-0.0.1/src/agenteng/calendar.py +55 -0
  57. agenteng-0.0.1/src/agenteng/catalogue.py +15 -0
  58. agenteng-0.0.1/src/agenteng/cli.py +566 -0
  59. agenteng-0.0.1/src/agenteng/config.py +54 -0
  60. agenteng-0.0.1/src/agenteng/contracts.py +7 -0
  61. agenteng-0.0.1/src/agenteng/data/catalogue.json +1273 -0
  62. agenteng-0.0.1/src/agenteng/data/install.sh +33 -0
  63. agenteng-0.0.1/src/agenteng/data/tools.json +10737 -0
  64. agenteng-0.0.1/src/agenteng/discovery.py +249 -0
  65. agenteng-0.0.1/src/agenteng/engines.py +291 -0
  66. agenteng-0.0.1/src/agenteng/mcp.py +77 -0
  67. agenteng-0.0.1/src/agenteng/models.py +266 -0
  68. agenteng-0.0.1/src/agenteng/participation.py +511 -0
  69. agenteng-0.0.1/src/agenteng/remote.py +25 -0
  70. agenteng-0.0.1/src/agenteng/server.py +247 -0
  71. agenteng-0.0.1/src/agenteng/service.py +537 -0
  72. agenteng-0.0.1/src/agenteng/tool_directory.py +292 -0
  73. agenteng-0.0.1/src/agenteng/tool_import.py +185 -0
  74. agenteng-0.0.1/src/agenteng/tool_pages.py +73 -0
  75. agenteng-0.0.1/tests/conftest.py +11 -0
  76. agenteng-0.0.1/tests/test_cloud_run_deploy.py +146 -0
  77. agenteng-0.0.1/tests/test_discovery.py +97 -0
  78. agenteng-0.0.1/tests/test_engines.py +242 -0
  79. agenteng-0.0.1/tests/test_installer.py +98 -0
  80. agenteng-0.0.1/tests/test_participation.py +435 -0
  81. agenteng-0.0.1/tests/test_protocols.py +274 -0
  82. agenteng-0.0.1/tests/test_public_release.py +119 -0
  83. agenteng-0.0.1/tests/test_release_metadata.py +93 -0
  84. agenteng-0.0.1/tests/test_service.py +160 -0
  85. agenteng-0.0.1/tests/test_tool_directory.py +283 -0
  86. agenteng-0.0.1/uv.lock +1200 -0
@@ -0,0 +1,52 @@
1
+ .git
2
+ .github
3
+ .venv
4
+ .venv-docs
5
+ site
6
+ venv
7
+ .cache
8
+ .env
9
+ .env.*
10
+ !.env.example
11
+ __pycache__
12
+ *.pyc
13
+ .pytest_cache
14
+ .ruff_cache
15
+ .mypy_cache
16
+ dist
17
+ build
18
+ .private
19
+ PLAN.md
20
+ RLM-DESIGN.md
21
+ docs/IMPLEMENTATION.md
22
+ .agenteng
23
+ proposal-drafts
24
+ submissions
25
+ participant-access*.txt
26
+ attendees*.csv
27
+ members*.csv
28
+ contacts*.csv
29
+ /draft.json
30
+ /draft.md
31
+ /talk.json
32
+ /talk.md
33
+ /proposal.json
34
+ /proposal.md
35
+ /proposal-*.json
36
+ /proposal-*.md
37
+ *.pem
38
+ *.key
39
+ *.p12
40
+ *.pfx
41
+ *.credentials.json
42
+ service-account*.json
43
+ experiments
44
+ tests
45
+ .aws
46
+ .azure
47
+ .gcloud
48
+ .terraform
49
+ *.tfstate
50
+ *.tfstate.*
51
+ *.sqlite*
52
+ *.db*
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = space
9
+ indent_size = 4
10
+
11
+ [*.{json,yml,yaml}]
12
+ indent_size = 2
13
+
14
+ [*.md]
15
+ trim_trailing_whitespace = false
@@ -0,0 +1,21 @@
1
+ # Default requests use lookup; engine selection is explicit.
2
+ AGENTENG_ENABLE_STANDARD=0
3
+ AGENTENG_ENABLE_RLM=0
4
+ AGENTENG_PUBLIC_URL=https://a2a.agentengineering.world
5
+ # Optional model operations require a server-side token and a configured model.
6
+ # AGENTENG_OPERATOR_TOKEN=
7
+ # AGENTENG_MODEL_API_KEY=
8
+ # AGENTENG_MODEL_BASE_URL=https://api.openai.com/v1
9
+ # AGENTENG_MODEL=
10
+ # AGENTENG_CATALOGUE=/absolute/path/catalogue.json
11
+ AGENTENG_ALLOWED_ORIGINS=https://agentengineering.world
12
+
13
+ # Single-organizer private intake pilot; default off. Requires persistent private storage.
14
+ AGENTENG_ENABLE_INTAKE=0
15
+ # AGENTENG_INBOX=/persistent/private/agenteng.sqlite3
16
+ # AGENTENG_INTAKE_PRIVACY_NOTICE=Operator-approved notice: recipient, use, deletion contact, retention and backups.
17
+ AGENTENG_INTAKE_RETENTION_DAYS=90
18
+ AGENTENG_INTAKE_CAPACITY=1000
19
+ # AGENTENG_CALLS=/persistent/private/calls.json
20
+ # Client-only credential issued separately for each participant; never commit it.
21
+ # AGENTENG_PARTICIPANT_TOKEN=
@@ -0,0 +1,5 @@
1
+ # Cloud Build uploads must use the same private/local exclusions as Git.
2
+ .gcloudignore
3
+ .git
4
+ .git/**
5
+ #!include:.gitignore
@@ -0,0 +1,9 @@
1
+ # Keep source, scripts and catalogue bytes consistent across platforms.
2
+ * text=auto eol=lf
3
+ *.png binary
4
+ *.jpg binary
5
+ *.jpeg binary
6
+ *.gif binary
7
+ *.ico binary
8
+ *.pdf binary
9
+ *.whl binary
@@ -0,0 +1,36 @@
1
+ name: Bug report
2
+ description: Report an issue with the CLI, catalogue, MCP or A2A behavior.
3
+ title: '[Bug] '
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: >-
8
+ Please remove credentials, personal data and private event information.
9
+ Vulnerabilities belong in private security reporting; see SECURITY.md.
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: AgentEng version and environment
14
+ placeholder: '0.0.1; Python 3.12; Linux; CLI / MCP / A2A'
15
+ validations:
16
+ required: true
17
+ - type: textarea
18
+ id: reproduce
19
+ attributes:
20
+ label: Minimal steps to reproduce
21
+ description: Include a redacted command or request, plus the public event ID if relevant.
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: result
26
+ attributes:
27
+ label: Expected and actual behavior
28
+ validations:
29
+ required: true
30
+ - type: checkboxes
31
+ id: privacy
32
+ attributes:
33
+ label: Public report
34
+ options:
35
+ - label: I removed credentials and private/personal information.
36
+ required: true
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Private speaker proposal or organizer enquiry
4
+ url: https://agentengineering.world/#faq
5
+ about: Contact events@agentengineering.world; keep proposals and contact details out of public issues.
@@ -0,0 +1,56 @@
1
+ name: Public event idea
2
+ description: Discuss a conference topic or workshop idea you want to share publicly.
3
+ title: '[Event idea] '
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: >-
8
+ This issue and its edit history are public. Do not include email addresses,
9
+ private speaker proposals or confidential material. For a private proposal,
10
+ contact events@agentengineering.world. Discussion is not an event booking,
11
+ active call for proposals or promise of organizer action.
12
+ - type: input
13
+ id: topic
14
+ attributes:
15
+ label: Working topic
16
+ placeholder: 'Practitioner workshop on evaluating agent memory'
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: audience
21
+ attributes:
22
+ label: Audience and problem
23
+ description: Who would benefit, and what would they learn or work on?
24
+ validations:
25
+ required: true
26
+ - type: dropdown
27
+ id: format
28
+ attributes:
29
+ label: Possible format
30
+ options:
31
+ - Discussion / brainstorming
32
+ - Practitioner meetup
33
+ - Workshop
34
+ - Conference session
35
+ - Other format described below
36
+ validations:
37
+ required: true
38
+ - type: input
39
+ id: location
40
+ attributes:
41
+ label: Suggested city or online format
42
+ description: Optional suggestion; no venue or schedule is implied.
43
+ - type: textarea
44
+ id: outline
45
+ attributes:
46
+ label: Outline and public references
47
+ description: Optional context, links and alternatives. No personal contact details.
48
+ - type: checkboxes
49
+ id: expectations
50
+ attributes:
51
+ label: Public discussion and organizer discretion
52
+ options:
53
+ - label: I want this idea shared publicly and have removed private information.
54
+ required: true
55
+ - label: Submission, comments and interest do not guarantee review, acceptance or an event.
56
+ required: true
@@ -0,0 +1,34 @@
1
+ name: Software feature idea
2
+ description: Suggest an improvement to the open-source software.
3
+ title: '[Feature] '
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: >-
8
+ Ideas are considered by maintainers, without a promised implementation or timeline.
9
+ For conference topics, use Public event idea. For private proposals, contact the organizer.
10
+ - type: textarea
11
+ id: problem
12
+ attributes:
13
+ label: What problem does this solve?
14
+ description: Describe the user and concrete workflow.
15
+ validations:
16
+ required: true
17
+ - type: textarea
18
+ id: approach
19
+ attributes:
20
+ label: Suggested behavior and alternatives
21
+ validations:
22
+ required: true
23
+ - type: textarea
24
+ id: contribute
25
+ attributes:
26
+ label: Would you like to help?
27
+ description: Optional; proposing a feature does not require you to implement it.
28
+ - type: checkboxes
29
+ id: expectations
30
+ attributes:
31
+ label: Expectations
32
+ options:
33
+ - label: This suggestion does not create a commitment to implement it or respond by a deadline.
34
+ required: true
@@ -0,0 +1,35 @@
1
+ name: Tool-directory suggestion or correction
2
+ description: Suggest a public tool, corrected link, duplicate merge or discipline tag.
3
+ title: '[Tools] '
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: >-
8
+ Provide primary public sources. Listing is not an endorsement or a promise
9
+ of inclusion, response or a review deadline. Do not share credentials,
10
+ personal contact details or private speaker proposals here.
11
+ - type: input
12
+ id: tool
13
+ attributes:
14
+ label: Tool name or existing ID
15
+ validations:
16
+ required: true
17
+ - type: textarea
18
+ id: change
19
+ attributes:
20
+ label: Suggested addition or correction
21
+ description: Explain the name, links, duplicate or discipline mapping to change.
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: sources
26
+ attributes:
27
+ label: Primary public references
28
+ description: Official product documentation, repository or announcement links.
29
+ validations:
30
+ required: true
31
+ - type: input
32
+ id: affiliation
33
+ attributes:
34
+ label: Relevant affiliation
35
+ description: Disclose whether you maintain, work for or sponsor the project.
@@ -0,0 +1,14 @@
1
+ ## Change
2
+
3
+ Describe the problem and resulting behavior. Link the relevant issue if there is one.
4
+
5
+ ## Validation
6
+
7
+ Describe meaningful checks and any limitations. For docs-only changes, state that.
8
+
9
+ ## Review
10
+
11
+ - [ ] This contains no credentials, private proposals, attendee/contact data or internal notes.
12
+ - [ ] Public event changes cite their source; unknown details remain unknown.
13
+ - [ ] Optional model/recursion limits and default model-free behavior are preserved.
14
+ - [ ] I agree to the project's contribution license and Code of Conduct.
@@ -0,0 +1,53 @@
1
+ name: CI
2
+ "on":
3
+ push:
4
+ branches: ['**']
5
+ pull_request:
6
+ workflow_call:
7
+ inputs:
8
+ source_ref:
9
+ type: string
10
+ required: false
11
+ default: ''
12
+ release_tag:
13
+ type: string
14
+ required: false
15
+ default: ''
16
+ permissions:
17
+ contents: read
18
+ jobs:
19
+ verify:
20
+ runs-on: ubuntu-latest
21
+ strategy:
22
+ matrix:
23
+ python: ['3.12', '3.13']
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ with:
27
+ ref: ${{ inputs.source_ref || github.sha }}
28
+ - uses: astral-sh/setup-uv@v6
29
+ with:
30
+ version: '0.8.0'
31
+ python-version: ${{ matrix.python }}
32
+ - run: uv sync --frozen --all-extras
33
+ - name: Check package and release versions
34
+ env:
35
+ RELEASE_TAG: ${{ inputs.release_tag }}
36
+ run: |
37
+ if [ -n "$RELEASE_TAG" ]; then
38
+ uv run --frozen python scripts/check-release-metadata.py --tag "$RELEASE_TAG"
39
+ else
40
+ uv run --frozen python scripts/check-release-metadata.py
41
+ fi
42
+ - run: uv run --frozen python scripts/check-public-release.py
43
+ - run: uv run --frozen ruff check src tests scripts
44
+ - run: uv run --frozen ruff format --check src tests scripts
45
+ - run: uv run --frozen pytest -q
46
+ - run: uv build
47
+ - run: uv run --frozen python scripts/check-public-release.py --artifacts
48
+ - run: uv run --frozen python scripts/verify-release.py
49
+ - run: uv run --frozen python scripts/stage-release.py
50
+ - uses: actions/upload-artifact@v4
51
+ with:
52
+ name: agenteng-python-${{ matrix.python }}
53
+ path: dist/
@@ -0,0 +1,60 @@
1
+ name: Documentation
2
+
3
+ "on":
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'docs/**'
8
+ - 'mkdocs.yml'
9
+ - 'requirements-docs.txt'
10
+ - '.github/workflows/docs.yml'
11
+ pull_request:
12
+ paths:
13
+ - 'docs/**'
14
+ - 'mkdocs.yml'
15
+ - 'requirements-docs.txt'
16
+ - '.github/workflows/docs.yml'
17
+ workflow_dispatch:
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ concurrency:
23
+ group: docs-${{ github.ref }}
24
+ cancel-in-progress: false
25
+
26
+ jobs:
27
+ build:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+ - uses: astral-sh/setup-uv@v6
32
+ with:
33
+ version: '0.8.0'
34
+ python-version: '3.12'
35
+ - name: Install documentation tooling
36
+ run: |
37
+ uv venv .venv-docs --python 3.12
38
+ uv pip install --python .venv-docs/bin/python -r requirements-docs.txt
39
+ - name: Build documentation
40
+ run: .venv-docs/bin/python -m mkdocs build --strict
41
+ - uses: actions/upload-pages-artifact@v3
42
+ if: github.repository == 'SuperagenticAI/agenteng' && github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
43
+ with:
44
+ path: site
45
+
46
+ deploy:
47
+ if: github.repository == 'SuperagenticAI/agenteng' && github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
48
+ needs: build
49
+ runs-on: ubuntu-latest
50
+ permissions:
51
+ pages: write
52
+ id-token: write
53
+ environment:
54
+ name: github-pages
55
+ url: ${{ steps.deployment.outputs.page_url }}
56
+ steps:
57
+ - uses: actions/configure-pages@v5
58
+ - name: Publish to GitHub Pages
59
+ id: deployment
60
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,128 @@
1
+ name: Publish
2
+
3
+ "on":
4
+ push:
5
+ tags: ['v*']
6
+ workflow_dispatch:
7
+ inputs:
8
+ tag:
9
+ description: 'Existing release tag to retry, for example v0.0.1'
10
+ required: true
11
+ type: string
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ # Serialize reruns of each tag; never cancel an in-progress PyPI upload.
17
+ concurrency:
18
+ group: publish-${{ inputs.tag || github.ref_name }}
19
+ cancel-in-progress: false
20
+
21
+ jobs:
22
+ resolve:
23
+ if: github.repository == 'SuperagenticAI/agenteng'
24
+ runs-on: ubuntu-latest
25
+ outputs:
26
+ tag: ${{ steps.release.outputs.tag }}
27
+ commit: ${{ steps.release.outputs.commit }}
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 0
32
+ - name: Resolve an existing version tag to an immutable commit
33
+ id: release
34
+ env:
35
+ RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
36
+ shell: bash
37
+ run: |
38
+ set -euo pipefail
39
+ python - <<'PY'
40
+ import os, re, sys
41
+ tag = os.environ['RELEASE_TAG']
42
+ pattern = r'v[0-9]+\.[0-9]+\.[0-9]+(?:(?:a|b|rc)[0-9]+)?(?:\.post[0-9]+)?(?:\.dev[0-9]+)?'
43
+ if not re.fullmatch(pattern, tag):
44
+ sys.exit('Use a version tag such as v0.0.1 or v0.2.0rc1.')
45
+ PY
46
+ commit=$(git rev-parse --verify "refs/tags/${RELEASE_TAG}^{commit}")
47
+ printf 'tag=%s\ncommit=%s\n' "$RELEASE_TAG" "$commit" >> "$GITHUB_OUTPUT"
48
+
49
+ verify:
50
+ needs: resolve
51
+ uses: ./.github/workflows/ci.yml
52
+ with:
53
+ source_ref: ${{ needs.resolve.outputs.commit }}
54
+ release_tag: ${{ needs.resolve.outputs.tag }}
55
+
56
+ publish:
57
+ needs: [resolve, verify]
58
+ runs-on: ubuntu-latest
59
+ permissions:
60
+ contents: write
61
+ steps:
62
+ # Publish the exact Python 3.12 artifacts verified by CI; do not rebuild
63
+ # in the credentialed job. Both Python test jobs must have succeeded.
64
+ - uses: actions/download-artifact@v4
65
+ with:
66
+ name: agenteng-python-3.12
67
+ path: dist
68
+ - uses: astral-sh/setup-uv@v6
69
+ with:
70
+ version: '0.8.0'
71
+ - name: Check the release tag still identifies the verified commit
72
+ env:
73
+ GH_TOKEN: ${{ github.token }}
74
+ GH_REPO: ${{ github.repository }}
75
+ RELEASE_TAG: ${{ needs.resolve.outputs.tag }}
76
+ RELEASE_COMMIT: ${{ needs.resolve.outputs.commit }}
77
+ shell: bash
78
+ run: |
79
+ set -euo pipefail
80
+ remote_commit=$(gh api "repos/${GH_REPO}/commits/${RELEASE_TAG}" --jq '.sha')
81
+ if [ "$remote_commit" != "$RELEASE_COMMIT" ]; then
82
+ echo 'Release tag moved after verification; refusing to publish.' >&2
83
+ exit 1
84
+ fi
85
+ - name: Publish verified distributions to PyPI
86
+ env:
87
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
88
+ shell: bash
89
+ run: |
90
+ set -euo pipefail
91
+ if [ -z "$UV_PUBLISH_TOKEN" ]; then
92
+ echo 'Configure the repository secret PYPI_API_TOKEN with access to agenteng.' >&2
93
+ exit 1
94
+ fi
95
+ uv publish --trusted-publishing never --check-url https://pypi.org/simple/ dist/*.whl dist/*.tar.gz
96
+ - name: Create or update the GitHub release
97
+ env:
98
+ GH_TOKEN: ${{ github.token }}
99
+ GH_REPO: ${{ github.repository }}
100
+ RELEASE_TAG: ${{ needs.resolve.outputs.tag }}
101
+ RELEASE_COMMIT: ${{ needs.resolve.outputs.commit }}
102
+ shell: bash
103
+ run: |
104
+ set -euo pipefail
105
+ # Check tag identity again before attaching the verified files.
106
+ remote_commit=$(gh api "repos/${GH_REPO}/commits/${RELEASE_TAG}" --jq '.sha')
107
+ if [ "$remote_commit" != "$RELEASE_COMMIT" ]; then
108
+ echo 'Release tag moved after verification; refusing to attach artifacts.' >&2
109
+ exit 1
110
+ fi
111
+ python - <<'PY'
112
+ import hashlib
113
+ from pathlib import Path
114
+ distributions = sorted([*Path('dist').glob('*.whl'), *Path('dist').glob('*.tar.gz')])
115
+ Path('dist/SHA256SUMS').write_text(''.join(
116
+ f'{hashlib.sha256(p.read_bytes()).hexdigest()} {p.name}\n' for p in distributions
117
+ ))
118
+ PY
119
+ if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
120
+ gh release upload "$RELEASE_TAG" dist/*.whl dist/*.tar.gz dist/SHA256SUMS --clobber
121
+ else
122
+ prerelease=()
123
+ if [[ "$RELEASE_TAG" =~ (a|b|rc)[0-9]+|\.dev[0-9]+ ]]; then
124
+ prerelease=(--prerelease)
125
+ fi
126
+ gh release create "$RELEASE_TAG" dist/*.whl dist/*.tar.gz dist/SHA256SUMS \
127
+ --verify-tag --title "AgentEng ${RELEASE_TAG#v}" --generate-notes "${prerelease[@]}"
128
+ fi
@@ -0,0 +1,92 @@
1
+ # Local environments, dependencies and Python caches
2
+ .venv/
3
+ .venv-docs/
4
+ venv/
5
+ env/
6
+ __pypackages__/
7
+ __pycache__/
8
+ *.py[cod]
9
+ *.egg-info/
10
+ .eggs/
11
+ .cache/
12
+ .pytest_cache/
13
+ .ruff_cache/
14
+ .mypy_cache/
15
+ .tox/
16
+ .nox/
17
+
18
+ # Build/release output (the installer source stays in src/agenteng/data)
19
+ build/
20
+ /site/
21
+ dist/
22
+ wheelhouse/
23
+ .coverage
24
+ .coverage.*
25
+ htmlcov/
26
+ coverage.xml
27
+
28
+ # Credentials and operator configuration; keep the empty example public
29
+ .env
30
+ .env.*
31
+ !.env.example
32
+ *.pem
33
+ *.key
34
+ *.p12
35
+ *.pfx
36
+ *.credentials.json
37
+ service-account*.json
38
+ .aws/
39
+ .azure/
40
+ .gcloud/
41
+ .terraform/
42
+ *.tfstate
43
+ *.tfstate.*
44
+
45
+ # Private plans, working notes and future proposal/contact storage
46
+ .private/
47
+ /PLAN.md
48
+ /RLM-DESIGN.md
49
+ /docs/IMPLEMENTATION.md
50
+ .agenteng/
51
+ proposal-drafts/
52
+ submissions/
53
+ participant-access*.txt
54
+ attendees.csv
55
+ attendees-*.csv
56
+ attendees_*.csv
57
+ members.csv
58
+ members-*.csv
59
+ members_*.csv
60
+ contacts.csv
61
+ contacts-*.csv
62
+ contacts_*.csv
63
+ # Common exports from the documented local drafting commands
64
+ /draft.json
65
+ /draft.md
66
+ /talk.json
67
+ /talk.md
68
+ /proposal.json
69
+ /proposal.md
70
+ /proposal-*.json
71
+ /proposal-*.md
72
+ *.sqlite
73
+ *.sqlite3
74
+ *.db
75
+ *.db-journal
76
+ *.sqlite-journal
77
+ *.sqlite3-journal
78
+ *.db-wal
79
+ *.db-shm
80
+ *.sqlite-wal
81
+ *.sqlite-shm
82
+ *.sqlite3-wal
83
+ *.sqlite3-shm
84
+
85
+ # Local editor/system state and logs
86
+ .DS_Store
87
+ .idea/
88
+ .vscode/
89
+ *.swp
90
+ *.swo
91
+ *.log
92
+ *.tmp
@@ -0,0 +1,33 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ### Changed
6
+
7
+ - Align the initial package and installer release to `0.0.1`; derive the HTTP API version from package metadata and show the expected tag in release-check failures.
8
+
9
+ - Use `agenteng` as the Python package distribution name, matching the CLI and module.
10
+
11
+ ### Added
12
+
13
+ - Tag-triggered Cloud Build deployment with release validation, generated Cloud Run URL setup, dedicated runtime identity, live MCP/A2A checks and a console setup guide.
14
+
15
+ - Minimal Markdown documentation with the official logo and favicon, MkDocs Material preview and GitHub Pages publishing.
16
+
17
+ - Version-tag PyPI publishing and GitHub releases using verified CI artifacts, with release metadata validation and existing-tag retry support.
18
+
19
+ - Offline tool directory: 456 listings covering 461 attributed source entries across twelve disciplines; CLI/MCP/A2A list, search, filters, aliases and pagination, crawlable pages/feed, and validated maintainer import.
20
+
21
+ - Public event catalogue with source attribution, snapshot freshness and timezone-aware event states.
22
+ - `agenteng` CLI for events, speakers, agendas, published ticket terms, recordings, search and session/calendar planning.
23
+ - One-tool MCP server over stdio and Streamable HTTP; A2A 1.0 discovery and JSON-RPC adapter.
24
+ - Optional ordinary synthesis and Monty RLM, disabled by default, with one child or leaf delegation and depth one.
25
+ - Versioned wheel installer, release staging, Cloud Run configuration and local/CI verification.
26
+ - Read-only participation guidance for talk and event ideas, with explicit organizer discretion.
27
+ - Apache-2.0 license, contributor/security/community documentation and GitHub issue forms.
28
+ - London/San Francisco discovery, source-backed invited-programme policy, crawlable event pages/JSON-LD, event feeds and agent/crawler guides.
29
+ - Codex, Claude Code, Cursor and generic MCP connection instructions plus a remote stdio bridge.
30
+ - Guided offline drafts, completeness checks and private-permission JSON/Markdown export.
31
+ - Opt-in single-organizer SQLite intake pilot: participant credentials, confirmed previews, durable receipts, scoped status/history, withdrawal, retention and local organizer review.
32
+
33
+ Public endpoints and package distribution have not been published. Hosted intake remains disabled by default and requires persistent private storage; the supplied Cloud Run configuration serves public discovery/drafting.
@@ -0,0 +1,11 @@
1
+ # Community Code of Conduct
2
+
3
+ We want Agent Engineering HQ to be welcoming to practitioners with different backgrounds, experience levels and perspectives. This policy applies to the project's issues, pull requests, discussions and community interactions connected with the project.
4
+
5
+ Treat people with respect. Critique ideas and implementation choices without personal attacks. Make room for beginners, communicate constructively and respect privacy and consent.
6
+
7
+ Harassment, threats, discriminatory remarks, sexualized conduct, doxxing, spam and publication of someone else's private information are not acceptable. Do not pressure maintainers or organizers to accept a contribution, proposal, commercial offer or event commitment.
8
+
9
+ Report concerns privately to [events@agentengineering.world](mailto:events@agentengineering.world). Include relevant links and the context needed to understand the concern; avoid public allegations or sharing unnecessary personal information. Reports will be handled as privately as practical.
10
+
11
+ Maintainers and organizers may remove content, ask for changes, restrict participation or ban participants when necessary. Decisions depend on context and impact. The same expectations apply to maintainers and organizers.