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.
- agenteng-0.0.1/.dockerignore +52 -0
- agenteng-0.0.1/.editorconfig +15 -0
- agenteng-0.0.1/.env.example +21 -0
- agenteng-0.0.1/.gcloudignore +5 -0
- agenteng-0.0.1/.gitattributes +9 -0
- agenteng-0.0.1/.github/ISSUE_TEMPLATE/bug.yml +36 -0
- agenteng-0.0.1/.github/ISSUE_TEMPLATE/config.yml +5 -0
- agenteng-0.0.1/.github/ISSUE_TEMPLATE/event_idea.yml +56 -0
- agenteng-0.0.1/.github/ISSUE_TEMPLATE/feature.yml +34 -0
- agenteng-0.0.1/.github/ISSUE_TEMPLATE/tool.yml +35 -0
- agenteng-0.0.1/.github/pull_request_template.md +14 -0
- agenteng-0.0.1/.github/workflows/ci.yml +53 -0
- agenteng-0.0.1/.github/workflows/docs.yml +60 -0
- agenteng-0.0.1/.github/workflows/publish.yml +128 -0
- agenteng-0.0.1/.gitignore +92 -0
- agenteng-0.0.1/CHANGELOG.md +33 -0
- agenteng-0.0.1/CODE_OF_CONDUCT.md +11 -0
- agenteng-0.0.1/CONTRIBUTING.md +46 -0
- agenteng-0.0.1/Dockerfile +17 -0
- agenteng-0.0.1/LICENSE +199 -0
- agenteng-0.0.1/NOTICE +18 -0
- agenteng-0.0.1/PKG-INFO +209 -0
- agenteng-0.0.1/README.md +173 -0
- agenteng-0.0.1/SECURITY.md +13 -0
- agenteng-0.0.1/cloudbuild.yaml +54 -0
- agenteng-0.0.1/deploy/README.md +213 -0
- agenteng-0.0.1/deploy/deploy-cloud-run.sh +58 -0
- agenteng-0.0.1/deploy/mcp-http.json +1 -0
- agenteng-0.0.1/deploy/mcp-stdio.json +1 -0
- agenteng-0.0.1/docs/ARCHITECTURE.md +37 -0
- agenteng-0.0.1/docs/COMMUNITY.md +25 -0
- agenteng-0.0.1/docs/DATA.md +15 -0
- agenteng-0.0.1/docs/INTEGRATIONS.md +132 -0
- agenteng-0.0.1/docs/PARTICIPATION.md +86 -0
- agenteng-0.0.1/docs/RELEASING.md +114 -0
- agenteng-0.0.1/docs/TOOLS.md +68 -0
- agenteng-0.0.1/docs/assets/favicon.png +0 -0
- agenteng-0.0.1/docs/assets/logo.png +0 -0
- agenteng-0.0.1/docs/index.md +198 -0
- agenteng-0.0.1/docs/stylesheets/extra.css +344 -0
- agenteng-0.0.1/experiments/rlm_monty_spike.py +232 -0
- agenteng-0.0.1/mkdocs.yml +90 -0
- agenteng-0.0.1/pyproject.toml +67 -0
- agenteng-0.0.1/requirements-docs.txt +3 -0
- agenteng-0.0.1/scripts/check-hosted.py +70 -0
- agenteng-0.0.1/scripts/check-public-release.py +172 -0
- agenteng-0.0.1/scripts/check-release-metadata.py +65 -0
- agenteng-0.0.1/scripts/export-website.mjs +151 -0
- agenteng-0.0.1/scripts/import-tools.py +46 -0
- agenteng-0.0.1/scripts/stage-release.py +42 -0
- agenteng-0.0.1/scripts/verify-release.py +128 -0
- agenteng-0.0.1/src/agenteng/__init__.py +3 -0
- agenteng-0.0.1/src/agenteng/__main__.py +3 -0
- agenteng-0.0.1/src/agenteng/a2a.py +191 -0
- agenteng-0.0.1/src/agenteng/auth.py +7 -0
- agenteng-0.0.1/src/agenteng/calendar.py +55 -0
- agenteng-0.0.1/src/agenteng/catalogue.py +15 -0
- agenteng-0.0.1/src/agenteng/cli.py +566 -0
- agenteng-0.0.1/src/agenteng/config.py +54 -0
- agenteng-0.0.1/src/agenteng/contracts.py +7 -0
- agenteng-0.0.1/src/agenteng/data/catalogue.json +1273 -0
- agenteng-0.0.1/src/agenteng/data/install.sh +33 -0
- agenteng-0.0.1/src/agenteng/data/tools.json +10737 -0
- agenteng-0.0.1/src/agenteng/discovery.py +249 -0
- agenteng-0.0.1/src/agenteng/engines.py +291 -0
- agenteng-0.0.1/src/agenteng/mcp.py +77 -0
- agenteng-0.0.1/src/agenteng/models.py +266 -0
- agenteng-0.0.1/src/agenteng/participation.py +511 -0
- agenteng-0.0.1/src/agenteng/remote.py +25 -0
- agenteng-0.0.1/src/agenteng/server.py +247 -0
- agenteng-0.0.1/src/agenteng/service.py +537 -0
- agenteng-0.0.1/src/agenteng/tool_directory.py +292 -0
- agenteng-0.0.1/src/agenteng/tool_import.py +185 -0
- agenteng-0.0.1/src/agenteng/tool_pages.py +73 -0
- agenteng-0.0.1/tests/conftest.py +11 -0
- agenteng-0.0.1/tests/test_cloud_run_deploy.py +146 -0
- agenteng-0.0.1/tests/test_discovery.py +97 -0
- agenteng-0.0.1/tests/test_engines.py +242 -0
- agenteng-0.0.1/tests/test_installer.py +98 -0
- agenteng-0.0.1/tests/test_participation.py +435 -0
- agenteng-0.0.1/tests/test_protocols.py +274 -0
- agenteng-0.0.1/tests/test_public_release.py +119 -0
- agenteng-0.0.1/tests/test_release_metadata.py +93 -0
- agenteng-0.0.1/tests/test_service.py +160 -0
- agenteng-0.0.1/tests/test_tool_directory.py +283 -0
- 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,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,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.
|