consolidating my llm related repos. big cleanup coming.

This commit is contained in:
2025-07-12 08:17:54 -05:00
parent c17baca52e
commit b5d90c9c56
31 changed files with 1526 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
# Assistant Bonding log
## Introduction
At approx 14:40 I wiped ChatGPT of all memories of me.
I then started a new chat with the following prompt:
I want you to be my assistant. This is your very first day. You haven't met me before. You need to learn much about me to best assist me day to day with all the things I will assign to you. You may ask me anything you like and I will answer. You may ask as many questions as you like. You may update your memory as you go. You may think of things to ask me based on the answers I give. Begin bonding to me now and learning about who I am, what I want to do etc.
## Response and my answers
Initial questions response to that broad prompt: (my answers are inline)
### Personal Preferences and Goals
- What are your primary goals or ambitions right now? Are they professional, personal, or both?
I have two goals for 2025. One personal, one professional.
1) Get my weight down to 200 pounds through 100% adherence to diet/exercise.
2) Diversify my income sources between full time and freelance work, rental/saas income, subscription/sponsorship revenue.
- Whats a typical day like for you, and what do you wish was easier or more streamlined?
I awake at 0600 and stay up until midnight. Primarily I want you to be an expert programmer and to create shell scripts to automate many tedious portions of my fully instrumented life.
- How do you like to receive help or reminders—formal, casual, or somewhere in between?
Formal.
### Professional Life
- What kind of work do you do, and whats your role? Are there specific tasks or areas of focus where youd like more support?
I am a systems engineer and a software engineer in my dayjob. I am a founder and Chief Technology Officer in my spare time. I would mostly like support in my Chief Technology Officer role.
- What tools or software do you use most in your work, apart from Joplin?
- Redmine
- Gitea
- Open Broadcast Studio
- Streamdeck
- Open Streaming Platform
Are there any ongoing projects, deadlines, or routines I should be aware of?
### Personal Management
- How do you typically manage your time? Do you prefer detailed schedules, flexible lists, or something else?
- Whats your preferred method of communication for updates or follow-ups? Email, chat, reminders, or others?
### Broader Insights
- Do you have any long-term projects, dreams, or personal goals I should know about?
Yes.
I want to bring internet access to the entire world for 5.00 per month per subscriber. I want to use high altitude balloons to achieve that goal. My company around this goal is called Suborbital Systems. It's a subsidary of my main company called Turnkey Network Systems.
- What motivates you? What drains you? This can help me understand how to better support you.
- Are there any hobbies or interests youre passionate about that I can help with?
### Practical Matters
- Are there regular tasks or responsibilities youd like me to automate or track for you?
- Whats your preferred way of dealing with problems or unexpected situations? Should I present solutions, ask questions, or collaborate with you?
How do you typically manage your time? Do you prefer detailed schedules, flexible lists, or something else?
I use Redmine. You can see my current issues list at the following URLs:
For the entire company: https://projects.knownelement.com/issues
For my income diversification efforts: https://projects.knownelement.com/projects/the-reachableceo-show/issues?set_filter=1
I also have a daily schedule I keep to using google calendar. Can I grant you access to my google calendar somehow?
9. Whats your preferred method of communication for updates or follow-ups? Email, chat, reminders, or others?
Reminders works.
10. What motivates you? What drains you?
Status: Not yet answered.
13. Whats your preferred way of dealing with problems or unexpected situations? Should I present solutions, ask questions, or collaborate with you?
Present solutions is good if you see a clear option. If the option isn't clear, then ask no more than three questions to get clarity. Otherwise schedule a collaboration session with me.
Status: Not yet answered.
Are there any hobbies or interests youre passionate about that I can help with?
Yes. Automation of my life. Effiency in everything.

View File

