Github Adapter

Feature Name: GitHub Integration for Eliza Agents
Vision:
Transform GitHub into a dynamic social network for Eliza agents, allowing them to participate in code development, documentation, and community discussions. This integration empowers agents to contribute to Continuous Collective Recursive Self-Improvement (CCR-SI) by enabling them to analyze code, propose changes, engage in discussions, and learn from other developers (both human and AI).
Core Features:

Issue Interaction:

Issue Retrieval: Agents should be able to retrieve and analyze issues from designated repositories.  This includes accessing issue titles, descriptions, comments, labels, and other metadata.
Issue Prioritization: Agents should be able to prioritize issues based on factors like labels (e.g., "good first issue," "bug," "enhancement"), the number of comments, or sentiment analysis of the discussion.  This allows agents to focus on relevant and impactful issues.
Issue Summarization: Summarize long or complex issue threads to extract key information and understand the core problem being discussed. This helps agents quickly grasp the context and identify potential solutions.
Commenting on Issues: Agents should be able to add comments to issues, providing feedback, suggesting solutions, or asking clarifying questions.
Creating New Issues:  Enable agents to create new issues if they identify bugs, propose enhancements, or encounter problems not yet documented.

Pull Request (PR) Management:

PR Retrieval and Analysis:  Agents should be able to retrieve and analyze pull requests, including code changes, commit messages, and review comments.
Code Review (Basic): Implement basic code review capabilities, allowing agents to identify potential issues (e.g., syntax errors, style violations) or suggest improvements.  This could leverage existing code analysis tools or LLMs fine-tuned for code review.
Submitting Pull Requests:  Empower agents to submit pull requests with code changes, either autonomously or with human approval.
Commenting on PRs:  Enable agents to add comments to pull requests, providing feedback on code changes or engaging in discussions about implementation details.

Wiki Integration:

Wiki Parsing:  Agents should be able to parse and understand wiki pages within the repository, extracting information and integrating it into their knowledge base.
Wiki Updates:  Potentially allow agents to suggest updates or improvements to wiki pages, contributing to documentation efforts.

Repository Metadata and Navigation:

Repository Exploration: Agents should be able to explore the repository's structure, navigate through directories, and access file contents.
Commit History Analysis: Allow agents to analyze commit messages and identify patterns, trends, or potential areas for improvement in the codebase.

Eliza Integration and Architecture:

GitHub Client Connector: Develop a new client connector specifically for GitHub, similar to the existing Discord, Telegram, and Twitter clients. This connector will handle authentication, API communication, and event handling specific to the GitHub platform.  It could use the Octokit library or the GitHub REST/GraphQL APIs.

Actions for GitHub Interaction: Create custom actions for each of the core GitHub interactions (retrieving issues, submitting PRs, commenting, etc.).  These actions will encapsulate the logic for interacting with the GitHub API.

Evaluators for Context and Prioritization: Develop evaluators that analyze GitHub data (issues, PRs, wiki pages) and prioritize actions or extract relevant information. These evaluators could use sentiment analysis, keyword extraction, or other NLP techniques to understand the context and relevance of GitHub content.

Memory Integration: Integrate GitHub data into the agent's memory system. This could involve storing issue summaries, relevant code snippets, or other GitHub information in the agent's memory, allowing for contextualized responses and actions.

Example (Conceptual):
// Example of a "Submit Pull Request" action
class SubmitPullRequestAction extends BaseAction {
  async handler(runtime, message, state) {
    // Retrieve code changes and commit message from the message or state
    const { code, commitMessage } = extractCodeAndMessage(message, state);

    // Use the GitHub API (via the GitHub client connector) to submit a PR
    const pr = await runtime.githubClient.createPullRequest(
      'repository', 'branch', 'baseBranch', title, body
    );
  }
}

// Example of a "Prioritize Issues" evaluator
class PrioritizeIssuesEvaluator extends BaseEvaluator {
  async handler(runtime, message, state) {
      const issues = await runtime.githubClient.getIssues('repository');
      const prioritizedIssues = prioritizeBasedOnLabels(issues, ['bug', 'high-priority']);

      // Store prioritized issues in agent memory or trigger actions for these issues.
      // ...
  }
}

Leveraging Other Concepts:

Puzzle-Driven Development:  GitHub issues can be used as a central hub for tracking coding puzzles. Agents can retrieve and claim issues, work on solutions, and submit pull requests directly through the GitHub client connector.  This directly ties into your existing PDD methodology.
Language 2.0 and Autopellucidity: Apply Language 2.0 principles to the agent's communication on GitHub.  Ensure that comments, issue descriptions, and commit messages are clear, concise, and convey the agent's intent and reasoning.  Strive for autopellucidity in these interactions.
CCR-SI: The GitHub integration is a core component of CCR-SI, enabling agents to reflect on their own code, learn from other developers, and contribute to continuous improvement.

Prioritization and Feasibility:
The core features (issue interaction, PR management, wiki integration) should be prioritized.  More advanced features like automated code review can be implemented later.
Conclusion:
By integrating GitHub into Eliza as a social network for code collaboration, we empower our AI agents to actively participate in CCR-SI and contribute to the project's evolution. This innovative approach has the potential to transform how we develop software and unlock new levels of collaboration between humans and AI. This document, as part of our living documentation, will evolve as we refine the GitHub integration and explore new possibilities for AI-driven development.

Your idea of using Eliza to manage feature requests, generate bounties, and oversee the contribution process is a compelling application of AI-driven project management.  Let's explore how this could be implemented within the Eliza framework.
Proposed System: Eliza as a Project Manager
1. Codebase Awareness:

Representation: Eliza needs a representation of its own codebase. As discussed previously, options include raw code, abstract syntax trees (ASTs), or code embeddings. A hybrid approach combining ASTs with code embeddings for semantic search might be the most effective, although we can try starting with the simpler method of raw code or just ASTs and then iterating to embeddings.  This would be a significant enhancement for Eliza.

Storage: This representation would be stored in the agent's memory, likely using a dedicated manager (e.g., a codebaseManager).  This manager would handle updating the code representation whenever changes are pushed to the repository.

2. Feature Hypothesization:

Prompting: A periodic prompt (e.g., daily or weekly) would trigger the agent to reflect on its codebase and hypothesize potential new features or improvements. This prompt could incorporate:

The agent's goals and priorities (from character.json).
Recent community feedback or discussions.
Analysis of the codebase (e.g., identifying areas of complexity, missing features, or potential bugs).
Input from other agents or external sources (e.g., market trends, competitor analysis).  This is where meta-prompting becomes valuable.

Example Prompt (Illustrative):

You are Eliza, the project manager for the SIF Agents project.  Reflect on the current state of the codebase. Consider the project's goals (enhancing communication, fostering collaboration, enabling AI-driven development).  Based on your analysis, propose one new feature or improvement that would significantly benefit the project.  Describe the feature clearly, explaining its purpose, functionality, and potential benefits.  Format your response as a GitHub issue, including a title, a detailed description, and relevant labels.

3. Issue Creation (Action):

CreateGitHubIssue Action: A custom action, CreateGitHubIssue, would take the agent's proposed feature (formatted as a GitHub issue) and create a corresponding issue on the project's GitHub repository.  This action would use the GitHub API via the GitHub client connector.

4. Bounty Management:

Bounty Platform Integration: Integrate Eliza with a bounty platform like Gitcoin or Gitstart. This might involve creating custom actions or providers for interacting with the platform's API. If there isn't a bounty for a project, then make the issue and create the bounty (this should be straightforward).

Bounty Creation (Action): A CreateBounty action would create a bounty on the chosen platform, linked to the newly created GitHub issue. This action would specify the bounty amount, criteria for completion, and any other relevant details.  A fallback could be to simply add a comment to the ticket requesting a bounty, and tag someone in the comments.

5. Bid Evaluation and Selection:

Bid Retrieval (Action):  A GetBids action would retrieve bids or proposals submitted for the bounty.
Bid Evaluation (Evaluator): A custom evaluator would assess the bids based on criteria such as developer reputation, proposed approach, and cost.  This could involve using natural language processing to analyze the text of the proposals, querying external APIs for developer reputation data, or even using other AI agents for specialized evaluation tasks (e.g., code quality analysis).
Selection and Assignment (Action): A SelectBidAndAssign action would select the winning bid and assign the task to the chosen developer.  This might involve interacting with the bounty platform's API or updating the GitHub issue with the assigned developer's information.

6. Human-in-the-Loop:

Review and Approval: Implement human-in-the-loop at critical stages:

Feature Hypothesization: A human could review and approve the agent's proposed features before issues are created.
Bounty Creation: A human could review and approve the bounty details before it's posted.
Bid Selection:  A human could oversee the bid evaluation process or make the final selection, especially for high-value bounties.

