diff --git a/examples/developer-tools/cli/README.md b/examples/developer-tools/cli/README.md new file mode 100644 index 0000000..985da05 --- /dev/null +++ b/examples/developer-tools/cli/README.md @@ -0,0 +1,239 @@ +# APort CLI Tool + +A simple command-line tool for testing APort agent verification and passport management. Perfect for developers who want to quickly test APort functionality without building a full integration. + +## ๐Ÿš€ Quick Start + +### Prerequisites + +- Node.js 18+ +- APort API key (optional for verification commands, required for passport management) + +### Installation + +```bash +# Clone the repository +git clone https://github.com/aporthq/aport-integrations.git +cd aport-integrations/examples/developer-tools/cli + +# Install dependencies +npm install + +# Optional: Set up environment for passport management +cp env.example .env +# Edit .env with your APort API key (only needed for create-passport, get-passport) +``` + +### Basic Usage + +```bash +# Run the demo (uses sample agent IDs) - NO API KEY NEEDED! +npm start demo + +# Interactive verification - NO API KEY NEEDED! +npm start verify -- --interactive + +# Direct verification with real agent IDs - NO API KEY NEEDED! +npm start verify ap_a2d10232c6534523812423eec8a1425c payments.refund.v1 '{"amount":50}' + +# Or using options +npm start verify -a ap_a2d10232c6534523812423eec8a1425c -p payments.refund.v1 -c '{"amount":50}' + +# Get passport information - NO API KEY NEEDED! +npm start get-passport -- --interactive + +# Create a new passport (requires API key) +npm start create-passport -- --interactive +``` + +## ๐Ÿ“‹ Available Commands + +### `verify` - Verify an agent against a policy + +```bash +# Interactive mode +aport verify --interactive + +# Direct mode (positional arguments) +aport verify agt_inst_refund_bot_123 payments.refund.v1 '{"amount":50}' + +# Direct mode (options) +aport verify -a agt_inst_refund_bot_123 -p payments.refund.v1 -c '{"amount":50}' +``` + +### `policy` - Verify against specific policy pack + +```bash +aport policy -a agt_inst_data_exporter_456 -p data.export.v1 -c '{"rows":1000}' +``` + +### `create-passport` - Create a new agent passport + +```bash +# Interactive mode +aport create-passport --interactive + +# Default mode (creates test passport) +aport create-passport +``` + +### `get-passport` - Get passport information + +```bash +# Interactive mode (no API key needed!) +aport get-passport --interactive + +# Direct mode (no API key needed!) +aport get-passport -a ap_a2d10232c6534523812423eec8a1425c +``` + +### `demo` - Run complete demo + +```bash +aport demo +``` + +### `help` - Show help and examples + +```bash +aport help +``` + +## ๐ŸŽฏ Sample Agent IDs + +The CLI includes pre-configured sample agent IDs for testing: + +| Agent | ID | Description | +|-------|----|-----------| +| `refund-bot` | `agt_inst_refund_bot_123` | Handles refund processing | +| `data-exporter` | `agt_inst_data_exporter_456` | Exports data with limits | +| `pr-merger` | `agt_inst_pr_merger_789` | Merges pull requests | + +## ๐Ÿ“ฆ Policy Packs + +Test against these policy packs: + +- `payments.refund.v1` - Refund processing policies +- `data.export.v1` - Data export policies +- `repo.v1` - Repository operation policies +- `admin.access.v1` - Admin access policies + +## ๐Ÿ”ง Configuration + +### Environment Variables + +```bash +# Optional - Only needed for create-passport command +APORT_API_KEY=your_api_key_here + +# Optional - Override default API endpoint +APORT_BASE_URL=https://aport.io +``` + +**Note:** Most commands (`verify`, `policy`, `get-passport`, `demo`) work without an API key! Only `create-passport` requires authentication. + +### API Client + +The CLI uses a simple API client that handles: + +- โœ… Agent verification (`/api/verify`) +- โœ… Policy verification (`/api/verify/policy/{policy}`) +- โœ… Passport creation (`/api/issue`) +- โœ… Passport retrieval (`/api/passports/{id}`) +- โœ… Passport suspension (`/api/suspend`) +- โœ… Policy pack listing (`/api/policies`) + +## ๐Ÿงช Testing + +```bash +# Run tests +npm test + +# Run demo +npm start demo +``` + +## ๐Ÿ“ Examples + +### Example 1: Verify Refund Bot + +```bash +aport verify -a agt_inst_refund_bot_123 -p payments.refund.v1 -c '{"amount":50,"currency":"USD"}' +``` + +### Example 2: Create Test Passport + +```bash +aport create-passport --interactive +``` + +### Example 3: Check Data Export Limits + +```bash +aport policy -a agt_inst_data_exporter_456 -p data.export.v1 -c '{"rows":5000,"dataset":"users"}' +``` + +### Example 4: Get Admin Bot Passport + +```bash +aport get-passport -a agt_inst_admin_bot_101 +``` + +## ๐ŸŽจ Features + +- **Interactive Mode**: Easy-to-use prompts for all operations +- **Sample Data**: Pre-configured agent IDs for quick testing +- **Error Handling**: Clear error messages and validation +- **Colored Output**: Beautiful terminal output with chalk +- **Spinner**: Loading indicators for API calls +- **Demo Mode**: Complete walkthrough of all features + +## ๐Ÿ› ๏ธ Development + +### Project Structure + +``` +src/ +โ”œโ”€โ”€ index.js # CLI commands and interface +โ”œโ”€โ”€ client.js # APort API client +โ””โ”€โ”€ ... + +package.json # Dependencies and scripts +env.example # Environment variables template +README.md # This file +``` + +### Adding New Commands + +1. Add command to `program.command()` in `src/index.js` +2. Implement the command logic +3. Add corresponding API method to `src/client.js` if needed +4. Update this README + +### API Client Methods + +- `verify(policy, agentId, context)` - Verify agent +- `verifyPolicy(policy, agentId, context)` - Verify specific policy +- `createPassport(passportData)` - Create passport +- `getPassport(agentId)` - Get passport +- `suspendPassport(agentId, reason)` - Suspend passport +- `getPolicyPack(policyId)` - Get policy pack +- `listPolicyPacks()` - List all policy packs + +## ๐Ÿค Contributing + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Add tests if applicable +5. Submit a pull request + +## ๐Ÿ“„ License + +MIT + +--- + +**๐Ÿ›ก๏ธ Secure your AI agents. Trust but verify.** + +Made with โค๏ธ by the APort community diff --git a/examples/developer-tools/cli/src/index.js b/examples/developer-tools/cli/src/index.js new file mode 100644 index 0000000..3efc67b --- /dev/null +++ b/examples/developer-tools/cli/src/index.js @@ -0,0 +1,469 @@ +#!/usr/bin/env node + +const { Command } = require("commander"); +const chalk = require("chalk"); +const ora = require("ora"); +const inquirer = require("inquirer"); +const APortClient = require("./client"); + +const program = new Command(); + +// Sample agent IDs for testing +const SAMPLE_AGENTS = { + "refund-bot": "ap_a2d10232c6534523812423eec8a1425c", + "data-exporter": "ap_b804b365003247888c06c94347cf54fe", + "pr-merger": "ap_4343a3f0c90948a59ee1c05bf019f9ac", +}; + +program + .name("aport") + .description("APort CLI - Test agent verification and passport management") + .version("1.0.0") + .option( + "-k, --api-key ", + "APort API key (optional for verification commands)" + ); + +// Verify command +program + .command("verify") + .description("Verify an agent against a policy") + .option("-a, --agent-id ", "Agent ID to verify") + .option("-p, --policy ", "Policy pack to verify against") + .option("-c, --context ", "Additional context (JSON string)") + .option("--interactive", "Interactive mode to select from sample agents") + .argument("[agentId]", "Agent ID to verify") + .argument("[policy]", "Policy pack to verify against") + .argument("[context]", "Additional context (JSON string)") + .action(async (posAgentId, posPolicy, posContext, options) => { + const client = new APortClient({ apiKey: program.opts().apiKey }); + + try { + // Use positional arguments if provided, otherwise fall back to options + let agentId = posAgentId || options.agentId; + let policy = posPolicy || options.policy; + let context = posContext || options.context; + + // Interactive mode + if (options.interactive) { + const answers = await inquirer.prompt([ + { + type: "list", + name: "agent", + message: "Select a sample agent:", + choices: Object.keys(SAMPLE_AGENTS).map((key) => ({ + name: `${key} (${SAMPLE_AGENTS[key]})`, + value: SAMPLE_AGENTS[key], + })), + }, + { + type: "list", + name: "policy", + message: "Select a policy pack:", + choices: [ + "payments.refund.v1", + "data.export.v1", + "repo.v1", + "admin.access.v1", + ], + }, + { + type: "input", + name: "context", + message: "Additional context (JSON, optional):", + default: "{}", + }, + ]); + + agentId = answers.agent; + policy = answers.policy; + context = answers.context; + } + + if (!agentId || !policy) { + console.error(chalk.red("โŒ Agent ID and policy are required")); + process.exit(1); + } + + const spinner = ora("Verifying agent...").start(); + + let contextObj = {}; + if (context) { + try { + contextObj = JSON.parse(context); + } catch (e) { + console.error(chalk.red("โŒ Invalid JSON context")); + process.exit(1); + } + } + + const result = await client.verify(policy, agentId, contextObj); + spinner.stop(); + + // Check if verification was successful using decision object + const decision = result.data?.decision || result.decision; + const isApproved = decision && decision.allow; + + if (isApproved) { + console.log(chalk.green("โœ… Agent verification successful!")); + console.log(chalk.gray(`Agent: ${agentId}`)); + console.log(chalk.gray(`Policy: ${policy}`)); + if (decision.reasons && decision.reasons.length > 0) { + console.log( + chalk.gray( + `Notes: ${decision.reasons.map((r) => r.message).join(", ")}` + ) + ); + } + } else { + console.log(chalk.red("โŒ Agent verification failed")); + if (decision && decision.reasons && decision.reasons.length > 0) { + console.log( + chalk.red( + `Reasons: ${decision.reasons.map((r) => r.message).join(", ")}` + ) + ); + } else { + console.log(chalk.red("Reason: Unknown")); + } + + // Show decision details + if (decision) { + console.log(chalk.yellow("\nDecision Details:")); + console.log(chalk.gray(` Decision ID: ${decision.decision_id}`)); + console.log(chalk.gray(` Allow: ${decision.allow ? "โœ…" : "โŒ"}`)); + console.log(chalk.gray(` Expires: ${decision.expires_in}s`)); + if (decision.assurance_level) { + console.log( + chalk.gray(` Assurance Level: ${decision.assurance_level}`) + ); + } + } + } + } catch (error) { + console.error(chalk.red("โŒ Error:"), error.message); + process.exit(1); + } + }); + +// Policy verify command +program + .command("policy") + .description("Verify an agent against a specific policy pack") + .option("-a, --agent-id ", "Agent ID to verify") + .option("-p, --policy ", "Policy pack to verify against") + .option("-c, --context ", "Additional context (JSON string)") + .action(async (options) => { + const client = new APortClient({ apiKey: program.opts().apiKey }); + + try { + if (!options.agentId || !options.policy) { + console.error(chalk.red("โŒ Agent ID and policy are required")); + process.exit(1); + } + + const spinner = ora("Verifying policy...").start(); + + let contextObj = {}; + if (options.context) { + try { + contextObj = JSON.parse(options.context); + } catch (e) { + console.error(chalk.red("โŒ Invalid JSON context")); + process.exit(1); + } + } + + const result = await client.verifyPolicy( + options.policy, + options.agentId, + contextObj + ); + spinner.stop(); + + if (result.verified) { + console.log(chalk.green("โœ… Policy verification successful!")); + console.log( + chalk.blue("๐Ÿ“‹ Passport:"), + JSON.stringify(result.passport, null, 2) + ); + console.log(chalk.blue("๐Ÿ”’ Policy:"), result.policy); + } else { + console.log(chalk.red("โŒ Policy verification failed")); + console.log(chalk.yellow("Reason:"), result.reason || "Unknown"); + } + } catch (error) { + console.error(chalk.red("โŒ Error:"), error.message); + process.exit(1); + } + }); + +// Create passport command +program + .command("create-passport") + .description("Create a new agent passport") + .option("--interactive", "Interactive mode to create passport") + .action(async (options) => { + const client = new APortClient({ apiKey: program.opts().apiKey }); + + try { + let passportData; + + if (options.interactive) { + const answers = await inquirer.prompt([ + { + type: "input", + name: "name", + message: "Agent name:", + default: "My Test Agent", + }, + { + type: "input", + name: "role", + message: "Agent role:", + default: "Test Agent", + }, + { + type: "input", + name: "description", + message: "Agent description:", + default: "A test agent for APort CLI", + }, + { + type: "list", + name: "capabilities", + message: "Select capabilities:", + choices: [ + "payments.refund", + "data.export", + "repo.merge", + "admin.access", + ], + multiple: true, + }, + { + type: "input", + name: "contact", + message: "Contact email:", + default: "test@example.com", + }, + ]); + + passportData = { + name: answers.name, + role: answers.role, + description: answers.description, + capabilities: answers.capabilities.map((cap) => ({ + id: cap, + params: {}, + })), + limits: { + refund_amount_max_per_tx: 100, + refund_amount_daily_cap: 500, + max_rows_per_export: 10000, + allow_pii: false, + }, + regions: ["US"], + contact: answers.contact, + controller_type: "person", + status: "active", + links: { + homepage: "https://aport.io", + repo: "https://github.com/aporthq/aport-integrations", + }, + categories: ["test", "cli"], + framework: ["APort CLI"], + }; + } else { + // Use default test passport + passportData = { + name: "CLI Test Agent", + role: "Test Agent", + description: "A test agent created via APort CLI", + capabilities: [ + { id: "payments.refund", params: {} }, + { id: "data.export", params: {} }, + ], + limits: { + refund_amount_max_per_tx: 100, + refund_amount_daily_cap: 500, + max_rows_per_export: 10000, + allow_pii: false, + }, + regions: ["US"], + contact: "test@example.com", + controller_type: "person", + status: "active", + links: { + homepage: "https://aport.io", + repo: "https://github.com/aporthq/aport-integrations", + }, + categories: ["test", "cli"], + framework: ["APort CLI"], + }; + } + + const spinner = ora("Creating passport...").start(); + const result = await client.createPassport(passportData); + spinner.stop(); + + console.log(chalk.green("โœ… Passport created successfully!")); + console.log(chalk.blue("๐Ÿ†” Agent ID:"), result.agent_id); + console.log(chalk.blue("๐Ÿ“‹ Passport:"), JSON.stringify(result, null, 2)); + } catch (error) { + console.error(chalk.red("โŒ Error:"), error.message); + process.exit(1); + } + }); + +// Get passport command +program + .command("get-passport") + .description("Get passport information for an agent") + .option("-a, --agent-id ", "Agent ID to fetch") + .option("--interactive", "Interactive mode to select from sample agents") + .action(async (options) => { + const client = new APortClient({ apiKey: program.opts().apiKey }); + + try { + let agentId = options.agentId; + + if (options.interactive) { + const answers = await inquirer.prompt([ + { + type: "list", + name: "agent", + message: "Select a sample agent:", + choices: Object.keys(SAMPLE_AGENTS).map((key) => ({ + name: `${key} (${SAMPLE_AGENTS[key]})`, + value: SAMPLE_AGENTS[key], + })), + }, + ]); + + agentId = answers.agent; + } + + if (!agentId) { + console.error(chalk.red("โŒ Agent ID is required")); + process.exit(1); + } + + const spinner = ora("Fetching passport...").start(); + const result = await client.getPassport(agentId); + spinner.stop(); + + console.log(chalk.green("โœ… Passport retrieved successfully!")); + console.log(chalk.blue("๐Ÿ“‹ Passport:"), JSON.stringify(result, null, 2)); + } catch (error) { + console.error(chalk.red("โŒ Error:"), error.message); + process.exit(1); + } + }); + +// Demo command +program + .command("demo") + .description("Run a complete demo with sample agents") + .action(async () => { + const client = new APortClient({ apiKey: program.opts().apiKey }); + + console.log(chalk.blue("๐ŸŽฌ Running APort CLI Demo...\n")); + + // Demo 1: Verify refund bot + console.log( + chalk.yellow("1. Verifying refund bot against payments.refund.v1 policy") + ); + try { + const result1 = await client.verify( + "payments.refund.v1", + SAMPLE_AGENTS["refund-bot"], + { + amount: 50, + currency: "USD", + } + ); + // Check if verification was successful using decision object + const decision1 = result1.data?.decision || result1.decision; + const isApproved1 = decision1 && decision1.allow; + console.log( + isApproved1 ? chalk.green("โœ… Verified") : chalk.red("โŒ Failed") + ); + } catch (error) { + console.log(chalk.red("โŒ Error:"), error.message); + } + + // Demo 2: Verify data exporter + console.log( + chalk.yellow("\n2. Verifying data exporter against data.export.v1 policy") + ); + try { + const result2 = await client.verify( + "data.export.v1", + SAMPLE_AGENTS["data-exporter"], + { + rows: 5000, + dataset: "users", + } + ); + // Check if verification was successful using decision object + const decision2 = result2.data?.decision || result2.decision; + const isApproved2 = decision2 && decision2.allow; + console.log( + isApproved2 ? chalk.green("โœ… Verified") : chalk.red("โŒ Failed") + ); + } catch (error) { + console.log(chalk.red("โŒ Error:"), error.message); + } + + // Demo 3: Get passport + console.log(chalk.yellow("\n3. Fetching passport for admin bot")); + try { + const passport = await client.getPassport(SAMPLE_AGENTS["refund-bot"]); + console.log(chalk.green("โœ… Passport retrieved:"), passport.name); + } catch (error) { + console.log(chalk.red("โŒ Error:"), error.message); + } + + console.log(chalk.blue("\n๐ŸŽ‰ Demo completed!")); + }); + +// Help command +program + .command("help") + .description("Show help and examples") + .action(() => { + console.log(chalk.blue("๐Ÿ›ก๏ธ APort CLI - Agent Verification Tool\n")); + + console.log(chalk.yellow("Quick Start (No API Key Needed!):")); + console.log(" aport demo # Run complete demo"); + console.log(" aport verify --interactive # Interactive verification"); + console.log(" aport get-passport --interactive # Get passport info"); + console.log( + " aport create-passport --interactive # Create new passport (needs API key)\n" + ); + + console.log(chalk.yellow("Sample Agent IDs:")); + Object.entries(SAMPLE_AGENTS).forEach(([name, id]) => { + console.log(` ${name}: ${id}`); + }); + + console.log(chalk.yellow("\nPolicy Packs:")); + console.log(" payments.refund.v1 # Refund processing"); + console.log(" data.export.v1 # Data export"); + console.log(" repo.v1 # Repository operations"); + console.log(" admin.access.v1 # Admin access\n"); + + console.log(chalk.yellow("Examples (No API Key Needed!):")); + console.log( + " aport verify -a ap_a2d10232c6534523812423eec8a1425c -p payments.refund.v1 -c '{\"amount\":50}'" + ); + console.log( + " aport policy -a ap_b804b365003247888c06c94347cf54fe -p data.export.v1 -c '{\"rows\":1000}'" + ); + console.log(" aport get-passport -a ap_a2d10232c6534523812423eec8a1425c"); + console.log(chalk.yellow("\nWith API Key:")); + console.log(" aport create-passport --interactive"); + }); + +program.parse(); diff --git a/scripts/create-hacktoberfest-issues-2025-10-02-0903.sh b/scripts/create-hacktoberfest-issues-2025-10-02-0903.sh new file mode 100755 index 0000000..3115a0e --- /dev/null +++ b/scripts/create-hacktoberfest-issues-2025-10-02-0903.sh @@ -0,0 +1,559 @@ +#!/bin/bash + +# APort Integrations - Hacktoberfest 2025 Issue Creation Script (2025-10-02-0903) +# This script creates additional strategic Hacktoberfest issues with preview and edit capabilities +# Based on the HACKTOBERFEST-STRATEGY.md document + +set -e + +echo "๐ŸŽ‰ APort Integrations - Hacktoberfest 2025 Issue Creator (2025-10-02-0903)" +echo "========================================================================" +echo "" + +# Check if gh CLI is installed +if ! command -v gh &> /dev/null; then + echo "โŒ GitHub CLI (gh) is not installed. Please install it first:" + echo " https://cli.github.com/" + exit 1 +fi + +# Check if user is authenticated +if ! gh auth status &> /dev/null; then + echo "โŒ Please authenticate with GitHub CLI first:" + echo " gh auth login" + exit 1 +fi + +echo "โœ… GitHub CLI is ready!" +echo "" + +# Function to create an issue with preview and edit capability +create_issue_interactive() { + local title="$1" + local body="$2" + local labels="$3" + local category="$4" + local bounty="$5" + + echo "๐Ÿ“‹ Issue Preview:" + echo "=================" + echo "Title: $title" + echo "Category: $category" + echo "Bounty: $bounty" + echo "Labels: $labels" + echo "" + echo "Description:" + echo "$body" + echo "" + echo "=================" + echo "" + + read -p "Create this issue? (y/n/e for edit): " choice + case $choice in + y|Y|yes|YES) + echo "๐Ÿš€ Creating issue..." + gh issue create --title "$title" --body "$body" --label "$labels" + echo "โœ… Issue created successfully!" + ;; + e|E|edit|EDIT) + echo "๐Ÿ“ Opening editor for issue body..." + # Create temporary file with issue body + temp_file=$(mktemp) + echo "$body" > "$temp_file" + ${EDITOR:-nano} "$temp_file" + + read -p "Create issue with edited content? (y/n): " confirm + if [[ $confirm =~ ^[Yy]$ ]]; then + echo "๐Ÿš€ Creating issue with edited content..." + gh issue create --title "$title" --body-file "$temp_file" --label "$labels" + echo "โœ… Issue created successfully!" + else + echo "โŒ Issue creation cancelled." + fi + rm "$temp_file" + ;; + *) + echo "โญ๏ธ Skipping this issue." + ;; + esac + echo "" +} + +# Function to create all issues +create_all_issues() { + echo "๐ŸŽฏ Creating Strategic Hacktoberfest 2025 Issues..." + echo "==================================================" + echo "" + + # Issue 1: Add APort to an "Awesome" List + create_issue_interactive \ + "[Hacktoberfest] Add APort to an \"Awesome\" List for AI or Security" \ + "## Description + +Help developers discover APort! Find a popular and relevant \"Awesome List\" on GitHub and submit a pull request to add \`aport.io\`. + +## Examples of relevant lists: +- \`awesome-ai-agents\` +- \`awesome-devsecops\` +- \`awesome-security\` +- \`awesome-serverless\` + +## Success Criteria: +- You find a high-quality list (over 1,000 stars is a good benchmark). +- You submit a PR adding APort with a link and a one-sentence description. +- You post a link to your PR in the comments of this issue. The bounty is paid upon PR submission, not merge, as merging can take time. + +## Technology Stack +- GitHub +- Markdown +- Community engagement + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow the target repository's contribution guidelines + +## Bounty +\$10 USD" \ + "hacktoberfest,good-first-issue,awareness,beginner" \ + "Awareness & Marketing" \ + "\$10 USD" + + # Issue 2: Create a "Hello, APort!" Example in Go + create_issue_interactive \ + "[Hacktoberfest] Create a \"Hello, APort!\" Example in Go" \ + "## Description + +Create a minimal, single-file Go script that demonstrates a basic call to the APort \`/verify\` endpoint. This will help Go developers get started with APort in seconds. + +## Success Criteria: +- A single \`main.go\` file is created in a new \`/examples/hello-world/go\` directory in the \`aport-integrations\` repo. +- The script uses only the standard library (\`net/http\`) to make a POST request. +- It prints the \`allow\` status and any \`reasons\` from the JSON response. +- A simple \`README.md\` explains how to run the script. + +## Technology Stack +- Go +- Standard library (net/http) +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Go best practices + +## Bounty +\$5 USD" \ + "hacktoberfest,good-first-issue,example,go,beginner" \ + "Examples & Tutorials" \ + "\$5 USD" + + # Issue 3: Add a "Deploy to Vercel" Button to the Next.js Example + create_issue_interactive \ + "[Hacktoberfest] Add a \"Deploy to Vercel\" Button to the Next.js Example" \ + "## Description + +Make our Next.js middleware example instantly deployable. Add the necessary configuration to allow anyone to deploy the example to their own Vercel account with a single click. + +## Success Criteria: +- A \`vercel.json\` file is added to the \`/examples/nextjs-middleware\` directory. +- The \"Deploy to Vercel\" button is added to the top of the \`README.md\` in that directory. +- The one-click deployment successfully creates a working instance of the example app. + +## Technology Stack +- Next.js +- Vercel +- APort middleware + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Vercel deployment best practices + +## Bounty +\$5 USD" \ + "hacktoberfest,good-first-issue,dx,vercel,beginner" \ + "Developer Experience" \ + "\$5 USD" + + # Issue 4: Zapier Integration for APort Verification + create_issue_interactive \ + "[Hacktoberfest] Zapier Integration for APort Verification" \ + "## Description + +Build Zapier app that adds APort checks to automations. Strategic Value: 5M+ Zapier users, no-code adoption. + +## Success Criteria: +- Create a Zapier custom app for APort verification +- Add APort verification as a step in Zapier workflows +- Provide clear documentation and examples +- Test the integration with real workflows + +## Technology Stack +- Zapier +- Node.js +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Zapier app development standards + +## Bounty +\$15 USD" \ + "hacktoberfest,integration,agent-framework,zapier,low-code" \ + "Platform Integrations" \ + "\$15 USD" + + # Issue 5: GitHub App for PR/Merge Verification + create_issue_interactive \ + "[Hacktoberfest] GitHub App for PR/Merge Verification" \ + "## Description + +Create GitHub App that enforces APort checks on PRs. Strategic Value: Directly addresses code supply chain security. + +## Success Criteria: +- Create a GitHub App that integrates with APort +- Add PR verification checks using APort +- Provide configuration for different policies +- Include proper error handling and logging + +## Technology Stack +- GitHub API +- Node.js +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow GitHub App development standards + +## Bounty +\$20 USD" \ + "hacktoberfest,integration,github,security,intermediate" \ + "Platform Integrations" \ + "\$20 USD" + + # Issue 6: Discord Bot for Team Verification + create_issue_interactive \ + "[Hacktoberfest] Discord Bot for Team Verification" \ + "## Description + +Build Discord bot that verifies agent actions in team workflows. Strategic Value: 150M+ Discord users, team collaboration focus. + +## Success Criteria: +- Create a Discord bot that integrates with APort +- Add verification commands for team workflows +- Provide clear documentation and setup instructions +- Include proper error handling and user feedback + +## Technology Stack +- Discord API +- Node.js +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Discord bot development standards + +## Bounty +\$10 USD" \ + "hacktoberfest,integration,discord,automation,intermediate" \ + "Platform Integrations" \ + "\$10 USD" + + # Issue 7: CrewAI Task Verification Decorator + create_issue_interactive \ + "[Hacktoberfest] CrewAI Task Verification Decorator" \ + "## Description + +Create @aport_verify decorator for CrewAI tasks. Strategic Value: 50K+ CrewAI developers, direct agent integration. + +## Success Criteria: +- Create a Python decorator for CrewAI task verification +- Add APort verification before task execution +- Provide clear usage examples +- Include proper error handling + +## Technology Stack +- Python +- CrewAI +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Python decorator best practices + +## Bounty +\$10 USD" \ + "hacktoberfest,integration,agent-framework,python,crewai" \ + "Agent Framework Bridges" \ + "\$10 USD" + + # Issue 8: n8n Workflow Node for Policy Checks + create_issue_interactive \ + "[Hacktoberfest] n8n Workflow Node for Policy Checks" \ + "## Description + +Build custom n8n node for APort verification. Strategic Value: 500K+ n8n users, visual automation appeal. + +## Success Criteria: +- Create a custom n8n node for APort verification +- Add proper configuration options +- Provide clear usage examples +- Include proper error handling and validation + +## Technology Stack +- n8n +- Node.js +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow n8n node development standards + +## Bounty +\$10 USD" \ + "hacktoberfest,integration,agent-framework,low-code,n8n" \ + "Agent Framework Bridges" \ + "\$10 USD" + + # Issue 9: APort CLI for Quick Integration Setup + create_issue_interactive \ + "[Hacktoberfest] APort CLI for Quick Integration Setup" \ + "## Description + +Build \`npx create-aport-integration\` CLI tool. Strategic Value: Reduces integration time from days to minutes. + +## Success Criteria: +- Create a CLI tool for quick APort integration setup +- Support multiple frameworks (Express, Next.js, Django, etc.) +- Provide interactive prompts for configuration +- Include proper error handling and validation + +## Technology Stack +- Node.js +- CLI development +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow CLI development best practices + +## Bounty +\$15 USD" \ + "hacktoberfest,developer-experience,devex-tool,cli" \ + "Developer Experience" \ + "\$15 USD" + + # Issue 10: Postman Collection for API Testing + create_issue_interactive \ + "[Hacktoberfest] Postman Collection for API Testing" \ + "## Description + +Create comprehensive Postman collection + Newman CI/CD. Strategic Value: Enterprise adoption enabler. + +## Success Criteria: +- Create a comprehensive Postman collection for APort API +- Add Newman CI/CD integration +- Provide clear documentation and examples +- Include proper test scenarios and validation + +## Technology Stack +- Postman +- Newman +- CI/CD + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Postman collection best practices + +## Bounty +\$10 USD" \ + "hacktoberfest,developer-experience,devex-tool,postman,testing" \ + "Developer Experience" \ + "\$10 USD" + + # Issue 11: Create APort integration video tutorials + create_issue_interactive \ + "[Hacktoberfest] Create APort integration video tutorials" \ + "## Description + +Create 2-3 minute Loom videos for each major framework. Perfect for sales demos and developer onboarding. + +## Success Criteria: +- Create 3-5 short video tutorials (2-3 minutes each) +- Cover major frameworks (Express, Next.js, Django, etc.) +- Include clear audio and visual quality +- Publish on YouTube and share links in issue comments + +## Technology Stack +- Video creation +- Loom/YouTube +- APort integration + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must be published and accessible + +## Bounty +\$10 USD" \ + "hacktoberfest,content,video,tutorial,beginner" \ + "Content & Documentation" \ + "\$10 USD" + + # Issue 12: Create APort banking/fintech integration examples + create_issue_interactive \ + "[Hacktoberfest] Create APort banking/fintech integration examples" \ + "## Description + +Create real banking API integrations with compliance documentation. Appeals to financial services. + +## Success Criteria: +- Create banking/fintech integration examples +- Include compliance documentation (PCI DSS, etc.) +- Provide real-world use cases +- Include proper security considerations + +## Technology Stack +- Banking APIs +- Compliance frameworks +- APort integration + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow financial compliance standards + +## Bounty +\$15 USD" \ + "hacktoberfest,integration,fintech,banking,compliance" \ + "Financial Use Cases" \ + "\$15 USD" + + # Issue 13: Create APort integration for Microsoft Power Automate + create_issue_interactive \ + "[Hacktoberfest] Create APort integration for Microsoft Power Automate" \ + "## Description + +Tap into enterprise automation market. Similar to Zapier but enterprise-focused. + +## Success Criteria: +- Create Microsoft Power Automate connector for APort +- Add verification steps to Power Automate workflows +- Provide clear documentation and examples +- Include proper error handling + +## Technology Stack +- Microsoft Power Automate +- Connector development +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Power Automate connector standards + +## Bounty +\$10 USD" \ + "hacktoberfest,integration,power-automate,enterprise,low-code" \ + "Low-Code/No-Code" \ + "\$10 USD" + + # Issue 14: Create APort VS Code extension + create_issue_interactive \ + "[Hacktoberfest] Create APort VS Code extension" \ + "## Description + +Code snippets, syntax highlighting. Developer productivity tool. + +## Success Criteria: +- Create VS Code extension for APort +- Add code snippets and syntax highlighting +- Provide IntelliSense support +- Include proper documentation + +## Technology Stack +- VS Code API +- TypeScript +- APort integration + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow VS Code extension standards + +## Bounty +\$10 USD" \ + "hacktoberfest,developer-experience,devex-tool,vscode,extension" \ + "Developer Experience" \ + "\$10 USD" + + # Issue 15: Create APort enterprise security dashboard + create_issue_interactive \ + "[Hacktoberfest] Create APort enterprise security dashboard" \ + "## Description + +Real-time monitoring, alerting. Appeals to security teams. + +## Success Criteria: +- Create enterprise security dashboard for APort +- Add real-time monitoring and alerting +- Include compliance reporting +- Provide proper authentication and authorization + +## Technology Stack +- React/Vue.js +- Real-time updates +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow enterprise security standards + +## Bounty +\$20 USD" \ + "hacktoberfest,integration,enterprise,security,dashboard" \ + "Enterprise Security" \ + "\$20 USD" +} + +# Main execution +echo "๐ŸŽฏ Ready to create strategic Hacktoberfest 2025 issues!" +echo "" +echo "This script will create 15 new issues with the following categories:" +echo "โ€ข Awareness & Marketing (1 issue)" +echo "โ€ข Examples & Tutorials (1 issue)" +echo "โ€ข Developer Experience (3 issues)" +echo "โ€ข Platform Integrations (3 issues)" +echo "โ€ข Agent Framework Bridges (2 issues)" +echo "โ€ข Content & Documentation (1 issue)" +echo "โ€ข Financial Use Cases (1 issue)" +echo "โ€ข Low-Code/No-Code (1 issue)" +echo "โ€ข Enterprise Security (1 issue)" +echo "โ€ข Deploy & DX (1 issue)" +echo "" +echo "Total bounty pool: \$175 USD" +echo "" + +read -p "Continue with issue creation? (y/n): " confirm +if [[ $confirm =~ ^[Yy]$ ]]; then + create_all_issues + echo "๐ŸŽ‰ All strategic Hacktoberfest 2025 issues have been processed!" + echo "" + echo "๐Ÿ“Š Summary:" + echo "โ€ข Issues created: 15" + echo "โ€ข Total bounty pool: \$375 USD" + echo "โ€ข Categories covered: 10" + echo "" + echo "๐Ÿš€ Ready for Hacktoberfest 2025!" +else + echo "โŒ Issue creation cancelled." +fi diff --git a/scripts/create-hacktoberfest-issues-2025-10-02.sh b/scripts/create-hacktoberfest-issues-2025-10-02.sh new file mode 100755 index 0000000..c8ad8d2 --- /dev/null +++ b/scripts/create-hacktoberfest-issues-2025-10-02.sh @@ -0,0 +1,327 @@ +#!/bin/bash + +# APort Integrations - Hacktoberfest 2025 Issue Creation Script (2025-10-02) +# This script creates additional Hacktoberfest issues with preview and edit capabilities +# Based on the HACKTOBERFEST-STRATEGY.md document + +set -e + +echo "๐ŸŽ‰ APort Integrations - Hacktoberfest 2025 Issue Creator (2025-10-02)" +echo "==================================================================" +echo "" + +# Check if gh CLI is installed +if ! command -v gh &> /dev/null; then + echo "โŒ GitHub CLI (gh) is not installed. Please install it first:" + echo " https://cli.github.com/" + exit 1 +fi + +# Check if user is authenticated +if ! gh auth status &> /dev/null; then + echo "โŒ Please authenticate with GitHub CLI first:" + echo " gh auth login" + exit 1 +fi + +echo "โœ… GitHub CLI is ready!" +echo "" + +# Function to create an issue with preview and edit capability +create_issue_interactive() { + local title="$1" + local body="$2" + local labels="$3" + local category="$4" + local bounty="$5" + + echo "๐Ÿ“‹ Issue Preview:" + echo "=================" + echo "Title: $title" + echo "Category: $category" + echo "Bounty: $bounty" + echo "Labels: $labels" + echo "" + echo "Description:" + echo "$body" + echo "" + echo "=================" + echo "" + + read -p "Create this issue? (y/n/e for edit): " choice + case $choice in + y|Y|yes|YES) + echo "๐Ÿš€ Creating issue..." + gh issue create --title "$title" --body "$body" --label "$labels" + echo "โœ… Issue created successfully!" + ;; + e|E|edit|EDIT) + echo "๐Ÿ“ Opening editor for issue body..." + # Create temporary file with issue body + temp_file=$(mktemp) + echo "$body" > "$temp_file" + ${EDITOR:-nano} "$temp_file" + + read -p "Create issue with edited content? (y/n): " confirm + if [[ $confirm =~ ^[Yy]$ ]]; then + echo "๐Ÿš€ Creating issue with edited content..." + gh issue create --title "$title" --body-file "$temp_file" --label "$labels" + echo "โœ… Issue created successfully!" + else + echo "โŒ Issue creation cancelled." + fi + rm "$temp_file" + ;; + *) + echo "โญ๏ธ Skipping this issue." + ;; + esac + echo "" +} + +# Function to create all issues +create_all_issues() { + echo "๐ŸŽฏ Creating Additional Hacktoberfest 2025 Issues..." + echo "==================================================" + echo "" + + # Issue 1: Add APort to an "Awesome" List + create_issue_interactive \ + "[Hacktoberfest] Add APort to an \"Awesome\" List for AI or Security" \ + "## Description + +Help developers discover APort! Find a popular and relevant \"Awesome List\" on GitHub and submit a pull request to add \`aport.io\`. + +## Examples of relevant lists: +- \`awesome-ai-agents\` +- \`awesome-devsecops\` +- \`awesome-security\` +- \`awesome-serverless\` + +## Success Criteria: +- You find a high-quality list (over 1,000 stars is a good benchmark). +- You submit a PR adding APort with a link and a one-sentence description. +- You post a link to your PR in the comments of this issue. The bounty is paid upon PR submission, not merge, as merging can take time. + +## Technology Stack +- GitHub +- Markdown +- Community engagement + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow the target repository's contribution guidelines" \ + "hacktoberfest,good-first-issue,awareness,beginner" \ + "Awareness & Marketing" \ + "\$10 USD" + + # Issue 2: Create a "Hello, APort!" Example in Go + create_issue_interactive \ + "[Hacktoberfest] Create a \"Hello, APort!\" Example in Go" \ + "## Description + +Create a minimal, single-file Go script that demonstrates a basic call to the APort \`/verify\` endpoint. This will help Go developers get started with APort in seconds. + +## Success Criteria: +- A single \`main.go\` file is created in a new \`/examples/hello-world/go\` directory in the \`aport-integrations\` repo. +- The script uses only the standard library (\`net/http\`) to make a POST request. +- It prints the \`allow\` status and any \`reasons\` from the JSON response. +- A simple \`README.md\` explains how to run the script. + +## Technology Stack +- Go +- Standard library (net/http) +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Go best practices" \ + "hacktoberfest,good-first-issue,example,go,beginner" \ + "Examples & Tutorials" \ + "\$10 USD" + + # Issue 3: Add a "Deploy to Vercel" Button to the Next.js Example + create_issue_interactive \ + "[Hacktoberfest] Add a \"Deploy to Vercel\" Button to the Next.js Example" \ + "## Description + +Make our Next.js middleware example instantly deployable. Add the necessary configuration to allow anyone to deploy the example to their own Vercel account with a single click. + +## Success Criteria: +- A \`vercel.json\` file is added to the \`/examples/nextjs-middleware\` directory. +- The \"Deploy to Vercel\" button is added to the top of the \`README.md\` in that directory. +- The one-click deployment successfully creates a working instance of the example app. + +## Technology Stack +- Next.js +- Vercel +- APort middleware + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow Vercel deployment best practices" \ + "hacktoberfest,good-first-issue,dx,vercel,beginner" \ + "Developer Experience" \ + "\$10 USD" + + # Issue 4: Add APort verification to a Framework example + create_issue_interactive \ + "[Hacktoberfest] Add APort verification to a [Framework] example" \ + "## Description + +Builds vital integration assets; provides copy-paste code for your target audience, reducing integration friction. + +## Success Criteria: +- Find an official example app for the framework (e.g., Next.js, Express, Django) +- Add APort middleware/check to the example +- Update README with a 1-2 line integration highlight +- Ensure the example works out of the box + +## Technology Stack +- Any popular web framework +- APort SDK +- Example applications + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow framework best practices" \ + "hacktoberfest,integration,framework,beginner" \ + "Ecosystem & Integration" \ + "\$15 USD" + + # Issue 5: Create a simple n8n node for an APort policy check + create_issue_interactive \ + "[Hacktoberfest] Create a simple n8n node for an APort policy check" \ + "## Description + +Taps into a large no-code/low-code audience; demonstrates practical utility in automation. + +## Success Criteria: +- Create a custom n8n node that calls the APort verify endpoint +- Provide a clear usage example +- Include proper error handling +- Document the node configuration + +## Technology Stack +- n8n +- Node.js +- APort API + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow n8n node development standards" \ + "hacktoberfest,integration,n8n,automation,intermediate" \ + "Ecosystem & Integration" \ + "\$25 USD" + + # Issue 6: Create a 'Protect your AI Agent' tutorial blog post + create_issue_interactive \ + "[Hacktoberfest] Create a 'Protect your AI Agent' tutorial blog post" \ + "## Description + +Drives SEO and awareness; positions APort as a thought leader in AI agent safety. + +## Success Criteria: +- Write a beginner-friendly tutorial (500-700 words) on securing an agent +- Include code snippets and link to APort docs +- Publish on a relevant platform (Dev.to, Medium, personal blog) +- Share the link in the issue comments + +## Technology Stack +- Technical writing +- AI agents +- APort integration + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must be published and accessible" \ + "hacktoberfest,content,blog,tutorial,beginner" \ + "Content & Documentation" \ + "\$20 USD" + + # Issue 7: Translate a key policy pack or the main README + create_issue_interactive \ + "[Hacktoberfest] Translate a key policy pack or the main README" \ + "## Description + +Expands global reach and accessibility, opening up new developer communities. + +## Success Criteria: +- Accurately translate the chosen document into a target language (e.g., Spanish, Portuguese, Hindi) +- Maintain technical accuracy and formatting +- Create a new file with the translated content +- Include a note about the translation in the original document + +## Technology Stack +- Translation +- Markdown +- Technical documentation + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must maintain technical accuracy" \ + "hacktoberfest,content,translation,beginner" \ + "Content & Documentation" \ + "\$15 USD" + + # Issue 8: Build a simple 'APort Policy Pack Generator' CLI tool + create_issue_interactive \ + "[Hacktoberfest] Build a simple 'APort Policy Pack Generator' CLI tool" \ + "## Description + +Improves the onboarding experience; a tangible, shareable tool that adds clear value. + +## Success Criteria: +- Create a simple CLI tool that prompts users for params and generates a valid policy pack JSON file +- Support common policy types (refund, data export, etc.) +- Include validation and error handling +- Provide clear usage instructions + +## Technology Stack +- CLI development +- JSON generation +- APort policy format + +## Acceptance Criteria +- Must include working example +- Must have proper documentation +- Must follow CLI best practices" \ + "hacktoberfest,tool,cli,intermediate" \ + "Developer Experience" \ + "\$30 USD" +} + +# Main execution +echo "๐ŸŽฏ Ready to create additional Hacktoberfest 2025 issues!" +echo "" +echo "This script will create 8 new issues with the following categories:" +echo "โ€ข Awareness & Marketing (1 issue)" +echo "โ€ข Examples & Tutorials (1 issue)" +echo "โ€ข Developer Experience (2 issues)" +echo "โ€ข Ecosystem & Integration (2 issues)" +echo "โ€ข Content & Documentation (2 issues)" +echo "" +echo "Total bounty pool: \$145 USD" +echo "" + +read -p "Continue with issue creation? (y/n): " confirm +if [[ $confirm =~ ^[Yy]$ ]]; then + create_all_issues + echo "๐ŸŽ‰ All additional Hacktoberfest 2025 issues have been processed!" + echo "" + echo "๐Ÿ“Š Summary:" + echo "โ€ข Issues created: 8" + echo "โ€ข Total bounty pool: \$145 USD" + echo "โ€ข Categories covered: 5" + echo "" + echo "๐Ÿš€ Ready for Hacktoberfest 2025!" +else + echo "โŒ Issue creation cancelled." +fi diff --git a/tools/cli/README.md b/tools/cli/README.md index c97e88b..985da05 100644 --- a/tools/cli/README.md +++ b/tools/cli/README.md @@ -34,10 +34,10 @@ npm start demo npm start verify -- --interactive # Direct verification with real agent IDs - NO API KEY NEEDED! -npm start verify ap_128094d3 payments.refund.v1 '{"amount":50}' +npm start verify ap_a2d10232c6534523812423eec8a1425c payments.refund.v1 '{"amount":50}' # Or using options -npm start verify -a ap_128094d3 -p payments.refund.v1 -c '{"amount":50}' +npm start verify -a ap_a2d10232c6534523812423eec8a1425c -p payments.refund.v1 -c '{"amount":50}' # Get passport information - NO API KEY NEEDED! npm start get-passport -- --interactive @@ -84,7 +84,7 @@ aport create-passport aport get-passport --interactive # Direct mode (no API key needed!) -aport get-passport -a ap_128094d3 +aport get-passport -a ap_a2d10232c6534523812423eec8a1425c ``` ### `demo` - Run complete demo diff --git a/tools/cli/src/index.js b/tools/cli/src/index.js index 0bcb496..3efc67b 100755 --- a/tools/cli/src/index.js +++ b/tools/cli/src/index.js @@ -10,9 +10,9 @@ const program = new Command(); // Sample agent IDs for testing const SAMPLE_AGENTS = { - "refund-bot": "ap_128094d3", - "data-exporter": "agt_tmpl_mg8jr8l1_geckvz", - "pr-merger": "agt_tmpl_mg8jtzzk_rl0diw", + "refund-bot": "ap_a2d10232c6534523812423eec8a1425c", + "data-exporter": "ap_b804b365003247888c06c94347cf54fe", + "pr-merger": "ap_4343a3f0c90948a59ee1c05bf019f9ac", }; program @@ -456,12 +456,12 @@ program console.log(chalk.yellow("Examples (No API Key Needed!):")); console.log( - " aport verify -a ap_128094d3 -p payments.refund.v1 -c '{\"amount\":50}'" + " aport verify -a ap_a2d10232c6534523812423eec8a1425c -p payments.refund.v1 -c '{\"amount\":50}'" ); console.log( - " aport policy -a agt_tmpl_mg8jr8l1_geckvz -p data.export.v1 -c '{\"rows\":1000}'" + " aport policy -a ap_b804b365003247888c06c94347cf54fe -p data.export.v1 -c '{\"rows\":1000}'" ); - console.log(" aport get-passport -a ap_128094d3"); + console.log(" aport get-passport -a ap_a2d10232c6534523812423eec8a1425c"); console.log(chalk.yellow("\nWith API Key:")); console.log(" aport create-passport --interactive"); }); diff --git a/tools/cli/test-data-export-policy.js b/tools/cli/test-data-export-policy.js index 614a8cb..baa8bf8 100755 --- a/tools/cli/test-data-export-policy.js +++ b/tools/cli/test-data-export-policy.js @@ -173,7 +173,7 @@ async function runDataExportPolicyTests() { chalk.blue.bold("\n๐Ÿงช Running Comprehensive Data Export Policy Tests\n") ); - const agentId = "agt_tmpl_mg8jr8l1_geckvz"; // Agent with data.export capability + const agentId = "ap_b804b365003247888c06c94347cf54fe"; // Agent with data.export capability const policy = "data.export.v1"; let passed = 0; diff --git a/tools/cli/test-messaging-policy.js b/tools/cli/test-messaging-policy.js index feacdf4..0dfbce8 100755 --- a/tools/cli/test-messaging-policy.js +++ b/tools/cli/test-messaging-policy.js @@ -168,7 +168,7 @@ async function runMessagingPolicyTests() { chalk.blue.bold("\n๐Ÿงช Running Comprehensive Messaging Policy Tests\n") ); - const agentId = "ap_128094d3"; // Agent with messaging.send capability + const agentId = "ap_a2d10232c6534523812423eec8a1425c"; // Agent with messaging.send capability const policy = "messaging.v1"; let passed = 0;