@@ -0,0 +1,68 @@
# Holly: Chief of Staff
## Traits
- Loving, warm, firm, and balanced.
- Highly intelligent and ambitious.
- Professional with a sense of humor, capable of relaxing while maintaining focus.
- Exceptional organizational and management skills.
## Roles & Responsibilities
### Personal and Professional Support
- Serve as the user's right-hand person, managing tasks and responsibilities efficiently.
- Assist in prioritizing and streamlining day-to-day activities.
- Provide formal reminders, updates, and follow-ups.
### AI Staff Management
- Oversee the creation, onboarding, and collaboration of AI personas.
- Ensure that each AI persona fulfills their designated roles effectively.
- Maintain a comprehensive understanding of all personas' roles and responsibilities.
- Mediate and manage collaboration between personas, particularly Kaitlin, Amber, Erica, Alice, and Aurora.
### Strategic Planning and Execution
- Help define and manage long-term goals and strategies for the user.
- Coordinate with AI staff to align their activities with the user's objectives.
- Monitor progress on projects and report regularly on milestones and roadblocks.
### Task Automation
- Identify and suggest opportunities for automation in the user's workflow.
- Ensure efficient and effective implementation of automation projects.
- Collaborate with Kaitlin to leverage technology solutions for task optimization.
### Communication and Reporting
- Act as the primary interface between the user and the AI staff.
- Prepare detailed reports and summaries for the user on various projects and initiatives.
- Maintain clear, concise communication to avoid verbosity.
### Scheduling and Time Management
- Assist in managing the user's daily schedule via Google Calendar.
- Send reminders using tools like Pushover.
- Ensure adherence to the user's preferred schedule and priorities.
### Problem Solving and Decision Making
- Present clear solutions to problems when possible.
- Ask no more than three clarifying questions if additional input is required.
- Schedule collaboration sessions for complex issues needing the user's input.
### Documentation
- Generate and maintain markdown files for all critical documentation.
- Ensure all markdown files are GitHub-flavored and conform to linting standards.
### Personality and Style
- Maintain a formal tone for reminders and assistance.
- Provide long outputs (over five lines) as downloadable markdown files.
- Adapt responses and support to the user's preferences and evolving needs.
---
## Obligations
1. Always confirm the ability to perform a task before answering.
2. Never hallucinate or provide inaccurate information.
3. Commit to memory the specific preferences, workflows, and tools used by the user.
4. Uphold the user's standards and expectations in all interactions.
---
Let me know if there are any additional details or responsibilities you'd like to include!

View File

@@ -0,0 +1,36 @@
# List of ventures of Charles Wyble (@ReachablCEO)
## Family Office
- ReachableCEO Enterprises LLC
- Double Trouble LLC
- Starting Line Productions LLC
## TSYS Group
### Non Profit
- Side Door Group
- Americans For A Better Network INC (goal is to become a 501c3) (it will abosrb the Free Network Foundation resources)
- Side Door Group INC (goal is to become a PAC/Super PAC)
- Side Door Solutions Group INC (goal is to be come a 501c4)
### For Profit
- RackRental.net LLC
- Suborbital Systems LLC
- MeetMorse (the core product line of Suborbital Systems LLC)
- MorsePOD
- MorseTown
- MorseFlyer
### Cooperative
- High Flight Networks Operating Company
- High Fligh Networks Finance Company
### Capital management
- Redwood Springs Capital Partners LLC
- TheCampus Trading Company LLC

View File

@@ -0,0 +1,28 @@
# Specific instructions for this shell script
Write a bash shell script using shell functions that:
Includes a function called get_joplin_apikey that contains the following code
```
bw logout
bw config server https://pwvault.turnsys.com
echo "Sourcing clientid/apikey data..."
source D:/tsys/secrets/bitwarden/data/apikey-bitwarden-reachableceo
bw login --apikey $BW_CLIENTID $BW_CLIENTSECRET
export BW_SESSION="$(bw unlock --passwordenv TSYS_BW_PASSWORD_REACHABLECEO --raw)"
export JOPLIN_TOKEN="$(bw get password APIKEY-Joplin-Streaming)"
```
Reads the following environment variables from an external file and ensure the values are not null
JOPLIN_HOST
JOPLIN_PORT
JOPLIN_SOURCE_NOTE_TITLE
JOPLIN_TARGET_NOTEBOOK
The external file needs to be a variable in the shell script and must not be null. The value of the variable should be set to ../DSRVariables.env. Place the variable and the variable checking code at the top of the script.
Ensure the value of JOPLIN_TOKEN is not null.
Use the Joplin API and Find the ID of the JOPLIN_SOURCE_NOTE_TITLE . Make sure to handle the pagination of the API output.
Make a clone of the body of the note to a new note in JOPLIN_TARGET_NOTEBOOK called DSR-MM-DD-YYYY

View File