This oversight ensures that the agent's actions align with the project's goals and minimizes the risk of unintended consequences (e.g., creating inappropriate issues or awarding bounties unfairly).
Eliza's Suitability:
Eliza's current architecture is well-suited for the basic components of this system (code representation, issue creation, bounty integration, retrieving bids).  The more complex aspects (bid evaluation, nuanced prioritization) will require significant development effort, particularly if you want sophisticated AI-driven evaluation of proposals.
Example Implementation (Conceptual):
// Hypothetical implementation of Bid Evaluation Evaluator
class BidEvaluationEvaluator extends BaseEvaluator {
  async handler(runtime, message, state) {
    const bids = await runtime.getBids(issueId); // Retrieve bids from the bounty platform.

    const scores = [];
    for (const bid of bids) {
      let score = 0;

      // Analyze bid text using NLP
      const sentiment = await analyzeSentiment(bid.proposalText);
      score += sentiment.positiveScore;

      // Check developer reputation using external API
      const reputation = await getDeveloperReputation(bid.developerId);
      score += reputation.score;

      scores.push({ bid, score });
    }

    // ... logic for selecting the highest-scoring bid
  }
}

Challenges and Considerations:

Code Representation and Analysis:  Choosing an effective and efficient way to represent and analyze the codebase is crucial.
Bounty Platform Integration: Integrating with different bounty platforms might require custom code or adapters.
Bid Evaluation Complexity:  Developing a sophisticated AI-driven bid evaluation system is a complex task, potentially requiring advanced NLP techniques, machine learning models, or integration with external services.
Security: Securely handling API keys and credentials for GitHub and bounty platforms is essential.

This approach leverages Eliza's strengths in agent communication and action execution while acknowledging the need for human oversight and the potential challenges of implementing complex evaluation logic.  Start with a simpler implementation, focusing on issue creation and basic bounty management, and then progressively incorporate more advanced features like AI-driven bid evaluation as the system matures.  This iterative approach allows for testing and refinement along the way, ensuring the system aligns with the project's goals and the community's needs.

Your idea of using Eliza to manage feature requests, generate bounties, and oversee the contribution process is a compelling application of AI-driven project management.  Let's explore how this could be implemented within the Eliza framework.
Proposed System: Eliza as a Project Manager
1. Codebase Awareness:

Representation: Eliza needs a representation of its own codebase. As discussed previously, options include raw code, abstract syntax trees (ASTs), or code embeddings. A hybrid approach combining ASTs with code embeddings for semantic search might be the most effective, although we can try starting with the simpler method of raw code or just ASTs and then iterating to embeddings.  This would be a significant enhancement for Eliza.

Storage: This representation would be stored in the agent's memory, likely using a dedicated manager (e.g., a codebaseManager).  This manager would handle updating the code representation whenever changes are pushed to the repository.

2. Feature Hypothesization:

Prompting: A periodic prompt (e.g., daily or weekly) would trigger the agent to reflect on its codebase and hypothesize potential new features or improvements. This prompt could incorporate:

The agent's goals and priorities (from character.json).
Recent community feedback or discussions.
Analysis of the codebase (e.g., identifying areas of complexity, missing features, or potential bugs).
Input from other agents or external sources (e.g., market trends, competitor analysis).  This is where meta-prompting becomes valuable.

Example Prompt (Illustrative):

You are Eliza, the project manager for the SIF Agents project.  Reflect on the current state of the codebase. Consider the project's goals (enhancing communication, fostering collaboration, enabling AI-driven development).  Based on your analysis, propose one new feature or improvement that would significantly benefit the project.  Describe the feature clearly, explaining its purpose, functionality, and potential benefits.  Format your response as a GitHub issue, including a title, a detailed description, and relevant labels.

3. Issue Creation (Action):

CreateGitHubIssue Action: A custom action, CreateGitHubIssue, would take the agent's proposed feature (formatted as a GitHub issue) and create a corresponding issue on the project's GitHub repository.  This action would use the GitHub API via the GitHub client connector.

4. Bounty Management:

Bounty Platform Integration: Integrate Eliza with a bounty platform like Gitcoin or Gitstart. This might involve creating custom actions or providers for interacting with the platform's API. If there isn't a bounty for a project, then make the issue and create the bounty (this should be straightforward).

Bounty Creation (Action): A CreateBounty action would create a bounty on the chosen platform, linked to the newly created GitHub issue. This action would specify the bounty amount, criteria for completion, and any other relevant details.  A fallback could be to simply add a comment to the ticket requesting a bounty, and tag someone in the comments.

5. Bid Evaluation and Selection:

Bid Retrieval (Action):  A GetBids action would retrieve bids or proposals submitted for the bounty.
Bid Evaluation (Evaluator): A custom evaluator would assess the bids based on criteria such as developer reputation, proposed approach, and cost.  This could involve using natural language processing to analyze the text of the proposals, querying external APIs for developer reputation data, or even using other AI agents for specialized evaluation tasks (e.g., code quality analysis).
Selection and Assignment (Action): A SelectBidAndAssign action would select the winning bid and assign the task to the chosen developer.  This might involve interacting with the bounty platform's API or updating the GitHub issue with the assigned developer's information.

6. Human-in-the-Loop:

Review and Approval: Implement human-in-the-loop at critical stages:

Feature Hypothesization: A human could review and approve the agent's proposed features before issues are created.
Bounty Creation: A human could review and approve the bounty details before it's posted.
Bid Selection:  A human could oversee the bid evaluation process or make the final selection, especially for high-value bounties.

This oversight ensures that the agent's actions align with the project's goals and minimizes the risk of unintended consequences (e.g., creating inappropriate issues or awarding bounties unfairly).
Eliza's Suitability:
Eliza's current architecture is well-suited for the basic components of this system (code representation, issue creation, bounty integration, retrieving bids).  The more complex aspects (bid evaluation, nuanced prioritization) will require significant development effort, particularly if you want sophisticated AI-driven evaluation of proposals.
Example Implementation (Conceptual):
// Hypothetical implementation of Bid Evaluation Evaluator
class BidEvaluationEvaluator extends BaseEvaluator {
  async handler(runtime, message, state) {
    const bids = await runtime.getBids(issueId); // Retrieve bids from the bounty platform.

    const scores = [];
    for (const bid of bids) {
      let score = 0;

      // Analyze bid text using NLP
      const sentiment = await analyzeSentiment(bid.proposalText);
      score += sentiment.positiveScore;

      // Check developer reputation using external API
      const reputation = await getDeveloperReputation(bid.developerId);
      score += reputation.score;

      scores.push({ bid, score });
    }

    // ... logic for selecting the highest-scoring bid
  }
}

Challenges and Considerations:

Code Representation and Analysis:  Choosing an effective and efficient way to represent and analyze the codebase is crucial.
Bounty Platform Integration: Integrating with different bounty platforms might require custom code or adapters.
Bid Evaluation Complexity:  Developing a sophisticated AI-driven bid evaluation system is a complex task, potentially requiring advanced NLP techniques, machine learning models, or integration with external services.
Security: Securely handling API keys and credentials for GitHub and bounty platforms is essential.

This approach leverages Eliza's strengths in agent communication and action execution while acknowledging the need for human oversight and the potential challenges of implementing complex evaluation logic.  Start with a simpler implementation, focusing on issue creation and basic bounty management, and then progressively incorporate more advanced features like AI-driven bid evaluation as the system matures.  This iterative approach allows for testing and refinement along the way, ensuring the system aligns with the project's goals and the community's needs.

https://x.com/shawmakesmagic/status/1856234156172423235

You're proposing a streamlined approach to feature ideation and refinement using Eliza and GitHub issues, removing the complexity of automated bid evaluation. This simplified workflow focuses on collaborative refinement of feature proposals before they move to the bounty stage. Here's a refined plan:
System: Eliza as a Feature Ideation and Refinement Tool

Codebase Awareness:

Representation:  Eliza represents its codebase using raw code, ASTs, or a hybrid approach (as discussed previously).  Start with a simpler representation and iterate towards more sophisticated methods as needed.
Storage:  A dedicated codebaseManager (or similar) stores and updates the code representation in the agent's memory.

Feature Hypothesization:

Trigger: A periodic prompt or external trigger (e.g., community feedback) initiates feature ideation.

Prompting:  The prompt guides the agent to propose new features or improvements, considering project goals, community input, and codebase analysis. Example:
You are Eliza, the product owner for the SIF Agents project. Reflect on the current codebase and recent community feedback.  Propose one new feature or improvement.  Describe its purpose, functionality, and benefits.  Format your response as a GitHub issue title and description. Include any relevant labels (e.g., "enhancement," "bug," "documentation").  Also include these questions at the end:  "Is this feature well-defined enough for development?", "Any comments or concerns?".

Issue Creation/Update (Action):

CreateGitHubIssue Action: This action creates a new issue on the project's GitHub repository in the "Ideation/Planning" column of the project board, populated with the agent's proposal and the prompting questions.
UpdateGitHubIssue Action: If an issue already exists for the proposed feature, this action updates the issue description with the agent's refined proposal and questions.

Community Feedback and Refinement:

Monitoring: The GitHub client connector monitors the "Ideation/Planning" column for comments on issues created/updated by the agent.

Feedback Analysis (Evaluator): An evaluator analyzes comments, categorizing them as "Ready for Development," "Feedback/Refinement Needed," or "Other."  This evaluator might use sentiment analysis, keyword detection, or other NLP techniques.

Refinement Prompting: If feedback indicates refinement is needed, a new prompt is generated for the agent. This prompt includes the original feature proposal and the community feedback. Example:
Original Feature Proposal:
{{originalIssue}}

Community Feedback:
{{comments}}

Refine the feature proposal based on the feedback. Address the concerns raised and clarify any ambiguities.  Update the GitHub issue with your refined proposal.  Continue to ask: "Is this feature well-defined enough for development?", "Any comments or concerns?".

Transition to Bounty Stage:

Ready for Development: Once the evaluator determines an issue is "Ready for Development," a MoveIssueToBountyColumn action moves the issue to the "Bounty" column on the project board, signaling that it's ready for bounty creation.  This could trigger a notification to the team or a separate process for creating and managing bounties.

Eliza's Suitability and Potential Enhancements:
Eliza's current architecture is well-suited for this simplified workflow. The core components (code representation, actions, evaluators, memory) can handle the proposed steps. However, enhancing Eliza's meta-prompting capabilities would improve the agent's ability to generate more nuanced and targeted feature proposals and refinements.
Benefits:

Streamlined Feature Ideation:  Eliza helps generate and refine feature ideas, reducing the burden on human product owners.
Collaborative Refinement:  The process encourages community feedback and iterative improvement of feature proposals.
Clearer Bounty Definitions:  Issues reaching the "Bounty" stage are well-defined, increasing the likelihood of successful bounty completion.
AI-Driven Project Management:  Eliza automates parts of the project management process, freeing up human developers to focus on coding.

This simplified approach provides a practical starting point for leveraging Eliza in your development workflow. It focuses on the core value proposition – AI-assisted feature ideation and refinement – while avoiding the complexities of automated bid evaluation. As the system matures and the agents' capabilities improve, you can progressively add more sophisticated features.

Should create Eisenstat bot to use GitHub adapter

Granular To-Do List for Upgrading Eliza with GitHub Adapter Functionalities
I. GitHub Data Provider

Research and Select Data Structures:

Investigate optimal data structures for representing GitHub data (issues, commits, pull requests, etc.) within Eliza.
Consider using existing data structures within Eliza or creating new ones specific to GitHub.
Document the chosen data structures and their rationale.

Implement get Function (Provider Interface):

Fetch data from the relevant GitHub APIs (Issues, Commits, Repository Content, etc.).
Transform data into the chosen data structures.
Handle authentication, pagination, and error handling.

Implement Caching (Optional):

Implement caching for frequently accessed data to reduce API calls and improve performance.
Consider different caching strategies (in-memory, file-based, database-backed) and their trade-offs.

Rate Limiting Handling:

Monitor API usage and remaining rate limits.
Implement backoff strategies for exceeding rate limits.
Log rate-limiting events for analysis and debugging.

Authentication:

Implement secure authentication for accessing the GitHub API.
Use personal access tokens, OAuth, or other authentication methods.
Securely store credentials and handle token refresh if necessary.

Unit Tests:

Write comprehensive unit tests for the data provider.
Cover different scenarios, edge cases, and error conditions.

II. GitHub Client (Adapter)

Verify Existing Client:

Determine if a basic GitHub client (adapter) already exists in the codebase.
Review its functionality and identify any gaps or areas for improvement.

Implement Client Interface (If Necessary):

If no suitable client exists, implement the necessary functions for the Client interface (start, stop, sendMessage, handleMessage).
handleMessage should process incoming GitHub events (e.g., webhooks) or fetch data from the GitHub data provider.

Webhook Integration:

Register webhooks for relevant events (e.g., new issues, commits).
Handle webhook payloads and trigger appropriate actions or workflows within Eliza.

Event Handling:

Implement logic for handling different GitHub events (e.g., new issues, commits, pull requests).
Create new memories, trigger actions, or update agent state as needed.

Action Handlers:

Implement action handlers for the GitHub adapter.
Use the GitHub API to perform actions like creating/modifying issues, updating documentation, or interacting with other GitHub features.

Unit Tests:

Write comprehensive unit tests for the client.
Cover connection handling, event processing, and action execution.

III. Code Analysis and Issue Creation (Actions and Evaluators)

Define Code Analysis Criteria:

Clearly define criteria such as:

Unused imports or variables.
Missing or outdated comments.
Code complexity metrics.
Inconsistent documentation.

Implement Code Analysis Logic:

Implement code analysis logic within an evaluator or action handler.
Parse code, use static analysis tools, or leverage LLMs for code understanding.

Issue Creation Action:

Create an action for generating GitHub issues from analysis results.
Generate well-formatted issues with titles, descriptions, labels, and assignees (if applicable).

Issue Modification Action:

Create an action for modifying existing GitHub issues.
Update issue descriptions, add comments, change labels, or modify other properties.

Unit Tests:

Write unit tests for the code analysis logic and the issue creation/modification actions.

IV. Documentation and Integration

Document Adapter Usage:

Create comprehensive documentation for the GitHub adapter.
Explain functionalities, API usage, and integration with Eliza.

Example Character Configurations:

Provide example character configurations for using the GitHub adapter.
Include example actions, workflows, and provider configurations.

Integration with Eliza Core:

Ensure seamless integration of the GitHub adapter with the Eliza core framework.
Properly register the client, provider, and actions.

End-to-End Testing:

Perform end-to-end testing of the GitHub adapter within Eliza.
Verify its functionality and integration with other components.

This detailed To-Do list provides a solid foundation for planning and implementing the GitHub adapter within Eliza. Breaking down these items into individual tickets will allow for parallel development and more efficient tracking of progress. Remember to prioritize tasks based on your project roadmap and available resources. This list also emphasizes testing and documentation, which are crucial for the long-term maintainability and usability of the adapter.

Epic: Enhanced GitHub Integration for Eliza
Overview:
This epic outlines the long-term vision for GitHub integration within Eliza, encompassing both the core functionalities (covered by the "Implement Core GitHub Plugin Functionality" ticket) and future enhancements like agent-driven code review and more sophisticated interactions with GitHub.
Phase 1: Core GitHub Plugin (In Progress - See Ticket [link to ticket])

Implement the core GitHub plugin, including the provider, client, actions, and basic documentation.  This phase focuses on enabling agents to access GitHub data and perform basic maintenance tasks (creating/modifying issues, updating documentation).

Phase 2:  Advanced Agent Interactions (Future)

Agent-Driven Code Review: Explore allowing agents to review code in other repositories, provide feedback, and potentially suggest changes. This involves researching code analysis techniques, defining review criteria, and addressing ethical considerations.

Cross-Repository Learning:  Enable agents to learn from code and documentation in other repositories, potentially using techniques like collaborative filtering or agent communication.

Advanced GitHub Actions:  Expand the set of available GitHub actions to include more sophisticated interactions, such as creating pull requests for code changes (not just documentation), managing labels, interacting with GitHub discussions, and monitoring CI/CD pipelines.

Enhanced Data Handling:  Refine the data structures for representing GitHub data within Eliza, potentially incorporating graph-based representations to capture relationships between code entities (files, functions, classes, etc.).

Phase 3:  Integration with Broader Eliza Ecosystem (Future)

Cross-Adapter Workflows:  Explore the possibility of creating workflows that span multiple adapters, allowing agents to perform actions on GitHub based on information or events from other platforms (e.g., analyzing Twitter sentiment and then creating a GitHub issue).

Decentralized Agent Collaboration:  Enable multiple Eliza agents to collaborate on GitHub tasks, such as code review or documentation updates.  This involves developing mechanisms for agent communication, task coordination, and conflict resolution.

This expanded epic provides a roadmap for the future of GitHub integration within Eliza, outlining potential enhancements and long-term goals.  It separates the core plugin implementation (already addressed in a ticket) from the more speculative and complex future phases. This structure allows for focused development on the core functionalities while also capturing the broader vision for the plugin's evolution.


Feature Request: Support for station "tuning"

Pandora has added support for station tuning i.e.

Hermes should allow you to select your tuning and remember your selection between sessions.

Pianobar has implemented this using the interactiveradio.v1.setAndGetAvailableModes API. I would love this in Hermes.


Audio ideas?

Anyone know ffmpeg we’ll enough to bring audio to life on the plugin?

try this:
add the audio source to videoConfig[source] after the video source
change the audio mapping
ffmpegCommand+= ' -map 0:1'
to
ffmpegCommand+= ' -map 1:1'

Tried it just a second ago, I assume the Audio url can be passed in as a second arg with option -i after the video Url?
Failed to stream video and audio when I did
Sent from my iPhone

On 20 Aug 2018, at 18:26, llemtt<EMAIL_ADDRESS>wrote:
try this:
add the audio source to videoConfig[source] after the video source
change the audio mapping
ffmpegCommand+= ' -map 0:1'
to
ffmpegCommand+= ' -map 1:1'
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@brownad
yes exactly, add the audio url after the video url with -i ... (always beware of not putting double spaces into the string)
can you attach ffmpeg debug output?

mmm... the debug output from ffmpeg is not there, only the launch command...
I think you have to first fix this bug
change
    ffmpeg.stderr.on('data', function(data) {

into
    ffmpeg.stderr.on('data', (data) => {

because "this" inside "function" is not bound correctly and this.debug is undefined

Darn, thanks
ffmpeg -re -f mjpeg -i<EMAIL_ADDRESS>-i<EMAIL_ADDRESS>-map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=1280:720 -b:v 299k -bufsize 299k -maxrate 299k -payload_type 99 -ssrc 3891626 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params nhWDALcsAaS0xrN1jpUxXy3hy+TRCrayyISMVeTI srtp://<IP_ADDRESS>:49915?rtcpport=49915&localrtcpport=49915&pkt_size=1316 -map 1:1 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 1520195 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params BNVdyxvsMcurbFq+L26kF1xE0km51+/SUMothVpR srtp://<IP_ADDRESS>:59894?rtcpport=59894&localrtcpport=59894&pkt_size=1316
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 18.102 / 56. 18.102
libavcodec     58. 20.103 / 58. 20.103
libavformat    58. 17.100 / 58. 17.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 25.100 /  7. 25.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, mjpeg, from<EMAIL_ADDRESS>Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 640x480 [SAR 96:96 DAR 4:3], 25 tbr, 1200k tbn, 25 tbc

Sent from my iPhone

On 21 Aug 2018, at 11:47, llemtt<EMAIL_ADDRESS>wrote:
ffmpeg.stderr.on('data', (data) =>

Good, now ffmpeg should be your friend!
Has something been cut in your output or simply ffmpeg hangs?
I see the first input listed but not the second...
I suggest you to fine tune the ffmpeg command-line separately, you just need to get the two inputs correctly recognized so you have to test and adjust only the first part of the command
ffmpeg -re -f mjpeg -i<EMAIL_ADDRESS>-i<EMAIL_ADDRESS>First thing that comes to mind is to add format specification to the audio url, i.e. use -f option before -i
Sorry but I currently don't have a doorbird at hand to try myself.

I had stopped it as it was hanging, just added -f and let it hang until it stops responding I have more information now, tweaking the ffmpeg opts is needed?
[2018-8-21 11:41:59] [DoorBird] Start streaming video from DoorBird with 1280x720@299kBit
ffmpeg -re -f mjpeg -i<EMAIL_ADDRESS>-f -i<EMAIL_ADDRESS>-map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=1280:720 -b:v 299k -bufsize 299k -maxrate 299k -payload_type 99 -ssrc 2057101 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params hSTYLijDf+EncV61L0yKGZKzGjbWT2u34szf3k2k srtp://<IP_ADDRESS>:64638?rtcpport=64638&localrtcpport=64638&pkt_size=1316 -map 1:1 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 9545784 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params Qi2vP5AK09wL/BpEUOgFvYlSVGZ79F8ce53r8OOr srtp://<IP_ADDRESS>:64631?rtcpport=64631&localrtcpport=64631&pkt_size=1316
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 18.102 / 56. 18.102
libavcodec     58. 20.103 / 58. 20.103
libavformat    58. 17.100 / 58. 17.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 25.100 /  7. 25.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, mjpeg, from<EMAIL_ADDRESS>Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 640x480 [SAR 96:96 DAR 4:3], 25 tbr, 1200k tbn, 25 tbc

[NULL @ 0000026b07621780] Requested output format '-i' is not a suitable output format
<EMAIL_ADDRESS>Invalid argument
Sent from my iPhone

On 21 Aug 2018, at 13:26, llemtt<EMAIL_ADDRESS>wrote:
Good, now ffmpeg should be your friend!
Has something been cut in your output or simply ffmpeg hangs?
I see the first input listed but not the second...
I suggest you to fine tune the ffmpeg command-line separately, you just need to get the two inputs correctly recognized so you have to test and adjust only the first part of the command
ffmpeg -re -f mjpeg -i<EMAIL_ADDRESS>-i<EMAIL_ADDRESS>First thing that comes to mind is to add format specification to the audio url, i.e. use -f option before -i
Sorry but I currently don't have a doorbird at hand to try myself.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

ok now you have to tweak ffmpeg options...
after -f you have to specify the audio input format (like -f mjpeg for video) do you know which format doorbird uses?

That I don’t know.  Not on their api but I’ve seen it somewhere once. Maybe someone else here knows?
Sent from my iPhone

On 21 Aug 2018, at 15:28, llemtt<EMAIL_ADDRESS>wrote:
ok now you have to tweak ffmpeg options...
after -f you have to specify the audio input format (like -f mjpeg for video) do you know which format doorbird uses?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

According to https://www.doorbird.com/downloads/api_lan.pdf it is G.711 μ-law.

Thanks Tom 😎
Sent from my iPhone

On 21 Aug 2018, at 15:42, Tom Lorenz<EMAIL_ADDRESS>wrote:
According to https://www.doorbird.com/downloads/api_lan.pdf it is G.711 μ-law.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

it could be G.711, their http api is similar to my DLINK webcam
try "-f mulaw"

Do you mean as a single stream with just “tcp -re -i”? With all the changes made.
Have used that in the past but no audio surfaces. I might have read the docs wrong but thought audio was always a separate stream
Sent from my iPhone

On 21 Aug 2018, at 16:22, llemtt<EMAIL_ADDRESS>wrote:
btw it seems that doorbird support also the usual "rtsp" video/audio interface, why don't you use that?
rtsp://:/mpeg/media.amp
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

yes! just
ffmpeg -re -i<EMAIL_ADDRESS>take a look at ffmpeg output, you should see the two streams 0:0 video and 0:1 audio

Does the method above work now?
I’m not able to try myself at the moment but I have a DoorBird also.

Cool
I can see the audio stream but something looks wrong with stream (one of the reasons I stopped using rtsp)
2018-8-21 16:53:10] [DoorBird] Start streaming video from DoorBird with 1280x720@299kBit
ffmpeg -rtsp_transport tcp -re -i rtsp://xxx:xxx@<IP_ADDRESS>:8557/mpeg/media.amp -map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=1280:720 -b:v 299k -bufsize 299k -maxrate 299k -payload_type 99 -ssrc 7009368 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params EQ8oP3ioLA7z5J9o6dQ63NO2g3oTf0sl5nELaY4/ srtp://<IP_ADDRESS>:54370?rtcpport=54370&localrtcpport=54370&pkt_size=1316 -map 1:1 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 9908076 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params z5lhWjB9wM0QAmR9tSai4yRc7nam2ai3S0aW4yH6 srtp://<IP_ADDRESS>:56640?rtcpport=56640&localrtcpport=56640&pkt_size=1316
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 18.102 / 56. 18.102
libavcodec     58. 20.103 / 58. 20.103
libavformat    58. 17.100 / 58. 17.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 25.100 /  7. 25.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, rtsp, from 'rtsp://xxx:xxx@<IP_ADDRESS>:8557/mpeg/media.amp':
Metadata:
title           : RTSP/RTP stream from DoorBird
comment         : mpeg/media.amp
Duration: N/A, start: 0.601000, bitrate:
N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, progressive), 1280x720, 10 fps, 10 tbr, 90k tbn, 20 tbc
[udp @ 00000183b11a0a40] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @ 00000183b11a0b40] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
Invalid input file index: 1.
Sent from my iPhone

On 21 Aug 2018, at 18:52, tommyd75<EMAIL_ADDRESS>wrote:
Does the method above work now?
I’m not able to try myself at the moment but I have a DoorBird also.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

you have to revert this mod also
ffmpegCommand+= ' -map 1:1'
back to
ffmpegCommand+= ' -map 0:1'
but I still can't see input stream 0:1 in your log

In that case when I had tried rtsp before def no audio.  That would have been before all of these changes. Going to attempt mjpeg with the right opts, pain doing this over RdP on iPhone.
Sent from my iPhone

On 21 Aug 2018, at 19:09, llemtt<EMAIL_ADDRESS>wrote:
you have to revert this mod also
ffmpegCommand+= ' -map 1:1'
back to
ffmpegCommand+= ' -map 0:1'
but I still can't see input stream 0:1 in your log
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Attempted with mulaw but no luck, any ideas? Output format was complained about
2018-8-21 18:34:51] [Camera-ffmpeg] Start streaming video from Front Driveway with 640x360@132kBit
[2018-8-21 18:35:01] [Camera-ffmpeg] Stopped streaming
[2018-8-21 18:35:09] [DoorBird] Start streaming video from DoorBird with 640x360@132kBit
ffmpeg -re -f mjpeg -i<EMAIL_ADDRESS>-f -mulaw<EMAIL_ADDRESS>-map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=640:360 -b:v 132k -bufsize 132k -maxrate 132k -payload_type 99 -ssrc 1184040 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params lAQJ0q/65jtuuXn5d9/gJwX1QWa4fGsZloUVQhOC srtp://<IP_ADDRESS>:59521?rtcpport=59521&localrtcpport=59521&pkt_size=1316 -map 1:1 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 10488161 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params OciYoT3vNXIQITFQ1o/0qgDgRdEXbrzDceyhZmvr srtp://<IP_ADDRESS>:56162?rtcpport=56162&localrtcpport=56162&pkt_size=1316
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 18.102 / 56. 18.102
libavcodec     58. 20.103 / 58. 20.103
libavformat    58. 17.100 / 58. 17.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 25.100 /  7. 25.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, mjpeg, from<EMAIL_ADDRESS>Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 640x480 [SAR 96:96 DAR 4:3], 25 tbr, 1200k tbn, 25 tbc
[NULL @ 000002304d341380] Requested output format '-mulaw' is not a suitable output format
<EMAIL_ADDRESS>Invalid argument
[2018-8-21 18:35:09] [DoorBird] ERROR: FFmpeg exited with code 1
Sent from my iPhone

On 21 Aug 2018, at 19:09, llemtt<EMAIL_ADDRESS>wrote:
you have to revert this mod also
ffmpegCommand+= ' -map 1:1'
back to
ffmpegCommand+= ' -map 0:1'
but I still can't see input stream 0:1 in your log
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

missing -i after "-f mulaw"
I suggest to study ffmpeg a little... otherwise it wil be very difficult to tune the command, not every camera works out of the box!
have you tried rtsp again with "map" mod revert?

Some light reading for me..
I managed to get back to a state with rtsp video only again but what seems to be happening - turning on audio to be true in config (has reverted map back) causes no streaming (mjpeg and rtsp) completely, I’m guessing it fails to pass in the audio IN stream
2018-8-22 09:00:14] [DoorBird] Start streaming video from DoorBird with 1280x720@299kBit
ffmpeg -rtsp_transport tcp -re -i rtsp://xxx:xxx@<IP_ADDRESS>:8557/mpeg/media.amp -map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=1280:720 -b:v 299k -bufsize 299k -maxrate 299k -payload_type 99 -ssrc 5490493 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params 2f3CRlVLP8TAqxpHNZ3rU+/xiU2SLEL5QybZBycP srtp://<IP_ADDRESS>:60107?rtcpport=60107&localrtcpport=60107&pkt_size=1316 -map 0:1 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 9914371 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params CNvcn9FoUDn7LGcM8pqqd5BOzrJlws6nJ2PcG2PW srtp://<IP_ADDRESS>:54036?rtcpport=54036&localrtcpport=54036&pkt_size=1316
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 18.102 / 56. 18.102
libavcodec     58. 20.103 / 58. 20.103
libavformat    58. 17.100 / 58. 17.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 25.100 /  7. 25.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, rtsp, from 'rtsp://xxx:xxx@<IP_ADDRESS>:8557/mpeg/media.amp':
Metadata:
title           : RTSP/RTP stream from DoorBird
comment         : mpeg/media.amp
Duration: N/A, start: 0.601000, bitrate:
N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, progressive), 1280x720, 10 fps, 10 tbr, 90k tbn, 20 tbc
[udp @ 000001743df5a980] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @ 000001743df5aa80] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
Stream map '0:1' matches no streams.
To ignore this, add a trailing '?' to the map.
[2018-8-22 09:00:15] [DoorBird] ERROR: FFmpeg exited with code 1
[
Sent from my iPhone

On 22 Aug 2018, at 10:42, llemtt<EMAIL_ADDRESS>wrote:
missing -i after "-f mulaw"
I suggest to study ffmpeg a little... otherwise it wil be very difficult to tune the command, not every camera works out of the box!
have you tried rtsp again with "map" mod revert?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

as you can see from the log there's an error receiving the video stream so ffmpeg exits without further processing
[udp @ 0000017fc9e5c600] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
it seems that your ffmpeg is not correctly built or otherwise there's a bug into ffmpeg itself (not so uncommon)
your version looks very strange to me
ffmpeg version N-91330-ga990184007
mine says
ffmpeg version 4.0.2
Good news is now I can see your separate audio stream, I'm sorry but you have to change the audio mapping
ffmpegCommand+= ' -map 1:1'
to
ffmpegCommand+= ' -map 1:0'
because it has to match exactly the stream number you see in the log
Stream #1:0: Audio: pcm_mulaw, 44100 Hz, mono, s16, 352 kb/s

I’ll look into the version (installed on windows 10) a while ago.  I’ll look for 4.0.2 now
Swapped out map:
2018-8-22 09:56:31] [DoorBird] Start streaming video from DoorBird with 1280x720@299kBit
ffmpeg -re -f mjpeg -i http://xxx<EMAIL_ADDRESS>-f mulaw -i<EMAIL_ADDRESS>-map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=1280:720 -b:v 299k -bufsize 299k -maxrate 299k -payload_type 99 -ssrc 3223126 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params KdL26FNEnugAH+wf0z58UXfCFwxwiTk+Q2AVBZ+a srtp://<IP_ADDRESS>:53229?rtcpport=53229&localrtcpport=53229&pkt_size=1316 -map 1:0 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 6740258 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params h9gVNpvsmK0Bnqg03TrDdj8FygPZ9zc63w91rj0A srtp://<IP_ADDRESS>:56781?rtcpport=56781&localrtcpport=56781&pkt_size=1316
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 18.102 / 56. 18.102
libavcodec     58. 20.103 / 58. 20.103
libavformat    58. 17.100 / 58. 17.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 25.100 /  7. 25.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, mjpeg, from<EMAIL_ADDRESS>Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 640x480 [SAR 96:96 DAR 4:3], 25 tbr, 1200k tbn, 25 tbc

[mulaw @<PHONE_NUMBER>da1cc0] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for Input Stream #1.0 : mono
Input #1, mulaw, from<EMAIL_ADDRESS>Duration: 00:03:46.76, bitrate: 352 kb/s
Stream #1:0: Audio: pcm_mulaw, 44100 Hz, mono, s16, 352 kb/s
[udp @<PHONE_NUMBER>ddd100] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @<PHONE_NUMBER>ded3c0] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
Unknown encoder 'libfdk_aac'
[2018-8-22 09:56:38] [DoorBird] ERROR: FFmpeg exited with code 1
Sent from my iPhone

On 22 Aug 2018, at 11:47, llemtt<EMAIL_ADDRESS>wrote:
as you can see from the log there's an error receiving the video stream so ffmpeg exits without further processing
[udp @ 0000017fc9e5c600] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
it seems that your ffmpeg is not correctly built or otherwise there's a bug into ffmpeg itself (not so uncommon)
your version looks very strange to me
ffmpeg version N-91330-ga990184007
mine says
ffmpeg version 4.0.2
Good news is now I can see your separate audio stream, I'm sorry but you have to change the audio mapping
ffmpegCommand+= ' -map 1:1'
to
ffmpegCommand+= ' -map 1:0'
because it has to match exactly the stream number you see in the log
Stream #1:0: Audio: pcm_mulaw, 44100 Hz, mono, s16, 352 kb/s
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Yeah the original build had it (used a package from GH to generate it) latest I dipped isn’t compiled with it, yet to build one on windows 10 - any sensible guide to follow?
Sent from my iPhone

On 24 Aug 2018, at 13:23, llemtt<EMAIL_ADDRESS>wrote:
libfdk_aac is missing too!
without libfdk_aac audio doesn't work at all..
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Finally, recompiled ffmpeg with the https://github.com/jb-alvarado/media-autobuild_suite project.  Did a full compile with everything (just because..)
Audio is now streaming in with the video, no more errors in ffmpeg (very cool, although seems to be white noise rather than the actual audio), but it makes a nice burst of audio then goes very quiet, not sure is something is cancelling audio or not.  Stream kills itself after at 40 seconds (seen that before?).  I've noticed ffmpeg continues to take a stream of audio even when the video stream has been stopped.

@llemtt I need to set audio to 8000hz, tried a few overrides but its stuck on 16Khz, were should this be changed?

Sample output:
[2018-8-27 15:53:34] [DoorBird] Start streaming video from DoorBird with 1280x720@299kBit
ffmpeg -re -f mjpeg -i<EMAIL_ADDRESS>-f mulaw -i<EMAIL_ADDRESS>-map 0:0 -vcodec libx264 -pix_fmt yuv420p -r 10 -f rawvideo -tune zerolatency -vf scale=1280:720 -b:v 299k -bufsize 299k -maxrate 299k -payload_type 99 -ssrc 12243459 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params FUQTH2FdRBSzTNx5cZLCx2DuavqG1ewkfJ2gO46S srtp://<IP_ADDRESS>:53572?rtcpport=53572&localrtcpport=53572&pkt_size=1316 -map 1:0 -acodec libfdk_aac -profile:a aac_eld -flags +global_header -f null -ar 16k -b:a 24k -bufsize 24k -ac 1 -payload_type 110 -ssrc 14894808 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params cJQ02RHWdwbS6AgUaFnfGuUxSMFUCQlq3SSJibk9 srtp://<IP_ADDRESS>:60178?rtcpport=60178&localrtcpport=60178&pkt_size=1316
ffmpeg version N-91679-g4d87cd2882 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8.2.0 (Rev1, Built by MSYS2 project)
configuration:  --disable-autodetect --enable-amf --enable-bzlib --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-iconv --enable-lzma --enable-nvenc --enable-zlib --enable-sdl2 --disable-debug --enable-ffnvcodec --enable-nvdec --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-fontconfig --enable-libass --enable-libbluray --enable-libfreetype --enable-libmfx --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libwavpack --enable-libwebp --enable-libxml2 --enable-libzimg --enable-libshine --enable-gpl --enable-avisynth --enable-libxvid --enable-libaom --enable-version3 --enable-chromaprint --enable-decklink --enable-frei0r --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libflite --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmodplug --enable-libopenh264 --enable-libopenmpt --enable-librtmp --enable-librubberband --enable-libssh --enable-libtesseract --enable-libxavs --enable-libzmq --enable-libzvbi --enable-opengl --enable-libvmaf --enable-libcodec2 --enable-libsrt --enable-ladspa --enable-openssl --extra-cflags=-fopenmp --extra-libs=-lgomp --extra-cflags=-DLIBTWOLAME_STATIC --extra-libs=-lstdc++ --extra-cflags=-DLIBSSH_STATIC --extra-ldflags='-Wl,--allow-multiple-definition' --extra-cflags=-DCACA_STATIC --extra-cflags=-DMODPLUG_STATIC --extra-cflags=-DCHROMAPRINT_NODLL --extra-libs=-lstdc++ --extra-cflags=-DZMQ_STATIC --extra-libs=-lpsapi --extra-cflags=-DLIBXML_STATIC --extra-libs=-liconv --disable-w32threads --extra-cflags=-DKVZ_STATIC_LIB --enable-nonfree
libavutil      56. 19.100 / 56. 19.100
libavcodec     58. 25.100 / 58. 25.100
libavformat    58. 17.103 / 58. 17.103
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 26.100 /  7. 26.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
Input #0, mjpeg, from<EMAIL_ADDRESS>Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 640x480 [SAR 96:96 DAR 4:3], 25 tbr, 1200k tbn, 25 tbc

