Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ body:
attributes:
label: Which example?
description: The example directory the bug is in.
placeholder: hubspot
placeholder: hubspot-search
validations:
required: true
- type: textarea
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ body:
multiple: true
options:
- A new example agent
- An existing example (e.g. hubspot)
- An existing example (e.g. hubspot-search)
- Repo tooling / CI
- Docs / README
- Other / not sure
Expand Down
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ version: 2
updates:
# Python dependencies: the root tooling project (ruff) and every example.
# "/" is the root uv project (dev tools); the "/*" glob picks up the current
# example (hubspot) and any future top-level example without editing this file.
# example (hubspot-search) and any future top-level example without editing this file.
- package-ecosystem: "uv"
directories:
- "/"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ jobs:
uses: astral-sh/setup-uv@v8.2.0

# Each example is its own uv project; run its pytest suite from its dir.
- name: hubspot
- name: hubspot-search
run: uv run --locked pytest
working-directory: hubspot
working-directory: hubspot-search
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ __pycache__/
*.db
.DS_Store
.coverage

# Local-only working docs (e.g. code-review notes); not published with the repo.
docs/
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ git clone https://github.com/friday-platform/agent-sdk-examples
cd agent-sdk-examples

# Each example is its own uv project:
cd hubspot
cd hubspot-search
uv sync
```

Expand All @@ -51,7 +51,7 @@ uv run ruff check .
uv run ruff format --check .

# Tests — from an example directory
cd hubspot && uv run pytest
cd hubspot-search && uv run pytest
```

## Adding a new example
Expand All @@ -76,7 +76,7 @@ Then add a row to the **Examples** table in the root [`README.md`](README.md).
5. Follow existing code style — `ruff` ([`ruff.toml`](ruff.toml)).
6. Write a clear commit message in
[Conventional Commits](https://www.conventionalcommits.org/) style
(e.g. `feat(hubspot): add pagination`).
(e.g. `feat(hubspot-search): add pagination`).

> These examples are unreleased and unversioned — please **don't** bump the
> `version` field in `pyproject.toml` / `metadata.json` / the `@agent` decorator.
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ before use — the examples do.
## Quick start

```bash
cd hubspot
cd hubspot-search
uv sync # create .venv from the example's uv.lock

# Register with a local Friday daemon (it then handles one execute call):
Expand All @@ -88,7 +88,7 @@ environment variables it needs.

| Example | What it shows |
| --- | --- |
| [`hubspot`](hubspot) | A **deterministic** agent (no LLM): read config from the prompt, make one authenticated REST call with `ctx.http`, and return a structured result. |
| [`hubspot-search`](hubspot-search) | A **deterministic** agent (no LLM): read config from the prompt, make one authenticated REST call with `ctx.http`, and return a structured result. |

More to come — each new example lands as its own top-level directory.

Expand All @@ -99,7 +99,7 @@ the checks CI runs. Quick version:

```bash
uv run ruff check . && uv run ruff format --check . # lint + format (repo root)
cd hubspot && uv run pytest # tests (per example)
cd hubspot-search && uv run pytest # tests (per example)
```

Security issues: see [SECURITY.md](SECURITY.md) — please don't open a public issue.
Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ the latest state of `main`; there are no versioned releases to back-port to.

In scope:

- The example agents in this repository (e.g. `hubspot/`) and their CI/tooling.
- The example agents in this repository (e.g. `hubspot-search/`) and their CI/tooling.

Out of scope — please report to the appropriate project:

Expand Down
127 changes: 0 additions & 127 deletions docs/reviews/2026-06-08-hubspot-agent.md

This file was deleted.

4 changes: 2 additions & 2 deletions hubspot/README.md → hubspot-search/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# hubspot
# hubspot-search

The first example in this repo, and a good template for a **deterministic** Friday
agent: a paginated REST search, no LLM, no tool loop.
Expand Down Expand Up @@ -26,7 +26,7 @@ local Friday daemon (it connects over NATS and handles one execute call):
```bash
curl -X POST http://localhost:8080/api/agents/register \
-H 'Content-Type: application/json' \
-d '{"path": "'"$(pwd)"'/hubspot/agent.py"}'
-d '{"path": "'"$(pwd)"'/hubspot-search/agent.py"}'
```

## Input / Output
Expand Down
4 changes: 2 additions & 2 deletions hubspot/agent.py → hubspot-search/agent.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""hubspot — searches HubSpot for new support tickets and returns their IDs.
"""hubspot-search — searches HubSpot for new support tickets and returns their IDs.

A deterministic Friday agent (no LLM, no tool loop): it runs the HubSpot CRM v3
ticket search for the configured pipeline stage(s) created within a recent time
Expand Down Expand Up @@ -431,7 +431,7 @@ def _search(


@agent(
id="hubspot",
id="hubspot-search",
version="1.0.0",
description=(
"Searches HubSpot for support tickets in the configured pipeline stage(s) "
Expand Down
2 changes: 1 addition & 1 deletion hubspot/metadata.json → hubspot-search/metadata.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"id": "hubspot",
"id": "hubspot-search",
"version": "1.0.0",
"description": "Searches HubSpot for support tickets in the configured pipeline stage(s) created within a recent time window and returns their IDs. Paginated, with retries on rate-limit/5xx. Deterministic REST search — no LLM, no tool loop.",
"entrypoint": "agent.py",
Expand Down
2 changes: 1 addition & 1 deletion hubspot/pyproject.toml → hubspot-search/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
name = "friday-hubspot-agent"
name = "friday-hubspot-search-agent"
version = "1.0.0"
description = "Deterministic HubSpot ticket-search agent — searches the configured pipeline stage(s) for tickets created within a recent window and returns their IDs. Paginated, with retries on rate-limit/5xx."
readme = "README.md"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Unit tests for the hubspot agent's pure config-parsing helpers.
"""Unit tests for the hubspot-search agent's pure config-parsing helpers.

These functions carry the agent's trickiest logic — pulling a config envelope
out of a prompt that may also contain unrelated JSON — so they're worth testing
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Integration tests for the hubspot agent's execute() handler.
"""Integration tests for the hubspot-search agent's execute() handler.

`@agent` returns the handler unchanged, so we call `execute(prompt, ctx)`
directly with a hand-built AgentContext whose HTTP capability is backed by a
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Unit tests for the hubspot agent's request-body builder and result parser."""
"""Unit tests for the hubspot-search agent's request-body builder and result parser."""

from datetime import UTC, datetime, timedelta
from email.utils import format_datetime
Expand Down
2 changes: 1 addition & 1 deletion hubspot/uv.lock → hubspot-search/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading