77 lines
2.2 KiB
Markdown
77 lines
2.2 KiB
Markdown
/* ngn-agent
|
|
opinionated platform engineering agent
|
|
1. multi-project management via sessions. sessions are isolated, durable and resumable.
|
|
2. gateway via telegram
|
|
3. work parallel with git worktree
|
|
4. self-improving skills -> long term memory, auto skills (hermes?)
|
|
5. self-researching, learn facts, self-documenting (read-only from infra always allowed) -> long term memory, auto skills
|
|
6. reporting via jira, confluence, gateway (telegram, teams)
|
|
7. minimal deps, repeatable setup
|
|
*/
|
|
|
|
// Main skill: Platform Dev Workflows
|
|
// Entrypoint
|
|
|
|
---
|
|
// session loads workspace
|
|
struct workspace {
|
|
git_repos = [] // git repos associated with this workspace
|
|
jira = [] // jira tickets
|
|
documentation = [] // confluence url or files under a repo url
|
|
}
|
|
|
|
|
|
// sesion has it's own worktree, work in diff branch
|
|
func session() -> session {
|
|
if first_chat {
|
|
if prev_sessions = previous_similar_session_exists? {
|
|
print("similar session found for this task, load/continue?")
|
|
print(prev_sessions)
|
|
if (load) {
|
|
return; // do nothing, user will resume previous sessions ide
|
|
}
|
|
}
|
|
}
|
|
// start new session
|
|
wkspc = new_workspace(DEFAULT_REPOS)
|
|
// create a new jira ticket for this session
|
|
wkspc.jira = create_jira?()
|
|
// load documentation?
|
|
wkspc.documentation = load_documentation?()
|
|
|
|
// regular AI code/agent sessions
|
|
// checkpoint everytime mutate change
|
|
// create branch, create PR, invoke tool calls (aws, terraform, kubectl; all read only are approved)
|
|
// aws sso login is permitted
|
|
// memory read/write if anything needs to be saved in long-term memory
|
|
|
|
// update documents and jira for milestone and progress
|
|
update_documentation()
|
|
add_jira_comment()
|
|
|
|
}
|
|
|
|
func daily_report() {
|
|
for s in all_sessions() {
|
|
if updated_past_day(s) {
|
|
add_jira_comment()
|
|
update_jira?()
|
|
summary_today = summary_today + updated_past_day(s, gen_summary=true)
|
|
}
|
|
if is_stale(s) {
|
|
stale_reminder = stale_reminder + summarize(s)
|
|
}
|
|
}
|
|
send_via_gateway(summary_today)
|
|
send_via_gateway(stale_reminder)
|
|
}
|
|
|
|
func daily_cleanup() {
|
|
for s in all_sessions() {
|
|
if inactive(s) || s.last_updated > 30d {
|
|
// write to db as archived, not resumable, only history are viewable
|
|
archive(s)
|
|
}
|
|
}
|
|
}
|