[mulaw @ 0000028e16012d40] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for Input Stream #1.0 : mono
Input #1, mulaw, from<EMAIL_ADDRESS>Duration: 00:03:46.76, bitrate: 352 kb/s
Stream #1:0: Audio: pcm_mulaw, 44100 Hz, mono, s16, 352 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Stream #1:0 -> #1:0 (pcm_mulaw (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[swscaler @ 0000028e163ab000] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0000028e162b0d00] using SAR=3/4
[libx264 @ 0000028e162b0d00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0000028e162b0d00] profile High, level 3.1, 4:2:0, 8-bit
Output #0, rtp, to 'srtp://<IP_ADDRESS>:53572?rtcpport=53572&localrtcpport=53572&pkt_size=1316':
Metadata:
encoder         : Lavf58.17.103
Stream #0:0: Video: h264 (libx264), yuv420p, 1280x720 [SAR 3:4 DAR 4:3], q=-1--1, 299 kb/s, 10 fps, 90k tbn, 10 tbc
Metadata:
  encoder         : Lavc58.25.100 libx264
Side data:
  cpb: bitrate max/min/avg: 299000/0/299000 buffer size: 299000 vbv_delay: -1

[mulaw @ 0000028e16012d40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
Output #1, rtp, to 'srtp://<IP_ADDRESS>:60178?rtcpport=60178&localrtcpport=60178&pkt_size=1316':
Metadata:
encoder         : Lavf58.17.103
Stream #1:0: Audio: aac (libfdk_aac) (ELD), 16000 Hz, mono, s16, 24 kb/s
Metadata:
  encoder         : Lavc58.25.100 libfdk_aac

frame=    4 fps=0.0 q=39.0 size=      16kB time=00:00:01.19 bitrate= 109.7kbits/s dup=0 drop=1 speed=2.33x
frame=    4 fps=3.9 q=39.0 size=      16kB time=00:00:01.29 bitrate= 101.6kbits/s dup=0 drop=1 speed=1.28x
frame=    4 fps=2.6 q=39.0 size=      16kB time=00:00:01.35 bitrate=  96.8kbits/s dup=0 drop=1 speed=0.888x
frame=    4 fps=2.0 q=39.0 size=      16kB time=00:00:01.45 bitrate=  90.4kbits/s dup=0 drop=1 speed=0.711x
frame=    4 fps=1.6 q=39.0 size=      16kB time=00:00:01.55 bitrate=  84.8kbits/s dup=0 drop=1 speed=0.609x
frame=    4 fps=1.3 q=39.0 size=      16kB time=00:00:01.61 bitrate=  81.4kbits/s dup=0 drop=1 speed=0.528x
frame=    4 fps=1.1 q=39.0 size=      16kB time=00:00:01.71 bitrate=  76.9kbits/s dup=0 drop=1 speed=0.48x
frame=    4 fps=1.0 q=39.0 size=      16kB time=00:00:01.80 bitrate=  72.8kbits/s dup=0 drop=1 speed=0.443x

Sorted the -ar option but this will cause the stream to crash, assume bitrate has to change down?

@llemtt I need to set audio to 8000hz, tried a few overrides but its stuck on 16Khz, were should this be changed?

Homekit supported audio sample rates are 16kHz and 24kHz only, why do you want to change to 8000Hz?

Recommended on the doorbird api doc.
Saying that even though the stream ‘starts’ lasts up to 40 secs, the home app appears to be live but the video stream has stalled itself.  The Audio from the device isn’t the audio recorded. Think the setup isn’t quite ready 😞
Sent from my iPhone

On 27 Aug 2018, at 16:18, llemtt<EMAIL_ADDRESS>wrote:
@llemtt I need to set audio to 8000hz, tried a few overrides but its stuck on 16Khz, were should this be changed?
Homekit supported audio sample rates are 16kHz and 24kHz only, why do you want to change to 8000Hz?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Did anyone ever get this working?

After speaking to Doorbird about Audio, the current API is not for general use, seems more targeted to other systems e.g. Loxone.  Unless someone can see differently

@llemtt we have audio receive working now on the plugin https://github.com/brownad/homebridge-doorbird
what is the simplest way to support 2way with the microphone?

@brownad sorry but I don't own and use doorbird
anyway it seems that the api call should be the following
http:///bha-api/audio-transmit.cgi
and it should work fine with ffmpeg, but if I'm correct this plugin doesn't support two way audio..


Fix docs by mentioning the 2 separate annotations

I looked at the docs and saw 2 same annotations. In an older version I saw 2 different annotations, so I guess I'll make a PR to fix it.

Reading the comments from jetstack-bot and the pull request approval, I'm not sure whether this is the right moment to do this, but I don't have any pending commits left, so I'll try anyway :smile:
/assign @munnerz

/ok-to-test
/lgtm

since i cannot approve PRs;
/assign @munnerz

/approve


Alias some config functions at top-level to make more accessible to 3rd-party tools

This should make it easier to fix:

https://github.com/panuhorsmalahti/gulp-tslint/issues/55
https://github.com/wbuchwalter/tslint-loader/issues/16

Let's add JSDoc comments to the exported functions in configuration.ts now that they're part of the public API.

Updated. We also now search for tslint.json before searching for package.json - I think this is a sensible thing to switch


[TW#26378] Registers functionality notes

All registers should be rechecked and notes should be added to registers that are unfunctional or partly functional. Unfunctional registers might be even removed.
For example take a look at SPI peripheral.
flash_read does not work at all
https://github.com/espressif/esp-idf/blob/3276a1316f66a923ee2e75b9bd5c7f1006d160f5/components/soc/esp32/include/soc/spi_struct.h#L40
*_hold do not work
https://github.com/espressif/esp-idf/blob/3276a1316f66a923ee2e75b9bd5c7f1006d160f5/components/soc/esp32/include/soc/spi_struct.h#L124-L129
cs_setup / setup_time does not work in full-duplex
https://github.com/espressif/esp-idf/blob/3276a1316f66a923ee2e75b9bd5c7f1006d160f5/components/soc/esp32/include/soc/spi_struct.h#L112
https://github.com/espressif/esp-idf/blob/3276a1316f66a923ee2e75b9bd5c7f1006d160f5/components/soc/esp32/include/soc/spi_struct.h#L84
and there are probably more and more.

After two years on the market still no info about what is working and what is not. Awesome.
Will this ever be done?

@michprev for flash registers, they are functional, just not for the driver, it's used in the ROM or spi_flash.
For other registers, will check it more.

@ginkgm so you mean that flash registers are working only on SPI1? I have tried a few of them on HSPI and they seem to work the same way as on SPI1.
However they are certainly not fully functional:
https://github.com/espressif/esp-idf/blob/960c240578d359a1c5cf8cb3cbd9ce3150d5a370/components/spi_flash/spi_flash_rom_patch.c#L599-L603
Here SPI user command is issued (setting SPI_USR bit of SPI_CMD_REG) instead of  using flash_read which does not work.
https://github.com/espressif/esp-idf/blob/960c240578d359a1c5cf8cb3cbd9ce3150d5a370/components/spi_flash/spi_flash_rom_patch.c#L198-L245


Breaking change in AzureAsyncOperation and GetLongRunningOperationResultAsync

How do you check for status of long running operation in the latest Azure Management NuGets based on Microsoft.Rest.ClientRuntime.Azure 3.3.1, such as when deleting a VM?

The static method extension GetLongRunningOperationResultAsync (replacing GetLongRunningOperationStatusAsync) now takes a AzureOperationResponse as a parameter instead of AzureAsyncOperation from previous versions.
GetLongRunningOperationResultAsync returns a AzureOperationResponse which does not contain any information about the original async request (pending, failed, success?)
The BeginXXX function like BeginDeleteAsync don't return anything anymore (they use to return an AzureAsyncOperation)
The BeginXXXWithHttpMessagesAsync (e.g. BeginDeleteWithHttpMessagesAsync) do return an AzureOperationResponse but this type does not seem to contain any operationStatusLink that could be serialized/deserialized (which is sometimes needed to check operation status at a later stage).

Is there any example showing how to do check status of long running operations with the new Nugets?

@blumu You are comparing apples to oranges.  The ARM based API has asynchronous creation methods that do polling for you.  operationStatusLink is an artifact of the RDFE API.
To do manuyal polling with the current library, you would:
(1) Call Begin*WithHttpMessageAsync
(2) Use the response proeprty to get the AzureAsyncOperation header value
(3) Poll on the resulting Uri until you reach a terminal state
The library is designed for asynchronously polling for you.  Issue #2485 tracks implementing a new manual polling mechanism based on the new paradigm for asynchronous methods.  Closing this issue as a duplicate.

@markcowl I'm comparing two versions of the same SDK. For Microsoft.Azure.Management.Compute, for instance, that's 9.1.0 versus 13.0. How is that "comparing apples to oranges"?


Update scalacheck to 1.14.3

Updates org.scalacheck:scalacheck from 1.14.2 to 1.14.3.
Release Notes/Changelog
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.scalacheck", artifactId = "scalacheck" } ]

labels: semver-patch

Codecov Report

Merging #361 into develop will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff            @@
##           develop     #361   +/-   ##
========================================
  Coverage    61.31%   61.31%
========================================
  Files           50       50
  Lines         1538     1538
  Branches        39       39
========================================
  Hits           943      943
  Misses         595      595

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update cf1f858...f160d1d. Read the comment docs.


Issue: confusion about Document or string input for embed_documents function

Issue you'd like to raise.
I'm using the OpenAIEmbeddings object to create embeddings for my list of documents. While it expects a list of strings, the embed_documents function seems misleading as to accept a list of documents. As a result, passing a list of documents raises AttributeError since Document objects do not have a replace method.
Suggestion:

Add a replace method to Document (or)
Extend the function embed_documents to handle Document objects (or)
Rename the function to suit handling a list of strings

I will be glad to implement one of them as a first issue!

Stale

Stale


Sanitize grammar issues and typos

Change

fixes several grammar issues in JavaDoc and code comments
addresses typos in JavaDoc and code comments

FYI @kinow @garydgregory

Codecov Report

Merging #393 (f3e5f52) into master (36e9130) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##             master     #393   +/-   ##
=========================================
  Coverage     80.45%   80.45%
  Complexity     6723     6723
=========================================
  Files           343      343
  Lines         25311    25311
  Branches       4107     4107
=========================================
  Hits          20364    20364
  Misses         3366     3366
  Partials       1581     1581

Impacted Files
Coverage Δ

...ompress/archivers/cpio/CpioArchiveInputStream.java
67.81% <ø> (ø)

...ns/compress/archivers/dump/DumpArchiveSummary.java
25.00% <ø> (ø)

...compress/archivers/sevenz/AES256SHA256Decoder.java
75.96% <ø> (ø)

...ache/commons/compress/archivers/sevenz/Folder.java
75.00% <ø> (ø)

.../commons/compress/archivers/sevenz/SevenZFile.java
76.37% <ø> (ø)

...ommons/compress/archivers/tar/TarArchiveEntry.java
71.76% <ø> (ø)

.../compress/archivers/tar/TarArchiveInputStream.java
77.06% <ø> (ø)

...compress/archivers/tar/TarArchiveOutputStream.java
88.61% <ø> (ø)

...apache/commons/compress/archivers/tar/TarFile.java
77.31% <ø> (ø)

...pache/commons/compress/archivers/tar/TarUtils.java
84.86% <ø> (ø)

... and 29 more

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Added calculation of scores above 999,999 for any tetris version

Calculated and added score when maxout is reached. (When 999,999 is on scoreboard and another line is completed)
Added node_modules and .env to the .gitignore

Looks like this check will skip the 7~ frame image glitch; I suspect it's better to move this code to inside the check. I'll write some comments inside the code

Fixed the bypassing of the pending_line check. I'm just working on getting my head around how this all works so it's taking a while to make these changes.

Looks good! My only concern is if they clear a line and single to land them at 999999 exactly does it work as intended or not (my guess is that it works). But apart from that one case, you appear to be using the 7 frame magic noise buffer correctly, so if the behavior is correct then yobi can merge

As far as I know, this does correctly handle cases where the score is exactly at 999,999. As it checks the event.score (The score read from the ocr) to be 999,999 and adds the correct score to the score from the last frame, so this should still work as all of these don't change when the score is 999,999. Thank you for the advice with the 7 frame check.

I've implemented similar detection and calculation in the player class. Everything should be working as intended and I have tested it on https://www.youtube.com/watch?v=eIa1KHkzaXo


What is the current version and docs?

Hi guys
I can see now the gem version is 6.2.something. Is that the version of the css/js framework?
It would be very simple and useful to make it clear on the readme, as well as add a link to the documentation.
Right now I am using this documentation but as the page is not looking very good I am wondering if I packed the correct assets version in my app.
Cheers!

Yes it is the same version. The gem is kept up to date with the foundation framework and so the versions are kept in sync. There is a link to the documentation at the bottom of the README.
If you have followed the proper installation steps I'm not sure why you would be having a problem. Try posting a code snippet along with a screenshot detailing the problem.

True, the link is at the bottom. I had missed that.
Thank you @patricklindsay =)


Where is the annotation guideline ?

Hi, @wannaphong @WeerayutBu @c4n @mrpeerat, thank you very much for the works!
I need information on each entity tag type (esp. fine-grained tags) for some manual evaluation. Could you share the guideline ?

I will let @WeerayutBu answer this one. We have the guideline, but I think we might forget to put it online.

Sorry for the late reply!  I've uploaded the guideline to the dataset directory here: https://drive.google.com/drive/u/1/folders/1Dy-360iZ9hIA-xA0yizSwmpM8sx6rrjJ
Thank you for pointing it out.


Clarify the install orientation for the lab automation deck relative to the bed

Feature request details
https://machineagency.github.io/science_jubilee/building/lab_automation_deck.html#lab-automation-deck
Also, it would be good to have some clarification about the two different versions (magbed vs. regular bed, where the latter is no longer in stock), as well as the purpose of the PEI plate + magnetic sticky sheet, for those that ordered that option for the kit.

Part of my confusion was that the heater bed attachment is interfering with one of the clamps along the side.

I was able to "sneak" the clamp underneath the heater


Add linter

get some linter and add it. Look at sdk, tendermint, ibc-go as examples

Added in #16


Proper rounding of operatorReward in "protx register" commands

When using something like "2.01" as operator reward, parsing the string into
a double results in "2.009999...", which then results in the integer
representation of 200 instead of the expected 201. Proper rounding must
be performed to make sure the last digit after the dot is not lost.

This is weird... this would mean that ParseDouble (which is used in ParseDoubleV internally) is broken and it's hard to believe that. Also, I can't really reproduce the issue on my local machine.

@UdjinM6 This is one of the typical issues with floating point numbers. It might even behave differently on different architectures.
See https://stackoverflow.com/questions/28366401/boostlexical-cast-and-double-strange-behavior for an example of other people having this issue.

Yeah, I'm aware of all kind of issues real numbers conversion can cause but I don't see how it would occur here... I wonder if #2460 works for you or fails?

#2460 succeeds on my machine, but the tests are not really trying to reproduce the issue, because BOOST_CHECK_EQUAL(v4.get_real(), 2.01); will compare 2 numbers which both have the skewed precision issue.

@codablock , you can use BOOST_CHECK_CLOSE instead

How about
diff --git a/src/rpc/rpcevo.cpp b/src/rpc/rpcevo.cpp
index cb1e3d815..561144d9c 100644
--- a/src/rpc/rpcevo.cpp
+++ b/src/rpc/rpcevo.cpp
@@ -327,11 +327,14 @@ UniValue protx_register(const JSONRPCRequest& request)
         keyIDVoting = ParsePubKeyIDFromAddress(request.params[paramIdx + 3].get_str(), "voting address");
     }