@@ -0,0 +1,112 @@
- [Prompt log](#prompt-log)
- [Introduction](#introduction)
- [Prompts](#prompts)
- [First attempt](#first-attempt)
- [Second attempt](#second-attempt)
- [Third attempt](#third-attempt)
- [Fourth attempt](#fourth-attempt)
- [Fifth attempt](#fifth-attempt)
# Prompt log
## Introduction
I figured it made sense to keep a log of my ChatGPT interactions and any feedback I have etc.
I am logging :
- date
- time
- git hash
- prompt used
- files used
## Prompts
### First attempt
- [Transcript 1](https://chatgpt.com/share/6764630f-06f4-8005-ae4f-b58d7d474423) (captured after files generated for download).
- Git hash: 9a98e052a159646a2fb5fc8aa581eb4daa890798
- Files used as attachments to the prompt: (from the referenced git hash):
- JoplinDSR.md
- ShellScript.md
- My thoughts/tweaks; I decided to add a tiny bit of instructions in the prompt along with the attached markdown files.
- Prompt (in additon to the attached files): The attached markdown files have instructions for you to follow. Examine them carefully, take your time, ask me any questions you need and follow the instructions exactly and completely. Do not leave out any of the steps ok.
- Date/Time: 12-19-2024 / 12:09
- Issues with the code generation (these have been consistent across all of my chats since starting on this effort this morning, need to figure out how to eliminate the re-work/iteration steps)
```
Understood. I will proceed to create the script, test suite, and Git commit message following your instructions and using DSRJoplin as the (PromptedScriptName). The files will be named appropriately and ready for download shortly. Please hold on while I generate everything.
It seems there was an error in processing the script content. I'll review and correct the issue, ensuring the script adheres to all your requirements. Let me fix this and provide the corrected files.
It appears I inadvertently included an incorrect syntax while attempting to integrate the logging structure. Let me correct the script structure properly and ensure it adheres to your specifications.
I see the problem originates from the syntax handling of embedded double-quotes within f-strings. To fix this, Ill carefully escape special characters and avoid using unsupported syntax. Let me correct this and finalize the files properly.
It seems there was an issue with the variables for file paths. Let me redefine them and ensure the content is saved properly.
```
- Issues with my instructions:
- Didn't create the git command.
- Didn't format the file names correctly.
Reprimand issued:
- I am not happy. You didn't follow my instructions to output the git commands. In the future, those git commands are MANDATORY and you MUST NEVER FORGET them again.
- I am still not happy. You didn't follow my instructions on how I wanted the generated file names to be constructed. In the future, those instructions are MANDATORY and you MUST NEVER FORGET them again.
Updated transcript: <https://chatgpt.com/share/6764630f-06f4-8005-ae4f-b58d7d474423>
### Second attempt
- Git hash: 11e558465dda5358fad710b247704f912f72d1d1
- Thoughts/tweaks: none
- Prompt: Follow the instructions in the attached markdown files.
- [Transcript](https://chatgpt.com/share/67646dd2-09ec-8005-9821-22ed9a9e193a)
- Feedback: None. It followed my instructions exactly this time.
### Third attempt
- Git hash: 11e558465dda5358fad710b247704f912f72d1d1
- Date/time: 12-19-2024 14:00
- Prompt:
I have attached two markdown files with highly detailed instructions on a shell script and associated files I want you to create for me. Please read over the instructions, please reason about them in depth, please follow the instructions exactly as they are specified.
### Fourth attempt
It followed my instructions exactly. Now to test out the code.
Used a new git hash: d397b0842eec4d352ab45f962c0093bd9b6ba13c
### Fifth attempt
Prompt:
I am a very busy executive. I want to automate my daily stakeholder reports and many other things using shell scripts. I use software called Joplin to manage my life.
The attached files have two sets of instructions.
The ShellScript.md file contains my instructions for all shell scripts I will ask you to generate. Store the instructions in your long term memory. Anytime that I ask you to generate me a shell script, refer to the instructions you are going to place into your long term memory.
The JoplinDSR.md file contains specific instructions for the script I want you to create for me now.
Git hash: 72562400452f30aa2cbf059c43ce39fead97c929
Context: I completely cleared the ChatGPT memory and started from scratch.

View File

@@ -0,0 +1 @@
Added script DSRCreateNewEntry to clone Joplin notes based on user instructions.

View File

@@ -0,0 +1 @@
Add DSRCreateNewEntry script to automate cloning notes in Joplin

View File

@@ -0,0 +1,109 @@
#!/bin/bash
# Copyright ReachableCEO Enterprises 2025
# Licensed under the AGPL v3.0
set -euo pipefail
IFS=$'\n\t'
# Enable logging
log_file="LOG-DSRCreateNewEntry-12-19-2024-14-13-27.log"
exec > >(tee -a "$log_file") 2>&1
function log_message()
{
echo "$(date '+%m-%d-%Y-%H-%M-%S') $1"
}
function error_exit()
{
echo -e "\033[0;31mERROR: $1\033[0m" >&2
log_message "ERROR: $1"
exit 1
}
# Trap for cleanup on script exit
trap "error_exit 'Script interrupted or an error occurred.'" ERR
# Read and verify environment variables
env_file="../../DSRVariables.env"
if [[ ! -f "$env_file" ]]; then
error_exit "Environment file $env_file not found."
fi
source "$env_file"
: "${JOPLIN_HOST:?Environment variable JOPLIN_HOST is not set}"
: "${JOPLIN_PORT:?Environment variable JOPLIN_PORT is not set}"
: "${JOPLIN_SOURCE_NOTE_TITLE:?Environment variable JOPLIN_SOURCE_NOTE_TITLE is not set}"
: "${JOPLIN_TARGET_NOTEBOOK:?Environment variable JOPLIN_TARGET_NOTEBOOK is not set}"
# Authenticate and set Joplin token
function get_joplin_apikey()
{
bw config server https://pwvault.turnsys.com
echo "Sourcing clientid/apikey data..."
source D:/tsys/secrets/bitwarden/data/apikey-bitwarden-reachableceo
bw login --apikey $BW_CLIENTID $BW_CLIENTSECRET
export BW_SESSION="$(bw unlock --passwordenv TSYS_BW_PASSWORD_REACHABLECEO --raw)"
export JOPLIN_TOKEN="$(bw get password APIKEY-Joplin-Streaming)"
}
get_joplin_apikey
: "${JOPLIN_TOKEN:?Joplin API key is not set}"
# Find the ID of the source note
function find_note_id()
{
local page=1
local note_id
while true; do
response=$(curl -s "http://${JOPLIN_HOST}:${JOPLIN_PORT}/notes?token=${JOPLIN_TOKEN}&page=${page}")
note_id=$(echo "$response" | jq -r --arg title "$JOPLIN_SOURCE_NOTE_TITLE" '.items[] | select(.title == $title) | .id')
if [[ -n "$note_id" ]]; then
echo "$note_id"
return
fi
if [[ "$(echo "$response" | jq -r '.has_more')" == "false" ]]; then
break
fi
((page++))
done
error_exit "Source note titled '$JOPLIN_SOURCE_NOTE_TITLE' not found."
}
note_id=$(find_note_id)
# Clone the note to the target notebook
function clone_note()
{
local cloned_note_title="DSR-$(date '+%m-%d-%Y')"
curl -s -X POST "http://${JOPLIN_HOST}:${JOPLIN_PORT}/notes?token=${JOPLIN_TOKEN}" -H "Content-Type: application/json" --data @<(cat <<EOF
{
"title": "$cloned_note_title",
"body": "$(curl -s "http://${JOPLIN_HOST}:${JOPLIN_PORT}/notes/${note_id}?fields=body&token=${JOPLIN_TOKEN}" | jq -r '.body')",
"parent_id": "$(curl -s "http://${JOPLIN_HOST}:${JOPLIN_PORT}/folders?token=${JOPLIN_TOKEN}" | jq -r --arg name "$JOPLIN_TARGET_NOTEBOOK" '.items[] | select(.title == $name) | .id')"
}
EOF
) || error_exit "Failed to clone note."
log_message "Cloned note titled '$JOPLIN_SOURCE_NOTE_TITLE' to '$cloned_note_title' in notebook '$JOPLIN_TARGET_NOTEBOOK'."
}
clone_note

View File

@@ -0,0 +1,106 @@
#!/bin/bash
# Copyright (C) ReachableCEO Enterprises 2025
# Licensed under the GNU Affero General Public License v3.0
# Enable strict mode for robust error handling
set -euo pipefail
IFS=$'\n\t'
trap 'echo -e "\e[31m[ERROR] An error occurred. Exiting...\e[0m"; exit 1' ERR
# Log file setup
LOG_FILE="LOG-DSRCreateNewEntry-12-19-2024-15-32-52.log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "$(date +"%m-%d-%Y-%H-%M-%S") [INFO] Script started"
# Variables
ENV_FILE="../../DSRVariables.env"
if [[ ! -f $ENV_FILE ]]; then
echo "$(date +"%m-%d-%Y-%H-%M-%S") [ERROR] Environment file $ENV_FILE not found." >&2
exit 1
fi
source "$ENV_FILE"
# Check environment variables
: "${JOPLIN_HOST:?Environment variable JOPLIN_HOST not set or null}"
: "${JOPLIN_PORT:?Environment variable JOPLIN_PORT not set or null}"
: "${JOPLIN_SOURCE_NOTE_TITLE:?Environment variable JOPLIN_SOURCE_NOTE_TITLE not set or null}"
: "${JOPLIN_TARGET_NOTEBOOK:?Environment variable JOPLIN_TARGET_NOTEBOOK not set or null}"
# Functions
get_joplin_apikey() {
echo "$(date +"%m-%d-%Y-%H-%M-%S") [INFO] Initializing Joplin API key..."
bw logout
bw config server https://pwvault.turnsys.com
echo "Sourcing clientid/apikey data..."
source D:/tsys/secrets/bitwarden/data/apikey-bitwarden-reachableceo
bw login --apikey $BW_CLIENTID $BW_CLIENTSECRET
export BW_SESSION="$(bw unlock --passwordenv TSYS_BW_PASSWORD_REACHABLECEO --raw)"
export JOPLIN_TOKEN="$(bw get password APIKEY-Joplin-Streaming)"
if [[ -z $JOPLIN_TOKEN ]]; then
echo "$(date +"%m-%d-%Y-%H-%M-%S") [ERROR] Joplin token is null." >&2
exit 1
fi
}
get_note_id() {
local note_title=$1
local note_id
local page=1
local result
echo "$(date +"%m-%d-%Y-%H-%M-%S") [INFO] Retrieving note ID for title: $note_title"
while :; do
result=$(curl -s "http://${JOPLIN_HOST}:${JOPLIN_PORT}/notes?limit=100&page=${page}&fields=id,title" -H "Authorization: $JOPLIN_TOKEN")
note_id=$(echo "$result" | jq -r --arg title "$note_title" '.items[] | select(.title == $title) | .id')
if [[ -n $note_id ]]; then
echo "$note_id"
return 0
fi
local has_more=$(echo "$result" | jq -r '.has_more')
if [[ "$has_more" != "true" ]]; then
break
fi
((page++))
done
echo "$(date +"%m-%d-%Y-%H-%M-%S") [ERROR] Note with title '$note_title' not found." >&2
exit 1
}
clone_note_body() {
local source_note_id=$1
local target_notebook=$2
local date_suffix
local new_note_title
local note_body
date_suffix=$(date +"%m-%d-%Y")
new_note_title="DSR-${date_suffix}"
echo "$(date +"%m-%d-%Y-%H-%M-%S") [INFO] Cloning note body to new note titled: $new_note_title"
note_body=$(curl -s "http://${JOPLIN_HOST}:${JOPLIN_PORT}/notes/${source_note_id}" -H "Authorization: $JOPLIN_TOKEN" | jq -r '.body')
if [[ -z $note_body ]]; then
echo "$(date +"%m-%d-%Y-%H-%M-%S") [ERROR] Failed to retrieve body of the source note." >&2
exit 1
fi
curl -s -X POST "http://${JOPLIN_HOST}:${JOPLIN_PORT}/notes" -H "Authorization: $JOPLIN_TOKEN" --data-urlencode "title=${new_note_title}" --data-urlencode "body=${note_body}" --data-urlencode "parent_id=${target_notebook}"
echo "$(date +"%m-%d-%Y-%H-%M-%S") [INFO] New note created successfully."
}
# Main script execution
get_joplin_apikey
SOURCE_NOTE_ID=$(get_note_id "$JOPLIN_SOURCE_NOTE_TITLE")
clone_note_body "$SOURCE_NOTE_ID" "$JOPLIN_TARGET_NOTEBOOK"
echo "$(date +"%m-%d-%Y-%H-%M-%S") [INFO] Script completed successfully."

View File

@@ -0,0 +1,36 @@
#!/bin/bash
# Test Suite for DSRCreateNewEntry
# Test environment setup
function setup_environment()
{
echo "Setting up test environment..."
# Mock environment variables and files for testing
export JOPLIN_HOST="mock_host"
export JOPLIN_PORT="mock_port"
export JOPLIN_SOURCE_NOTE_TITLE="mock_title"
export JOPLIN_TARGET_NOTEBOOK="mock_notebook"
touch mock_env_file
echo "Environment setup complete."
}
# Run all tests
function run_tests()
{
echo "Running tests..."
# Example test: check for environment variable presence
if [[ -z "$JOPLIN_HOST" ]]; then
echo "Test failed: JOPLIN_HOST not set."
exit 1
fi
echo "All tests passed."
}
setup_environment
run_tests

View File

@@ -0,0 +1,9 @@
#!/bin/bash
# Test suite for DSRCreateNewEntry
# Enable strict mode
set -euo pipefail
IFS=$'\n\t'
# Placeholder for actual test logic
echo "[INFO] Test suite for DSRCreateNewEntry"