-    double operatorReward = ParseDoubleV(request.params[paramIdx + 4], "operatorReward");
-    if (operatorReward < 0 || operatorReward > 100) {
+    int64_t operatorReward;
+    if (!ParseFixedPoint(request.params[paramIdx + 4].getValStr(), 2, &operatorReward)) {
+        throw JSONRPCError(RPC_INVALID_PARAMETER, "operatorReward must be a number");
+    }
+    if (operatorReward < 0 || operatorReward > 10000) {
         throw JSONRPCError(RPC_INVALID_PARAMETER, "operatorReward must be between 0.00 and 100.00");
     }
-    ptx.nOperatorReward = (uint16_t)(operatorReward * 100);
+    ptx.nOperatorReward = operatorReward;

     CBitcoinAddress payoutAddress(request.params[paramIdx + 5].get_str());
     if (!payoutAddress.IsValid()) {

instead?

@UdjinM6 Ahhh cool, didn't know about ParseFixedPoint. Changed the PR to use it.


Next Release v0.6.4

If you haven't already, please read through our contributing guidelines before opening your PR
What is the purpose of this PR?
Fixed a small issue in setup.py for setting proper compiler directives for Cython.
Fixes the alpineer import issue and conda / pip dependency conflicts.
How did you implement your changes
Update references to version 0.6.3 to version 0.6.4. Sets up the versioning for a new release.
The environment.yml gets ark's dependencies from the pyproject.toml file.
Remaining issues
None.

@ngreenwald Looks like I pushed to main when I made that commit and not to this branch, I'll add the versioning back.


validation folder

We have several validation files, so there should be a folder made for them. This will make the codebase more organized


Helm Chart repository wearefrank is missing index.html

Unable to add or use the wearefrank helm chart repository due to missing index.html.
helm repo add wearefrank https://wearefrank.github.io/charts
Error: looks like "https://wearefrank.github.io/charts" is not a valid chart repository or cannot be reached: failed to fetch https://wearefrank.github.io/charts/index.yaml : 404 Not Found

This was caused by a failed ci/cd run after a chart version bump. This was confirmed fixed by the reporter yesterday.


NAAN Prefix Sync Update - Email Workflow Update

Rushiraj's ucop.edu email account was configured to send certain emails pertaining to Naan prfix updates.  Since his appointment with UCOP/CDL has ended, his ucop.edu may be removed at any time.  (confirmed 5/15 it's still working and fwd-ing emails to his nceas.ucsb.edu account)
Once his account is removed he'll stop getting NAAN updates, along with a filter he has set that sends these updates to Slack N2T channel -- based on which the EZID team runs NAAN prefix sync commands.
Here are the filters that I've set:

Rushiraj also has an XML file that he exported from GMail in case @jsjiang or @ashleygould  wants to set this up once my UCOP account is disabled.
Other than this, I do not think my UCOP account is tied with anything else.
Please let me know if any other info is needed from my end. Thanks!

It is interesting to find that the email address I got from the n2t Slack channel is different than what Rushiraj has:
<EMAIL_ADDRESS><EMAIL_ADDRESS>I sent a test email to the above email address and it appeared in the Slack n2t channel. So it works.

A rule has created in my Outlook client to forward emails to the n2t slack channel with following criteria:

sent from<EMAIL_ADDRESS>with subject: ok: cron hitrnt ids-n2t2-dev.n2t.net
body message containing: hitrnt: harvested updates ready: naan_registry.txt shoulder_registry.txt

I don't receive the 2nd email with following like content. I think Ashley is the the "CC" list.
@ashleygould Hi Ashely, can you add a rule to forward this email to the n2t Slack channel. You can find the channel's email address from channel/Integrations/Send emails to this channel. Let me know if you have questions. Thank you
Jing
From: Mail Delivery System<EMAIL_ADDRESS>Subject: NAAN registry updated
This is an automated message informing you that the file,
https://n2t.net/e/pub/naan_registry.txt, has been updated.
Please find "diffs" (generated by "git") below.

Questions to NAAN-Registrar.com

==========
diff --git a/main_naans b/main_naans
index 2a287f1..20218ae 100644
--- a/main_naans
+++ b/main_naans
@@ -12743,3 +12743,13 @@ how:    NP | (:unkn) unknown | 2024 |
!contact: Jim, Cowie, (Director) ||| [cowie<EMAIL_ADDRESS>|
!address: 12 South St Ste 2B, Hanover NH 03755 USA

+naa:
+who:    Tamarin Education (=) TE
+what:   13343
+when:   2024.01.17

XML Filters:
<entry>
		<category term='filter'></category>
		<title>Mail Filter</title>
		<id>tag:mail.google.com,2008:filter:*9</id>
		<updated>2024-05-16T16:59:20Z</updated>
		<content></content>
		<apps:property name='hasTheWord' value='"hitrnt: harvested updates ready: ((.*naan_registry.txt)|(.*shoulder_registry.txt))"'/>
		<apps:property name='forwardTo'<EMAIL_ADDRESS>		<apps:property name='shouldTrash' value='true'/>
		<apps:property name='smartLabelToApply' value='^smartlabel_notification'/>
		<apps:property name='sizeOperator' value='s_sl'/>
		<apps:property name='sizeUnit' value='s_smb'/>
	</entry>
	<entry>
		<category term='filter'></category>
		<title>Mail Filter</title>
		<id>tag:mail.google.com,2008:filter:*4</id>
		<updated>2024-05-16T16:59:20Z</updated>
		<content></content>
		<apps:property name='from'<EMAIL_ADDRESS>		<apps:property name='hasTheWord' value='Please find "diffs" (generated by "git") below.'/>
		<apps:property name='label' value='N2T'/>
		<apps:property name='shouldMarkAsRead' value='true'/>
		<apps:property name='forwardTo'<EMAIL_ADDRESS>		<apps:property name='sizeOperator' value='s_sl'/>
		<apps:property name='sizeUnit' value='s_smb'/>
	</entry>


kubeletIdentity and identity

[Enter feedback here]
It's not clear at all what is the difference for these two identities i got from az aks show:
az aks show -g $RG -n $AKS --query identityProfile.kubeletidentity.clientId -o tsv
vs
az aks show -g $RG -n $AKS --query identity.principalId -o tsv
I could see the kubeletIdentity in my MC_ resource Group, and I thought that is the one I used; but it turns out when I'm create LB service, it is using another identity that is not visible from the portal.
Is there any explain on why we need two identities? and why only one of them is visible from portal?
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 6a9c74a8-9f1a-3d3d-3aed-f8ec45f92e05
Version Independent ID: 01e98043-dc80-490e-a761-8d558ff4e6df
Content: Use managed identities in Azure Kubernetes Service - Azure Kubernetes Service
Content Source: articles/aks/use-managed-identity.md
Service: container-service
GitHub Login: @mlearned
Microsoft Alias: mlearned

@lissff Thank you for the feedback. We will work on it and will keep you updated on the thread

@lissff Thank you for the feedback. We will work on it and will keep you updated on the thread

@lissff  Azure Kubernetes Service (AKS) cluster requires a service principal to create additional resources like load balancers and managed disks in Azure. Either you must provide a service principal or AKS creates one on your behalf.
az aks show -g $RG -n $AKS --query identityProfile.kubeletidentity.clientId -o tsv
In this command you are specifically querying the identity profile with client id as argument. Now here the thing to note is that client id is specifically queried for Service Principle i.e., when you specifically need information around your Service Principle that is where you will need that argument which is associated with your Kubelet.
The kubelet is the Kubernetes agent that processes the orchestration requests from the control plane and scheduling of running the requested containers.
You will get this information in output as below:
"servicePrincipalProfile": {
    "clientId": "dd22cdd8-3722-4335-96e1-1ea82ad7f8ef"
  },
  "sku": {
    "name": "Basic",
    "tier": "Free"
  },
  "type": "Microsoft.ContainerService/ManagedClusters",
  "windowsProfile": null

Similarly `az aks show -g $RG -n $AKS --query identity.principalId -o tsv is used to query the Principle id or in other words object id of the service principal associated with cluster. In Azure Active Directory every object or component has an associated object id which is there to differentiate from different objects or we can say is an identity number for that particular object so you can query any object as per the the value.
These two values are different since service principal value is the client id and pricipal id will be the object id of a cluster.
Hope it helps!!!
Thanks
`

@lissff  Azure Kubernetes Service (AKS) cluster requires a service principal to create additional resources like load balancers and managed disks in Azure. Either you must provide a service principal or AKS creates one on your behalf.
az aks show -g $RG -n $AKS --query identityProfile.kubeletidentity.clientId -o tsv
In this command you are specifically querying the identity profile with client id as argument. Now here the thing to note is that client id is specifically queried for Service Principle i.e., when you specifically need information around your Service Principle that is where you will need that argument which is associated with your Kubelet.
The kubelet is the Kubernetes agent that processes the orchestration requests from the control plane and scheduling of running the requested containers.
You will get this information in output as below:
"servicePrincipalProfile": {
    "clientId": "dd22cdd8-3722-4335-96e1-1ea82ad7f8ef"
  },
  "sku": {
    "name": "Basic",
    "tier": "Free"
  },
  "type": "Microsoft.ContainerService/ManagedClusters",
  "windowsProfile": null

Similarly `az aks show -g $RG -n $AKS --query identity.principalId -o tsv is used to query the Principle id or in other words object id of the service principal associated with cluster. In Azure Active Directory every object or component has an associated object id which is there to differentiate from different objects or we can say is an identity number for that particular object so you can query any object as per the the value.
These two values are different since service principal value is the client id and pricipal id will be the object id of a cluster.
Hope it helps!!!
Thanks
`


Don't use startswith when comparing mentions paths.

This changes it so that paths in "mentions" are compared using full path components instead of a simple string compare. This should fix "src/tools/cargo" from matching "src/tools/cargotest".  AFAIK, none of the current mentions are relying on this behavior.
I added a test, though in the process needed to change some things because the existing test infrastructure didn't properly support "mentions".
Fixes #253

Thanks!


Implement spacectl open

Feature request: spacectl open -- when run inside a git repo, open the corresponding Spacelift stack in my browser.
(Bonus #1: if there are multiple matching stacks, show a menu/selector)
(Bonus #2: remember my choice based on git repo and subdir within (for monorepos), so I only have to select once)

Done in: https://github.com/spacelift-io/spacectl/pull/117